@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
package/dist/core/utils/time.js
CHANGED
|
@@ -3,6 +3,39 @@
|
|
|
3
3
|
*
|
|
4
4
|
* 统一处理 ISO 8601 时间戳的 Z 后缀问题,确保所有时间戳都带 Z。
|
|
5
5
|
*/
|
|
6
|
+
// ─── Duration constants (R5, decision 1544) ────────────────────────────────
|
|
7
|
+
// 统一替换全仓手写的时间窗口算术(`N * 24 * 60 * 60 * 1000` / `N * 86400_000`
|
|
8
|
+
// 等 4 种拼法)。值与手写拼法严格相等,纯行为保持。
|
|
9
|
+
/** 一分钟的毫秒数 = 60 * 1000 = 60_000 */
|
|
10
|
+
export const MINUTE_MS = 60_000;
|
|
11
|
+
/** 一小时的毫秒数 = 60 * 60 * 1000 = 3_600_000 */
|
|
12
|
+
export const HOUR_MS = 3_600_000;
|
|
13
|
+
/** 一天的毫秒数 = 24 * 60 * 60 * 1000 = 86_400_000 */
|
|
14
|
+
export const DAY_MS = 86_400_000;
|
|
15
|
+
/**
|
|
16
|
+
* `now - n 天` 的 Unix 毫秒数(epoch ms)。
|
|
17
|
+
*
|
|
18
|
+
* 等价于手写的 `Date.now() - n * 24 * 60 * 60 * 1000`。用于 INTEGER ms 时间戳
|
|
19
|
+
* 列(routing_events.ts / skill_invocations)的窗口下界,**保持 number 类型**。
|
|
20
|
+
*
|
|
21
|
+
* 注意:调用方若需要可注入的 "now"(如 `opts.now_ms ?? Date.now()`),不要用本
|
|
22
|
+
* 函数(它内部固定调 Date.now()),改用 `nowMs - n * DAY_MS`。
|
|
23
|
+
*/
|
|
24
|
+
export function daysAgoMs(n) {
|
|
25
|
+
return Date.now() - n * DAY_MS;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* `now - n 天` 的 ISO 8601 字符串(带 Z,由 Date.prototype.toISOString 产出)。
|
|
29
|
+
*
|
|
30
|
+
* 等价于手写的 `new Date(Date.now() - n * 24 * 60 * 60 * 1000).toISOString()`。
|
|
31
|
+
* 用于 ISO TEXT 时间戳列(events.timestamp 等)的窗口下界,**保持 string 类型**。
|
|
32
|
+
*
|
|
33
|
+
* 注意:调用方若需要可注入的 "now",改用
|
|
34
|
+
* `new Date(nowMs - n * DAY_MS).toISOString()`。
|
|
35
|
+
*/
|
|
36
|
+
export function daysAgoIso(n) {
|
|
37
|
+
return new Date(daysAgoMs(n)).toISOString();
|
|
38
|
+
}
|
|
6
39
|
/**
|
|
7
40
|
* 归一化时间戳,确保带 Z 后缀
|
|
8
41
|
*/
|
|
@@ -35,4 +68,118 @@ export function formatDuration(ms) {
|
|
|
35
68
|
return `${(ms / 60000).toFixed(1)}m`;
|
|
36
69
|
return `${(ms / 3600000).toFixed(1)}h`;
|
|
37
70
|
}
|
|
71
|
+
// ─── New display helpers (timezone-overhaul, spec 1635) ────────────────────
|
|
72
|
+
/**
|
|
73
|
+
* 将"可能 naive 的 UTC ISO 串"安全转换为 Date 实例。
|
|
74
|
+
* string 入参走 normalizeTimestamp 补 Z;number 入参直通 new Date(n)(毫秒值)。
|
|
75
|
+
* 非法输入返回 epoch(不抛错)。
|
|
76
|
+
*
|
|
77
|
+
* 例:'2026-05-27T08:24:13.123' (naive UTC) → Date 表示 16:24 local (UTC+8)
|
|
78
|
+
*/
|
|
79
|
+
export function parseTimestamp(ts) {
|
|
80
|
+
if (typeof ts === 'number') {
|
|
81
|
+
return new Date(ts);
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
return new Date(normalizeTimestamp(ts));
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return new Date(0);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function pad2(n) {
|
|
91
|
+
return n < 10 ? `0${n}` : `${n}`;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* 格式化为本地时区显示,默认 `2026-05-27 16:24 CST`。
|
|
95
|
+
* opts.includeSeconds: 输出 `2026-05-27 16:24:13 CST`
|
|
96
|
+
* opts.dateOnly: 输出 `2026-05-27`
|
|
97
|
+
* opts.tzSuffix: 默认 'CST';传 '' 跳过后缀
|
|
98
|
+
* 非法输入返回 '—'。
|
|
99
|
+
*/
|
|
100
|
+
export function formatLocalDisplay(ts, opts) {
|
|
101
|
+
try {
|
|
102
|
+
const d = parseTimestamp(ts);
|
|
103
|
+
if (isNaN(d.getTime()))
|
|
104
|
+
return '—';
|
|
105
|
+
const yyyy = d.getFullYear();
|
|
106
|
+
const mm = pad2(d.getMonth() + 1);
|
|
107
|
+
const dd = pad2(d.getDate());
|
|
108
|
+
if (opts?.dateOnly)
|
|
109
|
+
return `${yyyy}-${mm}-${dd}`;
|
|
110
|
+
const hh = pad2(d.getHours());
|
|
111
|
+
const min = pad2(d.getMinutes());
|
|
112
|
+
const base = `${yyyy}-${mm}-${dd} ${hh}:${min}`;
|
|
113
|
+
const withSec = opts?.includeSeconds ? `:${pad2(d.getSeconds())}` : '';
|
|
114
|
+
const suffix = opts?.tzSuffix !== undefined ? opts.tzSuffix : 'CST';
|
|
115
|
+
return suffix ? `${base}${withSec} ${suffix}` : `${base}${withSec}`;
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return '—';
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* 格式化为 UTC 显示,`2026-05-27 08:24 UTC`。
|
|
123
|
+
* opts.includeSeconds: 加 `:13`
|
|
124
|
+
* opts.dateOnly: 仅 `2026-05-27`(UTC 日期)
|
|
125
|
+
* 非法输入返回 '—'。
|
|
126
|
+
*/
|
|
127
|
+
export function formatUTCDisplay(ts, opts) {
|
|
128
|
+
try {
|
|
129
|
+
const d = parseTimestamp(ts);
|
|
130
|
+
if (isNaN(d.getTime()))
|
|
131
|
+
return '—';
|
|
132
|
+
const yyyy = d.getUTCFullYear();
|
|
133
|
+
const mm = pad2(d.getUTCMonth() + 1);
|
|
134
|
+
const dd = pad2(d.getUTCDate());
|
|
135
|
+
if (opts?.dateOnly)
|
|
136
|
+
return `${yyyy}-${mm}-${dd}`;
|
|
137
|
+
const hh = pad2(d.getUTCHours());
|
|
138
|
+
const min = pad2(d.getUTCMinutes());
|
|
139
|
+
const base = `${yyyy}-${mm}-${dd} ${hh}:${min}`;
|
|
140
|
+
const withSec = opts?.includeSeconds ? `:${pad2(d.getUTCSeconds())}` : '';
|
|
141
|
+
return `${base}${withSec} UTC`;
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return '—';
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* 相对时间:`刚刚` / `5 分钟前` / `2 小时前` / `3 天前`。
|
|
149
|
+
* 提取自 resume-manager.ts:formatRelativeTime。
|
|
150
|
+
* 非法或未来时间返回 '刚刚'。
|
|
151
|
+
*/
|
|
152
|
+
export function formatRelative(ts) {
|
|
153
|
+
try {
|
|
154
|
+
const d = parseTimestamp(ts);
|
|
155
|
+
if (isNaN(d.getTime()))
|
|
156
|
+
return '—';
|
|
157
|
+
const diff = Date.now() - d.getTime();
|
|
158
|
+
const mins = Math.floor(diff / 60000);
|
|
159
|
+
if (mins < 1)
|
|
160
|
+
return '刚刚';
|
|
161
|
+
if (mins < 60)
|
|
162
|
+
return `${mins} 分钟前`;
|
|
163
|
+
const hours = Math.floor(mins / 60);
|
|
164
|
+
if (hours < 24)
|
|
165
|
+
return `${hours} 小时前`;
|
|
166
|
+
return `${Math.floor(hours / 24)} 天前`;
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
return '—';
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* 本地日期串(用于文件名),`2026-05-27`(本地时区)。
|
|
174
|
+
* 省略参数时使用 Date.now()。
|
|
175
|
+
*/
|
|
176
|
+
export function formatLocalDateForFilename(ts) {
|
|
177
|
+
const d = ts !== undefined ? parseTimestamp(ts) : new Date();
|
|
178
|
+
if (isNaN(d.getTime()))
|
|
179
|
+
return formatLocalDateForFilename();
|
|
180
|
+
const yyyy = d.getFullYear();
|
|
181
|
+
const mm = pad2(d.getMonth() + 1);
|
|
182
|
+
const dd = pad2(d.getDate());
|
|
183
|
+
return `${yyyy}-${mm}-${dd}`;
|
|
184
|
+
}
|
|
38
185
|
//# sourceMappingURL=time.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time.js","sourceRoot":"","sources":["../../../src/core/utils/time.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChD,OAAO,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,SAAiB;IAC7C,OAAO,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAa,EAAE,GAAW;IACjD,OAAO,aAAa,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,GAAG,EAAE,IAAI,CAAC;IAChC,IAAI,EAAE,GAAG,KAAK;QAAE,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACpD,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACvD,OAAO,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACzC,CAAC"}
|
|
1
|
+
{"version":3,"file":"time.js","sourceRoot":"","sources":["../../../src/core/utils/time.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface AgentSyncResult {
|
|
2
|
+
copied: number;
|
|
3
|
+
checked: number;
|
|
4
|
+
/** Files present in target but not in source list — preserved as-is. */
|
|
5
|
+
skipped_userOwned: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Sync built-in project-specific agent prompts from
|
|
9
|
+
* dist/daemon/templates/agents to ~/.claude/agents/.
|
|
10
|
+
*
|
|
11
|
+
* Strategy (identical to syncSkills):
|
|
12
|
+
* - Only files present in the source dir are candidates for write.
|
|
13
|
+
* - sha256 identical → skip; different → overwrite.
|
|
14
|
+
* - User-only agent files (not in source list) are never touched.
|
|
15
|
+
* - Target dir is created if absent (first install).
|
|
16
|
+
*
|
|
17
|
+
* Failures are logged as warnings and never thrown — daemon startup must
|
|
18
|
+
* not be blocked by sync failure.
|
|
19
|
+
*/
|
|
20
|
+
export declare function syncAgents(opts?: {
|
|
21
|
+
sourceDir?: string;
|
|
22
|
+
targetDir?: string;
|
|
23
|
+
}): AgentSyncResult;
|
|
24
|
+
//# sourceMappingURL=agent-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-sync.d.ts","sourceRoot":"","sources":["../../src/daemon/agent-sync.ts"],"names":[],"mappings":"AA4CA,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,eAAe,CAgE7F"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { existsSync, readFileSync, copyFileSync, mkdirSync, readdirSync } from 'node:fs';
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
3
|
+
import { join, dirname } from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { homedir } from 'node:os';
|
|
6
|
+
import { logger } from '../core/utils/logger.js';
|
|
7
|
+
/**
|
|
8
|
+
* Sync project-specific agent prompts from packaged templates to
|
|
9
|
+
* `~/.claude/agents/`.
|
|
10
|
+
*
|
|
11
|
+
* Spec: docs/design/2026-05-27/1505-agent-template-sync-spec.md (Option B).
|
|
12
|
+
* Structurally a mirror of `src/daemon/skill-sync.ts` — same SHA-256 diff,
|
|
13
|
+
* same "user files outside the source list are untouched" policy.
|
|
14
|
+
*
|
|
15
|
+
* Why both `.claude/agents/` (tracked in the repo) AND
|
|
16
|
+
* `dist/daemon/templates/agents/`?
|
|
17
|
+
* - The in-repo copy is what main thread / sub-agents actually load when
|
|
18
|
+
* Claude Code is run from the forge checkout (Anthropic CLI reads
|
|
19
|
+
* `<cwd>/.claude/agents/`).
|
|
20
|
+
* - The template copy is what gets shipped via npm install — when a user
|
|
21
|
+
* runs `claude-forge` in any other project, their `~/.claude/agents/`
|
|
22
|
+
* needs the 8 project-specific agents bootstrapped, otherwise
|
|
23
|
+
* `validateAgentEnum` throws on daemon startup. That's what this sync
|
|
24
|
+
* covers.
|
|
25
|
+
*
|
|
26
|
+
* Files named `my-*.md` (or anything not in the source list) are preserved.
|
|
27
|
+
*/
|
|
28
|
+
const USER_AGENTS_DIR = join(homedir(), '.claude', 'agents');
|
|
29
|
+
function sha256(content) {
|
|
30
|
+
return createHash('sha256').update(content).digest('hex');
|
|
31
|
+
}
|
|
32
|
+
// NOTE: delete semantics deliberately NOT applied here yet.
|
|
33
|
+
// See docs/design/2026-05-29/1641-skill-sync-delete-semantics-spec.md
|
|
34
|
+
// Open Q1 — promote to agent-sync only after skill-sync soaks.
|
|
35
|
+
function getSourceAgentsDir() {
|
|
36
|
+
// Compiled: dist/daemon/agent-sync.js → dist/daemon/templates/agents
|
|
37
|
+
// Dev (vitest): src/daemon/agent-sync.ts → src/daemon/templates/agents
|
|
38
|
+
return join(dirname(fileURLToPath(import.meta.url)), 'templates', 'agents');
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Sync built-in project-specific agent prompts from
|
|
42
|
+
* dist/daemon/templates/agents to ~/.claude/agents/.
|
|
43
|
+
*
|
|
44
|
+
* Strategy (identical to syncSkills):
|
|
45
|
+
* - Only files present in the source dir are candidates for write.
|
|
46
|
+
* - sha256 identical → skip; different → overwrite.
|
|
47
|
+
* - User-only agent files (not in source list) are never touched.
|
|
48
|
+
* - Target dir is created if absent (first install).
|
|
49
|
+
*
|
|
50
|
+
* Failures are logged as warnings and never thrown — daemon startup must
|
|
51
|
+
* not be blocked by sync failure.
|
|
52
|
+
*/
|
|
53
|
+
export function syncAgents(opts) {
|
|
54
|
+
const result = { copied: 0, checked: 0, skipped_userOwned: 0 };
|
|
55
|
+
const sourceDir = opts?.sourceDir ?? getSourceAgentsDir();
|
|
56
|
+
const targetDir = opts?.targetDir ?? USER_AGENTS_DIR;
|
|
57
|
+
if (!existsSync(sourceDir)) {
|
|
58
|
+
logger.warn(`[AgentSync] source dir not found at ${sourceDir}, skipping`);
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
// Ensure target dir exists (first install may not have ~/.claude/agents/)
|
|
62
|
+
try {
|
|
63
|
+
mkdirSync(targetDir, { recursive: true });
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
/* ignore — if it already exists mkdirSync is a no-op */
|
|
67
|
+
}
|
|
68
|
+
let sourceFiles;
|
|
69
|
+
try {
|
|
70
|
+
sourceFiles = readdirSync(sourceDir).filter((f) => f.endsWith('.md'));
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
logger.warn(`[AgentSync] failed to list ${sourceDir}: ${err}`);
|
|
74
|
+
return result;
|
|
75
|
+
}
|
|
76
|
+
const sourceSet = new Set(sourceFiles);
|
|
77
|
+
for (const file of sourceFiles) {
|
|
78
|
+
result.checked++;
|
|
79
|
+
const src = join(sourceDir, file);
|
|
80
|
+
const dest = join(targetDir, file);
|
|
81
|
+
try {
|
|
82
|
+
const srcContent = readFileSync(src);
|
|
83
|
+
if (existsSync(dest)) {
|
|
84
|
+
const destContent = readFileSync(dest);
|
|
85
|
+
if (sha256(srcContent) === sha256(destContent)) {
|
|
86
|
+
continue; // identical — no copy needed
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
copyFileSync(src, dest);
|
|
90
|
+
result.copied++;
|
|
91
|
+
logger.info(`[AgentSync] updated ${file}`);
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
logger.warn(`[AgentSync] failed to sync ${file}: ${err instanceof Error ? err.message : String(err)}`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// Count user-owned files that don't shadow a managed file. These are kept
|
|
98
|
+
// as-is (e.g. user's `my-planner.md` overrides / supplements).
|
|
99
|
+
try {
|
|
100
|
+
const targetFiles = readdirSync(targetDir).filter((f) => f.endsWith('.md'));
|
|
101
|
+
for (const f of targetFiles) {
|
|
102
|
+
if (!sourceSet.has(f))
|
|
103
|
+
result.skipped_userOwned++;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
/* target dir creation may have failed silently above; ignore */
|
|
108
|
+
}
|
|
109
|
+
if (result.copied > 0) {
|
|
110
|
+
logger.info(`[AgentSync] synced ${result.copied}/${result.checked} agent files (skipped_userOwned=${result.skipped_userOwned})`);
|
|
111
|
+
}
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=agent-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-sync.js","sourceRoot":"","sources":["../../src/daemon/agent-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ConfigStore — runtime feature-flag KV (v9.x Phase 0)
|
|
3
|
+
*
|
|
4
|
+
* Wraps the `forge_config` SQLite table so handlers / services can probe a
|
|
5
|
+
* flag without recompilation. Used by Phases 1-9 of the master roadmap
|
|
6
|
+
* (PreToolUse interception / feedback loop / workflow recommender / agent
|
|
7
|
+
* writeback ...). Each phase ships behind its own flag, default OFF.
|
|
8
|
+
*
|
|
9
|
+
* MVP1 (KB injection) is already shipped, so `kb_inject.enabled` defaults to
|
|
10
|
+
* `'true'`. All other Phase-N flags default `'false'` and are flipped to
|
|
11
|
+
* `'true'` by whoever rolls out that phase (CLI `cf config set ...` or
|
|
12
|
+
* Web tuning UI in Phase 8).
|
|
13
|
+
*
|
|
14
|
+
* Seeded values are inserted only if the key is absent — user edits are
|
|
15
|
+
* preserved across daemon restarts.
|
|
16
|
+
*/
|
|
17
|
+
import type { SQLiteStorage, ForgeConfigRow } from '../core/storage/sqlite.js';
|
|
18
|
+
/**
|
|
19
|
+
* Default feature flags seeded on daemon startup.
|
|
20
|
+
*
|
|
21
|
+
* Add new flags here as later phases land; never delete existing keys
|
|
22
|
+
* (downstream tooling may probe them and would silently get the default-false
|
|
23
|
+
* behaviour, which is the wrong silent contract).
|
|
24
|
+
*/
|
|
25
|
+
export declare const DEFAULT_FLAGS: Readonly<Record<string, string>>;
|
|
26
|
+
export declare class ConfigStore {
|
|
27
|
+
private storage;
|
|
28
|
+
constructor(storage: SQLiteStorage);
|
|
29
|
+
/**
|
|
30
|
+
* Returns `true` only when the stored value is the literal string `'true'`.
|
|
31
|
+
* Missing keys → `false` (fail-safe default). Any other value → `false`.
|
|
32
|
+
*
|
|
33
|
+
* Callers that need richer semantics should use `get()` directly.
|
|
34
|
+
*/
|
|
35
|
+
isEnabled(key: string): boolean;
|
|
36
|
+
/** Raw read. `undefined` when the key is absent. */
|
|
37
|
+
get(key: string): string | undefined;
|
|
38
|
+
/** Upsert. Values are stored verbatim — coerce to string at the call site. */
|
|
39
|
+
set(key: string, value: string): void;
|
|
40
|
+
/**
|
|
41
|
+
* Delete a key. Used by Phase D `reviveInterceptIfStale` to clean up the
|
|
42
|
+
* auto-disabled audit keys after the hysteresis window expires. Idempotent.
|
|
43
|
+
*/
|
|
44
|
+
delete(key: string): boolean;
|
|
45
|
+
/** Snapshot of every row, sorted by key for deterministic CLI output. */
|
|
46
|
+
list(): ForgeConfigRow[];
|
|
47
|
+
/**
|
|
48
|
+
* Seed `DEFAULT_FLAGS` (or a caller-supplied set) into the table, skipping
|
|
49
|
+
* keys that already have a value. Safe to call on every daemon start.
|
|
50
|
+
*
|
|
51
|
+
* Returns the count of newly inserted keys (0 on subsequent restarts).
|
|
52
|
+
*/
|
|
53
|
+
seedDefaults(defaults?: Readonly<Record<string, string>>): number;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=config-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../../src/daemon/config-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE/E;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkFzD,CAAC;AAEH,qBAAa,WAAW;IACV,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,aAAa;IAE1C;;;;;OAKG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI/B,oDAAoD;IACpD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIpC,8EAA8E;IAC9E,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIrC;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B,yEAAyE;IACzE,IAAI,IAAI,cAAc,EAAE;IAIxB;;;;;OAKG;IACH,YAAY,CAAC,QAAQ,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAiB,GAAG,MAAM;CASjF"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ConfigStore — runtime feature-flag KV (v9.x Phase 0)
|
|
3
|
+
*
|
|
4
|
+
* Wraps the `forge_config` SQLite table so handlers / services can probe a
|
|
5
|
+
* flag without recompilation. Used by Phases 1-9 of the master roadmap
|
|
6
|
+
* (PreToolUse interception / feedback loop / workflow recommender / agent
|
|
7
|
+
* writeback ...). Each phase ships behind its own flag, default OFF.
|
|
8
|
+
*
|
|
9
|
+
* MVP1 (KB injection) is already shipped, so `kb_inject.enabled` defaults to
|
|
10
|
+
* `'true'`. All other Phase-N flags default `'false'` and are flipped to
|
|
11
|
+
* `'true'` by whoever rolls out that phase (CLI `cf config set ...` or
|
|
12
|
+
* Web tuning UI in Phase 8).
|
|
13
|
+
*
|
|
14
|
+
* Seeded values are inserted only if the key is absent — user edits are
|
|
15
|
+
* preserved across daemon restarts.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Default feature flags seeded on daemon startup.
|
|
19
|
+
*
|
|
20
|
+
* Add new flags here as later phases land; never delete existing keys
|
|
21
|
+
* (downstream tooling may probe them and would silently get the default-false
|
|
22
|
+
* behaviour, which is the wrong silent contract).
|
|
23
|
+
*/
|
|
24
|
+
export const DEFAULT_FLAGS = Object.freeze({
|
|
25
|
+
// MVP1 shipped (commit 4a13e869) — default on.
|
|
26
|
+
'kb_inject.enabled': 'true',
|
|
27
|
+
// Phase 1: PreToolUseHandler + rules registry + tool_intercepts table.
|
|
28
|
+
// Phase 2c: default flipped 'false' → 'true' once the 4 safety nets landed
|
|
29
|
+
// (whitelist / bypass file / rollback / observation_until). Existing user
|
|
30
|
+
// installs keep whatever they had via seedDefaults' if-missing semantics;
|
|
31
|
+
// only fresh installs see the strict default. To opt out:
|
|
32
|
+
// cf config set pre_tool_intercept.enabled false
|
|
33
|
+
'pre_tool_intercept.enabled': 'true',
|
|
34
|
+
// 8-in-1 Phase D (2026-05-27): per-project intercept disable. Comma-
|
|
35
|
+
// separated list of absolute project path prefixes; any project whose path
|
|
36
|
+
// starts with one of these strings has `PreToolUseHandler` early-exit
|
|
37
|
+
// BEFORE the whitelist check (= zero rule writes, zero intercepts).
|
|
38
|
+
//
|
|
39
|
+
// Default empty. Users opt-in per project via:
|
|
40
|
+
// cf config set pre_tool_intercept.disabled_project_prefixes /Users/me/docs-only-repo
|
|
41
|
+
// Multi-project:
|
|
42
|
+
// cf config set pre_tool_intercept.disabled_project_prefixes /Users/me/a,/Users/me/b
|
|
43
|
+
//
|
|
44
|
+
// Use case: docs-only / tutorial / scratch repos where intercept noise
|
|
45
|
+
// outweighs benefit. See spec docs/design/2026-05-27/1006-intercept-
|
|
46
|
+
// enforcement-fix-spec.md §D P1-5.
|
|
47
|
+
'pre_tool_intercept.disabled_project_prefixes': '',
|
|
48
|
+
// Phase 2/8: rule-tuning feedback aggregator.
|
|
49
|
+
'feedback_loop.enabled': 'false',
|
|
50
|
+
// Phase 6: agent-experience KB writeback (bidirectional flow).
|
|
51
|
+
'agent_writeback.enabled': 'false',
|
|
52
|
+
// Phase 2a (v9.x): LLM intent classifier + 6-layer fallback stack.
|
|
53
|
+
// ON by default — the fallback stack is safe even without an API key,
|
|
54
|
+
// and dashboards / Sub-2 spec generation depend on `IntentClassification`
|
|
55
|
+
// rows being present in the `injections` table.
|
|
56
|
+
'intent_engine.enabled': 'true',
|
|
57
|
+
// Phase 2a L5 — minimum number of prior intents required to vote.
|
|
58
|
+
'intent_fallback.l5_history_threshold': '3',
|
|
59
|
+
// Phase 2b (v9.x): auto-spec generation. DISABLED 2026-05-27 (Spec 2 § A).
|
|
60
|
+
// Acceptance rate 0.9% (1/109 over 7d); LLM-cost / disk-clutter outweighs
|
|
61
|
+
// benefit. Code (SpecGate.tryAutoGenerate / SpecGenerator / SpecApproval)
|
|
62
|
+
// is preserved for future product-form revival. Reversible via:
|
|
63
|
+
// cf config set auto_spec_generation.enabled true
|
|
64
|
+
// Existing installs whose `forge_config` row already holds `'true'` are
|
|
65
|
+
// NOT auto-mutated (seedDefaults is if-missing); see Spec 2 § A changelog.
|
|
66
|
+
'auto_spec_generation.enabled': 'false',
|
|
67
|
+
// Phase 2 (v9.x, 2026-05-26): user-question default BMAD gate (hard deny
|
|
68
|
+
// layer). Default OFF — flip via:
|
|
69
|
+
// cf config set question_default_bmad.enforce true
|
|
70
|
+
// Reassess at 2026-06-02 (target: ≥80% would-have-benefited true-positive
|
|
71
|
+
// labelling on 20-row sample). Spec:
|
|
72
|
+
// docs/design/2026-05-26/1707-user-question-default-bmad-spec.md
|
|
73
|
+
'question_default_bmad.enforce': 'false',
|
|
74
|
+
// db-size optimization (2026-05-26): two-tier TTL for `events`.
|
|
75
|
+
// - events.warm_ttl_days → after N days, `tool_input` set to NULL
|
|
76
|
+
// - events.cold_ttl_days → after M days, whole row DELETEd
|
|
77
|
+
// - events.sweep_interval_hours → cadence of the maintenance interval
|
|
78
|
+
// See src/daemon/services/event-ttl-sweep.ts for semantics. Values are
|
|
79
|
+
// integer strings (callers coerce via Number()).
|
|
80
|
+
'events.warm_ttl_days': '7',
|
|
81
|
+
'events.cold_ttl_days': '30',
|
|
82
|
+
'events.sweep_interval_hours': '6',
|
|
83
|
+
// codegraph Phase 3 (decision 95df9d97): cadence (minutes) of the daemon's
|
|
84
|
+
// incremental call-graph sync. See src/daemon/services/codegraph-sync.ts.
|
|
85
|
+
// Integer string; coerced via Number(). 0/invalid → default (15m).
|
|
86
|
+
'codegraph.sync_interval_minutes': '15',
|
|
87
|
+
// f47c2c90 (2026-06-17): inline single-file no-spawn violation 口径补强
|
|
88
|
+
// (warn-level, default OFF, gray-rollout to observe recall). The
|
|
89
|
+
// `inline-edit-no-spawn` / `inline-write-no-spawn` rules cover the blind spot
|
|
90
|
+
// where the main thread edits exactly 1 file without spawning an agent (the
|
|
91
|
+
// ==1 segment, mutually exclusive with the ==2 no-agent / ≥3 hard rules).
|
|
92
|
+
// flip via: cf config set inline_edit_no_spawn.enabled true
|
|
93
|
+
// ONLY widens detection 口径 — NEVER deny (CLAUDE.md mechanical-block layer
|
|
94
|
+
// removed; daemon only records, never hard-blocks the main thread).
|
|
95
|
+
'inline_edit_no_spawn.enabled': 'false',
|
|
96
|
+
});
|
|
97
|
+
export class ConfigStore {
|
|
98
|
+
storage;
|
|
99
|
+
constructor(storage) {
|
|
100
|
+
this.storage = storage;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Returns `true` only when the stored value is the literal string `'true'`.
|
|
104
|
+
* Missing keys → `false` (fail-safe default). Any other value → `false`.
|
|
105
|
+
*
|
|
106
|
+
* Callers that need richer semantics should use `get()` directly.
|
|
107
|
+
*/
|
|
108
|
+
isEnabled(key) {
|
|
109
|
+
return this.storage.readConfig(key) === 'true';
|
|
110
|
+
}
|
|
111
|
+
/** Raw read. `undefined` when the key is absent. */
|
|
112
|
+
get(key) {
|
|
113
|
+
return this.storage.readConfig(key);
|
|
114
|
+
}
|
|
115
|
+
/** Upsert. Values are stored verbatim — coerce to string at the call site. */
|
|
116
|
+
set(key, value) {
|
|
117
|
+
this.storage.writeConfig(key, value);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Delete a key. Used by Phase D `reviveInterceptIfStale` to clean up the
|
|
121
|
+
* auto-disabled audit keys after the hysteresis window expires. Idempotent.
|
|
122
|
+
*/
|
|
123
|
+
delete(key) {
|
|
124
|
+
return this.storage.deleteConfig(key);
|
|
125
|
+
}
|
|
126
|
+
/** Snapshot of every row, sorted by key for deterministic CLI output. */
|
|
127
|
+
list() {
|
|
128
|
+
return this.storage.listConfig();
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Seed `DEFAULT_FLAGS` (or a caller-supplied set) into the table, skipping
|
|
132
|
+
* keys that already have a value. Safe to call on every daemon start.
|
|
133
|
+
*
|
|
134
|
+
* Returns the count of newly inserted keys (0 on subsequent restarts).
|
|
135
|
+
*/
|
|
136
|
+
seedDefaults(defaults = DEFAULT_FLAGS) {
|
|
137
|
+
let inserted = 0;
|
|
138
|
+
for (const [key, value] of Object.entries(defaults)) {
|
|
139
|
+
if (this.storage.writeConfigIfMissing(key, value)) {
|
|
140
|
+
inserted += 1;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return inserted;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=config-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-store.js","sourceRoot":"","sources":["../../src/daemon/config-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,26 @@
|
|
|
1
1
|
import type { ForgeEvent } from '../core/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Daemon-boundary input limits (audit F-medium #2, 2026-05-26).
|
|
4
|
+
*
|
|
5
|
+
* These caps protect the daemon against malicious / buggy hook payloads. They
|
|
6
|
+
* sit BELOW the socket-level `MAX_BUFFER_SIZE` (512 KB in server.ts) so that
|
|
7
|
+
* the parser rejects oversized payloads before any downstream consumer
|
|
8
|
+
* (storage / handlers / rules) has to defend itself.
|
|
9
|
+
*
|
|
10
|
+
* • `MAX_RAW_BYTES` — hard ceiling on the whole JSON envelope.
|
|
11
|
+
* • `MAX_SESSION_ID_LEN` — UUIDs are 36; Claude Code in practice emits
|
|
12
|
+
* 36-char IDs but we leave generous headroom.
|
|
13
|
+
* • `MAX_TOOL_INPUT_BYTES` — applies to the JSON-stringified tool_input.
|
|
14
|
+
* Large Edit/Write payloads are legitimate but
|
|
15
|
+
* a single hook payload over 256 KB indicates
|
|
16
|
+
* either a bug or abuse.
|
|
17
|
+
* • `MAX_PROMPT_CHARS` — caps `prompt` / `command` strings inside
|
|
18
|
+
* tool_input. Real prompts are well below this.
|
|
19
|
+
*/
|
|
20
|
+
export declare const MAX_RAW_BYTES: number;
|
|
21
|
+
export declare const MAX_SESSION_ID_LEN = 128;
|
|
22
|
+
export declare const MAX_TOOL_INPUT_BYTES: number;
|
|
23
|
+
export declare const MAX_PROMPT_CHARS: number;
|
|
2
24
|
export declare class EventParser {
|
|
3
25
|
parse(raw: string): ForgeEvent;
|
|
4
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-parser.d.ts","sourceRoot":"","sources":["../../src/daemon/event-parser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"event-parser.d.ts","sourceRoot":"","sources":["../../src/daemon/event-parser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAC;AAGpE;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,aAAa,QAAa,CAAC;AACxC,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,oBAAoB,QAAa,CAAC;AAC/C,eAAO,MAAM,gBAAgB,QAAa,CAAC;AAqB3C,qBAAa,WAAW;IACtB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU;CAgD/B"}
|
|
@@ -1,21 +1,71 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { randomUUID } from 'crypto';
|
|
3
|
+
/**
|
|
4
|
+
* Daemon-boundary input limits (audit F-medium #2, 2026-05-26).
|
|
5
|
+
*
|
|
6
|
+
* These caps protect the daemon against malicious / buggy hook payloads. They
|
|
7
|
+
* sit BELOW the socket-level `MAX_BUFFER_SIZE` (512 KB in server.ts) so that
|
|
8
|
+
* the parser rejects oversized payloads before any downstream consumer
|
|
9
|
+
* (storage / handlers / rules) has to defend itself.
|
|
10
|
+
*
|
|
11
|
+
* • `MAX_RAW_BYTES` — hard ceiling on the whole JSON envelope.
|
|
12
|
+
* • `MAX_SESSION_ID_LEN` — UUIDs are 36; Claude Code in practice emits
|
|
13
|
+
* 36-char IDs but we leave generous headroom.
|
|
14
|
+
* • `MAX_TOOL_INPUT_BYTES` — applies to the JSON-stringified tool_input.
|
|
15
|
+
* Large Edit/Write payloads are legitimate but
|
|
16
|
+
* a single hook payload over 256 KB indicates
|
|
17
|
+
* either a bug or abuse.
|
|
18
|
+
* • `MAX_PROMPT_CHARS` — caps `prompt` / `command` strings inside
|
|
19
|
+
* tool_input. Real prompts are well below this.
|
|
20
|
+
*/
|
|
21
|
+
export const MAX_RAW_BYTES = 256 * 1024; // 256 KB envelope (vs 512 KB socket buffer)
|
|
22
|
+
export const MAX_SESSION_ID_LEN = 128;
|
|
23
|
+
export const MAX_TOOL_INPUT_BYTES = 256 * 1024; // 256 KB serialized tool_input
|
|
24
|
+
export const MAX_PROMPT_CHARS = 100 * 1024; // 100 K chars for command/prompt strings
|
|
3
25
|
const RawHookEventSchema = z.object({
|
|
4
26
|
hook_type: z.enum(['PreToolUse', 'PostToolUse', 'Notification', 'Stop', 'UserPromptSubmit']),
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
27
|
+
// ISO 8601 (with optional fractional seconds + Z/offset). Hook scripts emit
|
|
28
|
+
// `date -u +"%Y-%m-%dT%H:%M:%S.000Z"` which matches.
|
|
29
|
+
timestamp: z.string().datetime({ offset: true }),
|
|
30
|
+
session_id: z.string().min(1).max(MAX_SESSION_ID_LEN),
|
|
31
|
+
project_path: z.string().min(1),
|
|
8
32
|
tool_name: z.string().optional(),
|
|
9
33
|
tool_input: z.record(z.string(), z.unknown()).optional(),
|
|
10
34
|
tool_output: z.record(z.string(), z.unknown()).optional(),
|
|
11
35
|
user_prompt: z.string().optional(),
|
|
12
36
|
ai_response: z.string().optional(),
|
|
13
37
|
event_id: z.string().uuid().optional(),
|
|
38
|
+
// In-flight only (spec 1446): Stop hook passes the session transcript path so
|
|
39
|
+
// the daemon can backfill ai_response for violation windows. NOT persisted to
|
|
40
|
+
// the events table — forwarded on the in-memory event object only.
|
|
41
|
+
transcript_path: z.string().optional(),
|
|
14
42
|
});
|
|
15
43
|
export class EventParser {
|
|
16
44
|
parse(raw) {
|
|
45
|
+
// F-medium #2: cap envelope size BEFORE JSON.parse so a malicious 500 KB
|
|
46
|
+
// payload doesn't allocate megabytes of intermediate strings.
|
|
47
|
+
if (Buffer.byteLength(raw, 'utf8') > MAX_RAW_BYTES) {
|
|
48
|
+
throw new Error(`Event payload exceeds ${MAX_RAW_BYTES} byte cap (received ${Buffer.byteLength(raw, 'utf8')} bytes)`);
|
|
49
|
+
}
|
|
17
50
|
const json = JSON.parse(raw);
|
|
18
51
|
const validated = RawHookEventSchema.parse(json);
|
|
52
|
+
// F-medium #2: size-cap tool_input AFTER schema parse — cheaper to fail
|
|
53
|
+
// here than to forward a 1 MB blob into storage.
|
|
54
|
+
if (validated.tool_input !== undefined) {
|
|
55
|
+
const serialized = JSON.stringify(validated.tool_input);
|
|
56
|
+
if (serialized.length > MAX_TOOL_INPUT_BYTES) {
|
|
57
|
+
throw new Error(`tool_input exceeds ${MAX_TOOL_INPUT_BYTES} byte cap (received ${serialized.length} bytes)`);
|
|
58
|
+
}
|
|
59
|
+
// Cap individual string fields that downstream services scan/store.
|
|
60
|
+
// We reject (not silently truncate) so the daemon doesn't accept
|
|
61
|
+
// corrupted-looking data — caller's hook script should fix the source.
|
|
62
|
+
for (const key of ['command', 'prompt', 'new_string', 'old_string', 'content']) {
|
|
63
|
+
const v = validated.tool_input[key];
|
|
64
|
+
if (typeof v === 'string' && v.length > MAX_PROMPT_CHARS) {
|
|
65
|
+
throw new Error(`tool_input.${key} exceeds ${MAX_PROMPT_CHARS} char cap (received ${v.length})`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
19
69
|
return {
|
|
20
70
|
event_id: validated.event_id ?? randomUUID(),
|
|
21
71
|
session_id: validated.session_id,
|
|
@@ -27,6 +77,7 @@ export class EventParser {
|
|
|
27
77
|
tool_output: validated.tool_output,
|
|
28
78
|
user_prompt: validated.user_prompt,
|
|
29
79
|
ai_response: validated.ai_response,
|
|
80
|
+
transcript_path: validated.transcript_path,
|
|
30
81
|
};
|
|
31
82
|
}
|
|
32
83
|
}
|