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>
106 lines
2.0 KiB
JSON
106 lines
2.0 KiB
JSON
{
|
|
"name": "execa",
|
|
"version": "9.6.1",
|
|
"description": "Process execution for humans",
|
|
"license": "MIT",
|
|
"repository": "sindresorhus/execa",
|
|
"funding": "https://github.com/sindresorhus/execa?sponsor=1",
|
|
"author": {
|
|
"name": "Sindre Sorhus",
|
|
"email": "sindresorhus@gmail.com",
|
|
"url": "https://sindresorhus.com"
|
|
},
|
|
"type": "module",
|
|
"exports": {
|
|
"types": "./index.d.ts",
|
|
"default": "./index.js"
|
|
},
|
|
"sideEffects": false,
|
|
"engines": {
|
|
"node": "^18.19.0 || >=20.5.0"
|
|
},
|
|
"scripts": {
|
|
"test": "npm run lint && npm run unit && npm run type",
|
|
"lint": "xo",
|
|
"unit": "c8 --merge-async ava",
|
|
"type": "tsd && tsc && npx --yes tsd@0.29.0 && npx --yes --package typescript@5.1 tsc"
|
|
},
|
|
"files": [
|
|
"index.js",
|
|
"index.d.ts",
|
|
"lib/**/*.js",
|
|
"types/**/*.ts"
|
|
],
|
|
"keywords": [
|
|
"exec",
|
|
"child",
|
|
"process",
|
|
"subprocess",
|
|
"execute",
|
|
"fork",
|
|
"execfile",
|
|
"spawn",
|
|
"file",
|
|
"shell",
|
|
"bin",
|
|
"binary",
|
|
"binaries",
|
|
"npm",
|
|
"path",
|
|
"local",
|
|
"zx"
|
|
],
|
|
"dependencies": {
|
|
"@sindresorhus/merge-streams": "^4.0.0",
|
|
"cross-spawn": "^7.0.6",
|
|
"figures": "^6.1.0",
|
|
"get-stream": "^9.0.0",
|
|
"human-signals": "^8.0.1",
|
|
"is-plain-obj": "^4.1.0",
|
|
"is-stream": "^4.0.1",
|
|
"npm-run-path": "^6.0.0",
|
|
"pretty-ms": "^9.2.0",
|
|
"signal-exit": "^4.1.0",
|
|
"strip-final-newline": "^4.0.0",
|
|
"yoctocolors": "^2.1.1"
|
|
},
|
|
"devDependencies": {
|
|
"@types/node": "^22.15.21",
|
|
"ava": "^6.3.0",
|
|
"c8": "^10.1.3",
|
|
"get-node": "^15.0.3",
|
|
"is-in-ci": "^1.0.0",
|
|
"is-running": "^2.1.0",
|
|
"log-process-errors": "^12.0.1",
|
|
"path-exists": "^5.0.0",
|
|
"path-key": "^4.0.0",
|
|
"tempfile": "^5.0.0",
|
|
"tsd": "^0.32.0",
|
|
"typescript": "^5.8.3",
|
|
"which": "^5.0.0",
|
|
"xo": "^0.60.0"
|
|
},
|
|
"c8": {
|
|
"reporter": [
|
|
"text",
|
|
"lcov"
|
|
],
|
|
"exclude": [
|
|
"**/fixtures/**",
|
|
"**/test.js",
|
|
"**/test/**"
|
|
]
|
|
},
|
|
"ava": {
|
|
"workerThreads": false,
|
|
"concurrency": 1,
|
|
"timeout": "240s"
|
|
},
|
|
"xo": {
|
|
"rules": {
|
|
"unicorn/no-empty-file": "off",
|
|
"@typescript-eslint/ban-types": "off"
|
|
}
|
|
}
|
|
}
|