@winspan/claude-forge 8.41.0 → 8.51.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/CLAUDE.md +17 -0
- package/.eslintrc.js +23 -0
- package/.prettierrc +8 -0
- package/ARCHITECTURE_ISSUES.md +249 -0
- package/CLAUDE.md +265 -0
- package/CLAUDE.md.backup +488 -0
- package/DEVELOPMENT.md +310 -0
- package/dist/claudemd/claudemd-generator.d.ts +38 -3
- package/dist/claudemd/claudemd-generator.d.ts.map +1 -1
- package/dist/claudemd/claudemd-generator.js +420 -12
- package/dist/claudemd/claudemd-generator.js.map +1 -1
- package/dist/claudemd/index.d.ts +2 -2
- package/dist/claudemd/index.d.ts.map +1 -1
- package/dist/claudemd/index.js.map +1 -1
- package/dist/claudemd/resume-manager.d.ts.map +1 -1
- package/dist/claudemd/resume-manager.js +6 -3
- package/dist/claudemd/resume-manager.js.map +1 -1
- package/dist/claudemd/tech-detector.d.ts +1 -0
- package/dist/claudemd/tech-detector.d.ts.map +1 -1
- package/dist/claudemd/tech-detector.js +53 -0
- package/dist/claudemd/tech-detector.js.map +1 -1
- package/dist/claudemd/templates/swarm-protocol.md +222 -0
- package/dist/cli/commands/claudemd.js +2 -2
- package/dist/cli/commands/claudemd.js.map +1 -1
- package/dist/cli/commands/daemon.d.ts +28 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -1
- package/dist/cli/commands/daemon.js +204 -12
- package/dist/cli/commands/daemon.js.map +1 -1
- package/dist/cli/commands/executions.d.ts.map +1 -1
- package/dist/cli/commands/executions.js +4 -3
- package/dist/cli/commands/executions.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +5 -37
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/logs.js.map +1 -1
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +3 -5
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/menu.d.ts.map +1 -1
- package/dist/cli/commands/menu.js +14 -13
- package/dist/cli/commands/menu.js.map +1 -1
- package/dist/cli/commands/skills.d.ts.map +1 -1
- package/dist/cli/commands/skills.js +8 -2
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/stats.d.ts.map +1 -1
- package/dist/cli/commands/stats.js +2 -20
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/status.js +2 -2
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/trace.d.ts +9 -0
- package/dist/cli/commands/trace.d.ts.map +1 -0
- package/dist/cli/commands/trace.js +125 -0
- package/dist/cli/commands/trace.js.map +1 -0
- package/dist/cli/index.js +2 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/hook-manager.d.ts.map +1 -1
- package/dist/cli/init/hook-manager.js +2 -2
- package/dist/cli/init/hook-manager.js.map +1 -1
- package/dist/core/ai/provider.d.ts +10 -2
- package/dist/core/ai/provider.d.ts.map +1 -1
- package/dist/core/ai/provider.js +2 -2
- package/dist/core/ai/provider.js.map +1 -1
- package/dist/core/ai/types.d.ts +1 -19
- package/dist/core/ai/types.d.ts.map +1 -1
- package/dist/core/ai/types.js +1 -1
- package/dist/core/config.d.ts +2 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +23 -6
- package/dist/core/config.js.map +1 -1
- package/dist/core/constants.d.ts +14 -3
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +17 -3
- package/dist/core/constants.js.map +1 -1
- package/dist/core/event-fields.d.ts +16 -0
- package/dist/core/event-fields.d.ts.map +1 -0
- package/dist/core/event-fields.js +19 -0
- package/dist/core/event-fields.js.map +1 -0
- package/dist/core/queue/index.d.ts +52 -0
- package/dist/core/queue/index.d.ts.map +1 -0
- package/dist/core/queue/index.js +175 -0
- package/dist/core/queue/index.js.map +1 -0
- package/dist/core/storage/base.d.ts +66 -0
- package/dist/core/storage/base.d.ts.map +1 -0
- package/dist/core/storage/base.js +254 -0
- package/dist/core/storage/base.js.map +1 -0
- package/dist/core/storage/events.d.ts +141 -0
- package/dist/core/storage/events.d.ts.map +1 -0
- package/dist/core/storage/events.js +348 -0
- package/dist/core/storage/events.js.map +1 -0
- package/dist/core/storage/injections.d.ts +27 -0
- package/dist/core/storage/injections.d.ts.map +1 -0
- package/dist/core/storage/injections.js +51 -0
- package/dist/core/storage/injections.js.map +1 -0
- package/dist/core/storage/maintenance.d.ts +21 -0
- package/dist/core/storage/maintenance.d.ts.map +1 -0
- package/dist/core/storage/maintenance.js +52 -0
- package/dist/core/storage/maintenance.js.map +1 -0
- package/dist/core/storage/routing.d.ts +124 -0
- package/dist/core/storage/routing.d.ts.map +1 -0
- package/dist/core/storage/routing.js +239 -0
- package/dist/core/storage/routing.js.map +1 -0
- package/dist/core/storage/rows.d.ts +0 -47
- package/dist/core/storage/rows.d.ts.map +1 -1
- package/dist/core/storage/schema.sql +85 -137
- package/dist/core/storage/sessions.d.ts +54 -0
- package/dist/core/storage/sessions.d.ts.map +1 -0
- package/dist/core/storage/sessions.js +137 -0
- package/dist/core/storage/sessions.js.map +1 -0
- package/dist/core/storage/skills.d.ts +63 -0
- package/dist/core/storage/skills.d.ts.map +1 -0
- package/dist/core/storage/skills.js +154 -0
- package/dist/core/storage/skills.js.map +1 -0
- package/dist/core/storage/sqlite.d.ts +97 -266
- package/dist/core/storage/sqlite.d.ts.map +1 -1
- package/dist/core/storage/sqlite.js +196 -764
- package/dist/core/storage/sqlite.js.map +1 -1
- package/dist/core/storage/tasks.d.ts +113 -0
- package/dist/core/storage/tasks.d.ts.map +1 -0
- package/dist/core/storage/tasks.js +276 -0
- package/dist/core/storage/tasks.js.map +1 -0
- package/dist/core/storage/token-usage.d.ts +36 -0
- package/dist/core/storage/token-usage.d.ts.map +1 -0
- package/dist/core/storage/token-usage.js +59 -0
- package/dist/core/storage/token-usage.js.map +1 -0
- package/dist/core/types.d.ts +83 -6
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +24 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/utils/error-handler.d.ts.map +1 -1
- package/dist/core/utils/error-handler.js +3 -2
- package/dist/core/utils/error-handler.js.map +1 -1
- package/dist/core/utils/format.d.ts +28 -0
- package/dist/core/utils/format.d.ts.map +1 -0
- package/dist/core/utils/format.js +68 -0
- package/dist/core/utils/format.js.map +1 -0
- package/dist/core/utils/git.d.ts +10 -0
- package/dist/core/utils/git.d.ts.map +1 -0
- package/dist/core/utils/git.js +24 -0
- package/dist/core/utils/git.js.map +1 -0
- package/dist/core/utils/logger.d.ts +6 -1
- package/dist/core/utils/logger.d.ts.map +1 -1
- package/dist/core/utils/logger.js +87 -3
- package/dist/core/utils/logger.js.map +1 -1
- package/dist/core/utils/lru-cache.d.ts +1 -0
- package/dist/core/utils/lru-cache.d.ts.map +1 -1
- package/dist/core/utils/lru-cache.js +3 -0
- package/dist/core/utils/lru-cache.js.map +1 -1
- package/dist/core/utils/session.d.ts +16 -0
- package/dist/core/utils/session.d.ts.map +1 -0
- package/dist/core/utils/session.js +25 -0
- package/dist/core/utils/session.js.map +1 -0
- package/dist/core/utils/time.d.ts +22 -0
- package/dist/core/utils/time.d.ts.map +1 -0
- package/dist/core/utils/time.js +38 -0
- package/dist/core/utils/time.js.map +1 -0
- package/dist/core/utils/token-tracker.js +1 -1
- package/dist/core/utils/token-tracker.js.map +1 -1
- package/dist/daemon/event-parser.d.ts.map +1 -1
- package/dist/daemon/event-parser.js +2 -1
- package/dist/daemon/event-parser.js.map +1 -1
- package/dist/daemon/handlers/history-exporter.d.ts.map +1 -1
- package/dist/daemon/handlers/history-exporter.js +6 -4
- package/dist/daemon/handlers/history-exporter.js.map +1 -1
- package/dist/daemon/handlers/post-tool-use.d.ts +5 -12
- package/dist/daemon/handlers/post-tool-use.d.ts.map +1 -1
- package/dist/daemon/handlers/post-tool-use.js +25 -79
- package/dist/daemon/handlers/post-tool-use.js.map +1 -1
- package/dist/daemon/handlers/stop.d.ts +28 -12
- package/dist/daemon/handlers/stop.d.ts.map +1 -1
- package/dist/daemon/handlers/stop.js +129 -42
- package/dist/daemon/handlers/stop.js.map +1 -1
- package/dist/daemon/handlers/user-prompt.d.ts +18 -19
- package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
- package/dist/daemon/handlers/user-prompt.js +93 -227
- package/dist/daemon/handlers/user-prompt.js.map +1 -1
- package/dist/daemon/index.d.ts +6 -2
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +97 -127
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/launchd/com.claude-forge.daemon.plist.template +47 -0
- package/dist/daemon/launchd-installer.d.ts +61 -0
- package/dist/daemon/launchd-installer.d.ts.map +1 -0
- package/dist/daemon/launchd-installer.js +182 -0
- package/dist/daemon/launchd-installer.js.map +1 -0
- package/dist/daemon/lifecycle.d.ts +11 -0
- package/dist/daemon/lifecycle.d.ts.map +1 -1
- package/dist/daemon/lifecycle.js +47 -4
- package/dist/daemon/lifecycle.js.map +1 -1
- package/dist/daemon/router.d.ts +9 -2
- package/dist/daemon/router.d.ts.map +1 -1
- package/dist/daemon/router.js +27 -3
- package/dist/daemon/router.js.map +1 -1
- package/dist/daemon/server.d.ts +6 -4
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +80 -88
- package/dist/daemon/server.js.map +1 -1
- package/dist/{intelligence → daemon/services}/task-segmenter.d.ts +7 -1
- package/dist/daemon/services/task-segmenter.d.ts.map +1 -0
- package/dist/{intelligence → daemon/services}/task-segmenter.js +30 -7
- package/dist/daemon/services/task-segmenter.js.map +1 -0
- package/dist/hooks/hook-lib.sh +118 -0
- package/dist/hooks/notification.sh +9 -5
- package/dist/hooks/post-tool-use.sh +10 -6
- package/dist/hooks/pre-tool-use.sh +9 -6
- package/dist/hooks/stop.sh +10 -7
- package/dist/hooks/user-prompt-submit.sh +10 -11
- package/dist/mcp/server.d.ts +2 -2
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +71 -11
- package/dist/mcp/server.js.map +1 -1
- package/dist/skills/invocation-guard.d.ts +20 -0
- package/dist/skills/invocation-guard.d.ts.map +1 -1
- package/dist/skills/invocation-guard.js +63 -0
- package/dist/skills/invocation-guard.js.map +1 -1
- package/dist/skills/matcher.d.ts.map +1 -1
- package/dist/skills/matcher.js +12 -3
- package/dist/skills/matcher.js.map +1 -1
- package/dist/skills/official/code-simplifier.md +16 -0
- package/dist/skills/official/find-skills.md +23 -0
- package/dist/skills/official/official-api-design.md +17 -0
- package/dist/skills/official/official-architecture-decision.md +20 -0
- package/dist/skills/official/official-bmad.md +118 -0
- package/dist/skills/official/official-db-schema-design.md +16 -0
- package/dist/skills/official/official-debug.md +17 -0
- package/dist/skills/official/official-doc-driven.md +31 -0
- package/dist/skills/official/official-harness-engineering.md +108 -0
- package/dist/skills/official/official-performance-optimization.md +30 -0
- package/dist/skills/official/official-pr-review.md +35 -0
- package/dist/skills/official/official-release-checklist.md +30 -0
- package/dist/skills/official/official-security-hardening.md +26 -0
- package/dist/skills/official/official-spec-driven-design.md +31 -0
- package/dist/skills/official/planning-with-files.md +37 -0
- package/dist/skills/official/ui-ux-pro-max.md +18 -0
- package/dist/skills/official/webapp-testing.md +12 -0
- package/dist/skills/official-skills.d.ts +8 -4
- package/dist/skills/official-skills.d.ts.map +1 -1
- package/dist/skills/official-skills.js +48 -704
- package/dist/skills/official-skills.js.map +1 -1
- package/dist/skills/registry.d.ts +5 -0
- package/dist/skills/registry.d.ts.map +1 -1
- package/dist/skills/registry.js +48 -15
- package/dist/skills/registry.js.map +1 -1
- package/dist/skills/tools/pipeline-suggest.d.ts +30 -0
- package/dist/skills/tools/pipeline-suggest.d.ts.map +1 -0
- package/dist/skills/tools/pipeline-suggest.js +178 -0
- package/dist/skills/tools/pipeline-suggest.js.map +1 -0
- package/dist/web/analytics/anti-pattern-detector.d.ts +49 -0
- package/dist/web/analytics/anti-pattern-detector.d.ts.map +1 -0
- package/dist/web/analytics/anti-pattern-detector.js +318 -0
- package/dist/web/analytics/anti-pattern-detector.js.map +1 -0
- package/dist/web/analytics/drift-detector.d.ts +64 -0
- package/dist/web/analytics/drift-detector.d.ts.map +1 -0
- package/dist/web/analytics/drift-detector.js +198 -0
- package/dist/web/analytics/drift-detector.js.map +1 -0
- package/dist/web/analytics/weekly-report.d.ts +91 -0
- package/dist/web/analytics/weekly-report.d.ts.map +1 -0
- package/dist/web/analytics/weekly-report.js +328 -0
- package/dist/web/analytics/weekly-report.js.map +1 -0
- package/dist/web/auth-middleware.d.ts.map +1 -1
- package/dist/web/auth-middleware.js +1 -2
- package/dist/web/auth-middleware.js.map +1 -1
- package/dist/web/routes/_helpers.d.ts +16 -0
- package/dist/web/routes/_helpers.d.ts.map +1 -0
- package/dist/web/routes/_helpers.js +32 -0
- package/dist/web/routes/_helpers.js.map +1 -0
- package/dist/web/routes/ai.d.ts.map +1 -1
- package/dist/web/routes/ai.js +16 -22
- package/dist/web/routes/ai.js.map +1 -1
- package/dist/web/routes/drift.d.ts +10 -0
- package/dist/web/routes/drift.d.ts.map +1 -0
- package/dist/web/routes/drift.js +21 -0
- package/dist/web/routes/drift.js.map +1 -0
- package/dist/web/routes/error-handler.d.ts +43 -0
- package/dist/web/routes/error-handler.d.ts.map +1 -0
- package/dist/web/routes/error-handler.js +99 -0
- package/dist/web/routes/error-handler.js.map +1 -0
- package/dist/web/routes/insights.d.ts +9 -0
- package/dist/web/routes/insights.d.ts.map +1 -0
- package/dist/web/routes/insights.js +34 -0
- package/dist/web/routes/insights.js.map +1 -0
- package/dist/web/routes/patch.js +2 -2
- package/dist/web/routes/patch.js.map +1 -1
- package/dist/web/routes/reports.d.ts +10 -0
- package/dist/web/routes/reports.d.ts.map +1 -0
- package/dist/web/routes/reports.js +27 -0
- package/dist/web/routes/reports.js.map +1 -0
- package/dist/web/routes/rules.d.ts +13 -3
- package/dist/web/routes/rules.d.ts.map +1 -1
- package/dist/web/routes/rules.js +58 -97
- package/dist/web/routes/rules.js.map +1 -1
- package/dist/web/routes/sessions.d.ts +1 -2
- package/dist/web/routes/sessions.d.ts.map +1 -1
- package/dist/web/routes/sessions.js +43 -69
- package/dist/web/routes/sessions.js.map +1 -1
- package/dist/web/routes/skill-stats.d.ts +2 -0
- package/dist/web/routes/skill-stats.d.ts.map +1 -1
- package/dist/web/routes/skill-stats.js +41 -39
- package/dist/web/routes/skill-stats.js.map +1 -1
- package/dist/web/routes/skills.d.ts.map +1 -1
- package/dist/web/routes/skills.js +39 -4
- package/dist/web/routes/skills.js.map +1 -1
- package/dist/web/routes/stats.d.ts +11 -0
- package/dist/web/routes/stats.d.ts.map +1 -0
- package/dist/web/routes/stats.js +42 -0
- package/dist/web/routes/stats.js.map +1 -0
- package/dist/web/routes/status.js +1 -1
- package/dist/web/routes/status.js.map +1 -1
- package/dist/web/routes/tasks.d.ts +4 -0
- package/dist/web/routes/tasks.d.ts.map +1 -0
- package/dist/web/routes/tasks.js +156 -0
- package/dist/web/routes/tasks.js.map +1 -0
- package/dist/web/routes/trace.d.ts +10 -0
- package/dist/web/routes/trace.d.ts.map +1 -0
- package/dist/web/routes/trace.js +113 -0
- package/dist/web/routes/trace.js.map +1 -0
- package/dist/web/routes/types.d.ts +1 -14
- package/dist/web/routes/types.d.ts.map +1 -1
- package/dist/web/routes/types.js +12 -20
- package/dist/web/routes/types.js.map +1 -1
- package/dist/web/server.d.ts +1 -9
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +28 -28
- package/dist/web/server.js.map +1 -1
- package/dist/web/static/assets/AIConfig-CdDWzJyO.js +2 -0
- package/dist/web/static/assets/AIConfig-CdDWzJyO.js.map +1 -0
- package/dist/web/static/assets/Dashboard-CoEmmIDt.js +2 -0
- package/dist/web/static/assets/Dashboard-CoEmmIDt.js.map +1 -0
- package/dist/web/static/assets/{Drawer-DcU3ln98.js → Drawer-DdRTzlLB.js} +2 -2
- package/dist/web/static/assets/{Drawer-DcU3ln98.js.map → Drawer-DdRTzlLB.js.map} +1 -1
- package/dist/web/static/assets/Events-DrIq1SUS.js +2 -0
- package/dist/web/static/assets/Events-DrIq1SUS.js.map +1 -0
- package/dist/web/static/assets/Reports-DFBM3MDK.js +2 -0
- package/dist/web/static/assets/Reports-DFBM3MDK.js.map +1 -0
- package/dist/web/static/assets/SearchInput-qCj_jAcf.js +2 -0
- package/dist/web/static/assets/SearchInput-qCj_jAcf.js.map +1 -0
- package/dist/web/static/assets/SessionDetail-CCzwdoT7.js +2 -0
- package/dist/web/static/assets/SessionDetail-CCzwdoT7.js.map +1 -0
- package/dist/web/static/assets/Sessions-FfLYkAw9.js +2 -0
- package/dist/web/static/assets/Sessions-FfLYkAw9.js.map +1 -0
- package/dist/web/static/assets/Skills-C8Gvs3Qa.js +2 -0
- package/dist/web/static/assets/Skills-C8Gvs3Qa.js.map +1 -0
- package/dist/web/static/assets/TaskDetail-BS8pYhaR.js +2 -0
- package/dist/web/static/assets/TaskDetail-BS8pYhaR.js.map +1 -0
- package/dist/web/static/assets/Tasks-CyuhizG8.js +2 -0
- package/dist/web/static/assets/Tasks-CyuhizG8.js.map +1 -0
- package/dist/web/static/assets/export-L_VBD2p1.js +4 -0
- package/dist/web/static/assets/export-L_VBD2p1.js.map +1 -0
- package/dist/web/static/assets/index-CBX47X8l.js +3 -0
- package/dist/web/static/assets/index-CBX47X8l.js.map +1 -0
- package/dist/web/static/assets/index-DjIoMdoR.css +1 -0
- package/dist/web/static/assets/{lucide-53bR2rki.js → lucide-Bs_edTLa.js} +73 -38
- package/dist/web/static/assets/lucide-Bs_edTLa.js.map +1 -0
- package/dist/web/static/assets/react-router-r79dBVy4.js +20 -0
- package/dist/web/static/assets/{react-router-I-HqunH7.js.map → react-router-r79dBVy4.js.map} +1 -1
- package/dist/web/static/assets/task-title-BhOcemuR.js +2 -0
- package/dist/web/static/assets/task-title-BhOcemuR.js.map +1 -0
- package/dist/web/static/assets/time-Bxuk0M-C.js +2 -0
- package/dist/web/static/assets/time-Bxuk0M-C.js.map +1 -0
- package/dist/web/static/index.html +4 -4
- package/docs/concurrent-agents.md +129 -0
- package/docs/design/architecture-review-20260516.md +232 -0
- package/docs/design/fix-skills-data-and-set-leak-spec-20260516-1300.md +219 -0
- package/docs/design/h1-storage-aggregation-spec-20260518-1121.md +299 -0
- package/docs/design/h2-getdatabase-encapsulation-spec-20260518-1450.md +191 -0
- package/docs/design/h3-fallback-removal-spec-20260518-1245.md +76 -0
- package/docs/design/h4-index-dedup-spec-20260518-1230.md +109 -0
- package/docs/design/h6-services-migration-spec-20260518-1355.md +82 -0
- package/docs/design/hook-failure-queue-spec-20260516-1530.md +204 -0
- package/docs/design/l1-swarm-protocol-extract-spec-20260518-1605.md +106 -0
- package/docs/design/m10-forge-paths-spec-20260518-1320.md +121 -0
- package/docs/design/m2-m3-tool-input-spec-20260518-1425.md +131 -0
- package/docs/design/m7-routing-event-association-spec-20260518-1545.md +103 -0
- package/docs/design/project-path-gitroot-spec-20260518-1715.md +134 -0
- package/docs/design/refactor-phase1-spec-20260515-1600.md +543 -0
- package/docs/design/refactor-phase2-spec-20260515-1700.md +424 -0
- package/docs/design/task-active-gc-spec-20260518-1745.md +146 -0
- package/docs/design/tasks-list-filter-pagination-spec-20260518-0930.md +208 -0
- package/docs/implementation/fix-skills-data-and-set-leak-changelog-20260516-1300.md +104 -0
- package/docs/implementation/h1-storage-aggregation-changelog-20260518-1121.md +82 -0
- package/docs/implementation/h2-final-changelog-20260518-1530.md +61 -0
- package/docs/implementation/h2-phase1-safety-net-changelog-20260518-1450.md +70 -0
- package/docs/implementation/h2-phase2-operations-changelog-20260518-1450.md +120 -0
- package/docs/implementation/h2-phase3-callsites-changelog-20260518-1450.md +71 -0
- package/docs/implementation/h3-fallback-removal-changelog-20260518-1245.md +71 -0
- package/docs/implementation/h4-index-dedup-changelog-20260518-1230.md +60 -0
- package/docs/implementation/h6-services-migration-changelog-20260518-1355.md +46 -0
- package/docs/implementation/h7-m9-defaults-changelog-20260518-1300.md +46 -0
- package/docs/implementation/hook-failure-queue-changelog-20260516-1530.md +196 -0
- package/docs/implementation/hotfix-daemon-event-reject-20260516-1430.md +56 -0
- package/docs/implementation/l1-swarm-protocol-extract-changelog-20260518-1605.md +45 -0
- package/docs/implementation/l3-l4-daemon-perf-changelog-20260518-1410.md +63 -0
- package/docs/implementation/l6-l8-final-cleanup-changelog-20260518-1640.md +38 -0
- package/docs/implementation/m1-m4-m5-l7-cleanup-changelog-20260518-1310.md +58 -0
- package/docs/implementation/m10-forge-paths-changelog-20260518-1320.md +60 -0
- package/docs/implementation/m2-m3-tool-input-changelog-20260518-1425.md +43 -0
- package/docs/implementation/m6-m8-naming-shutdown-changelog-20260518-1340.md +56 -0
- package/docs/implementation/m7-routing-association-changelog-20260518-1545.md +69 -0
- package/docs/implementation/project-path-gitroot-changelog-20260518-1715.md +63 -0
- package/docs/implementation/refactor-phase1-changelog-20260515-1630.md +354 -0
- package/docs/implementation/refactor-phase2-changelog-20260515-1705.md +421 -0
- package/docs/implementation/task-active-gc-changelog-20260518-1745.md +35 -0
- package/docs/implementation/task-title-summary-changelog-20260518-1130.md +39 -0
- package/docs/implementation/tasks-detail-back-loses-filters-changelog-20260518-1100.md +22 -0
- package/docs/implementation/tasks-list-filter-pagination-changelog-20260518-0930.md +72 -0
- package/docs/implementation/tasks-page-white-screen-hotfix-changelog-20260518-1015.md +56 -0
- package/docs/reviews/claudemd-template-sync.md +54 -0
- package/docs/reviews/task-title-summary.md +92 -0
- package/docs/reviews/tasks-detail-back-loses-filters.md +58 -0
- package/docs/reviews/tasks-filter-pagination.md +80 -0
- package/docs/reviews/tasks-page-white-screen-hotfix.md +126 -0
- package/docs/ruflo-learning-strategy.md +322 -0
- package/docs/skills-deduplication-analysis.md +83 -0
- package/docs/skills-multiformat-support.md +177 -0
- package/docs/skills-third-party.md +183 -0
- package/docs/testing/tasks-filter-pagination-test-report.md +86 -0
- package/forge +321 -0
- package/package.json +28 -62
- package/playwright.config.ts +40 -0
- package/scripts/demo-v2.ts +91 -0
- package/scripts/dev-daemon.sh +232 -0
- package/scripts/dev-web.ts +109 -0
- package/scripts/e2e-mcp-link.ts +423 -0
- package/scripts/e2e-methodology-quality.ts +253 -0
- package/scripts/e2e-routing.ts +456 -0
- package/scripts/e2e-user-methodology.ts +326 -0
- package/scripts/e2e-web-workflows.ts +299 -0
- package/scripts/migrate-legacy-to-dynamic.sql +108 -0
- package/scripts/regenerate-execution-docs.ts +116 -0
- package/scripts/sync-agent-skills.ts +193 -0
- package/scripts/test-hook.sh +71 -0
- package/scripts/verify-skill-loading.ts +62 -0
- package/src/claudemd/claudemd-generator.ts +568 -0
- package/src/claudemd/convention-extractor.ts +69 -0
- package/src/claudemd/index.ts +35 -0
- package/src/claudemd/persona-manager.ts +88 -0
- package/src/claudemd/resume-manager.ts +236 -0
- package/src/claudemd/tech-detector.ts +220 -0
- package/src/claudemd/templates/swarm-protocol.md +222 -0
- package/src/cli/commands/claudemd.ts +84 -0
- package/src/cli/commands/config.ts +46 -0
- package/src/cli/commands/daemon.ts +310 -0
- package/src/cli/commands/executions.ts +115 -0
- package/src/cli/commands/init.ts +204 -0
- package/src/cli/commands/logs.ts +181 -0
- package/src/cli/commands/mcp.ts +242 -0
- package/src/cli/commands/menu.ts +357 -0
- package/src/cli/commands/skills.ts +185 -0
- package/src/cli/commands/stats.ts +73 -0
- package/src/cli/commands/status.ts +69 -0
- package/src/cli/commands/template.ts +77 -0
- package/src/cli/commands/trace.ts +148 -0
- package/src/cli/index.ts +42 -0
- package/src/cli/init/hook-manager.ts +132 -0
- package/src/core/ai/provider.ts +308 -0
- package/src/core/ai/types.ts +51 -0
- package/src/core/config.ts +124 -0
- package/src/core/constants.ts +62 -0
- package/src/core/event-fields.ts +32 -0
- package/src/core/queue/index.ts +192 -0
- package/src/core/storage/base.ts +302 -0
- package/src/core/storage/events.ts +434 -0
- package/src/core/storage/injections.ts +78 -0
- package/src/core/storage/maintenance.ts +59 -0
- package/src/core/storage/migrations/002_add_skill_tracking.sql +6 -0
- package/src/core/storage/migrations/003_add_skill_invocations.sql +23 -0
- package/src/core/storage/performance-indexes.sql +23 -0
- package/src/core/storage/routing.ts +322 -0
- package/src/core/storage/rows.ts +112 -0
- package/src/core/storage/schema.sql +224 -0
- package/src/core/storage/sessions.ts +168 -0
- package/src/core/storage/skills.ts +233 -0
- package/src/core/storage/sqlite.ts +293 -0
- package/src/core/storage/tasks.ts +318 -0
- package/src/core/storage/token-usage.ts +93 -0
- package/src/core/types.ts +181 -0
- package/src/core/utils/error-handler.ts +257 -0
- package/src/core/utils/forge-resume-block.ts +74 -0
- package/src/core/utils/format.ts +69 -0
- package/src/core/utils/git.ts +23 -0
- package/src/core/utils/logger.ts +134 -0
- package/src/core/utils/lru-cache.ts +54 -0
- package/src/core/utils/path.ts +19 -0
- package/src/core/utils/session.ts +26 -0
- package/src/core/utils/time.ts +37 -0
- package/src/core/utils/token-tracker.ts +97 -0
- package/src/daemon/event-parser.ts +36 -0
- package/src/daemon/handlers/history-exporter.ts +117 -0
- package/src/daemon/handlers/post-tool-use.ts +54 -0
- package/src/daemon/handlers/stop.ts +208 -0
- package/src/daemon/handlers/user-prompt.ts +178 -0
- package/src/daemon/index.ts +292 -0
- package/src/daemon/launchd/com.claude-forge.daemon.plist.template +47 -0
- package/src/daemon/launchd-installer.ts +260 -0
- package/src/daemon/lifecycle.ts +128 -0
- package/src/daemon/router.ts +40 -0
- package/src/daemon/server.ts +196 -0
- package/src/daemon/services/task-segmenter.ts +112 -0
- package/src/hooks/hook-lib.sh +118 -0
- package/src/hooks/notification.sh +35 -0
- package/src/hooks/post-tool-use.sh +61 -0
- package/src/hooks/pre-tool-use.sh +63 -0
- package/src/hooks/stop.sh +43 -0
- package/src/hooks/user-prompt-submit.sh +69 -0
- package/src/mcp/server.ts +322 -0
- package/src/skills/index.ts +2 -0
- package/src/skills/invocation-guard.ts +177 -0
- package/src/skills/matcher.ts +148 -0
- package/src/skills/official/code-simplifier.md +16 -0
- package/src/skills/official/find-skills.md +23 -0
- package/src/skills/official/official-api-design.md +17 -0
- package/src/skills/official/official-architecture-decision.md +20 -0
- package/src/skills/official/official-bmad.md +118 -0
- package/src/skills/official/official-db-schema-design.md +16 -0
- package/src/skills/official/official-debug.md +17 -0
- package/src/skills/official/official-doc-driven.md +31 -0
- package/src/skills/official/official-harness-engineering.md +108 -0
- package/src/skills/official/official-performance-optimization.md +30 -0
- package/src/skills/official/official-pr-review.md +35 -0
- package/src/skills/official/official-release-checklist.md +30 -0
- package/src/skills/official/official-security-hardening.md +26 -0
- package/src/skills/official/official-spec-driven-design.md +31 -0
- package/src/skills/official/planning-with-files.md +37 -0
- package/src/skills/official/ui-ux-pro-max.md +18 -0
- package/src/skills/official/webapp-testing.md +12 -0
- package/src/skills/official-skills.ts +89 -0
- package/src/skills/registry.ts +355 -0
- package/src/skills/semantic-matcher.ts +231 -0
- package/src/skills/tools/pipeline-suggest.ts +226 -0
- package/src/skills/tools/skill-invoke.ts +168 -0
- package/src/skills/tools/skill-list.ts +59 -0
- package/src/templates/go.yaml +53 -0
- package/src/templates/python.yaml +59 -0
- package/src/templates/react.yaml +55 -0
- package/src/templates/template-manager.ts +170 -0
- package/src/web/analytics/anti-pattern-detector.ts +367 -0
- package/src/web/analytics/drift-detector.ts +219 -0
- package/src/web/analytics/weekly-report.ts +431 -0
- package/src/web/auth-middleware.ts +54 -0
- package/src/web/routes/_helpers.ts +34 -0
- package/src/web/routes/ai.ts +204 -0
- package/src/web/routes/auth.ts +22 -0
- package/src/web/routes/drift.ts +25 -0
- package/src/web/routes/error-handler.ts +120 -0
- package/src/web/routes/events.ts +47 -0
- package/src/web/routes/insights.ts +43 -0
- package/src/web/routes/patch.ts +117 -0
- package/src/web/routes/reports.ts +34 -0
- package/src/web/routes/rules.ts +76 -0
- package/src/web/routes/sessions.ts +250 -0
- package/src/web/routes/skill-stats.ts +92 -0
- package/src/web/routes/skills.ts +350 -0
- package/src/web/routes/static.ts +67 -0
- package/src/web/routes/stats.ts +50 -0
- package/src/web/routes/status.ts +30 -0
- package/src/web/routes/tasks.ts +193 -0
- package/src/web/routes/token-usage.ts +20 -0
- package/src/web/routes/trace.ts +126 -0
- package/src/web/routes/types.ts +57 -0
- package/src/web/server.ts +134 -0
- package/src/web/ssrf-guard.ts +112 -0
- package/src/web/static/index.html +3251 -0
- package/src/web/static/vendor/chart.umd.min.js +20 -0
- package/tests/e2e/dashboard.spec.ts +205 -0
- package/tests/e2e/routing-skill-e2e.test.ts +39 -0
- package/tests/helpers/mock-ai.ts +92 -0
- package/tests/helpers/mock-storage.ts +159 -0
- package/tests/integration/claudemd-generator.test.ts +90 -0
- package/tests/integration/queue-replay.integration.test.ts +193 -0
- package/tests/integration/tasks-filter.integration.test.ts +154 -0
- package/tests/integration/web-analytics.integration.test.ts +133 -0
- package/tests/integration/web-stats.integration.test.ts +135 -0
- package/tests/integration/web-trace.integration.test.ts +175 -0
- package/tests/performance/database.benchmark.ts +161 -0
- package/tests/semantic-matcher.test.ts +99 -0
- package/tests/skill-matcher.test.ts +110 -0
- package/tests/unit/ai-provider-retry.test.ts +194 -0
- package/tests/unit/ai-provider-vision.test.ts +224 -0
- package/tests/unit/claudemd-generator.test.ts +68 -0
- package/tests/unit/cli-mcp.test.ts +141 -0
- package/tests/unit/core/forge-paths.test.ts +99 -0
- package/tests/unit/daemon/post-tool-use.test.ts +121 -0
- package/tests/unit/daemon/stop-handler-behavior-summary.test.ts +202 -0
- package/tests/unit/daemon/task-segmenter-recover.test.ts +84 -0
- package/tests/unit/event-fields.test.ts +88 -0
- package/tests/unit/event-parser.test.ts +55 -0
- package/tests/unit/handlers.test.ts +171 -0
- package/tests/unit/hooks/resolve-project-path.test.ts +122 -0
- package/tests/unit/invocation-guard.test.ts +125 -0
- package/tests/unit/queue.test.ts +272 -0
- package/tests/unit/router.test.ts +138 -0
- package/tests/unit/security.test.ts +128 -0
- package/tests/unit/skill-invocations-workflow.test.ts +495 -0
- package/tests/unit/skill-registry.test.ts +94 -0
- package/tests/unit/skills/invocation-guard-ttl.test.ts +211 -0
- package/tests/unit/skills/official-skills-loader.test.ts +126 -0
- package/tests/unit/skills/registry-multiformat.test.ts +92 -0
- package/tests/unit/socket-server.test.ts +183 -0
- package/tests/unit/storage/event-operations-aggregates.test.ts +342 -0
- package/tests/unit/storage/migration-idempotent.test.ts +304 -0
- package/tests/unit/storage/routing-aggregates.test.ts +276 -0
- package/tests/unit/storage/routing.test.ts +117 -0
- package/tests/unit/storage/schema-missing.test.ts +81 -0
- package/tests/unit/storage/session-operations-aggregates.test.ts +120 -0
- package/tests/unit/storage/sessions-aggregate.test.ts +435 -0
- package/tests/unit/storage/skill-operations-counts.test.ts +106 -0
- package/tests/unit/storage/skills-aggregates.test.ts +104 -0
- package/tests/unit/storage/sqlite-refactor-harness.test.ts +314 -0
- package/tests/unit/storage/task-operations-counts.test.ts +46 -0
- package/tests/unit/storage/tasks-getById.test.ts +343 -0
- package/tests/unit/storage/tasks-stale-gc.test.ts +86 -0
- package/tests/unit/storage.test.ts +172 -0
- package/tests/unit/token-usage.test.ts +144 -0
- package/tests/unit/type-guards.test.ts +201 -0
- package/tests/unit/utils/format.test.ts +189 -0
- package/tests/unit/utils/session.test.ts +89 -0
- package/tests/unit/utils/time.test.ts +112 -0
- package/tests/unit/web/navigation-back-contract.test.ts +134 -0
- package/tests/unit/web/routes-auth.test.ts +93 -0
- package/tests/unit/web/routes-events.test.ts +101 -0
- package/tests/unit/web/routes-rules.test.ts +182 -0
- package/tests/unit/web/routes-sessions.test.ts +181 -0
- package/tests/unit/web/routes-skill-stats.test.ts +179 -0
- package/tests/unit/web/routes-stats.test.ts +92 -0
- package/tests/unit/web/routes-tasks.test.ts +385 -0
- package/tests/unit/web/task-title-contract.test.ts +210 -0
- package/tests/unit/web/tasks-component-contract.test.ts +179 -0
- package/tsconfig.json +22 -0
- package/vitest.config.ts +21 -0
- package/vitest.integration.config.ts +16 -0
- package/web/CLAUDE.md +20 -0
- package/web/index.html +13 -0
- package/web/package-lock.json +4854 -0
- package/web/package.json +35 -0
- package/web/postcss.config.js +6 -0
- package/web/src/App.tsx +110 -0
- package/web/src/components/CodeBlock.tsx +31 -0
- package/web/src/components/Confirm.tsx +96 -0
- package/web/src/components/Drawer.tsx +60 -0
- package/web/src/components/Layout.tsx +145 -0
- package/web/src/components/MarkdownRenderer.tsx +77 -0
- package/web/src/components/SearchInput.tsx +31 -0
- package/web/src/components/SessionDetailContent.tsx +157 -0
- package/web/src/components/Toast.tsx +92 -0
- package/web/src/index.css +19 -0
- package/web/src/main.tsx +31 -0
- package/web/src/pages/AIConfig.tsx +233 -0
- package/web/src/pages/Dashboard.tsx +572 -0
- package/web/src/pages/Events.tsx +271 -0
- package/web/src/pages/Reports.tsx +428 -0
- package/web/src/pages/SessionDetail.tsx +162 -0
- package/web/src/pages/Sessions.tsx +205 -0
- package/web/src/pages/Skills.tsx +180 -0
- package/web/src/pages/TaskDetail.tsx +515 -0
- package/web/src/pages/Tasks.tsx +415 -0
- package/web/src/utils/auth.ts +59 -0
- package/web/src/utils/export.ts +54 -0
- package/web/src/utils/navigation.ts +25 -0
- package/web/src/utils/task-title.ts +49 -0
- package/web/src/utils/time.ts +13 -0
- package/web/tailwind.config.js +11 -0
- package/web/tsconfig.json +21 -0
- package/web/tsconfig.node.json +10 -0
- package/web/vite.config.ts +76 -0
- package/winspan-claude-forge-8.43.0.tgz +0 -0
- package/dist/agents/definition.d.ts +0 -62
- package/dist/agents/definition.d.ts.map +0 -1
- package/dist/agents/definition.js +0 -27
- package/dist/agents/definition.js.map +0 -1
- package/dist/agents/distributor.d.ts +0 -23
- package/dist/agents/distributor.d.ts.map +0 -1
- package/dist/agents/distributor.js +0 -85
- package/dist/agents/distributor.js.map +0 -1
- package/dist/agents/index.d.ts +0 -5
- package/dist/agents/index.d.ts.map +0 -1
- package/dist/agents/index.js +0 -5
- package/dist/agents/index.js.map +0 -1
- package/dist/agents/methodologies/agent-builder.d.ts +0 -21
- package/dist/agents/methodologies/agent-builder.d.ts.map +0 -1
- package/dist/agents/methodologies/agent-builder.js +0 -149
- package/dist/agents/methodologies/agent-builder.js.map +0 -1
- package/dist/agents/methodologies/phases/bmad/analyze.d.ts +0 -3
- package/dist/agents/methodologies/phases/bmad/analyze.d.ts.map +0 -1
- package/dist/agents/methodologies/phases/bmad/analyze.js +0 -19
- package/dist/agents/methodologies/phases/bmad/analyze.js.map +0 -1
- package/dist/agents/methodologies/phases/bmad/design.d.ts +0 -3
- package/dist/agents/methodologies/phases/bmad/design.d.ts.map +0 -1
- package/dist/agents/methodologies/phases/bmad/design.js +0 -18
- package/dist/agents/methodologies/phases/bmad/design.js.map +0 -1
- package/dist/agents/methodologies/phases/bmad/implement.d.ts +0 -3
- package/dist/agents/methodologies/phases/bmad/implement.d.ts.map +0 -1
- package/dist/agents/methodologies/phases/bmad/implement.js +0 -17
- package/dist/agents/methodologies/phases/bmad/implement.js.map +0 -1
- package/dist/agents/methodologies/phases/bmad/index.d.ts +0 -6
- package/dist/agents/methodologies/phases/bmad/index.d.ts.map +0 -1
- package/dist/agents/methodologies/phases/bmad/index.js +0 -6
- package/dist/agents/methodologies/phases/bmad/index.js.map +0 -1
- package/dist/agents/methodologies/phases/bmad/review.d.ts +0 -3
- package/dist/agents/methodologies/phases/bmad/review.d.ts.map +0 -1
- package/dist/agents/methodologies/phases/bmad/review.js +0 -17
- package/dist/agents/methodologies/phases/bmad/review.js.map +0 -1
- package/dist/agents/methodologies/phases/bmad/test.d.ts +0 -3
- package/dist/agents/methodologies/phases/bmad/test.d.ts.map +0 -1
- package/dist/agents/methodologies/phases/bmad/test.js +0 -21
- package/dist/agents/methodologies/phases/bmad/test.js.map +0 -1
- package/dist/agents/methodologies/phases/harness/fix.d.ts +0 -3
- package/dist/agents/methodologies/phases/harness/fix.d.ts.map +0 -1
- package/dist/agents/methodologies/phases/harness/fix.js +0 -17
- package/dist/agents/methodologies/phases/harness/fix.js.map +0 -1
- package/dist/agents/methodologies/phases/harness/index.d.ts +0 -6
- package/dist/agents/methodologies/phases/harness/index.d.ts.map +0 -1
- package/dist/agents/methodologies/phases/harness/index.js +0 -6
- package/dist/agents/methodologies/phases/harness/index.js.map +0 -1
- package/dist/agents/methodologies/phases/harness/reproduce.d.ts +0 -3
- package/dist/agents/methodologies/phases/harness/reproduce.d.ts.map +0 -1
- package/dist/agents/methodologies/phases/harness/reproduce.js +0 -20
- package/dist/agents/methodologies/phases/harness/reproduce.js.map +0 -1
- package/dist/agents/methodologies/phases/harness/root-cause.d.ts +0 -3
- package/dist/agents/methodologies/phases/harness/root-cause.d.ts.map +0 -1
- package/dist/agents/methodologies/phases/harness/root-cause.js +0 -21
- package/dist/agents/methodologies/phases/harness/root-cause.js.map +0 -1
- package/dist/agents/methodologies/phases/harness/safety-net.d.ts +0 -3
- package/dist/agents/methodologies/phases/harness/safety-net.d.ts.map +0 -1
- package/dist/agents/methodologies/phases/harness/safety-net.js +0 -17
- package/dist/agents/methodologies/phases/harness/safety-net.js.map +0 -1
- package/dist/agents/methodologies/phases/harness/verify.d.ts +0 -3
- package/dist/agents/methodologies/phases/harness/verify.d.ts.map +0 -1
- package/dist/agents/methodologies/phases/harness/verify.js +0 -22
- package/dist/agents/methodologies/phases/harness/verify.js.map +0 -1
- package/dist/agents/methodologies/presets.d.ts +0 -10
- package/dist/agents/methodologies/presets.d.ts.map +0 -1
- package/dist/agents/methodologies/presets.js +0 -79
- package/dist/agents/methodologies/presets.js.map +0 -1
- package/dist/agents/methodologies/types.d.ts +0 -45
- package/dist/agents/methodologies/types.d.ts.map +0 -1
- package/dist/agents/methodologies/types.js +0 -10
- package/dist/agents/methodologies/types.js.map +0 -1
- package/dist/agents/methodologies/user-config-loader.d.ts +0 -30
- package/dist/agents/methodologies/user-config-loader.d.ts.map +0 -1
- package/dist/agents/methodologies/user-config-loader.js +0 -159
- package/dist/agents/methodologies/user-config-loader.js.map +0 -1
- package/dist/agents/official-agents.d.ts +0 -4
- package/dist/agents/official-agents.d.ts.map +0 -1
- package/dist/agents/official-agents.js +0 -559
- package/dist/agents/official-agents.js.map +0 -1
- package/dist/agents/registry.d.ts +0 -57
- package/dist/agents/registry.d.ts.map +0 -1
- package/dist/agents/registry.js +0 -271
- package/dist/agents/registry.js.map +0 -1
- package/dist/capability/index.d.ts +0 -10
- package/dist/capability/index.d.ts.map +0 -1
- package/dist/capability/index.js +0 -10
- package/dist/capability/index.js.map +0 -1
- package/dist/capability/types.d.ts +0 -10
- package/dist/capability/types.d.ts.map +0 -1
- package/dist/capability/types.js +0 -10
- package/dist/capability/types.js.map +0 -1
- package/dist/cli/commands/agents.d.ts +0 -3
- package/dist/cli/commands/agents.d.ts.map +0 -1
- package/dist/cli/commands/agents.js +0 -62
- package/dist/cli/commands/agents.js.map +0 -1
- package/dist/cli/commands/rules.d.ts +0 -8
- package/dist/cli/commands/rules.d.ts.map +0 -1
- package/dist/cli/commands/rules.js +0 -89
- package/dist/cli/commands/rules.js.map +0 -1
- package/dist/daemon/auto-disable-scheduler.d.ts +0 -53
- package/dist/daemon/auto-disable-scheduler.d.ts.map +0 -1
- package/dist/daemon/auto-disable-scheduler.js +0 -114
- package/dist/daemon/auto-disable-scheduler.js.map +0 -1
- package/dist/daemon/handlers/pre-tool-use.d.ts +0 -39
- package/dist/daemon/handlers/pre-tool-use.d.ts.map +0 -1
- package/dist/daemon/handlers/pre-tool-use.js +0 -166
- package/dist/daemon/handlers/pre-tool-use.js.map +0 -1
- package/dist/daemon/routing-observer.d.ts +0 -42
- package/dist/daemon/routing-observer.d.ts.map +0 -1
- package/dist/daemon/routing-observer.js +0 -264
- package/dist/daemon/routing-observer.js.map +0 -1
- package/dist/daemon/routing-state.d.ts +0 -64
- package/dist/daemon/routing-state.d.ts.map +0 -1
- package/dist/daemon/routing-state.js +0 -240
- package/dist/daemon/routing-state.js.map +0 -1
- package/dist/engine/agent-router.d.ts +0 -142
- package/dist/engine/agent-router.d.ts.map +0 -1
- package/dist/engine/agent-router.js +0 -276
- package/dist/engine/agent-router.js.map +0 -1
- package/dist/engine/context-builder.d.ts +0 -23
- package/dist/engine/context-builder.d.ts.map +0 -1
- package/dist/engine/context-builder.js +0 -63
- package/dist/engine/context-builder.js.map +0 -1
- package/dist/engine/conventions/basic-security.yaml +0 -109
- package/dist/engine/conventions/code-quality.yaml +0 -123
- package/dist/engine/conventions/database-safety.yaml +0 -74
- package/dist/engine/conventions/dependency-safety.yaml +0 -132
- package/dist/engine/conventions/docker-safety.yaml +0 -69
- package/dist/engine/conventions/git-safety.yaml +0 -118
- package/dist/engine/conventions/go-best-practices.yaml +0 -84
- package/dist/engine/conventions/python-best-practices.yaml +0 -96
- package/dist/engine/conventions/react-best-practices.yaml +0 -96
- package/dist/engine/conventions/routing.yaml +0 -378
- package/dist/engine/conventions/strict-security.yaml +0 -30
- package/dist/engine/conventions/ts-quality.yaml +0 -49
- package/dist/engine/dsl/compiler.d.ts +0 -34
- package/dist/engine/dsl/compiler.d.ts.map +0 -1
- package/dist/engine/dsl/compiler.js +0 -702
- package/dist/engine/dsl/compiler.js.map +0 -1
- package/dist/engine/dsl/parser.d.ts +0 -25
- package/dist/engine/dsl/parser.d.ts.map +0 -1
- package/dist/engine/dsl/parser.js +0 -208
- package/dist/engine/dsl/parser.js.map +0 -1
- package/dist/engine/dsl/runtime.d.ts +0 -46
- package/dist/engine/dsl/runtime.d.ts.map +0 -1
- package/dist/engine/dsl/runtime.js +0 -173
- package/dist/engine/dsl/runtime.js.map +0 -1
- package/dist/engine/dsl/types.d.ts +0 -139
- package/dist/engine/dsl/types.d.ts.map +0 -1
- package/dist/engine/dsl/types.js +0 -11
- package/dist/engine/dsl/types.js.map +0 -1
- package/dist/engine/evidence-store.d.ts +0 -44
- package/dist/engine/evidence-store.d.ts.map +0 -1
- package/dist/engine/evidence-store.js +0 -109
- package/dist/engine/evidence-store.js.map +0 -1
- package/dist/engine/experiment-router.d.ts +0 -102
- package/dist/engine/experiment-router.d.ts.map +0 -1
- package/dist/engine/experiment-router.js +0 -289
- package/dist/engine/experiment-router.js.map +0 -1
- package/dist/engine/recommender.d.ts +0 -52
- package/dist/engine/recommender.d.ts.map +0 -1
- package/dist/engine/recommender.js +0 -162
- package/dist/engine/recommender.js.map +0 -1
- package/dist/engine/rule-engine.d.ts +0 -33
- package/dist/engine/rule-engine.d.ts.map +0 -1
- package/dist/engine/rule-engine.js +0 -250
- package/dist/engine/rule-engine.js.map +0 -1
- package/dist/engine/security-gates.d.ts +0 -42
- package/dist/engine/security-gates.d.ts.map +0 -1
- package/dist/engine/security-gates.js +0 -210
- package/dist/engine/security-gates.js.map +0 -1
- package/dist/intelligence/classifier.d.ts +0 -75
- package/dist/intelligence/classifier.d.ts.map +0 -1
- package/dist/intelligence/classifier.js +0 -352
- package/dist/intelligence/classifier.js.map +0 -1
- package/dist/intelligence/context-gatherer.d.ts +0 -101
- package/dist/intelligence/context-gatherer.d.ts.map +0 -1
- package/dist/intelligence/context-gatherer.js +0 -417
- package/dist/intelligence/context-gatherer.js.map +0 -1
- package/dist/intelligence/cot-classifier.d.ts +0 -95
- package/dist/intelligence/cot-classifier.d.ts.map +0 -1
- package/dist/intelligence/cot-classifier.js +0 -391
- package/dist/intelligence/cot-classifier.js.map +0 -1
- package/dist/intelligence/distiller.d.ts +0 -22
- package/dist/intelligence/distiller.d.ts.map +0 -1
- package/dist/intelligence/distiller.js +0 -108
- package/dist/intelligence/distiller.js.map +0 -1
- package/dist/intelligence/execution-doc-builder.d.ts +0 -151
- package/dist/intelligence/execution-doc-builder.d.ts.map +0 -1
- package/dist/intelligence/execution-doc-builder.js +0 -1018
- package/dist/intelligence/execution-doc-builder.js.map +0 -1
- package/dist/intelligence/intent-types.d.ts +0 -13
- package/dist/intelligence/intent-types.d.ts.map +0 -1
- package/dist/intelligence/intent-types.js +0 -19
- package/dist/intelligence/intent-types.js.map +0 -1
- package/dist/intelligence/multimodal-parser.d.ts +0 -105
- package/dist/intelligence/multimodal-parser.d.ts.map +0 -1
- package/dist/intelligence/multimodal-parser.js +0 -425
- package/dist/intelligence/multimodal-parser.js.map +0 -1
- package/dist/intelligence/quality-gate.d.ts +0 -45
- package/dist/intelligence/quality-gate.d.ts.map +0 -1
- package/dist/intelligence/quality-gate.js +0 -193
- package/dist/intelligence/quality-gate.js.map +0 -1
- package/dist/intelligence/task-segmenter.d.ts.map +0 -1
- package/dist/intelligence/task-segmenter.js.map +0 -1
- package/dist/web/routes/agents.d.ts +0 -7
- package/dist/web/routes/agents.d.ts.map +0 -1
- package/dist/web/routes/agents.js +0 -209
- package/dist/web/routes/agents.js.map +0 -1
- package/dist/web/routes/execution-trace.d.ts +0 -21
- package/dist/web/routes/execution-trace.d.ts.map +0 -1
- package/dist/web/routes/execution-trace.js +0 -353
- package/dist/web/routes/execution-trace.js.map +0 -1
- package/dist/web/routes/experiments.d.ts +0 -15
- package/dist/web/routes/experiments.d.ts.map +0 -1
- package/dist/web/routes/experiments.js +0 -187
- package/dist/web/routes/experiments.js.map +0 -1
- package/dist/web/routes/routing.d.ts +0 -17
- package/dist/web/routes/routing.d.ts.map +0 -1
- package/dist/web/routes/routing.js +0 -592
- package/dist/web/routes/routing.js.map +0 -1
- package/dist/web/routes/workflows.d.ts +0 -19
- package/dist/web/routes/workflows.d.ts.map +0 -1
- package/dist/web/routes/workflows.js +0 -86
- package/dist/web/routes/workflows.js.map +0 -1
- package/dist/web/static/assets/AIConfig-R5wZ3ZKT.js +0 -2
- package/dist/web/static/assets/AIConfig-R5wZ3ZKT.js.map +0 -1
- package/dist/web/static/assets/Agents-Beg34V1g.js +0 -2
- package/dist/web/static/assets/Agents-Beg34V1g.js.map +0 -1
- package/dist/web/static/assets/CodeBlock--H53gk46.js +0 -2
- package/dist/web/static/assets/CodeBlock--H53gk46.js.map +0 -1
- package/dist/web/static/assets/Dashboard-Cy1xsj1J.js +0 -2
- package/dist/web/static/assets/Dashboard-Cy1xsj1J.js.map +0 -1
- package/dist/web/static/assets/Events-mFhXl4zI.js +0 -2
- package/dist/web/static/assets/Events-mFhXl4zI.js.map +0 -1
- package/dist/web/static/assets/ExecutionTrace-DG901hLR.js +0 -3
- package/dist/web/static/assets/ExecutionTrace-DG901hLR.js.map +0 -1
- package/dist/web/static/assets/MarkdownRenderer-CCIz1MOz.js +0 -2
- package/dist/web/static/assets/MarkdownRenderer-CCIz1MOz.js.map +0 -1
- package/dist/web/static/assets/Routing-B7BFLfjh.js +0 -2
- package/dist/web/static/assets/Routing-B7BFLfjh.js.map +0 -1
- package/dist/web/static/assets/SessionDetail-BT0l4RrK.js +0 -2
- package/dist/web/static/assets/SessionDetail-BT0l4RrK.js.map +0 -1
- package/dist/web/static/assets/Sessions-C6J_HQ_u.js +0 -2
- package/dist/web/static/assets/Sessions-C6J_HQ_u.js.map +0 -1
- package/dist/web/static/assets/Skills-4DQWLaTv.js +0 -2
- package/dist/web/static/assets/Skills-4DQWLaTv.js.map +0 -1
- package/dist/web/static/assets/WorkflowDetail-zhNqUkBE.js +0 -2
- package/dist/web/static/assets/WorkflowDetail-zhNqUkBE.js.map +0 -1
- package/dist/web/static/assets/Workflows-Btvi-lGw.js +0 -2
- package/dist/web/static/assets/Workflows-Btvi-lGw.js.map +0 -1
- package/dist/web/static/assets/export-BQQZLaHV.js +0 -4
- package/dist/web/static/assets/export-BQQZLaHV.js.map +0 -1
- package/dist/web/static/assets/index-Cgr9qMtq.js +0 -3
- package/dist/web/static/assets/index-Cgr9qMtq.js.map +0 -1
- package/dist/web/static/assets/index-CngWb5gC.css +0 -1
- package/dist/web/static/assets/lucide-53bR2rki.js.map +0 -1
- package/dist/web/static/assets/react-router-I-HqunH7.js +0 -20
|
@@ -1,5 +1,32 @@
|
|
|
1
|
-
-- Claude Forge SQLite Schema (
|
|
2
|
-
--
|
|
1
|
+
-- Claude Forge SQLite Schema (core tables)
|
|
2
|
+
-- Active tables: events, sessions, injections, tasks, task_events,
|
|
3
|
+
-- routing_events, token_usage, skill_invocations
|
|
4
|
+
--
|
|
5
|
+
-- ── Table Relationships ──────────────────────────────────────────────────────
|
|
6
|
+
--
|
|
7
|
+
-- events (core fact table)
|
|
8
|
+
-- └─ sessions.session_id — aggregated from events (app-layer, no FK)
|
|
9
|
+
-- └─ injections.event_id — FK ON DELETE CASCADE
|
|
10
|
+
-- └─ task_events.event_id — FK ON DELETE CASCADE
|
|
11
|
+
--
|
|
12
|
+
-- routing_events (agent routing decisions)
|
|
13
|
+
-- └─ routing_events.session_id → events.session_id (logical, no FK)
|
|
14
|
+
-- └─ skill_invocations.route_request_id → routing_events.route_request_id (logical, no FK)
|
|
15
|
+
--
|
|
16
|
+
-- skill_invocations (skill execution records)
|
|
17
|
+
-- └─ skill_invocations.session_id → events.session_id (logical, no FK)
|
|
18
|
+
-- └─ skill_invocations.route_request_id → routing_events.route_request_id (logical, no FK)
|
|
19
|
+
--
|
|
20
|
+
-- token_usage (LLM token accounting)
|
|
21
|
+
-- └─ token_usage.session_id → events.session_id (logical, no FK)
|
|
22
|
+
--
|
|
23
|
+
-- Why no FK on routing_events / skill_invocations / token_usage:
|
|
24
|
+
-- 1. routing_events.route_request_id is nullable and not UNIQUE — cannot be FK target
|
|
25
|
+
-- 2. Write order is not guaranteed: skill_invocations may be written before routing_events
|
|
26
|
+
-- 3. session_id references are maintained by application logic; sessions is an aggregate
|
|
27
|
+
-- table that may lag behind event writes
|
|
28
|
+
-- 4. Indexes on join columns provide equivalent query performance to FK indexes
|
|
29
|
+
--
|
|
3
30
|
|
|
4
31
|
-- ── Events & Sessions ─────────────────────────────────────────────────────
|
|
5
32
|
|
|
@@ -28,7 +55,7 @@ CREATE TABLE IF NOT EXISTS sessions (
|
|
|
28
55
|
session_id TEXT PRIMARY KEY,
|
|
29
56
|
project_path TEXT NOT NULL,
|
|
30
57
|
status TEXT NOT NULL DEFAULT 'active' CHECK(status IN ('active', 'completed', 'interrupted', 'resumed', 'abandoned')),
|
|
31
|
-
first_prompt TEXT,
|
|
58
|
+
first_prompt TEXT,
|
|
32
59
|
start_time TEXT NOT NULL,
|
|
33
60
|
end_time TEXT,
|
|
34
61
|
last_event_time TEXT,
|
|
@@ -41,77 +68,6 @@ CREATE INDEX IF NOT EXISTS idx_sessions_project ON sessions(project_path);
|
|
|
41
68
|
CREATE INDEX IF NOT EXISTS idx_sessions_status ON sessions(status);
|
|
42
69
|
CREATE INDEX IF NOT EXISTS idx_sessions_start_time ON sessions(start_time DESC);
|
|
43
70
|
|
|
44
|
-
-- ── Quality Issues ─────────────────────────────────────────────────────
|
|
45
|
-
|
|
46
|
-
CREATE TABLE IF NOT EXISTS quality_issues (
|
|
47
|
-
id TEXT PRIMARY KEY,
|
|
48
|
-
session_id TEXT NOT NULL,
|
|
49
|
-
project_path TEXT NOT NULL,
|
|
50
|
-
file_path TEXT NOT NULL,
|
|
51
|
-
category TEXT NOT NULL,
|
|
52
|
-
level TEXT NOT NULL,
|
|
53
|
-
message TEXT NOT NULL,
|
|
54
|
-
resolved INTEGER DEFAULT 0,
|
|
55
|
-
resolved_at TEXT DEFAULT NULL,
|
|
56
|
-
created_at TEXT DEFAULT (datetime('now'))
|
|
57
|
-
);
|
|
58
|
-
|
|
59
|
-
CREATE INDEX IF NOT EXISTS idx_qi_session ON quality_issues(session_id);
|
|
60
|
-
CREATE INDEX IF NOT EXISTS idx_qi_project ON quality_issues(project_path);
|
|
61
|
-
|
|
62
|
-
-- ── Distill Results ─────────────────────────────────────────────────────
|
|
63
|
-
|
|
64
|
-
CREATE TABLE IF NOT EXISTS distill_results (
|
|
65
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
66
|
-
session_id TEXT NOT NULL,
|
|
67
|
-
event_ids TEXT NOT NULL,
|
|
68
|
-
status TEXT DEFAULT 'pending' CHECK(status IN ('pending', 'processing', 'completed', 'failed')),
|
|
69
|
-
retry_count INTEGER DEFAULT 0,
|
|
70
|
-
error_message TEXT,
|
|
71
|
-
created_at TEXT DEFAULT (datetime('now')),
|
|
72
|
-
processed_at TEXT
|
|
73
|
-
);
|
|
74
|
-
|
|
75
|
-
CREATE INDEX IF NOT EXISTS idx_dr_status ON distill_results(status);
|
|
76
|
-
|
|
77
|
-
-- ── V2 Governance ─────────────────────────────────────────────────────
|
|
78
|
-
|
|
79
|
-
CREATE TABLE IF NOT EXISTS v2_tool_events (
|
|
80
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
81
|
-
session_id TEXT NOT NULL,
|
|
82
|
-
route_request_id TEXT,
|
|
83
|
-
tool TEXT NOT NULL,
|
|
84
|
-
args TEXT NOT NULL,
|
|
85
|
-
result TEXT,
|
|
86
|
-
success INTEGER NOT NULL,
|
|
87
|
-
error TEXT,
|
|
88
|
-
timestamp INTEGER NOT NULL,
|
|
89
|
-
created_at TEXT DEFAULT (datetime('now'))
|
|
90
|
-
);
|
|
91
|
-
|
|
92
|
-
CREATE INDEX IF NOT EXISTS idx_v2_events_session ON v2_tool_events(session_id);
|
|
93
|
-
CREATE INDEX IF NOT EXISTS idx_v2_events_route_request ON v2_tool_events(route_request_id);
|
|
94
|
-
CREATE INDEX IF NOT EXISTS idx_v2_events_timestamp ON v2_tool_events(timestamp DESC);
|
|
95
|
-
CREATE INDEX IF NOT EXISTS idx_v2_events_tool ON v2_tool_events(tool);
|
|
96
|
-
|
|
97
|
-
CREATE TABLE IF NOT EXISTS v2_decisions (
|
|
98
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
99
|
-
session_id TEXT NOT NULL,
|
|
100
|
-
event_id INTEGER NOT NULL,
|
|
101
|
-
rule_id TEXT,
|
|
102
|
-
level TEXT NOT NULL CHECK(level IN ('allow', 'warn', 'confirm', 'block')),
|
|
103
|
-
reason TEXT,
|
|
104
|
-
suggestion TEXT,
|
|
105
|
-
user_choice TEXT,
|
|
106
|
-
timestamp INTEGER NOT NULL,
|
|
107
|
-
created_at TEXT DEFAULT (datetime('now')),
|
|
108
|
-
FOREIGN KEY (event_id) REFERENCES v2_tool_events(id) ON DELETE CASCADE
|
|
109
|
-
);
|
|
110
|
-
|
|
111
|
-
CREATE INDEX IF NOT EXISTS idx_v2_decisions_session ON v2_decisions(session_id);
|
|
112
|
-
CREATE INDEX IF NOT EXISTS idx_v2_decisions_level ON v2_decisions(level);
|
|
113
|
-
CREATE INDEX IF NOT EXISTS idx_v2_decisions_rule ON v2_decisions(rule_id);
|
|
114
|
-
|
|
115
71
|
-- ── Injections ─────────────────────────────────────────────────────
|
|
116
72
|
|
|
117
73
|
CREATE TABLE IF NOT EXISTS injections (
|
|
@@ -167,10 +123,10 @@ CREATE TABLE IF NOT EXISTS routing_events (
|
|
|
167
123
|
ts INTEGER NOT NULL,
|
|
168
124
|
prompt TEXT NOT NULL,
|
|
169
125
|
intent_json TEXT NOT NULL,
|
|
170
|
-
routed_to_type TEXT,
|
|
126
|
+
routed_to_type TEXT,
|
|
171
127
|
routed_to_name TEXT,
|
|
172
128
|
is_forced INTEGER DEFAULT 0,
|
|
173
|
-
obeyed INTEGER,
|
|
129
|
+
obeyed INTEGER,
|
|
174
130
|
classification_ms INTEGER,
|
|
175
131
|
fallback_used INTEGER DEFAULT 0,
|
|
176
132
|
refusal_reason TEXT,
|
|
@@ -179,12 +135,12 @@ CREATE TABLE IF NOT EXISTS routing_events (
|
|
|
179
135
|
completed_ts INTEGER,
|
|
180
136
|
total_execution_ms INTEGER,
|
|
181
137
|
completion_reason TEXT,
|
|
182
|
-
downstream_task_chain TEXT,
|
|
138
|
+
downstream_task_chain TEXT,
|
|
183
139
|
injection_version TEXT,
|
|
184
|
-
experiment_id TEXT,
|
|
185
|
-
experiment_group TEXT,
|
|
186
|
-
skill_confidence REAL,
|
|
187
|
-
skill_source TEXT,
|
|
140
|
+
experiment_id TEXT,
|
|
141
|
+
experiment_group TEXT,
|
|
142
|
+
skill_confidence REAL,
|
|
143
|
+
skill_source TEXT,
|
|
188
144
|
created_at TEXT DEFAULT (datetime('now'))
|
|
189
145
|
);
|
|
190
146
|
|
|
@@ -195,76 +151,41 @@ CREATE INDEX IF NOT EXISTS idx_routing_events_agent ON routing_events(routed_to_
|
|
|
195
151
|
CREATE INDEX IF NOT EXISTS idx_routing_events_obeyed ON routing_events(obeyed);
|
|
196
152
|
CREATE INDEX IF NOT EXISTS idx_routing_events_experiment ON routing_events(experiment_id, experiment_group);
|
|
197
153
|
|
|
198
|
-
-- ──
|
|
199
|
-
|
|
200
|
-
CREATE TABLE IF NOT EXISTS experiment_assignments (
|
|
201
|
-
session_id TEXT NOT NULL,
|
|
202
|
-
experiment_id TEXT NOT NULL,
|
|
203
|
-
group_id TEXT NOT NULL,
|
|
204
|
-
assigned_at TEXT DEFAULT (datetime('now')),
|
|
205
|
-
PRIMARY KEY (session_id, experiment_id)
|
|
206
|
-
);
|
|
207
|
-
|
|
208
|
-
CREATE INDEX IF NOT EXISTS idx_exp_assign_exp ON experiment_assignments(experiment_id);
|
|
209
|
-
|
|
210
|
-
-- ── Routing Rule States (Phase 5 Feature 2: auto-disable) ───────────────
|
|
211
|
-
-- One row per (task_type, agent) combination. A disabled entry causes the
|
|
212
|
-
-- router to skip matches for that pair and continue to the next rule.
|
|
213
|
-
|
|
214
|
-
CREATE TABLE IF NOT EXISTS routing_rule_states (
|
|
215
|
-
task_type TEXT NOT NULL,
|
|
216
|
-
agent TEXT NOT NULL,
|
|
217
|
-
disabled INTEGER NOT NULL DEFAULT 0,
|
|
218
|
-
disabled_at TEXT,
|
|
219
|
-
disabled_reason TEXT,
|
|
220
|
-
auto_disabled INTEGER NOT NULL DEFAULT 0, -- 1 if set by the auto-disable scheduler
|
|
221
|
-
updated_at TEXT DEFAULT (datetime('now')),
|
|
222
|
-
PRIMARY KEY (task_type, agent)
|
|
223
|
-
);
|
|
224
|
-
|
|
225
|
-
CREATE INDEX IF NOT EXISTS idx_rule_states_disabled ON routing_rule_states(disabled);
|
|
226
|
-
|
|
227
|
-
-- ── Token Usage (Token 用量追踪) ──────────────────────────────────────────
|
|
228
|
-
-- 记录每次 AI 调用的 token 用量,用于成本可观测和预算控制
|
|
154
|
+
-- ── Token Usage ──────────────────────────────────────────────────────
|
|
229
155
|
|
|
230
156
|
CREATE TABLE IF NOT EXISTS token_usage (
|
|
231
157
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
232
|
-
session_id TEXT NOT NULL,
|
|
158
|
+
session_id TEXT NOT NULL, -- logical ref → events.session_id; no FK due to write-order race (sessions is aggregate, may lag)
|
|
233
159
|
timestamp INTEGER NOT NULL,
|
|
234
160
|
input_tokens INTEGER NOT NULL,
|
|
235
161
|
output_tokens INTEGER NOT NULL,
|
|
236
162
|
total_tokens INTEGER NOT NULL,
|
|
237
|
-
model TEXT,
|
|
238
|
-
tool_name TEXT,
|
|
163
|
+
model TEXT,
|
|
164
|
+
tool_name TEXT,
|
|
239
165
|
created_at TEXT DEFAULT (datetime('now'))
|
|
240
166
|
);
|
|
241
167
|
|
|
242
168
|
CREATE INDEX IF NOT EXISTS idx_token_usage_session ON token_usage(session_id);
|
|
243
169
|
CREATE INDEX IF NOT EXISTS idx_token_usage_timestamp ON token_usage(timestamp DESC);
|
|
244
170
|
|
|
245
|
-
-- ── Skill Invocations
|
|
246
|
-
-- 记录 Agent 动态调用 Skill 的完整链路,形成"一次路由 → Agent → N 次 Skill 调用"
|
|
247
|
-
-- 的证据链,配合 routing_events.route_request_id 可串联外层路由与内层 Skill 调用。
|
|
171
|
+
-- ── Skill Invocations ─────────────────────────────────────────────────
|
|
248
172
|
|
|
249
173
|
CREATE TABLE IF NOT EXISTS skill_invocations (
|
|
250
|
-
id TEXT PRIMARY KEY,
|
|
251
|
-
route_request_id TEXT,
|
|
174
|
+
id TEXT PRIMARY KEY,
|
|
175
|
+
route_request_id TEXT,
|
|
252
176
|
session_id TEXT NOT NULL,
|
|
253
|
-
agent_id TEXT,
|
|
254
|
-
skill_id TEXT NOT NULL,
|
|
255
|
-
invocation_type TEXT NOT NULL,
|
|
256
|
-
reason TEXT,
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
success INTEGER DEFAULT 1, -- 1 成功 / 0 失败
|
|
266
|
-
error TEXT, -- 错误信息(如 skill 不存在)
|
|
267
|
-
timestamp INTEGER NOT NULL, -- 调用时间戳(ms)
|
|
177
|
+
agent_id TEXT,
|
|
178
|
+
skill_id TEXT NOT NULL,
|
|
179
|
+
invocation_type TEXT NOT NULL,
|
|
180
|
+
reason TEXT,
|
|
181
|
+
workflow TEXT,
|
|
182
|
+
phase TEXT,
|
|
183
|
+
feature_slug TEXT,
|
|
184
|
+
artifact_path TEXT,
|
|
185
|
+
depth INTEGER DEFAULT 0,
|
|
186
|
+
success INTEGER DEFAULT 1,
|
|
187
|
+
error TEXT,
|
|
188
|
+
timestamp INTEGER NOT NULL,
|
|
268
189
|
created_at TEXT DEFAULT (datetime('now'))
|
|
269
190
|
);
|
|
270
191
|
|
|
@@ -272,5 +193,32 @@ CREATE INDEX IF NOT EXISTS idx_skill_invocations_route_request ON skill_invocati
|
|
|
272
193
|
CREATE INDEX IF NOT EXISTS idx_skill_invocations_session ON skill_invocations(session_id);
|
|
273
194
|
CREATE INDEX IF NOT EXISTS idx_skill_invocations_skill ON skill_invocations(skill_id);
|
|
274
195
|
CREATE INDEX IF NOT EXISTS idx_skill_invocations_timestamp ON skill_invocations(timestamp DESC);
|
|
275
|
-
|
|
276
|
-
--
|
|
196
|
+
|
|
197
|
+
-- ── Composite Indexes (high-frequency query optimization) ─────────────────────
|
|
198
|
+
-- These cover session-scoped queries that filter by session_id then sort by time.
|
|
199
|
+
-- Existing single-column indexes are retained for other query paths.
|
|
200
|
+
|
|
201
|
+
CREATE INDEX IF NOT EXISTS idx_events_session_ts ON events(session_id, timestamp DESC);
|
|
202
|
+
CREATE INDEX IF NOT EXISTS idx_routing_events_session_ts ON routing_events(session_id, ts DESC);
|
|
203
|
+
CREATE INDEX IF NOT EXISTS idx_skill_invocations_session_ts ON skill_invocations(session_id, timestamp DESC);
|
|
204
|
+
|
|
205
|
+
-- ── Additional Performance Indexes (Phase 1 Refactor) ─────────────────────
|
|
206
|
+
|
|
207
|
+
-- routing_events: optimize obeyed flag queries with time sorting
|
|
208
|
+
CREATE INDEX IF NOT EXISTS idx_routing_events_obeyed_ts ON routing_events(obeyed, ts DESC);
|
|
209
|
+
|
|
210
|
+
-- tasks: optimize filter+sort queries (start_time range filter + session join)
|
|
211
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_start_time_session ON tasks(start_time DESC, session_id);
|
|
212
|
+
|
|
213
|
+
-- events: optimize session + hook_type composite queries
|
|
214
|
+
CREATE INDEX IF NOT EXISTS idx_events_session_hook ON events(session_id, hook_type, timestamp DESC);
|
|
215
|
+
|
|
216
|
+
-- injections: optimize session + handler composite queries
|
|
217
|
+
CREATE INDEX IF NOT EXISTS idx_injections_session_handler ON injections(session_id, source_handler);
|
|
218
|
+
|
|
219
|
+
-- routing_events: optimize routed_to_type distribution (H1 aggregate path)
|
|
220
|
+
CREATE INDEX IF NOT EXISTS idx_routing_events_type_ts ON routing_events(routed_to_type, ts DESC);
|
|
221
|
+
|
|
222
|
+
-- skill_invocations: optimize workflow/phase and feature_slug queries (H4 dedup: previously migration-only)
|
|
223
|
+
CREATE INDEX IF NOT EXISTS idx_skill_invocations_workflow ON skill_invocations(workflow, phase);
|
|
224
|
+
CREATE INDEX IF NOT EXISTS idx_skill_invocations_feature ON skill_invocations(feature_slug);
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SessionOperations — sessions 聚合表读写
|
|
3
|
+
*
|
|
4
|
+
* 拆分自 sqlite.ts。负责:
|
|
5
|
+
* - upsertSession:每次 writeEvent 后被调用,更新 sessions 聚合
|
|
6
|
+
* - querySessions:直接读聚合表,O(sessions) 而非 O(sessions × events)
|
|
7
|
+
*/
|
|
8
|
+
import type Database from 'better-sqlite3';
|
|
9
|
+
import type { ForgeEvent } from '../types.js';
|
|
10
|
+
export interface SessionSummary {
|
|
11
|
+
session_id: string;
|
|
12
|
+
first_prompt: string;
|
|
13
|
+
event_count: number;
|
|
14
|
+
start_time: string;
|
|
15
|
+
end_time: string;
|
|
16
|
+
}
|
|
17
|
+
export declare class SessionOperations {
|
|
18
|
+
private db;
|
|
19
|
+
constructor(db: Database.Database);
|
|
20
|
+
/**
|
|
21
|
+
* 将事件聚合到 sessions 表,供 querySessions 直接读取。
|
|
22
|
+
*
|
|
23
|
+
* 语义:
|
|
24
|
+
* - 首次出现 session_id → 插入一行
|
|
25
|
+
* - 已存在 → event_count += 1,end/last_event_time 取更晚的,first_prompt 只在
|
|
26
|
+
* 原值为 NULL 时才被 UserPromptSubmit 的前 200 字填充
|
|
27
|
+
*/
|
|
28
|
+
upsertSession(event: ForgeEvent): void;
|
|
29
|
+
querySessions(filter?: {
|
|
30
|
+
project_path?: string;
|
|
31
|
+
limit?: number;
|
|
32
|
+
}): SessionSummary[];
|
|
33
|
+
/** Total session row count. */
|
|
34
|
+
countAllSessions(): number;
|
|
35
|
+
/** Per-day session counts (date(start_time) → count) within [since, until). */
|
|
36
|
+
aggregateDailySessionCounts(opts: {
|
|
37
|
+
since: string;
|
|
38
|
+
until?: string;
|
|
39
|
+
}): Array<{
|
|
40
|
+
date: string;
|
|
41
|
+
count: number;
|
|
42
|
+
}>;
|
|
43
|
+
/** Sessions with start_time in [since, until?), ordered by start_time DESC. */
|
|
44
|
+
querySessionsByTimeRange(opts: {
|
|
45
|
+
since: string;
|
|
46
|
+
until?: string;
|
|
47
|
+
}): SessionSummary[];
|
|
48
|
+
/** Count of sessions with start_time in [since, until?). */
|
|
49
|
+
countSessionsByRange(opts: {
|
|
50
|
+
since: string;
|
|
51
|
+
until?: string;
|
|
52
|
+
}): number;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=sessions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../src/core/storage/sessions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,iBAAiB;IAChB,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAEzC;;;;;;;OAOG;IACH,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAmCtC,aAAa,CAAC,MAAM,GAAE;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;KACX,GAAG,cAAc,EAAE;IAsCzB,+BAA+B;IAC/B,gBAAgB,IAAI,MAAM;IAK1B,+EAA+E;IAC/E,2BAA2B,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAa5G,+EAA+E;IAC/E,wBAAwB,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,cAAc,EAAE;IA4BnF,4DAA4D;IAC5D,oBAAoB,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;CAWtE"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SessionOperations — sessions 聚合表读写
|
|
3
|
+
*
|
|
4
|
+
* 拆分自 sqlite.ts。负责:
|
|
5
|
+
* - upsertSession:每次 writeEvent 后被调用,更新 sessions 聚合
|
|
6
|
+
* - querySessions:直接读聚合表,O(sessions) 而非 O(sessions × events)
|
|
7
|
+
*/
|
|
8
|
+
export class SessionOperations {
|
|
9
|
+
db;
|
|
10
|
+
constructor(db) {
|
|
11
|
+
this.db = db;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* 将事件聚合到 sessions 表,供 querySessions 直接读取。
|
|
15
|
+
*
|
|
16
|
+
* 语义:
|
|
17
|
+
* - 首次出现 session_id → 插入一行
|
|
18
|
+
* - 已存在 → event_count += 1,end/last_event_time 取更晚的,first_prompt 只在
|
|
19
|
+
* 原值为 NULL 时才被 UserPromptSubmit 的前 200 字填充
|
|
20
|
+
*/
|
|
21
|
+
upsertSession(event) {
|
|
22
|
+
const firstPrompt = event.hook_type === 'UserPromptSubmit' && event.user_prompt
|
|
23
|
+
? event.user_prompt.slice(0, 200)
|
|
24
|
+
: null;
|
|
25
|
+
const stmt = this.db.prepare(`
|
|
26
|
+
INSERT INTO sessions (
|
|
27
|
+
session_id, project_path, status, first_prompt,
|
|
28
|
+
start_time, end_time, last_event_time, event_count
|
|
29
|
+
)
|
|
30
|
+
VALUES (?, ?, 'active', ?, ?, ?, ?, 1)
|
|
31
|
+
ON CONFLICT(session_id) DO UPDATE SET
|
|
32
|
+
end_time = CASE
|
|
33
|
+
WHEN excluded.end_time > COALESCE(sessions.end_time, '') THEN excluded.end_time
|
|
34
|
+
ELSE sessions.end_time
|
|
35
|
+
END,
|
|
36
|
+
last_event_time = CASE
|
|
37
|
+
WHEN excluded.last_event_time > COALESCE(sessions.last_event_time, '') THEN excluded.last_event_time
|
|
38
|
+
ELSE sessions.last_event_time
|
|
39
|
+
END,
|
|
40
|
+
event_count = COALESCE(sessions.event_count, 0) + 1,
|
|
41
|
+
first_prompt = COALESCE(sessions.first_prompt, excluded.first_prompt),
|
|
42
|
+
updated_at = datetime('now')
|
|
43
|
+
`);
|
|
44
|
+
stmt.run(event.session_id, event.project_path, firstPrompt, event.timestamp, event.timestamp, event.timestamp);
|
|
45
|
+
}
|
|
46
|
+
querySessions(filter = {}) {
|
|
47
|
+
const conditions = [];
|
|
48
|
+
const params = [];
|
|
49
|
+
if (filter.project_path) {
|
|
50
|
+
conditions.push('project_path = ?');
|
|
51
|
+
params.push(filter.project_path);
|
|
52
|
+
}
|
|
53
|
+
const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
54
|
+
const limit = filter.limit ?? 10;
|
|
55
|
+
const sql = `
|
|
56
|
+
SELECT
|
|
57
|
+
session_id,
|
|
58
|
+
first_prompt,
|
|
59
|
+
event_count,
|
|
60
|
+
start_time,
|
|
61
|
+
COALESCE(end_time, last_event_time, start_time) AS end_time
|
|
62
|
+
FROM sessions
|
|
63
|
+
${where}
|
|
64
|
+
ORDER BY start_time DESC
|
|
65
|
+
LIMIT ?
|
|
66
|
+
`;
|
|
67
|
+
params.push(limit);
|
|
68
|
+
const rows = this.db.prepare(sql).all(...params);
|
|
69
|
+
return rows.map(r => ({
|
|
70
|
+
session_id: r.session_id,
|
|
71
|
+
first_prompt: r.first_prompt || '',
|
|
72
|
+
event_count: r.event_count ?? 0,
|
|
73
|
+
start_time: r.start_time,
|
|
74
|
+
end_time: r.end_time,
|
|
75
|
+
}));
|
|
76
|
+
}
|
|
77
|
+
// ── H2: 聚合 / 计数方法 ───────────────────────────────────────────────
|
|
78
|
+
/** Total session row count. */
|
|
79
|
+
countAllSessions() {
|
|
80
|
+
const row = this.db.prepare('SELECT COUNT(*) as cnt FROM sessions').get();
|
|
81
|
+
return row.cnt;
|
|
82
|
+
}
|
|
83
|
+
/** Per-day session counts (date(start_time) → count) within [since, until). */
|
|
84
|
+
aggregateDailySessionCounts(opts) {
|
|
85
|
+
const conditions = ['start_time >= ?'];
|
|
86
|
+
const params = [opts.since];
|
|
87
|
+
if (opts.until !== undefined) {
|
|
88
|
+
conditions.push('start_time < ?');
|
|
89
|
+
params.push(opts.until);
|
|
90
|
+
}
|
|
91
|
+
const sql = `SELECT date(start_time) as date, COUNT(*) as count FROM sessions
|
|
92
|
+
WHERE ${conditions.join(' AND ')}
|
|
93
|
+
GROUP BY date ORDER BY date`;
|
|
94
|
+
return this.db.prepare(sql).all(...params);
|
|
95
|
+
}
|
|
96
|
+
/** Sessions with start_time in [since, until?), ordered by start_time DESC. */
|
|
97
|
+
querySessionsByTimeRange(opts) {
|
|
98
|
+
const conditions = ['start_time >= ?'];
|
|
99
|
+
const params = [opts.since];
|
|
100
|
+
if (opts.until !== undefined) {
|
|
101
|
+
conditions.push('start_time < ?');
|
|
102
|
+
params.push(opts.until);
|
|
103
|
+
}
|
|
104
|
+
const sql = `
|
|
105
|
+
SELECT
|
|
106
|
+
session_id,
|
|
107
|
+
first_prompt,
|
|
108
|
+
event_count,
|
|
109
|
+
start_time,
|
|
110
|
+
COALESCE(end_time, last_event_time, start_time) AS end_time
|
|
111
|
+
FROM sessions
|
|
112
|
+
WHERE ${conditions.join(' AND ')}
|
|
113
|
+
ORDER BY start_time DESC
|
|
114
|
+
`;
|
|
115
|
+
const rows = this.db.prepare(sql).all(...params);
|
|
116
|
+
return rows.map(r => ({
|
|
117
|
+
session_id: r.session_id,
|
|
118
|
+
first_prompt: r.first_prompt || '',
|
|
119
|
+
event_count: r.event_count ?? 0,
|
|
120
|
+
start_time: r.start_time,
|
|
121
|
+
end_time: r.end_time,
|
|
122
|
+
}));
|
|
123
|
+
}
|
|
124
|
+
/** Count of sessions with start_time in [since, until?). */
|
|
125
|
+
countSessionsByRange(opts) {
|
|
126
|
+
const conditions = ['start_time >= ?'];
|
|
127
|
+
const params = [opts.since];
|
|
128
|
+
if (opts.until !== undefined) {
|
|
129
|
+
conditions.push('start_time < ?');
|
|
130
|
+
params.push(opts.until);
|
|
131
|
+
}
|
|
132
|
+
const sql = `SELECT COUNT(*) as cnt FROM sessions WHERE ${conditions.join(' AND ')}`;
|
|
133
|
+
const row = this.db.prepare(sql).get(...params);
|
|
134
|
+
return row?.cnt ?? 0;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=sessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../src/core/storage/sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SkillOperations — skill_invocations 表读写 + 工作流聚合查询
|
|
3
|
+
*
|
|
4
|
+
* 拆分自 sqlite.ts。
|
|
5
|
+
*/
|
|
6
|
+
import type Database from 'better-sqlite3';
|
|
7
|
+
import type { SkillInvocationRow } from './rows.js';
|
|
8
|
+
export declare class SkillOperations {
|
|
9
|
+
private db;
|
|
10
|
+
constructor(db: Database.Database);
|
|
11
|
+
writeSkillInvocation(row: Omit<SkillInvocationRow, 'created_at'>): void;
|
|
12
|
+
querySkillInvocations(filter?: {
|
|
13
|
+
route_request_id?: string;
|
|
14
|
+
session_id?: string;
|
|
15
|
+
skill_id?: string;
|
|
16
|
+
since?: number;
|
|
17
|
+
limit?: number;
|
|
18
|
+
}): SkillInvocationRow[];
|
|
19
|
+
/**
|
|
20
|
+
* H1: 按 skill_id 聚合调用总数 / 成功 / 失败。
|
|
21
|
+
*
|
|
22
|
+
* 取代 routes 层的"全表 querySkillInvocations + JS reduce"。
|
|
23
|
+
* 走 `idx_skill_invocations_timestamp`。
|
|
24
|
+
*/
|
|
25
|
+
aggregateSkillInvocationsBySkill(filter: {
|
|
26
|
+
since: number;
|
|
27
|
+
limit?: number;
|
|
28
|
+
}): Array<{
|
|
29
|
+
skill_id: string;
|
|
30
|
+
total: number;
|
|
31
|
+
success: number;
|
|
32
|
+
failed: number;
|
|
33
|
+
}>;
|
|
34
|
+
/**
|
|
35
|
+
* 按 route_request_id 聚合工作流进度。
|
|
36
|
+
*
|
|
37
|
+
* 用途:Web UI 展示「某次路由 / 某个 session 走完了哪些 phase」。仅聚合
|
|
38
|
+
* `workflow IS NOT NULL` 的调用(工作流型 reason),普通调用不会被纳入。
|
|
39
|
+
*/
|
|
40
|
+
queryWorkflowProgress(filter?: {
|
|
41
|
+
session_id?: string;
|
|
42
|
+
workflow?: string;
|
|
43
|
+
limit?: number;
|
|
44
|
+
}): Array<{
|
|
45
|
+
route_request_id: string;
|
|
46
|
+
workflow: string;
|
|
47
|
+
phases_completed: string[];
|
|
48
|
+
feature_slug: string | null;
|
|
49
|
+
total_invocations: number;
|
|
50
|
+
success_count: number;
|
|
51
|
+
first_at: number;
|
|
52
|
+
last_at: number;
|
|
53
|
+
}>;
|
|
54
|
+
/** Total skill_invocations row count. */
|
|
55
|
+
countAllSkillInvocations(): number;
|
|
56
|
+
/** Skill invocation count for a single session. */
|
|
57
|
+
countSkillInvocationsBySession(session_id: string): number;
|
|
58
|
+
/** Distinct skill_id count since `since_ms` (unix ms). */
|
|
59
|
+
countDistinctSkillsSince(since_ms: number): number;
|
|
60
|
+
/** Distinct skill_id values for a single session. */
|
|
61
|
+
queryDistinctSkillIdsBySession(session_id: string): string[];
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../src/core/storage/skills.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAEpD,qBAAa,eAAe;IACd,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAEzC,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,YAAY,CAAC,GAAG,IAAI;IAyBvE,qBAAqB,CAAC,MAAM,GAAE;QAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KACX,GAAG,kBAAkB,EAAE;IA6B7B;;;;;OAKG;IACH,gCAAgC,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,KAAK,CAAC;QACjF,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IA0BF;;;;;OAKG;IACH,qBAAqB,CAAC,MAAM,GAAE;QAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;KACX,GAAG,KAAK,CAAC;QACb,gBAAgB,EAAE,MAAM,CAAC;QACzB,QAAQ,EAAE,MAAM,CAAC;QACjB,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IA2EF,yCAAyC;IACzC,wBAAwB,IAAI,MAAM;IAKlC,mDAAmD;IACnD,8BAA8B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAO1D,0DAA0D;IAC1D,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAOlD,qDAAqD;IACrD,8BAA8B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE;CAM7D"}
|