@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
package/dist/daemon/index.js
CHANGED
|
@@ -8,29 +8,75 @@
|
|
|
8
8
|
* 4. Create event handlers and start socket server
|
|
9
9
|
* 5. Handle graceful shutdown
|
|
10
10
|
*/
|
|
11
|
+
import { readFileSync } from 'node:fs';
|
|
11
12
|
import { SocketServer } from './server.js';
|
|
12
|
-
import { writePidFile, removePidFile, cleanSocket, getSocketPath, writeAuthToken, syncMcpToken, removeAuthToken, } from './lifecycle.js';
|
|
13
|
+
import { writePidFile, removePidFile, cleanSocket, getSocketPath, writeAuthToken, syncMcpToken, removeAuthToken, isAnotherDaemonListening, } from './lifecycle.js';
|
|
13
14
|
import { routeEvent } from './router.js';
|
|
14
|
-
import { logger } from '../core/utils/logger.js';
|
|
15
|
+
import { logger, enableFileLogging } from '../core/utils/logger.js';
|
|
15
16
|
import { ConfigManager } from '../core/config.js';
|
|
16
17
|
import { SQLiteStorage } from '../core/storage/sqlite.js';
|
|
17
18
|
import { expandPath } from '../core/utils/path.js';
|
|
18
|
-
|
|
19
|
+
// D R-A (2026-05-29): ClaudeProvider import removed — daemon no longer
|
|
20
|
+
// instantiates ClaudeProvider at startup. SkillRegistry is now keyword-only
|
|
21
|
+
// and takes no args. Provider file itself is deleted in D R-D.
|
|
22
|
+
// See master spec 0902 §2.4.4 and src/skills/registry.ts (design rationale).
|
|
19
23
|
import { TaskSegmenter } from './services/task-segmenter.js';
|
|
24
|
+
import { TaskBoundaryClassifier } from './services/task-boundary-classifier.js';
|
|
25
|
+
import { srcDirFromRoot } from './services/codegraph-sync.js';
|
|
26
|
+
import { startMaintenanceSchedulers } from './startup/maintenance-schedulers.js';
|
|
27
|
+
import { CodeGraphStore } from '../core/storage/codegraph.js';
|
|
20
28
|
import { SkillRegistry } from '../skills/registry.js';
|
|
21
29
|
import { InvocationGuard } from '../skills/invocation-guard.js';
|
|
22
30
|
import { HistoryExporter } from './handlers/history-exporter.js';
|
|
23
31
|
import { ResumeManager } from '../claudemd/resume-manager.js';
|
|
32
|
+
import { ViolationsManager } from '../claudemd/violations-manager.js';
|
|
24
33
|
import { ConventionExtractor } from '../claudemd/convention-extractor.js';
|
|
25
34
|
import { UserPromptHandler } from './handlers/user-prompt.js';
|
|
26
35
|
import { PostToolUseHandler } from './handlers/post-tool-use.js';
|
|
27
36
|
import { StopHandler } from './handlers/stop.js';
|
|
37
|
+
import { PreToolUseHandler } from './handlers/pre-tool-use.js';
|
|
38
|
+
import { SpecApproval } from './services/spec-approval.js';
|
|
39
|
+
import { RuleRegistry } from './rules/registry.js';
|
|
40
|
+
import { assertWhitelistInvariants } from './rules/whitelist.js';
|
|
28
41
|
import { syncHooks } from './hook-sync.js';
|
|
29
42
|
import { syncSkills } from './skill-sync.js';
|
|
43
|
+
import { syncAgents } from './agent-sync.js';
|
|
30
44
|
import { replayQueue } from '../core/queue/index.js';
|
|
31
|
-
import { DEFAULTS } from '../core/constants.js';
|
|
45
|
+
import { DEFAULTS, FORGE_PATHS } from '../core/constants.js';
|
|
32
46
|
import { getUserPrompt } from '../core/event-fields.js';
|
|
47
|
+
// D-2: BuildManager is now lazy-loaded inside the `webEnabled` branch (L460-475)
|
|
48
|
+
// so the daemon has zero static edges into `src/web/`. The previous
|
|
49
|
+
// `import { buildManager } from '../web/services/build-manager.js'` lived here.
|
|
50
|
+
import { ConfigStore } from './config-store.js';
|
|
51
|
+
import { reviveInterceptIfStale } from './services/intercept-revive.js';
|
|
52
|
+
import { startHeartbeat } from './services/heartbeat-writer.js';
|
|
53
|
+
import { DECISION_MAKER_COOLDOWN_CONFIG_KEY, DEFAULT_DECISION_MAKER_COOLDOWN_SECONDS, MAX_DECISION_MAKER_COOLDOWN_SECONDS, } from './services/decision-hint.js';
|
|
54
|
+
// F12: the maintenance mutex shared by all scheduled maintenance handlers now
|
|
55
|
+
// lives inside `startMaintenanceSchedulers` (src/daemon/startup/maintenance-
|
|
56
|
+
// schedulers.ts) as factory-local closure state — see Wave 3a R3 extraction.
|
|
33
57
|
export async function startDaemon(foreground = false, options = {}) {
|
|
58
|
+
// ── 0pre. Anti-recursion guard ──────────────────────────────────────────────
|
|
59
|
+
// Refuse to boot a second daemon from inside an internal subprocess marked
|
|
60
|
+
// with CLAUDE_FORGE_INTERNAL=1. Guards against a misconfigured user hook
|
|
61
|
+
// accidentally invoking `cf daemon start` from a spawned child — otherwise
|
|
62
|
+
// we'd have two daemons fighting over the same socket. Defensive: nothing in
|
|
63
|
+
// the current codebase sets this env, but the check is cheap insurance.
|
|
64
|
+
if (process.env.CLAUDE_FORGE_INTERNAL === '1') {
|
|
65
|
+
console.error('[daemon] refusing to start under CLAUDE_FORGE_INTERNAL=1');
|
|
66
|
+
process.exit(0);
|
|
67
|
+
}
|
|
68
|
+
// ── 0a. File logging wire (Stage D, 2026-05-27) ────────────────────────────
|
|
69
|
+
// MUST be the first thing in startDaemon — before any logger.* call AND
|
|
70
|
+
// before the uncaughtException/unhandledRejection handlers (which log via
|
|
71
|
+
// `logger.error`). The default stderr-only sink is swallowed in detached
|
|
72
|
+
// production mode (stdout/stderr → /dev/null) and that's why subsystem
|
|
73
|
+
// startup lines (`[ConfigStore] Seeded N keys`, `[InterceptRevive] ...`,
|
|
74
|
+
// etc.) never landed on disk. The dev-daemon.sh wrapper hides this bug by
|
|
75
|
+
// shell-redirecting `2> daemon-dev.log` but real `cf daemon start` users
|
|
76
|
+
// see nothing. Skip when FORGE_DAEMON_DISABLE_FILE_LOG=1 (tests / CI).
|
|
77
|
+
if (process.env.FORGE_DAEMON_DISABLE_FILE_LOG !== '1') {
|
|
78
|
+
enableFileLogging(FORGE_PATHS.daemonLog());
|
|
79
|
+
}
|
|
34
80
|
// ── 0. Global Exception Handlers ───────────────────────────────────────────
|
|
35
81
|
process.on('uncaughtException', (err) => {
|
|
36
82
|
logger.error(`[Daemon] Uncaught exception: ${err.message}`);
|
|
@@ -44,7 +90,55 @@ export async function startDaemon(foreground = false, options = {}) {
|
|
|
44
90
|
// Log level is auto-parsed from LOG_LEVEL env var at logger module load time.
|
|
45
91
|
const config = new ConfigManager().get();
|
|
46
92
|
logger.info('Claude Forge daemon starting...');
|
|
93
|
+
// ── 1a. Deprecated env detection (spec 1851 R-A User Decisions Q7) ─────────
|
|
94
|
+
// The Phase B `CF_SKILL_DISTILLER_AGENT=1` toggle was removed in R-A; the
|
|
95
|
+
// env is now silently ignored. Warn users so they remove it from their rc
|
|
96
|
+
// / launchd plist before R-D removes the warning altogether.
|
|
97
|
+
if (process.env.CF_SKILL_DISTILLER_AGENT) {
|
|
98
|
+
logger.warn('[daemon] env CF_SKILL_DISTILLER_AGENT detected — this flag is deprecated ' +
|
|
99
|
+
'and has no effect. Distill now uses claude CLI shell-out unconditionally. ' +
|
|
100
|
+
'Please unset it from your shell rc / launchd plist.');
|
|
101
|
+
}
|
|
102
|
+
// ── 1.5. Whitelist self-test (Phase 2c safety-net) ────────────────────────
|
|
103
|
+
// Fail-fast at boot if the enforcement whitelist regresses — better than
|
|
104
|
+
// letting the user discover that `cf bypass` itself is denied on first use.
|
|
105
|
+
try {
|
|
106
|
+
assertWhitelistInvariants();
|
|
107
|
+
logger.debug('[Whitelist] self-test passed');
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
logger.error(`[Whitelist] self-test FAILED: ${err}`);
|
|
111
|
+
throw err;
|
|
112
|
+
}
|
|
113
|
+
// ── 1.6. Global governance protocol injection (decision 7fa0f2ab) ─────────
|
|
114
|
+
// Idempotently write the DECISION HINT protocol contract into the global
|
|
115
|
+
// ~/.claude/CLAUDE.md so Claude in *other* projects knows to spawn
|
|
116
|
+
// decision-maker. Fail-silent: a write error here must never block daemon
|
|
117
|
+
// startup. Skip when FORGE_DAEMON_SKIP_GLOBAL_INJECT=1 (tests / CI).
|
|
118
|
+
if (process.env.FORGE_DAEMON_SKIP_GLOBAL_INJECT !== '1') {
|
|
119
|
+
try {
|
|
120
|
+
const { injectGlobalGovernance } = await import('../core/governance/global-inject.js');
|
|
121
|
+
const res = injectGlobalGovernance();
|
|
122
|
+
logger.debug(`[Governance] global inject ${res.action} (${res.path})`);
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
logger.warn(`[Governance] global inject failed (continuing): ${err}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
47
128
|
// ── 2. Lifecycle (PID, socket, auth token) ─────────────────────────────────
|
|
129
|
+
// Single-instance guard (task-link orphan fix, 2026-06-02). MUST run BEFORE
|
|
130
|
+
// cleanSocket() — if a healthy daemon is already accepting on the socket, a
|
|
131
|
+
// second instance (typically launchd re-spawn after a prior EADDRINUSE crash)
|
|
132
|
+
// would otherwise unlink + re-bind the live socket, steal it, then die on the
|
|
133
|
+
// web port. That orphaned socket breaks every hook `nc` connect → events get
|
|
134
|
+
// queued instead of delivered and tasks freeze at "0 events". We exit 0
|
|
135
|
+
// (clean) so launchd's KeepAlive.SuccessfulExit=false does NOT immediately
|
|
136
|
+
// re-spawn us, breaking the 10s crash loop.
|
|
137
|
+
if (await isAnotherDaemonListening()) {
|
|
138
|
+
logger.warn('[Daemon] Another daemon is already listening on the socket — aborting ' +
|
|
139
|
+
'startup to avoid socket theft (single-instance guard). Exiting cleanly.');
|
|
140
|
+
process.exit(0);
|
|
141
|
+
}
|
|
48
142
|
cleanSocket();
|
|
49
143
|
writePidFile();
|
|
50
144
|
const authToken = writeAuthToken();
|
|
@@ -54,6 +148,43 @@ export async function startDaemon(foreground = false, options = {}) {
|
|
|
54
148
|
const dbPath = expandPath(config.storage.path);
|
|
55
149
|
const storage = new SQLiteStorage(dbPath);
|
|
56
150
|
logger.info(`Storage initialized: ${dbPath}`);
|
|
151
|
+
// ── 3.45. Seed feature-flag defaults (v9.x Phase 0) ───────────────────────
|
|
152
|
+
// Insert any missing flags from DEFAULT_FLAGS; user-edited values via
|
|
153
|
+
// `cf config set ...` are preserved (only writes when key is absent).
|
|
154
|
+
// ConfigStore is instantiated once here and shared with handlers that need
|
|
155
|
+
// to probe flags at request time (e.g. PreToolUseHandler).
|
|
156
|
+
const configStore = new ConfigStore(storage);
|
|
157
|
+
try {
|
|
158
|
+
const seeded = configStore.seedDefaults();
|
|
159
|
+
if (seeded > 0) {
|
|
160
|
+
logger.info(`[ConfigStore] Seeded ${seeded} default feature flag(s)`);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
logger.debug('[ConfigStore] All default feature flags already present');
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
logger.warn(`[ConfigStore] seedDefaults failed: ${err}`);
|
|
168
|
+
}
|
|
169
|
+
// ── 3.46. Intercept Revive (8-in-1 Phase D, 2026-05-27) ───────────────────
|
|
170
|
+
// If `InterceptRollbackGuard` auto-disabled `pre_tool_intercept.enabled`
|
|
171
|
+
// more than 24h ago and the user never manually re-enabled it, flip it back
|
|
172
|
+
// on. Without this, the rollback guard is a one-way trap — the user has
|
|
173
|
+
// to remember to run `cf config set ...` which (per spec § Problem
|
|
174
|
+
// statement) they never did. Manual disables (no `auto_disabled_at` audit
|
|
175
|
+
// key) are left alone.
|
|
176
|
+
try {
|
|
177
|
+
const outcome = reviveInterceptIfStale(configStore);
|
|
178
|
+
if (outcome.revived) {
|
|
179
|
+
logger.info(`[InterceptRevive] ${outcome.reason}`);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
logger.debug(`[InterceptRevive] no-op: ${outcome.reason}`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
catch (err) {
|
|
186
|
+
logger.warn(`[InterceptRevive] startup call failed (non-fatal): ${err}`);
|
|
187
|
+
}
|
|
57
188
|
// ── 3.5. Auto-sync hooks ────────────────────────────────────────────────
|
|
58
189
|
// npm upgrade 不会自动更新 ~/.claude-forge/hooks/,每次 daemon 启动
|
|
59
190
|
// 用 SHA-256 比对源 dist/hooks 与本地副本,不一致则覆盖。
|
|
@@ -63,86 +194,190 @@ export async function startDaemon(foreground = false, options = {}) {
|
|
|
63
194
|
catch (err) {
|
|
64
195
|
logger.warn(`[HookSync] unexpected error: ${err}`);
|
|
65
196
|
}
|
|
66
|
-
// ── 3.6. Auto-sync
|
|
197
|
+
// ── 3.6. Auto-sync built-in distilled skills ───────────────────────────
|
|
67
198
|
// npm upgrade 不会自动更新 ~/.claude/skills/,每次 daemon 启动
|
|
68
|
-
// 用 SHA-256 比对 dist/skills/
|
|
199
|
+
// 用 SHA-256 比对 dist/skills/distilled 与本地副本,不一致则覆盖。
|
|
69
200
|
try {
|
|
70
201
|
syncSkills();
|
|
71
202
|
}
|
|
72
203
|
catch (err) {
|
|
73
204
|
logger.warn(`[SkillSync] unexpected error: ${err}`);
|
|
74
205
|
}
|
|
75
|
-
// ──
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
206
|
+
// ── 3.7. Auto-sync project-specific agent prompts ───────────────────────
|
|
207
|
+
// npm upgrade / fresh npm install 不会自动填充 ~/.claude/agents/。每次 daemon
|
|
208
|
+
// 启动用 SHA-256 比对 dist/daemon/templates/agents/ 与本地副本,不一致则覆盖。
|
|
209
|
+
// 用户自己加的 my-*.md 不在 source list → 始终保留。
|
|
210
|
+
try {
|
|
211
|
+
syncAgents();
|
|
79
212
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
: null;
|
|
83
|
-
// ── 5. Initialize services ─────────────────────────────────────────────────
|
|
84
|
-
const skillApiKey = config.skill_matching?.api_key || apiKey;
|
|
85
|
-
const skillRegistry = new SkillRegistry(skillApiKey, config.ai.model, config.ai.base_url);
|
|
86
|
-
const invocationGuard = new InvocationGuard();
|
|
87
|
-
if (skillApiKey) {
|
|
88
|
-
logger.info('[Skills] Registry loaded with semantic matching support');
|
|
213
|
+
catch (err) {
|
|
214
|
+
logger.warn(`[AgentSync] unexpected error: ${err}`);
|
|
89
215
|
}
|
|
90
|
-
|
|
91
|
-
|
|
216
|
+
// ── 4. AI Provider (DELETED — D R-A → R-D, 2026-05-29) ────────────────────
|
|
217
|
+
// The daemon used to instantiate a ClaudeProvider here for two reasons:
|
|
218
|
+
// (a) emit `[AI Stats]` on shutdown (dead log — no consumers, removed)
|
|
219
|
+
// (b) hand model/base_url to the (now-deleted) semantic skill matcher
|
|
220
|
+
// Master spec 0902 §2.4.4 (decision f5a5b030 / Option B 彻底) eliminates
|
|
221
|
+
// both: distill / claudemd / knowledge / patch now shell out to the
|
|
222
|
+
// `claude` CLI (sub-specs A/B/C R-B already landed). SkillRegistry is
|
|
223
|
+
// keyword-only. D R-D (this commit) deleted `src/core/ai/provider.ts`
|
|
224
|
+
// outright and the `ai.*` / `skill_matching.*` config schema.
|
|
225
|
+
// Design rationale for the keyword-only switch lives in
|
|
226
|
+
// `src/skills/registry.ts` (single source of truth — decision 3baa0e7c).
|
|
227
|
+
//
|
|
228
|
+
// Migration warn: if the user still has `ai:` or `skill_matching:` in the
|
|
229
|
+
// raw yaml, or `ANTHROPIC_API_KEY` exported, tell them it's deprecated and
|
|
230
|
+
// has no effect. We re-read the raw yaml here (rather than the typed
|
|
231
|
+
// `config`) because the schema no longer holds those fields.
|
|
232
|
+
try {
|
|
233
|
+
const rawCfg = readFileSync(FORGE_PATHS.config(), 'utf-8');
|
|
234
|
+
const legacyAiKey = /^\s*ai\s*:/m.test(rawCfg);
|
|
235
|
+
const legacySkillMatchKey = /^\s*skill_matching\s*:/m.test(rawCfg);
|
|
236
|
+
const legacyApiKeyEnv = !!process.env.ANTHROPIC_API_KEY;
|
|
237
|
+
if (legacyAiKey || legacySkillMatchKey || legacyApiKeyEnv) {
|
|
238
|
+
const sources = [];
|
|
239
|
+
if (legacyAiKey)
|
|
240
|
+
sources.push('config.ai.api_key');
|
|
241
|
+
if (legacySkillMatchKey)
|
|
242
|
+
sources.push('config.skill_matching.api_key');
|
|
243
|
+
if (legacyApiKeyEnv)
|
|
244
|
+
sources.push('ANTHROPIC_API_KEY env');
|
|
245
|
+
logger.warn(`[daemon] ${sources.join(' + ')} detected — these are deprecated ` +
|
|
246
|
+
'and have no effect after spec 0902 (decision f5a5b030). Distill / ' +
|
|
247
|
+
'claudemd / knowledge build / patch now use claude CLI shell-out, ' +
|
|
248
|
+
'and SkillRegistry is keyword-only. Remove from config.yaml + ' +
|
|
249
|
+
'shell rc to silence this warning.');
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
// No config.yaml or read error → nothing to warn about.
|
|
254
|
+
}
|
|
255
|
+
// ── 4.7. decision 7aa0ec63 (2026-06-01) — cooldown config validation ────
|
|
256
|
+
// If forge_config.decision_maker_cooldown_seconds is present but holds an
|
|
257
|
+
// out-of-range value (≤ 0 or > MAX_DECISION_MAKER_COOLDOWN_SECONDS) or a
|
|
258
|
+
// non-number, the resolver silently falls back to the default. Warn once at
|
|
259
|
+
// boot so the user notices typos instead of wondering why their override
|
|
260
|
+
// had no effect.
|
|
261
|
+
try {
|
|
262
|
+
const raw = storage.readConfig(DECISION_MAKER_COOLDOWN_CONFIG_KEY);
|
|
263
|
+
if (raw !== undefined && raw !== null) {
|
|
264
|
+
const n = Number(raw);
|
|
265
|
+
const invalid = !Number.isFinite(n) ||
|
|
266
|
+
n <= 0 ||
|
|
267
|
+
n > MAX_DECISION_MAKER_COOLDOWN_SECONDS;
|
|
268
|
+
if (invalid) {
|
|
269
|
+
logger.warn(`[daemon] forge_config.${DECISION_MAKER_COOLDOWN_CONFIG_KEY}=${String(raw)} ` +
|
|
270
|
+
`is out of range (0, ${MAX_DECISION_MAKER_COOLDOWN_SECONDS}]; ` +
|
|
271
|
+
`falling back to default ${DEFAULT_DECISION_MAKER_COOLDOWN_SECONDS}s. ` +
|
|
272
|
+
`Set a valid value via \`cf config set ${DECISION_MAKER_COOLDOWN_CONFIG_KEY} <seconds>\`.`);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
92
275
|
}
|
|
276
|
+
catch (err) {
|
|
277
|
+
logger.debug(`[daemon] cooldown config probe failed (non-fatal): ${err}`);
|
|
278
|
+
}
|
|
279
|
+
// ── 5. Initialize services ─────────────────────────────────────────────────
|
|
280
|
+
// D R-B (spec 0902): SkillRegistry is keyword-only — no args. The legacy
|
|
281
|
+
// `skill_matching.api_key` field is silently ignored (warned above) and
|
|
282
|
+
// will be removed from the JSON schema in D R-D.
|
|
283
|
+
const skillRegistry = new SkillRegistry();
|
|
284
|
+
const invocationGuard = new InvocationGuard();
|
|
285
|
+
logger.info('[Skills] Registry loaded (keyword matching)');
|
|
93
286
|
logger.info('[Skills] InvocationGuard ready (idempotent + depth/total limits)');
|
|
94
287
|
const exporter = new HistoryExporter(storage);
|
|
95
288
|
const resume = new ResumeManager(storage);
|
|
289
|
+
const violationsManager = new ViolationsManager();
|
|
96
290
|
const conventionExtractor = new ConventionExtractor();
|
|
97
291
|
const taskSegmenter = new TaskSegmenter(storage);
|
|
98
|
-
|
|
99
|
-
//
|
|
100
|
-
//
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
//
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
292
|
+
// decision 265f59d5 (2026-06-08): async LLM boundary classifier. Fire-and-
|
|
293
|
+
// forget — NEVER awaited on the UserPromptSubmit hot path. Only spawns claude
|
|
294
|
+
// for prompts the sync segmenter flagged ambiguous (~30%).
|
|
295
|
+
const boundaryClassifier = new TaskBoundaryClassifier();
|
|
296
|
+
// Orphan-event robustness fix (2026-06-01): proactively rebuild the
|
|
297
|
+
// in-memory currentTasks map from the DB so events arriving right after a
|
|
298
|
+
// daemon restart (buffered + replayed) hit the fast currentTasks path
|
|
299
|
+
// instead of relying on per-event lazy recovery. Idempotent + fault-tolerant.
|
|
300
|
+
taskSegmenter.hydrateActiveTasks();
|
|
301
|
+
logger.info('[Services] Initialized: ResumeManager, ViolationsManager, TaskSegmenter, SkillRegistry');
|
|
302
|
+
// ── 5.45. Heartbeat writer (watchdog spec 0843) ───────────────────────────
|
|
303
|
+
// Writes ~/.claude-forge/daemon.heartbeat every 60s via atomic rename.
|
|
304
|
+
// Removed on graceful shutdown so ensure-running detects the gap.
|
|
305
|
+
let daemonVersion = 'unknown';
|
|
306
|
+
try {
|
|
307
|
+
const pkgUrl = new URL('../../package.json', import.meta.url);
|
|
308
|
+
const { createRequire } = await import('node:module');
|
|
309
|
+
const req = createRequire(import.meta.url);
|
|
310
|
+
const pkg = req(pkgUrl.pathname);
|
|
311
|
+
daemonVersion = pkg.version;
|
|
312
|
+
}
|
|
313
|
+
catch { /* version string is nice-to-have, not critical */ }
|
|
314
|
+
const heartbeatHandle = startHeartbeat({ version: daemonVersion });
|
|
315
|
+
logger.info('[Heartbeat] writer started (60s interval)');
|
|
316
|
+
// ── 5.5–5.8. Periodic maintenance schedulers (Wave 3a R3 extraction) ──────
|
|
317
|
+
// Daily fact-table clean, weekly VACUUM, event-TTL sweep, stale-task GC,
|
|
318
|
+
// codegraph incremental sync and KB auto-rebuild — all six recurring
|
|
319
|
+
// schedulers plus their four initial one-shot timeouts and the shared
|
|
320
|
+
// maintenance mutex now live in `startMaintenanceSchedulers`
|
|
321
|
+
// (src/daemon/startup/maintenance-schedulers.ts). Behavior is unchanged:
|
|
322
|
+
// same cadences, same fail-silent handling, same teardown. The codegraph
|
|
323
|
+
// store + project-root deps are declared here because `shutdown()` also
|
|
324
|
+
// closes the store; the BuildManager resolver stays here to keep the
|
|
325
|
+
// scheduler module free of any static edge into `src/web/`.
|
|
326
|
+
const codegraphStore = new CodeGraphStore(FORGE_PATHS.codegraphDb());
|
|
327
|
+
const codegraphSrcDir = srcDirFromRoot(process.cwd());
|
|
328
|
+
const codegraphMtimeCache = new Map();
|
|
329
|
+
const kbProjectRoot = process.cwd();
|
|
330
|
+
// BuildManager lives under src/web/ (lazy-loaded to keep core ← web layering).
|
|
331
|
+
// The scheduler stays web-agnostic via this callback; resolve the singleton
|
|
332
|
+
// once.
|
|
333
|
+
let kbBuildManager = null;
|
|
334
|
+
const ensureKbBuildManager = async () => {
|
|
335
|
+
if (!kbBuildManager) {
|
|
336
|
+
const { buildManager } = await import('../web/services/build-manager.js');
|
|
337
|
+
// Idempotent: setStorage may also be called by the web-server branch.
|
|
338
|
+
buildManager.setStorage(storage);
|
|
339
|
+
kbBuildManager = buildManager;
|
|
138
340
|
}
|
|
139
|
-
|
|
341
|
+
return kbBuildManager;
|
|
342
|
+
};
|
|
343
|
+
const maintenanceHandle = startMaintenanceSchedulers({
|
|
344
|
+
storage,
|
|
345
|
+
configStore,
|
|
346
|
+
taskSegmenter,
|
|
347
|
+
codegraphStore,
|
|
348
|
+
codegraphSrcDir,
|
|
349
|
+
codegraphMtimeCache,
|
|
350
|
+
kbProjectRoot,
|
|
351
|
+
ensureKbBuildManager,
|
|
352
|
+
});
|
|
140
353
|
// ── 6. Create handlers ─────────────────────────────────────────────────────
|
|
141
|
-
|
|
354
|
+
// Phase 5: shared RuleRegistry so PreToolUse sees the same rule set.
|
|
355
|
+
const ruleRegistry = new RuleRegistry();
|
|
356
|
+
// ── 6.2. v9.x Phase 2b — Spec Approval ─────────────────────────────────
|
|
357
|
+
// SpecGenerator removed (Spec 1702: 0% real-world acceptance → dead code).
|
|
358
|
+
// SpecApproval retained for the hand-written path: planner agent calls
|
|
359
|
+
// `cf spec register`, user replies "批准 <token>" → daemon short-circuits.
|
|
360
|
+
const specApproval = new SpecApproval(storage);
|
|
361
|
+
// Spec 1200 (2026-05-28): IntentEngine + WorkflowRecommender removed.
|
|
362
|
+
// Decision 3baa0e7c Batch 1 (2026-06-01): deprecated `_workflowRecommender`
|
|
363
|
+
// and `_intentEngine` ctor positions cleaned up; specApproval now arg 5.
|
|
364
|
+
const userPromptHandler = new UserPromptHandler(resume, conventionExtractor, storage, skillRegistry, specApproval);
|
|
365
|
+
// Phase 1: PreToolUseHandler runs in dry_run mode unless
|
|
366
|
+
// `pre_tool_intercept.enabled` is flipped on via `cf config set`.
|
|
367
|
+
//
|
|
368
|
+
// Constructed BEFORE StopHandler so the latter can receive it as its 8th
|
|
369
|
+
// arg for the D-1 clearSession wiring (memory-leak fix).
|
|
370
|
+
const preToolUseHandler = new PreToolUseHandler(storage, configStore, ruleRegistry);
|
|
142
371
|
const handlers = {
|
|
143
372
|
UserPromptSubmit: userPromptHandler,
|
|
144
|
-
|
|
145
|
-
|
|
373
|
+
// Phase 6: configStore wired so agent_writeback.enabled flag is probed
|
|
374
|
+
// on every Write/Edit (default OFF; opt-in via `cf config set`).
|
|
375
|
+
PostToolUse: new PostToolUseHandler(storage, configStore),
|
|
376
|
+
Stop: new StopHandler(exporter, resume, taskSegmenter, storage, invocationGuard, userPromptHandler, violationsManager,
|
|
377
|
+
// D-1: clearSession on PreToolUseHandler.editedFilesCache at Stop time
|
|
378
|
+
// (fixes per-session Set leak across long-running daemons).
|
|
379
|
+
preToolUseHandler),
|
|
380
|
+
PreToolUse: preToolUseHandler,
|
|
146
381
|
};
|
|
147
382
|
// ── 7. Event handler ───────────────────────────────────────────────────────
|
|
148
383
|
const handleEvent = async (event) => {
|
|
@@ -165,15 +400,27 @@ export async function startDaemon(foreground = false, options = {}) {
|
|
|
165
400
|
// Task segmentation: UserPromptSubmit starts/continues tasks
|
|
166
401
|
const prompt = getUserPrompt(event);
|
|
167
402
|
if (event.hook_type === 'UserPromptSubmit' && prompt) {
|
|
168
|
-
taskSegmenter.
|
|
403
|
+
const decision = taskSegmenter.processPromptWithBoundary(event.session_id, prompt, event.timestamp, event.event_id);
|
|
404
|
+
// decision 265f59d5: ambiguous merge → hand off to the async LLM
|
|
405
|
+
// classifier. fire-and-forget: NOT awaited, never blocks the hook
|
|
406
|
+
// response. The classifier internally re-checks idempotency + the
|
|
407
|
+
// event's current FK before any re-attribution.
|
|
408
|
+
if (decision.ambiguous) {
|
|
409
|
+
void boundaryClassifier.classify(decision.ambiguous, storage);
|
|
410
|
+
}
|
|
169
411
|
}
|
|
170
412
|
else if (event.event_id) {
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
413
|
+
// Spec 1713 §10.3: forward hookType / toolName so the segmenter can
|
|
414
|
+
// detect sub-agent return (PostToolUse Task/Agent) and arm the
|
|
415
|
+
// "next prompt = new task" flag.
|
|
416
|
+
taskSegmenter.linkEvent(event.session_id, event.event_id, event.timestamp, {
|
|
417
|
+
hookType: event.hook_type,
|
|
418
|
+
toolName: event.tool_name,
|
|
419
|
+
});
|
|
176
420
|
}
|
|
421
|
+
// PreToolUse / PostToolUse / UserPromptSubmit / Stop all routed via routeEvent.
|
|
422
|
+
// PreToolUse now goes through PreToolUseHandler (Phase 1 rule engine),
|
|
423
|
+
// which honors `pre_tool_intercept.enabled` flag (dry_run when OFF).
|
|
177
424
|
const result = await routeEvent(event, handlers);
|
|
178
425
|
if (result) {
|
|
179
426
|
const handlerName = event.hook_type + 'Handler';
|
|
@@ -190,14 +437,30 @@ export async function startDaemon(foreground = false, options = {}) {
|
|
|
190
437
|
console.error(`\x1b[36m[${handlerName}] systemMessage (${result.systemMessage.length} chars): ${preview}\x1b[0m`);
|
|
191
438
|
}
|
|
192
439
|
if (result.additionalContext) {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
440
|
+
// P2 dedup (audit e888352d): the UserPromptSubmit additionalContext is
|
|
441
|
+
// a MERGE of resume/convention + the KB block, but the KB block is
|
|
442
|
+
// ALSO recorded as its own fine-grained `:kb` injection row by
|
|
443
|
+
// UserPromptHandler (the canonical row ~10 metric queries read). Two
|
|
444
|
+
// rows carrying the same KB content inflated the injection count ~15%.
|
|
445
|
+
//
|
|
446
|
+
// Fix: record under the generic handler name ONLY the portion not
|
|
447
|
+
// already captured by a sibling `:kb` row for this event (i.e. the
|
|
448
|
+
// resume/convention context). Delivery to Claude Code is unchanged —
|
|
449
|
+
// result.additionalContext still carries the full merged text; only
|
|
450
|
+
// the *recorded* row is de-duplicated. If nothing remains after
|
|
451
|
+
// stripping the KB block, skip the write entirely (the `:kb` row is
|
|
452
|
+
// the sole record of this injection).
|
|
453
|
+
const recordContent = stripAlreadyRecordedKb(storage, event.event_id, result.additionalContext);
|
|
454
|
+
if (recordContent) {
|
|
455
|
+
storage.writeInjection({
|
|
456
|
+
event_id: event.event_id,
|
|
457
|
+
session_id: event.session_id,
|
|
458
|
+
timestamp: event.timestamp,
|
|
459
|
+
source_handler: handlerName,
|
|
460
|
+
injection_type: 'additionalContext',
|
|
461
|
+
content: recordContent,
|
|
462
|
+
});
|
|
463
|
+
}
|
|
201
464
|
const preview = result.additionalContext.slice(0, 200).replace(/\n/g, ' ');
|
|
202
465
|
console.error(`\x1b[36m[${handlerName}] additionalContext: ${preview}\x1b[0m`);
|
|
203
466
|
}
|
|
@@ -217,7 +480,21 @@ export async function startDaemon(foreground = false, options = {}) {
|
|
|
217
480
|
// setImmediate ensures the event loop has had a chance to process the listen
|
|
218
481
|
// callback before we touch storage (not strictly required, but defensive).
|
|
219
482
|
setImmediate(() => {
|
|
220
|
-
replayQueue(storage
|
|
483
|
+
replayQueue(storage, {
|
|
484
|
+
// Mirror handleEvent line 480-484: feed replayed UserPromptSubmit events
|
|
485
|
+
// into TaskSegmenter so the tasks table gets populated. We do NOT route
|
|
486
|
+
// through full handleEvent — KB inject / decision-hint / skill-match
|
|
487
|
+
// would all be stale (no live hook is waiting on the response).
|
|
488
|
+
onReplayed: (event) => {
|
|
489
|
+
const prompt = getUserPrompt(event);
|
|
490
|
+
if (event.hook_type === 'UserPromptSubmit' && prompt) {
|
|
491
|
+
taskSegmenter.processPrompt(event.session_id, prompt, event.timestamp, event.event_id);
|
|
492
|
+
}
|
|
493
|
+
else if (event.event_id) {
|
|
494
|
+
taskSegmenter.linkEvent(event.session_id, event.event_id, event.timestamp);
|
|
495
|
+
}
|
|
496
|
+
},
|
|
497
|
+
}).then(({ replayed, skipped, dead }) => {
|
|
221
498
|
if (replayed > 0 || skipped > 0 || dead > 0) {
|
|
222
499
|
logger.info(`[Queue] Replay: ${replayed} replayed, ${skipped} skipped (dup), ${dead} dead-lettered`);
|
|
223
500
|
}
|
|
@@ -230,6 +507,20 @@ export async function startDaemon(foreground = false, options = {}) {
|
|
|
230
507
|
const webEnabled = options.web ?? (process.env.FORGE_DAEMON_NO_WEB === '1' ? false : config.web.enabled);
|
|
231
508
|
let webServer = null;
|
|
232
509
|
if (webEnabled) {
|
|
510
|
+
// D-2: lazy-load BuildManager + WebServer so the daemon has zero static
|
|
511
|
+
// edges into `src/web/` (matches the documented core ← {daemon, web}
|
|
512
|
+
// peer-layering). BuildManager's storage injection is safe to defer
|
|
513
|
+
// because the only consumer is `web/routes/knowledge.ts`, which runs
|
|
514
|
+
// only after `WebServer.start()` returns (post-setStorage).
|
|
515
|
+
const { buildManager } = await import('../web/services/build-manager.js');
|
|
516
|
+
buildManager.setStorage(storage);
|
|
517
|
+
// Decision 4e592120 (invariant b): inject the live SkillRegistry into the
|
|
518
|
+
// distill manager so a Web-triggered distillation can reload() it on done
|
|
519
|
+
// — the dashboard skill list refreshes with no daemon restart. Lazy import
|
|
520
|
+
// keeps the documented core ← {daemon, web} peer-layering (no static daemon
|
|
521
|
+
// edge into src/web/).
|
|
522
|
+
const { distillManager } = await import('../web/services/distill-manager.js');
|
|
523
|
+
distillManager.setRegistry(skillRegistry);
|
|
233
524
|
const { WebServer } = await import('../web/server.js');
|
|
234
525
|
webServer = new WebServer({
|
|
235
526
|
port: config.web.port,
|
|
@@ -237,7 +528,19 @@ export async function startDaemon(foreground = false, options = {}) {
|
|
|
237
528
|
skillRegistry,
|
|
238
529
|
invocationGuard,
|
|
239
530
|
});
|
|
240
|
-
|
|
531
|
+
// Defense-in-depth (task-link orphan fix, 2026-06-02): a failed web-server
|
|
532
|
+
// start (most commonly EADDRINUSE on port 3721 when another daemon already
|
|
533
|
+
// holds it) MUST NOT propagate to `process.exit(1)`. The core daemon job is
|
|
534
|
+
// the socket event pipeline, which is already listening by now; killing the
|
|
535
|
+
// process here is what previously created the launchd crash loop + socket
|
|
536
|
+
// theft. Log and continue with web disabled.
|
|
537
|
+
try {
|
|
538
|
+
await webServer.start();
|
|
539
|
+
}
|
|
540
|
+
catch (err) {
|
|
541
|
+
logger.error(`[Web] Server failed to start (continuing without web UI): ${err instanceof Error ? err.message : err}`);
|
|
542
|
+
webServer = null;
|
|
543
|
+
}
|
|
241
544
|
}
|
|
242
545
|
else {
|
|
243
546
|
logger.info('[Web] Server disabled (--no-web or config.web.enabled=false)');
|
|
@@ -249,11 +552,14 @@ export async function startDaemon(foreground = false, options = {}) {
|
|
|
249
552
|
return;
|
|
250
553
|
shuttingDown = true;
|
|
251
554
|
logger.info('Shutting down...');
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
555
|
+
// D R-A (2026-05-29): removed `[AI Stats]` shutdown line — there was no
|
|
556
|
+
// consumer (dead log), and the only producer (ClaudeProvider instance)
|
|
557
|
+
// was deleted with the §4 block above. Master spec 0902 §2.4.4.
|
|
558
|
+
heartbeatHandle.stop();
|
|
559
|
+
// Wave 3a R3: all six maintenance intervals + four initial one-shot
|
|
560
|
+
// timeouts are now torn down by the scheduler handle (same set as before).
|
|
561
|
+
maintenanceHandle.stop();
|
|
562
|
+
codegraphStore.close();
|
|
257
563
|
if (webServer)
|
|
258
564
|
await webServer.stop();
|
|
259
565
|
await server.close();
|
|
@@ -271,6 +577,53 @@ export async function startDaemon(foreground = false, options = {}) {
|
|
|
271
577
|
process.stdout.write('Press Ctrl+C to stop\n');
|
|
272
578
|
}
|
|
273
579
|
}
|
|
580
|
+
/**
|
|
581
|
+
* P2 dedup helper (audit e888352d).
|
|
582
|
+
*
|
|
583
|
+
* The merged UserPromptSubmit `additionalContext` recorded under the generic
|
|
584
|
+
* `<hook>Handler` source_handler often re-contains the KB block, which
|
|
585
|
+
* UserPromptHandler already recorded as its own `UserPromptSubmitHandler:kb`
|
|
586
|
+
* injection row. That double-count inflated injection metrics ~15%.
|
|
587
|
+
*
|
|
588
|
+
* Given the full merged additionalContext, this removes any sibling `:kb`
|
|
589
|
+
* injection content already recorded for the same `event_id`, returning the
|
|
590
|
+
* remaining context (resume/convention) to record under the generic handler.
|
|
591
|
+
* Returns null when nothing meaningful remains (→ caller skips the write, the
|
|
592
|
+
* `:kb` row being the sole record).
|
|
593
|
+
*
|
|
594
|
+
* Storage failures degrade gracefully to "record the full merged content"
|
|
595
|
+
* (no worse than the pre-fix behaviour).
|
|
596
|
+
*/
|
|
597
|
+
export function stripAlreadyRecordedKb(storage, eventId, merged) {
|
|
598
|
+
if (!eventId)
|
|
599
|
+
return merged;
|
|
600
|
+
let kbRows;
|
|
601
|
+
try {
|
|
602
|
+
kbRows = storage.queryInjections({
|
|
603
|
+
event_id: eventId,
|
|
604
|
+
source_handler: 'UserPromptSubmitHandler:kb',
|
|
605
|
+
limit: 5,
|
|
606
|
+
});
|
|
607
|
+
}
|
|
608
|
+
catch {
|
|
609
|
+
return merged;
|
|
610
|
+
}
|
|
611
|
+
if (kbRows.length === 0)
|
|
612
|
+
return merged;
|
|
613
|
+
let remaining = merged;
|
|
614
|
+
for (const row of kbRows) {
|
|
615
|
+
if (!row.content)
|
|
616
|
+
continue;
|
|
617
|
+
// The handler joins context parts with '\n\n'; strip the KB block plus an
|
|
618
|
+
// adjacent separator so we don't leave a dangling blank line.
|
|
619
|
+
remaining = remaining
|
|
620
|
+
.replace(`${row.content}\n\n`, '')
|
|
621
|
+
.replace(`\n\n${row.content}`, '')
|
|
622
|
+
.replace(row.content, '');
|
|
623
|
+
}
|
|
624
|
+
remaining = remaining.trim();
|
|
625
|
+
return remaining.length > 0 ? remaining : null;
|
|
626
|
+
}
|
|
274
627
|
// Allow running as standalone script (spawned by `cf daemon start`)
|
|
275
628
|
if (process.env.FORGE_DAEMON_FOREGROUND === '1') {
|
|
276
629
|
startDaemon(true).catch((err) => {
|