Implements Phases 1-8 of the TFTSR implementation plan. Rust backend (Tauri 2.x, src-tauri/): - Multi-provider AI: OpenAI-compatible, Anthropic, Gemini, Mistral, Ollama - PII detection engine: 11 regex patterns with overlap resolution - SQLCipher AES-256 encrypted database with 10 versioned migrations - 28 Tauri IPC commands for triage, analysis, document, and system ops - Ollama: hardware probe, model recommendations, pull/delete with events - RCA and blameless post-mortem Markdown document generators - PDF export via printpdf - Audit log: SHA-256 hash of every external data send - Integration stubs for Confluence, ServiceNow, Azure DevOps (v0.2) Frontend (React 18 + TypeScript + Vite, src/): - 9 pages: full triage workflow NewIssue→LogUpload→Triage→Resolution→RCA→Postmortem→History+Settings - 7 components: ChatWindow, TriageProgress, PiiDiffViewer, DocEditor, HardwareReport, ModelSelector, UI primitives - 3 Zustand stores: session, settings (persisted), history - Type-safe tauriCommands.ts matching Rust backend types exactly - 8 IT domain system prompts (Linux, Windows, Network, K8s, DB, Virt, HW, Obs) DevOps: - .woodpecker/test.yml: rustfmt, clippy, cargo test, tsc, vitest on every push - .woodpecker/release.yml: linux/amd64 + linux/arm64 builds, Gogs release upload Verified: - cargo check: zero errors - tsc --noEmit: zero errors - vitest run: 13/13 unit tests passing Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
118 lines
3.1 KiB
TypeScript
118 lines
3.1 KiB
TypeScript
export interface ReadableStreamDefaultReader {
|
|
readonly closed: Promise<void>
|
|
|
|
read(): Promise<{ value: unknown; done: boolean }>
|
|
releaseLock(): void
|
|
cancel(reason?: unknown): Promise<void>
|
|
}
|
|
|
|
export class ReadableStreamDefaultReader {
|
|
constructor(stream: ReadableStream)
|
|
}
|
|
|
|
export interface ReadableStreamDefaultController {
|
|
readonly desiredSize: number
|
|
|
|
enqueue(data: unknown): void
|
|
close(): void
|
|
error(error?: unknown): void
|
|
}
|
|
|
|
export class ReadableStreamDefaultController {
|
|
constructor(stream: ReadableStream)
|
|
}
|
|
|
|
export interface UnderlyingSource<S extends ReadableStream = ReadableStream> {
|
|
start?(this: S, controller: ReadableStreamDefaultController): void
|
|
pull?(this: S, controller: ReadableStreamDefaultController): void
|
|
cancel?(this: S, reason?: unknown): void
|
|
}
|
|
|
|
export interface CustomQueuingStrategy {
|
|
highWaterMark?: number
|
|
size?: (chunk: unknown) => number
|
|
}
|
|
|
|
export interface ReadableStream extends AsyncIterable<unknown> {
|
|
readonly locked: boolean
|
|
|
|
getReader(): ReadableStreamDefaultReader
|
|
cancel(reason?: unknown): Promise<void>
|
|
tee(): [ReadableStream, ReadableStream]
|
|
pipeTo(destination: WritableStream): Promise<void>
|
|
}
|
|
|
|
export class ReadableStream {
|
|
constructor(underlyingSource?: UnderlyingSource, queuingStrategy?: CustomQueuingStrategy)
|
|
|
|
static from(iterable: unknown | unknown[] | AsyncIterable<unknown>): ReadableStream
|
|
}
|
|
|
|
export interface QueuingStrategyOptions {
|
|
highWaterMark?: number
|
|
}
|
|
|
|
interface QueuingStrategy {
|
|
readonly highWaterMark: number
|
|
|
|
size(chunk: unknown): number
|
|
}
|
|
|
|
declare class QueuingStrategy {
|
|
constructor(opts?: QueuingStrategyOptions)
|
|
}
|
|
|
|
export { type QueuingStrategy }
|
|
|
|
export class CountQueuingStrategy extends QueuingStrategy {}
|
|
|
|
export class ByteLengthQueuingStrategy extends QueuingStrategy {}
|
|
|
|
export function isReadableStream(value: unknown): value is ReadableStream
|
|
|
|
export function isReadableStreamDisturbed(stream: ReadableStream): boolean
|
|
|
|
export interface WritableStreamDefaultWriter {
|
|
readonly desiredSize: number
|
|
readonly closed: Promise<void>
|
|
readonly ready: Promise<void>
|
|
|
|
write(chunk: unknown): Promise<void>
|
|
releaseLock(): void
|
|
close(): Promise<void>
|
|
abort(reason?: unknown): Promise<void>
|
|
}
|
|
|
|
export class WritableStreamDefaultWriter {
|
|
constructor(stream: WritableStream)
|
|
}
|
|
|
|
export interface WritableStreamDefaultController {
|
|
error(err?: unknown): void
|
|
}
|
|
|
|
export class WritableStreamDefaultController {
|
|
constructor(stream: WritableStream)
|
|
}
|
|
|
|
export interface UnderlyingSink<S extends WritableStream = WritableStream> {
|
|
start?(this: S, controller: WritableStreamDefaultController): void
|
|
write?(this: S, chunk: unknown, controller: WritableStreamDefaultController): void
|
|
close?(this: S): void
|
|
abort?(this: S, reason?: unknown): void
|
|
}
|
|
|
|
export interface WritableStream extends AsyncIterable<unknown> {
|
|
readonly locked: boolean
|
|
|
|
getWriter(): WritableStreamDefaultWriter
|
|
abort(reason?: unknown): Promise<void>
|
|
close(): Promise<void>
|
|
}
|
|
|
|
export class WritableStream {
|
|
constructor(underlyingSink?: UnderlyingSink, queuingStrategy?: CustomQueuingStrategy)
|
|
}
|
|
|
|
export function isWritableStream(value: unknown): value is WritableStream
|