@winspan/claude-forge 9.2.0 → 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 +80 -19
- package/README.md +13 -6
- package/dist/catalogs/agents.json +19 -24
- package/dist/catalogs/skills.json +139 -27
- package/dist/claudemd/templates/swarm-protocol.md +1 -1
- 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/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/decisions.d.ts.map +1 -1
- package/dist/cli/commands/decisions.js +46 -9
- package/dist/cli/commands/decisions.js.map +1 -1
- package/dist/cli/commands/executions.d.ts.map +1 -1
- package/dist/cli/commands/executions.js +2 -1
- package/dist/cli/commands/executions.js.map +1 -1
- package/dist/cli/commands/insights-goal-check.d.ts +5 -1
- package/dist/cli/commands/insights-goal-check.d.ts.map +1 -1
- package/dist/cli/commands/insights-goal-check.js +15 -15
- package/dist/cli/commands/insights-goal-check.js.map +1 -1
- package/dist/cli/commands/knowledge.d.ts +51 -0
- package/dist/cli/commands/knowledge.d.ts.map +1 -1
- package/dist/cli/commands/knowledge.js +202 -29
- package/dist/cli/commands/knowledge.js.map +1 -1
- 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 +23 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +82 -0
- package/dist/cli/commands/mcp.js.map +1 -1
- 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 +409 -9
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/stats.d.ts.map +1 -1
- package/dist/cli/commands/stats.js +9 -2
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/index.js +8 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/constants.d.ts +37 -0
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +43 -0
- package/dist/core/constants.js.map +1 -1
- package/dist/core/diagnostics/checks.d.ts.map +1 -1
- package/dist/core/diagnostics/checks.js +2 -1
- package/dist/core/diagnostics/checks.js.map +1 -1
- package/dist/core/diagnostics/daemon-status.d.ts +1 -1
- package/dist/core/diagnostics/daemon-status.d.ts.map +1 -1
- package/dist/core/diagnostics/daemon-status.js +1 -1
- package/dist/core/diagnostics/daemon-status.js.map +1 -1
- package/dist/core/diagnostics/entropy-checks.d.ts +3 -2
- package/dist/core/diagnostics/entropy-checks.d.ts.map +1 -1
- package/dist/core/diagnostics/entropy-checks.js +10 -5
- package/dist/core/diagnostics/entropy-checks.js.map +1 -1
- 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/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 +34 -4
- package/dist/core/governance/global-inject.d.ts.map +1 -1
- package/dist/core/governance/global-inject.js +80 -25
- package/dist/core/governance/global-inject.js.map +1 -1
- 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/{daemon/services → core/insights}/experience-extractor.d.ts +0 -7
- package/dist/core/insights/experience-extractor.d.ts.map +1 -0
- package/dist/{daemon/services → core/insights}/experience-extractor.js +5 -9
- package/dist/core/insights/experience-extractor.js.map +1 -0
- package/dist/{daemon/services → core/insights}/violation-reporter.d.ts +20 -1
- package/dist/core/insights/violation-reporter.d.ts.map +1 -0
- package/dist/{daemon/services → core/insights}/violation-reporter.js +56 -4
- 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.map +1 -1
- package/dist/core/queue/index.js +2 -1
- package/dist/core/queue/index.js.map +1 -1
- package/dist/core/storage/base.d.ts +159 -0
- package/dist/core/storage/base.d.ts.map +1 -1
- package/dist/core/storage/base.js +523 -0
- package/dist/core/storage/base.js.map +1 -1
- 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 +30 -5
- package/dist/core/storage/decisions.d.ts.map +1 -1
- package/dist/core/storage/decisions.js +45 -13
- package/dist/core/storage/decisions.js.map +1 -1
- package/dist/core/storage/events.d.ts +127 -0
- package/dist/core/storage/events.d.ts.map +1 -1
- package/dist/core/storage/events.js +318 -3
- package/dist/core/storage/events.js.map +1 -1
- package/dist/core/storage/feedback.d.ts +3 -23
- package/dist/core/storage/feedback.d.ts.map +1 -1
- package/dist/core/storage/feedback.js +37 -38
- package/dist/core/storage/feedback.js.map +1 -1
- package/dist/core/storage/injections.d.ts +40 -0
- package/dist/core/storage/injections.d.ts.map +1 -1
- package/dist/core/storage/injections.js +69 -0
- package/dist/core/storage/injections.js.map +1 -1
- package/dist/core/storage/knowledge.d.ts +226 -0
- package/dist/core/storage/knowledge.d.ts.map +1 -1
- package/dist/core/storage/knowledge.js +391 -4
- package/dist/core/storage/knowledge.js.map +1 -1
- package/dist/core/storage/pipeline-rollup.d.ts +1 -7
- package/dist/core/storage/pipeline-rollup.d.ts.map +1 -1
- package/dist/core/storage/pipeline-rollup.js +18 -57
- package/dist/core/storage/pipeline-rollup.js.map +1 -1
- package/dist/core/storage/routing.d.ts +34 -0
- package/dist/core/storage/routing.d.ts.map +1 -1
- package/dist/core/storage/routing.js +92 -2
- package/dist/core/storage/routing.js.map +1 -1
- package/dist/core/storage/rows.d.ts +5 -25
- package/dist/core/storage/rows.d.ts.map +1 -1
- package/dist/core/storage/schema.sql +92 -27
- package/dist/core/storage/sessions.d.ts.map +1 -1
- package/dist/core/storage/sessions.js +2 -1
- package/dist/core/storage/sessions.js.map +1 -1
- package/dist/core/storage/skills.d.ts +159 -0
- package/dist/core/storage/skills.d.ts.map +1 -1
- package/dist/core/storage/skills.js +350 -4
- package/dist/core/storage/skills.js.map +1 -1
- package/dist/core/storage/sqlite.d.ts +81 -25
- package/dist/core/storage/sqlite.d.ts.map +1 -1
- package/dist/core/storage/sqlite.js +143 -45
- package/dist/core/storage/sqlite.js.map +1 -1
- package/dist/core/storage/tasks.d.ts +270 -0
- package/dist/core/storage/tasks.d.ts.map +1 -1
- package/dist/core/storage/tasks.js +495 -16
- package/dist/core/storage/tasks.js.map +1 -1
- package/dist/core/storage/tool-intercepts.d.ts +1 -1
- package/dist/core/storage/tool-intercepts.js +1 -1
- package/dist/core/types.d.ts +26 -3
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +1 -3
- package/dist/core/types.js.map +1 -1
- package/dist/core/utils/binary-paths.d.ts +32 -0
- package/dist/core/utils/binary-paths.d.ts.map +1 -1
- package/dist/core/utils/binary-paths.js +52 -0
- package/dist/core/utils/binary-paths.js.map +1 -1
- package/dist/core/utils/claude-cli-resolver.d.ts.map +1 -0
- package/dist/{skills/distill → core/utils}/claude-cli-resolver.js +1 -1
- package/dist/core/utils/claude-cli-resolver.js.map +1 -0
- package/dist/core/utils/claude-cli-spawn.d.ts +1 -1
- package/dist/core/utils/claude-cli-spawn.js +2 -2
- package/dist/core/utils/claude-cli-spawn.js.map +1 -1
- package/dist/core/utils/noise-prompt.d.ts +1 -1
- package/dist/core/utils/noise-prompt.js +1 -1
- package/dist/core/utils/time.d.ts +26 -0
- package/dist/core/utils/time.d.ts.map +1 -1
- package/dist/core/utils/time.js +33 -0
- package/dist/core/utils/time.js.map +1 -1
- package/dist/daemon/config-store.d.ts.map +1 -1
- package/dist/daemon/config-store.js +14 -5
- package/dist/daemon/config-store.js.map +1 -1
- package/dist/daemon/event-parser.d.ts.map +1 -1
- package/dist/daemon/event-parser.js +5 -0
- package/dist/daemon/event-parser.js.map +1 -1
- package/dist/daemon/handlers/post-tool-use.d.ts +24 -16
- package/dist/daemon/handlers/post-tool-use.d.ts.map +1 -1
- package/dist/daemon/handlers/post-tool-use.js +76 -116
- package/dist/daemon/handlers/post-tool-use.js.map +1 -1
- package/dist/daemon/handlers/pre-tool-use.d.ts +35 -10
- package/dist/daemon/handlers/pre-tool-use.d.ts.map +1 -1
- package/dist/daemon/handlers/pre-tool-use.js +71 -38
- package/dist/daemon/handlers/pre-tool-use.js.map +1 -1
- package/dist/daemon/handlers/stop.d.ts +20 -0
- package/dist/daemon/handlers/stop.d.ts.map +1 -1
- package/dist/daemon/handlers/stop.js +96 -8
- package/dist/daemon/handlers/stop.js.map +1 -1
- package/dist/daemon/handlers/user-prompt.d.ts +16 -1
- package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
- package/dist/daemon/handlers/user-prompt.js +97 -56
- 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/index.d.ts +19 -0
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +125 -200
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/rules/defaults.d.ts.map +1 -1
- package/dist/daemon/rules/defaults.js +151 -64
- package/dist/daemon/rules/defaults.js.map +1 -1
- package/dist/daemon/rules/types.d.ts +28 -22
- package/dist/daemon/rules/types.d.ts.map +1 -1
- package/dist/daemon/rules/workflow-defaults.js +9 -9
- package/dist/daemon/rules/workflow-defaults.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/decision-hint.d.ts +47 -10
- package/dist/daemon/services/decision-hint.d.ts.map +1 -1
- package/dist/daemon/services/decision-hint.js +99 -24
- package/dist/daemon/services/decision-hint.js.map +1 -1
- package/dist/daemon/services/event-ttl-sweep.d.ts.map +1 -1
- package/dist/daemon/services/event-ttl-sweep.js +3 -2
- package/dist/daemon/services/event-ttl-sweep.js.map +1 -1
- package/dist/daemon/services/feedback-aggregator.d.ts +14 -26
- package/dist/daemon/services/feedback-aggregator.d.ts.map +1 -1
- package/dist/daemon/services/feedback-aggregator.js +23 -63
- package/dist/daemon/services/feedback-aggregator.js.map +1 -1
- package/dist/daemon/services/heartbeat-writer.d.ts +6 -15
- package/dist/daemon/services/heartbeat-writer.d.ts.map +1 -1
- package/dist/daemon/services/heartbeat-writer.js +7 -36
- package/dist/daemon/services/heartbeat-writer.js.map +1 -1
- package/dist/daemon/services/kb-injector.d.ts +1 -1
- package/dist/daemon/services/kb-injector.d.ts.map +1 -1
- package/dist/daemon/services/kb-injector.js +10 -2
- package/dist/daemon/services/kb-injector.js.map +1 -1
- 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.js +1 -1
- package/dist/daemon/services/outcome-classification-service.js.map +1 -1
- package/dist/daemon/services/task-segmenter.d.ts +11 -0
- package/dist/daemon/services/task-segmenter.d.ts.map +1 -1
- package/dist/daemon/services/task-segmenter.js +48 -2
- package/dist/daemon/services/task-segmenter.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 +1 -0
- package/dist/daemon/templates/agents/coder.md +165 -8
- package/dist/daemon/templates/agents/decision-maker.md +107 -21
- package/dist/daemon/templates/agents/doc-reviewer.md +4 -1
- package/dist/daemon/templates/agents/harness-debug-full.md +85 -3
- package/dist/daemon/templates/agents/knowledge-builder.md +1 -0
- package/dist/daemon/templates/agents/patch-applier.md +1 -0
- package/dist/daemon/templates/agents/planner.md +55 -3
- package/dist/daemon/templates/agents/safety-net-implementer.md +278 -0
- package/dist/daemon/templates/agents/skill-distiller.md +1 -0
- package/dist/daemon/templates/agents/task-boundary-classifier.md +1 -0
- package/dist/daemon/templates/agents/verify-agent.md +128 -5
- package/dist/hooks/stop.sh +7 -1
- package/dist/knowledge/builder.js +36 -7
- package/dist/knowledge/builder.js.map +1 -1
- package/dist/knowledge/constants.d.ts +10 -5
- package/dist/knowledge/constants.d.ts.map +1 -1
- package/dist/knowledge/constants.js +10 -5
- package/dist/knowledge/constants.js.map +1 -1
- 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/prompt.d.ts +9 -0
- package/dist/knowledge/prompt.d.ts.map +1 -1
- package/dist/knowledge/prompt.js +17 -5
- package/dist/knowledge/prompt.js.map +1 -1
- package/dist/knowledge/query.d.ts +13 -0
- package/dist/knowledge/query.d.ts.map +1 -1
- package/dist/knowledge/query.js +107 -10
- package/dist/knowledge/query.js.map +1 -1
- package/dist/knowledge/repo-map.d.ts +11 -5
- package/dist/knowledge/repo-map.d.ts.map +1 -1
- package/dist/knowledge/repo-map.js +42 -3
- package/dist/knowledge/repo-map.js.map +1 -1
- package/dist/knowledge/validator.d.ts.map +1 -1
- package/dist/knowledge/validator.js +69 -2
- package/dist/knowledge/validator.js.map +1 -1
- package/dist/mcp/server.d.ts +64 -8
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +233 -18
- package/dist/mcp/server.js.map +1 -1
- package/dist/skills/distill/distiller.js +1 -1
- package/dist/skills/distill/distiller.js.map +1 -1
- package/dist/skills/distilled/distilled-api-design.md +4 -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 +5 -2
- 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 +85 -50
- 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 +1 -1
- package/dist/skills/distilled/distilled-receiving-code-review.md +185 -0
- package/dist/skills/distilled/distilled-subagent-driven-development.md +124 -0
- package/dist/skills/distilled/distilled-systematic-debugging.md +108 -260
- 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 +88 -78
- package/dist/skills/distilled/distilled-writing-skills.md +175 -0
- package/dist/skills/registry.d.ts +10 -50
- package/dist/skills/registry.d.ts.map +1 -1
- package/dist/skills/registry.js +7 -118
- package/dist/skills/registry.js.map +1 -1
- package/dist/skills/tools/pipeline-suggest.js +2 -2
- package/dist/skills/tools/pipeline-suggest.js.map +1 -1
- package/dist/skills/tools/skill-invoke.d.ts +2 -1
- package/dist/skills/tools/skill-invoke.d.ts.map +1 -1
- package/dist/skills/tools/skill-invoke.js +3 -1
- 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-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.js +1 -1
- package/dist/web/routes/decisions.js.map +1 -1
- 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 +2 -1
- package/dist/web/routes/events.js.map +1 -1
- 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 +43 -2
- package/dist/web/routes/knowledge.d.ts.map +1 -1
- package/dist/web/routes/knowledge.js +117 -6
- package/dist/web/routes/knowledge.js.map +1 -1
- package/dist/web/routes/pipeline.d.ts +0 -9
- package/dist/web/routes/pipeline.d.ts.map +1 -1
- package/dist/web/routes/pipeline.js +0 -4
- package/dist/web/routes/pipeline.js.map +1 -1
- package/dist/web/routes/rules.d.ts.map +1 -1
- package/dist/web/routes/rules.js +20 -6
- 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 +8 -7
- package/dist/web/routes/sessions.js.map +1 -1
- 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.js +1 -1
- package/dist/web/routes/skills-distill.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 +95 -19
- package/dist/web/routes/task-timeline.d.ts.map +1 -1
- package/dist/web/routes/task-timeline.js +344 -88
- package/dist/web/routes/task-timeline.js.map +1 -1
- package/dist/web/routes/tasks.d.ts.map +1 -1
- package/dist/web/routes/tasks.js +52 -30
- package/dist/web/routes/tasks.js.map +1 -1
- package/dist/web/routes/violations.d.ts +1 -1
- package/dist/web/routes/violations.d.ts.map +1 -1
- package/dist/web/routes/violations.js +3 -2
- package/dist/web/routes/violations.js.map +1 -1
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +20 -0
- 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/distill-manager.d.ts +47 -0
- package/dist/web/services/distill-manager.d.ts.map +1 -1
- package/dist/web/services/distill-manager.js +103 -0
- package/dist/web/services/distill-manager.js.map +1 -1
- 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-DZmTl-8J.js → MarkdownRenderer-DlDQNihj.js} +2 -2
- package/dist/web/static/assets/{MarkdownRenderer-DZmTl-8J.js.map → MarkdownRenderer-DlDQNihj.js.map} +1 -1
- package/dist/web/static/assets/NotFound-LMzbP51V.js +2 -0
- package/dist/web/static/assets/{NotFound-BQPh0vaF.js.map → NotFound-LMzbP51V.js.map} +1 -1
- 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-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/{index-7bl3kbcx.css → index-B_v_MKlb.css} +1 -1
- 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/markdown-CA7ePUts.js +30 -0
- package/dist/web/static/assets/markdown-CA7ePUts.js.map +1 -0
- package/dist/web/static/assets/{outcome-DUn1NjlC.js → outcome-BKGy9azt.js} +2 -2
- package/dist/web/static/assets/{outcome-DUn1NjlC.js.map → outcome-BKGy9azt.js.map} +1 -1
- package/dist/web/static/assets/{query-S6X1S7K9.js → query-CgCOpYWf.js} +2 -2
- package/dist/web/static/assets/{query-S6X1S7K9.js.map → query-CgCOpYWf.js.map} +1 -1
- package/dist/web/static/assets/{react-router-JVUrkhdd.js → react-router-Cxmg8RuL.js} +3 -3
- package/dist/web/static/assets/{react-router-JVUrkhdd.js.map → react-router-Cxmg8RuL.js.map} +1 -1
- package/dist/web/static/assets/{syntax-highlighter-BkZfCDsz.js → syntax-highlighter-BDYycNja.js} +3 -3
- package/dist/web/static/assets/{syntax-highlighter-BkZfCDsz.js.map → syntax-highlighter-BDYycNja.js.map} +1 -1
- package/dist/web/static/assets/task-title-BhOcemuR.js +2 -0
- package/dist/web/static/assets/task-title-BhOcemuR.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 +6 -6
- package/package.json +5 -3
- package/dist/core/storage/workflow-recommendations.d.ts +0 -124
- package/dist/core/storage/workflow-recommendations.d.ts.map +0 -1
- package/dist/core/storage/workflow-recommendations.js +0 -274
- package/dist/core/storage/workflow-recommendations.js.map +0 -1
- package/dist/daemon/services/experience-extractor.d.ts.map +0 -1
- package/dist/daemon/services/experience-extractor.js.map +0 -1
- package/dist/daemon/services/violation-reporter.d.ts.map +0 -1
- package/dist/daemon/services/violation-reporter.js.map +0 -1
- package/dist/daemon/templates/agents/harness-hotfix.md +0 -99
- package/dist/daemon/templates/agents/hybrid-feature-with-safety.md +0 -104
- package/dist/daemon/templates/agents/refactor-specialist.md +0 -98
- package/dist/skills/distill/claude-cli-resolver.d.ts.map +0 -1
- package/dist/skills/distill/claude-cli-resolver.js.map +0 -1
- package/dist/skills/distilled/distilled-defi-amm-security.md +0 -293
- package/dist/skills/keyword-score.d.ts +0 -29
- package/dist/skills/keyword-score.d.ts.map +0 -1
- package/dist/skills/keyword-score.js +0 -54
- package/dist/skills/keyword-score.js.map +0 -1
- package/dist/web/static/assets/AgentContentPage-DkeRNxok.js +0 -2
- package/dist/web/static/assets/AgentContentPage-DkeRNxok.js.map +0 -1
- package/dist/web/static/assets/AgentDelegationTable-ByBa0x1l.js +0 -2
- package/dist/web/static/assets/AgentDelegationTable-ByBa0x1l.js.map +0 -1
- package/dist/web/static/assets/ContextInsightsPage-oUk7_I8u.js +0 -3
- package/dist/web/static/assets/ContextInsightsPage-oUk7_I8u.js.map +0 -1
- package/dist/web/static/assets/DaemonHealthPage-DG2fyOP7.js +0 -2
- package/dist/web/static/assets/DaemonHealthPage-DG2fyOP7.js.map +0 -1
- package/dist/web/static/assets/DecisionsPage-CMAPEnKb.js +0 -2
- package/dist/web/static/assets/DecisionsPage-CMAPEnKb.js.map +0 -1
- package/dist/web/static/assets/DiagnosticsPage-DQd-Zm4r.js +0 -2
- package/dist/web/static/assets/DiagnosticsPage-DQd-Zm4r.js.map +0 -1
- package/dist/web/static/assets/DriftTab-DqpepOhI.js +0 -2
- package/dist/web/static/assets/DriftTab-DqpepOhI.js.map +0 -1
- package/dist/web/static/assets/HealthHomePage-CN6zNIie.js +0 -3
- package/dist/web/static/assets/HealthHomePage-CN6zNIie.js.map +0 -1
- package/dist/web/static/assets/KbHitRateTable-ByEIWujF.js +0 -2
- package/dist/web/static/assets/KbHitRateTable-ByEIWujF.js.map +0 -1
- package/dist/web/static/assets/NotFound-BQPh0vaF.js +0 -2
- package/dist/web/static/assets/ProjectSwitcher-D3lZMFd3.js +0 -2
- package/dist/web/static/assets/ProjectSwitcher-D3lZMFd3.js.map +0 -1
- package/dist/web/static/assets/SettingsPage-oLJBNzQj.js +0 -2
- package/dist/web/static/assets/SettingsPage-oLJBNzQj.js.map +0 -1
- package/dist/web/static/assets/SkillContentPage-DK5rgfgw.js +0 -2
- package/dist/web/static/assets/SkillContentPage-DK5rgfgw.js.map +0 -1
- package/dist/web/static/assets/SkillStatsTable-DYMzjEUV.js +0 -2
- package/dist/web/static/assets/SkillStatsTable-DYMzjEUV.js.map +0 -1
- package/dist/web/static/assets/SkillsDistillTab-C7qaG8q3.js +0 -2
- package/dist/web/static/assets/SkillsDistillTab-C7qaG8q3.js.map +0 -1
- package/dist/web/static/assets/TasksHubPage-03wsRRsJ.js +0 -6
- package/dist/web/static/assets/TasksHubPage-03wsRRsJ.js.map +0 -1
- package/dist/web/static/assets/ViolationsPage-DSiLr-9O.js +0 -3
- package/dist/web/static/assets/ViolationsPage-DSiLr-9O.js.map +0 -1
- package/dist/web/static/assets/arco-Bhi3a6Qp.js +0 -14
- package/dist/web/static/assets/arco-Bhi3a6Qp.js.map +0 -1
- package/dist/web/static/assets/charts-BuHQWDbQ.js +0 -37
- package/dist/web/static/assets/charts-BuHQWDbQ.js.map +0 -1
- package/dist/web/static/assets/index-BIYnq1Dx.js +0 -4
- package/dist/web/static/assets/index-BIYnq1Dx.js.map +0 -1
- package/dist/web/static/assets/useTabsParam-k8qte_0C.js +0 -2
- package/dist/web/static/assets/useTabsParam-k8qte_0C.js.map +0 -1
- package/dist/web/static/assets/vendor-DWgdB1eY.js +0 -65
- package/dist/web/static/assets/vendor-DWgdB1eY.js.map +0 -1
- /package/dist/{skills/distill → core/utils}/claude-cli-resolver.d.ts +0 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared source resolvers for Agent 体检 / drift (decision 234f1ad4, Phase 1).
|
|
3
|
+
*
|
|
4
|
+
* Resolves the agent-template source-of-truth directory and the set of known
|
|
5
|
+
* skill_ids, so both the web endpoint and `cf agent retro` build identical
|
|
6
|
+
* trigger-ref / drift inputs without duplicating resolution logic.
|
|
7
|
+
*
|
|
8
|
+
* READ-ONLY: only reads template/skill files; never mutates them.
|
|
9
|
+
*/
|
|
10
|
+
import { dirname, join } from 'node:path';
|
|
11
|
+
import { fileURLToPath } from 'node:url';
|
|
12
|
+
import { SkillRegistry } from '../../skills/registry.js';
|
|
13
|
+
import { extractTriggerRefs } from './agent-drift.js';
|
|
14
|
+
/**
|
|
15
|
+
* Resolve the agent template source-of-truth directory.
|
|
16
|
+
* Compiled: dist/core/insights/*.js → dist/daemon/templates/agents
|
|
17
|
+
* Dev (vitest): src/core/insights/*.ts → src/daemon/templates/agents
|
|
18
|
+
*/
|
|
19
|
+
export function resolveAgentTemplatesDir() {
|
|
20
|
+
return join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'daemon', 'templates', 'agents');
|
|
21
|
+
}
|
|
22
|
+
/** All skill_ids that currently exist (built-in distilled + user skills). */
|
|
23
|
+
export function loadKnownSkillIds() {
|
|
24
|
+
try {
|
|
25
|
+
const registry = new SkillRegistry();
|
|
26
|
+
return new Set(registry.getAll().map((s) => s.id));
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return new Set();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/** Scan the source-of-truth templates dir for trigger refs (convenience). */
|
|
33
|
+
export function loadTriggerRefs(templatesDir) {
|
|
34
|
+
return extractTriggerRefs(templatesDir ?? resolveAgentTemplatesDir());
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=agent-evolution-sources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-evolution-sources.js","sourceRoot":"","sources":["../../../src/core/insights/agent-evolution-sources.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAoB,MAAM,kBAAkB,CAAC;AAExE;;;;GAIG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AACpG,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;QACrC,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,GAAG,EAAU,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,eAAe,CAAC,YAAqB;IACnD,OAAO,kBAAkB,CAAC,YAAY,IAAI,wBAAwB,EAAE,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent 体检 — per-agent health aggregation (decision 234f1ad4, Phase 1).
|
|
3
|
+
*
|
|
4
|
+
* Pure read-side aggregator + suggestion rules. Combines:
|
|
5
|
+
* - delegation / success-rate / duration ← aggregateAgentSpawns (events,
|
|
6
|
+
* read-time Pre/Post pairing; success_rate口径标 INDIRECT,跨 session 边缘有误差)
|
|
7
|
+
* - skill usefulness by agent ← aggregateSkillUsefulnessByAgent
|
|
8
|
+
* (reason-prefix proxy key, NOT agent_id — agent_id empirically all-NULL)
|
|
9
|
+
* - KB usefulness by agent ← aggregateKbUsefulnessByAgent
|
|
10
|
+
* - (agent, skill) closed-loop status ← derived recommendation_health
|
|
11
|
+
* - main-thread violations ← tool_intercepts (by session; these
|
|
12
|
+
* are orchestration discipline, NOT agent template defects — shown separately)
|
|
13
|
+
*
|
|
14
|
+
* 不变量 (cross-Phase): this module is READ-ONLY. It NEVER mutates agent
|
|
15
|
+
* templates; it only produces health objects + readable suggestion strings.
|
|
16
|
+
* The daemon does not call this — only the web endpoint and `cf agent retro`.
|
|
17
|
+
*/
|
|
18
|
+
import type { SQLiteStorage } from '../storage/sqlite.js';
|
|
19
|
+
/**
|
|
20
|
+
* Reason-prefix (proxy agent key from skill_invocations.reason) → agent template
|
|
21
|
+
* name (the `src/daemon/templates/agents/*.md` source-of-truth basename). The
|
|
22
|
+
* reason prefix is what agents hardcode in `--reason "coder/<phase>"`, but the
|
|
23
|
+
* trigger-table / template name differs for several agents.
|
|
24
|
+
*/
|
|
25
|
+
export declare const REASON_PREFIX_TO_AGENT: Record<string, string>;
|
|
26
|
+
/** Map a reason prefix to its canonical agent template name (identity fallback). */
|
|
27
|
+
export declare function agentForReasonPrefix(prefix: string): string;
|
|
28
|
+
/**
|
|
29
|
+
* recommendation_health classification thresholds (decision 234f1ad4 Q7).
|
|
30
|
+
* `dead`: pulls >= DEAD_MIN_PULLS && actionable_rate < DEAD_ACTIONABLE_RATE
|
|
31
|
+
* (STRICT helped-only rate). The coder × distilled-executing-plans pair
|
|
32
|
+
* (70 pull / actionable≈1.5%) is the live `dead` sample.
|
|
33
|
+
*/
|
|
34
|
+
export declare const DEAD_MIN_PULLS = 20;
|
|
35
|
+
export declare const DEAD_ACTIONABLE_RATE = 0.1;
|
|
36
|
+
/** `live`: enough pulls AND actionable_rate at/above this healthy floor. */
|
|
37
|
+
export declare const LIVE_ACTIONABLE_RATE = 0.5;
|
|
38
|
+
/** `unrated`: pulls >= threshold but rated-ratio below this (can't judge). */
|
|
39
|
+
export declare const UNRATED_MIN_PULLS = 20;
|
|
40
|
+
export declare const UNRATED_RATED_RATIO = 0.3;
|
|
41
|
+
/** Min total_rated before a (agent,skill) pair is allowed to产 a suggestion. */
|
|
42
|
+
export declare const SUGGESTION_MIN_RATED = 10;
|
|
43
|
+
/** A skill is "weak" for an agent when actionable_rate < this (with enough evidence). */
|
|
44
|
+
export declare const WEAK_ACTIONABLE_RATE = 0.25;
|
|
45
|
+
/** Min delegations before per-agent success-rate / drift signals are trusted. */
|
|
46
|
+
export declare const MIN_DELEGATIONS_FOR_SIGNAL = 3;
|
|
47
|
+
/**
|
|
48
|
+
* Muted (agent, skill) pairs — operator can silence noisy suggestions here.
|
|
49
|
+
* Format: `"<agent>::<skill_id>"`. Empty by default; spec R1 anti-noise.
|
|
50
|
+
*/
|
|
51
|
+
export declare const MUTED_SUGGESTIONS: ReadonlySet<string>;
|
|
52
|
+
export type RecommendationHealth = 'live' | 'dead' | 'unrated' | 'unused';
|
|
53
|
+
export interface RecommendedSkillHealth {
|
|
54
|
+
skill_id: string;
|
|
55
|
+
pulls: number;
|
|
56
|
+
helped: number;
|
|
57
|
+
partial: number;
|
|
58
|
+
not_actionable: number;
|
|
59
|
+
total_rated: number;
|
|
60
|
+
pending: number;
|
|
61
|
+
actionable_rate: number;
|
|
62
|
+
recommendation_health: RecommendationHealth;
|
|
63
|
+
}
|
|
64
|
+
export interface WeakSkill {
|
|
65
|
+
skill_id: string;
|
|
66
|
+
actionable_rate: number;
|
|
67
|
+
total_rated: number;
|
|
68
|
+
pulls: number;
|
|
69
|
+
}
|
|
70
|
+
export interface AgentKbUsage {
|
|
71
|
+
pulls: number;
|
|
72
|
+
total_rated: number;
|
|
73
|
+
helped: number;
|
|
74
|
+
actionable_rate: number;
|
|
75
|
+
}
|
|
76
|
+
export type SuccessRateBasis = 'indirect' | 'insufficient_data';
|
|
77
|
+
export interface AgentHealth {
|
|
78
|
+
agent: string;
|
|
79
|
+
source: 'builtin' | 'project';
|
|
80
|
+
delegations: number;
|
|
81
|
+
success: number;
|
|
82
|
+
partial: number;
|
|
83
|
+
failed: number;
|
|
84
|
+
unrated: number;
|
|
85
|
+
success_rate: number | null;
|
|
86
|
+
success_rate_basis: SuccessRateBasis;
|
|
87
|
+
avg_duration_ms: number | null;
|
|
88
|
+
last_ts: number;
|
|
89
|
+
weak_skills: WeakSkill[];
|
|
90
|
+
recommended_skills: RecommendedSkillHealth[];
|
|
91
|
+
kb_usage: AgentKbUsage | null;
|
|
92
|
+
suggestions: string[];
|
|
93
|
+
}
|
|
94
|
+
export interface MainThreadViolations {
|
|
95
|
+
total: number;
|
|
96
|
+
by_rule: Array<{
|
|
97
|
+
rule_id: string;
|
|
98
|
+
count: number;
|
|
99
|
+
}>;
|
|
100
|
+
note: string;
|
|
101
|
+
}
|
|
102
|
+
export interface AgentHealthResult {
|
|
103
|
+
generated_at: string;
|
|
104
|
+
since: string;
|
|
105
|
+
until: string | null;
|
|
106
|
+
agents: AgentHealth[];
|
|
107
|
+
main_thread_violations: MainThreadViolations;
|
|
108
|
+
}
|
|
109
|
+
declare const DAY_MS: number;
|
|
110
|
+
/**
|
|
111
|
+
* Classify a (agent, skill) pairing into a closed-loop health bucket.
|
|
112
|
+
* `triggerReferenced` = whether the agent template trigger table references the
|
|
113
|
+
* skill (used to distinguish `unused`: referenced but zero pulls).
|
|
114
|
+
*/
|
|
115
|
+
export declare function classifyRecommendationHealth(pair: {
|
|
116
|
+
pulls: number;
|
|
117
|
+
total_rated: number;
|
|
118
|
+
actionable_rate: number;
|
|
119
|
+
}, triggerReferenced: boolean): RecommendationHealth;
|
|
120
|
+
export interface ComputeAgentHealthOptions {
|
|
121
|
+
/** Window start (epoch ms). */
|
|
122
|
+
since: number;
|
|
123
|
+
/** Window end (epoch ms); omit → open-ended (now). */
|
|
124
|
+
until?: number;
|
|
125
|
+
/** Optional project scope for the usefulness aggregations. */
|
|
126
|
+
projectPath?: string;
|
|
127
|
+
/**
|
|
128
|
+
* Trigger-table references per agent (agent template name → set of skill_ids
|
|
129
|
+
* it recommends). Used to mark `unused` pairs + surface zero-pull recommended
|
|
130
|
+
* skills. Optional — when omitted, `unused` detection is skipped.
|
|
131
|
+
*/
|
|
132
|
+
triggerRefs?: Map<string, Set<string>>;
|
|
133
|
+
/** Whether an agent name is a Claude-Code builtin (for the `source` tag). */
|
|
134
|
+
isBuiltin?: (agent: string) => boolean;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Compute per-agent health objects + suggestions over the window.
|
|
138
|
+
* Pure: takes a storage handle, returns plain data (no side effects).
|
|
139
|
+
*/
|
|
140
|
+
export declare function computeAgentHealth(storage: SQLiteStorage, opts: ComputeAgentHealthOptions): AgentHealthResult;
|
|
141
|
+
export { DAY_MS };
|
|
142
|
+
//# sourceMappingURL=agent-health.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-health.d.ts","sourceRoot":"","sources":["../../../src/core/insights/agent-health.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent 体检 — per-agent health aggregation (decision 234f1ad4, Phase 1).
|
|
3
|
+
*
|
|
4
|
+
* Pure read-side aggregator + suggestion rules. Combines:
|
|
5
|
+
* - delegation / success-rate / duration ← aggregateAgentSpawns (events,
|
|
6
|
+
* read-time Pre/Post pairing; success_rate口径标 INDIRECT,跨 session 边缘有误差)
|
|
7
|
+
* - skill usefulness by agent ← aggregateSkillUsefulnessByAgent
|
|
8
|
+
* (reason-prefix proxy key, NOT agent_id — agent_id empirically all-NULL)
|
|
9
|
+
* - KB usefulness by agent ← aggregateKbUsefulnessByAgent
|
|
10
|
+
* - (agent, skill) closed-loop status ← derived recommendation_health
|
|
11
|
+
* - main-thread violations ← tool_intercepts (by session; these
|
|
12
|
+
* are orchestration discipline, NOT agent template defects — shown separately)
|
|
13
|
+
*
|
|
14
|
+
* 不变量 (cross-Phase): this module is READ-ONLY. It NEVER mutates agent
|
|
15
|
+
* templates; it only produces health objects + readable suggestion strings.
|
|
16
|
+
* The daemon does not call this — only the web endpoint and `cf agent retro`.
|
|
17
|
+
*/
|
|
18
|
+
// ── Tunable thresholds + rules (top-of-file constants, per spec) ────────────
|
|
19
|
+
/**
|
|
20
|
+
* Reason-prefix (proxy agent key from skill_invocations.reason) → agent template
|
|
21
|
+
* name (the `src/daemon/templates/agents/*.md` source-of-truth basename). The
|
|
22
|
+
* reason prefix is what agents hardcode in `--reason "coder/<phase>"`, but the
|
|
23
|
+
* trigger-table / template name differs for several agents.
|
|
24
|
+
*/
|
|
25
|
+
export const REASON_PREFIX_TO_AGENT = {
|
|
26
|
+
coder: 'coder',
|
|
27
|
+
verify: 'verify-agent',
|
|
28
|
+
decision: 'decision-maker',
|
|
29
|
+
safetynet: 'safety-net-implementer',
|
|
30
|
+
planner: 'planner',
|
|
31
|
+
harness: 'harness-debug-full',
|
|
32
|
+
};
|
|
33
|
+
/** Map a reason prefix to its canonical agent template name (identity fallback). */
|
|
34
|
+
export function agentForReasonPrefix(prefix) {
|
|
35
|
+
return REASON_PREFIX_TO_AGENT[prefix] ?? prefix;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* recommendation_health classification thresholds (decision 234f1ad4 Q7).
|
|
39
|
+
* `dead`: pulls >= DEAD_MIN_PULLS && actionable_rate < DEAD_ACTIONABLE_RATE
|
|
40
|
+
* (STRICT helped-only rate). The coder × distilled-executing-plans pair
|
|
41
|
+
* (70 pull / actionable≈1.5%) is the live `dead` sample.
|
|
42
|
+
*/
|
|
43
|
+
export const DEAD_MIN_PULLS = 20;
|
|
44
|
+
export const DEAD_ACTIONABLE_RATE = 0.1; // < 10%
|
|
45
|
+
/** `live`: enough pulls AND actionable_rate at/above this healthy floor. */
|
|
46
|
+
export const LIVE_ACTIONABLE_RATE = 0.5; // >= 50%
|
|
47
|
+
/** `unrated`: pulls >= threshold but rated-ratio below this (can't judge). */
|
|
48
|
+
export const UNRATED_MIN_PULLS = DEAD_MIN_PULLS;
|
|
49
|
+
export const UNRATED_RATED_RATIO = 0.3; // < 30% of pulls rated → unrated
|
|
50
|
+
/** Min total_rated before a (agent,skill) pair is allowed to产 a suggestion. */
|
|
51
|
+
export const SUGGESTION_MIN_RATED = 10;
|
|
52
|
+
/** A skill is "weak" for an agent when actionable_rate < this (with enough evidence). */
|
|
53
|
+
export const WEAK_ACTIONABLE_RATE = 0.25;
|
|
54
|
+
/** Min delegations before per-agent success-rate / drift signals are trusted. */
|
|
55
|
+
export const MIN_DELEGATIONS_FOR_SIGNAL = 3;
|
|
56
|
+
/**
|
|
57
|
+
* Muted (agent, skill) pairs — operator can silence noisy suggestions here.
|
|
58
|
+
* Format: `"<agent>::<skill_id>"`. Empty by default; spec R1 anti-noise.
|
|
59
|
+
*/
|
|
60
|
+
export const MUTED_SUGGESTIONS = new Set();
|
|
61
|
+
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
62
|
+
/**
|
|
63
|
+
* Classify a (agent, skill) pairing into a closed-loop health bucket.
|
|
64
|
+
* `triggerReferenced` = whether the agent template trigger table references the
|
|
65
|
+
* skill (used to distinguish `unused`: referenced but zero pulls).
|
|
66
|
+
*/
|
|
67
|
+
export function classifyRecommendationHealth(pair, triggerReferenced) {
|
|
68
|
+
if (triggerReferenced && pair.pulls === 0)
|
|
69
|
+
return 'unused';
|
|
70
|
+
// `dead` is STRICTLY gated on pulls >= DEAD_MIN_PULLS (decision 234f1ad4 Q7):
|
|
71
|
+
// a low-pull pair with 0% actionable is just under-sampled, NOT a dead推荐.
|
|
72
|
+
if (pair.pulls >= DEAD_MIN_PULLS && pair.actionable_rate < DEAD_ACTIONABLE_RATE)
|
|
73
|
+
return 'dead';
|
|
74
|
+
const ratedRatio = pair.pulls > 0 ? pair.total_rated / pair.pulls : 0;
|
|
75
|
+
if (pair.pulls >= UNRATED_MIN_PULLS && ratedRatio < UNRATED_RATED_RATIO)
|
|
76
|
+
return 'unrated';
|
|
77
|
+
if (pair.pulls >= DEAD_MIN_PULLS && pair.actionable_rate >= LIVE_ACTIONABLE_RATE)
|
|
78
|
+
return 'live';
|
|
79
|
+
// Below the dead/live pull threshold: classify as live only when it clears the
|
|
80
|
+
// healthy floor with enough rated evidence; otherwise unrated (under-sampled).
|
|
81
|
+
if (pair.total_rated >= SUGGESTION_MIN_RATED && pair.actionable_rate >= LIVE_ACTIONABLE_RATE)
|
|
82
|
+
return 'live';
|
|
83
|
+
return 'unrated';
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Compute per-agent health objects + suggestions over the window.
|
|
87
|
+
* Pure: takes a storage handle, returns plain data (no side effects).
|
|
88
|
+
*/
|
|
89
|
+
export function computeAgentHealth(storage, opts) {
|
|
90
|
+
const sinceIso = new Date(opts.since).toISOString();
|
|
91
|
+
const untilIso = opts.until !== undefined ? new Date(opts.until).toISOString() : undefined;
|
|
92
|
+
const spawns = storage.aggregateAgentSpawns({
|
|
93
|
+
since: sinceIso,
|
|
94
|
+
until: untilIso,
|
|
95
|
+
recentLimit: 8,
|
|
96
|
+
// decision dd79010a: scope delegation/success/duration to the project too
|
|
97
|
+
// (skill/kb usefulness below were already project-scoped via opts.projectPath).
|
|
98
|
+
projectPath: opts.projectPath,
|
|
99
|
+
});
|
|
100
|
+
const skillByAgent = storage.aggregateSkillUsefulnessByAgent({
|
|
101
|
+
since: opts.since,
|
|
102
|
+
until: opts.until,
|
|
103
|
+
projectPath: opts.projectPath,
|
|
104
|
+
});
|
|
105
|
+
const kbByAgent = storage.aggregateKbUsefulnessByAgent({
|
|
106
|
+
since: opts.since,
|
|
107
|
+
until: opts.until,
|
|
108
|
+
project_path: opts.projectPath,
|
|
109
|
+
});
|
|
110
|
+
// Bug-fix (insights project filter parity, 2026-06-15): when a SPECIFIC
|
|
111
|
+
// project is requested, the triggerRefs-driven `unused` synthesis below MUST
|
|
112
|
+
// be suppressed. `triggerRefs` is a global agent-template ⇄ skill metadata map
|
|
113
|
+
// (project-independent), so injecting its zero-pull `unused` pairs — and
|
|
114
|
+
// unioning its agent names into `agentNames` (see further down) — would
|
|
115
|
+
// manufacture agents that have NO project-scoped activity. That made
|
|
116
|
+
// /api/insights/agent-health?project=<bogus> return 1 agent (verify-agent,
|
|
117
|
+
// delegations=0, one `unused` skill) while /agent-stats?project=<bogus>
|
|
118
|
+
// correctly returned 0. Strict equality on the project-scoped aggregations
|
|
119
|
+
// (events / skill / kb usefulness, all `project_path = ?`) already excludes
|
|
120
|
+
// NULL/other-project rows; the only remaining leak was this global template
|
|
121
|
+
// synthesis. So: only honour triggerRefs (unused detection + name union) in
|
|
122
|
+
// the all-projects view (no project filter). agent-stats has no triggerRefs
|
|
123
|
+
// path at all, which is why it never leaked — this brings the two to parity.
|
|
124
|
+
const projectScoped = opts.projectPath !== undefined && opts.projectPath !== '';
|
|
125
|
+
const effectiveTriggerRefs = projectScoped ? undefined : opts.triggerRefs;
|
|
126
|
+
// Index usefulness by canonical agent name.
|
|
127
|
+
const skillsByAgentName = new Map();
|
|
128
|
+
for (const row of skillByAgent) {
|
|
129
|
+
if (row.agent === '<unknown>')
|
|
130
|
+
continue;
|
|
131
|
+
const agentName = agentForReasonPrefix(row.agent);
|
|
132
|
+
const refs = effectiveTriggerRefs?.get(agentName);
|
|
133
|
+
const triggerReferenced = refs ? refs.has(row.skill_id) : false;
|
|
134
|
+
const rec = {
|
|
135
|
+
skill_id: row.skill_id,
|
|
136
|
+
pulls: row.pulls,
|
|
137
|
+
helped: row.helped,
|
|
138
|
+
partial: row.partial,
|
|
139
|
+
not_actionable: row.not_actionable,
|
|
140
|
+
total_rated: row.total_rated,
|
|
141
|
+
pending: row.pending,
|
|
142
|
+
actionable_rate: row.actionable_rate,
|
|
143
|
+
recommendation_health: classifyRecommendationHealth(row, triggerReferenced),
|
|
144
|
+
};
|
|
145
|
+
const arr = skillsByAgentName.get(agentName) ?? [];
|
|
146
|
+
arr.push(rec);
|
|
147
|
+
skillsByAgentName.set(agentName, arr);
|
|
148
|
+
}
|
|
149
|
+
// Add `unused` pairs: trigger-referenced skills with zero pulls in window.
|
|
150
|
+
// Suppressed under a specific project scope (see projectScoped note above).
|
|
151
|
+
if (effectiveTriggerRefs) {
|
|
152
|
+
for (const [agentName, refSkills] of effectiveTriggerRefs) {
|
|
153
|
+
const existing = skillsByAgentName.get(agentName) ?? [];
|
|
154
|
+
const seen = new Set(existing.map((s) => s.skill_id));
|
|
155
|
+
for (const skillId of refSkills) {
|
|
156
|
+
if (seen.has(skillId))
|
|
157
|
+
continue;
|
|
158
|
+
existing.push({
|
|
159
|
+
skill_id: skillId,
|
|
160
|
+
pulls: 0,
|
|
161
|
+
helped: 0,
|
|
162
|
+
partial: 0,
|
|
163
|
+
not_actionable: 0,
|
|
164
|
+
total_rated: 0,
|
|
165
|
+
pending: 0,
|
|
166
|
+
actionable_rate: 0,
|
|
167
|
+
recommendation_health: 'unused',
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
skillsByAgentName.set(agentName, existing);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
const kbByAgentName = new Map();
|
|
174
|
+
for (const row of kbByAgent) {
|
|
175
|
+
if (row.agent === '<unknown>')
|
|
176
|
+
continue;
|
|
177
|
+
const agentName = agentForReasonPrefix(row.agent);
|
|
178
|
+
kbByAgentName.set(agentName, {
|
|
179
|
+
pulls: row.pulls,
|
|
180
|
+
total_rated: row.total_rated,
|
|
181
|
+
helped: row.helped,
|
|
182
|
+
actionable_rate: row.actionable_rate,
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
// Union of agent names from spawns + usefulness + trigger refs.
|
|
186
|
+
const agentNames = new Set();
|
|
187
|
+
for (const s of spawns)
|
|
188
|
+
agentNames.add(s.agent);
|
|
189
|
+
for (const k of skillsByAgentName.keys())
|
|
190
|
+
agentNames.add(k);
|
|
191
|
+
for (const k of kbByAgentName.keys())
|
|
192
|
+
agentNames.add(k);
|
|
193
|
+
if (effectiveTriggerRefs)
|
|
194
|
+
for (const k of effectiveTriggerRefs.keys())
|
|
195
|
+
agentNames.add(k);
|
|
196
|
+
const spawnByName = new Map(spawns.map((s) => [s.agent, s]));
|
|
197
|
+
const isBuiltin = opts.isBuiltin ?? (() => false);
|
|
198
|
+
const agents = [];
|
|
199
|
+
for (const name of agentNames) {
|
|
200
|
+
const spawn = spawnByName.get(name);
|
|
201
|
+
const delegations = spawn?.delegations ?? 0;
|
|
202
|
+
const success = spawn?.success ?? 0;
|
|
203
|
+
const partial = spawn?.partial ?? 0;
|
|
204
|
+
const failed = spawn?.failed ?? 0;
|
|
205
|
+
const unrated = spawn?.unrated ?? 0;
|
|
206
|
+
const rated = success + partial + failed;
|
|
207
|
+
const hasSignal = delegations >= MIN_DELEGATIONS_FOR_SIGNAL && rated > 0;
|
|
208
|
+
const success_rate = hasSignal ? Math.round((success / rated) * 1000) / 1000 : null;
|
|
209
|
+
const success_rate_basis = hasSignal ? 'indirect' : 'insufficient_data';
|
|
210
|
+
const recommended = (skillsByAgentName.get(name) ?? []).sort((a, b) => a.actionable_rate - b.actionable_rate || b.pulls - a.pulls);
|
|
211
|
+
const weak_skills = recommended
|
|
212
|
+
.filter((r) => r.total_rated >= SUGGESTION_MIN_RATED && r.actionable_rate < WEAK_ACTIONABLE_RATE)
|
|
213
|
+
.map((r) => ({
|
|
214
|
+
skill_id: r.skill_id,
|
|
215
|
+
actionable_rate: r.actionable_rate,
|
|
216
|
+
total_rated: r.total_rated,
|
|
217
|
+
pulls: r.pulls,
|
|
218
|
+
}));
|
|
219
|
+
const suggestions = buildSuggestions(name, recommended, weak_skills);
|
|
220
|
+
agents.push({
|
|
221
|
+
agent: name,
|
|
222
|
+
source: isBuiltin(name) ? 'builtin' : 'project',
|
|
223
|
+
delegations,
|
|
224
|
+
success,
|
|
225
|
+
partial,
|
|
226
|
+
failed,
|
|
227
|
+
unrated,
|
|
228
|
+
success_rate,
|
|
229
|
+
success_rate_basis,
|
|
230
|
+
avg_duration_ms: spawn?.avg_duration_ms ?? null,
|
|
231
|
+
last_ts: spawn?.last_ts ?? 0,
|
|
232
|
+
weak_skills,
|
|
233
|
+
recommended_skills: recommended,
|
|
234
|
+
kb_usage: kbByAgentName.get(name) ?? null,
|
|
235
|
+
suggestions,
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
agents.sort((a, b) => b.delegations - a.delegations || a.agent.localeCompare(b.agent));
|
|
239
|
+
return {
|
|
240
|
+
generated_at: new Date().toISOString(),
|
|
241
|
+
since: sinceIso,
|
|
242
|
+
until: untilIso ?? null,
|
|
243
|
+
agents,
|
|
244
|
+
main_thread_violations: computeMainThreadViolations(storage, sinceIso, untilIso),
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Build readable improvement suggestions for an agent (decision 234f1ad4).
|
|
249
|
+
* High-threshold (SUGGESTION_MIN_RATED) + mutable mute list to avoid noise (R1).
|
|
250
|
+
*/
|
|
251
|
+
function buildSuggestions(agent, recommended, weakSkills) {
|
|
252
|
+
const out = [];
|
|
253
|
+
for (const w of weakSkills) {
|
|
254
|
+
if (MUTED_SUGGESTIONS.has(`${agent}::${w.skill_id}`))
|
|
255
|
+
continue;
|
|
256
|
+
const rec = recommended.find((r) => r.skill_id === w.skill_id);
|
|
257
|
+
const ratePct = (w.actionable_rate * 100).toFixed(1);
|
|
258
|
+
if (rec && rec.recommendation_health === 'dead') {
|
|
259
|
+
out.push(`${agent} 推荐 ${w.skill_id}:${w.pulls} pull / ${rec.helped} helped / ${rec.partial} partial(actionable_rate ${ratePct}%,样本 ${w.total_rated}≥阈值)→ 死推荐,建议换 skill 或精简该 pull 步措辞。`);
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
out.push(`${agent} 推荐 ${w.skill_id}:actionable_rate ${ratePct}%(样本 ${w.total_rated}≥阈值)→ 弱推荐,建议复核该 pull 步。`);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return out;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Aggregate main-thread (orchestration discipline) violations from
|
|
269
|
+
* tool_intercepts in window. These are NOT agent template defects — surfaced
|
|
270
|
+
* separately with an explicit note (decision实测: 违规 != agent 缺陷).
|
|
271
|
+
*/
|
|
272
|
+
function computeMainThreadViolations(storage, sinceIso, untilIso) {
|
|
273
|
+
const note = '主线程编排纪律(edit/write-multi-file-hard 等),非 agent 模板缺陷——与 agent 自身信号分开展示。';
|
|
274
|
+
try {
|
|
275
|
+
// tool_intercepts.timestamp is ISO TEXT (NOT INTEGER ms) — compare ISO直接.
|
|
276
|
+
const db = storage.db;
|
|
277
|
+
const conditions = ['decision = ?', 'timestamp >= ?'];
|
|
278
|
+
const params = ['deny', sinceIso];
|
|
279
|
+
if (untilIso !== undefined) {
|
|
280
|
+
conditions.push('timestamp < ?');
|
|
281
|
+
params.push(untilIso);
|
|
282
|
+
}
|
|
283
|
+
const rows = db
|
|
284
|
+
.prepare(`SELECT rule_id, COUNT(*) AS count FROM tool_intercepts
|
|
285
|
+
WHERE ${conditions.join(' AND ')}
|
|
286
|
+
GROUP BY rule_id ORDER BY count DESC`)
|
|
287
|
+
.all(...params);
|
|
288
|
+
const total = rows.reduce((s, r) => s + r.count, 0);
|
|
289
|
+
return { total, by_rule: rows, note };
|
|
290
|
+
}
|
|
291
|
+
catch {
|
|
292
|
+
return { total: 0, by_rule: [], note };
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
export { DAY_MS };
|
|
296
|
+
//# sourceMappingURL=agent-health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-health.js","sourceRoot":"","sources":["../../../src/core/insights/agent-health.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agent-patch-apply.ts — pure-JS unified-diff applier for agent-template
|
|
3
|
+
* adoption (decision 568a8c53, user Open-Q1).
|
|
4
|
+
*
|
|
5
|
+
* Why NOT `git apply`: the daemon runs under launchd with cwd=`/` (no working
|
|
6
|
+
* tree), so `git apply` fails there (same landmine documented in
|
|
7
|
+
* skills-distill.ts:559). The web adopt path needs a working tree-INDEPENDENT
|
|
8
|
+
* application that resolves the patch against the in-memory template text.
|
|
9
|
+
*
|
|
10
|
+
* Scope: this is a deliberately small, strict context-matching applier — NOT a
|
|
11
|
+
* full GNU patch / git-apply re-implementation. It handles the unified-diff
|
|
12
|
+
* shape the `agent-retro-distiller` emits:
|
|
13
|
+
* - one or more `@@ ... @@` hunks
|
|
14
|
+
* - context lines (leading space), additions (`+`), removals (`-`)
|
|
15
|
+
* - optional `--- a/...` / `+++ b/...` file headers (ignored)
|
|
16
|
+
*
|
|
17
|
+
* It is ATOMIC: if any hunk fails to match its context against the current text
|
|
18
|
+
* it throws `PatchApplyError` and returns NOTHING (no partial write). Callers
|
|
19
|
+
* map the throw to HTTP 422. Pure: no IO.
|
|
20
|
+
*/
|
|
21
|
+
export declare class PatchApplyError extends Error {
|
|
22
|
+
/** Index (1-based) of the hunk that failed, when known. */
|
|
23
|
+
readonly hunkIndex: number | null;
|
|
24
|
+
constructor(message: string, hunkIndex?: number | null);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Apply a unified-diff `patch` to `source` text, returning the new text.
|
|
28
|
+
*
|
|
29
|
+
* Atomic + strict: every hunk's context (+removed) side must match exactly once
|
|
30
|
+
* in the current text, else throw (no partial application). The trailing newline
|
|
31
|
+
* convention of `source` is preserved.
|
|
32
|
+
*
|
|
33
|
+
* Pure: no IO, no template writes.
|
|
34
|
+
*/
|
|
35
|
+
export declare function applyUnifiedDiff(source: string, patch: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* Mechanically set the `version:` line inside the leading YAML frontmatter to
|
|
38
|
+
* `targetVersion`. The anchor-guard forbids the distiller from touching the
|
|
39
|
+
* version line; adoption bumps it here, deterministically. Returns the new text.
|
|
40
|
+
*
|
|
41
|
+
* Throws if no frontmatter `version:` line is found (the template invariant
|
|
42
|
+
* requires one). Pure.
|
|
43
|
+
*/
|
|
44
|
+
export declare function setFrontmatterVersion(template: string, targetVersion: number): string;
|
|
45
|
+
//# sourceMappingURL=agent-patch-apply.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-patch-apply.d.ts","sourceRoot":"","sources":["../../../src/core/insights/agent-patch-apply.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,2DAA2D;IAC3D,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;gBACtB,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,MAAM,GAAG,IAAW;CAK7D;AAuGD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAmBtE;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAQrF"}
|