@winspan/claude-forge 8.54.3 → 9.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DEVELOPMENT.md +649 -33
- package/README.md +155 -17
- package/dist/catalogs/agents.json +72 -0
- package/dist/catalogs/skills.json +194 -0
- package/dist/claudemd/claudemd-generator.d.ts +45 -45
- package/dist/claudemd/claudemd-generator.d.ts.map +1 -1
- package/dist/claudemd/claudemd-generator.js +128 -449
- package/dist/claudemd/claudemd-generator.js.map +1 -1
- package/dist/claudemd/index.d.ts +14 -4
- package/dist/claudemd/index.d.ts.map +1 -1
- package/dist/claudemd/index.js +15 -4
- package/dist/claudemd/index.js.map +1 -1
- package/dist/claudemd/resume-manager.d.ts.map +1 -1
- package/dist/claudemd/resume-manager.js +37 -9
- package/dist/claudemd/resume-manager.js.map +1 -1
- package/dist/claudemd/templates/swarm-protocol.md +35 -186
- package/dist/claudemd/violations-manager.d.ts +40 -0
- package/dist/claudemd/violations-manager.d.ts.map +1 -0
- package/dist/claudemd/violations-manager.js +106 -0
- package/dist/claudemd/violations-manager.js.map +1 -0
- package/dist/cli/commands/admin.d.ts +15 -0
- package/dist/cli/commands/admin.d.ts.map +1 -0
- package/dist/cli/commands/admin.js +177 -0
- package/dist/cli/commands/admin.js.map +1 -0
- package/dist/cli/commands/agents.d.ts +18 -0
- package/dist/cli/commands/agents.d.ts.map +1 -0
- package/dist/cli/commands/agents.js +160 -0
- package/dist/cli/commands/agents.js.map +1 -0
- package/dist/cli/commands/bypass.d.ts +18 -0
- package/dist/cli/commands/bypass.d.ts.map +1 -0
- package/dist/cli/commands/bypass.js +87 -0
- package/dist/cli/commands/bypass.js.map +1 -0
- package/dist/cli/commands/claudemd.d.ts +60 -0
- package/dist/cli/commands/claudemd.d.ts.map +1 -1
- package/dist/cli/commands/claudemd.js +174 -37
- package/dist/cli/commands/claudemd.js.map +1 -1
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +94 -1
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/daemon.d.ts +39 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -1
- package/dist/cli/commands/daemon.js +167 -20
- package/dist/cli/commands/daemon.js.map +1 -1
- package/dist/cli/commands/decisions.d.ts +129 -0
- package/dist/cli/commands/decisions.d.ts.map +1 -0
- package/dist/cli/commands/decisions.js +669 -0
- package/dist/cli/commands/decisions.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +29 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +124 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/entropy.d.ts +35 -0
- package/dist/cli/commands/entropy.d.ts.map +1 -0
- package/dist/cli/commands/entropy.js +121 -0
- package/dist/cli/commands/entropy.js.map +1 -0
- package/dist/cli/commands/executions.d.ts +1 -0
- package/dist/cli/commands/executions.d.ts.map +1 -1
- package/dist/cli/commands/executions.js +10 -1
- package/dist/cli/commands/executions.js.map +1 -1
- package/dist/cli/commands/fix.d.ts +31 -0
- package/dist/cli/commands/fix.d.ts.map +1 -0
- package/dist/cli/commands/fix.js +108 -0
- package/dist/cli/commands/fix.js.map +1 -0
- package/dist/cli/commands/governance.d.ts +21 -0
- package/dist/cli/commands/governance.d.ts.map +1 -0
- package/dist/cli/commands/governance.js +60 -0
- package/dist/cli/commands/governance.js.map +1 -0
- package/dist/cli/commands/init.d.ts +27 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +158 -146
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/insights-goal-check.d.ts +50 -0
- package/dist/cli/commands/insights-goal-check.d.ts.map +1 -0
- package/dist/cli/commands/insights-goal-check.js +318 -0
- package/dist/cli/commands/insights-goal-check.js.map +1 -0
- package/dist/cli/commands/insights.d.ts +15 -0
- package/dist/cli/commands/insights.d.ts.map +1 -0
- package/dist/cli/commands/insights.js +127 -0
- package/dist/cli/commands/insights.js.map +1 -0
- package/dist/cli/commands/knowledge.d.ts +66 -0
- package/dist/cli/commands/knowledge.d.ts.map +1 -0
- package/dist/cli/commands/knowledge.js +897 -0
- package/dist/cli/commands/knowledge.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +0 -12
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +11 -5
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/menu.d.ts.map +1 -1
- package/dist/cli/commands/menu.js +10 -184
- package/dist/cli/commands/menu.js.map +1 -1
- package/dist/cli/commands/project.d.ts +98 -0
- package/dist/cli/commands/project.d.ts.map +1 -0
- package/dist/cli/commands/project.js +382 -0
- package/dist/cli/commands/project.js.map +1 -0
- package/dist/cli/commands/skills.d.ts.map +1 -1
- package/dist/cli/commands/skills.js +14 -128
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/spec.d.ts +40 -0
- package/dist/cli/commands/spec.d.ts.map +1 -0
- package/dist/cli/commands/spec.js +49 -0
- package/dist/cli/commands/spec.js.map +1 -0
- package/dist/cli/commands/stats.d.ts.map +1 -1
- package/dist/cli/commands/stats.js +3 -2
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +17 -2
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/trace.d.ts.map +1 -1
- package/dist/cli/commands/trace.js +4 -9
- package/dist/cli/commands/trace.js.map +1 -1
- package/dist/cli/commands/violations.d.ts +14 -0
- package/dist/cli/commands/violations.d.ts.map +1 -0
- package/dist/cli/commands/violations.js +43 -0
- package/dist/cli/commands/violations.js.map +1 -0
- package/dist/cli/index.js +26 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/hook-manager.d.ts +1 -1
- package/dist/cli/init/hook-manager.d.ts.map +1 -1
- package/dist/cli/init/hook-manager.js +6 -0
- package/dist/cli/init/hook-manager.js.map +1 -1
- package/dist/cli/utils/resolve-session.d.ts +32 -0
- package/dist/cli/utils/resolve-session.d.ts.map +1 -0
- package/dist/cli/utils/resolve-session.js +39 -0
- package/dist/cli/utils/resolve-session.js.map +1 -0
- package/dist/core/config.d.ts +4 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +11 -23
- package/dist/core/config.js.map +1 -1
- package/dist/core/constants.d.ts +14 -13
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +20 -13
- package/dist/core/constants.js.map +1 -1
- package/dist/core/diagnostics/checks.d.ts +151 -0
- package/dist/core/diagnostics/checks.d.ts.map +1 -0
- package/dist/core/diagnostics/checks.js +765 -0
- package/dist/core/diagnostics/checks.js.map +1 -0
- package/dist/core/diagnostics/daemon-status.d.ts +77 -0
- package/dist/core/diagnostics/daemon-status.d.ts.map +1 -0
- package/dist/core/diagnostics/daemon-status.js +113 -0
- package/dist/core/diagnostics/daemon-status.js.map +1 -0
- package/dist/core/diagnostics/entropy-checks.d.ts +82 -0
- package/dist/core/diagnostics/entropy-checks.d.ts.map +1 -0
- package/dist/core/diagnostics/entropy-checks.js +395 -0
- package/dist/core/diagnostics/entropy-checks.js.map +1 -0
- package/dist/core/diagnostics/fix-runner.d.ts +54 -0
- package/dist/core/diagnostics/fix-runner.d.ts.map +1 -0
- package/dist/core/diagnostics/fix-runner.js +90 -0
- package/dist/core/diagnostics/fix-runner.js.map +1 -0
- package/dist/core/diagnostics/knip-runner.d.ts +49 -0
- package/dist/core/diagnostics/knip-runner.d.ts.map +1 -0
- package/dist/core/diagnostics/knip-runner.js +100 -0
- package/dist/core/diagnostics/knip-runner.js.map +1 -0
- package/dist/core/diagnostics/markers.d.ts +96 -0
- package/dist/core/diagnostics/markers.d.ts.map +1 -0
- package/dist/core/diagnostics/markers.js +153 -0
- package/dist/core/diagnostics/markers.js.map +1 -0
- package/dist/core/governance/global-inject.d.ts +60 -0
- package/dist/core/governance/global-inject.d.ts.map +1 -0
- package/dist/core/governance/global-inject.js +129 -0
- package/dist/core/governance/global-inject.js.map +1 -0
- package/dist/core/queue/index.d.ts +16 -3
- package/dist/core/queue/index.d.ts.map +1 -1
- package/dist/core/queue/index.js +14 -3
- package/dist/core/queue/index.js.map +1 -1
- package/dist/core/storage/base.d.ts +158 -0
- package/dist/core/storage/base.d.ts.map +1 -1
- package/dist/core/storage/base.js +570 -0
- package/dist/core/storage/base.js.map +1 -1
- package/dist/core/storage/codec/tool-input-codec.d.ts +93 -0
- package/dist/core/storage/codec/tool-input-codec.d.ts.map +1 -0
- package/dist/core/storage/codec/tool-input-codec.js +159 -0
- package/dist/core/storage/codec/tool-input-codec.js.map +1 -0
- package/dist/core/storage/decisions.d.ts +362 -0
- package/dist/core/storage/decisions.d.ts.map +1 -0
- package/dist/core/storage/decisions.js +502 -0
- package/dist/core/storage/decisions.js.map +1 -0
- package/dist/core/storage/events.d.ts +112 -8
- package/dist/core/storage/events.d.ts.map +1 -1
- package/dist/core/storage/events.js +390 -39
- package/dist/core/storage/events.js.map +1 -1
- package/dist/core/storage/feedback.d.ts +131 -0
- package/dist/core/storage/feedback.d.ts.map +1 -0
- package/dist/core/storage/feedback.js +187 -0
- package/dist/core/storage/feedback.js.map +1 -0
- package/dist/core/storage/forge-config.d.ts +40 -0
- package/dist/core/storage/forge-config.d.ts.map +1 -0
- package/dist/core/storage/forge-config.js +65 -0
- package/dist/core/storage/forge-config.js.map +1 -0
- package/dist/core/storage/injections.d.ts +28 -0
- package/dist/core/storage/injections.d.ts.map +1 -1
- package/dist/core/storage/injections.js +62 -5
- package/dist/core/storage/injections.js.map +1 -1
- package/dist/core/storage/knowledge.d.ts +106 -0
- package/dist/core/storage/knowledge.d.ts.map +1 -0
- package/dist/core/storage/knowledge.js +202 -0
- package/dist/core/storage/knowledge.js.map +1 -0
- package/dist/core/storage/maintenance.d.ts +36 -9
- package/dist/core/storage/maintenance.d.ts.map +1 -1
- package/dist/core/storage/maintenance.js +56 -24
- package/dist/core/storage/maintenance.js.map +1 -1
- package/dist/core/storage/pipeline-rollup.d.ts +117 -0
- package/dist/core/storage/pipeline-rollup.d.ts.map +1 -0
- package/dist/core/storage/pipeline-rollup.js +471 -0
- package/dist/core/storage/pipeline-rollup.js.map +1 -0
- package/dist/core/storage/routing.d.ts +16 -3
- package/dist/core/storage/routing.d.ts.map +1 -1
- package/dist/core/storage/routing.js +39 -8
- package/dist/core/storage/routing.js.map +1 -1
- package/dist/core/storage/rows.d.ts +50 -7
- package/dist/core/storage/rows.d.ts.map +1 -1
- package/dist/core/storage/schema.sql +302 -23
- package/dist/core/storage/sessions.d.ts +136 -0
- package/dist/core/storage/sessions.d.ts.map +1 -1
- package/dist/core/storage/sessions.js +351 -15
- package/dist/core/storage/sessions.js.map +1 -1
- package/dist/core/storage/skills.d.ts +1 -0
- package/dist/core/storage/skills.d.ts.map +1 -1
- package/dist/core/storage/skills.js +21 -6
- package/dist/core/storage/skills.js.map +1 -1
- package/dist/core/storage/sqlite.d.ts +253 -20
- package/dist/core/storage/sqlite.d.ts.map +1 -1
- package/dist/core/storage/sqlite.js +425 -16
- package/dist/core/storage/sqlite.js.map +1 -1
- package/dist/core/storage/tasks.d.ts +474 -2
- package/dist/core/storage/tasks.d.ts.map +1 -1
- package/dist/core/storage/tasks.js +1213 -18
- package/dist/core/storage/tasks.js.map +1 -1
- package/dist/core/storage/tool-intercepts.d.ts +69 -0
- package/dist/core/storage/tool-intercepts.d.ts.map +1 -0
- package/dist/core/storage/tool-intercepts.js +116 -0
- package/dist/core/storage/tool-intercepts.js.map +1 -0
- package/dist/core/storage/workflow-recommendations.d.ts +124 -0
- package/dist/core/storage/workflow-recommendations.d.ts.map +1 -0
- package/dist/core/storage/workflow-recommendations.js +274 -0
- package/dist/core/storage/workflow-recommendations.js.map +1 -0
- package/dist/core/types.d.ts +112 -17
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +12 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/utils/backup.d.ts +81 -0
- package/dist/core/utils/backup.d.ts.map +1 -0
- package/dist/core/utils/backup.js +98 -0
- package/dist/core/utils/backup.js.map +1 -0
- package/dist/core/utils/binary-paths.d.ts +92 -0
- package/dist/core/utils/binary-paths.d.ts.map +1 -0
- package/dist/core/utils/binary-paths.js +166 -0
- package/dist/core/utils/binary-paths.js.map +1 -0
- package/dist/core/utils/bypass-token.d.ts +75 -0
- package/dist/core/utils/bypass-token.d.ts.map +1 -0
- package/dist/core/utils/bypass-token.js +133 -0
- package/dist/core/utils/bypass-token.js.map +1 -0
- package/dist/core/utils/cc-builtin-agents.d.ts +3 -0
- package/dist/core/utils/cc-builtin-agents.d.ts.map +1 -0
- package/dist/core/utils/cc-builtin-agents.js +29 -0
- package/dist/core/utils/cc-builtin-agents.js.map +1 -0
- package/dist/core/utils/claude-cli-spawn.d.ts +106 -0
- package/dist/core/utils/claude-cli-spawn.d.ts.map +1 -0
- package/dist/core/utils/claude-cli-spawn.js +219 -0
- package/dist/core/utils/claude-cli-spawn.js.map +1 -0
- package/dist/core/utils/forge-resume-block.d.ts.map +1 -1
- package/dist/core/utils/forge-resume-block.js +3 -2
- package/dist/core/utils/forge-resume-block.js.map +1 -1
- package/dist/core/utils/logger.d.ts +15 -3
- package/dist/core/utils/logger.d.ts.map +1 -1
- package/dist/core/utils/logger.js +20 -2
- package/dist/core/utils/logger.js.map +1 -1
- package/dist/core/utils/noise-prompt.d.ts +97 -0
- package/dist/core/utils/noise-prompt.d.ts.map +1 -0
- package/dist/core/utils/noise-prompt.js +127 -0
- package/dist/core/utils/noise-prompt.js.map +1 -0
- package/dist/core/utils/path.d.ts +0 -4
- package/dist/core/utils/path.d.ts.map +1 -1
- package/dist/core/utils/path.js +0 -7
- package/dist/core/utils/path.js.map +1 -1
- package/dist/core/utils/time.d.ts +41 -0
- package/dist/core/utils/time.d.ts.map +1 -1
- package/dist/core/utils/time.js +114 -0
- package/dist/core/utils/time.js.map +1 -1
- package/dist/daemon/agent-sync.d.ts +24 -0
- package/dist/daemon/agent-sync.d.ts.map +1 -0
- package/dist/daemon/agent-sync.js +114 -0
- package/dist/daemon/agent-sync.js.map +1 -0
- package/dist/daemon/config-store.d.ts +55 -0
- package/dist/daemon/config-store.d.ts.map +1 -0
- package/dist/daemon/config-store.js +137 -0
- package/dist/daemon/config-store.js.map +1 -0
- package/dist/daemon/event-parser.d.ts +22 -0
- package/dist/daemon/event-parser.d.ts.map +1 -1
- package/dist/daemon/event-parser.js +49 -3
- package/dist/daemon/event-parser.js.map +1 -1
- package/dist/daemon/handlers/history-exporter.d.ts.map +1 -1
- package/dist/daemon/handlers/history-exporter.js +9 -8
- package/dist/daemon/handlers/history-exporter.js.map +1 -1
- package/dist/daemon/handlers/post-tool-use.d.ts +58 -4
- package/dist/daemon/handlers/post-tool-use.d.ts.map +1 -1
- package/dist/daemon/handlers/post-tool-use.js +261 -8
- package/dist/daemon/handlers/post-tool-use.js.map +1 -1
- package/dist/daemon/handlers/pre-tool-use.d.ts +156 -0
- package/dist/daemon/handlers/pre-tool-use.d.ts.map +1 -0
- package/dist/daemon/handlers/pre-tool-use.js +585 -0
- package/dist/daemon/handlers/pre-tool-use.js.map +1 -0
- package/dist/daemon/handlers/stop.d.ts +35 -7
- package/dist/daemon/handlers/stop.d.ts.map +1 -1
- package/dist/daemon/handlers/stop.js +157 -8
- package/dist/daemon/handlers/stop.js.map +1 -1
- package/dist/daemon/handlers/user-prompt.d.ts +36 -14
- package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
- package/dist/daemon/handlers/user-prompt.js +135 -48
- package/dist/daemon/handlers/user-prompt.js.map +1 -1
- package/dist/daemon/hook-sync.d.ts.map +1 -1
- package/dist/daemon/hook-sync.js +2 -1
- package/dist/daemon/hook-sync.js.map +1 -1
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +471 -43
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/lifecycle.d.ts +48 -1
- package/dist/daemon/lifecycle.d.ts.map +1 -1
- package/dist/daemon/lifecycle.js +98 -2
- package/dist/daemon/lifecycle.js.map +1 -1
- package/dist/daemon/router.d.ts +4 -1
- package/dist/daemon/router.d.ts.map +1 -1
- package/dist/daemon/router.js +4 -2
- package/dist/daemon/router.js.map +1 -1
- package/dist/daemon/rules/defaults.d.ts +20 -0
- package/dist/daemon/rules/defaults.d.ts.map +1 -0
- package/dist/daemon/rules/defaults.js +692 -0
- package/dist/daemon/rules/defaults.js.map +1 -0
- package/dist/daemon/rules/registry.d.ts +47 -0
- package/dist/daemon/rules/registry.d.ts.map +1 -0
- package/dist/daemon/rules/registry.js +84 -0
- package/dist/daemon/rules/registry.js.map +1 -0
- package/dist/daemon/rules/types.d.ts +170 -0
- package/dist/daemon/rules/types.d.ts.map +1 -0
- package/dist/daemon/rules/types.js +15 -0
- package/dist/daemon/rules/types.js.map +1 -0
- package/dist/daemon/rules/whitelist.d.ts +101 -0
- package/dist/daemon/rules/whitelist.d.ts.map +1 -0
- package/dist/daemon/rules/whitelist.js +210 -0
- package/dist/daemon/rules/whitelist.js.map +1 -0
- package/dist/daemon/rules/workflow-defaults.d.ts +52 -0
- package/dist/daemon/rules/workflow-defaults.d.ts.map +1 -0
- package/dist/daemon/rules/workflow-defaults.js +521 -0
- package/dist/daemon/rules/workflow-defaults.js.map +1 -0
- package/dist/daemon/server.d.ts +11 -1
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +7 -1
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/services/context-injector.d.ts +34 -0
- package/dist/daemon/services/context-injector.d.ts.map +1 -0
- package/dist/daemon/services/context-injector.js +61 -0
- package/dist/daemon/services/context-injector.js.map +1 -0
- package/dist/daemon/services/decision-hint.d.ts +203 -0
- package/dist/daemon/services/decision-hint.d.ts.map +1 -0
- package/dist/daemon/services/decision-hint.js +487 -0
- package/dist/daemon/services/decision-hint.js.map +1 -0
- package/dist/daemon/services/event-ttl-sweep.d.ts +86 -0
- package/dist/daemon/services/event-ttl-sweep.d.ts.map +1 -0
- package/dist/daemon/services/event-ttl-sweep.js +123 -0
- package/dist/daemon/services/event-ttl-sweep.js.map +1 -0
- package/dist/daemon/services/experience-extractor.d.ts +67 -0
- package/dist/daemon/services/experience-extractor.d.ts.map +1 -0
- package/dist/daemon/services/experience-extractor.js +323 -0
- package/dist/daemon/services/experience-extractor.js.map +1 -0
- package/dist/daemon/services/feedback-aggregator.d.ts +179 -0
- package/dist/daemon/services/feedback-aggregator.d.ts.map +1 -0
- package/dist/daemon/services/feedback-aggregator.js +455 -0
- package/dist/daemon/services/feedback-aggregator.js.map +1 -0
- package/dist/daemon/services/heartbeat-writer.d.ts +55 -0
- package/dist/daemon/services/heartbeat-writer.d.ts.map +1 -0
- package/dist/daemon/services/heartbeat-writer.js +111 -0
- package/dist/daemon/services/heartbeat-writer.js.map +1 -0
- package/dist/daemon/services/idle-session-sweeper.d.ts +61 -0
- package/dist/daemon/services/idle-session-sweeper.d.ts.map +1 -0
- package/dist/daemon/services/idle-session-sweeper.js +94 -0
- package/dist/daemon/services/idle-session-sweeper.js.map +1 -0
- package/dist/daemon/services/idle-task-budget.d.ts +50 -0
- package/dist/daemon/services/idle-task-budget.d.ts.map +1 -0
- package/dist/daemon/services/idle-task-budget.js +72 -0
- package/dist/daemon/services/idle-task-budget.js.map +1 -0
- package/dist/daemon/services/intercept-revive.d.ts +60 -0
- package/dist/daemon/services/intercept-revive.d.ts.map +1 -0
- package/dist/daemon/services/intercept-revive.js +86 -0
- package/dist/daemon/services/intercept-revive.js.map +1 -0
- package/dist/daemon/services/intercept-rollback-guard.d.ts +105 -0
- package/dist/daemon/services/intercept-rollback-guard.d.ts.map +1 -0
- package/dist/daemon/services/intercept-rollback-guard.js +152 -0
- package/dist/daemon/services/intercept-rollback-guard.js.map +1 -0
- package/dist/daemon/services/intercept-timeout-sweeper.d.ts +58 -0
- package/dist/daemon/services/intercept-timeout-sweeper.d.ts.map +1 -0
- package/dist/daemon/services/intercept-timeout-sweeper.js +83 -0
- package/dist/daemon/services/intercept-timeout-sweeper.js.map +1 -0
- package/dist/daemon/services/kb-injector.d.ts +57 -0
- package/dist/daemon/services/kb-injector.d.ts.map +1 -0
- package/dist/daemon/services/kb-injector.js +140 -0
- package/dist/daemon/services/kb-injector.js.map +1 -0
- package/dist/daemon/services/outcome-classification-service.d.ts +49 -0
- package/dist/daemon/services/outcome-classification-service.d.ts.map +1 -0
- package/dist/daemon/services/outcome-classification-service.js +214 -0
- package/dist/daemon/services/outcome-classification-service.js.map +1 -0
- package/dist/daemon/services/outcome-classifier.d.ts +136 -0
- package/dist/daemon/services/outcome-classifier.d.ts.map +1 -0
- package/dist/daemon/services/outcome-classifier.js +178 -0
- package/dist/daemon/services/outcome-classifier.js.map +1 -0
- package/dist/daemon/services/outcome-nudge.d.ts +107 -0
- package/dist/daemon/services/outcome-nudge.d.ts.map +1 -0
- package/dist/daemon/services/outcome-nudge.js +242 -0
- package/dist/daemon/services/outcome-nudge.js.map +1 -0
- package/dist/daemon/services/spec-approval.d.ts +127 -0
- package/dist/daemon/services/spec-approval.d.ts.map +1 -0
- package/dist/daemon/services/spec-approval.js +216 -0
- package/dist/daemon/services/spec-approval.js.map +1 -0
- package/dist/daemon/services/spec-gate.d.ts +54 -0
- package/dist/daemon/services/spec-gate.d.ts.map +1 -0
- package/dist/daemon/services/spec-gate.js +113 -0
- package/dist/daemon/services/spec-gate.js.map +1 -0
- package/dist/daemon/services/task-boundary-classifier.d.ts +78 -0
- package/dist/daemon/services/task-boundary-classifier.d.ts.map +1 -0
- package/dist/daemon/services/task-boundary-classifier.js +202 -0
- package/dist/daemon/services/task-boundary-classifier.js.map +1 -0
- package/dist/daemon/services/task-segmenter.d.ts +219 -1
- package/dist/daemon/services/task-segmenter.d.ts.map +1 -1
- package/dist/daemon/services/task-segmenter.js +481 -17
- package/dist/daemon/services/task-segmenter.js.map +1 -1
- package/dist/daemon/services/violation-reporter.d.ts +130 -0
- package/dist/daemon/services/violation-reporter.d.ts.map +1 -0
- package/dist/daemon/services/violation-reporter.js +339 -0
- package/dist/daemon/services/violation-reporter.js.map +1 -0
- package/dist/daemon/skill-sync.d.ts +7 -2
- package/dist/daemon/skill-sync.d.ts.map +1 -1
- package/dist/daemon/skill-sync.js +114 -9
- package/dist/daemon/skill-sync.js.map +1 -1
- package/dist/daemon/templates/agents/claudemd-writer.md +101 -0
- package/dist/daemon/templates/agents/coder.md +105 -0
- package/dist/daemon/templates/agents/decision-maker.md +460 -0
- package/dist/daemon/templates/agents/doc-reviewer.md +115 -0
- package/dist/daemon/templates/agents/harness-debug-full.md +114 -0
- package/dist/daemon/templates/agents/harness-hotfix.md +99 -0
- package/dist/daemon/templates/agents/hybrid-feature-with-safety.md +104 -0
- package/dist/daemon/templates/agents/knowledge-builder.md +119 -0
- package/dist/daemon/templates/agents/patch-applier.md +144 -0
- package/dist/daemon/templates/agents/planner.md +165 -0
- package/dist/daemon/templates/agents/refactor-specialist.md +98 -0
- package/dist/daemon/templates/agents/skill-distiller.md +113 -0
- package/dist/daemon/templates/agents/task-boundary-classifier.md +64 -0
- package/dist/daemon/templates/agents/verify-agent.md +136 -0
- package/dist/daemon/utils/inject-block.d.ts +39 -0
- package/dist/daemon/utils/inject-block.d.ts.map +1 -0
- package/dist/daemon/utils/inject-block.js +25 -0
- package/dist/daemon/utils/inject-block.js.map +1 -0
- package/dist/hooks/hook-lib.sh +8 -0
- package/dist/hooks/notification.sh +19 -8
- package/dist/hooks/post-tool-use.sh +41 -23
- package/dist/hooks/pre-tool-use.sh +54 -23
- package/dist/hooks/session-start.sh +68 -0
- package/dist/hooks/stop.sh +24 -10
- package/dist/hooks/user-prompt-submit.sh +37 -21
- package/dist/knowledge/adapters/go-adapter.d.ts +65 -0
- package/dist/knowledge/adapters/go-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/go-adapter.js +294 -0
- package/dist/knowledge/adapters/go-adapter.js.map +1 -0
- package/dist/knowledge/adapters/index.d.ts +41 -0
- package/dist/knowledge/adapters/index.d.ts.map +1 -0
- package/dist/knowledge/adapters/index.js +71 -0
- package/dist/knowledge/adapters/index.js.map +1 -0
- package/dist/knowledge/adapters/java-adapter.d.ts +66 -0
- package/dist/knowledge/adapters/java-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/java-adapter.js +260 -0
- package/dist/knowledge/adapters/java-adapter.js.map +1 -0
- package/dist/knowledge/adapters/js-vue-adapter.d.ts +56 -0
- package/dist/knowledge/adapters/js-vue-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/js-vue-adapter.js +203 -0
- package/dist/knowledge/adapters/js-vue-adapter.js.map +1 -0
- package/dist/knowledge/adapters/kotlin-adapter.d.ts +55 -0
- package/dist/knowledge/adapters/kotlin-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/kotlin-adapter.js +209 -0
- package/dist/knowledge/adapters/kotlin-adapter.js.map +1 -0
- package/dist/knowledge/adapters/monorepo-adapter.d.ts +77 -0
- package/dist/knowledge/adapters/monorepo-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/monorepo-adapter.js +170 -0
- package/dist/knowledge/adapters/monorepo-adapter.js.map +1 -0
- package/dist/knowledge/adapters/python-adapter.d.ts +89 -0
- package/dist/knowledge/adapters/python-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/python-adapter.js +358 -0
- package/dist/knowledge/adapters/python-adapter.js.map +1 -0
- package/dist/knowledge/adapters/rust-adapter.d.ts +73 -0
- package/dist/knowledge/adapters/rust-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/rust-adapter.js +329 -0
- package/dist/knowledge/adapters/rust-adapter.js.map +1 -0
- package/dist/knowledge/adapters/types.d.ts +99 -0
- package/dist/knowledge/adapters/types.d.ts.map +1 -0
- package/dist/knowledge/adapters/types.js +17 -0
- package/dist/knowledge/adapters/types.js.map +1 -0
- package/dist/knowledge/adapters/typescript-adapter.d.ts +57 -0
- package/dist/knowledge/adapters/typescript-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/typescript-adapter.js +171 -0
- package/dist/knowledge/adapters/typescript-adapter.js.map +1 -0
- package/dist/knowledge/audit-applier.d.ts +70 -0
- package/dist/knowledge/audit-applier.d.ts.map +1 -0
- package/dist/knowledge/audit-applier.js +251 -0
- package/dist/knowledge/audit-applier.js.map +1 -0
- package/dist/knowledge/builder.d.ts +261 -0
- package/dist/knowledge/builder.d.ts.map +1 -0
- package/dist/knowledge/builder.js +937 -0
- package/dist/knowledge/builder.js.map +1 -0
- package/dist/knowledge/cli-provider.d.ts +151 -0
- package/dist/knowledge/cli-provider.d.ts.map +1 -0
- package/dist/knowledge/cli-provider.js +313 -0
- package/dist/knowledge/cli-provider.js.map +1 -0
- package/dist/knowledge/constants.d.ts +73 -0
- package/dist/knowledge/constants.d.ts.map +1 -0
- package/dist/knowledge/constants.js +93 -0
- package/dist/knowledge/constants.js.map +1 -0
- package/dist/knowledge/cross-module.d.ts +139 -0
- package/dist/knowledge/cross-module.d.ts.map +1 -0
- package/dist/knowledge/cross-module.js +370 -0
- package/dist/knowledge/cross-module.js.map +1 -0
- package/dist/knowledge/git-hooks.d.ts +67 -0
- package/dist/knowledge/git-hooks.d.ts.map +1 -0
- package/dist/knowledge/git-hooks.js +258 -0
- package/dist/knowledge/git-hooks.js.map +1 -0
- package/dist/knowledge/module-hash.d.ts +88 -0
- package/dist/knowledge/module-hash.d.ts.map +1 -0
- package/dist/knowledge/module-hash.js +162 -0
- package/dist/knowledge/module-hash.js.map +1 -0
- package/dist/knowledge/project-detector.d.ts +101 -0
- package/dist/knowledge/project-detector.d.ts.map +1 -0
- package/dist/knowledge/project-detector.js +223 -0
- package/dist/knowledge/project-detector.js.map +1 -0
- package/dist/knowledge/prompt.d.ts +228 -0
- package/dist/knowledge/prompt.d.ts.map +1 -0
- package/dist/knowledge/prompt.js +404 -0
- package/dist/knowledge/prompt.js.map +1 -0
- package/dist/knowledge/query.d.ts +105 -0
- package/dist/knowledge/query.d.ts.map +1 -0
- package/dist/knowledge/query.js +341 -0
- package/dist/knowledge/query.js.map +1 -0
- package/dist/knowledge/repo-map.d.ts +91 -0
- package/dist/knowledge/repo-map.d.ts.map +1 -0
- package/dist/knowledge/repo-map.js +408 -0
- package/dist/knowledge/repo-map.js.map +1 -0
- package/dist/knowledge/tools/index.d.ts +14 -0
- package/dist/knowledge/tools/index.d.ts.map +1 -0
- package/dist/knowledge/tools/index.js +11 -0
- package/dist/knowledge/tools/index.js.map +1 -0
- package/dist/knowledge/tools/knowledge-get-page.d.ts +46 -0
- package/dist/knowledge/tools/knowledge-get-page.d.ts.map +1 -0
- package/dist/knowledge/tools/knowledge-get-page.js +101 -0
- package/dist/knowledge/tools/knowledge-get-page.js.map +1 -0
- package/dist/knowledge/tools/knowledge-query.d.ts +77 -0
- package/dist/knowledge/tools/knowledge-query.d.ts.map +1 -0
- package/dist/knowledge/tools/knowledge-query.js +104 -0
- package/dist/knowledge/tools/knowledge-query.js.map +1 -0
- package/dist/knowledge/tools/repo-map-lookup.d.ts +45 -0
- package/dist/knowledge/tools/repo-map-lookup.d.ts.map +1 -0
- package/dist/knowledge/tools/repo-map-lookup.js +82 -0
- package/dist/knowledge/tools/repo-map-lookup.js.map +1 -0
- package/dist/knowledge/types.d.ts +269 -0
- package/dist/knowledge/types.d.ts.map +1 -0
- package/dist/knowledge/types.js +10 -0
- package/dist/knowledge/types.js.map +1 -0
- package/dist/knowledge/validator.d.ts +90 -0
- package/dist/knowledge/validator.d.ts.map +1 -0
- package/dist/knowledge/validator.js +288 -0
- package/dist/knowledge/validator.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +222 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/skills/builtin-skills.d.ts +35 -0
- package/dist/skills/builtin-skills.d.ts.map +1 -0
- package/dist/skills/builtin-skills.js +68 -0
- package/dist/skills/builtin-skills.js.map +1 -0
- package/dist/skills/distill/attribution.d.ts +59 -0
- package/dist/skills/distill/attribution.d.ts.map +1 -0
- package/dist/skills/distill/attribution.js +101 -0
- package/dist/skills/distill/attribution.js.map +1 -0
- package/dist/skills/distill/claude-cli-resolver.d.ts +26 -0
- package/dist/skills/distill/claude-cli-resolver.d.ts.map +1 -0
- package/dist/skills/distill/claude-cli-resolver.js +115 -0
- package/dist/skills/distill/claude-cli-resolver.js.map +1 -0
- package/dist/skills/distill/distiller.d.ts +161 -0
- package/dist/skills/distill/distiller.d.ts.map +1 -0
- package/dist/skills/distill/distiller.js +461 -0
- package/dist/skills/distill/distiller.js.map +1 -0
- package/dist/skills/distill/index.d.ts +223 -0
- package/dist/skills/distill/index.d.ts.map +1 -0
- package/dist/skills/distill/index.js +466 -0
- package/dist/skills/distill/index.js.map +1 -0
- package/dist/skills/distill/project-anchor-guard.d.ts +116 -0
- package/dist/skills/distill/project-anchor-guard.d.ts.map +1 -0
- package/dist/skills/distill/project-anchor-guard.js +334 -0
- package/dist/skills/distill/project-anchor-guard.js.map +1 -0
- package/dist/skills/distill/topic-deduper.d.ts +77 -0
- package/dist/skills/distill/topic-deduper.d.ts.map +1 -0
- package/dist/skills/distill/topic-deduper.js +119 -0
- package/dist/skills/distill/topic-deduper.js.map +1 -0
- package/dist/skills/distill/upstream-fetcher.d.ts +71 -0
- package/dist/skills/distill/upstream-fetcher.d.ts.map +1 -0
- package/dist/skills/distill/upstream-fetcher.js +202 -0
- package/dist/skills/distill/upstream-fetcher.js.map +1 -0
- package/dist/skills/distilled/distilled-api-design.md +491 -0
- package/dist/skills/distilled/distilled-architecture-decision.md +173 -0
- package/dist/skills/distilled/distilled-creator.md +178 -0
- package/dist/skills/distilled/distilled-db-schema-design.md +245 -0
- package/dist/skills/distilled/distilled-defi-amm-security.md +293 -0
- package/dist/skills/distilled/distilled-executing-plans.md +113 -0
- package/dist/skills/distilled/distilled-harness-engineering.md +242 -0
- package/dist/skills/distilled/distilled-karpathy-guidelines.md +104 -0
- package/dist/skills/distilled/distilled-performance-optimization.md +175 -0
- package/dist/skills/distilled/distilled-spec-driven-design.md +193 -0
- package/dist/skills/distilled/distilled-systematic-debugging.md +306 -0
- package/dist/skills/distilled/distilled-verification-before-completion.md +203 -0
- package/dist/skills/keyword-score.d.ts +29 -0
- package/dist/skills/keyword-score.d.ts.map +1 -0
- package/dist/skills/keyword-score.js +54 -0
- package/dist/skills/keyword-score.js.map +1 -0
- package/dist/skills/registry.d.ts +64 -20
- package/dist/skills/registry.d.ts.map +1 -1
- package/dist/skills/registry.js +102 -105
- package/dist/skills/registry.js.map +1 -1
- package/dist/skills/tools/pipeline-suggest.js +14 -14
- package/dist/skills/tools/skill-invoke.d.ts +1 -1
- package/dist/skills/tools/skill-invoke.js +1 -1
- package/dist/web/routes/agent-content.d.ts +30 -0
- package/dist/web/routes/agent-content.d.ts.map +1 -0
- package/dist/web/routes/agent-content.js +139 -0
- package/dist/web/routes/agent-content.js.map +1 -0
- package/dist/web/routes/decisions.d.ts +15 -0
- package/dist/web/routes/decisions.d.ts.map +1 -0
- package/dist/web/routes/decisions.js +181 -0
- package/dist/web/routes/decisions.js.map +1 -0
- package/dist/web/routes/diagnostics.d.ts +61 -0
- package/dist/web/routes/diagnostics.d.ts.map +1 -0
- package/dist/web/routes/diagnostics.js +203 -0
- package/dist/web/routes/diagnostics.js.map +1 -0
- package/dist/web/routes/events.d.ts.map +1 -1
- package/dist/web/routes/events.js +24 -0
- package/dist/web/routes/events.js.map +1 -1
- package/dist/web/routes/health.d.ts +33 -0
- package/dist/web/routes/health.d.ts.map +1 -0
- package/dist/web/routes/health.js +37 -0
- package/dist/web/routes/health.js.map +1 -0
- package/dist/web/routes/insights.d.ts +0 -5
- package/dist/web/routes/insights.d.ts.map +1 -1
- package/dist/web/routes/insights.js +783 -2
- package/dist/web/routes/insights.js.map +1 -1
- package/dist/web/routes/knowledge.d.ts +16 -0
- package/dist/web/routes/knowledge.d.ts.map +1 -0
- package/dist/web/routes/knowledge.js +661 -0
- package/dist/web/routes/knowledge.js.map +1 -0
- package/dist/web/routes/patch.d.ts +60 -1
- package/dist/web/routes/patch.d.ts.map +1 -1
- package/dist/web/routes/patch.js +170 -64
- package/dist/web/routes/patch.js.map +1 -1
- package/dist/web/routes/pipeline.d.ts +37 -0
- package/dist/web/routes/pipeline.d.ts.map +1 -0
- package/dist/web/routes/pipeline.js +149 -0
- package/dist/web/routes/pipeline.js.map +1 -0
- package/dist/web/routes/rules.d.ts.map +1 -1
- package/dist/web/routes/rules.js +6 -1
- package/dist/web/routes/rules.js.map +1 -1
- package/dist/web/routes/sessions.d.ts.map +1 -1
- package/dist/web/routes/sessions.js +9 -1
- package/dist/web/routes/sessions.js.map +1 -1
- package/dist/web/routes/skill-content.d.ts +30 -0
- package/dist/web/routes/skill-content.d.ts.map +1 -0
- package/dist/web/routes/skill-content.js +117 -0
- package/dist/web/routes/skill-content.js.map +1 -0
- package/dist/web/routes/skills-distill.d.ts +29 -0
- package/dist/web/routes/skills-distill.d.ts.map +1 -0
- package/dist/web/routes/skills-distill.js +552 -0
- package/dist/web/routes/skills-distill.js.map +1 -0
- package/dist/web/routes/skills.js +7 -7
- package/dist/web/routes/skills.js.map +1 -1
- package/dist/web/routes/task-timeline.d.ts +102 -0
- package/dist/web/routes/task-timeline.d.ts.map +1 -0
- package/dist/web/routes/task-timeline.js +274 -0
- package/dist/web/routes/task-timeline.js.map +1 -0
- package/dist/web/routes/tasks.d.ts.map +1 -1
- package/dist/web/routes/tasks.js +355 -8
- package/dist/web/routes/tasks.js.map +1 -1
- package/dist/web/routes/trace.d.ts.map +1 -1
- package/dist/web/routes/trace.js +3 -2
- package/dist/web/routes/trace.js.map +1 -1
- package/dist/web/routes/types.d.ts +0 -4
- package/dist/web/routes/types.d.ts.map +1 -1
- package/dist/web/routes/types.js +1 -1
- package/dist/web/routes/types.js.map +1 -1
- package/dist/web/routes/violations.d.ts +14 -0
- package/dist/web/routes/violations.d.ts.map +1 -0
- package/dist/web/routes/violations.js +111 -0
- package/dist/web/routes/violations.js.map +1 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +79 -19
- package/dist/web/server.js.map +1 -1
- package/dist/web/services/build-manager.d.ts +72 -0
- package/dist/web/services/build-manager.d.ts.map +1 -0
- package/dist/web/services/build-manager.js +189 -0
- package/dist/web/services/build-manager.js.map +1 -0
- package/dist/web/services/distill-manager.d.ts +125 -0
- package/dist/web/services/distill-manager.d.ts.map +1 -0
- package/dist/web/services/distill-manager.js +308 -0
- package/dist/web/services/distill-manager.js.map +1 -0
- package/dist/web/static/assets/AgentContentPage-DkeRNxok.js +2 -0
- package/dist/web/static/assets/AgentContentPage-DkeRNxok.js.map +1 -0
- package/dist/web/static/assets/AgentDelegationTable-ByBa0x1l.js +2 -0
- package/dist/web/static/assets/AgentDelegationTable-ByBa0x1l.js.map +1 -0
- package/dist/web/static/assets/ContextInsightsPage-oUk7_I8u.js +3 -0
- package/dist/web/static/assets/ContextInsightsPage-oUk7_I8u.js.map +1 -0
- package/dist/web/static/assets/DaemonHealthPage-DG2fyOP7.js +2 -0
- package/dist/web/static/assets/DaemonHealthPage-DG2fyOP7.js.map +1 -0
- package/dist/web/static/assets/DecisionsPage-CMAPEnKb.js +2 -0
- package/dist/web/static/assets/DecisionsPage-CMAPEnKb.js.map +1 -0
- package/dist/web/static/assets/DiagnosticsPage-DQd-Zm4r.js +2 -0
- package/dist/web/static/assets/DiagnosticsPage-DQd-Zm4r.js.map +1 -0
- package/dist/web/static/assets/DriftTab-DqpepOhI.js +2 -0
- package/dist/web/static/assets/DriftTab-DqpepOhI.js.map +1 -0
- package/dist/web/static/assets/HealthHomePage-CN6zNIie.js +3 -0
- package/dist/web/static/assets/HealthHomePage-CN6zNIie.js.map +1 -0
- package/dist/web/static/assets/KbHitRateTable-ByEIWujF.js +2 -0
- package/dist/web/static/assets/KbHitRateTable-ByEIWujF.js.map +1 -0
- package/dist/web/static/assets/MarkdownRenderer-DZmTl-8J.js +3 -0
- package/dist/web/static/assets/MarkdownRenderer-DZmTl-8J.js.map +1 -0
- package/dist/web/static/assets/NotFound-BQPh0vaF.js +2 -0
- package/dist/web/static/assets/NotFound-BQPh0vaF.js.map +1 -0
- package/dist/web/static/assets/ProjectSwitcher-D3lZMFd3.js +2 -0
- package/dist/web/static/assets/ProjectSwitcher-D3lZMFd3.js.map +1 -0
- package/dist/web/static/assets/SettingsPage-oLJBNzQj.js +2 -0
- package/dist/web/static/assets/SettingsPage-oLJBNzQj.js.map +1 -0
- package/dist/web/static/assets/SkillContentPage-DK5rgfgw.js +2 -0
- package/dist/web/static/assets/SkillContentPage-DK5rgfgw.js.map +1 -0
- package/dist/web/static/assets/SkillStatsTable-DYMzjEUV.js +2 -0
- package/dist/web/static/assets/SkillStatsTable-DYMzjEUV.js.map +1 -0
- package/dist/web/static/assets/SkillsDistillTab-C7qaG8q3.js +2 -0
- package/dist/web/static/assets/SkillsDistillTab-C7qaG8q3.js.map +1 -0
- package/dist/web/static/assets/TasksHubPage-03wsRRsJ.js +6 -0
- package/dist/web/static/assets/TasksHubPage-03wsRRsJ.js.map +1 -0
- package/dist/web/static/assets/ViolationsPage-DSiLr-9O.js +3 -0
- package/dist/web/static/assets/ViolationsPage-DSiLr-9O.js.map +1 -0
- package/dist/web/static/assets/arco-Bhi3a6Qp.js +14 -0
- package/dist/web/static/assets/arco-Bhi3a6Qp.js.map +1 -0
- package/dist/web/static/assets/arco-DFQA6dO_.css +1 -0
- package/dist/web/static/assets/charts-BuHQWDbQ.js +37 -0
- package/dist/web/static/assets/charts-BuHQWDbQ.js.map +1 -0
- package/dist/web/static/assets/date-fns-sbWH3_uq.js +2 -0
- package/dist/web/static/assets/date-fns-sbWH3_uq.js.map +1 -0
- package/dist/web/static/assets/index-7bl3kbcx.css +1 -0
- package/dist/web/static/assets/index-BIYnq1Dx.js +4 -0
- package/dist/web/static/assets/index-BIYnq1Dx.js.map +1 -0
- package/dist/web/static/assets/lucide-CnlPQoG8.js +72 -0
- package/dist/web/static/assets/lucide-CnlPQoG8.js.map +1 -0
- package/dist/web/static/assets/outcome-DUn1NjlC.js +2 -0
- package/dist/web/static/assets/outcome-DUn1NjlC.js.map +1 -0
- package/dist/web/static/assets/query-S6X1S7K9.js +2 -0
- package/dist/web/static/assets/{query-C99w429o.js.map → query-S6X1S7K9.js.map} +1 -1
- package/dist/web/static/assets/{react-router-r79dBVy4.js → react-router-JVUrkhdd.js} +3 -3
- package/dist/web/static/assets/{react-router-r79dBVy4.js.map → react-router-JVUrkhdd.js.map} +1 -1
- package/dist/web/static/assets/react-vendor-tkvCrao7.js +57 -0
- package/dist/web/static/assets/react-vendor-tkvCrao7.js.map +1 -0
- package/dist/web/static/assets/syntax-highlighter-BkZfCDsz.js +6 -0
- package/dist/web/static/assets/syntax-highlighter-BkZfCDsz.js.map +1 -0
- package/dist/web/static/assets/useTabsParam-k8qte_0C.js +2 -0
- package/dist/web/static/assets/useTabsParam-k8qte_0C.js.map +1 -0
- package/dist/web/static/assets/vendor-DWgdB1eY.js +65 -0
- package/dist/web/static/assets/vendor-DWgdB1eY.js.map +1 -0
- package/dist/web/static/index.html +12 -8
- package/package.json +14 -3
- package/dist/core/ai/provider.d.ts +0 -63
- package/dist/core/ai/provider.d.ts.map +0 -1
- package/dist/core/ai/provider.js +0 -241
- package/dist/core/ai/provider.js.map +0 -1
- package/dist/core/ai/types.d.ts +0 -43
- package/dist/core/ai/types.d.ts.map +0 -1
- package/dist/core/ai/types.js +0 -5
- package/dist/core/ai/types.js.map +0 -1
- package/dist/core/storage/token-usage.d.ts +0 -36
- package/dist/core/storage/token-usage.d.ts.map +0 -1
- package/dist/core/storage/token-usage.js +0 -59
- package/dist/core/storage/token-usage.js.map +0 -1
- package/dist/core/utils/token-tracker.d.ts +0 -39
- package/dist/core/utils/token-tracker.d.ts.map +0 -1
- package/dist/core/utils/token-tracker.js +0 -69
- package/dist/core/utils/token-tracker.js.map +0 -1
- package/dist/skills/index.d.ts +0 -3
- package/dist/skills/index.d.ts.map +0 -1
- package/dist/skills/index.js +0 -3
- package/dist/skills/index.js.map +0 -1
- package/dist/skills/matcher.d.ts +0 -26
- package/dist/skills/matcher.d.ts.map +0 -1
- package/dist/skills/matcher.js +0 -113
- package/dist/skills/matcher.js.map +0 -1
- package/dist/skills/official/code-simplifier.md +0 -52
- package/dist/skills/official/find-skills.md +0 -142
- package/dist/skills/official/official-api-design.md +0 -30
- package/dist/skills/official/official-architecture-decision.md +0 -41
- package/dist/skills/official/official-bmad.md +0 -118
- package/dist/skills/official/official-db-schema-design.md +0 -34
- package/dist/skills/official/official-debug.md +0 -25
- package/dist/skills/official/official-doc-driven.md +0 -31
- package/dist/skills/official/official-harness-engineering.md +0 -108
- package/dist/skills/official/official-performance-optimization.md +0 -30
- package/dist/skills/official/official-pr-review.md +0 -35
- package/dist/skills/official/official-release-checklist.md +0 -30
- package/dist/skills/official/official-security-hardening.md +0 -32
- package/dist/skills/official/official-spec-driven-design.md +0 -31
- package/dist/skills/official/planning-with-files.md +0 -241
- package/dist/skills/official/ui-ux-pro-max.md +0 -105
- package/dist/skills/official/webapp-testing.md +0 -96
- package/dist/skills/official-skills.d.ts +0 -26
- package/dist/skills/official-skills.d.ts.map +0 -1
- package/dist/skills/official-skills.js +0 -73
- package/dist/skills/official-skills.js.map +0 -1
- package/dist/skills/semantic-matcher.d.ts +0 -60
- package/dist/skills/semantic-matcher.d.ts.map +0 -1
- package/dist/skills/semantic-matcher.js +0 -192
- package/dist/skills/semantic-matcher.js.map +0 -1
- package/dist/skills/upgrade-engine.d.ts +0 -93
- package/dist/skills/upgrade-engine.d.ts.map +0 -1
- package/dist/skills/upgrade-engine.js +0 -447
- package/dist/skills/upgrade-engine.js.map +0 -1
- package/dist/skills/upgrade-prompt.d.ts +0 -20
- package/dist/skills/upgrade-prompt.d.ts.map +0 -1
- package/dist/skills/upgrade-prompt.js +0 -75
- package/dist/skills/upgrade-prompt.js.map +0 -1
- package/dist/web/routes/ai.d.ts +0 -10
- package/dist/web/routes/ai.d.ts.map +0 -1
- package/dist/web/routes/ai.js +0 -186
- package/dist/web/routes/ai.js.map +0 -1
- package/dist/web/routes/token-usage.d.ts +0 -7
- package/dist/web/routes/token-usage.d.ts.map +0 -1
- package/dist/web/routes/token-usage.js +0 -18
- package/dist/web/routes/token-usage.js.map +0 -1
- package/dist/web/ssrf-guard.d.ts +0 -35
- package/dist/web/ssrf-guard.d.ts.map +0 -1
- package/dist/web/ssrf-guard.js +0 -93
- package/dist/web/ssrf-guard.js.map +0 -1
- package/dist/web/static/assets/AIConfig-CdDWzJyO.js +0 -2
- package/dist/web/static/assets/AIConfig-CdDWzJyO.js.map +0 -1
- package/dist/web/static/assets/Dashboard-CoEmmIDt.js +0 -2
- package/dist/web/static/assets/Dashboard-CoEmmIDt.js.map +0 -1
- package/dist/web/static/assets/Drawer-DdRTzlLB.js +0 -2
- package/dist/web/static/assets/Drawer-DdRTzlLB.js.map +0 -1
- package/dist/web/static/assets/Events-DrIq1SUS.js +0 -2
- package/dist/web/static/assets/Events-DrIq1SUS.js.map +0 -1
- package/dist/web/static/assets/Reports-DFBM3MDK.js +0 -2
- package/dist/web/static/assets/Reports-DFBM3MDK.js.map +0 -1
- package/dist/web/static/assets/SearchInput-qCj_jAcf.js +0 -2
- package/dist/web/static/assets/SearchInput-qCj_jAcf.js.map +0 -1
- package/dist/web/static/assets/SessionDetail-CCzwdoT7.js +0 -2
- package/dist/web/static/assets/SessionDetail-CCzwdoT7.js.map +0 -1
- package/dist/web/static/assets/Sessions-FfLYkAw9.js +0 -2
- package/dist/web/static/assets/Sessions-FfLYkAw9.js.map +0 -1
- package/dist/web/static/assets/Skills-C8Gvs3Qa.js +0 -2
- package/dist/web/static/assets/Skills-C8Gvs3Qa.js.map +0 -1
- package/dist/web/static/assets/TaskDetail-BS8pYhaR.js +0 -2
- package/dist/web/static/assets/TaskDetail-BS8pYhaR.js.map +0 -1
- package/dist/web/static/assets/Tasks-CyuhizG8.js +0 -2
- package/dist/web/static/assets/Tasks-CyuhizG8.js.map +0 -1
- package/dist/web/static/assets/charts-CLrM0_uM.js +0 -37
- package/dist/web/static/assets/charts-CLrM0_uM.js.map +0 -1
- package/dist/web/static/assets/date-fns-CZ_bHujz.js +0 -2
- package/dist/web/static/assets/date-fns-CZ_bHujz.js.map +0 -1
- package/dist/web/static/assets/export-L_VBD2p1.js +0 -4
- package/dist/web/static/assets/export-L_VBD2p1.js.map +0 -1
- package/dist/web/static/assets/index-CBX47X8l.js +0 -3
- package/dist/web/static/assets/index-CBX47X8l.js.map +0 -1
- package/dist/web/static/assets/index-DjIoMdoR.css +0 -1
- package/dist/web/static/assets/lucide-Bs_edTLa.js +0 -232
- package/dist/web/static/assets/lucide-Bs_edTLa.js.map +0 -1
- package/dist/web/static/assets/query-C99w429o.js +0 -2
- package/dist/web/static/assets/react-vendor-CSp-GLFF.js +0 -49
- package/dist/web/static/assets/react-vendor-CSp-GLFF.js.map +0 -1
- package/dist/web/static/assets/syntax-highlighter-44FakypI.js +0 -9
- package/dist/web/static/assets/syntax-highlighter-44FakypI.js.map +0 -1
- package/dist/web/static/assets/task-title-BhOcemuR.js +0 -2
- package/dist/web/static/assets/task-title-BhOcemuR.js.map +0 -1
- package/dist/web/static/assets/time-Bxuk0M-C.js +0 -2
- package/dist/web/static/assets/time-Bxuk0M-C.js.map +0 -1
- package/dist/web/static/assets/vendor-CMMjVdZs.js +0 -64
- package/dist/web/static/assets/vendor-CMMjVdZs.js.map +0 -1
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timestamped backup-directory utility.
|
|
3
|
+
*
|
|
4
|
+
* Several apply-style flows need to materialise a timestamped backup
|
|
5
|
+
* directory before overwriting files in place:
|
|
6
|
+
* • `src/knowledge/builder.ts` (applyPages) — .forge-knowledge/
|
|
7
|
+
*
|
|
8
|
+
* Shared shape:
|
|
9
|
+
* 1. Compute a timestamp slug from `new Date()`.
|
|
10
|
+
* 2. Resolve the path `baseDir/<slug>` — if it already exists, append
|
|
11
|
+
* `-2`, `-3`, ... until an unused name is found.
|
|
12
|
+
* 3. `mkdir -p` the resolved path.
|
|
13
|
+
* 4. Return the path so the caller can copy whatever files it wants into
|
|
14
|
+
* it (the actual copy logic stays at the call site because the two
|
|
15
|
+
* consumers have different file-selection rules).
|
|
16
|
+
*
|
|
17
|
+
* Step 2 is optional via `conflictSuffix: 'never'` for call sites whose
|
|
18
|
+
* current behavior was "no collision handling, just mkdir -p" — preserves
|
|
19
|
+
* pre-refactor byte-identical output.
|
|
20
|
+
*/
|
|
21
|
+
import { promises as fs, existsSync, mkdirSync } from 'node:fs';
|
|
22
|
+
import path from 'node:path';
|
|
23
|
+
/**
|
|
24
|
+
* Default timestamp slug formatter: local-time `YYYYMMDD-HHMM`.
|
|
25
|
+
*
|
|
26
|
+
* Local (not UTC) by design — matches the post-revert decision in commit
|
|
27
|
+
* 640d271a so backup directory names line up with the developer's wall clock.
|
|
28
|
+
*/
|
|
29
|
+
export function defaultTimestampSlug(now = new Date()) {
|
|
30
|
+
const YYYY = now.getFullYear();
|
|
31
|
+
const MM = String(now.getMonth() + 1).padStart(2, '0');
|
|
32
|
+
const DD = String(now.getDate()).padStart(2, '0');
|
|
33
|
+
const HH = String(now.getHours()).padStart(2, '0');
|
|
34
|
+
const mm = String(now.getMinutes()).padStart(2, '0');
|
|
35
|
+
return `${YYYY}${MM}${DD}-${HH}${mm}`;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Resolve + create a timestamped backup directory under `baseDir`.
|
|
39
|
+
*
|
|
40
|
+
* The caller copies whatever files it wants into `result.path` afterwards.
|
|
41
|
+
* Returns the resolved path and final slug. Throws on `fs.mkdir` failure
|
|
42
|
+
* (does NOT swallow filesystem errors).
|
|
43
|
+
*/
|
|
44
|
+
export async function createTimestampedBackup(options) {
|
|
45
|
+
const formatter = options.tsFormatter ?? defaultTimestampSlug;
|
|
46
|
+
const conflict = options.conflictSuffix ?? 'suffix';
|
|
47
|
+
const baseSlug = formatter();
|
|
48
|
+
let slug = baseSlug;
|
|
49
|
+
let backupPath = path.join(options.baseDir, slug);
|
|
50
|
+
if (conflict === 'suffix') {
|
|
51
|
+
let suffix = 2;
|
|
52
|
+
// Probe sequentially: <slug>, <slug>-2, <slug>-3, ...
|
|
53
|
+
// (matches upgrade-engine.ts pre-refactor behavior exactly)
|
|
54
|
+
while (true) {
|
|
55
|
+
try {
|
|
56
|
+
await fs.access(backupPath);
|
|
57
|
+
// Directory exists — try next suffix
|
|
58
|
+
slug = `${baseSlug}-${suffix}`;
|
|
59
|
+
backupPath = path.join(options.baseDir, slug);
|
|
60
|
+
suffix++;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
break; // doesn't exist, we can use it
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (options.mkdir !== false) {
|
|
68
|
+
await fs.mkdir(backupPath, { recursive: true });
|
|
69
|
+
}
|
|
70
|
+
return { path: backupPath, slug };
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Synchronous counterpart of {@link createTimestampedBackup} for call sites
|
|
74
|
+
* that must remain non-async (e.g. `knowledge/builder.ts:applyPages`).
|
|
75
|
+
*
|
|
76
|
+
* Behavior is identical to the async version, just uses `existsSync` +
|
|
77
|
+
* `mkdirSync` instead of `fs.access` / `fs.mkdir`.
|
|
78
|
+
*/
|
|
79
|
+
export function createTimestampedBackupSync(options) {
|
|
80
|
+
const formatter = options.tsFormatter ?? defaultTimestampSlug;
|
|
81
|
+
const conflict = options.conflictSuffix ?? 'suffix';
|
|
82
|
+
const baseSlug = formatter();
|
|
83
|
+
let slug = baseSlug;
|
|
84
|
+
let backupPath = path.join(options.baseDir, slug);
|
|
85
|
+
if (conflict === 'suffix') {
|
|
86
|
+
let suffix = 2;
|
|
87
|
+
while (existsSync(backupPath)) {
|
|
88
|
+
slug = `${baseSlug}-${suffix}`;
|
|
89
|
+
backupPath = path.join(options.baseDir, slug);
|
|
90
|
+
suffix++;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (options.mkdir !== false) {
|
|
94
|
+
mkdirSync(backupPath, { recursive: true });
|
|
95
|
+
}
|
|
96
|
+
return { path: backupPath, slug };
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=backup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../../src/core/utils/backup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAY,IAAI,IAAI,EAAE;IACzD,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAC/B,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAClD,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnD,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACrD,OAAO,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;AACxC,CAAC;AAyCD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAuC;IAEvC,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,IAAI,oBAAoB,CAAC;IAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,IAAI,QAAQ,CAAC;IACpD,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC;IAE7B,IAAI,IAAI,GAAG,QAAQ,CAAC;IACpB,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAElD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,sDAAsD;QACtD,4DAA4D;QAC5D,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAC5B,qCAAqC;gBACrC,IAAI,GAAG,GAAG,QAAQ,IAAI,MAAM,EAAE,CAAC;gBAC/B,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC9C,MAAM,EAAE,CAAC;YACX,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,+BAA+B;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;QAC5B,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AACpC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,2BAA2B,CACzC,OAAuC;IAEvC,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,IAAI,oBAAoB,CAAC;IAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,IAAI,QAAQ,CAAC;IACpD,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC;IAE7B,IAAI,IAAI,GAAG,QAAQ,CAAC;IACpB,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAElD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,OAAO,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,IAAI,GAAG,GAAG,QAAQ,IAAI,MAAM,EAAE,CAAC;YAC/B,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC9C,MAAM,EAAE,CAAC;QACX,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;QAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Binary / install-path resolution helpers.
|
|
3
|
+
*
|
|
4
|
+
* Use these when reading files that ship WITH the cf binary (bundled skill /
|
|
5
|
+
* agent .md files), NOT for files in the user's project cwd. The daemon is
|
|
6
|
+
* launched by launchd / systemd / a fresh shell where `process.cwd()` is `/`
|
|
7
|
+
* or `$HOME` — assumptions like `cwd()/src/skills/distilled/<id>.md` silently
|
|
8
|
+
* resolve to nothing and the UI shows blank/"missing" content.
|
|
9
|
+
*
|
|
10
|
+
* Decision: docs/design/2026-06-01/0850-decision-cwd-binary-path-audit.md
|
|
11
|
+
* Companion: see `src/core/diagnostics/checks.ts` `resolveProjectRoot` for
|
|
12
|
+
* the inverse case (cwd as USER PROJECT — handled by CF_PROJECT_ROOT env).
|
|
13
|
+
*
|
|
14
|
+
* Resolution priority (highest first) for bundled skill/agent files:
|
|
15
|
+
* 1. `~/.claude/skills/<id>.md` or `~/.claude/agents/<name>.md` — user
|
|
16
|
+
* install location, cross-project, populated by daemon `skill-sync.ts`.
|
|
17
|
+
* 2. `<binaryRoot>/skills/distilled/<id>.md` — prod (dist/) or test (src/)
|
|
18
|
+
* sibling of the running JS file, resolved via `import.meta.url`. This
|
|
19
|
+
* is the canonical binary-bundled location.
|
|
20
|
+
* 3. `<binaryRoot>/../src/skills/distilled/<id>.md` — dev fallback in case
|
|
21
|
+
* running an ESM dev build that lives one level above `src/`.
|
|
22
|
+
* 4. `process.cwd()/src/skills/distilled/<id>.md` — legacy CLI fallback,
|
|
23
|
+
* kept so `cf` invoked from the repo root still resolves bundled files
|
|
24
|
+
* even if step 2 fails (e.g. transient `import.meta.url` weirdness).
|
|
25
|
+
*
|
|
26
|
+
* Pattern reference: `src/daemon/skill-sync.ts:40` (uses the same
|
|
27
|
+
* `import.meta.url` resolution) and `src/web/routes/static.ts:9-14`
|
|
28
|
+
* (uses the same candidate-fallback chain).
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* Directory containing the running binary file (this module).
|
|
32
|
+
*
|
|
33
|
+
* - Prod build: `dist/core/utils/binary-paths.js` → returns `dist/core/utils`
|
|
34
|
+
* - Dev / vitest: `src/core/utils/binary-paths.ts` → returns `src/core/utils`
|
|
35
|
+
*
|
|
36
|
+
* Callers typically walk up with `..` to reach the bundled skills/agents
|
|
37
|
+
* directories (siblings of `core/`).
|
|
38
|
+
*/
|
|
39
|
+
export declare function getBinaryRoot(): string;
|
|
40
|
+
/** `~/.claude/skills/` — user-installed skills directory (cross-project). */
|
|
41
|
+
export declare function getUserSkillsDir(): string;
|
|
42
|
+
/** `~/.claude/agents/` — user-installed agents directory (cross-project). */
|
|
43
|
+
export declare function getUserAgentsDir(): string;
|
|
44
|
+
/**
|
|
45
|
+
* Return the ordered list of candidate paths the loader should try for a
|
|
46
|
+
* bundled distilled skill, highest-priority first. Exposed so callers can
|
|
47
|
+
* report the actual `path` field on the API response.
|
|
48
|
+
*
|
|
49
|
+
* NOTE: skill .md files in `~/.claude/skills/` may be stored either as
|
|
50
|
+
* `<id>.md` (legacy) or `distilled-<id>.md` (current sync layout), so we emit
|
|
51
|
+
* both variants for the user dir.
|
|
52
|
+
*/
|
|
53
|
+
export declare function getSkillCandidates(id: string): string[];
|
|
54
|
+
/**
|
|
55
|
+
* Return the ordered list of candidate paths for an agent .md file. Agents
|
|
56
|
+
* are different from skills: project-specific agents live in
|
|
57
|
+
* `<projectCwd>/.claude/agents/<name>.md` and MUST keep working — so cwd is
|
|
58
|
+
* kept as a candidate (last) rather than removed.
|
|
59
|
+
*/
|
|
60
|
+
export declare function getAgentCandidates(name: string): string[];
|
|
61
|
+
/**
|
|
62
|
+
* Resolve a bundled skill .md file to the first candidate that exists on
|
|
63
|
+
* disk, or `null` if none match.
|
|
64
|
+
*/
|
|
65
|
+
export declare function resolveSkillPath(id: string): string | null;
|
|
66
|
+
/**
|
|
67
|
+
* Resolve an agent .md file to the first candidate that exists on disk, or
|
|
68
|
+
* `null` if none match.
|
|
69
|
+
*/
|
|
70
|
+
export declare function resolveAgentPath(name: string): string | null;
|
|
71
|
+
/**
|
|
72
|
+
* Resolve the binary-bundled `skills/distilled/` *directory* (not a specific
|
|
73
|
+
* file) — used by writers like `skills-distill` that need to emit files into
|
|
74
|
+
* the distilled tree. Returns the first existing directory in the chain, or
|
|
75
|
+
* `null` if none exist.
|
|
76
|
+
*
|
|
77
|
+
* Priority:
|
|
78
|
+
* 1. `<binaryRoot>/../skills/distilled` (prod: dist/skills/distilled)
|
|
79
|
+
* 2. `<binaryRoot>/../../src/skills/distilled` (dev: src/skills/distilled)
|
|
80
|
+
* 3. `process.cwd()/src/skills/distilled` (legacy fallback)
|
|
81
|
+
*
|
|
82
|
+
* Why include cwd: distill is historically a dev-time operation; users
|
|
83
|
+
* running `cf skills distill` from the repo root should keep working.
|
|
84
|
+
*/
|
|
85
|
+
export declare function resolveDistilledOutputDir(): string | null;
|
|
86
|
+
/**
|
|
87
|
+
* Return the full ordered candidate list for the distilled output directory.
|
|
88
|
+
* Exposed for tests and for callers that need to log which paths were tried
|
|
89
|
+
* (e.g. on a "missing" response).
|
|
90
|
+
*/
|
|
91
|
+
export declare function getDistilledOutputDirCandidates(): string[];
|
|
92
|
+
//# sourceMappingURL=binary-paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary-paths.d.ts","sourceRoot":"","sources":["../../../src/core/utils/binary-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAOH;;;;;;;;GAQG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,6EAA6E;AAC7E,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,6EAA6E;AAC7E,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAsBvD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAWzD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK1D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK5D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,GAAG,IAAI,CAWzD;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,IAAI,MAAM,EAAE,CAO1D"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Binary / install-path resolution helpers.
|
|
3
|
+
*
|
|
4
|
+
* Use these when reading files that ship WITH the cf binary (bundled skill /
|
|
5
|
+
* agent .md files), NOT for files in the user's project cwd. The daemon is
|
|
6
|
+
* launched by launchd / systemd / a fresh shell where `process.cwd()` is `/`
|
|
7
|
+
* or `$HOME` — assumptions like `cwd()/src/skills/distilled/<id>.md` silently
|
|
8
|
+
* resolve to nothing and the UI shows blank/"missing" content.
|
|
9
|
+
*
|
|
10
|
+
* Decision: docs/design/2026-06-01/0850-decision-cwd-binary-path-audit.md
|
|
11
|
+
* Companion: see `src/core/diagnostics/checks.ts` `resolveProjectRoot` for
|
|
12
|
+
* the inverse case (cwd as USER PROJECT — handled by CF_PROJECT_ROOT env).
|
|
13
|
+
*
|
|
14
|
+
* Resolution priority (highest first) for bundled skill/agent files:
|
|
15
|
+
* 1. `~/.claude/skills/<id>.md` or `~/.claude/agents/<name>.md` — user
|
|
16
|
+
* install location, cross-project, populated by daemon `skill-sync.ts`.
|
|
17
|
+
* 2. `<binaryRoot>/skills/distilled/<id>.md` — prod (dist/) or test (src/)
|
|
18
|
+
* sibling of the running JS file, resolved via `import.meta.url`. This
|
|
19
|
+
* is the canonical binary-bundled location.
|
|
20
|
+
* 3. `<binaryRoot>/../src/skills/distilled/<id>.md` — dev fallback in case
|
|
21
|
+
* running an ESM dev build that lives one level above `src/`.
|
|
22
|
+
* 4. `process.cwd()/src/skills/distilled/<id>.md` — legacy CLI fallback,
|
|
23
|
+
* kept so `cf` invoked from the repo root still resolves bundled files
|
|
24
|
+
* even if step 2 fails (e.g. transient `import.meta.url` weirdness).
|
|
25
|
+
*
|
|
26
|
+
* Pattern reference: `src/daemon/skill-sync.ts:40` (uses the same
|
|
27
|
+
* `import.meta.url` resolution) and `src/web/routes/static.ts:9-14`
|
|
28
|
+
* (uses the same candidate-fallback chain).
|
|
29
|
+
*/
|
|
30
|
+
import { fileURLToPath } from 'node:url';
|
|
31
|
+
import path from 'node:path';
|
|
32
|
+
import fs from 'node:fs';
|
|
33
|
+
import os from 'node:os';
|
|
34
|
+
/**
|
|
35
|
+
* Directory containing the running binary file (this module).
|
|
36
|
+
*
|
|
37
|
+
* - Prod build: `dist/core/utils/binary-paths.js` → returns `dist/core/utils`
|
|
38
|
+
* - Dev / vitest: `src/core/utils/binary-paths.ts` → returns `src/core/utils`
|
|
39
|
+
*
|
|
40
|
+
* Callers typically walk up with `..` to reach the bundled skills/agents
|
|
41
|
+
* directories (siblings of `core/`).
|
|
42
|
+
*/
|
|
43
|
+
export function getBinaryRoot() {
|
|
44
|
+
return path.dirname(fileURLToPath(import.meta.url));
|
|
45
|
+
}
|
|
46
|
+
/** `~/.claude/skills/` — user-installed skills directory (cross-project). */
|
|
47
|
+
export function getUserSkillsDir() {
|
|
48
|
+
return path.join(os.homedir(), '.claude', 'skills');
|
|
49
|
+
}
|
|
50
|
+
/** `~/.claude/agents/` — user-installed agents directory (cross-project). */
|
|
51
|
+
export function getUserAgentsDir() {
|
|
52
|
+
return path.join(os.homedir(), '.claude', 'agents');
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Return the ordered list of candidate paths the loader should try for a
|
|
56
|
+
* bundled distilled skill, highest-priority first. Exposed so callers can
|
|
57
|
+
* report the actual `path` field on the API response.
|
|
58
|
+
*
|
|
59
|
+
* NOTE: skill .md files in `~/.claude/skills/` may be stored either as
|
|
60
|
+
* `<id>.md` (legacy) or `distilled-<id>.md` (current sync layout), so we emit
|
|
61
|
+
* both variants for the user dir.
|
|
62
|
+
*/
|
|
63
|
+
export function getSkillCandidates(id) {
|
|
64
|
+
const binDir = getBinaryRoot();
|
|
65
|
+
const userDir = getUserSkillsDir();
|
|
66
|
+
const fileName = `${id}.md`;
|
|
67
|
+
return [
|
|
68
|
+
// 1. User install location (preferred — cross-project, daemon-managed)
|
|
69
|
+
path.join(userDir, fileName),
|
|
70
|
+
// Compat: the file may live under the distilled- prefix even if caller
|
|
71
|
+
// passed the bare id (or vice versa). Both are emitted so either layout
|
|
72
|
+
// resolves.
|
|
73
|
+
id.startsWith('distilled-')
|
|
74
|
+
? path.join(userDir, `${id.slice('distilled-'.length)}.md`)
|
|
75
|
+
: path.join(userDir, `distilled-${id}.md`),
|
|
76
|
+
// 2. Binary-sibling (prod: dist/skills/distilled, dev: src/skills/distilled).
|
|
77
|
+
// From `<binDir>=dist/core/utils` we walk up two levels to `dist/`, then
|
|
78
|
+
// down into skills/distilled. Same in dev (`src/core/utils` → `src/`).
|
|
79
|
+
path.join(binDir, '..', '..', 'skills', 'distilled', fileName),
|
|
80
|
+
// 3. One-level-up dev fallback (some bundlers flatten the structure)
|
|
81
|
+
path.join(binDir, '..', '..', '..', 'src', 'skills', 'distilled', fileName),
|
|
82
|
+
// 4. Legacy cwd fallback (CLI invoked from the repo root)
|
|
83
|
+
path.join(process.cwd(), 'src', 'skills', 'distilled', fileName),
|
|
84
|
+
];
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Return the ordered list of candidate paths for an agent .md file. Agents
|
|
88
|
+
* are different from skills: project-specific agents live in
|
|
89
|
+
* `<projectCwd>/.claude/agents/<name>.md` and MUST keep working — so cwd is
|
|
90
|
+
* kept as a candidate (last) rather than removed.
|
|
91
|
+
*/
|
|
92
|
+
export function getAgentCandidates(name) {
|
|
93
|
+
const userDir = getUserAgentsDir();
|
|
94
|
+
const fileName = `${name}.md`;
|
|
95
|
+
return [
|
|
96
|
+
// 1. User-global agents
|
|
97
|
+
path.join(userDir, fileName),
|
|
98
|
+
// 2. Project-local agents (preserved — `process.cwd()/.claude/agents/`)
|
|
99
|
+
// Important: kept so project-specific agents authored in a repo still
|
|
100
|
+
// resolve when `cf` is invoked from that repo.
|
|
101
|
+
path.join(process.cwd(), '.claude', 'agents', fileName),
|
|
102
|
+
];
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Resolve a bundled skill .md file to the first candidate that exists on
|
|
106
|
+
* disk, or `null` if none match.
|
|
107
|
+
*/
|
|
108
|
+
export function resolveSkillPath(id) {
|
|
109
|
+
for (const candidate of getSkillCandidates(id)) {
|
|
110
|
+
if (fs.existsSync(candidate))
|
|
111
|
+
return candidate;
|
|
112
|
+
}
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Resolve an agent .md file to the first candidate that exists on disk, or
|
|
117
|
+
* `null` if none match.
|
|
118
|
+
*/
|
|
119
|
+
export function resolveAgentPath(name) {
|
|
120
|
+
for (const candidate of getAgentCandidates(name)) {
|
|
121
|
+
if (fs.existsSync(candidate))
|
|
122
|
+
return candidate;
|
|
123
|
+
}
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Resolve the binary-bundled `skills/distilled/` *directory* (not a specific
|
|
128
|
+
* file) — used by writers like `skills-distill` that need to emit files into
|
|
129
|
+
* the distilled tree. Returns the first existing directory in the chain, or
|
|
130
|
+
* `null` if none exist.
|
|
131
|
+
*
|
|
132
|
+
* Priority:
|
|
133
|
+
* 1. `<binaryRoot>/../skills/distilled` (prod: dist/skills/distilled)
|
|
134
|
+
* 2. `<binaryRoot>/../../src/skills/distilled` (dev: src/skills/distilled)
|
|
135
|
+
* 3. `process.cwd()/src/skills/distilled` (legacy fallback)
|
|
136
|
+
*
|
|
137
|
+
* Why include cwd: distill is historically a dev-time operation; users
|
|
138
|
+
* running `cf skills distill` from the repo root should keep working.
|
|
139
|
+
*/
|
|
140
|
+
export function resolveDistilledOutputDir() {
|
|
141
|
+
const binDir = getBinaryRoot();
|
|
142
|
+
const candidates = [
|
|
143
|
+
path.join(binDir, '..', '..', 'skills', 'distilled'),
|
|
144
|
+
path.join(binDir, '..', '..', '..', 'src', 'skills', 'distilled'),
|
|
145
|
+
path.join(process.cwd(), 'src', 'skills', 'distilled'),
|
|
146
|
+
];
|
|
147
|
+
for (const dir of candidates) {
|
|
148
|
+
if (fs.existsSync(dir))
|
|
149
|
+
return dir;
|
|
150
|
+
}
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Return the full ordered candidate list for the distilled output directory.
|
|
155
|
+
* Exposed for tests and for callers that need to log which paths were tried
|
|
156
|
+
* (e.g. on a "missing" response).
|
|
157
|
+
*/
|
|
158
|
+
export function getDistilledOutputDirCandidates() {
|
|
159
|
+
const binDir = getBinaryRoot();
|
|
160
|
+
return [
|
|
161
|
+
path.join(binDir, '..', '..', 'skills', 'distilled'),
|
|
162
|
+
path.join(binDir, '..', '..', '..', 'src', 'skills', 'distilled'),
|
|
163
|
+
path.join(process.cwd(), 'src', 'skills', 'distilled'),
|
|
164
|
+
];
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=binary-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary-paths.js","sourceRoot":"","sources":["../../../src/core/utils/binary-paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bypass token file helpers (Phase 2c safety-net #2).
|
|
3
|
+
*
|
|
4
|
+
* The token lives at `~/.claude-forge/bypass.token` (mode 0600). When present
|
|
5
|
+
* and not expired, PreToolUseHandler treats it like an inline `forge:bypass=`
|
|
6
|
+
* marker — the next deny becomes a `bypass` row + allow=true.
|
|
7
|
+
*
|
|
8
|
+
* Format (JSON):
|
|
9
|
+
* {
|
|
10
|
+
* "token": "<uuid>",
|
|
11
|
+
* "expires_at": "ISO timestamp",
|
|
12
|
+
* "reason": "<free-form text>",
|
|
13
|
+
* "issued_at": "ISO timestamp"
|
|
14
|
+
* }
|
|
15
|
+
*
|
|
16
|
+
* Read-side robustness:
|
|
17
|
+
* • Parsing failure / missing fields / expired token → returns `null`.
|
|
18
|
+
* • File-mode looser than 0600 → returns `null` AND logs a warning (the
|
|
19
|
+
* daemon refuses to honor a world-readable token to avoid local privilege
|
|
20
|
+
* escalation).
|
|
21
|
+
*
|
|
22
|
+
* Write-side robustness:
|
|
23
|
+
* • Always writes mode 0600 explicitly.
|
|
24
|
+
* • Atomic via `writeFileSync` + chmod fallback.
|
|
25
|
+
*/
|
|
26
|
+
export interface BypassTokenPayload {
|
|
27
|
+
token: string;
|
|
28
|
+
/** ISO 8601 UTC timestamp at which the token stops being honored. */
|
|
29
|
+
expires_at: string;
|
|
30
|
+
/** Human-readable reason; surfaced in tool_intercepts.bypass_token. */
|
|
31
|
+
reason: string;
|
|
32
|
+
/** ISO 8601 UTC timestamp when the file was written. */
|
|
33
|
+
issued_at: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Read & validate the bypass token. Returns `null` for any of:
|
|
37
|
+
* • file missing
|
|
38
|
+
* • file mode != 0600 (world / group readable)
|
|
39
|
+
* • JSON parse error
|
|
40
|
+
* • missing required fields
|
|
41
|
+
* • expired
|
|
42
|
+
*
|
|
43
|
+
* Caller paths (PreToolUseHandler) should treat a `null` return as "no bypass".
|
|
44
|
+
*/
|
|
45
|
+
export declare function readBypassFile(path?: string): BypassTokenPayload | null;
|
|
46
|
+
export interface WriteBypassFileOptions {
|
|
47
|
+
/** Defaults to FORGE_PATHS.bypassToken(). Override only in tests. */
|
|
48
|
+
path?: string;
|
|
49
|
+
/** Time-to-live in milliseconds (caller computes from `--ttl 5m` etc.). */
|
|
50
|
+
ttlMs: number;
|
|
51
|
+
/** Free-form reason text persisted in the payload. */
|
|
52
|
+
reason: string;
|
|
53
|
+
/** Defaults to crypto.randomUUID(). Override only in tests. */
|
|
54
|
+
token?: string;
|
|
55
|
+
/** Defaults to Date.now(). Override only in tests. */
|
|
56
|
+
nowMs?: number;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Write the token JSON with mode 0600. The parent directory is created if it
|
|
60
|
+
* does not already exist. Returns the path written so callers can echo it.
|
|
61
|
+
*/
|
|
62
|
+
export declare function writeBypassFile(opts: WriteBypassFileOptions): {
|
|
63
|
+
path: string;
|
|
64
|
+
payload: BypassTokenPayload;
|
|
65
|
+
};
|
|
66
|
+
/** Remove the token file if present. Idempotent. */
|
|
67
|
+
export declare function revokeBypassFile(path?: string): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Parse `--ttl <duration>` argument from CLI. Accepts:
|
|
70
|
+
* • plain number → seconds
|
|
71
|
+
* • `<n>s` / `<n>m` / `<n>h` suffix
|
|
72
|
+
* Returns milliseconds. Throws on invalid input.
|
|
73
|
+
*/
|
|
74
|
+
export declare function parseTtl(input: string): number;
|
|
75
|
+
//# sourceMappingURL=bypass-token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bypass-token.d.ts","sourceRoot":"","sources":["../../../src/core/utils/bypass-token.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAgBH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,IAAI,GAAE,MAAkC,GAAG,kBAAkB,GAAG,IAAI,CAwClG;AAED,MAAM,WAAW,sBAAsB;IACrC,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,kBAAkB,CAAC;CAC7B,CAmBA;AAED,oDAAoD;AACpD,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,MAAkC,GAAG,OAAO,CASlF;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ9C"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bypass token file helpers (Phase 2c safety-net #2).
|
|
3
|
+
*
|
|
4
|
+
* The token lives at `~/.claude-forge/bypass.token` (mode 0600). When present
|
|
5
|
+
* and not expired, PreToolUseHandler treats it like an inline `forge:bypass=`
|
|
6
|
+
* marker — the next deny becomes a `bypass` row + allow=true.
|
|
7
|
+
*
|
|
8
|
+
* Format (JSON):
|
|
9
|
+
* {
|
|
10
|
+
* "token": "<uuid>",
|
|
11
|
+
* "expires_at": "ISO timestamp",
|
|
12
|
+
* "reason": "<free-form text>",
|
|
13
|
+
* "issued_at": "ISO timestamp"
|
|
14
|
+
* }
|
|
15
|
+
*
|
|
16
|
+
* Read-side robustness:
|
|
17
|
+
* • Parsing failure / missing fields / expired token → returns `null`.
|
|
18
|
+
* • File-mode looser than 0600 → returns `null` AND logs a warning (the
|
|
19
|
+
* daemon refuses to honor a world-readable token to avoid local privilege
|
|
20
|
+
* escalation).
|
|
21
|
+
*
|
|
22
|
+
* Write-side robustness:
|
|
23
|
+
* • Always writes mode 0600 explicitly.
|
|
24
|
+
* • Atomic via `writeFileSync` + chmod fallback.
|
|
25
|
+
*/
|
|
26
|
+
import { chmodSync, existsSync, readFileSync, statSync, unlinkSync, writeFileSync, mkdirSync, } from 'node:fs';
|
|
27
|
+
import { dirname } from 'node:path';
|
|
28
|
+
import { randomUUID } from 'node:crypto';
|
|
29
|
+
import { FORGE_PATHS } from '../constants.js';
|
|
30
|
+
import { logger } from './logger.js';
|
|
31
|
+
/**
|
|
32
|
+
* Read & validate the bypass token. Returns `null` for any of:
|
|
33
|
+
* • file missing
|
|
34
|
+
* • file mode != 0600 (world / group readable)
|
|
35
|
+
* • JSON parse error
|
|
36
|
+
* • missing required fields
|
|
37
|
+
* • expired
|
|
38
|
+
*
|
|
39
|
+
* Caller paths (PreToolUseHandler) should treat a `null` return as "no bypass".
|
|
40
|
+
*/
|
|
41
|
+
export function readBypassFile(path = FORGE_PATHS.bypassToken()) {
|
|
42
|
+
try {
|
|
43
|
+
if (!existsSync(path))
|
|
44
|
+
return null;
|
|
45
|
+
// Security: refuse to honor a token that is readable by other users.
|
|
46
|
+
// 0600 = rw-------. We accept any subset of owner bits but reject if
|
|
47
|
+
// group/other bits are set.
|
|
48
|
+
try {
|
|
49
|
+
const st = statSync(path);
|
|
50
|
+
// mode bits: low 9 = rwx for u/g/o. group bits = 0o070, other bits = 0o007.
|
|
51
|
+
const groupOrOther = st.mode & 0o077;
|
|
52
|
+
if (groupOrOther !== 0) {
|
|
53
|
+
logger.warn(`[bypass-token] refusing token at ${path}: mode ${(st.mode & 0o777).toString(8)} is not 0600`);
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch (statErr) {
|
|
58
|
+
logger.debug(`[bypass-token] stat failed: ${statErr}`);
|
|
59
|
+
}
|
|
60
|
+
const raw = readFileSync(path, 'utf-8');
|
|
61
|
+
const parsed = JSON.parse(raw);
|
|
62
|
+
if (typeof parsed.token !== 'string' ||
|
|
63
|
+
typeof parsed.expires_at !== 'string' ||
|
|
64
|
+
typeof parsed.reason !== 'string' ||
|
|
65
|
+
typeof parsed.issued_at !== 'string') {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
const expMs = Date.parse(parsed.expires_at);
|
|
69
|
+
if (!Number.isFinite(expMs) || expMs <= Date.now()) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
return parsed;
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
logger.debug(`[bypass-token] read failed: ${err}`);
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Write the token JSON with mode 0600. The parent directory is created if it
|
|
81
|
+
* does not already exist. Returns the path written so callers can echo it.
|
|
82
|
+
*/
|
|
83
|
+
export function writeBypassFile(opts) {
|
|
84
|
+
const path = opts.path ?? FORGE_PATHS.bypassToken();
|
|
85
|
+
const nowMs = opts.nowMs ?? Date.now();
|
|
86
|
+
const payload = {
|
|
87
|
+
token: opts.token ?? randomUUID(),
|
|
88
|
+
issued_at: new Date(nowMs).toISOString(),
|
|
89
|
+
expires_at: new Date(nowMs + opts.ttlMs).toISOString(),
|
|
90
|
+
reason: opts.reason,
|
|
91
|
+
};
|
|
92
|
+
mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
|
|
93
|
+
// Write then chmod — writeFileSync's `mode` option respects umask on some
|
|
94
|
+
// platforms, so an explicit chmod is the only way to guarantee 0600.
|
|
95
|
+
writeFileSync(path, JSON.stringify(payload, null, 2) + '\n', { encoding: 'utf-8' });
|
|
96
|
+
try {
|
|
97
|
+
chmodSync(path, 0o600);
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
logger.warn(`[bypass-token] chmod 0600 failed (token still written): ${err}`);
|
|
101
|
+
}
|
|
102
|
+
return { path, payload };
|
|
103
|
+
}
|
|
104
|
+
/** Remove the token file if present. Idempotent. */
|
|
105
|
+
export function revokeBypassFile(path = FORGE_PATHS.bypassToken()) {
|
|
106
|
+
try {
|
|
107
|
+
if (!existsSync(path))
|
|
108
|
+
return false;
|
|
109
|
+
unlinkSync(path);
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
logger.warn(`[bypass-token] revoke failed: ${err}`);
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Parse `--ttl <duration>` argument from CLI. Accepts:
|
|
119
|
+
* • plain number → seconds
|
|
120
|
+
* • `<n>s` / `<n>m` / `<n>h` suffix
|
|
121
|
+
* Returns milliseconds. Throws on invalid input.
|
|
122
|
+
*/
|
|
123
|
+
export function parseTtl(input) {
|
|
124
|
+
const trimmed = input.trim();
|
|
125
|
+
const m = /^(\d+)\s*([smh]?)$/i.exec(trimmed);
|
|
126
|
+
if (!m)
|
|
127
|
+
throw new Error(`Invalid --ttl "${input}" (expected: <n>[s|m|h], e.g. 5m, 30s, 1h)`);
|
|
128
|
+
const n = Number(m[1]);
|
|
129
|
+
const unit = (m[2] || 's').toLowerCase();
|
|
130
|
+
const mult = unit === 'h' ? 3600_000 : unit === 'm' ? 60_000 : 1000;
|
|
131
|
+
return n * mult;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=bypass-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bypass-token.js","sourceRoot":"","sources":["../../../src/core/utils/bypass-token.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cc-builtin-agents.d.ts","sourceRoot":"","sources":["../../../src/core/utils/cc-builtin-agents.ts"],"names":[],"mappings":"AAyBA,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code built-in (virtual) subagent types.
|
|
3
|
+
*
|
|
4
|
+
* These names are advertised by the Claude Code TUI / Task tool but have no
|
|
5
|
+
* backing markdown file in `.claude/agents/`. The Web "Agent 委托" tab still
|
|
6
|
+
* receives delegation events for them (they show up in routing_events), so we
|
|
7
|
+
* must classify them as `builtin` rather than rejecting the detail request.
|
|
8
|
+
*
|
|
9
|
+
* Issue #4 (2026-05-29): clicking `Plan` / `Explore` / `general-purpose` in
|
|
10
|
+
* the delegation table previously returned HTTP 400 because the agent-name
|
|
11
|
+
* regex was lowercase-kebab only. We now accept builtin names and return a
|
|
12
|
+
* friendly 200 response with `source: 'builtin'`.
|
|
13
|
+
*
|
|
14
|
+
* Maintenance: when Claude Code ships new builtins, append to this set.
|
|
15
|
+
* Names are matched case-sensitively (matches what Task tool sends).
|
|
16
|
+
*/
|
|
17
|
+
const CC_BUILTIN_AGENTS = new Set([
|
|
18
|
+
'general-purpose',
|
|
19
|
+
'Plan',
|
|
20
|
+
'Explore',
|
|
21
|
+
'Task',
|
|
22
|
+
'claude-code-guide',
|
|
23
|
+
'statusline-setup',
|
|
24
|
+
]);
|
|
25
|
+
/** True if the given subagent_type is a Claude Code built-in (no .md file). */
|
|
26
|
+
export function isBuiltinAgent(name) {
|
|
27
|
+
return CC_BUILTIN_AGENTS.has(name);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=cc-builtin-agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cc-builtin-agents.js","sourceRoot":"","sources":["../../../src/core/utils/cc-builtin-agents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,iBAAiB,GAAwB,IAAI,GAAG,CAAC;IACrD,iBAAiB;IACjB,MAAM;IACN,SAAS;IACT,MAAM;IACN,mBAAmB;IACnB,kBAAkB;CACnB,CAAC,CAAC;AAEH,+EAA+E;AAC/E,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC"}
|