@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,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LoopHint — formats the advisory `[LOOP HINT]` systemMessage the daemon emits
|
|
3
|
+
* when a prompt looks like one of the 3 whitelisted loop-suitable scenarios.
|
|
4
|
+
*
|
|
5
|
+
* decision e7d13697 (2026-06-11, Option C — approved):
|
|
6
|
+
* The user wants the freshly-landed goal-convergence loop (`cf loop run`,
|
|
7
|
+
* governance §10) SUGGESTED automatically in matching scenarios — but as an
|
|
8
|
+
* ADVISORY hint only, never auto-run / never auto-spawn. This mirrors the
|
|
9
|
+
* existing `[DECISION HINT]` advisory pattern (services/decision-hint.ts):
|
|
10
|
+
* the daemon mints a systemMessage, the main thread still gates with a human
|
|
11
|
+
* review before entering a loop.
|
|
12
|
+
*
|
|
13
|
+
* Why advisory-only (core-belief «daemon 永不对主线程加硬约束新智能»):
|
|
14
|
+
* This service produces TEXT and (optionally) a telemetry row. It NEVER calls
|
|
15
|
+
* `cf loop run`, never spawns an agent, never denies. The "should we loop?"
|
|
16
|
+
* judgement stays with the main thread.
|
|
17
|
+
*
|
|
18
|
+
* Conservative-by-design (decision OQ2 hard constraint + fe6f98cd/KB
|
|
19
|
+
* low-adoption history): we only mint for prompts we are confident fall into a
|
|
20
|
+
* whitelisted scenario WITH a clean machine-judgeable PASS criterion. Open-ended
|
|
21
|
+
* tasks with no clean PASS are excluded — they would oscillate / loop forever.
|
|
22
|
+
* Better to under-mint than to spam.
|
|
23
|
+
*
|
|
24
|
+
* Fail-safe: every entry point catches its own errors and returns null; the
|
|
25
|
+
* UserPromptSubmit pipeline keeps running.
|
|
26
|
+
*/
|
|
27
|
+
import type { SQLiteStorage } from '../../core/storage/sqlite.js';
|
|
28
|
+
/**
|
|
29
|
+
* forge_config key gating `[LOOP HINT]` minting. Default `true` (the user
|
|
30
|
+
* opted in via decision e7d13697). Set to `false` to suppress the hint without
|
|
31
|
+
* a code change (reversibility — decision Triage: all of A/B/C reversible).
|
|
32
|
+
*
|
|
33
|
+
* Seeded by `seedLoopConfig` (src/cli/commands/loop.ts) alongside the other
|
|
34
|
+
* `loop.*` keys, so a fresh install gets the default.
|
|
35
|
+
*/
|
|
36
|
+
export declare const LOOP_HINT_ENABLED_CONFIG_KEY = "loop.hint_enabled";
|
|
37
|
+
/** Default when the key is absent (user opted in). */
|
|
38
|
+
export declare const DEFAULT_LOOP_HINT_ENABLED = true;
|
|
39
|
+
/**
|
|
40
|
+
* source_handler tag for the telemetry injection row (decision OQ5).
|
|
41
|
+
*
|
|
42
|
+
* Mirrors the KB-adoption precedent (decision 148f7a0a): KB injections are
|
|
43
|
+
* tagged `UserPromptSubmitHandler:kb` and stamped `adopted_at` when the session
|
|
44
|
+
* later actively uses the injected knowledge. We reuse the SAME `injections`
|
|
45
|
+
* table + `adopted_at` mechanism: a `[LOOP HINT]` mint writes one row with this
|
|
46
|
+
* tag; PostToolUse stamps `adopted_at` when the session later runs `cf loop run`
|
|
47
|
+
* (the observable "the hint was adopted" signal). See
|
|
48
|
+
* src/core/storage/injections.ts writeLoopHintAdoption / countLoopHintAdoption.
|
|
49
|
+
*/
|
|
50
|
+
export declare const LOOP_HINT_SOURCE_HANDLER = "UserPromptSubmitHandler:loop-hint";
|
|
51
|
+
/** The 3 whitelisted scenarios (decision resolved scope). */
|
|
52
|
+
export type LoopScenario = 'bug-fix' | 'test-lint-green' | 'spec-impl';
|
|
53
|
+
/**
|
|
54
|
+
* Result of `classifyLoopScenario`. `null` when no whitelist scenario matched
|
|
55
|
+
* (the common case — most prompts are not loop-suitable).
|
|
56
|
+
*/
|
|
57
|
+
export interface LoopScenarioMatch {
|
|
58
|
+
scenario: LoopScenario;
|
|
59
|
+
/** Human-readable label for the hint body. */
|
|
60
|
+
label: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Conservative scenario classifier (decision OQ2).
|
|
64
|
+
*
|
|
65
|
+
* Returns the matched whitelist scenario, or `null` to mint nothing. Precision
|
|
66
|
+
* is favoured over recall: a prompt must clearly carry BOTH an action signal
|
|
67
|
+
* AND a subject/PASS signal for its scenario, and must NOT look open-ended.
|
|
68
|
+
*
|
|
69
|
+
* Order of checks:
|
|
70
|
+
* 0. Empty / system-generated / skip-decision → null (never classify).
|
|
71
|
+
* 1. Open-ended exclusion → null (vague tasks with no clean PASS).
|
|
72
|
+
* 2. Scenario-1 bug-fix.
|
|
73
|
+
* 3. Scenario-2 test/lint green.
|
|
74
|
+
* 4. Scenario-3 spec implementation (requires an explicit PASS-criterion or
|
|
75
|
+
* spec reference so "implement a button" doesn't mint).
|
|
76
|
+
*
|
|
77
|
+
* Pure function (no I/O) so it is trivially unit-testable.
|
|
78
|
+
*/
|
|
79
|
+
export declare function classifyLoopScenario(prompt: string): LoopScenarioMatch | null;
|
|
80
|
+
/**
|
|
81
|
+
* Resolve whether `[LOOP HINT]` minting is enabled from forge_config.
|
|
82
|
+
*
|
|
83
|
+
* Default `true` (user opted in). Any value other than the literal `'false'`
|
|
84
|
+
* (case-insensitive, trimmed) is treated as enabled, matching the lenient
|
|
85
|
+
* coercion used elsewhere (the key is seeded as the string `'false'`/`'true'`).
|
|
86
|
+
* Fail-silent: on any storage error, fall back to the default.
|
|
87
|
+
*/
|
|
88
|
+
export declare function resolveLoopHintEnabled(storage?: SQLiteStorage | null): boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Result returned by `emitLoopHintSimple` when a hint is generated.
|
|
91
|
+
*/
|
|
92
|
+
export interface LoopHintResult {
|
|
93
|
+
/** The `[LOOP HINT]` text to include in systemMessage. */
|
|
94
|
+
message: string;
|
|
95
|
+
/** The matched scenario (for logging / tests). */
|
|
96
|
+
scenario: LoopScenario;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Main entry point — decides whether to emit a `[LOOP HINT]` for this prompt
|
|
100
|
+
* and (when it does) writes the adoption-telemetry injection row.
|
|
101
|
+
*
|
|
102
|
+
* Guards (in order):
|
|
103
|
+
* 1. `loop.hint_enabled = false` → null (config gate, reversible).
|
|
104
|
+
* 2. scenario classifier returns null → null (not loop-suitable).
|
|
105
|
+
*
|
|
106
|
+
* When it mints:
|
|
107
|
+
* • Writes ONE `injections` row tagged LOOP_HINT_SOURCE_HANDLER (fail-silent)
|
|
108
|
+
* so adoption can later be measured (PostToolUse stamps `adopted_at` when
|
|
109
|
+
* the session runs `cf loop run`). Without this landing point we could not
|
|
110
|
+
* judge keep-vs-remove — the whole reason Option C was chosen over D.
|
|
111
|
+
* • Returns `{ message, scenario }`. The handler pushes `message` into
|
|
112
|
+
* systemParts; it is ADVISORY text with zero side effects beyond the row.
|
|
113
|
+
*
|
|
114
|
+
* Coexistence with `[DECISION HINT]` (decision guardrail): this is ADDITIVE and
|
|
115
|
+
* SECONDARY. A prompt can be both decision-worthy and loop-suitable; the loop
|
|
116
|
+
* hint is appended as its own section and never suppresses / replaces the
|
|
117
|
+
* decision hint. The decision hint stays the primary "spawn decision-maker"
|
|
118
|
+
* directive; the loop hint just additionally suggests the loop pattern.
|
|
119
|
+
*
|
|
120
|
+
* @param prompt - The raw user prompt text.
|
|
121
|
+
* @param storage - Optional SQLiteStorage (config gate + telemetry row).
|
|
122
|
+
* @param eventContext - Optional event fields for the telemetry row.
|
|
123
|
+
*/
|
|
124
|
+
export declare function emitLoopHintSimple(prompt: string, storage?: SQLiteStorage | null, eventContext?: {
|
|
125
|
+
session_id: string;
|
|
126
|
+
project_path: string;
|
|
127
|
+
event_id?: string;
|
|
128
|
+
timestamp?: string;
|
|
129
|
+
} | null): LoopHintResult | null;
|
|
130
|
+
/**
|
|
131
|
+
* Formats the `[LOOP HINT]` body. Kept separate for unit-test readability and
|
|
132
|
+
* to mirror `formatHintMessage` in decision-hint.ts.
|
|
133
|
+
*
|
|
134
|
+
* The body: names the matched scenario, suggests the loop-until-verify-PASS
|
|
135
|
+
* pattern (`cf loop run` / governance §10), and makes explicit that the main
|
|
136
|
+
* thread should still GATE at the start (human review — never auto-run).
|
|
137
|
+
*/
|
|
138
|
+
export declare function formatLoopHintMessage(match: LoopScenarioMatch, intentSummary: string): string;
|
|
139
|
+
//# sourceMappingURL=loop-hint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop-hint.d.ts","sourceRoot":"","sources":["../../../src/daemon/services/loop-hint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAMlE;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,sBAAsB,CAAC;AAEhE,sDAAsD;AACtD,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAE9C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,wBAAwB,sCAAsC,CAAC;AAK5E,6DAA6D;AAC7D,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,iBAAiB,GAAG,WAAW,CAAC;AA8DvE;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,YAAY,CAAC;IACvB,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CA2C7E;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,GAAG,OAAO,CAS9E;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,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;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,IAAI,GACP,cAAc,GAAG,IAAI,CAoCvB;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,iBAAiB,EACxB,aAAa,EAAE,MAAM,GACpB,MAAM,CAcR"}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LoopHint — formats the advisory `[LOOP HINT]` systemMessage the daemon emits
|
|
3
|
+
* when a prompt looks like one of the 3 whitelisted loop-suitable scenarios.
|
|
4
|
+
*
|
|
5
|
+
* decision e7d13697 (2026-06-11, Option C — approved):
|
|
6
|
+
* The user wants the freshly-landed goal-convergence loop (`cf loop run`,
|
|
7
|
+
* governance §10) SUGGESTED automatically in matching scenarios — but as an
|
|
8
|
+
* ADVISORY hint only, never auto-run / never auto-spawn. This mirrors the
|
|
9
|
+
* existing `[DECISION HINT]` advisory pattern (services/decision-hint.ts):
|
|
10
|
+
* the daemon mints a systemMessage, the main thread still gates with a human
|
|
11
|
+
* review before entering a loop.
|
|
12
|
+
*
|
|
13
|
+
* Why advisory-only (core-belief «daemon 永不对主线程加硬约束新智能»):
|
|
14
|
+
* This service produces TEXT and (optionally) a telemetry row. It NEVER calls
|
|
15
|
+
* `cf loop run`, never spawns an agent, never denies. The "should we loop?"
|
|
16
|
+
* judgement stays with the main thread.
|
|
17
|
+
*
|
|
18
|
+
* Conservative-by-design (decision OQ2 hard constraint + fe6f98cd/KB
|
|
19
|
+
* low-adoption history): we only mint for prompts we are confident fall into a
|
|
20
|
+
* whitelisted scenario WITH a clean machine-judgeable PASS criterion. Open-ended
|
|
21
|
+
* tasks with no clean PASS are excluded — they would oscillate / loop forever.
|
|
22
|
+
* Better to under-mint than to spam.
|
|
23
|
+
*
|
|
24
|
+
* Fail-safe: every entry point catches its own errors and returns null; the
|
|
25
|
+
* UserPromptSubmit pipeline keeps running.
|
|
26
|
+
*/
|
|
27
|
+
import { isSystemGeneratedPrompt, isSkipDecisionKeyword, } from './decision-hint.js';
|
|
28
|
+
/**
|
|
29
|
+
* forge_config key gating `[LOOP HINT]` minting. Default `true` (the user
|
|
30
|
+
* opted in via decision e7d13697). Set to `false` to suppress the hint without
|
|
31
|
+
* a code change (reversibility — decision Triage: all of A/B/C reversible).
|
|
32
|
+
*
|
|
33
|
+
* Seeded by `seedLoopConfig` (src/cli/commands/loop.ts) alongside the other
|
|
34
|
+
* `loop.*` keys, so a fresh install gets the default.
|
|
35
|
+
*/
|
|
36
|
+
export const LOOP_HINT_ENABLED_CONFIG_KEY = 'loop.hint_enabled';
|
|
37
|
+
/** Default when the key is absent (user opted in). */
|
|
38
|
+
export const DEFAULT_LOOP_HINT_ENABLED = true;
|
|
39
|
+
/**
|
|
40
|
+
* source_handler tag for the telemetry injection row (decision OQ5).
|
|
41
|
+
*
|
|
42
|
+
* Mirrors the KB-adoption precedent (decision 148f7a0a): KB injections are
|
|
43
|
+
* tagged `UserPromptSubmitHandler:kb` and stamped `adopted_at` when the session
|
|
44
|
+
* later actively uses the injected knowledge. We reuse the SAME `injections`
|
|
45
|
+
* table + `adopted_at` mechanism: a `[LOOP HINT]` mint writes one row with this
|
|
46
|
+
* tag; PostToolUse stamps `adopted_at` when the session later runs `cf loop run`
|
|
47
|
+
* (the observable "the hint was adopted" signal). See
|
|
48
|
+
* src/core/storage/injections.ts writeLoopHintAdoption / countLoopHintAdoption.
|
|
49
|
+
*/
|
|
50
|
+
export const LOOP_HINT_SOURCE_HANDLER = 'UserPromptSubmitHandler:loop-hint';
|
|
51
|
+
/** Max chars of the prompt echoed back into the hint body. */
|
|
52
|
+
const LOOP_HINT_SUMMARY_MAX = 150;
|
|
53
|
+
/**
|
|
54
|
+
* Human-readable scenario label used in the hint body.
|
|
55
|
+
*/
|
|
56
|
+
const SCENARIO_LABELS = {
|
|
57
|
+
'bug-fix': 'bug 修复(有明确 verify-PASS 判据)',
|
|
58
|
+
'test-lint-green': '测试 / lint「修到绿」(fix until green)',
|
|
59
|
+
'spec-impl': '明确 spec 的实现(verify 能判完成)',
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Verbs / phrases that signal a machine-judgeable PASS criterion. A whitelist
|
|
63
|
+
* scenario REQUIRES at least one of these to be present (so we don't mint for
|
|
64
|
+
* open-ended "improve the architecture" style prompts that have no clean stop
|
|
65
|
+
* condition). This is the conservative gate referenced in decision OQ2.
|
|
66
|
+
*/
|
|
67
|
+
const PASS_CRITERION_RE = /(verify|pass|绿|green|通过|all\s+green|until\s+green|修到绿|跑通|build\s+success|构建成功|测试通过|全部通过|exit\s+0)/i;
|
|
68
|
+
/**
|
|
69
|
+
* Scenario-1: bug-fix. Requires a fix-flavoured verb AND a bug/error noun.
|
|
70
|
+
* Conservative: "fix the typo in the README" matches "fix" but has no
|
|
71
|
+
* bug/error/failing noun, so it does NOT mint — which is the desired
|
|
72
|
+
* under-minting bias.
|
|
73
|
+
*/
|
|
74
|
+
const BUGFIX_ACTION_RE = /(fix|修复|修一?下|repair|resolve|解决|debug|排查)/i;
|
|
75
|
+
const BUGFIX_SUBJECT_RE = /(bug|缺陷|错误|error|crash|崩溃|异常|exception|报错|failing|fail\b|失败|回归|regression|挂了|不工作|doesn'?t\s+work|broken)/i;
|
|
76
|
+
/**
|
|
77
|
+
* Scenario-2: test/lint "fix until green". Requires a test/lint noun AND a
|
|
78
|
+
* make-green verb (fix / 修 / pass / 跑通 / green / 绿).
|
|
79
|
+
*/
|
|
80
|
+
// Note: `spec` is intentionally EXCLUDED here — in this codebase "spec" almost
|
|
81
|
+
// always means a specification document (scenario-3), not a test spec. Treating
|
|
82
|
+
// it as a test noun made "implement the spec and make verify pass" misclassify
|
|
83
|
+
// as test-lint-green. Test specs are still caught via `vitest`/`jest`/`用例`/
|
|
84
|
+
// `单测`/`test`.
|
|
85
|
+
const TEST_LINT_SUBJECT_RE = /(test|测试|lint|eslint|tsc|typecheck|类型检查|ci\b|用例|单测|e2e|vitest|jest)/i;
|
|
86
|
+
const MAKE_GREEN_RE = /(green|绿|pass|通过|跑通|fix|修复|修一?下|修到|until\s+green|all\s+pass|全部通过|fail|失败|红)/i;
|
|
87
|
+
/**
|
|
88
|
+
* Scenario-3: implement an explicit spec where verify can judge done. Requires
|
|
89
|
+
* an implement verb AND a spec/decision reference.
|
|
90
|
+
*/
|
|
91
|
+
const IMPL_ACTION_RE = /(implement|实现|落地|按.*实现|实施|build\s+(?:the|a)\b|开发)/i;
|
|
92
|
+
const SPEC_SUBJECT_RE = /(spec\b|规格|decision\b|决策|需求|requirement|design\s+doc|设计文档|acceptance|验收|按.*(?:spec|规格|决策|文档))/i;
|
|
93
|
+
/**
|
|
94
|
+
* Open-ended exclusion guard. Prompts dominated by exploratory / vague verbs
|
|
95
|
+
* with no concrete PASS criterion must NOT mint even if they incidentally
|
|
96
|
+
* contain a whitelisted keyword. This is the "exclude open-ended tasks with no
|
|
97
|
+
* clean PASS criterion" requirement (they'd loop forever).
|
|
98
|
+
*/
|
|
99
|
+
const OPEN_ENDED_RE = /(explore|调研|research|brainstorm|头脑风暴|讨论|discuss|design\s+(?:from\s+scratch|a\s+new)|重新设计|想法|idea|方向|strategy|策略|optimize\s+(?:performance|the\s+architecture)|优化架构|提升性能|看看怎么|要不要|该不该|是否应该|whether\s+to|should\s+we)/i;
|
|
100
|
+
/**
|
|
101
|
+
* Conservative scenario classifier (decision OQ2).
|
|
102
|
+
*
|
|
103
|
+
* Returns the matched whitelist scenario, or `null` to mint nothing. Precision
|
|
104
|
+
* is favoured over recall: a prompt must clearly carry BOTH an action signal
|
|
105
|
+
* AND a subject/PASS signal for its scenario, and must NOT look open-ended.
|
|
106
|
+
*
|
|
107
|
+
* Order of checks:
|
|
108
|
+
* 0. Empty / system-generated / skip-decision → null (never classify).
|
|
109
|
+
* 1. Open-ended exclusion → null (vague tasks with no clean PASS).
|
|
110
|
+
* 2. Scenario-1 bug-fix.
|
|
111
|
+
* 3. Scenario-2 test/lint green.
|
|
112
|
+
* 4. Scenario-3 spec implementation (requires an explicit PASS-criterion or
|
|
113
|
+
* spec reference so "implement a button" doesn't mint).
|
|
114
|
+
*
|
|
115
|
+
* Pure function (no I/O) so it is trivially unit-testable.
|
|
116
|
+
*/
|
|
117
|
+
export function classifyLoopScenario(prompt) {
|
|
118
|
+
const text = (prompt ?? '').trim();
|
|
119
|
+
if (text.length === 0)
|
|
120
|
+
return null;
|
|
121
|
+
if (isSkipDecisionKeyword(text))
|
|
122
|
+
return null;
|
|
123
|
+
if (isSystemGeneratedPrompt(text))
|
|
124
|
+
return null;
|
|
125
|
+
// (1) Open-ended exclusion — bias hard toward under-minting.
|
|
126
|
+
if (OPEN_ENDED_RE.test(text))
|
|
127
|
+
return null;
|
|
128
|
+
// (2) test/lint "fix until green": test-noun AND make-green verb. Checked
|
|
129
|
+
// BEFORE bug-fix because "fix the failing tests until green" carries both
|
|
130
|
+
// a bug-flavoured noun ("failing") and a test noun — the test scenario is
|
|
131
|
+
// the more specific intent, so it wins. A bug fix WITHOUT a test noun
|
|
132
|
+
// ("fix the crash in the daemon") falls through to scenario-3 below.
|
|
133
|
+
if (TEST_LINT_SUBJECT_RE.test(text) && MAKE_GREEN_RE.test(text)) {
|
|
134
|
+
return {
|
|
135
|
+
scenario: 'test-lint-green',
|
|
136
|
+
label: SCENARIO_LABELS['test-lint-green'],
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
// (3) bug-fix: fix-verb AND bug-noun. The verify-PASS criterion is implicit
|
|
140
|
+
// for bug fixes (verify-agent判 PASS), so we don't additionally require
|
|
141
|
+
// PASS_CRITERION_RE here — the bug-noun is the concrete stop condition.
|
|
142
|
+
if (BUGFIX_ACTION_RE.test(text) && BUGFIX_SUBJECT_RE.test(text)) {
|
|
143
|
+
return { scenario: 'bug-fix', label: SCENARIO_LABELS['bug-fix'] };
|
|
144
|
+
}
|
|
145
|
+
// (4) spec implementation: implement-verb AND spec-noun, AND the prompt must
|
|
146
|
+
// carry an explicit PASS criterion OR a spec/decision reference (the
|
|
147
|
+
// spec-noun itself). Requiring SPEC_SUBJECT_RE already enforces this; we
|
|
148
|
+
// additionally reject if it reads open-ended (handled above). This keeps
|
|
149
|
+
// "implement a login page" (no spec, no PASS) from minting.
|
|
150
|
+
if (IMPL_ACTION_RE.test(text) && SPEC_SUBJECT_RE.test(text)) {
|
|
151
|
+
return { scenario: 'spec-impl', label: SCENARIO_LABELS['spec-impl'] };
|
|
152
|
+
}
|
|
153
|
+
// PASS_CRITERION_RE is intentionally NOT a standalone mint trigger — a lone
|
|
154
|
+
// "make it pass" with no scenario subject is too ambiguous. It is referenced
|
|
155
|
+
// in the doc as the conceptual gate the three subject checks encode.
|
|
156
|
+
void PASS_CRITERION_RE;
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Resolve whether `[LOOP HINT]` minting is enabled from forge_config.
|
|
161
|
+
*
|
|
162
|
+
* Default `true` (user opted in). Any value other than the literal `'false'`
|
|
163
|
+
* (case-insensitive, trimmed) is treated as enabled, matching the lenient
|
|
164
|
+
* coercion used elsewhere (the key is seeded as the string `'false'`/`'true'`).
|
|
165
|
+
* Fail-silent: on any storage error, fall back to the default.
|
|
166
|
+
*/
|
|
167
|
+
export function resolveLoopHintEnabled(storage) {
|
|
168
|
+
if (!storage)
|
|
169
|
+
return DEFAULT_LOOP_HINT_ENABLED;
|
|
170
|
+
try {
|
|
171
|
+
const raw = storage.readConfig(LOOP_HINT_ENABLED_CONFIG_KEY);
|
|
172
|
+
if (raw === undefined || raw === null)
|
|
173
|
+
return DEFAULT_LOOP_HINT_ENABLED;
|
|
174
|
+
return raw.trim().toLowerCase() !== 'false';
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
return DEFAULT_LOOP_HINT_ENABLED;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Main entry point — decides whether to emit a `[LOOP HINT]` for this prompt
|
|
182
|
+
* and (when it does) writes the adoption-telemetry injection row.
|
|
183
|
+
*
|
|
184
|
+
* Guards (in order):
|
|
185
|
+
* 1. `loop.hint_enabled = false` → null (config gate, reversible).
|
|
186
|
+
* 2. scenario classifier returns null → null (not loop-suitable).
|
|
187
|
+
*
|
|
188
|
+
* When it mints:
|
|
189
|
+
* • Writes ONE `injections` row tagged LOOP_HINT_SOURCE_HANDLER (fail-silent)
|
|
190
|
+
* so adoption can later be measured (PostToolUse stamps `adopted_at` when
|
|
191
|
+
* the session runs `cf loop run`). Without this landing point we could not
|
|
192
|
+
* judge keep-vs-remove — the whole reason Option C was chosen over D.
|
|
193
|
+
* • Returns `{ message, scenario }`. The handler pushes `message` into
|
|
194
|
+
* systemParts; it is ADVISORY text with zero side effects beyond the row.
|
|
195
|
+
*
|
|
196
|
+
* Coexistence with `[DECISION HINT]` (decision guardrail): this is ADDITIVE and
|
|
197
|
+
* SECONDARY. A prompt can be both decision-worthy and loop-suitable; the loop
|
|
198
|
+
* hint is appended as its own section and never suppresses / replaces the
|
|
199
|
+
* decision hint. The decision hint stays the primary "spawn decision-maker"
|
|
200
|
+
* directive; the loop hint just additionally suggests the loop pattern.
|
|
201
|
+
*
|
|
202
|
+
* @param prompt - The raw user prompt text.
|
|
203
|
+
* @param storage - Optional SQLiteStorage (config gate + telemetry row).
|
|
204
|
+
* @param eventContext - Optional event fields for the telemetry row.
|
|
205
|
+
*/
|
|
206
|
+
export function emitLoopHintSimple(prompt, storage, eventContext) {
|
|
207
|
+
try {
|
|
208
|
+
// (1) Config gate — reversible kill switch.
|
|
209
|
+
if (!resolveLoopHintEnabled(storage))
|
|
210
|
+
return null;
|
|
211
|
+
// (2) Conservative scenario classification.
|
|
212
|
+
const match = classifyLoopScenario(prompt);
|
|
213
|
+
if (!match)
|
|
214
|
+
return null;
|
|
215
|
+
const message = formatLoopHintMessage(match, truncateSummary(prompt));
|
|
216
|
+
// (3) Adoption telemetry — write the mint row (fail-silent). Reuses the
|
|
217
|
+
// KB-adoption `injections` + `adopted_at` mechanism (decision 148f7a0a).
|
|
218
|
+
if (storage && eventContext) {
|
|
219
|
+
try {
|
|
220
|
+
storage.writeInjection({
|
|
221
|
+
event_id: eventContext.event_id,
|
|
222
|
+
session_id: eventContext.session_id,
|
|
223
|
+
timestamp: eventContext.timestamp ?? new Date().toISOString(),
|
|
224
|
+
source_handler: LOOP_HINT_SOURCE_HANDLER,
|
|
225
|
+
injection_type: 'systemMessage',
|
|
226
|
+
content: message,
|
|
227
|
+
metadata_json: JSON.stringify({
|
|
228
|
+
scenario: match.scenario,
|
|
229
|
+
project_path: eventContext.project_path,
|
|
230
|
+
}),
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
// telemetry is observability, never a blocker.
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return { message, scenario: match.scenario };
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
return null;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Formats the `[LOOP HINT]` body. Kept separate for unit-test readability and
|
|
245
|
+
* to mirror `formatHintMessage` in decision-hint.ts.
|
|
246
|
+
*
|
|
247
|
+
* The body: names the matched scenario, suggests the loop-until-verify-PASS
|
|
248
|
+
* pattern (`cf loop run` / governance §10), and makes explicit that the main
|
|
249
|
+
* thread should still GATE at the start (human review — never auto-run).
|
|
250
|
+
*/
|
|
251
|
+
export function formatLoopHintMessage(match, intentSummary) {
|
|
252
|
+
return [
|
|
253
|
+
'[LOOP HINT]',
|
|
254
|
+
'',
|
|
255
|
+
`daemon 判定本任务疑似适合 goal-convergence loop(场景:${match.label})。`,
|
|
256
|
+
`这是**建议**,不是约束——主线程进 loop 前仍须人审 gate,daemon 绝不自动起 loop。`,
|
|
257
|
+
'',
|
|
258
|
+
`若确认适合,可用 loop-until-verify-PASS 模式(governance §10):`,
|
|
259
|
+
` cf loop enable && cf loop run # 每轮 coder→verify-agent,PASS/SKIP 收敛、FAIL 续迭代`,
|
|
260
|
+
` (或交互形态 cf loop run --interactive / 原生 /loop,迭代间人盯)`,
|
|
261
|
+
'',
|
|
262
|
+
`任务摘要:"${intentSummary}"`,
|
|
263
|
+
`如不适合(开放式 / 无干净 PASS 判据)或已有计划,忽略本提示即可。`,
|
|
264
|
+
].join('\n');
|
|
265
|
+
}
|
|
266
|
+
function truncateSummary(text) {
|
|
267
|
+
const oneLine = (text ?? '').replace(/\s+/g, ' ').trim();
|
|
268
|
+
if (oneLine.length <= LOOP_HINT_SUMMARY_MAX)
|
|
269
|
+
return oneLine;
|
|
270
|
+
return oneLine.slice(0, LOOP_HINT_SUMMARY_MAX - 1) + '…';
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=loop-hint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop-hint.js","sourceRoot":"","sources":["../../../src/daemon/services/loop-hint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,EACL,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,mBAAmB,CAAC;AAEhE,sDAAsD;AACtD,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAE9C;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,mCAAmC,CAAC;AAE5E,8DAA8D;AAC9D,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAKlC;;GAEG;AACH,MAAM,eAAe,GAAiC;IACpD,SAAS,EAAE,4BAA4B;IACvC,iBAAiB,EAAE,iCAAiC;IACpD,WAAW,EAAE,0BAA0B;CACxC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,iBAAiB,GACrB,oGAAoG,CAAC;AAEvG;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG,2CAA2C,CAAC;AACrE,MAAM,iBAAiB,GACrB,2GAA2G,CAAC;AAE9G;;;GAGG;AACH,+EAA+E;AAC/E,gFAAgF;AAChF,+EAA+E;AAC/E,4EAA4E;AAC5E,eAAe;AACf,MAAM,oBAAoB,GACxB,sEAAsE,CAAC;AACzE,MAAM,aAAa,GACjB,8EAA8E,CAAC;AAEjF;;;GAGG;AACH,MAAM,cAAc,GAClB,oDAAoD,CAAC;AACvD,MAAM,eAAe,GACnB,gGAAgG,CAAC;AAEnG;;;;;GAKG;AACH,MAAM,aAAa,GACjB,sNAAsN,CAAC;AAYzN;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,qBAAqB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,uBAAuB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAE/C,6DAA6D;IAC7D,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAE1C,0EAA0E;IAC1E,8EAA8E;IAC9E,8EAA8E;IAC9E,0EAA0E;IAC1E,yEAAyE;IACzE,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChE,OAAO;YACL,QAAQ,EAAE,iBAAiB;YAC3B,KAAK,EAAE,eAAe,CAAC,iBAAiB,CAAC;SAC1C,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,2EAA2E;IAC3E,4EAA4E;IAC5E,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC;IACpE,CAAC;IAED,6EAA6E;IAC7E,yEAAyE;IACzE,6EAA6E;IAC7E,6EAA6E;IAC7E,gEAAgE;IAChE,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC;IACxE,CAAC;IAED,4EAA4E;IAC5E,6EAA6E;IAC7E,qEAAqE;IACrE,KAAK,iBAAiB,CAAC;IAEvB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAA8B;IACnE,IAAI,CAAC,OAAO;QAAE,OAAO,yBAAyB,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAC;QAC7D,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,yBAAyB,CAAC;QACxE,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,yBAAyB,CAAC;IACnC,CAAC;AACH,CAAC;AAYD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAc,EACd,OAA8B,EAC9B,YAKQ;IAER,IAAI,CAAC;QACH,4CAA4C;QAC5C,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;QAElD,4CAA4C;QAC5C,MAAM,KAAK,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;QAEtE,wEAAwE;QACxE,6EAA6E;QAC7E,IAAI,OAAO,IAAI,YAAY,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,OAAO,CAAC,cAAc,CAAC;oBACrB,QAAQ,EAAE,YAAY,CAAC,QAAQ;oBAC/B,UAAU,EAAE,YAAY,CAAC,UAAU;oBACnC,SAAS,EAAE,YAAY,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBAC7D,cAAc,EAAE,wBAAwB;oBACxC,cAAc,EAAE,eAAe;oBAC/B,OAAO,EAAE,OAAO;oBAChB,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC;wBAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;wBACxB,YAAY,EAAE,YAAY,CAAC,YAAY;qBACxC,CAAC;iBACH,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,+CAA+C;YACjD,CAAC;QACH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAwB,EACxB,aAAqB;IAErB,OAAO;QACL,aAAa;QACb,EAAE;QACF,6CAA6C,KAAK,CAAC,KAAK,IAAI;QAC5D,wDAAwD;QACxD,EAAE;QACF,qDAAqD;QACrD,kFAAkF;QAClF,sDAAsD;QACtD,EAAE;QACF,SAAS,aAAa,GAAG;QACzB,uCAAuC;KACxC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,OAAO,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACzD,IAAI,OAAO,CAAC,MAAM,IAAI,qBAAqB;QAAE,OAAO,OAAO,CAAC;IAC5D,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,qBAAqB,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OutcomeClassificationService — Stop-time outcome instrumentation.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `StopHandler` (D-3) so the orchestrator stays thin.
|
|
5
|
+
* Single responsibility: gather signals + run `classifyOutcome` + persist
|
|
6
|
+
* outcome columns on `sessions` + `tasks`, plus the Phase 2 metrics rollup
|
|
7
|
+
* back-fill.
|
|
8
|
+
*
|
|
9
|
+
* Lifecycle: owned by `StopHandler` (constructed per-daemon, called per-event).
|
|
10
|
+
* Stateless — no per-call construction deps; each method receives storage +
|
|
11
|
+
* taskSegmenter explicitly so the service is trivially injectable in tests.
|
|
12
|
+
*
|
|
13
|
+
* Failure mode: every public method is fire-and-forget. Never throws; logs at
|
|
14
|
+
* debug level when storage / git subprocess hiccups.
|
|
15
|
+
*/
|
|
16
|
+
import type { StopEvent } from '../../core/types.js';
|
|
17
|
+
import type { SQLiteStorage } from '../../core/storage/sqlite.js';
|
|
18
|
+
import type { TaskSegmenter } from './task-segmenter.js';
|
|
19
|
+
export declare class OutcomeClassificationService {
|
|
20
|
+
/**
|
|
21
|
+
* Classify the session's outcome at Stop time and persist to both
|
|
22
|
+
* `sessions` and the most recent task row. Also rolls up Phase 2 metrics
|
|
23
|
+
* (intercept_count / kb_inject_count / skill_match_count).
|
|
24
|
+
*
|
|
25
|
+
* Fire-and-forget; never throws (debug-logs on error).
|
|
26
|
+
*/
|
|
27
|
+
classifySession(event: StopEvent, storage: SQLiteStorage, taskSegmenter: TaskSegmenter | null): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Backfill outcome on all unclassified completed/abandoned tasks for the
|
|
30
|
+
* session. Without this, TaskSegmenter-completed tasks (the ones closed by a
|
|
31
|
+
* new-prompt switch) stay outcome=NULL forever.
|
|
32
|
+
*
|
|
33
|
+
* spec 1100 v2: classification is pure edit-intent — NO git subprocess per
|
|
34
|
+
* task. Gated to MAX_IDLE_TASKS_PER_RUN to bound the per-task edit-intent
|
|
35
|
+
* queries. Fire-and-forget; never throws.
|
|
36
|
+
*/
|
|
37
|
+
classifyIdleTasks(event: StopEvent, storage: SQLiteStorage): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Count a single task's Edit/Write intent events. Best-effort: 0 on error so
|
|
40
|
+
* classification never throws because of a storage hiccup.
|
|
41
|
+
*/
|
|
42
|
+
private safeTaskEditIntent;
|
|
43
|
+
/**
|
|
44
|
+
* Session-level edit intent = COUNT of Edit/Write events across the session
|
|
45
|
+
* (tool_name only; gzip-safe). Best-effort, 0 on error.
|
|
46
|
+
*/
|
|
47
|
+
private safeSessionEditIntent;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=outcome-classification-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outcome-classification-service.d.ts","sourceRoot":"","sources":["../../../src/daemon/services/outcome-classification-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAczD,qBAAa,4BAA4B;IACvC;;;;;;OAMG;IACG,eAAe,CACnB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,aAAa,EACtB,aAAa,EAAE,aAAa,GAAG,IAAI,GAClC,OAAO,CAAC,IAAI,CAAC;IAwHhB;;;;;;;;OAQG;IACG,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA8ChF;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAS1B;;;OAGG;IACH,OAAO,CAAC,qBAAqB;CAQ9B"}
|