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>
58 lines
1.9 KiB
TypeScript
58 lines
1.9 KiB
TypeScript
import { Separator, type Theme, type Keybinding } from '@inquirer/core';
|
|
import type { PartialDeep } from '@inquirer/type';
|
|
type CheckboxTheme = {
|
|
icon: {
|
|
checked: string;
|
|
unchecked: string;
|
|
cursor: string;
|
|
};
|
|
style: {
|
|
disabledChoice: (text: string) => string;
|
|
renderSelectedChoices: <T>(selectedChoices: ReadonlyArray<NormalizedChoice<T>>, allChoices: ReadonlyArray<NormalizedChoice<T> | Separator>) => string;
|
|
description: (text: string) => string;
|
|
keysHelpTip: (keys: [key: string, action: string][]) => string | undefined;
|
|
};
|
|
/** @deprecated Use theme.style.keysHelpTip instead */
|
|
helpMode: 'always' | 'never' | 'auto';
|
|
keybindings: ReadonlyArray<Keybinding>;
|
|
};
|
|
type CheckboxShortcuts = {
|
|
all?: string | null;
|
|
invert?: string | null;
|
|
};
|
|
type Choice<Value> = {
|
|
value: Value;
|
|
name?: string;
|
|
checkedName?: string;
|
|
description?: string;
|
|
short?: string;
|
|
disabled?: boolean | string;
|
|
checked?: boolean;
|
|
type?: never;
|
|
};
|
|
type NormalizedChoice<Value> = {
|
|
value: Value;
|
|
name: string;
|
|
checkedName: string;
|
|
description?: string;
|
|
short: string;
|
|
disabled: boolean | string;
|
|
checked: boolean;
|
|
};
|
|
declare const _default: <Value>(config: {
|
|
message: string;
|
|
prefix?: string | undefined;
|
|
pageSize?: number | undefined;
|
|
instructions?: string | boolean | undefined;
|
|
choices: readonly (string | Separator)[] | readonly (Separator | Choice<Value>)[];
|
|
loop?: boolean | undefined;
|
|
required?: boolean | undefined;
|
|
validate?: ((choices: readonly NormalizedChoice<Value>[]) => boolean | string | Promise<string | boolean>) | undefined;
|
|
theme?: PartialDeep<Theme<CheckboxTheme>> | undefined;
|
|
shortcuts?: CheckboxShortcuts | undefined;
|
|
}, context?: import("@inquirer/type").Context) => Promise<Value[]> & {
|
|
cancel: () => void;
|
|
};
|
|
export default _default;
|
|
export { Separator } from '@inquirer/core';
|