@winspan/claude-forge 8.54.4 → 9.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DEVELOPMENT.md +723 -46
- package/README.md +166 -21
- package/dist/catalogs/agents.json +67 -0
- package/dist/catalogs/skills.json +306 -0
- package/dist/claudemd/claudemd-generator.d.ts +45 -45
- package/dist/claudemd/claudemd-generator.d.ts.map +1 -1
- package/dist/claudemd/claudemd-generator.js +128 -449
- package/dist/claudemd/claudemd-generator.js.map +1 -1
- package/dist/claudemd/index.d.ts +14 -4
- package/dist/claudemd/index.d.ts.map +1 -1
- package/dist/claudemd/index.js +15 -4
- package/dist/claudemd/index.js.map +1 -1
- package/dist/claudemd/resume-manager.d.ts.map +1 -1
- package/dist/claudemd/resume-manager.js +37 -9
- package/dist/claudemd/resume-manager.js.map +1 -1
- package/dist/claudemd/templates/swarm-protocol.md +35 -186
- package/dist/claudemd/violations-manager.d.ts +40 -0
- package/dist/claudemd/violations-manager.d.ts.map +1 -0
- package/dist/claudemd/violations-manager.js +106 -0
- package/dist/claudemd/violations-manager.js.map +1 -0
- package/dist/cli/commands/admin.d.ts +15 -0
- package/dist/cli/commands/admin.d.ts.map +1 -0
- package/dist/cli/commands/admin.js +177 -0
- package/dist/cli/commands/admin.js.map +1 -0
- package/dist/cli/commands/agent.d.ts +169 -0
- package/dist/cli/commands/agent.d.ts.map +1 -0
- package/dist/cli/commands/agent.js +690 -0
- package/dist/cli/commands/agent.js.map +1 -0
- package/dist/cli/commands/agents.d.ts +18 -0
- package/dist/cli/commands/agents.d.ts.map +1 -0
- package/dist/cli/commands/agents.js +160 -0
- package/dist/cli/commands/agents.js.map +1 -0
- package/dist/cli/commands/bypass.d.ts +18 -0
- package/dist/cli/commands/bypass.d.ts.map +1 -0
- package/dist/cli/commands/bypass.js +87 -0
- package/dist/cli/commands/bypass.js.map +1 -0
- package/dist/cli/commands/claudemd.d.ts +60 -0
- package/dist/cli/commands/claudemd.d.ts.map +1 -1
- package/dist/cli/commands/claudemd.js +174 -37
- package/dist/cli/commands/claudemd.js.map +1 -1
- package/dist/cli/commands/codegraph.d.ts +17 -0
- package/dist/cli/commands/codegraph.d.ts.map +1 -0
- package/dist/cli/commands/codegraph.js +263 -0
- package/dist/cli/commands/codegraph.js.map +1 -0
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +94 -1
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/daemon.d.ts +39 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -1
- package/dist/cli/commands/daemon.js +167 -20
- package/dist/cli/commands/daemon.js.map +1 -1
- package/dist/cli/commands/decisions.d.ts +129 -0
- package/dist/cli/commands/decisions.d.ts.map +1 -0
- package/dist/cli/commands/decisions.js +706 -0
- package/dist/cli/commands/decisions.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +29 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +124 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/entropy.d.ts +35 -0
- package/dist/cli/commands/entropy.d.ts.map +1 -0
- package/dist/cli/commands/entropy.js +121 -0
- package/dist/cli/commands/entropy.js.map +1 -0
- package/dist/cli/commands/executions.d.ts +1 -0
- package/dist/cli/commands/executions.d.ts.map +1 -1
- package/dist/cli/commands/executions.js +12 -2
- package/dist/cli/commands/executions.js.map +1 -1
- package/dist/cli/commands/fix.d.ts +31 -0
- package/dist/cli/commands/fix.d.ts.map +1 -0
- package/dist/cli/commands/fix.js +108 -0
- package/dist/cli/commands/fix.js.map +1 -0
- package/dist/cli/commands/governance.d.ts +21 -0
- package/dist/cli/commands/governance.d.ts.map +1 -0
- package/dist/cli/commands/governance.js +60 -0
- package/dist/cli/commands/governance.js.map +1 -0
- package/dist/cli/commands/init.d.ts +27 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +158 -146
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/insights-goal-check.d.ts +54 -0
- package/dist/cli/commands/insights-goal-check.d.ts.map +1 -0
- package/dist/cli/commands/insights-goal-check.js +318 -0
- package/dist/cli/commands/insights-goal-check.js.map +1 -0
- package/dist/cli/commands/insights.d.ts +15 -0
- package/dist/cli/commands/insights.d.ts.map +1 -0
- package/dist/cli/commands/insights.js +127 -0
- package/dist/cli/commands/insights.js.map +1 -0
- package/dist/cli/commands/knowledge.d.ts +117 -0
- package/dist/cli/commands/knowledge.d.ts.map +1 -0
- package/dist/cli/commands/knowledge.js +1070 -0
- package/dist/cli/commands/knowledge.js.map +1 -0
- package/dist/cli/commands/loop.d.ts +95 -0
- package/dist/cli/commands/loop.d.ts.map +1 -0
- package/dist/cli/commands/loop.js +408 -0
- package/dist/cli/commands/loop.js.map +1 -0
- package/dist/cli/commands/maintenance.d.ts +33 -0
- package/dist/cli/commands/maintenance.d.ts.map +1 -0
- package/dist/cli/commands/maintenance.js +75 -0
- package/dist/cli/commands/maintenance.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +22 -11
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +93 -5
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/menu.d.ts.map +1 -1
- package/dist/cli/commands/menu.js +10 -184
- package/dist/cli/commands/menu.js.map +1 -1
- package/dist/cli/commands/project.d.ts +98 -0
- package/dist/cli/commands/project.d.ts.map +1 -0
- package/dist/cli/commands/project.js +382 -0
- package/dist/cli/commands/project.js.map +1 -0
- package/dist/cli/commands/skills.d.ts +131 -0
- package/dist/cli/commands/skills.d.ts.map +1 -1
- package/dist/cli/commands/skills.js +404 -118
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/spec.d.ts +40 -0
- package/dist/cli/commands/spec.d.ts.map +1 -0
- package/dist/cli/commands/spec.js +49 -0
- package/dist/cli/commands/spec.js.map +1 -0
- package/dist/cli/commands/stats.d.ts.map +1 -1
- package/dist/cli/commands/stats.js +11 -3
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +17 -2
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/trace.d.ts.map +1 -1
- package/dist/cli/commands/trace.js +4 -9
- package/dist/cli/commands/trace.js.map +1 -1
- package/dist/cli/commands/violations.d.ts +14 -0
- package/dist/cli/commands/violations.d.ts.map +1 -0
- package/dist/cli/commands/violations.js +43 -0
- package/dist/cli/commands/violations.js.map +1 -0
- package/dist/cli/index.js +34 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/hook-manager.d.ts +1 -1
- package/dist/cli/init/hook-manager.d.ts.map +1 -1
- package/dist/cli/init/hook-manager.js +6 -0
- package/dist/cli/init/hook-manager.js.map +1 -1
- package/dist/cli/utils/resolve-session.d.ts +32 -0
- package/dist/cli/utils/resolve-session.d.ts.map +1 -0
- package/dist/cli/utils/resolve-session.js +39 -0
- package/dist/cli/utils/resolve-session.js.map +1 -0
- package/dist/core/config.d.ts +4 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +11 -23
- package/dist/core/config.js.map +1 -1
- package/dist/core/constants.d.ts +51 -13
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +63 -13
- package/dist/core/constants.js.map +1 -1
- package/dist/core/diagnostics/checks.d.ts +151 -0
- package/dist/core/diagnostics/checks.d.ts.map +1 -0
- package/dist/core/diagnostics/checks.js +766 -0
- package/dist/core/diagnostics/checks.js.map +1 -0
- package/dist/core/diagnostics/daemon-status.d.ts +77 -0
- package/dist/core/diagnostics/daemon-status.d.ts.map +1 -0
- package/dist/core/diagnostics/daemon-status.js +113 -0
- package/dist/core/diagnostics/daemon-status.js.map +1 -0
- package/dist/core/diagnostics/entropy-checks.d.ts +83 -0
- package/dist/core/diagnostics/entropy-checks.d.ts.map +1 -0
- package/dist/core/diagnostics/entropy-checks.js +400 -0
- package/dist/core/diagnostics/entropy-checks.js.map +1 -0
- package/dist/core/diagnostics/fix-runner.d.ts +54 -0
- package/dist/core/diagnostics/fix-runner.d.ts.map +1 -0
- package/dist/core/diagnostics/fix-runner.js +90 -0
- package/dist/core/diagnostics/fix-runner.js.map +1 -0
- package/dist/core/diagnostics/heartbeat-reader.d.ts +28 -0
- package/dist/core/diagnostics/heartbeat-reader.d.ts.map +1 -0
- package/dist/core/diagnostics/heartbeat-reader.js +50 -0
- package/dist/core/diagnostics/heartbeat-reader.js.map +1 -0
- package/dist/core/diagnostics/knip-runner.d.ts +49 -0
- package/dist/core/diagnostics/knip-runner.d.ts.map +1 -0
- package/dist/core/diagnostics/knip-runner.js +100 -0
- package/dist/core/diagnostics/knip-runner.js.map +1 -0
- package/dist/core/diagnostics/markers.d.ts +96 -0
- package/dist/core/diagnostics/markers.d.ts.map +1 -0
- package/dist/core/diagnostics/markers.js +153 -0
- package/dist/core/diagnostics/markers.js.map +1 -0
- package/dist/core/event-fields.d.ts +27 -0
- package/dist/core/event-fields.d.ts.map +1 -1
- package/dist/core/event-fields.js +43 -0
- package/dist/core/event-fields.js.map +1 -1
- package/dist/core/governance/global-inject.d.ts +90 -0
- package/dist/core/governance/global-inject.d.ts.map +1 -0
- package/dist/core/governance/global-inject.js +184 -0
- package/dist/core/governance/global-inject.js.map +1 -0
- package/dist/core/insights/agent-anchor-guard.d.ts +77 -0
- package/dist/core/insights/agent-anchor-guard.d.ts.map +1 -0
- package/dist/core/insights/agent-anchor-guard.js +119 -0
- package/dist/core/insights/agent-anchor-guard.js.map +1 -0
- package/dist/core/insights/agent-distill-context.d.ts +55 -0
- package/dist/core/insights/agent-distill-context.d.ts.map +1 -0
- package/dist/core/insights/agent-distill-context.js +146 -0
- package/dist/core/insights/agent-distill-context.js.map +1 -0
- package/dist/core/insights/agent-distill-spawn.d.ts +56 -0
- package/dist/core/insights/agent-distill-spawn.d.ts.map +1 -0
- package/dist/core/insights/agent-distill-spawn.js +179 -0
- package/dist/core/insights/agent-distill-spawn.js.map +1 -0
- package/dist/core/insights/agent-drift.d.ts +66 -0
- package/dist/core/insights/agent-drift.d.ts.map +1 -0
- package/dist/core/insights/agent-drift.js +109 -0
- package/dist/core/insights/agent-drift.js.map +1 -0
- package/dist/core/insights/agent-evolution-sources.d.ts +21 -0
- package/dist/core/insights/agent-evolution-sources.d.ts.map +1 -0
- package/dist/core/insights/agent-evolution-sources.js +36 -0
- package/dist/core/insights/agent-evolution-sources.js.map +1 -0
- package/dist/core/insights/agent-health.d.ts +142 -0
- package/dist/core/insights/agent-health.d.ts.map +1 -0
- package/dist/core/insights/agent-health.js +296 -0
- package/dist/core/insights/agent-health.js.map +1 -0
- package/dist/core/insights/agent-patch-apply.d.ts +45 -0
- package/dist/core/insights/agent-patch-apply.d.ts.map +1 -0
- package/dist/core/insights/agent-patch-apply.js +165 -0
- package/dist/core/insights/agent-patch-apply.js.map +1 -0
- package/dist/core/insights/agent-suggest.d.ts +128 -0
- package/dist/core/insights/agent-suggest.d.ts.map +1 -0
- package/dist/core/insights/agent-suggest.js +284 -0
- package/dist/core/insights/agent-suggest.js.map +1 -0
- package/dist/core/insights/coverage-tiers.d.ts +46 -0
- package/dist/core/insights/coverage-tiers.d.ts.map +1 -0
- package/dist/core/insights/coverage-tiers.js +95 -0
- package/dist/core/insights/coverage-tiers.js.map +1 -0
- package/dist/core/insights/experience-extractor.d.ts +60 -0
- package/dist/core/insights/experience-extractor.d.ts.map +1 -0
- package/dist/core/insights/experience-extractor.js +319 -0
- package/dist/core/insights/experience-extractor.js.map +1 -0
- package/dist/core/insights/violation-reporter.d.ts +149 -0
- package/dist/core/insights/violation-reporter.d.ts.map +1 -0
- package/dist/core/insights/violation-reporter.js +391 -0
- package/dist/core/insights/violation-reporter.js.map +1 -0
- package/dist/core/loop/loop-engine.d.ts +140 -0
- package/dist/core/loop/loop-engine.d.ts.map +1 -0
- package/dist/core/loop/loop-engine.js +266 -0
- package/dist/core/loop/loop-engine.js.map +1 -0
- package/dist/core/queue/index.d.ts +16 -3
- package/dist/core/queue/index.d.ts.map +1 -1
- package/dist/core/queue/index.js +16 -4
- package/dist/core/queue/index.js.map +1 -1
- package/dist/core/storage/base.d.ts +317 -0
- package/dist/core/storage/base.d.ts.map +1 -1
- package/dist/core/storage/base.js +1093 -0
- package/dist/core/storage/base.js.map +1 -1
- package/dist/core/storage/codec/tool-input-codec.d.ts +93 -0
- package/dist/core/storage/codec/tool-input-codec.d.ts.map +1 -0
- package/dist/core/storage/codec/tool-input-codec.js +159 -0
- package/dist/core/storage/codec/tool-input-codec.js.map +1 -0
- package/dist/core/storage/codegraph-types.d.ts +79 -0
- package/dist/core/storage/codegraph-types.d.ts.map +1 -0
- package/dist/core/storage/codegraph-types.js +14 -0
- package/dist/core/storage/codegraph-types.js.map +1 -0
- package/dist/core/storage/codegraph.d.ts +186 -0
- package/dist/core/storage/codegraph.d.ts.map +1 -0
- package/dist/core/storage/codegraph.js +452 -0
- package/dist/core/storage/codegraph.js.map +1 -0
- package/dist/core/storage/decisions.d.ts +387 -0
- package/dist/core/storage/decisions.d.ts.map +1 -0
- package/dist/core/storage/decisions.js +534 -0
- package/dist/core/storage/decisions.js.map +1 -0
- package/dist/core/storage/events.d.ts +239 -8
- package/dist/core/storage/events.d.ts.map +1 -1
- package/dist/core/storage/events.js +705 -39
- package/dist/core/storage/events.js.map +1 -1
- package/dist/core/storage/feedback.d.ts +111 -0
- package/dist/core/storage/feedback.d.ts.map +1 -0
- package/dist/core/storage/feedback.js +186 -0
- package/dist/core/storage/feedback.js.map +1 -0
- package/dist/core/storage/forge-config.d.ts +40 -0
- package/dist/core/storage/forge-config.d.ts.map +1 -0
- package/dist/core/storage/forge-config.js +65 -0
- package/dist/core/storage/forge-config.js.map +1 -0
- package/dist/core/storage/injections.d.ts +68 -0
- package/dist/core/storage/injections.d.ts.map +1 -1
- package/dist/core/storage/injections.js +131 -5
- package/dist/core/storage/injections.js.map +1 -1
- package/dist/core/storage/knowledge.d.ts +332 -0
- package/dist/core/storage/knowledge.d.ts.map +1 -0
- package/dist/core/storage/knowledge.js +589 -0
- package/dist/core/storage/knowledge.js.map +1 -0
- package/dist/core/storage/maintenance.d.ts +36 -9
- package/dist/core/storage/maintenance.d.ts.map +1 -1
- package/dist/core/storage/maintenance.js +56 -24
- package/dist/core/storage/maintenance.js.map +1 -1
- package/dist/core/storage/pipeline-rollup.d.ts +111 -0
- package/dist/core/storage/pipeline-rollup.d.ts.map +1 -0
- package/dist/core/storage/pipeline-rollup.js +432 -0
- package/dist/core/storage/pipeline-rollup.js.map +1 -0
- package/dist/core/storage/routing.d.ts +50 -3
- package/dist/core/storage/routing.d.ts.map +1 -1
- package/dist/core/storage/routing.js +131 -10
- package/dist/core/storage/routing.js.map +1 -1
- package/dist/core/storage/rows.d.ts +31 -8
- package/dist/core/storage/rows.d.ts.map +1 -1
- package/dist/core/storage/schema.sql +367 -23
- package/dist/core/storage/sessions.d.ts +136 -0
- package/dist/core/storage/sessions.d.ts.map +1 -1
- package/dist/core/storage/sessions.js +352 -15
- package/dist/core/storage/sessions.js.map +1 -1
- package/dist/core/storage/skills.d.ts +160 -0
- package/dist/core/storage/skills.d.ts.map +1 -1
- package/dist/core/storage/skills.js +368 -7
- package/dist/core/storage/skills.js.map +1 -1
- package/dist/core/storage/sqlite.d.ts +309 -20
- package/dist/core/storage/sqlite.d.ts.map +1 -1
- package/dist/core/storage/sqlite.js +523 -16
- package/dist/core/storage/sqlite.js.map +1 -1
- package/dist/core/storage/tasks.d.ts +744 -2
- package/dist/core/storage/tasks.d.ts.map +1 -1
- package/dist/core/storage/tasks.js +1691 -17
- package/dist/core/storage/tasks.js.map +1 -1
- package/dist/core/storage/tool-intercepts.d.ts +69 -0
- package/dist/core/storage/tool-intercepts.d.ts.map +1 -0
- package/dist/core/storage/tool-intercepts.js +116 -0
- package/dist/core/storage/tool-intercepts.js.map +1 -0
- package/dist/core/types.d.ts +136 -18
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +10 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/utils/backup.d.ts +81 -0
- package/dist/core/utils/backup.d.ts.map +1 -0
- package/dist/core/utils/backup.js +98 -0
- package/dist/core/utils/backup.js.map +1 -0
- package/dist/core/utils/binary-paths.d.ts +124 -0
- package/dist/core/utils/binary-paths.d.ts.map +1 -0
- package/dist/core/utils/binary-paths.js +218 -0
- package/dist/core/utils/binary-paths.js.map +1 -0
- package/dist/core/utils/bypass-token.d.ts +75 -0
- package/dist/core/utils/bypass-token.d.ts.map +1 -0
- package/dist/core/utils/bypass-token.js +133 -0
- package/dist/core/utils/bypass-token.js.map +1 -0
- package/dist/core/utils/cc-builtin-agents.d.ts +3 -0
- package/dist/core/utils/cc-builtin-agents.d.ts.map +1 -0
- package/dist/core/utils/cc-builtin-agents.js +29 -0
- package/dist/core/utils/cc-builtin-agents.js.map +1 -0
- package/dist/core/utils/claude-cli-resolver.d.ts +26 -0
- package/dist/core/utils/claude-cli-resolver.d.ts.map +1 -0
- package/dist/core/utils/claude-cli-resolver.js +115 -0
- package/dist/core/utils/claude-cli-resolver.js.map +1 -0
- package/dist/core/utils/claude-cli-spawn.d.ts +106 -0
- package/dist/core/utils/claude-cli-spawn.d.ts.map +1 -0
- package/dist/core/utils/claude-cli-spawn.js +219 -0
- package/dist/core/utils/claude-cli-spawn.js.map +1 -0
- package/dist/core/utils/forge-resume-block.d.ts.map +1 -1
- package/dist/core/utils/forge-resume-block.js +3 -2
- package/dist/core/utils/forge-resume-block.js.map +1 -1
- package/dist/core/utils/logger.d.ts +15 -3
- package/dist/core/utils/logger.d.ts.map +1 -1
- package/dist/core/utils/logger.js +20 -2
- package/dist/core/utils/logger.js.map +1 -1
- package/dist/core/utils/noise-prompt.d.ts +97 -0
- package/dist/core/utils/noise-prompt.d.ts.map +1 -0
- package/dist/core/utils/noise-prompt.js +127 -0
- package/dist/core/utils/noise-prompt.js.map +1 -0
- package/dist/core/utils/path.d.ts +0 -4
- package/dist/core/utils/path.d.ts.map +1 -1
- package/dist/core/utils/path.js +0 -7
- package/dist/core/utils/path.js.map +1 -1
- package/dist/core/utils/time.d.ts +67 -0
- package/dist/core/utils/time.d.ts.map +1 -1
- package/dist/core/utils/time.js +147 -0
- package/dist/core/utils/time.js.map +1 -1
- package/dist/daemon/agent-sync.d.ts +24 -0
- package/dist/daemon/agent-sync.d.ts.map +1 -0
- package/dist/daemon/agent-sync.js +114 -0
- package/dist/daemon/agent-sync.js.map +1 -0
- package/dist/daemon/config-store.d.ts +55 -0
- package/dist/daemon/config-store.d.ts.map +1 -0
- package/dist/daemon/config-store.js +146 -0
- package/dist/daemon/config-store.js.map +1 -0
- package/dist/daemon/event-parser.d.ts +22 -0
- package/dist/daemon/event-parser.d.ts.map +1 -1
- package/dist/daemon/event-parser.js +54 -3
- package/dist/daemon/event-parser.js.map +1 -1
- package/dist/daemon/handlers/history-exporter.d.ts.map +1 -1
- package/dist/daemon/handlers/history-exporter.js +9 -8
- package/dist/daemon/handlers/history-exporter.js.map +1 -1
- package/dist/daemon/handlers/post-tool-use.d.ts +66 -4
- package/dist/daemon/handlers/post-tool-use.d.ts.map +1 -1
- package/dist/daemon/handlers/post-tool-use.js +221 -8
- package/dist/daemon/handlers/post-tool-use.js.map +1 -1
- package/dist/daemon/handlers/pre-tool-use.d.ts +181 -0
- package/dist/daemon/handlers/pre-tool-use.d.ts.map +1 -0
- package/dist/daemon/handlers/pre-tool-use.js +618 -0
- package/dist/daemon/handlers/pre-tool-use.js.map +1 -0
- package/dist/daemon/handlers/stop.d.ts +55 -7
- package/dist/daemon/handlers/stop.d.ts.map +1 -1
- package/dist/daemon/handlers/stop.js +245 -8
- package/dist/daemon/handlers/stop.js.map +1 -1
- package/dist/daemon/handlers/user-prompt.d.ts +51 -14
- package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
- package/dist/daemon/handlers/user-prompt.js +223 -95
- package/dist/daemon/handlers/user-prompt.js.map +1 -1
- package/dist/daemon/handlers/violation-content-backfill.d.ts +76 -0
- package/dist/daemon/handlers/violation-content-backfill.d.ts.map +1 -0
- package/dist/daemon/handlers/violation-content-backfill.js +167 -0
- package/dist/daemon/handlers/violation-content-backfill.js.map +1 -0
- package/dist/daemon/hook-sync.d.ts.map +1 -1
- package/dist/daemon/hook-sync.js +2 -1
- package/dist/daemon/hook-sync.js.map +1 -1
- package/dist/daemon/index.d.ts +19 -0
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +439 -86
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/lifecycle.d.ts +48 -1
- package/dist/daemon/lifecycle.d.ts.map +1 -1
- package/dist/daemon/lifecycle.js +98 -2
- package/dist/daemon/lifecycle.js.map +1 -1
- package/dist/daemon/router.d.ts +4 -1
- package/dist/daemon/router.d.ts.map +1 -1
- package/dist/daemon/router.js +4 -2
- package/dist/daemon/router.js.map +1 -1
- package/dist/daemon/rules/defaults.d.ts +20 -0
- package/dist/daemon/rules/defaults.d.ts.map +1 -0
- package/dist/daemon/rules/defaults.js +779 -0
- package/dist/daemon/rules/defaults.js.map +1 -0
- package/dist/daemon/rules/registry.d.ts +47 -0
- package/dist/daemon/rules/registry.d.ts.map +1 -0
- package/dist/daemon/rules/registry.js +84 -0
- package/dist/daemon/rules/registry.js.map +1 -0
- package/dist/daemon/rules/types.d.ts +176 -0
- package/dist/daemon/rules/types.d.ts.map +1 -0
- package/dist/daemon/rules/types.js +15 -0
- package/dist/daemon/rules/types.js.map +1 -0
- package/dist/daemon/rules/whitelist.d.ts +101 -0
- package/dist/daemon/rules/whitelist.d.ts.map +1 -0
- package/dist/daemon/rules/whitelist.js +210 -0
- package/dist/daemon/rules/whitelist.js.map +1 -0
- package/dist/daemon/rules/workflow-defaults.d.ts +52 -0
- package/dist/daemon/rules/workflow-defaults.d.ts.map +1 -0
- package/dist/daemon/rules/workflow-defaults.js +521 -0
- package/dist/daemon/rules/workflow-defaults.js.map +1 -0
- package/dist/daemon/server.d.ts +11 -1
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +7 -1
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/services/codegraph-sync.d.ts +94 -0
- package/dist/daemon/services/codegraph-sync.d.ts.map +1 -0
- package/dist/daemon/services/codegraph-sync.js +159 -0
- package/dist/daemon/services/codegraph-sync.js.map +1 -0
- package/dist/daemon/services/context-injector.d.ts +34 -0
- package/dist/daemon/services/context-injector.d.ts.map +1 -0
- package/dist/daemon/services/context-injector.js +61 -0
- package/dist/daemon/services/context-injector.js.map +1 -0
- package/dist/daemon/services/decision-hint.d.ts +240 -0
- package/dist/daemon/services/decision-hint.d.ts.map +1 -0
- package/dist/daemon/services/decision-hint.js +562 -0
- package/dist/daemon/services/decision-hint.js.map +1 -0
- package/dist/daemon/services/event-ttl-sweep.d.ts +86 -0
- package/dist/daemon/services/event-ttl-sweep.d.ts.map +1 -0
- package/dist/daemon/services/event-ttl-sweep.js +124 -0
- package/dist/daemon/services/event-ttl-sweep.js.map +1 -0
- package/dist/daemon/services/feedback-aggregator.d.ts +167 -0
- package/dist/daemon/services/feedback-aggregator.d.ts.map +1 -0
- package/dist/daemon/services/feedback-aggregator.js +415 -0
- package/dist/daemon/services/feedback-aggregator.js.map +1 -0
- package/dist/daemon/services/heartbeat-writer.d.ts +46 -0
- package/dist/daemon/services/heartbeat-writer.d.ts.map +1 -0
- package/dist/daemon/services/heartbeat-writer.js +82 -0
- package/dist/daemon/services/heartbeat-writer.js.map +1 -0
- package/dist/daemon/services/idle-session-sweeper.d.ts +61 -0
- package/dist/daemon/services/idle-session-sweeper.d.ts.map +1 -0
- package/dist/daemon/services/idle-session-sweeper.js +94 -0
- package/dist/daemon/services/idle-session-sweeper.js.map +1 -0
- package/dist/daemon/services/idle-task-budget.d.ts +50 -0
- package/dist/daemon/services/idle-task-budget.d.ts.map +1 -0
- package/dist/daemon/services/idle-task-budget.js +72 -0
- package/dist/daemon/services/idle-task-budget.js.map +1 -0
- package/dist/daemon/services/intercept-revive.d.ts +60 -0
- package/dist/daemon/services/intercept-revive.d.ts.map +1 -0
- package/dist/daemon/services/intercept-revive.js +86 -0
- package/dist/daemon/services/intercept-revive.js.map +1 -0
- package/dist/daemon/services/intercept-rollback-guard.d.ts +105 -0
- package/dist/daemon/services/intercept-rollback-guard.d.ts.map +1 -0
- package/dist/daemon/services/intercept-rollback-guard.js +152 -0
- package/dist/daemon/services/intercept-rollback-guard.js.map +1 -0
- package/dist/daemon/services/intercept-timeout-sweeper.d.ts +58 -0
- package/dist/daemon/services/intercept-timeout-sweeper.d.ts.map +1 -0
- package/dist/daemon/services/intercept-timeout-sweeper.js +83 -0
- package/dist/daemon/services/intercept-timeout-sweeper.js.map +1 -0
- package/dist/daemon/services/kb-injector.d.ts +57 -0
- package/dist/daemon/services/kb-injector.d.ts.map +1 -0
- package/dist/daemon/services/kb-injector.js +148 -0
- package/dist/daemon/services/kb-injector.js.map +1 -0
- package/dist/daemon/services/kb-rebuild-scheduler.d.ts +95 -0
- package/dist/daemon/services/kb-rebuild-scheduler.d.ts.map +1 -0
- package/dist/daemon/services/kb-rebuild-scheduler.js +149 -0
- package/dist/daemon/services/kb-rebuild-scheduler.js.map +1 -0
- package/dist/daemon/services/loop-hint.d.ts +139 -0
- package/dist/daemon/services/loop-hint.d.ts.map +1 -0
- package/dist/daemon/services/loop-hint.js +272 -0
- package/dist/daemon/services/loop-hint.js.map +1 -0
- package/dist/daemon/services/outcome-classification-service.d.ts +49 -0
- package/dist/daemon/services/outcome-classification-service.d.ts.map +1 -0
- package/dist/daemon/services/outcome-classification-service.js +214 -0
- package/dist/daemon/services/outcome-classification-service.js.map +1 -0
- package/dist/daemon/services/outcome-classifier.d.ts +136 -0
- package/dist/daemon/services/outcome-classifier.d.ts.map +1 -0
- package/dist/daemon/services/outcome-classifier.js +178 -0
- package/dist/daemon/services/outcome-classifier.js.map +1 -0
- package/dist/daemon/services/outcome-nudge.d.ts +107 -0
- package/dist/daemon/services/outcome-nudge.d.ts.map +1 -0
- package/dist/daemon/services/outcome-nudge.js +242 -0
- package/dist/daemon/services/outcome-nudge.js.map +1 -0
- package/dist/daemon/services/spec-approval.d.ts +127 -0
- package/dist/daemon/services/spec-approval.d.ts.map +1 -0
- package/dist/daemon/services/spec-approval.js +216 -0
- package/dist/daemon/services/spec-approval.js.map +1 -0
- package/dist/daemon/services/spec-gate.d.ts +54 -0
- package/dist/daemon/services/spec-gate.d.ts.map +1 -0
- package/dist/daemon/services/spec-gate.js +113 -0
- package/dist/daemon/services/spec-gate.js.map +1 -0
- package/dist/daemon/services/task-boundary-classifier.d.ts +78 -0
- package/dist/daemon/services/task-boundary-classifier.d.ts.map +1 -0
- package/dist/daemon/services/task-boundary-classifier.js +202 -0
- package/dist/daemon/services/task-boundary-classifier.js.map +1 -0
- package/dist/daemon/services/task-segmenter.d.ts +230 -1
- package/dist/daemon/services/task-segmenter.d.ts.map +1 -1
- package/dist/daemon/services/task-segmenter.js +527 -17
- package/dist/daemon/services/task-segmenter.js.map +1 -1
- package/dist/daemon/skill-sync.d.ts +7 -2
- package/dist/daemon/skill-sync.d.ts.map +1 -1
- package/dist/daemon/skill-sync.js +114 -9
- package/dist/daemon/skill-sync.js.map +1 -1
- package/dist/daemon/startup/maintenance-schedulers.d.ts +68 -0
- package/dist/daemon/startup/maintenance-schedulers.d.ts.map +1 -0
- package/dist/daemon/startup/maintenance-schedulers.js +294 -0
- package/dist/daemon/startup/maintenance-schedulers.js.map +1 -0
- package/dist/daemon/templates/agents/agent-retro-distiller.md +106 -0
- package/dist/daemon/templates/agents/claudemd-writer.md +102 -0
- package/dist/daemon/templates/agents/coder.md +262 -0
- package/dist/daemon/templates/agents/decision-maker.md +546 -0
- package/dist/daemon/templates/agents/doc-reviewer.md +118 -0
- package/dist/daemon/templates/agents/harness-debug-full.md +196 -0
- package/dist/daemon/templates/agents/knowledge-builder.md +120 -0
- package/dist/daemon/templates/agents/patch-applier.md +145 -0
- package/dist/daemon/templates/agents/planner.md +217 -0
- package/dist/daemon/templates/agents/safety-net-implementer.md +278 -0
- package/dist/daemon/templates/agents/skill-distiller.md +114 -0
- package/dist/daemon/templates/agents/task-boundary-classifier.md +65 -0
- package/dist/daemon/templates/agents/verify-agent.md +259 -0
- package/dist/daemon/utils/inject-block.d.ts +39 -0
- package/dist/daemon/utils/inject-block.d.ts.map +1 -0
- package/dist/daemon/utils/inject-block.js +25 -0
- package/dist/daemon/utils/inject-block.js.map +1 -0
- package/dist/hooks/hook-lib.sh +8 -0
- package/dist/hooks/notification.sh +19 -8
- package/dist/hooks/post-tool-use.sh +41 -23
- package/dist/hooks/pre-tool-use.sh +54 -23
- package/dist/hooks/session-start.sh +68 -0
- package/dist/hooks/stop.sh +31 -11
- package/dist/hooks/user-prompt-submit.sh +37 -21
- package/dist/knowledge/adapters/go-adapter.d.ts +65 -0
- package/dist/knowledge/adapters/go-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/go-adapter.js +294 -0
- package/dist/knowledge/adapters/go-adapter.js.map +1 -0
- package/dist/knowledge/adapters/index.d.ts +41 -0
- package/dist/knowledge/adapters/index.d.ts.map +1 -0
- package/dist/knowledge/adapters/index.js +71 -0
- package/dist/knowledge/adapters/index.js.map +1 -0
- package/dist/knowledge/adapters/java-adapter.d.ts +66 -0
- package/dist/knowledge/adapters/java-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/java-adapter.js +260 -0
- package/dist/knowledge/adapters/java-adapter.js.map +1 -0
- package/dist/knowledge/adapters/js-vue-adapter.d.ts +56 -0
- package/dist/knowledge/adapters/js-vue-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/js-vue-adapter.js +203 -0
- package/dist/knowledge/adapters/js-vue-adapter.js.map +1 -0
- package/dist/knowledge/adapters/kotlin-adapter.d.ts +55 -0
- package/dist/knowledge/adapters/kotlin-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/kotlin-adapter.js +209 -0
- package/dist/knowledge/adapters/kotlin-adapter.js.map +1 -0
- package/dist/knowledge/adapters/monorepo-adapter.d.ts +77 -0
- package/dist/knowledge/adapters/monorepo-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/monorepo-adapter.js +170 -0
- package/dist/knowledge/adapters/monorepo-adapter.js.map +1 -0
- package/dist/knowledge/adapters/python-adapter.d.ts +89 -0
- package/dist/knowledge/adapters/python-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/python-adapter.js +358 -0
- package/dist/knowledge/adapters/python-adapter.js.map +1 -0
- package/dist/knowledge/adapters/rust-adapter.d.ts +73 -0
- package/dist/knowledge/adapters/rust-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/rust-adapter.js +329 -0
- package/dist/knowledge/adapters/rust-adapter.js.map +1 -0
- package/dist/knowledge/adapters/types.d.ts +99 -0
- package/dist/knowledge/adapters/types.d.ts.map +1 -0
- package/dist/knowledge/adapters/types.js +17 -0
- package/dist/knowledge/adapters/types.js.map +1 -0
- package/dist/knowledge/adapters/typescript-adapter.d.ts +57 -0
- package/dist/knowledge/adapters/typescript-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/typescript-adapter.js +171 -0
- package/dist/knowledge/adapters/typescript-adapter.js.map +1 -0
- package/dist/knowledge/audit-applier.d.ts +70 -0
- package/dist/knowledge/audit-applier.d.ts.map +1 -0
- package/dist/knowledge/audit-applier.js +251 -0
- package/dist/knowledge/audit-applier.js.map +1 -0
- package/dist/knowledge/builder.d.ts +261 -0
- package/dist/knowledge/builder.d.ts.map +1 -0
- package/dist/knowledge/builder.js +966 -0
- package/dist/knowledge/builder.js.map +1 -0
- package/dist/knowledge/cli-provider.d.ts +151 -0
- package/dist/knowledge/cli-provider.d.ts.map +1 -0
- package/dist/knowledge/cli-provider.js +313 -0
- package/dist/knowledge/cli-provider.js.map +1 -0
- package/dist/knowledge/constants.d.ts +78 -0
- package/dist/knowledge/constants.d.ts.map +1 -0
- package/dist/knowledge/constants.js +98 -0
- package/dist/knowledge/constants.js.map +1 -0
- package/dist/knowledge/cross-module.d.ts +139 -0
- package/dist/knowledge/cross-module.d.ts.map +1 -0
- package/dist/knowledge/cross-module.js +370 -0
- package/dist/knowledge/cross-module.js.map +1 -0
- package/dist/knowledge/git-hooks.d.ts +67 -0
- package/dist/knowledge/git-hooks.d.ts.map +1 -0
- package/dist/knowledge/git-hooks.js +258 -0
- package/dist/knowledge/git-hooks.js.map +1 -0
- package/dist/knowledge/graph/edge-extractor.d.ts +45 -0
- package/dist/knowledge/graph/edge-extractor.d.ts.map +1 -0
- package/dist/knowledge/graph/edge-extractor.js +242 -0
- package/dist/knowledge/graph/edge-extractor.js.map +1 -0
- package/dist/knowledge/graph/impact.d.ts +73 -0
- package/dist/knowledge/graph/impact.d.ts.map +1 -0
- package/dist/knowledge/graph/impact.js +94 -0
- package/dist/knowledge/graph/impact.js.map +1 -0
- package/dist/knowledge/graph/types.d.ts +22 -0
- package/dist/knowledge/graph/types.d.ts.map +1 -0
- package/dist/knowledge/graph/types.js +13 -0
- package/dist/knowledge/graph/types.js.map +1 -0
- package/dist/knowledge/module-hash.d.ts +88 -0
- package/dist/knowledge/module-hash.d.ts.map +1 -0
- package/dist/knowledge/module-hash.js +162 -0
- package/dist/knowledge/module-hash.js.map +1 -0
- package/dist/knowledge/project-detector.d.ts +101 -0
- package/dist/knowledge/project-detector.d.ts.map +1 -0
- package/dist/knowledge/project-detector.js +223 -0
- package/dist/knowledge/project-detector.js.map +1 -0
- package/dist/knowledge/prompt.d.ts +237 -0
- package/dist/knowledge/prompt.d.ts.map +1 -0
- package/dist/knowledge/prompt.js +416 -0
- package/dist/knowledge/prompt.js.map +1 -0
- package/dist/knowledge/query.d.ts +118 -0
- package/dist/knowledge/query.d.ts.map +1 -0
- package/dist/knowledge/query.js +438 -0
- package/dist/knowledge/query.js.map +1 -0
- package/dist/knowledge/repo-map.d.ts +97 -0
- package/dist/knowledge/repo-map.d.ts.map +1 -0
- package/dist/knowledge/repo-map.js +447 -0
- package/dist/knowledge/repo-map.js.map +1 -0
- package/dist/knowledge/tools/index.d.ts +14 -0
- package/dist/knowledge/tools/index.d.ts.map +1 -0
- package/dist/knowledge/tools/index.js +11 -0
- package/dist/knowledge/tools/index.js.map +1 -0
- package/dist/knowledge/tools/knowledge-get-page.d.ts +46 -0
- package/dist/knowledge/tools/knowledge-get-page.d.ts.map +1 -0
- package/dist/knowledge/tools/knowledge-get-page.js +101 -0
- package/dist/knowledge/tools/knowledge-get-page.js.map +1 -0
- package/dist/knowledge/tools/knowledge-query.d.ts +77 -0
- package/dist/knowledge/tools/knowledge-query.d.ts.map +1 -0
- package/dist/knowledge/tools/knowledge-query.js +104 -0
- package/dist/knowledge/tools/knowledge-query.js.map +1 -0
- package/dist/knowledge/tools/repo-map-lookup.d.ts +45 -0
- package/dist/knowledge/tools/repo-map-lookup.d.ts.map +1 -0
- package/dist/knowledge/tools/repo-map-lookup.js +82 -0
- package/dist/knowledge/tools/repo-map-lookup.js.map +1 -0
- package/dist/knowledge/types.d.ts +269 -0
- package/dist/knowledge/types.d.ts.map +1 -0
- package/dist/knowledge/types.js +10 -0
- package/dist/knowledge/types.js.map +1 -0
- package/dist/knowledge/validator.d.ts +90 -0
- package/dist/knowledge/validator.d.ts.map +1 -0
- package/dist/knowledge/validator.js +355 -0
- package/dist/knowledge/validator.js.map +1 -0
- package/dist/mcp/server.d.ts +64 -8
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +448 -12
- package/dist/mcp/server.js.map +1 -1
- package/dist/skills/builtin-skills.d.ts +35 -0
- package/dist/skills/builtin-skills.d.ts.map +1 -0
- package/dist/skills/builtin-skills.js +68 -0
- package/dist/skills/builtin-skills.js.map +1 -0
- package/dist/skills/distill/attribution.d.ts +59 -0
- package/dist/skills/distill/attribution.d.ts.map +1 -0
- package/dist/skills/distill/attribution.js +101 -0
- package/dist/skills/distill/attribution.js.map +1 -0
- package/dist/skills/distill/distiller.d.ts +161 -0
- package/dist/skills/distill/distiller.d.ts.map +1 -0
- package/dist/skills/distill/distiller.js +461 -0
- package/dist/skills/distill/distiller.js.map +1 -0
- package/dist/skills/distill/index.d.ts +223 -0
- package/dist/skills/distill/index.d.ts.map +1 -0
- package/dist/skills/distill/index.js +466 -0
- package/dist/skills/distill/index.js.map +1 -0
- package/dist/skills/distill/project-anchor-guard.d.ts +116 -0
- package/dist/skills/distill/project-anchor-guard.d.ts.map +1 -0
- package/dist/skills/distill/project-anchor-guard.js +334 -0
- package/dist/skills/distill/project-anchor-guard.js.map +1 -0
- package/dist/skills/distill/topic-deduper.d.ts +77 -0
- package/dist/skills/distill/topic-deduper.d.ts.map +1 -0
- package/dist/skills/distill/topic-deduper.js +119 -0
- package/dist/skills/distill/topic-deduper.js.map +1 -0
- package/dist/skills/distill/upstream-fetcher.d.ts +71 -0
- package/dist/skills/distill/upstream-fetcher.d.ts.map +1 -0
- package/dist/skills/distill/upstream-fetcher.js +202 -0
- package/dist/skills/distill/upstream-fetcher.js.map +1 -0
- package/dist/skills/distilled/distilled-api-design.md +495 -0
- package/dist/skills/distilled/distilled-architecture-decision.md +173 -0
- package/dist/skills/distilled/distilled-brainstorming.md +79 -0
- package/dist/skills/distilled/distilled-brand-guidelines.md +86 -0
- package/dist/skills/distilled/distilled-canvas-design.md +128 -0
- package/dist/skills/distilled/distilled-claude-api.md +185 -0
- package/dist/skills/distilled/distilled-creator.md +181 -0
- package/dist/skills/distilled/distilled-db-schema-design.md +245 -0
- package/dist/skills/distilled/distilled-dispatching-parallel-agents.md +136 -0
- package/dist/skills/distilled/distilled-doc-coauthoring.md +144 -0
- package/dist/skills/distilled/distilled-docx.md +231 -0
- package/dist/skills/distilled/distilled-executing-plans.md +148 -0
- package/dist/skills/distilled/distilled-finishing-a-development-branch.md +213 -0
- package/dist/skills/distilled/distilled-frontend-design.md +118 -0
- package/dist/skills/distilled/distilled-harness-engineering.md +242 -0
- package/dist/skills/distilled/distilled-karpathy-guidelines.md +104 -0
- package/dist/skills/distilled/distilled-performance-optimization.md +175 -0
- package/dist/skills/distilled/distilled-receiving-code-review.md +185 -0
- package/dist/skills/distilled/distilled-spec-driven-design.md +193 -0
- package/dist/skills/distilled/distilled-subagent-driven-development.md +124 -0
- package/dist/skills/distilled/distilled-systematic-debugging.md +154 -0
- package/dist/skills/distilled/distilled-test-driven-development.md +432 -0
- package/dist/skills/distilled/distilled-using-superpowers.md +134 -0
- package/dist/skills/distilled/distilled-verification-before-completion.md +213 -0
- package/dist/skills/distilled/distilled-writing-skills.md +175 -0
- package/dist/skills/registry.d.ts +55 -51
- package/dist/skills/registry.d.ts.map +1 -1
- package/dist/skills/registry.js +82 -196
- package/dist/skills/registry.js.map +1 -1
- package/dist/skills/tools/pipeline-suggest.js +14 -14
- package/dist/skills/tools/pipeline-suggest.js.map +1 -1
- package/dist/skills/tools/skill-invoke.d.ts +3 -2
- package/dist/skills/tools/skill-invoke.d.ts.map +1 -1
- package/dist/skills/tools/skill-invoke.js +4 -2
- package/dist/skills/tools/skill-invoke.js.map +1 -1
- package/dist/web/analytics/anti-pattern-detector.d.ts.map +1 -1
- package/dist/web/analytics/anti-pattern-detector.js +6 -1
- package/dist/web/analytics/anti-pattern-detector.js.map +1 -1
- package/dist/web/analytics/drift-detector.d.ts +6 -0
- package/dist/web/analytics/drift-detector.d.ts.map +1 -1
- package/dist/web/analytics/drift-detector.js +15 -8
- package/dist/web/analytics/drift-detector.js.map +1 -1
- package/dist/web/analytics/weekly-report.d.ts +13 -0
- package/dist/web/analytics/weekly-report.d.ts.map +1 -1
- package/dist/web/analytics/weekly-report.js +17 -3
- package/dist/web/analytics/weekly-report.js.map +1 -1
- package/dist/web/routes/_helpers.d.ts +31 -0
- package/dist/web/routes/_helpers.d.ts.map +1 -1
- package/dist/web/routes/_helpers.js +33 -0
- package/dist/web/routes/_helpers.js.map +1 -1
- package/dist/web/routes/agent-content.d.ts +30 -0
- package/dist/web/routes/agent-content.d.ts.map +1 -0
- package/dist/web/routes/agent-content.js +139 -0
- package/dist/web/routes/agent-content.js.map +1 -0
- package/dist/web/routes/agent-distill.d.ts +49 -0
- package/dist/web/routes/agent-distill.d.ts.map +1 -0
- package/dist/web/routes/agent-distill.js +526 -0
- package/dist/web/routes/agent-distill.js.map +1 -0
- package/dist/web/routes/config.d.ts +56 -0
- package/dist/web/routes/config.d.ts.map +1 -0
- package/dist/web/routes/config.js +243 -0
- package/dist/web/routes/config.js.map +1 -0
- package/dist/web/routes/decisions.d.ts +15 -0
- package/dist/web/routes/decisions.d.ts.map +1 -0
- package/dist/web/routes/decisions.js +181 -0
- package/dist/web/routes/decisions.js.map +1 -0
- package/dist/web/routes/diagnostics.d.ts +61 -0
- package/dist/web/routes/diagnostics.d.ts.map +1 -0
- package/dist/web/routes/diagnostics.js +203 -0
- package/dist/web/routes/diagnostics.js.map +1 -0
- package/dist/web/routes/error-handler.d.ts +0 -4
- package/dist/web/routes/error-handler.d.ts.map +1 -1
- package/dist/web/routes/error-handler.js +0 -8
- package/dist/web/routes/error-handler.js.map +1 -1
- package/dist/web/routes/events.d.ts.map +1 -1
- package/dist/web/routes/events.js +26 -1
- package/dist/web/routes/events.js.map +1 -1
- package/dist/web/routes/health.d.ts +33 -0
- package/dist/web/routes/health.d.ts.map +1 -0
- package/dist/web/routes/health.js +37 -0
- package/dist/web/routes/health.js.map +1 -0
- package/dist/web/routes/insights.d.ts +0 -5
- package/dist/web/routes/insights.d.ts.map +1 -1
- package/dist/web/routes/insights.js +0 -0
- package/dist/web/routes/insights.js.map +1 -1
- package/dist/web/routes/knowledge.d.ts +57 -0
- package/dist/web/routes/knowledge.d.ts.map +1 -0
- package/dist/web/routes/knowledge.js +772 -0
- package/dist/web/routes/knowledge.js.map +1 -0
- package/dist/web/routes/patch.d.ts +60 -1
- package/dist/web/routes/patch.d.ts.map +1 -1
- package/dist/web/routes/patch.js +170 -64
- package/dist/web/routes/patch.js.map +1 -1
- package/dist/web/routes/pipeline.d.ts +28 -0
- package/dist/web/routes/pipeline.d.ts.map +1 -0
- package/dist/web/routes/pipeline.js +145 -0
- package/dist/web/routes/pipeline.js.map +1 -0
- package/dist/web/routes/rules.d.ts.map +1 -1
- package/dist/web/routes/rules.js +26 -7
- package/dist/web/routes/rules.js.map +1 -1
- package/dist/web/routes/sessions.d.ts.map +1 -1
- package/dist/web/routes/sessions.js +17 -8
- package/dist/web/routes/sessions.js.map +1 -1
- package/dist/web/routes/skill-content.d.ts +30 -0
- package/dist/web/routes/skill-content.d.ts.map +1 -0
- package/dist/web/routes/skill-content.js +117 -0
- package/dist/web/routes/skill-content.js.map +1 -0
- package/dist/web/routes/skill-stats.d.ts.map +1 -1
- package/dist/web/routes/skill-stats.js +153 -16
- package/dist/web/routes/skill-stats.js.map +1 -1
- package/dist/web/routes/skills-distill.d.ts +29 -0
- package/dist/web/routes/skills-distill.d.ts.map +1 -0
- package/dist/web/routes/skills-distill.js +552 -0
- package/dist/web/routes/skills-distill.js.map +1 -0
- package/dist/web/routes/skills.js +7 -7
- package/dist/web/routes/skills.js.map +1 -1
- package/dist/web/routes/stats.d.ts.map +1 -1
- package/dist/web/routes/stats.js +2 -1
- package/dist/web/routes/stats.js.map +1 -1
- package/dist/web/routes/task-timeline.d.ts +178 -0
- package/dist/web/routes/task-timeline.d.ts.map +1 -0
- package/dist/web/routes/task-timeline.js +530 -0
- package/dist/web/routes/task-timeline.js.map +1 -0
- package/dist/web/routes/tasks.d.ts.map +1 -1
- package/dist/web/routes/tasks.js +377 -8
- package/dist/web/routes/tasks.js.map +1 -1
- package/dist/web/routes/trace.d.ts.map +1 -1
- package/dist/web/routes/trace.js +3 -2
- package/dist/web/routes/trace.js.map +1 -1
- package/dist/web/routes/types.d.ts +0 -4
- package/dist/web/routes/types.d.ts.map +1 -1
- package/dist/web/routes/types.js +1 -1
- package/dist/web/routes/types.js.map +1 -1
- package/dist/web/routes/violations.d.ts +14 -0
- package/dist/web/routes/violations.d.ts.map +1 -0
- package/dist/web/routes/violations.js +112 -0
- package/dist/web/routes/violations.js.map +1 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +99 -19
- package/dist/web/server.js.map +1 -1
- package/dist/web/services/agent-distill-manager.d.ts +122 -0
- package/dist/web/services/agent-distill-manager.d.ts.map +1 -0
- package/dist/web/services/agent-distill-manager.js +397 -0
- package/dist/web/services/agent-distill-manager.js.map +1 -0
- package/dist/web/services/build-manager.d.ts +72 -0
- package/dist/web/services/build-manager.d.ts.map +1 -0
- package/dist/web/services/build-manager.js +189 -0
- package/dist/web/services/build-manager.js.map +1 -0
- package/dist/web/services/distill-manager.d.ts +172 -0
- package/dist/web/services/distill-manager.d.ts.map +1 -0
- package/dist/web/services/distill-manager.js +411 -0
- package/dist/web/services/distill-manager.js.map +1 -0
- package/dist/web/static/assets/AgentDetailPage-DlUeA1sX.js +2 -0
- package/dist/web/static/assets/AgentDetailPage-DlUeA1sX.js.map +1 -0
- package/dist/web/static/assets/AgentDistillRunPage-Cybo4bii.js +3 -0
- package/dist/web/static/assets/AgentDistillRunPage-Cybo4bii.js.map +1 -0
- package/dist/web/static/assets/AgentsPage-Qd9FExLG.js +2 -0
- package/dist/web/static/assets/AgentsPage-Qd9FExLG.js.map +1 -0
- package/dist/web/static/assets/DaemonHealthPage-DTSVqtrI.js +2 -0
- package/dist/web/static/assets/DaemonHealthPage-DTSVqtrI.js.map +1 -0
- package/dist/web/static/assets/DecisionDetailPage-b4BA8dhc.js +2 -0
- package/dist/web/static/assets/DecisionDetailPage-b4BA8dhc.js.map +1 -0
- package/dist/web/static/assets/DecisionsPage-a3NRo_T7.js +2 -0
- package/dist/web/static/assets/DecisionsPage-a3NRo_T7.js.map +1 -0
- package/dist/web/static/assets/DiagnosticsPage-DIVdiIQG.js +2 -0
- package/dist/web/static/assets/DiagnosticsPage-DIVdiIQG.js.map +1 -0
- package/dist/web/static/assets/DistillDetailPage-U6a3l2iP.js +4 -0
- package/dist/web/static/assets/DistillDetailPage-U6a3l2iP.js.map +1 -0
- package/dist/web/static/assets/DistillPage-O7BHtRN8.js +2 -0
- package/dist/web/static/assets/DistillPage-O7BHtRN8.js.map +1 -0
- package/dist/web/static/assets/DistillRunPage-D1JuRWWr.js +2 -0
- package/dist/web/static/assets/DistillRunPage-D1JuRWWr.js.map +1 -0
- package/dist/web/static/assets/GlobalScopeHint-Q3wTJx3F.js +2 -0
- package/dist/web/static/assets/GlobalScopeHint-Q3wTJx3F.js.map +1 -0
- package/dist/web/static/assets/IssueDetailPage-BDfrtk2C.js +2 -0
- package/dist/web/static/assets/IssueDetailPage-BDfrtk2C.js.map +1 -0
- package/dist/web/static/assets/IssuesPage-SKmhlCrw.js +2 -0
- package/dist/web/static/assets/IssuesPage-SKmhlCrw.js.map +1 -0
- package/dist/web/static/assets/KbDetailPage-Yna86Na8.js +2 -0
- package/dist/web/static/assets/KbDetailPage-Yna86Na8.js.map +1 -0
- package/dist/web/static/assets/KbHitsPage-Cljl7H9p.js +2 -0
- package/dist/web/static/assets/KbHitsPage-Cljl7H9p.js.map +1 -0
- package/dist/web/static/assets/MarkdownRenderer-DlDQNihj.js +3 -0
- package/dist/web/static/assets/MarkdownRenderer-DlDQNihj.js.map +1 -0
- package/dist/web/static/assets/NotFound-LMzbP51V.js +2 -0
- package/dist/web/static/assets/NotFound-LMzbP51V.js.map +1 -0
- package/dist/web/static/assets/SettingsPage-DzoK4PKg.js +2 -0
- package/dist/web/static/assets/SettingsPage-DzoK4PKg.js.map +1 -0
- package/dist/web/static/assets/SkillDetailPage-BuBJJ_NX.js +2 -0
- package/dist/web/static/assets/SkillDetailPage-BuBJJ_NX.js.map +1 -0
- package/dist/web/static/assets/SkillsPage-aojkJpBc.js +2 -0
- package/dist/web/static/assets/SkillsPage-aojkJpBc.js.map +1 -0
- package/dist/web/static/assets/TaskDetailPage-1ckxnGhw.js +4 -0
- package/dist/web/static/assets/TaskDetailPage-1ckxnGhw.js.map +1 -0
- package/dist/web/static/assets/TasksHubPage-C2PLh3eg.js +6 -0
- package/dist/web/static/assets/TasksHubPage-C2PLh3eg.js.map +1 -0
- package/dist/web/static/assets/WorkplacePage-DHrp5VxS.js +2 -0
- package/dist/web/static/assets/WorkplacePage-DHrp5VxS.js.map +1 -0
- package/dist/web/static/assets/arco-DFQA6dO_.css +1 -0
- package/dist/web/static/assets/arco-DV6xCLhr.js +14 -0
- package/dist/web/static/assets/arco-DV6xCLhr.js.map +1 -0
- package/dist/web/static/assets/charts-BSV4cyC4.js +37 -0
- package/dist/web/static/assets/charts-BSV4cyC4.js.map +1 -0
- package/dist/web/static/assets/date-fns-sbWH3_uq.js +2 -0
- package/dist/web/static/assets/date-fns-sbWH3_uq.js.map +1 -0
- package/dist/web/static/assets/index-B_v_MKlb.css +1 -0
- package/dist/web/static/assets/index-DileOOE4.js +4 -0
- package/dist/web/static/assets/index-DileOOE4.js.map +1 -0
- package/dist/web/static/assets/lucide-CnlPQoG8.js +72 -0
- package/dist/web/static/assets/lucide-CnlPQoG8.js.map +1 -0
- package/dist/web/static/assets/markdown-CA7ePUts.js +30 -0
- package/dist/web/static/assets/markdown-CA7ePUts.js.map +1 -0
- package/dist/web/static/assets/outcome-BKGy9azt.js +2 -0
- package/dist/web/static/assets/outcome-BKGy9azt.js.map +1 -0
- package/dist/web/static/assets/query-CgCOpYWf.js +2 -0
- package/dist/web/static/assets/{query-C99w429o.js.map → query-CgCOpYWf.js.map} +1 -1
- package/dist/web/static/assets/{react-router-r79dBVy4.js → react-router-Cxmg8RuL.js} +3 -3
- package/dist/web/static/assets/{react-router-r79dBVy4.js.map → react-router-Cxmg8RuL.js.map} +1 -1
- package/dist/web/static/assets/react-vendor-tkvCrao7.js +57 -0
- package/dist/web/static/assets/react-vendor-tkvCrao7.js.map +1 -0
- package/dist/web/static/assets/syntax-highlighter-BDYycNja.js +6 -0
- package/dist/web/static/assets/syntax-highlighter-BDYycNja.js.map +1 -0
- package/dist/web/static/assets/useAgentStats-B-uTgqBd.js +2 -0
- package/dist/web/static/assets/useAgentStats-B-uTgqBd.js.map +1 -0
- package/dist/web/static/assets/useDecisions-D-G2Ft5T.js +2 -0
- package/dist/web/static/assets/useDecisions-D-G2Ft5T.js.map +1 -0
- package/dist/web/static/assets/useDistill-21dZkXlT.js +3 -0
- package/dist/web/static/assets/useDistill-21dZkXlT.js.map +1 -0
- package/dist/web/static/assets/useEffectiveProject-DQiyX54y.js +2 -0
- package/dist/web/static/assets/useEffectiveProject-DQiyX54y.js.map +1 -0
- package/dist/web/static/assets/useIssuesFeed-CFiyQkAL.js +2 -0
- package/dist/web/static/assets/useIssuesFeed-CFiyQkAL.js.map +1 -0
- package/dist/web/static/assets/useKbHits-xKXWgqh9.js +2 -0
- package/dist/web/static/assets/useKbHits-xKXWgqh9.js.map +1 -0
- package/dist/web/static/assets/useSkillStats-B5hbIwdf.js +2 -0
- package/dist/web/static/assets/useSkillStats-B5hbIwdf.js.map +1 -0
- package/dist/web/static/assets/vendor-DS-q4Eyc.js +36 -0
- package/dist/web/static/assets/vendor-DS-q4Eyc.js.map +1 -0
- package/dist/web/static/index.html +12 -8
- package/package.json +18 -5
- package/dist/core/ai/provider.d.ts +0 -63
- package/dist/core/ai/provider.d.ts.map +0 -1
- package/dist/core/ai/provider.js +0 -241
- package/dist/core/ai/provider.js.map +0 -1
- package/dist/core/ai/types.d.ts +0 -43
- package/dist/core/ai/types.d.ts.map +0 -1
- package/dist/core/ai/types.js +0 -5
- package/dist/core/ai/types.js.map +0 -1
- package/dist/core/storage/token-usage.d.ts +0 -36
- package/dist/core/storage/token-usage.d.ts.map +0 -1
- package/dist/core/storage/token-usage.js +0 -59
- package/dist/core/storage/token-usage.js.map +0 -1
- package/dist/core/utils/token-tracker.d.ts +0 -39
- package/dist/core/utils/token-tracker.d.ts.map +0 -1
- package/dist/core/utils/token-tracker.js +0 -69
- package/dist/core/utils/token-tracker.js.map +0 -1
- package/dist/skills/index.d.ts +0 -3
- package/dist/skills/index.d.ts.map +0 -1
- package/dist/skills/index.js +0 -3
- package/dist/skills/index.js.map +0 -1
- package/dist/skills/matcher.d.ts +0 -26
- package/dist/skills/matcher.d.ts.map +0 -1
- package/dist/skills/matcher.js +0 -113
- package/dist/skills/matcher.js.map +0 -1
- package/dist/skills/official/code-simplifier.md +0 -52
- package/dist/skills/official/find-skills.md +0 -142
- package/dist/skills/official/official-api-design.md +0 -30
- package/dist/skills/official/official-architecture-decision.md +0 -41
- package/dist/skills/official/official-bmad.md +0 -118
- package/dist/skills/official/official-db-schema-design.md +0 -34
- package/dist/skills/official/official-debug.md +0 -25
- package/dist/skills/official/official-doc-driven.md +0 -31
- package/dist/skills/official/official-harness-engineering.md +0 -108
- package/dist/skills/official/official-openspec.md +0 -89
- package/dist/skills/official/official-performance-optimization.md +0 -30
- package/dist/skills/official/official-pr-review.md +0 -35
- package/dist/skills/official/official-release-checklist.md +0 -30
- package/dist/skills/official/official-security-hardening.md +0 -32
- package/dist/skills/official/official-spec-driven-design.md +0 -31
- package/dist/skills/official/planning-with-files.md +0 -241
- package/dist/skills/official/ui-ux-pro-max.md +0 -105
- package/dist/skills/official/webapp-testing.md +0 -96
- package/dist/skills/official-skills.d.ts +0 -26
- package/dist/skills/official-skills.d.ts.map +0 -1
- package/dist/skills/official-skills.js +0 -74
- package/dist/skills/official-skills.js.map +0 -1
- package/dist/skills/semantic-matcher.d.ts +0 -60
- package/dist/skills/semantic-matcher.d.ts.map +0 -1
- package/dist/skills/semantic-matcher.js +0 -192
- package/dist/skills/semantic-matcher.js.map +0 -1
- package/dist/skills/upgrade-engine.d.ts +0 -93
- package/dist/skills/upgrade-engine.d.ts.map +0 -1
- package/dist/skills/upgrade-engine.js +0 -447
- package/dist/skills/upgrade-engine.js.map +0 -1
- package/dist/skills/upgrade-prompt.d.ts +0 -20
- package/dist/skills/upgrade-prompt.d.ts.map +0 -1
- package/dist/skills/upgrade-prompt.js +0 -75
- package/dist/skills/upgrade-prompt.js.map +0 -1
- package/dist/web/routes/ai.d.ts +0 -10
- package/dist/web/routes/ai.d.ts.map +0 -1
- package/dist/web/routes/ai.js +0 -186
- package/dist/web/routes/ai.js.map +0 -1
- package/dist/web/routes/token-usage.d.ts +0 -7
- package/dist/web/routes/token-usage.d.ts.map +0 -1
- package/dist/web/routes/token-usage.js +0 -18
- package/dist/web/routes/token-usage.js.map +0 -1
- package/dist/web/ssrf-guard.d.ts +0 -35
- package/dist/web/ssrf-guard.d.ts.map +0 -1
- package/dist/web/ssrf-guard.js +0 -93
- package/dist/web/ssrf-guard.js.map +0 -1
- package/dist/web/static/assets/AIConfig-CdDWzJyO.js +0 -2
- package/dist/web/static/assets/AIConfig-CdDWzJyO.js.map +0 -1
- package/dist/web/static/assets/Dashboard-CoEmmIDt.js +0 -2
- package/dist/web/static/assets/Dashboard-CoEmmIDt.js.map +0 -1
- package/dist/web/static/assets/Drawer-DdRTzlLB.js +0 -2
- package/dist/web/static/assets/Drawer-DdRTzlLB.js.map +0 -1
- package/dist/web/static/assets/Events-DrIq1SUS.js +0 -2
- package/dist/web/static/assets/Events-DrIq1SUS.js.map +0 -1
- package/dist/web/static/assets/Reports-DFBM3MDK.js +0 -2
- package/dist/web/static/assets/Reports-DFBM3MDK.js.map +0 -1
- package/dist/web/static/assets/SearchInput-qCj_jAcf.js +0 -2
- package/dist/web/static/assets/SearchInput-qCj_jAcf.js.map +0 -1
- package/dist/web/static/assets/SessionDetail-CCzwdoT7.js +0 -2
- package/dist/web/static/assets/SessionDetail-CCzwdoT7.js.map +0 -1
- package/dist/web/static/assets/Sessions-FfLYkAw9.js +0 -2
- package/dist/web/static/assets/Sessions-FfLYkAw9.js.map +0 -1
- package/dist/web/static/assets/Skills-C8Gvs3Qa.js +0 -2
- package/dist/web/static/assets/Skills-C8Gvs3Qa.js.map +0 -1
- package/dist/web/static/assets/TaskDetail-BS8pYhaR.js +0 -2
- package/dist/web/static/assets/TaskDetail-BS8pYhaR.js.map +0 -1
- package/dist/web/static/assets/Tasks-CyuhizG8.js +0 -2
- package/dist/web/static/assets/Tasks-CyuhizG8.js.map +0 -1
- package/dist/web/static/assets/charts-CLrM0_uM.js +0 -37
- package/dist/web/static/assets/charts-CLrM0_uM.js.map +0 -1
- package/dist/web/static/assets/date-fns-CZ_bHujz.js +0 -2
- package/dist/web/static/assets/date-fns-CZ_bHujz.js.map +0 -1
- package/dist/web/static/assets/export-L_VBD2p1.js +0 -4
- package/dist/web/static/assets/export-L_VBD2p1.js.map +0 -1
- package/dist/web/static/assets/index-CBX47X8l.js +0 -3
- package/dist/web/static/assets/index-CBX47X8l.js.map +0 -1
- package/dist/web/static/assets/index-DjIoMdoR.css +0 -1
- package/dist/web/static/assets/lucide-Bs_edTLa.js +0 -232
- package/dist/web/static/assets/lucide-Bs_edTLa.js.map +0 -1
- package/dist/web/static/assets/query-C99w429o.js +0 -2
- package/dist/web/static/assets/react-vendor-CSp-GLFF.js +0 -49
- package/dist/web/static/assets/react-vendor-CSp-GLFF.js.map +0 -1
- package/dist/web/static/assets/syntax-highlighter-44FakypI.js +0 -9
- package/dist/web/static/assets/syntax-highlighter-44FakypI.js.map +0 -1
- package/dist/web/static/assets/time-Bxuk0M-C.js +0 -2
- package/dist/web/static/assets/time-Bxuk0M-C.js.map +0 -1
- package/dist/web/static/assets/vendor-CMMjVdZs.js +0 -64
- package/dist/web/static/assets/vendor-CMMjVdZs.js.map +0 -1
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file codegraph-sync.ts
|
|
3
|
+
* codegraph Phase 3 — daemon-side periodic incremental graph sync.
|
|
4
|
+
*
|
|
5
|
+
* decision 95df9d97 / spec 1112-codegraph-call-graph-spec.md (Phase 3).
|
|
6
|
+
*
|
|
7
|
+
* Keeps the independent codegraph DB (`~/.claude-forge/codegraph.db`) fresh by
|
|
8
|
+
* polling on a `setInterval` cadence and re-extracting ONLY the source files
|
|
9
|
+
* that changed since the last sync.
|
|
10
|
+
*
|
|
11
|
+
* Q3 (user-approved): interval-driven INCREMENTAL rebuild — NO chokidar /
|
|
12
|
+
* fs.watch real-time watcher (most irreversible, deferred). Zero new deps; we
|
|
13
|
+
* reuse the existing daemon `setInterval` + module-level mutex maintenance
|
|
14
|
+
* pattern (mirrors event-ttl-sweep).
|
|
15
|
+
*
|
|
16
|
+
* How "incremental" works
|
|
17
|
+
* -----------------------
|
|
18
|
+
* Cross-file edge resolution needs the whole-repo TypeChecker (an edge's
|
|
19
|
+
* destination may live in another file), so we still build ONE `ts.Program`
|
|
20
|
+
* over `src/` per pass via `buildRepoGraph`. What is incremental is the WRITE:
|
|
21
|
+
* each file's on-disk mtime is diffed against a per-file mtime the service
|
|
22
|
+
* remembers across ticks (seeded from the graph DB's known file set on the
|
|
23
|
+
* first pass), and `replaceFileGraph` is called ONLY for files that are new or
|
|
24
|
+
* whose mtime advanced. Unchanged files' nodes/edges are left untouched.
|
|
25
|
+
*
|
|
26
|
+
* This satisfies the Phase 3 success criterion — "change one source file, wait
|
|
27
|
+
* one sync cycle, that file's nodes update while other files' node rows are
|
|
28
|
+
* untouched (incremental, not full rebuild)". On a no-change tick the pass is a
|
|
29
|
+
* cheap stat scan with zero writes (the graph build still runs to know the file
|
|
30
|
+
* set; the WRITE is what's gated).
|
|
31
|
+
*
|
|
32
|
+
* The mtime memory is daemon-side (a plain `Map` owned by the caller) so this
|
|
33
|
+
* service needs NO new method on the Phase 1 `CodeGraphStore` — it only uses
|
|
34
|
+
* the existing read-only `listFiles()` to seed "already-tracked" files on the
|
|
35
|
+
* very first pass (those are treated as up-to-date until their mtime advances).
|
|
36
|
+
*/
|
|
37
|
+
import type { CodeGraphStore } from '../../core/storage/codegraph.js';
|
|
38
|
+
import type { ConfigStore } from '../config-store.js';
|
|
39
|
+
/** Config key for the sync cadence (minutes). */
|
|
40
|
+
export declare const CFG_CODEGRAPH_SYNC_INTERVAL = "codegraph.sync_interval_minutes";
|
|
41
|
+
/**
|
|
42
|
+
* Default cadence in minutes. The graph only needs to be "reasonably fresh" for
|
|
43
|
+
* pull-style impact queries, and a full-Program parse per pass is non-trivial,
|
|
44
|
+
* so 15 minutes balances freshness against CPU.
|
|
45
|
+
*/
|
|
46
|
+
export declare const DEFAULT_CODEGRAPH_SYNC_INTERVAL_MINUTES = 15;
|
|
47
|
+
/** Lower bound — sub-minute polling would thrash the TypeChecker for no gain. */
|
|
48
|
+
export declare const MIN_CODEGRAPH_SYNC_INTERVAL_MINUTES = 1;
|
|
49
|
+
/**
|
|
50
|
+
* Per-file mtime memory carried across sync ticks. Maps a src-relative file
|
|
51
|
+
* path to the ISO mtime last seen/written. Owned by the daemon caller so the
|
|
52
|
+
* service stays storage-method-agnostic.
|
|
53
|
+
*/
|
|
54
|
+
export type MtimeCache = Map<string, string>;
|
|
55
|
+
/** Per-file result of a sync pass. */
|
|
56
|
+
export interface CodeGraphSyncResult {
|
|
57
|
+
/** Files re-extracted + rewritten this pass (new or mtime-advanced). */
|
|
58
|
+
changedFiles: string[];
|
|
59
|
+
/** Files seen on disk and already up-to-date (skipped). */
|
|
60
|
+
unchangedCount: number;
|
|
61
|
+
/** Files previously tracked but no longer producing nodes (left as-is). */
|
|
62
|
+
staleFiles: string[];
|
|
63
|
+
/** Total in-scope source files scanned this pass. */
|
|
64
|
+
scannedCount: number;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Resolve the effective sync interval (minutes) from forge_config, clamped to
|
|
68
|
+
* `MIN_CODEGRAPH_SYNC_INTERVAL_MINUTES`. Exported for tests + daemon wiring.
|
|
69
|
+
*/
|
|
70
|
+
export declare function resolveSyncIntervalMinutes(configStore: ConfigStore): number;
|
|
71
|
+
/**
|
|
72
|
+
* Run one incremental codegraph sync pass. Idempotent; safe to call repeatedly.
|
|
73
|
+
*
|
|
74
|
+
* 1. Build the repo graph over `srcDir` (one full Program — required for
|
|
75
|
+
* cross-file edge resolution).
|
|
76
|
+
* 2. Group nodes + edges by their (src-relative) file.
|
|
77
|
+
* 3. For each file: compare on-disk mtime to the cached mtime. Re-run
|
|
78
|
+
* `replaceFileGraph` ONLY when the file is new or its mtime advanced; then
|
|
79
|
+
* update the cache.
|
|
80
|
+
*
|
|
81
|
+
* On the very first pass (empty cache) the graph's already-tracked files
|
|
82
|
+
* (`store.listFiles()`) are seeded into the cache from their on-disk mtime so a
|
|
83
|
+
* fresh daemon doesn't needlessly rewrite an already-built graph. Files NOT yet
|
|
84
|
+
* in the graph are treated as new and get written.
|
|
85
|
+
*
|
|
86
|
+
* @param store the codegraph storage (independent DB).
|
|
87
|
+
* @param srcDir absolute path to `src/`.
|
|
88
|
+
* @param cache per-file mtime memory carried across ticks (mutated in place).
|
|
89
|
+
* @returns a per-file breakdown of what changed.
|
|
90
|
+
*/
|
|
91
|
+
export declare function syncCodeGraph(store: CodeGraphStore, srcDir: string, cache: MtimeCache): CodeGraphSyncResult;
|
|
92
|
+
/** Resolve `src/` from a project root. */
|
|
93
|
+
export declare function srcDirFromRoot(projectRoot: string): string;
|
|
94
|
+
//# sourceMappingURL=codegraph-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codegraph-sync.d.ts","sourceRoot":"","sources":["../../../src/daemon/services/codegraph-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAKtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,iDAAiD;AACjD,eAAO,MAAM,2BAA2B,oCAAoC,CAAC;AAE7E;;;;GAIG;AACH,eAAO,MAAM,uCAAuC,KAAK,CAAC;AAE1D,iFAAiF;AACjF,eAAO,MAAM,mCAAmC,IAAI,CAAC;AAErD;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE7C,sCAAsC;AACtC,MAAM,WAAW,mBAAmB;IAClC,wEAAwE;IACxE,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;IACvB,2EAA2E;IAC3E,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,qDAAqD;IACrD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAM3E;AAcD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,UAAU,GAChB,mBAAmB,CAmErB;AAED,0CAA0C;AAC1C,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE1D"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file codegraph-sync.ts
|
|
3
|
+
* codegraph Phase 3 — daemon-side periodic incremental graph sync.
|
|
4
|
+
*
|
|
5
|
+
* decision 95df9d97 / spec 1112-codegraph-call-graph-spec.md (Phase 3).
|
|
6
|
+
*
|
|
7
|
+
* Keeps the independent codegraph DB (`~/.claude-forge/codegraph.db`) fresh by
|
|
8
|
+
* polling on a `setInterval` cadence and re-extracting ONLY the source files
|
|
9
|
+
* that changed since the last sync.
|
|
10
|
+
*
|
|
11
|
+
* Q3 (user-approved): interval-driven INCREMENTAL rebuild — NO chokidar /
|
|
12
|
+
* fs.watch real-time watcher (most irreversible, deferred). Zero new deps; we
|
|
13
|
+
* reuse the existing daemon `setInterval` + module-level mutex maintenance
|
|
14
|
+
* pattern (mirrors event-ttl-sweep).
|
|
15
|
+
*
|
|
16
|
+
* How "incremental" works
|
|
17
|
+
* -----------------------
|
|
18
|
+
* Cross-file edge resolution needs the whole-repo TypeChecker (an edge's
|
|
19
|
+
* destination may live in another file), so we still build ONE `ts.Program`
|
|
20
|
+
* over `src/` per pass via `buildRepoGraph`. What is incremental is the WRITE:
|
|
21
|
+
* each file's on-disk mtime is diffed against a per-file mtime the service
|
|
22
|
+
* remembers across ticks (seeded from the graph DB's known file set on the
|
|
23
|
+
* first pass), and `replaceFileGraph` is called ONLY for files that are new or
|
|
24
|
+
* whose mtime advanced. Unchanged files' nodes/edges are left untouched.
|
|
25
|
+
*
|
|
26
|
+
* This satisfies the Phase 3 success criterion — "change one source file, wait
|
|
27
|
+
* one sync cycle, that file's nodes update while other files' node rows are
|
|
28
|
+
* untouched (incremental, not full rebuild)". On a no-change tick the pass is a
|
|
29
|
+
* cheap stat scan with zero writes (the graph build still runs to know the file
|
|
30
|
+
* set; the WRITE is what's gated).
|
|
31
|
+
*
|
|
32
|
+
* The mtime memory is daemon-side (a plain `Map` owned by the caller) so this
|
|
33
|
+
* service needs NO new method on the Phase 1 `CodeGraphStore` — it only uses
|
|
34
|
+
* the existing read-only `listFiles()` to seed "already-tracked" files on the
|
|
35
|
+
* very first pass (those are treated as up-to-date until their mtime advances).
|
|
36
|
+
*/
|
|
37
|
+
import { statSync } from 'node:fs';
|
|
38
|
+
import { join } from 'node:path';
|
|
39
|
+
import { buildRepoGraph } from '../../knowledge/repo-map.js';
|
|
40
|
+
/** Config key for the sync cadence (minutes). */
|
|
41
|
+
export const CFG_CODEGRAPH_SYNC_INTERVAL = 'codegraph.sync_interval_minutes';
|
|
42
|
+
/**
|
|
43
|
+
* Default cadence in minutes. The graph only needs to be "reasonably fresh" for
|
|
44
|
+
* pull-style impact queries, and a full-Program parse per pass is non-trivial,
|
|
45
|
+
* so 15 minutes balances freshness against CPU.
|
|
46
|
+
*/
|
|
47
|
+
export const DEFAULT_CODEGRAPH_SYNC_INTERVAL_MINUTES = 15;
|
|
48
|
+
/** Lower bound — sub-minute polling would thrash the TypeChecker for no gain. */
|
|
49
|
+
export const MIN_CODEGRAPH_SYNC_INTERVAL_MINUTES = 1;
|
|
50
|
+
/**
|
|
51
|
+
* Resolve the effective sync interval (minutes) from forge_config, clamped to
|
|
52
|
+
* `MIN_CODEGRAPH_SYNC_INTERVAL_MINUTES`. Exported for tests + daemon wiring.
|
|
53
|
+
*/
|
|
54
|
+
export function resolveSyncIntervalMinutes(configStore) {
|
|
55
|
+
const raw = configStore.get(CFG_CODEGRAPH_SYNC_INTERVAL);
|
|
56
|
+
if (raw === undefined)
|
|
57
|
+
return DEFAULT_CODEGRAPH_SYNC_INTERVAL_MINUTES;
|
|
58
|
+
const n = Number(raw);
|
|
59
|
+
if (!Number.isFinite(n) || n <= 0)
|
|
60
|
+
return DEFAULT_CODEGRAPH_SYNC_INTERVAL_MINUTES;
|
|
61
|
+
return Math.max(MIN_CODEGRAPH_SYNC_INTERVAL_MINUTES, Math.floor(n));
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Read a file's mtime as an ISO string, or `null` if it can't be stat'd
|
|
65
|
+
* (e.g. deleted between the graph build and this read).
|
|
66
|
+
*/
|
|
67
|
+
function readMtime(absPath) {
|
|
68
|
+
try {
|
|
69
|
+
return statSync(absPath).mtime.toISOString();
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Run one incremental codegraph sync pass. Idempotent; safe to call repeatedly.
|
|
77
|
+
*
|
|
78
|
+
* 1. Build the repo graph over `srcDir` (one full Program — required for
|
|
79
|
+
* cross-file edge resolution).
|
|
80
|
+
* 2. Group nodes + edges by their (src-relative) file.
|
|
81
|
+
* 3. For each file: compare on-disk mtime to the cached mtime. Re-run
|
|
82
|
+
* `replaceFileGraph` ONLY when the file is new or its mtime advanced; then
|
|
83
|
+
* update the cache.
|
|
84
|
+
*
|
|
85
|
+
* On the very first pass (empty cache) the graph's already-tracked files
|
|
86
|
+
* (`store.listFiles()`) are seeded into the cache from their on-disk mtime so a
|
|
87
|
+
* fresh daemon doesn't needlessly rewrite an already-built graph. Files NOT yet
|
|
88
|
+
* in the graph are treated as new and get written.
|
|
89
|
+
*
|
|
90
|
+
* @param store the codegraph storage (independent DB).
|
|
91
|
+
* @param srcDir absolute path to `src/`.
|
|
92
|
+
* @param cache per-file mtime memory carried across ticks (mutated in place).
|
|
93
|
+
* @returns a per-file breakdown of what changed.
|
|
94
|
+
*/
|
|
95
|
+
export function syncCodeGraph(store, srcDir, cache) {
|
|
96
|
+
// First pass: seed the cache from files the graph already tracks so we don't
|
|
97
|
+
// rewrite an already-built graph on daemon startup. We seed with the current
|
|
98
|
+
// on-disk mtime (best effort) — if a file changed while the daemon was down
|
|
99
|
+
// its mtime won't match a later read only if it changes again, but the graph
|
|
100
|
+
// was built from that same content, so treating it as up-to-date is correct.
|
|
101
|
+
if (cache.size === 0) {
|
|
102
|
+
for (const file of store.listFiles()) {
|
|
103
|
+
const m = readMtime(join(srcDir, file));
|
|
104
|
+
if (m)
|
|
105
|
+
cache.set(file, m);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const { nodes, edges } = buildRepoGraph(srcDir);
|
|
109
|
+
// Group by file so we can replace per-file (the store resolves cross-file
|
|
110
|
+
// edge destinations against whatever nodes already exist in the DB).
|
|
111
|
+
const nodesByFile = new Map();
|
|
112
|
+
for (const n of nodes) {
|
|
113
|
+
const arr = nodesByFile.get(n.file) ?? [];
|
|
114
|
+
arr.push(n);
|
|
115
|
+
nodesByFile.set(n.file, arr);
|
|
116
|
+
}
|
|
117
|
+
const edgesByFile = new Map();
|
|
118
|
+
for (const e of edges) {
|
|
119
|
+
const arr = edgesByFile.get(e.srcFile) ?? [];
|
|
120
|
+
arr.push(e);
|
|
121
|
+
edgesByFile.set(e.srcFile, arr);
|
|
122
|
+
}
|
|
123
|
+
const changedFiles = [];
|
|
124
|
+
let unchangedCount = 0;
|
|
125
|
+
for (const [file, fileNodes] of nodesByFile) {
|
|
126
|
+
const diskMtime = readMtime(join(srcDir, file));
|
|
127
|
+
const prevMtime = cache.get(file);
|
|
128
|
+
// New file (not in cache) OR mtime advanced / unknown → rewrite.
|
|
129
|
+
const changed = prevMtime === undefined || diskMtime === null || diskMtime !== prevMtime;
|
|
130
|
+
if (!changed) {
|
|
131
|
+
unchangedCount += 1;
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
store.replaceFileGraph(file, fileNodes, edgesByFile.get(file) ?? [], {
|
|
135
|
+
mtime: diskMtime ?? undefined,
|
|
136
|
+
lang: 'ts',
|
|
137
|
+
});
|
|
138
|
+
if (diskMtime)
|
|
139
|
+
cache.set(file, diskMtime);
|
|
140
|
+
changedFiles.push(file);
|
|
141
|
+
}
|
|
142
|
+
// Files we were tracking that no longer produce nodes (deleted / emptied).
|
|
143
|
+
// We leave their graph rows as-is this pass — pruning deleted files is a
|
|
144
|
+
// separate concern (other files may still resolve edges into them); recorded
|
|
145
|
+
// here for the caller's log + left as a follow-up TODO.
|
|
146
|
+
const liveFiles = new Set(nodesByFile.keys());
|
|
147
|
+
const staleFiles = [...cache.keys()].filter((f) => !liveFiles.has(f));
|
|
148
|
+
return {
|
|
149
|
+
changedFiles,
|
|
150
|
+
unchangedCount,
|
|
151
|
+
staleFiles,
|
|
152
|
+
scannedCount: nodesByFile.size,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/** Resolve `src/` from a project root. */
|
|
156
|
+
export function srcDirFromRoot(projectRoot) {
|
|
157
|
+
return join(projectRoot, 'src');
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=codegraph-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codegraph-sync.js","sourceRoot":"","sources":["../../../src/daemon/services/codegraph-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAQ7D,iDAAiD;AACjD,MAAM,CAAC,MAAM,2BAA2B,GAAG,iCAAiC,CAAC;AAE7E;;;;GAIG;AACH,MAAM,CAAC,MAAM,uCAAuC,GAAG,EAAE,CAAC;AAE1D,iFAAiF;AACjF,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC,CAAC;AAqBrD;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,WAAwB;IACjE,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzD,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,uCAAuC,CAAC;IACtE,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,uCAAuC,CAAC;IAClF,OAAO,IAAI,CAAC,GAAG,CAAC,mCAAmC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,OAAe;IAChC,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAqB,EACrB,MAAc,EACd,KAAiB;IAEjB,6EAA6E;IAC7E,6EAA6E;IAC7E,4EAA4E;IAC5E,6EAA6E;IAC7E,6EAA6E;IAC7E,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACrB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;YACrC,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAEhD,0EAA0E;IAC1E,qEAAqE;IACrE,MAAM,WAAW,GAAG,IAAI,GAAG,EAA2B,CAAC;IACvD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1C,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACZ,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,GAAG,EAA2B,CAAC;IACvD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC7C,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACZ,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAElC,iEAAiE;QACjE,MAAM,OAAO,GACX,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,SAAS,CAAC;QAE3E,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,cAAc,IAAI,CAAC,CAAC;YACpB,SAAS;QACX,CAAC;QAED,KAAK,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE;YACnE,KAAK,EAAE,SAAS,IAAI,SAAS;YAC7B,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;QACH,IAAI,SAAS;YAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC1C,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,2EAA2E;IAC3E,yEAAyE;IACzE,6EAA6E;IAC7E,wDAAwD;IACxD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtE,OAAO;QACL,YAAY;QACZ,cAAc;QACd,UAAU;QACV,YAAY,EAAE,WAAW,CAAC,IAAI;KAC/B,CAAC;AACJ,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,cAAc,CAAC,WAAmB;IAChD,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ContextInjector — owns first-prompt-of-session injection of resume +
|
|
3
|
+
* convention context.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from `UserPromptHandler` (D-3 step 1+2). Single responsibility:
|
|
6
|
+
* decide whether to push resume + convention blocks into the prompt's
|
|
7
|
+
* `additionalContext`, and remember (per-sessionKey) that we already did so.
|
|
8
|
+
*
|
|
9
|
+
* Lifecycle: owned by `UserPromptHandler`. Cleared by `StopHandler` via
|
|
10
|
+
* `clearSession(sessionKey)`.
|
|
11
|
+
*
|
|
12
|
+
* Storage: in-process LRU caches only (no SQLite). Two independent LRUs so
|
|
13
|
+
* resume and convention have separate inject-once semantics (matches the
|
|
14
|
+
* pre-refactor behaviour of the handler).
|
|
15
|
+
*/
|
|
16
|
+
import type { UserPromptSubmitEvent } from '../../core/types.js';
|
|
17
|
+
import type { ResumeManager } from '../../claudemd/resume-manager.js';
|
|
18
|
+
import type { ConventionExtractor } from '../../claudemd/convention-extractor.js';
|
|
19
|
+
export declare class ContextInjector {
|
|
20
|
+
private readonly resume;
|
|
21
|
+
private readonly conventionExtractor;
|
|
22
|
+
private resumeInjected;
|
|
23
|
+
private conventionInjected;
|
|
24
|
+
constructor(resume?: ResumeManager | null, conventionExtractor?: ConventionExtractor | null);
|
|
25
|
+
/**
|
|
26
|
+
* Append resume + convention blocks to `parts` when they have not yet been
|
|
27
|
+
* injected for `sessionKey`. Mutates the array (caller appends to
|
|
28
|
+
* `contextParts`).
|
|
29
|
+
*/
|
|
30
|
+
injectOnce(event: UserPromptSubmitEvent, sessionKey: string, parts: string[]): void;
|
|
31
|
+
/** Remove tracking entries for `sessionKey`. Called by StopHandler. */
|
|
32
|
+
clearSession(sessionKey: string): void;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=context-injector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-injector.d.ts","sourceRoot":"","sources":["../../../src/daemon/services/context-injector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAOlF,qBAAa,eAAe;IAKxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IALtC,OAAO,CAAC,cAAc,CAAoD;IAC1E,OAAO,CAAC,kBAAkB,CAAoD;gBAG3D,MAAM,GAAE,aAAa,GAAG,IAAW,EACnC,mBAAmB,GAAE,mBAAmB,GAAG,IAAW;IAGzE;;;;OAIG;IACH,UAAU,CAAC,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IA2BnF,uEAAuE;IACvE,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;CAIvC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ContextInjector — owns first-prompt-of-session injection of resume +
|
|
3
|
+
* convention context.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from `UserPromptHandler` (D-3 step 1+2). Single responsibility:
|
|
6
|
+
* decide whether to push resume + convention blocks into the prompt's
|
|
7
|
+
* `additionalContext`, and remember (per-sessionKey) that we already did so.
|
|
8
|
+
*
|
|
9
|
+
* Lifecycle: owned by `UserPromptHandler`. Cleared by `StopHandler` via
|
|
10
|
+
* `clearSession(sessionKey)`.
|
|
11
|
+
*
|
|
12
|
+
* Storage: in-process LRU caches only (no SQLite). Two independent LRUs so
|
|
13
|
+
* resume and convention have separate inject-once semantics (matches the
|
|
14
|
+
* pre-refactor behaviour of the handler).
|
|
15
|
+
*/
|
|
16
|
+
import { LRUCache } from '../../core/utils/lru-cache.js';
|
|
17
|
+
import { logger } from '../../core/utils/logger.js';
|
|
18
|
+
import { wrapInjectBlock } from '../utils/inject-block.js';
|
|
19
|
+
const MAX_INJECTION_KEYS = 1000;
|
|
20
|
+
export class ContextInjector {
|
|
21
|
+
resume;
|
|
22
|
+
conventionExtractor;
|
|
23
|
+
resumeInjected = new LRUCache(MAX_INJECTION_KEYS);
|
|
24
|
+
conventionInjected = new LRUCache(MAX_INJECTION_KEYS);
|
|
25
|
+
constructor(resume = null, conventionExtractor = null) {
|
|
26
|
+
this.resume = resume;
|
|
27
|
+
this.conventionExtractor = conventionExtractor;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Append resume + convention blocks to `parts` when they have not yet been
|
|
31
|
+
* injected for `sessionKey`. Mutates the array (caller appends to
|
|
32
|
+
* `contextParts`).
|
|
33
|
+
*/
|
|
34
|
+
injectOnce(event, sessionKey, parts) {
|
|
35
|
+
// 1. Resume (once per session)
|
|
36
|
+
if (this.resume && !this.resumeInjected.has(sessionKey)) {
|
|
37
|
+
this.resumeInjected.set(sessionKey, Date.now());
|
|
38
|
+
const resumeContent = this.resume.load(event.project_path);
|
|
39
|
+
if (resumeContent) {
|
|
40
|
+
parts.push(wrapInjectBlock({ title: 'Forge Context (Read First)', body: resumeContent }));
|
|
41
|
+
logger.info('[ContextInjector] Injected resume context');
|
|
42
|
+
this.resume.clear(event.project_path);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// 2. Convention (once per session)
|
|
46
|
+
if (this.conventionExtractor && !this.conventionInjected.has(sessionKey)) {
|
|
47
|
+
this.conventionInjected.set(sessionKey, Date.now());
|
|
48
|
+
const convention = this.conventionExtractor.extract(event.project_path);
|
|
49
|
+
if (convention) {
|
|
50
|
+
parts.push(wrapInjectBlock({ title: 'Project Guidance (Read First)', body: convention }));
|
|
51
|
+
logger.info('[ContextInjector] Injected project conventions');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/** Remove tracking entries for `sessionKey`. Called by StopHandler. */
|
|
56
|
+
clearSession(sessionKey) {
|
|
57
|
+
this.resumeInjected.delete(sessionKey);
|
|
58
|
+
this.conventionInjected.delete(sessionKey);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=context-injector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-injector.js","sourceRoot":"","sources":["../../../src/daemon/services/context-injector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC,MAAM,OAAO,eAAe;IAKP;IACA;IALX,cAAc,GAAG,IAAI,QAAQ,CAAiB,kBAAkB,CAAC,CAAC;IAClE,kBAAkB,GAAG,IAAI,QAAQ,CAAiB,kBAAkB,CAAC,CAAC;IAE9E,YACmB,SAA+B,IAAI,EACnC,sBAAkD,IAAI;QADtD,WAAM,GAAN,MAAM,CAA6B;QACnC,wBAAmB,GAAnB,mBAAmB,CAAmC;IACtE,CAAC;IAEJ;;;;OAIG;IACH,UAAU,CAAC,KAA4B,EAAE,UAAkB,EAAE,KAAe;QAC1E,+BAA+B;QAC/B,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAChD,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAC3D,IAAI,aAAa,EAAE,CAAC;gBAClB,KAAK,CAAC,IAAI,CACR,eAAe,CAAC,EAAE,KAAK,EAAE,4BAA4B,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAC9E,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;gBACzD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,mCAAmC;QACnC,IAAI,IAAI,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACzE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YACpD,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACxE,IAAI,UAAU,EAAE,CAAC;gBACf,KAAK,CAAC,IAAI,CACR,eAAe,CAAC,EAAE,KAAK,EAAE,+BAA+B,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAC9E,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,YAAY,CAAC,UAAkB;QAC7B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;CACF"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DecisionHint — formats the [DECISION HINT] systemMessage that daemon emits
|
|
3
|
+
* when a prompt is long enough and passes noise/bypass guards.
|
|
4
|
+
*
|
|
5
|
+
* 2026-05-27 Spec 1702: replaces the deleted `SpecGate.tryAutoGenerate` at
|
|
6
|
+
* step 4.5. Instead of silently generating a spec (0% real-world acceptance),
|
|
7
|
+
* the daemon now emits an explicit hint telling the main thread to spawn the
|
|
8
|
+
* `decision-maker` agent.
|
|
9
|
+
*
|
|
10
|
+
* 2026-05-28 decision-flow-overhaul (spec §5.1):
|
|
11
|
+
* - Added `isSystemGeneratedPrompt()` guard (G9 fix): skip noise prompts
|
|
12
|
+
* injected by daemon itself (<task-notification>, <forge-resume-body>, etc.)
|
|
13
|
+
* - Added `isSkipDecisionKeyword()`: bypass token check for "skip decision"
|
|
14
|
+
* - `emitDecisionHint()` now accepts optional SQLiteStorage + event context
|
|
15
|
+
* and writes a `decisions` table row, returning `{ message, decision_id }`
|
|
16
|
+
* instead of a bare string so UserPromptHandler can embed the id in the hint
|
|
17
|
+
*
|
|
18
|
+
* 2026-05-28 Spec 1200 (daemon decision-layer simplification):
|
|
19
|
+
* - Removed intent dependency — trigger is now pure length check:
|
|
20
|
+
* `prompt.length >= TRIGGER_LEN && !isNoise(prompt) && !hasBypass(prompt)`
|
|
21
|
+
* - TRIGGER_LEN configurable via `forge_config.decision_trigger_len` (default 50)
|
|
22
|
+
*
|
|
23
|
+
* Fail-safe: all errors are caught and return `null`; the pipeline keeps running.
|
|
24
|
+
*/
|
|
25
|
+
import type { SQLiteStorage } from '../../core/storage/sqlite.js';
|
|
26
|
+
/**
|
|
27
|
+
* Default minimum prompt length to trigger a decision hint.
|
|
28
|
+
*
|
|
29
|
+
* Set to 0 per 用户诉求 "必须要走" — every non-noise / non-bypass prompt routes
|
|
30
|
+
* to decision-maker. Users wanting to cap short prompts can override via
|
|
31
|
+
* `forge_config.decision_trigger_len`.
|
|
32
|
+
*/
|
|
33
|
+
export declare const DEFAULT_TRIGGER_LEN = 0;
|
|
34
|
+
/** forge_config key for overriding trigger length (spec Q7). */
|
|
35
|
+
export declare const TRIGGER_LEN_CONFIG_KEY = "decision_trigger_len";
|
|
36
|
+
/**
|
|
37
|
+
* decision 7aa0ec63 (2026-06-01 Option C) — cooldown configuration.
|
|
38
|
+
*
|
|
39
|
+
* forge_config key for overriding the per-session decision-maker spawn cooldown
|
|
40
|
+
* (in seconds). When the daemon emitted a hint that the main thread satisfied
|
|
41
|
+
* by actually spawning `decision-maker` (visible as a PreToolUse Task event),
|
|
42
|
+
* we suppress further hints for this many seconds. The same session can still
|
|
43
|
+
* spawn a fresh maker by adding "skip decision" or by waiting out the window.
|
|
44
|
+
*
|
|
45
|
+
* Default: 60 s (covers a typical "read decision doc → approve" loop).
|
|
46
|
+
* Sane range: 0 < value <= 3600. Values outside that range fall back to the
|
|
47
|
+
* default; daemon startup logs a warning so users notice typos.
|
|
48
|
+
*/
|
|
49
|
+
export declare const DECISION_MAKER_COOLDOWN_CONFIG_KEY = "decision_maker_cooldown_seconds";
|
|
50
|
+
/** Default cooldown when forge_config has no override or holds a bad value. */
|
|
51
|
+
export declare const DEFAULT_DECISION_MAKER_COOLDOWN_SECONDS = 60;
|
|
52
|
+
/** Hard upper bound for the cooldown override (1 hour). */
|
|
53
|
+
export declare const MAX_DECISION_MAKER_COOLDOWN_SECONDS = 3600;
|
|
54
|
+
/**
|
|
55
|
+
* Tool names that represent a sub-agent spawn in the `events` table.
|
|
56
|
+
*
|
|
57
|
+
* Bug P1 (decision e888352d, 2026-06-10): current Claude Code emits agent
|
|
58
|
+
* spawns with `tool_name='Agent'` (live DB: 982 'Agent' rows vs 0 'Task'),
|
|
59
|
+
* while older CC builds used `tool_name='Task'`. Any decision-flow lookup that
|
|
60
|
+
* keys off "was decision-maker spawned" MUST accept both, or it becomes a dud
|
|
61
|
+
* that silently never fires. Centralised here so the cooldown gate
|
|
62
|
+
* (isWithinDecisionMakerCoolDown) and the CLI approve-trace lookup
|
|
63
|
+
* (findRecentDecisionMakerSpawn) stay in lock-step.
|
|
64
|
+
*/
|
|
65
|
+
export declare const AGENT_SPAWN_TOOL_NAMES: readonly string[];
|
|
66
|
+
/** True when `tool_name` denotes a sub-agent spawn (Agent | Task). */
|
|
67
|
+
export declare function isAgentSpawnToolName(tool_name: string | null | undefined): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Returns true when the prompt appears to be daemon-injected content
|
|
70
|
+
* rather than a genuine user message. Guards against G9 false positives
|
|
71
|
+
* where daemon-inserted task-notification blobs triggered [DECISION HINT].
|
|
72
|
+
*/
|
|
73
|
+
export declare function isSystemGeneratedPrompt(prompt: string): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Returns true when the user has included the "skip decision" bypass keyword.
|
|
76
|
+
* This is the OQ3 answer: natural-language bypass (same pattern as
|
|
77
|
+
* bmad-question-default's "直接修" / "skip" escapes).
|
|
78
|
+
*/
|
|
79
|
+
export declare function isSkipDecisionKeyword(prompt: string): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Returns true when the prompt is a trivial mint trigger that should NOT
|
|
82
|
+
* produce a [DECISION HINT] / advisory decision row (decision f61b8a0c,
|
|
83
|
+
* audit #6 — "收紧 mint 启发式,治 advisory 空转").
|
|
84
|
+
*
|
|
85
|
+
* The UserPromptSubmit mint heuristic was too loose: with
|
|
86
|
+
* `DEFAULT_TRIGGER_LEN=0` every non-noise prompt minted an advisory row, so
|
|
87
|
+
* pure-image (no-text) prompts, lone punctuation, and bare inspection commands
|
|
88
|
+
* (`list`, `?`, `...`) produced advisory rows that never advanced — pure
|
|
89
|
+
*空转. This guard filters those before the row is written.
|
|
90
|
+
*
|
|
91
|
+
* Conservative by design — it only fires for prompts with no real decision
|
|
92
|
+
* content:
|
|
93
|
+
* 1. Empty / whitespace-only (pure image with no accompanying text).
|
|
94
|
+
* 2. No alphanumeric/CJK content at all (lone punctuation/symbols: `?`,
|
|
95
|
+
* `...`, `???`).
|
|
96
|
+
* 3. A bare inspection/listing command word (see BARE_INSPECTION_COMMAND_RE).
|
|
97
|
+
*
|
|
98
|
+
* It deliberately does NOT fire on short-but-actionable prompts (`rebase`,
|
|
99
|
+
* `fix lint`, `cd ..`) — those still mint. The existing `isLikelyTrivial`
|
|
100
|
+
* guard (approvals/continuations) remains and is complementary.
|
|
101
|
+
*/
|
|
102
|
+
export declare function isTrivialTrigger(prompt: string): boolean;
|
|
103
|
+
/**
|
|
104
|
+
* Resolve the effective TRIGGER_LEN from forge_config or use the default.
|
|
105
|
+
* Used by UserPromptHandler (Step 4.5) to pass into emitDecisionHintSimple.
|
|
106
|
+
*/
|
|
107
|
+
export declare function resolveTriggerLen(storage?: SQLiteStorage | null): number;
|
|
108
|
+
/**
|
|
109
|
+
* decision 7aa0ec63 (Option C, Q1 + Q6) — resolve the per-session
|
|
110
|
+
* decision-maker spawn cooldown from forge_config, with default fallback.
|
|
111
|
+
*
|
|
112
|
+
* Read from `forge_config.decision_maker_cooldown_seconds`. Values outside
|
|
113
|
+
* `(0, MAX_DECISION_MAKER_COOLDOWN_SECONDS]` are treated as invalid and
|
|
114
|
+
* the default is returned. Caller is expected to log a warn separately when
|
|
115
|
+
* an invalid value is rejected (daemon startup does this once at boot).
|
|
116
|
+
*/
|
|
117
|
+
export declare function resolveDecisionMakerCooldownSeconds(storage?: SQLiteStorage | null): number;
|
|
118
|
+
/**
|
|
119
|
+
* decision 7aa0ec63 (Option C, Q2 + Q6) — session-scoped cooldown check.
|
|
120
|
+
*
|
|
121
|
+
* Returns true when this session spawned `decision-maker` (PreToolUse Task
|
|
122
|
+
* event with `tool_input.subagent_type === 'decision-maker'`) within the last
|
|
123
|
+
* `windowSeconds` seconds. The main thread is currently working through a
|
|
124
|
+
* recent maker output; emitting a fresh hint would just stack pending rows.
|
|
125
|
+
*
|
|
126
|
+
* Source-of-truth = `events` table (per Q6): persistent across daemon restart,
|
|
127
|
+
* trivially injectable in unit tests, and same fixture pattern reused from
|
|
128
|
+
* `findRecentDecisionMakerSpawn` (src/cli/commands/decisions.ts §B). The
|
|
129
|
+
* narrower 60 s window (vs 5 min in approve-governance) targets the actual
|
|
130
|
+
* "back-to-back batch nudge" symptom this gate exists for.
|
|
131
|
+
*
|
|
132
|
+
* Fail-silent — if storage.queryEvents throws, returns false so the regular
|
|
133
|
+
* emit path still runs (better to over-emit than swallow a real decision).
|
|
134
|
+
*/
|
|
135
|
+
export declare function isWithinDecisionMakerCoolDown(storage: SQLiteStorage, session_id: string | null | undefined, windowSeconds: number, nowMs?: number): boolean;
|
|
136
|
+
/**
|
|
137
|
+
* Result returned by `emitDecisionHintSimple` when a hint is generated.
|
|
138
|
+
* Contains both the display message AND the DB id so UserPromptHandler
|
|
139
|
+
* can embed the id in the systemMessage for OQ5 tracking.
|
|
140
|
+
*/
|
|
141
|
+
export interface DecisionHintResult {
|
|
142
|
+
/** The [DECISION HINT] text to include in systemMessage. */
|
|
143
|
+
message: string;
|
|
144
|
+
/** The 8-char decision id written to the decisions table. */
|
|
145
|
+
decision_id: string;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Main entry point — pure length-based trigger (spec 1200 simplification).
|
|
149
|
+
*
|
|
150
|
+
* Guards (in order):
|
|
151
|
+
* 1. skip-decision bypass keyword
|
|
152
|
+
* 2. prompt.length < TRIGGER_LEN
|
|
153
|
+
* 3. system-generated prompt (G9 fix)
|
|
154
|
+
*
|
|
155
|
+
* When all guards pass:
|
|
156
|
+
* 1. Writes a `decisions` row (status='advisory' — decision 93e8fff1) to the
|
|
157
|
+
* DB (fail-silent). Advisory is pure bookkeeping in the post-interceptor
|
|
158
|
+
* model (decision 7c924678): it blocks nothing and the Web page renders it
|
|
159
|
+
* without a 批准 button. The status default lives in writeDecision.
|
|
160
|
+
* 2. Returns `{ message, decision_id }` — UserPromptHandler splices
|
|
161
|
+
* `decision_id: <id>` into the systemMessage
|
|
162
|
+
*
|
|
163
|
+
* Returns `null` when any guard fires (no DB write, no systemMessage).
|
|
164
|
+
*
|
|
165
|
+
* @param prompt - The raw user prompt text.
|
|
166
|
+
* @param triggerLen - Minimum prompt length (default DEFAULT_TRIGGER_LEN=50).
|
|
167
|
+
* @param storage - Optional SQLiteStorage for persisting the decision row.
|
|
168
|
+
* @param eventContext - Optional event fields for the DB row.
|
|
169
|
+
*/
|
|
170
|
+
export declare function emitDecisionHintSimple(prompt: string, triggerLen?: number, storage?: SQLiteStorage | null, eventContext?: {
|
|
171
|
+
session_id: string;
|
|
172
|
+
project_path: string;
|
|
173
|
+
event_id?: string;
|
|
174
|
+
} | null): DecisionHintResult | null;
|
|
175
|
+
/**
|
|
176
|
+
* Returns true when the prompt is likely trivial (a simple approval or
|
|
177
|
+
* one-word command) and can skip the full decision-maker workflow.
|
|
178
|
+
*
|
|
179
|
+
* Two conditions — BOTH must be true to avoid false positives:
|
|
180
|
+
* 1. prompt length < 50 chars (short enough to be trivial)
|
|
181
|
+
* 2. Starts with or consists of a trivial keyword
|
|
182
|
+
*
|
|
183
|
+
* Used by formatHintMessage to suggest model=haiku for trivial prompts.
|
|
184
|
+
* The decision-maker template Step 0 uses a tighter threshold (< 30 chars)
|
|
185
|
+
* for its own fast-exit — this function uses 50 for the daemon-side hint
|
|
186
|
+
* to bias toward haiku earlier in the pipeline.
|
|
187
|
+
*
|
|
188
|
+
* Option B (decision b95e0956, 2026-05-29 — Q1): keyword set expanded to
|
|
189
|
+
* cover the real-world "continuation" short prompts that previously slipped
|
|
190
|
+
* through and forced a [DECISION HINT] emit for trivial follow-ups:
|
|
191
|
+
* added: 提交 / 推送 / push / commit / 那就 / 修复吧 / 启动吧 / 开始 /
|
|
192
|
+
* 搞 / 做 / 开干 / 接着做 / 继续做
|
|
193
|
+
* Original list (好/对/是/继续/批准/approve/yes/ok/skip/确认/确定/go/
|
|
194
|
+
* proceed/done/完成/可以) preserved — additive expansion.
|
|
195
|
+
*
|
|
196
|
+
* @param s - The intent summary or raw prompt.
|
|
197
|
+
*/
|
|
198
|
+
export declare function isLikelyTrivial(s: string): boolean;
|
|
199
|
+
/**
|
|
200
|
+
* Option B (decision b95e0956, 2026-05-29 — Q1+Q2) — "continuation" prompt
|
|
201
|
+
* detection.
|
|
202
|
+
*
|
|
203
|
+
* Returns true when the current prompt is plausibly a continuation of recent
|
|
204
|
+
* decided work and should NOT trigger a fresh [DECISION HINT].
|
|
205
|
+
*
|
|
206
|
+
* Q2 contract: **both** conditions must hold (AND, not OR):
|
|
207
|
+
* 1. There are at least `CONTINUATION_MIN_RESOLVED` (=3) resolved decisions
|
|
208
|
+
* for this session AND
|
|
209
|
+
* 2. The most recent resolved one is within `CONTINUATION_WINDOW_MS`
|
|
210
|
+
* (=30 min)
|
|
211
|
+
*
|
|
212
|
+
* AND the current prompt itself must look continuation-flavoured — i.e.
|
|
213
|
+
* contain one of the Q1 recommended keywords. This avoids classifying a
|
|
214
|
+
* genuinely fresh long task as a continuation just because the session has
|
|
215
|
+
* been busy.
|
|
216
|
+
*
|
|
217
|
+
* @param prompt - The raw user prompt text.
|
|
218
|
+
* @param recentResolved - Output of `listRecentResolvedDecisions` for this
|
|
219
|
+
* session (any length; newest first).
|
|
220
|
+
* @param nowMs - Override clock for tests (defaults to Date.now()).
|
|
221
|
+
*/
|
|
222
|
+
export declare const CONTINUATION_WINDOW_MS: number;
|
|
223
|
+
export declare const CONTINUATION_MIN_RESOLVED = 3;
|
|
224
|
+
export declare function isContinuation(prompt: string, recentResolved: Array<{
|
|
225
|
+
id: string;
|
|
226
|
+
resolved_at: string | null;
|
|
227
|
+
created_at: string;
|
|
228
|
+
}>, nowMs?: number): boolean;
|
|
229
|
+
/**
|
|
230
|
+
* Formats the hint message body. Kept separate for unit-test readability.
|
|
231
|
+
*
|
|
232
|
+
* Compressed template (decision ed98c8e8, 2026-06-10): the old 38-line
|
|
233
|
+
* version re-taught the decision-maker 5-step workflow on EVERY hint —
|
|
234
|
+
* pure duplication of the CLAUDE.md "DECISION HINT 协议契约" section
|
|
235
|
+
* (the single authoritative text). Kept: `[DECISION HINT]` marker,
|
|
236
|
+
* copy-paste Task command, model suggestion, `<!-- decision-id -->`
|
|
237
|
+
* magic comment, one-line bypass.
|
|
238
|
+
*/
|
|
239
|
+
export declare function formatHintMessage(workflowType: string, suggestedAgent: string, intentSummary: string, decision_id: string | null): string;
|
|
240
|
+
//# sourceMappingURL=decision-hint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decision-hint.d.ts","sourceRoot":"","sources":["../../../src/daemon/services/decision-hint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAGlE;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,gEAAgE;AAChE,eAAO,MAAM,sBAAsB,yBAAyB,CAAC;AAE7D;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kCAAkC,oCAAoC,CAAC;AAEpF,+EAA+E;AAC/E,eAAO,MAAM,uCAAuC,KAAK,CAAC;AAE1D,2DAA2D;AAC3D,eAAO,MAAM,mCAAmC,OAAO,CAAC;AAKxD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,sBAAsB,EAAE,SAAS,MAAM,EAA+B,CAAC;AAEpF,sEAAsE;AACtE,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAElF;AA6BD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAG/D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE7D;AAmBD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAUxD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,GAAG,MAAM,CAYxE;AAED;;;;;;;;GAQG;AACH,wBAAgB,mCAAmC,CACjD,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,GAC7B,MAAM,CAiBR;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACrC,aAAa,EAAE,MAAM,EACrB,KAAK,GAAE,MAAmB,GACzB,OAAO,CA4BT;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,UAAU,GAAE,MAA4B,EACxC,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,EAC9B,YAAY,CAAC,EAAE;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,GACP,kBAAkB,GAAG,IAAI,CA6I3B;AA2BD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAqBlD;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,sBAAsB,QAAiB,CAAC;AACrD,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAM3C,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,EACrF,KAAK,GAAE,MAAmB,GACzB,OAAO,CAeT;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB,MAAM,CAwBR"}
|