feat: initial implementation of TFTSR IT Triage & RCA application
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>
2026-03-15 03:36:25 +00:00
|
|
|
@tailwind base;
|
|
|
|
|
@tailwind components;
|
|
|
|
|
@tailwind utilities;
|
|
|
|
|
|
|
|
|
|
@layer base {
|
|
|
|
|
:root {
|
|
|
|
|
--background: 0 0% 100%;
|
|
|
|
|
--foreground: 222.2 84% 4.9%;
|
|
|
|
|
--card: 0 0% 100%;
|
|
|
|
|
--card-foreground: 222.2 84% 4.9%;
|
|
|
|
|
--popover: 0 0% 100%;
|
|
|
|
|
--popover-foreground: 222.2 84% 4.9%;
|
|
|
|
|
--primary: 222.2 47.4% 11.2%;
|
|
|
|
|
--primary-foreground: 210 40% 98%;
|
|
|
|
|
--secondary: 210 40% 96.1%;
|
|
|
|
|
--secondary-foreground: 222.2 47.4% 11.2%;
|
|
|
|
|
--muted: 210 40% 96.1%;
|
|
|
|
|
--muted-foreground: 215.4 16.3% 46.9%;
|
|
|
|
|
--accent: 210 40% 96.1%;
|
|
|
|
|
--accent-foreground: 222.2 47.4% 11.2%;
|
|
|
|
|
--destructive: 0 84.2% 60.2%;
|
|
|
|
|
--destructive-foreground: 210 40% 98%;
|
|
|
|
|
--border: 214.3 31.8% 91.4%;
|
|
|
|
|
--input: 214.3 31.8% 91.4%;
|
|
|
|
|
--ring: 222.2 84% 4.9%;
|
|
|
|
|
--radius: 0.5rem;
|
|
|
|
|
}
|
|
|
|
|
.dark {
|
|
|
|
|
--background: 222.2 84% 4.9%;
|
|
|
|
|
--foreground: 210 40% 98%;
|
|
|
|
|
--card: 222.2 84% 4.9%;
|
|
|
|
|
--card-foreground: 210 40% 98%;
|
|
|
|
|
--popover: 222.2 84% 4.9%;
|
|
|
|
|
--popover-foreground: 210 40% 98%;
|
|
|
|
|
--primary: 210 40% 98%;
|
|
|
|
|
--primary-foreground: 222.2 47.4% 11.2%;
|
|
|
|
|
--secondary: 217.2 32.6% 17.5%;
|
|
|
|
|
--secondary-foreground: 210 40% 98%;
|
|
|
|
|
--muted: 217.2 32.6% 17.5%;
|
|
|
|
|
--muted-foreground: 215 20.2% 65.1%;
|
|
|
|
|
--accent: 217.2 32.6% 17.5%;
|
|
|
|
|
--accent-foreground: 210 40% 98%;
|
|
|
|
|
--destructive: 0 62.8% 30.6%;
|
|
|
|
|
--destructive-foreground: 210 40% 98%;
|
|
|
|
|
--border: 217.2 32.6% 17.5%;
|
|
|
|
|
--input: 217.2 32.6% 17.5%;
|
|
|
|
|
--ring: 212.7 26.8% 83.9%;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@layer base {
|
|
|
|
|
* { @apply border-border; }
|
|
|
|
|
body { @apply bg-background text-foreground; }
|
2026-03-30 02:14:28 +00:00
|
|
|
|
|
|
|
|
/* Prevent WebKit/GTK from overriding form control colors with system theme */
|
2026-03-30 20:52:43 +00:00
|
|
|
input, textarea, select {
|
2026-03-30 02:14:28 +00:00
|
|
|
color: hsl(var(--foreground));
|
|
|
|
|
background-color: hsl(var(--background));
|
|
|
|
|
-webkit-text-fill-color: hsl(var(--foreground));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
input::placeholder, textarea::placeholder {
|
|
|
|
|
color: hsl(var(--muted-foreground));
|
|
|
|
|
-webkit-text-fill-color: hsl(var(--muted-foreground));
|
|
|
|
|
opacity: 1;
|
|
|
|
|
}
|
feat: initial implementation of TFTSR IT Triage & RCA application
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>
2026-03-15 03:36:25 +00:00
|
|
|
}
|
2026-03-30 02:14:28 +00:00
|
|
|
|
|
|
|
|
/* Tell WebKit which color scheme is active so system UI elements match */
|
|
|
|
|
:root { color-scheme: light; }
|
|
|
|
|
.dark { color-scheme: dark; }
|