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>
50 lines
1.6 KiB
JavaScript
50 lines
1.6 KiB
JavaScript
module.exports = {
|
|
'assign': require('./assign'),
|
|
'assignIn': require('./assignIn'),
|
|
'assignInWith': require('./assignInWith'),
|
|
'assignWith': require('./assignWith'),
|
|
'at': require('./at'),
|
|
'create': require('./create'),
|
|
'defaults': require('./defaults'),
|
|
'defaultsDeep': require('./defaultsDeep'),
|
|
'entries': require('./entries'),
|
|
'entriesIn': require('./entriesIn'),
|
|
'extend': require('./extend'),
|
|
'extendWith': require('./extendWith'),
|
|
'findKey': require('./findKey'),
|
|
'findLastKey': require('./findLastKey'),
|
|
'forIn': require('./forIn'),
|
|
'forInRight': require('./forInRight'),
|
|
'forOwn': require('./forOwn'),
|
|
'forOwnRight': require('./forOwnRight'),
|
|
'functions': require('./functions'),
|
|
'functionsIn': require('./functionsIn'),
|
|
'get': require('./get'),
|
|
'has': require('./has'),
|
|
'hasIn': require('./hasIn'),
|
|
'invert': require('./invert'),
|
|
'invertBy': require('./invertBy'),
|
|
'invoke': require('./invoke'),
|
|
'keys': require('./keys'),
|
|
'keysIn': require('./keysIn'),
|
|
'mapKeys': require('./mapKeys'),
|
|
'mapValues': require('./mapValues'),
|
|
'merge': require('./merge'),
|
|
'mergeWith': require('./mergeWith'),
|
|
'omit': require('./omit'),
|
|
'omitBy': require('./omitBy'),
|
|
'pick': require('./pick'),
|
|
'pickBy': require('./pickBy'),
|
|
'result': require('./result'),
|
|
'set': require('./set'),
|
|
'setWith': require('./setWith'),
|
|
'toPairs': require('./toPairs'),
|
|
'toPairsIn': require('./toPairsIn'),
|
|
'transform': require('./transform'),
|
|
'unset': require('./unset'),
|
|
'update': require('./update'),
|
|
'updateWith': require('./updateWith'),
|
|
'values': require('./values'),
|
|
'valuesIn': require('./valuesIn')
|
|
};
|