@winspan/claude-forge 8.54.3 → 9.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DEVELOPMENT.md +649 -33
- package/README.md +155 -17
- package/dist/catalogs/agents.json +72 -0
- package/dist/catalogs/skills.json +194 -0
- package/dist/claudemd/claudemd-generator.d.ts +45 -45
- package/dist/claudemd/claudemd-generator.d.ts.map +1 -1
- package/dist/claudemd/claudemd-generator.js +128 -449
- package/dist/claudemd/claudemd-generator.js.map +1 -1
- package/dist/claudemd/index.d.ts +14 -4
- package/dist/claudemd/index.d.ts.map +1 -1
- package/dist/claudemd/index.js +15 -4
- package/dist/claudemd/index.js.map +1 -1
- package/dist/claudemd/resume-manager.d.ts.map +1 -1
- package/dist/claudemd/resume-manager.js +37 -9
- package/dist/claudemd/resume-manager.js.map +1 -1
- package/dist/claudemd/templates/swarm-protocol.md +35 -186
- package/dist/claudemd/violations-manager.d.ts +40 -0
- package/dist/claudemd/violations-manager.d.ts.map +1 -0
- package/dist/claudemd/violations-manager.js +106 -0
- package/dist/claudemd/violations-manager.js.map +1 -0
- package/dist/cli/commands/admin.d.ts +15 -0
- package/dist/cli/commands/admin.d.ts.map +1 -0
- package/dist/cli/commands/admin.js +177 -0
- package/dist/cli/commands/admin.js.map +1 -0
- package/dist/cli/commands/agents.d.ts +18 -0
- package/dist/cli/commands/agents.d.ts.map +1 -0
- package/dist/cli/commands/agents.js +160 -0
- package/dist/cli/commands/agents.js.map +1 -0
- package/dist/cli/commands/bypass.d.ts +18 -0
- package/dist/cli/commands/bypass.d.ts.map +1 -0
- package/dist/cli/commands/bypass.js +87 -0
- package/dist/cli/commands/bypass.js.map +1 -0
- package/dist/cli/commands/claudemd.d.ts +60 -0
- package/dist/cli/commands/claudemd.d.ts.map +1 -1
- package/dist/cli/commands/claudemd.js +174 -37
- package/dist/cli/commands/claudemd.js.map +1 -1
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +94 -1
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/daemon.d.ts +39 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -1
- package/dist/cli/commands/daemon.js +167 -20
- package/dist/cli/commands/daemon.js.map +1 -1
- package/dist/cli/commands/decisions.d.ts +129 -0
- package/dist/cli/commands/decisions.d.ts.map +1 -0
- package/dist/cli/commands/decisions.js +669 -0
- package/dist/cli/commands/decisions.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +29 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +124 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/entropy.d.ts +35 -0
- package/dist/cli/commands/entropy.d.ts.map +1 -0
- package/dist/cli/commands/entropy.js +121 -0
- package/dist/cli/commands/entropy.js.map +1 -0
- package/dist/cli/commands/executions.d.ts +1 -0
- package/dist/cli/commands/executions.d.ts.map +1 -1
- package/dist/cli/commands/executions.js +10 -1
- package/dist/cli/commands/executions.js.map +1 -1
- package/dist/cli/commands/fix.d.ts +31 -0
- package/dist/cli/commands/fix.d.ts.map +1 -0
- package/dist/cli/commands/fix.js +108 -0
- package/dist/cli/commands/fix.js.map +1 -0
- package/dist/cli/commands/governance.d.ts +21 -0
- package/dist/cli/commands/governance.d.ts.map +1 -0
- package/dist/cli/commands/governance.js +60 -0
- package/dist/cli/commands/governance.js.map +1 -0
- package/dist/cli/commands/init.d.ts +27 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +158 -146
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/insights-goal-check.d.ts +50 -0
- package/dist/cli/commands/insights-goal-check.d.ts.map +1 -0
- package/dist/cli/commands/insights-goal-check.js +318 -0
- package/dist/cli/commands/insights-goal-check.js.map +1 -0
- package/dist/cli/commands/insights.d.ts +15 -0
- package/dist/cli/commands/insights.d.ts.map +1 -0
- package/dist/cli/commands/insights.js +127 -0
- package/dist/cli/commands/insights.js.map +1 -0
- package/dist/cli/commands/knowledge.d.ts +66 -0
- package/dist/cli/commands/knowledge.d.ts.map +1 -0
- package/dist/cli/commands/knowledge.js +897 -0
- package/dist/cli/commands/knowledge.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +0 -12
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +11 -5
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/menu.d.ts.map +1 -1
- package/dist/cli/commands/menu.js +10 -184
- package/dist/cli/commands/menu.js.map +1 -1
- package/dist/cli/commands/project.d.ts +98 -0
- package/dist/cli/commands/project.d.ts.map +1 -0
- package/dist/cli/commands/project.js +382 -0
- package/dist/cli/commands/project.js.map +1 -0
- package/dist/cli/commands/skills.d.ts.map +1 -1
- package/dist/cli/commands/skills.js +14 -128
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/spec.d.ts +40 -0
- package/dist/cli/commands/spec.d.ts.map +1 -0
- package/dist/cli/commands/spec.js +49 -0
- package/dist/cli/commands/spec.js.map +1 -0
- package/dist/cli/commands/stats.d.ts.map +1 -1
- package/dist/cli/commands/stats.js +3 -2
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +17 -2
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/trace.d.ts.map +1 -1
- package/dist/cli/commands/trace.js +4 -9
- package/dist/cli/commands/trace.js.map +1 -1
- package/dist/cli/commands/violations.d.ts +14 -0
- package/dist/cli/commands/violations.d.ts.map +1 -0
- package/dist/cli/commands/violations.js +43 -0
- package/dist/cli/commands/violations.js.map +1 -0
- package/dist/cli/index.js +26 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/hook-manager.d.ts +1 -1
- package/dist/cli/init/hook-manager.d.ts.map +1 -1
- package/dist/cli/init/hook-manager.js +6 -0
- package/dist/cli/init/hook-manager.js.map +1 -1
- package/dist/cli/utils/resolve-session.d.ts +32 -0
- package/dist/cli/utils/resolve-session.d.ts.map +1 -0
- package/dist/cli/utils/resolve-session.js +39 -0
- package/dist/cli/utils/resolve-session.js.map +1 -0
- package/dist/core/config.d.ts +4 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +11 -23
- package/dist/core/config.js.map +1 -1
- package/dist/core/constants.d.ts +14 -13
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +20 -13
- package/dist/core/constants.js.map +1 -1
- package/dist/core/diagnostics/checks.d.ts +151 -0
- package/dist/core/diagnostics/checks.d.ts.map +1 -0
- package/dist/core/diagnostics/checks.js +765 -0
- package/dist/core/diagnostics/checks.js.map +1 -0
- package/dist/core/diagnostics/daemon-status.d.ts +77 -0
- package/dist/core/diagnostics/daemon-status.d.ts.map +1 -0
- package/dist/core/diagnostics/daemon-status.js +113 -0
- package/dist/core/diagnostics/daemon-status.js.map +1 -0
- package/dist/core/diagnostics/entropy-checks.d.ts +82 -0
- package/dist/core/diagnostics/entropy-checks.d.ts.map +1 -0
- package/dist/core/diagnostics/entropy-checks.js +395 -0
- package/dist/core/diagnostics/entropy-checks.js.map +1 -0
- package/dist/core/diagnostics/fix-runner.d.ts +54 -0
- package/dist/core/diagnostics/fix-runner.d.ts.map +1 -0
- package/dist/core/diagnostics/fix-runner.js +90 -0
- package/dist/core/diagnostics/fix-runner.js.map +1 -0
- package/dist/core/diagnostics/knip-runner.d.ts +49 -0
- package/dist/core/diagnostics/knip-runner.d.ts.map +1 -0
- package/dist/core/diagnostics/knip-runner.js +100 -0
- package/dist/core/diagnostics/knip-runner.js.map +1 -0
- package/dist/core/diagnostics/markers.d.ts +96 -0
- package/dist/core/diagnostics/markers.d.ts.map +1 -0
- package/dist/core/diagnostics/markers.js +153 -0
- package/dist/core/diagnostics/markers.js.map +1 -0
- package/dist/core/governance/global-inject.d.ts +60 -0
- package/dist/core/governance/global-inject.d.ts.map +1 -0
- package/dist/core/governance/global-inject.js +129 -0
- package/dist/core/governance/global-inject.js.map +1 -0
- package/dist/core/queue/index.d.ts +16 -3
- package/dist/core/queue/index.d.ts.map +1 -1
- package/dist/core/queue/index.js +14 -3
- package/dist/core/queue/index.js.map +1 -1
- package/dist/core/storage/base.d.ts +158 -0
- package/dist/core/storage/base.d.ts.map +1 -1
- package/dist/core/storage/base.js +570 -0
- package/dist/core/storage/base.js.map +1 -1
- package/dist/core/storage/codec/tool-input-codec.d.ts +93 -0
- package/dist/core/storage/codec/tool-input-codec.d.ts.map +1 -0
- package/dist/core/storage/codec/tool-input-codec.js +159 -0
- package/dist/core/storage/codec/tool-input-codec.js.map +1 -0
- package/dist/core/storage/decisions.d.ts +362 -0
- package/dist/core/storage/decisions.d.ts.map +1 -0
- package/dist/core/storage/decisions.js +502 -0
- package/dist/core/storage/decisions.js.map +1 -0
- package/dist/core/storage/events.d.ts +112 -8
- package/dist/core/storage/events.d.ts.map +1 -1
- package/dist/core/storage/events.js +390 -39
- package/dist/core/storage/events.js.map +1 -1
- package/dist/core/storage/feedback.d.ts +131 -0
- package/dist/core/storage/feedback.d.ts.map +1 -0
- package/dist/core/storage/feedback.js +187 -0
- package/dist/core/storage/feedback.js.map +1 -0
- package/dist/core/storage/forge-config.d.ts +40 -0
- package/dist/core/storage/forge-config.d.ts.map +1 -0
- package/dist/core/storage/forge-config.js +65 -0
- package/dist/core/storage/forge-config.js.map +1 -0
- package/dist/core/storage/injections.d.ts +28 -0
- package/dist/core/storage/injections.d.ts.map +1 -1
- package/dist/core/storage/injections.js +62 -5
- package/dist/core/storage/injections.js.map +1 -1
- package/dist/core/storage/knowledge.d.ts +106 -0
- package/dist/core/storage/knowledge.d.ts.map +1 -0
- package/dist/core/storage/knowledge.js +202 -0
- package/dist/core/storage/knowledge.js.map +1 -0
- package/dist/core/storage/maintenance.d.ts +36 -9
- package/dist/core/storage/maintenance.d.ts.map +1 -1
- package/dist/core/storage/maintenance.js +56 -24
- package/dist/core/storage/maintenance.js.map +1 -1
- package/dist/core/storage/pipeline-rollup.d.ts +117 -0
- package/dist/core/storage/pipeline-rollup.d.ts.map +1 -0
- package/dist/core/storage/pipeline-rollup.js +471 -0
- package/dist/core/storage/pipeline-rollup.js.map +1 -0
- package/dist/core/storage/routing.d.ts +16 -3
- package/dist/core/storage/routing.d.ts.map +1 -1
- package/dist/core/storage/routing.js +39 -8
- package/dist/core/storage/routing.js.map +1 -1
- package/dist/core/storage/rows.d.ts +50 -7
- package/dist/core/storage/rows.d.ts.map +1 -1
- package/dist/core/storage/schema.sql +302 -23
- package/dist/core/storage/sessions.d.ts +136 -0
- package/dist/core/storage/sessions.d.ts.map +1 -1
- package/dist/core/storage/sessions.js +351 -15
- package/dist/core/storage/sessions.js.map +1 -1
- package/dist/core/storage/skills.d.ts +1 -0
- package/dist/core/storage/skills.d.ts.map +1 -1
- package/dist/core/storage/skills.js +21 -6
- package/dist/core/storage/skills.js.map +1 -1
- package/dist/core/storage/sqlite.d.ts +253 -20
- package/dist/core/storage/sqlite.d.ts.map +1 -1
- package/dist/core/storage/sqlite.js +425 -16
- package/dist/core/storage/sqlite.js.map +1 -1
- package/dist/core/storage/tasks.d.ts +474 -2
- package/dist/core/storage/tasks.d.ts.map +1 -1
- package/dist/core/storage/tasks.js +1213 -18
- package/dist/core/storage/tasks.js.map +1 -1
- package/dist/core/storage/tool-intercepts.d.ts +69 -0
- package/dist/core/storage/tool-intercepts.d.ts.map +1 -0
- package/dist/core/storage/tool-intercepts.js +116 -0
- package/dist/core/storage/tool-intercepts.js.map +1 -0
- package/dist/core/storage/workflow-recommendations.d.ts +124 -0
- package/dist/core/storage/workflow-recommendations.d.ts.map +1 -0
- package/dist/core/storage/workflow-recommendations.js +274 -0
- package/dist/core/storage/workflow-recommendations.js.map +1 -0
- package/dist/core/types.d.ts +112 -17
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +12 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/utils/backup.d.ts +81 -0
- package/dist/core/utils/backup.d.ts.map +1 -0
- package/dist/core/utils/backup.js +98 -0
- package/dist/core/utils/backup.js.map +1 -0
- package/dist/core/utils/binary-paths.d.ts +92 -0
- package/dist/core/utils/binary-paths.d.ts.map +1 -0
- package/dist/core/utils/binary-paths.js +166 -0
- package/dist/core/utils/binary-paths.js.map +1 -0
- package/dist/core/utils/bypass-token.d.ts +75 -0
- package/dist/core/utils/bypass-token.d.ts.map +1 -0
- package/dist/core/utils/bypass-token.js +133 -0
- package/dist/core/utils/bypass-token.js.map +1 -0
- package/dist/core/utils/cc-builtin-agents.d.ts +3 -0
- package/dist/core/utils/cc-builtin-agents.d.ts.map +1 -0
- package/dist/core/utils/cc-builtin-agents.js +29 -0
- package/dist/core/utils/cc-builtin-agents.js.map +1 -0
- package/dist/core/utils/claude-cli-spawn.d.ts +106 -0
- package/dist/core/utils/claude-cli-spawn.d.ts.map +1 -0
- package/dist/core/utils/claude-cli-spawn.js +219 -0
- package/dist/core/utils/claude-cli-spawn.js.map +1 -0
- package/dist/core/utils/forge-resume-block.d.ts.map +1 -1
- package/dist/core/utils/forge-resume-block.js +3 -2
- package/dist/core/utils/forge-resume-block.js.map +1 -1
- package/dist/core/utils/logger.d.ts +15 -3
- package/dist/core/utils/logger.d.ts.map +1 -1
- package/dist/core/utils/logger.js +20 -2
- package/dist/core/utils/logger.js.map +1 -1
- package/dist/core/utils/noise-prompt.d.ts +97 -0
- package/dist/core/utils/noise-prompt.d.ts.map +1 -0
- package/dist/core/utils/noise-prompt.js +127 -0
- package/dist/core/utils/noise-prompt.js.map +1 -0
- package/dist/core/utils/path.d.ts +0 -4
- package/dist/core/utils/path.d.ts.map +1 -1
- package/dist/core/utils/path.js +0 -7
- package/dist/core/utils/path.js.map +1 -1
- package/dist/core/utils/time.d.ts +41 -0
- package/dist/core/utils/time.d.ts.map +1 -1
- package/dist/core/utils/time.js +114 -0
- package/dist/core/utils/time.js.map +1 -1
- package/dist/daemon/agent-sync.d.ts +24 -0
- package/dist/daemon/agent-sync.d.ts.map +1 -0
- package/dist/daemon/agent-sync.js +114 -0
- package/dist/daemon/agent-sync.js.map +1 -0
- package/dist/daemon/config-store.d.ts +55 -0
- package/dist/daemon/config-store.d.ts.map +1 -0
- package/dist/daemon/config-store.js +137 -0
- package/dist/daemon/config-store.js.map +1 -0
- package/dist/daemon/event-parser.d.ts +22 -0
- package/dist/daemon/event-parser.d.ts.map +1 -1
- package/dist/daemon/event-parser.js +49 -3
- package/dist/daemon/event-parser.js.map +1 -1
- package/dist/daemon/handlers/history-exporter.d.ts.map +1 -1
- package/dist/daemon/handlers/history-exporter.js +9 -8
- package/dist/daemon/handlers/history-exporter.js.map +1 -1
- package/dist/daemon/handlers/post-tool-use.d.ts +58 -4
- package/dist/daemon/handlers/post-tool-use.d.ts.map +1 -1
- package/dist/daemon/handlers/post-tool-use.js +261 -8
- package/dist/daemon/handlers/post-tool-use.js.map +1 -1
- package/dist/daemon/handlers/pre-tool-use.d.ts +156 -0
- package/dist/daemon/handlers/pre-tool-use.d.ts.map +1 -0
- package/dist/daemon/handlers/pre-tool-use.js +585 -0
- package/dist/daemon/handlers/pre-tool-use.js.map +1 -0
- package/dist/daemon/handlers/stop.d.ts +35 -7
- package/dist/daemon/handlers/stop.d.ts.map +1 -1
- package/dist/daemon/handlers/stop.js +157 -8
- package/dist/daemon/handlers/stop.js.map +1 -1
- package/dist/daemon/handlers/user-prompt.d.ts +36 -14
- package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
- package/dist/daemon/handlers/user-prompt.js +135 -48
- package/dist/daemon/handlers/user-prompt.js.map +1 -1
- package/dist/daemon/hook-sync.d.ts.map +1 -1
- package/dist/daemon/hook-sync.js +2 -1
- package/dist/daemon/hook-sync.js.map +1 -1
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +471 -43
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/lifecycle.d.ts +48 -1
- package/dist/daemon/lifecycle.d.ts.map +1 -1
- package/dist/daemon/lifecycle.js +98 -2
- package/dist/daemon/lifecycle.js.map +1 -1
- package/dist/daemon/router.d.ts +4 -1
- package/dist/daemon/router.d.ts.map +1 -1
- package/dist/daemon/router.js +4 -2
- package/dist/daemon/router.js.map +1 -1
- package/dist/daemon/rules/defaults.d.ts +20 -0
- package/dist/daemon/rules/defaults.d.ts.map +1 -0
- package/dist/daemon/rules/defaults.js +692 -0
- package/dist/daemon/rules/defaults.js.map +1 -0
- package/dist/daemon/rules/registry.d.ts +47 -0
- package/dist/daemon/rules/registry.d.ts.map +1 -0
- package/dist/daemon/rules/registry.js +84 -0
- package/dist/daemon/rules/registry.js.map +1 -0
- package/dist/daemon/rules/types.d.ts +170 -0
- package/dist/daemon/rules/types.d.ts.map +1 -0
- package/dist/daemon/rules/types.js +15 -0
- package/dist/daemon/rules/types.js.map +1 -0
- package/dist/daemon/rules/whitelist.d.ts +101 -0
- package/dist/daemon/rules/whitelist.d.ts.map +1 -0
- package/dist/daemon/rules/whitelist.js +210 -0
- package/dist/daemon/rules/whitelist.js.map +1 -0
- package/dist/daemon/rules/workflow-defaults.d.ts +52 -0
- package/dist/daemon/rules/workflow-defaults.d.ts.map +1 -0
- package/dist/daemon/rules/workflow-defaults.js +521 -0
- package/dist/daemon/rules/workflow-defaults.js.map +1 -0
- package/dist/daemon/server.d.ts +11 -1
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +7 -1
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/services/context-injector.d.ts +34 -0
- package/dist/daemon/services/context-injector.d.ts.map +1 -0
- package/dist/daemon/services/context-injector.js +61 -0
- package/dist/daemon/services/context-injector.js.map +1 -0
- package/dist/daemon/services/decision-hint.d.ts +203 -0
- package/dist/daemon/services/decision-hint.d.ts.map +1 -0
- package/dist/daemon/services/decision-hint.js +487 -0
- package/dist/daemon/services/decision-hint.js.map +1 -0
- package/dist/daemon/services/event-ttl-sweep.d.ts +86 -0
- package/dist/daemon/services/event-ttl-sweep.d.ts.map +1 -0
- package/dist/daemon/services/event-ttl-sweep.js +123 -0
- package/dist/daemon/services/event-ttl-sweep.js.map +1 -0
- package/dist/daemon/services/experience-extractor.d.ts +67 -0
- package/dist/daemon/services/experience-extractor.d.ts.map +1 -0
- package/dist/daemon/services/experience-extractor.js +323 -0
- package/dist/daemon/services/experience-extractor.js.map +1 -0
- package/dist/daemon/services/feedback-aggregator.d.ts +179 -0
- package/dist/daemon/services/feedback-aggregator.d.ts.map +1 -0
- package/dist/daemon/services/feedback-aggregator.js +455 -0
- package/dist/daemon/services/feedback-aggregator.js.map +1 -0
- package/dist/daemon/services/heartbeat-writer.d.ts +55 -0
- package/dist/daemon/services/heartbeat-writer.d.ts.map +1 -0
- package/dist/daemon/services/heartbeat-writer.js +111 -0
- package/dist/daemon/services/heartbeat-writer.js.map +1 -0
- package/dist/daemon/services/idle-session-sweeper.d.ts +61 -0
- package/dist/daemon/services/idle-session-sweeper.d.ts.map +1 -0
- package/dist/daemon/services/idle-session-sweeper.js +94 -0
- package/dist/daemon/services/idle-session-sweeper.js.map +1 -0
- package/dist/daemon/services/idle-task-budget.d.ts +50 -0
- package/dist/daemon/services/idle-task-budget.d.ts.map +1 -0
- package/dist/daemon/services/idle-task-budget.js +72 -0
- package/dist/daemon/services/idle-task-budget.js.map +1 -0
- package/dist/daemon/services/intercept-revive.d.ts +60 -0
- package/dist/daemon/services/intercept-revive.d.ts.map +1 -0
- package/dist/daemon/services/intercept-revive.js +86 -0
- package/dist/daemon/services/intercept-revive.js.map +1 -0
- package/dist/daemon/services/intercept-rollback-guard.d.ts +105 -0
- package/dist/daemon/services/intercept-rollback-guard.d.ts.map +1 -0
- package/dist/daemon/services/intercept-rollback-guard.js +152 -0
- package/dist/daemon/services/intercept-rollback-guard.js.map +1 -0
- package/dist/daemon/services/intercept-timeout-sweeper.d.ts +58 -0
- package/dist/daemon/services/intercept-timeout-sweeper.d.ts.map +1 -0
- package/dist/daemon/services/intercept-timeout-sweeper.js +83 -0
- package/dist/daemon/services/intercept-timeout-sweeper.js.map +1 -0
- package/dist/daemon/services/kb-injector.d.ts +57 -0
- package/dist/daemon/services/kb-injector.d.ts.map +1 -0
- package/dist/daemon/services/kb-injector.js +140 -0
- package/dist/daemon/services/kb-injector.js.map +1 -0
- package/dist/daemon/services/outcome-classification-service.d.ts +49 -0
- package/dist/daemon/services/outcome-classification-service.d.ts.map +1 -0
- package/dist/daemon/services/outcome-classification-service.js +214 -0
- package/dist/daemon/services/outcome-classification-service.js.map +1 -0
- package/dist/daemon/services/outcome-classifier.d.ts +136 -0
- package/dist/daemon/services/outcome-classifier.d.ts.map +1 -0
- package/dist/daemon/services/outcome-classifier.js +178 -0
- package/dist/daemon/services/outcome-classifier.js.map +1 -0
- package/dist/daemon/services/outcome-nudge.d.ts +107 -0
- package/dist/daemon/services/outcome-nudge.d.ts.map +1 -0
- package/dist/daemon/services/outcome-nudge.js +242 -0
- package/dist/daemon/services/outcome-nudge.js.map +1 -0
- package/dist/daemon/services/spec-approval.d.ts +127 -0
- package/dist/daemon/services/spec-approval.d.ts.map +1 -0
- package/dist/daemon/services/spec-approval.js +216 -0
- package/dist/daemon/services/spec-approval.js.map +1 -0
- package/dist/daemon/services/spec-gate.d.ts +54 -0
- package/dist/daemon/services/spec-gate.d.ts.map +1 -0
- package/dist/daemon/services/spec-gate.js +113 -0
- package/dist/daemon/services/spec-gate.js.map +1 -0
- package/dist/daemon/services/task-boundary-classifier.d.ts +78 -0
- package/dist/daemon/services/task-boundary-classifier.d.ts.map +1 -0
- package/dist/daemon/services/task-boundary-classifier.js +202 -0
- package/dist/daemon/services/task-boundary-classifier.js.map +1 -0
- package/dist/daemon/services/task-segmenter.d.ts +219 -1
- package/dist/daemon/services/task-segmenter.d.ts.map +1 -1
- package/dist/daemon/services/task-segmenter.js +481 -17
- package/dist/daemon/services/task-segmenter.js.map +1 -1
- package/dist/daemon/services/violation-reporter.d.ts +130 -0
- package/dist/daemon/services/violation-reporter.d.ts.map +1 -0
- package/dist/daemon/services/violation-reporter.js +339 -0
- package/dist/daemon/services/violation-reporter.js.map +1 -0
- package/dist/daemon/skill-sync.d.ts +7 -2
- package/dist/daemon/skill-sync.d.ts.map +1 -1
- package/dist/daemon/skill-sync.js +114 -9
- package/dist/daemon/skill-sync.js.map +1 -1
- package/dist/daemon/templates/agents/claudemd-writer.md +101 -0
- package/dist/daemon/templates/agents/coder.md +105 -0
- package/dist/daemon/templates/agents/decision-maker.md +460 -0
- package/dist/daemon/templates/agents/doc-reviewer.md +115 -0
- package/dist/daemon/templates/agents/harness-debug-full.md +114 -0
- package/dist/daemon/templates/agents/harness-hotfix.md +99 -0
- package/dist/daemon/templates/agents/hybrid-feature-with-safety.md +104 -0
- package/dist/daemon/templates/agents/knowledge-builder.md +119 -0
- package/dist/daemon/templates/agents/patch-applier.md +144 -0
- package/dist/daemon/templates/agents/planner.md +165 -0
- package/dist/daemon/templates/agents/refactor-specialist.md +98 -0
- package/dist/daemon/templates/agents/skill-distiller.md +113 -0
- package/dist/daemon/templates/agents/task-boundary-classifier.md +64 -0
- package/dist/daemon/templates/agents/verify-agent.md +136 -0
- package/dist/daemon/utils/inject-block.d.ts +39 -0
- package/dist/daemon/utils/inject-block.d.ts.map +1 -0
- package/dist/daemon/utils/inject-block.js +25 -0
- package/dist/daemon/utils/inject-block.js.map +1 -0
- package/dist/hooks/hook-lib.sh +8 -0
- package/dist/hooks/notification.sh +19 -8
- package/dist/hooks/post-tool-use.sh +41 -23
- package/dist/hooks/pre-tool-use.sh +54 -23
- package/dist/hooks/session-start.sh +68 -0
- package/dist/hooks/stop.sh +24 -10
- package/dist/hooks/user-prompt-submit.sh +37 -21
- package/dist/knowledge/adapters/go-adapter.d.ts +65 -0
- package/dist/knowledge/adapters/go-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/go-adapter.js +294 -0
- package/dist/knowledge/adapters/go-adapter.js.map +1 -0
- package/dist/knowledge/adapters/index.d.ts +41 -0
- package/dist/knowledge/adapters/index.d.ts.map +1 -0
- package/dist/knowledge/adapters/index.js +71 -0
- package/dist/knowledge/adapters/index.js.map +1 -0
- package/dist/knowledge/adapters/java-adapter.d.ts +66 -0
- package/dist/knowledge/adapters/java-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/java-adapter.js +260 -0
- package/dist/knowledge/adapters/java-adapter.js.map +1 -0
- package/dist/knowledge/adapters/js-vue-adapter.d.ts +56 -0
- package/dist/knowledge/adapters/js-vue-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/js-vue-adapter.js +203 -0
- package/dist/knowledge/adapters/js-vue-adapter.js.map +1 -0
- package/dist/knowledge/adapters/kotlin-adapter.d.ts +55 -0
- package/dist/knowledge/adapters/kotlin-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/kotlin-adapter.js +209 -0
- package/dist/knowledge/adapters/kotlin-adapter.js.map +1 -0
- package/dist/knowledge/adapters/monorepo-adapter.d.ts +77 -0
- package/dist/knowledge/adapters/monorepo-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/monorepo-adapter.js +170 -0
- package/dist/knowledge/adapters/monorepo-adapter.js.map +1 -0
- package/dist/knowledge/adapters/python-adapter.d.ts +89 -0
- package/dist/knowledge/adapters/python-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/python-adapter.js +358 -0
- package/dist/knowledge/adapters/python-adapter.js.map +1 -0
- package/dist/knowledge/adapters/rust-adapter.d.ts +73 -0
- package/dist/knowledge/adapters/rust-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/rust-adapter.js +329 -0
- package/dist/knowledge/adapters/rust-adapter.js.map +1 -0
- package/dist/knowledge/adapters/types.d.ts +99 -0
- package/dist/knowledge/adapters/types.d.ts.map +1 -0
- package/dist/knowledge/adapters/types.js +17 -0
- package/dist/knowledge/adapters/types.js.map +1 -0
- package/dist/knowledge/adapters/typescript-adapter.d.ts +57 -0
- package/dist/knowledge/adapters/typescript-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/typescript-adapter.js +171 -0
- package/dist/knowledge/adapters/typescript-adapter.js.map +1 -0
- package/dist/knowledge/audit-applier.d.ts +70 -0
- package/dist/knowledge/audit-applier.d.ts.map +1 -0
- package/dist/knowledge/audit-applier.js +251 -0
- package/dist/knowledge/audit-applier.js.map +1 -0
- package/dist/knowledge/builder.d.ts +261 -0
- package/dist/knowledge/builder.d.ts.map +1 -0
- package/dist/knowledge/builder.js +937 -0
- package/dist/knowledge/builder.js.map +1 -0
- package/dist/knowledge/cli-provider.d.ts +151 -0
- package/dist/knowledge/cli-provider.d.ts.map +1 -0
- package/dist/knowledge/cli-provider.js +313 -0
- package/dist/knowledge/cli-provider.js.map +1 -0
- package/dist/knowledge/constants.d.ts +73 -0
- package/dist/knowledge/constants.d.ts.map +1 -0
- package/dist/knowledge/constants.js +93 -0
- package/dist/knowledge/constants.js.map +1 -0
- package/dist/knowledge/cross-module.d.ts +139 -0
- package/dist/knowledge/cross-module.d.ts.map +1 -0
- package/dist/knowledge/cross-module.js +370 -0
- package/dist/knowledge/cross-module.js.map +1 -0
- package/dist/knowledge/git-hooks.d.ts +67 -0
- package/dist/knowledge/git-hooks.d.ts.map +1 -0
- package/dist/knowledge/git-hooks.js +258 -0
- package/dist/knowledge/git-hooks.js.map +1 -0
- package/dist/knowledge/module-hash.d.ts +88 -0
- package/dist/knowledge/module-hash.d.ts.map +1 -0
- package/dist/knowledge/module-hash.js +162 -0
- package/dist/knowledge/module-hash.js.map +1 -0
- package/dist/knowledge/project-detector.d.ts +101 -0
- package/dist/knowledge/project-detector.d.ts.map +1 -0
- package/dist/knowledge/project-detector.js +223 -0
- package/dist/knowledge/project-detector.js.map +1 -0
- package/dist/knowledge/prompt.d.ts +228 -0
- package/dist/knowledge/prompt.d.ts.map +1 -0
- package/dist/knowledge/prompt.js +404 -0
- package/dist/knowledge/prompt.js.map +1 -0
- package/dist/knowledge/query.d.ts +105 -0
- package/dist/knowledge/query.d.ts.map +1 -0
- package/dist/knowledge/query.js +341 -0
- package/dist/knowledge/query.js.map +1 -0
- package/dist/knowledge/repo-map.d.ts +91 -0
- package/dist/knowledge/repo-map.d.ts.map +1 -0
- package/dist/knowledge/repo-map.js +408 -0
- package/dist/knowledge/repo-map.js.map +1 -0
- package/dist/knowledge/tools/index.d.ts +14 -0
- package/dist/knowledge/tools/index.d.ts.map +1 -0
- package/dist/knowledge/tools/index.js +11 -0
- package/dist/knowledge/tools/index.js.map +1 -0
- package/dist/knowledge/tools/knowledge-get-page.d.ts +46 -0
- package/dist/knowledge/tools/knowledge-get-page.d.ts.map +1 -0
- package/dist/knowledge/tools/knowledge-get-page.js +101 -0
- package/dist/knowledge/tools/knowledge-get-page.js.map +1 -0
- package/dist/knowledge/tools/knowledge-query.d.ts +77 -0
- package/dist/knowledge/tools/knowledge-query.d.ts.map +1 -0
- package/dist/knowledge/tools/knowledge-query.js +104 -0
- package/dist/knowledge/tools/knowledge-query.js.map +1 -0
- package/dist/knowledge/tools/repo-map-lookup.d.ts +45 -0
- package/dist/knowledge/tools/repo-map-lookup.d.ts.map +1 -0
- package/dist/knowledge/tools/repo-map-lookup.js +82 -0
- package/dist/knowledge/tools/repo-map-lookup.js.map +1 -0
- package/dist/knowledge/types.d.ts +269 -0
- package/dist/knowledge/types.d.ts.map +1 -0
- package/dist/knowledge/types.js +10 -0
- package/dist/knowledge/types.js.map +1 -0
- package/dist/knowledge/validator.d.ts +90 -0
- package/dist/knowledge/validator.d.ts.map +1 -0
- package/dist/knowledge/validator.js +288 -0
- package/dist/knowledge/validator.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +222 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/skills/builtin-skills.d.ts +35 -0
- package/dist/skills/builtin-skills.d.ts.map +1 -0
- package/dist/skills/builtin-skills.js +68 -0
- package/dist/skills/builtin-skills.js.map +1 -0
- package/dist/skills/distill/attribution.d.ts +59 -0
- package/dist/skills/distill/attribution.d.ts.map +1 -0
- package/dist/skills/distill/attribution.js +101 -0
- package/dist/skills/distill/attribution.js.map +1 -0
- package/dist/skills/distill/claude-cli-resolver.d.ts +26 -0
- package/dist/skills/distill/claude-cli-resolver.d.ts.map +1 -0
- package/dist/skills/distill/claude-cli-resolver.js +115 -0
- package/dist/skills/distill/claude-cli-resolver.js.map +1 -0
- package/dist/skills/distill/distiller.d.ts +161 -0
- package/dist/skills/distill/distiller.d.ts.map +1 -0
- package/dist/skills/distill/distiller.js +461 -0
- package/dist/skills/distill/distiller.js.map +1 -0
- package/dist/skills/distill/index.d.ts +223 -0
- package/dist/skills/distill/index.d.ts.map +1 -0
- package/dist/skills/distill/index.js +466 -0
- package/dist/skills/distill/index.js.map +1 -0
- package/dist/skills/distill/project-anchor-guard.d.ts +116 -0
- package/dist/skills/distill/project-anchor-guard.d.ts.map +1 -0
- package/dist/skills/distill/project-anchor-guard.js +334 -0
- package/dist/skills/distill/project-anchor-guard.js.map +1 -0
- package/dist/skills/distill/topic-deduper.d.ts +77 -0
- package/dist/skills/distill/topic-deduper.d.ts.map +1 -0
- package/dist/skills/distill/topic-deduper.js +119 -0
- package/dist/skills/distill/topic-deduper.js.map +1 -0
- package/dist/skills/distill/upstream-fetcher.d.ts +71 -0
- package/dist/skills/distill/upstream-fetcher.d.ts.map +1 -0
- package/dist/skills/distill/upstream-fetcher.js +202 -0
- package/dist/skills/distill/upstream-fetcher.js.map +1 -0
- package/dist/skills/distilled/distilled-api-design.md +491 -0
- package/dist/skills/distilled/distilled-architecture-decision.md +173 -0
- package/dist/skills/distilled/distilled-creator.md +178 -0
- package/dist/skills/distilled/distilled-db-schema-design.md +245 -0
- package/dist/skills/distilled/distilled-defi-amm-security.md +293 -0
- package/dist/skills/distilled/distilled-executing-plans.md +113 -0
- package/dist/skills/distilled/distilled-harness-engineering.md +242 -0
- package/dist/skills/distilled/distilled-karpathy-guidelines.md +104 -0
- package/dist/skills/distilled/distilled-performance-optimization.md +175 -0
- package/dist/skills/distilled/distilled-spec-driven-design.md +193 -0
- package/dist/skills/distilled/distilled-systematic-debugging.md +306 -0
- package/dist/skills/distilled/distilled-verification-before-completion.md +203 -0
- package/dist/skills/keyword-score.d.ts +29 -0
- package/dist/skills/keyword-score.d.ts.map +1 -0
- package/dist/skills/keyword-score.js +54 -0
- package/dist/skills/keyword-score.js.map +1 -0
- package/dist/skills/registry.d.ts +64 -20
- package/dist/skills/registry.d.ts.map +1 -1
- package/dist/skills/registry.js +102 -105
- package/dist/skills/registry.js.map +1 -1
- package/dist/skills/tools/pipeline-suggest.js +14 -14
- package/dist/skills/tools/skill-invoke.d.ts +1 -1
- package/dist/skills/tools/skill-invoke.js +1 -1
- package/dist/web/routes/agent-content.d.ts +30 -0
- package/dist/web/routes/agent-content.d.ts.map +1 -0
- package/dist/web/routes/agent-content.js +139 -0
- package/dist/web/routes/agent-content.js.map +1 -0
- package/dist/web/routes/decisions.d.ts +15 -0
- package/dist/web/routes/decisions.d.ts.map +1 -0
- package/dist/web/routes/decisions.js +181 -0
- package/dist/web/routes/decisions.js.map +1 -0
- package/dist/web/routes/diagnostics.d.ts +61 -0
- package/dist/web/routes/diagnostics.d.ts.map +1 -0
- package/dist/web/routes/diagnostics.js +203 -0
- package/dist/web/routes/diagnostics.js.map +1 -0
- package/dist/web/routes/events.d.ts.map +1 -1
- package/dist/web/routes/events.js +24 -0
- package/dist/web/routes/events.js.map +1 -1
- package/dist/web/routes/health.d.ts +33 -0
- package/dist/web/routes/health.d.ts.map +1 -0
- package/dist/web/routes/health.js +37 -0
- package/dist/web/routes/health.js.map +1 -0
- package/dist/web/routes/insights.d.ts +0 -5
- package/dist/web/routes/insights.d.ts.map +1 -1
- package/dist/web/routes/insights.js +783 -2
- package/dist/web/routes/insights.js.map +1 -1
- package/dist/web/routes/knowledge.d.ts +16 -0
- package/dist/web/routes/knowledge.d.ts.map +1 -0
- package/dist/web/routes/knowledge.js +661 -0
- package/dist/web/routes/knowledge.js.map +1 -0
- package/dist/web/routes/patch.d.ts +60 -1
- package/dist/web/routes/patch.d.ts.map +1 -1
- package/dist/web/routes/patch.js +170 -64
- package/dist/web/routes/patch.js.map +1 -1
- package/dist/web/routes/pipeline.d.ts +37 -0
- package/dist/web/routes/pipeline.d.ts.map +1 -0
- package/dist/web/routes/pipeline.js +149 -0
- package/dist/web/routes/pipeline.js.map +1 -0
- package/dist/web/routes/rules.d.ts.map +1 -1
- package/dist/web/routes/rules.js +6 -1
- package/dist/web/routes/rules.js.map +1 -1
- package/dist/web/routes/sessions.d.ts.map +1 -1
- package/dist/web/routes/sessions.js +9 -1
- package/dist/web/routes/sessions.js.map +1 -1
- package/dist/web/routes/skill-content.d.ts +30 -0
- package/dist/web/routes/skill-content.d.ts.map +1 -0
- package/dist/web/routes/skill-content.js +117 -0
- package/dist/web/routes/skill-content.js.map +1 -0
- package/dist/web/routes/skills-distill.d.ts +29 -0
- package/dist/web/routes/skills-distill.d.ts.map +1 -0
- package/dist/web/routes/skills-distill.js +552 -0
- package/dist/web/routes/skills-distill.js.map +1 -0
- package/dist/web/routes/skills.js +7 -7
- package/dist/web/routes/skills.js.map +1 -1
- package/dist/web/routes/task-timeline.d.ts +102 -0
- package/dist/web/routes/task-timeline.d.ts.map +1 -0
- package/dist/web/routes/task-timeline.js +274 -0
- package/dist/web/routes/task-timeline.js.map +1 -0
- package/dist/web/routes/tasks.d.ts.map +1 -1
- package/dist/web/routes/tasks.js +355 -8
- package/dist/web/routes/tasks.js.map +1 -1
- package/dist/web/routes/trace.d.ts.map +1 -1
- package/dist/web/routes/trace.js +3 -2
- package/dist/web/routes/trace.js.map +1 -1
- package/dist/web/routes/types.d.ts +0 -4
- package/dist/web/routes/types.d.ts.map +1 -1
- package/dist/web/routes/types.js +1 -1
- package/dist/web/routes/types.js.map +1 -1
- package/dist/web/routes/violations.d.ts +14 -0
- package/dist/web/routes/violations.d.ts.map +1 -0
- package/dist/web/routes/violations.js +111 -0
- package/dist/web/routes/violations.js.map +1 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +79 -19
- package/dist/web/server.js.map +1 -1
- package/dist/web/services/build-manager.d.ts +72 -0
- package/dist/web/services/build-manager.d.ts.map +1 -0
- package/dist/web/services/build-manager.js +189 -0
- package/dist/web/services/build-manager.js.map +1 -0
- package/dist/web/services/distill-manager.d.ts +125 -0
- package/dist/web/services/distill-manager.d.ts.map +1 -0
- package/dist/web/services/distill-manager.js +308 -0
- package/dist/web/services/distill-manager.js.map +1 -0
- package/dist/web/static/assets/AgentContentPage-DkeRNxok.js +2 -0
- package/dist/web/static/assets/AgentContentPage-DkeRNxok.js.map +1 -0
- package/dist/web/static/assets/AgentDelegationTable-ByBa0x1l.js +2 -0
- package/dist/web/static/assets/AgentDelegationTable-ByBa0x1l.js.map +1 -0
- package/dist/web/static/assets/ContextInsightsPage-oUk7_I8u.js +3 -0
- package/dist/web/static/assets/ContextInsightsPage-oUk7_I8u.js.map +1 -0
- package/dist/web/static/assets/DaemonHealthPage-DG2fyOP7.js +2 -0
- package/dist/web/static/assets/DaemonHealthPage-DG2fyOP7.js.map +1 -0
- package/dist/web/static/assets/DecisionsPage-CMAPEnKb.js +2 -0
- package/dist/web/static/assets/DecisionsPage-CMAPEnKb.js.map +1 -0
- package/dist/web/static/assets/DiagnosticsPage-DQd-Zm4r.js +2 -0
- package/dist/web/static/assets/DiagnosticsPage-DQd-Zm4r.js.map +1 -0
- package/dist/web/static/assets/DriftTab-DqpepOhI.js +2 -0
- package/dist/web/static/assets/DriftTab-DqpepOhI.js.map +1 -0
- package/dist/web/static/assets/HealthHomePage-CN6zNIie.js +3 -0
- package/dist/web/static/assets/HealthHomePage-CN6zNIie.js.map +1 -0
- package/dist/web/static/assets/KbHitRateTable-ByEIWujF.js +2 -0
- package/dist/web/static/assets/KbHitRateTable-ByEIWujF.js.map +1 -0
- package/dist/web/static/assets/MarkdownRenderer-DZmTl-8J.js +3 -0
- package/dist/web/static/assets/MarkdownRenderer-DZmTl-8J.js.map +1 -0
- package/dist/web/static/assets/NotFound-BQPh0vaF.js +2 -0
- package/dist/web/static/assets/NotFound-BQPh0vaF.js.map +1 -0
- package/dist/web/static/assets/ProjectSwitcher-D3lZMFd3.js +2 -0
- package/dist/web/static/assets/ProjectSwitcher-D3lZMFd3.js.map +1 -0
- package/dist/web/static/assets/SettingsPage-oLJBNzQj.js +2 -0
- package/dist/web/static/assets/SettingsPage-oLJBNzQj.js.map +1 -0
- package/dist/web/static/assets/SkillContentPage-DK5rgfgw.js +2 -0
- package/dist/web/static/assets/SkillContentPage-DK5rgfgw.js.map +1 -0
- package/dist/web/static/assets/SkillStatsTable-DYMzjEUV.js +2 -0
- package/dist/web/static/assets/SkillStatsTable-DYMzjEUV.js.map +1 -0
- package/dist/web/static/assets/SkillsDistillTab-C7qaG8q3.js +2 -0
- package/dist/web/static/assets/SkillsDistillTab-C7qaG8q3.js.map +1 -0
- package/dist/web/static/assets/TasksHubPage-03wsRRsJ.js +6 -0
- package/dist/web/static/assets/TasksHubPage-03wsRRsJ.js.map +1 -0
- package/dist/web/static/assets/ViolationsPage-DSiLr-9O.js +3 -0
- package/dist/web/static/assets/ViolationsPage-DSiLr-9O.js.map +1 -0
- package/dist/web/static/assets/arco-Bhi3a6Qp.js +14 -0
- package/dist/web/static/assets/arco-Bhi3a6Qp.js.map +1 -0
- package/dist/web/static/assets/arco-DFQA6dO_.css +1 -0
- package/dist/web/static/assets/charts-BuHQWDbQ.js +37 -0
- package/dist/web/static/assets/charts-BuHQWDbQ.js.map +1 -0
- package/dist/web/static/assets/date-fns-sbWH3_uq.js +2 -0
- package/dist/web/static/assets/date-fns-sbWH3_uq.js.map +1 -0
- package/dist/web/static/assets/index-7bl3kbcx.css +1 -0
- package/dist/web/static/assets/index-BIYnq1Dx.js +4 -0
- package/dist/web/static/assets/index-BIYnq1Dx.js.map +1 -0
- package/dist/web/static/assets/lucide-CnlPQoG8.js +72 -0
- package/dist/web/static/assets/lucide-CnlPQoG8.js.map +1 -0
- package/dist/web/static/assets/outcome-DUn1NjlC.js +2 -0
- package/dist/web/static/assets/outcome-DUn1NjlC.js.map +1 -0
- package/dist/web/static/assets/query-S6X1S7K9.js +2 -0
- package/dist/web/static/assets/{query-C99w429o.js.map → query-S6X1S7K9.js.map} +1 -1
- package/dist/web/static/assets/{react-router-r79dBVy4.js → react-router-JVUrkhdd.js} +3 -3
- package/dist/web/static/assets/{react-router-r79dBVy4.js.map → react-router-JVUrkhdd.js.map} +1 -1
- package/dist/web/static/assets/react-vendor-tkvCrao7.js +57 -0
- package/dist/web/static/assets/react-vendor-tkvCrao7.js.map +1 -0
- package/dist/web/static/assets/syntax-highlighter-BkZfCDsz.js +6 -0
- package/dist/web/static/assets/syntax-highlighter-BkZfCDsz.js.map +1 -0
- package/dist/web/static/assets/useTabsParam-k8qte_0C.js +2 -0
- package/dist/web/static/assets/useTabsParam-k8qte_0C.js.map +1 -0
- package/dist/web/static/assets/vendor-DWgdB1eY.js +65 -0
- package/dist/web/static/assets/vendor-DWgdB1eY.js.map +1 -0
- package/dist/web/static/index.html +12 -8
- package/package.json +14 -3
- package/dist/core/ai/provider.d.ts +0 -63
- package/dist/core/ai/provider.d.ts.map +0 -1
- package/dist/core/ai/provider.js +0 -241
- package/dist/core/ai/provider.js.map +0 -1
- package/dist/core/ai/types.d.ts +0 -43
- package/dist/core/ai/types.d.ts.map +0 -1
- package/dist/core/ai/types.js +0 -5
- package/dist/core/ai/types.js.map +0 -1
- package/dist/core/storage/token-usage.d.ts +0 -36
- package/dist/core/storage/token-usage.d.ts.map +0 -1
- package/dist/core/storage/token-usage.js +0 -59
- package/dist/core/storage/token-usage.js.map +0 -1
- package/dist/core/utils/token-tracker.d.ts +0 -39
- package/dist/core/utils/token-tracker.d.ts.map +0 -1
- package/dist/core/utils/token-tracker.js +0 -69
- package/dist/core/utils/token-tracker.js.map +0 -1
- package/dist/skills/index.d.ts +0 -3
- package/dist/skills/index.d.ts.map +0 -1
- package/dist/skills/index.js +0 -3
- package/dist/skills/index.js.map +0 -1
- package/dist/skills/matcher.d.ts +0 -26
- package/dist/skills/matcher.d.ts.map +0 -1
- package/dist/skills/matcher.js +0 -113
- package/dist/skills/matcher.js.map +0 -1
- package/dist/skills/official/code-simplifier.md +0 -52
- package/dist/skills/official/find-skills.md +0 -142
- package/dist/skills/official/official-api-design.md +0 -30
- package/dist/skills/official/official-architecture-decision.md +0 -41
- package/dist/skills/official/official-bmad.md +0 -118
- package/dist/skills/official/official-db-schema-design.md +0 -34
- package/dist/skills/official/official-debug.md +0 -25
- package/dist/skills/official/official-doc-driven.md +0 -31
- package/dist/skills/official/official-harness-engineering.md +0 -108
- package/dist/skills/official/official-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 -73
- package/dist/skills/official-skills.js.map +0 -1
- package/dist/skills/semantic-matcher.d.ts +0 -60
- package/dist/skills/semantic-matcher.d.ts.map +0 -1
- package/dist/skills/semantic-matcher.js +0 -192
- package/dist/skills/semantic-matcher.js.map +0 -1
- package/dist/skills/upgrade-engine.d.ts +0 -93
- package/dist/skills/upgrade-engine.d.ts.map +0 -1
- package/dist/skills/upgrade-engine.js +0 -447
- package/dist/skills/upgrade-engine.js.map +0 -1
- package/dist/skills/upgrade-prompt.d.ts +0 -20
- package/dist/skills/upgrade-prompt.d.ts.map +0 -1
- package/dist/skills/upgrade-prompt.js +0 -75
- package/dist/skills/upgrade-prompt.js.map +0 -1
- package/dist/web/routes/ai.d.ts +0 -10
- package/dist/web/routes/ai.d.ts.map +0 -1
- package/dist/web/routes/ai.js +0 -186
- package/dist/web/routes/ai.js.map +0 -1
- package/dist/web/routes/token-usage.d.ts +0 -7
- package/dist/web/routes/token-usage.d.ts.map +0 -1
- package/dist/web/routes/token-usage.js +0 -18
- package/dist/web/routes/token-usage.js.map +0 -1
- package/dist/web/ssrf-guard.d.ts +0 -35
- package/dist/web/ssrf-guard.d.ts.map +0 -1
- package/dist/web/ssrf-guard.js +0 -93
- package/dist/web/ssrf-guard.js.map +0 -1
- package/dist/web/static/assets/AIConfig-CdDWzJyO.js +0 -2
- package/dist/web/static/assets/AIConfig-CdDWzJyO.js.map +0 -1
- package/dist/web/static/assets/Dashboard-CoEmmIDt.js +0 -2
- package/dist/web/static/assets/Dashboard-CoEmmIDt.js.map +0 -1
- package/dist/web/static/assets/Drawer-DdRTzlLB.js +0 -2
- package/dist/web/static/assets/Drawer-DdRTzlLB.js.map +0 -1
- package/dist/web/static/assets/Events-DrIq1SUS.js +0 -2
- package/dist/web/static/assets/Events-DrIq1SUS.js.map +0 -1
- package/dist/web/static/assets/Reports-DFBM3MDK.js +0 -2
- package/dist/web/static/assets/Reports-DFBM3MDK.js.map +0 -1
- package/dist/web/static/assets/SearchInput-qCj_jAcf.js +0 -2
- package/dist/web/static/assets/SearchInput-qCj_jAcf.js.map +0 -1
- package/dist/web/static/assets/SessionDetail-CCzwdoT7.js +0 -2
- package/dist/web/static/assets/SessionDetail-CCzwdoT7.js.map +0 -1
- package/dist/web/static/assets/Sessions-FfLYkAw9.js +0 -2
- package/dist/web/static/assets/Sessions-FfLYkAw9.js.map +0 -1
- package/dist/web/static/assets/Skills-C8Gvs3Qa.js +0 -2
- package/dist/web/static/assets/Skills-C8Gvs3Qa.js.map +0 -1
- package/dist/web/static/assets/TaskDetail-BS8pYhaR.js +0 -2
- package/dist/web/static/assets/TaskDetail-BS8pYhaR.js.map +0 -1
- package/dist/web/static/assets/Tasks-CyuhizG8.js +0 -2
- package/dist/web/static/assets/Tasks-CyuhizG8.js.map +0 -1
- package/dist/web/static/assets/charts-CLrM0_uM.js +0 -37
- package/dist/web/static/assets/charts-CLrM0_uM.js.map +0 -1
- package/dist/web/static/assets/date-fns-CZ_bHujz.js +0 -2
- package/dist/web/static/assets/date-fns-CZ_bHujz.js.map +0 -1
- package/dist/web/static/assets/export-L_VBD2p1.js +0 -4
- package/dist/web/static/assets/export-L_VBD2p1.js.map +0 -1
- package/dist/web/static/assets/index-CBX47X8l.js +0 -3
- package/dist/web/static/assets/index-CBX47X8l.js.map +0 -1
- package/dist/web/static/assets/index-DjIoMdoR.css +0 -1
- package/dist/web/static/assets/lucide-Bs_edTLa.js +0 -232
- package/dist/web/static/assets/lucide-Bs_edTLa.js.map +0 -1
- package/dist/web/static/assets/query-C99w429o.js +0 -2
- package/dist/web/static/assets/react-vendor-CSp-GLFF.js +0 -49
- package/dist/web/static/assets/react-vendor-CSp-GLFF.js.map +0 -1
- package/dist/web/static/assets/syntax-highlighter-44FakypI.js +0 -9
- package/dist/web/static/assets/syntax-highlighter-44FakypI.js.map +0 -1
- package/dist/web/static/assets/task-title-BhOcemuR.js +0 -2
- package/dist/web/static/assets/task-title-BhOcemuR.js.map +0 -1
- package/dist/web/static/assets/time-Bxuk0M-C.js +0 -2
- package/dist/web/static/assets/time-Bxuk0M-C.js.map +0 -1
- package/dist/web/static/assets/vendor-CMMjVdZs.js +0 -64
- package/dist/web/static/assets/vendor-CMMjVdZs.js.map +0 -1
|
@@ -1,20 +1,64 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* PostToolUseHandler — handles PostToolUse hook
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* Also observes Agent tool calls to update routing_events.
|
|
4
|
+
* Observes Agent tool calls to update routing_events.
|
|
6
5
|
*/
|
|
6
|
+
import path from 'node:path';
|
|
7
7
|
import { logger } from '../../core/utils/logger.js';
|
|
8
|
-
import { TokenTracker } from '../../core/utils/token-tracker.js';
|
|
9
8
|
import { getSubagentType } from '../../core/event-fields.js';
|
|
9
|
+
import { appendToExperienceFile, extractExperience, } from '../services/experience-extractor.js';
|
|
10
|
+
/** Phase 5: window (ms) within which a Task spawn can mark a pending rec. */
|
|
11
|
+
const WORKFLOW_REC_WINDOW_MS = 5 * 60 * 1000;
|
|
12
|
+
/**
|
|
13
|
+
* KPI C8 relax: subagent_type values that count as "tried to comply but
|
|
14
|
+
* picked a different agent" → marked `partial_accepted` (C8 weight 0.5).
|
|
15
|
+
* Sourced from `.claude/agents/` filenames + the harness-built-in roster
|
|
16
|
+
* referenced by CLAUDE.md «工作流升级判定». Values outside this set leave
|
|
17
|
+
* the rec pending (StopHandler later marks ignored) — protects against
|
|
18
|
+
* fabricated subagent names polluting the half-credit bucket.
|
|
19
|
+
*/
|
|
20
|
+
const KNOWN_AGENT_TYPES = new Set([
|
|
21
|
+
'coder',
|
|
22
|
+
'doc-reviewer',
|
|
23
|
+
'harness-debug-full',
|
|
24
|
+
'harness-hotfix',
|
|
25
|
+
'hybrid-feature-with-safety',
|
|
26
|
+
'planner',
|
|
27
|
+
'refactor-specialist',
|
|
28
|
+
'verify-agent',
|
|
29
|
+
// Built-in / common Claude Code subagents that appear in real Task spawns.
|
|
30
|
+
'general-purpose',
|
|
31
|
+
'researcher',
|
|
32
|
+
'feature-developer',
|
|
33
|
+
'Explore',
|
|
34
|
+
]);
|
|
35
|
+
/**
|
|
36
|
+
* audit F4: window (ms) within which a PostToolUse may back-fill the outcome
|
|
37
|
+
* of a prior PreToolUse `deny`. 30s matches a typical "agent retries with the
|
|
38
|
+
* hinted approach" reaction time without overlapping into the next prompt.
|
|
39
|
+
*/
|
|
40
|
+
const INTERCEPT_OUTCOME_WINDOW_MS = 30 * 1000;
|
|
41
|
+
/** Bypass marker — must match PreToolUseHandler.BYPASS_PATTERN. */
|
|
42
|
+
const BYPASS_PATTERN = /forge:bypass=([^\s'"`]*)/;
|
|
43
|
+
/** Phase 6 feature flag — default OFF. */
|
|
44
|
+
export const AGENT_WRITEBACK_FLAG = 'agent_writeback.enabled';
|
|
45
|
+
/**
|
|
46
|
+
* Match any changelog path under `docs/implementation/`.
|
|
47
|
+
*
|
|
48
|
+
* Two layouts supported (the 2026-05-26 naming refactor introduced the second):
|
|
49
|
+
* • legacy flat: docs/implementation/<stem>-changelog-<ts>.md
|
|
50
|
+
* • new datedir: docs/implementation/YYYY-MM-DD/HHMM-<stem>-changelog.md
|
|
51
|
+
*
|
|
52
|
+
* The `.*changelog.*` middle portion is intentionally loose (any path under
|
|
53
|
+
* `docs/implementation/` that has the word `changelog` in the basename).
|
|
54
|
+
*/
|
|
55
|
+
const CHANGELOG_PATH_PATTERN = /docs\/implementation\/.*changelog[^/]*\.md$/;
|
|
10
56
|
export class PostToolUseHandler {
|
|
11
57
|
storage;
|
|
12
|
-
|
|
13
|
-
constructor(storage = null) {
|
|
58
|
+
configStore;
|
|
59
|
+
constructor(storage = null, configStore = null) {
|
|
14
60
|
this.storage = storage;
|
|
15
|
-
|
|
16
|
-
this.tokenTracker = new TokenTracker(storage);
|
|
17
|
-
}
|
|
61
|
+
this.configStore = configStore;
|
|
18
62
|
}
|
|
19
63
|
async handle(event) {
|
|
20
64
|
// Observe Agent tool calls and update routing_events
|
|
@@ -42,7 +86,216 @@ export class PostToolUseHandler {
|
|
|
42
86
|
logger.debug(`[PostToolUse] Failed to update routing_event: ${err}`);
|
|
43
87
|
}
|
|
44
88
|
}
|
|
89
|
+
// Phase 5: mark pending workflow_recommendation outcome on Task spawn.
|
|
90
|
+
// (Real subagent invocations come through tool_name='Task' in CC; legacy
|
|
91
|
+
// 'Agent' is also handled for forward compat.)
|
|
92
|
+
if (this.storage && (event.tool_name === 'Task' || event.tool_name === 'Agent')) {
|
|
93
|
+
this.markWorkflowRecOutcome(event);
|
|
94
|
+
}
|
|
95
|
+
// Phase 6: agent-experience writeback on changelog Write/Edit.
|
|
96
|
+
// Fire-and-forget — writeback is observability, never a request-blocker.
|
|
97
|
+
if (event.tool_name === 'Write' || event.tool_name === 'Edit') {
|
|
98
|
+
void this.maybeWriteExperience(event);
|
|
99
|
+
}
|
|
100
|
+
// audit F4: back-fill outcome on any prior 'deny' intercept for this tool.
|
|
101
|
+
if (this.storage) {
|
|
102
|
+
this.maybeMarkInterceptOutcome(event);
|
|
103
|
+
}
|
|
45
104
|
return { allow: true };
|
|
46
105
|
}
|
|
106
|
+
/**
|
|
107
|
+
* audit F4 back-fill (KPI relax: dry_run also back-filled). Pipeline:
|
|
108
|
+
* 1. Query last 30s of `deny` + `dry_run` intercepts for this session.
|
|
109
|
+
* dry_run rows are the "would-have-been-denied" rehearsal that fires
|
|
110
|
+
* when `pre_tool_intercept.enabled=false`. Including them lets C4
|
|
111
|
+
* compute a meaningful obeyed-ratio BEFORE the flag is flipped on —
|
|
112
|
+
* otherwise C4 stays 0 forever in dry_run mode.
|
|
113
|
+
* 2. If any candidate matches `event.tool_name` → the main loop re-invoked
|
|
114
|
+
* the SAME tool despite the deny/dry_run hint → mark 'override'.
|
|
115
|
+
* 3. Else, the main loop switched tools (most commonly Bash deny → Read /
|
|
116
|
+
* Grep / Agent) → mark all candidates 'obeyed'.
|
|
117
|
+
*
|
|
118
|
+
* For dry_run rows specifically the verdict is a *pseudo-outcome* — the
|
|
119
|
+
* rule didn't actually enforce anything, but the main loop's reaction in
|
|
120
|
+
* the same 30s window still proxies "would they have obeyed?". UI surfaces
|
|
121
|
+
* this distinction in the C4 tooltip; the SQL aggregation treats both the
|
|
122
|
+
* same.
|
|
123
|
+
*
|
|
124
|
+
* Silently swallows errors — back-fill is observability, never a blocker.
|
|
125
|
+
* Multiple candidates within the window all get the same verdict; that's
|
|
126
|
+
* acceptable because the AI's reaction is a single response either way.
|
|
127
|
+
*/
|
|
128
|
+
maybeMarkInterceptOutcome(event) {
|
|
129
|
+
if (!this.storage)
|
|
130
|
+
return;
|
|
131
|
+
try {
|
|
132
|
+
const sinceIso = new Date(Date.now() - INTERCEPT_OUTCOME_WINDOW_MS).toISOString();
|
|
133
|
+
const candidates = this.storage.queryToolIntercepts({
|
|
134
|
+
session_id: event.session_id,
|
|
135
|
+
decisions: ['deny', 'dry_run'],
|
|
136
|
+
since: sinceIso,
|
|
137
|
+
limit: 10,
|
|
138
|
+
});
|
|
139
|
+
const pending = candidates.filter((c) => c.outcome === null);
|
|
140
|
+
if (pending.length === 0)
|
|
141
|
+
return;
|
|
142
|
+
for (const row of pending) {
|
|
143
|
+
const verdict = row.tool_name === event.tool_name ? 'override' : 'obeyed';
|
|
144
|
+
this.storage.updateToolInterceptOutcome(row.id, verdict);
|
|
145
|
+
logger.debug(`[PostToolUse] intercept ${row.id} (rule=${row.rule_id} tool=${row.tool_name}) → ${verdict} (now ran ${event.tool_name})`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
catch (err) {
|
|
149
|
+
logger.debug(`[PostToolUse] maybeMarkInterceptOutcome failed: ${err}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Phase 6 writeback. Pipeline:
|
|
154
|
+
* 1. Flag gate (`agent_writeback.enabled`). Default OFF → silent skip.
|
|
155
|
+
* 2. Path filter — only changelog paths under `docs/implementation/`
|
|
156
|
+
* (matches both the legacy `*-changelog-*.md` and the post-2026-05-26
|
|
157
|
+
* datedir layout `YYYY-MM-DD/HHMM-*-changelog.md`).
|
|
158
|
+
* 3. Run `extractExperience` on the resolved absolute path.
|
|
159
|
+
* 4. Append each extracted entry to `<projectRoot>/.forge-knowledge/
|
|
160
|
+
* agents-experience/<topic>.md`.
|
|
161
|
+
*
|
|
162
|
+
* All errors are swallowed (warn-level log) — writeback is best-effort.
|
|
163
|
+
*/
|
|
164
|
+
async maybeWriteExperience(event) {
|
|
165
|
+
if (!this.configStore)
|
|
166
|
+
return;
|
|
167
|
+
let flagEnabled = false;
|
|
168
|
+
try {
|
|
169
|
+
flagEnabled = this.configStore.isEnabled(AGENT_WRITEBACK_FLAG);
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
if (!flagEnabled)
|
|
175
|
+
return;
|
|
176
|
+
const rawPath = pickFilePath(event.tool_input);
|
|
177
|
+
if (!rawPath)
|
|
178
|
+
return;
|
|
179
|
+
if (!CHANGELOG_PATH_PATTERN.test(rawPath))
|
|
180
|
+
return;
|
|
181
|
+
const absPath = path.isAbsolute(rawPath)
|
|
182
|
+
? rawPath
|
|
183
|
+
: path.join(event.project_path, rawPath);
|
|
184
|
+
try {
|
|
185
|
+
const experiences = await extractExperience(absPath);
|
|
186
|
+
if (experiences.length === 0)
|
|
187
|
+
return;
|
|
188
|
+
let written = 0;
|
|
189
|
+
for (const exp of experiences) {
|
|
190
|
+
const ok = await appendToExperienceFile(event.project_path, exp);
|
|
191
|
+
if (ok)
|
|
192
|
+
written++;
|
|
193
|
+
}
|
|
194
|
+
if (written > 0) {
|
|
195
|
+
logger.info(`[PostToolUse] writeback: ${written}/${experiences.length} entries from ${path.basename(absPath)}`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
catch (err) {
|
|
199
|
+
logger.warn(`[PostToolUse] experience writeback failed: ${err}`);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Phase 5 outcome marking. Pipeline:
|
|
204
|
+
* 1. Find the most recent PENDING workflow_recommendations row for the
|
|
205
|
+
* session within the 5 min window. Return early if none.
|
|
206
|
+
* 2. Extract bypass token from Task description / prompt.
|
|
207
|
+
* Token present → mark 'bypassed'.
|
|
208
|
+
* 3. Else compare subagent_type vs recommended_agent_type.
|
|
209
|
+
* Match → 'accepted'. Mismatch → leave pending (PreToolUseHandler
|
|
210
|
+
* should already have denied unless the user supplied bypass; we
|
|
211
|
+
* don't want to mark mismatched-without-bypass as anything other
|
|
212
|
+
* than ignored/Stop-handler's job).
|
|
213
|
+
*
|
|
214
|
+
* Silently swallows storage errors — outcome marking is observability,
|
|
215
|
+
* not a request-blocker.
|
|
216
|
+
*/
|
|
217
|
+
markWorkflowRecOutcome(event) {
|
|
218
|
+
if (!this.storage)
|
|
219
|
+
return;
|
|
220
|
+
try {
|
|
221
|
+
const sinceIso = new Date(Date.now() - WORKFLOW_REC_WINDOW_MS).toISOString();
|
|
222
|
+
const pending = this.storage.queryWorkflowRecommendations({
|
|
223
|
+
session_id: event.session_id,
|
|
224
|
+
outcome: 'pending',
|
|
225
|
+
since: sinceIso,
|
|
226
|
+
limit: 1,
|
|
227
|
+
});
|
|
228
|
+
if (pending.length === 0)
|
|
229
|
+
return;
|
|
230
|
+
const rec = pending[0];
|
|
231
|
+
const spawnedType = getSubagentType(event) ?? '';
|
|
232
|
+
const bypassToken = extractBypassToken(event.tool_input);
|
|
233
|
+
if (bypassToken !== null) {
|
|
234
|
+
this.storage.updateWorkflowRecommendationOutcome(rec.id, 'bypassed', event.timestamp);
|
|
235
|
+
logger.info(`[PostToolUse] workflow_rec ${rec.id} → bypassed (token="${bypassToken || '<no-reason>'}", spawned=${spawnedType})`);
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
if (spawnedType && spawnedType === rec.recommended_agent_type) {
|
|
239
|
+
this.storage.updateWorkflowRecommendationOutcome(rec.id, 'accepted', event.timestamp);
|
|
240
|
+
logger.info(`[PostToolUse] workflow_rec ${rec.id} → accepted (spawned=${spawnedType})`);
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
// KPI C8 relax: main thread spawned a recognised subagent_type that just
|
|
244
|
+
// isn't the recommended one (e.g. `coder` instead of `refactor-specialist`,
|
|
245
|
+
// `general-purpose` instead of `harness-hotfix`). That's a real "tried to
|
|
246
|
+
// comply" signal — mark `partial_accepted` so C8 captures it at weight
|
|
247
|
+
// 0.5. We deliberately scope this to the KNOWN_AGENT_TYPES allow-list to
|
|
248
|
+
// protect against fabricated/typo subagent names polluting the bucket.
|
|
249
|
+
if (spawnedType && KNOWN_AGENT_TYPES.has(spawnedType)) {
|
|
250
|
+
this.storage.updateWorkflowRecommendationOutcome(rec.id, 'partial_accepted', event.timestamp);
|
|
251
|
+
logger.info(`[PostToolUse] workflow_rec ${rec.id} → partial_accepted (spawned=${spawnedType}, recommended=${rec.recommended_agent_type})`);
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
// Mismatch w/o bypass and unrecognised type: in strict mode PreToolUse
|
|
255
|
+
// should have denied. If we got here, either flag was OFF or the deny was
|
|
256
|
+
// bypassed out-of-band; leave the row pending so Stop handler can mark
|
|
257
|
+
// ignored.
|
|
258
|
+
logger.debug(`[PostToolUse] workflow_rec ${rec.id} mismatch — spawned=${spawnedType} vs recommended=${rec.recommended_agent_type}; leaving pending`);
|
|
259
|
+
}
|
|
260
|
+
catch (err) {
|
|
261
|
+
logger.debug(`[PostToolUse] markWorkflowRecOutcome failed: ${err}`);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Resolve the target file path of a Write/Edit tool invocation.
|
|
267
|
+
*
|
|
268
|
+
* Claude Code's Write/Edit payloads use `file_path`; legacy CLIs occasionally
|
|
269
|
+
* package it as `path`. Both shapes are accepted; anything else returns null.
|
|
270
|
+
*/
|
|
271
|
+
function pickFilePath(input) {
|
|
272
|
+
if (!input)
|
|
273
|
+
return null;
|
|
274
|
+
const candidates = [input.file_path, input.path];
|
|
275
|
+
for (const c of candidates) {
|
|
276
|
+
if (typeof c === 'string' && c.length > 0)
|
|
277
|
+
return c;
|
|
278
|
+
}
|
|
279
|
+
return null;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Extract `forge:bypass=<reason>` token from any string field in the Task
|
|
283
|
+
* tool input. Returns the reason (may be empty string) or null when no token.
|
|
284
|
+
*/
|
|
285
|
+
function extractBypassToken(input) {
|
|
286
|
+
if (!input)
|
|
287
|
+
return null;
|
|
288
|
+
const candidates = [];
|
|
289
|
+
for (const key of ['description', 'prompt', 'subagent_type', 'name']) {
|
|
290
|
+
const v = input[key];
|
|
291
|
+
if (typeof v === 'string')
|
|
292
|
+
candidates.push(v);
|
|
293
|
+
}
|
|
294
|
+
for (const c of candidates) {
|
|
295
|
+
const m = c.match(BYPASS_PATTERN);
|
|
296
|
+
if (m)
|
|
297
|
+
return m[1] ?? '';
|
|
298
|
+
}
|
|
299
|
+
return null;
|
|
47
300
|
}
|
|
48
301
|
//# sourceMappingURL=post-tool-use.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-tool-use.js","sourceRoot":"","sources":["../../../src/daemon/handlers/post-tool-use.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"post-tool-use.js","sourceRoot":"","sources":["../../../src/daemon/handlers/post-tool-use.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PreToolUseHandler — Phase 1 strict-mode rule engine + dry_run shim.
|
|
3
|
+
*
|
|
4
|
+
* Pipeline per event:
|
|
5
|
+
* 1. Build RuleContext (recent_agent_spawn, edited_files, recent_prompt).
|
|
6
|
+
* 2. Detect explicit bypass marker (`forge:bypass=<reason>`) in tool input.
|
|
7
|
+
* 3. Find the first matching ToolInterceptRule from RuleRegistry.
|
|
8
|
+
* 4. Decide & persist:
|
|
9
|
+
* - Flag OFF (default): row written with decision='dry_run'; allow=true.
|
|
10
|
+
* - Flag ON + bypass : decision='bypass'; allow=true.
|
|
11
|
+
* - Flag ON + deny : decision='deny'; allow=false + hookSpecificOutput.
|
|
12
|
+
* - Flag ON + warn : decision='warn'; allow=true + additionalContext.
|
|
13
|
+
*
|
|
14
|
+
* Storage / config failures must never propagate — `tool_intercepts` is a
|
|
15
|
+
* fact table; missing rows are acceptable, breaking the tool pipeline is not.
|
|
16
|
+
*
|
|
17
|
+
* Session-state computed lazily (per-event) instead of cached, to keep the
|
|
18
|
+
* handler stateless across daemon restarts. Phase 2 will fold this into
|
|
19
|
+
* sessions.intercept_count etc. so the lazy scan can be replaced.
|
|
20
|
+
*/
|
|
21
|
+
import type { PreToolUseEvent } from '../../core/types.js';
|
|
22
|
+
import type { SQLiteStorage } from '../../core/storage/sqlite.js';
|
|
23
|
+
import type { ConfigStore } from '../config-store.js';
|
|
24
|
+
import type { HookResponse } from '../server.js';
|
|
25
|
+
import { RuleRegistry } from '../rules/registry.js';
|
|
26
|
+
import { InterceptRollbackGuard } from '../services/intercept-rollback-guard.js';
|
|
27
|
+
export declare class PreToolUseHandler {
|
|
28
|
+
private storage;
|
|
29
|
+
private configStore;
|
|
30
|
+
private registry;
|
|
31
|
+
/**
|
|
32
|
+
* Session → edited-files incremental cache (F7).
|
|
33
|
+
* Cleared per-session on Stop via `clearSession()`.
|
|
34
|
+
*/
|
|
35
|
+
private readonly editedFilesCache;
|
|
36
|
+
private readonly rollbackGuard;
|
|
37
|
+
constructor(storage: SQLiteStorage, configStore: ConfigStore, registry?: RuleRegistry, rollbackGuard?: InterceptRollbackGuard);
|
|
38
|
+
/**
|
|
39
|
+
* Drop cached edited-files state for a session. Called from StopHandler so
|
|
40
|
+
* long-running daemons don't leak per-session Sets forever.
|
|
41
|
+
*/
|
|
42
|
+
clearSession(sessionId: string): void;
|
|
43
|
+
handle(event: PreToolUseEvent): Promise<HookResponse>;
|
|
44
|
+
private isFlagEnabled;
|
|
45
|
+
private buildContext;
|
|
46
|
+
/**
|
|
47
|
+
* v9.x Phase 2 (2026-05-26): probe `question_default_bmad.enforce`. Default
|
|
48
|
+
* false during the 7-day dry_run window starting 2026-05-26. Storage /
|
|
49
|
+
* config failures degrade to `false` (fail-safe — keep dry_run behaviour).
|
|
50
|
+
*/
|
|
51
|
+
private probeQuestionDefaultBmadEnforce;
|
|
52
|
+
/**
|
|
53
|
+
* Phase 5: load the most recent PENDING workflow recommendation for the
|
|
54
|
+
* session so the `workflow-recommendation-mismatch` rule can fire without
|
|
55
|
+
* doing its own DB lookup. Returns null when:
|
|
56
|
+
* • Phase 5 feature flag is OFF (no row should be enforced)
|
|
57
|
+
* • no pending row exists
|
|
58
|
+
* • lookup throws (degrade silently to "no enforcement")
|
|
59
|
+
*/
|
|
60
|
+
private fetchPendingWorkflowRec;
|
|
61
|
+
/**
|
|
62
|
+
* Distinct file_paths edited in PostToolUse Edit/Write events for the session.
|
|
63
|
+
*
|
|
64
|
+
* F7 fix: incremental cache keyed by session_id. First call scans up to
|
|
65
|
+
* `EDIT_HISTORY_SCAN_LIMIT` events; subsequent calls fetch only events with
|
|
66
|
+
* `timestamp >= maxTs` (Set dedup absorbs the boundary). A session with N
|
|
67
|
+
* PreToolUse events now amortizes to O(N) total scan work instead of O(N·200).
|
|
68
|
+
*
|
|
69
|
+
* Returns a fresh copy of the Set so rule matchers can't mutate cached state.
|
|
70
|
+
*/
|
|
71
|
+
private computeEditedFiles;
|
|
72
|
+
/**
|
|
73
|
+
* P0-1 fix (2026-05-27): same as `computeEditedFiles` but additionally
|
|
74
|
+
* surfaces per-file last-edit ISO timestamp so the HARD multi-file rule can
|
|
75
|
+
* drop pre-spawn entries. The Set is preserved as the legacy `files`
|
|
76
|
+
* companion for callers (rule matchers, hint factories) that don't need
|
|
77
|
+
* timing.
|
|
78
|
+
*
|
|
79
|
+
* Cache shape was upgraded (added `fileTs: Map<string,string>`) but the
|
|
80
|
+
* incremental-scan invariant is unchanged: we only fetch events newer than
|
|
81
|
+
* the cached `maxTs` and merge into the existing fileTs map (`Map.set`
|
|
82
|
+
* naturally overwrites with the newest ts since queryEvents returns DESC).
|
|
83
|
+
*/
|
|
84
|
+
private computeEditedFilesWithTs;
|
|
85
|
+
/**
|
|
86
|
+
* P0-1 fix (2026-05-27): timestamp of the most recent PreToolUse Task/Agent
|
|
87
|
+
* event within the F6 5-min window. Returns null when no spawn was observed.
|
|
88
|
+
* Uses the same query shape as `detectRecentAgentSpawn` so callers don't pay
|
|
89
|
+
* twice (storage layer prepared-stmt cache absorbs the duplicate).
|
|
90
|
+
*/
|
|
91
|
+
private getLastSpawnTs;
|
|
92
|
+
/**
|
|
93
|
+
* Did the session spawn an agent (Task / Agent tool) within the recent
|
|
94
|
+
* observation window?
|
|
95
|
+
*
|
|
96
|
+
* F6 fix (2026-05-27): query `PreToolUse` (spawn-initiated) instead of
|
|
97
|
+
* `PostToolUse` (spawn-completed). PostToolUse Task events only arrive
|
|
98
|
+
* 30s–5min+ after spawn (when the sub-agent finishes), so the previous
|
|
99
|
+
* 30s window was permanently false during the actual post-spawn
|
|
100
|
+
* coordination period the rule was designed to relax. PreToolUse Task
|
|
101
|
+
* fires at the spawn instant; combined with the 5-min window (aligned
|
|
102
|
+
* with Phase 5 `PHASE5_WINDOW_MS`), the main thread now correctly sees
|
|
103
|
+
* `recent_agent_spawn=true` during BMAD coordination.
|
|
104
|
+
*
|
|
105
|
+
* `limit` bumped from 40 → 100 because a 5-min window can hold many more
|
|
106
|
+
* spawn events than the prior 30s window.
|
|
107
|
+
*/
|
|
108
|
+
private detectRecentAgentSpawn;
|
|
109
|
+
/** Most-recent UserPromptSubmit prompt text (best-effort, used for intent relaxation). */
|
|
110
|
+
private fetchRecentPrompt;
|
|
111
|
+
private persistIntercept;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Shape-based secret redaction patterns (audit F-medium #5, 2026-05-26).
|
|
115
|
+
*
|
|
116
|
+
* Applied to the `tool_input_summary` string we persist into `tool_intercepts`
|
|
117
|
+
* for auditing. The raw `tool_input` JSON is NEVER redacted at the rule-engine
|
|
118
|
+
* level (rules legitimately need to inspect verbatim arguments); we only
|
|
119
|
+
* scrub the *summary* that gets written to durable storage and surfaced in
|
|
120
|
+
* the Web UI / weekly report.
|
|
121
|
+
*
|
|
122
|
+
* Order matters: longer / more specific patterns first so they're not
|
|
123
|
+
* partially eaten by a more general regex on the same span.
|
|
124
|
+
*
|
|
125
|
+
* Patterns covered:
|
|
126
|
+
* 1. CLI-flag style: --token=…, --api-key=…, password=…, secret=…
|
|
127
|
+
* 2. JWT shape: eyJ<base64>.<base64>.<base64>
|
|
128
|
+
* 3. Anthropic / OpenAI keys: sk-… (40+ chars)
|
|
129
|
+
* 4. Slack bot tokens: xoxb-… (40+ chars)
|
|
130
|
+
* 5. AWS access key IDs: AKIA + 16 alnum uppercase
|
|
131
|
+
* 6. Long hex strings (>= 32 chars) — catches hex API keys / session tokens
|
|
132
|
+
*
|
|
133
|
+
* Exported (under-test) for unit tests in pre-tool-use.test.ts so we can lock
|
|
134
|
+
* down each shape with a focused assertion.
|
|
135
|
+
*/
|
|
136
|
+
/**
|
|
137
|
+
* Shared redaction pattern table. Each entry is either:
|
|
138
|
+
* • `prefixed: true` — the regex has a single capture group that names the
|
|
139
|
+
* key (e.g. `--token=`); replacement preserves the
|
|
140
|
+
* prefix and substitutes `<redacted>` for the value.
|
|
141
|
+
* • `prefixed: false` — the regex matches the entire secret literal; the
|
|
142
|
+
* whole match is replaced with `<redacted>`.
|
|
143
|
+
*
|
|
144
|
+
* Exported so tests can lock down each shape individually.
|
|
145
|
+
*/
|
|
146
|
+
export declare const SECRET_REDACTION_PATTERNS: Array<{
|
|
147
|
+
name: string;
|
|
148
|
+
re: RegExp;
|
|
149
|
+
prefixed: boolean;
|
|
150
|
+
}>;
|
|
151
|
+
/**
|
|
152
|
+
* Apply all `SECRET_REDACTION_PATTERNS` to a string. Exported for unit tests;
|
|
153
|
+
* production callers should go through `buildToolInputSummary`.
|
|
154
|
+
*/
|
|
155
|
+
export declare function redactSecrets(s: string): string;
|
|
156
|
+
//# sourceMappingURL=pre-tool-use.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pre-tool-use.d.ts","sourceRoot":"","sources":["../../../src/daemon/handlers/pre-tool-use.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,qBAAqB,CAAC;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAoDjF,qBAAa,iBAAiB;IAU1B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,QAAQ;IAXlB;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiD;IAElF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;gBAG7C,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,WAAW,EACxB,QAAQ,GAAE,YAAiC,EACnD,aAAa,CAAC,EAAE,sBAAsB;IAKxC;;;OAGG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI/B,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC;IA2I3D,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,YAAY;IAsBpB;;;;OAIG;IACH,OAAO,CAAC,+BAA+B;IASvC;;;;;;;OAOG;IACH,OAAO,CAAC,uBAAuB;IAwB/B;;;;;;;;;OASG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,wBAAwB;IA4ChC;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAoBtB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,sBAAsB;IAoB9B,0FAA0F;IAC1F,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,gBAAgB;CAyBzB;AA2BD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;CACnB,CAwBA,CAAC;AAEF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ/C"}
|