@winspan/claude-forge 8.54.4 → 9.2.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/DEVELOPMENT.md +649 -33
- package/README.md +154 -16
- package/dist/catalogs/agents.json +72 -0
- package/dist/catalogs/skills.json +194 -0
- package/dist/claudemd/claudemd-generator.d.ts +45 -45
- package/dist/claudemd/claudemd-generator.d.ts.map +1 -1
- package/dist/claudemd/claudemd-generator.js +128 -449
- package/dist/claudemd/claudemd-generator.js.map +1 -1
- package/dist/claudemd/index.d.ts +14 -4
- package/dist/claudemd/index.d.ts.map +1 -1
- package/dist/claudemd/index.js +15 -4
- package/dist/claudemd/index.js.map +1 -1
- package/dist/claudemd/resume-manager.d.ts.map +1 -1
- package/dist/claudemd/resume-manager.js +37 -9
- package/dist/claudemd/resume-manager.js.map +1 -1
- package/dist/claudemd/templates/swarm-protocol.md +35 -186
- package/dist/claudemd/violations-manager.d.ts +40 -0
- package/dist/claudemd/violations-manager.d.ts.map +1 -0
- package/dist/claudemd/violations-manager.js +106 -0
- package/dist/claudemd/violations-manager.js.map +1 -0
- package/dist/cli/commands/admin.d.ts +15 -0
- package/dist/cli/commands/admin.d.ts.map +1 -0
- package/dist/cli/commands/admin.js +177 -0
- package/dist/cli/commands/admin.js.map +1 -0
- package/dist/cli/commands/agents.d.ts +18 -0
- package/dist/cli/commands/agents.d.ts.map +1 -0
- package/dist/cli/commands/agents.js +160 -0
- package/dist/cli/commands/agents.js.map +1 -0
- package/dist/cli/commands/bypass.d.ts +18 -0
- package/dist/cli/commands/bypass.d.ts.map +1 -0
- package/dist/cli/commands/bypass.js +87 -0
- package/dist/cli/commands/bypass.js.map +1 -0
- package/dist/cli/commands/claudemd.d.ts +60 -0
- package/dist/cli/commands/claudemd.d.ts.map +1 -1
- package/dist/cli/commands/claudemd.js +174 -37
- package/dist/cli/commands/claudemd.js.map +1 -1
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +94 -1
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/daemon.d.ts +39 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -1
- package/dist/cli/commands/daemon.js +167 -20
- package/dist/cli/commands/daemon.js.map +1 -1
- package/dist/cli/commands/decisions.d.ts +129 -0
- package/dist/cli/commands/decisions.d.ts.map +1 -0
- package/dist/cli/commands/decisions.js +669 -0
- package/dist/cli/commands/decisions.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +29 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +124 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/entropy.d.ts +35 -0
- package/dist/cli/commands/entropy.d.ts.map +1 -0
- package/dist/cli/commands/entropy.js +121 -0
- package/dist/cli/commands/entropy.js.map +1 -0
- package/dist/cli/commands/executions.d.ts +1 -0
- package/dist/cli/commands/executions.d.ts.map +1 -1
- package/dist/cli/commands/executions.js +10 -1
- package/dist/cli/commands/executions.js.map +1 -1
- package/dist/cli/commands/fix.d.ts +31 -0
- package/dist/cli/commands/fix.d.ts.map +1 -0
- package/dist/cli/commands/fix.js +108 -0
- package/dist/cli/commands/fix.js.map +1 -0
- package/dist/cli/commands/governance.d.ts +21 -0
- package/dist/cli/commands/governance.d.ts.map +1 -0
- package/dist/cli/commands/governance.js +60 -0
- package/dist/cli/commands/governance.js.map +1 -0
- package/dist/cli/commands/init.d.ts +27 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +158 -146
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/insights-goal-check.d.ts +50 -0
- package/dist/cli/commands/insights-goal-check.d.ts.map +1 -0
- package/dist/cli/commands/insights-goal-check.js +318 -0
- package/dist/cli/commands/insights-goal-check.js.map +1 -0
- package/dist/cli/commands/insights.d.ts +15 -0
- package/dist/cli/commands/insights.d.ts.map +1 -0
- package/dist/cli/commands/insights.js +127 -0
- package/dist/cli/commands/insights.js.map +1 -0
- package/dist/cli/commands/knowledge.d.ts +66 -0
- package/dist/cli/commands/knowledge.d.ts.map +1 -0
- package/dist/cli/commands/knowledge.js +897 -0
- package/dist/cli/commands/knowledge.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +0 -12
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +11 -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 +10 -184
- package/dist/cli/commands/menu.js.map +1 -1
- package/dist/cli/commands/project.d.ts +98 -0
- package/dist/cli/commands/project.d.ts.map +1 -0
- package/dist/cli/commands/project.js +382 -0
- package/dist/cli/commands/project.js.map +1 -0
- package/dist/cli/commands/skills.d.ts.map +1 -1
- package/dist/cli/commands/skills.js +14 -128
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/spec.d.ts +40 -0
- package/dist/cli/commands/spec.d.ts.map +1 -0
- package/dist/cli/commands/spec.js +49 -0
- package/dist/cli/commands/spec.js.map +1 -0
- package/dist/cli/commands/stats.d.ts.map +1 -1
- package/dist/cli/commands/stats.js +3 -2
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +17 -2
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/trace.d.ts.map +1 -1
- package/dist/cli/commands/trace.js +4 -9
- package/dist/cli/commands/trace.js.map +1 -1
- package/dist/cli/commands/violations.d.ts +14 -0
- package/dist/cli/commands/violations.d.ts.map +1 -0
- package/dist/cli/commands/violations.js +43 -0
- package/dist/cli/commands/violations.js.map +1 -0
- package/dist/cli/index.js +26 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/hook-manager.d.ts +1 -1
- package/dist/cli/init/hook-manager.d.ts.map +1 -1
- package/dist/cli/init/hook-manager.js +6 -0
- package/dist/cli/init/hook-manager.js.map +1 -1
- package/dist/cli/utils/resolve-session.d.ts +32 -0
- package/dist/cli/utils/resolve-session.d.ts.map +1 -0
- package/dist/cli/utils/resolve-session.js +39 -0
- package/dist/cli/utils/resolve-session.js.map +1 -0
- package/dist/core/config.d.ts +4 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +11 -23
- package/dist/core/config.js.map +1 -1
- package/dist/core/constants.d.ts +14 -13
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +20 -13
- package/dist/core/constants.js.map +1 -1
- package/dist/core/diagnostics/checks.d.ts +151 -0
- package/dist/core/diagnostics/checks.d.ts.map +1 -0
- package/dist/core/diagnostics/checks.js +765 -0
- package/dist/core/diagnostics/checks.js.map +1 -0
- package/dist/core/diagnostics/daemon-status.d.ts +77 -0
- package/dist/core/diagnostics/daemon-status.d.ts.map +1 -0
- package/dist/core/diagnostics/daemon-status.js +113 -0
- package/dist/core/diagnostics/daemon-status.js.map +1 -0
- package/dist/core/diagnostics/entropy-checks.d.ts +82 -0
- package/dist/core/diagnostics/entropy-checks.d.ts.map +1 -0
- package/dist/core/diagnostics/entropy-checks.js +395 -0
- package/dist/core/diagnostics/entropy-checks.js.map +1 -0
- package/dist/core/diagnostics/fix-runner.d.ts +54 -0
- package/dist/core/diagnostics/fix-runner.d.ts.map +1 -0
- package/dist/core/diagnostics/fix-runner.js +90 -0
- package/dist/core/diagnostics/fix-runner.js.map +1 -0
- package/dist/core/diagnostics/knip-runner.d.ts +49 -0
- package/dist/core/diagnostics/knip-runner.d.ts.map +1 -0
- package/dist/core/diagnostics/knip-runner.js +100 -0
- package/dist/core/diagnostics/knip-runner.js.map +1 -0
- package/dist/core/diagnostics/markers.d.ts +96 -0
- package/dist/core/diagnostics/markers.d.ts.map +1 -0
- package/dist/core/diagnostics/markers.js +153 -0
- package/dist/core/diagnostics/markers.js.map +1 -0
- package/dist/core/governance/global-inject.d.ts +60 -0
- package/dist/core/governance/global-inject.d.ts.map +1 -0
- package/dist/core/governance/global-inject.js +129 -0
- package/dist/core/governance/global-inject.js.map +1 -0
- package/dist/core/queue/index.d.ts +16 -3
- package/dist/core/queue/index.d.ts.map +1 -1
- package/dist/core/queue/index.js +14 -3
- package/dist/core/queue/index.js.map +1 -1
- package/dist/core/storage/base.d.ts +158 -0
- package/dist/core/storage/base.d.ts.map +1 -1
- package/dist/core/storage/base.js +570 -0
- package/dist/core/storage/base.js.map +1 -1
- package/dist/core/storage/codec/tool-input-codec.d.ts +93 -0
- package/dist/core/storage/codec/tool-input-codec.d.ts.map +1 -0
- package/dist/core/storage/codec/tool-input-codec.js +159 -0
- package/dist/core/storage/codec/tool-input-codec.js.map +1 -0
- package/dist/core/storage/decisions.d.ts +362 -0
- package/dist/core/storage/decisions.d.ts.map +1 -0
- package/dist/core/storage/decisions.js +502 -0
- package/dist/core/storage/decisions.js.map +1 -0
- package/dist/core/storage/events.d.ts +112 -8
- package/dist/core/storage/events.d.ts.map +1 -1
- package/dist/core/storage/events.js +390 -39
- package/dist/core/storage/events.js.map +1 -1
- package/dist/core/storage/feedback.d.ts +131 -0
- package/dist/core/storage/feedback.d.ts.map +1 -0
- package/dist/core/storage/feedback.js +187 -0
- package/dist/core/storage/feedback.js.map +1 -0
- package/dist/core/storage/forge-config.d.ts +40 -0
- package/dist/core/storage/forge-config.d.ts.map +1 -0
- package/dist/core/storage/forge-config.js +65 -0
- package/dist/core/storage/forge-config.js.map +1 -0
- package/dist/core/storage/injections.d.ts +28 -0
- package/dist/core/storage/injections.d.ts.map +1 -1
- package/dist/core/storage/injections.js +62 -5
- package/dist/core/storage/injections.js.map +1 -1
- package/dist/core/storage/knowledge.d.ts +106 -0
- package/dist/core/storage/knowledge.d.ts.map +1 -0
- package/dist/core/storage/knowledge.js +202 -0
- package/dist/core/storage/knowledge.js.map +1 -0
- package/dist/core/storage/maintenance.d.ts +36 -9
- package/dist/core/storage/maintenance.d.ts.map +1 -1
- package/dist/core/storage/maintenance.js +56 -24
- package/dist/core/storage/maintenance.js.map +1 -1
- package/dist/core/storage/pipeline-rollup.d.ts +117 -0
- package/dist/core/storage/pipeline-rollup.d.ts.map +1 -0
- package/dist/core/storage/pipeline-rollup.js +471 -0
- package/dist/core/storage/pipeline-rollup.js.map +1 -0
- package/dist/core/storage/routing.d.ts +16 -3
- package/dist/core/storage/routing.d.ts.map +1 -1
- package/dist/core/storage/routing.js +39 -8
- package/dist/core/storage/routing.js.map +1 -1
- package/dist/core/storage/rows.d.ts +50 -7
- package/dist/core/storage/rows.d.ts.map +1 -1
- package/dist/core/storage/schema.sql +302 -23
- package/dist/core/storage/sessions.d.ts +136 -0
- package/dist/core/storage/sessions.d.ts.map +1 -1
- package/dist/core/storage/sessions.js +351 -15
- package/dist/core/storage/sessions.js.map +1 -1
- package/dist/core/storage/skills.d.ts +1 -0
- package/dist/core/storage/skills.d.ts.map +1 -1
- package/dist/core/storage/skills.js +21 -6
- package/dist/core/storage/skills.js.map +1 -1
- package/dist/core/storage/sqlite.d.ts +253 -20
- package/dist/core/storage/sqlite.d.ts.map +1 -1
- package/dist/core/storage/sqlite.js +425 -16
- package/dist/core/storage/sqlite.js.map +1 -1
- package/dist/core/storage/tasks.d.ts +474 -2
- package/dist/core/storage/tasks.d.ts.map +1 -1
- package/dist/core/storage/tasks.js +1213 -18
- package/dist/core/storage/tasks.js.map +1 -1
- package/dist/core/storage/tool-intercepts.d.ts +69 -0
- package/dist/core/storage/tool-intercepts.d.ts.map +1 -0
- package/dist/core/storage/tool-intercepts.js +116 -0
- package/dist/core/storage/tool-intercepts.js.map +1 -0
- package/dist/core/storage/workflow-recommendations.d.ts +124 -0
- package/dist/core/storage/workflow-recommendations.d.ts.map +1 -0
- package/dist/core/storage/workflow-recommendations.js +274 -0
- package/dist/core/storage/workflow-recommendations.js.map +1 -0
- package/dist/core/types.d.ts +112 -17
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +12 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/utils/backup.d.ts +81 -0
- package/dist/core/utils/backup.d.ts.map +1 -0
- package/dist/core/utils/backup.js +98 -0
- package/dist/core/utils/backup.js.map +1 -0
- package/dist/core/utils/binary-paths.d.ts +92 -0
- package/dist/core/utils/binary-paths.d.ts.map +1 -0
- package/dist/core/utils/binary-paths.js +166 -0
- package/dist/core/utils/binary-paths.js.map +1 -0
- package/dist/core/utils/bypass-token.d.ts +75 -0
- package/dist/core/utils/bypass-token.d.ts.map +1 -0
- package/dist/core/utils/bypass-token.js +133 -0
- package/dist/core/utils/bypass-token.js.map +1 -0
- package/dist/core/utils/cc-builtin-agents.d.ts +3 -0
- package/dist/core/utils/cc-builtin-agents.d.ts.map +1 -0
- package/dist/core/utils/cc-builtin-agents.js +29 -0
- package/dist/core/utils/cc-builtin-agents.js.map +1 -0
- package/dist/core/utils/claude-cli-spawn.d.ts +106 -0
- package/dist/core/utils/claude-cli-spawn.d.ts.map +1 -0
- package/dist/core/utils/claude-cli-spawn.js +219 -0
- package/dist/core/utils/claude-cli-spawn.js.map +1 -0
- package/dist/core/utils/forge-resume-block.d.ts.map +1 -1
- package/dist/core/utils/forge-resume-block.js +3 -2
- package/dist/core/utils/forge-resume-block.js.map +1 -1
- package/dist/core/utils/logger.d.ts +15 -3
- package/dist/core/utils/logger.d.ts.map +1 -1
- package/dist/core/utils/logger.js +20 -2
- package/dist/core/utils/logger.js.map +1 -1
- package/dist/core/utils/noise-prompt.d.ts +97 -0
- package/dist/core/utils/noise-prompt.d.ts.map +1 -0
- package/dist/core/utils/noise-prompt.js +127 -0
- package/dist/core/utils/noise-prompt.js.map +1 -0
- package/dist/core/utils/path.d.ts +0 -4
- package/dist/core/utils/path.d.ts.map +1 -1
- package/dist/core/utils/path.js +0 -7
- package/dist/core/utils/path.js.map +1 -1
- package/dist/core/utils/time.d.ts +41 -0
- package/dist/core/utils/time.d.ts.map +1 -1
- package/dist/core/utils/time.js +114 -0
- package/dist/core/utils/time.js.map +1 -1
- package/dist/daemon/agent-sync.d.ts +24 -0
- package/dist/daemon/agent-sync.d.ts.map +1 -0
- package/dist/daemon/agent-sync.js +114 -0
- package/dist/daemon/agent-sync.js.map +1 -0
- package/dist/daemon/config-store.d.ts +55 -0
- package/dist/daemon/config-store.d.ts.map +1 -0
- package/dist/daemon/config-store.js +137 -0
- package/dist/daemon/config-store.js.map +1 -0
- package/dist/daemon/event-parser.d.ts +22 -0
- package/dist/daemon/event-parser.d.ts.map +1 -1
- package/dist/daemon/event-parser.js +49 -3
- 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 +9 -8
- package/dist/daemon/handlers/history-exporter.js.map +1 -1
- package/dist/daemon/handlers/post-tool-use.d.ts +58 -4
- package/dist/daemon/handlers/post-tool-use.d.ts.map +1 -1
- package/dist/daemon/handlers/post-tool-use.js +261 -8
- package/dist/daemon/handlers/post-tool-use.js.map +1 -1
- package/dist/daemon/handlers/pre-tool-use.d.ts +156 -0
- package/dist/daemon/handlers/pre-tool-use.d.ts.map +1 -0
- package/dist/daemon/handlers/pre-tool-use.js +585 -0
- package/dist/daemon/handlers/pre-tool-use.js.map +1 -0
- package/dist/daemon/handlers/stop.d.ts +35 -7
- package/dist/daemon/handlers/stop.d.ts.map +1 -1
- package/dist/daemon/handlers/stop.js +157 -8
- package/dist/daemon/handlers/stop.js.map +1 -1
- package/dist/daemon/handlers/user-prompt.d.ts +36 -14
- package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
- package/dist/daemon/handlers/user-prompt.js +135 -48
- package/dist/daemon/handlers/user-prompt.js.map +1 -1
- package/dist/daemon/hook-sync.d.ts.map +1 -1
- package/dist/daemon/hook-sync.js +2 -1
- package/dist/daemon/hook-sync.js.map +1 -1
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +471 -43
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/lifecycle.d.ts +48 -1
- package/dist/daemon/lifecycle.d.ts.map +1 -1
- package/dist/daemon/lifecycle.js +98 -2
- package/dist/daemon/lifecycle.js.map +1 -1
- package/dist/daemon/router.d.ts +4 -1
- package/dist/daemon/router.d.ts.map +1 -1
- package/dist/daemon/router.js +4 -2
- package/dist/daemon/router.js.map +1 -1
- package/dist/daemon/rules/defaults.d.ts +20 -0
- package/dist/daemon/rules/defaults.d.ts.map +1 -0
- package/dist/daemon/rules/defaults.js +692 -0
- package/dist/daemon/rules/defaults.js.map +1 -0
- package/dist/daemon/rules/registry.d.ts +47 -0
- package/dist/daemon/rules/registry.d.ts.map +1 -0
- package/dist/daemon/rules/registry.js +84 -0
- package/dist/daemon/rules/registry.js.map +1 -0
- package/dist/daemon/rules/types.d.ts +170 -0
- package/dist/daemon/rules/types.d.ts.map +1 -0
- package/dist/daemon/rules/types.js +15 -0
- package/dist/daemon/rules/types.js.map +1 -0
- package/dist/daemon/rules/whitelist.d.ts +101 -0
- package/dist/daemon/rules/whitelist.d.ts.map +1 -0
- package/dist/daemon/rules/whitelist.js +210 -0
- package/dist/daemon/rules/whitelist.js.map +1 -0
- package/dist/daemon/rules/workflow-defaults.d.ts +52 -0
- package/dist/daemon/rules/workflow-defaults.d.ts.map +1 -0
- package/dist/daemon/rules/workflow-defaults.js +521 -0
- package/dist/daemon/rules/workflow-defaults.js.map +1 -0
- package/dist/daemon/server.d.ts +11 -1
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +7 -1
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/services/context-injector.d.ts +34 -0
- package/dist/daemon/services/context-injector.d.ts.map +1 -0
- package/dist/daemon/services/context-injector.js +61 -0
- package/dist/daemon/services/context-injector.js.map +1 -0
- package/dist/daemon/services/decision-hint.d.ts +203 -0
- package/dist/daemon/services/decision-hint.d.ts.map +1 -0
- package/dist/daemon/services/decision-hint.js +487 -0
- package/dist/daemon/services/decision-hint.js.map +1 -0
- package/dist/daemon/services/event-ttl-sweep.d.ts +86 -0
- package/dist/daemon/services/event-ttl-sweep.d.ts.map +1 -0
- package/dist/daemon/services/event-ttl-sweep.js +123 -0
- package/dist/daemon/services/event-ttl-sweep.js.map +1 -0
- package/dist/daemon/services/experience-extractor.d.ts +67 -0
- package/dist/daemon/services/experience-extractor.d.ts.map +1 -0
- package/dist/daemon/services/experience-extractor.js +323 -0
- package/dist/daemon/services/experience-extractor.js.map +1 -0
- package/dist/daemon/services/feedback-aggregator.d.ts +179 -0
- package/dist/daemon/services/feedback-aggregator.d.ts.map +1 -0
- package/dist/daemon/services/feedback-aggregator.js +455 -0
- package/dist/daemon/services/feedback-aggregator.js.map +1 -0
- package/dist/daemon/services/heartbeat-writer.d.ts +55 -0
- package/dist/daemon/services/heartbeat-writer.d.ts.map +1 -0
- package/dist/daemon/services/heartbeat-writer.js +111 -0
- package/dist/daemon/services/heartbeat-writer.js.map +1 -0
- package/dist/daemon/services/idle-session-sweeper.d.ts +61 -0
- package/dist/daemon/services/idle-session-sweeper.d.ts.map +1 -0
- package/dist/daemon/services/idle-session-sweeper.js +94 -0
- package/dist/daemon/services/idle-session-sweeper.js.map +1 -0
- package/dist/daemon/services/idle-task-budget.d.ts +50 -0
- package/dist/daemon/services/idle-task-budget.d.ts.map +1 -0
- package/dist/daemon/services/idle-task-budget.js +72 -0
- package/dist/daemon/services/idle-task-budget.js.map +1 -0
- package/dist/daemon/services/intercept-revive.d.ts +60 -0
- package/dist/daemon/services/intercept-revive.d.ts.map +1 -0
- package/dist/daemon/services/intercept-revive.js +86 -0
- package/dist/daemon/services/intercept-revive.js.map +1 -0
- package/dist/daemon/services/intercept-rollback-guard.d.ts +105 -0
- package/dist/daemon/services/intercept-rollback-guard.d.ts.map +1 -0
- package/dist/daemon/services/intercept-rollback-guard.js +152 -0
- package/dist/daemon/services/intercept-rollback-guard.js.map +1 -0
- package/dist/daemon/services/intercept-timeout-sweeper.d.ts +58 -0
- package/dist/daemon/services/intercept-timeout-sweeper.d.ts.map +1 -0
- package/dist/daemon/services/intercept-timeout-sweeper.js +83 -0
- package/dist/daemon/services/intercept-timeout-sweeper.js.map +1 -0
- package/dist/daemon/services/kb-injector.d.ts +57 -0
- package/dist/daemon/services/kb-injector.d.ts.map +1 -0
- package/dist/daemon/services/kb-injector.js +140 -0
- package/dist/daemon/services/kb-injector.js.map +1 -0
- package/dist/daemon/services/outcome-classification-service.d.ts +49 -0
- package/dist/daemon/services/outcome-classification-service.d.ts.map +1 -0
- package/dist/daemon/services/outcome-classification-service.js +214 -0
- package/dist/daemon/services/outcome-classification-service.js.map +1 -0
- package/dist/daemon/services/outcome-classifier.d.ts +136 -0
- package/dist/daemon/services/outcome-classifier.d.ts.map +1 -0
- package/dist/daemon/services/outcome-classifier.js +178 -0
- package/dist/daemon/services/outcome-classifier.js.map +1 -0
- package/dist/daemon/services/outcome-nudge.d.ts +107 -0
- package/dist/daemon/services/outcome-nudge.d.ts.map +1 -0
- package/dist/daemon/services/outcome-nudge.js +242 -0
- package/dist/daemon/services/outcome-nudge.js.map +1 -0
- package/dist/daemon/services/spec-approval.d.ts +127 -0
- package/dist/daemon/services/spec-approval.d.ts.map +1 -0
- package/dist/daemon/services/spec-approval.js +216 -0
- package/dist/daemon/services/spec-approval.js.map +1 -0
- package/dist/daemon/services/spec-gate.d.ts +54 -0
- package/dist/daemon/services/spec-gate.d.ts.map +1 -0
- package/dist/daemon/services/spec-gate.js +113 -0
- package/dist/daemon/services/spec-gate.js.map +1 -0
- package/dist/daemon/services/task-boundary-classifier.d.ts +78 -0
- package/dist/daemon/services/task-boundary-classifier.d.ts.map +1 -0
- package/dist/daemon/services/task-boundary-classifier.js +202 -0
- package/dist/daemon/services/task-boundary-classifier.js.map +1 -0
- package/dist/daemon/services/task-segmenter.d.ts +219 -1
- package/dist/daemon/services/task-segmenter.d.ts.map +1 -1
- package/dist/daemon/services/task-segmenter.js +481 -17
- package/dist/daemon/services/task-segmenter.js.map +1 -1
- package/dist/daemon/services/violation-reporter.d.ts +130 -0
- package/dist/daemon/services/violation-reporter.d.ts.map +1 -0
- package/dist/daemon/services/violation-reporter.js +339 -0
- package/dist/daemon/services/violation-reporter.js.map +1 -0
- package/dist/daemon/skill-sync.d.ts +7 -2
- package/dist/daemon/skill-sync.d.ts.map +1 -1
- package/dist/daemon/skill-sync.js +114 -9
- package/dist/daemon/skill-sync.js.map +1 -1
- package/dist/daemon/templates/agents/claudemd-writer.md +101 -0
- package/dist/daemon/templates/agents/coder.md +105 -0
- package/dist/daemon/templates/agents/decision-maker.md +460 -0
- package/dist/daemon/templates/agents/doc-reviewer.md +115 -0
- package/dist/daemon/templates/agents/harness-debug-full.md +114 -0
- package/dist/daemon/templates/agents/harness-hotfix.md +99 -0
- package/dist/daemon/templates/agents/hybrid-feature-with-safety.md +104 -0
- package/dist/daemon/templates/agents/knowledge-builder.md +119 -0
- package/dist/daemon/templates/agents/patch-applier.md +144 -0
- package/dist/daemon/templates/agents/planner.md +165 -0
- package/dist/daemon/templates/agents/refactor-specialist.md +98 -0
- package/dist/daemon/templates/agents/skill-distiller.md +113 -0
- package/dist/daemon/templates/agents/task-boundary-classifier.md +64 -0
- package/dist/daemon/templates/agents/verify-agent.md +136 -0
- package/dist/daemon/utils/inject-block.d.ts +39 -0
- package/dist/daemon/utils/inject-block.d.ts.map +1 -0
- package/dist/daemon/utils/inject-block.js +25 -0
- package/dist/daemon/utils/inject-block.js.map +1 -0
- package/dist/hooks/hook-lib.sh +8 -0
- package/dist/hooks/notification.sh +19 -8
- package/dist/hooks/post-tool-use.sh +41 -23
- package/dist/hooks/pre-tool-use.sh +54 -23
- package/dist/hooks/session-start.sh +68 -0
- package/dist/hooks/stop.sh +24 -10
- package/dist/hooks/user-prompt-submit.sh +37 -21
- package/dist/knowledge/adapters/go-adapter.d.ts +65 -0
- package/dist/knowledge/adapters/go-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/go-adapter.js +294 -0
- package/dist/knowledge/adapters/go-adapter.js.map +1 -0
- package/dist/knowledge/adapters/index.d.ts +41 -0
- package/dist/knowledge/adapters/index.d.ts.map +1 -0
- package/dist/knowledge/adapters/index.js +71 -0
- package/dist/knowledge/adapters/index.js.map +1 -0
- package/dist/knowledge/adapters/java-adapter.d.ts +66 -0
- package/dist/knowledge/adapters/java-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/java-adapter.js +260 -0
- package/dist/knowledge/adapters/java-adapter.js.map +1 -0
- package/dist/knowledge/adapters/js-vue-adapter.d.ts +56 -0
- package/dist/knowledge/adapters/js-vue-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/js-vue-adapter.js +203 -0
- package/dist/knowledge/adapters/js-vue-adapter.js.map +1 -0
- package/dist/knowledge/adapters/kotlin-adapter.d.ts +55 -0
- package/dist/knowledge/adapters/kotlin-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/kotlin-adapter.js +209 -0
- package/dist/knowledge/adapters/kotlin-adapter.js.map +1 -0
- package/dist/knowledge/adapters/monorepo-adapter.d.ts +77 -0
- package/dist/knowledge/adapters/monorepo-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/monorepo-adapter.js +170 -0
- package/dist/knowledge/adapters/monorepo-adapter.js.map +1 -0
- package/dist/knowledge/adapters/python-adapter.d.ts +89 -0
- package/dist/knowledge/adapters/python-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/python-adapter.js +358 -0
- package/dist/knowledge/adapters/python-adapter.js.map +1 -0
- package/dist/knowledge/adapters/rust-adapter.d.ts +73 -0
- package/dist/knowledge/adapters/rust-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/rust-adapter.js +329 -0
- package/dist/knowledge/adapters/rust-adapter.js.map +1 -0
- package/dist/knowledge/adapters/types.d.ts +99 -0
- package/dist/knowledge/adapters/types.d.ts.map +1 -0
- package/dist/knowledge/adapters/types.js +17 -0
- package/dist/knowledge/adapters/types.js.map +1 -0
- package/dist/knowledge/adapters/typescript-adapter.d.ts +57 -0
- package/dist/knowledge/adapters/typescript-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/typescript-adapter.js +171 -0
- package/dist/knowledge/adapters/typescript-adapter.js.map +1 -0
- package/dist/knowledge/audit-applier.d.ts +70 -0
- package/dist/knowledge/audit-applier.d.ts.map +1 -0
- package/dist/knowledge/audit-applier.js +251 -0
- package/dist/knowledge/audit-applier.js.map +1 -0
- package/dist/knowledge/builder.d.ts +261 -0
- package/dist/knowledge/builder.d.ts.map +1 -0
- package/dist/knowledge/builder.js +937 -0
- package/dist/knowledge/builder.js.map +1 -0
- package/dist/knowledge/cli-provider.d.ts +151 -0
- package/dist/knowledge/cli-provider.d.ts.map +1 -0
- package/dist/knowledge/cli-provider.js +313 -0
- package/dist/knowledge/cli-provider.js.map +1 -0
- package/dist/knowledge/constants.d.ts +73 -0
- package/dist/knowledge/constants.d.ts.map +1 -0
- package/dist/knowledge/constants.js +93 -0
- package/dist/knowledge/constants.js.map +1 -0
- package/dist/knowledge/cross-module.d.ts +139 -0
- package/dist/knowledge/cross-module.d.ts.map +1 -0
- package/dist/knowledge/cross-module.js +370 -0
- package/dist/knowledge/cross-module.js.map +1 -0
- package/dist/knowledge/git-hooks.d.ts +67 -0
- package/dist/knowledge/git-hooks.d.ts.map +1 -0
- package/dist/knowledge/git-hooks.js +258 -0
- package/dist/knowledge/git-hooks.js.map +1 -0
- package/dist/knowledge/module-hash.d.ts +88 -0
- package/dist/knowledge/module-hash.d.ts.map +1 -0
- package/dist/knowledge/module-hash.js +162 -0
- package/dist/knowledge/module-hash.js.map +1 -0
- package/dist/knowledge/project-detector.d.ts +101 -0
- package/dist/knowledge/project-detector.d.ts.map +1 -0
- package/dist/knowledge/project-detector.js +223 -0
- package/dist/knowledge/project-detector.js.map +1 -0
- package/dist/knowledge/prompt.d.ts +228 -0
- package/dist/knowledge/prompt.d.ts.map +1 -0
- package/dist/knowledge/prompt.js +404 -0
- package/dist/knowledge/prompt.js.map +1 -0
- package/dist/knowledge/query.d.ts +105 -0
- package/dist/knowledge/query.d.ts.map +1 -0
- package/dist/knowledge/query.js +341 -0
- package/dist/knowledge/query.js.map +1 -0
- package/dist/knowledge/repo-map.d.ts +91 -0
- package/dist/knowledge/repo-map.d.ts.map +1 -0
- package/dist/knowledge/repo-map.js +408 -0
- package/dist/knowledge/repo-map.js.map +1 -0
- package/dist/knowledge/tools/index.d.ts +14 -0
- package/dist/knowledge/tools/index.d.ts.map +1 -0
- package/dist/knowledge/tools/index.js +11 -0
- package/dist/knowledge/tools/index.js.map +1 -0
- package/dist/knowledge/tools/knowledge-get-page.d.ts +46 -0
- package/dist/knowledge/tools/knowledge-get-page.d.ts.map +1 -0
- package/dist/knowledge/tools/knowledge-get-page.js +101 -0
- package/dist/knowledge/tools/knowledge-get-page.js.map +1 -0
- package/dist/knowledge/tools/knowledge-query.d.ts +77 -0
- package/dist/knowledge/tools/knowledge-query.d.ts.map +1 -0
- package/dist/knowledge/tools/knowledge-query.js +104 -0
- package/dist/knowledge/tools/knowledge-query.js.map +1 -0
- package/dist/knowledge/tools/repo-map-lookup.d.ts +45 -0
- package/dist/knowledge/tools/repo-map-lookup.d.ts.map +1 -0
- package/dist/knowledge/tools/repo-map-lookup.js +82 -0
- package/dist/knowledge/tools/repo-map-lookup.js.map +1 -0
- package/dist/knowledge/types.d.ts +269 -0
- package/dist/knowledge/types.d.ts.map +1 -0
- package/dist/knowledge/types.js +10 -0
- package/dist/knowledge/types.js.map +1 -0
- package/dist/knowledge/validator.d.ts +90 -0
- package/dist/knowledge/validator.d.ts.map +1 -0
- package/dist/knowledge/validator.js +288 -0
- package/dist/knowledge/validator.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +222 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/skills/builtin-skills.d.ts +35 -0
- package/dist/skills/builtin-skills.d.ts.map +1 -0
- package/dist/skills/builtin-skills.js +68 -0
- package/dist/skills/builtin-skills.js.map +1 -0
- package/dist/skills/distill/attribution.d.ts +59 -0
- package/dist/skills/distill/attribution.d.ts.map +1 -0
- package/dist/skills/distill/attribution.js +101 -0
- package/dist/skills/distill/attribution.js.map +1 -0
- package/dist/skills/distill/claude-cli-resolver.d.ts +26 -0
- package/dist/skills/distill/claude-cli-resolver.d.ts.map +1 -0
- package/dist/skills/distill/claude-cli-resolver.js +115 -0
- package/dist/skills/distill/claude-cli-resolver.js.map +1 -0
- package/dist/skills/distill/distiller.d.ts +161 -0
- package/dist/skills/distill/distiller.d.ts.map +1 -0
- package/dist/skills/distill/distiller.js +461 -0
- package/dist/skills/distill/distiller.js.map +1 -0
- package/dist/skills/distill/index.d.ts +223 -0
- package/dist/skills/distill/index.d.ts.map +1 -0
- package/dist/skills/distill/index.js +466 -0
- package/dist/skills/distill/index.js.map +1 -0
- package/dist/skills/distill/project-anchor-guard.d.ts +116 -0
- package/dist/skills/distill/project-anchor-guard.d.ts.map +1 -0
- package/dist/skills/distill/project-anchor-guard.js +334 -0
- package/dist/skills/distill/project-anchor-guard.js.map +1 -0
- package/dist/skills/distill/topic-deduper.d.ts +77 -0
- package/dist/skills/distill/topic-deduper.d.ts.map +1 -0
- package/dist/skills/distill/topic-deduper.js +119 -0
- package/dist/skills/distill/topic-deduper.js.map +1 -0
- package/dist/skills/distill/upstream-fetcher.d.ts +71 -0
- package/dist/skills/distill/upstream-fetcher.d.ts.map +1 -0
- package/dist/skills/distill/upstream-fetcher.js +202 -0
- package/dist/skills/distill/upstream-fetcher.js.map +1 -0
- package/dist/skills/distilled/distilled-api-design.md +491 -0
- package/dist/skills/distilled/distilled-architecture-decision.md +173 -0
- package/dist/skills/distilled/distilled-creator.md +178 -0
- package/dist/skills/distilled/distilled-db-schema-design.md +245 -0
- package/dist/skills/distilled/distilled-defi-amm-security.md +293 -0
- package/dist/skills/distilled/distilled-executing-plans.md +113 -0
- package/dist/skills/distilled/distilled-harness-engineering.md +242 -0
- package/dist/skills/distilled/distilled-karpathy-guidelines.md +104 -0
- package/dist/skills/distilled/distilled-performance-optimization.md +175 -0
- package/dist/skills/distilled/distilled-spec-driven-design.md +193 -0
- package/dist/skills/distilled/distilled-systematic-debugging.md +306 -0
- package/dist/skills/distilled/distilled-verification-before-completion.md +203 -0
- package/dist/skills/keyword-score.d.ts +29 -0
- package/dist/skills/keyword-score.d.ts.map +1 -0
- package/dist/skills/keyword-score.js +54 -0
- package/dist/skills/keyword-score.js.map +1 -0
- package/dist/skills/registry.d.ts +64 -20
- package/dist/skills/registry.d.ts.map +1 -1
- package/dist/skills/registry.js +102 -105
- package/dist/skills/registry.js.map +1 -1
- package/dist/skills/tools/pipeline-suggest.js +14 -14
- package/dist/skills/tools/skill-invoke.d.ts +1 -1
- package/dist/skills/tools/skill-invoke.js +1 -1
- package/dist/web/routes/agent-content.d.ts +30 -0
- package/dist/web/routes/agent-content.d.ts.map +1 -0
- package/dist/web/routes/agent-content.js +139 -0
- package/dist/web/routes/agent-content.js.map +1 -0
- package/dist/web/routes/decisions.d.ts +15 -0
- package/dist/web/routes/decisions.d.ts.map +1 -0
- package/dist/web/routes/decisions.js +181 -0
- package/dist/web/routes/decisions.js.map +1 -0
- package/dist/web/routes/diagnostics.d.ts +61 -0
- package/dist/web/routes/diagnostics.d.ts.map +1 -0
- package/dist/web/routes/diagnostics.js +203 -0
- package/dist/web/routes/diagnostics.js.map +1 -0
- package/dist/web/routes/events.d.ts.map +1 -1
- package/dist/web/routes/events.js +24 -0
- package/dist/web/routes/events.js.map +1 -1
- package/dist/web/routes/health.d.ts +33 -0
- package/dist/web/routes/health.d.ts.map +1 -0
- package/dist/web/routes/health.js +37 -0
- package/dist/web/routes/health.js.map +1 -0
- package/dist/web/routes/insights.d.ts +0 -5
- package/dist/web/routes/insights.d.ts.map +1 -1
- package/dist/web/routes/insights.js +783 -2
- package/dist/web/routes/insights.js.map +1 -1
- package/dist/web/routes/knowledge.d.ts +16 -0
- package/dist/web/routes/knowledge.d.ts.map +1 -0
- package/dist/web/routes/knowledge.js +661 -0
- package/dist/web/routes/knowledge.js.map +1 -0
- package/dist/web/routes/patch.d.ts +60 -1
- package/dist/web/routes/patch.d.ts.map +1 -1
- package/dist/web/routes/patch.js +170 -64
- package/dist/web/routes/patch.js.map +1 -1
- package/dist/web/routes/pipeline.d.ts +37 -0
- package/dist/web/routes/pipeline.d.ts.map +1 -0
- package/dist/web/routes/pipeline.js +149 -0
- package/dist/web/routes/pipeline.js.map +1 -0
- package/dist/web/routes/rules.d.ts.map +1 -1
- package/dist/web/routes/rules.js +6 -1
- package/dist/web/routes/rules.js.map +1 -1
- package/dist/web/routes/sessions.d.ts.map +1 -1
- package/dist/web/routes/sessions.js +9 -1
- package/dist/web/routes/sessions.js.map +1 -1
- package/dist/web/routes/skill-content.d.ts +30 -0
- package/dist/web/routes/skill-content.d.ts.map +1 -0
- package/dist/web/routes/skill-content.js +117 -0
- package/dist/web/routes/skill-content.js.map +1 -0
- package/dist/web/routes/skills-distill.d.ts +29 -0
- package/dist/web/routes/skills-distill.d.ts.map +1 -0
- package/dist/web/routes/skills-distill.js +552 -0
- package/dist/web/routes/skills-distill.js.map +1 -0
- package/dist/web/routes/skills.js +7 -7
- package/dist/web/routes/skills.js.map +1 -1
- package/dist/web/routes/task-timeline.d.ts +102 -0
- package/dist/web/routes/task-timeline.d.ts.map +1 -0
- package/dist/web/routes/task-timeline.js +274 -0
- package/dist/web/routes/task-timeline.js.map +1 -0
- package/dist/web/routes/tasks.d.ts.map +1 -1
- package/dist/web/routes/tasks.js +355 -8
- package/dist/web/routes/tasks.js.map +1 -1
- package/dist/web/routes/trace.d.ts.map +1 -1
- package/dist/web/routes/trace.js +3 -2
- package/dist/web/routes/trace.js.map +1 -1
- package/dist/web/routes/types.d.ts +0 -4
- package/dist/web/routes/types.d.ts.map +1 -1
- package/dist/web/routes/types.js +1 -1
- package/dist/web/routes/types.js.map +1 -1
- package/dist/web/routes/violations.d.ts +14 -0
- package/dist/web/routes/violations.d.ts.map +1 -0
- package/dist/web/routes/violations.js +111 -0
- package/dist/web/routes/violations.js.map +1 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +79 -19
- package/dist/web/server.js.map +1 -1
- package/dist/web/services/build-manager.d.ts +72 -0
- package/dist/web/services/build-manager.d.ts.map +1 -0
- package/dist/web/services/build-manager.js +189 -0
- package/dist/web/services/build-manager.js.map +1 -0
- package/dist/web/services/distill-manager.d.ts +125 -0
- package/dist/web/services/distill-manager.d.ts.map +1 -0
- package/dist/web/services/distill-manager.js +308 -0
- package/dist/web/services/distill-manager.js.map +1 -0
- package/dist/web/static/assets/AgentContentPage-DkeRNxok.js +2 -0
- package/dist/web/static/assets/AgentContentPage-DkeRNxok.js.map +1 -0
- package/dist/web/static/assets/AgentDelegationTable-ByBa0x1l.js +2 -0
- package/dist/web/static/assets/AgentDelegationTable-ByBa0x1l.js.map +1 -0
- package/dist/web/static/assets/ContextInsightsPage-oUk7_I8u.js +3 -0
- package/dist/web/static/assets/ContextInsightsPage-oUk7_I8u.js.map +1 -0
- package/dist/web/static/assets/DaemonHealthPage-DG2fyOP7.js +2 -0
- package/dist/web/static/assets/DaemonHealthPage-DG2fyOP7.js.map +1 -0
- package/dist/web/static/assets/DecisionsPage-CMAPEnKb.js +2 -0
- package/dist/web/static/assets/DecisionsPage-CMAPEnKb.js.map +1 -0
- package/dist/web/static/assets/DiagnosticsPage-DQd-Zm4r.js +2 -0
- package/dist/web/static/assets/DiagnosticsPage-DQd-Zm4r.js.map +1 -0
- package/dist/web/static/assets/DriftTab-DqpepOhI.js +2 -0
- package/dist/web/static/assets/DriftTab-DqpepOhI.js.map +1 -0
- package/dist/web/static/assets/HealthHomePage-CN6zNIie.js +3 -0
- package/dist/web/static/assets/HealthHomePage-CN6zNIie.js.map +1 -0
- package/dist/web/static/assets/KbHitRateTable-ByEIWujF.js +2 -0
- package/dist/web/static/assets/KbHitRateTable-ByEIWujF.js.map +1 -0
- package/dist/web/static/assets/MarkdownRenderer-DZmTl-8J.js +3 -0
- package/dist/web/static/assets/MarkdownRenderer-DZmTl-8J.js.map +1 -0
- package/dist/web/static/assets/NotFound-BQPh0vaF.js +2 -0
- package/dist/web/static/assets/NotFound-BQPh0vaF.js.map +1 -0
- package/dist/web/static/assets/ProjectSwitcher-D3lZMFd3.js +2 -0
- package/dist/web/static/assets/ProjectSwitcher-D3lZMFd3.js.map +1 -0
- package/dist/web/static/assets/SettingsPage-oLJBNzQj.js +2 -0
- package/dist/web/static/assets/SettingsPage-oLJBNzQj.js.map +1 -0
- package/dist/web/static/assets/SkillContentPage-DK5rgfgw.js +2 -0
- package/dist/web/static/assets/SkillContentPage-DK5rgfgw.js.map +1 -0
- package/dist/web/static/assets/SkillStatsTable-DYMzjEUV.js +2 -0
- package/dist/web/static/assets/SkillStatsTable-DYMzjEUV.js.map +1 -0
- package/dist/web/static/assets/SkillsDistillTab-C7qaG8q3.js +2 -0
- package/dist/web/static/assets/SkillsDistillTab-C7qaG8q3.js.map +1 -0
- package/dist/web/static/assets/TasksHubPage-03wsRRsJ.js +6 -0
- package/dist/web/static/assets/TasksHubPage-03wsRRsJ.js.map +1 -0
- package/dist/web/static/assets/ViolationsPage-DSiLr-9O.js +3 -0
- package/dist/web/static/assets/ViolationsPage-DSiLr-9O.js.map +1 -0
- package/dist/web/static/assets/arco-Bhi3a6Qp.js +14 -0
- package/dist/web/static/assets/arco-Bhi3a6Qp.js.map +1 -0
- package/dist/web/static/assets/arco-DFQA6dO_.css +1 -0
- package/dist/web/static/assets/charts-BuHQWDbQ.js +37 -0
- package/dist/web/static/assets/charts-BuHQWDbQ.js.map +1 -0
- package/dist/web/static/assets/date-fns-sbWH3_uq.js +2 -0
- package/dist/web/static/assets/date-fns-sbWH3_uq.js.map +1 -0
- package/dist/web/static/assets/index-7bl3kbcx.css +1 -0
- package/dist/web/static/assets/index-BIYnq1Dx.js +4 -0
- package/dist/web/static/assets/index-BIYnq1Dx.js.map +1 -0
- package/dist/web/static/assets/lucide-CnlPQoG8.js +72 -0
- package/dist/web/static/assets/lucide-CnlPQoG8.js.map +1 -0
- package/dist/web/static/assets/outcome-DUn1NjlC.js +2 -0
- package/dist/web/static/assets/outcome-DUn1NjlC.js.map +1 -0
- package/dist/web/static/assets/query-S6X1S7K9.js +2 -0
- package/dist/web/static/assets/{query-C99w429o.js.map → query-S6X1S7K9.js.map} +1 -1
- package/dist/web/static/assets/{react-router-r79dBVy4.js → react-router-JVUrkhdd.js} +3 -3
- package/dist/web/static/assets/{react-router-r79dBVy4.js.map → react-router-JVUrkhdd.js.map} +1 -1
- package/dist/web/static/assets/react-vendor-tkvCrao7.js +57 -0
- package/dist/web/static/assets/react-vendor-tkvCrao7.js.map +1 -0
- package/dist/web/static/assets/syntax-highlighter-BkZfCDsz.js +6 -0
- package/dist/web/static/assets/syntax-highlighter-BkZfCDsz.js.map +1 -0
- package/dist/web/static/assets/useTabsParam-k8qte_0C.js +2 -0
- package/dist/web/static/assets/useTabsParam-k8qte_0C.js.map +1 -0
- package/dist/web/static/assets/vendor-DWgdB1eY.js +65 -0
- package/dist/web/static/assets/vendor-DWgdB1eY.js.map +1 -0
- package/dist/web/static/index.html +12 -8
- package/package.json +14 -3
- package/dist/core/ai/provider.d.ts +0 -63
- package/dist/core/ai/provider.d.ts.map +0 -1
- package/dist/core/ai/provider.js +0 -241
- package/dist/core/ai/provider.js.map +0 -1
- package/dist/core/ai/types.d.ts +0 -43
- package/dist/core/ai/types.d.ts.map +0 -1
- package/dist/core/ai/types.js +0 -5
- package/dist/core/ai/types.js.map +0 -1
- package/dist/core/storage/token-usage.d.ts +0 -36
- package/dist/core/storage/token-usage.d.ts.map +0 -1
- package/dist/core/storage/token-usage.js +0 -59
- package/dist/core/storage/token-usage.js.map +0 -1
- package/dist/core/utils/token-tracker.d.ts +0 -39
- package/dist/core/utils/token-tracker.d.ts.map +0 -1
- package/dist/core/utils/token-tracker.js +0 -69
- package/dist/core/utils/token-tracker.js.map +0 -1
- package/dist/skills/index.d.ts +0 -3
- package/dist/skills/index.d.ts.map +0 -1
- package/dist/skills/index.js +0 -3
- package/dist/skills/index.js.map +0 -1
- package/dist/skills/matcher.d.ts +0 -26
- package/dist/skills/matcher.d.ts.map +0 -1
- package/dist/skills/matcher.js +0 -113
- package/dist/skills/matcher.js.map +0 -1
- package/dist/skills/official/code-simplifier.md +0 -52
- package/dist/skills/official/find-skills.md +0 -142
- package/dist/skills/official/official-api-design.md +0 -30
- package/dist/skills/official/official-architecture-decision.md +0 -41
- package/dist/skills/official/official-bmad.md +0 -118
- package/dist/skills/official/official-db-schema-design.md +0 -34
- package/dist/skills/official/official-debug.md +0 -25
- package/dist/skills/official/official-doc-driven.md +0 -31
- package/dist/skills/official/official-harness-engineering.md +0 -108
- package/dist/skills/official/official-openspec.md +0 -89
- package/dist/skills/official/official-performance-optimization.md +0 -30
- package/dist/skills/official/official-pr-review.md +0 -35
- package/dist/skills/official/official-release-checklist.md +0 -30
- package/dist/skills/official/official-security-hardening.md +0 -32
- package/dist/skills/official/official-spec-driven-design.md +0 -31
- package/dist/skills/official/planning-with-files.md +0 -241
- package/dist/skills/official/ui-ux-pro-max.md +0 -105
- package/dist/skills/official/webapp-testing.md +0 -96
- package/dist/skills/official-skills.d.ts +0 -26
- package/dist/skills/official-skills.d.ts.map +0 -1
- package/dist/skills/official-skills.js +0 -74
- package/dist/skills/official-skills.js.map +0 -1
- package/dist/skills/semantic-matcher.d.ts +0 -60
- package/dist/skills/semantic-matcher.d.ts.map +0 -1
- package/dist/skills/semantic-matcher.js +0 -192
- package/dist/skills/semantic-matcher.js.map +0 -1
- package/dist/skills/upgrade-engine.d.ts +0 -93
- package/dist/skills/upgrade-engine.d.ts.map +0 -1
- package/dist/skills/upgrade-engine.js +0 -447
- package/dist/skills/upgrade-engine.js.map +0 -1
- package/dist/skills/upgrade-prompt.d.ts +0 -20
- package/dist/skills/upgrade-prompt.d.ts.map +0 -1
- package/dist/skills/upgrade-prompt.js +0 -75
- package/dist/skills/upgrade-prompt.js.map +0 -1
- package/dist/web/routes/ai.d.ts +0 -10
- package/dist/web/routes/ai.d.ts.map +0 -1
- package/dist/web/routes/ai.js +0 -186
- package/dist/web/routes/ai.js.map +0 -1
- package/dist/web/routes/token-usage.d.ts +0 -7
- package/dist/web/routes/token-usage.d.ts.map +0 -1
- package/dist/web/routes/token-usage.js +0 -18
- package/dist/web/routes/token-usage.js.map +0 -1
- package/dist/web/ssrf-guard.d.ts +0 -35
- package/dist/web/ssrf-guard.d.ts.map +0 -1
- package/dist/web/ssrf-guard.js +0 -93
- package/dist/web/ssrf-guard.js.map +0 -1
- package/dist/web/static/assets/AIConfig-CdDWzJyO.js +0 -2
- package/dist/web/static/assets/AIConfig-CdDWzJyO.js.map +0 -1
- package/dist/web/static/assets/Dashboard-CoEmmIDt.js +0 -2
- package/dist/web/static/assets/Dashboard-CoEmmIDt.js.map +0 -1
- package/dist/web/static/assets/Drawer-DdRTzlLB.js +0 -2
- package/dist/web/static/assets/Drawer-DdRTzlLB.js.map +0 -1
- package/dist/web/static/assets/Events-DrIq1SUS.js +0 -2
- package/dist/web/static/assets/Events-DrIq1SUS.js.map +0 -1
- package/dist/web/static/assets/Reports-DFBM3MDK.js +0 -2
- package/dist/web/static/assets/Reports-DFBM3MDK.js.map +0 -1
- package/dist/web/static/assets/SearchInput-qCj_jAcf.js +0 -2
- package/dist/web/static/assets/SearchInput-qCj_jAcf.js.map +0 -1
- package/dist/web/static/assets/SessionDetail-CCzwdoT7.js +0 -2
- package/dist/web/static/assets/SessionDetail-CCzwdoT7.js.map +0 -1
- package/dist/web/static/assets/Sessions-FfLYkAw9.js +0 -2
- package/dist/web/static/assets/Sessions-FfLYkAw9.js.map +0 -1
- package/dist/web/static/assets/Skills-C8Gvs3Qa.js +0 -2
- package/dist/web/static/assets/Skills-C8Gvs3Qa.js.map +0 -1
- package/dist/web/static/assets/TaskDetail-BS8pYhaR.js +0 -2
- package/dist/web/static/assets/TaskDetail-BS8pYhaR.js.map +0 -1
- package/dist/web/static/assets/Tasks-CyuhizG8.js +0 -2
- package/dist/web/static/assets/Tasks-CyuhizG8.js.map +0 -1
- package/dist/web/static/assets/charts-CLrM0_uM.js +0 -37
- package/dist/web/static/assets/charts-CLrM0_uM.js.map +0 -1
- package/dist/web/static/assets/date-fns-CZ_bHujz.js +0 -2
- package/dist/web/static/assets/date-fns-CZ_bHujz.js.map +0 -1
- package/dist/web/static/assets/export-L_VBD2p1.js +0 -4
- package/dist/web/static/assets/export-L_VBD2p1.js.map +0 -1
- package/dist/web/static/assets/index-CBX47X8l.js +0 -3
- package/dist/web/static/assets/index-CBX47X8l.js.map +0 -1
- package/dist/web/static/assets/index-DjIoMdoR.css +0 -1
- package/dist/web/static/assets/lucide-Bs_edTLa.js +0 -232
- package/dist/web/static/assets/lucide-Bs_edTLa.js.map +0 -1
- package/dist/web/static/assets/query-C99w429o.js +0 -2
- package/dist/web/static/assets/react-vendor-CSp-GLFF.js +0 -49
- package/dist/web/static/assets/react-vendor-CSp-GLFF.js.map +0 -1
- package/dist/web/static/assets/syntax-highlighter-44FakypI.js +0 -9
- package/dist/web/static/assets/syntax-highlighter-44FakypI.js.map +0 -1
- package/dist/web/static/assets/task-title-BhOcemuR.js +0 -2
- package/dist/web/static/assets/task-title-BhOcemuR.js.map +0 -1
- package/dist/web/static/assets/time-Bxuk0M-C.js +0 -2
- package/dist/web/static/assets/time-Bxuk0M-C.js.map +0 -1
- package/dist/web/static/assets/vendor-CMMjVdZs.js +0 -64
- package/dist/web/static/assets/vendor-CMMjVdZs.js.map +0 -1
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KnowledgeOperations — KB telemetry tables (v9.5).
|
|
3
|
+
*
|
|
4
|
+
* Two append-only tables:
|
|
5
|
+
* kb_query_log — every queryKnowledge call (when daemon supplies storage).
|
|
6
|
+
* kb_build_log — every BuildManager.start (one row per build_id, updated to done/error).
|
|
7
|
+
*
|
|
8
|
+
* Reading helpers:
|
|
9
|
+
* queryKbStats(project_path) — aggregates for /api/knowledge/stats
|
|
10
|
+
* queryLastKbBuild(project_path)— most recent build row for /api/knowledge/stats
|
|
11
|
+
* listKnownProjectPaths() — distinct project_path values in sessions
|
|
12
|
+
*
|
|
13
|
+
* All writes/reads are best-effort; callers are responsible for fail-silent
|
|
14
|
+
* wrapping (the v9.5 spec mandates: telemetry MUST NEVER break the user's
|
|
15
|
+
* query/build main path).
|
|
16
|
+
*/
|
|
17
|
+
import type Database from 'better-sqlite3';
|
|
18
|
+
export interface KbQueryLogEntry {
|
|
19
|
+
ts: number;
|
|
20
|
+
project_path: string;
|
|
21
|
+
query: string;
|
|
22
|
+
result_count: number;
|
|
23
|
+
/** Number of AI calls made during this query (0 for keyword path; kept for future telemetry). */
|
|
24
|
+
ai_call_count?: number;
|
|
25
|
+
ai_input_tokens?: number | null;
|
|
26
|
+
ai_output_tokens?: number | null;
|
|
27
|
+
duration_ms: number;
|
|
28
|
+
}
|
|
29
|
+
export interface KbStatsRow {
|
|
30
|
+
total_queries: number;
|
|
31
|
+
total_ai_calls: number;
|
|
32
|
+
total_ai_input_tokens: number;
|
|
33
|
+
total_ai_output_tokens: number;
|
|
34
|
+
}
|
|
35
|
+
export interface KbBuildLogEntry {
|
|
36
|
+
build_id: string;
|
|
37
|
+
ts: number;
|
|
38
|
+
project_path: string;
|
|
39
|
+
options_json: string;
|
|
40
|
+
status: 'running' | 'done' | 'error';
|
|
41
|
+
stats_json?: string;
|
|
42
|
+
duration_ms?: number;
|
|
43
|
+
error_message?: string;
|
|
44
|
+
}
|
|
45
|
+
export interface KbBuildLogRow {
|
|
46
|
+
build_id: string;
|
|
47
|
+
ts: number;
|
|
48
|
+
project_path: string;
|
|
49
|
+
options_json: string;
|
|
50
|
+
stats_json: string | null;
|
|
51
|
+
duration_ms: number | null;
|
|
52
|
+
status: 'running' | 'done' | 'error';
|
|
53
|
+
error_message: string | null;
|
|
54
|
+
}
|
|
55
|
+
export declare class KnowledgeOperations {
|
|
56
|
+
private db;
|
|
57
|
+
constructor(db: Database.Database);
|
|
58
|
+
writeKbQueryLog(entry: KbQueryLogEntry): void;
|
|
59
|
+
queryKbStats(projectPath: string): KbStatsRow;
|
|
60
|
+
/**
|
|
61
|
+
* Upsert on conflict(build_id) — if the same build_id is started twice
|
|
62
|
+
* (test-only / replays), overwrite the previous row.
|
|
63
|
+
*/
|
|
64
|
+
writeKbBuildLog(entry: KbBuildLogEntry): void;
|
|
65
|
+
/**
|
|
66
|
+
* Dynamic partial update — only patches fields the caller actually supplied.
|
|
67
|
+
*/
|
|
68
|
+
updateKbBuildLog(buildId: string, updates: {
|
|
69
|
+
status?: 'running' | 'done' | 'error';
|
|
70
|
+
stats_json?: string | null;
|
|
71
|
+
duration_ms?: number | null;
|
|
72
|
+
error_message?: string | null;
|
|
73
|
+
}): void;
|
|
74
|
+
queryLastKbBuild(projectPath: string): KbBuildLogRow | null;
|
|
75
|
+
/**
|
|
76
|
+
* Distinct project_path values observed in the sessions table. Used by
|
|
77
|
+
* /api/knowledge/projects and the project-param allowlist guard.
|
|
78
|
+
*
|
|
79
|
+
* Empty/NULL paths are filtered out (sessions sometimes carries '' before
|
|
80
|
+
* project resolution lands).
|
|
81
|
+
*/
|
|
82
|
+
listKnownProjectPaths(): string[];
|
|
83
|
+
/**
|
|
84
|
+
* Map of project_path → most recent `sessions.last_event_time` (ISO string)
|
|
85
|
+
* or `null` if a project has no sessions with a non-null timestamp.
|
|
86
|
+
*
|
|
87
|
+
* Used by /api/knowledge/projects to render "last active" per project.
|
|
88
|
+
* Returns one row per distinct project_path; callers should iterate the
|
|
89
|
+
* map directly (Map.get returns undefined for unknown paths — treat as null).
|
|
90
|
+
*/
|
|
91
|
+
queryLastEventAtPerProject(): Map<string, string | null>;
|
|
92
|
+
/**
|
|
93
|
+
* Query KB tool usage statistics from events table.
|
|
94
|
+
* Returns aggregated stats for the specified project and time window.
|
|
95
|
+
*
|
|
96
|
+
* @param projectPath - Project root path
|
|
97
|
+
* @param days - Number of days to look back (default: 7)
|
|
98
|
+
*/
|
|
99
|
+
queryKbUsageStats(projectPath: string, days?: number): {
|
|
100
|
+
total: number;
|
|
101
|
+
byTool: Record<string, number>;
|
|
102
|
+
recentSessions: string[];
|
|
103
|
+
lastUsedAt: string | null;
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=knowledge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../../src/core/storage/knowledge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAM3C,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,iGAAiG;IACjG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACrC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,qBAAa,mBAAmB;IAClB,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAIzC,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAqB7C,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU;IA8B7C;;;OAGG;IACH,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IA6B7C;;OAEG;IACH,gBAAgB,CACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;QACP,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;QACtC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC/B,GACA,IAAI;IA+BP,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAe3D;;;;;;OAMG;IACH,qBAAqB,IAAI,MAAM,EAAE;IAWjC;;;;;;;OAOG;IACH,0BAA0B,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAcxD;;;;;;OAMG;IACH,iBAAiB,CACf,WAAW,EAAE,MAAM,EACnB,IAAI,GAAE,MAAU,GACf;QACD,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3B;CA+DF"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KnowledgeOperations — KB telemetry tables (v9.5).
|
|
3
|
+
*
|
|
4
|
+
* Two append-only tables:
|
|
5
|
+
* kb_query_log — every queryKnowledge call (when daemon supplies storage).
|
|
6
|
+
* kb_build_log — every BuildManager.start (one row per build_id, updated to done/error).
|
|
7
|
+
*
|
|
8
|
+
* Reading helpers:
|
|
9
|
+
* queryKbStats(project_path) — aggregates for /api/knowledge/stats
|
|
10
|
+
* queryLastKbBuild(project_path)— most recent build row for /api/knowledge/stats
|
|
11
|
+
* listKnownProjectPaths() — distinct project_path values in sessions
|
|
12
|
+
*
|
|
13
|
+
* All writes/reads are best-effort; callers are responsible for fail-silent
|
|
14
|
+
* wrapping (the v9.5 spec mandates: telemetry MUST NEVER break the user's
|
|
15
|
+
* query/build main path).
|
|
16
|
+
*/
|
|
17
|
+
export class KnowledgeOperations {
|
|
18
|
+
db;
|
|
19
|
+
constructor(db) {
|
|
20
|
+
this.db = db;
|
|
21
|
+
}
|
|
22
|
+
// ── kb_query_log ─────────────────────────────────────────────────────────
|
|
23
|
+
writeKbQueryLog(entry) {
|
|
24
|
+
this.db
|
|
25
|
+
.prepare(`INSERT INTO kb_query_log (
|
|
26
|
+
ts, project_path, query, result_count,
|
|
27
|
+
ai_call_count, ai_input_tokens, ai_output_tokens,
|
|
28
|
+
duration_ms
|
|
29
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
30
|
+
.run(entry.ts, entry.project_path, entry.query, entry.result_count, entry.ai_call_count ?? 0, entry.ai_input_tokens ?? null, entry.ai_output_tokens ?? null, entry.duration_ms);
|
|
31
|
+
}
|
|
32
|
+
queryKbStats(projectPath) {
|
|
33
|
+
const row = this.db
|
|
34
|
+
.prepare(`SELECT
|
|
35
|
+
COUNT(*) AS total_queries,
|
|
36
|
+
SUM(COALESCE(ai_call_count,0)) AS total_ai_calls,
|
|
37
|
+
SUM(COALESCE(ai_input_tokens,0)) AS total_ai_input_tokens,
|
|
38
|
+
SUM(COALESCE(ai_output_tokens,0)) AS total_ai_output_tokens
|
|
39
|
+
FROM kb_query_log
|
|
40
|
+
WHERE project_path = ?`)
|
|
41
|
+
.get(projectPath);
|
|
42
|
+
return {
|
|
43
|
+
total_queries: row?.total_queries ?? 0,
|
|
44
|
+
total_ai_calls: row?.total_ai_calls ?? 0,
|
|
45
|
+
total_ai_input_tokens: row?.total_ai_input_tokens ?? 0,
|
|
46
|
+
total_ai_output_tokens: row?.total_ai_output_tokens ?? 0,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
// ── kb_build_log ─────────────────────────────────────────────────────────
|
|
50
|
+
/**
|
|
51
|
+
* Upsert on conflict(build_id) — if the same build_id is started twice
|
|
52
|
+
* (test-only / replays), overwrite the previous row.
|
|
53
|
+
*/
|
|
54
|
+
writeKbBuildLog(entry) {
|
|
55
|
+
this.db
|
|
56
|
+
.prepare(`INSERT INTO kb_build_log (
|
|
57
|
+
build_id, ts, project_path, options_json, stats_json,
|
|
58
|
+
duration_ms, status, error_message
|
|
59
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
60
|
+
ON CONFLICT(build_id) DO UPDATE SET
|
|
61
|
+
ts = excluded.ts,
|
|
62
|
+
project_path = excluded.project_path,
|
|
63
|
+
options_json = excluded.options_json,
|
|
64
|
+
stats_json = excluded.stats_json,
|
|
65
|
+
duration_ms = excluded.duration_ms,
|
|
66
|
+
status = excluded.status,
|
|
67
|
+
error_message = excluded.error_message,
|
|
68
|
+
updated_at = datetime('now')`)
|
|
69
|
+
.run(entry.build_id, entry.ts, entry.project_path, entry.options_json, entry.stats_json ?? null, entry.duration_ms ?? null, entry.status, entry.error_message ?? null);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Dynamic partial update — only patches fields the caller actually supplied.
|
|
73
|
+
*/
|
|
74
|
+
updateKbBuildLog(buildId, updates) {
|
|
75
|
+
const setClauses = [];
|
|
76
|
+
const params = [];
|
|
77
|
+
if (updates.status !== undefined) {
|
|
78
|
+
setClauses.push('status = ?');
|
|
79
|
+
params.push(updates.status);
|
|
80
|
+
}
|
|
81
|
+
if (updates.stats_json !== undefined) {
|
|
82
|
+
setClauses.push('stats_json = ?');
|
|
83
|
+
params.push(updates.stats_json);
|
|
84
|
+
}
|
|
85
|
+
if (updates.duration_ms !== undefined) {
|
|
86
|
+
setClauses.push('duration_ms = ?');
|
|
87
|
+
params.push(updates.duration_ms);
|
|
88
|
+
}
|
|
89
|
+
if (updates.error_message !== undefined) {
|
|
90
|
+
setClauses.push('error_message = ?');
|
|
91
|
+
params.push(updates.error_message);
|
|
92
|
+
}
|
|
93
|
+
if (setClauses.length === 0)
|
|
94
|
+
return;
|
|
95
|
+
setClauses.push("updated_at = datetime('now')");
|
|
96
|
+
params.push(buildId);
|
|
97
|
+
this.db
|
|
98
|
+
.prepare(`UPDATE kb_build_log SET ${setClauses.join(', ')} WHERE build_id = ?`)
|
|
99
|
+
.run(...params);
|
|
100
|
+
}
|
|
101
|
+
queryLastKbBuild(projectPath) {
|
|
102
|
+
const row = this.db
|
|
103
|
+
.prepare(`SELECT build_id, ts, project_path, options_json, stats_json,
|
|
104
|
+
duration_ms, status, error_message
|
|
105
|
+
FROM kb_build_log
|
|
106
|
+
WHERE project_path = ?
|
|
107
|
+
ORDER BY ts DESC LIMIT 1`)
|
|
108
|
+
.get(projectPath);
|
|
109
|
+
return row ?? null;
|
|
110
|
+
}
|
|
111
|
+
// ── sessions-derived helpers ─────────────────────────────────────────────
|
|
112
|
+
/**
|
|
113
|
+
* Distinct project_path values observed in the sessions table. Used by
|
|
114
|
+
* /api/knowledge/projects and the project-param allowlist guard.
|
|
115
|
+
*
|
|
116
|
+
* Empty/NULL paths are filtered out (sessions sometimes carries '' before
|
|
117
|
+
* project resolution lands).
|
|
118
|
+
*/
|
|
119
|
+
listKnownProjectPaths() {
|
|
120
|
+
const rows = this.db
|
|
121
|
+
.prepare(`SELECT DISTINCT project_path FROM sessions
|
|
122
|
+
WHERE project_path IS NOT NULL AND project_path != ''
|
|
123
|
+
ORDER BY project_path`)
|
|
124
|
+
.all();
|
|
125
|
+
return rows.map((r) => r.project_path);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Map of project_path → most recent `sessions.last_event_time` (ISO string)
|
|
129
|
+
* or `null` if a project has no sessions with a non-null timestamp.
|
|
130
|
+
*
|
|
131
|
+
* Used by /api/knowledge/projects to render "last active" per project.
|
|
132
|
+
* Returns one row per distinct project_path; callers should iterate the
|
|
133
|
+
* map directly (Map.get returns undefined for unknown paths — treat as null).
|
|
134
|
+
*/
|
|
135
|
+
queryLastEventAtPerProject() {
|
|
136
|
+
const rows = this.db
|
|
137
|
+
.prepare(`SELECT project_path, MAX(last_event_time) AS last_event_at
|
|
138
|
+
FROM sessions
|
|
139
|
+
WHERE project_path IS NOT NULL AND project_path != ''
|
|
140
|
+
GROUP BY project_path`)
|
|
141
|
+
.all();
|
|
142
|
+
return new Map(rows.map((r) => [r.project_path, r.last_event_at]));
|
|
143
|
+
}
|
|
144
|
+
// ── KB usage stats (from events table) ──────────────────────────────────
|
|
145
|
+
/**
|
|
146
|
+
* Query KB tool usage statistics from events table.
|
|
147
|
+
* Returns aggregated stats for the specified project and time window.
|
|
148
|
+
*
|
|
149
|
+
* @param projectPath - Project root path
|
|
150
|
+
* @param days - Number of days to look back (default: 7)
|
|
151
|
+
*/
|
|
152
|
+
queryKbUsageStats(projectPath, days = 7) {
|
|
153
|
+
const cutoff = new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString();
|
|
154
|
+
// Total KB tool calls in the time window
|
|
155
|
+
const totalRow = this.db
|
|
156
|
+
.prepare(`SELECT COUNT(*) as count
|
|
157
|
+
FROM events
|
|
158
|
+
WHERE project_path = ?
|
|
159
|
+
AND tool_name LIKE 'mcp__claude-forge__knowledge%'
|
|
160
|
+
AND timestamp > ?`)
|
|
161
|
+
.get(projectPath, cutoff);
|
|
162
|
+
// Group by tool name
|
|
163
|
+
const byToolRows = this.db
|
|
164
|
+
.prepare(`SELECT tool_name, COUNT(*) as count
|
|
165
|
+
FROM events
|
|
166
|
+
WHERE project_path = ?
|
|
167
|
+
AND tool_name LIKE 'mcp__claude-forge__knowledge%'
|
|
168
|
+
AND timestamp > ?
|
|
169
|
+
GROUP BY tool_name`)
|
|
170
|
+
.all(projectPath, cutoff);
|
|
171
|
+
const byTool = {};
|
|
172
|
+
for (const row of byToolRows) {
|
|
173
|
+
// Strip 'mcp__claude-forge__' prefix for cleaner display
|
|
174
|
+
const shortName = row.tool_name.replace('mcp__claude-forge__', '');
|
|
175
|
+
byTool[shortName] = row.count;
|
|
176
|
+
}
|
|
177
|
+
// Recent sessions that used KB tools
|
|
178
|
+
const sessionRows = this.db
|
|
179
|
+
.prepare(`SELECT DISTINCT session_id
|
|
180
|
+
FROM events
|
|
181
|
+
WHERE project_path = ?
|
|
182
|
+
AND tool_name LIKE 'mcp__claude-forge__knowledge%'
|
|
183
|
+
AND timestamp > ?
|
|
184
|
+
ORDER BY timestamp DESC
|
|
185
|
+
LIMIT 5`)
|
|
186
|
+
.all(projectPath, cutoff);
|
|
187
|
+
// Last usage timestamp (all-time, not limited by days)
|
|
188
|
+
const lastUsedRow = this.db
|
|
189
|
+
.prepare(`SELECT MAX(timestamp) as last_used
|
|
190
|
+
FROM events
|
|
191
|
+
WHERE project_path = ?
|
|
192
|
+
AND tool_name LIKE 'mcp__claude-forge__knowledge%'`)
|
|
193
|
+
.get(projectPath);
|
|
194
|
+
return {
|
|
195
|
+
total: totalRow?.count ?? 0,
|
|
196
|
+
byTool,
|
|
197
|
+
recentSessions: sessionRows.map((r) => r.session_id),
|
|
198
|
+
lastUsedAt: lastUsedRow?.last_used ?? null,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=knowledge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../../src/core/storage/knowledge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAiDH,MAAM,OAAO,mBAAmB;IACV;IAApB,YAAoB,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;IAAG,CAAC;IAE7C,4EAA4E;IAE5E,eAAe,CAAC,KAAsB;QACpC,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;;;;0CAIkC,CACnC;aACA,GAAG,CACF,KAAK,CAAC,EAAE,EACR,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,aAAa,IAAI,CAAC,EACxB,KAAK,CAAC,eAAe,IAAI,IAAI,EAC7B,KAAK,CAAC,gBAAgB,IAAI,IAAI,EAC9B,KAAK,CAAC,WAAW,CAClB,CAAC;IACN,CAAC;IAED,YAAY,CAAC,WAAmB;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CACN;;;;;;gCAMwB,CACzB;aACA,GAAG,CAAC,WAAW,CAOL,CAAC;QAEd,OAAO;YACL,aAAa,EAAE,GAAG,EAAE,aAAa,IAAI,CAAC;YACtC,cAAc,EAAE,GAAG,EAAE,cAAc,IAAI,CAAC;YACxC,qBAAqB,EAAE,GAAG,EAAE,qBAAqB,IAAI,CAAC;YACtD,sBAAsB,EAAE,GAAG,EAAE,sBAAsB,IAAI,CAAC;SACzD,CAAC;IACJ,CAAC;IAED,4EAA4E;IAE5E;;;OAGG;IACH,eAAe,CAAC,KAAsB;QACpC,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;;;;;;;;;;;;uCAY+B,CAChC;aACA,GAAG,CACF,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,EAAE,EACR,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,UAAU,IAAI,IAAI,EACxB,KAAK,CAAC,WAAW,IAAI,IAAI,EACzB,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,aAAa,IAAI,IAAI,CAC5B,CAAC;IACN,CAAC;IAED;;OAEG;IACH,gBAAgB,CACd,OAAe,EACf,OAKC;QAED,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,MAAM,MAAM,GAAc,EAAE,CAAC;QAE7B,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACrC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACtC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACxC,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEpC,UAAU,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAErB,IAAI,CAAC,EAAE;aACJ,OAAO,CAAC,2BAA2B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;aAC9E,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IACpB,CAAC;IAED,gBAAgB,CAAC,WAAmB;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CACN;;;;kCAI0B,CAC3B;aACA,GAAG,CAAC,WAAW,CAA8B,CAAC;QACjD,OAAO,GAAG,IAAI,IAAI,CAAC;IACrB,CAAC;IAED,4EAA4E;IAE5E;;;;;;OAMG;IACH,qBAAqB;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CACN;;+BAEuB,CACxB;aACA,GAAG,EAAqC,CAAC;QAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IACzC,CAAC;IAED;;;;;;;OAOG;IACH,0BAA0B;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CACN;;;+BAGuB,CACxB;aACA,GAAG,EAAmE,CAAC;QAC1E,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,2EAA2E;IAE3E;;;;;;OAMG;IACH,iBAAiB,CACf,WAAmB,EACnB,OAAe,CAAC;QAOhB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAE/E,yCAAyC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE;aACrB,OAAO,CACN;;;;6BAIqB,CACtB;aACA,GAAG,CAAC,WAAW,EAAE,MAAM,CAAkC,CAAC;QAE7D,qBAAqB;QACrB,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE;aACvB,OAAO,CACN;;;;;4BAKoB,CACrB;aACA,GAAG,CAAC,WAAW,EAAE,MAAM,CAAgD,CAAC;QAE3E,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,yDAAyD;YACzD,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;YACnE,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;QAChC,CAAC;QAED,qCAAqC;QACrC,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE;aACxB,OAAO,CACN;;;;;;iBAMS,CACV;aACA,GAAG,CAAC,WAAW,EAAE,MAAM,CAAkC,CAAC;QAE7D,uDAAuD;QACvD,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE;aACxB,OAAO,CACN;;;8DAGsD,CACvD;aACA,GAAG,CAAC,WAAW,CAA6C,CAAC;QAEhE,OAAO;YACL,KAAK,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC;YAC3B,MAAM;YACN,cAAc,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;YACpD,UAAU,EAAE,WAAW,EAAE,SAAS,IAAI,IAAI;SAC3C,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -9,7 +9,12 @@ export interface CleanOldDataResult {
|
|
|
9
9
|
events: number;
|
|
10
10
|
routing: number;
|
|
11
11
|
skills: number;
|
|
12
|
-
|
|
12
|
+
/**
|
|
13
|
+
* task_events: 关联表(无自身 timestamp)。清理基于 events 表删除时
|
|
14
|
+
* 的孤儿行(event_id 已不存在于 events 表)。SQLite 默认未开启
|
|
15
|
+
* `PRAGMA foreign_keys`,CASCADE 不会自动触发,因此这里显式 DELETE。
|
|
16
|
+
*/
|
|
17
|
+
taskEvents: number;
|
|
13
18
|
}
|
|
14
19
|
export declare class MaintenanceOperations {
|
|
15
20
|
private db;
|
|
@@ -20,24 +25,46 @@ export declare class MaintenanceOperations {
|
|
|
20
25
|
*
|
|
21
26
|
* 范围:
|
|
22
27
|
* - events (timestamp TEXT, ISO)
|
|
28
|
+
* - task_events (关联表 — 删除指向已被清理 events 的行)
|
|
23
29
|
* - routing_events (ts INTEGER, unix ms)
|
|
24
30
|
* - skill_invocations (timestamp INTEGER, unix ms)
|
|
25
|
-
* - token_usage (timestamp INTEGER, unix ms)
|
|
26
31
|
*
|
|
27
|
-
* **不删**
|
|
28
|
-
*
|
|
32
|
+
* **不删** 的表(按设计保留):
|
|
33
|
+
* - sessions / tasks — 用户可见的"会话历史 / 任务列表",
|
|
34
|
+
* 删除会破坏 UI 体验;它们的体积也远小于
|
|
35
|
+
* 事实表。
|
|
36
|
+
* - kb_build_log — 知识库构建审计日志,按 build_id 持久化,
|
|
37
|
+
* 是审计 / 回溯依据。
|
|
38
|
+
* - kb_query_log — 知识库查询遥测,体积小且按需采样。
|
|
39
|
+
* 如未来体量过大可单独窗口清理。
|
|
40
|
+
* - injections — 与 events 一一对应的注入审计;
|
|
41
|
+
* schema 已声明 ON DELETE CASCADE,但
|
|
42
|
+
* SQLite 默认未启用 `PRAGMA foreign_keys`,
|
|
43
|
+
* 当前依赖体积自然衰减。如需主动清,
|
|
44
|
+
* 再走与 task_events 同样的孤儿删除模式。
|
|
45
|
+
*
|
|
46
|
+
* **执行顺序**:先删 task_events 中指向 *将被* 删除 events 的行,
|
|
47
|
+
* 再删 events。否则 events 删完后 task_events 已经是孤儿,仍可清,
|
|
48
|
+
* 但顺序反过来会让 SQL 的 IN 子查询少一次范围。
|
|
29
49
|
*
|
|
30
50
|
* @param daysToKeep 保留最近多少天(默认 30)
|
|
31
51
|
* @returns 各表删除行数(结构化以便上层做监控/日志)
|
|
32
52
|
*/
|
|
33
53
|
cleanOldData(daysToKeep?: number): CleanOldDataResult;
|
|
34
|
-
/**
|
|
35
|
-
* @deprecated 仅清 events 表的窄接口。新代码请用 `cleanOldData(days)`。
|
|
36
|
-
* 保留是为了向后兼容现有 daemon / 测试,下个大版本删除。
|
|
37
|
-
*/
|
|
38
|
-
cleanOldEvents(daysToKeep?: number): number;
|
|
39
54
|
runMaintenance(maxSizeMb: number): void;
|
|
40
55
|
vacuum(): void;
|
|
56
|
+
/**
|
|
57
|
+
* Reclaim free pages from the auto_vacuum=INCREMENTAL freelist back to the
|
|
58
|
+
* OS. Returns the number of pages reclaimed (0 if auto_vacuum is not
|
|
59
|
+
* INCREMENTAL or the freelist is empty).
|
|
60
|
+
*
|
|
61
|
+
* Each page is 4 KB (see base.ts page_size), so reclaiming 1000 pages frees
|
|
62
|
+
* about 4 MB. Bounded by `maxPages` to keep the writer-lock window short.
|
|
63
|
+
*
|
|
64
|
+
* Safe to call when auto_vacuum != INCREMENTAL — SQLite silently no-ops and
|
|
65
|
+
* we return 0.
|
|
66
|
+
*/
|
|
67
|
+
incrementalVacuum(maxPages?: number): number;
|
|
41
68
|
getDbSizeMb(): number;
|
|
42
69
|
}
|
|
43
70
|
//# sourceMappingURL=maintenance.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maintenance.d.ts","sourceRoot":"","sources":["../../../src/core/storage/maintenance.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAI3C,4BAA4B;AAC5B,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,
|
|
1
|
+
{"version":3,"file":"maintenance.d.ts","sourceRoot":"","sources":["../../../src/core/storage/maintenance.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAI3C,4BAA4B;AAC5B,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,qBAAqB;IAE9B,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,MAAM;gBADN,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM;IAGxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,YAAY,CAAC,UAAU,GAAE,MAAW,GAAG,kBAAkB;IA+BzD,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAavC,MAAM,IAAI,IAAI;IAId;;;;;;;;;;OAUG;IACH,iBAAiB,CAAC,QAAQ,GAAE,MAAa,GAAG,MAAM;IAgBlD,WAAW,IAAI,MAAM;CAItB"}
|
|
@@ -17,12 +17,27 @@ export class MaintenanceOperations {
|
|
|
17
17
|
*
|
|
18
18
|
* 范围:
|
|
19
19
|
* - events (timestamp TEXT, ISO)
|
|
20
|
+
* - task_events (关联表 — 删除指向已被清理 events 的行)
|
|
20
21
|
* - routing_events (ts INTEGER, unix ms)
|
|
21
22
|
* - skill_invocations (timestamp INTEGER, unix ms)
|
|
22
|
-
* - token_usage (timestamp INTEGER, unix ms)
|
|
23
23
|
*
|
|
24
|
-
* **不删**
|
|
25
|
-
*
|
|
24
|
+
* **不删** 的表(按设计保留):
|
|
25
|
+
* - sessions / tasks — 用户可见的"会话历史 / 任务列表",
|
|
26
|
+
* 删除会破坏 UI 体验;它们的体积也远小于
|
|
27
|
+
* 事实表。
|
|
28
|
+
* - kb_build_log — 知识库构建审计日志,按 build_id 持久化,
|
|
29
|
+
* 是审计 / 回溯依据。
|
|
30
|
+
* - kb_query_log — 知识库查询遥测,体积小且按需采样。
|
|
31
|
+
* 如未来体量过大可单独窗口清理。
|
|
32
|
+
* - injections — 与 events 一一对应的注入审计;
|
|
33
|
+
* schema 已声明 ON DELETE CASCADE,但
|
|
34
|
+
* SQLite 默认未启用 `PRAGMA foreign_keys`,
|
|
35
|
+
* 当前依赖体积自然衰减。如需主动清,
|
|
36
|
+
* 再走与 task_events 同样的孤儿删除模式。
|
|
37
|
+
*
|
|
38
|
+
* **执行顺序**:先删 task_events 中指向 *将被* 删除 events 的行,
|
|
39
|
+
* 再删 events。否则 events 删完后 task_events 已经是孤儿,仍可清,
|
|
40
|
+
* 但顺序反过来会让 SQL 的 IN 子查询少一次范围。
|
|
26
41
|
*
|
|
27
42
|
* @param daysToKeep 保留最近多少天(默认 30)
|
|
28
43
|
* @returns 各表删除行数(结构化以便上层做监控/日志)
|
|
@@ -32,32 +47,22 @@ export class MaintenanceOperations {
|
|
|
32
47
|
cutoffDate.setDate(cutoffDate.getDate() - daysToKeep);
|
|
33
48
|
const cutoffIso = cutoffDate.toISOString();
|
|
34
49
|
const cutoffMs = cutoffDate.getTime();
|
|
50
|
+
// 1. task_events 先删 —— 用即将被删 events 的 event_id 做范围。
|
|
51
|
+
// 无自身 timestamp,必须借 events.timestamp 反向定位。
|
|
52
|
+
const taskEvents = this.db
|
|
53
|
+
.prepare(`DELETE FROM task_events
|
|
54
|
+
WHERE event_id IN (SELECT event_id FROM events WHERE timestamp < ?)`)
|
|
55
|
+
.run(cutoffIso).changes;
|
|
56
|
+
// 2. events
|
|
35
57
|
const events = this.db.prepare(`DELETE FROM events WHERE timestamp < ?`).run(cutoffIso).changes;
|
|
58
|
+
// 3. 其它独立时间序列表
|
|
36
59
|
const routing = this.db.prepare(`DELETE FROM routing_events WHERE ts < ?`).run(cutoffMs).changes;
|
|
37
60
|
const skills = this.db.prepare(`DELETE FROM skill_invocations WHERE timestamp < ?`).run(cutoffMs).changes;
|
|
38
|
-
const
|
|
39
|
-
const total = events + routing + skills + tokens;
|
|
61
|
+
const total = events + taskEvents + routing + skills;
|
|
40
62
|
if (total > 0) {
|
|
41
|
-
logger.info(`[Storage] cleanOldData(${daysToKeep}d): events=${events},
|
|
42
|
-
}
|
|
43
|
-
return { events, routing, skills, tokens };
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* @deprecated 仅清 events 表的窄接口。新代码请用 `cleanOldData(days)`。
|
|
47
|
-
* 保留是为了向后兼容现有 daemon / 测试,下个大版本删除。
|
|
48
|
-
*/
|
|
49
|
-
cleanOldEvents(daysToKeep = 30) {
|
|
50
|
-
const cutoffDate = new Date();
|
|
51
|
-
cutoffDate.setDate(cutoffDate.getDate() - daysToKeep);
|
|
52
|
-
const cutoff = cutoffDate.toISOString();
|
|
53
|
-
const result = this.db.prepare(`
|
|
54
|
-
DELETE FROM events WHERE timestamp < ?
|
|
55
|
-
`).run(cutoff);
|
|
56
|
-
const deleted = result.changes;
|
|
57
|
-
if (deleted > 0) {
|
|
58
|
-
logger.info(`[Storage] Cleaned ${deleted} events older than ${daysToKeep} days`);
|
|
63
|
+
logger.info(`[Storage] cleanOldData(${daysToKeep}d): events=${events}, taskEvents=${taskEvents}, routing=${routing}, skills=${skills}`);
|
|
59
64
|
}
|
|
60
|
-
return
|
|
65
|
+
return { events, routing, skills, taskEvents };
|
|
61
66
|
}
|
|
62
67
|
runMaintenance(maxSizeMb) {
|
|
63
68
|
const sizeMb = this.getDbSizeMb();
|
|
@@ -72,6 +77,33 @@ export class MaintenanceOperations {
|
|
|
72
77
|
vacuum() {
|
|
73
78
|
this.db.exec('VACUUM');
|
|
74
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* Reclaim free pages from the auto_vacuum=INCREMENTAL freelist back to the
|
|
82
|
+
* OS. Returns the number of pages reclaimed (0 if auto_vacuum is not
|
|
83
|
+
* INCREMENTAL or the freelist is empty).
|
|
84
|
+
*
|
|
85
|
+
* Each page is 4 KB (see base.ts page_size), so reclaiming 1000 pages frees
|
|
86
|
+
* about 4 MB. Bounded by `maxPages` to keep the writer-lock window short.
|
|
87
|
+
*
|
|
88
|
+
* Safe to call when auto_vacuum != INCREMENTAL — SQLite silently no-ops and
|
|
89
|
+
* we return 0.
|
|
90
|
+
*/
|
|
91
|
+
incrementalVacuum(maxPages = 1000) {
|
|
92
|
+
const before = this.db.pragma('freelist_count', { simple: true });
|
|
93
|
+
try {
|
|
94
|
+
this.db.exec(`PRAGMA incremental_vacuum(${Math.max(0, Math.floor(maxPages))})`);
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
logger.warn(`[Storage] incremental_vacuum(${maxPages}) failed: ${err}`);
|
|
98
|
+
return 0;
|
|
99
|
+
}
|
|
100
|
+
const after = this.db.pragma('freelist_count', { simple: true });
|
|
101
|
+
const reclaimed = Math.max(0, Number(before) - Number(after));
|
|
102
|
+
if (reclaimed > 0) {
|
|
103
|
+
logger.info(`[Storage] incremental_vacuum reclaimed ${reclaimed} pages (~${(reclaimed * 4 / 1024).toFixed(1)} MB)`);
|
|
104
|
+
}
|
|
105
|
+
return reclaimed;
|
|
106
|
+
}
|
|
75
107
|
getDbSizeMb() {
|
|
76
108
|
if (!existsSync(this.dbPath))
|
|
77
109
|
return 0;
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"maintenance.js","sourceRoot":"","sources":["../../../src/core/storage/maintenance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pipeline rollup — Phase 2d real-time orchestration link view.
|
|
3
|
+
*
|
|
4
|
+
* Given the most recent N UserPromptSubmit events, this module produces one
|
|
5
|
+
* `PipelineRow` per prompt with 5 status dots:
|
|
6
|
+
*
|
|
7
|
+
* ① 接收 events.hook_type='UserPromptSubmit'
|
|
8
|
+
* ② 意图 injections.source_handler='UserPromptSubmitHandler:intent'
|
|
9
|
+
* (or :intent_fallback:L1/L2/L3 — see Phase 2a)
|
|
10
|
+
* ③ KB+Skill injections.source_handler='UserPromptSubmitHandler:kb' /
|
|
11
|
+
* :workflow_rec
|
|
12
|
+
* ④ Spec decisions row (kind='spec') keyed by approval_token
|
|
13
|
+
* ⑤ 执行 tool_intercepts.decision + routing_events.routed_to_name
|
|
14
|
+
*
|
|
15
|
+
* Each dot is one of 4 states (P1 fix from doc-reviewer 2026-05-22):
|
|
16
|
+
* - 'ok' green — the step ran and produced a usable result
|
|
17
|
+
* - 'fail' red — the step ran but the outcome was a refusal / failure
|
|
18
|
+
* - 'skipped' light gray — the step was intentionally skipped by design
|
|
19
|
+
* (e.g. workflow_type='explore' does not generate
|
|
20
|
+
* a spec; KB miss is "skipped" not "missing")
|
|
21
|
+
* - 'missing' dark gray — the step should have produced data but didn't
|
|
22
|
+
* (possible bug or new module not wired up yet)
|
|
23
|
+
*
|
|
24
|
+
* The output is consumed by `src/web/routes/pipeline.ts` and rendered as
|
|
25
|
+
* 4-coloured circles in `web/src/pages/InsightsPipeline.tsx`.
|
|
26
|
+
*
|
|
27
|
+
* Performance note: we do 1 query for prompts + 5 batch queries for the rest,
|
|
28
|
+
* then assemble rows in memory. P95 stays < 50ms for 50 prompts on the dev
|
|
29
|
+
* dataset (988 prompts total). No SQL JOIN — see spec § 3.1 rationale.
|
|
30
|
+
*/
|
|
31
|
+
import type { SQLiteStorage } from './sqlite.js';
|
|
32
|
+
export type DotStatus = 'ok' | 'fail' | 'skipped' | 'missing';
|
|
33
|
+
export interface PipelineRow {
|
|
34
|
+
session_id: string;
|
|
35
|
+
/**
|
|
36
|
+
* task_id reverse-resolved via task_events. Null when the prompt has not
|
|
37
|
+
* been linked to a task yet (TaskSegmenter race / very old data).
|
|
38
|
+
*
|
|
39
|
+
* Added 2026-05-25 so the InsightsPipeline click handler can open the task
|
|
40
|
+
* drawer (TaskDetailContent — "what did this task actually do") instead of
|
|
41
|
+
* the noisy SessionDetailContent (entire session event firehose). The user
|
|
42
|
+
* complaint: "我想看的是任务的详细执行内容,你给我加载会话有什么用?"
|
|
43
|
+
*/
|
|
44
|
+
task_id: string | null;
|
|
45
|
+
prompt_event_id: string | null;
|
|
46
|
+
prompt: string;
|
|
47
|
+
received_at: string;
|
|
48
|
+
project_path: string;
|
|
49
|
+
intent: {
|
|
50
|
+
workflow_type: string | null;
|
|
51
|
+
confidence: number | null;
|
|
52
|
+
suggested_agent: string | null;
|
|
53
|
+
fallback: boolean;
|
|
54
|
+
fallback_layer: number | null;
|
|
55
|
+
} | null;
|
|
56
|
+
kb: {
|
|
57
|
+
pages: Array<{
|
|
58
|
+
name: string;
|
|
59
|
+
score: number;
|
|
60
|
+
}>;
|
|
61
|
+
workflow_rec: {
|
|
62
|
+
recommended_agent_type: string;
|
|
63
|
+
recommended_workflow: string;
|
|
64
|
+
rec_outcome: string | null;
|
|
65
|
+
} | null;
|
|
66
|
+
} | null;
|
|
67
|
+
spec: {
|
|
68
|
+
spec_path: string;
|
|
69
|
+
token: string;
|
|
70
|
+
status: string;
|
|
71
|
+
} | null;
|
|
72
|
+
exec: {
|
|
73
|
+
spawned_agent: string | null;
|
|
74
|
+
first_tool: string | null;
|
|
75
|
+
intercept_decision: 'allow' | 'deny' | 'warn' | 'bypass' | 'dry_run';
|
|
76
|
+
intercept_outcome: string | null;
|
|
77
|
+
routing_obeyed: number | null;
|
|
78
|
+
} | null;
|
|
79
|
+
status_dots: [DotStatus, DotStatus, DotStatus, DotStatus, DotStatus];
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* 4-state status dot computation.
|
|
83
|
+
*
|
|
84
|
+
* The semantics distinguish "no data because nothing should have run" from
|
|
85
|
+
* "no data because something should have run but didn't" — important when
|
|
86
|
+
* the user is diagnosing whether a step is broken vs not applicable.
|
|
87
|
+
*
|
|
88
|
+
* @internal exported for testing.
|
|
89
|
+
*/
|
|
90
|
+
export declare function computeDots(row: {
|
|
91
|
+
intent: PipelineRow['intent'];
|
|
92
|
+
kb: PipelineRow['kb'];
|
|
93
|
+
spec: PipelineRow['spec'];
|
|
94
|
+
exec: PipelineRow['exec'];
|
|
95
|
+
}): PipelineRow['status_dots'];
|
|
96
|
+
export interface QueryPipelineRowsOpts {
|
|
97
|
+
/** How many recent prompts to return. Clamped 1..200. */
|
|
98
|
+
limit: number;
|
|
99
|
+
/** Optional project filter (exact match against events.project_path). */
|
|
100
|
+
projectPath?: string;
|
|
101
|
+
/**
|
|
102
|
+
* Single-prompt mode (DetailDrawer `?event_id=<id>`). When set, the rollup
|
|
103
|
+
* returns AT MOST one row — the pipeline link for exactly this prompt's
|
|
104
|
+
* UserPromptSubmit event — bypassing the `limit`/`projectPath` recent-N
|
|
105
|
+
* window. This is required because the drawer can open an arbitrarily-old
|
|
106
|
+
* prompt that would otherwise fall outside the default limit=50 set and
|
|
107
|
+
* silently 404 / come back empty. Returns `[]` when the id is unknown or the
|
|
108
|
+
* event is not a UserPromptSubmit.
|
|
109
|
+
*/
|
|
110
|
+
eventId?: string;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Build the pipeline view: most-recent-N UserPromptSubmit events joined
|
|
114
|
+
* in-memory with the 5 downstream signal streams.
|
|
115
|
+
*/
|
|
116
|
+
export declare function queryPipelineRows(storage: SQLiteStorage, opts: QueryPipelineRowsOpts): PipelineRow[];
|
|
117
|
+
//# sourceMappingURL=pipeline-rollup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-rollup.d.ts","sourceRoot":"","sources":["../../../src/core/storage/pipeline-rollup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAcjD,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AAE9D,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;;;;OAQG;IACH,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IAErB,MAAM,EAAE;QACN,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,QAAQ,EAAE,OAAO,CAAC;QAClB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;KAC/B,GAAG,IAAI,CAAC;IAET,EAAE,EAAE;QACF,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC9C,YAAY,EAAE;YACZ,sBAAsB,EAAE,MAAM,CAAC;YAC/B,oBAAoB,EAAE,MAAM,CAAC;YAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;SAC5B,GAAG,IAAI,CAAC;KACV,GAAG,IAAI,CAAC;IAET,IAAI,EAAE;QACJ,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,IAAI,CAAC;IAET,IAAI,EAAE;QACJ,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,kBAAkB,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;QACrE,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;KAC/B,GAAG,IAAI,CAAC;IAET,WAAW,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;CACtE;AA2MD;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE;IAC/B,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC9B,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC3B,GAAG,WAAW,CAAC,aAAa,CAAC,CAkF7B;AAED,MAAM,WAAW,qBAAqB;IACpC,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAKD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,qBAAqB,GAC1B,WAAW,EAAE,CAmFf"}
|