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>
192 lines
4.9 KiB
TypeScript
192 lines
4.9 KiB
TypeScript
import { EventEmitter } from 'events';
|
|
|
|
interface OptionConfig {
|
|
default?: any;
|
|
type?: any[];
|
|
}
|
|
declare class Option {
|
|
rawName: string;
|
|
description: string;
|
|
/** Option name */
|
|
name: string;
|
|
/** Option name and aliases */
|
|
names: string[];
|
|
isBoolean?: boolean;
|
|
required?: boolean;
|
|
config: OptionConfig;
|
|
negated: boolean;
|
|
constructor(rawName: string, description: string, config?: OptionConfig);
|
|
}
|
|
|
|
interface CommandArg {
|
|
required: boolean;
|
|
value: string;
|
|
variadic: boolean;
|
|
}
|
|
interface HelpSection {
|
|
title?: string;
|
|
body: string;
|
|
}
|
|
interface CommandConfig {
|
|
allowUnknownOptions?: boolean;
|
|
ignoreOptionDefaultValue?: boolean;
|
|
}
|
|
declare type HelpCallback = (sections: HelpSection[]) => void | HelpSection[];
|
|
declare type CommandExample = ((bin: string) => string) | string;
|
|
declare class Command {
|
|
rawName: string;
|
|
description: string;
|
|
config: CommandConfig;
|
|
cli: CAC;
|
|
options: Option[];
|
|
aliasNames: string[];
|
|
name: string;
|
|
args: CommandArg[];
|
|
commandAction?: (...args: any[]) => any;
|
|
usageText?: string;
|
|
versionNumber?: string;
|
|
examples: CommandExample[];
|
|
helpCallback?: HelpCallback;
|
|
globalCommand?: GlobalCommand;
|
|
constructor(rawName: string, description: string, config: CommandConfig, cli: CAC);
|
|
usage(text: string): this;
|
|
allowUnknownOptions(): this;
|
|
ignoreOptionDefaultValue(): this;
|
|
version(version: string, customFlags?: string): this;
|
|
example(example: CommandExample): this;
|
|
/**
|
|
* Add a option for this command
|
|
* @param rawName Raw option name(s)
|
|
* @param description Option description
|
|
* @param config Option config
|
|
*/
|
|
option(rawName: string, description: string, config?: OptionConfig): this;
|
|
alias(name: string): this;
|
|
action(callback: (...args: any[]) => any): this;
|
|
/**
|
|
* Check if a command name is matched by this command
|
|
* @param name Command name
|
|
*/
|
|
isMatched(name: string): boolean;
|
|
get isDefaultCommand(): boolean;
|
|
get isGlobalCommand(): boolean;
|
|
/**
|
|
* Check if an option is registered in this command
|
|
* @param name Option name
|
|
*/
|
|
hasOption(name: string): Option | undefined;
|
|
outputHelp(): void;
|
|
outputVersion(): void;
|
|
checkRequiredArgs(): void;
|
|
/**
|
|
* Check if the parsed options contain any unknown options
|
|
*
|
|
* Exit and output error when true
|
|
*/
|
|
checkUnknownOptions(): void;
|
|
/**
|
|
* Check if the required string-type options exist
|
|
*/
|
|
checkOptionValue(): void;
|
|
}
|
|
declare class GlobalCommand extends Command {
|
|
constructor(cli: CAC);
|
|
}
|
|
|
|
interface ParsedArgv {
|
|
args: ReadonlyArray<string>;
|
|
options: {
|
|
[k: string]: any;
|
|
};
|
|
}
|
|
declare class CAC extends EventEmitter {
|
|
/** The program name to display in help and version message */
|
|
name: string;
|
|
commands: Command[];
|
|
globalCommand: GlobalCommand;
|
|
matchedCommand?: Command;
|
|
matchedCommandName?: string;
|
|
/**
|
|
* Raw CLI arguments
|
|
*/
|
|
rawArgs: string[];
|
|
/**
|
|
* Parsed CLI arguments
|
|
*/
|
|
args: ParsedArgv['args'];
|
|
/**
|
|
* Parsed CLI options, camelCased
|
|
*/
|
|
options: ParsedArgv['options'];
|
|
showHelpOnExit?: boolean;
|
|
showVersionOnExit?: boolean;
|
|
/**
|
|
* @param name The program name to display in help and version message
|
|
*/
|
|
constructor(name?: string);
|
|
/**
|
|
* Add a global usage text.
|
|
*
|
|
* This is not used by sub-commands.
|
|
*/
|
|
usage(text: string): this;
|
|
/**
|
|
* Add a sub-command
|
|
*/
|
|
command(rawName: string, description?: string, config?: CommandConfig): Command;
|
|
/**
|
|
* Add a global CLI option.
|
|
*
|
|
* Which is also applied to sub-commands.
|
|
*/
|
|
option(rawName: string, description: string, config?: OptionConfig): this;
|
|
/**
|
|
* Show help message when `-h, --help` flags appear.
|
|
*
|
|
*/
|
|
help(callback?: HelpCallback): this;
|
|
/**
|
|
* Show version number when `-v, --version` flags appear.
|
|
*
|
|
*/
|
|
version(version: string, customFlags?: string): this;
|
|
/**
|
|
* Add a global example.
|
|
*
|
|
* This example added here will not be used by sub-commands.
|
|
*/
|
|
example(example: CommandExample): this;
|
|
/**
|
|
* Output the corresponding help message
|
|
* When a sub-command is matched, output the help message for the command
|
|
* Otherwise output the global one.
|
|
*
|
|
*/
|
|
outputHelp(): void;
|
|
/**
|
|
* Output the version number.
|
|
*
|
|
*/
|
|
outputVersion(): void;
|
|
private setParsedInfo;
|
|
unsetMatchedCommand(): void;
|
|
/**
|
|
* Parse argv
|
|
*/
|
|
parse(argv?: string[], {
|
|
/** Whether to run the action for matched command */
|
|
run, }?: {
|
|
run?: boolean | undefined;
|
|
}): ParsedArgv;
|
|
private mri;
|
|
runMatchedCommand(): any;
|
|
}
|
|
|
|
/**
|
|
* @param name The program name to display in help and version message
|
|
*/
|
|
declare const cac: (name?: string) => CAC;
|
|
|
|
export default cac;
|
|
export { CAC, Command, cac };
|