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>
85 lines
2.6 KiB
TypeScript
85 lines
2.6 KiB
TypeScript
/**
|
|
* Wrap a function or class to show a deprecation message when first called.
|
|
*
|
|
* > 👉 **Important**: only shows a message when the `development` condition is
|
|
* > used, does nothing in production.
|
|
*
|
|
* When the resulting wrapped `fn` is called, emits a warning once to
|
|
* `console.error` (`stderr`).
|
|
* If a code is given, one warning message will be emitted in total per code.
|
|
*
|
|
* @template {Function} T
|
|
* Function or class kind.
|
|
* @param {T} fn
|
|
* Function or class.
|
|
* @param {string} message
|
|
* Message explaining deprecation.
|
|
* @param {string | null | undefined} [code]
|
|
* Deprecation identifier (optional); deprecation messages will be generated
|
|
* only once per code.
|
|
* @returns {T}
|
|
* Wrapped `fn`.
|
|
*/
|
|
export function deprecate<T extends Function>(
|
|
fn: T,
|
|
message: string,
|
|
code?: string | null | undefined
|
|
): T
|
|
/**
|
|
* Assert deep strict equivalence.
|
|
*
|
|
* > 👉 **Important**: only asserts when the `development` condition is used,
|
|
* > does nothing in production.
|
|
*
|
|
* @template {unknown} T
|
|
* Expected kind.
|
|
* @param {unknown} actual
|
|
* Value.
|
|
* @param {T} expected
|
|
* Baseline.
|
|
* @param {Error | string | null | undefined} [message]
|
|
* Message for assertion error (default: `'Expected values to be deeply equal'`).
|
|
* @returns {asserts actual is T}
|
|
* Nothing; throws when `actual` is not deep strict equal to `expected`.
|
|
* @throws {AssertionError}
|
|
* Throws when `actual` is not deep strict equal to `expected`.
|
|
*/
|
|
export function equal<T extends unknown>(
|
|
actual: unknown,
|
|
expected: T,
|
|
message?: Error | string | null | undefined
|
|
): asserts actual is T
|
|
/**
|
|
* Assert if `value` is truthy.
|
|
*
|
|
* > 👉 **Important**: only asserts when the `development` condition is used,
|
|
* > does nothing in production.
|
|
*
|
|
* @param {unknown} value
|
|
* Value to assert.
|
|
* @param {Error | string | null | undefined} [message]
|
|
* Message for assertion error (default: `'Expected value to be truthy'`).
|
|
* @returns {asserts value}
|
|
* Nothing; throws when `value` is falsey.
|
|
* @throws {AssertionError}
|
|
* Throws when `value` is falsey.
|
|
*/
|
|
export function ok(
|
|
value: unknown,
|
|
message?: Error | string | null | undefined
|
|
): asserts value
|
|
/**
|
|
* Assert that a code path never happens.
|
|
*
|
|
* > 👉 **Important**: only asserts when the `development` condition is used,
|
|
* > does nothing in production.
|
|
*
|
|
* @param {Error | string | null | undefined} [message]
|
|
* Message for assertion error (default: `'Unreachable'`).
|
|
* @returns {never}
|
|
* Nothing; always throws.
|
|
* @throws {AssertionError}
|
|
* Throws when `value` is falsey.
|
|
*/
|
|
export function unreachable(message?: Error | string | null | undefined): never
|