@winspan/claude-forge 8.54.4 → 9.12.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 +723 -46
- package/README.md +166 -21
- package/dist/catalogs/agents.json +67 -0
- package/dist/catalogs/skills.json +306 -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/agent.d.ts +169 -0
- package/dist/cli/commands/agent.d.ts.map +1 -0
- package/dist/cli/commands/agent.js +690 -0
- package/dist/cli/commands/agent.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/codegraph.d.ts +17 -0
- package/dist/cli/commands/codegraph.d.ts.map +1 -0
- package/dist/cli/commands/codegraph.js +263 -0
- package/dist/cli/commands/codegraph.js.map +1 -0
- 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 +706 -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 +12 -2
- 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 +54 -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 +117 -0
- package/dist/cli/commands/knowledge.d.ts.map +1 -0
- package/dist/cli/commands/knowledge.js +1070 -0
- package/dist/cli/commands/knowledge.js.map +1 -0
- package/dist/cli/commands/loop.d.ts +95 -0
- package/dist/cli/commands/loop.d.ts.map +1 -0
- package/dist/cli/commands/loop.js +408 -0
- package/dist/cli/commands/loop.js.map +1 -0
- package/dist/cli/commands/maintenance.d.ts +33 -0
- package/dist/cli/commands/maintenance.d.ts.map +1 -0
- package/dist/cli/commands/maintenance.js +75 -0
- package/dist/cli/commands/maintenance.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +22 -11
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +93 -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 +131 -0
- package/dist/cli/commands/skills.d.ts.map +1 -1
- package/dist/cli/commands/skills.js +404 -118
- 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 +11 -3
- 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 +34 -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 +51 -13
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +63 -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 +766 -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 +83 -0
- package/dist/core/diagnostics/entropy-checks.d.ts.map +1 -0
- package/dist/core/diagnostics/entropy-checks.js +400 -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/heartbeat-reader.d.ts +28 -0
- package/dist/core/diagnostics/heartbeat-reader.d.ts.map +1 -0
- package/dist/core/diagnostics/heartbeat-reader.js +50 -0
- package/dist/core/diagnostics/heartbeat-reader.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/event-fields.d.ts +27 -0
- package/dist/core/event-fields.d.ts.map +1 -1
- package/dist/core/event-fields.js +43 -0
- package/dist/core/event-fields.js.map +1 -1
- package/dist/core/governance/global-inject.d.ts +90 -0
- package/dist/core/governance/global-inject.d.ts.map +1 -0
- package/dist/core/governance/global-inject.js +184 -0
- package/dist/core/governance/global-inject.js.map +1 -0
- package/dist/core/insights/agent-anchor-guard.d.ts +77 -0
- package/dist/core/insights/agent-anchor-guard.d.ts.map +1 -0
- package/dist/core/insights/agent-anchor-guard.js +119 -0
- package/dist/core/insights/agent-anchor-guard.js.map +1 -0
- package/dist/core/insights/agent-distill-context.d.ts +55 -0
- package/dist/core/insights/agent-distill-context.d.ts.map +1 -0
- package/dist/core/insights/agent-distill-context.js +146 -0
- package/dist/core/insights/agent-distill-context.js.map +1 -0
- package/dist/core/insights/agent-distill-spawn.d.ts +56 -0
- package/dist/core/insights/agent-distill-spawn.d.ts.map +1 -0
- package/dist/core/insights/agent-distill-spawn.js +179 -0
- package/dist/core/insights/agent-distill-spawn.js.map +1 -0
- package/dist/core/insights/agent-drift.d.ts +66 -0
- package/dist/core/insights/agent-drift.d.ts.map +1 -0
- package/dist/core/insights/agent-drift.js +109 -0
- package/dist/core/insights/agent-drift.js.map +1 -0
- package/dist/core/insights/agent-evolution-sources.d.ts +21 -0
- package/dist/core/insights/agent-evolution-sources.d.ts.map +1 -0
- package/dist/core/insights/agent-evolution-sources.js +36 -0
- package/dist/core/insights/agent-evolution-sources.js.map +1 -0
- package/dist/core/insights/agent-health.d.ts +142 -0
- package/dist/core/insights/agent-health.d.ts.map +1 -0
- package/dist/core/insights/agent-health.js +296 -0
- package/dist/core/insights/agent-health.js.map +1 -0
- package/dist/core/insights/agent-patch-apply.d.ts +45 -0
- package/dist/core/insights/agent-patch-apply.d.ts.map +1 -0
- package/dist/core/insights/agent-patch-apply.js +165 -0
- package/dist/core/insights/agent-patch-apply.js.map +1 -0
- package/dist/core/insights/agent-suggest.d.ts +128 -0
- package/dist/core/insights/agent-suggest.d.ts.map +1 -0
- package/dist/core/insights/agent-suggest.js +284 -0
- package/dist/core/insights/agent-suggest.js.map +1 -0
- package/dist/core/insights/coverage-tiers.d.ts +46 -0
- package/dist/core/insights/coverage-tiers.d.ts.map +1 -0
- package/dist/core/insights/coverage-tiers.js +95 -0
- package/dist/core/insights/coverage-tiers.js.map +1 -0
- package/dist/core/insights/experience-extractor.d.ts +60 -0
- package/dist/core/insights/experience-extractor.d.ts.map +1 -0
- package/dist/core/insights/experience-extractor.js +319 -0
- package/dist/core/insights/experience-extractor.js.map +1 -0
- package/dist/core/insights/violation-reporter.d.ts +149 -0
- package/dist/core/insights/violation-reporter.d.ts.map +1 -0
- package/dist/core/insights/violation-reporter.js +391 -0
- package/dist/core/insights/violation-reporter.js.map +1 -0
- package/dist/core/loop/loop-engine.d.ts +140 -0
- package/dist/core/loop/loop-engine.d.ts.map +1 -0
- package/dist/core/loop/loop-engine.js +266 -0
- package/dist/core/loop/loop-engine.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 +16 -4
- package/dist/core/queue/index.js.map +1 -1
- package/dist/core/storage/base.d.ts +317 -0
- package/dist/core/storage/base.d.ts.map +1 -1
- package/dist/core/storage/base.js +1093 -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/codegraph-types.d.ts +79 -0
- package/dist/core/storage/codegraph-types.d.ts.map +1 -0
- package/dist/core/storage/codegraph-types.js +14 -0
- package/dist/core/storage/codegraph-types.js.map +1 -0
- package/dist/core/storage/codegraph.d.ts +186 -0
- package/dist/core/storage/codegraph.d.ts.map +1 -0
- package/dist/core/storage/codegraph.js +452 -0
- package/dist/core/storage/codegraph.js.map +1 -0
- package/dist/core/storage/decisions.d.ts +387 -0
- package/dist/core/storage/decisions.d.ts.map +1 -0
- package/dist/core/storage/decisions.js +534 -0
- package/dist/core/storage/decisions.js.map +1 -0
- package/dist/core/storage/events.d.ts +239 -8
- package/dist/core/storage/events.d.ts.map +1 -1
- package/dist/core/storage/events.js +705 -39
- package/dist/core/storage/events.js.map +1 -1
- package/dist/core/storage/feedback.d.ts +111 -0
- package/dist/core/storage/feedback.d.ts.map +1 -0
- package/dist/core/storage/feedback.js +186 -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 +68 -0
- package/dist/core/storage/injections.d.ts.map +1 -1
- package/dist/core/storage/injections.js +131 -5
- package/dist/core/storage/injections.js.map +1 -1
- package/dist/core/storage/knowledge.d.ts +332 -0
- package/dist/core/storage/knowledge.d.ts.map +1 -0
- package/dist/core/storage/knowledge.js +589 -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 +111 -0
- package/dist/core/storage/pipeline-rollup.d.ts.map +1 -0
- package/dist/core/storage/pipeline-rollup.js +432 -0
- package/dist/core/storage/pipeline-rollup.js.map +1 -0
- package/dist/core/storage/routing.d.ts +50 -3
- package/dist/core/storage/routing.d.ts.map +1 -1
- package/dist/core/storage/routing.js +131 -10
- package/dist/core/storage/routing.js.map +1 -1
- package/dist/core/storage/rows.d.ts +31 -8
- package/dist/core/storage/rows.d.ts.map +1 -1
- package/dist/core/storage/schema.sql +367 -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 +352 -15
- package/dist/core/storage/sessions.js.map +1 -1
- package/dist/core/storage/skills.d.ts +160 -0
- package/dist/core/storage/skills.d.ts.map +1 -1
- package/dist/core/storage/skills.js +368 -7
- package/dist/core/storage/skills.js.map +1 -1
- package/dist/core/storage/sqlite.d.ts +309 -20
- package/dist/core/storage/sqlite.d.ts.map +1 -1
- package/dist/core/storage/sqlite.js +523 -16
- package/dist/core/storage/sqlite.js.map +1 -1
- package/dist/core/storage/tasks.d.ts +744 -2
- package/dist/core/storage/tasks.d.ts.map +1 -1
- package/dist/core/storage/tasks.js +1691 -17
- 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/types.d.ts +136 -18
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +10 -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 +124 -0
- package/dist/core/utils/binary-paths.d.ts.map +1 -0
- package/dist/core/utils/binary-paths.js +218 -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-resolver.d.ts +26 -0
- package/dist/core/utils/claude-cli-resolver.d.ts.map +1 -0
- package/dist/core/utils/claude-cli-resolver.js +115 -0
- package/dist/core/utils/claude-cli-resolver.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 +67 -0
- package/dist/core/utils/time.d.ts.map +1 -1
- package/dist/core/utils/time.js +147 -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 +146 -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 +54 -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 +66 -4
- package/dist/daemon/handlers/post-tool-use.d.ts.map +1 -1
- package/dist/daemon/handlers/post-tool-use.js +221 -8
- package/dist/daemon/handlers/post-tool-use.js.map +1 -1
- package/dist/daemon/handlers/pre-tool-use.d.ts +181 -0
- package/dist/daemon/handlers/pre-tool-use.d.ts.map +1 -0
- package/dist/daemon/handlers/pre-tool-use.js +618 -0
- package/dist/daemon/handlers/pre-tool-use.js.map +1 -0
- package/dist/daemon/handlers/stop.d.ts +55 -7
- package/dist/daemon/handlers/stop.d.ts.map +1 -1
- package/dist/daemon/handlers/stop.js +245 -8
- package/dist/daemon/handlers/stop.js.map +1 -1
- package/dist/daemon/handlers/user-prompt.d.ts +51 -14
- package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
- package/dist/daemon/handlers/user-prompt.js +223 -95
- package/dist/daemon/handlers/user-prompt.js.map +1 -1
- package/dist/daemon/handlers/violation-content-backfill.d.ts +76 -0
- package/dist/daemon/handlers/violation-content-backfill.d.ts.map +1 -0
- package/dist/daemon/handlers/violation-content-backfill.js +167 -0
- package/dist/daemon/handlers/violation-content-backfill.js.map +1 -0
- 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 +19 -0
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +439 -86
- 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 +779 -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 +176 -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/codegraph-sync.d.ts +94 -0
- package/dist/daemon/services/codegraph-sync.d.ts.map +1 -0
- package/dist/daemon/services/codegraph-sync.js +159 -0
- package/dist/daemon/services/codegraph-sync.js.map +1 -0
- 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 +240 -0
- package/dist/daemon/services/decision-hint.d.ts.map +1 -0
- package/dist/daemon/services/decision-hint.js +562 -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 +124 -0
- package/dist/daemon/services/event-ttl-sweep.js.map +1 -0
- package/dist/daemon/services/feedback-aggregator.d.ts +167 -0
- package/dist/daemon/services/feedback-aggregator.d.ts.map +1 -0
- package/dist/daemon/services/feedback-aggregator.js +415 -0
- package/dist/daemon/services/feedback-aggregator.js.map +1 -0
- package/dist/daemon/services/heartbeat-writer.d.ts +46 -0
- package/dist/daemon/services/heartbeat-writer.d.ts.map +1 -0
- package/dist/daemon/services/heartbeat-writer.js +82 -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 +148 -0
- package/dist/daemon/services/kb-injector.js.map +1 -0
- package/dist/daemon/services/kb-rebuild-scheduler.d.ts +95 -0
- package/dist/daemon/services/kb-rebuild-scheduler.d.ts.map +1 -0
- package/dist/daemon/services/kb-rebuild-scheduler.js +149 -0
- package/dist/daemon/services/kb-rebuild-scheduler.js.map +1 -0
- package/dist/daemon/services/loop-hint.d.ts +139 -0
- package/dist/daemon/services/loop-hint.d.ts.map +1 -0
- package/dist/daemon/services/loop-hint.js +272 -0
- package/dist/daemon/services/loop-hint.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 +230 -1
- package/dist/daemon/services/task-segmenter.d.ts.map +1 -1
- package/dist/daemon/services/task-segmenter.js +527 -17
- package/dist/daemon/services/task-segmenter.js.map +1 -1
- 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/startup/maintenance-schedulers.d.ts +68 -0
- package/dist/daemon/startup/maintenance-schedulers.d.ts.map +1 -0
- package/dist/daemon/startup/maintenance-schedulers.js +294 -0
- package/dist/daemon/startup/maintenance-schedulers.js.map +1 -0
- package/dist/daemon/templates/agents/agent-retro-distiller.md +106 -0
- package/dist/daemon/templates/agents/claudemd-writer.md +102 -0
- package/dist/daemon/templates/agents/coder.md +262 -0
- package/dist/daemon/templates/agents/decision-maker.md +546 -0
- package/dist/daemon/templates/agents/doc-reviewer.md +118 -0
- package/dist/daemon/templates/agents/harness-debug-full.md +196 -0
- package/dist/daemon/templates/agents/knowledge-builder.md +120 -0
- package/dist/daemon/templates/agents/patch-applier.md +145 -0
- package/dist/daemon/templates/agents/planner.md +217 -0
- package/dist/daemon/templates/agents/safety-net-implementer.md +278 -0
- package/dist/daemon/templates/agents/skill-distiller.md +114 -0
- package/dist/daemon/templates/agents/task-boundary-classifier.md +65 -0
- package/dist/daemon/templates/agents/verify-agent.md +259 -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 +31 -11
- 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 +966 -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 +78 -0
- package/dist/knowledge/constants.d.ts.map +1 -0
- package/dist/knowledge/constants.js +98 -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/graph/edge-extractor.d.ts +45 -0
- package/dist/knowledge/graph/edge-extractor.d.ts.map +1 -0
- package/dist/knowledge/graph/edge-extractor.js +242 -0
- package/dist/knowledge/graph/edge-extractor.js.map +1 -0
- package/dist/knowledge/graph/impact.d.ts +73 -0
- package/dist/knowledge/graph/impact.d.ts.map +1 -0
- package/dist/knowledge/graph/impact.js +94 -0
- package/dist/knowledge/graph/impact.js.map +1 -0
- package/dist/knowledge/graph/types.d.ts +22 -0
- package/dist/knowledge/graph/types.d.ts.map +1 -0
- package/dist/knowledge/graph/types.js +13 -0
- package/dist/knowledge/graph/types.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 +237 -0
- package/dist/knowledge/prompt.d.ts.map +1 -0
- package/dist/knowledge/prompt.js +416 -0
- package/dist/knowledge/prompt.js.map +1 -0
- package/dist/knowledge/query.d.ts +118 -0
- package/dist/knowledge/query.d.ts.map +1 -0
- package/dist/knowledge/query.js +438 -0
- package/dist/knowledge/query.js.map +1 -0
- package/dist/knowledge/repo-map.d.ts +97 -0
- package/dist/knowledge/repo-map.d.ts.map +1 -0
- package/dist/knowledge/repo-map.js +447 -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 +355 -0
- package/dist/knowledge/validator.js.map +1 -0
- package/dist/mcp/server.d.ts +64 -8
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +448 -12
- 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/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 +495 -0
- package/dist/skills/distilled/distilled-architecture-decision.md +173 -0
- package/dist/skills/distilled/distilled-brainstorming.md +79 -0
- package/dist/skills/distilled/distilled-brand-guidelines.md +86 -0
- package/dist/skills/distilled/distilled-canvas-design.md +128 -0
- package/dist/skills/distilled/distilled-claude-api.md +185 -0
- package/dist/skills/distilled/distilled-creator.md +181 -0
- package/dist/skills/distilled/distilled-db-schema-design.md +245 -0
- package/dist/skills/distilled/distilled-dispatching-parallel-agents.md +136 -0
- package/dist/skills/distilled/distilled-doc-coauthoring.md +144 -0
- package/dist/skills/distilled/distilled-docx.md +231 -0
- package/dist/skills/distilled/distilled-executing-plans.md +148 -0
- package/dist/skills/distilled/distilled-finishing-a-development-branch.md +213 -0
- package/dist/skills/distilled/distilled-frontend-design.md +118 -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-receiving-code-review.md +185 -0
- package/dist/skills/distilled/distilled-spec-driven-design.md +193 -0
- package/dist/skills/distilled/distilled-subagent-driven-development.md +124 -0
- package/dist/skills/distilled/distilled-systematic-debugging.md +154 -0
- package/dist/skills/distilled/distilled-test-driven-development.md +432 -0
- package/dist/skills/distilled/distilled-using-superpowers.md +134 -0
- package/dist/skills/distilled/distilled-verification-before-completion.md +213 -0
- package/dist/skills/distilled/distilled-writing-skills.md +175 -0
- package/dist/skills/registry.d.ts +55 -51
- package/dist/skills/registry.d.ts.map +1 -1
- package/dist/skills/registry.js +82 -196
- package/dist/skills/registry.js.map +1 -1
- package/dist/skills/tools/pipeline-suggest.js +14 -14
- package/dist/skills/tools/pipeline-suggest.js.map +1 -1
- package/dist/skills/tools/skill-invoke.d.ts +3 -2
- package/dist/skills/tools/skill-invoke.d.ts.map +1 -1
- package/dist/skills/tools/skill-invoke.js +4 -2
- package/dist/skills/tools/skill-invoke.js.map +1 -1
- package/dist/web/analytics/anti-pattern-detector.d.ts.map +1 -1
- package/dist/web/analytics/anti-pattern-detector.js +6 -1
- package/dist/web/analytics/anti-pattern-detector.js.map +1 -1
- package/dist/web/analytics/drift-detector.d.ts +6 -0
- package/dist/web/analytics/drift-detector.d.ts.map +1 -1
- package/dist/web/analytics/drift-detector.js +15 -8
- package/dist/web/analytics/drift-detector.js.map +1 -1
- package/dist/web/analytics/weekly-report.d.ts +13 -0
- package/dist/web/analytics/weekly-report.d.ts.map +1 -1
- package/dist/web/analytics/weekly-report.js +17 -3
- package/dist/web/analytics/weekly-report.js.map +1 -1
- package/dist/web/routes/_helpers.d.ts +31 -0
- package/dist/web/routes/_helpers.d.ts.map +1 -1
- package/dist/web/routes/_helpers.js +33 -0
- package/dist/web/routes/_helpers.js.map +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/agent-distill.d.ts +49 -0
- package/dist/web/routes/agent-distill.d.ts.map +1 -0
- package/dist/web/routes/agent-distill.js +526 -0
- package/dist/web/routes/agent-distill.js.map +1 -0
- package/dist/web/routes/config.d.ts +56 -0
- package/dist/web/routes/config.d.ts.map +1 -0
- package/dist/web/routes/config.js +243 -0
- package/dist/web/routes/config.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/error-handler.d.ts +0 -4
- package/dist/web/routes/error-handler.d.ts.map +1 -1
- package/dist/web/routes/error-handler.js +0 -8
- package/dist/web/routes/error-handler.js.map +1 -1
- package/dist/web/routes/events.d.ts.map +1 -1
- package/dist/web/routes/events.js +26 -1
- 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 +0 -0
- package/dist/web/routes/insights.js.map +1 -1
- package/dist/web/routes/knowledge.d.ts +57 -0
- package/dist/web/routes/knowledge.d.ts.map +1 -0
- package/dist/web/routes/knowledge.js +772 -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 +28 -0
- package/dist/web/routes/pipeline.d.ts.map +1 -0
- package/dist/web/routes/pipeline.js +145 -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 +26 -7
- 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 +17 -8
- 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/skill-stats.d.ts.map +1 -1
- package/dist/web/routes/skill-stats.js +153 -16
- package/dist/web/routes/skill-stats.js.map +1 -1
- 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/stats.d.ts.map +1 -1
- package/dist/web/routes/stats.js +2 -1
- package/dist/web/routes/stats.js.map +1 -1
- package/dist/web/routes/task-timeline.d.ts +178 -0
- package/dist/web/routes/task-timeline.d.ts.map +1 -0
- package/dist/web/routes/task-timeline.js +530 -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 +377 -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 +112 -0
- package/dist/web/routes/violations.js.map +1 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +99 -19
- package/dist/web/server.js.map +1 -1
- package/dist/web/services/agent-distill-manager.d.ts +122 -0
- package/dist/web/services/agent-distill-manager.d.ts.map +1 -0
- package/dist/web/services/agent-distill-manager.js +397 -0
- package/dist/web/services/agent-distill-manager.js.map +1 -0
- 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 +172 -0
- package/dist/web/services/distill-manager.d.ts.map +1 -0
- package/dist/web/services/distill-manager.js +411 -0
- package/dist/web/services/distill-manager.js.map +1 -0
- package/dist/web/static/assets/AgentDetailPage-DlUeA1sX.js +2 -0
- package/dist/web/static/assets/AgentDetailPage-DlUeA1sX.js.map +1 -0
- package/dist/web/static/assets/AgentDistillRunPage-Cybo4bii.js +3 -0
- package/dist/web/static/assets/AgentDistillRunPage-Cybo4bii.js.map +1 -0
- package/dist/web/static/assets/AgentsPage-Qd9FExLG.js +2 -0
- package/dist/web/static/assets/AgentsPage-Qd9FExLG.js.map +1 -0
- package/dist/web/static/assets/DaemonHealthPage-DTSVqtrI.js +2 -0
- package/dist/web/static/assets/DaemonHealthPage-DTSVqtrI.js.map +1 -0
- package/dist/web/static/assets/DecisionDetailPage-b4BA8dhc.js +2 -0
- package/dist/web/static/assets/DecisionDetailPage-b4BA8dhc.js.map +1 -0
- package/dist/web/static/assets/DecisionsPage-a3NRo_T7.js +2 -0
- package/dist/web/static/assets/DecisionsPage-a3NRo_T7.js.map +1 -0
- package/dist/web/static/assets/DiagnosticsPage-DIVdiIQG.js +2 -0
- package/dist/web/static/assets/DiagnosticsPage-DIVdiIQG.js.map +1 -0
- package/dist/web/static/assets/DistillDetailPage-U6a3l2iP.js +4 -0
- package/dist/web/static/assets/DistillDetailPage-U6a3l2iP.js.map +1 -0
- package/dist/web/static/assets/DistillPage-O7BHtRN8.js +2 -0
- package/dist/web/static/assets/DistillPage-O7BHtRN8.js.map +1 -0
- package/dist/web/static/assets/DistillRunPage-D1JuRWWr.js +2 -0
- package/dist/web/static/assets/DistillRunPage-D1JuRWWr.js.map +1 -0
- package/dist/web/static/assets/GlobalScopeHint-Q3wTJx3F.js +2 -0
- package/dist/web/static/assets/GlobalScopeHint-Q3wTJx3F.js.map +1 -0
- package/dist/web/static/assets/IssueDetailPage-BDfrtk2C.js +2 -0
- package/dist/web/static/assets/IssueDetailPage-BDfrtk2C.js.map +1 -0
- package/dist/web/static/assets/IssuesPage-SKmhlCrw.js +2 -0
- package/dist/web/static/assets/IssuesPage-SKmhlCrw.js.map +1 -0
- package/dist/web/static/assets/KbDetailPage-Yna86Na8.js +2 -0
- package/dist/web/static/assets/KbDetailPage-Yna86Na8.js.map +1 -0
- package/dist/web/static/assets/KbHitsPage-Cljl7H9p.js +2 -0
- package/dist/web/static/assets/KbHitsPage-Cljl7H9p.js.map +1 -0
- package/dist/web/static/assets/MarkdownRenderer-DlDQNihj.js +3 -0
- package/dist/web/static/assets/MarkdownRenderer-DlDQNihj.js.map +1 -0
- package/dist/web/static/assets/NotFound-LMzbP51V.js +2 -0
- package/dist/web/static/assets/NotFound-LMzbP51V.js.map +1 -0
- package/dist/web/static/assets/SettingsPage-DzoK4PKg.js +2 -0
- package/dist/web/static/assets/SettingsPage-DzoK4PKg.js.map +1 -0
- package/dist/web/static/assets/SkillDetailPage-BuBJJ_NX.js +2 -0
- package/dist/web/static/assets/SkillDetailPage-BuBJJ_NX.js.map +1 -0
- package/dist/web/static/assets/SkillsPage-aojkJpBc.js +2 -0
- package/dist/web/static/assets/SkillsPage-aojkJpBc.js.map +1 -0
- package/dist/web/static/assets/TaskDetailPage-1ckxnGhw.js +4 -0
- package/dist/web/static/assets/TaskDetailPage-1ckxnGhw.js.map +1 -0
- package/dist/web/static/assets/TasksHubPage-C2PLh3eg.js +6 -0
- package/dist/web/static/assets/TasksHubPage-C2PLh3eg.js.map +1 -0
- package/dist/web/static/assets/WorkplacePage-DHrp5VxS.js +2 -0
- package/dist/web/static/assets/WorkplacePage-DHrp5VxS.js.map +1 -0
- package/dist/web/static/assets/arco-DFQA6dO_.css +1 -0
- package/dist/web/static/assets/arco-DV6xCLhr.js +14 -0
- package/dist/web/static/assets/arco-DV6xCLhr.js.map +1 -0
- package/dist/web/static/assets/charts-BSV4cyC4.js +37 -0
- package/dist/web/static/assets/charts-BSV4cyC4.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-B_v_MKlb.css +1 -0
- package/dist/web/static/assets/index-DileOOE4.js +4 -0
- package/dist/web/static/assets/index-DileOOE4.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/markdown-CA7ePUts.js +30 -0
- package/dist/web/static/assets/markdown-CA7ePUts.js.map +1 -0
- package/dist/web/static/assets/outcome-BKGy9azt.js +2 -0
- package/dist/web/static/assets/outcome-BKGy9azt.js.map +1 -0
- package/dist/web/static/assets/query-CgCOpYWf.js +2 -0
- package/dist/web/static/assets/{query-C99w429o.js.map → query-CgCOpYWf.js.map} +1 -1
- package/dist/web/static/assets/{react-router-r79dBVy4.js → react-router-Cxmg8RuL.js} +3 -3
- package/dist/web/static/assets/{react-router-r79dBVy4.js.map → react-router-Cxmg8RuL.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-BDYycNja.js +6 -0
- package/dist/web/static/assets/syntax-highlighter-BDYycNja.js.map +1 -0
- package/dist/web/static/assets/useAgentStats-B-uTgqBd.js +2 -0
- package/dist/web/static/assets/useAgentStats-B-uTgqBd.js.map +1 -0
- package/dist/web/static/assets/useDecisions-D-G2Ft5T.js +2 -0
- package/dist/web/static/assets/useDecisions-D-G2Ft5T.js.map +1 -0
- package/dist/web/static/assets/useDistill-21dZkXlT.js +3 -0
- package/dist/web/static/assets/useDistill-21dZkXlT.js.map +1 -0
- package/dist/web/static/assets/useEffectiveProject-DQiyX54y.js +2 -0
- package/dist/web/static/assets/useEffectiveProject-DQiyX54y.js.map +1 -0
- package/dist/web/static/assets/useIssuesFeed-CFiyQkAL.js +2 -0
- package/dist/web/static/assets/useIssuesFeed-CFiyQkAL.js.map +1 -0
- package/dist/web/static/assets/useKbHits-xKXWgqh9.js +2 -0
- package/dist/web/static/assets/useKbHits-xKXWgqh9.js.map +1 -0
- package/dist/web/static/assets/useSkillStats-B5hbIwdf.js +2 -0
- package/dist/web/static/assets/useSkillStats-B5hbIwdf.js.map +1 -0
- package/dist/web/static/assets/vendor-DS-q4Eyc.js +36 -0
- package/dist/web/static/assets/vendor-DS-q4Eyc.js.map +1 -0
- package/dist/web/static/index.html +12 -8
- package/package.json +18 -5
- 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/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 @@
|
|
|
1
|
+
{"version":3,"file":"intercept-rollback-guard.js","sourceRoot":"","sources":["../../../src/daemon/services/intercept-rollback-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* InterceptTimeoutSweeper — Karpathy #4 C4 hotfix (2026-05-26).
|
|
3
|
+
*
|
|
4
|
+
* Why this exists:
|
|
5
|
+
* PostToolUseHandler.maybeMarkInterceptOutcome only fires when ANOTHER tool
|
|
6
|
+
* call lands within 30s of an intercept; it classifies the prior deny /
|
|
7
|
+
* dry_run row as `obeyed` (different tool) or `override` (same tool re-run).
|
|
8
|
+
* When the main thread instead STOPS — stops to ask the user, switches
|
|
9
|
+
* plans, or just sits idle — no PostToolUse ever fires, and the
|
|
10
|
+
* `tool_intercepts.outcome` column stays NULL forever. Live triage on a 7d
|
|
11
|
+
* window found 1088 such NULL rows (1083 dry_run + 5 deny), draining the
|
|
12
|
+
* C4 numerator to 0.01.
|
|
13
|
+
*
|
|
14
|
+
* Semantic interpretation:
|
|
15
|
+
* "Main thread saw the hint and chose not to run any further tool inside
|
|
16
|
+
* the classification window" === passive obey. We backfill those rows as
|
|
17
|
+
* `outcome='obeyed'` after a generous 1h grace beyond the 30s window so
|
|
18
|
+
* the active classifier always wins on close-to-the-edge races.
|
|
19
|
+
*
|
|
20
|
+
* Eligibility:
|
|
21
|
+
* • decision IN ('deny', 'dry_run') — `warn` is not a real enforcement
|
|
22
|
+
* signal; `bypass` was already a
|
|
23
|
+
* user opt-out (treated as override
|
|
24
|
+
* intent — but we don't touch it).
|
|
25
|
+
* • outcome IS NULL — the classifier never ran.
|
|
26
|
+
* • timestamp <= now - graceMs — fully out of any active window.
|
|
27
|
+
*
|
|
28
|
+
* The sweep is idempotent (only NULL rows match), cheap (single UPDATE …
|
|
29
|
+
* WHERE … with an index hint on idx_tool_intercepts_ts), and safe to call
|
|
30
|
+
* from any maintenance interval.
|
|
31
|
+
*/
|
|
32
|
+
import type { SQLiteStorage } from '../../core/storage/sqlite.js';
|
|
33
|
+
/**
|
|
34
|
+
* Grace window past the 30s PostToolUse classification before a NULL row is
|
|
35
|
+
* considered abandoned. 1h is generous on purpose — a row sitting NULL for
|
|
36
|
+
* an hour means the main thread either crashed, switched session, or stopped
|
|
37
|
+
* to think and never came back to the same intercept.
|
|
38
|
+
*/
|
|
39
|
+
export declare const INTERCEPT_TIMEOUT_GRACE_MS: number;
|
|
40
|
+
export interface InterceptTimeoutSweepOptions {
|
|
41
|
+
/** Override the grace window; mainly used by tests. */
|
|
42
|
+
graceMs?: number;
|
|
43
|
+
}
|
|
44
|
+
export interface InterceptTimeoutSweepResult {
|
|
45
|
+
/** Rows that matched the eligibility predicate before update. */
|
|
46
|
+
scanned: number;
|
|
47
|
+
/** Rows actually flipped to `outcome='obeyed'`. Equals `scanned` on success. */
|
|
48
|
+
swept: number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Run one sweep. Safe to call from any setInterval / startup hook.
|
|
52
|
+
*
|
|
53
|
+
* Returns counters so callers can decide whether to emit a log line — the
|
|
54
|
+
* daemon's maintenance loop only logs when something actually moved, to keep
|
|
55
|
+
* steady-state output quiet.
|
|
56
|
+
*/
|
|
57
|
+
export declare function sweepInterceptTimeouts(storage: SQLiteStorage, options?: InterceptTimeoutSweepOptions): InterceptTimeoutSweepResult;
|
|
58
|
+
//# sourceMappingURL=intercept-timeout-sweeper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intercept-timeout-sweeper.d.ts","sourceRoot":"","sources":["../../../src/daemon/services/intercept-timeout-sweeper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAGlE;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,QAAiB,CAAC;AAEzD,MAAM,WAAW,4BAA4B;IAC3C,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,2BAA2B;IAC1C,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,4BAAiC,GACzC,2BAA2B,CA0C7B"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* InterceptTimeoutSweeper — Karpathy #4 C4 hotfix (2026-05-26).
|
|
3
|
+
*
|
|
4
|
+
* Why this exists:
|
|
5
|
+
* PostToolUseHandler.maybeMarkInterceptOutcome only fires when ANOTHER tool
|
|
6
|
+
* call lands within 30s of an intercept; it classifies the prior deny /
|
|
7
|
+
* dry_run row as `obeyed` (different tool) or `override` (same tool re-run).
|
|
8
|
+
* When the main thread instead STOPS — stops to ask the user, switches
|
|
9
|
+
* plans, or just sits idle — no PostToolUse ever fires, and the
|
|
10
|
+
* `tool_intercepts.outcome` column stays NULL forever. Live triage on a 7d
|
|
11
|
+
* window found 1088 such NULL rows (1083 dry_run + 5 deny), draining the
|
|
12
|
+
* C4 numerator to 0.01.
|
|
13
|
+
*
|
|
14
|
+
* Semantic interpretation:
|
|
15
|
+
* "Main thread saw the hint and chose not to run any further tool inside
|
|
16
|
+
* the classification window" === passive obey. We backfill those rows as
|
|
17
|
+
* `outcome='obeyed'` after a generous 1h grace beyond the 30s window so
|
|
18
|
+
* the active classifier always wins on close-to-the-edge races.
|
|
19
|
+
*
|
|
20
|
+
* Eligibility:
|
|
21
|
+
* • decision IN ('deny', 'dry_run') — `warn` is not a real enforcement
|
|
22
|
+
* signal; `bypass` was already a
|
|
23
|
+
* user opt-out (treated as override
|
|
24
|
+
* intent — but we don't touch it).
|
|
25
|
+
* • outcome IS NULL — the classifier never ran.
|
|
26
|
+
* • timestamp <= now - graceMs — fully out of any active window.
|
|
27
|
+
*
|
|
28
|
+
* The sweep is idempotent (only NULL rows match), cheap (single UPDATE …
|
|
29
|
+
* WHERE … with an index hint on idx_tool_intercepts_ts), and safe to call
|
|
30
|
+
* from any maintenance interval.
|
|
31
|
+
*/
|
|
32
|
+
import { logger } from '../../core/utils/logger.js';
|
|
33
|
+
/**
|
|
34
|
+
* Grace window past the 30s PostToolUse classification before a NULL row is
|
|
35
|
+
* considered abandoned. 1h is generous on purpose — a row sitting NULL for
|
|
36
|
+
* an hour means the main thread either crashed, switched session, or stopped
|
|
37
|
+
* to think and never came back to the same intercept.
|
|
38
|
+
*/
|
|
39
|
+
export const INTERCEPT_TIMEOUT_GRACE_MS = 60 * 60 * 1000;
|
|
40
|
+
/**
|
|
41
|
+
* Run one sweep. Safe to call from any setInterval / startup hook.
|
|
42
|
+
*
|
|
43
|
+
* Returns counters so callers can decide whether to emit a log line — the
|
|
44
|
+
* daemon's maintenance loop only logs when something actually moved, to keep
|
|
45
|
+
* steady-state output quiet.
|
|
46
|
+
*/
|
|
47
|
+
export function sweepInterceptTimeouts(storage, options = {}) {
|
|
48
|
+
const graceMs = options.graceMs ?? INTERCEPT_TIMEOUT_GRACE_MS;
|
|
49
|
+
const cutoffIso = new Date(Date.now() - graceMs).toISOString();
|
|
50
|
+
try {
|
|
51
|
+
// Single transaction: count + update atomically so the scanned figure
|
|
52
|
+
// matches what we actually flipped.
|
|
53
|
+
const db = storage.getDatabase();
|
|
54
|
+
const scanned = db
|
|
55
|
+
.prepare(`SELECT COUNT(*) AS n FROM tool_intercepts
|
|
56
|
+
WHERE outcome IS NULL
|
|
57
|
+
AND decision IN ('deny','dry_run')
|
|
58
|
+
AND timestamp <= ?`)
|
|
59
|
+
.get(cutoffIso)?.n ?? 0;
|
|
60
|
+
if (scanned === 0) {
|
|
61
|
+
return { scanned: 0, swept: 0 };
|
|
62
|
+
}
|
|
63
|
+
const info = db
|
|
64
|
+
.prepare(`UPDATE tool_intercepts
|
|
65
|
+
SET outcome = 'obeyed'
|
|
66
|
+
WHERE outcome IS NULL
|
|
67
|
+
AND decision IN ('deny','dry_run')
|
|
68
|
+
AND timestamp <= ?`)
|
|
69
|
+
.run(cutoffIso);
|
|
70
|
+
const swept = Number(info.changes ?? 0);
|
|
71
|
+
if (swept > 0) {
|
|
72
|
+
logger.debug(`[InterceptTimeoutSweeper] swept ${swept} NULL-outcome row(s) ` +
|
|
73
|
+
`older than ${graceMs / 60000}min → obeyed (passive obey by silence)`);
|
|
74
|
+
}
|
|
75
|
+
return { scanned, swept };
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
// Sweeps are observability — never a request blocker.
|
|
79
|
+
logger.warn(`[InterceptTimeoutSweeper] sweep failed: ${err}`);
|
|
80
|
+
return { scanned: 0, swept: 0 };
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=intercept-timeout-sweeper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intercept-timeout-sweeper.js","sourceRoot":"","sources":["../../../src/daemon/services/intercept-timeout-sweeper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAczD;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAsB,EACtB,UAAwC,EAAE;IAE1C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,0BAA0B,CAAC;IAC9D,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/D,IAAI,CAAC;QACH,sEAAsE;QACtE,oCAAoC;QACpC,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,OAAO,GAAI,EAAE;aAChB,OAAO,CACN;;;8BAGsB,CACvB;aACA,GAAG,CAAC,SAAS,CAA+B,EAAE,CAAC,IAAI,CAAC,CAAC;QAExD,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAClC,CAAC;QAED,MAAM,IAAI,GAAG,EAAE;aACZ,OAAO,CACN;;;;+BAIuB,CACxB;aACA,GAAG,CAAC,SAAS,CAAC,CAAC;QAClB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QACxC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,MAAM,CAAC,KAAK,CACV,mCAAmC,KAAK,uBAAuB;gBAC/D,cAAc,OAAO,GAAG,KAAK,wCAAwC,CACtE,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,sDAAsD;QACtD,MAAM,CAAC,IAAI,CAAC,2CAA2C,GAAG,EAAE,CAAC,CAAC;QAC9D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAClC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KbInjector — queries the project knowledge base for a prompt and renders
|
|
3
|
+
* the additionalContext block.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from `UserPromptHandler` (D-3 step 3). Single responsibility:
|
|
6
|
+
* 1. Probe `.forge-knowledge/` presence (cheap).
|
|
7
|
+
* 2. Run `queryKnowledge` (augmented with optional intent keywords).
|
|
8
|
+
* 3. Apply score threshold + return `{ block, hits }`.
|
|
9
|
+
*
|
|
10
|
+
* Caching: per-(session_id, prompt[:200]) LRU+TTL to dedupe consecutive
|
|
11
|
+
* Enter re-fires within 5 minutes. Bounded by 500 entries.
|
|
12
|
+
*
|
|
13
|
+
* The cache key includes `session_id` so different sessions never collide,
|
|
14
|
+
* but `kbQueryCache` is intentionally NOT cleared at Stop time — D-1 in the
|
|
15
|
+
* refactor spec resolved this: the 5-min TTL + 500-entry LRU bound is
|
|
16
|
+
* sufficient (worst case ~500KB held briefly), and enumerating session-
|
|
17
|
+
* prefixed keys would require a second index map.
|
|
18
|
+
*/
|
|
19
|
+
import type { UserPromptSubmitEvent } from '../../core/types.js';
|
|
20
|
+
import type { SQLiteStorage } from '../../core/storage/sqlite.js';
|
|
21
|
+
import type { QueryHit } from '../../knowledge/query.js';
|
|
22
|
+
export declare class KbInjector {
|
|
23
|
+
private readonly storage;
|
|
24
|
+
static readonly KB_SCORE_THRESHOLD = 25;
|
|
25
|
+
/** Cap on KB pages injected per prompt to avoid context bloat. */
|
|
26
|
+
static readonly KB_MAX_RESULTS = 2;
|
|
27
|
+
/** Per-page content truncation (chars) — keeps the additionalContext modest. */
|
|
28
|
+
static readonly KB_CONTENT_TRUNCATE = 800;
|
|
29
|
+
/** LRU+TTL cache TTL for de-duping Enter re-fires of the same prompt. */
|
|
30
|
+
static readonly KB_CACHE_TTL_MS: number;
|
|
31
|
+
/** Cache capacity (entries). */
|
|
32
|
+
static readonly KB_CACHE_MAX = 500;
|
|
33
|
+
private kbQueryCache;
|
|
34
|
+
constructor(storage?: SQLiteStorage | null);
|
|
35
|
+
/**
|
|
36
|
+
* Query the KB and (if any qualifying hits) return a formatted block ready
|
|
37
|
+
* to push onto `additionalContext`. Always fail-silent — KB failures must
|
|
38
|
+
* not break the prompt path.
|
|
39
|
+
*
|
|
40
|
+
* Returns `null` block when there are zero qualifying hits.
|
|
41
|
+
*/
|
|
42
|
+
inject(event: UserPromptSubmitEvent, prompt: string, extraKeywords?: string[]): Promise<{
|
|
43
|
+
block: string | null;
|
|
44
|
+
hits: QueryHit[];
|
|
45
|
+
}>;
|
|
46
|
+
/**
|
|
47
|
+
* Query the project knowledge base, returning only hits at or above the
|
|
48
|
+
* MVP1 score threshold. Always fail-silent — KB failures must not break
|
|
49
|
+
* the UserPrompt pipeline (resume / convention / skill remain unaffected).
|
|
50
|
+
*
|
|
51
|
+
* Cache key is `${session_id}:${sha1(prompt[:200])}` with a 5-minute TTL.
|
|
52
|
+
* This dedupes consecutive Enter re-fires of the same prompt without
|
|
53
|
+
* leaking memory across sessions.
|
|
54
|
+
*/
|
|
55
|
+
private queryKbForPrompt;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=kb-injector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kb-injector.d.ts","sourceRoot":"","sources":["../../../src/daemon/services/kb-injector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAIlE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAOzD,qBAAa,UAAU;IA0BT,OAAO,CAAC,QAAQ,CAAC,OAAO;IAdpC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,MAAM;IACxC,kEAAkE;IAClE,MAAM,CAAC,QAAQ,CAAC,cAAc,KAAK;IACnC,gFAAgF;IAChF,MAAM,CAAC,QAAQ,CAAC,mBAAmB,OAAO;IAC1C,yEAAyE;IACzE,MAAM,CAAC,QAAQ,CAAC,eAAe,SAAiB;IAChD,gCAAgC;IAChC,MAAM,CAAC,QAAQ,CAAC,YAAY,OAAO;IAEnC,OAAO,CAAC,YAAY,CAElB;gBAE2B,OAAO,GAAE,aAAa,GAAG,IAAW;IAEjE;;;;;;OAMG;IACG,MAAM,CACV,KAAK,EAAE,qBAAqB,EAC5B,MAAM,EAAE,MAAM,EACd,aAAa,GAAE,MAAM,EAAO,GAC3B,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,EAAE,QAAQ,EAAE,CAAA;KAAE,CAAC;IAYtD;;;;;;;;OAQG;YACW,gBAAgB;CAgD/B"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KbInjector — queries the project knowledge base for a prompt and renders
|
|
3
|
+
* the additionalContext block.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from `UserPromptHandler` (D-3 step 3). Single responsibility:
|
|
6
|
+
* 1. Probe `.forge-knowledge/` presence (cheap).
|
|
7
|
+
* 2. Run `queryKnowledge` (augmented with optional intent keywords).
|
|
8
|
+
* 3. Apply score threshold + return `{ block, hits }`.
|
|
9
|
+
*
|
|
10
|
+
* Caching: per-(session_id, prompt[:200]) LRU+TTL to dedupe consecutive
|
|
11
|
+
* Enter re-fires within 5 minutes. Bounded by 500 entries.
|
|
12
|
+
*
|
|
13
|
+
* The cache key includes `session_id` so different sessions never collide,
|
|
14
|
+
* but `kbQueryCache` is intentionally NOT cleared at Stop time — D-1 in the
|
|
15
|
+
* refactor spec resolved this: the 5-min TTL + 500-entry LRU bound is
|
|
16
|
+
* sufficient (worst case ~500KB held briefly), and enumerating session-
|
|
17
|
+
* prefixed keys would require a second index map.
|
|
18
|
+
*/
|
|
19
|
+
// Namespace import (not named) so test code can `vi.spyOn(knowledgeQuery, ...)`
|
|
20
|
+
// and have the service see the stub — named imports bind eagerly under ESM.
|
|
21
|
+
import * as knowledgeQuery from '../../knowledge/query.js';
|
|
22
|
+
import { LRUCache } from '../../core/utils/lru-cache.js';
|
|
23
|
+
import { createHash } from 'node:crypto';
|
|
24
|
+
import { logger } from '../../core/utils/logger.js';
|
|
25
|
+
import { truncateString } from '../../core/utils/format.js';
|
|
26
|
+
import { wrapInjectBlock } from '../utils/inject-block.js';
|
|
27
|
+
export class KbInjector {
|
|
28
|
+
storage;
|
|
29
|
+
// ── KB injection (MVP1) ──────────────────────────────────────────────────
|
|
30
|
+
// Score threshold below which we don't inject. History:
|
|
31
|
+
// spec §4.1 estimated 30 → too strict (ASCII prompts maxed at ~30)
|
|
32
|
+
// 2026-05-22 calibration → 10 (CJK still dead because tokenize 无分词)
|
|
33
|
+
// 2026-05-22 KPI fix → 5, after CJK n-gram tokenize landed
|
|
34
|
+
// (n-gram tokens lower per-hit score; real CJK technical prompt
|
|
35
|
+
// "如何修复 daemon socket bug" hits modules/daemon.md @ score 7).
|
|
36
|
+
// 2026-06-10 审计(decision 148f7a0a)→ 25 止血:threshold=5 时 28 天注入
|
|
37
|
+
// 277 条、注入后同会话主动 KB MCP 调用仅 3 次(采纳率 ≈0)。回调到 25
|
|
38
|
+
// 只留高置信命中,同时配套 injections.adopted_at 采纳 telemetry 攒 4 周
|
|
39
|
+
// 数据后再定去留。
|
|
40
|
+
static KB_SCORE_THRESHOLD = 25;
|
|
41
|
+
/** Cap on KB pages injected per prompt to avoid context bloat. */
|
|
42
|
+
static KB_MAX_RESULTS = 2;
|
|
43
|
+
/** Per-page content truncation (chars) — keeps the additionalContext modest. */
|
|
44
|
+
static KB_CONTENT_TRUNCATE = 800;
|
|
45
|
+
/** LRU+TTL cache TTL for de-duping Enter re-fires of the same prompt. */
|
|
46
|
+
static KB_CACHE_TTL_MS = 5 * 60 * 1000;
|
|
47
|
+
/** Cache capacity (entries). */
|
|
48
|
+
static KB_CACHE_MAX = 500;
|
|
49
|
+
kbQueryCache = new LRUCache(KbInjector.KB_CACHE_MAX);
|
|
50
|
+
constructor(storage = null) {
|
|
51
|
+
this.storage = storage;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Query the KB and (if any qualifying hits) return a formatted block ready
|
|
55
|
+
* to push onto `additionalContext`. Always fail-silent — KB failures must
|
|
56
|
+
* not break the prompt path.
|
|
57
|
+
*
|
|
58
|
+
* Returns `null` block when there are zero qualifying hits.
|
|
59
|
+
*/
|
|
60
|
+
async inject(event, prompt, extraKeywords = []) {
|
|
61
|
+
const hits = await this.queryKbForPrompt(event.session_id, event.project_path, prompt, extraKeywords);
|
|
62
|
+
if (hits.length === 0)
|
|
63
|
+
return { block: null, hits: [] };
|
|
64
|
+
const block = formatKbBlock(hits, KbInjector.KB_CONTENT_TRUNCATE);
|
|
65
|
+
return { block, hits };
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Query the project knowledge base, returning only hits at or above the
|
|
69
|
+
* MVP1 score threshold. Always fail-silent — KB failures must not break
|
|
70
|
+
* the UserPrompt pipeline (resume / convention / skill remain unaffected).
|
|
71
|
+
*
|
|
72
|
+
* Cache key is `${session_id}:${sha1(prompt[:200])}` with a 5-minute TTL.
|
|
73
|
+
* This dedupes consecutive Enter re-fires of the same prompt without
|
|
74
|
+
* leaking memory across sessions.
|
|
75
|
+
*/
|
|
76
|
+
async queryKbForPrompt(sessionId, projectPath, prompt, extraKeywords) {
|
|
77
|
+
try {
|
|
78
|
+
if (!knowledgeQuery.isKnowledgeBuilt(projectPath))
|
|
79
|
+
return [];
|
|
80
|
+
const cacheKey = makeKbCacheKey(sessionId, prompt);
|
|
81
|
+
const now = Date.now();
|
|
82
|
+
const cached = this.kbQueryCache.get(cacheKey);
|
|
83
|
+
if (cached && cached.expiresAt > now) {
|
|
84
|
+
logger.debug(`[KbInjector] cache hit (${cached.hits.length} hits)`);
|
|
85
|
+
return cached.hits;
|
|
86
|
+
}
|
|
87
|
+
const augmentedQuery = extraKeywords.length > 0
|
|
88
|
+
? `${prompt} ${extraKeywords.join(' ')}`
|
|
89
|
+
: prompt;
|
|
90
|
+
const result = await knowledgeQuery.queryKnowledge(augmentedQuery, {
|
|
91
|
+
projectRoot: projectPath,
|
|
92
|
+
maxResults: KbInjector.KB_MAX_RESULTS,
|
|
93
|
+
// Skip repo-map symbol hits in the inject path: pages already carry
|
|
94
|
+
// file:line refs and symbol noise would just lengthen the prompt.
|
|
95
|
+
includeRepoMap: false,
|
|
96
|
+
storage: this.storage ?? undefined,
|
|
97
|
+
// decision d24cd3a2 Task B: tag automatic per-prompt probes so they are
|
|
98
|
+
// distinguishable from deliberate `cf knowledge query --reason` pulls
|
|
99
|
+
// (source='cli'). agent_id = the session being probed.
|
|
100
|
+
source: 'daemon-probe',
|
|
101
|
+
agentId: sessionId,
|
|
102
|
+
});
|
|
103
|
+
const qualifying = result.pages.filter((h) => h.score >= KbInjector.KB_SCORE_THRESHOLD);
|
|
104
|
+
this.kbQueryCache.set(cacheKey, {
|
|
105
|
+
hits: qualifying,
|
|
106
|
+
expiresAt: now + KbInjector.KB_CACHE_TTL_MS,
|
|
107
|
+
});
|
|
108
|
+
return qualifying;
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
logger.warn(`[KbInjector] KB query failed (silently skipped): ${err}`);
|
|
112
|
+
return [];
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// ── Module-private helpers ──────────────────────────────────────────────────
|
|
117
|
+
/**
|
|
118
|
+
* Build a stable cache key from `sessionId` + the first 200 chars of `prompt`
|
|
119
|
+
* (hashed to keep the key small and avoid logging concerns).
|
|
120
|
+
*/
|
|
121
|
+
function makeKbCacheKey(sessionId, prompt) {
|
|
122
|
+
const hash = createHash('sha1').update(prompt.slice(0, 200)).digest('hex');
|
|
123
|
+
return `${sessionId}:${hash}`;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Render KB query hits into the additionalContext block (spec §4.1).
|
|
127
|
+
* Layout mirrors CLAUDE.md:194-206 — banners, per-page header with score &
|
|
128
|
+
* matched keywords, truncated content, then a "关键文件" list of refs.
|
|
129
|
+
*/
|
|
130
|
+
function formatKbBlock(hits, contentTruncate) {
|
|
131
|
+
const sections = hits.map((hit) => {
|
|
132
|
+
const matched = hit.matched_keywords.slice(0, 5).join(', ');
|
|
133
|
+
const header = `### ${hit.page.name}(score ${hit.score}${matched ? `, matched: ${matched}` : ''})`;
|
|
134
|
+
const body = truncateString(hit.page.content, contentTruncate);
|
|
135
|
+
const refLines = hit.page.refs.slice(0, 4).map((r) => {
|
|
136
|
+
const sym = r.symbol ? ` — ${r.symbol}` : '';
|
|
137
|
+
return `- ${r.file}:${r.lineStart}${sym}`;
|
|
138
|
+
});
|
|
139
|
+
const refs = refLines.length > 0 ? `\n关键文件:\n${refLines.join('\n')}` : '';
|
|
140
|
+
return `${header}\n\n${body}${refs}`;
|
|
141
|
+
});
|
|
142
|
+
return wrapInjectBlock({
|
|
143
|
+
openLine: '━━━ 项目背景(来自 .forge-knowledge/)━━━',
|
|
144
|
+
// Blank lines on both sides preserve the pre-refactor visual padding.
|
|
145
|
+
body: `\n${sections.join('\n\n')}\n`,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=kb-injector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kb-injector.js","sourceRoot":"","sources":["../../../src/daemon/services/kb-injector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,gFAAgF;AAChF,4EAA4E;AAC5E,OAAO,KAAK,cAAc,MAAM,0BAA0B,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,OAAO,UAAU;IA0BQ;IAzB7B,4EAA4E;IAC5E,wDAAwD;IACxD,qEAAqE;IACrE,sEAAsE;IACtE,6DAA6D;IAC7D,oEAAoE;IACpE,mEAAmE;IACnE,iEAAiE;IACjE,mDAAmD;IACnD,4DAA4D;IAC5D,eAAe;IACf,MAAM,CAAU,kBAAkB,GAAG,EAAE,CAAC;IACxC,kEAAkE;IAClE,MAAM,CAAU,cAAc,GAAG,CAAC,CAAC;IACnC,gFAAgF;IAChF,MAAM,CAAU,mBAAmB,GAAG,GAAG,CAAC;IAC1C,yEAAyE;IACzE,MAAM,CAAU,eAAe,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IAChD,gCAAgC;IAChC,MAAM,CAAU,YAAY,GAAG,GAAG,CAAC;IAE3B,YAAY,GAAG,IAAI,QAAQ,CACjC,UAAU,CAAC,YAAY,CACxB,CAAC;IAEF,YAA6B,UAAgC,IAAI;QAApC,YAAO,GAAP,OAAO,CAA6B;IAAG,CAAC;IAErE;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CACV,KAA4B,EAC5B,MAAc,EACd,gBAA0B,EAAE;QAE5B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,gBAAgB,CACtC,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,YAAY,EAClB,MAAM,EACN,aAAa,CACd,CAAC;QACF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QACxD,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,mBAAmB,CAAC,CAAC;QAClE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED;;;;;;;;OAQG;IACK,KAAK,CAAC,gBAAgB,CAC5B,SAAiB,EACjB,WAAmB,EACnB,MAAc,EACd,aAAuB;QAEvB,IAAI,CAAC;YACH,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,WAAW,CAAC;gBAAE,OAAO,EAAE,CAAC;YAE7D,MAAM,QAAQ,GAAG,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACnD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;gBACrC,MAAM,CAAC,KAAK,CAAC,2BAA2B,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,CAAC;gBACpE,OAAO,MAAM,CAAC,IAAI,CAAC;YACrB,CAAC;YAED,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC;gBAC7C,CAAC,CAAC,GAAG,MAAM,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBACxC,CAAC,CAAC,MAAM,CAAC;YAEX,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,cAAc,CAAC,cAAc,EAAE;gBACjE,WAAW,EAAE,WAAW;gBACxB,UAAU,EAAE,UAAU,CAAC,cAAc;gBACrC,oEAAoE;gBACpE,kEAAkE;gBAClE,cAAc,EAAE,KAAK;gBACrB,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,SAAS;gBAClC,wEAAwE;gBACxE,sEAAsE;gBACtE,uDAAuD;gBACvD,MAAM,EAAE,cAAc;gBACtB,OAAO,EAAE,SAAS;aACnB,CAAC,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CACpC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,UAAU,CAAC,kBAAkB,CAChD,CAAC;YAEF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE;gBAC9B,IAAI,EAAE,UAAU;gBAChB,SAAS,EAAE,GAAG,GAAG,UAAU,CAAC,eAAe;aAC5C,CAAC,CAAC;YACH,OAAO,UAAU,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,oDAAoD,GAAG,EAAE,CAAC,CAAC;YACvE,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;;AAGH,+EAA+E;AAE/E;;;GAGG;AACH,SAAS,cAAc,CAAC,SAAiB,EAAE,MAAc;IACvD,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3E,OAAO,GAAG,SAAS,IAAI,IAAI,EAAE,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,IAAgB,EAAE,eAAuB;IAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAChC,MAAM,OAAO,GAAG,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,UAAU,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;QACnG,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACnD,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,OAAO,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,OAAO,GAAG,MAAM,OAAO,IAAI,GAAG,IAAI,EAAE,CAAC;IACvC,CAAC,CAAC,CAAC;IACH,OAAO,eAAe,CAAC;QACrB,QAAQ,EAAE,mCAAmC;QAC7C,sEAAsE;QACtE,IAAI,EAAE,KAAK,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;KACrC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kb-rebuild-scheduler — daemon-side automatic KB index rebuild scheduling.
|
|
3
|
+
*
|
|
4
|
+
* Background (decision e888352d, full-link audit)
|
|
5
|
+
* -----------------------------------------------
|
|
6
|
+
* The full-link audit found the KB index can rot: `kb_build_log`'s last build
|
|
7
|
+
* was 20 days stale, and there was no auto-rebuild trigger — operators had to
|
|
8
|
+
* remember to run `cf knowledge build`. KB retrieval itself is healthy; the gap
|
|
9
|
+
* was a missing *schedule*.
|
|
10
|
+
*
|
|
11
|
+
* Design (minimal, reuse-first)
|
|
12
|
+
* -----------------------------
|
|
13
|
+
* Mirrors the established daemon maintenance pattern (event-ttl-sweep,
|
|
14
|
+
* codegraph-sync): a pure decision function consulted on a `setInterval`
|
|
15
|
+
* cadence under the shared maintenance mutex. No new cron, no fs.watch.
|
|
16
|
+
*
|
|
17
|
+
* Trigger strategy — staleness only (simplest correct signal):
|
|
18
|
+
* - Read the last `kb_build_log` row for the project via `queryLastKbBuild`.
|
|
19
|
+
* - If the last successful build is older than `kb.stale_threshold_days`
|
|
20
|
+
* (default 7), a rebuild is due.
|
|
21
|
+
* - If there is NO build log row at all, a rebuild is due (index never built).
|
|
22
|
+
* - A build currently `running` (per kb_build_log) is NOT re-triggered.
|
|
23
|
+
*
|
|
24
|
+
* The actual build is delegated to the existing `BuildManager` (single-instance
|
|
25
|
+
* concurrency control + kb_build_log telemetry already lives there). The daemon
|
|
26
|
+
* passes `triggerBuild` / `isBuildBusy` callbacks so this service keeps ZERO
|
|
27
|
+
* static edges into `src/web/` (BuildManager lives under web/, lazy-loaded).
|
|
28
|
+
*
|
|
29
|
+
* Fail-silent: every storage / trigger error is caught + logged at warn level.
|
|
30
|
+
* A scheduler hiccup must NEVER crash the daemon or block the maintenance loop.
|
|
31
|
+
*/
|
|
32
|
+
import type { SQLiteStorage } from '../../core/storage/sqlite.js';
|
|
33
|
+
import type { KbBuildLogRow } from '../../core/storage/knowledge.js';
|
|
34
|
+
import type { ConfigStore } from '../config-store.js';
|
|
35
|
+
/** Config key: master on/off switch for auto-rebuild (default ON). */
|
|
36
|
+
export declare const CFG_AUTO_REBUILD_ENABLED = "kb.auto_rebuild_enabled";
|
|
37
|
+
/** Config key: staleness threshold in days before a rebuild is due. */
|
|
38
|
+
export declare const CFG_STALE_THRESHOLD_DAYS = "kb.stale_threshold_days";
|
|
39
|
+
/** Config key: how often the daemon checks for staleness (hours). */
|
|
40
|
+
export declare const CFG_CHECK_INTERVAL_HOURS = "kb.rebuild_check_interval_hours";
|
|
41
|
+
/** Built-in defaults. Conservative — 7d stale, checked every 6h. */
|
|
42
|
+
export declare const DEFAULTS: {
|
|
43
|
+
/** Master switch. Default ON so freshness is automatic out of the box. */
|
|
44
|
+
readonly enabled: true;
|
|
45
|
+
/** Rebuild when the last build is older than this many days. */
|
|
46
|
+
readonly staleThresholdDays: 7;
|
|
47
|
+
/** Cadence at which the daemon evaluates staleness. */
|
|
48
|
+
readonly checkIntervalHours: 6;
|
|
49
|
+
};
|
|
50
|
+
export interface RebuildConfig {
|
|
51
|
+
enabled: boolean;
|
|
52
|
+
staleThresholdDays: number;
|
|
53
|
+
checkIntervalHours: number;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Resolve effective rebuild config from forge_config > defaults. Exported for
|
|
57
|
+
* tests + daemon wiring.
|
|
58
|
+
*/
|
|
59
|
+
export declare function resolveRebuildConfig(configStore: ConfigStore): RebuildConfig;
|
|
60
|
+
export type RebuildDecision = {
|
|
61
|
+
due: true;
|
|
62
|
+
reason: 'never-built' | 'stale';
|
|
63
|
+
} | {
|
|
64
|
+
due: false;
|
|
65
|
+
reason: 'disabled' | 'fresh' | 'in-progress';
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Pure decision: should the KB index be rebuilt now?
|
|
69
|
+
*
|
|
70
|
+
* @param lastBuild the most recent kb_build_log row for the project, or null.
|
|
71
|
+
* @param config resolved rebuild config.
|
|
72
|
+
* @param now current epoch ms (injectable for tests).
|
|
73
|
+
*/
|
|
74
|
+
export declare function decideRebuild(lastBuild: KbBuildLogRow | null, config: RebuildConfig, now?: number): RebuildDecision;
|
|
75
|
+
/** Side-effect callbacks the daemon wires to the (web-layer) BuildManager. */
|
|
76
|
+
export interface RebuildHooks {
|
|
77
|
+
/** True when a build is currently running (BuildManager.isBusy). */
|
|
78
|
+
isBuildBusy: () => boolean;
|
|
79
|
+
/** Kick off an apply-mode rebuild for `projectRoot`. May throw. */
|
|
80
|
+
triggerBuild: (projectRoot: string) => void;
|
|
81
|
+
}
|
|
82
|
+
export interface RebuildCheckResult {
|
|
83
|
+
decision: RebuildDecision;
|
|
84
|
+
/** True iff a build was actually kicked off this pass. */
|
|
85
|
+
triggered: boolean;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Run one staleness check pass for `projectRoot`. Idempotent + fail-silent.
|
|
89
|
+
*
|
|
90
|
+
* Looks up the last build, applies `decideRebuild`, and — when due and no build
|
|
91
|
+
* is already running — invokes `hooks.triggerBuild`. Any error is swallowed
|
|
92
|
+
* (logged) so the maintenance loop is never disrupted.
|
|
93
|
+
*/
|
|
94
|
+
export declare function runKbRebuildCheck(storage: SQLiteStorage, configStore: ConfigStore, projectRoot: string, hooks: RebuildHooks, now?: number): RebuildCheckResult;
|
|
95
|
+
//# sourceMappingURL=kb-rebuild-scheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kb-rebuild-scheduler.d.ts","sourceRoot":"","sources":["../../../src/daemon/services/kb-rebuild-scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,sEAAsE;AACtE,eAAO,MAAM,wBAAwB,4BAA4B,CAAC;AAClE,uEAAuE;AACvE,eAAO,MAAM,wBAAwB,4BAA4B,CAAC;AAClE,qEAAqE;AACrE,eAAO,MAAM,wBAAwB,oCAAoC,CAAC;AAE1E,oEAAoE;AACpE,eAAO,MAAM,QAAQ;IACnB,0EAA0E;;IAE1E,gEAAgE;;IAEhE,uDAAuD;;CAE/C,CAAC;AAIX,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAyBD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,WAAW,GAAG,aAAa,CAc5E;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,GAAG,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAA;CAAE,GAC9C;IAAE,GAAG,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,UAAU,GAAG,OAAO,GAAG,aAAa,CAAA;CAAE,CAAC;AAEjE;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,aAAa,GAAG,IAAI,EAC/B,MAAM,EAAE,aAAa,EACrB,GAAG,GAAE,MAAmB,GACvB,eAAe,CAejB;AAED,8EAA8E;AAC9E,MAAM,WAAW,YAAY;IAC3B,oEAAoE;IACpE,WAAW,EAAE,MAAM,OAAO,CAAC;IAC3B,mEAAmE;IACnE,YAAY,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,eAAe,CAAC;IAC1B,0DAA0D;IAC1D,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,YAAY,EACnB,GAAG,GAAE,MAAmB,GACvB,kBAAkB,CAuCpB"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kb-rebuild-scheduler — daemon-side automatic KB index rebuild scheduling.
|
|
3
|
+
*
|
|
4
|
+
* Background (decision e888352d, full-link audit)
|
|
5
|
+
* -----------------------------------------------
|
|
6
|
+
* The full-link audit found the KB index can rot: `kb_build_log`'s last build
|
|
7
|
+
* was 20 days stale, and there was no auto-rebuild trigger — operators had to
|
|
8
|
+
* remember to run `cf knowledge build`. KB retrieval itself is healthy; the gap
|
|
9
|
+
* was a missing *schedule*.
|
|
10
|
+
*
|
|
11
|
+
* Design (minimal, reuse-first)
|
|
12
|
+
* -----------------------------
|
|
13
|
+
* Mirrors the established daemon maintenance pattern (event-ttl-sweep,
|
|
14
|
+
* codegraph-sync): a pure decision function consulted on a `setInterval`
|
|
15
|
+
* cadence under the shared maintenance mutex. No new cron, no fs.watch.
|
|
16
|
+
*
|
|
17
|
+
* Trigger strategy — staleness only (simplest correct signal):
|
|
18
|
+
* - Read the last `kb_build_log` row for the project via `queryLastKbBuild`.
|
|
19
|
+
* - If the last successful build is older than `kb.stale_threshold_days`
|
|
20
|
+
* (default 7), a rebuild is due.
|
|
21
|
+
* - If there is NO build log row at all, a rebuild is due (index never built).
|
|
22
|
+
* - A build currently `running` (per kb_build_log) is NOT re-triggered.
|
|
23
|
+
*
|
|
24
|
+
* The actual build is delegated to the existing `BuildManager` (single-instance
|
|
25
|
+
* concurrency control + kb_build_log telemetry already lives there). The daemon
|
|
26
|
+
* passes `triggerBuild` / `isBuildBusy` callbacks so this service keeps ZERO
|
|
27
|
+
* static edges into `src/web/` (BuildManager lives under web/, lazy-loaded).
|
|
28
|
+
*
|
|
29
|
+
* Fail-silent: every storage / trigger error is caught + logged at warn level.
|
|
30
|
+
* A scheduler hiccup must NEVER crash the daemon or block the maintenance loop.
|
|
31
|
+
*/
|
|
32
|
+
import { logger } from '../../core/utils/logger.js';
|
|
33
|
+
/** Config key: master on/off switch for auto-rebuild (default ON). */
|
|
34
|
+
export const CFG_AUTO_REBUILD_ENABLED = 'kb.auto_rebuild_enabled';
|
|
35
|
+
/** Config key: staleness threshold in days before a rebuild is due. */
|
|
36
|
+
export const CFG_STALE_THRESHOLD_DAYS = 'kb.stale_threshold_days';
|
|
37
|
+
/** Config key: how often the daemon checks for staleness (hours). */
|
|
38
|
+
export const CFG_CHECK_INTERVAL_HOURS = 'kb.rebuild_check_interval_hours';
|
|
39
|
+
/** Built-in defaults. Conservative — 7d stale, checked every 6h. */
|
|
40
|
+
export const DEFAULTS = {
|
|
41
|
+
/** Master switch. Default ON so freshness is automatic out of the box. */
|
|
42
|
+
enabled: true,
|
|
43
|
+
/** Rebuild when the last build is older than this many days. */
|
|
44
|
+
staleThresholdDays: 7,
|
|
45
|
+
/** Cadence at which the daemon evaluates staleness. */
|
|
46
|
+
checkIntervalHours: 6,
|
|
47
|
+
};
|
|
48
|
+
const MS_PER_DAY = 86_400_000;
|
|
49
|
+
/** Read a boolean from ConfigStore ('1'/'true'/'on' → true), else fallback. */
|
|
50
|
+
function readBoolConfig(configStore, key, fallback) {
|
|
51
|
+
const raw = configStore.get(key);
|
|
52
|
+
if (raw === undefined)
|
|
53
|
+
return fallback;
|
|
54
|
+
const v = raw.trim().toLowerCase();
|
|
55
|
+
if (v === '1' || v === 'true' || v === 'on' || v === 'yes')
|
|
56
|
+
return true;
|
|
57
|
+
if (v === '0' || v === 'false' || v === 'off' || v === 'no')
|
|
58
|
+
return false;
|
|
59
|
+
return fallback;
|
|
60
|
+
}
|
|
61
|
+
/** Read a positive number from ConfigStore, falling back on bad / missing input. */
|
|
62
|
+
function readPositiveNumberConfig(configStore, key, fallback) {
|
|
63
|
+
const raw = configStore.get(key);
|
|
64
|
+
if (raw === undefined)
|
|
65
|
+
return fallback;
|
|
66
|
+
const n = Number(raw);
|
|
67
|
+
if (!Number.isFinite(n) || n <= 0)
|
|
68
|
+
return fallback;
|
|
69
|
+
return n;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Resolve effective rebuild config from forge_config > defaults. Exported for
|
|
73
|
+
* tests + daemon wiring.
|
|
74
|
+
*/
|
|
75
|
+
export function resolveRebuildConfig(configStore) {
|
|
76
|
+
return {
|
|
77
|
+
enabled: readBoolConfig(configStore, CFG_AUTO_REBUILD_ENABLED, DEFAULTS.enabled),
|
|
78
|
+
staleThresholdDays: readPositiveNumberConfig(configStore, CFG_STALE_THRESHOLD_DAYS, DEFAULTS.staleThresholdDays),
|
|
79
|
+
checkIntervalHours: readPositiveNumberConfig(configStore, CFG_CHECK_INTERVAL_HOURS, DEFAULTS.checkIntervalHours),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Pure decision: should the KB index be rebuilt now?
|
|
84
|
+
*
|
|
85
|
+
* @param lastBuild the most recent kb_build_log row for the project, or null.
|
|
86
|
+
* @param config resolved rebuild config.
|
|
87
|
+
* @param now current epoch ms (injectable for tests).
|
|
88
|
+
*/
|
|
89
|
+
export function decideRebuild(lastBuild, config, now = Date.now()) {
|
|
90
|
+
if (!config.enabled)
|
|
91
|
+
return { due: false, reason: 'disabled' };
|
|
92
|
+
// Never built → always due (no index to drift from, but nothing to query either).
|
|
93
|
+
if (!lastBuild)
|
|
94
|
+
return { due: true, reason: 'never-built' };
|
|
95
|
+
// A build already in flight — don't pile on. The BuildManager also guards
|
|
96
|
+
// concurrency, but short-circuiting here avoids a redundant trigger attempt.
|
|
97
|
+
if (lastBuild.status === 'running')
|
|
98
|
+
return { due: false, reason: 'in-progress' };
|
|
99
|
+
const ageMs = now - lastBuild.ts;
|
|
100
|
+
const thresholdMs = config.staleThresholdDays * MS_PER_DAY;
|
|
101
|
+
if (ageMs >= thresholdMs)
|
|
102
|
+
return { due: true, reason: 'stale' };
|
|
103
|
+
return { due: false, reason: 'fresh' };
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Run one staleness check pass for `projectRoot`. Idempotent + fail-silent.
|
|
107
|
+
*
|
|
108
|
+
* Looks up the last build, applies `decideRebuild`, and — when due and no build
|
|
109
|
+
* is already running — invokes `hooks.triggerBuild`. Any error is swallowed
|
|
110
|
+
* (logged) so the maintenance loop is never disrupted.
|
|
111
|
+
*/
|
|
112
|
+
export function runKbRebuildCheck(storage, configStore, projectRoot, hooks, now = Date.now()) {
|
|
113
|
+
const config = resolveRebuildConfig(configStore);
|
|
114
|
+
let lastBuild = null;
|
|
115
|
+
try {
|
|
116
|
+
lastBuild = storage.queryLastKbBuild(projectRoot);
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
logger.warn(`[kb-rebuild] queryLastKbBuild failed: ${err}`);
|
|
120
|
+
return { decision: { due: false, reason: 'fresh' }, triggered: false };
|
|
121
|
+
}
|
|
122
|
+
const decision = decideRebuild(lastBuild, config, now);
|
|
123
|
+
if (!decision.due) {
|
|
124
|
+
return { decision, triggered: false };
|
|
125
|
+
}
|
|
126
|
+
// Double-guard against an in-flight build the kb_build_log row may not yet
|
|
127
|
+
// reflect (e.g. a manual `cf knowledge build` running this instant).
|
|
128
|
+
let busy = false;
|
|
129
|
+
try {
|
|
130
|
+
busy = hooks.isBuildBusy();
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
logger.warn(`[kb-rebuild] isBuildBusy probe failed: ${err}`);
|
|
134
|
+
}
|
|
135
|
+
if (busy) {
|
|
136
|
+
return { decision, triggered: false };
|
|
137
|
+
}
|
|
138
|
+
try {
|
|
139
|
+
hooks.triggerBuild(projectRoot);
|
|
140
|
+
logger.info(`[kb-rebuild] triggered auto-rebuild for ${projectRoot} (reason: ${decision.reason})`);
|
|
141
|
+
return { decision, triggered: true };
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
// fail-silent: a failed trigger must not crash the daemon.
|
|
145
|
+
logger.warn(`[kb-rebuild] triggerBuild failed for ${projectRoot}: ${err}`);
|
|
146
|
+
return { decision, triggered: false };
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=kb-rebuild-scheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kb-rebuild-scheduler.js","sourceRoot":"","sources":["../../../src/daemon/services/kb-rebuild-scheduler.ts"],"names":[],"mappings":"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"}
|