@winspan/claude-forge 8.54.4 → 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 +154 -16
- 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-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/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
package/DEVELOPMENT.md
CHANGED
|
@@ -39,7 +39,7 @@ src/
|
|
|
39
39
|
│ ├── lifecycle.ts 启停 / 信号处理
|
|
40
40
|
│ ├── event-parser.ts hook 原始 JSON → ForgeEvent
|
|
41
41
|
│ ├── hook-sync.ts 启动时把 dist/hooks/ 同步到 ~/.claude/hooks/
|
|
42
|
-
│ ├── skill-sync.ts 启动时把 dist/skills/
|
|
42
|
+
│ ├── skill-sync.ts 启动时把 dist/skills/distilled/ 同步到 ~/.claude/skills/
|
|
43
43
|
│ ├── launchd-installer.ts macOS launchd 安装
|
|
44
44
|
│ ├── launchd/ launchd plist 模板
|
|
45
45
|
│ ├── handlers/
|
|
@@ -51,14 +51,11 @@ src/
|
|
|
51
51
|
│ └── task-segmenter.ts UserPromptSubmit 按时间窗划分任务段
|
|
52
52
|
│
|
|
53
53
|
├── skills/ Skill 推荐与方法论分发
|
|
54
|
-
│ ├── registry.ts 扫描 ~/.claude/skills/ + src/skills/
|
|
54
|
+
│ ├── registry.ts 扫描 ~/.claude/skills/ + src/skills/distilled/,提供 match()(keyword-only since spec 0902 D R-B)
|
|
55
55
|
│ ├── matcher.ts 关键词匹配
|
|
56
|
-
│ ├── semantic-matcher.ts AI 语义匹配(可选,需 API key)
|
|
57
56
|
│ ├── invocation-guard.ts 防止 agent 重复 invoke 同一 skill
|
|
58
|
-
│ ├──
|
|
59
|
-
│ ├──
|
|
60
|
-
│ ├── official-skills.ts 加载内置官方 skill
|
|
61
|
-
│ ├── official/ 内置官方 skill .md 源(随发布打包)
|
|
57
|
+
│ ├── builtin-skills.ts 加载内置 distilled skill(来自 src/skills/distilled/)
|
|
58
|
+
│ ├── distilled/ 内置 distilled skill .md 源(随发布打包)
|
|
62
59
|
│ ├── tools/ MCP 工具:skill_invoke / skill_list / pipeline_suggest
|
|
63
60
|
│ └── index.ts 对外导出
|
|
64
61
|
│
|
|
@@ -95,6 +92,14 @@ src/
|
|
|
95
92
|
├── mcp/ MCP server(暴露 skill_invoke / skill_list / pipeline_suggest 给 agent)
|
|
96
93
|
│ └── server.ts
|
|
97
94
|
│
|
|
95
|
+
├── knowledge/ v9.0 项目知识库系统
|
|
96
|
+
│ ├── repo-map.ts 仓库结构快照生成
|
|
97
|
+
│ ├── builder.ts 知识条目构建(分析 src/ → .forge-knowledge/)
|
|
98
|
+
│ ├── query.ts 语义/关键词查询接口
|
|
99
|
+
│ ├── git-hooks.ts Git hooks 集成(commit 后自动 rebuild)
|
|
100
|
+
│ ├── validator.ts KB 完整性校验
|
|
101
|
+
│ └── prompt.ts agent prompt 注入工具
|
|
102
|
+
│
|
|
98
103
|
└── templates/ 新项目初始化模板
|
|
99
104
|
|
|
100
105
|
web/ React 前端源码(独立 npm workspace)
|
|
@@ -214,16 +219,16 @@ Claude Code ──hook payload(JSON via stdin)──► src/hooks/*.sh
|
|
|
214
219
|
└─────────┬───────────┘
|
|
215
220
|
│
|
|
216
221
|
▼
|
|
217
|
-
┌──────────────────────────┐
|
|
218
|
-
│ SkillRegistry.match() │
|
|
219
|
-
│ (registry.ts)
|
|
220
|
-
│ │
|
|
221
|
-
│ 扫描两类来源: │
|
|
222
|
-
│ - 内置 src/skills/ │
|
|
223
|
-
│
|
|
224
|
-
│ - 用户 ~/.claude/skills/│
|
|
225
|
-
│ {name}.md │
|
|
226
|
-
│ or {name}/SKILL.md │
|
|
222
|
+
┌──────────────────────────┐
|
|
223
|
+
│ SkillRegistry.match() │ (semantic-matcher 已在 spec 0902 D R-B 删除)
|
|
224
|
+
│ (registry.ts, keyword-only)
|
|
225
|
+
│ │ ┌──────────────────────────┐
|
|
226
|
+
│ 扫描两类来源: │ ───────►│ keyword matcher │
|
|
227
|
+
│ - 内置 src/skills/ │ │ (matcher.ts) │
|
|
228
|
+
│ distilled/*.md │ └────────────┬─────────────┘
|
|
229
|
+
│ - 用户 ~/.claude/skills/│ │
|
|
230
|
+
│ {name}.md │
|
|
231
|
+
│ or {name}/SKILL.md │
|
|
227
232
|
└──────────────────────────┘ │
|
|
228
233
|
│ │
|
|
229
234
|
▼ ▼
|
|
@@ -240,19 +245,47 @@ Agent 通过 MCP 工具:
|
|
|
240
245
|
|
|
241
246
|
frontmatter 必须有 `name: string`,否则 registry 静默跳过(debug 日志,不打扰用户)。`keywords` 与 `tags` 都接受。
|
|
242
247
|
|
|
243
|
-
### Skill
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
1
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
248
|
+
### Skill 蒸馏
|
|
249
|
+
|
|
250
|
+
> **架构改写已完成**(spec [`1851`](docs/design/2026-05-28/1851-distill-via-claude-cli-shellout-spec.md) R-A + R-B):
|
|
251
|
+
> `cf skills distill` CLI 子命令族**已删除**;蒸馏入口收敛到 Web UI 一处
|
|
252
|
+
> (`http://127.0.0.1:3721/context?tab=distill`)。daemon 通过
|
|
253
|
+
> `child_process.spawn('claude', ...)` headless 调用本地 claude CLI,走用户
|
|
254
|
+
> 订阅计费(OAuth/keychain),daemon 自身不再持 `ANTHROPIC_API_KEY`。
|
|
255
|
+
|
|
256
|
+
**实施流程**(R-B 已 ship):
|
|
257
|
+
|
|
258
|
+
1. `findClaudeBin()` (`src/skills/distill/claude-cli-resolver.ts`) 探测 `claude`
|
|
259
|
+
binary —— 先跑 `which claude`,失败后探测 `/opt/homebrew/bin/claude` /
|
|
260
|
+
`/usr/local/bin/claude` / `~/.local/bin/claude`。结果缓存 5 分钟。
|
|
261
|
+
2. `/api/skills/distill/status` 调 `findClaudeBin()` 返回
|
|
262
|
+
`{ claudeCliAvailable: boolean, claudeCliPath: string | null }`。
|
|
263
|
+
UI disable 按钮 + 显示安装提示(`brew install claude` /
|
|
264
|
+
`npm i -g @anthropic-ai/claude-code`)。
|
|
265
|
+
3. 按【开始蒸馏】 → `spawnSkillDistillerAgent(prompt)` 起子进程:
|
|
266
|
+
```bash
|
|
267
|
+
claude -p --agent skill-distiller --bare \
|
|
268
|
+
--output-format stream-json --include-partial-messages --input-format text
|
|
269
|
+
```
|
|
270
|
+
prompt 通过 stdin 喂入(含 `<upstream_skill>` / `<upstream_url>` /
|
|
271
|
+
`<target_name>` / `<topic_id>` tagged blocks)。
|
|
272
|
+
4. 解析 stream-json 事件(`assistant_message` / `content_block_delta` /
|
|
273
|
+
`message_delta` / `text_delta` / `result` 多版本兼容)累加 assistant text。
|
|
274
|
+
每个事件回调 `onProgress({ type, charCount, raw })` →
|
|
275
|
+
distill-manager 桥接为 SSE `progress` event(UI 显示 `chars=N` + topicId)。
|
|
276
|
+
5. 子进程 exit 0 → `parseSkipBlock()` 优先检测 SKIP envelope →
|
|
277
|
+
有则抛 `SkillSkippedError`(agent 自评分 < 3,topicId 加入 state.skipped 继续下一个)→
|
|
278
|
+
否则 `parseSkillBlock()` 抽 SKILL envelope body →
|
|
279
|
+
`detectAnchors()` lint 命中即 throw `ProjectAnchorRejection`(**无 retry**,per Q2)→
|
|
280
|
+
写入 `src/skills/distilled/distilled-xxx.md` + 追加 NOTICE。
|
|
281
|
+
6. 用户【取消】→ `distill-manager.cancel(runId)` → AbortController abort →
|
|
282
|
+
`child.kill('SIGTERM')`。
|
|
283
|
+
|
|
284
|
+
**Hard-fail 错误**(agent path 一律不 retry):
|
|
285
|
+
- `ClaudeCliMissingError` —— `findClaudeBin()` 返回 null
|
|
286
|
+
- `SkillSkippedError` —— agent emit `---SKIP---` envelope(score < 3)
|
|
287
|
+
- `SkillBlockMissingError` —— agent 输出既无 SKILL 也无 SKIP envelope
|
|
288
|
+
- `ProjectAnchorRejection` —— SKILL body lint 命中项目锚点
|
|
256
289
|
|
|
257
290
|
### CLAUDE.md 生成与维护
|
|
258
291
|
|
|
@@ -272,7 +305,7 @@ frontmatter 必须有 `name: string`,否则 registry 静默跳过(debug 日
|
|
|
272
305
|
daemon 启动时(`src/daemon/index.ts`)执行两个一次性同步:
|
|
273
306
|
|
|
274
307
|
- `syncHooks()` — 把 `dist/hooks/*.sh` 对照 sha256 同步到 `~/.claude/hooks/`,避免用户忘了重跑 `cf init`
|
|
275
|
-
- `syncSkills()` — 把 `dist/skills/
|
|
308
|
+
- `syncSkills()` — 把 `dist/skills/distilled/*.md` 同步到 `~/.claude/skills/`,user-owned 文件(已存在)跳过
|
|
276
309
|
|
|
277
310
|
两者都幂等,文件相同时不写盘。
|
|
278
311
|
|
|
@@ -325,7 +358,7 @@ daemon 通过三个机制保证长时间运行不膨胀:
|
|
|
325
358
|
|
|
326
359
|
## 添加新 Skill
|
|
327
360
|
|
|
328
|
-
最简方式:在 `src/skills/
|
|
361
|
+
最简方式:在 `src/skills/distilled/<name>.md` 写 frontmatter:
|
|
329
362
|
|
|
330
363
|
```markdown
|
|
331
364
|
---
|
|
@@ -352,6 +385,589 @@ version: 1.0.0
|
|
|
352
385
|
|
|
353
386
|
---
|
|
354
387
|
|
|
388
|
+
## decision-maker agent 使用说明
|
|
389
|
+
|
|
390
|
+
### 首次使用必读:TUI restart 必要
|
|
391
|
+
|
|
392
|
+
`decision-maker` agent 定义在 `.claude/agents/decision-maker.md`。Claude Code TUI
|
|
393
|
+
在**启动时**一次性扫描 `.claude/agents/`,运行中新增的 agent 不会被自动识别。
|
|
394
|
+
|
|
395
|
+
**首次使用(或更新 template 后)必须重启 TUI**:
|
|
396
|
+
- macOS: `Cmd+R` 或关闭窗口重新打开
|
|
397
|
+
- 重启后验证: 在 Task tool 输入 `subagent_type='decision-maker'` 不报 not found 即可
|
|
398
|
+
|
|
399
|
+
### TUI restart 后仍 not found 的 fallback
|
|
400
|
+
|
|
401
|
+
若重启 TUI 后 `subagent_type='decision-maker'` 仍报 not found,使用以下 inline 方式:
|
|
402
|
+
|
|
403
|
+
```
|
|
404
|
+
spawn general-purpose agent with prompt:
|
|
405
|
+
"你扮演 decision-maker 角色。Read .claude/agents/decision-maker.md 然后按其 Workflow 执行。
|
|
406
|
+
用户 prompt: <your actual prompt>"
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
### decision-maker catalog 预生成
|
|
410
|
+
|
|
411
|
+
Build 时 `scripts/dump-catalogs.ts` 会生成:
|
|
412
|
+
- `dist/catalogs/agents.json` — 9 agents, ~3KB
|
|
413
|
+
- `dist/catalogs/skills.json` — 12 skills, ~5KB
|
|
414
|
+
|
|
415
|
+
这两个文件由 decision-maker Step 2-3 读取(`cat dist/catalogs/*.json`),
|
|
416
|
+
替代原来的全读 3250 行 markdown,可减少 ~90% catalog token 消耗。
|
|
417
|
+
|
|
418
|
+
如果 `dist/catalogs/` 不存在(fresh clone):先运行 `npm run build`。
|
|
419
|
+
|
|
420
|
+
---
|
|
421
|
+
|
|
422
|
+
## skill-distiller agent 使用说明
|
|
423
|
+
|
|
424
|
+
`skill-distiller` agent 定义在 `.claude/agents/skill-distiller.md`(与
|
|
425
|
+
`src/daemon/templates/agents/skill-distiller.md` 完全镜像,agent-sync 启动时
|
|
426
|
+
拷到 `~/.claude/agents/`)。
|
|
427
|
+
|
|
428
|
+
### R-A 状态(spec 1851)
|
|
429
|
+
|
|
430
|
+
- **程序化调用路径已删除**:`runSonnetDistillationViaAgent()` /
|
|
431
|
+
`CF_SKILL_DISTILLER_AGENT=1` env flag 在 R-A 阶段一并下线。
|
|
432
|
+
- **R-B 接 claude CLI shell-out**:daemon 通过 `child_process.spawn('claude',
|
|
433
|
+
['-p', '--agent', 'skill-distiller', ...])` 调用本地 claude CLI,agent body
|
|
434
|
+
作为 system prompt 由 CLI 自身加载(不再由 daemon 进程读取 .md 注入)。
|
|
435
|
+
- **agent body R-B 会重写**:评分(D1-D5)+ 决策 + 输出 SKILL/SKIP envelope
|
|
436
|
+
三步合一。当前 .md 仍是 Phase B 版本,等 R-B spec 推进后会更新。
|
|
437
|
+
|
|
438
|
+
### 方式 2:在 Claude Code TUI 里手动 spawn(仍可用)
|
|
439
|
+
|
|
440
|
+
```
|
|
441
|
+
Task tool subagent_type='skill-distiller' with prompt:
|
|
442
|
+
"<upstream_skill>...</upstream_skill>
|
|
443
|
+
<upstream_url>https://github.com/owner/repo</upstream_url>
|
|
444
|
+
<target_name>distilled-xxx</target_name>
|
|
445
|
+
<it_universal_score>4</it_universal_score>
|
|
446
|
+
<it_universal_rationale>...</it_universal_rationale>"
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
agent 会返回 `---SKILL---\n<full md>\n---END---` 格式的 markdown,需要手动
|
|
450
|
+
保存到 `src/skills/distilled/distilled-xxx.md`(caller 责任)。**首次新增/改 agent
|
|
451
|
+
需 TUI restart**(macOS Cmd+R)。
|
|
452
|
+
|
|
453
|
+
### 首次使用必读:TUI restart 必要
|
|
454
|
+
|
|
455
|
+
与 decision-maker 同样的 quirk —— Claude Code TUI 在**启动时**一次性扫描
|
|
456
|
+
`.claude/agents/`,运行中新增的 agent 不会被自动识别。
|
|
457
|
+
|
|
458
|
+
**首次使用(或更新 template 后)必须重启 TUI**:
|
|
459
|
+
- macOS: `Cmd+R` 或关闭窗口重新打开
|
|
460
|
+
- 重启后验证:在 Task tool 输入 `subagent_type='skill-distiller'` 不报 not found 即可
|
|
461
|
+
|
|
462
|
+
> 注意:方式 1(程序化 distill)**不受** TUI restart 影响 —— 它直接读文件,
|
|
463
|
+
> 不走 TUI 的 agent registry。
|
|
464
|
+
|
|
465
|
+
### TUI restart 后仍 not found 的 fallback
|
|
466
|
+
|
|
467
|
+
若重启 TUI 后 `subagent_type='skill-distiller'` 仍报 not found,使用以下
|
|
468
|
+
inline 方式:
|
|
469
|
+
|
|
470
|
+
```
|
|
471
|
+
spawn general-purpose agent with prompt:
|
|
472
|
+
"你扮演 skill-distiller 角色。Read .claude/agents/skill-distiller.md
|
|
473
|
+
然后按其 Workflow 执行。
|
|
474
|
+
|
|
475
|
+
输入 tags 如下:
|
|
476
|
+
<upstream_skill>...</upstream_skill>
|
|
477
|
+
<upstream_url>...</upstream_url>
|
|
478
|
+
..."
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
### Agent 文件三处镜像
|
|
482
|
+
|
|
483
|
+
```
|
|
484
|
+
src/daemon/templates/agents/skill-distiller.md ← canonical source (git tracked)
|
|
485
|
+
.claude/agents/skill-distiller.md ← repo mirror (git -f tracked, TUI scan)
|
|
486
|
+
dist/daemon/templates/agents/skill-distiller.md ← npm payload (build cp produces)
|
|
487
|
+
~/.claude/agents/skill-distiller.md ← user sync target (agent-sync.ts)
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
修改 agent .md 时**只改 canonical**(`src/daemon/templates/agents/`),然后:
|
|
491
|
+
|
|
492
|
+
```bash
|
|
493
|
+
# 同步到 repo mirror
|
|
494
|
+
cp src/daemon/templates/agents/skill-distiller.md .claude/agents/skill-distiller.md
|
|
495
|
+
# build 自动同步到 dist/
|
|
496
|
+
npm run build
|
|
497
|
+
# daemon restart 自动同步到 ~/.claude/agents/
|
|
498
|
+
cf daemon restart
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
repo mirror 与 canonical 必须 **byte-identical**(CI 不强制,但 lint 检查
|
|
502
|
+
计划在未来 phase 加入)。
|
|
503
|
+
|
|
504
|
+
---
|
|
505
|
+
|
|
506
|
+
## claudemd-writer agent 使用说明
|
|
507
|
+
|
|
508
|
+
`claudemd-writer` agent 定义在 `.claude/agents/claudemd-writer.md`(与
|
|
509
|
+
`src/daemon/templates/agents/claudemd-writer.md` 完全镜像,agent-sync 启动时
|
|
510
|
+
拷到 `~/.claude/agents/`)。
|
|
511
|
+
|
|
512
|
+
引入背景:spec [`0902`](docs/design/2026-05-29/0902-ai-config-removal-master-spec.md)
|
|
513
|
+
子 spec A — 把 `cf claudemd init/update` 从「daemon 进程内 `ClaudeProvider.complete()`
|
|
514
|
+
+ 用户配的 `ANTHROPIC_API_KEY`」迁到「`child_process.spawn('claude', ...)` headless
|
|
515
|
+
CLI 子进程」。daemon 自身不再持 API key,走用户 Claude Code 订阅计费。
|
|
516
|
+
|
|
517
|
+
### 两种使用方式
|
|
518
|
+
|
|
519
|
+
#### 方式 1:作为 `cf claudemd` 的 prompt 模板(程序化调用,默认入口)
|
|
520
|
+
|
|
521
|
+
`src/cli/commands/claudemd.ts` 的 `runClaudeMdWriter()` 把 agent name + stdin
|
|
522
|
+
prompt 传给 `spawnClaudeCli()` (`src/core/utils/claude-cli-spawn.ts`):
|
|
523
|
+
|
|
524
|
+
```bash
|
|
525
|
+
claude -p --agent claudemd-writer --bare \
|
|
526
|
+
--output-format stream-json --include-partial-messages \
|
|
527
|
+
--allowedTools "Read,Grep" --input-format text
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
prompt 通过 stdin 注入,含 tagged blocks(`<target_command>` / `<project_name>` /
|
|
531
|
+
`<project_tech_stack>` / `<project_directory_tree>` / `<project_persona>` /
|
|
532
|
+
`<project_conventions>`)。agent 解析这些 block,按既定模板写完整 CLAUDE.md
|
|
533
|
+
body,包在 `---CLAUDEMD---\n...\n---END---` envelope 内。host 调
|
|
534
|
+
`parseClaudeMdBlock()` 抽 body,写盘。
|
|
535
|
+
|
|
536
|
+
这种用法**不需要** TUI restart —— 不走 Claude Code 的 Task tool agent registry,
|
|
537
|
+
是 host CLI 直接 spawn `claude` 子进程。
|
|
538
|
+
|
|
539
|
+
#### 方式 2:在 Claude Code TUI 里手动 spawn(调试 / 一次性生成)
|
|
540
|
+
|
|
541
|
+
```
|
|
542
|
+
Task tool subagent_type='claudemd-writer' with prompt:
|
|
543
|
+
"<target_command>init</target_command>
|
|
544
|
+
<project_name>my-app</project_name>
|
|
545
|
+
<project_tech_stack>{\"language\":[\"TypeScript\"],...}</project_tech_stack>
|
|
546
|
+
<project_directory_tree>my-app/\n├── src/\n└── package.json</project_directory_tree>
|
|
547
|
+
<project_persona></project_persona>
|
|
548
|
+
<project_conventions></project_conventions>"
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
agent 返回 `---CLAUDEMD---\n<full md>\n---END---` envelope。**调用方手动**
|
|
552
|
+
copy body 写入 `<project>/CLAUDE.md`。
|
|
553
|
+
|
|
554
|
+
### 首次使用必读:TUI restart 必要
|
|
555
|
+
|
|
556
|
+
与 `decision-maker` / `skill-distiller` 同样的 quirk —— Claude Code TUI 在**启动时**
|
|
557
|
+
一次性扫描 `.claude/agents/`,运行中新增的 agent 不会被自动识别。
|
|
558
|
+
|
|
559
|
+
**首次使用(或更新 template 后)必须重启 TUI**:
|
|
560
|
+
- macOS: `Cmd+R` 或关闭窗口重新打开
|
|
561
|
+
- 重启后验证:在 Task tool 输入 `subagent_type='claudemd-writer'` 不报 not found 即可
|
|
562
|
+
|
|
563
|
+
> 注意:方式 1(程序化 `cf claudemd`)**不受** TUI restart 影响 —— 它走
|
|
564
|
+
> `child_process.spawn('claude', ...)`,与 TUI 的 agent registry 无关。
|
|
565
|
+
|
|
566
|
+
### TUI restart 后仍 not found 的 fallback
|
|
567
|
+
|
|
568
|
+
若重启 TUI 后 `subagent_type='claudemd-writer'` 仍报 not found,使用以下
|
|
569
|
+
inline 方式:
|
|
570
|
+
|
|
571
|
+
```
|
|
572
|
+
spawn general-purpose agent with prompt:
|
|
573
|
+
"你扮演 claudemd-writer 角色。Read .claude/agents/claudemd-writer.md
|
|
574
|
+
然后按其 Workflow 执行。
|
|
575
|
+
|
|
576
|
+
输入 tags 如下:
|
|
577
|
+
<target_command>init</target_command>
|
|
578
|
+
<project_name>...</project_name>
|
|
579
|
+
<project_tech_stack>...</project_tech_stack>
|
|
580
|
+
<project_directory_tree>...</project_directory_tree>
|
|
581
|
+
<project_persona>...</project_persona>
|
|
582
|
+
<project_conventions>...</project_conventions>"
|
|
583
|
+
```
|
|
584
|
+
|
|
585
|
+
### Agent 文件三处镜像
|
|
586
|
+
|
|
587
|
+
```
|
|
588
|
+
src/daemon/templates/agents/claudemd-writer.md ← canonical source (git tracked)
|
|
589
|
+
.claude/agents/claudemd-writer.md ← repo mirror (git -f tracked, TUI scan)
|
|
590
|
+
dist/daemon/templates/agents/claudemd-writer.md ← npm payload (build cp produces)
|
|
591
|
+
~/.claude/agents/claudemd-writer.md ← user sync target (agent-sync.ts)
|
|
592
|
+
```
|
|
593
|
+
|
|
594
|
+
修改 agent .md 时**只改 canonical**(`src/daemon/templates/agents/`),然后:
|
|
595
|
+
|
|
596
|
+
```bash
|
|
597
|
+
# 同步到 repo mirror
|
|
598
|
+
cp src/daemon/templates/agents/claudemd-writer.md .claude/agents/claudemd-writer.md
|
|
599
|
+
# build 自动同步到 dist/
|
|
600
|
+
npm run build
|
|
601
|
+
# daemon restart 自动同步到 ~/.claude/agents/
|
|
602
|
+
cf daemon restart
|
|
603
|
+
```
|
|
604
|
+
|
|
605
|
+
repo mirror 与 canonical 必须 **byte-identical**(同 skill-distiller,CI 不
|
|
606
|
+
强制,lint 检查计划未来 phase 加入)。
|
|
607
|
+
|
|
608
|
+
### Hard-fail 错误(不会 fallback 到 stub)
|
|
609
|
+
|
|
610
|
+
- `ClaudeCliMissingError` —— PATH 中找不到 `claude` binary,install hint:
|
|
611
|
+
`brew install claude` 或 `npm i -g @anthropic-ai/claude-code`
|
|
612
|
+
- `ClaudeCliExitError` —— 子进程 exit code ≠ 0(stderr snippet 打印)
|
|
613
|
+
- `ClaudeCliTimeoutError` —— 超过 5 分钟未完成(默认 timeout 300_000ms)
|
|
614
|
+
- `ClaudeCliCancelledError` —— 调用方主动 abort
|
|
615
|
+
- `ClaudeMdBlockMissingError` —— agent 输出缺 `---CLAUDEMD---...---END---`
|
|
616
|
+
envelope(前 200 字符 snippet 打印)
|
|
617
|
+
|
|
618
|
+
所有错误**直接 exit 1**,不退化到模板(与 R-A 时期的 fallback 行为不同;
|
|
619
|
+
fallback 已移除,spec 0902 §2.4.1)。
|
|
620
|
+
|
|
621
|
+
---
|
|
622
|
+
|
|
623
|
+
## knowledge-builder agent 使用说明
|
|
624
|
+
|
|
625
|
+
`knowledge-builder` agent 定义在 `.claude/agents/knowledge-builder.md`(与
|
|
626
|
+
`src/daemon/templates/agents/knowledge-builder.md` 完全镜像,agent-sync 启动时
|
|
627
|
+
拷到 `~/.claude/agents/`)。
|
|
628
|
+
|
|
629
|
+
引入背景:spec [`0902`](docs/design/2026-05-29/0902-ai-config-removal-master-spec.md)
|
|
630
|
+
子 spec B — 把 `cf knowledge build / init / update` 从「daemon 进程内
|
|
631
|
+
`ClaudeProvider.completeWithUsage()` + 用户配的 `ANTHROPIC_API_KEY`」迁到
|
|
632
|
+
「`child_process.spawn('claude', ...)` headless CLI 子进程」。daemon 自身不再
|
|
633
|
+
持 API key,走用户 Claude Code 订阅计费。
|
|
634
|
+
|
|
635
|
+
### 两种使用方式
|
|
636
|
+
|
|
637
|
+
#### 方式 1:作为 `cf knowledge build` 的 prompt 模板(程序化调用,默认入口)
|
|
638
|
+
|
|
639
|
+
`src/cli/commands/knowledge.ts` 的 `buildCmd()` 调 `buildKnowledge()`,后者默认
|
|
640
|
+
创建 `CliKnowledgeProvider`(`src/knowledge/cli-provider.ts`),由它把 agent
|
|
641
|
+
name + stdin prompt 传给 `spawnClaudeCli()`(`src/core/utils/claude-cli-spawn.ts`,
|
|
642
|
+
与 `claudemd-writer` 共用):
|
|
643
|
+
|
|
644
|
+
```bash
|
|
645
|
+
claude -p --agent knowledge-builder --bare \
|
|
646
|
+
--output-format stream-json --include-partial-messages \
|
|
647
|
+
--allowedTools "Read,Grep" --input-format text
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
每个 KB page 一次 spawn。prompt 通过 stdin 注入,含 routing hints
|
|
651
|
+
(`<page_kind>module</page_kind>` / `<page_kind>cross-module</page_kind>` +
|
|
652
|
+
`<page_name>daemon</page_name>` 等 system-prompt 标签)。agent 解析后,按既定
|
|
653
|
+
模板写 KB body,包在 `---KB---\n<body>\n---END---` envelope 内(每个 page 一个
|
|
654
|
+
envelope,多 page 输出多 envelope 拼接)。host 调 `parseKbBlocks()` 抽 body,
|
|
655
|
+
分发给 module page / cross-module page 的 sink。
|
|
656
|
+
|
|
657
|
+
这种用法**不需要** TUI restart —— 不走 Claude Code 的 Task tool agent registry,
|
|
658
|
+
是 host CLI 直接 spawn `claude` 子进程。
|
|
659
|
+
|
|
660
|
+
#### 方式 2:在 Claude Code TUI 里手动 spawn(调试 / 一次性生成)
|
|
661
|
+
|
|
662
|
+
```
|
|
663
|
+
Task tool subagent_type='knowledge-builder' with prompt:
|
|
664
|
+
"<page_kind>module</page_kind>
|
|
665
|
+
<page_name>daemon</page_name>
|
|
666
|
+
<repo_map>...JSON 片段...</repo_map>
|
|
667
|
+
<source_files>...必要的 ts 源码摘录...</source_files>"
|
|
668
|
+
```
|
|
669
|
+
|
|
670
|
+
agent 返回 `---KB---\n<full md body>\n---END---` envelope。**调用方手动** copy
|
|
671
|
+
body 写入 `.forge-knowledge/modules/daemon.md`。
|
|
672
|
+
|
|
673
|
+
### Routing hints(host 注入到 system prompt)
|
|
674
|
+
|
|
675
|
+
R-B 引入 `withKnowledgeRoutingHints()`(`src/knowledge/cli-provider.ts`):在
|
|
676
|
+
传给 `spawnClaudeCli` 的 `system` 字段拼上:
|
|
677
|
+
|
|
678
|
+
- `<page_kind>module|cross-module</page_kind>` — agent 据此决定输出 JSON
|
|
679
|
+
`{content, refs}`(module page)还是纯 markdown(cross-module page)
|
|
680
|
+
- `<page_name>daemon|architecture|...</page_name>` — agent 据此为 envelope 命名
|
|
681
|
+
|
|
682
|
+
routing hints 通过 system prompt 而不是 prompt body 传,避免污染 LLM 看的
|
|
683
|
+
"用户输入"部分。
|
|
684
|
+
|
|
685
|
+
### 首次使用必读:TUI restart 必要
|
|
686
|
+
|
|
687
|
+
与 `decision-maker` / `skill-distiller` / `claudemd-writer` 同样的 quirk ——
|
|
688
|
+
Claude Code TUI 在**启动时**一次性扫描 `.claude/agents/`,运行中新增的 agent
|
|
689
|
+
不会被自动识别。
|
|
690
|
+
|
|
691
|
+
**首次使用(或更新 template 后)必须重启 TUI**:
|
|
692
|
+
- macOS: `Cmd+R` 或关闭窗口重新打开
|
|
693
|
+
- 重启后验证:在 Task tool 输入 `subagent_type='knowledge-builder'` 不报 not
|
|
694
|
+
found 即可
|
|
695
|
+
|
|
696
|
+
> 注意:方式 1(程序化 `cf knowledge build`)**不受** TUI restart 影响 —— 它
|
|
697
|
+
> 走 `child_process.spawn('claude', ...)`,与 TUI 的 agent registry 无关。
|
|
698
|
+
|
|
699
|
+
### TUI restart 后仍 not found 的 fallback
|
|
700
|
+
|
|
701
|
+
若重启 TUI 后 `subagent_type='knowledge-builder'` 仍报 not found,使用以下
|
|
702
|
+
inline 方式:
|
|
703
|
+
|
|
704
|
+
```
|
|
705
|
+
spawn general-purpose agent with prompt:
|
|
706
|
+
"你扮演 knowledge-builder 角色。Read .claude/agents/knowledge-builder.md
|
|
707
|
+
然后按其 Workflow 执行。
|
|
708
|
+
|
|
709
|
+
输入 tags 如下:
|
|
710
|
+
<page_kind>module</page_kind>
|
|
711
|
+
<page_name>daemon</page_name>
|
|
712
|
+
<repo_map>...</repo_map>
|
|
713
|
+
<source_files>...</source_files>"
|
|
714
|
+
```
|
|
715
|
+
|
|
716
|
+
### Agent 文件三处镜像
|
|
717
|
+
|
|
718
|
+
```
|
|
719
|
+
src/daemon/templates/agents/knowledge-builder.md ← canonical source (git tracked)
|
|
720
|
+
.claude/agents/knowledge-builder.md ← repo mirror (git -f tracked, TUI scan)
|
|
721
|
+
dist/daemon/templates/agents/knowledge-builder.md ← npm payload (build cp produces)
|
|
722
|
+
~/.claude/agents/knowledge-builder.md ← user sync target (agent-sync.ts)
|
|
723
|
+
```
|
|
724
|
+
|
|
725
|
+
修改 agent .md 时**只改 canonical**(`src/daemon/templates/agents/`),然后:
|
|
726
|
+
|
|
727
|
+
```bash
|
|
728
|
+
# 同步到 repo mirror
|
|
729
|
+
cp src/daemon/templates/agents/knowledge-builder.md .claude/agents/knowledge-builder.md
|
|
730
|
+
# build 自动同步到 dist/
|
|
731
|
+
npm run build
|
|
732
|
+
# daemon restart 自动同步到 ~/.claude/agents/
|
|
733
|
+
cf daemon restart
|
|
734
|
+
```
|
|
735
|
+
|
|
736
|
+
repo mirror 与 canonical 必须 **byte-identical**(同 skill-distiller /
|
|
737
|
+
claudemd-writer,CI 不强制,lint 检查计划未来 phase 加入)。
|
|
738
|
+
|
|
739
|
+
### Hard-fail 错误(不会 fallback 到 stub)
|
|
740
|
+
|
|
741
|
+
- `ClaudeCliMissingError` —— PATH 中找不到 `claude` binary,install hint:
|
|
742
|
+
`brew install claude` 或 `npm i -g @anthropic-ai/claude-code`
|
|
743
|
+
- `ClaudeCliExitError` —— 子进程 exit code ≠ 0(stderr snippet 打印)
|
|
744
|
+
- `ClaudeCliTimeoutError` —— 超过 5 分钟未完成(默认 timeout 300_000ms)
|
|
745
|
+
- `ClaudeCliCancelledError` —— 调用方主动 abort
|
|
746
|
+
- `KbBlockMissingError` —— agent 输出缺 `---KB---...---END---` envelope
|
|
747
|
+
(前 300 字符 snippet 打印;通常是 agent template drift,pull 最新
|
|
748
|
+
`.claude/agents/knowledge-builder.md` 后重试)
|
|
749
|
+
|
|
750
|
+
所有错误**直接 exit 1**,不退化到模板(与 R-A 时期临时 `KnowledgeStubError`
|
|
751
|
+
行为不同;R-B 之后 stub 类型保留但永不抛,R-D 将彻底删除)。
|
|
752
|
+
|
|
753
|
+
`src/cli/commands/knowledge.ts` 的 `reportKnowledgeBuildError()` 把这些错误
|
|
754
|
+
映射成 operator-friendly 提示(含 install hint / snippet / 安全行动建议),
|
|
755
|
+
build / init / update 三个 action handler 共享。
|
|
756
|
+
|
|
757
|
+
### `cf knowledge query --strategy rerank` 已下线
|
|
758
|
+
|
|
759
|
+
历史上 v9.3 引入过 Haiku rerank 检索路径(`--strategy rerank` + LRU 缓存 +
|
|
760
|
+
优雅降级)。该路径在 **Spec 2 Stage B(commit `797326f8`)已整组下线**,
|
|
761
|
+
连同 `kb_query_log` 表的 `strategy` / `rerank_cache_hit` / `rerank_failed` 列
|
|
762
|
+
与 `idx_kb_query_log_project_strategy` 索引一起迁移删除。
|
|
763
|
+
|
|
764
|
+
子 spec B R-C 评估时确认:当前 src/ 没有任何活跃的 rerank stub / 入口需要
|
|
765
|
+
接通;本期 R-C **无 rerank 改动**。R-D 评估时如果发现 type 残留再清扫。
|
|
766
|
+
|
|
767
|
+
如果未来要重新引入 AI rerank:应在新 spec 里走 `claude` CLI 子进程 +
|
|
768
|
+
`knowledge-reranker` agent(不要再引入 ClaudeProvider 实例 / API key 依赖)。
|
|
769
|
+
|
|
770
|
+
---
|
|
771
|
+
|
|
772
|
+
## patch-applier agent 使用说明
|
|
773
|
+
|
|
774
|
+
`patch-applier` agent 定义在 `.claude/agents/patch-applier.md`(与
|
|
775
|
+
`src/daemon/templates/agents/patch-applier.md` 完全镜像,agent-sync 启动时
|
|
776
|
+
拷到 `~/.claude/agents/`)。
|
|
777
|
+
|
|
778
|
+
引入背景:spec [`0902`](docs/design/2026-05-29/0902-ai-config-removal-master-spec.md)
|
|
779
|
+
子 spec C — 把 Web `POST /api/patch/preview` 从「daemon 进程内
|
|
780
|
+
`ClaudeProvider.complete()` + 用户配的 `ANTHROPIC_API_KEY`」迁到
|
|
781
|
+
「`child_process.spawn('claude', ...)` headless CLI 子进程」。daemon 自身不再
|
|
782
|
+
持 API key,走用户 Claude Code 订阅计费。
|
|
783
|
+
|
|
784
|
+
### 两种使用方式
|
|
785
|
+
|
|
786
|
+
#### 方式 1:作为 `/api/patch/preview` 的 prompt 模板(程序化调用,默认入口)
|
|
787
|
+
|
|
788
|
+
`src/web/routes/patch.ts` 的 `registerPatchRoutes()` 在每次 POST 时调
|
|
789
|
+
`spawnClaudeCli()`(`src/core/utils/claude-cli-spawn.ts`,与 `claudemd-writer` /
|
|
790
|
+
`knowledge-builder` 共用):
|
|
791
|
+
|
|
792
|
+
```bash
|
|
793
|
+
claude -p --agent patch-applier --bare \
|
|
794
|
+
--output-format stream-json --include-partial-messages \
|
|
795
|
+
--allowedTools "Read,Grep" --input-format text
|
|
796
|
+
```
|
|
797
|
+
|
|
798
|
+
每次 `POST /api/patch/preview` 一次 spawn。stdin 注入由 `buildPatchApplierPrompt()`
|
|
799
|
+
拼接的 tagged blocks:
|
|
800
|
+
|
|
801
|
+
```
|
|
802
|
+
<target_path>agents/decision-maker</target_path>
|
|
803
|
+
<file_content>...current full file content...</file_content>
|
|
804
|
+
<instruction>...natural-language change description...</instruction>
|
|
805
|
+
<context_files></context_files>
|
|
806
|
+
<rationale>...optional reason...</rationale>
|
|
807
|
+
```
|
|
808
|
+
|
|
809
|
+
agent 解析后输出**正好一个** envelope(两种之一,**discriminated union**):
|
|
810
|
+
|
|
811
|
+
- `---PATCH---\n<unified diff>\n---END---` —— 实际可应用的 `patch -p0` 格式 diff
|
|
812
|
+
- `---NOPATCH---\nreason: <短语>\n---END---` —— 拒绝改动(文件已满足要求 /
|
|
813
|
+
指令模糊 / 破坏性 / >50% 行需改写等场景)
|
|
814
|
+
|
|
815
|
+
host 调 `parsePatchEnvelope()` 抽 body:PATCH 优先(双 envelope 同现取 PATCH),
|
|
816
|
+
解析失败抛 `PatchBlockMissingError`。
|
|
817
|
+
|
|
818
|
+
响应 JSON shape:
|
|
819
|
+
|
|
820
|
+
```typescript
|
|
821
|
+
// PATCH 路径
|
|
822
|
+
{ targetType, targetName, filePath, patch: string, recommendation, rationale }
|
|
823
|
+
// NOPATCH 路径
|
|
824
|
+
{ targetType, targetName, filePath, noPatch: true, reason: string, recommendation, rationale }
|
|
825
|
+
```
|
|
826
|
+
|
|
827
|
+
这种用法**不需要** TUI restart —— 不走 Claude Code 的 Task tool agent registry,
|
|
828
|
+
是 host CLI 直接 spawn `claude` 子进程。
|
|
829
|
+
|
|
830
|
+
#### 方式 2:在 Claude Code TUI 里手动 spawn(调试 / 一次性生成)
|
|
831
|
+
|
|
832
|
+
```
|
|
833
|
+
Task tool subagent_type='patch-applier' with prompt:
|
|
834
|
+
"<target_path>src/foo/bar.ts</target_path>
|
|
835
|
+
<file_content>...</file_content>
|
|
836
|
+
<instruction>把 logger.warn 全部换成 logger.error</instruction>
|
|
837
|
+
<context_files></context_files>
|
|
838
|
+
<rationale>warn level 太低,alert 漏触发</rationale>"
|
|
839
|
+
```
|
|
840
|
+
|
|
841
|
+
agent 返回 `---PATCH---\n<diff>\n---END---` 或
|
|
842
|
+
`---NOPATCH---\nreason: ...\n---END---` envelope。**调用方手动** copy diff
|
|
843
|
+
本地 `patch -p0 <` 应用。
|
|
844
|
+
|
|
845
|
+
### 首次使用必读:TUI restart 必要
|
|
846
|
+
|
|
847
|
+
与 `decision-maker` / `skill-distiller` / `claudemd-writer` / `knowledge-builder`
|
|
848
|
+
同样的 quirk —— Claude Code TUI 在**启动时**一次性扫描 `.claude/agents/`,
|
|
849
|
+
运行中新增的 agent 不会被自动识别。
|
|
850
|
+
|
|
851
|
+
**首次使用(或更新 template 后)必须重启 TUI**:
|
|
852
|
+
- macOS: `Cmd+R` 或关闭窗口重新打开
|
|
853
|
+
- 重启后验证:在 Task tool 输入 `subagent_type='patch-applier'` 不报 not
|
|
854
|
+
found 即可
|
|
855
|
+
|
|
856
|
+
> 注意:方式 1(程序化 `/api/patch/preview`)**不受** TUI restart 影响 —— 它
|
|
857
|
+
> 走 `child_process.spawn('claude', ...)`,与 TUI 的 agent registry 无关。
|
|
858
|
+
|
|
859
|
+
### TUI restart 后仍 not found 的 fallback
|
|
860
|
+
|
|
861
|
+
若重启 TUI 后 `subagent_type='patch-applier'` 仍报 not found,使用以下
|
|
862
|
+
inline 方式:
|
|
863
|
+
|
|
864
|
+
```
|
|
865
|
+
spawn general-purpose agent with prompt:
|
|
866
|
+
"你扮演 patch-applier 角色。Read .claude/agents/patch-applier.md
|
|
867
|
+
然后按其 Workflow 执行。
|
|
868
|
+
|
|
869
|
+
输入 tags 如下:
|
|
870
|
+
<target_path>...</target_path>
|
|
871
|
+
<file_content>...</file_content>
|
|
872
|
+
<instruction>...</instruction>
|
|
873
|
+
<context_files>...</context_files>
|
|
874
|
+
<rationale>...</rationale>"
|
|
875
|
+
```
|
|
876
|
+
|
|
877
|
+
### Agent 文件三处镜像
|
|
878
|
+
|
|
879
|
+
```
|
|
880
|
+
src/daemon/templates/agents/patch-applier.md ← canonical source (git tracked)
|
|
881
|
+
.claude/agents/patch-applier.md ← repo mirror (git -f tracked, TUI scan)
|
|
882
|
+
dist/daemon/templates/agents/patch-applier.md ← npm payload (build cp produces)
|
|
883
|
+
~/.claude/agents/patch-applier.md ← user sync target (agent-sync.ts)
|
|
884
|
+
```
|
|
885
|
+
|
|
886
|
+
修改 agent .md 时**只改 canonical**(`src/daemon/templates/agents/`),然后:
|
|
887
|
+
|
|
888
|
+
```bash
|
|
889
|
+
# 同步到 repo mirror
|
|
890
|
+
cp src/daemon/templates/agents/patch-applier.md .claude/agents/patch-applier.md
|
|
891
|
+
# build 自动同步到 dist/
|
|
892
|
+
npm run build
|
|
893
|
+
# daemon restart 自动同步到 ~/.claude/agents/
|
|
894
|
+
cf daemon restart
|
|
895
|
+
```
|
|
896
|
+
|
|
897
|
+
repo mirror 与 canonical 必须 **byte-identical**(同 skill-distiller /
|
|
898
|
+
claudemd-writer / knowledge-builder;CI 不强制,lint 检查计划未来 phase 加入)。
|
|
899
|
+
|
|
900
|
+
### PATCH / NOPATCH 双 envelope 协议(discriminated union 响应)
|
|
901
|
+
|
|
902
|
+
这是 patch-applier 与 claudemd-writer / knowledge-builder 的**关键差异**:
|
|
903
|
+
|
|
904
|
+
| Agent | Envelope | 响应字段 |
|
|
905
|
+
|---|---|---|
|
|
906
|
+
| `claudemd-writer` | 单一 `---CLAUDEMD---...---END---` | 始终是 markdown body |
|
|
907
|
+
| `knowledge-builder` | 多 `---KB---...---END---` 拼接 | 每 page 一个 envelope |
|
|
908
|
+
| `patch-applier` | **二选一** `---PATCH---` 或 `---NOPATCH---` | discriminated union `{patch?, noPatch?, reason?}` |
|
|
909
|
+
|
|
910
|
+
`/api/patch/preview` 响应 shape 的 discriminated union 由 `parsePatchEnvelope()`
|
|
911
|
+
保证:成功路径**恰好返回一个 patch 或一个 noPatch+reason**,调用方判断响应字段:
|
|
912
|
+
|
|
913
|
+
```typescript
|
|
914
|
+
const r = await fetch('/api/patch/preview', { method: 'POST', body: ... });
|
|
915
|
+
const data = await r.json();
|
|
916
|
+
if (data.noPatch) {
|
|
917
|
+
// 拒绝改动,data.reason 显示拒因
|
|
918
|
+
} else if (data.patch) {
|
|
919
|
+
// 拿到 unified diff,调 /api/patch/apply 或本地 patch -p0
|
|
920
|
+
} else {
|
|
921
|
+
// 错误响应(500 / 504 / 499 等),看 data.error / data.message
|
|
922
|
+
}
|
|
923
|
+
```
|
|
924
|
+
|
|
925
|
+
### HTTP 错误码细分(R-B 引入)
|
|
926
|
+
|
|
927
|
+
| code | 错误类型 | 触发场景 |
|
|
928
|
+
|---|---|---|
|
|
929
|
+
| 400 | input validation | targetType / targetName / recommendation 缺失或非法 |
|
|
930
|
+
| 404 | not found | 解析后的 filePath 不存在 |
|
|
931
|
+
| 499 | `ClaudeCliCancelledError` | 调用方主动 abort(HTTP 499 借用 Nginx semantics)|
|
|
932
|
+
| 500 | `ClaudeCliMissingError` | PATH 找不到 `claude` binary(含 install hint) |
|
|
933
|
+
| 500 | `ClaudeCliExitError` | 子进程 exit code ≠ 0(含 stderr snippet) |
|
|
934
|
+
| 500 | `PatchBlockMissingError` | agent 输出缺 envelope(含 200 字符 rawSnippet) |
|
|
935
|
+
| 500 | `PatchSpawnError` | 未识别异常的兜底 |
|
|
936
|
+
| 504 | `ClaudeCliTimeoutError` | 超过 5 分钟未完成(默认 timeout 300_000ms) |
|
|
937
|
+
|
|
938
|
+
所有错误**直接 hard-fail**,不退化到模板(与 R-A 时期临时 `PatchStubError`
|
|
939
|
+
行为不同;R-B 之后 stub 类型保留但永不抛,R-D 将彻底删除)。
|
|
940
|
+
|
|
941
|
+
### 非 SSE 流式决策(R-C 评估结果)
|
|
942
|
+
|
|
943
|
+
R-B 阶段 `runWithChildProcess` 留下了 `spawnClaudeCli.onProgress` 接口未接通,
|
|
944
|
+
R-C 评估是否升级为 SSE 流式(前端能实时累加 diff partial):
|
|
945
|
+
|
|
946
|
+
- 当前 `web/src/` 内置前端**没有任何** `/api/patch` 消费者(`grep -rn "api/patch" web/src` = 0 命中)
|
|
947
|
+
- 加 SSE 会引入 `text/event-stream` + 前端 EventSource 订阅逻辑,复杂度高
|
|
948
|
+
- 子 spec A / B 也未引入 SSE,保持一致
|
|
949
|
+
- **决策:本期 R-C 不加 SSE**,前端如需进度提示可用 spinner + "生成 patch 中..." 文案。
|
|
950
|
+
- 未来若加 patch web UI,可在新 spec 中评估 SSE 升级;spawnClaudeCli 已具
|
|
951
|
+
`onProgress` 接口,桥接 SSE event 较低成本
|
|
952
|
+
|
|
953
|
+
### Hard-fail 错误(不会 fallback 到 stub)
|
|
954
|
+
|
|
955
|
+
- `ClaudeCliMissingError` —— PATH 中找不到 `claude` binary,install hint:
|
|
956
|
+
`brew install claude` 或 `npm i -g @anthropic-ai/claude-code`
|
|
957
|
+
- `ClaudeCliExitError` —— 子进程 exit code ≠ 0(stderr snippet 打印)
|
|
958
|
+
- `ClaudeCliTimeoutError` —— 超过 5 分钟未完成
|
|
959
|
+
- `ClaudeCliCancelledError` —— 调用方主动 abort
|
|
960
|
+
- `PatchBlockMissingError` —— agent 输出缺 `---PATCH---...---END---` 或
|
|
961
|
+
`---NOPATCH---...---END---` envelope(前 200 字符 snippet 入响应 JSON;
|
|
962
|
+
通常是 agent template drift,pull 最新 `.claude/agents/patch-applier.md`
|
|
963
|
+
后重试)
|
|
964
|
+
|
|
965
|
+
> `PatchStubError` 仍作 `@deprecated` named export 保留(R-A → R-D 兼容窗口),
|
|
966
|
+
> R-B 之后永不被抛;R-D 删除整个类 + tests/unit/web/routes/patch.test.ts 中
|
|
967
|
+
> `PatchStubError` describe 块。
|
|
968
|
+
|
|
969
|
+
---
|
|
970
|
+
|
|
355
971
|
## 故障排查
|
|
356
972
|
|
|
357
973
|
| 现象 | 排查 |
|
|
@@ -359,7 +975,7 @@ version: 1.0.0
|
|
|
359
975
|
| Hook 没触发 | `ls -la ~/.claude/hooks/` 看是否指向 `dist/hooks/`;缺失就跑 `cf init`;或重启 daemon 让 `syncHooks()` 自动补 |
|
|
360
976
|
| daemon 启动报 `EADDRINUSE` | 上次进程没退;`cf daemon stop` 或 `lsof -i :3721` 找 pid 杀 |
|
|
361
977
|
| Web 后台 404 | `dist/web/static/` 是否存在;`npm run build` 是否成功;Vite 前端 `cd web && npm run build` 后再 root build |
|
|
362
|
-
| Skill 没被推荐 | `cf skills list` 看是否加载;frontmatter 检查是否缺 `name`
|
|
978
|
+
| Skill 没被推荐 | `cf skills list` 看是否加载;frontmatter 检查是否缺 `name` 字段。**注**:语义匹配 (`SemanticSkillMatcher`) 已在 spec `0902` 子 spec D R-B 删除,现在仅 keyword 匹配 — 确保 skill frontmatter 的 `keywords: [...]` 列表覆盖关键词 |
|
|
363
979
|
| `cf skills upgrade` 无候选 | `~/.claude-forge/skill-candidates/` 是否拉成功;网络问题用代理重试 |
|
|
364
980
|
| better-sqlite3 native binding error | Node 版本与 binding 不匹配;`npm rebuild better-sqlite3` |
|
|
365
981
|
| Schema 改动后查不到字段 | 手动加 `src/core/storage/migrations/<n>_<desc>.sql`,daemon 启动会自动执行 |
|