@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 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-aggregator.js","sourceRoot":"","sources":["../../../src/daemon/services/feedback-aggregator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon heartbeat writer.
|
|
3
|
+
*
|
|
4
|
+
* Writes a small JSON file to ~/.claude-forge/daemon.heartbeat every
|
|
5
|
+
* HEARTBEAT_INTERVAL_MS (60s default). The file is updated with an atomic
|
|
6
|
+
* rename so readers never see a partial write.
|
|
7
|
+
*
|
|
8
|
+
* Consumers:
|
|
9
|
+
* - `cf daemon status` — reads the file to display "Last seen Xs ago"
|
|
10
|
+
* - `cf daemon ensure-running` — compares `ts` to HEARTBEAT_STALE_MS (3min)
|
|
11
|
+
* - Web `/api/health` — surfaces heartbeat_age_ms to the frontend badge
|
|
12
|
+
*
|
|
13
|
+
* Design notes:
|
|
14
|
+
* - Uses fs.renameSync (POSIX atomic) to avoid torn reads.
|
|
15
|
+
* - On graceful shutdown, the heartbeat file is removed so
|
|
16
|
+
* `cf daemon ensure-running` treats the daemon as not running.
|
|
17
|
+
* - On macOS sleep/wake, all setInterval callbacks fire immediately after
|
|
18
|
+
* the machine wakes. The first catch-up tick refreshes the heartbeat
|
|
19
|
+
* within seconds of wake-up, which is the desired behaviour.
|
|
20
|
+
*/
|
|
21
|
+
export interface HeartbeatPayload {
|
|
22
|
+
pid: number;
|
|
23
|
+
ts: number;
|
|
24
|
+
started_at: number;
|
|
25
|
+
version: string;
|
|
26
|
+
}
|
|
27
|
+
export interface HeartbeatOptions {
|
|
28
|
+
/** Heartbeat file path (override for tests). */
|
|
29
|
+
heartbeatPath?: string;
|
|
30
|
+
/** Write interval in ms. Defaults to DEFAULTS.HEARTBEAT_INTERVAL_MS. */
|
|
31
|
+
intervalMs?: number;
|
|
32
|
+
/** daemon version string (e.g. from package.json) */
|
|
33
|
+
version: string;
|
|
34
|
+
}
|
|
35
|
+
export interface HeartbeatHandle {
|
|
36
|
+
/** Call to stop the interval and remove the heartbeat file. */
|
|
37
|
+
stop: () => void;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Start the heartbeat writer.
|
|
41
|
+
*
|
|
42
|
+
* Writes immediately, then every `intervalMs` ms.
|
|
43
|
+
* Returns a handle whose `.stop()` clears the interval and removes the file.
|
|
44
|
+
*/
|
|
45
|
+
export declare function startHeartbeat(opts: HeartbeatOptions): HeartbeatHandle;
|
|
46
|
+
/**
|
|
47
|
+
* Read the heartbeat file and return its payload, or null if absent / corrupt.
|
|
48
|
+
*/
|
|
49
|
+
export declare function readHeartbeat(heartbeatPath?: string): HeartbeatPayload | null;
|
|
50
|
+
/**
|
|
51
|
+
* Return a human-readable age string for a heartbeat timestamp.
|
|
52
|
+
* e.g. "23s ago", "5m 12s ago", "no heartbeat"
|
|
53
|
+
*/
|
|
54
|
+
export declare function formatHeartbeatAge(ts: number | null | undefined): string;
|
|
55
|
+
//# sourceMappingURL=heartbeat-writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heartbeat-writer.d.ts","sourceRoot":"","sources":["../../../src/daemon/services/heartbeat-writer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAcH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,+DAA+D;IAC/D,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,eAAe,CAmDtE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAW7E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CASxE"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon heartbeat writer.
|
|
3
|
+
*
|
|
4
|
+
* Writes a small JSON file to ~/.claude-forge/daemon.heartbeat every
|
|
5
|
+
* HEARTBEAT_INTERVAL_MS (60s default). The file is updated with an atomic
|
|
6
|
+
* rename so readers never see a partial write.
|
|
7
|
+
*
|
|
8
|
+
* Consumers:
|
|
9
|
+
* - `cf daemon status` — reads the file to display "Last seen Xs ago"
|
|
10
|
+
* - `cf daemon ensure-running` — compares `ts` to HEARTBEAT_STALE_MS (3min)
|
|
11
|
+
* - Web `/api/health` — surfaces heartbeat_age_ms to the frontend badge
|
|
12
|
+
*
|
|
13
|
+
* Design notes:
|
|
14
|
+
* - Uses fs.renameSync (POSIX atomic) to avoid torn reads.
|
|
15
|
+
* - On graceful shutdown, the heartbeat file is removed so
|
|
16
|
+
* `cf daemon ensure-running` treats the daemon as not running.
|
|
17
|
+
* - On macOS sleep/wake, all setInterval callbacks fire immediately after
|
|
18
|
+
* the machine wakes. The first catch-up tick refreshes the heartbeat
|
|
19
|
+
* within seconds of wake-up, which is the desired behaviour.
|
|
20
|
+
*/
|
|
21
|
+
import { writeFileSync, renameSync, unlinkSync, existsSync, readFileSync, mkdirSync, } from 'node:fs';
|
|
22
|
+
import { dirname } from 'node:path';
|
|
23
|
+
import { FORGE_PATHS, DEFAULTS } from '../../core/constants.js';
|
|
24
|
+
import { logger } from '../../core/utils/logger.js';
|
|
25
|
+
/**
|
|
26
|
+
* Start the heartbeat writer.
|
|
27
|
+
*
|
|
28
|
+
* Writes immediately, then every `intervalMs` ms.
|
|
29
|
+
* Returns a handle whose `.stop()` clears the interval and removes the file.
|
|
30
|
+
*/
|
|
31
|
+
export function startHeartbeat(opts) {
|
|
32
|
+
const heartbeatPath = opts.heartbeatPath ?? FORGE_PATHS.daemonHeartbeat();
|
|
33
|
+
const intervalMs = opts.intervalMs ?? DEFAULTS.HEARTBEAT_INTERVAL_MS;
|
|
34
|
+
const started_at = Date.now();
|
|
35
|
+
const write = () => {
|
|
36
|
+
try {
|
|
37
|
+
const payload = {
|
|
38
|
+
pid: process.pid,
|
|
39
|
+
ts: Date.now(),
|
|
40
|
+
started_at,
|
|
41
|
+
version: opts.version,
|
|
42
|
+
};
|
|
43
|
+
const json = JSON.stringify(payload);
|
|
44
|
+
const tmp = heartbeatPath + '.tmp';
|
|
45
|
+
// Ensure directory exists (may not exist on first run)
|
|
46
|
+
const dir = dirname(heartbeatPath);
|
|
47
|
+
if (!existsSync(dir)) {
|
|
48
|
+
mkdirSync(dir, { recursive: true });
|
|
49
|
+
}
|
|
50
|
+
writeFileSync(tmp, json, { encoding: 'utf-8', mode: 0o644 });
|
|
51
|
+
renameSync(tmp, heartbeatPath);
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
logger.warn(`[Heartbeat] write failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
// Write immediately (before first interval tick).
|
|
58
|
+
write();
|
|
59
|
+
const timer = setInterval(write, intervalMs);
|
|
60
|
+
// Allow the process to exit even if the timer is still pending.
|
|
61
|
+
timer.unref?.();
|
|
62
|
+
return {
|
|
63
|
+
stop: () => {
|
|
64
|
+
clearInterval(timer);
|
|
65
|
+
try {
|
|
66
|
+
if (existsSync(heartbeatPath)) {
|
|
67
|
+
unlinkSync(heartbeatPath);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
logger.warn(`[Heartbeat] remove failed on shutdown: ${err instanceof Error ? err.message : String(err)}`);
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Read the heartbeat file and return its payload, or null if absent / corrupt.
|
|
78
|
+
*/
|
|
79
|
+
export function readHeartbeat(heartbeatPath) {
|
|
80
|
+
const p = heartbeatPath ?? FORGE_PATHS.daemonHeartbeat();
|
|
81
|
+
if (!existsSync(p))
|
|
82
|
+
return null;
|
|
83
|
+
try {
|
|
84
|
+
const raw = readFileSync(p, 'utf-8');
|
|
85
|
+
const parsed = JSON.parse(raw);
|
|
86
|
+
if (typeof parsed.ts !== 'number')
|
|
87
|
+
return null;
|
|
88
|
+
return parsed;
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Return a human-readable age string for a heartbeat timestamp.
|
|
96
|
+
* e.g. "23s ago", "5m 12s ago", "no heartbeat"
|
|
97
|
+
*/
|
|
98
|
+
export function formatHeartbeatAge(ts) {
|
|
99
|
+
if (ts == null)
|
|
100
|
+
return 'no heartbeat';
|
|
101
|
+
const ageMs = Date.now() - ts;
|
|
102
|
+
if (ageMs < 0)
|
|
103
|
+
return 'just now';
|
|
104
|
+
const secs = Math.floor(ageMs / 1000);
|
|
105
|
+
if (secs < 60)
|
|
106
|
+
return `${secs}s ago`;
|
|
107
|
+
const mins = Math.floor(secs / 60);
|
|
108
|
+
const rem = secs % 60;
|
|
109
|
+
return `${mins}m ${rem}s ago`;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=heartbeat-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heartbeat-writer.js","sourceRoot":"","sources":["../../../src/daemon/services/heartbeat-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Idle-session sweeper (Phase 9.5 — daemon hardening).
|
|
3
|
+
*
|
|
4
|
+
* Background
|
|
5
|
+
* ----------
|
|
6
|
+
* Outcome classification normally happens in the Stop hook (see
|
|
7
|
+
* `daemon/handlers/stop.ts`). However a session can end up with `outcome IS
|
|
8
|
+
* NULL` forever in pathological scenarios:
|
|
9
|
+
* - Claude Code crashed / was force-killed before Stop fired
|
|
10
|
+
* - Synthetic UserPromptSubmit events injected by tooling that bypass the
|
|
11
|
+
* hook protocol (no matching Stop event)
|
|
12
|
+
* - Daemon was down during Stop and the event got dropped from the queue
|
|
13
|
+
*
|
|
14
|
+
* Those rows then show up in the Web UI as "in progress" forever, polluting
|
|
15
|
+
* KPIs and confusing users. The sweeper closes that loop: once a session's
|
|
16
|
+
* last activity is older than `idleThresholdMs` (default 24h), we run the
|
|
17
|
+
* existing classifier with whatever signals we have on hand (event_count +
|
|
18
|
+
* user_violation_count from the sessions row). Typical outcome is
|
|
19
|
+
* `abandoned/no_work` or `abandoned/too_short` — exactly what we want for
|
|
20
|
+
* UI surface area.
|
|
21
|
+
*
|
|
22
|
+
* Design notes
|
|
23
|
+
* ------------
|
|
24
|
+
* - **Pure I/O wrapper** over `classifyOutcome` — no new heuristic, no new
|
|
25
|
+
* thresholds. Audited behavior stays in one place (outcome-classifier).
|
|
26
|
+
* - **Race-safe**: `updateSessionOutcome` only writes when the row's outcome
|
|
27
|
+
* is still NULL (SQL `WHERE outcome IS NULL`). If a delayed Stop hook
|
|
28
|
+
* beats us to the write, we no-op.
|
|
29
|
+
* - **Defensive cap**: `maxPerSweep` (default 500) prevents runaway processing
|
|
30
|
+
* if the table has a huge backlog after a long daemon outage.
|
|
31
|
+
* - **No git lookup**: the abandoned path doesn't need commit stats. Skipping
|
|
32
|
+
* `collectCommitStats` keeps the sweep fast (no subprocess fork per row).
|
|
33
|
+
*/
|
|
34
|
+
import type { SQLiteStorage } from '../../core/storage/sqlite.js';
|
|
35
|
+
export interface SweepOptions {
|
|
36
|
+
/** Sessions whose effective last-activity is older than this are candidates. Default 24h. */
|
|
37
|
+
idleThresholdMs?: number;
|
|
38
|
+
/** Hard cap on rows processed per sweep (defensive). Default 500. */
|
|
39
|
+
maxPerSweep?: number;
|
|
40
|
+
}
|
|
41
|
+
export interface SweepResult {
|
|
42
|
+
/** Number of candidate rows the query returned (≤ maxPerSweep). */
|
|
43
|
+
scanned: number;
|
|
44
|
+
/** Number of rows we successfully UPDATEd with an outcome. */
|
|
45
|
+
swept: number;
|
|
46
|
+
/** Reserved for race / skip reasons. Currently always 0 (UPDATE is best-effort). */
|
|
47
|
+
skipped: number;
|
|
48
|
+
/** Number of rows where the update threw. Logged at warn level. */
|
|
49
|
+
errors: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Find sessions whose outcome is NULL but whose last-activity timestamp is
|
|
53
|
+
* older than `idleThresholdMs`. For each, run the existing `classifyOutcome`
|
|
54
|
+
* over the data we have (event_count / user_violation_count from the row) and
|
|
55
|
+
* stamp the result. Returns aggregate counters for logging.
|
|
56
|
+
*
|
|
57
|
+
* Idempotent — running twice in a row produces `scanned=0` on the second call
|
|
58
|
+
* because the first sweep set `outcome` to non-NULL.
|
|
59
|
+
*/
|
|
60
|
+
export declare function sweepIdleSessions(storage: SQLiteStorage, opts?: SweepOptions): SweepResult;
|
|
61
|
+
//# sourceMappingURL=idle-session-sweeper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idle-session-sweeper.d.ts","sourceRoot":"","sources":["../../../src/daemon/services/idle-session-sweeper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAGlE,MAAM,WAAW,YAAY;IAC3B,6FAA6F;IAC7F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAC;CAChB;AAKD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,aAAa,EACtB,IAAI,GAAE,YAAiB,GACtB,WAAW,CAuDb"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Idle-session sweeper (Phase 9.5 — daemon hardening).
|
|
3
|
+
*
|
|
4
|
+
* Background
|
|
5
|
+
* ----------
|
|
6
|
+
* Outcome classification normally happens in the Stop hook (see
|
|
7
|
+
* `daemon/handlers/stop.ts`). However a session can end up with `outcome IS
|
|
8
|
+
* NULL` forever in pathological scenarios:
|
|
9
|
+
* - Claude Code crashed / was force-killed before Stop fired
|
|
10
|
+
* - Synthetic UserPromptSubmit events injected by tooling that bypass the
|
|
11
|
+
* hook protocol (no matching Stop event)
|
|
12
|
+
* - Daemon was down during Stop and the event got dropped from the queue
|
|
13
|
+
*
|
|
14
|
+
* Those rows then show up in the Web UI as "in progress" forever, polluting
|
|
15
|
+
* KPIs and confusing users. The sweeper closes that loop: once a session's
|
|
16
|
+
* last activity is older than `idleThresholdMs` (default 24h), we run the
|
|
17
|
+
* existing classifier with whatever signals we have on hand (event_count +
|
|
18
|
+
* user_violation_count from the sessions row). Typical outcome is
|
|
19
|
+
* `abandoned/no_work` or `abandoned/too_short` — exactly what we want for
|
|
20
|
+
* UI surface area.
|
|
21
|
+
*
|
|
22
|
+
* Design notes
|
|
23
|
+
* ------------
|
|
24
|
+
* - **Pure I/O wrapper** over `classifyOutcome` — no new heuristic, no new
|
|
25
|
+
* thresholds. Audited behavior stays in one place (outcome-classifier).
|
|
26
|
+
* - **Race-safe**: `updateSessionOutcome` only writes when the row's outcome
|
|
27
|
+
* is still NULL (SQL `WHERE outcome IS NULL`). If a delayed Stop hook
|
|
28
|
+
* beats us to the write, we no-op.
|
|
29
|
+
* - **Defensive cap**: `maxPerSweep` (default 500) prevents runaway processing
|
|
30
|
+
* if the table has a huge backlog after a long daemon outage.
|
|
31
|
+
* - **No git lookup**: the abandoned path doesn't need commit stats. Skipping
|
|
32
|
+
* `collectCommitStats` keeps the sweep fast (no subprocess fork per row).
|
|
33
|
+
*/
|
|
34
|
+
import { logger } from '../../core/utils/logger.js';
|
|
35
|
+
import { classifyOutcome } from './outcome-classifier.js';
|
|
36
|
+
const DEFAULT_IDLE_MS = 24 * 60 * 60 * 1000;
|
|
37
|
+
const DEFAULT_MAX_PER_SWEEP = 500;
|
|
38
|
+
/**
|
|
39
|
+
* Find sessions whose outcome is NULL but whose last-activity timestamp is
|
|
40
|
+
* older than `idleThresholdMs`. For each, run the existing `classifyOutcome`
|
|
41
|
+
* over the data we have (event_count / user_violation_count from the row) and
|
|
42
|
+
* stamp the result. Returns aggregate counters for logging.
|
|
43
|
+
*
|
|
44
|
+
* Idempotent — running twice in a row produces `scanned=0` on the second call
|
|
45
|
+
* because the first sweep set `outcome` to non-NULL.
|
|
46
|
+
*/
|
|
47
|
+
export function sweepIdleSessions(storage, opts = {}) {
|
|
48
|
+
const idleMs = opts.idleThresholdMs ?? DEFAULT_IDLE_MS;
|
|
49
|
+
const maxRows = opts.maxPerSweep ?? DEFAULT_MAX_PER_SWEEP;
|
|
50
|
+
const cutoff = new Date(Date.now() - idleMs).toISOString();
|
|
51
|
+
const idleHours = Math.round(idleMs / (60 * 60 * 1000));
|
|
52
|
+
let candidates = [];
|
|
53
|
+
try {
|
|
54
|
+
candidates = storage.queryIdleUnclassifiedSessions(cutoff, maxRows);
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
logger.warn(`[IdleSweeper] query failed: ${err}`);
|
|
58
|
+
return { scanned: 0, swept: 0, skipped: 0, errors: 1 };
|
|
59
|
+
}
|
|
60
|
+
let swept = 0;
|
|
61
|
+
let errors = 0;
|
|
62
|
+
const classifiedAt = new Date().toISOString();
|
|
63
|
+
for (const sess of candidates) {
|
|
64
|
+
try {
|
|
65
|
+
// Build the classifier input from what the sessions row gives us.
|
|
66
|
+
// Missing signals (commit_count, reverted_commits) default to 0 — these
|
|
67
|
+
// idle/abandoned sessions almost never have git work attributed to them
|
|
68
|
+
// and we deliberately skip the subprocess fork.
|
|
69
|
+
const endTime = sess.last_event_time ?? sess.start_time;
|
|
70
|
+
const result = classifyOutcome({
|
|
71
|
+
session_id: sess.session_id,
|
|
72
|
+
start_time: sess.start_time,
|
|
73
|
+
end_time: endTime,
|
|
74
|
+
event_count: sess.event_count ?? 0,
|
|
75
|
+
violation_count: sess.user_violation_count ?? 0,
|
|
76
|
+
commit_count: 0,
|
|
77
|
+
reverted_commits: 0,
|
|
78
|
+
});
|
|
79
|
+
const annotatedReason = `${result.reason} (idle-swept after ${idleHours}h)`;
|
|
80
|
+
storage.updateSessionOutcome(sess.session_id, {
|
|
81
|
+
outcome: result.outcome,
|
|
82
|
+
outcome_reason: annotatedReason,
|
|
83
|
+
classified_at: classifiedAt,
|
|
84
|
+
});
|
|
85
|
+
swept++;
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
logger.warn(`[IdleSweeper] failed for ${sess.session_id}: ${err}`);
|
|
89
|
+
errors++;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return { scanned: candidates.length, swept, skipped: 0, errors };
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=idle-session-sweeper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idle-session-sweeper.js","sourceRoot":"","sources":["../../../src/daemon/services/idle-session-sweeper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAoB1D,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAC5C,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAElC;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAsB,EACtB,OAAqB,EAAE;IAEvB,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,IAAI,qBAAqB,CAAC;IAC1D,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IAExD,IAAI,UAAU,GAMT,EAAE,CAAC;IACR,IAAI,CAAC;QACH,UAAU,GAAG,OAAO,CAAC,6BAA6B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAC;QAClD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACzD,CAAC;IAED,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE9C,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,kEAAkE;YAClE,wEAAwE;YACxE,wEAAwE;YACxE,gDAAgD;YAChD,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,UAAU,CAAC;YACxD,MAAM,MAAM,GAAG,eAAe,CAAC;gBAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,QAAQ,EAAE,OAAO;gBACjB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC;gBAClC,eAAe,EAAE,IAAI,CAAC,oBAAoB,IAAI,CAAC;gBAC/C,YAAY,EAAE,CAAC;gBACf,gBAAgB,EAAE,CAAC;aACpB,CAAC,CAAC;YAEH,MAAM,eAAe,GAAG,GAAG,MAAM,CAAC,MAAM,sBAAsB,SAAS,IAAI,CAAC;YAC5E,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,EAAE;gBAC5C,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,cAAc,EAAE,eAAe;gBAC/B,aAAa,EAAE,YAAY;aAC5B,CAAC,CAAC;YACH,KAAK,EAAE,CAAC;QACV,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC,CAAC;YACnE,MAAM,EAAE,CAAC;QACX,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IdleTaskBudget — Stop-time gate for idle-task outcome classification.
|
|
3
|
+
*
|
|
4
|
+
* Background (audit F-medium #3, 2026-05-26):
|
|
5
|
+
* OutcomeClassificationService.classifyIdleTasks spawns one
|
|
6
|
+
* `git log` subprocess per unclassified task, capped internally at
|
|
7
|
+
* `MAX_IDLE_TASKS_PER_RUN = 20`. The calls run *sequentially* (no
|
|
8
|
+
* concurrency primitive), so a backlog of 20 tasks can stack ~20 git I/O
|
|
9
|
+
* round-trips into the Stop fire-and-forget queue. On a busy machine the
|
|
10
|
+
* queue piles up and Stop handling for the *next* session starts behind
|
|
11
|
+
* the previous session's tail.
|
|
12
|
+
*
|
|
13
|
+
* Fix (stop.ts orchestrator scope):
|
|
14
|
+
* Peek the backlog before invoking classifyIdleTasks. When the queue is
|
|
15
|
+
* small (<= IDLE_TASK_CLASSIFY_LIMIT) we run as before so steady-state
|
|
16
|
+
* sessions still get backfill. When the backlog is large we skip the
|
|
17
|
+
* call entirely — degraded UX is acceptable because:
|
|
18
|
+
*
|
|
19
|
+
* 1. The tasks stay in `outcome=NULL` and will be picked up by the next
|
|
20
|
+
* Stop of the same session (when the backlog has presumably been
|
|
21
|
+
* worked off by intervening Stops), and
|
|
22
|
+
* 2. Skipping is preferable to blocking 20 sequential git subprocesses
|
|
23
|
+
* on the fire-and-forget queue when the user just wants to move on.
|
|
24
|
+
*
|
|
25
|
+
* This is the "skip when N > limit" strategy called out in the original
|
|
26
|
+
* review. A true concurrency limiter is the cleaner long-term fix; that
|
|
27
|
+
* change belongs inside `outcome-classification-service.ts` and is out of
|
|
28
|
+
* scope for this audit pass (constraints forbid modifying that file).
|
|
29
|
+
*/
|
|
30
|
+
import type { SQLiteStorage } from '../../core/storage/sqlite.js';
|
|
31
|
+
/**
|
|
32
|
+
* Maximum backlog size we'll attempt to classify on a single Stop. Tuned so
|
|
33
|
+
* the sequential `git log` subprocess fan-out stays bounded (each `git log`
|
|
34
|
+
* is ~100ms; 5x = ~500ms total Stop-tail). When the backlog exceeds this
|
|
35
|
+
* we skip and let a future Stop pick it up.
|
|
36
|
+
*/
|
|
37
|
+
export declare const IDLE_TASK_CLASSIFY_LIMIT = 5;
|
|
38
|
+
/**
|
|
39
|
+
* Decide whether the orchestrator should call
|
|
40
|
+
* `OutcomeClassificationService.classifyIdleTasks` for the given session.
|
|
41
|
+
*
|
|
42
|
+
* Returns true when the backlog is small enough that classification will
|
|
43
|
+
* complete in a bounded time. Returns false when the backlog is too large;
|
|
44
|
+
* the caller skips the call entirely (logged at info level).
|
|
45
|
+
*
|
|
46
|
+
* Failure mode: never throws. On storage error returns false (the safer
|
|
47
|
+
* choice — skip rather than fan out unbounded).
|
|
48
|
+
*/
|
|
49
|
+
export declare function shouldClassifyIdleTasks(storage: SQLiteStorage, sessionId: string): boolean;
|
|
50
|
+
//# sourceMappingURL=idle-task-budget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idle-task-budget.d.ts","sourceRoot":"","sources":["../../../src/daemon/services/idle-task-budget.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAKlE;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAqBT"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IdleTaskBudget — Stop-time gate for idle-task outcome classification.
|
|
3
|
+
*
|
|
4
|
+
* Background (audit F-medium #3, 2026-05-26):
|
|
5
|
+
* OutcomeClassificationService.classifyIdleTasks spawns one
|
|
6
|
+
* `git log` subprocess per unclassified task, capped internally at
|
|
7
|
+
* `MAX_IDLE_TASKS_PER_RUN = 20`. The calls run *sequentially* (no
|
|
8
|
+
* concurrency primitive), so a backlog of 20 tasks can stack ~20 git I/O
|
|
9
|
+
* round-trips into the Stop fire-and-forget queue. On a busy machine the
|
|
10
|
+
* queue piles up and Stop handling for the *next* session starts behind
|
|
11
|
+
* the previous session's tail.
|
|
12
|
+
*
|
|
13
|
+
* Fix (stop.ts orchestrator scope):
|
|
14
|
+
* Peek the backlog before invoking classifyIdleTasks. When the queue is
|
|
15
|
+
* small (<= IDLE_TASK_CLASSIFY_LIMIT) we run as before so steady-state
|
|
16
|
+
* sessions still get backfill. When the backlog is large we skip the
|
|
17
|
+
* call entirely — degraded UX is acceptable because:
|
|
18
|
+
*
|
|
19
|
+
* 1. The tasks stay in `outcome=NULL` and will be picked up by the next
|
|
20
|
+
* Stop of the same session (when the backlog has presumably been
|
|
21
|
+
* worked off by intervening Stops), and
|
|
22
|
+
* 2. Skipping is preferable to blocking 20 sequential git subprocesses
|
|
23
|
+
* on the fire-and-forget queue when the user just wants to move on.
|
|
24
|
+
*
|
|
25
|
+
* This is the "skip when N > limit" strategy called out in the original
|
|
26
|
+
* review. A true concurrency limiter is the cleaner long-term fix; that
|
|
27
|
+
* change belongs inside `outcome-classification-service.ts` and is out of
|
|
28
|
+
* scope for this audit pass (constraints forbid modifying that file).
|
|
29
|
+
*/
|
|
30
|
+
import { logger } from '../../core/utils/logger.js';
|
|
31
|
+
import { truncateSessionId } from '../../core/utils/session.js';
|
|
32
|
+
import { formatError } from '../../core/utils/format.js';
|
|
33
|
+
/**
|
|
34
|
+
* Maximum backlog size we'll attempt to classify on a single Stop. Tuned so
|
|
35
|
+
* the sequential `git log` subprocess fan-out stays bounded (each `git log`
|
|
36
|
+
* is ~100ms; 5x = ~500ms total Stop-tail). When the backlog exceeds this
|
|
37
|
+
* we skip and let a future Stop pick it up.
|
|
38
|
+
*/
|
|
39
|
+
export const IDLE_TASK_CLASSIFY_LIMIT = 5;
|
|
40
|
+
/**
|
|
41
|
+
* Decide whether the orchestrator should call
|
|
42
|
+
* `OutcomeClassificationService.classifyIdleTasks` for the given session.
|
|
43
|
+
*
|
|
44
|
+
* Returns true when the backlog is small enough that classification will
|
|
45
|
+
* complete in a bounded time. Returns false when the backlog is too large;
|
|
46
|
+
* the caller skips the call entirely (logged at info level).
|
|
47
|
+
*
|
|
48
|
+
* Failure mode: never throws. On storage error returns false (the safer
|
|
49
|
+
* choice — skip rather than fan out unbounded).
|
|
50
|
+
*/
|
|
51
|
+
export function shouldClassifyIdleTasks(storage, sessionId) {
|
|
52
|
+
try {
|
|
53
|
+
const backlog = storage.queryIdleUnclassifiedTasks(sessionId);
|
|
54
|
+
if (backlog.length === 0) {
|
|
55
|
+
// Nothing to classify; the service would no-op anyway, but
|
|
56
|
+
// short-circuit here so the orchestrator log line is clearer.
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
if (backlog.length > IDLE_TASK_CLASSIFY_LIMIT) {
|
|
60
|
+
logger.info(`[Stop] Skipping idle-task classification for session ` +
|
|
61
|
+
`${truncateSessionId(sessionId)} — backlog ${backlog.length} > ` +
|
|
62
|
+
`${IDLE_TASK_CLASSIFY_LIMIT} (will retry on next Stop)`);
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
logger.debug(`[Stop] idle-task budget check failed: ${formatError(err)}`);
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=idle-task-budget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idle-task-budget.js","sourceRoot":"","sources":["../../../src/daemon/services/idle-task-budget.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAE1C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAsB,EACtB,SAAiB;IAEjB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,OAAO,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC;QAC9D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,2DAA2D;YAC3D,8DAA8D;YAC9D,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,wBAAwB,EAAE,CAAC;YAC9C,MAAM,CAAC,IAAI,CACT,uDAAuD;gBACrD,GAAG,iBAAiB,CAAC,SAAS,CAAC,cAAc,OAAO,CAAC,MAAM,KAAK;gBAChE,GAAG,wBAAwB,4BAA4B,CAC1D,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,yCAAyC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1E,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* InterceptRevive — 8-in-1 Phase D (2026-05-27)
|
|
3
|
+
*
|
|
4
|
+
* Closes the loop with `InterceptRollbackGuard`:
|
|
5
|
+
*
|
|
6
|
+
* • `InterceptRollbackGuard` flips `pre_tool_intercept.enabled=false` and
|
|
7
|
+
* writes `auto_disabled_at` + `auto_disabled_session` audit keys when a
|
|
8
|
+
* session triggers ≥3 denies in 60s. Reason: protect the user from a
|
|
9
|
+
* mis-tuned rule cascade.
|
|
10
|
+
*
|
|
11
|
+
* • Without revive: that flag stays `false` forever. The user has to
|
|
12
|
+
* `cf config set pre_tool_intercept.enabled true` by hand. In practice
|
|
13
|
+
* (per the spec's problem statement) the user never remembers.
|
|
14
|
+
*
|
|
15
|
+
* • Revive: on every daemon startup, check if the flag is `false` AND the
|
|
16
|
+
* `auto_disabled_at` audit key is present AND > 24h has passed. If yes,
|
|
17
|
+
* flip the flag back to `true` and delete the audit keys (clean slate
|
|
18
|
+
* for the next rollback to land).
|
|
19
|
+
*
|
|
20
|
+
* • Hysteresis: 24h is the spec default (`hysteresisHours: 24`). Skips the
|
|
21
|
+
* revive when the disable is fresh — gives the user a debugging window
|
|
22
|
+
* to investigate WHY the rollback fired.
|
|
23
|
+
*
|
|
24
|
+
* • User intent preservation: this service ONLY revives auto-disables.
|
|
25
|
+
* If the user manually ran `cf config set pre_tool_intercept.enabled false`,
|
|
26
|
+
* no `auto_disabled_at` key was written (that's set ONLY by
|
|
27
|
+
* `InterceptRollbackGuard.checkAndMaybeRollback`). The revive sees the
|
|
28
|
+
* missing key and does nothing — user wishes respected.
|
|
29
|
+
*
|
|
30
|
+
* Called once from `src/daemon/index.ts` after `seedDefaults()`. All errors
|
|
31
|
+
* are caught and logged at WARN level — revive must never throw and break
|
|
32
|
+
* daemon boot.
|
|
33
|
+
*/
|
|
34
|
+
import type { ConfigStore } from '../config-store.js';
|
|
35
|
+
export declare const DEFAULT_HYSTERESIS_HOURS = 24;
|
|
36
|
+
export interface ReviveOutcome {
|
|
37
|
+
/** True if the flag was flipped back to 'true' on this call. */
|
|
38
|
+
revived: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Human-readable reason recorded in the daemon log on each call. Stays
|
|
41
|
+
* non-null even when `revived === false` so the test suite can lock down
|
|
42
|
+
* the decision path.
|
|
43
|
+
*/
|
|
44
|
+
reason: string;
|
|
45
|
+
}
|
|
46
|
+
export interface ReviveOptions {
|
|
47
|
+
/** Hours that must have elapsed since auto-disable before revive fires. */
|
|
48
|
+
hysteresisHours?: number;
|
|
49
|
+
/** Inject `now` for tests; defaults to `new Date()`. */
|
|
50
|
+
nowProvider?: () => Date;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Decide whether to revive `pre_tool_intercept.enabled=true` after a stale
|
|
54
|
+
* rollback. Pure: takes ConfigStore + options and returns ReviveOutcome.
|
|
55
|
+
*
|
|
56
|
+
* Safe to call repeatedly; subsequent calls after a successful revive are
|
|
57
|
+
* no-ops (the flag is now `true`).
|
|
58
|
+
*/
|
|
59
|
+
export declare function reviveInterceptIfStale(configStore: ConfigStore, opts?: ReviveOptions): ReviveOutcome;
|
|
60
|
+
//# sourceMappingURL=intercept-revive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intercept-revive.d.ts","sourceRoot":"","sources":["../../../src/daemon/services/intercept-revive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAQtD,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC5B,gEAAgE;IAChE,OAAO,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,WAAW,EACxB,IAAI,GAAE,aAAkB,GACvB,aAAa,CA8Cf"}
|