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>
26 lines
902 B
TypeScript
26 lines
902 B
TypeScript
import { Separator, type Theme } from '@inquirer/core';
|
|
import type { PartialDeep } from '@inquirer/type';
|
|
type Key = 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z' | '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9';
|
|
type Choice<Value> = {
|
|
key: Key;
|
|
value: Value;
|
|
} | {
|
|
key: Key;
|
|
name: string;
|
|
value: Value;
|
|
};
|
|
declare const _default: <Value>(config: {
|
|
message: string;
|
|
choices: readonly {
|
|
key: Key;
|
|
name: string;
|
|
}[] | readonly (Separator | Choice<Value>)[];
|
|
default?: (Key | "h") | undefined;
|
|
expanded?: boolean | undefined;
|
|
theme?: PartialDeep<Theme> | undefined;
|
|
}, context?: import("@inquirer/type").Context) => Promise<Value> & {
|
|
cancel: () => void;
|
|
};
|
|
export default _default;
|
|
export { Separator } from '@inquirer/core';
|