@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
|
@@ -4,35 +4,71 @@ export interface Skill {
|
|
|
4
4
|
keywords: string[];
|
|
5
5
|
content: string;
|
|
6
6
|
path: string;
|
|
7
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Marks claude-forge-shipped built-in skills (currently the
|
|
9
|
+
* `src/skills/distilled/*.md` set). Historically called "official";
|
|
10
|
+
* semantics simplified to "built-in" after the official-purge spec
|
|
11
|
+
* (2026-05-27, 1110).
|
|
12
|
+
*/
|
|
13
|
+
isBuiltin?: boolean;
|
|
8
14
|
description?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Phase 7 — Skill ↔ Agent pairing.
|
|
17
|
+
* When set, UserPromptHandler step 4 emits a "强烈建议 Task spawn <agent>"
|
|
18
|
+
* directive AND writes a `workflow_recommendations` row (source='skill_pairing')
|
|
19
|
+
* instead of injecting the skill content directly. The agent name MUST match
|
|
20
|
+
* a `.claude/agents/<spawn_agent>.md` file so Phase 5's mismatch-deny rule
|
|
21
|
+
* has a concrete target to enforce on PreToolUse.
|
|
22
|
+
*/
|
|
23
|
+
spawn_agent?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Optional template body sent as the spawned agent's prompt. Reserved for
|
|
26
|
+
* future use — current Phase 7 wiring injects a fixed directive built from
|
|
27
|
+
* the original prompt. Stored here so frontmatter parsing round-trips
|
|
28
|
+
* cleanly when the field IS supplied.
|
|
29
|
+
*/
|
|
30
|
+
spawn_agent_prompt?: string;
|
|
9
31
|
}
|
|
10
32
|
/**
|
|
11
33
|
* Simple skill registry that scans ~/.claude/skills/*.md
|
|
12
|
-
* and matches by keywords in frontmatter
|
|
34
|
+
* and matches by keywords in frontmatter.
|
|
35
|
+
*
|
|
36
|
+
* D R-B (2026-05-29, spec 0902 §2.4.4 / decision f5a5b030 Option B): the
|
|
37
|
+
* Anthropic-SDK-backed `SemanticSkillMatcher` was deleted. The registry is
|
|
38
|
+
* now **keyword-only**. Constructor accepts no args; callers that used to
|
|
39
|
+
* pass `(apiKey, model, baseURL)` should drop those — they were silently
|
|
40
|
+
* ignored in R-A and are gone entirely now. Schema field
|
|
41
|
+
* `config.skill_matching.api_key` was removed from the `ForgeConfig` JSON
|
|
42
|
+
* schema in D R-D; daemon still grep-warns the raw yaml on startup.
|
|
43
|
+
*
|
|
44
|
+
* BREAKING: users that previously enjoyed AI-powered semantic skill
|
|
45
|
+
* recommendations now get keyword-only matching (the existing
|
|
46
|
+
* `matchKeywords` fallback, which already covered the unconfigured case).
|
|
13
47
|
*/
|
|
14
48
|
export declare class SkillRegistry {
|
|
15
49
|
private skills;
|
|
16
|
-
|
|
17
|
-
constructor(apiKey?: string, model?: string, baseURL?: string);
|
|
50
|
+
constructor();
|
|
18
51
|
/**
|
|
19
|
-
* Resolve the directory containing
|
|
20
|
-
* Uses import.meta.url for ESM compatibility (
|
|
52
|
+
* Resolve the directory containing built-in distilled skill .md files.
|
|
53
|
+
* Uses import.meta.url for ESM compatibility (dev + npm-installed).
|
|
21
54
|
*/
|
|
22
|
-
private
|
|
55
|
+
private resolveDistilledDir;
|
|
23
56
|
/**
|
|
24
|
-
* Scan ~/.claude/skills/ for
|
|
25
|
-
*
|
|
57
|
+
* Scan claude-forge built-in distilled skills + ~/.claude/skills/ for
|
|
58
|
+
* user skills. Built-in skills load first; user skills load second and
|
|
59
|
+
* can override by id.
|
|
26
60
|
*
|
|
27
|
-
*
|
|
28
|
-
* 1. Flat
|
|
29
|
-
* 2. Directory
|
|
61
|
+
* User-skill formats supported:
|
|
62
|
+
* 1. Flat: ~/.claude/skills/skill-name.md
|
|
63
|
+
* 2. Directory: ~/.claude/skills/skill-name/SKILL.md (agent-skills format)
|
|
30
64
|
*/
|
|
31
65
|
private scan;
|
|
32
66
|
/**
|
|
33
|
-
* Match a prompt against skill keywords
|
|
34
|
-
*
|
|
35
|
-
*
|
|
67
|
+
* Match a prompt against skill keywords.
|
|
68
|
+
*
|
|
69
|
+
* Post D R-B (spec 0902): semantic / AI matching has been removed. Only
|
|
70
|
+
* the keyword path runs. The result `source` is therefore always
|
|
71
|
+
* `'keyword'`.
|
|
36
72
|
*/
|
|
37
73
|
match(prompt: string, keywords?: string[], context?: {
|
|
38
74
|
recentFiles?: string[];
|
|
@@ -40,6 +76,11 @@ export declare class SkillRegistry {
|
|
|
40
76
|
/**
|
|
41
77
|
* Like match(), but also returns the confidence score (0-100) so callers
|
|
42
78
|
* can compare across alternatives (e.g. agent vs skill routing).
|
|
79
|
+
*
|
|
80
|
+
* Post D R-B: only keyword matching remains; `source` is always
|
|
81
|
+
* `'keyword'`. The literal-union return type is preserved for caller
|
|
82
|
+
* compatibility — `'semantic'` is no longer emitted but kept in the type
|
|
83
|
+
* so older code paths that pattern-match on it still compile until R-D.
|
|
43
84
|
*/
|
|
44
85
|
matchWithConfidence(prompt: string, keywords?: string[], context?: {
|
|
45
86
|
recentFiles?: string[];
|
|
@@ -53,10 +94,6 @@ export declare class SkillRegistry {
|
|
|
53
94
|
* Supports fallback to description-based substring matching when keywords are empty
|
|
54
95
|
*/
|
|
55
96
|
private matchKeywords;
|
|
56
|
-
/**
|
|
57
|
-
* Flexible keyword matching with word boundary for English, substring for Chinese
|
|
58
|
-
*/
|
|
59
|
-
private matchKeywordFlexible;
|
|
60
97
|
/**
|
|
61
98
|
* Match with full result details (for debugging/logging)
|
|
62
99
|
*/
|
|
@@ -69,7 +106,14 @@ export declare class SkillRegistry {
|
|
|
69
106
|
}[]>;
|
|
70
107
|
/** Return all loaded skills */
|
|
71
108
|
getAll(): Skill[];
|
|
72
|
-
/**
|
|
109
|
+
/**
|
|
110
|
+
* Get a skill by ID. Returns `undefined` for unknown ids.
|
|
111
|
+
*
|
|
112
|
+
* The legacy `official-*` → `distilled-*` alias fallback was removed by
|
|
113
|
+
* the official-purge spec (2026-05-27, 1110). Old `official-*` ids no
|
|
114
|
+
* longer resolve; historical rows in `skill_invocations` with those ids
|
|
115
|
+
* are not migrated (user-accepted residue).
|
|
116
|
+
*/
|
|
73
117
|
get(id: string): Skill | undefined;
|
|
74
118
|
/**
|
|
75
119
|
* Get skill manifest (id + description + keywords) for Agent pre-declaration
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/skills/registry.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/skills/registry.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAiC;;IAO/C;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;;;;;;;OAQG;IACH,OAAO,CAAC,IAAI;IA6HZ;;;;;;OAMG;IACG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,EAAO,EAAE,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAKjH;;;;;;;;OAQG;IACG,mBAAmB,CACvB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAM,EAAO,EACvB,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GACnC,OAAO,CAAC;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAA;KAAE,GAAG,IAAI,CAAC;IASvF;;;OAGG;YACW,aAAa;IA8D3B;;OAEG;IACG,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,EAAO,EAAE,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE;;;;;IAkCpG,+BAA+B;IAC/B,MAAM,IAAI,KAAK,EAAE;IAIjB;;;;;;;OAOG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAIlC;;OAEG;IACH,WAAW,IAAI,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAS3F,mCAAmC;IACnC,MAAM,IAAI,IAAI;CAIf"}
|
package/dist/skills/registry.js
CHANGED
|
@@ -4,68 +4,82 @@ import { homedir } from 'node:os';
|
|
|
4
4
|
import matter from 'gray-matter';
|
|
5
5
|
import { fileURLToPath } from 'node:url';
|
|
6
6
|
import { logger } from '../core/utils/logger.js';
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
7
|
+
import { loadBuiltinSkills } from './builtin-skills.js';
|
|
8
|
+
import { matchKeywordFlexible, scoreSkillByKeywords } from './keyword-score.js';
|
|
9
9
|
const SKILLS_DIR = path.join(homedir(), '.claude', 'skills');
|
|
10
10
|
/**
|
|
11
11
|
* Simple skill registry that scans ~/.claude/skills/*.md
|
|
12
|
-
* and matches by keywords in frontmatter
|
|
12
|
+
* and matches by keywords in frontmatter.
|
|
13
|
+
*
|
|
14
|
+
* D R-B (2026-05-29, spec 0902 §2.4.4 / decision f5a5b030 Option B): the
|
|
15
|
+
* Anthropic-SDK-backed `SemanticSkillMatcher` was deleted. The registry is
|
|
16
|
+
* now **keyword-only**. Constructor accepts no args; callers that used to
|
|
17
|
+
* pass `(apiKey, model, baseURL)` should drop those — they were silently
|
|
18
|
+
* ignored in R-A and are gone entirely now. Schema field
|
|
19
|
+
* `config.skill_matching.api_key` was removed from the `ForgeConfig` JSON
|
|
20
|
+
* schema in D R-D; daemon still grep-warns the raw yaml on startup.
|
|
21
|
+
*
|
|
22
|
+
* BREAKING: users that previously enjoyed AI-powered semantic skill
|
|
23
|
+
* recommendations now get keyword-only matching (the existing
|
|
24
|
+
* `matchKeywords` fallback, which already covered the unconfigured case).
|
|
13
25
|
*/
|
|
14
26
|
export class SkillRegistry {
|
|
15
27
|
skills = new Map();
|
|
16
|
-
|
|
17
|
-
constructor(apiKey, model, baseURL) {
|
|
28
|
+
constructor() {
|
|
18
29
|
this.scan();
|
|
19
|
-
|
|
20
|
-
if (apiKey) {
|
|
21
|
-
this.semanticMatcher = new SemanticSkillMatcher(apiKey, model, baseURL);
|
|
22
|
-
logger.info('[SkillRegistry] Semantic matching enabled');
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
logger.debug('[SkillRegistry] Semantic matching disabled (no API key)');
|
|
26
|
-
}
|
|
30
|
+
logger.debug('[SkillRegistry] Keyword-only matching (spec 0902 D R-B)');
|
|
27
31
|
}
|
|
28
32
|
/**
|
|
29
|
-
* Resolve the directory containing
|
|
30
|
-
* Uses import.meta.url for ESM compatibility (
|
|
33
|
+
* Resolve the directory containing built-in distilled skill .md files.
|
|
34
|
+
* Uses import.meta.url for ESM compatibility (dev + npm-installed).
|
|
31
35
|
*/
|
|
32
|
-
|
|
36
|
+
resolveDistilledDir() {
|
|
33
37
|
const thisFile = fileURLToPath(import.meta.url);
|
|
34
|
-
return path.join(path.dirname(thisFile), '
|
|
38
|
+
return path.join(path.dirname(thisFile), 'distilled');
|
|
35
39
|
}
|
|
36
40
|
/**
|
|
37
|
-
* Scan ~/.claude/skills/ for
|
|
38
|
-
*
|
|
41
|
+
* Scan claude-forge built-in distilled skills + ~/.claude/skills/ for
|
|
42
|
+
* user skills. Built-in skills load first; user skills load second and
|
|
43
|
+
* can override by id.
|
|
39
44
|
*
|
|
40
|
-
*
|
|
41
|
-
* 1. Flat
|
|
42
|
-
* 2. Directory
|
|
45
|
+
* User-skill formats supported:
|
|
46
|
+
* 1. Flat: ~/.claude/skills/skill-name.md
|
|
47
|
+
* 2. Directory: ~/.claude/skills/skill-name/SKILL.md (agent-skills format)
|
|
43
48
|
*/
|
|
44
49
|
scan() {
|
|
45
|
-
// 1. Load
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
50
|
+
// 1. Load built-in distilled skills from src/skills/distilled/*.md.
|
|
51
|
+
// Each skill's keywords come straight from its frontmatter — the
|
|
52
|
+
// old OFFICIAL_SKILL_KEYWORDS / ALIAS reverse-merge was removed by
|
|
53
|
+
// the official-purge spec (2026-05-27, 1110); keyword data now
|
|
54
|
+
// lives exclusively in the .md frontmatter (single source of truth).
|
|
55
|
+
let distilledCount = 0;
|
|
56
|
+
const distilledDir = this.resolveDistilledDir();
|
|
57
|
+
if (fs.existsSync(distilledDir)) {
|
|
58
|
+
try {
|
|
59
|
+
const distilledSkills = loadBuiltinSkills(distilledDir);
|
|
60
|
+
for (const ds of distilledSkills) {
|
|
61
|
+
this.skills.set(ds.name, {
|
|
62
|
+
id: ds.name,
|
|
63
|
+
name: ds.name,
|
|
64
|
+
keywords: ds.keywords,
|
|
65
|
+
content: ds.content,
|
|
66
|
+
path: path.join(distilledDir, ds.name + '.md'),
|
|
67
|
+
isBuiltin: true, // semantics: claude-forge-shipped built-in
|
|
68
|
+
description: ds.description,
|
|
69
|
+
spawn_agent: ds.spawn_agent,
|
|
70
|
+
spawn_agent_prompt: ds.spawn_agent_prompt,
|
|
71
|
+
});
|
|
72
|
+
distilledCount++;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
logger.debug(`[SkillRegistry] Failed to load distilled skills: ${err}`);
|
|
62
77
|
}
|
|
63
78
|
}
|
|
64
|
-
|
|
65
|
-
logger.
|
|
79
|
+
if (distilledCount > 0) {
|
|
80
|
+
logger.info(`Loaded ${distilledCount} built-in distilled skill(s)`);
|
|
66
81
|
}
|
|
67
|
-
|
|
68
|
-
// 2. Load user skills from ~/.claude/skills/ (can override official skills)
|
|
82
|
+
// 2. Load user skills from ~/.claude/skills/ (can override built-in skills by id)
|
|
69
83
|
if (!fs.existsSync(SKILLS_DIR)) {
|
|
70
84
|
logger.debug(`Skills directory not found: ${SKILLS_DIR}`);
|
|
71
85
|
return;
|
|
@@ -111,19 +125,27 @@ export class SkillRegistry {
|
|
|
111
125
|
? rawKeywords.filter((k) => typeof k === 'string')
|
|
112
126
|
: [];
|
|
113
127
|
const description = typeof data.description === 'string' ? data.description : undefined;
|
|
114
|
-
//
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
128
|
+
// Phase 7 — pairing fields (optional). User skills can also opt-in.
|
|
129
|
+
const spawnAgent = typeof data.spawn_agent === 'string' && data.spawn_agent.trim().length > 0
|
|
130
|
+
? data.spawn_agent.trim()
|
|
131
|
+
: undefined;
|
|
132
|
+
const spawnAgentPrompt = typeof data.spawn_agent_prompt === 'string' && data.spawn_agent_prompt.length > 0
|
|
133
|
+
? data.spawn_agent_prompt
|
|
134
|
+
: undefined;
|
|
135
|
+
// User skills override built-in skills by id; keywords come from
|
|
136
|
+
// the user's frontmatter only (no merge with built-in keyword tables
|
|
137
|
+
// — the OFFICIAL_SKILL_KEYWORDS map was removed in the official-purge
|
|
138
|
+
// spec, 2026-05-27, 1110).
|
|
119
139
|
this.skills.set(id, {
|
|
120
140
|
id,
|
|
121
141
|
name,
|
|
122
|
-
keywords
|
|
142
|
+
keywords,
|
|
123
143
|
content: body.trim(),
|
|
124
144
|
path: filePath,
|
|
125
|
-
|
|
145
|
+
isBuiltin: false,
|
|
126
146
|
description,
|
|
147
|
+
spawn_agent: spawnAgent,
|
|
148
|
+
spawn_agent_prompt: spawnAgentPrompt,
|
|
127
149
|
});
|
|
128
150
|
userCount++;
|
|
129
151
|
}
|
|
@@ -139,9 +161,11 @@ export class SkillRegistry {
|
|
|
139
161
|
}
|
|
140
162
|
}
|
|
141
163
|
/**
|
|
142
|
-
* Match a prompt against skill keywords
|
|
143
|
-
*
|
|
144
|
-
*
|
|
164
|
+
* Match a prompt against skill keywords.
|
|
165
|
+
*
|
|
166
|
+
* Post D R-B (spec 0902): semantic / AI matching has been removed. Only
|
|
167
|
+
* the keyword path runs. The result `source` is therefore always
|
|
168
|
+
* `'keyword'`.
|
|
145
169
|
*/
|
|
146
170
|
async match(prompt, keywords = [], context) {
|
|
147
171
|
const result = await this.matchWithConfidence(prompt, keywords, context);
|
|
@@ -150,26 +174,13 @@ export class SkillRegistry {
|
|
|
150
174
|
/**
|
|
151
175
|
* Like match(), but also returns the confidence score (0-100) so callers
|
|
152
176
|
* can compare across alternatives (e.g. agent vs skill routing).
|
|
177
|
+
*
|
|
178
|
+
* Post D R-B: only keyword matching remains; `source` is always
|
|
179
|
+
* `'keyword'`. The literal-union return type is preserved for caller
|
|
180
|
+
* compatibility — `'semantic'` is no longer emitted but kept in the type
|
|
181
|
+
* so older code paths that pattern-match on it still compile until R-D.
|
|
153
182
|
*/
|
|
154
183
|
async matchWithConfidence(prompt, keywords = [], context) {
|
|
155
|
-
// Try semantic matching first
|
|
156
|
-
if (this.semanticMatcher) {
|
|
157
|
-
try {
|
|
158
|
-
const semanticResult = await this.semanticMatcher.match(Array.from(this.skills.values()), {
|
|
159
|
-
prompt,
|
|
160
|
-
intentKeywords: keywords,
|
|
161
|
-
recentFiles: context?.recentFiles,
|
|
162
|
-
});
|
|
163
|
-
if (semanticResult) {
|
|
164
|
-
logger.info(`[SkillRegistry] Semantic match: ${semanticResult.skill.id} (${semanticResult.confidence}%)`);
|
|
165
|
-
return { skill: semanticResult.skill, confidence: semanticResult.confidence, source: 'semantic' };
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
catch (err) {
|
|
169
|
-
logger.warn(`[SkillRegistry] Semantic matching failed, falling back to keyword matching: ${err}`);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
// Fall back to keyword matching
|
|
173
184
|
const kwSkill = await this.matchKeywords(prompt, keywords, context);
|
|
174
185
|
if (kwSkill) {
|
|
175
186
|
// Keyword matching has no real confidence; assign a conservative 60%
|
|
@@ -190,18 +201,9 @@ export class SkillRegistry {
|
|
|
190
201
|
let bestCandidateScore = 0;
|
|
191
202
|
for (const skill of this.skills.values()) {
|
|
192
203
|
let score = 0;
|
|
193
|
-
// If skill has keywords, use keyword
|
|
204
|
+
// If skill has keywords, use keyword scoring helper
|
|
194
205
|
if (skill.keywords.length > 0) {
|
|
195
|
-
|
|
196
|
-
const kwLower = kw.toLowerCase();
|
|
197
|
-
// Check if keyword appears in prompt or intent keywords
|
|
198
|
-
if (this.matchKeywordFlexible(promptLower, kwLower)) {
|
|
199
|
-
score += 1;
|
|
200
|
-
}
|
|
201
|
-
if (extraLower.some(ek => this.matchKeywordFlexible(ek, kwLower))) {
|
|
202
|
-
score += 1;
|
|
203
|
-
}
|
|
204
|
-
}
|
|
206
|
+
score = scoreSkillByKeywords(skill, promptLower, extraLower);
|
|
205
207
|
}
|
|
206
208
|
else if (skill.description) {
|
|
207
209
|
// Fallback path 1: Use description substring matching when keywords are empty
|
|
@@ -210,24 +212,25 @@ export class SkillRegistry {
|
|
|
210
212
|
score = 1; // Give a base score for description match
|
|
211
213
|
}
|
|
212
214
|
}
|
|
213
|
-
// Fallback path 2: If no keywords and no description, score remains 0
|
|
214
|
-
//
|
|
215
|
+
// Fallback path 2: If no keywords and no description, score remains 0.
|
|
216
|
+
// (Historically a semantic matcher would take over here; D R-B deleted
|
|
217
|
+
// that path — these skills simply don't match. See class docstring.)
|
|
215
218
|
// Track best candidate regardless of threshold
|
|
216
219
|
if (score > bestCandidateScore) {
|
|
217
220
|
bestCandidateScore = score;
|
|
218
221
|
bestCandidate = skill;
|
|
219
222
|
}
|
|
220
|
-
//
|
|
221
|
-
const threshold = skill.
|
|
223
|
+
// Built-in skills get priority: require 1+ match, user skills require 2+ matches
|
|
224
|
+
const threshold = skill.isBuiltin ? 1 : 2;
|
|
222
225
|
if (score >= threshold && score > bestScore) {
|
|
223
226
|
bestScore = score;
|
|
224
227
|
bestSkill = skill;
|
|
225
228
|
}
|
|
226
229
|
else if (score === bestScore &&
|
|
227
230
|
score >= threshold &&
|
|
228
|
-
skill.
|
|
229
|
-
!bestSkill?.
|
|
230
|
-
// Tie-break: prefer
|
|
231
|
+
skill.isBuiltin &&
|
|
232
|
+
!bestSkill?.isBuiltin) {
|
|
233
|
+
// Tie-break: prefer built-in skill when both meet threshold
|
|
231
234
|
bestSkill = skill;
|
|
232
235
|
}
|
|
233
236
|
}
|
|
@@ -239,19 +242,6 @@ export class SkillRegistry {
|
|
|
239
242
|
}
|
|
240
243
|
return bestSkill;
|
|
241
244
|
}
|
|
242
|
-
/**
|
|
243
|
-
* Flexible keyword matching with word boundary for English, substring for Chinese
|
|
244
|
-
*/
|
|
245
|
-
matchKeywordFlexible(text, keyword) {
|
|
246
|
-
// For Chinese or multi-word keywords, use simple includes
|
|
247
|
-
if (/[一-龥]/.test(keyword) || keyword.includes(' ')) {
|
|
248
|
-
return text.includes(keyword);
|
|
249
|
-
}
|
|
250
|
-
// For single English words, require word boundaries to avoid false positives
|
|
251
|
-
// e.g., "test" won't match "latest"
|
|
252
|
-
const regex = new RegExp(`\\b${keyword.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\b`);
|
|
253
|
-
return regex.test(text);
|
|
254
|
-
}
|
|
255
245
|
/**
|
|
256
246
|
* Match with full result details (for debugging/logging)
|
|
257
247
|
*/
|
|
@@ -264,11 +254,11 @@ export class SkillRegistry {
|
|
|
264
254
|
const matchedKeywords = [];
|
|
265
255
|
for (const kw of skill.keywords) {
|
|
266
256
|
const kwLower = kw.toLowerCase();
|
|
267
|
-
if (
|
|
257
|
+
if (matchKeywordFlexible(promptLower, kwLower)) {
|
|
268
258
|
score += 1;
|
|
269
259
|
matchedKeywords.push(kw);
|
|
270
260
|
}
|
|
271
|
-
if (extraLower.some(ek =>
|
|
261
|
+
if (extraLower.some(ek => matchKeywordFlexible(ek, kwLower))) {
|
|
272
262
|
score += 1;
|
|
273
263
|
}
|
|
274
264
|
}
|
|
@@ -287,7 +277,14 @@ export class SkillRegistry {
|
|
|
287
277
|
getAll() {
|
|
288
278
|
return Array.from(this.skills.values());
|
|
289
279
|
}
|
|
290
|
-
/**
|
|
280
|
+
/**
|
|
281
|
+
* Get a skill by ID. Returns `undefined` for unknown ids.
|
|
282
|
+
*
|
|
283
|
+
* The legacy `official-*` → `distilled-*` alias fallback was removed by
|
|
284
|
+
* the official-purge spec (2026-05-27, 1110). Old `official-*` ids no
|
|
285
|
+
* longer resolve; historical rows in `skill_invocations` with those ids
|
|
286
|
+
* are not migrated (user-accepted residue).
|
|
287
|
+
*/
|
|
291
288
|
get(id) {
|
|
292
289
|
return this.skills.get(id);
|
|
293
290
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/skills/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/skills/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,51 +28,51 @@ import { logger } from '../../core/utils/logger.js';
|
|
|
28
28
|
const PIPELINE_TEMPLATES = {
|
|
29
29
|
// ── 基础模板 ──────────────────────────────────────────────────────────────
|
|
30
30
|
bug_fix: (desc) => `Task({ subagent_type: "researcher", name: "investigator", prompt: "${desc}: Investigate root cause. Read error logs, trace call stack, identify the exact failure point. **Write findings to docs/requirements/bug-investigation-<yyyymmdd-hhmm>.md** (问题现象/复现步骤/影响范围/根因假设). SendMessage findings + doc path to 'fixer'.", run_in_background: true })
|
|
31
|
-
Task({ subagent_type: "coder", name: "fixer", prompt: "${desc}: Wait for 'investigator'. Implement minimal, targeted fix. Do NOT refactor surrounding code. **Write change log to docs/implementation
|
|
31
|
+
Task({ subagent_type: "coder", name: "fixer", prompt: "${desc}: Wait for 'investigator'. Implement minimal, targeted fix. Do NOT refactor surrounding code. **Write change log to docs/implementation/<yyyy-mm-dd>/<hhmm>-bugfix-changes.md** (改动文件清单/改动原因/兼容性影响). SendMessage changed files + doc path to 'verifier'.", run_in_background: true })
|
|
32
32
|
Task({ subagent_type: "tester", name: "verifier", prompt: "${desc}: Wait for 'fixer'. Write regression test, run full test suite, verify no side effects. **Write test report to docs/testing/bugfix-test-report-<yyyymmdd-hhmm>.md** (新增测试用例/通过情况/回归覆盖范围).", run_in_background: true })`,
|
|
33
33
|
feature: (desc) => `Task({ subagent_type: "researcher", name: "analyst", prompt: "${desc}: Analyze requirements, identify affected modules, check existing patterns. **Write requirements doc to docs/requirements/feature-requirements-<yyyymmdd-hhmm>.md** (用户故事/验收标准/范围边界/依赖模块/风险). SendMessage doc path to 'designer'.", run_in_background: true })
|
|
34
|
-
Task({ subagent_type: "planner", name: "designer", prompt: "${desc}: Wait for 'analyst'. Design implementation approach: API contracts, data flow, component boundaries. **Write architecture doc to docs/design
|
|
35
|
-
Task({ subagent_type: "feature-developer", name: "developer", prompt: "${desc}: Wait for 'designer'. Read the architecture doc. **First write execution plan to docs/implementation
|
|
34
|
+
Task({ subagent_type: "planner", name: "designer", prompt: "${desc}: Wait for 'analyst'. Design implementation approach: API contracts, data flow, component boundaries. **Write architecture doc to docs/design/<yyyy-mm-dd>/<hhmm>-feature-architecture.md** (架构图/组件职责/接口契约/数据模型/错误处理). SendMessage doc path to 'developer'.", run_in_background: true })
|
|
35
|
+
Task({ subagent_type: "feature-developer", name: "developer", prompt: "${desc}: Wait for 'designer'. Read the architecture doc. **First write execution plan to docs/implementation/<yyyy-mm-dd>/<hhmm>-feature-plan.md** (改造点列表/文件级任务拆解/实施顺序). Then implement following the plan. SendMessage to 'tester'.", run_in_background: true })
|
|
36
36
|
Task({ subagent_type: "tester", name: "tester", prompt: "${desc}: Wait for 'developer'. Write unit + integration tests covering all acceptance criteria. **Write test report to docs/testing/feature-test-report-<yyyymmdd-hhmm>.md** (用例清单/覆盖率/边界场景). SendMessage to 'reviewer'.", run_in_background: true })
|
|
37
37
|
Task({ subagent_type: "reviewer", name: "reviewer", prompt: "${desc}: Wait for 'tester'. Review code quality, security, performance. **Write review report to docs/review/feature-review-<yyyymmdd-hhmm>.md** (代码质量评分/安全/性能/可维护性/改进建议).", run_in_background: true })`,
|
|
38
38
|
refactor: (desc) => `Task({ subagent_type: "tester", name: "safety-net", prompt: "${desc}: Write characterization tests capturing current behavior. **Write safety-net report to docs/testing/refactor-safety-net-<yyyymmdd-hhmm>.md** (现有行为清单/测试用例/覆盖范围). SendMessage test paths + doc path to 'planner'.", run_in_background: true })
|
|
39
|
-
Task({ subagent_type: "planner", name: "planner", prompt: "${desc}: Wait for 'safety-net'. Design refactoring strategy. **Write refactor plan to docs/design
|
|
40
|
-
Task({ subagent_type: "refactor-specialist", name: "refactorer", prompt: "${desc}: Wait for 'planner'. Read the plan. **Write change log to docs/implementation
|
|
39
|
+
Task({ subagent_type: "planner", name: "planner", prompt: "${desc}: Wait for 'safety-net'. Design refactoring strategy. **Write refactor plan to docs/design/<yyyy-mm-dd>/<hhmm>-refactor-plan.md** (目标态/分步迁移路径/依赖变更/回滚预案). SendMessage doc path to 'refactorer'.", run_in_background: true })
|
|
40
|
+
Task({ subagent_type: "refactor-specialist", name: "refactorer", prompt: "${desc}: Wait for 'planner'. Read the plan. **Write change log to docs/implementation/<yyyy-mm-dd>/<hhmm>-refactor-changes.md** while executing (每步改动/影响文件/验证点). Execute step by step. SendMessage to 'verifier'.", run_in_background: true })
|
|
41
41
|
Task({ subagent_type: "tester", name: "verifier", prompt: "${desc}: Wait for 'refactorer'. Run ALL tests, verify zero regressions. **Write verification report to docs/testing/refactor-verification-<yyyymmdd-hhmm>.md** (测试通过/失败列表/性能对比).", run_in_background: true })`,
|
|
42
42
|
investigation: (desc) => `Task({ subagent_type: "tester", name: "reproducer", prompt: "${desc}: Reproduce the issue with a minimal test case. **Write reproduction doc to docs/requirements/issue-reproduction-<yyyymmdd-hhmm>.md** (现象/复现步骤/环境/触发条件). SendMessage doc path to 'analyst'.", run_in_background: true })
|
|
43
43
|
Task({ subagent_type: "researcher", name: "analyst", prompt: "${desc}: Wait for 'reproducer'. Deep-dive root cause: trace execution, check git blame, identify when it broke. **Write root cause analysis to docs/review/issue-root-cause-<yyyymmdd-hhmm>.md** (根因/引入时间/相关 commit/修复建议).", run_in_background: true })`,
|
|
44
44
|
performance: (desc) => `Task({ subagent_type: "tester", name: "benchmarker", prompt: "${desc}: Profile and benchmark current performance. **Write baseline report to docs/testing/perf-baseline-<yyyymmdd-hhmm>.md** (基线指标/测试场景/采样方法). SendMessage doc path to 'analyst'.", run_in_background: true })
|
|
45
45
|
Task({ subagent_type: "researcher", name: "analyst", prompt: "${desc}: Wait for 'benchmarker'. Identify top bottlenecks. **Write analysis to docs/review/perf-analysis-<yyyymmdd-hhmm>.md** (瓶颈定位/根因/优化方案排序). SendMessage doc path to 'optimizer'.", run_in_background: true })
|
|
46
|
-
Task({ subagent_type: "coder", name: "optimizer", prompt: "${desc}: Wait for 'analyst'. **Write execution plan to docs/implementation
|
|
46
|
+
Task({ subagent_type: "coder", name: "optimizer", prompt: "${desc}: Wait for 'analyst'. **Write execution plan to docs/implementation/<yyyy-mm-dd>/<hhmm>-perf-optimization-plan.md** before coding (改造点/预期收益/风险). Implement the highest-impact optimizations. SendMessage to 'verifier'.", run_in_background: true })
|
|
47
47
|
Task({ subagent_type: "tester", name: "verifier", prompt: "${desc}: Wait for 'optimizer'. Re-run benchmarks, compare with baseline. **Write final report to docs/testing/perf-verification-<yyyymmdd-hhmm>.md** (优化前后对比/达成/未达成项).", run_in_background: true })`,
|
|
48
48
|
// ── BMAD 风格(完整产品开发流程)─────────────────────────────────────────
|
|
49
49
|
bmad_feature: (desc) => `Task({ subagent_type: "researcher", name: "product-analyst", prompt: "${desc}: Analyze user requirements, identify acceptance criteria, define scope boundaries. **Write PRD to docs/requirements/bmad-prd-<yyyymmdd-hhmm>.md** (用户故事/验收标准/in-scope/out-of-scope/优先级). SendMessage doc path to 'architect'.", run_in_background: true })
|
|
50
|
-
Task({ subagent_type: "planner", name: "architect", prompt: "${desc}: Wait for 'product-analyst'. Design technical architecture. **Write to docs/design
|
|
51
|
-
Task({ subagent_type: "feature-developer", name: "developer", prompt: "${desc}: Wait for 'architect'. **Write implementation checklist to docs/implementation
|
|
50
|
+
Task({ subagent_type: "planner", name: "architect", prompt: "${desc}: Wait for 'product-analyst'. Design technical architecture. **Write to docs/design/<yyyy-mm-dd>/<hhmm>-bmad-architecture.md** (架构图/组件/接口/数据模型/错误处理) AND docs/design/<yyyy-mm-dd>/<hhmm>-bmad-detailed-design.md** (类/方法/算法/状态机). SendMessage doc paths to 'developer'.", run_in_background: true })
|
|
51
|
+
Task({ subagent_type: "feature-developer", name: "developer", prompt: "${desc}: Wait for 'architect'. **Write implementation checklist to docs/implementation/<yyyy-mm-dd>/<hhmm>-bmad-impl-plan.md** (任务拆解/文件清单/依赖顺序/验证点). Implement following the design. SendMessage to 'qa'.", run_in_background: true })
|
|
52
52
|
Task({ subagent_type: "tester", name: "qa", prompt: "${desc}: Wait for 'developer'. Write tests covering all acceptance criteria. **Write QA report to docs/testing/bmad-qa-report-<yyyymmdd-hhmm>.md** (用例对应验收标准/边界/错误路径/覆盖率). SendMessage to 'reviewer'.", run_in_background: true })
|
|
53
53
|
Task({ subagent_type: "reviewer", name: "reviewer", prompt: "${desc}: Wait for 'qa'. Final review: code quality, security, performance, accessibility. **Write final review to docs/review/bmad-final-review-<yyyymmdd-hhmm>.md** (验收标准达成/质量评分/遗留问题/上线建议).", run_in_background: true })`,
|
|
54
54
|
// ── Harness 风格(安全重构)─────────────────────────────────────────────
|
|
55
55
|
harness_safe_refactor: (desc) => `Task({ subagent_type: "tester", name: "safety-net", prompt: "${desc}: Write comprehensive characterization tests for ALL touched behavior. **Write to docs/testing/harness-safety-net-<yyyymmdd-hhmm>.md** (现有行为清单/测试矩阵/已知边界). SendMessage doc path to 'analyzer'.", run_in_background: true })
|
|
56
56
|
Task({ subagent_type: "researcher", name: "analyzer", prompt: "${desc}: Wait for 'safety-net'. Map all dependencies and side effects. **Write to docs/requirements/harness-impact-analysis-<yyyymmdd-hhmm>.md** (依赖图/调用方/隐藏耦合/风险评级). SendMessage doc path to 'planner'.", run_in_background: true })
|
|
57
|
-
Task({ subagent_type: "planner", name: "planner", prompt: "${desc}: Wait for 'analyzer'. Design step-by-step plan. **Write to docs/design
|
|
58
|
-
Task({ subagent_type: "refactor-specialist", name: "executor", prompt: "${desc}: Wait for 'planner'. Execute ONE step at a time. **Write change log to docs/implementation
|
|
57
|
+
Task({ subagent_type: "planner", name: "planner", prompt: "${desc}: Wait for 'analyzer'. Design step-by-step plan. **Write to docs/design/<yyyy-mm-dd>/<hhmm>-harness-refactor-plan.md** (分步路径/每步独立验证点/回滚策略). SendMessage doc path to 'executor'.", run_in_background: true })
|
|
58
|
+
Task({ subagent_type: "refactor-specialist", name: "executor", prompt: "${desc}: Wait for 'planner'. Execute ONE step at a time. **Write change log to docs/implementation/<yyyy-mm-dd>/<hhmm>-harness-execution.md** (每步改动/验证结果/checkpoint). SendMessage to 'validator'.", run_in_background: true })
|
|
59
59
|
Task({ subagent_type: "tester", name: "validator", prompt: "${desc}: Wait for 'executor'. Run full test suite, type checker, dead code check. **Write to docs/testing/harness-validation-<yyyymmdd-hhmm>.md** (测试通过/失败/类型错误/dead code 报告).", run_in_background: true })`,
|
|
60
60
|
// ── Harness 风格(深度调试)─────────────────────────────────────────────
|
|
61
61
|
harness_debug: (desc) => `Task({ subagent_type: "tester", name: "reproducer", prompt: "${desc}: Write a FAILING test reproducing the bug. **Write to docs/requirements/debug-reproduction-<yyyymmdd-hhmm>.md** (复现步骤/环境/失败测试路径/出现频率). SendMessage doc path to 'tracer'.", run_in_background: true })
|
|
62
62
|
Task({ subagent_type: "researcher", name: "tracer", prompt: "${desc}: Wait for 'reproducer'. Trace execution, log state at each step. **Write to docs/review/debug-trace-<yyyymmdd-hhmm>.md** (执行路径/期望 vs 实际/分歧点). SendMessage doc path to 'root-cause'.", run_in_background: true })
|
|
63
63
|
Task({ subagent_type: "researcher", name: "root-cause", prompt: "${desc}: Wait for 'tracer'. Determine root cause. **Write to docs/review/debug-root-cause-<yyyymmdd-hhmm>.md** (根因/git blame 引入点/regression 还是 latent bug/修复方向). SendMessage doc path to 'fixer'.", run_in_background: true })
|
|
64
|
-
Task({ subagent_type: "coder", name: "fixer", prompt: "${desc}: Wait for 'root-cause'. **Write fix plan to docs/implementation
|
|
64
|
+
Task({ subagent_type: "coder", name: "fixer", prompt: "${desc}: Wait for 'root-cause'. **Write fix plan to docs/implementation/<yyyy-mm-dd>/<hhmm>-debug-fix-plan.md** (改动点/兼容性/副作用评估). Implement minimal targeted fix. SendMessage to 'verifier'.", run_in_background: true })
|
|
65
65
|
Task({ subagent_type: "tester", name: "verifier", prompt: "${desc}: Wait for 'fixer'. Verify reproducer test passes, run full suite. **Write to docs/testing/debug-verification-<yyyymmdd-hhmm>.md** (测试结果/相关 issue 排查/上线建议).", run_in_background: true })`,
|
|
66
66
|
// ── 技术迁移 ──────────────────────────────────────────────────────────────
|
|
67
67
|
migration: (desc) => `Task({ subagent_type: "researcher", name: "impact-analyst", prompt: "${desc}: Map affected files, APIs, dependencies, breaking changes. **Write to docs/requirements/migration-impact-<yyyymmdd-hhmm>.md** (影响清单/breaking changes/兼容性要求). SendMessage doc path to 'planner'.", run_in_background: true })
|
|
68
68
|
Task({ subagent_type: "tester", name: "safety-net", prompt: "${desc}: Write integration tests at migration boundaries. **Write to docs/testing/migration-safety-net-<yyyymmdd-hhmm>.md** (边界测试/前后必须通过的用例). SendMessage doc path to 'planner'.", run_in_background: true })
|
|
69
|
-
Task({ subagent_type: "planner", name: "planner", prompt: "${desc}: Wait for both. Design migration plan. **Write to docs/design
|
|
70
|
-
Task({ subagent_type: "coder", name: "migrator", prompt: "${desc}: Wait for 'planner'. Execute migration step by step. **Write change log to docs/implementation
|
|
69
|
+
Task({ subagent_type: "planner", name: "planner", prompt: "${desc}: Wait for both. Design migration plan. **Write to docs/design/<yyyy-mm-dd>/<hhmm>-migration-plan.md** AND docs/operations/migration-runbook-<yyyymmdd-hhmm>.md** (执行顺序/feature flags/回滚步骤/灰度策略). SendMessage doc paths to 'migrator'.", run_in_background: true })
|
|
70
|
+
Task({ subagent_type: "coder", name: "migrator", prompt: "${desc}: Wait for 'planner'. Execute migration step by step. **Write change log to docs/implementation/<yyyy-mm-dd>/<hhmm>-migration-changes.md** (每步改动/兼容层/废弃标记). SendMessage to 'verifier'.", run_in_background: true })
|
|
71
71
|
Task({ subagent_type: "tester", name: "verifier", prompt: "${desc}: Wait for 'migrator'. Verify old + new paths work. **Write to docs/testing/migration-verification-<yyyymmdd-hhmm>.md** (新旧路径测试/deprecation warnings/上线 checklist).", run_in_background: true })`,
|
|
72
72
|
// ── 安全审计 ──────────────────────────────────────────────────────────────
|
|
73
73
|
security_audit: (desc) => `Task({ subagent_type: "researcher", name: "threat-modeler", prompt: "${desc}: Identify attack surfaces, trust boundaries, threat vectors. **Write to docs/requirements/security-threat-model-<yyyymmdd-hhmm>.md** (攻击面/信任边界/数据流/威胁向量 OWASP 对应). SendMessage doc path to 'code-auditor'.", run_in_background: true })
|
|
74
74
|
Task({ subagent_type: "researcher", name: "code-auditor", prompt: "${desc}: Wait for 'threat-modeler'. Audit code for each threat. **Write to docs/review/security-audit-<yyyymmdd-hhmm>.md** (漏洞清单/位置/严重级别/PoC/修复建议). SendMessage doc path to 'fixer'.", run_in_background: true })
|
|
75
|
-
Task({ subagent_type: "coder", name: "fixer", prompt: "${desc}: Wait for 'code-auditor'. **Write fix plan to docs/implementation
|
|
75
|
+
Task({ subagent_type: "coder", name: "fixer", prompt: "${desc}: Wait for 'code-auditor'. **Write fix plan to docs/implementation/<yyyy-mm-dd>/<hhmm>-security-fix-plan.md** (改动点/防护层/副作用). Fix all vulnerabilities. SendMessage to 'verifier'.", run_in_background: true })
|
|
76
76
|
Task({ subagent_type: "tester", name: "verifier", prompt: "${desc}: Wait for 'fixer'. Write security tests (injection/auth bypass/boundary). **Write to docs/testing/security-verification-<yyyymmdd-hhmm>.md** (测试场景/通过情况/残留风险).", run_in_background: true })`,
|
|
77
77
|
};
|
|
78
78
|
/**
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* 调用此函数,获取任何 Skill 的方法论内容。
|
|
6
6
|
*
|
|
7
7
|
* 示例(Agent 视角的调用,MCP 协议):
|
|
8
|
-
* skill_invoke({ skill_id: "
|
|
8
|
+
* skill_invoke({ skill_id: "distilled-systematic-debugging", reason: "需要 TDD 方法论指导" })
|
|
9
9
|
* → 返回 TDD 方法论的完整内容
|
|
10
10
|
*
|
|
11
11
|
* 调用链路追踪:当 context 里同时提供 storage 和 sessionId 时,每次调用都会
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* 调用此函数,获取任何 Skill 的方法论内容。
|
|
6
6
|
*
|
|
7
7
|
* 示例(Agent 视角的调用,MCP 协议):
|
|
8
|
-
* skill_invoke({ skill_id: "
|
|
8
|
+
* skill_invoke({ skill_id: "distilled-systematic-debugging", reason: "需要 TDD 方法论指导" })
|
|
9
9
|
* → 返回 TDD 方法论的完整内容
|
|
10
10
|
*
|
|
11
11
|
* 调用链路追踪:当 context 里同时提供 storage 和 sessionId 时,每次调用都会
|