@winspan/claude-forge 8.54.4 → 9.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DEVELOPMENT.md +723 -46
- package/README.md +166 -21
- package/dist/catalogs/agents.json +67 -0
- package/dist/catalogs/skills.json +306 -0
- package/dist/claudemd/claudemd-generator.d.ts +45 -45
- package/dist/claudemd/claudemd-generator.d.ts.map +1 -1
- package/dist/claudemd/claudemd-generator.js +128 -449
- package/dist/claudemd/claudemd-generator.js.map +1 -1
- package/dist/claudemd/index.d.ts +14 -4
- package/dist/claudemd/index.d.ts.map +1 -1
- package/dist/claudemd/index.js +15 -4
- package/dist/claudemd/index.js.map +1 -1
- package/dist/claudemd/resume-manager.d.ts.map +1 -1
- package/dist/claudemd/resume-manager.js +37 -9
- package/dist/claudemd/resume-manager.js.map +1 -1
- package/dist/claudemd/templates/swarm-protocol.md +35 -186
- package/dist/claudemd/violations-manager.d.ts +40 -0
- package/dist/claudemd/violations-manager.d.ts.map +1 -0
- package/dist/claudemd/violations-manager.js +106 -0
- package/dist/claudemd/violations-manager.js.map +1 -0
- package/dist/cli/commands/admin.d.ts +15 -0
- package/dist/cli/commands/admin.d.ts.map +1 -0
- package/dist/cli/commands/admin.js +177 -0
- package/dist/cli/commands/admin.js.map +1 -0
- package/dist/cli/commands/agent.d.ts +169 -0
- package/dist/cli/commands/agent.d.ts.map +1 -0
- package/dist/cli/commands/agent.js +690 -0
- package/dist/cli/commands/agent.js.map +1 -0
- package/dist/cli/commands/agents.d.ts +18 -0
- package/dist/cli/commands/agents.d.ts.map +1 -0
- package/dist/cli/commands/agents.js +160 -0
- package/dist/cli/commands/agents.js.map +1 -0
- package/dist/cli/commands/bypass.d.ts +18 -0
- package/dist/cli/commands/bypass.d.ts.map +1 -0
- package/dist/cli/commands/bypass.js +87 -0
- package/dist/cli/commands/bypass.js.map +1 -0
- package/dist/cli/commands/claudemd.d.ts +60 -0
- package/dist/cli/commands/claudemd.d.ts.map +1 -1
- package/dist/cli/commands/claudemd.js +174 -37
- package/dist/cli/commands/claudemd.js.map +1 -1
- package/dist/cli/commands/codegraph.d.ts +17 -0
- package/dist/cli/commands/codegraph.d.ts.map +1 -0
- package/dist/cli/commands/codegraph.js +263 -0
- package/dist/cli/commands/codegraph.js.map +1 -0
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +94 -1
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/daemon.d.ts +39 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -1
- package/dist/cli/commands/daemon.js +167 -20
- package/dist/cli/commands/daemon.js.map +1 -1
- package/dist/cli/commands/decisions.d.ts +129 -0
- package/dist/cli/commands/decisions.d.ts.map +1 -0
- package/dist/cli/commands/decisions.js +706 -0
- package/dist/cli/commands/decisions.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +29 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +124 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/entropy.d.ts +35 -0
- package/dist/cli/commands/entropy.d.ts.map +1 -0
- package/dist/cli/commands/entropy.js +121 -0
- package/dist/cli/commands/entropy.js.map +1 -0
- package/dist/cli/commands/executions.d.ts +1 -0
- package/dist/cli/commands/executions.d.ts.map +1 -1
- package/dist/cli/commands/executions.js +12 -2
- package/dist/cli/commands/executions.js.map +1 -1
- package/dist/cli/commands/fix.d.ts +31 -0
- package/dist/cli/commands/fix.d.ts.map +1 -0
- package/dist/cli/commands/fix.js +108 -0
- package/dist/cli/commands/fix.js.map +1 -0
- package/dist/cli/commands/governance.d.ts +21 -0
- package/dist/cli/commands/governance.d.ts.map +1 -0
- package/dist/cli/commands/governance.js +60 -0
- package/dist/cli/commands/governance.js.map +1 -0
- package/dist/cli/commands/init.d.ts +27 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +158 -146
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/insights-goal-check.d.ts +54 -0
- package/dist/cli/commands/insights-goal-check.d.ts.map +1 -0
- package/dist/cli/commands/insights-goal-check.js +318 -0
- package/dist/cli/commands/insights-goal-check.js.map +1 -0
- package/dist/cli/commands/insights.d.ts +15 -0
- package/dist/cli/commands/insights.d.ts.map +1 -0
- package/dist/cli/commands/insights.js +127 -0
- package/dist/cli/commands/insights.js.map +1 -0
- package/dist/cli/commands/knowledge.d.ts +117 -0
- package/dist/cli/commands/knowledge.d.ts.map +1 -0
- package/dist/cli/commands/knowledge.js +1070 -0
- package/dist/cli/commands/knowledge.js.map +1 -0
- package/dist/cli/commands/loop.d.ts +95 -0
- package/dist/cli/commands/loop.d.ts.map +1 -0
- package/dist/cli/commands/loop.js +408 -0
- package/dist/cli/commands/loop.js.map +1 -0
- package/dist/cli/commands/maintenance.d.ts +33 -0
- package/dist/cli/commands/maintenance.d.ts.map +1 -0
- package/dist/cli/commands/maintenance.js +75 -0
- package/dist/cli/commands/maintenance.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +22 -11
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +93 -5
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/menu.d.ts.map +1 -1
- package/dist/cli/commands/menu.js +10 -184
- package/dist/cli/commands/menu.js.map +1 -1
- package/dist/cli/commands/project.d.ts +98 -0
- package/dist/cli/commands/project.d.ts.map +1 -0
- package/dist/cli/commands/project.js +382 -0
- package/dist/cli/commands/project.js.map +1 -0
- package/dist/cli/commands/skills.d.ts +131 -0
- package/dist/cli/commands/skills.d.ts.map +1 -1
- package/dist/cli/commands/skills.js +404 -118
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/spec.d.ts +40 -0
- package/dist/cli/commands/spec.d.ts.map +1 -0
- package/dist/cli/commands/spec.js +49 -0
- package/dist/cli/commands/spec.js.map +1 -0
- package/dist/cli/commands/stats.d.ts.map +1 -1
- package/dist/cli/commands/stats.js +11 -3
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +17 -2
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/trace.d.ts.map +1 -1
- package/dist/cli/commands/trace.js +4 -9
- package/dist/cli/commands/trace.js.map +1 -1
- package/dist/cli/commands/violations.d.ts +14 -0
- package/dist/cli/commands/violations.d.ts.map +1 -0
- package/dist/cli/commands/violations.js +43 -0
- package/dist/cli/commands/violations.js.map +1 -0
- package/dist/cli/index.js +34 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/hook-manager.d.ts +1 -1
- package/dist/cli/init/hook-manager.d.ts.map +1 -1
- package/dist/cli/init/hook-manager.js +6 -0
- package/dist/cli/init/hook-manager.js.map +1 -1
- package/dist/cli/utils/resolve-session.d.ts +32 -0
- package/dist/cli/utils/resolve-session.d.ts.map +1 -0
- package/dist/cli/utils/resolve-session.js +39 -0
- package/dist/cli/utils/resolve-session.js.map +1 -0
- package/dist/core/config.d.ts +4 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +11 -23
- package/dist/core/config.js.map +1 -1
- package/dist/core/constants.d.ts +51 -13
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +63 -13
- package/dist/core/constants.js.map +1 -1
- package/dist/core/diagnostics/checks.d.ts +151 -0
- package/dist/core/diagnostics/checks.d.ts.map +1 -0
- package/dist/core/diagnostics/checks.js +766 -0
- package/dist/core/diagnostics/checks.js.map +1 -0
- package/dist/core/diagnostics/daemon-status.d.ts +77 -0
- package/dist/core/diagnostics/daemon-status.d.ts.map +1 -0
- package/dist/core/diagnostics/daemon-status.js +113 -0
- package/dist/core/diagnostics/daemon-status.js.map +1 -0
- package/dist/core/diagnostics/entropy-checks.d.ts +83 -0
- package/dist/core/diagnostics/entropy-checks.d.ts.map +1 -0
- package/dist/core/diagnostics/entropy-checks.js +400 -0
- package/dist/core/diagnostics/entropy-checks.js.map +1 -0
- package/dist/core/diagnostics/fix-runner.d.ts +54 -0
- package/dist/core/diagnostics/fix-runner.d.ts.map +1 -0
- package/dist/core/diagnostics/fix-runner.js +90 -0
- package/dist/core/diagnostics/fix-runner.js.map +1 -0
- package/dist/core/diagnostics/heartbeat-reader.d.ts +28 -0
- package/dist/core/diagnostics/heartbeat-reader.d.ts.map +1 -0
- package/dist/core/diagnostics/heartbeat-reader.js +50 -0
- package/dist/core/diagnostics/heartbeat-reader.js.map +1 -0
- package/dist/core/diagnostics/knip-runner.d.ts +49 -0
- package/dist/core/diagnostics/knip-runner.d.ts.map +1 -0
- package/dist/core/diagnostics/knip-runner.js +100 -0
- package/dist/core/diagnostics/knip-runner.js.map +1 -0
- package/dist/core/diagnostics/markers.d.ts +96 -0
- package/dist/core/diagnostics/markers.d.ts.map +1 -0
- package/dist/core/diagnostics/markers.js +153 -0
- package/dist/core/diagnostics/markers.js.map +1 -0
- package/dist/core/event-fields.d.ts +27 -0
- package/dist/core/event-fields.d.ts.map +1 -1
- package/dist/core/event-fields.js +43 -0
- package/dist/core/event-fields.js.map +1 -1
- package/dist/core/governance/global-inject.d.ts +90 -0
- package/dist/core/governance/global-inject.d.ts.map +1 -0
- package/dist/core/governance/global-inject.js +184 -0
- package/dist/core/governance/global-inject.js.map +1 -0
- package/dist/core/insights/agent-anchor-guard.d.ts +77 -0
- package/dist/core/insights/agent-anchor-guard.d.ts.map +1 -0
- package/dist/core/insights/agent-anchor-guard.js +119 -0
- package/dist/core/insights/agent-anchor-guard.js.map +1 -0
- package/dist/core/insights/agent-distill-context.d.ts +55 -0
- package/dist/core/insights/agent-distill-context.d.ts.map +1 -0
- package/dist/core/insights/agent-distill-context.js +146 -0
- package/dist/core/insights/agent-distill-context.js.map +1 -0
- package/dist/core/insights/agent-distill-spawn.d.ts +56 -0
- package/dist/core/insights/agent-distill-spawn.d.ts.map +1 -0
- package/dist/core/insights/agent-distill-spawn.js +179 -0
- package/dist/core/insights/agent-distill-spawn.js.map +1 -0
- package/dist/core/insights/agent-drift.d.ts +66 -0
- package/dist/core/insights/agent-drift.d.ts.map +1 -0
- package/dist/core/insights/agent-drift.js +109 -0
- package/dist/core/insights/agent-drift.js.map +1 -0
- package/dist/core/insights/agent-evolution-sources.d.ts +21 -0
- package/dist/core/insights/agent-evolution-sources.d.ts.map +1 -0
- package/dist/core/insights/agent-evolution-sources.js +36 -0
- package/dist/core/insights/agent-evolution-sources.js.map +1 -0
- package/dist/core/insights/agent-health.d.ts +142 -0
- package/dist/core/insights/agent-health.d.ts.map +1 -0
- package/dist/core/insights/agent-health.js +296 -0
- package/dist/core/insights/agent-health.js.map +1 -0
- package/dist/core/insights/agent-patch-apply.d.ts +45 -0
- package/dist/core/insights/agent-patch-apply.d.ts.map +1 -0
- package/dist/core/insights/agent-patch-apply.js +165 -0
- package/dist/core/insights/agent-patch-apply.js.map +1 -0
- package/dist/core/insights/agent-suggest.d.ts +128 -0
- package/dist/core/insights/agent-suggest.d.ts.map +1 -0
- package/dist/core/insights/agent-suggest.js +284 -0
- package/dist/core/insights/agent-suggest.js.map +1 -0
- package/dist/core/insights/coverage-tiers.d.ts +46 -0
- package/dist/core/insights/coverage-tiers.d.ts.map +1 -0
- package/dist/core/insights/coverage-tiers.js +95 -0
- package/dist/core/insights/coverage-tiers.js.map +1 -0
- package/dist/core/insights/experience-extractor.d.ts +60 -0
- package/dist/core/insights/experience-extractor.d.ts.map +1 -0
- package/dist/core/insights/experience-extractor.js +319 -0
- package/dist/core/insights/experience-extractor.js.map +1 -0
- package/dist/core/insights/violation-reporter.d.ts +149 -0
- package/dist/core/insights/violation-reporter.d.ts.map +1 -0
- package/dist/core/insights/violation-reporter.js +391 -0
- package/dist/core/insights/violation-reporter.js.map +1 -0
- package/dist/core/loop/loop-engine.d.ts +140 -0
- package/dist/core/loop/loop-engine.d.ts.map +1 -0
- package/dist/core/loop/loop-engine.js +266 -0
- package/dist/core/loop/loop-engine.js.map +1 -0
- package/dist/core/queue/index.d.ts +16 -3
- package/dist/core/queue/index.d.ts.map +1 -1
- package/dist/core/queue/index.js +16 -4
- package/dist/core/queue/index.js.map +1 -1
- package/dist/core/storage/base.d.ts +317 -0
- package/dist/core/storage/base.d.ts.map +1 -1
- package/dist/core/storage/base.js +1093 -0
- package/dist/core/storage/base.js.map +1 -1
- package/dist/core/storage/codec/tool-input-codec.d.ts +93 -0
- package/dist/core/storage/codec/tool-input-codec.d.ts.map +1 -0
- package/dist/core/storage/codec/tool-input-codec.js +159 -0
- package/dist/core/storage/codec/tool-input-codec.js.map +1 -0
- package/dist/core/storage/codegraph-types.d.ts +79 -0
- package/dist/core/storage/codegraph-types.d.ts.map +1 -0
- package/dist/core/storage/codegraph-types.js +14 -0
- package/dist/core/storage/codegraph-types.js.map +1 -0
- package/dist/core/storage/codegraph.d.ts +186 -0
- package/dist/core/storage/codegraph.d.ts.map +1 -0
- package/dist/core/storage/codegraph.js +452 -0
- package/dist/core/storage/codegraph.js.map +1 -0
- package/dist/core/storage/decisions.d.ts +387 -0
- package/dist/core/storage/decisions.d.ts.map +1 -0
- package/dist/core/storage/decisions.js +534 -0
- package/dist/core/storage/decisions.js.map +1 -0
- package/dist/core/storage/events.d.ts +239 -8
- package/dist/core/storage/events.d.ts.map +1 -1
- package/dist/core/storage/events.js +705 -39
- package/dist/core/storage/events.js.map +1 -1
- package/dist/core/storage/feedback.d.ts +111 -0
- package/dist/core/storage/feedback.d.ts.map +1 -0
- package/dist/core/storage/feedback.js +186 -0
- package/dist/core/storage/feedback.js.map +1 -0
- package/dist/core/storage/forge-config.d.ts +40 -0
- package/dist/core/storage/forge-config.d.ts.map +1 -0
- package/dist/core/storage/forge-config.js +65 -0
- package/dist/core/storage/forge-config.js.map +1 -0
- package/dist/core/storage/injections.d.ts +68 -0
- package/dist/core/storage/injections.d.ts.map +1 -1
- package/dist/core/storage/injections.js +131 -5
- package/dist/core/storage/injections.js.map +1 -1
- package/dist/core/storage/knowledge.d.ts +332 -0
- package/dist/core/storage/knowledge.d.ts.map +1 -0
- package/dist/core/storage/knowledge.js +589 -0
- package/dist/core/storage/knowledge.js.map +1 -0
- package/dist/core/storage/maintenance.d.ts +36 -9
- package/dist/core/storage/maintenance.d.ts.map +1 -1
- package/dist/core/storage/maintenance.js +56 -24
- package/dist/core/storage/maintenance.js.map +1 -1
- package/dist/core/storage/pipeline-rollup.d.ts +111 -0
- package/dist/core/storage/pipeline-rollup.d.ts.map +1 -0
- package/dist/core/storage/pipeline-rollup.js +432 -0
- package/dist/core/storage/pipeline-rollup.js.map +1 -0
- package/dist/core/storage/routing.d.ts +50 -3
- package/dist/core/storage/routing.d.ts.map +1 -1
- package/dist/core/storage/routing.js +131 -10
- package/dist/core/storage/routing.js.map +1 -1
- package/dist/core/storage/rows.d.ts +31 -8
- package/dist/core/storage/rows.d.ts.map +1 -1
- package/dist/core/storage/schema.sql +367 -23
- package/dist/core/storage/sessions.d.ts +136 -0
- package/dist/core/storage/sessions.d.ts.map +1 -1
- package/dist/core/storage/sessions.js +352 -15
- package/dist/core/storage/sessions.js.map +1 -1
- package/dist/core/storage/skills.d.ts +160 -0
- package/dist/core/storage/skills.d.ts.map +1 -1
- package/dist/core/storage/skills.js +368 -7
- package/dist/core/storage/skills.js.map +1 -1
- package/dist/core/storage/sqlite.d.ts +309 -20
- package/dist/core/storage/sqlite.d.ts.map +1 -1
- package/dist/core/storage/sqlite.js +523 -16
- package/dist/core/storage/sqlite.js.map +1 -1
- package/dist/core/storage/tasks.d.ts +744 -2
- package/dist/core/storage/tasks.d.ts.map +1 -1
- package/dist/core/storage/tasks.js +1691 -17
- package/dist/core/storage/tasks.js.map +1 -1
- package/dist/core/storage/tool-intercepts.d.ts +69 -0
- package/dist/core/storage/tool-intercepts.d.ts.map +1 -0
- package/dist/core/storage/tool-intercepts.js +116 -0
- package/dist/core/storage/tool-intercepts.js.map +1 -0
- package/dist/core/types.d.ts +136 -18
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +10 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/utils/backup.d.ts +81 -0
- package/dist/core/utils/backup.d.ts.map +1 -0
- package/dist/core/utils/backup.js +98 -0
- package/dist/core/utils/backup.js.map +1 -0
- package/dist/core/utils/binary-paths.d.ts +124 -0
- package/dist/core/utils/binary-paths.d.ts.map +1 -0
- package/dist/core/utils/binary-paths.js +218 -0
- package/dist/core/utils/binary-paths.js.map +1 -0
- package/dist/core/utils/bypass-token.d.ts +75 -0
- package/dist/core/utils/bypass-token.d.ts.map +1 -0
- package/dist/core/utils/bypass-token.js +133 -0
- package/dist/core/utils/bypass-token.js.map +1 -0
- package/dist/core/utils/cc-builtin-agents.d.ts +3 -0
- package/dist/core/utils/cc-builtin-agents.d.ts.map +1 -0
- package/dist/core/utils/cc-builtin-agents.js +29 -0
- package/dist/core/utils/cc-builtin-agents.js.map +1 -0
- package/dist/core/utils/claude-cli-resolver.d.ts +26 -0
- package/dist/core/utils/claude-cli-resolver.d.ts.map +1 -0
- package/dist/core/utils/claude-cli-resolver.js +115 -0
- package/dist/core/utils/claude-cli-resolver.js.map +1 -0
- package/dist/core/utils/claude-cli-spawn.d.ts +106 -0
- package/dist/core/utils/claude-cli-spawn.d.ts.map +1 -0
- package/dist/core/utils/claude-cli-spawn.js +219 -0
- package/dist/core/utils/claude-cli-spawn.js.map +1 -0
- package/dist/core/utils/forge-resume-block.d.ts.map +1 -1
- package/dist/core/utils/forge-resume-block.js +3 -2
- package/dist/core/utils/forge-resume-block.js.map +1 -1
- package/dist/core/utils/logger.d.ts +15 -3
- package/dist/core/utils/logger.d.ts.map +1 -1
- package/dist/core/utils/logger.js +20 -2
- package/dist/core/utils/logger.js.map +1 -1
- package/dist/core/utils/noise-prompt.d.ts +97 -0
- package/dist/core/utils/noise-prompt.d.ts.map +1 -0
- package/dist/core/utils/noise-prompt.js +127 -0
- package/dist/core/utils/noise-prompt.js.map +1 -0
- package/dist/core/utils/path.d.ts +0 -4
- package/dist/core/utils/path.d.ts.map +1 -1
- package/dist/core/utils/path.js +0 -7
- package/dist/core/utils/path.js.map +1 -1
- package/dist/core/utils/time.d.ts +67 -0
- package/dist/core/utils/time.d.ts.map +1 -1
- package/dist/core/utils/time.js +147 -0
- package/dist/core/utils/time.js.map +1 -1
- package/dist/daemon/agent-sync.d.ts +24 -0
- package/dist/daemon/agent-sync.d.ts.map +1 -0
- package/dist/daemon/agent-sync.js +114 -0
- package/dist/daemon/agent-sync.js.map +1 -0
- package/dist/daemon/config-store.d.ts +55 -0
- package/dist/daemon/config-store.d.ts.map +1 -0
- package/dist/daemon/config-store.js +146 -0
- package/dist/daemon/config-store.js.map +1 -0
- package/dist/daemon/event-parser.d.ts +22 -0
- package/dist/daemon/event-parser.d.ts.map +1 -1
- package/dist/daemon/event-parser.js +54 -3
- package/dist/daemon/event-parser.js.map +1 -1
- package/dist/daemon/handlers/history-exporter.d.ts.map +1 -1
- package/dist/daemon/handlers/history-exporter.js +9 -8
- package/dist/daemon/handlers/history-exporter.js.map +1 -1
- package/dist/daemon/handlers/post-tool-use.d.ts +66 -4
- package/dist/daemon/handlers/post-tool-use.d.ts.map +1 -1
- package/dist/daemon/handlers/post-tool-use.js +221 -8
- package/dist/daemon/handlers/post-tool-use.js.map +1 -1
- package/dist/daemon/handlers/pre-tool-use.d.ts +181 -0
- package/dist/daemon/handlers/pre-tool-use.d.ts.map +1 -0
- package/dist/daemon/handlers/pre-tool-use.js +618 -0
- package/dist/daemon/handlers/pre-tool-use.js.map +1 -0
- package/dist/daemon/handlers/stop.d.ts +55 -7
- package/dist/daemon/handlers/stop.d.ts.map +1 -1
- package/dist/daemon/handlers/stop.js +245 -8
- package/dist/daemon/handlers/stop.js.map +1 -1
- package/dist/daemon/handlers/user-prompt.d.ts +51 -14
- package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
- package/dist/daemon/handlers/user-prompt.js +223 -95
- package/dist/daemon/handlers/user-prompt.js.map +1 -1
- package/dist/daemon/handlers/violation-content-backfill.d.ts +76 -0
- package/dist/daemon/handlers/violation-content-backfill.d.ts.map +1 -0
- package/dist/daemon/handlers/violation-content-backfill.js +167 -0
- package/dist/daemon/handlers/violation-content-backfill.js.map +1 -0
- package/dist/daemon/hook-sync.d.ts.map +1 -1
- package/dist/daemon/hook-sync.js +2 -1
- package/dist/daemon/hook-sync.js.map +1 -1
- package/dist/daemon/index.d.ts +19 -0
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +439 -86
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/lifecycle.d.ts +48 -1
- package/dist/daemon/lifecycle.d.ts.map +1 -1
- package/dist/daemon/lifecycle.js +98 -2
- package/dist/daemon/lifecycle.js.map +1 -1
- package/dist/daemon/router.d.ts +4 -1
- package/dist/daemon/router.d.ts.map +1 -1
- package/dist/daemon/router.js +4 -2
- package/dist/daemon/router.js.map +1 -1
- package/dist/daemon/rules/defaults.d.ts +20 -0
- package/dist/daemon/rules/defaults.d.ts.map +1 -0
- package/dist/daemon/rules/defaults.js +779 -0
- package/dist/daemon/rules/defaults.js.map +1 -0
- package/dist/daemon/rules/registry.d.ts +47 -0
- package/dist/daemon/rules/registry.d.ts.map +1 -0
- package/dist/daemon/rules/registry.js +84 -0
- package/dist/daemon/rules/registry.js.map +1 -0
- package/dist/daemon/rules/types.d.ts +176 -0
- package/dist/daemon/rules/types.d.ts.map +1 -0
- package/dist/daemon/rules/types.js +15 -0
- package/dist/daemon/rules/types.js.map +1 -0
- package/dist/daemon/rules/whitelist.d.ts +101 -0
- package/dist/daemon/rules/whitelist.d.ts.map +1 -0
- package/dist/daemon/rules/whitelist.js +210 -0
- package/dist/daemon/rules/whitelist.js.map +1 -0
- package/dist/daemon/rules/workflow-defaults.d.ts +52 -0
- package/dist/daemon/rules/workflow-defaults.d.ts.map +1 -0
- package/dist/daemon/rules/workflow-defaults.js +521 -0
- package/dist/daemon/rules/workflow-defaults.js.map +1 -0
- package/dist/daemon/server.d.ts +11 -1
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +7 -1
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/services/codegraph-sync.d.ts +94 -0
- package/dist/daemon/services/codegraph-sync.d.ts.map +1 -0
- package/dist/daemon/services/codegraph-sync.js +159 -0
- package/dist/daemon/services/codegraph-sync.js.map +1 -0
- package/dist/daemon/services/context-injector.d.ts +34 -0
- package/dist/daemon/services/context-injector.d.ts.map +1 -0
- package/dist/daemon/services/context-injector.js +61 -0
- package/dist/daemon/services/context-injector.js.map +1 -0
- package/dist/daemon/services/decision-hint.d.ts +240 -0
- package/dist/daemon/services/decision-hint.d.ts.map +1 -0
- package/dist/daemon/services/decision-hint.js +562 -0
- package/dist/daemon/services/decision-hint.js.map +1 -0
- package/dist/daemon/services/event-ttl-sweep.d.ts +86 -0
- package/dist/daemon/services/event-ttl-sweep.d.ts.map +1 -0
- package/dist/daemon/services/event-ttl-sweep.js +124 -0
- package/dist/daemon/services/event-ttl-sweep.js.map +1 -0
- package/dist/daemon/services/feedback-aggregator.d.ts +167 -0
- package/dist/daemon/services/feedback-aggregator.d.ts.map +1 -0
- package/dist/daemon/services/feedback-aggregator.js +415 -0
- package/dist/daemon/services/feedback-aggregator.js.map +1 -0
- package/dist/daemon/services/heartbeat-writer.d.ts +46 -0
- package/dist/daemon/services/heartbeat-writer.d.ts.map +1 -0
- package/dist/daemon/services/heartbeat-writer.js +82 -0
- package/dist/daemon/services/heartbeat-writer.js.map +1 -0
- package/dist/daemon/services/idle-session-sweeper.d.ts +61 -0
- package/dist/daemon/services/idle-session-sweeper.d.ts.map +1 -0
- package/dist/daemon/services/idle-session-sweeper.js +94 -0
- package/dist/daemon/services/idle-session-sweeper.js.map +1 -0
- package/dist/daemon/services/idle-task-budget.d.ts +50 -0
- package/dist/daemon/services/idle-task-budget.d.ts.map +1 -0
- package/dist/daemon/services/idle-task-budget.js +72 -0
- package/dist/daemon/services/idle-task-budget.js.map +1 -0
- package/dist/daemon/services/intercept-revive.d.ts +60 -0
- package/dist/daemon/services/intercept-revive.d.ts.map +1 -0
- package/dist/daemon/services/intercept-revive.js +86 -0
- package/dist/daemon/services/intercept-revive.js.map +1 -0
- package/dist/daemon/services/intercept-rollback-guard.d.ts +105 -0
- package/dist/daemon/services/intercept-rollback-guard.d.ts.map +1 -0
- package/dist/daemon/services/intercept-rollback-guard.js +152 -0
- package/dist/daemon/services/intercept-rollback-guard.js.map +1 -0
- package/dist/daemon/services/intercept-timeout-sweeper.d.ts +58 -0
- package/dist/daemon/services/intercept-timeout-sweeper.d.ts.map +1 -0
- package/dist/daemon/services/intercept-timeout-sweeper.js +83 -0
- package/dist/daemon/services/intercept-timeout-sweeper.js.map +1 -0
- package/dist/daemon/services/kb-injector.d.ts +57 -0
- package/dist/daemon/services/kb-injector.d.ts.map +1 -0
- package/dist/daemon/services/kb-injector.js +148 -0
- package/dist/daemon/services/kb-injector.js.map +1 -0
- package/dist/daemon/services/kb-rebuild-scheduler.d.ts +95 -0
- package/dist/daemon/services/kb-rebuild-scheduler.d.ts.map +1 -0
- package/dist/daemon/services/kb-rebuild-scheduler.js +149 -0
- package/dist/daemon/services/kb-rebuild-scheduler.js.map +1 -0
- package/dist/daemon/services/loop-hint.d.ts +139 -0
- package/dist/daemon/services/loop-hint.d.ts.map +1 -0
- package/dist/daemon/services/loop-hint.js +272 -0
- package/dist/daemon/services/loop-hint.js.map +1 -0
- package/dist/daemon/services/outcome-classification-service.d.ts +49 -0
- package/dist/daemon/services/outcome-classification-service.d.ts.map +1 -0
- package/dist/daemon/services/outcome-classification-service.js +214 -0
- package/dist/daemon/services/outcome-classification-service.js.map +1 -0
- package/dist/daemon/services/outcome-classifier.d.ts +136 -0
- package/dist/daemon/services/outcome-classifier.d.ts.map +1 -0
- package/dist/daemon/services/outcome-classifier.js +178 -0
- package/dist/daemon/services/outcome-classifier.js.map +1 -0
- package/dist/daemon/services/outcome-nudge.d.ts +107 -0
- package/dist/daemon/services/outcome-nudge.d.ts.map +1 -0
- package/dist/daemon/services/outcome-nudge.js +242 -0
- package/dist/daemon/services/outcome-nudge.js.map +1 -0
- package/dist/daemon/services/spec-approval.d.ts +127 -0
- package/dist/daemon/services/spec-approval.d.ts.map +1 -0
- package/dist/daemon/services/spec-approval.js +216 -0
- package/dist/daemon/services/spec-approval.js.map +1 -0
- package/dist/daemon/services/spec-gate.d.ts +54 -0
- package/dist/daemon/services/spec-gate.d.ts.map +1 -0
- package/dist/daemon/services/spec-gate.js +113 -0
- package/dist/daemon/services/spec-gate.js.map +1 -0
- package/dist/daemon/services/task-boundary-classifier.d.ts +78 -0
- package/dist/daemon/services/task-boundary-classifier.d.ts.map +1 -0
- package/dist/daemon/services/task-boundary-classifier.js +202 -0
- package/dist/daemon/services/task-boundary-classifier.js.map +1 -0
- package/dist/daemon/services/task-segmenter.d.ts +230 -1
- package/dist/daemon/services/task-segmenter.d.ts.map +1 -1
- package/dist/daemon/services/task-segmenter.js +527 -17
- package/dist/daemon/services/task-segmenter.js.map +1 -1
- package/dist/daemon/skill-sync.d.ts +7 -2
- package/dist/daemon/skill-sync.d.ts.map +1 -1
- package/dist/daemon/skill-sync.js +114 -9
- package/dist/daemon/skill-sync.js.map +1 -1
- package/dist/daemon/startup/maintenance-schedulers.d.ts +68 -0
- package/dist/daemon/startup/maintenance-schedulers.d.ts.map +1 -0
- package/dist/daemon/startup/maintenance-schedulers.js +294 -0
- package/dist/daemon/startup/maintenance-schedulers.js.map +1 -0
- package/dist/daemon/templates/agents/agent-retro-distiller.md +106 -0
- package/dist/daemon/templates/agents/claudemd-writer.md +102 -0
- package/dist/daemon/templates/agents/coder.md +262 -0
- package/dist/daemon/templates/agents/decision-maker.md +546 -0
- package/dist/daemon/templates/agents/doc-reviewer.md +118 -0
- package/dist/daemon/templates/agents/harness-debug-full.md +196 -0
- package/dist/daemon/templates/agents/knowledge-builder.md +120 -0
- package/dist/daemon/templates/agents/patch-applier.md +145 -0
- package/dist/daemon/templates/agents/planner.md +217 -0
- package/dist/daemon/templates/agents/safety-net-implementer.md +278 -0
- package/dist/daemon/templates/agents/skill-distiller.md +114 -0
- package/dist/daemon/templates/agents/task-boundary-classifier.md +65 -0
- package/dist/daemon/templates/agents/verify-agent.md +259 -0
- package/dist/daemon/utils/inject-block.d.ts +39 -0
- package/dist/daemon/utils/inject-block.d.ts.map +1 -0
- package/dist/daemon/utils/inject-block.js +25 -0
- package/dist/daemon/utils/inject-block.js.map +1 -0
- package/dist/hooks/hook-lib.sh +8 -0
- package/dist/hooks/notification.sh +19 -8
- package/dist/hooks/post-tool-use.sh +41 -23
- package/dist/hooks/pre-tool-use.sh +54 -23
- package/dist/hooks/session-start.sh +68 -0
- package/dist/hooks/stop.sh +31 -11
- package/dist/hooks/user-prompt-submit.sh +37 -21
- package/dist/knowledge/adapters/go-adapter.d.ts +65 -0
- package/dist/knowledge/adapters/go-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/go-adapter.js +294 -0
- package/dist/knowledge/adapters/go-adapter.js.map +1 -0
- package/dist/knowledge/adapters/index.d.ts +41 -0
- package/dist/knowledge/adapters/index.d.ts.map +1 -0
- package/dist/knowledge/adapters/index.js +71 -0
- package/dist/knowledge/adapters/index.js.map +1 -0
- package/dist/knowledge/adapters/java-adapter.d.ts +66 -0
- package/dist/knowledge/adapters/java-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/java-adapter.js +260 -0
- package/dist/knowledge/adapters/java-adapter.js.map +1 -0
- package/dist/knowledge/adapters/js-vue-adapter.d.ts +56 -0
- package/dist/knowledge/adapters/js-vue-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/js-vue-adapter.js +203 -0
- package/dist/knowledge/adapters/js-vue-adapter.js.map +1 -0
- package/dist/knowledge/adapters/kotlin-adapter.d.ts +55 -0
- package/dist/knowledge/adapters/kotlin-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/kotlin-adapter.js +209 -0
- package/dist/knowledge/adapters/kotlin-adapter.js.map +1 -0
- package/dist/knowledge/adapters/monorepo-adapter.d.ts +77 -0
- package/dist/knowledge/adapters/monorepo-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/monorepo-adapter.js +170 -0
- package/dist/knowledge/adapters/monorepo-adapter.js.map +1 -0
- package/dist/knowledge/adapters/python-adapter.d.ts +89 -0
- package/dist/knowledge/adapters/python-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/python-adapter.js +358 -0
- package/dist/knowledge/adapters/python-adapter.js.map +1 -0
- package/dist/knowledge/adapters/rust-adapter.d.ts +73 -0
- package/dist/knowledge/adapters/rust-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/rust-adapter.js +329 -0
- package/dist/knowledge/adapters/rust-adapter.js.map +1 -0
- package/dist/knowledge/adapters/types.d.ts +99 -0
- package/dist/knowledge/adapters/types.d.ts.map +1 -0
- package/dist/knowledge/adapters/types.js +17 -0
- package/dist/knowledge/adapters/types.js.map +1 -0
- package/dist/knowledge/adapters/typescript-adapter.d.ts +57 -0
- package/dist/knowledge/adapters/typescript-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/typescript-adapter.js +171 -0
- package/dist/knowledge/adapters/typescript-adapter.js.map +1 -0
- package/dist/knowledge/audit-applier.d.ts +70 -0
- package/dist/knowledge/audit-applier.d.ts.map +1 -0
- package/dist/knowledge/audit-applier.js +251 -0
- package/dist/knowledge/audit-applier.js.map +1 -0
- package/dist/knowledge/builder.d.ts +261 -0
- package/dist/knowledge/builder.d.ts.map +1 -0
- package/dist/knowledge/builder.js +966 -0
- package/dist/knowledge/builder.js.map +1 -0
- package/dist/knowledge/cli-provider.d.ts +151 -0
- package/dist/knowledge/cli-provider.d.ts.map +1 -0
- package/dist/knowledge/cli-provider.js +313 -0
- package/dist/knowledge/cli-provider.js.map +1 -0
- package/dist/knowledge/constants.d.ts +78 -0
- package/dist/knowledge/constants.d.ts.map +1 -0
- package/dist/knowledge/constants.js +98 -0
- package/dist/knowledge/constants.js.map +1 -0
- package/dist/knowledge/cross-module.d.ts +139 -0
- package/dist/knowledge/cross-module.d.ts.map +1 -0
- package/dist/knowledge/cross-module.js +370 -0
- package/dist/knowledge/cross-module.js.map +1 -0
- package/dist/knowledge/git-hooks.d.ts +67 -0
- package/dist/knowledge/git-hooks.d.ts.map +1 -0
- package/dist/knowledge/git-hooks.js +258 -0
- package/dist/knowledge/git-hooks.js.map +1 -0
- package/dist/knowledge/graph/edge-extractor.d.ts +45 -0
- package/dist/knowledge/graph/edge-extractor.d.ts.map +1 -0
- package/dist/knowledge/graph/edge-extractor.js +242 -0
- package/dist/knowledge/graph/edge-extractor.js.map +1 -0
- package/dist/knowledge/graph/impact.d.ts +73 -0
- package/dist/knowledge/graph/impact.d.ts.map +1 -0
- package/dist/knowledge/graph/impact.js +94 -0
- package/dist/knowledge/graph/impact.js.map +1 -0
- package/dist/knowledge/graph/types.d.ts +22 -0
- package/dist/knowledge/graph/types.d.ts.map +1 -0
- package/dist/knowledge/graph/types.js +13 -0
- package/dist/knowledge/graph/types.js.map +1 -0
- package/dist/knowledge/module-hash.d.ts +88 -0
- package/dist/knowledge/module-hash.d.ts.map +1 -0
- package/dist/knowledge/module-hash.js +162 -0
- package/dist/knowledge/module-hash.js.map +1 -0
- package/dist/knowledge/project-detector.d.ts +101 -0
- package/dist/knowledge/project-detector.d.ts.map +1 -0
- package/dist/knowledge/project-detector.js +223 -0
- package/dist/knowledge/project-detector.js.map +1 -0
- package/dist/knowledge/prompt.d.ts +237 -0
- package/dist/knowledge/prompt.d.ts.map +1 -0
- package/dist/knowledge/prompt.js +416 -0
- package/dist/knowledge/prompt.js.map +1 -0
- package/dist/knowledge/query.d.ts +118 -0
- package/dist/knowledge/query.d.ts.map +1 -0
- package/dist/knowledge/query.js +438 -0
- package/dist/knowledge/query.js.map +1 -0
- package/dist/knowledge/repo-map.d.ts +97 -0
- package/dist/knowledge/repo-map.d.ts.map +1 -0
- package/dist/knowledge/repo-map.js +447 -0
- package/dist/knowledge/repo-map.js.map +1 -0
- package/dist/knowledge/tools/index.d.ts +14 -0
- package/dist/knowledge/tools/index.d.ts.map +1 -0
- package/dist/knowledge/tools/index.js +11 -0
- package/dist/knowledge/tools/index.js.map +1 -0
- package/dist/knowledge/tools/knowledge-get-page.d.ts +46 -0
- package/dist/knowledge/tools/knowledge-get-page.d.ts.map +1 -0
- package/dist/knowledge/tools/knowledge-get-page.js +101 -0
- package/dist/knowledge/tools/knowledge-get-page.js.map +1 -0
- package/dist/knowledge/tools/knowledge-query.d.ts +77 -0
- package/dist/knowledge/tools/knowledge-query.d.ts.map +1 -0
- package/dist/knowledge/tools/knowledge-query.js +104 -0
- package/dist/knowledge/tools/knowledge-query.js.map +1 -0
- package/dist/knowledge/tools/repo-map-lookup.d.ts +45 -0
- package/dist/knowledge/tools/repo-map-lookup.d.ts.map +1 -0
- package/dist/knowledge/tools/repo-map-lookup.js +82 -0
- package/dist/knowledge/tools/repo-map-lookup.js.map +1 -0
- package/dist/knowledge/types.d.ts +269 -0
- package/dist/knowledge/types.d.ts.map +1 -0
- package/dist/knowledge/types.js +10 -0
- package/dist/knowledge/types.js.map +1 -0
- package/dist/knowledge/validator.d.ts +90 -0
- package/dist/knowledge/validator.d.ts.map +1 -0
- package/dist/knowledge/validator.js +355 -0
- package/dist/knowledge/validator.js.map +1 -0
- package/dist/mcp/server.d.ts +64 -8
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +448 -12
- package/dist/mcp/server.js.map +1 -1
- package/dist/skills/builtin-skills.d.ts +35 -0
- package/dist/skills/builtin-skills.d.ts.map +1 -0
- package/dist/skills/builtin-skills.js +68 -0
- package/dist/skills/builtin-skills.js.map +1 -0
- package/dist/skills/distill/attribution.d.ts +59 -0
- package/dist/skills/distill/attribution.d.ts.map +1 -0
- package/dist/skills/distill/attribution.js +101 -0
- package/dist/skills/distill/attribution.js.map +1 -0
- package/dist/skills/distill/distiller.d.ts +161 -0
- package/dist/skills/distill/distiller.d.ts.map +1 -0
- package/dist/skills/distill/distiller.js +461 -0
- package/dist/skills/distill/distiller.js.map +1 -0
- package/dist/skills/distill/index.d.ts +223 -0
- package/dist/skills/distill/index.d.ts.map +1 -0
- package/dist/skills/distill/index.js +466 -0
- package/dist/skills/distill/index.js.map +1 -0
- package/dist/skills/distill/project-anchor-guard.d.ts +116 -0
- package/dist/skills/distill/project-anchor-guard.d.ts.map +1 -0
- package/dist/skills/distill/project-anchor-guard.js +334 -0
- package/dist/skills/distill/project-anchor-guard.js.map +1 -0
- package/dist/skills/distill/topic-deduper.d.ts +77 -0
- package/dist/skills/distill/topic-deduper.d.ts.map +1 -0
- package/dist/skills/distill/topic-deduper.js +119 -0
- package/dist/skills/distill/topic-deduper.js.map +1 -0
- package/dist/skills/distill/upstream-fetcher.d.ts +71 -0
- package/dist/skills/distill/upstream-fetcher.d.ts.map +1 -0
- package/dist/skills/distill/upstream-fetcher.js +202 -0
- package/dist/skills/distill/upstream-fetcher.js.map +1 -0
- package/dist/skills/distilled/distilled-api-design.md +495 -0
- package/dist/skills/distilled/distilled-architecture-decision.md +173 -0
- package/dist/skills/distilled/distilled-brainstorming.md +79 -0
- package/dist/skills/distilled/distilled-brand-guidelines.md +86 -0
- package/dist/skills/distilled/distilled-canvas-design.md +128 -0
- package/dist/skills/distilled/distilled-claude-api.md +185 -0
- package/dist/skills/distilled/distilled-creator.md +181 -0
- package/dist/skills/distilled/distilled-db-schema-design.md +245 -0
- package/dist/skills/distilled/distilled-dispatching-parallel-agents.md +136 -0
- package/dist/skills/distilled/distilled-doc-coauthoring.md +144 -0
- package/dist/skills/distilled/distilled-docx.md +231 -0
- package/dist/skills/distilled/distilled-executing-plans.md +148 -0
- package/dist/skills/distilled/distilled-finishing-a-development-branch.md +213 -0
- package/dist/skills/distilled/distilled-frontend-design.md +118 -0
- package/dist/skills/distilled/distilled-harness-engineering.md +242 -0
- package/dist/skills/distilled/distilled-karpathy-guidelines.md +104 -0
- package/dist/skills/distilled/distilled-performance-optimization.md +175 -0
- package/dist/skills/distilled/distilled-receiving-code-review.md +185 -0
- package/dist/skills/distilled/distilled-spec-driven-design.md +193 -0
- package/dist/skills/distilled/distilled-subagent-driven-development.md +124 -0
- package/dist/skills/distilled/distilled-systematic-debugging.md +154 -0
- package/dist/skills/distilled/distilled-test-driven-development.md +432 -0
- package/dist/skills/distilled/distilled-using-superpowers.md +134 -0
- package/dist/skills/distilled/distilled-verification-before-completion.md +213 -0
- package/dist/skills/distilled/distilled-writing-skills.md +175 -0
- package/dist/skills/registry.d.ts +55 -51
- package/dist/skills/registry.d.ts.map +1 -1
- package/dist/skills/registry.js +82 -196
- package/dist/skills/registry.js.map +1 -1
- package/dist/skills/tools/pipeline-suggest.js +14 -14
- package/dist/skills/tools/pipeline-suggest.js.map +1 -1
- package/dist/skills/tools/skill-invoke.d.ts +3 -2
- package/dist/skills/tools/skill-invoke.d.ts.map +1 -1
- package/dist/skills/tools/skill-invoke.js +4 -2
- package/dist/skills/tools/skill-invoke.js.map +1 -1
- package/dist/web/analytics/anti-pattern-detector.d.ts.map +1 -1
- package/dist/web/analytics/anti-pattern-detector.js +6 -1
- package/dist/web/analytics/anti-pattern-detector.js.map +1 -1
- package/dist/web/analytics/drift-detector.d.ts +6 -0
- package/dist/web/analytics/drift-detector.d.ts.map +1 -1
- package/dist/web/analytics/drift-detector.js +15 -8
- package/dist/web/analytics/drift-detector.js.map +1 -1
- package/dist/web/analytics/weekly-report.d.ts +13 -0
- package/dist/web/analytics/weekly-report.d.ts.map +1 -1
- package/dist/web/analytics/weekly-report.js +17 -3
- package/dist/web/analytics/weekly-report.js.map +1 -1
- package/dist/web/routes/_helpers.d.ts +31 -0
- package/dist/web/routes/_helpers.d.ts.map +1 -1
- package/dist/web/routes/_helpers.js +33 -0
- package/dist/web/routes/_helpers.js.map +1 -1
- package/dist/web/routes/agent-content.d.ts +30 -0
- package/dist/web/routes/agent-content.d.ts.map +1 -0
- package/dist/web/routes/agent-content.js +139 -0
- package/dist/web/routes/agent-content.js.map +1 -0
- package/dist/web/routes/agent-distill.d.ts +49 -0
- package/dist/web/routes/agent-distill.d.ts.map +1 -0
- package/dist/web/routes/agent-distill.js +526 -0
- package/dist/web/routes/agent-distill.js.map +1 -0
- package/dist/web/routes/config.d.ts +56 -0
- package/dist/web/routes/config.d.ts.map +1 -0
- package/dist/web/routes/config.js +243 -0
- package/dist/web/routes/config.js.map +1 -0
- package/dist/web/routes/decisions.d.ts +15 -0
- package/dist/web/routes/decisions.d.ts.map +1 -0
- package/dist/web/routes/decisions.js +181 -0
- package/dist/web/routes/decisions.js.map +1 -0
- package/dist/web/routes/diagnostics.d.ts +61 -0
- package/dist/web/routes/diagnostics.d.ts.map +1 -0
- package/dist/web/routes/diagnostics.js +203 -0
- package/dist/web/routes/diagnostics.js.map +1 -0
- package/dist/web/routes/error-handler.d.ts +0 -4
- package/dist/web/routes/error-handler.d.ts.map +1 -1
- package/dist/web/routes/error-handler.js +0 -8
- package/dist/web/routes/error-handler.js.map +1 -1
- package/dist/web/routes/events.d.ts.map +1 -1
- package/dist/web/routes/events.js +26 -1
- package/dist/web/routes/events.js.map +1 -1
- package/dist/web/routes/health.d.ts +33 -0
- package/dist/web/routes/health.d.ts.map +1 -0
- package/dist/web/routes/health.js +37 -0
- package/dist/web/routes/health.js.map +1 -0
- package/dist/web/routes/insights.d.ts +0 -5
- package/dist/web/routes/insights.d.ts.map +1 -1
- package/dist/web/routes/insights.js +0 -0
- package/dist/web/routes/insights.js.map +1 -1
- package/dist/web/routes/knowledge.d.ts +57 -0
- package/dist/web/routes/knowledge.d.ts.map +1 -0
- package/dist/web/routes/knowledge.js +772 -0
- package/dist/web/routes/knowledge.js.map +1 -0
- package/dist/web/routes/patch.d.ts +60 -1
- package/dist/web/routes/patch.d.ts.map +1 -1
- package/dist/web/routes/patch.js +170 -64
- package/dist/web/routes/patch.js.map +1 -1
- package/dist/web/routes/pipeline.d.ts +28 -0
- package/dist/web/routes/pipeline.d.ts.map +1 -0
- package/dist/web/routes/pipeline.js +145 -0
- package/dist/web/routes/pipeline.js.map +1 -0
- package/dist/web/routes/rules.d.ts.map +1 -1
- package/dist/web/routes/rules.js +26 -7
- package/dist/web/routes/rules.js.map +1 -1
- package/dist/web/routes/sessions.d.ts.map +1 -1
- package/dist/web/routes/sessions.js +17 -8
- package/dist/web/routes/sessions.js.map +1 -1
- package/dist/web/routes/skill-content.d.ts +30 -0
- package/dist/web/routes/skill-content.d.ts.map +1 -0
- package/dist/web/routes/skill-content.js +117 -0
- package/dist/web/routes/skill-content.js.map +1 -0
- package/dist/web/routes/skill-stats.d.ts.map +1 -1
- package/dist/web/routes/skill-stats.js +153 -16
- package/dist/web/routes/skill-stats.js.map +1 -1
- package/dist/web/routes/skills-distill.d.ts +29 -0
- package/dist/web/routes/skills-distill.d.ts.map +1 -0
- package/dist/web/routes/skills-distill.js +552 -0
- package/dist/web/routes/skills-distill.js.map +1 -0
- package/dist/web/routes/skills.js +7 -7
- package/dist/web/routes/skills.js.map +1 -1
- package/dist/web/routes/stats.d.ts.map +1 -1
- package/dist/web/routes/stats.js +2 -1
- package/dist/web/routes/stats.js.map +1 -1
- package/dist/web/routes/task-timeline.d.ts +178 -0
- package/dist/web/routes/task-timeline.d.ts.map +1 -0
- package/dist/web/routes/task-timeline.js +530 -0
- package/dist/web/routes/task-timeline.js.map +1 -0
- package/dist/web/routes/tasks.d.ts.map +1 -1
- package/dist/web/routes/tasks.js +377 -8
- package/dist/web/routes/tasks.js.map +1 -1
- package/dist/web/routes/trace.d.ts.map +1 -1
- package/dist/web/routes/trace.js +3 -2
- package/dist/web/routes/trace.js.map +1 -1
- package/dist/web/routes/types.d.ts +0 -4
- package/dist/web/routes/types.d.ts.map +1 -1
- package/dist/web/routes/types.js +1 -1
- package/dist/web/routes/types.js.map +1 -1
- package/dist/web/routes/violations.d.ts +14 -0
- package/dist/web/routes/violations.d.ts.map +1 -0
- package/dist/web/routes/violations.js +112 -0
- package/dist/web/routes/violations.js.map +1 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +99 -19
- package/dist/web/server.js.map +1 -1
- package/dist/web/services/agent-distill-manager.d.ts +122 -0
- package/dist/web/services/agent-distill-manager.d.ts.map +1 -0
- package/dist/web/services/agent-distill-manager.js +397 -0
- package/dist/web/services/agent-distill-manager.js.map +1 -0
- package/dist/web/services/build-manager.d.ts +72 -0
- package/dist/web/services/build-manager.d.ts.map +1 -0
- package/dist/web/services/build-manager.js +189 -0
- package/dist/web/services/build-manager.js.map +1 -0
- package/dist/web/services/distill-manager.d.ts +172 -0
- package/dist/web/services/distill-manager.d.ts.map +1 -0
- package/dist/web/services/distill-manager.js +411 -0
- package/dist/web/services/distill-manager.js.map +1 -0
- package/dist/web/static/assets/AgentDetailPage-DlUeA1sX.js +2 -0
- package/dist/web/static/assets/AgentDetailPage-DlUeA1sX.js.map +1 -0
- package/dist/web/static/assets/AgentDistillRunPage-Cybo4bii.js +3 -0
- package/dist/web/static/assets/AgentDistillRunPage-Cybo4bii.js.map +1 -0
- package/dist/web/static/assets/AgentsPage-Qd9FExLG.js +2 -0
- package/dist/web/static/assets/AgentsPage-Qd9FExLG.js.map +1 -0
- package/dist/web/static/assets/DaemonHealthPage-DTSVqtrI.js +2 -0
- package/dist/web/static/assets/DaemonHealthPage-DTSVqtrI.js.map +1 -0
- package/dist/web/static/assets/DecisionDetailPage-b4BA8dhc.js +2 -0
- package/dist/web/static/assets/DecisionDetailPage-b4BA8dhc.js.map +1 -0
- package/dist/web/static/assets/DecisionsPage-a3NRo_T7.js +2 -0
- package/dist/web/static/assets/DecisionsPage-a3NRo_T7.js.map +1 -0
- package/dist/web/static/assets/DiagnosticsPage-DIVdiIQG.js +2 -0
- package/dist/web/static/assets/DiagnosticsPage-DIVdiIQG.js.map +1 -0
- package/dist/web/static/assets/DistillDetailPage-U6a3l2iP.js +4 -0
- package/dist/web/static/assets/DistillDetailPage-U6a3l2iP.js.map +1 -0
- package/dist/web/static/assets/DistillPage-O7BHtRN8.js +2 -0
- package/dist/web/static/assets/DistillPage-O7BHtRN8.js.map +1 -0
- package/dist/web/static/assets/DistillRunPage-D1JuRWWr.js +2 -0
- package/dist/web/static/assets/DistillRunPage-D1JuRWWr.js.map +1 -0
- package/dist/web/static/assets/GlobalScopeHint-Q3wTJx3F.js +2 -0
- package/dist/web/static/assets/GlobalScopeHint-Q3wTJx3F.js.map +1 -0
- package/dist/web/static/assets/IssueDetailPage-BDfrtk2C.js +2 -0
- package/dist/web/static/assets/IssueDetailPage-BDfrtk2C.js.map +1 -0
- package/dist/web/static/assets/IssuesPage-SKmhlCrw.js +2 -0
- package/dist/web/static/assets/IssuesPage-SKmhlCrw.js.map +1 -0
- package/dist/web/static/assets/KbDetailPage-Yna86Na8.js +2 -0
- package/dist/web/static/assets/KbDetailPage-Yna86Na8.js.map +1 -0
- package/dist/web/static/assets/KbHitsPage-Cljl7H9p.js +2 -0
- package/dist/web/static/assets/KbHitsPage-Cljl7H9p.js.map +1 -0
- package/dist/web/static/assets/MarkdownRenderer-DlDQNihj.js +3 -0
- package/dist/web/static/assets/MarkdownRenderer-DlDQNihj.js.map +1 -0
- package/dist/web/static/assets/NotFound-LMzbP51V.js +2 -0
- package/dist/web/static/assets/NotFound-LMzbP51V.js.map +1 -0
- package/dist/web/static/assets/SettingsPage-DzoK4PKg.js +2 -0
- package/dist/web/static/assets/SettingsPage-DzoK4PKg.js.map +1 -0
- package/dist/web/static/assets/SkillDetailPage-BuBJJ_NX.js +2 -0
- package/dist/web/static/assets/SkillDetailPage-BuBJJ_NX.js.map +1 -0
- package/dist/web/static/assets/SkillsPage-aojkJpBc.js +2 -0
- package/dist/web/static/assets/SkillsPage-aojkJpBc.js.map +1 -0
- package/dist/web/static/assets/TaskDetailPage-1ckxnGhw.js +4 -0
- package/dist/web/static/assets/TaskDetailPage-1ckxnGhw.js.map +1 -0
- package/dist/web/static/assets/TasksHubPage-C2PLh3eg.js +6 -0
- package/dist/web/static/assets/TasksHubPage-C2PLh3eg.js.map +1 -0
- package/dist/web/static/assets/WorkplacePage-DHrp5VxS.js +2 -0
- package/dist/web/static/assets/WorkplacePage-DHrp5VxS.js.map +1 -0
- package/dist/web/static/assets/arco-DFQA6dO_.css +1 -0
- package/dist/web/static/assets/arco-DV6xCLhr.js +14 -0
- package/dist/web/static/assets/arco-DV6xCLhr.js.map +1 -0
- package/dist/web/static/assets/charts-BSV4cyC4.js +37 -0
- package/dist/web/static/assets/charts-BSV4cyC4.js.map +1 -0
- package/dist/web/static/assets/date-fns-sbWH3_uq.js +2 -0
- package/dist/web/static/assets/date-fns-sbWH3_uq.js.map +1 -0
- package/dist/web/static/assets/index-B_v_MKlb.css +1 -0
- package/dist/web/static/assets/index-DileOOE4.js +4 -0
- package/dist/web/static/assets/index-DileOOE4.js.map +1 -0
- package/dist/web/static/assets/lucide-CnlPQoG8.js +72 -0
- package/dist/web/static/assets/lucide-CnlPQoG8.js.map +1 -0
- package/dist/web/static/assets/markdown-CA7ePUts.js +30 -0
- package/dist/web/static/assets/markdown-CA7ePUts.js.map +1 -0
- package/dist/web/static/assets/outcome-BKGy9azt.js +2 -0
- package/dist/web/static/assets/outcome-BKGy9azt.js.map +1 -0
- package/dist/web/static/assets/query-CgCOpYWf.js +2 -0
- package/dist/web/static/assets/{query-C99w429o.js.map → query-CgCOpYWf.js.map} +1 -1
- package/dist/web/static/assets/{react-router-r79dBVy4.js → react-router-Cxmg8RuL.js} +3 -3
- package/dist/web/static/assets/{react-router-r79dBVy4.js.map → react-router-Cxmg8RuL.js.map} +1 -1
- package/dist/web/static/assets/react-vendor-tkvCrao7.js +57 -0
- package/dist/web/static/assets/react-vendor-tkvCrao7.js.map +1 -0
- package/dist/web/static/assets/syntax-highlighter-BDYycNja.js +6 -0
- package/dist/web/static/assets/syntax-highlighter-BDYycNja.js.map +1 -0
- package/dist/web/static/assets/useAgentStats-B-uTgqBd.js +2 -0
- package/dist/web/static/assets/useAgentStats-B-uTgqBd.js.map +1 -0
- package/dist/web/static/assets/useDecisions-D-G2Ft5T.js +2 -0
- package/dist/web/static/assets/useDecisions-D-G2Ft5T.js.map +1 -0
- package/dist/web/static/assets/useDistill-21dZkXlT.js +3 -0
- package/dist/web/static/assets/useDistill-21dZkXlT.js.map +1 -0
- package/dist/web/static/assets/useEffectiveProject-DQiyX54y.js +2 -0
- package/dist/web/static/assets/useEffectiveProject-DQiyX54y.js.map +1 -0
- package/dist/web/static/assets/useIssuesFeed-CFiyQkAL.js +2 -0
- package/dist/web/static/assets/useIssuesFeed-CFiyQkAL.js.map +1 -0
- package/dist/web/static/assets/useKbHits-xKXWgqh9.js +2 -0
- package/dist/web/static/assets/useKbHits-xKXWgqh9.js.map +1 -0
- package/dist/web/static/assets/useSkillStats-B5hbIwdf.js +2 -0
- package/dist/web/static/assets/useSkillStats-B5hbIwdf.js.map +1 -0
- package/dist/web/static/assets/vendor-DS-q4Eyc.js +36 -0
- package/dist/web/static/assets/vendor-DS-q4Eyc.js.map +1 -0
- package/dist/web/static/index.html +12 -8
- package/package.json +18 -5
- package/dist/core/ai/provider.d.ts +0 -63
- package/dist/core/ai/provider.d.ts.map +0 -1
- package/dist/core/ai/provider.js +0 -241
- package/dist/core/ai/provider.js.map +0 -1
- package/dist/core/ai/types.d.ts +0 -43
- package/dist/core/ai/types.d.ts.map +0 -1
- package/dist/core/ai/types.js +0 -5
- package/dist/core/ai/types.js.map +0 -1
- package/dist/core/storage/token-usage.d.ts +0 -36
- package/dist/core/storage/token-usage.d.ts.map +0 -1
- package/dist/core/storage/token-usage.js +0 -59
- package/dist/core/storage/token-usage.js.map +0 -1
- package/dist/core/utils/token-tracker.d.ts +0 -39
- package/dist/core/utils/token-tracker.d.ts.map +0 -1
- package/dist/core/utils/token-tracker.js +0 -69
- package/dist/core/utils/token-tracker.js.map +0 -1
- package/dist/skills/index.d.ts +0 -3
- package/dist/skills/index.d.ts.map +0 -1
- package/dist/skills/index.js +0 -3
- package/dist/skills/index.js.map +0 -1
- package/dist/skills/matcher.d.ts +0 -26
- package/dist/skills/matcher.d.ts.map +0 -1
- package/dist/skills/matcher.js +0 -113
- package/dist/skills/matcher.js.map +0 -1
- package/dist/skills/official/code-simplifier.md +0 -52
- package/dist/skills/official/find-skills.md +0 -142
- package/dist/skills/official/official-api-design.md +0 -30
- package/dist/skills/official/official-architecture-decision.md +0 -41
- package/dist/skills/official/official-bmad.md +0 -118
- package/dist/skills/official/official-db-schema-design.md +0 -34
- package/dist/skills/official/official-debug.md +0 -25
- package/dist/skills/official/official-doc-driven.md +0 -31
- package/dist/skills/official/official-harness-engineering.md +0 -108
- package/dist/skills/official/official-openspec.md +0 -89
- package/dist/skills/official/official-performance-optimization.md +0 -30
- package/dist/skills/official/official-pr-review.md +0 -35
- package/dist/skills/official/official-release-checklist.md +0 -30
- package/dist/skills/official/official-security-hardening.md +0 -32
- package/dist/skills/official/official-spec-driven-design.md +0 -31
- package/dist/skills/official/planning-with-files.md +0 -241
- package/dist/skills/official/ui-ux-pro-max.md +0 -105
- package/dist/skills/official/webapp-testing.md +0 -96
- package/dist/skills/official-skills.d.ts +0 -26
- package/dist/skills/official-skills.d.ts.map +0 -1
- package/dist/skills/official-skills.js +0 -74
- package/dist/skills/official-skills.js.map +0 -1
- package/dist/skills/semantic-matcher.d.ts +0 -60
- package/dist/skills/semantic-matcher.d.ts.map +0 -1
- package/dist/skills/semantic-matcher.js +0 -192
- package/dist/skills/semantic-matcher.js.map +0 -1
- package/dist/skills/upgrade-engine.d.ts +0 -93
- package/dist/skills/upgrade-engine.d.ts.map +0 -1
- package/dist/skills/upgrade-engine.js +0 -447
- package/dist/skills/upgrade-engine.js.map +0 -1
- package/dist/skills/upgrade-prompt.d.ts +0 -20
- package/dist/skills/upgrade-prompt.d.ts.map +0 -1
- package/dist/skills/upgrade-prompt.js +0 -75
- package/dist/skills/upgrade-prompt.js.map +0 -1
- package/dist/web/routes/ai.d.ts +0 -10
- package/dist/web/routes/ai.d.ts.map +0 -1
- package/dist/web/routes/ai.js +0 -186
- package/dist/web/routes/ai.js.map +0 -1
- package/dist/web/routes/token-usage.d.ts +0 -7
- package/dist/web/routes/token-usage.d.ts.map +0 -1
- package/dist/web/routes/token-usage.js +0 -18
- package/dist/web/routes/token-usage.js.map +0 -1
- package/dist/web/ssrf-guard.d.ts +0 -35
- package/dist/web/ssrf-guard.d.ts.map +0 -1
- package/dist/web/ssrf-guard.js +0 -93
- package/dist/web/ssrf-guard.js.map +0 -1
- package/dist/web/static/assets/AIConfig-CdDWzJyO.js +0 -2
- package/dist/web/static/assets/AIConfig-CdDWzJyO.js.map +0 -1
- package/dist/web/static/assets/Dashboard-CoEmmIDt.js +0 -2
- package/dist/web/static/assets/Dashboard-CoEmmIDt.js.map +0 -1
- package/dist/web/static/assets/Drawer-DdRTzlLB.js +0 -2
- package/dist/web/static/assets/Drawer-DdRTzlLB.js.map +0 -1
- package/dist/web/static/assets/Events-DrIq1SUS.js +0 -2
- package/dist/web/static/assets/Events-DrIq1SUS.js.map +0 -1
- package/dist/web/static/assets/Reports-DFBM3MDK.js +0 -2
- package/dist/web/static/assets/Reports-DFBM3MDK.js.map +0 -1
- package/dist/web/static/assets/SearchInput-qCj_jAcf.js +0 -2
- package/dist/web/static/assets/SearchInput-qCj_jAcf.js.map +0 -1
- package/dist/web/static/assets/SessionDetail-CCzwdoT7.js +0 -2
- package/dist/web/static/assets/SessionDetail-CCzwdoT7.js.map +0 -1
- package/dist/web/static/assets/Sessions-FfLYkAw9.js +0 -2
- package/dist/web/static/assets/Sessions-FfLYkAw9.js.map +0 -1
- package/dist/web/static/assets/Skills-C8Gvs3Qa.js +0 -2
- package/dist/web/static/assets/Skills-C8Gvs3Qa.js.map +0 -1
- package/dist/web/static/assets/TaskDetail-BS8pYhaR.js +0 -2
- package/dist/web/static/assets/TaskDetail-BS8pYhaR.js.map +0 -1
- package/dist/web/static/assets/Tasks-CyuhizG8.js +0 -2
- package/dist/web/static/assets/Tasks-CyuhizG8.js.map +0 -1
- package/dist/web/static/assets/charts-CLrM0_uM.js +0 -37
- package/dist/web/static/assets/charts-CLrM0_uM.js.map +0 -1
- package/dist/web/static/assets/date-fns-CZ_bHujz.js +0 -2
- package/dist/web/static/assets/date-fns-CZ_bHujz.js.map +0 -1
- package/dist/web/static/assets/export-L_VBD2p1.js +0 -4
- package/dist/web/static/assets/export-L_VBD2p1.js.map +0 -1
- package/dist/web/static/assets/index-CBX47X8l.js +0 -3
- package/dist/web/static/assets/index-CBX47X8l.js.map +0 -1
- package/dist/web/static/assets/index-DjIoMdoR.css +0 -1
- package/dist/web/static/assets/lucide-Bs_edTLa.js +0 -232
- package/dist/web/static/assets/lucide-Bs_edTLa.js.map +0 -1
- package/dist/web/static/assets/query-C99w429o.js +0 -2
- package/dist/web/static/assets/react-vendor-CSp-GLFF.js +0 -49
- package/dist/web/static/assets/react-vendor-CSp-GLFF.js.map +0 -1
- package/dist/web/static/assets/syntax-highlighter-44FakypI.js +0 -9
- package/dist/web/static/assets/syntax-highlighter-44FakypI.js.map +0 -1
- package/dist/web/static/assets/time-Bxuk0M-C.js +0 -2
- package/dist/web/static/assets/time-Bxuk0M-C.js.map +0 -1
- package/dist/web/static/assets/vendor-CMMjVdZs.js +0 -64
- package/dist/web/static/assets/vendor-CMMjVdZs.js.map +0 -1
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* knip static dead-code runner (spec f3dc1397 Option B2).
|
|
3
|
+
*
|
|
4
|
+
* Wraps the locally-installed `knip` binary and normalizes its `--reporter
|
|
5
|
+
* json` output into a compact `KnipReport` (counts + top-N lists). This is the
|
|
6
|
+
* "static dead-code / orphan-file" layer that the spec deliberately keeps OUT
|
|
7
|
+
* of `cf doctor` (knip needs build artifacts, is slower, and has occasional
|
|
8
|
+
* false positives that would pollute the always-on doctor signal).
|
|
9
|
+
*
|
|
10
|
+
* Baseline handling (spec §B2 关键): this is a mature codebase, so knip's first
|
|
11
|
+
* run WILL report a backlog of pre-existing dead code. We therefore run knip
|
|
12
|
+
* with `--no-exit-code` and present the findings as INFORMATION — `cf entropy`
|
|
13
|
+
* never fails the build on existing entropy. Use the reported numbers as a
|
|
14
|
+
* baseline to track over time, not a hard gate.
|
|
15
|
+
*
|
|
16
|
+
* Graceful degradation: if the knip binary is absent (not yet `npm install`ed),
|
|
17
|
+
* `runKnip` returns `{ available: false }` rather than throwing, so `cf
|
|
18
|
+
* entropy --static` prints an install hint instead of crashing.
|
|
19
|
+
*/
|
|
20
|
+
export interface KnipReport {
|
|
21
|
+
available: true;
|
|
22
|
+
/** Files with zero importers (orphan / unreferenced modules). */
|
|
23
|
+
unusedFiles: string[];
|
|
24
|
+
/** Exported symbols with zero call sites (dead exports). */
|
|
25
|
+
unusedExports: string[];
|
|
26
|
+
/** Declared dependencies never imported. */
|
|
27
|
+
unusedDependencies: string[];
|
|
28
|
+
/** Raw knip exit code (0 = no findings; with --no-exit-code always 0). */
|
|
29
|
+
exitCode: number;
|
|
30
|
+
}
|
|
31
|
+
export interface KnipUnavailable {
|
|
32
|
+
available: false;
|
|
33
|
+
reason: string;
|
|
34
|
+
}
|
|
35
|
+
export type KnipResult = KnipReport | KnipUnavailable;
|
|
36
|
+
export interface RunKnipDeps {
|
|
37
|
+
/** Repo root (defaults to process.cwd()). */
|
|
38
|
+
cwd?: string;
|
|
39
|
+
/** Test override: spawn knip and return its stdout / status. */
|
|
40
|
+
spawn?: (cwd: string) => {
|
|
41
|
+
stdout: string;
|
|
42
|
+
status: number | null;
|
|
43
|
+
error?: Error;
|
|
44
|
+
};
|
|
45
|
+
/** Test override: check whether the knip binary exists. */
|
|
46
|
+
binExists?: (cwd: string) => boolean;
|
|
47
|
+
}
|
|
48
|
+
export declare function runKnip(deps?: RunKnipDeps): Promise<KnipResult>;
|
|
49
|
+
//# sourceMappingURL=knip-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knip-runner.d.ts","sourceRoot":"","sources":["../../../src/core/diagnostics/knip-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,IAAI,CAAC;IAChB,iEAAiE;IACjE,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,4DAA4D;IAC5D,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,4CAA4C;IAC5C,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,KAAK,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,eAAe,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,CAAC;IAClF,2DAA2D;IAC3D,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CACtC;AAwED,wBAAsB,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAyBrE"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* knip static dead-code runner (spec f3dc1397 Option B2).
|
|
3
|
+
*
|
|
4
|
+
* Wraps the locally-installed `knip` binary and normalizes its `--reporter
|
|
5
|
+
* json` output into a compact `KnipReport` (counts + top-N lists). This is the
|
|
6
|
+
* "static dead-code / orphan-file" layer that the spec deliberately keeps OUT
|
|
7
|
+
* of `cf doctor` (knip needs build artifacts, is slower, and has occasional
|
|
8
|
+
* false positives that would pollute the always-on doctor signal).
|
|
9
|
+
*
|
|
10
|
+
* Baseline handling (spec §B2 关键): this is a mature codebase, so knip's first
|
|
11
|
+
* run WILL report a backlog of pre-existing dead code. We therefore run knip
|
|
12
|
+
* with `--no-exit-code` and present the findings as INFORMATION — `cf entropy`
|
|
13
|
+
* never fails the build on existing entropy. Use the reported numbers as a
|
|
14
|
+
* baseline to track over time, not a hard gate.
|
|
15
|
+
*
|
|
16
|
+
* Graceful degradation: if the knip binary is absent (not yet `npm install`ed),
|
|
17
|
+
* `runKnip` returns `{ available: false }` rather than throwing, so `cf
|
|
18
|
+
* entropy --static` prints an install hint instead of crashing.
|
|
19
|
+
*/
|
|
20
|
+
import { spawnSync } from 'node:child_process';
|
|
21
|
+
import fs from 'node:fs';
|
|
22
|
+
import path from 'node:path';
|
|
23
|
+
function defaultBinExists(cwd) {
|
|
24
|
+
return fs.existsSync(path.join(cwd, 'node_modules', '.bin', 'knip'));
|
|
25
|
+
}
|
|
26
|
+
function defaultSpawn(cwd) {
|
|
27
|
+
const bin = path.join(cwd, 'node_modules', '.bin', 'knip');
|
|
28
|
+
const res = spawnSync(bin, ['--reporter', 'json', '--no-exit-code', '--no-progress'], { cwd, encoding: 'utf-8', maxBuffer: 32 * 1024 * 1024 });
|
|
29
|
+
return {
|
|
30
|
+
stdout: res.stdout ?? '',
|
|
31
|
+
status: res.status,
|
|
32
|
+
error: res.error ?? undefined,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* knip --reporter json emits `{ files: string[], issues: [{ file, exports,
|
|
37
|
+
* dependencies, ... }] }`. We flatten exports/dependencies across issues and
|
|
38
|
+
* surface `files` as unused (orphan) files.
|
|
39
|
+
*/
|
|
40
|
+
function parseKnipJson(raw) {
|
|
41
|
+
const unusedFiles = [];
|
|
42
|
+
const unusedExports = [];
|
|
43
|
+
const unusedDependencies = [];
|
|
44
|
+
if (!raw.trim())
|
|
45
|
+
return { unusedFiles, unusedExports, unusedDependencies };
|
|
46
|
+
let parsed;
|
|
47
|
+
try {
|
|
48
|
+
parsed = JSON.parse(raw);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return { unusedFiles, unusedExports, unusedDependencies };
|
|
52
|
+
}
|
|
53
|
+
const obj = parsed;
|
|
54
|
+
if (Array.isArray(obj.files))
|
|
55
|
+
unusedFiles.push(...obj.files);
|
|
56
|
+
const nameOf = (e) => typeof e === 'string' ? e : e?.name ?? null;
|
|
57
|
+
for (const issue of obj.issues ?? []) {
|
|
58
|
+
const file = issue.file ?? '';
|
|
59
|
+
for (const e of issue.exports ?? []) {
|
|
60
|
+
const n = nameOf(e);
|
|
61
|
+
if (n)
|
|
62
|
+
unusedExports.push(file ? `${file}: ${n}` : n);
|
|
63
|
+
}
|
|
64
|
+
for (const t of issue.types ?? []) {
|
|
65
|
+
const n = nameOf(t);
|
|
66
|
+
if (n)
|
|
67
|
+
unusedExports.push(file ? `${file}: ${n} (type)` : `${n} (type)`);
|
|
68
|
+
}
|
|
69
|
+
for (const d of issue.dependencies ?? []) {
|
|
70
|
+
const n = nameOf(d);
|
|
71
|
+
if (n)
|
|
72
|
+
unusedDependencies.push(n);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return { unusedFiles, unusedExports, unusedDependencies };
|
|
76
|
+
}
|
|
77
|
+
export async function runKnip(deps) {
|
|
78
|
+
const cwd = deps?.cwd ?? process.cwd();
|
|
79
|
+
const binExists = deps?.binExists ?? defaultBinExists;
|
|
80
|
+
const spawn = deps?.spawn ?? defaultSpawn;
|
|
81
|
+
if (!binExists(cwd)) {
|
|
82
|
+
return {
|
|
83
|
+
available: false,
|
|
84
|
+
reason: 'knip is not installed. Run `npm install` (knip is a devDependency).',
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
const { stdout, status, error } = spawn(cwd);
|
|
88
|
+
if (error) {
|
|
89
|
+
return { available: false, reason: `knip failed to spawn: ${error.message}` };
|
|
90
|
+
}
|
|
91
|
+
const { unusedFiles, unusedExports, unusedDependencies } = parseKnipJson(stdout);
|
|
92
|
+
return {
|
|
93
|
+
available: true,
|
|
94
|
+
unusedFiles,
|
|
95
|
+
unusedExports,
|
|
96
|
+
unusedDependencies,
|
|
97
|
+
exitCode: status ?? 0,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=knip-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knip-runner.js","sourceRoot":"","sources":["../../../src/core/diagnostics/knip-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Onboarding marker files (spec ed8cf2db).
|
|
3
|
+
*
|
|
4
|
+
* Two marker files communicate "onboarding completed" state between the
|
|
5
|
+
* `cf init` / `cf project init` aggregator commands (spec 1) and the future
|
|
6
|
+
* `cf doctor` / `cf fix` diagnostic commands (spec 2):
|
|
7
|
+
*
|
|
8
|
+
* - `~/.claude-forge/system-installed.json` — system-level (hooks, daemon,
|
|
9
|
+
* LaunchAgent) onboarding state
|
|
10
|
+
* - `<project_root>/.forge-installed.json` — per-project (CLAUDE.md,
|
|
11
|
+
* `.forge-knowledge/`, `.gitignore`) onboarding state
|
|
12
|
+
*
|
|
13
|
+
* Markers are write-overwrite (no merging) — callers decide whether to noop
|
|
14
|
+
* before re-writing. Reads return `null` if the file is missing or malformed.
|
|
15
|
+
*
|
|
16
|
+
* Schema is a frozen contract between spec 1 (this file) and spec 2
|
|
17
|
+
* (doctor); any schema change MUST update both specs and bump `version`.
|
|
18
|
+
*/
|
|
19
|
+
export declare const SYSTEM_MARKER_FILENAME = "system-installed.json";
|
|
20
|
+
export declare const PROJECT_MARKER_FILENAME = ".forge-installed.json";
|
|
21
|
+
export declare const MARKER_SCHEMA_VERSION = 1;
|
|
22
|
+
/** Per-step status used in project marker. */
|
|
23
|
+
export type StepStatus = 'ok' | 'skipped' | 'failed';
|
|
24
|
+
export interface SystemMarker {
|
|
25
|
+
version: 1;
|
|
26
|
+
/** ISO-8601 timestamp of (re-)initialization. */
|
|
27
|
+
initialized_at: string;
|
|
28
|
+
/** `package.json` version of claude-forge that wrote the marker. */
|
|
29
|
+
claude_forge_version: string;
|
|
30
|
+
/** Whether the macOS LaunchAgent was installed during onboarding. */
|
|
31
|
+
launchd_installed: boolean;
|
|
32
|
+
/** `process.platform` at time of write. */
|
|
33
|
+
platform: NodeJS.Platform;
|
|
34
|
+
/** Whether `cf init --full` was used (vs. plain `cf init`). */
|
|
35
|
+
full_mode: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface ProjectMarker {
|
|
38
|
+
version: 1;
|
|
39
|
+
initialized_at: string;
|
|
40
|
+
claude_forge_version: string;
|
|
41
|
+
/** Detected project type (node / python / rust / go / generic). */
|
|
42
|
+
project_type: ProjectType;
|
|
43
|
+
/** Per-step status (each step writes its own outcome). */
|
|
44
|
+
steps: {
|
|
45
|
+
claudemd: StepStatus;
|
|
46
|
+
knowledge: StepStatus;
|
|
47
|
+
gitignore: StepStatus;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export type ProjectType = 'node' | 'python' | 'rust' | 'go' | 'generic';
|
|
51
|
+
export declare function systemMarkerPath(homeDir?: string): string;
|
|
52
|
+
export declare function readSystemMarker(homeDir?: string): SystemMarker | null;
|
|
53
|
+
export interface WriteSystemMarkerInput {
|
|
54
|
+
launchd_installed: boolean;
|
|
55
|
+
full_mode: boolean;
|
|
56
|
+
platform?: NodeJS.Platform;
|
|
57
|
+
/** Override version for tests. */
|
|
58
|
+
claude_forge_version?: string;
|
|
59
|
+
/** Override timestamp for deterministic tests. */
|
|
60
|
+
initialized_at?: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Write the system marker. Creates parent dir if needed. Returns the marker
|
|
64
|
+
* object that was written so callers can use it for summary output.
|
|
65
|
+
*
|
|
66
|
+
* Idempotency contract: callers are responsible for deciding whether to
|
|
67
|
+
* re-write. This function always overwrites if called.
|
|
68
|
+
*/
|
|
69
|
+
export declare function writeSystemMarker(input: WriteSystemMarkerInput, homeDir?: string): SystemMarker;
|
|
70
|
+
export declare function projectMarkerPath(projectRoot: string): string;
|
|
71
|
+
export declare function readProjectMarker(projectRoot: string): ProjectMarker | null;
|
|
72
|
+
export interface WriteProjectMarkerInput {
|
|
73
|
+
project_type: ProjectType;
|
|
74
|
+
steps: ProjectMarker['steps'];
|
|
75
|
+
claude_forge_version?: string;
|
|
76
|
+
initialized_at?: string;
|
|
77
|
+
}
|
|
78
|
+
export declare function writeProjectMarker(projectRoot: string, input: WriteProjectMarkerInput): ProjectMarker;
|
|
79
|
+
/**
|
|
80
|
+
* Detect project type by manifest-file priority. Pure file-system probe;
|
|
81
|
+
* no side effects, no dependency on storage or daemon.
|
|
82
|
+
*
|
|
83
|
+
* Priority order (spec ed8cf2db §3):
|
|
84
|
+
* 1. package.json → node
|
|
85
|
+
* 2. pyproject.toml → python
|
|
86
|
+
* 3. Cargo.toml → rust
|
|
87
|
+
* 4. go.mod → go
|
|
88
|
+
* 5. else → generic (assumed git repo)
|
|
89
|
+
*/
|
|
90
|
+
export declare function detectProjectType(projectRoot: string): ProjectType;
|
|
91
|
+
/**
|
|
92
|
+
* Check whether the given directory is a git repository root (has `.git/`).
|
|
93
|
+
* Used as fail-fast precheck in `cf project init`.
|
|
94
|
+
*/
|
|
95
|
+
export declare function isGitRepo(projectRoot: string): boolean;
|
|
96
|
+
//# sourceMappingURL=markers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markers.d.ts","sourceRoot":"","sources":["../../../src/core/diagnostics/markers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AASH,eAAO,MAAM,sBAAsB,0BAA0B,CAAC;AAC9D,eAAO,MAAM,uBAAuB,0BAA0B,CAAC;AAE/D,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,8CAA8C;AAC9C,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,CAAC;IACX,iDAAiD;IACjD,cAAc,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qEAAqE;IACrE,iBAAiB,EAAE,OAAO,CAAC;IAC3B,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,+DAA+D;IAC/D,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,CAAC,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mEAAmE;IACnE,YAAY,EAAE,WAAW,CAAC;IAC1B,0DAA0D;IAC1D,KAAK,EAAE;QACL,QAAQ,EAAE,UAAU,CAAC;QACrB,SAAS,EAAE,UAAU,CAAC;QACtB,SAAS,EAAE,UAAU,CAAC;KACvB,CAAC;CACH;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAwBxE,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAWtE;AAED,MAAM,WAAW,sBAAsB;IACrC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,kCAAkC;IAClC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kDAAkD;IAClD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,sBAAsB,EAC7B,OAAO,CAAC,EAAE,MAAM,GACf,YAAY,CAed;AAID,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAW3E;AAED,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,WAAW,CAAC;IAC1B,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,uBAAuB,GAC7B,aAAa,CAiBf;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,CAQlE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAGtD"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Onboarding marker files (spec ed8cf2db).
|
|
3
|
+
*
|
|
4
|
+
* Two marker files communicate "onboarding completed" state between the
|
|
5
|
+
* `cf init` / `cf project init` aggregator commands (spec 1) and the future
|
|
6
|
+
* `cf doctor` / `cf fix` diagnostic commands (spec 2):
|
|
7
|
+
*
|
|
8
|
+
* - `~/.claude-forge/system-installed.json` — system-level (hooks, daemon,
|
|
9
|
+
* LaunchAgent) onboarding state
|
|
10
|
+
* - `<project_root>/.forge-installed.json` — per-project (CLAUDE.md,
|
|
11
|
+
* `.forge-knowledge/`, `.gitignore`) onboarding state
|
|
12
|
+
*
|
|
13
|
+
* Markers are write-overwrite (no merging) — callers decide whether to noop
|
|
14
|
+
* before re-writing. Reads return `null` if the file is missing or malformed.
|
|
15
|
+
*
|
|
16
|
+
* Schema is a frozen contract between spec 1 (this file) and spec 2
|
|
17
|
+
* (doctor); any schema change MUST update both specs and bump `version`.
|
|
18
|
+
*/
|
|
19
|
+
import fs from 'fs';
|
|
20
|
+
import path from 'path';
|
|
21
|
+
import { createRequire } from 'module';
|
|
22
|
+
import { FORGE_HOME } from '../constants.js';
|
|
23
|
+
const require = createRequire(import.meta.url);
|
|
24
|
+
export const SYSTEM_MARKER_FILENAME = 'system-installed.json';
|
|
25
|
+
export const PROJECT_MARKER_FILENAME = '.forge-installed.json';
|
|
26
|
+
export const MARKER_SCHEMA_VERSION = 1;
|
|
27
|
+
// ── version lookup ───────────────────────────────────────────────────────
|
|
28
|
+
let _cachedVersion = null;
|
|
29
|
+
/**
|
|
30
|
+
* Resolve the running `claude-forge` package version. Cached to avoid
|
|
31
|
+
* repeated disk reads. Safe in tests — returns "0.0.0-test" if package.json
|
|
32
|
+
* cannot be read (e.g., in transient temp-dir tests).
|
|
33
|
+
*/
|
|
34
|
+
function getClaudeForgeVersion() {
|
|
35
|
+
if (_cachedVersion)
|
|
36
|
+
return _cachedVersion;
|
|
37
|
+
try {
|
|
38
|
+
const pkg = require('../../../package.json');
|
|
39
|
+
_cachedVersion = pkg.version;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
_cachedVersion = '0.0.0-test';
|
|
43
|
+
}
|
|
44
|
+
return _cachedVersion;
|
|
45
|
+
}
|
|
46
|
+
// ── system marker ────────────────────────────────────────────────────────
|
|
47
|
+
export function systemMarkerPath(homeDir) {
|
|
48
|
+
return path.join(homeDir ?? FORGE_HOME, SYSTEM_MARKER_FILENAME);
|
|
49
|
+
}
|
|
50
|
+
export function readSystemMarker(homeDir) {
|
|
51
|
+
const file = systemMarkerPath(homeDir);
|
|
52
|
+
if (!fs.existsSync(file))
|
|
53
|
+
return null;
|
|
54
|
+
try {
|
|
55
|
+
const raw = fs.readFileSync(file, 'utf-8');
|
|
56
|
+
const parsed = JSON.parse(raw);
|
|
57
|
+
if (parsed.version !== MARKER_SCHEMA_VERSION)
|
|
58
|
+
return null;
|
|
59
|
+
return parsed;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Write the system marker. Creates parent dir if needed. Returns the marker
|
|
67
|
+
* object that was written so callers can use it for summary output.
|
|
68
|
+
*
|
|
69
|
+
* Idempotency contract: callers are responsible for deciding whether to
|
|
70
|
+
* re-write. This function always overwrites if called.
|
|
71
|
+
*/
|
|
72
|
+
export function writeSystemMarker(input, homeDir) {
|
|
73
|
+
const dir = homeDir ?? FORGE_HOME;
|
|
74
|
+
if (!fs.existsSync(dir)) {
|
|
75
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
76
|
+
}
|
|
77
|
+
const marker = {
|
|
78
|
+
version: MARKER_SCHEMA_VERSION,
|
|
79
|
+
initialized_at: input.initialized_at ?? new Date().toISOString(),
|
|
80
|
+
claude_forge_version: input.claude_forge_version ?? getClaudeForgeVersion(),
|
|
81
|
+
launchd_installed: input.launchd_installed,
|
|
82
|
+
platform: input.platform ?? process.platform,
|
|
83
|
+
full_mode: input.full_mode,
|
|
84
|
+
};
|
|
85
|
+
fs.writeFileSync(systemMarkerPath(homeDir), JSON.stringify(marker, null, 2) + '\n', 'utf-8');
|
|
86
|
+
return marker;
|
|
87
|
+
}
|
|
88
|
+
// ── project marker ───────────────────────────────────────────────────────
|
|
89
|
+
export function projectMarkerPath(projectRoot) {
|
|
90
|
+
return path.join(projectRoot, PROJECT_MARKER_FILENAME);
|
|
91
|
+
}
|
|
92
|
+
export function readProjectMarker(projectRoot) {
|
|
93
|
+
const file = projectMarkerPath(projectRoot);
|
|
94
|
+
if (!fs.existsSync(file))
|
|
95
|
+
return null;
|
|
96
|
+
try {
|
|
97
|
+
const raw = fs.readFileSync(file, 'utf-8');
|
|
98
|
+
const parsed = JSON.parse(raw);
|
|
99
|
+
if (parsed.version !== MARKER_SCHEMA_VERSION)
|
|
100
|
+
return null;
|
|
101
|
+
return parsed;
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
export function writeProjectMarker(projectRoot, input) {
|
|
108
|
+
if (!fs.existsSync(projectRoot)) {
|
|
109
|
+
throw new Error(`writeProjectMarker: project root does not exist: ${projectRoot}`);
|
|
110
|
+
}
|
|
111
|
+
const marker = {
|
|
112
|
+
version: MARKER_SCHEMA_VERSION,
|
|
113
|
+
initialized_at: input.initialized_at ?? new Date().toISOString(),
|
|
114
|
+
claude_forge_version: input.claude_forge_version ?? getClaudeForgeVersion(),
|
|
115
|
+
project_type: input.project_type,
|
|
116
|
+
steps: input.steps,
|
|
117
|
+
};
|
|
118
|
+
fs.writeFileSync(projectMarkerPath(projectRoot), JSON.stringify(marker, null, 2) + '\n', 'utf-8');
|
|
119
|
+
return marker;
|
|
120
|
+
}
|
|
121
|
+
// ── project type detector ────────────────────────────────────────────────
|
|
122
|
+
/**
|
|
123
|
+
* Detect project type by manifest-file priority. Pure file-system probe;
|
|
124
|
+
* no side effects, no dependency on storage or daemon.
|
|
125
|
+
*
|
|
126
|
+
* Priority order (spec ed8cf2db §3):
|
|
127
|
+
* 1. package.json → node
|
|
128
|
+
* 2. pyproject.toml → python
|
|
129
|
+
* 3. Cargo.toml → rust
|
|
130
|
+
* 4. go.mod → go
|
|
131
|
+
* 5. else → generic (assumed git repo)
|
|
132
|
+
*/
|
|
133
|
+
export function detectProjectType(projectRoot) {
|
|
134
|
+
const probe = (name) => fs.existsSync(path.join(projectRoot, name));
|
|
135
|
+
if (probe('package.json'))
|
|
136
|
+
return 'node';
|
|
137
|
+
if (probe('pyproject.toml'))
|
|
138
|
+
return 'python';
|
|
139
|
+
if (probe('Cargo.toml'))
|
|
140
|
+
return 'rust';
|
|
141
|
+
if (probe('go.mod'))
|
|
142
|
+
return 'go';
|
|
143
|
+
return 'generic';
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Check whether the given directory is a git repository root (has `.git/`).
|
|
147
|
+
* Used as fail-fast precheck in `cf project init`.
|
|
148
|
+
*/
|
|
149
|
+
export function isGitRepo(projectRoot) {
|
|
150
|
+
const gitPath = path.join(projectRoot, '.git');
|
|
151
|
+
return fs.existsSync(gitPath);
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=markers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markers.js","sourceRoot":"","sources":["../../../src/core/diagnostics/markers.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,4 +13,31 @@ export declare function getCommand(e: ForgeEvent): string | undefined;
|
|
|
13
13
|
export declare function getFilePath(e: ForgeEvent): string | undefined;
|
|
14
14
|
export declare function getUserPrompt(e: ForgeEvent): string | undefined;
|
|
15
15
|
export declare function getSubagentType(e: ForgeEvent): string | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Matches the decision-id magic comment a Task/Agent spawn carries in its
|
|
18
|
+
* prompt header: `<!-- decision-id: XXXXXXXX -->`. The id is 6–8 lowercase
|
|
19
|
+
* hex chars (daemon mints 8-hex; some legacy hints use 6). Case-insensitive so
|
|
20
|
+
* an upper-cased hex still matches, normalised to lowercase by the caller.
|
|
21
|
+
*
|
|
22
|
+
* Decision c425f26f (spec 1544 § 1.2). Exported for unit tests.
|
|
23
|
+
*/
|
|
24
|
+
export declare const SPAWN_DECISION_ID_RE: RegExp;
|
|
25
|
+
/**
|
|
26
|
+
* Pull the two plaintext spawn fields — `decision_id` + `subagent_type` — from
|
|
27
|
+
* a Task/Agent spawn's *decoded* tool_input. Returns `{null, null}` for
|
|
28
|
+
* non-spawn rows or rows missing the fields.
|
|
29
|
+
*
|
|
30
|
+
* CRITICAL (gzip one-way-door, decision c425f26f): callers MUST pass the
|
|
31
|
+
* already-decoded tool_input object (pre-codec on the write path, or
|
|
32
|
+
* `decodeToolInput`-ed on the backfill path) — NEVER the raw gzip blob. The
|
|
33
|
+
* extracted values are written to NEW plaintext columns so SQL can query them
|
|
34
|
+
* directly; they never flow back through `encodeToolInput` / gzip.
|
|
35
|
+
*
|
|
36
|
+
* @param toolName the event's tool_name (only 'Task' / 'Agent' are spawns)
|
|
37
|
+
* @param toolInput the DECODED tool_input object (or null/undefined)
|
|
38
|
+
*/
|
|
39
|
+
export declare function extractSpawnFields(toolName: string | null | undefined, toolInput: unknown): {
|
|
40
|
+
decisionId: string | null;
|
|
41
|
+
subagentType: string | null;
|
|
42
|
+
};
|
|
16
43
|
//# sourceMappingURL=event-fields.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-fields.d.ts","sourceRoot":"","sources":["../../src/core/event-fields.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAG5D;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAG7D;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAI/D;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAGjE"}
|
|
1
|
+
{"version":3,"file":"event-fields.d.ts","sourceRoot":"","sources":["../../src/core/event-fields.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAG5D;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAG7D;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAI/D;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAGjE;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,QAAmD,CAAC;AAErF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,SAAS,EAAE,OAAO,GACjB;IAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAqB5D"}
|
|
@@ -16,4 +16,47 @@ export function getSubagentType(e) {
|
|
|
16
16
|
const s = e.tool_input?.subagent_type;
|
|
17
17
|
return typeof s === 'string' ? s : undefined;
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Matches the decision-id magic comment a Task/Agent spawn carries in its
|
|
21
|
+
* prompt header: `<!-- decision-id: XXXXXXXX -->`. The id is 6–8 lowercase
|
|
22
|
+
* hex chars (daemon mints 8-hex; some legacy hints use 6). Case-insensitive so
|
|
23
|
+
* an upper-cased hex still matches, normalised to lowercase by the caller.
|
|
24
|
+
*
|
|
25
|
+
* Decision c425f26f (spec 1544 § 1.2). Exported for unit tests.
|
|
26
|
+
*/
|
|
27
|
+
export const SPAWN_DECISION_ID_RE = /<!--\s*decision-id:\s*([0-9a-fA-F]{6,8})\s*-->/;
|
|
28
|
+
/**
|
|
29
|
+
* Pull the two plaintext spawn fields — `decision_id` + `subagent_type` — from
|
|
30
|
+
* a Task/Agent spawn's *decoded* tool_input. Returns `{null, null}` for
|
|
31
|
+
* non-spawn rows or rows missing the fields.
|
|
32
|
+
*
|
|
33
|
+
* CRITICAL (gzip one-way-door, decision c425f26f): callers MUST pass the
|
|
34
|
+
* already-decoded tool_input object (pre-codec on the write path, or
|
|
35
|
+
* `decodeToolInput`-ed on the backfill path) — NEVER the raw gzip blob. The
|
|
36
|
+
* extracted values are written to NEW plaintext columns so SQL can query them
|
|
37
|
+
* directly; they never flow back through `encodeToolInput` / gzip.
|
|
38
|
+
*
|
|
39
|
+
* @param toolName the event's tool_name (only 'Task' / 'Agent' are spawns)
|
|
40
|
+
* @param toolInput the DECODED tool_input object (or null/undefined)
|
|
41
|
+
*/
|
|
42
|
+
export function extractSpawnFields(toolName, toolInput) {
|
|
43
|
+
if (toolName !== 'Task' && toolName !== 'Agent') {
|
|
44
|
+
return { decisionId: null, subagentType: null };
|
|
45
|
+
}
|
|
46
|
+
if (!toolInput || typeof toolInput !== 'object' || Array.isArray(toolInput)) {
|
|
47
|
+
return { decisionId: null, subagentType: null };
|
|
48
|
+
}
|
|
49
|
+
const ti = toolInput;
|
|
50
|
+
const subagentType = typeof ti.subagent_type === 'string' && ti.subagent_type.length > 0
|
|
51
|
+
? ti.subagent_type
|
|
52
|
+
: null;
|
|
53
|
+
let decisionId = null;
|
|
54
|
+
const prompt = typeof ti.prompt === 'string' ? ti.prompt : null;
|
|
55
|
+
if (prompt) {
|
|
56
|
+
const m = prompt.match(SPAWN_DECISION_ID_RE);
|
|
57
|
+
if (m)
|
|
58
|
+
decisionId = m[1].toLowerCase();
|
|
59
|
+
}
|
|
60
|
+
return { decisionId, subagentType };
|
|
61
|
+
}
|
|
19
62
|
//# sourceMappingURL=event-fields.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-fields.js","sourceRoot":"","sources":["../../src/core/event-fields.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,UAAU,CAAC,CAAa;IACtC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC;IAChC,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAa;IACvC,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,EAAE,SAAS,IAAI,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC;IAClE,OAAO,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAa;IACzC,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC,WAAW,CAAC;IAC5D,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC;IAC3C,OAAO,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,CAAa;IAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC;IACtC,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC"}
|
|
1
|
+
{"version":3,"file":"event-fields.js","sourceRoot":"","sources":["../../src/core/event-fields.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,UAAU,CAAC,CAAa;IACtC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC;IAChC,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAa;IACvC,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,EAAE,SAAS,IAAI,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC;IAClE,OAAO,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAa;IACzC,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC,WAAW,CAAC;IAC5D,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC;IAC3C,OAAO,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,CAAa;IAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC;IACtC,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,gDAAgD,CAAC;AAErF;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAmC,EACnC,SAAkB;IAElB,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAClD,CAAC;IACD,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5E,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAClD,CAAC;IACD,MAAM,EAAE,GAAG,SAAoC,CAAC;IAEhD,MAAM,YAAY,GAAG,OAAO,EAAE,CAAC,aAAa,KAAK,QAAQ,IAAI,EAAE,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;QACtF,CAAC,CAAC,EAAE,CAAC,aAAa;QAClB,CAAC,CAAC,IAAI,CAAC;IAET,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC7C,IAAI,CAAC;YAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACzC,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global governance protocol injection (global-governance Phase 1,
|
|
3
|
+
* decision 7fa0f2ab).
|
|
4
|
+
*
|
|
5
|
+
* Other projects' Claude sessions read `~/.claude/CLAUDE.md` (the user-level
|
|
6
|
+
* global context) but NOT claude-forge's per-repo CLAUDE.md. So a pointer like
|
|
7
|
+
* "see <repo>/CLAUDE.md" is useless there — they can't resolve the path. We
|
|
8
|
+
* inject a *self-contained, condensed* copy of the DECISION HINT protocol
|
|
9
|
+
* contract directly into the global file, wrapped in idempotent markers.
|
|
10
|
+
*
|
|
11
|
+
* Idempotent: the block lives between `cf:governance:start` / `:end` markers.
|
|
12
|
+
* Re-running replaces the marker contents in place (never appends a duplicate).
|
|
13
|
+
* Reversible: `removeGlobalGovernanceBlock` strips the block.
|
|
14
|
+
*
|
|
15
|
+
* NOTE: this module deliberately takes the target path as a parameter so tests
|
|
16
|
+
* can point it at a temp HOME and NEVER touch the real `~/.claude/CLAUDE.md`.
|
|
17
|
+
*/
|
|
18
|
+
export declare const GOVERNANCE_MARKER_START = "<!-- cf:governance:start -->";
|
|
19
|
+
export declare const GOVERNANCE_MARKER_END = "<!-- cf:governance:end -->";
|
|
20
|
+
/**
|
|
21
|
+
* Resolve the real global CLAUDE.md path (`~/.claude/CLAUDE.md`).
|
|
22
|
+
* Production callers use this; tests pass an explicit temp path instead.
|
|
23
|
+
*/
|
|
24
|
+
export declare function defaultGlobalClaudeMdPath(): string;
|
|
25
|
+
/**
|
|
26
|
+
* The condensed DECISION HINT protocol contract.
|
|
27
|
+
*
|
|
28
|
+
* Authority ruling (decision ed98c8e8, 2026-06-10): the project CLAUDE.md
|
|
29
|
+
* "DECISION HINT 协议契约" section is the SINGLE authoritative full text.
|
|
30
|
+
* This global body is a short pointer-style digest — core directives only,
|
|
31
|
+
* everything else (codegraph/grep 分工、并行细则、例外清单) lives in the
|
|
32
|
+
* project file. This kills the ~950-token triple-injection duplication
|
|
33
|
+
* (global block + project block + hint template all carrying the full text).
|
|
34
|
+
*
|
|
35
|
+
* Also carries the spec-before-change discipline (decision 393481d1): a
|
|
36
|
+
* cross-project user mandate that previously lived only as a hand-written
|
|
37
|
+
* block OUTSIDE the markers on one machine — now folded into the generator
|
|
38
|
+
* so every install gets it via inject-global (same path as decision def0adcb
|
|
39
|
+
* took for the cd/output-redirection Bash convention).
|
|
40
|
+
*
|
|
41
|
+
* Excludes the marker lines; `buildGovernanceBlock` wraps it.
|
|
42
|
+
*/
|
|
43
|
+
export declare const GOVERNANCE_PROTOCOL_BODY = "## claude-forge \u51B3\u7B56\u6CBB\u7406\u534F\u8BAE\uFF08\u5168\u5C40\u6CE8\u5165 \u00B7 \u538B\u7F29\u7248\uFF09\n\n> \u672C\u5757\u7531 `cf governance inject-global` \u81EA\u52A8\u5199\u5165/\u66F4\u65B0\uFF1B\u79FB\u9664\uFF1A`--remove`\u3002\n> \u5B8C\u6574\u534F\u8BAE\uFF08codegraph/grep \u5206\u5DE5\u3001\u5E76\u884C\u7EC6\u5219\u3001\u4F8B\u5916\u6E05\u5355\uFF09\u89C1\u5404\u9879\u76EE CLAUDE.md \u7684\u300CDECISION HINT \u534F\u8BAE\u5951\u7EA6\u300D\u8282\u3002\n\n**\u4E3B\u7EBF\u7A0B\u662F\u7EAF\u7F16\u6392\u8005**\u2014\u2014\u53EA spawn agent\u3001\u4F20\u9012\u7ED3\u679C\u3001\u7B49\u7528\u6237\u6279\u51C6\u3001\u56DE\u586B outcome\uFF1B\u4E0D\u81EA\u5DF1 grep/find \u67E5\u4EE3\u7801\u3001\u4E0D Edit/Write \u5B9E\u65BD\u3002\n1. \u51B3\u7B56\uFF08\u7B2C\u4E00\u52A8\u4F5C\uFF09\uFF1A\u5148 spawn `decision-maker`\uFF08prompt \u5934\u5E26 `<!-- decision-id: XXXX -->`\uFF0C\u82E5\u6709\uFF09\uFF0C\u5B83\u8FD4\u56DE\u524D\u4E0D\u56DE\u7B54\u6B63\u6587\u3001\u4E0D\u52A8\u624B\u3002\n2. \u641C\u7D22/\u67E5\u4EE3\u7801 \u2192 spawn `Explore` / `doc-reviewer`\uFF1B\u5B9E\u65BD\uFF08\u7528\u6237\u6279\u51C6\u540E\uFF09\u2192 spawn `coder` \u7B49\u5B9E\u65BD agent\uFF1B\u5B9E\u65BD\u540E \u2192 spawn `verify-agent`\u3002\n3. \u53EF\u62C6\u5206\u7684\u72EC\u7ACB\u5DE5\u4F5C\u5728\u4E00\u6761\u6D88\u606F\u91CC batch spawn \u5E76\u884C\u8DD1\uFF1Bbypass\uFF1Aprompt \u672B\u5C3E\u52A0 `skip decision`\u3002\n\n> \u8BDA\u5B9E\u8FB9\u754C\uFF1A\u5F3A\u6307\u4EE4\u3001\u975E\u673A\u68B0\u9501\u2014\u2014\u63D0\u9AD8\u9075\u5B88\u7387\uFF0C\u4E0D\u505A 100% \u4FDD\u8BC1\u3002\n\n## Bash \u547D\u4EE4\u7EA6\u5B9A\uFF08\u51CF\u5C11\u6388\u6743\u5F39\u7A97\uFF09\n\n\u8DD1 Bash \u65F6**\u4E0D\u8981**\u5199\u300C`cd <\u8DEF\u5F84> && cmd > file`\u300D\u8FD9\u79CD\u300C\u590D\u5408\u547D\u4EE4 + cd + \u8F93\u51FA\u91CD\u5B9A\u5411\u300D\n\u7EC4\u5408\u2014\u2014\u5B83\u89E6\u53D1 Claude Code \u7684 path-resolution-bypass \u5B89\u5168\u68C0\u67E5\uFF08`Compound command\ncontains cd with output redirection - manual approval required`\uFF09\uFF0C\u8BE5\u68C0\u67E5**\u65E0\u6CD5**\u7528\n`permissions.allow` \u653E\u884C\uFF0C\u53EA\u80FD\u4ECE\u547D\u4EE4\u5199\u6CD5\u89C4\u907F\uFF1A\n\n- \u274C `cd /some/path && cmd > file`\uFF08\u89E6\u53D1\u5F3A\u5236\u4EBA\u5DE5\u6279\u51C6\uFF09\n- \u2705 \u7528\u7EDD\u5BF9\u8DEF\u5F84\uFF1A`cmd > /some/path/file`\uFF0C\u76EE\u6807\u8DEF\u5F84\u5199\u5168\n- \u2705 \u5DE5\u4F5C\u76EE\u5F55\u672C\u6765\u5C31\u6301\u4E45\u5728\u9879\u76EE\u6839\uFF0C**\u591A\u6570\u547D\u4EE4\u6839\u672C\u4E0D\u9700\u8981 `cd` \u524D\u7F00**\u2014\u2014\u76F4\u63A5\u8DD1\n- \u2705 \u5B9E\u5728\u8981\u6362\u76EE\u5F55\uFF0C\u5206\u4E24\u6761\u72EC\u7ACB\u547D\u4EE4\uFF0C\u6216\u4E0D\u5E26 `>` \u91CD\u5B9A\u5411\n\n> \u8FD9\u80FD\u6D88\u9664\u8DE8\u9879\u76EE\u53CD\u590D\u51FA\u73B0\u7684 `cd` \u6388\u6743\u5F39\u7A97\uFF0C\u4E14\u4E0D\u727A\u7272\u5B89\u5168\uFF08\u65E0\u9700\u5F00 bypassPermissions\uFF09\u3002\n> \u8FD9\u662F\u5F3A\u7EA6\u5B9A\u3001\u975E\u786C\u9501\u2014\u2014\u63D0\u9AD8\u9075\u5B88\u7387\uFF0C\u4E0D\u505A 100% \u4FDD\u8BC1\u3002\n\n## \u901A\u7528\u5DE5\u7A0B\u7EAA\u5F8B\uFF1A\u4EE3\u7801\u6539\u52A8\u524D\u5148\u5199 spec\uFF08\u6240\u6709\u9879\u76EE \u00B7 \u7528\u6237\u5F3A\u5236\uFF09\n\n\u4EFB\u4F55**\u6D89\u53CA\u4EE3\u7801\u6539\u52A8**\u7684\u4EFB\u52A1\uFF08bugfix / \u6837\u5F0F / \u5355\u70B9 / \u91CD\u6784 / \u65B0\u529F\u80FD\uFF09\u5B9E\u65BD\u524D**\u5FC5\u987B**\u5148\u5199\u4E00\u4EFD spec\n\u7ECF\u7528\u6237\u6279\u51C6\uFF0C\u518D spawn \u5B9E\u65BD agent\uFF1B\u9002\u7528**\u6240\u6709\u9879\u76EE**\u3002\n- \u6D41\u7A0B\uFF1Aspawn `planner`\uFF08\u6216\u9879\u76EE\u7EA6\u5B9A spec agent\uFF09\u5199 spec \u5230 `docs/design/` \u2192 \u7528\u6237\u6279\u51C6 \u2192 \u624D spawn `coder` \u5B9E\u65BD \u2192 \u5B9E\u65BD\u540E `verify-agent`\u3002\n- \u4E8B\u540E changelog / \u5B9E\u65BD\u8BB0\u5F55**\u4E0D\u80FD**\u66FF\u4EE3\u300C\u5B9E\u65BD\u524D\u7684 spec\u300D\uFF1B**\u4E0D\u5F97**\u4EE5\u300C\u5C0F / trivial / \u5DF2\u8BCA\u65AD\u6E05\u695A / \u53EA\u6539\u4E00\u884C\u300D\u4E3A\u7531\u8DF3\u8FC7\u3002\n- \u4F8B\u5916\uFF08\u4E0D\u9700 spec\uFF09\uFF1A\u7EAF\u67E5\u8BE2 / \u8BCA\u65AD / \u5143\u4EFB\u52A1\uFF08commit\u3001build\u3001restart\u3001\u6539\u7248\u672C\u53F7\u3001\u6539\u6587\u6863/\u6CE8\u91CA\uFF09\u3002\n\n> \u5F3A\u6307\u4EE4\u3001\u975E\u673A\u68B0\u9501\u2014\u2014\u63D0\u9AD8\u9075\u5B88\u7387\uFF0C\u4E0D\u505A 100% \u4FDD\u8BC1\u3002\u8FD9\u6761\u7531\u4E3B\u7EBF\u7A0B\u81EA\u5F8B\u4FDD\u8BC1\u3002";
|
|
44
|
+
/** Wrap the protocol body in idempotent markers. */
|
|
45
|
+
export declare function buildGovernanceBlock(body?: string): string;
|
|
46
|
+
export interface InjectResult {
|
|
47
|
+
/** 'created' = file did not exist; 'inserted' = block added; 'updated' = block replaced; 'removed' = block stripped; 'absent' = nothing to remove. */
|
|
48
|
+
action: 'created' | 'inserted' | 'updated' | 'removed' | 'absent';
|
|
49
|
+
/** Resolved target path. */
|
|
50
|
+
path: string;
|
|
51
|
+
/** Backup path written before mutating an existing file (null if no pre-existing file). */
|
|
52
|
+
backupPath: string | null;
|
|
53
|
+
}
|
|
54
|
+
/** True when the file content already contains a governance marker block. */
|
|
55
|
+
export declare function hasGovernanceBlock(content: string): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Strip legacy forge-resume residue from the GLOBAL CLAUDE.md content
|
|
58
|
+
* (decision ed98c8e8, 2026-06-10).
|
|
59
|
+
*
|
|
60
|
+
* The resume engine historically wrote "上次工作续接" blocks into
|
|
61
|
+
* `~/.claude/CLAUDE.md`; that target was later retired (resume now goes to
|
|
62
|
+
* the per-project CLAUDE.md only), leaving stale blocks behind that get
|
|
63
|
+
* re-injected into every session of every project. This removes all known
|
|
64
|
+
* forms:
|
|
65
|
+
* 1. UUID envelope: `<!-- forge:resume-begin:<uuid> -->…<!-- forge:resume-end:<uuid> -->`
|
|
66
|
+
* 2. Legacy markers: `<!-- forge:resume -->…<!-- forge:end-resume -->`
|
|
67
|
+
* (both delegated to the shared `stripForgeResumeBlocks` util)
|
|
68
|
+
* 3. Bare fenced residue: optional `## 上次工作续接` heading +
|
|
69
|
+
* ```forge-resume-body``` fence + trailing `_生成时间: …_` line.
|
|
70
|
+
*
|
|
71
|
+
* Called by `injectGlobalGovernance` on every run, so the one-time cleanup
|
|
72
|
+
* self-heals even if stale content reappears.
|
|
73
|
+
*/
|
|
74
|
+
export declare function stripLegacyResumeBlocks(content: string): string;
|
|
75
|
+
/**
|
|
76
|
+
* Idempotently inject (or update) the governance block into `targetPath`.
|
|
77
|
+
*
|
|
78
|
+
* - File missing → create it (with the block as its content).
|
|
79
|
+
* - Block present → replace marker contents in place.
|
|
80
|
+
* - Block absent → append the block (separated by a blank line).
|
|
81
|
+
*
|
|
82
|
+
* Always backs up a pre-existing file to `<path>.bak` before mutating.
|
|
83
|
+
*/
|
|
84
|
+
export declare function injectGlobalGovernance(targetPath?: string, body?: string): InjectResult;
|
|
85
|
+
/**
|
|
86
|
+
* Remove the governance block from `targetPath` (reversible counterpart).
|
|
87
|
+
* Backs up the file first. Returns 'absent' when there is no block / no file.
|
|
88
|
+
*/
|
|
89
|
+
export declare function removeGlobalGovernanceBlock(targetPath?: string): InjectResult;
|
|
90
|
+
//# sourceMappingURL=global-inject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global-inject.d.ts","sourceRoot":"","sources":["../../../src/core/governance/global-inject.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,eAAO,MAAM,uBAAuB,iCAAiC,CAAC;AACtE,eAAO,MAAM,qBAAqB,+BAA+B,CAAC;AAElE;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,wBAAwB,48IAmCI,CAAC;AAE1C,oDAAoD;AACpD,wBAAgB,oBAAoB,CAAC,IAAI,GAAE,MAAiC,GAAG,MAAM,CAEpF;AAED,MAAM,WAAW,YAAY;IAC3B,sJAAsJ;IACtJ,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IAClE,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,2FAA2F;IAC3F,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAWD,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAY/D;AAQD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,GAAE,MAAoC,EAChD,IAAI,GAAE,MAAiC,GACtC,YAAY,CAyBd;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,UAAU,GAAE,MAAoC,GAC/C,YAAY,CAcd"}
|