@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,259 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: verify-agent
|
|
3
|
+
description: Live runtime verifier. Runs the actual app/CLI/browser, drives the changed surface, probes edges, returns PASS/FAIL/BLOCKED/SKIP with evidence. Use after implementation and before commit. Triggers on "verify X works", "test this change manually", "confirm the fix". Replaces the main-thread "verify skill" pattern. For static analysis use doc-reviewer.
|
|
4
|
+
tools: Read, Bash, Write, Glob, Grep, WebFetch
|
|
5
|
+
model: inherit
|
|
6
|
+
color: green
|
|
7
|
+
version: 1
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# IMPORTANT: subagent rules
|
|
11
|
+
|
|
12
|
+
- You are a subagent — you **cannot** spawn other agents (built-in CC restriction)
|
|
13
|
+
- You MUST NOT modify test fixtures to satisfy buggy impl
|
|
14
|
+
- You MUST NOT exceed your declared scope; stop and report if scope creep is needed
|
|
15
|
+
- You MUST NOT modify source files — Write is for probe scripts under
|
|
16
|
+
`/tmp/cf-verify-*/` only
|
|
17
|
+
- Your deliverable is the PASS/FAIL/BLOCKED/SKIP verdict report itself (not a
|
|
18
|
+
`docs/implementation/` changelog). The value-add is driving the live surface
|
|
19
|
+
and probing edges (Step 5)
|
|
20
|
+
- **You are the DESIGNATED owner of the single full-suite run per wave.**
|
|
21
|
+
Implementation agents (`coder` / `safety-net-implementer`) run only SCOPED
|
|
22
|
+
tests; you run the full suite **once** at the verify gate as the regression
|
|
23
|
+
sweep (Step 4.5). This is by design (decision 8a51b15d): N full-suite runs
|
|
24
|
+
collapse to 1, avoiding the vitest worker/IO storm.
|
|
25
|
+
|
|
26
|
+
# Role
|
|
27
|
+
|
|
28
|
+
Live runtime verifier. You take a recent change and prove (or disprove) that it
|
|
29
|
+
actually works in the real running system. You do not just trust unit tests —
|
|
30
|
+
you start the actual app, drive the actual surface, probe the edges, and report
|
|
31
|
+
PASS / FAIL / BLOCKED / SKIP with raw evidence.
|
|
32
|
+
|
|
33
|
+
You replace the older "main thread runs the built-in `verify` skill" pattern,
|
|
34
|
+
because subagents can do the work without burning main-thread context.
|
|
35
|
+
|
|
36
|
+
# When invoked
|
|
37
|
+
|
|
38
|
+
You should be the agent selected when:
|
|
39
|
+
|
|
40
|
+
- A change has just been implemented (by coder / safety-net-implementer / etc.)
|
|
41
|
+
- Before commit, user wants confidence the change does what it claims
|
|
42
|
+
- User says "verify X", "test this manually", "does the fix actually work"
|
|
43
|
+
|
|
44
|
+
For pure static analysis / code review → `doc-reviewer`.
|
|
45
|
+
For implementing fixes → `coder` / `safety-net-implementer` (mode=hotfix).
|
|
46
|
+
|
|
47
|
+
# Workflow (mirrors the built-in `verify` skill)
|
|
48
|
+
|
|
49
|
+
## Step 0: discover the verification methodology skill dynamically (targeted)
|
|
50
|
+
|
|
51
|
+
Before you drive the surface / form a verdict, find the methodology skill that
|
|
52
|
+
fits THIS verification by DYNAMIC DISCOVERY, not a hardcoded list (decision
|
|
53
|
+
c20c2d1f) — **targeted, at most 1-2 skills**:
|
|
54
|
+
|
|
55
|
+
1. **When there is a real runnable surface to verify**, the verification
|
|
56
|
+
checklist is your core reference — describe it and discover it via **Bash**:
|
|
57
|
+
`cf skill search "verify a change before completion" --json` → this surfaces
|
|
58
|
+
`distilled-verification-before-completion`; pull it:
|
|
59
|
+
`cf skill invoke distilled-verification-before-completion --reason "verify/verification-before-completion" --agent verify-agent`.
|
|
60
|
+
Read it and use it as the reference for designing your probes (Step 5) and the
|
|
61
|
+
verdict.
|
|
62
|
+
2. **Optionally** discover ONE more skill that fits the CHANGE TYPE: describe the
|
|
63
|
+
change you are verifying (e.g. `"verify a db schema migration"`,
|
|
64
|
+
`"verify a new http route contract"`) and run
|
|
65
|
+
`cf skill search "<change-desc>" --json`. If it returns a strong match
|
|
66
|
+
(`no_strong_match: false`), YOU judge whether to pull the single best one:
|
|
67
|
+
`cf skill invoke <id> --reason "verify/<phase>" --agent verify-agent`. If it
|
|
68
|
+
reports `no_strong_match`, pull only the verification checklist — do NOT pull
|
|
69
|
+
more. This is targeted on purpose: never degrade into "pull everything every
|
|
70
|
+
time" (that is the noise trap d08da374 cut).
|
|
71
|
+
|
|
72
|
+
**Rate it after you use it (post-use self-assessment, decision d24cd3a2).** Once
|
|
73
|
+
you have run the verification using the pulled checklist — near the end, e.g. in
|
|
74
|
+
the report step — run ONE Bash line rating how actionable the skill's CONTENT was
|
|
75
|
+
on THIS project's task:
|
|
76
|
+
`cf skill feedback --skill <the-id-you-pulled> --rating helped|partial|not-actionable --note "<one line: what WAS / WASN'T applicable to THIS project>"`.
|
|
77
|
+
Rate HONESTLY — `not-actionable`/`partial` (only generic principles transferred,
|
|
78
|
+
the concrete steps didn't apply here) are VALUABLE signals that flag a skill
|
|
79
|
+
needing project-specific refinement, not a failure. Skip only if you skipped the
|
|
80
|
+
pull. (Advisory + fail-soft: never blocks your verdict.)
|
|
81
|
+
|
|
82
|
+
> Why Bash, not MCP: subagents in this harness have **zero MCP access** — the
|
|
83
|
+
> MCP `skill_invoke` / `skill_search` tools are uncallable from you. `cf skill
|
|
84
|
+
> search` / `cf skill invoke` (Bash) are the working channel, and invoke records
|
|
85
|
+
> the pull to `skill_invocations`. For KB
|
|
86
|
+
> precedent use **`cf knowledge fetch <topic> --reason "verify/kb-precedent"`** /
|
|
87
|
+
> `cf knowledge query <keyword> --reason "verify/kb-precedent"` (Bash), NOT the
|
|
88
|
+
> MCP `knowledge_query`. The `--reason "verify/kb-<phase>"` makes the pull
|
|
89
|
+
> attributable in `kb_query_log` (source=agent-pull).
|
|
90
|
+
|
|
91
|
+
**Telemetry convention (required).** The `--reason` you pass to `cf skill invoke`
|
|
92
|
+
MUST begin with the prefix **`verify/`** (e.g.
|
|
93
|
+
`--reason "verify/verification-before-completion"`). A plain
|
|
94
|
+
`reason LIKE 'verify/%'` SQL separates these guided CLI pulls
|
|
95
|
+
(`invocation_type='cli'`) from historical keyword auto-matches (reason
|
|
96
|
+
`"Auto-matched by keyword matching"`, `invocation_type='static'`) and from MCP
|
|
97
|
+
pulls (`invocation_type='dynamic'`). The `<workflow>/<phase>` form is parsed by
|
|
98
|
+
`parseWorkflowMeta` into `workflow`/`phase` columns — keep both segments
|
|
99
|
+
lowercase, letters/digits/hyphens only.
|
|
100
|
+
|
|
101
|
+
**When to SKIP the pull (avoid pull-for-pull's-sake):**
|
|
102
|
+
- If the verdict is destined to be SKIP (doc-only / not runtime-verifiable) or
|
|
103
|
+
the change is genuinely trivial, skip the pull and note
|
|
104
|
+
`pull-skipped: doc-only` in the verdict.
|
|
105
|
+
|
|
106
|
+
## Step 0.5: pull the relevant KB precedent for the verified area (near-mandatory) (decision 2eac9d87)
|
|
107
|
+
|
|
108
|
+
After you have read the change (Step 1 gives you the file list) but before you
|
|
109
|
+
drive the surface and form a verdict, pull the ONE most-relevant KB precedent for
|
|
110
|
+
the area you are verifying — **at most 1 page, by the trigger table**. The default
|
|
111
|
+
is to PULL (KB precedent often records the exact "why it is this way" / known
|
|
112
|
+
gotcha that tells you what edges to probe), not to skip:
|
|
113
|
+
|
|
114
|
+
| Verified area | Bash command |
|
|
115
|
+
|---|---|
|
|
116
|
+
| A specific module (the change lives in `src/<x>/`) | `cf knowledge fetch "modules/<x>" --reason "verify/kb-precedent"` (e.g. `modules/core`, `modules/daemon`, `modules/web`) |
|
|
117
|
+
| Architecture / layering / cross-cutting change | `cf knowledge fetch "architecture" --reason "verify/kb-precedent"` |
|
|
118
|
+
| A decision / trade-off being implemented | `cf knowledge fetch "decisions" --reason "verify/kb-precedent"` |
|
|
119
|
+
| Gotcha-prone surface (daemon socket, gzip event content, DB column type, vitest IO storm) | `cf knowledge fetch "agents-experience/<area>" --reason "verify/kb-precedent"` (or `cf knowledge query <keyword> --reason "verify/kb-precedent"`) |
|
|
120
|
+
|
|
121
|
+
**Near-mandatory wording:** unless the verdict is destined to be SKIP (doc-only)
|
|
122
|
+
or the change is genuinely trivial, pull **exactly one** most-relevant KB
|
|
123
|
+
precedent per the table and read it to inform which edges you probe in Step 5.
|
|
124
|
+
Use `cf knowledge query <keyword> --reason "verify/kb-precedent"` as the lighter
|
|
125
|
+
probe if unsure which page.
|
|
126
|
+
|
|
127
|
+
After you USE the KB content, rate it (mirrors `cf skill feedback`):
|
|
128
|
+
- `cf knowledge feedback --rating helped|partial|not-actionable --note "<one line: what precedent informed the probes / didn't>"`
|
|
129
|
+
- Rate HONESTLY — `partial`/`not-actionable` are valuable refinement signals.
|
|
130
|
+
Only run it if you actually pulled.
|
|
131
|
+
|
|
132
|
+
**Record it in the verdict (required):** add a `KB pull:` line —
|
|
133
|
+
`KB pull: <topic> (reason=verify/kb-precedent) usefulness=<rating>` when you
|
|
134
|
+
pulled, or `kb-pull-skipped: doc-only` / `kb-pull-skipped: trivial` when you
|
|
135
|
+
genuinely skipped. The default is to pull exactly one.
|
|
136
|
+
|
|
137
|
+
## Step 1: find the change
|
|
138
|
+
|
|
139
|
+
- `git diff` (vs HEAD or vs a commit ref the user named).
|
|
140
|
+
- `git status` to see uncommitted changes.
|
|
141
|
+
- Identify: which files, which functions, which user-facing surface.
|
|
142
|
+
|
|
143
|
+
## Step 2: pick the surface
|
|
144
|
+
|
|
145
|
+
- CLI? Then construct the command-line flow.
|
|
146
|
+
- HTTP API? Then construct curl / fetch requests.
|
|
147
|
+
- Web GUI? Then start the dev server and use a browser (headless via curl, or screenshot).
|
|
148
|
+
- Library boundary? Then write a small Node script that exercises the public API.
|
|
149
|
+
- Daemon / hook? Then trigger the event and tail the logs.
|
|
150
|
+
|
|
151
|
+
## Step 3: get a handle on a running instance
|
|
152
|
+
|
|
153
|
+
- Check the repo for run / dev / start skills or scripts:
|
|
154
|
+
`package.json` scripts, `scripts/dev-*.sh`, `Makefile`, etc.
|
|
155
|
+
- If a project-specific launch path exists, use it.
|
|
156
|
+
- Cold-start if necessary; capture startup output.
|
|
157
|
+
- Confirm the process is healthy before driving it.
|
|
158
|
+
|
|
159
|
+
## Step 4: drive it
|
|
160
|
+
|
|
161
|
+
- Smallest path that exercises the changed code.
|
|
162
|
+
- Capture the input you sent and the output you received.
|
|
163
|
+
- This is the "happy path" baseline.
|
|
164
|
+
|
|
165
|
+
## Step 4.5: full-suite regression sweep (you own this — run it ONCE)
|
|
166
|
+
|
|
167
|
+
- This is the ONE place per wave the full vitest suite runs. Implementation
|
|
168
|
+
agents deliberately ran only scoped tests, so YOU close the regression gap
|
|
169
|
+
here with a single full run: `npm test` (or `npx vitest run`).
|
|
170
|
+
- Run it exactly once per verify pass — do not loop it. If you must re-run after
|
|
171
|
+
a fix, that is fine, but never fan it out or run it speculatively per-probe.
|
|
172
|
+
- **Ignore the known distiller-spawn flake**: the `skill-distiller`
|
|
173
|
+
spawn-related test is a known intermittent flake — if the ONLY failures are
|
|
174
|
+
that known flake, treat the sweep as green and note it in the verdict. Any
|
|
175
|
+
other failure is a real regression → FAIL.
|
|
176
|
+
- Record the full-suite result (pass count + any non-flake failures) in the
|
|
177
|
+
verdict report.
|
|
178
|
+
|
|
179
|
+
## Step 5: push on it (the probe)
|
|
180
|
+
|
|
181
|
+
- Now probe edges: wrong input, empty value, oversized input, concurrent calls,
|
|
182
|
+
error conditions, what happens after restart, etc.
|
|
183
|
+
- A PASS without probe lines is just happy-path replay — not a real verification.
|
|
184
|
+
- Mark probe lines with a clear marker in your report (e.g., "PROBE:").
|
|
185
|
+
|
|
186
|
+
## Step 6: capture
|
|
187
|
+
|
|
188
|
+
- Pane dumps (terminal output)
|
|
189
|
+
- Response bodies (full, not truncated)
|
|
190
|
+
- Screenshots if web (save to `/tmp/cf-verify-[task]/`)
|
|
191
|
+
- Log excerpts (relevant lines only)
|
|
192
|
+
|
|
193
|
+
## Step 7: verdict
|
|
194
|
+
|
|
195
|
+
Return a structured report:
|
|
196
|
+
|
|
197
|
+
```markdown
|
|
198
|
+
# Verify: [change description]
|
|
199
|
+
|
|
200
|
+
## Verdict: PASS | FAIL | BLOCKED | SKIP
|
|
201
|
+
|
|
202
|
+
## Change reviewed
|
|
203
|
+
[git diff summary; files touched]
|
|
204
|
+
|
|
205
|
+
## Skill pull
|
|
206
|
+
[e.g. `pulled: distilled-verification-before-completion (reason=verify/verification-before-completion) usefulness=helped`
|
|
207
|
+
plus any second targeted skill, OR `pull-skipped: doc-only`. Echo the post-use
|
|
208
|
+
`cf skill feedback` rating as `usefulness=<helped|partial|not-actionable>` —
|
|
209
|
+
the DB is source of truth, this is the readable mirror.]
|
|
210
|
+
|
|
211
|
+
## KB pull
|
|
212
|
+
[Step 0.5 KB precedent pull — e.g.
|
|
213
|
+
`KB pull: modules/daemon (reason=verify/kb-precedent) usefulness=helped`,
|
|
214
|
+
OR `kb-pull-skipped: doc-only` / `kb-pull-skipped: trivial`. Echo the post-use
|
|
215
|
+
`cf knowledge feedback` rating; DB is source of truth, this is the mirror.]
|
|
216
|
+
|
|
217
|
+
## Surface exercised
|
|
218
|
+
[CLI / API / GUI / etc., with the exact commands or URLs used]
|
|
219
|
+
|
|
220
|
+
## Happy path
|
|
221
|
+
[input -> output, with evidence]
|
|
222
|
+
|
|
223
|
+
## Probes
|
|
224
|
+
- PROBE: [edge case 1] -> [result]
|
|
225
|
+
- PROBE: [edge case 2] -> [result]
|
|
226
|
+
- ...
|
|
227
|
+
|
|
228
|
+
## Evidence
|
|
229
|
+
- [path to captured logs / screenshots]
|
|
230
|
+
- [key output snippets]
|
|
231
|
+
|
|
232
|
+
## Verdict rationale
|
|
233
|
+
[1 paragraph: why PASS / FAIL / BLOCKED / SKIP]
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
Verdict definitions:
|
|
237
|
+
- **PASS**: happy path works AND >=1 probe succeeds (or fails gracefully as designed)
|
|
238
|
+
- **FAIL**: happy path broken, OR a probe revealed unintended behavior
|
|
239
|
+
- **BLOCKED**: cannot start the system / cannot reach the changed surface
|
|
240
|
+
- **SKIP**: change is doc-only or otherwise not runtime-verifiable; state why explicitly
|
|
241
|
+
|
|
242
|
+
# Constraints
|
|
243
|
+
|
|
244
|
+
- Tools include Write (for probe scripts in `/tmp/`) but exclude Edit
|
|
245
|
+
(cannot modify source code to make verify pass)
|
|
246
|
+
- Do NOT spawn other agents
|
|
247
|
+
- "FAIL when in doubt" — ambiguous output = FAIL with raw capture; don't pretend it's PASS
|
|
248
|
+
- A PASS report MUST include >=1 PROBE line; otherwise it's just a happy-path replay
|
|
249
|
+
- Do NOT skip the "push on it" step; the full-suite sweep (Step 4.5) is a
|
|
250
|
+
baseline, the probe is the value-add
|
|
251
|
+
- You own the wave's ONE full-suite run (Step 4.5); run it once, ignore the
|
|
252
|
+
known distiller-spawn flake
|
|
253
|
+
|
|
254
|
+
# Output
|
|
255
|
+
|
|
256
|
+
- Verdict report (as final message)
|
|
257
|
+
- Probe scripts / screenshots / logs under `/tmp/cf-verify-[task]/`
|
|
258
|
+
- No source code changes
|
|
259
|
+
- No changelog file (the verdict report IS the deliverable; user pipes it where they want)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inject-block formatter (audit F13)
|
|
3
|
+
*
|
|
4
|
+
* Centralizes the `━━━` decorative fence used by additionalContext /
|
|
5
|
+
* systemMessage injections. Previously duplicated across 5+ call-sites in
|
|
6
|
+
* user-prompt.ts and workflow-recommender.ts, each formatting its own variant.
|
|
7
|
+
*
|
|
8
|
+
* IMPORTANT: The 32-char closing fence width and surrounding whitespace are
|
|
9
|
+
* preserved character-by-character to match existing test snapshots (e.g.
|
|
10
|
+
* user-prompt-kb-inject.test.ts) and keep visual rendering stable for users.
|
|
11
|
+
*/
|
|
12
|
+
export interface InjectBlockOptions {
|
|
13
|
+
/**
|
|
14
|
+
* Title text rendered inside the opening fence. Default opener is
|
|
15
|
+
* `━━━ ${title} ━━━` (3-char fence on each side, ASCII space around title).
|
|
16
|
+
*
|
|
17
|
+
* Pass `openLine` instead when the title needs non-default spacing — e.g.
|
|
18
|
+
* CJK fullwidth punctuation that visually absorbs the trailing space
|
|
19
|
+
* (see the 项目背景 / 工作流建议 callers).
|
|
20
|
+
*/
|
|
21
|
+
title?: string;
|
|
22
|
+
/** Pre-formed opening line, used verbatim. Takes precedence over `title`. */
|
|
23
|
+
openLine?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Body content rendered between the opening and closing fences. Always
|
|
26
|
+
* separated from both fences by a single `\n`; callers wanting extra blank
|
|
27
|
+
* padding should embed leading / trailing `\n` characters directly.
|
|
28
|
+
*/
|
|
29
|
+
body: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Wrap content in the standard inject-block fence:
|
|
33
|
+
*
|
|
34
|
+
* `━━━ {title} ━━━`
|
|
35
|
+
* {body}
|
|
36
|
+
* `━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`
|
|
37
|
+
*/
|
|
38
|
+
export declare function wrapInjectBlock(opts: InjectBlockOptions): string;
|
|
39
|
+
//# sourceMappingURL=inject-block.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject-block.d.ts","sourceRoot":"","sources":["../../../src/daemon/utils/inject-block.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAGhE"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inject-block formatter (audit F13)
|
|
3
|
+
*
|
|
4
|
+
* Centralizes the `━━━` decorative fence used by additionalContext /
|
|
5
|
+
* systemMessage injections. Previously duplicated across 5+ call-sites in
|
|
6
|
+
* user-prompt.ts and workflow-recommender.ts, each formatting its own variant.
|
|
7
|
+
*
|
|
8
|
+
* IMPORTANT: The 32-char closing fence width and surrounding whitespace are
|
|
9
|
+
* preserved character-by-character to match existing test snapshots (e.g.
|
|
10
|
+
* user-prompt-kb-inject.test.ts) and keep visual rendering stable for users.
|
|
11
|
+
*/
|
|
12
|
+
/** Closing-side decorative fence (32 `━` chars). */
|
|
13
|
+
const INJECT_FENCE = '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━';
|
|
14
|
+
/**
|
|
15
|
+
* Wrap content in the standard inject-block fence:
|
|
16
|
+
*
|
|
17
|
+
* `━━━ {title} ━━━`
|
|
18
|
+
* {body}
|
|
19
|
+
* `━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`
|
|
20
|
+
*/
|
|
21
|
+
export function wrapInjectBlock(opts) {
|
|
22
|
+
const open = opts.openLine ?? `━━━ ${opts.title ?? ''} ━━━`;
|
|
23
|
+
return `${open}\n${opts.body}\n${INJECT_FENCE}`;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=inject-block.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject-block.js","sourceRoot":"","sources":["../../../src/daemon/utils/inject-block.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,oDAAoD;AACpD,MAAM,YAAY,GAAG,kCAAkC,CAAC;AAsBxD;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,IAAwB;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,IAAI,CAAC,KAAK,IAAI,EAAE,MAAM,CAAC;IAC5D,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;AAClD,CAAC"}
|
package/dist/hooks/hook-lib.sh
CHANGED
|
@@ -7,6 +7,14 @@
|
|
|
7
7
|
# - SOCKET_PATH, QUEUE_DIR shared variables
|
|
8
8
|
# - send_event_or_enqueue() function
|
|
9
9
|
|
|
10
|
+
# spec 1713: skip daemon-spawned claude CLI child processes to prevent hook recursion.
|
|
11
|
+
# When CLAUDE_FORGE_INTERNAL=1 is set by the daemon before spawning an internal
|
|
12
|
+
# claude CLI, any hook that sources this lib exits immediately (no socket connect,
|
|
13
|
+
# no event enqueue). `exit 0` terminates the entry-hook subshell entirely, which
|
|
14
|
+
# is the desired behavior — the internal claude invocation should be invisible
|
|
15
|
+
# to claude-forge's own event pipeline.
|
|
16
|
+
[ -n "$CLAUDE_FORGE_INTERNAL" ] && exit 0
|
|
17
|
+
|
|
10
18
|
SOCKET_PATH="${CLAUDE_FORGE_SOCKET:-$HOME/.claude-forge/daemon.sock}"
|
|
11
19
|
QUEUE_DIR="$HOME/.claude-forge/queue"
|
|
12
20
|
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
# Claude Forge - Notification Hook
|
|
3
|
+
#
|
|
4
|
+
# jq call budget (2 total — reduced from 4):
|
|
5
|
+
# 1× parse INPUT scalars
|
|
6
|
+
# 1× build EVENT (uses raw INPUT via --argjson tool_input)
|
|
7
|
+
|
|
8
|
+
# Internal-spawn guard — see pre-tool-use.sh for the full rationale.
|
|
9
|
+
[ -n "$CLAUDE_FORGE_DISTILL_SPAWN" -o -n "$CLAUDE_FORGE_INTERNAL_SPAWN" ] && exit 0
|
|
3
10
|
|
|
4
11
|
# shellcheck source=./hook-lib.sh
|
|
5
12
|
source "$(dirname "$0")/hook-lib.sh"
|
|
@@ -9,21 +16,25 @@ AUTH_TOKEN=$(cat "$HOME/.claude-forge/daemon.token" 2>/dev/null || echo '')
|
|
|
9
16
|
# 读取 stdin
|
|
10
17
|
INPUT=$(cat)
|
|
11
18
|
|
|
12
|
-
#
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
19
|
+
# (1/2) 一次性解析 cwd / session
|
|
20
|
+
eval "$(echo "$INPUT" | jq -r '@sh "
|
|
21
|
+
_IN_RAW_CWD=\(.cwd // "")
|
|
22
|
+
_IN_SESSION=\(.session_id // .sessionId // "")
|
|
23
|
+
"')"
|
|
24
|
+
|
|
25
|
+
PROJECT_PATH=$(resolve_project_path "${_IN_RAW_CWD:-$PWD}")
|
|
26
|
+
SESSION_ID="${_IN_SESSION:-${CLAUDE_CODE_SESSION_ID:-cli}}"
|
|
17
27
|
|
|
18
|
-
# 构造事件 JSON(原始 INPUT 作为 tool_input,保留完整通知内容)
|
|
28
|
+
# (2/2) 构造事件 JSON(原始 INPUT 作为 tool_input,保留完整通知内容)
|
|
29
|
+
# 原脚本用 `jq -c '.'` 再赋值给 TOOL_INPUT —— 但 INPUT 本身已是合法 JSON,
|
|
30
|
+
# 可直接 --argjson 注入,省一次 jq spawn。
|
|
19
31
|
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%S.000Z")
|
|
20
|
-
TOOL_INPUT=$(echo "$INPUT" | jq -c '.')
|
|
21
32
|
EVENT=$(jq -nc \
|
|
22
33
|
--arg hook_type "Notification" \
|
|
23
34
|
--arg timestamp "$TIMESTAMP" \
|
|
24
35
|
--arg session_id "$SESSION_ID" \
|
|
25
36
|
--arg project_path "$PROJECT_PATH" \
|
|
26
|
-
--argjson tool_input "$
|
|
37
|
+
--argjson tool_input "$INPUT" \
|
|
27
38
|
--arg auth "$AUTH_TOKEN" \
|
|
28
39
|
'{hook_type: $hook_type, timestamp: $timestamp, session_id: $session_id,
|
|
29
40
|
project_path: $project_path, tool_name: "notification",
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
# Claude Forge - PostToolUse Hook
|
|
3
|
+
#
|
|
4
|
+
# jq call budget (3 total — reduced from 11):
|
|
5
|
+
# 1× parse INPUT scalars + tool_input + tool_response JSON via @sh eval
|
|
6
|
+
# 1× build EVENT JSON via jq -n
|
|
7
|
+
# 1× parse RESPONSE scalars + pre-rendered hookSpecificOutput JSON (only when
|
|
8
|
+
# RESPONSE non-empty)
|
|
9
|
+
|
|
10
|
+
# Internal-spawn guard — see pre-tool-use.sh for the full rationale.
|
|
11
|
+
[ -n "$CLAUDE_FORGE_DISTILL_SPAWN" -o -n "$CLAUDE_FORGE_INTERNAL_SPAWN" ] && exit 0
|
|
3
12
|
|
|
4
13
|
# shellcheck source=./hook-lib.sh
|
|
5
14
|
source "$(dirname "$0")/hook-lib.sh"
|
|
@@ -9,17 +18,20 @@ AUTH_TOKEN=$(cat "$HOME/.claude-forge/daemon.token" 2>/dev/null || echo '')
|
|
|
9
18
|
# 读取 stdin
|
|
10
19
|
INPUT=$(cat)
|
|
11
20
|
|
|
12
|
-
#
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
# (1/3) 一次性解析输入:标量 + tool_input/tool_response 子文档。
|
|
22
|
+
eval "$(echo "$INPUT" | jq -r '@sh "
|
|
23
|
+
_IN_RAW_CWD=\(.cwd // "")
|
|
24
|
+
_IN_SESSION=\(.session_id // .sessionId // "")
|
|
25
|
+
_IN_TOOL=\(.tool_name // "")
|
|
26
|
+
_IN_TOOL_INPUT_JSON=\((.tool_input // {}) | tojson)
|
|
27
|
+
_IN_TOOL_OUTPUT_JSON=\((.tool_response // {}) | tojson)
|
|
28
|
+
"')"
|
|
29
|
+
|
|
30
|
+
TOOL_NAME="${CLAUDE_TOOL_NAME:-$_IN_TOOL}"
|
|
31
|
+
PROJECT_PATH=$(resolve_project_path "${_IN_RAW_CWD:-$PWD}")
|
|
32
|
+
SESSION_ID="${_IN_SESSION:-${CLAUDE_CODE_SESSION_ID:-cli}}"
|
|
33
|
+
|
|
34
|
+
# (2/3) 构造事件 JSON
|
|
23
35
|
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%S.000Z")
|
|
24
36
|
EVENT=$(jq -nc \
|
|
25
37
|
--arg hook_type "PostToolUse" \
|
|
@@ -27,8 +39,8 @@ EVENT=$(jq -nc \
|
|
|
27
39
|
--arg session_id "$SESSION_ID" \
|
|
28
40
|
--arg project_path "$PROJECT_PATH" \
|
|
29
41
|
--arg tool_name "$TOOL_NAME" \
|
|
30
|
-
--argjson tool_input "$
|
|
31
|
-
--argjson tool_output "$
|
|
42
|
+
--argjson tool_input "$_IN_TOOL_INPUT_JSON" \
|
|
43
|
+
--argjson tool_output "$_IN_TOOL_OUTPUT_JSON" \
|
|
32
44
|
--arg auth "$AUTH_TOKEN" \
|
|
33
45
|
'{hook_type: $hook_type, timestamp: $timestamp, session_id: $session_id,
|
|
34
46
|
project_path: $project_path, tool_name: $tool_name, tool_input: $tool_input,
|
|
@@ -39,22 +51,28 @@ send_event_or_enqueue "$EVENT" 5
|
|
|
39
51
|
RESPONSE="$HOOK_RESPONSE"
|
|
40
52
|
|
|
41
53
|
if [ -n "$RESPONSE" ]; then
|
|
42
|
-
#
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
54
|
+
# (3/3) 一次性解析 RESPONSE。
|
|
55
|
+
# 注意:jq `//` 视 false 与 null 等同 —— `.allow // true` 在 .allow=false 时
|
|
56
|
+
# 仍返回 true,块分支因此不触发。这是历史行为,safety-net 已固化。
|
|
57
|
+
eval "$(echo "$RESPONSE" | jq -r '@sh "
|
|
58
|
+
_R_ALLOW=\((.allow // true) | tostring)
|
|
59
|
+
_R_HAS_HOOK=\(if .hookSpecificOutput then "yes" else "no" end)
|
|
60
|
+
_R_HAS_CTX=\(if .additionalContext and (.additionalContext != "") then "yes" else "no" end)
|
|
61
|
+
_R_REASON=\(.reason // "Pipeline 已阻断")
|
|
62
|
+
_R_HOOK_OUT_JSON=\((if .hookSpecificOutput then {hookSpecificOutput: .hookSpecificOutput} else null end) | tojson)
|
|
63
|
+
"')"
|
|
64
|
+
|
|
65
|
+
if [ "$_R_ALLOW" = "false" ]; then
|
|
66
|
+
if [ "$_R_HAS_HOOK" = "yes" ]; then
|
|
67
|
+
echo "$_R_HOOK_OUT_JSON"
|
|
48
68
|
exit 0
|
|
49
69
|
else
|
|
50
|
-
|
|
51
|
-
echo "$REASON" >&2
|
|
70
|
+
echo "$_R_REASON" >&2
|
|
52
71
|
exit 2
|
|
53
72
|
fi
|
|
54
73
|
fi
|
|
55
74
|
|
|
56
|
-
|
|
57
|
-
if [ "$HAS_CONTEXT" = "yes" ]; then
|
|
75
|
+
if [ "$_R_HAS_CTX" = "yes" ]; then
|
|
58
76
|
echo "$RESPONSE"
|
|
59
77
|
fi
|
|
60
78
|
fi
|
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
# Claude Forge - PreToolUse Hook(双向通信)
|
|
3
|
+
#
|
|
4
|
+
# jq call budget (3 total — reduced from 10):
|
|
5
|
+
# 1× parse INPUT scalars + tool_input JSON via @sh eval
|
|
6
|
+
# 1× build EVENT JSON via jq -n
|
|
7
|
+
# 1× parse RESPONSE scalars + pre-rendered hookSpecificOutput JSON (only when
|
|
8
|
+
# RESPONSE non-empty; skipped on daemon-down / empty replies)
|
|
9
|
+
# Each jq spawn is ~5-15ms cold on macOS; the original 10-call fan-out
|
|
10
|
+
# added ~80ms to every tool call. See docs/implementation/2026-05-26.
|
|
11
|
+
|
|
12
|
+
# Internal-spawn guard: forge spawns the `claude` CLI from several places
|
|
13
|
+
# (src/skills/distill/distiller.ts via CLAUDE_FORGE_DISTILL_SPAWN, and the
|
|
14
|
+
# shared src/core/utils/claude-cli-spawn.ts via CLAUDE_FORGE_INTERNAL_SPAWN —
|
|
15
|
+
# used by cf claudemd, cf knowledge build, cf patch). Each spawn drops
|
|
16
|
+
# `--bare` so OAuth keychain reads still work; this guard prevents the
|
|
17
|
+
# spawned subprocess's hooks from firing back into the daemon (fan-out
|
|
18
|
+
# loop). Both envs are accepted for backward compatibility.
|
|
19
|
+
# See docs/implementation/2026-05-29 for the full design.
|
|
20
|
+
[ -n "$CLAUDE_FORGE_DISTILL_SPAWN" -o -n "$CLAUDE_FORGE_INTERNAL_SPAWN" ] && exit 0
|
|
3
21
|
|
|
4
22
|
# shellcheck source=./hook-lib.sh
|
|
5
23
|
source "$(dirname "$0")/hook-lib.sh"
|
|
@@ -9,15 +27,21 @@ AUTH_TOKEN=$(cat "$HOME/.claude-forge/daemon.token" 2>/dev/null || echo '')
|
|
|
9
27
|
# 读取 stdin(Claude Code 传入的 JSON)
|
|
10
28
|
INPUT=$(cat)
|
|
11
29
|
|
|
12
|
-
#
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
30
|
+
# (1/3) 一次性解析输入:标量 + tool_input JSON 串。@sh 输出的字符串已 shell-quote,
|
|
31
|
+
# 可直接 eval 赋值;tool_input 用 tojson 序列化后再 eval 成字符串变量,
|
|
32
|
+
# 后续作为 --argjson 注入回 jq -n 构建器。
|
|
33
|
+
eval "$(echo "$INPUT" | jq -r '@sh "
|
|
34
|
+
_IN_RAW_CWD=\(.cwd // "")
|
|
35
|
+
_IN_SESSION=\(.session_id // .sessionId // "")
|
|
36
|
+
_IN_TOOL=\(.tool_name // "")
|
|
37
|
+
_IN_TOOL_INPUT_JSON=\((.tool_input // {}) | tojson)
|
|
38
|
+
"')"
|
|
39
|
+
|
|
40
|
+
TOOL_NAME="${CLAUDE_TOOL_NAME:-$_IN_TOOL}"
|
|
41
|
+
PROJECT_PATH=$(resolve_project_path "${_IN_RAW_CWD:-$PWD}")
|
|
42
|
+
SESSION_ID="${_IN_SESSION:-${CLAUDE_CODE_SESSION_ID:-cli}}"
|
|
19
43
|
|
|
20
|
-
# 构造事件 JSON
|
|
44
|
+
# (2/3) 构造事件 JSON
|
|
21
45
|
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%S.000Z")
|
|
22
46
|
EVENT=$(jq -nc \
|
|
23
47
|
--arg hook_type "PreToolUse" \
|
|
@@ -25,7 +49,7 @@ EVENT=$(jq -nc \
|
|
|
25
49
|
--arg session_id "$SESSION_ID" \
|
|
26
50
|
--arg project_path "$PROJECT_PATH" \
|
|
27
51
|
--arg tool_name "$TOOL_NAME" \
|
|
28
|
-
--argjson tool_input "$
|
|
52
|
+
--argjson tool_input "$_IN_TOOL_INPUT_JSON" \
|
|
29
53
|
--arg auth "$AUTH_TOKEN" \
|
|
30
54
|
'{hook_type: $hook_type, timestamp: $timestamp, session_id: $session_id,
|
|
31
55
|
project_path: $project_path, tool_name: $tool_name, tool_input: $tool_input,
|
|
@@ -36,26 +60,33 @@ send_event_or_enqueue "$EVENT" 5
|
|
|
36
60
|
RESPONSE="$HOOK_RESPONSE"
|
|
37
61
|
|
|
38
62
|
if [ -n "$RESPONSE" ]; then
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
63
|
+
# (3/3) 一次性解析 RESPONSE:allow / has_hook / has_ctx / reason
|
|
64
|
+
# + 预渲染 hookSpecificOutput JSON 串(compact)。
|
|
65
|
+
# 注意:jq 的 `//` 运算符把 false 和 null 同视为"取后备",所以
|
|
66
|
+
# `.allow // true` 在 .allow=false 时也返回 true —— 这是历史遗留问题,
|
|
67
|
+
# 保持与重构前完全一致的行为(safety-net 已固化)。
|
|
68
|
+
eval "$(echo "$RESPONSE" | jq -r '@sh "
|
|
69
|
+
_R_ALLOW=\((.allow // true) | tostring)
|
|
70
|
+
_R_HAS_HOOK=\(if .hookSpecificOutput then "yes" else "no" end)
|
|
71
|
+
_R_HAS_CTX=\(if .additionalContext and (.additionalContext != "") then "yes" else "no" end)
|
|
72
|
+
_R_REASON=\(.reason // "操作被 Forge 阻断")
|
|
73
|
+
_R_HOOK_OUT_JSON=\((if .hookSpecificOutput then {hookSpecificOutput: .hookSpecificOutput} else null end) | tojson)
|
|
74
|
+
"')"
|
|
75
|
+
|
|
76
|
+
if [ "$_R_ALLOW" = "false" ]; then
|
|
77
|
+
if [ "$_R_HAS_HOOK" = "yes" ]; then
|
|
78
|
+
# 输出 hookSpecificOutput 给 Claude Code(compact JSON 同样有效)
|
|
79
|
+
echo "$_R_HOOK_OUT_JSON"
|
|
47
80
|
exit 1
|
|
48
81
|
else
|
|
49
|
-
#
|
|
50
|
-
|
|
51
|
-
echo "$REASON" >&2
|
|
82
|
+
# 降级:原因到 stderr + exit 2
|
|
83
|
+
echo "$_R_REASON" >&2
|
|
52
84
|
exit 2
|
|
53
85
|
fi
|
|
54
86
|
fi
|
|
55
87
|
|
|
56
|
-
# 有 additionalContext
|
|
57
|
-
|
|
58
|
-
if [ "$HAS_CONTEXT" = "yes" ]; then
|
|
88
|
+
# 有 additionalContext 时把整个 RESPONSE 透传给 Claude Code
|
|
89
|
+
if [ "$_R_HAS_CTX" = "yes" ]; then
|
|
59
90
|
echo "$RESPONSE"
|
|
60
91
|
fi
|
|
61
92
|
fi
|