@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
|
@@ -2,20 +2,23 @@ import fs from 'fs';
|
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { homedir } from 'os';
|
|
4
4
|
import { fileURLToPath } from 'url';
|
|
5
|
-
import {
|
|
6
|
-
import { loadOfficialSkills } from '../../skills/official-skills.js';
|
|
5
|
+
import { loadBuiltinSkills } from '../../skills/builtin-skills.js';
|
|
7
6
|
import { SkillRegistry } from '../../skills/registry.js';
|
|
8
7
|
import { skillInvoke } from '../../skills/tools/skill-invoke.js';
|
|
9
8
|
import { skillList } from '../../skills/tools/skill-list.js';
|
|
10
|
-
import {
|
|
11
|
-
import { ConfigManager } from '../../core/config.js';
|
|
12
|
-
import { ClaudeProvider } from '../../core/ai/provider.js';
|
|
9
|
+
import { SQLiteStorage } from '../../core/storage/sqlite.js';
|
|
13
10
|
import { FORGE_PATHS } from '../../core/constants.js';
|
|
11
|
+
import { resolveSessionId } from '../utils/resolve-session.js';
|
|
14
12
|
const SKILLS_DIR = path.join(homedir(), '.claude', 'skills');
|
|
15
13
|
function resolveBuiltinDir() {
|
|
14
|
+
// Built-in skills live under `src/skills/distilled/`.
|
|
16
15
|
const thisFile = fileURLToPath(import.meta.url);
|
|
17
|
-
return path.join(path.dirname(thisFile), '../../skills/
|
|
16
|
+
return path.join(path.dirname(thisFile), '../../skills/distilled');
|
|
18
17
|
}
|
|
18
|
+
// Sentinel session id used when no real session can be resolved (e.g. a bare
|
|
19
|
+
// CLI call outside any Claude session). Keeps the skill_invocations row writable
|
|
20
|
+
// (session_id is NOT NULL) while flagging it as session-less for analytics.
|
|
21
|
+
const CLI_SESSION_FALLBACK = 'cli-no-session';
|
|
19
22
|
/**
|
|
20
23
|
* List skills with optional keyword filter and JSON output.
|
|
21
24
|
* Delegates to the shared skillList() tool so CLI and Agent share one code path.
|
|
@@ -37,11 +40,11 @@ async function listSkills(options) {
|
|
|
37
40
|
console.log('No skills found.');
|
|
38
41
|
return;
|
|
39
42
|
}
|
|
40
|
-
// Human-readable output. Include `
|
|
43
|
+
// Human-readable output. Include `isBuiltin` hint via registry lookup.
|
|
41
44
|
console.log(`Available skills (${result.total}):\n`);
|
|
42
45
|
for (const s of result.skills) {
|
|
43
46
|
const full = registry.get(s.id);
|
|
44
|
-
const type = full?.
|
|
47
|
+
const type = full?.isBuiltin ? 'built-in' : 'user';
|
|
45
48
|
console.log(`- ${s.id} [${type}]`);
|
|
46
49
|
console.log(` name: ${s.name}`);
|
|
47
50
|
if (s.description) {
|
|
@@ -56,144 +59,397 @@ async function listSkills(options) {
|
|
|
56
59
|
/**
|
|
57
60
|
* Invoke a skill by id, printing its full methodology content.
|
|
58
61
|
* Exit code 1 on failure so Bash callers can detect errors.
|
|
62
|
+
*
|
|
63
|
+
* Telemetry (decision 4e118b92): every successful CLI invoke now persists a
|
|
64
|
+
* skill_invocations row via the SHARED skillInvoke() write path, marked
|
|
65
|
+
* invocation_type='cli' so it is distinguishable from MCP (`dynamic`) and
|
|
66
|
+
* legacy keyword-match (`static`) rows. The `--reason` is recorded verbatim so
|
|
67
|
+
* follow-through SQL like `reason LIKE 'coder/%'` / `'verify/%'` works, and
|
|
68
|
+
* parseWorkflowMeta (inside skillInvoke) populates workflow/phase/feature_slug.
|
|
69
|
+
*
|
|
70
|
+
* This is the working path for subagents, which have NO MCP access — the MCP
|
|
71
|
+
* `skill_invoke` tool is uncallable from coder/verify-agent, so guidance now
|
|
72
|
+
* points them at `cf skill invoke` (Bash).
|
|
59
73
|
*/
|
|
60
|
-
async function invokeSkill(skillId, options) {
|
|
74
|
+
export async function invokeSkill(skillId, options, deps = {}) {
|
|
61
75
|
const registry = new SkillRegistry();
|
|
76
|
+
const log = deps.io?.log ?? ((m) => console.log(m));
|
|
77
|
+
const error = deps.io?.error ?? ((m) => console.error(m));
|
|
78
|
+
// Open storage for telemetry. Own it only if we created it (don't close an
|
|
79
|
+
// injected one — the caller owns its lifecycle).
|
|
80
|
+
const ownStorage = !deps.storage;
|
|
81
|
+
let storage;
|
|
62
82
|
try {
|
|
63
|
-
|
|
83
|
+
storage = deps.storage ?? new SQLiteStorage(FORGE_PATHS.database());
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// Telemetry must never break the primary "print methodology" behavior.
|
|
87
|
+
// If the DB can't be opened, fall through with storage=undefined.
|
|
88
|
+
storage = undefined;
|
|
89
|
+
}
|
|
90
|
+
// Resolve the session id (flag → $CLAUDE_SESSION_ID env → DB lookup), then
|
|
91
|
+
// fall back to a sentinel so the row still records (session_id is NOT NULL).
|
|
92
|
+
let sessionId = options.sessionId ?? '';
|
|
93
|
+
if (storage && !sessionId) {
|
|
94
|
+
try {
|
|
95
|
+
const resolved = resolveSessionId(storage, {
|
|
96
|
+
sessionId: options.sessionId,
|
|
97
|
+
projectPath: options.project ?? process.cwd(),
|
|
98
|
+
});
|
|
99
|
+
sessionId = resolved.sessionId;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
sessionId = '';
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (!sessionId)
|
|
106
|
+
sessionId = CLI_SESSION_FALLBACK;
|
|
107
|
+
try {
|
|
108
|
+
const result = await skillInvoke({ skill_id: skillId, reason: options.reason }, {
|
|
109
|
+
skillRegistry: registry,
|
|
110
|
+
// Telemetry context: storage + sessionId together trigger the
|
|
111
|
+
// skill_invocations write inside skillInvoke. invocationType='cli'
|
|
112
|
+
// is the source marker.
|
|
113
|
+
storage,
|
|
114
|
+
sessionId,
|
|
115
|
+
invocationType: 'cli',
|
|
116
|
+
// decision 234f1ad4 Q6: write agent_id when the caller passes --agent, so
|
|
117
|
+
// the (agent,skill) pairing can graduate from reason-prefix proxy key to a
|
|
118
|
+
// first-class key. Omitted → NULL (unchanged legacy behavior).
|
|
119
|
+
agentId: options.agent,
|
|
120
|
+
// decision 39839e30 Part 2: stamp the project so the workplace "Skill 调用"
|
|
121
|
+
// KPI can filter by project. Same source as the session DB lookup above.
|
|
122
|
+
projectPath: options.project ?? process.cwd(),
|
|
123
|
+
});
|
|
64
124
|
if (options.json) {
|
|
65
|
-
|
|
125
|
+
log(JSON.stringify(result, null, 2));
|
|
66
126
|
return;
|
|
67
127
|
}
|
|
68
|
-
|
|
128
|
+
log(`# ${result.skill_name}`);
|
|
69
129
|
if (result.keywords.length > 0) {
|
|
70
|
-
|
|
130
|
+
log(`\n> keywords: ${result.keywords.join(', ')}`);
|
|
71
131
|
}
|
|
72
|
-
|
|
73
|
-
|
|
132
|
+
log('');
|
|
133
|
+
log(result.content);
|
|
74
134
|
}
|
|
75
135
|
catch (err) {
|
|
76
136
|
const msg = err instanceof Error ? err.message : String(err);
|
|
77
|
-
|
|
137
|
+
error(`Error: ${msg}`);
|
|
78
138
|
process.exit(1);
|
|
79
139
|
}
|
|
140
|
+
finally {
|
|
141
|
+
if (ownStorage && storage) {
|
|
142
|
+
try {
|
|
143
|
+
storage.close();
|
|
144
|
+
}
|
|
145
|
+
catch { /* ignore */ }
|
|
146
|
+
}
|
|
147
|
+
}
|
|
80
148
|
}
|
|
149
|
+
// Skill usefulness feedback (decision d24cd3a2 P0,
|
|
150
|
+
// spec docs/design/2026-06-11/1524-skill-usefulness-feedback-spec.md).
|
|
151
|
+
const USEFULNESS_RATINGS = ['helped', 'partial', 'not-actionable'];
|
|
81
152
|
/**
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
153
|
+
* `cf skill feedback --skill <id> --rating <helped|partial|not-actionable>`:
|
|
154
|
+
* stamp a POST-USE usefulness self-assessment onto the most-recent un-rated
|
|
155
|
+
* skill_invocations row for that skill in the current session.
|
|
156
|
+
*
|
|
157
|
+
* Telemetry discipline: this is advisory — it must NEVER throw into the agent's
|
|
158
|
+
* main flow. Invalid rating → exit 1 (the one hard validation, so a typo is
|
|
159
|
+
* caught). DB-open failure / 0-row-found → soft path, exit 0.
|
|
86
160
|
*/
|
|
87
|
-
async function
|
|
88
|
-
const
|
|
89
|
-
const
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
161
|
+
export async function feedbackSkill(options, deps = {}) {
|
|
162
|
+
const log = deps.io?.log ?? ((m) => console.log(m));
|
|
163
|
+
const error = deps.io?.error ?? ((m) => console.error(m));
|
|
164
|
+
const skillId = options.skill?.trim();
|
|
165
|
+
if (!skillId) {
|
|
166
|
+
error('Error: --skill <skill_id> is required');
|
|
167
|
+
process.exit(1);
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
const rating = options.rating?.trim();
|
|
171
|
+
if (!rating || !USEFULNESS_RATINGS.includes(rating)) {
|
|
172
|
+
error(`Error: --rating must be one of ${USEFULNESS_RATINGS.join(' | ')} (got: ${rating ?? '<none>'})`);
|
|
173
|
+
process.exit(1);
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
const ownStorage = !deps.storage;
|
|
177
|
+
let storage;
|
|
178
|
+
try {
|
|
179
|
+
storage = deps.storage ?? new SQLiteStorage(FORGE_PATHS.database());
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
// Fail-soft: never break the agent's flow over a missing DB.
|
|
183
|
+
error('Warning: could not open storage; usefulness feedback skipped');
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
try {
|
|
187
|
+
// Resolve session the same way invokeSkill does, then fall back to the
|
|
188
|
+
// sentinel so a session-less call still targets that skill's recent pulls.
|
|
189
|
+
let sessionId = options.sessionId ?? '';
|
|
190
|
+
if (!sessionId) {
|
|
191
|
+
try {
|
|
192
|
+
const resolved = resolveSessionId(storage, {
|
|
193
|
+
sessionId: options.sessionId,
|
|
194
|
+
projectPath: options.project ?? process.cwd(),
|
|
195
|
+
});
|
|
196
|
+
sessionId = resolved.sessionId;
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
sessionId = '';
|
|
200
|
+
}
|
|
97
201
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
202
|
+
if (!sessionId)
|
|
203
|
+
sessionId = CLI_SESSION_FALLBACK;
|
|
204
|
+
const stamped = storage.writeSkillUsefulness({
|
|
205
|
+
session_id: sessionId,
|
|
206
|
+
skill_id: skillId,
|
|
207
|
+
usefulness: rating,
|
|
208
|
+
note: options.note ?? null,
|
|
209
|
+
});
|
|
210
|
+
if (stamped > 0) {
|
|
211
|
+
log(`recorded usefulness=${rating} for ${skillId} (${stamped} row stamped)`);
|
|
101
212
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
continue;
|
|
106
|
-
await fsPromises.copyFile(path.join(backupPath, file), path.join(officialDir, file));
|
|
213
|
+
else {
|
|
214
|
+
// Soft warning — do NOT fail the agent's flow over a missing pull row.
|
|
215
|
+
log(`no un-rated pull found for ${skillId} in session ${sessionId} (nothing stamped)`);
|
|
107
216
|
}
|
|
108
|
-
|
|
109
|
-
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
// Telemetry must never throw into the agent's main path.
|
|
220
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
221
|
+
error(`Warning: usefulness feedback failed: ${msg}`);
|
|
222
|
+
}
|
|
223
|
+
finally {
|
|
224
|
+
if (ownStorage && storage) {
|
|
225
|
+
try {
|
|
226
|
+
storage.close();
|
|
227
|
+
}
|
|
228
|
+
catch { /* ignore */ }
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* `cf skill usefulness [--json]`: per-skill usefulness aggregation, sorted
|
|
234
|
+
* worst-actionable-rate first (least-useful skills on top = P1 refinement
|
|
235
|
+
* candidates). actionable_rate = helped / total_rated (STRICT helped-only).
|
|
236
|
+
* Un-rated pulls are reported as `pending`, excluded from the rate denominator.
|
|
237
|
+
*/
|
|
238
|
+
export async function usefulnessSkills(options, deps = {}) {
|
|
239
|
+
const log = deps.io?.log ?? ((m) => console.log(m));
|
|
240
|
+
const error = deps.io?.error ?? ((m) => console.error(m));
|
|
241
|
+
const ownStorage = !deps.storage;
|
|
242
|
+
let storage;
|
|
243
|
+
try {
|
|
244
|
+
storage = deps.storage ?? new SQLiteStorage(FORGE_PATHS.database());
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
error('Error: could not open storage');
|
|
248
|
+
process.exit(1);
|
|
110
249
|
return;
|
|
111
250
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
251
|
+
try {
|
|
252
|
+
const rows = storage.aggregateSkillUsefulness({});
|
|
253
|
+
if (options.json) {
|
|
254
|
+
log(JSON.stringify(rows, null, 2));
|
|
255
|
+
return;
|
|
116
256
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
257
|
+
if (rows.length === 0) {
|
|
258
|
+
log('No skill invocations recorded yet.');
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
log('Skill usefulness (worst actionable-rate first):\n');
|
|
262
|
+
log('skill_id'.padEnd(44) + 'rate'.padStart(7) + 'rated'.padStart(7) +
|
|
263
|
+
'help'.padStart(6) + 'part'.padStart(6) + 'n/a'.padStart(6) + 'pend'.padStart(6));
|
|
264
|
+
for (const r of rows) {
|
|
265
|
+
const rate = r.total_rated > 0 ? `${(r.actionable_rate * 100).toFixed(0)}%` : '-';
|
|
266
|
+
log(r.skill_id.padEnd(44) +
|
|
267
|
+
rate.padStart(7) +
|
|
268
|
+
String(r.total_rated).padStart(7) +
|
|
269
|
+
String(r.helped).padStart(6) +
|
|
270
|
+
String(r.partial).padStart(6) +
|
|
271
|
+
String(r.not_actionable).padStart(6) +
|
|
272
|
+
String(r.pending).padStart(6));
|
|
121
273
|
}
|
|
122
|
-
console.log(`Applying decisions from ${reportPath}...`);
|
|
123
|
-
const result = await applyDecisions(reportPath, officialDir, backupBaseDir);
|
|
124
|
-
console.log(`\nApply complete:`);
|
|
125
|
-
console.log(` Applied : ${result.applied}`);
|
|
126
|
-
console.log(` Skipped : ${result.skipped}`);
|
|
127
|
-
console.log(` Backup : ${result.backupPath}`);
|
|
128
|
-
console.log('\nNext steps:');
|
|
129
|
-
console.log(' 1. npm run build # rebuild dist with new skill content');
|
|
130
|
-
console.log(' 2. git add src/skills/official/');
|
|
131
|
-
console.log(' 3. git commit -m "chore: upgrade official skills (cf skills upgrade --apply)"');
|
|
132
|
-
console.log(`\nIf unsatisfied, rollback with: cf skills upgrade --rollback ${path.basename(result.backupPath)}`);
|
|
133
|
-
return;
|
|
134
274
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
console.log(` Found ${candidates.length} candidate skills`);
|
|
139
|
-
const officialSkills = loadOfficialSkills(officialDir);
|
|
140
|
-
console.log(` Loaded ${officialSkills.length} official skills`);
|
|
141
|
-
// Set up AI provider
|
|
142
|
-
const config = new ConfigManager().get();
|
|
143
|
-
if (!config.ai.api_key) {
|
|
144
|
-
console.error('No AI API key configured. Run `cf menu` to set it up.');
|
|
275
|
+
catch (err) {
|
|
276
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
277
|
+
error(`Error: ${msg}`);
|
|
145
278
|
process.exit(1);
|
|
146
279
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
const matchResult = matchToOfficial(candidate, officialSkills);
|
|
154
|
-
if (!matchResult) {
|
|
155
|
-
unmatched++;
|
|
156
|
-
continue;
|
|
280
|
+
finally {
|
|
281
|
+
if (ownStorage && storage) {
|
|
282
|
+
try {
|
|
283
|
+
storage.close();
|
|
284
|
+
}
|
|
285
|
+
catch { /* ignore */ }
|
|
157
286
|
}
|
|
158
|
-
matched++;
|
|
159
|
-
const official = officialSkills.find((o) => o.name === matchResult.officialId);
|
|
160
|
-
if (!official)
|
|
161
|
-
continue;
|
|
162
|
-
process.stdout.write(` ${candidate.id} → ${official.name} (score ${matchResult.score})... `);
|
|
163
|
-
const decision = await evaluateWithAI(candidate, official, aiProvider);
|
|
164
|
-
const action = decision.needs_review
|
|
165
|
-
? 'needs_review'
|
|
166
|
-
: decision.action;
|
|
167
|
-
process.stdout.write(`${action}\n`);
|
|
168
|
-
entries.push({
|
|
169
|
-
officialId: official.name,
|
|
170
|
-
candidateId: candidate.id,
|
|
171
|
-
candidateSource: candidate.source,
|
|
172
|
-
action,
|
|
173
|
-
confidence: decision.confidence,
|
|
174
|
-
reasoning: decision.reasoning,
|
|
175
|
-
candidateFilePath: candidate.filePath,
|
|
176
|
-
merged_content: decision.merged_content,
|
|
177
|
-
});
|
|
178
287
|
}
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
288
|
+
}
|
|
289
|
+
// ---------------------------------------------------------------------------
|
|
290
|
+
// `cf skill search <task-desc>` — dynamic skill discovery (decision c20c2d1f, C1)
|
|
291
|
+
//
|
|
292
|
+
// Replaces the static per-agent trigger tables ("situation → hardcoded skill_id")
|
|
293
|
+
// with a lexical, deterministic search: an agent describes the sub-task it is
|
|
294
|
+
// ACTUALLY doing and gets back relevance-ranked skill candidates. Ranking is
|
|
295
|
+
// pure token-overlap (skill name + description + keywords vs the task tokens) —
|
|
296
|
+
// NO LLM, NO embedding (fast, deterministic, zero spend). The LLM picks 0-1 from
|
|
297
|
+
// the candidates afterwards.
|
|
298
|
+
//
|
|
299
|
+
// Anti-noise (decision d08da374): when the top score is below SEARCH_MIN_SCORE
|
|
300
|
+
// we explicitly report "no strong match — suggest skip pull" so the agent skips
|
|
301
|
+
// rather than pulling a weak candidate (the "pull everything every time" trap).
|
|
302
|
+
// ---------------------------------------------------------------------------
|
|
303
|
+
/** Default number of ranked candidates returned. */
|
|
304
|
+
const SEARCH_DEFAULT_TOP = 5;
|
|
305
|
+
/**
|
|
306
|
+
* Minimum top score for the result set to count as a "strong match". Below this,
|
|
307
|
+
* `searchSkills` flags `no_strong_match: true` so the agent skips the pull.
|
|
308
|
+
* Scoring is token-overlap (see scoreSkillMatch): a curated KEYWORD hit scores 2,
|
|
309
|
+
* a single name/description word scores 1. The threshold of 2 means a real match
|
|
310
|
+
* needs either one curated-keyword hit OR two distinct text-word overlaps — a
|
|
311
|
+
* lone generic word (e.g. "branch", "guidelines") never qualifies as strong.
|
|
312
|
+
* This is the anti-noise guard (decision d08da374): weak single-word coincidences
|
|
313
|
+
* are surfaced only as "weak candidates", and the agent is told to skip.
|
|
314
|
+
*/
|
|
315
|
+
const SEARCH_MIN_SCORE = 2;
|
|
316
|
+
/**
|
|
317
|
+
* Tokenize a free-text string into lowercase alphanumeric tokens.
|
|
318
|
+
* Splits on any non-alphanumeric boundary; keeps CJK runs intact (CJK chars are
|
|
319
|
+
* not \w, so a CJK phrase becomes one token — keyword frontmatter stores CJK
|
|
320
|
+
* phrases like "接口设计" whole, so whole-token equality still matches).
|
|
321
|
+
*/
|
|
322
|
+
function tokenize(text) {
|
|
323
|
+
return text
|
|
324
|
+
.toLowerCase()
|
|
325
|
+
.split(/[^a-z0-9一-鿿]+/u)
|
|
326
|
+
.filter(t => t.length > 0);
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Score one skill against the query tokens by token overlap.
|
|
330
|
+
*
|
|
331
|
+
* - Each query token that appears among the skill's keyword tokens scores 2
|
|
332
|
+
* (keywords are the curated relevance signal → weighted highest).
|
|
333
|
+
* - Each query token that appears in the skill's name/description tokens scores 1.
|
|
334
|
+
* - A query token counts at most once (keyword hit dominates a name/desc hit).
|
|
335
|
+
*
|
|
336
|
+
* Pure + deterministic — no LLM, no embedding. Exported-shape via searchSkills.
|
|
337
|
+
*/
|
|
338
|
+
export function scoreSkillMatch(skill, queryTokens) {
|
|
339
|
+
const keywordTokens = new Set();
|
|
340
|
+
for (const kw of skill.keywords) {
|
|
341
|
+
for (const t of tokenize(kw))
|
|
342
|
+
keywordTokens.add(t);
|
|
343
|
+
}
|
|
344
|
+
const textTokens = new Set([
|
|
345
|
+
...tokenize(skill.name),
|
|
346
|
+
...tokenize(skill.description ?? ''),
|
|
347
|
+
// skill ids are hyphenated (distilled-api-design) → tokenize for partial hits
|
|
348
|
+
...tokenize(skill.id),
|
|
349
|
+
]);
|
|
350
|
+
let score = 0;
|
|
351
|
+
const seen = new Set();
|
|
352
|
+
for (const qt of queryTokens) {
|
|
353
|
+
if (seen.has(qt))
|
|
354
|
+
continue; // dedupe repeated query tokens
|
|
355
|
+
seen.add(qt);
|
|
356
|
+
if (keywordTokens.has(qt)) {
|
|
357
|
+
score += 2;
|
|
358
|
+
}
|
|
359
|
+
else if (textTokens.has(qt)) {
|
|
360
|
+
score += 1;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
return score;
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Rank skills by relevance to a task description. Pure function over a skill
|
|
367
|
+
* list so it is unit-testable without a registry/filesystem.
|
|
368
|
+
*/
|
|
369
|
+
export function rankSkills(skills, taskDesc, top) {
|
|
370
|
+
const queryTokens = tokenize(taskDesc);
|
|
371
|
+
const scored = skills
|
|
372
|
+
.map(s => ({
|
|
373
|
+
id: s.id,
|
|
374
|
+
name: s.name,
|
|
375
|
+
description: s.description ?? '',
|
|
376
|
+
keywords: s.keywords,
|
|
377
|
+
score: scoreSkillMatch(s, queryTokens),
|
|
378
|
+
}))
|
|
379
|
+
.filter(m => m.score > 0)
|
|
380
|
+
// Highest score first; tie-break alphabetically for deterministic output.
|
|
381
|
+
.sort((a, b) => (b.score - a.score) || a.id.localeCompare(b.id))
|
|
382
|
+
.slice(0, Math.max(1, top));
|
|
383
|
+
const bestScore = scored.length > 0 ? scored[0].score : 0;
|
|
384
|
+
return {
|
|
385
|
+
query: taskDesc,
|
|
386
|
+
matches: scored,
|
|
387
|
+
no_strong_match: bestScore < SEARCH_MIN_SCORE,
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* `cf skill search <task-desc> [--top N] [--json]`: dynamic skill discovery.
|
|
392
|
+
* Source of truth is the live SkillRegistry (same data `cf skill list` uses) —
|
|
393
|
+
* no new data source. Supports machine (--json, for agents) + human output.
|
|
394
|
+
*/
|
|
395
|
+
export async function searchSkills(taskDesc, options, deps = {}) {
|
|
396
|
+
const log = deps.io?.log ?? ((m) => console.log(m));
|
|
397
|
+
const error = deps.io?.error ?? ((m) => console.error(m));
|
|
398
|
+
const query = (taskDesc ?? '').trim();
|
|
399
|
+
if (!query) {
|
|
400
|
+
error('Error: a task description is required, e.g. cf skill search "add SSE reconnect to streaming endpoint"');
|
|
401
|
+
process.exit(1);
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
404
|
+
let top = SEARCH_DEFAULT_TOP;
|
|
405
|
+
if (options.top !== undefined) {
|
|
406
|
+
const parsed = Number.parseInt(options.top, 10);
|
|
407
|
+
if (Number.isFinite(parsed) && parsed > 0)
|
|
408
|
+
top = parsed;
|
|
409
|
+
}
|
|
410
|
+
const registry = deps.registry ?? new SkillRegistry();
|
|
411
|
+
const skills = registry.getAll().map(s => ({
|
|
412
|
+
id: s.id,
|
|
413
|
+
name: s.name,
|
|
414
|
+
description: s.description,
|
|
415
|
+
keywords: s.keywords,
|
|
416
|
+
}));
|
|
417
|
+
const result = rankSkills(skills, query, top);
|
|
418
|
+
if (options.json) {
|
|
419
|
+
log(JSON.stringify(result, null, 2));
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
422
|
+
// Human-readable output.
|
|
423
|
+
if (result.matches.length === 0 || result.no_strong_match) {
|
|
424
|
+
log(`No strong skill match for: "${query}"`);
|
|
425
|
+
log('Suggestion: skip the skill pull (note `skill-pull-skipped: no-match`).');
|
|
426
|
+
if (result.matches.length > 0) {
|
|
427
|
+
log('\nWeak candidates (below match threshold, NOT recommended):');
|
|
428
|
+
for (const m of result.matches) {
|
|
429
|
+
log(` - ${m.id} (score ${m.score})`);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
log(`Top skill matches for: "${query}"\n`);
|
|
435
|
+
for (const m of result.matches) {
|
|
436
|
+
log(`- ${m.id} (score ${m.score})`);
|
|
437
|
+
if (m.description)
|
|
438
|
+
log(` ${m.description}`);
|
|
439
|
+
}
|
|
440
|
+
log('\nPick at most 1 (the most relevant); if none truly fits, skip the pull.');
|
|
185
441
|
}
|
|
186
442
|
function registerSkillSubcommands(skills) {
|
|
187
443
|
skills
|
|
188
444
|
.command('sync')
|
|
189
|
-
.description('Write
|
|
445
|
+
.description('Write built-in skills to ~/.claude/skills/')
|
|
190
446
|
.option('-f, --force', 'Overwrite existing files regardless of version')
|
|
191
447
|
.action((options) => {
|
|
192
448
|
syncSkills(options);
|
|
193
449
|
});
|
|
194
450
|
skills
|
|
195
451
|
.command('list')
|
|
196
|
-
.description('List all skills (
|
|
452
|
+
.description('List all skills (built-in + user) with optional keyword filter')
|
|
197
453
|
.option('--keywords <keywords>', 'Comma-separated keywords to filter by')
|
|
198
454
|
.option('--json', 'Output as JSON (machine-readable)')
|
|
199
455
|
.action(async (options) => {
|
|
@@ -202,32 +458,62 @@ function registerSkillSubcommands(skills) {
|
|
|
202
458
|
skills
|
|
203
459
|
.command('invoke <skill_id>')
|
|
204
460
|
.description('Invoke a skill and print its full methodology content')
|
|
205
|
-
.option('--reason <reason>', 'Reason for invoking (used for audit log)')
|
|
461
|
+
.option('--reason <reason>', 'Reason for invoking (used for audit log; use "coder/<phase>" / "verify/<phase>" prefix for follow-through telemetry)')
|
|
462
|
+
.option('--session-id <id>', 'Session id for the audit row (defaults to $CLAUDE_SESSION_ID env → DB lookup)')
|
|
463
|
+
.option('--project <path>', 'Project path for session DB lookup (defaults to cwd)')
|
|
464
|
+
.option('--agent <name>', 'Agent name to stamp on the row (writes agent_id; decision 234f1ad4 Q6)')
|
|
206
465
|
.option('--json', 'Output as JSON (machine-readable)')
|
|
207
466
|
.action(async (skillId, options) => {
|
|
208
467
|
await invokeSkill(skillId, options);
|
|
209
468
|
});
|
|
469
|
+
// Dynamic skill discovery (decision c20c2d1f, C1). Agents describe the
|
|
470
|
+
// sub-task they are ACTUALLY doing → get relevance-ranked candidates; the LLM
|
|
471
|
+
// picks 0-1. Replaces the static per-agent trigger tables. Deterministic
|
|
472
|
+
// token-overlap ranking — no LLM, no embedding.
|
|
473
|
+
skills
|
|
474
|
+
.command('search <task-desc>')
|
|
475
|
+
.description('Rank skills by relevance to a task description (dynamic discovery; agents pick 0-1)')
|
|
476
|
+
.option('--top <n>', `Max candidates to return (default ${SEARCH_DEFAULT_TOP})`)
|
|
477
|
+
.option('--json', 'Output as JSON (machine-readable; for agent parsing)')
|
|
478
|
+
.action(async (taskDesc, options) => {
|
|
479
|
+
await searchSkills(taskDesc, options);
|
|
480
|
+
});
|
|
481
|
+
// Skill usefulness feedback (decision d24cd3a2 P0). After an agent USES a
|
|
482
|
+
// pulled skill it rates how actionable the CONTENT was on THIS project's task.
|
|
483
|
+
skills
|
|
484
|
+
.command('feedback')
|
|
485
|
+
.description('Record post-use usefulness for a pulled skill (helped|partial|not-actionable)')
|
|
486
|
+
.option('--skill <skill_id>', 'Skill id that was pulled (required)')
|
|
487
|
+
.option('--rating <rating>', 'helped | partial | not-actionable (required)')
|
|
488
|
+
.option('--note <text>', 'One line: what was / was not applicable to THIS project task')
|
|
489
|
+
.option('--session-id <id>', 'Session id (defaults to $CLAUDE_SESSION_ID env → DB lookup)')
|
|
490
|
+
.option('--project <path>', 'Project path for session DB lookup (defaults to cwd)')
|
|
491
|
+
.action(async (options) => {
|
|
492
|
+
await feedbackSkill(options);
|
|
493
|
+
});
|
|
210
494
|
skills
|
|
211
|
-
.command('
|
|
212
|
-
.description('
|
|
213
|
-
.option('--
|
|
214
|
-
.option('--rollback <timestamp>', 'Rollback to a backup (e.g. 20260518-1930)')
|
|
215
|
-
.option('--report <path>', 'Custom report path')
|
|
495
|
+
.command('usefulness')
|
|
496
|
+
.description('Per-skill usefulness aggregation (actionable_rate = helped/total, worst-first)')
|
|
497
|
+
.option('--json', 'Output as JSON (machine-readable; P1 refinement input)')
|
|
216
498
|
.action(async (options) => {
|
|
217
|
-
await
|
|
499
|
+
await usefulnessSkills(options);
|
|
218
500
|
});
|
|
501
|
+
// NOTE: `cf skills distill ...` was REMOVED in R-A (spec 1851). Distillation
|
|
502
|
+
// is now Web-UI-only and shells out to the `claude` CLI (R-B). The earlier
|
|
503
|
+
// CLI entry points (init / run / review / refresh) are intentionally gone —
|
|
504
|
+
// do not re-add them without a separate spec.
|
|
219
505
|
}
|
|
220
506
|
export function register(program) {
|
|
221
507
|
// Primary command: `cf skills ...`
|
|
222
508
|
const skills = program
|
|
223
509
|
.command('skills')
|
|
224
|
-
.description('Manage
|
|
510
|
+
.description('Manage built-in and user skills (list | invoke | sync)');
|
|
225
511
|
registerSkillSubcommands(skills);
|
|
226
512
|
// Singular alias: `cf skill ...` — preferred for Agent Bash calls where
|
|
227
513
|
// `cf skill invoke <id>` reads more naturally than the plural form.
|
|
228
514
|
const skill = program
|
|
229
515
|
.command('skill')
|
|
230
|
-
.description('Alias of `skills` (list | invoke | sync
|
|
516
|
+
.description('Alias of `skills` (list | invoke | sync)');
|
|
231
517
|
registerSkillSubcommands(skill);
|
|
232
518
|
}
|
|
233
519
|
function syncSkills(options) {
|
|
@@ -237,7 +523,7 @@ function syncSkills(options) {
|
|
|
237
523
|
let added = 0;
|
|
238
524
|
let skipped = 0;
|
|
239
525
|
let updated = 0;
|
|
240
|
-
const officialSkills =
|
|
526
|
+
const officialSkills = loadBuiltinSkills(resolveBuiltinDir());
|
|
241
527
|
for (const skill of officialSkills) {
|
|
242
528
|
const filePath = path.join(SKILLS_DIR, `${skill.name}.md`);
|
|
243
529
|
const exists = fs.existsSync(filePath);
|