@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-parser.js","sourceRoot":"","sources":["../../src/daemon/event-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC5F,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"event-parser.js","sourceRoot":"","sources":["../../src/daemon/event-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history-exporter.d.ts","sourceRoot":"","sources":["../../../src/daemon/handlers/history-exporter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAKlE,qBAAa,eAAe;IACd,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,aAAa;IAEpC,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"history-exporter.d.ts","sourceRoot":"","sources":["../../../src/daemon/handlers/history-exporter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAKlE,qBAAa,eAAe;IACd,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,aAAa;IAEpC,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B9C,OAAO,CAAC,aAAa;CAoEtB"}
|
|
@@ -8,7 +8,7 @@ import fs from 'node:fs';
|
|
|
8
8
|
import path from 'node:path';
|
|
9
9
|
import { logger } from '../../core/utils/logger.js';
|
|
10
10
|
import { truncateSessionId } from '../../core/utils/session.js';
|
|
11
|
-
import {
|
|
11
|
+
import { formatLocalDisplay, formatLocalDateForFilename } from '../../core/utils/time.js';
|
|
12
12
|
export class HistoryExporter {
|
|
13
13
|
storage;
|
|
14
14
|
constructor(storage) {
|
|
@@ -29,8 +29,7 @@ export class HistoryExporter {
|
|
|
29
29
|
});
|
|
30
30
|
if (events.length === 0)
|
|
31
31
|
return;
|
|
32
|
-
const
|
|
33
|
-
const dateStr = now.toISOString().slice(0, 10);
|
|
32
|
+
const dateStr = formatLocalDateForFilename(event.timestamp);
|
|
34
33
|
const shortSession = truncateSessionId(session_id);
|
|
35
34
|
const filePath = path.join(historyDir, `${dateStr}-${shortSession}.md`);
|
|
36
35
|
const content = this.buildMarkdown(events, session_id, project_path);
|
|
@@ -43,8 +42,10 @@ export class HistoryExporter {
|
|
|
43
42
|
}
|
|
44
43
|
buildMarkdown(events, sessionId, projectPath) {
|
|
45
44
|
const lines = [];
|
|
46
|
-
const
|
|
47
|
-
const
|
|
45
|
+
const startRaw = events[0]?.timestamp ?? new Date().toISOString();
|
|
46
|
+
const endRaw = events[events.length - 1]?.timestamp ?? startRaw;
|
|
47
|
+
const startTime = formatLocalDisplay(startRaw, { tzSuffix: 'CST' });
|
|
48
|
+
const endTime = formatLocalDisplay(endRaw, { tzSuffix: 'CST' });
|
|
48
49
|
lines.push(`# 会话记录 ${truncateSessionId(sessionId)}`);
|
|
49
50
|
lines.push('');
|
|
50
51
|
lines.push(`- **时间**: ${startTime} → ${endTime}`);
|
|
@@ -57,7 +58,7 @@ export class HistoryExporter {
|
|
|
57
58
|
lines.push('## 用户指令');
|
|
58
59
|
lines.push('');
|
|
59
60
|
for (const p of prompts) {
|
|
60
|
-
const time =
|
|
61
|
+
const time = formatLocalDisplay(p.timestamp, { tzSuffix: '' });
|
|
61
62
|
const text = p.user_prompt.slice(0, 200);
|
|
62
63
|
lines.push(`- **${time}**: ${text}`);
|
|
63
64
|
}
|
|
@@ -79,7 +80,7 @@ export class HistoryExporter {
|
|
|
79
80
|
lines.push('### 时间线');
|
|
80
81
|
lines.push('');
|
|
81
82
|
for (const t of toolCalls.slice(-30)) {
|
|
82
|
-
const time =
|
|
83
|
+
const time = formatLocalDisplay(t.timestamp, { tzSuffix: '' });
|
|
83
84
|
const input = t.tool_input;
|
|
84
85
|
const filePath = input?.file_path ?? input?.command ?? '';
|
|
85
86
|
const summary = typeof filePath === 'string' ? filePath.slice(0, 80) : '';
|
|
@@ -88,7 +89,7 @@ export class HistoryExporter {
|
|
|
88
89
|
lines.push('');
|
|
89
90
|
}
|
|
90
91
|
lines.push('---');
|
|
91
|
-
lines.push(`_生成时间: ${
|
|
92
|
+
lines.push(`_生成时间: ${formatLocalDisplay(Date.now())}_`);
|
|
92
93
|
lines.push('');
|
|
93
94
|
return lines.join('\n');
|
|
94
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history-exporter.js","sourceRoot":"","sources":["../../../src/daemon/handlers/history-exporter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"history-exporter.js","sourceRoot":"","sources":["../../../src/daemon/handlers/history-exporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,77 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* PostToolUseHandler — handles PostToolUse hook
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* Also observes Agent tool calls to update routing_events.
|
|
4
|
+
* Observes Agent tool calls to update routing_events.
|
|
6
5
|
*/
|
|
7
6
|
import type { PostToolUseEvent, HookResult } from '../../core/types.js';
|
|
8
7
|
import type { SQLiteStorage } from '../../core/storage/sqlite.js';
|
|
8
|
+
import type { ConfigStore } from '../config-store.js';
|
|
9
|
+
/** Phase 6 feature flag — default OFF. */
|
|
10
|
+
export declare const AGENT_WRITEBACK_FLAG = "agent_writeback.enabled";
|
|
9
11
|
export declare class PostToolUseHandler {
|
|
10
12
|
private storage;
|
|
11
|
-
private
|
|
12
|
-
constructor(storage?: SQLiteStorage | null);
|
|
13
|
+
private configStore;
|
|
14
|
+
constructor(storage?: SQLiteStorage | null, configStore?: ConfigStore | null);
|
|
13
15
|
handle(event: PostToolUseEvent): Promise<HookResult>;
|
|
16
|
+
/**
|
|
17
|
+
* LOOP HINT adoption back-fill (decision e7d13697, Option C). When the main
|
|
18
|
+
* thread (or an agent) actually runs `cf loop run` in this session, stamp
|
|
19
|
+
* every not-yet-stamped `[LOOP HINT]` injection row of the session with
|
|
20
|
+
* `adopted_at = now`. This is the write side of the "建议的 loop 被采纳没"
|
|
21
|
+
* telemetry — the OQ5 hard requirement that lets us later judge
|
|
22
|
+
* keep-vs-remove. Read side is a single SQL (countLoopHintAdoption).
|
|
23
|
+
*
|
|
24
|
+
* The daemon is ONLY observing here — it never launches `cf loop run` itself
|
|
25
|
+
* (advisory-only invariant). Silently swallows errors — observability,
|
|
26
|
+
* never a blocker.
|
|
27
|
+
*/
|
|
28
|
+
private maybeMarkLoopHintAdoption;
|
|
29
|
+
/**
|
|
30
|
+
* KB adoption back-fill (decision 148f7a0a). When the main thread (or an
|
|
31
|
+
* agent in the same session) actively calls a KB MCP tool
|
|
32
|
+
* (`mcp__claude-forge__knowledge*`), stamp every not-yet-stamped KB
|
|
33
|
+
* injection row of this session with `adopted_at = now`. This is the
|
|
34
|
+
* write side of the "注入的 KB 被用了没" telemetry — read side is a single
|
|
35
|
+
* SQL over injections (adopted/total, source_handler LIKE '%:kb').
|
|
36
|
+
*
|
|
37
|
+
* Silently swallows errors — telemetry is observability, never a blocker.
|
|
38
|
+
*/
|
|
39
|
+
private maybeMarkKbAdoption;
|
|
40
|
+
/**
|
|
41
|
+
* audit F4 back-fill (KPI relax: dry_run also back-filled). Pipeline:
|
|
42
|
+
* 1. Query last 30s of `deny` + `dry_run` intercepts for this session.
|
|
43
|
+
* dry_run rows are the "would-have-been-denied" rehearsal that fires
|
|
44
|
+
* when `pre_tool_intercept.enabled=false`. Including them lets C4
|
|
45
|
+
* compute a meaningful obeyed-ratio BEFORE the flag is flipped on —
|
|
46
|
+
* otherwise C4 stays 0 forever in dry_run mode.
|
|
47
|
+
* 2. If any candidate matches `event.tool_name` → the main loop re-invoked
|
|
48
|
+
* the SAME tool despite the deny/dry_run hint → mark 'override'.
|
|
49
|
+
* 3. Else, the main loop switched tools (most commonly Bash deny → Read /
|
|
50
|
+
* Grep / Agent) → mark all candidates 'obeyed'.
|
|
51
|
+
*
|
|
52
|
+
* For dry_run rows specifically the verdict is a *pseudo-outcome* — the
|
|
53
|
+
* rule didn't actually enforce anything, but the main loop's reaction in
|
|
54
|
+
* the same 30s window still proxies "would they have obeyed?". UI surfaces
|
|
55
|
+
* this distinction in the C4 tooltip; the SQL aggregation treats both the
|
|
56
|
+
* same.
|
|
57
|
+
*
|
|
58
|
+
* Silently swallows errors — back-fill is observability, never a blocker.
|
|
59
|
+
* Multiple candidates within the window all get the same verdict; that's
|
|
60
|
+
* acceptable because the AI's reaction is a single response either way.
|
|
61
|
+
*/
|
|
62
|
+
private maybeMarkInterceptOutcome;
|
|
63
|
+
/**
|
|
64
|
+
* Phase 6 writeback. Pipeline:
|
|
65
|
+
* 1. Flag gate (`agent_writeback.enabled`). Default OFF → silent skip.
|
|
66
|
+
* 2. Path filter — only changelog paths under `docs/implementation/`
|
|
67
|
+
* (matches both the legacy `*-changelog-*.md` and the post-2026-05-26
|
|
68
|
+
* datedir layout `YYYY-MM-DD/HHMM-*-changelog.md`).
|
|
69
|
+
* 3. Run `extractExperience` on the resolved absolute path.
|
|
70
|
+
* 4. Append each extracted entry to `<projectRoot>/.forge-knowledge/
|
|
71
|
+
* agents-experience/<topic>.md`.
|
|
72
|
+
*
|
|
73
|
+
* All errors are swallowed (warn-level log) — writeback is best-effort.
|
|
74
|
+
*/
|
|
75
|
+
private maybeWriteExperience;
|
|
14
76
|
}
|
|
15
77
|
//# sourceMappingURL=post-tool-use.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-tool-use.d.ts","sourceRoot":"","sources":["../../../src/daemon/handlers/post-tool-use.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"post-tool-use.d.ts","sourceRoot":"","sources":["../../../src/daemon/handlers/post-tool-use.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA4BtD,0CAA0C;AAC1C,eAAO,MAAM,oBAAoB,4BAA4B,CAAC;AAa9D,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,WAAW;gBADX,OAAO,GAAE,aAAa,GAAG,IAAW,EACpC,WAAW,GAAE,WAAW,GAAG,IAAW;IAG1C,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IAqD1D;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,yBAAyB;IAmBjC;;;;;;;;;OASG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,OAAO,CAAC,yBAAyB;IA4BjC;;;;;;;;;;;OAWG;YACW,oBAAoB;CAoCnC"}
|
|
@@ -1,20 +1,51 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* PostToolUseHandler — handles PostToolUse hook
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* Also observes Agent tool calls to update routing_events.
|
|
4
|
+
* Observes Agent tool calls to update routing_events.
|
|
6
5
|
*/
|
|
6
|
+
import path from 'node:path';
|
|
7
7
|
import { logger } from '../../core/utils/logger.js';
|
|
8
|
-
import { TokenTracker } from '../../core/utils/token-tracker.js';
|
|
9
8
|
import { getSubagentType } from '../../core/event-fields.js';
|
|
9
|
+
import { appendToExperienceFile, extractExperience, } from '../../core/insights/experience-extractor.js';
|
|
10
|
+
/**
|
|
11
|
+
* audit F4: window (ms) within which a PostToolUse may back-fill the outcome
|
|
12
|
+
* of a prior PreToolUse `deny`. 30s matches a typical "agent retries with the
|
|
13
|
+
* hinted approach" reaction time without overlapping into the next prompt.
|
|
14
|
+
*/
|
|
15
|
+
const INTERCEPT_OUTCOME_WINDOW_MS = 30 * 1000;
|
|
16
|
+
/**
|
|
17
|
+
* KB 采纳 telemetry(decision 148f7a0a):以该前缀开头的 tool_name 视为
|
|
18
|
+
* 「主动 KB 调用」,触发同会话 KB 注入行的 adopted_at 盖章。覆盖
|
|
19
|
+
* mcp__claude-forge__knowledge_query / knowledge_fetch 等全部 KB MCP 工具。
|
|
20
|
+
*/
|
|
21
|
+
const KB_MCP_TOOL_PREFIX = 'mcp__claude-forge__knowledge';
|
|
22
|
+
/**
|
|
23
|
+
* LOOP HINT 采纳 telemetry(decision e7d13697, Option C):本会话实际运行
|
|
24
|
+
* `cf loop run` = 主线程采纳了先前 mint 的 `[LOOP HINT]` 建议。观察 Bash 工具
|
|
25
|
+
* 调用、命令含 `loop run` 时盖章同会话的 loop-hint 注入行(镜像 KB 采纳)。
|
|
26
|
+
* `cf loop run` / `loop run --interactive` / 自定义 cf 别名都命中(不强求 `cf`
|
|
27
|
+
* 前缀,避免漏判)。
|
|
28
|
+
*/
|
|
29
|
+
const LOOP_RUN_COMMAND_RE = /\bloop\s+run\b/;
|
|
30
|
+
/** Phase 6 feature flag — default OFF. */
|
|
31
|
+
export const AGENT_WRITEBACK_FLAG = 'agent_writeback.enabled';
|
|
32
|
+
/**
|
|
33
|
+
* Match any changelog path under `docs/implementation/`.
|
|
34
|
+
*
|
|
35
|
+
* Two layouts supported (the 2026-05-26 naming refactor introduced the second):
|
|
36
|
+
* • legacy flat: docs/implementation/<stem>-changelog-<ts>.md
|
|
37
|
+
* • new datedir: docs/implementation/YYYY-MM-DD/HHMM-<stem>-changelog.md
|
|
38
|
+
*
|
|
39
|
+
* The `.*changelog.*` middle portion is intentionally loose (any path under
|
|
40
|
+
* `docs/implementation/` that has the word `changelog` in the basename).
|
|
41
|
+
*/
|
|
42
|
+
const CHANGELOG_PATH_PATTERN = /docs\/implementation\/.*changelog[^/]*\.md$/;
|
|
10
43
|
export class PostToolUseHandler {
|
|
11
44
|
storage;
|
|
12
|
-
|
|
13
|
-
constructor(storage = null) {
|
|
45
|
+
configStore;
|
|
46
|
+
constructor(storage = null, configStore = null) {
|
|
14
47
|
this.storage = storage;
|
|
15
|
-
|
|
16
|
-
this.tokenTracker = new TokenTracker(storage);
|
|
17
|
-
}
|
|
48
|
+
this.configStore = configStore;
|
|
18
49
|
}
|
|
19
50
|
async handle(event) {
|
|
20
51
|
// Observe Agent tool calls and update routing_events
|
|
@@ -42,7 +73,189 @@ export class PostToolUseHandler {
|
|
|
42
73
|
logger.debug(`[PostToolUse] Failed to update routing_event: ${err}`);
|
|
43
74
|
}
|
|
44
75
|
}
|
|
76
|
+
// Phase 6: agent-experience writeback on changelog Write/Edit.
|
|
77
|
+
// Fire-and-forget — writeback is observability, never a request-blocker.
|
|
78
|
+
if (event.tool_name === 'Write' || event.tool_name === 'Edit') {
|
|
79
|
+
void this.maybeWriteExperience(event);
|
|
80
|
+
}
|
|
81
|
+
// audit F4: back-fill outcome on any prior 'deny' intercept for this tool.
|
|
82
|
+
if (this.storage) {
|
|
83
|
+
this.maybeMarkInterceptOutcome(event);
|
|
84
|
+
}
|
|
85
|
+
// KB 采纳 telemetry(decision 148f7a0a):主动 KB MCP 调用 = 本会话先前
|
|
86
|
+
// 注入的 KB 被「采纳」的代理信号。盖章同会话所有未标记的 ':kb' 注入行。
|
|
87
|
+
if (this.storage && event.tool_name.startsWith(KB_MCP_TOOL_PREFIX)) {
|
|
88
|
+
this.maybeMarkKbAdoption(event);
|
|
89
|
+
}
|
|
90
|
+
// LOOP HINT 采纳 telemetry(decision e7d13697):本会话实际 `cf loop run`
|
|
91
|
+
// = 采纳了先前 mint 的 `[LOOP HINT]` 建议。盖章同会话未标记的 loop-hint 行。
|
|
92
|
+
if (this.storage && event.tool_name === 'Bash') {
|
|
93
|
+
this.maybeMarkLoopHintAdoption(event);
|
|
94
|
+
}
|
|
45
95
|
return { allow: true };
|
|
46
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* LOOP HINT adoption back-fill (decision e7d13697, Option C). When the main
|
|
99
|
+
* thread (or an agent) actually runs `cf loop run` in this session, stamp
|
|
100
|
+
* every not-yet-stamped `[LOOP HINT]` injection row of the session with
|
|
101
|
+
* `adopted_at = now`. This is the write side of the "建议的 loop 被采纳没"
|
|
102
|
+
* telemetry — the OQ5 hard requirement that lets us later judge
|
|
103
|
+
* keep-vs-remove. Read side is a single SQL (countLoopHintAdoption).
|
|
104
|
+
*
|
|
105
|
+
* The daemon is ONLY observing here — it never launches `cf loop run` itself
|
|
106
|
+
* (advisory-only invariant). Silently swallows errors — observability,
|
|
107
|
+
* never a blocker.
|
|
108
|
+
*/
|
|
109
|
+
maybeMarkLoopHintAdoption(event) {
|
|
110
|
+
if (!this.storage)
|
|
111
|
+
return;
|
|
112
|
+
try {
|
|
113
|
+
const cmd = event.tool_input?.command;
|
|
114
|
+
if (typeof cmd !== 'string' || !LOOP_RUN_COMMAND_RE.test(cmd))
|
|
115
|
+
return;
|
|
116
|
+
const stamped = this.storage.writeLoopHintAdoption(event.session_id, Date.now());
|
|
117
|
+
if (stamped > 0) {
|
|
118
|
+
logger.debug(`[PostToolUse] loop-hint adoption: stamped ${stamped} injection row(s) for session ${event.session_id}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
logger.debug(`[PostToolUse] maybeMarkLoopHintAdoption failed: ${err}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* KB adoption back-fill (decision 148f7a0a). When the main thread (or an
|
|
127
|
+
* agent in the same session) actively calls a KB MCP tool
|
|
128
|
+
* (`mcp__claude-forge__knowledge*`), stamp every not-yet-stamped KB
|
|
129
|
+
* injection row of this session with `adopted_at = now`. This is the
|
|
130
|
+
* write side of the "注入的 KB 被用了没" telemetry — read side is a single
|
|
131
|
+
* SQL over injections (adopted/total, source_handler LIKE '%:kb').
|
|
132
|
+
*
|
|
133
|
+
* Silently swallows errors — telemetry is observability, never a blocker.
|
|
134
|
+
*/
|
|
135
|
+
maybeMarkKbAdoption(event) {
|
|
136
|
+
if (!this.storage)
|
|
137
|
+
return;
|
|
138
|
+
try {
|
|
139
|
+
const stamped = this.storage.writeKbInjectionAdoption(event.session_id, Date.now());
|
|
140
|
+
if (stamped > 0) {
|
|
141
|
+
logger.debug(`[PostToolUse] KB adoption: stamped ${stamped} injection row(s) for session ${event.session_id} (tool=${event.tool_name})`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
catch (err) {
|
|
145
|
+
logger.debug(`[PostToolUse] maybeMarkKbAdoption failed: ${err}`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* audit F4 back-fill (KPI relax: dry_run also back-filled). Pipeline:
|
|
150
|
+
* 1. Query last 30s of `deny` + `dry_run` intercepts for this session.
|
|
151
|
+
* dry_run rows are the "would-have-been-denied" rehearsal that fires
|
|
152
|
+
* when `pre_tool_intercept.enabled=false`. Including them lets C4
|
|
153
|
+
* compute a meaningful obeyed-ratio BEFORE the flag is flipped on —
|
|
154
|
+
* otherwise C4 stays 0 forever in dry_run mode.
|
|
155
|
+
* 2. If any candidate matches `event.tool_name` → the main loop re-invoked
|
|
156
|
+
* the SAME tool despite the deny/dry_run hint → mark 'override'.
|
|
157
|
+
* 3. Else, the main loop switched tools (most commonly Bash deny → Read /
|
|
158
|
+
* Grep / Agent) → mark all candidates 'obeyed'.
|
|
159
|
+
*
|
|
160
|
+
* For dry_run rows specifically the verdict is a *pseudo-outcome* — the
|
|
161
|
+
* rule didn't actually enforce anything, but the main loop's reaction in
|
|
162
|
+
* the same 30s window still proxies "would they have obeyed?". UI surfaces
|
|
163
|
+
* this distinction in the C4 tooltip; the SQL aggregation treats both the
|
|
164
|
+
* same.
|
|
165
|
+
*
|
|
166
|
+
* Silently swallows errors — back-fill is observability, never a blocker.
|
|
167
|
+
* Multiple candidates within the window all get the same verdict; that's
|
|
168
|
+
* acceptable because the AI's reaction is a single response either way.
|
|
169
|
+
*/
|
|
170
|
+
maybeMarkInterceptOutcome(event) {
|
|
171
|
+
if (!this.storage)
|
|
172
|
+
return;
|
|
173
|
+
try {
|
|
174
|
+
const sinceIso = new Date(Date.now() - INTERCEPT_OUTCOME_WINDOW_MS).toISOString();
|
|
175
|
+
const candidates = this.storage.queryToolIntercepts({
|
|
176
|
+
session_id: event.session_id,
|
|
177
|
+
decisions: ['deny', 'dry_run'],
|
|
178
|
+
since: sinceIso,
|
|
179
|
+
limit: 10,
|
|
180
|
+
});
|
|
181
|
+
const pending = candidates.filter((c) => c.outcome === null);
|
|
182
|
+
if (pending.length === 0)
|
|
183
|
+
return;
|
|
184
|
+
for (const row of pending) {
|
|
185
|
+
const verdict = row.tool_name === event.tool_name ? 'override' : 'obeyed';
|
|
186
|
+
this.storage.updateToolInterceptOutcome(row.id, verdict);
|
|
187
|
+
logger.debug(`[PostToolUse] intercept ${row.id} (rule=${row.rule_id} tool=${row.tool_name}) → ${verdict} (now ran ${event.tool_name})`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
catch (err) {
|
|
191
|
+
logger.debug(`[PostToolUse] maybeMarkInterceptOutcome failed: ${err}`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Phase 6 writeback. Pipeline:
|
|
196
|
+
* 1. Flag gate (`agent_writeback.enabled`). Default OFF → silent skip.
|
|
197
|
+
* 2. Path filter — only changelog paths under `docs/implementation/`
|
|
198
|
+
* (matches both the legacy `*-changelog-*.md` and the post-2026-05-26
|
|
199
|
+
* datedir layout `YYYY-MM-DD/HHMM-*-changelog.md`).
|
|
200
|
+
* 3. Run `extractExperience` on the resolved absolute path.
|
|
201
|
+
* 4. Append each extracted entry to `<projectRoot>/.forge-knowledge/
|
|
202
|
+
* agents-experience/<topic>.md`.
|
|
203
|
+
*
|
|
204
|
+
* All errors are swallowed (warn-level log) — writeback is best-effort.
|
|
205
|
+
*/
|
|
206
|
+
async maybeWriteExperience(event) {
|
|
207
|
+
if (!this.configStore)
|
|
208
|
+
return;
|
|
209
|
+
let flagEnabled = false;
|
|
210
|
+
try {
|
|
211
|
+
flagEnabled = this.configStore.isEnabled(AGENT_WRITEBACK_FLAG);
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
if (!flagEnabled)
|
|
217
|
+
return;
|
|
218
|
+
const rawPath = pickFilePath(event.tool_input);
|
|
219
|
+
if (!rawPath)
|
|
220
|
+
return;
|
|
221
|
+
if (!CHANGELOG_PATH_PATTERN.test(rawPath))
|
|
222
|
+
return;
|
|
223
|
+
const absPath = path.isAbsolute(rawPath)
|
|
224
|
+
? rawPath
|
|
225
|
+
: path.join(event.project_path, rawPath);
|
|
226
|
+
try {
|
|
227
|
+
const experiences = await extractExperience(absPath);
|
|
228
|
+
if (experiences.length === 0)
|
|
229
|
+
return;
|
|
230
|
+
let written = 0;
|
|
231
|
+
for (const exp of experiences) {
|
|
232
|
+
const ok = await appendToExperienceFile(event.project_path, exp);
|
|
233
|
+
if (ok)
|
|
234
|
+
written++;
|
|
235
|
+
}
|
|
236
|
+
if (written > 0) {
|
|
237
|
+
logger.info(`[PostToolUse] writeback: ${written}/${experiences.length} entries from ${path.basename(absPath)}`);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
catch (err) {
|
|
241
|
+
logger.warn(`[PostToolUse] experience writeback failed: ${err}`);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Resolve the target file path of a Write/Edit tool invocation.
|
|
247
|
+
*
|
|
248
|
+
* Claude Code's Write/Edit payloads use `file_path`; legacy CLIs occasionally
|
|
249
|
+
* package it as `path`. Both shapes are accepted; anything else returns null.
|
|
250
|
+
*/
|
|
251
|
+
function pickFilePath(input) {
|
|
252
|
+
if (!input)
|
|
253
|
+
return null;
|
|
254
|
+
const candidates = [input.file_path, input.path];
|
|
255
|
+
for (const c of candidates) {
|
|
256
|
+
if (typeof c === 'string' && c.length > 0)
|
|
257
|
+
return c;
|
|
258
|
+
}
|
|
259
|
+
return null;
|
|
47
260
|
}
|
|
48
261
|
//# sourceMappingURL=post-tool-use.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-tool-use.js","sourceRoot":"","sources":["../../../src/daemon/handlers/post-tool-use.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"post-tool-use.js","sourceRoot":"","sources":["../../../src/daemon/handlers/post-tool-use.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PreToolUseHandler — Phase 1 strict-mode rule engine + dry_run shim.
|
|
3
|
+
*
|
|
4
|
+
* Pipeline per event:
|
|
5
|
+
* 1. Build RuleContext (recent_agent_spawn, active_agent_depth, edited_files,
|
|
6
|
+
* recent_prompt).
|
|
7
|
+
* 2. Detect explicit bypass marker (`forge:bypass=<reason>`) in tool input.
|
|
8
|
+
* 3. Find the first matching ToolInterceptRule from RuleRegistry.
|
|
9
|
+
* 4. Decide & persist:
|
|
10
|
+
* - Flag OFF (default): row written with decision='dry_run'; allow=true.
|
|
11
|
+
* - Flag ON + bypass : decision='bypass'; allow=true.
|
|
12
|
+
* - Flag ON + deny : decision='deny'; allow=false + hookSpecificOutput.
|
|
13
|
+
* - Flag ON + warn : decision='warn'; allow=true + additionalContext.
|
|
14
|
+
*
|
|
15
|
+
* Storage / config failures must never propagate — `tool_intercepts` is a
|
|
16
|
+
* fact table; missing rows are acceptable, breaking the tool pipeline is not.
|
|
17
|
+
*
|
|
18
|
+
* Session-state computed lazily (per-event) instead of cached, to keep the
|
|
19
|
+
* handler stateless across daemon restarts. Phase 2 will fold this into
|
|
20
|
+
* sessions.intercept_count etc. so the lazy scan can be replaced.
|
|
21
|
+
*/
|
|
22
|
+
import type { PreToolUseEvent } from '../../core/types.js';
|
|
23
|
+
import type { SQLiteStorage } from '../../core/storage/sqlite.js';
|
|
24
|
+
import type { ConfigStore } from '../config-store.js';
|
|
25
|
+
import type { HookResponse } from '../server.js';
|
|
26
|
+
import { RuleRegistry } from '../rules/registry.js';
|
|
27
|
+
import { InterceptRollbackGuard } from '../services/intercept-rollback-guard.js';
|
|
28
|
+
export declare class PreToolUseHandler {
|
|
29
|
+
private storage;
|
|
30
|
+
private configStore;
|
|
31
|
+
private registry;
|
|
32
|
+
/**
|
|
33
|
+
* Session → edited-files incremental cache (F7).
|
|
34
|
+
* Cleared per-session on Stop via `clearSession()`.
|
|
35
|
+
*/
|
|
36
|
+
private readonly editedFilesCache;
|
|
37
|
+
private readonly rollbackGuard;
|
|
38
|
+
constructor(storage: SQLiteStorage, configStore: ConfigStore, registry?: RuleRegistry, rollbackGuard?: InterceptRollbackGuard);
|
|
39
|
+
/**
|
|
40
|
+
* Drop cached edited-files state for a session. Called from StopHandler so
|
|
41
|
+
* long-running daemons don't leak per-session Sets forever.
|
|
42
|
+
*/
|
|
43
|
+
clearSession(sessionId: string): void;
|
|
44
|
+
handle(event: PreToolUseEvent): Promise<HookResponse>;
|
|
45
|
+
private isFlagEnabled;
|
|
46
|
+
private buildContext;
|
|
47
|
+
/**
|
|
48
|
+
* f47c2c90 (2026-06-17): probe `inline_edit_no_spawn.enabled`. Default false
|
|
49
|
+
* (gray-rollout OFF). Storage / config failures degrade to `false` (fail-safe
|
|
50
|
+
* — keep the rule dormant; warn-only rule never blocks anyway).
|
|
51
|
+
*/
|
|
52
|
+
private probeInlineEditNoSpawn;
|
|
53
|
+
/**
|
|
54
|
+
* v9.x Phase 2 (2026-05-26): probe `question_default_bmad.enforce`. Default
|
|
55
|
+
* false during the 7-day dry_run window starting 2026-05-26. Storage /
|
|
56
|
+
* config failures degrade to `false` (fail-safe — keep dry_run behaviour).
|
|
57
|
+
*/
|
|
58
|
+
private probeQuestionDefaultBmadEnforce;
|
|
59
|
+
/**
|
|
60
|
+
* Distinct file_paths edited in PostToolUse Edit/Write events for the session.
|
|
61
|
+
*
|
|
62
|
+
* F7 fix: incremental cache keyed by session_id. First call scans up to
|
|
63
|
+
* `EDIT_HISTORY_SCAN_LIMIT` events; subsequent calls fetch only events with
|
|
64
|
+
* `timestamp >= maxTs` (Set dedup absorbs the boundary). A session with N
|
|
65
|
+
* PreToolUse events now amortizes to O(N) total scan work instead of O(N·200).
|
|
66
|
+
*
|
|
67
|
+
* Returns a fresh copy of the Set so rule matchers can't mutate cached state.
|
|
68
|
+
*/
|
|
69
|
+
private computeEditedFiles;
|
|
70
|
+
/**
|
|
71
|
+
* P0-1 fix (2026-05-27): same as `computeEditedFiles` but additionally
|
|
72
|
+
* surfaces per-file last-edit ISO timestamp so the HARD multi-file rule can
|
|
73
|
+
* drop pre-spawn entries. The Set is preserved as the legacy `files`
|
|
74
|
+
* companion for callers (rule matchers, hint factories) that don't need
|
|
75
|
+
* timing.
|
|
76
|
+
*
|
|
77
|
+
* Cache shape was upgraded (added `fileTs: Map<string,string>`) but the
|
|
78
|
+
* incremental-scan invariant is unchanged: we only fetch events newer than
|
|
79
|
+
* the cached `maxTs` and merge into the existing fileTs map (`Map.set`
|
|
80
|
+
* naturally overwrites with the newest ts since queryEvents returns DESC).
|
|
81
|
+
*/
|
|
82
|
+
private computeEditedFilesWithTs;
|
|
83
|
+
/**
|
|
84
|
+
* P0-1 fix (2026-05-27): timestamp of the most recent PreToolUse Task/Agent
|
|
85
|
+
* event within the F6 5-min window. Returns null when no spawn was observed.
|
|
86
|
+
* Uses the same query shape as `detectRecentAgentSpawn` so callers don't pay
|
|
87
|
+
* twice (storage layer prepared-stmt cache absorbs the duplicate).
|
|
88
|
+
*/
|
|
89
|
+
private getLastSpawnTs;
|
|
90
|
+
/**
|
|
91
|
+
* Did the session spawn an agent (Task / Agent tool) within the recent
|
|
92
|
+
* observation window?
|
|
93
|
+
*
|
|
94
|
+
* F6 fix (2026-05-27): query `PreToolUse` (spawn-initiated) instead of
|
|
95
|
+
* `PostToolUse` (spawn-completed). PostToolUse Task events only arrive
|
|
96
|
+
* 30s–5min+ after spawn (when the sub-agent finishes), so the previous
|
|
97
|
+
* 30s window was permanently false during the actual post-spawn
|
|
98
|
+
* coordination period the rule was designed to relax. PreToolUse Task
|
|
99
|
+
* fires at the spawn instant; combined with the 5-min window (aligned
|
|
100
|
+
* with Phase 5 `PHASE5_WINDOW_MS`), the main thread now correctly sees
|
|
101
|
+
* `recent_agent_spawn=true` during BMAD coordination.
|
|
102
|
+
*
|
|
103
|
+
* `limit` bumped from 40 → 100 because a 5-min window can hold many more
|
|
104
|
+
* spawn events than the prior 30s window.
|
|
105
|
+
*/
|
|
106
|
+
private detectRecentAgentSpawn;
|
|
107
|
+
/**
|
|
108
|
+
* Audit #4 fix (2026-06-09): compute the number of sub-agents currently
|
|
109
|
+
* IN-FLIGHT for the session (agent-depth).
|
|
110
|
+
*
|
|
111
|
+
* Claude Code sub-agents SHARE the main thread's `session_id`, so a spawned
|
|
112
|
+
* `coder` editing 3+ files (its authorized job) trips the session-level
|
|
113
|
+
* multi-file HARD threshold even though the main thread never edited a file.
|
|
114
|
+
* The 6 audited deny rows were all this false-positive class.
|
|
115
|
+
*
|
|
116
|
+
* Pure daemon-side signal — NO hook (.sh) change required, because the daemon
|
|
117
|
+
* already receives both ends of the Task lifecycle:
|
|
118
|
+
* • PreToolUse tool_name='Task'/'Agent' → a sub-agent was SPAWNED (+1)
|
|
119
|
+
* • PostToolUse tool_name='Task'/'Agent' → that sub-agent COMPLETED (-1)
|
|
120
|
+
*
|
|
121
|
+
* depth = max(0, #spawns − #completions). `depth >= 1` means at least one
|
|
122
|
+
* authorized sub-agent is running right now → the multi-file HARD rule
|
|
123
|
+
* exempts the session (the edits are the agent's legitimate work).
|
|
124
|
+
*
|
|
125
|
+
* Scanning is capped + degrades to 0 on any failure (fail-OPEN toward the
|
|
126
|
+
* legacy threshold behaviour, never breaks the tool pipeline).
|
|
127
|
+
*
|
|
128
|
+
* NOTE: this intentionally does NOT use a tight time window. A long-running
|
|
129
|
+
* `coder` can run well past the 5-min `recent_agent_spawn` window; as long as
|
|
130
|
+
* its PostToolUse completion has not yet arrived, depth stays ≥1 and its
|
|
131
|
+
* edits remain exempt. The PostToolUse decrement is what closes the window.
|
|
132
|
+
*/
|
|
133
|
+
private computeActiveAgentDepth;
|
|
134
|
+
/** Most-recent UserPromptSubmit prompt text (best-effort, used for intent relaxation). */
|
|
135
|
+
private fetchRecentPrompt;
|
|
136
|
+
private persistIntercept;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Shape-based secret redaction patterns (audit F-medium #5, 2026-05-26).
|
|
140
|
+
*
|
|
141
|
+
* Applied to the `tool_input_summary` string we persist into `tool_intercepts`
|
|
142
|
+
* for auditing. The raw `tool_input` JSON is NEVER redacted at the rule-engine
|
|
143
|
+
* level (rules legitimately need to inspect verbatim arguments); we only
|
|
144
|
+
* scrub the *summary* that gets written to durable storage and surfaced in
|
|
145
|
+
* the Web UI / weekly report.
|
|
146
|
+
*
|
|
147
|
+
* Order matters: longer / more specific patterns first so they're not
|
|
148
|
+
* partially eaten by a more general regex on the same span.
|
|
149
|
+
*
|
|
150
|
+
* Patterns covered:
|
|
151
|
+
* 1. CLI-flag style: --token=…, --api-key=…, password=…, secret=…
|
|
152
|
+
* 2. JWT shape: eyJ<base64>.<base64>.<base64>
|
|
153
|
+
* 3. Anthropic / OpenAI keys: sk-… (40+ chars)
|
|
154
|
+
* 4. Slack bot tokens: xoxb-… (40+ chars)
|
|
155
|
+
* 5. AWS access key IDs: AKIA + 16 alnum uppercase
|
|
156
|
+
* 6. Long hex strings (>= 32 chars) — catches hex API keys / session tokens
|
|
157
|
+
*
|
|
158
|
+
* Exported (under-test) for unit tests in pre-tool-use.test.ts so we can lock
|
|
159
|
+
* down each shape with a focused assertion.
|
|
160
|
+
*/
|
|
161
|
+
/**
|
|
162
|
+
* Shared redaction pattern table. Each entry is either:
|
|
163
|
+
* • `prefixed: true` — the regex has a single capture group that names the
|
|
164
|
+
* key (e.g. `--token=`); replacement preserves the
|
|
165
|
+
* prefix and substitutes `<redacted>` for the value.
|
|
166
|
+
* • `prefixed: false` — the regex matches the entire secret literal; the
|
|
167
|
+
* whole match is replaced with `<redacted>`.
|
|
168
|
+
*
|
|
169
|
+
* Exported so tests can lock down each shape individually.
|
|
170
|
+
*/
|
|
171
|
+
export declare const SECRET_REDACTION_PATTERNS: Array<{
|
|
172
|
+
name: string;
|
|
173
|
+
re: RegExp;
|
|
174
|
+
prefixed: boolean;
|
|
175
|
+
}>;
|
|
176
|
+
/**
|
|
177
|
+
* Apply all `SECRET_REDACTION_PATTERNS` to a string. Exported for unit tests;
|
|
178
|
+
* production callers should go through `buildToolInputSummary`.
|
|
179
|
+
*/
|
|
180
|
+
export declare function redactSecrets(s: string): string;
|
|
181
|
+
//# sourceMappingURL=pre-tool-use.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pre-tool-use.d.ts","sourceRoot":"","sources":["../../../src/daemon/handlers/pre-tool-use.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,qBAAqB,CAAC;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAoDjF,qBAAa,iBAAiB;IAU1B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,QAAQ;IAXlB;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiD;IAElF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;gBAG7C,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,WAAW,EACxB,QAAQ,GAAE,YAAiC,EACnD,aAAa,CAAC,EAAE,sBAAsB;IAKxC;;;OAGG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI/B,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC;IA2I3D,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,YAAY;IAwBpB;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAS9B;;;;OAIG;IACH,OAAO,CAAC,+BAA+B;IASvC;;;;;;;;;OASG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,wBAAwB;IA4ChC;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAoBtB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,sBAAsB;IAoB9B;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,OAAO,CAAC,uBAAuB;IAqB/B,0FAA0F;IAC1F,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,gBAAgB;CAyBzB;AA2BD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;CACnB,CAwBA,CAAC;AAEF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ/C"}
|