@winspan/claude-forge 8.39.0 → 8.50.6
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 +629 -11
- 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 +5 -2
- 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/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 +200 -8
- package/dist/cli/commands/daemon.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +3 -35
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/menu.js +10 -10
- 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 +0 -17
- package/dist/cli/commands/stats.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 +137 -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/core/ai/provider.d.ts +10 -2
- package/dist/core/ai/provider.d.ts.map +1 -1
- 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 +30 -6
- package/dist/core/config.js.map +1 -1
- package/dist/core/constants.d.ts +2 -2
- package/dist/core/constants.js +2 -2
- package/dist/core/constants.js.map +1 -1
- 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 +176 -0
- package/dist/core/queue/index.js.map +1 -0
- package/dist/core/storage/base.d.ts +33 -0
- package/dist/core/storage/base.d.ts.map +1 -0
- package/dist/core/storage/base.js +211 -0
- package/dist/core/storage/base.js.map +1 -0
- package/dist/core/storage/events.d.ts +52 -0
- package/dist/core/storage/events.d.ts.map +1 -0
- package/dist/core/storage/events.js +201 -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 +71 -0
- package/dist/core/storage/routing.d.ts.map +1 -0
- package/dist/core/storage/routing.js +141 -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 +74 -136
- package/dist/core/storage/sessions.d.ts +34 -0
- package/dist/core/storage/sessions.d.ts.map +1 -0
- package/dist/core/storage/sessions.js +78 -0
- package/dist/core/storage/sessions.js.map +1 -0
- package/dist/core/storage/skills.d.ts +40 -0
- package/dist/core/storage/skills.d.ts.map +1 -0
- package/dist/core/storage/skills.js +107 -0
- package/dist/core/storage/skills.js.map +1 -0
- package/dist/core/storage/sqlite.d.ts +63 -265
- package/dist/core/storage/sqlite.d.ts.map +1 -1
- package/dist/core/storage/sqlite.js +102 -759
- package/dist/core/storage/sqlite.js.map +1 -1
- package/dist/core/storage/tasks.d.ts +64 -0
- package/dist/core/storage/tasks.d.ts.map +1 -0
- package/dist/core/storage/tasks.js +134 -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 +70 -4
- 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/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/logger.d.ts +6 -1
- package/dist/core/utils/logger.d.ts.map +1 -1
- package/dist/core/utils/logger.js +72 -2
- package/dist/core/utils/logger.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/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 +21 -79
- package/dist/daemon/handlers/post-tool-use.js.map +1 -1
- package/dist/daemon/handlers/stop.d.ts +24 -12
- package/dist/daemon/handlers/stop.d.ts.map +1 -1
- package/dist/daemon/handlers/stop.js +141 -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 +103 -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 +76 -120
- 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 +44 -0
- 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.map +1 -1
- package/dist/daemon/server.js +6 -5
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/services/anti-pattern-detector.d.ts +50 -0
- package/dist/daemon/services/anti-pattern-detector.d.ts.map +1 -0
- package/dist/daemon/services/anti-pattern-detector.js +357 -0
- package/dist/daemon/services/anti-pattern-detector.js.map +1 -0
- package/dist/daemon/services/drift-detector.d.ts +64 -0
- package/dist/daemon/services/drift-detector.d.ts.map +1 -0
- package/dist/daemon/services/drift-detector.js +201 -0
- package/dist/daemon/services/drift-detector.js.map +1 -0
- 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 +29 -6
- package/dist/daemon/services/task-segmenter.js.map +1 -0
- package/dist/daemon/services/weekly-report.d.ts +91 -0
- package/dist/daemon/services/weekly-report.d.ts.map +1 -0
- package/dist/daemon/services/weekly-report.js +327 -0
- package/dist/daemon/services/weekly-report.js.map +1 -0
- package/dist/hooks/hook-lib.sh +81 -0
- package/dist/hooks/notification.sh +7 -3
- package/dist/hooks/post-tool-use.sh +8 -4
- package/dist/hooks/pre-tool-use.sh +7 -4
- package/dist/hooks/stop.sh +1 -1
- package/dist/hooks/user-prompt-submit.sh +8 -9
- 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/skills/tools/skill-invoke.d.ts +2 -0
- package/dist/skills/tools/skill-invoke.d.ts.map +1 -1
- package/dist/skills/tools/skill-invoke.js +5 -2
- package/dist/skills/tools/skill-invoke.js.map +1 -1
- 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 +10 -3
- package/dist/web/routes/rules.d.ts.map +1 -1
- package/dist/web/routes/rules.js +80 -95
- 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 +27 -39
- package/dist/web/routes/sessions.js.map +1 -1
- package/dist/web/routes/skill-stats.d.ts.map +1 -1
- package/dist/web/routes/skill-stats.js +38 -0
- 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 +34 -0
- package/dist/web/routes/skills.js.map +1 -1
- package/dist/web/routes/stats.d.ts +7 -0
- package/dist/web/routes/stats.d.ts.map +1 -0
- package/dist/web/routes/stats.js +44 -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 +181 -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 +123 -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 +8 -17
- 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-BQCAQE9D.js +2 -0
- package/dist/web/static/assets/AIConfig-BQCAQE9D.js.map +1 -0
- package/dist/web/static/assets/Dashboard-D7Bo6Kan.js +2 -0
- package/dist/web/static/assets/Dashboard-D7Bo6Kan.js.map +1 -0
- package/dist/web/static/assets/{Drawer-DcU3ln98.js → Drawer-BeHRQxUS.js} +2 -2
- package/dist/web/static/assets/{Drawer-DcU3ln98.js.map → Drawer-BeHRQxUS.js.map} +1 -1
- package/dist/web/static/assets/Events-K_tCY2ti.js +2 -0
- package/dist/web/static/assets/Events-K_tCY2ti.js.map +1 -0
- package/dist/web/static/assets/Reports-BJCmBnc_.js +2 -0
- package/dist/web/static/assets/Reports-BJCmBnc_.js.map +1 -0
- package/dist/web/static/assets/SearchInput-BX2KhMkw.js +2 -0
- package/dist/web/static/assets/SearchInput-BX2KhMkw.js.map +1 -0
- package/dist/web/static/assets/SessionDetail-Bkr-kC7V.js +2 -0
- package/dist/web/static/assets/SessionDetail-Bkr-kC7V.js.map +1 -0
- package/dist/web/static/assets/Sessions-Chx9OCLH.js +2 -0
- package/dist/web/static/assets/Sessions-Chx9OCLH.js.map +1 -0
- package/dist/web/static/assets/Skills-O0GT1i7m.js +2 -0
- package/dist/web/static/assets/Skills-O0GT1i7m.js.map +1 -0
- package/dist/web/static/assets/TaskDetail-5SR8zGzv.js +2 -0
- package/dist/web/static/assets/TaskDetail-5SR8zGzv.js.map +1 -0
- package/dist/web/static/assets/Tasks-DCgDqvOZ.js +2 -0
- package/dist/web/static/assets/Tasks-DCgDqvOZ.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-D8AKj26b.css +1 -0
- package/dist/web/static/assets/index-DxIbmNmr.js +3 -0
- package/dist/web/static/assets/index-DxIbmNmr.js.map +1 -0
- package/dist/web/static/assets/{lucide-53bR2rki.js → lucide-fJlPI3H7.js} +68 -38
- package/dist/web/static/assets/lucide-fJlPI3H7.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 +3 -3
- 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/hook-failure-queue-spec-20260516-1530.md +204 -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/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/hook-failure-queue-changelog-20260516-1530.md +196 -0
- package/docs/implementation/hotfix-daemon-event-reject-20260516-1430.md +56 -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/tasks-list-filter-pagination-changelog-20260518-0930.md +72 -0
- package/docs/reviews/claudemd-template-sync.md +54 -0
- package/docs/reviews/tasks-filter-pagination.md +80 -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 +777 -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/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 +114 -0
- package/src/cli/commands/init.ts +204 -0
- package/src/cli/commands/logs.ts +181 -0
- package/src/cli/commands/mcp.ts +244 -0
- package/src/cli/commands/menu.ts +356 -0
- package/src/cli/commands/skills.ts +185 -0
- package/src/cli/commands/stats.ts +74 -0
- package/src/cli/commands/status.ts +69 -0
- package/src/cli/commands/template.ts +77 -0
- package/src/cli/commands/trace.ts +164 -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 +45 -0
- package/src/core/queue/index.ts +193 -0
- package/src/core/storage/base.ts +226 -0
- package/src/core/storage/events.ts +255 -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 +194 -0
- package/src/core/storage/rows.ts +112 -0
- package/src/core/storage/schema.sql +214 -0
- package/src/core/storage/sessions.ts +104 -0
- package/src/core/storage/skills.ts +164 -0
- package/src/core/storage/sqlite.ts +194 -0
- package/src/core/storage/tasks.ts +170 -0
- package/src/core/storage/token-usage.ts +93 -0
- package/src/core/types.ts +154 -0
- package/src/core/utils/error-handler.ts +256 -0
- package/src/core/utils/forge-resume-block.ts +74 -0
- package/src/core/utils/format.ts +69 -0
- package/src/core/utils/logger.ts +119 -0
- package/src/core/utils/lru-cache.ts +50 -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 +35 -0
- package/src/daemon/handlers/history-exporter.ts +117 -0
- package/src/daemon/handlers/post-tool-use.ts +50 -0
- package/src/daemon/handlers/stop.ts +215 -0
- package/src/daemon/handlers/user-prompt.ts +188 -0
- package/src/daemon/index.ts +278 -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 +209 -0
- package/src/daemon/services/anti-pattern-detector.ts +412 -0
- package/src/daemon/services/drift-detector.ts +232 -0
- package/src/daemon/services/task-segmenter.ts +112 -0
- package/src/daemon/services/weekly-report.ts +454 -0
- package/src/hooks/hook-lib.sh +81 -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 +40 -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/auth-middleware.ts +55 -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 +101 -0
- package/src/web/routes/sessions.ts +262 -0
- package/src/web/routes/skill-stats.ts +132 -0
- package/src/web/routes/skills.ts +349 -0
- package/src/web/routes/static.ts +67 -0
- package/src/web/routes/stats.ts +60 -0
- package/src/web/routes/status.ts +30 -0
- package/src/web/routes/tasks.ts +218 -0
- package/src/web/routes/token-usage.ts +20 -0
- package/src/web/routes/trace.ts +138 -0
- package/src/web/routes/types.ts +56 -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/queue-replay.integration.test.ts +193 -0
- package/tests/integration/tasks-filter.integration.test.ts +154 -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/handlers.test.ts +171 -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/storage/sessions-aggregate.test.ts +435 -0
- package/tests/unit/storage/sqlite-refactor-harness.test.ts +314 -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/routes-auth.test.ts +93 -0
- package/tests/unit/web/routes-events.test.ts +101 -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 +351 -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 +511 -0
- package/web/src/pages/Tasks.tsx +150 -0
- package/web/src/utils/auth.ts +59 -0
- package/web/src/utils/export.ts +54 -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 -124
- 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 -18
- 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 -17
- 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 -16
- 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 -16
- 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 -20
- 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 -16
- 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 -19
- 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 -20
- 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 -16
- 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 -21
- 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 -43
- 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 -30
- package/dist/daemon/handlers/pre-tool-use.d.ts.map +0 -1
- package/dist/daemon/handlers/pre-tool-use.js +0 -173
- 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 -63
- package/dist/daemon/routing-state.d.ts.map +0 -1
- package/dist/daemon/routing-state.js +0 -223
- 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/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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maintenance.js","sourceRoot":"","sources":["../../../src/core/storage/maintenance.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,OAAO,qBAAqB;IAEtB;IACA;IAFV,YACU,EAAqB,EACrB,MAAc;QADd,OAAE,GAAF,EAAE,CAAmB;QACrB,WAAM,GAAN,MAAM,CAAQ;IACrB,CAAC;IAEJ;;;;OAIG;IACH,cAAc,CAAC,aAAqB,EAAE;QACpC,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;QAC9B,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;QAExC,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;KAE9B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEf,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,qBAAqB,OAAO,sBAAsB,UAAU,OAAO,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,cAAc,CAAC,SAAiB;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,qBAAqB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,SAAS,0BAA0B,CAAC,CAAC;YAChG,OAAO;QACT,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,wCAAwC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAE5E,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAED,WAAW;QACT,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO,CAAC,CAAC;QACvC,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACpD,CAAC;CACF"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RoutingOperations — routing_events + experiment_assignments 读写
|
|
3
|
+
*
|
|
4
|
+
* 拆分自 sqlite.ts。
|
|
5
|
+
*
|
|
6
|
+
* 注意:experiment_assignments 表在 base.ts 的 deprecated 列表里被 DROP 了,
|
|
7
|
+
* 但保留访问方法以维持 API 向后兼容(旧库残留 / 不同 schema 版本)。
|
|
8
|
+
*/
|
|
9
|
+
import type Database from 'better-sqlite3';
|
|
10
|
+
export interface RoutingEventRecord {
|
|
11
|
+
id?: number;
|
|
12
|
+
session_id: string;
|
|
13
|
+
route_request_id?: string | null;
|
|
14
|
+
project_path: string;
|
|
15
|
+
ts: number;
|
|
16
|
+
prompt: string;
|
|
17
|
+
intent_json: string;
|
|
18
|
+
routed_to_type?: 'agent' | 'skill' | 'none' | null;
|
|
19
|
+
routed_to_name?: string | null;
|
|
20
|
+
is_forced?: number;
|
|
21
|
+
obeyed?: number | null;
|
|
22
|
+
classification_ms?: number | null;
|
|
23
|
+
fallback_used?: number;
|
|
24
|
+
refusal_reason?: string | null;
|
|
25
|
+
first_tool_name?: string | null;
|
|
26
|
+
first_tool_ts?: number | null;
|
|
27
|
+
completed_ts?: number | null;
|
|
28
|
+
total_execution_ms?: number | null;
|
|
29
|
+
completion_reason?: string | null;
|
|
30
|
+
downstream_task_chain?: string | null;
|
|
31
|
+
injection_version?: string | null;
|
|
32
|
+
experiment_id?: string | null;
|
|
33
|
+
experiment_group?: string | null;
|
|
34
|
+
skill_confidence?: number | null;
|
|
35
|
+
skill_source?: 'auto' | 'slash_command' | 'agent_dependency' | null;
|
|
36
|
+
}
|
|
37
|
+
export interface RoutingEventRow extends RoutingEventRecord {
|
|
38
|
+
id: number;
|
|
39
|
+
created_at: string;
|
|
40
|
+
}
|
|
41
|
+
export declare class RoutingOperations {
|
|
42
|
+
private db;
|
|
43
|
+
constructor(db: Database.Database);
|
|
44
|
+
writeRoutingEvent(record: RoutingEventRecord): number;
|
|
45
|
+
updateRoutingEvent(id: number, patch: Partial<RoutingEventRecord>): void;
|
|
46
|
+
queryRoutingEvents(filter?: {
|
|
47
|
+
session_id?: string;
|
|
48
|
+
project_path?: string;
|
|
49
|
+
since_ts?: number;
|
|
50
|
+
routed_to_name?: string;
|
|
51
|
+
obeyed?: number | null;
|
|
52
|
+
limit?: number;
|
|
53
|
+
}): RoutingEventRow[];
|
|
54
|
+
/** Pending events with NULL obeyed within the last N seconds; used by daemon restart recovery. */
|
|
55
|
+
findPendingRoutingEvents(ageMs: number): RoutingEventRow[];
|
|
56
|
+
/** Get the most recent routing_event for a session (used by Agent observation). */
|
|
57
|
+
getRecentRoutingEvent(sessionId: string): {
|
|
58
|
+
id: number;
|
|
59
|
+
} | null;
|
|
60
|
+
getExperimentAssignment(sessionId: string, experimentId: string): string | null;
|
|
61
|
+
setExperimentAssignment(sessionId: string, experimentId: string, groupId: string): void;
|
|
62
|
+
queryExperimentStats(experimentId: string): Array<{
|
|
63
|
+
group_id: string;
|
|
64
|
+
total: number;
|
|
65
|
+
obeyed: number;
|
|
66
|
+
refused: number;
|
|
67
|
+
unknown: number;
|
|
68
|
+
avg_classification_ms: number | null;
|
|
69
|
+
}>;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=routing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../../src/core/storage/routing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RoutingOperations — routing_events + experiment_assignments 读写
|
|
3
|
+
*
|
|
4
|
+
* 拆分自 sqlite.ts。
|
|
5
|
+
*
|
|
6
|
+
* 注意:experiment_assignments 表在 base.ts 的 deprecated 列表里被 DROP 了,
|
|
7
|
+
* 但保留访问方法以维持 API 向后兼容(旧库残留 / 不同 schema 版本)。
|
|
8
|
+
*/
|
|
9
|
+
export class RoutingOperations {
|
|
10
|
+
db;
|
|
11
|
+
constructor(db) {
|
|
12
|
+
this.db = db;
|
|
13
|
+
}
|
|
14
|
+
writeRoutingEvent(record) {
|
|
15
|
+
const result = this.db.prepare(`
|
|
16
|
+
INSERT INTO routing_events (
|
|
17
|
+
session_id, route_request_id, project_path, ts, prompt, intent_json,
|
|
18
|
+
routed_to_type, routed_to_name, is_forced, obeyed,
|
|
19
|
+
classification_ms, fallback_used, refusal_reason,
|
|
20
|
+
first_tool_name, first_tool_ts, completed_ts,
|
|
21
|
+
total_execution_ms, completion_reason, downstream_task_chain,
|
|
22
|
+
injection_version, experiment_id, experiment_group
|
|
23
|
+
) VALUES (
|
|
24
|
+
@session_id, @route_request_id, @project_path, @ts, @prompt, @intent_json,
|
|
25
|
+
@routed_to_type, @routed_to_name, @is_forced, @obeyed,
|
|
26
|
+
@classification_ms, @fallback_used, @refusal_reason,
|
|
27
|
+
@first_tool_name, @first_tool_ts, @completed_ts,
|
|
28
|
+
@total_execution_ms, @completion_reason, @downstream_task_chain,
|
|
29
|
+
@injection_version, @experiment_id, @experiment_group
|
|
30
|
+
)
|
|
31
|
+
`).run({
|
|
32
|
+
session_id: record.session_id,
|
|
33
|
+
route_request_id: record.route_request_id ?? null,
|
|
34
|
+
project_path: record.project_path,
|
|
35
|
+
ts: record.ts,
|
|
36
|
+
prompt: record.prompt,
|
|
37
|
+
intent_json: record.intent_json,
|
|
38
|
+
routed_to_type: record.routed_to_type ?? null,
|
|
39
|
+
routed_to_name: record.routed_to_name ?? null,
|
|
40
|
+
is_forced: record.is_forced ?? 0,
|
|
41
|
+
obeyed: record.obeyed ?? null,
|
|
42
|
+
classification_ms: record.classification_ms ?? null,
|
|
43
|
+
fallback_used: record.fallback_used ?? 0,
|
|
44
|
+
refusal_reason: record.refusal_reason ?? null,
|
|
45
|
+
first_tool_name: record.first_tool_name ?? null,
|
|
46
|
+
first_tool_ts: record.first_tool_ts ?? null,
|
|
47
|
+
completed_ts: record.completed_ts ?? null,
|
|
48
|
+
total_execution_ms: record.total_execution_ms ?? null,
|
|
49
|
+
completion_reason: record.completion_reason ?? null,
|
|
50
|
+
downstream_task_chain: record.downstream_task_chain ?? null,
|
|
51
|
+
injection_version: record.injection_version ?? null,
|
|
52
|
+
experiment_id: record.experiment_id ?? null,
|
|
53
|
+
experiment_group: record.experiment_group ?? null,
|
|
54
|
+
});
|
|
55
|
+
return Number(result.lastInsertRowid);
|
|
56
|
+
}
|
|
57
|
+
updateRoutingEvent(id, patch) {
|
|
58
|
+
const fields = Object.keys(patch).filter((k) => k !== 'id');
|
|
59
|
+
if (fields.length === 0)
|
|
60
|
+
return;
|
|
61
|
+
const setClause = fields.map((f) => `${f} = @${f}`).join(', ');
|
|
62
|
+
this.db.prepare(`UPDATE routing_events SET ${setClause} WHERE id = @id`).run({
|
|
63
|
+
...patch,
|
|
64
|
+
id,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
queryRoutingEvents(filter = {}) {
|
|
68
|
+
const conds = [];
|
|
69
|
+
const params = {};
|
|
70
|
+
if (filter.session_id) {
|
|
71
|
+
conds.push('session_id = @session_id');
|
|
72
|
+
params.session_id = filter.session_id;
|
|
73
|
+
}
|
|
74
|
+
if (filter.project_path) {
|
|
75
|
+
conds.push('project_path = @project_path');
|
|
76
|
+
params.project_path = filter.project_path;
|
|
77
|
+
}
|
|
78
|
+
if (filter.since_ts !== undefined) {
|
|
79
|
+
conds.push('ts >= @since_ts');
|
|
80
|
+
params.since_ts = filter.since_ts;
|
|
81
|
+
}
|
|
82
|
+
if (filter.routed_to_name) {
|
|
83
|
+
conds.push('routed_to_name = @routed_to_name');
|
|
84
|
+
params.routed_to_name = filter.routed_to_name;
|
|
85
|
+
}
|
|
86
|
+
if (filter.obeyed !== undefined) {
|
|
87
|
+
if (filter.obeyed === null)
|
|
88
|
+
conds.push('obeyed IS NULL');
|
|
89
|
+
else {
|
|
90
|
+
conds.push('obeyed = @obeyed');
|
|
91
|
+
params.obeyed = filter.obeyed;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const where = conds.length > 0 ? `WHERE ${conds.join(' AND ')}` : '';
|
|
95
|
+
const limit = filter.limit ?? 100;
|
|
96
|
+
params.limit = limit;
|
|
97
|
+
const rows = this.db.prepare(`SELECT * FROM routing_events ${where} ORDER BY ts DESC LIMIT @limit`).all(params);
|
|
98
|
+
return rows;
|
|
99
|
+
}
|
|
100
|
+
/** Pending events with NULL obeyed within the last N seconds; used by daemon restart recovery. */
|
|
101
|
+
findPendingRoutingEvents(ageMs) {
|
|
102
|
+
const cutoff = Date.now() - ageMs;
|
|
103
|
+
return this.db.prepare(`SELECT * FROM routing_events WHERE obeyed IS NULL AND ts >= ? ORDER BY ts DESC`).all(cutoff);
|
|
104
|
+
}
|
|
105
|
+
/** Get the most recent routing_event for a session (used by Agent observation). */
|
|
106
|
+
getRecentRoutingEvent(sessionId) {
|
|
107
|
+
const row = this.db.prepare(`
|
|
108
|
+
SELECT id FROM routing_events
|
|
109
|
+
WHERE session_id = ?
|
|
110
|
+
ORDER BY ts DESC
|
|
111
|
+
LIMIT 1
|
|
112
|
+
`).get(sessionId);
|
|
113
|
+
return row ?? null;
|
|
114
|
+
}
|
|
115
|
+
// ── Experiment Assignments ──────────────────────────────────────────────
|
|
116
|
+
getExperimentAssignment(sessionId, experimentId) {
|
|
117
|
+
const row = this.db.prepare(`SELECT group_id FROM experiment_assignments WHERE session_id = ? AND experiment_id = ?`).get(sessionId, experimentId);
|
|
118
|
+
return row ? row.group_id : null;
|
|
119
|
+
}
|
|
120
|
+
setExperimentAssignment(sessionId, experimentId, groupId) {
|
|
121
|
+
this.db.prepare(`INSERT OR IGNORE INTO experiment_assignments (session_id, experiment_id, group_id)
|
|
122
|
+
VALUES (?, ?, ?)`).run(sessionId, experimentId, groupId);
|
|
123
|
+
}
|
|
124
|
+
queryExperimentStats(experimentId) {
|
|
125
|
+
const rows = this.db.prepare(`
|
|
126
|
+
SELECT
|
|
127
|
+
experiment_group AS group_id,
|
|
128
|
+
COUNT(*) AS total,
|
|
129
|
+
SUM(CASE WHEN obeyed = 1 THEN 1 ELSE 0 END) AS obeyed,
|
|
130
|
+
SUM(CASE WHEN obeyed = 0 THEN 1 ELSE 0 END) AS refused,
|
|
131
|
+
SUM(CASE WHEN obeyed IS NULL THEN 1 ELSE 0 END) AS unknown,
|
|
132
|
+
AVG(classification_ms) AS avg_classification_ms
|
|
133
|
+
FROM routing_events
|
|
134
|
+
WHERE experiment_id = ? AND experiment_group IS NOT NULL
|
|
135
|
+
GROUP BY experiment_group
|
|
136
|
+
ORDER BY experiment_group ASC
|
|
137
|
+
`).all(experimentId);
|
|
138
|
+
return rows;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../../../src/core/storage/routing.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqCH,MAAM,OAAO,iBAAiB;IACR;IAApB,YAAoB,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;IAAG,CAAC;IAE7C,iBAAiB,CAAC,MAA0B;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;KAgB9B,CAAC,CAAC,GAAG,CAAC;YACL,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,IAAI;YACjD,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,IAAI;YAC7C,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,IAAI;YAC7C,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,CAAC;YAChC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI;YAC7B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,IAAI;YACnD,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,CAAC;YACxC,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,IAAI;YAC7C,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,IAAI;YAC/C,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,IAAI;YAC3C,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,IAAI;YACzC,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,IAAI,IAAI;YACrD,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,IAAI;YACnD,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,IAAI,IAAI;YAC3D,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,IAAI;YACnD,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,IAAI;YAC3C,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,IAAI;SAClD,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACxC,CAAC;IAED,kBAAkB,CAAC,EAAU,EAAE,KAAkC;QAC/D,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAC5D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAChC,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,6BAA6B,SAAS,iBAAiB,CAAC,CAAC,GAAG,CAAC;YAC3E,GAAG,KAAK;YACR,EAAE;SACH,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAAC,SAOf,EAAE;QACJ,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAAC,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAAC,CAAC;QACzG,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAAC,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QAAC,CAAC;QACnH,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAAC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAAC,CAAC;QACxG,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAAC,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YAAC,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAAC,CAAC;QAC7H,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;iBACpD,CAAC;gBAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAAC,CAAC;QACzE,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC;QAClC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B,gCAAgC,KAAK,gCAAgC,CACtE,CAAC,GAAG,CAAC,MAAM,CAAsB,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kGAAkG;IAClG,wBAAwB,CAAC,KAAa;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QAClC,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CACpB,gFAAgF,CACjF,CAAC,GAAG,CAAC,MAAM,CAAsB,CAAC;IACrC,CAAC;IAED,mFAAmF;IACnF,qBAAqB,CAAC,SAAiB;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;KAK3B,CAAC,CAAC,GAAG,CAAC,SAAS,CAA+B,CAAC;QAChD,OAAO,GAAG,IAAI,IAAI,CAAC;IACrB,CAAC;IAED,2EAA2E;IAE3E,uBAAuB,CAAC,SAAiB,EAAE,YAAoB;QAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CACzB,wFAAwF,CACzF,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAqC,CAAC;QACnE,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IACnC,CAAC;IAED,uBAAuB,CAAC,SAAiB,EAAE,YAAoB,EAAE,OAAe;QAC9E,IAAI,CAAC,EAAE,CAAC,OAAO,CACb;wBACkB,CACnB,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,oBAAoB,CAAC,YAAoB;QAQvC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;KAY5B,CAAC,CAAC,GAAG,CAAC,YAAY,CAOjB,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -21,7 +21,6 @@ export interface EventRow {
|
|
|
21
21
|
tool_output: string | null;
|
|
22
22
|
user_prompt: string | null;
|
|
23
23
|
ai_response: string | null;
|
|
24
|
-
distilled: number;
|
|
25
24
|
created_at: string;
|
|
26
25
|
}
|
|
27
26
|
export interface SessionRow {
|
|
@@ -36,52 +35,6 @@ export interface SessionRow {
|
|
|
36
35
|
created_at: string;
|
|
37
36
|
updated_at: string;
|
|
38
37
|
}
|
|
39
|
-
export interface QualityIssueRow {
|
|
40
|
-
id: string;
|
|
41
|
-
session_id: string;
|
|
42
|
-
project_path: string;
|
|
43
|
-
file_path: string;
|
|
44
|
-
category: string;
|
|
45
|
-
level: string;
|
|
46
|
-
message: string;
|
|
47
|
-
resolved: number;
|
|
48
|
-
resolved_at: string | null;
|
|
49
|
-
created_at: string;
|
|
50
|
-
}
|
|
51
|
-
export interface DistillResultRow {
|
|
52
|
-
id: number;
|
|
53
|
-
session_id: string;
|
|
54
|
-
event_ids: string;
|
|
55
|
-
status: 'pending' | 'processing' | 'completed' | 'failed';
|
|
56
|
-
retry_count: number;
|
|
57
|
-
error_message: string | null;
|
|
58
|
-
created_at: string;
|
|
59
|
-
processed_at: string | null;
|
|
60
|
-
}
|
|
61
|
-
export interface ToolEventRow {
|
|
62
|
-
id: number;
|
|
63
|
-
session_id: string;
|
|
64
|
-
route_request_id: string | null;
|
|
65
|
-
tool: string;
|
|
66
|
-
args: string;
|
|
67
|
-
result: string | null;
|
|
68
|
-
success: number;
|
|
69
|
-
error: string | null;
|
|
70
|
-
timestamp: number;
|
|
71
|
-
created_at: string;
|
|
72
|
-
}
|
|
73
|
-
export interface DecisionRow {
|
|
74
|
-
id: number;
|
|
75
|
-
session_id: string;
|
|
76
|
-
event_id: number;
|
|
77
|
-
rule_id: string | null;
|
|
78
|
-
level: 'allow' | 'warn' | 'confirm' | 'block';
|
|
79
|
-
reason: string | null;
|
|
80
|
-
suggestion: string | null;
|
|
81
|
-
user_choice: string | null;
|
|
82
|
-
timestamp: number;
|
|
83
|
-
created_at: string;
|
|
84
|
-
}
|
|
85
38
|
export interface InjectionRow {
|
|
86
39
|
id: string;
|
|
87
40
|
event_id: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rows.d.ts","sourceRoot":"","sources":["../../../src/core/storage/rows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,YAAY,GAAG,aAAa,GAAG,kBAAkB,GAAG,cAAc,GAAG,MAAM,CAAC;IACvF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,
|
|
1
|
+
{"version":3,"file":"rows.d.ts","sourceRoot":"","sources":["../../../src/core/storage/rows.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,29 @@
|
|
|
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
|
+
-- Why no FK on routing_events / skill_invocations:
|
|
21
|
+
-- 1. routing_events.route_request_id is nullable and not UNIQUE — cannot be FK target
|
|
22
|
+
-- 2. Write order is not guaranteed: skill_invocations may be written before routing_events
|
|
23
|
+
-- 3. session_id references are maintained by application logic; sessions is an aggregate
|
|
24
|
+
-- table that may lag behind event writes
|
|
25
|
+
-- 4. Indexes on join columns provide equivalent query performance to FK indexes
|
|
26
|
+
--
|
|
3
27
|
|
|
4
28
|
-- ── Events & Sessions ─────────────────────────────────────────────────────
|
|
5
29
|
|
|
@@ -28,7 +52,7 @@ CREATE TABLE IF NOT EXISTS sessions (
|
|
|
28
52
|
session_id TEXT PRIMARY KEY,
|
|
29
53
|
project_path TEXT NOT NULL,
|
|
30
54
|
status TEXT NOT NULL DEFAULT 'active' CHECK(status IN ('active', 'completed', 'interrupted', 'resumed', 'abandoned')),
|
|
31
|
-
first_prompt TEXT,
|
|
55
|
+
first_prompt TEXT,
|
|
32
56
|
start_time TEXT NOT NULL,
|
|
33
57
|
end_time TEXT,
|
|
34
58
|
last_event_time TEXT,
|
|
@@ -41,77 +65,6 @@ CREATE INDEX IF NOT EXISTS idx_sessions_project ON sessions(project_path);
|
|
|
41
65
|
CREATE INDEX IF NOT EXISTS idx_sessions_status ON sessions(status);
|
|
42
66
|
CREATE INDEX IF NOT EXISTS idx_sessions_start_time ON sessions(start_time DESC);
|
|
43
67
|
|
|
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
68
|
-- ── Injections ─────────────────────────────────────────────────────
|
|
116
69
|
|
|
117
70
|
CREATE TABLE IF NOT EXISTS injections (
|
|
@@ -167,10 +120,10 @@ CREATE TABLE IF NOT EXISTS routing_events (
|
|
|
167
120
|
ts INTEGER NOT NULL,
|
|
168
121
|
prompt TEXT NOT NULL,
|
|
169
122
|
intent_json TEXT NOT NULL,
|
|
170
|
-
routed_to_type TEXT,
|
|
123
|
+
routed_to_type TEXT,
|
|
171
124
|
routed_to_name TEXT,
|
|
172
125
|
is_forced INTEGER DEFAULT 0,
|
|
173
|
-
obeyed INTEGER,
|
|
126
|
+
obeyed INTEGER,
|
|
174
127
|
classification_ms INTEGER,
|
|
175
128
|
fallback_used INTEGER DEFAULT 0,
|
|
176
129
|
refusal_reason TEXT,
|
|
@@ -179,12 +132,12 @@ CREATE TABLE IF NOT EXISTS routing_events (
|
|
|
179
132
|
completed_ts INTEGER,
|
|
180
133
|
total_execution_ms INTEGER,
|
|
181
134
|
completion_reason TEXT,
|
|
182
|
-
downstream_task_chain TEXT,
|
|
135
|
+
downstream_task_chain TEXT,
|
|
183
136
|
injection_version TEXT,
|
|
184
|
-
experiment_id TEXT,
|
|
185
|
-
experiment_group TEXT,
|
|
186
|
-
skill_confidence REAL,
|
|
187
|
-
skill_source TEXT,
|
|
137
|
+
experiment_id TEXT,
|
|
138
|
+
experiment_group TEXT,
|
|
139
|
+
skill_confidence REAL,
|
|
140
|
+
skill_source TEXT,
|
|
188
141
|
created_at TEXT DEFAULT (datetime('now'))
|
|
189
142
|
);
|
|
190
143
|
|
|
@@ -195,37 +148,7 @@ CREATE INDEX IF NOT EXISTS idx_routing_events_agent ON routing_events(routed_to_
|
|
|
195
148
|
CREATE INDEX IF NOT EXISTS idx_routing_events_obeyed ON routing_events(obeyed);
|
|
196
149
|
CREATE INDEX IF NOT EXISTS idx_routing_events_experiment ON routing_events(experiment_id, experiment_group);
|
|
197
150
|
|
|
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 用量,用于成本可观测和预算控制
|
|
151
|
+
-- ── Token Usage ──────────────────────────────────────────────────────
|
|
229
152
|
|
|
230
153
|
CREATE TABLE IF NOT EXISTS token_usage (
|
|
231
154
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
@@ -234,37 +157,32 @@ CREATE TABLE IF NOT EXISTS token_usage (
|
|
|
234
157
|
input_tokens INTEGER NOT NULL,
|
|
235
158
|
output_tokens INTEGER NOT NULL,
|
|
236
159
|
total_tokens INTEGER NOT NULL,
|
|
237
|
-
model TEXT,
|
|
238
|
-
tool_name TEXT,
|
|
160
|
+
model TEXT,
|
|
161
|
+
tool_name TEXT,
|
|
239
162
|
created_at TEXT DEFAULT (datetime('now'))
|
|
240
163
|
);
|
|
241
164
|
|
|
242
165
|
CREATE INDEX IF NOT EXISTS idx_token_usage_session ON token_usage(session_id);
|
|
243
166
|
CREATE INDEX IF NOT EXISTS idx_token_usage_timestamp ON token_usage(timestamp DESC);
|
|
244
167
|
|
|
245
|
-
-- ── Skill Invocations
|
|
246
|
-
-- 记录 Agent 动态调用 Skill 的完整链路,形成"一次路由 → Agent → N 次 Skill 调用"
|
|
247
|
-
-- 的证据链,配合 routing_events.route_request_id 可串联外层路由与内层 Skill 调用。
|
|
168
|
+
-- ── Skill Invocations ─────────────────────────────────────────────────
|
|
248
169
|
|
|
249
170
|
CREATE TABLE IF NOT EXISTS skill_invocations (
|
|
250
|
-
id TEXT PRIMARY KEY,
|
|
251
|
-
route_request_id TEXT,
|
|
171
|
+
id TEXT PRIMARY KEY,
|
|
172
|
+
route_request_id TEXT,
|
|
252
173
|
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)
|
|
174
|
+
agent_id TEXT,
|
|
175
|
+
skill_id TEXT NOT NULL,
|
|
176
|
+
invocation_type TEXT NOT NULL,
|
|
177
|
+
reason TEXT,
|
|
178
|
+
workflow TEXT,
|
|
179
|
+
phase TEXT,
|
|
180
|
+
feature_slug TEXT,
|
|
181
|
+
artifact_path TEXT,
|
|
182
|
+
depth INTEGER DEFAULT 0,
|
|
183
|
+
success INTEGER DEFAULT 1,
|
|
184
|
+
error TEXT,
|
|
185
|
+
timestamp INTEGER NOT NULL,
|
|
268
186
|
created_at TEXT DEFAULT (datetime('now'))
|
|
269
187
|
);
|
|
270
188
|
|
|
@@ -272,5 +190,25 @@ CREATE INDEX IF NOT EXISTS idx_skill_invocations_route_request ON skill_invocati
|
|
|
272
190
|
CREATE INDEX IF NOT EXISTS idx_skill_invocations_session ON skill_invocations(session_id);
|
|
273
191
|
CREATE INDEX IF NOT EXISTS idx_skill_invocations_skill ON skill_invocations(skill_id);
|
|
274
192
|
CREATE INDEX IF NOT EXISTS idx_skill_invocations_timestamp ON skill_invocations(timestamp DESC);
|
|
275
|
-
|
|
276
|
-
--
|
|
193
|
+
|
|
194
|
+
-- ── Composite Indexes (high-frequency query optimization) ─────────────────────
|
|
195
|
+
-- These cover session-scoped queries that filter by session_id then sort by time.
|
|
196
|
+
-- Existing single-column indexes are retained for other query paths.
|
|
197
|
+
|
|
198
|
+
CREATE INDEX IF NOT EXISTS idx_events_session_ts ON events(session_id, timestamp DESC);
|
|
199
|
+
CREATE INDEX IF NOT EXISTS idx_routing_events_session_ts ON routing_events(session_id, ts DESC);
|
|
200
|
+
CREATE INDEX IF NOT EXISTS idx_skill_invocations_session_ts ON skill_invocations(session_id, timestamp DESC);
|
|
201
|
+
|
|
202
|
+
-- ── Additional Performance Indexes (Phase 1 Refactor) ─────────────────────
|
|
203
|
+
|
|
204
|
+
-- routing_events: optimize obeyed flag queries with time sorting
|
|
205
|
+
CREATE INDEX IF NOT EXISTS idx_routing_events_obeyed_ts ON routing_events(obeyed, ts DESC);
|
|
206
|
+
|
|
207
|
+
-- tasks: optimize filter+sort queries (start_time range filter + session join)
|
|
208
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_start_time_session ON tasks(start_time DESC, session_id);
|
|
209
|
+
|
|
210
|
+
-- events: optimize session + hook_type composite queries
|
|
211
|
+
CREATE INDEX IF NOT EXISTS idx_events_session_hook ON events(session_id, hook_type, timestamp DESC);
|
|
212
|
+
|
|
213
|
+
-- injections: optimize session + handler composite queries
|
|
214
|
+
CREATE INDEX IF NOT EXISTS idx_injections_session_handler ON injections(session_id, source_handler);
|
|
@@ -0,0 +1,34 @@
|
|
|
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
|
+
}
|
|
34
|
+
//# 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;CAmC1B"}
|