@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,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file codegraph-sync.ts
|
|
3
|
+
* codegraph Phase 3 — daemon-side periodic incremental graph sync.
|
|
4
|
+
*
|
|
5
|
+
* decision 95df9d97 / spec 1112-codegraph-call-graph-spec.md (Phase 3).
|
|
6
|
+
*
|
|
7
|
+
* Keeps the independent codegraph DB (`~/.claude-forge/codegraph.db`) fresh by
|
|
8
|
+
* polling on a `setInterval` cadence and re-extracting ONLY the source files
|
|
9
|
+
* that changed since the last sync.
|
|
10
|
+
*
|
|
11
|
+
* Q3 (user-approved): interval-driven INCREMENTAL rebuild — NO chokidar /
|
|
12
|
+
* fs.watch real-time watcher (most irreversible, deferred). Zero new deps; we
|
|
13
|
+
* reuse the existing daemon `setInterval` + module-level mutex maintenance
|
|
14
|
+
* pattern (mirrors event-ttl-sweep).
|
|
15
|
+
*
|
|
16
|
+
* How "incremental" works
|
|
17
|
+
* -----------------------
|
|
18
|
+
* Cross-file edge resolution needs the whole-repo TypeChecker (an edge's
|
|
19
|
+
* destination may live in another file), so we still build ONE `ts.Program`
|
|
20
|
+
* over `src/` per pass via `buildRepoGraph`. What is incremental is the WRITE:
|
|
21
|
+
* each file's on-disk mtime is diffed against a per-file mtime the service
|
|
22
|
+
* remembers across ticks (seeded from the graph DB's known file set on the
|
|
23
|
+
* first pass), and `replaceFileGraph` is called ONLY for files that are new or
|
|
24
|
+
* whose mtime advanced. Unchanged files' nodes/edges are left untouched.
|
|
25
|
+
*
|
|
26
|
+
* This satisfies the Phase 3 success criterion — "change one source file, wait
|
|
27
|
+
* one sync cycle, that file's nodes update while other files' node rows are
|
|
28
|
+
* untouched (incremental, not full rebuild)". On a no-change tick the pass is a
|
|
29
|
+
* cheap stat scan with zero writes (the graph build still runs to know the file
|
|
30
|
+
* set; the WRITE is what's gated).
|
|
31
|
+
*
|
|
32
|
+
* The mtime memory is daemon-side (a plain `Map` owned by the caller) so this
|
|
33
|
+
* service needs NO new method on the Phase 1 `CodeGraphStore` — it only uses
|
|
34
|
+
* the existing read-only `listFiles()` to seed "already-tracked" files on the
|
|
35
|
+
* very first pass (those are treated as up-to-date until their mtime advances).
|
|
36
|
+
*/
|
|
37
|
+
import type { CodeGraphStore } from '../../core/storage/codegraph.js';
|
|
38
|
+
import type { ConfigStore } from '../config-store.js';
|
|
39
|
+
/** Config key for the sync cadence (minutes). */
|
|
40
|
+
export declare const CFG_CODEGRAPH_SYNC_INTERVAL = "codegraph.sync_interval_minutes";
|
|
41
|
+
/**
|
|
42
|
+
* Default cadence in minutes. The graph only needs to be "reasonably fresh" for
|
|
43
|
+
* pull-style impact queries, and a full-Program parse per pass is non-trivial,
|
|
44
|
+
* so 15 minutes balances freshness against CPU.
|
|
45
|
+
*/
|
|
46
|
+
export declare const DEFAULT_CODEGRAPH_SYNC_INTERVAL_MINUTES = 15;
|
|
47
|
+
/** Lower bound — sub-minute polling would thrash the TypeChecker for no gain. */
|
|
48
|
+
export declare const MIN_CODEGRAPH_SYNC_INTERVAL_MINUTES = 1;
|
|
49
|
+
/**
|
|
50
|
+
* Per-file mtime memory carried across sync ticks. Maps a src-relative file
|
|
51
|
+
* path to the ISO mtime last seen/written. Owned by the daemon caller so the
|
|
52
|
+
* service stays storage-method-agnostic.
|
|
53
|
+
*/
|
|
54
|
+
export type MtimeCache = Map<string, string>;
|
|
55
|
+
/** Per-file result of a sync pass. */
|
|
56
|
+
export interface CodeGraphSyncResult {
|
|
57
|
+
/** Files re-extracted + rewritten this pass (new or mtime-advanced). */
|
|
58
|
+
changedFiles: string[];
|
|
59
|
+
/** Files seen on disk and already up-to-date (skipped). */
|
|
60
|
+
unchangedCount: number;
|
|
61
|
+
/** Files previously tracked but no longer producing nodes (left as-is). */
|
|
62
|
+
staleFiles: string[];
|
|
63
|
+
/** Total in-scope source files scanned this pass. */
|
|
64
|
+
scannedCount: number;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Resolve the effective sync interval (minutes) from forge_config, clamped to
|
|
68
|
+
* `MIN_CODEGRAPH_SYNC_INTERVAL_MINUTES`. Exported for tests + daemon wiring.
|
|
69
|
+
*/
|
|
70
|
+
export declare function resolveSyncIntervalMinutes(configStore: ConfigStore): number;
|
|
71
|
+
/**
|
|
72
|
+
* Run one incremental codegraph sync pass. Idempotent; safe to call repeatedly.
|
|
73
|
+
*
|
|
74
|
+
* 1. Build the repo graph over `srcDir` (one full Program — required for
|
|
75
|
+
* cross-file edge resolution).
|
|
76
|
+
* 2. Group nodes + edges by their (src-relative) file.
|
|
77
|
+
* 3. For each file: compare on-disk mtime to the cached mtime. Re-run
|
|
78
|
+
* `replaceFileGraph` ONLY when the file is new or its mtime advanced; then
|
|
79
|
+
* update the cache.
|
|
80
|
+
*
|
|
81
|
+
* On the very first pass (empty cache) the graph's already-tracked files
|
|
82
|
+
* (`store.listFiles()`) are seeded into the cache from their on-disk mtime so a
|
|
83
|
+
* fresh daemon doesn't needlessly rewrite an already-built graph. Files NOT yet
|
|
84
|
+
* in the graph are treated as new and get written.
|
|
85
|
+
*
|
|
86
|
+
* @param store the codegraph storage (independent DB).
|
|
87
|
+
* @param srcDir absolute path to `src/`.
|
|
88
|
+
* @param cache per-file mtime memory carried across ticks (mutated in place).
|
|
89
|
+
* @returns a per-file breakdown of what changed.
|
|
90
|
+
*/
|
|
91
|
+
export declare function syncCodeGraph(store: CodeGraphStore, srcDir: string, cache: MtimeCache): CodeGraphSyncResult;
|
|
92
|
+
/** Resolve `src/` from a project root. */
|
|
93
|
+
export declare function srcDirFromRoot(projectRoot: string): string;
|
|
94
|
+
//# sourceMappingURL=codegraph-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codegraph-sync.d.ts","sourceRoot":"","sources":["../../../src/daemon/services/codegraph-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAKtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,iDAAiD;AACjD,eAAO,MAAM,2BAA2B,oCAAoC,CAAC;AAE7E;;;;GAIG;AACH,eAAO,MAAM,uCAAuC,KAAK,CAAC;AAE1D,iFAAiF;AACjF,eAAO,MAAM,mCAAmC,IAAI,CAAC;AAErD;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE7C,sCAAsC;AACtC,MAAM,WAAW,mBAAmB;IAClC,wEAAwE;IACxE,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;IACvB,2EAA2E;IAC3E,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,qDAAqD;IACrD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAM3E;AAcD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,UAAU,GAChB,mBAAmB,CAmErB;AAED,0CAA0C;AAC1C,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE1D"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file codegraph-sync.ts
|
|
3
|
+
* codegraph Phase 3 — daemon-side periodic incremental graph sync.
|
|
4
|
+
*
|
|
5
|
+
* decision 95df9d97 / spec 1112-codegraph-call-graph-spec.md (Phase 3).
|
|
6
|
+
*
|
|
7
|
+
* Keeps the independent codegraph DB (`~/.claude-forge/codegraph.db`) fresh by
|
|
8
|
+
* polling on a `setInterval` cadence and re-extracting ONLY the source files
|
|
9
|
+
* that changed since the last sync.
|
|
10
|
+
*
|
|
11
|
+
* Q3 (user-approved): interval-driven INCREMENTAL rebuild — NO chokidar /
|
|
12
|
+
* fs.watch real-time watcher (most irreversible, deferred). Zero new deps; we
|
|
13
|
+
* reuse the existing daemon `setInterval` + module-level mutex maintenance
|
|
14
|
+
* pattern (mirrors event-ttl-sweep).
|
|
15
|
+
*
|
|
16
|
+
* How "incremental" works
|
|
17
|
+
* -----------------------
|
|
18
|
+
* Cross-file edge resolution needs the whole-repo TypeChecker (an edge's
|
|
19
|
+
* destination may live in another file), so we still build ONE `ts.Program`
|
|
20
|
+
* over `src/` per pass via `buildRepoGraph`. What is incremental is the WRITE:
|
|
21
|
+
* each file's on-disk mtime is diffed against a per-file mtime the service
|
|
22
|
+
* remembers across ticks (seeded from the graph DB's known file set on the
|
|
23
|
+
* first pass), and `replaceFileGraph` is called ONLY for files that are new or
|
|
24
|
+
* whose mtime advanced. Unchanged files' nodes/edges are left untouched.
|
|
25
|
+
*
|
|
26
|
+
* This satisfies the Phase 3 success criterion — "change one source file, wait
|
|
27
|
+
* one sync cycle, that file's nodes update while other files' node rows are
|
|
28
|
+
* untouched (incremental, not full rebuild)". On a no-change tick the pass is a
|
|
29
|
+
* cheap stat scan with zero writes (the graph build still runs to know the file
|
|
30
|
+
* set; the WRITE is what's gated).
|
|
31
|
+
*
|
|
32
|
+
* The mtime memory is daemon-side (a plain `Map` owned by the caller) so this
|
|
33
|
+
* service needs NO new method on the Phase 1 `CodeGraphStore` — it only uses
|
|
34
|
+
* the existing read-only `listFiles()` to seed "already-tracked" files on the
|
|
35
|
+
* very first pass (those are treated as up-to-date until their mtime advances).
|
|
36
|
+
*/
|
|
37
|
+
import { statSync } from 'node:fs';
|
|
38
|
+
import { join } from 'node:path';
|
|
39
|
+
import { buildRepoGraph } from '../../knowledge/repo-map.js';
|
|
40
|
+
/** Config key for the sync cadence (minutes). */
|
|
41
|
+
export const CFG_CODEGRAPH_SYNC_INTERVAL = 'codegraph.sync_interval_minutes';
|
|
42
|
+
/**
|
|
43
|
+
* Default cadence in minutes. The graph only needs to be "reasonably fresh" for
|
|
44
|
+
* pull-style impact queries, and a full-Program parse per pass is non-trivial,
|
|
45
|
+
* so 15 minutes balances freshness against CPU.
|
|
46
|
+
*/
|
|
47
|
+
export const DEFAULT_CODEGRAPH_SYNC_INTERVAL_MINUTES = 15;
|
|
48
|
+
/** Lower bound — sub-minute polling would thrash the TypeChecker for no gain. */
|
|
49
|
+
export const MIN_CODEGRAPH_SYNC_INTERVAL_MINUTES = 1;
|
|
50
|
+
/**
|
|
51
|
+
* Resolve the effective sync interval (minutes) from forge_config, clamped to
|
|
52
|
+
* `MIN_CODEGRAPH_SYNC_INTERVAL_MINUTES`. Exported for tests + daemon wiring.
|
|
53
|
+
*/
|
|
54
|
+
export function resolveSyncIntervalMinutes(configStore) {
|
|
55
|
+
const raw = configStore.get(CFG_CODEGRAPH_SYNC_INTERVAL);
|
|
56
|
+
if (raw === undefined)
|
|
57
|
+
return DEFAULT_CODEGRAPH_SYNC_INTERVAL_MINUTES;
|
|
58
|
+
const n = Number(raw);
|
|
59
|
+
if (!Number.isFinite(n) || n <= 0)
|
|
60
|
+
return DEFAULT_CODEGRAPH_SYNC_INTERVAL_MINUTES;
|
|
61
|
+
return Math.max(MIN_CODEGRAPH_SYNC_INTERVAL_MINUTES, Math.floor(n));
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Read a file's mtime as an ISO string, or `null` if it can't be stat'd
|
|
65
|
+
* (e.g. deleted between the graph build and this read).
|
|
66
|
+
*/
|
|
67
|
+
function readMtime(absPath) {
|
|
68
|
+
try {
|
|
69
|
+
return statSync(absPath).mtime.toISOString();
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Run one incremental codegraph sync pass. Idempotent; safe to call repeatedly.
|
|
77
|
+
*
|
|
78
|
+
* 1. Build the repo graph over `srcDir` (one full Program — required for
|
|
79
|
+
* cross-file edge resolution).
|
|
80
|
+
* 2. Group nodes + edges by their (src-relative) file.
|
|
81
|
+
* 3. For each file: compare on-disk mtime to the cached mtime. Re-run
|
|
82
|
+
* `replaceFileGraph` ONLY when the file is new or its mtime advanced; then
|
|
83
|
+
* update the cache.
|
|
84
|
+
*
|
|
85
|
+
* On the very first pass (empty cache) the graph's already-tracked files
|
|
86
|
+
* (`store.listFiles()`) are seeded into the cache from their on-disk mtime so a
|
|
87
|
+
* fresh daemon doesn't needlessly rewrite an already-built graph. Files NOT yet
|
|
88
|
+
* in the graph are treated as new and get written.
|
|
89
|
+
*
|
|
90
|
+
* @param store the codegraph storage (independent DB).
|
|
91
|
+
* @param srcDir absolute path to `src/`.
|
|
92
|
+
* @param cache per-file mtime memory carried across ticks (mutated in place).
|
|
93
|
+
* @returns a per-file breakdown of what changed.
|
|
94
|
+
*/
|
|
95
|
+
export function syncCodeGraph(store, srcDir, cache) {
|
|
96
|
+
// First pass: seed the cache from files the graph already tracks so we don't
|
|
97
|
+
// rewrite an already-built graph on daemon startup. We seed with the current
|
|
98
|
+
// on-disk mtime (best effort) — if a file changed while the daemon was down
|
|
99
|
+
// its mtime won't match a later read only if it changes again, but the graph
|
|
100
|
+
// was built from that same content, so treating it as up-to-date is correct.
|
|
101
|
+
if (cache.size === 0) {
|
|
102
|
+
for (const file of store.listFiles()) {
|
|
103
|
+
const m = readMtime(join(srcDir, file));
|
|
104
|
+
if (m)
|
|
105
|
+
cache.set(file, m);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const { nodes, edges } = buildRepoGraph(srcDir);
|
|
109
|
+
// Group by file so we can replace per-file (the store resolves cross-file
|
|
110
|
+
// edge destinations against whatever nodes already exist in the DB).
|
|
111
|
+
const nodesByFile = new Map();
|
|
112
|
+
for (const n of nodes) {
|
|
113
|
+
const arr = nodesByFile.get(n.file) ?? [];
|
|
114
|
+
arr.push(n);
|
|
115
|
+
nodesByFile.set(n.file, arr);
|
|
116
|
+
}
|
|
117
|
+
const edgesByFile = new Map();
|
|
118
|
+
for (const e of edges) {
|
|
119
|
+
const arr = edgesByFile.get(e.srcFile) ?? [];
|
|
120
|
+
arr.push(e);
|
|
121
|
+
edgesByFile.set(e.srcFile, arr);
|
|
122
|
+
}
|
|
123
|
+
const changedFiles = [];
|
|
124
|
+
let unchangedCount = 0;
|
|
125
|
+
for (const [file, fileNodes] of nodesByFile) {
|
|
126
|
+
const diskMtime = readMtime(join(srcDir, file));
|
|
127
|
+
const prevMtime = cache.get(file);
|
|
128
|
+
// New file (not in cache) OR mtime advanced / unknown → rewrite.
|
|
129
|
+
const changed = prevMtime === undefined || diskMtime === null || diskMtime !== prevMtime;
|
|
130
|
+
if (!changed) {
|
|
131
|
+
unchangedCount += 1;
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
store.replaceFileGraph(file, fileNodes, edgesByFile.get(file) ?? [], {
|
|
135
|
+
mtime: diskMtime ?? undefined,
|
|
136
|
+
lang: 'ts',
|
|
137
|
+
});
|
|
138
|
+
if (diskMtime)
|
|
139
|
+
cache.set(file, diskMtime);
|
|
140
|
+
changedFiles.push(file);
|
|
141
|
+
}
|
|
142
|
+
// Files we were tracking that no longer produce nodes (deleted / emptied).
|
|
143
|
+
// We leave their graph rows as-is this pass — pruning deleted files is a
|
|
144
|
+
// separate concern (other files may still resolve edges into them); recorded
|
|
145
|
+
// here for the caller's log + left as a follow-up TODO.
|
|
146
|
+
const liveFiles = new Set(nodesByFile.keys());
|
|
147
|
+
const staleFiles = [...cache.keys()].filter((f) => !liveFiles.has(f));
|
|
148
|
+
return {
|
|
149
|
+
changedFiles,
|
|
150
|
+
unchangedCount,
|
|
151
|
+
staleFiles,
|
|
152
|
+
scannedCount: nodesByFile.size,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/** Resolve `src/` from a project root. */
|
|
156
|
+
export function srcDirFromRoot(projectRoot) {
|
|
157
|
+
return join(projectRoot, 'src');
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=codegraph-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codegraph-sync.js","sourceRoot":"","sources":["../../../src/daemon/services/codegraph-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,6 +51,20 @@ export declare const DECISION_MAKER_COOLDOWN_CONFIG_KEY = "decision_maker_cooldo
|
|
|
51
51
|
export declare const DEFAULT_DECISION_MAKER_COOLDOWN_SECONDS = 60;
|
|
52
52
|
/** Hard upper bound for the cooldown override (1 hour). */
|
|
53
53
|
export declare const MAX_DECISION_MAKER_COOLDOWN_SECONDS = 3600;
|
|
54
|
+
/**
|
|
55
|
+
* Tool names that represent a sub-agent spawn in the `events` table.
|
|
56
|
+
*
|
|
57
|
+
* Bug P1 (decision e888352d, 2026-06-10): current Claude Code emits agent
|
|
58
|
+
* spawns with `tool_name='Agent'` (live DB: 982 'Agent' rows vs 0 'Task'),
|
|
59
|
+
* while older CC builds used `tool_name='Task'`. Any decision-flow lookup that
|
|
60
|
+
* keys off "was decision-maker spawned" MUST accept both, or it becomes a dud
|
|
61
|
+
* that silently never fires. Centralised here so the cooldown gate
|
|
62
|
+
* (isWithinDecisionMakerCoolDown) and the CLI approve-trace lookup
|
|
63
|
+
* (findRecentDecisionMakerSpawn) stay in lock-step.
|
|
64
|
+
*/
|
|
65
|
+
export declare const AGENT_SPAWN_TOOL_NAMES: readonly string[];
|
|
66
|
+
/** True when `tool_name` denotes a sub-agent spawn (Agent | Task). */
|
|
67
|
+
export declare function isAgentSpawnToolName(tool_name: string | null | undefined): boolean;
|
|
54
68
|
/**
|
|
55
69
|
* Returns true when the prompt appears to be daemon-injected content
|
|
56
70
|
* rather than a genuine user message. Guards against G9 false positives
|
|
@@ -63,6 +77,29 @@ export declare function isSystemGeneratedPrompt(prompt: string): boolean;
|
|
|
63
77
|
* bmad-question-default's "直接修" / "skip" escapes).
|
|
64
78
|
*/
|
|
65
79
|
export declare function isSkipDecisionKeyword(prompt: string): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Returns true when the prompt is a trivial mint trigger that should NOT
|
|
82
|
+
* produce a [DECISION HINT] / advisory decision row (decision f61b8a0c,
|
|
83
|
+
* audit #6 — "收紧 mint 启发式,治 advisory 空转").
|
|
84
|
+
*
|
|
85
|
+
* The UserPromptSubmit mint heuristic was too loose: with
|
|
86
|
+
* `DEFAULT_TRIGGER_LEN=0` every non-noise prompt minted an advisory row, so
|
|
87
|
+
* pure-image (no-text) prompts, lone punctuation, and bare inspection commands
|
|
88
|
+
* (`list`, `?`, `...`) produced advisory rows that never advanced — pure
|
|
89
|
+
*空转. This guard filters those before the row is written.
|
|
90
|
+
*
|
|
91
|
+
* Conservative by design — it only fires for prompts with no real decision
|
|
92
|
+
* content:
|
|
93
|
+
* 1. Empty / whitespace-only (pure image with no accompanying text).
|
|
94
|
+
* 2. No alphanumeric/CJK content at all (lone punctuation/symbols: `?`,
|
|
95
|
+
* `...`, `???`).
|
|
96
|
+
* 3. A bare inspection/listing command word (see BARE_INSPECTION_COMMAND_RE).
|
|
97
|
+
*
|
|
98
|
+
* It deliberately does NOT fire on short-but-actionable prompts (`rebase`,
|
|
99
|
+
* `fix lint`, `cd ..`) — those still mint. The existing `isLikelyTrivial`
|
|
100
|
+
* guard (approvals/continuations) remains and is complementary.
|
|
101
|
+
*/
|
|
102
|
+
export declare function isTrivialTrigger(prompt: string): boolean;
|
|
66
103
|
/**
|
|
67
104
|
* Resolve the effective TRIGGER_LEN from forge_config or use the default.
|
|
68
105
|
* Used by UserPromptHandler (Step 4.5) to pass into emitDecisionHintSimple.
|
|
@@ -116,7 +153,10 @@ export interface DecisionHintResult {
|
|
|
116
153
|
* 3. system-generated prompt (G9 fix)
|
|
117
154
|
*
|
|
118
155
|
* When all guards pass:
|
|
119
|
-
* 1. Writes a `decisions` row (status='
|
|
156
|
+
* 1. Writes a `decisions` row (status='advisory' — decision 93e8fff1) to the
|
|
157
|
+
* DB (fail-silent). Advisory is pure bookkeeping in the post-interceptor
|
|
158
|
+
* model (decision 7c924678): it blocks nothing and the Web page renders it
|
|
159
|
+
* without a 批准 button. The status default lives in writeDecision.
|
|
120
160
|
* 2. Returns `{ message, decision_id }` — UserPromptHandler splices
|
|
121
161
|
* `decision_id: <id>` into the systemMessage
|
|
122
162
|
*
|
|
@@ -189,15 +229,12 @@ export declare function isContinuation(prompt: string, recentResolved: Array<{
|
|
|
189
229
|
/**
|
|
190
230
|
* Formats the hint message body. Kept separate for unit-test readability.
|
|
191
231
|
*
|
|
192
|
-
*
|
|
193
|
-
*
|
|
194
|
-
*
|
|
195
|
-
*
|
|
196
|
-
*
|
|
197
|
-
*
|
|
198
|
-
*
|
|
199
|
-
* Output contains `[DECISION HINT]` prefix so CLAUDE.md rule can detect it
|
|
200
|
-
* and enforce the spawn (R2 mitigation in spec 1702 § 9).
|
|
232
|
+
* Compressed template (decision ed98c8e8, 2026-06-10): the old 38-line
|
|
233
|
+
* version re-taught the decision-maker 5-step workflow on EVERY hint —
|
|
234
|
+
* pure duplication of the CLAUDE.md "DECISION HINT 协议契约" section
|
|
235
|
+
* (the single authoritative text). Kept: `[DECISION HINT]` marker,
|
|
236
|
+
* copy-paste Task command, model suggestion, `<!-- decision-id -->`
|
|
237
|
+
* magic comment, one-line bypass.
|
|
201
238
|
*/
|
|
202
239
|
export declare function formatHintMessage(workflowType: string, suggestedAgent: string, intentSummary: string, decision_id: string | null): string;
|
|
203
240
|
//# sourceMappingURL=decision-hint.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-hint.d.ts","sourceRoot":"","sources":["../../../src/daemon/services/decision-hint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAGlE;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,gEAAgE;AAChE,eAAO,MAAM,sBAAsB,yBAAyB,CAAC;AAE7D;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kCAAkC,oCAAoC,CAAC;AAEpF,+EAA+E;AAC/E,eAAO,MAAM,uCAAuC,KAAK,CAAC;AAE1D,2DAA2D;AAC3D,eAAO,MAAM,mCAAmC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"decision-hint.d.ts","sourceRoot":"","sources":["../../../src/daemon/services/decision-hint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAGlE;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,gEAAgE;AAChE,eAAO,MAAM,sBAAsB,yBAAyB,CAAC;AAE7D;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kCAAkC,oCAAoC,CAAC;AAEpF,+EAA+E;AAC/E,eAAO,MAAM,uCAAuC,KAAK,CAAC;AAE1D,2DAA2D;AAC3D,eAAO,MAAM,mCAAmC,OAAO,CAAC;AAKxD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,sBAAsB,EAAE,SAAS,MAAM,EAA+B,CAAC;AAEpF,sEAAsE;AACtE,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAElF;AA6BD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAG/D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE7D;AAmBD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAUxD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,GAAG,MAAM,CAYxE;AAED;;;;;;;;GAQG;AACH,wBAAgB,mCAAmC,CACjD,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,GAC7B,MAAM,CAiBR;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACrC,aAAa,EAAE,MAAM,EACrB,KAAK,GAAE,MAAmB,GACzB,OAAO,CA4BT;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,UAAU,GAAE,MAA4B,EACxC,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,EAC9B,YAAY,CAAC,EAAE;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,GACP,kBAAkB,GAAG,IAAI,CA6I3B;AA2BD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAqBlD;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,sBAAsB,QAAiB,CAAC;AACrD,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAM3C,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,EACrF,KAAK,GAAE,MAAmB,GACzB,OAAO,CAeT;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB,MAAM,CAwBR"}
|
|
@@ -54,6 +54,22 @@ export const DEFAULT_DECISION_MAKER_COOLDOWN_SECONDS = 60;
|
|
|
54
54
|
export const MAX_DECISION_MAKER_COOLDOWN_SECONDS = 3600;
|
|
55
55
|
/** Max chars to include in the hint intent summary. */
|
|
56
56
|
const HINT_SUMMARY_MAX = 150;
|
|
57
|
+
/**
|
|
58
|
+
* Tool names that represent a sub-agent spawn in the `events` table.
|
|
59
|
+
*
|
|
60
|
+
* Bug P1 (decision e888352d, 2026-06-10): current Claude Code emits agent
|
|
61
|
+
* spawns with `tool_name='Agent'` (live DB: 982 'Agent' rows vs 0 'Task'),
|
|
62
|
+
* while older CC builds used `tool_name='Task'`. Any decision-flow lookup that
|
|
63
|
+
* keys off "was decision-maker spawned" MUST accept both, or it becomes a dud
|
|
64
|
+
* that silently never fires. Centralised here so the cooldown gate
|
|
65
|
+
* (isWithinDecisionMakerCoolDown) and the CLI approve-trace lookup
|
|
66
|
+
* (findRecentDecisionMakerSpawn) stay in lock-step.
|
|
67
|
+
*/
|
|
68
|
+
export const AGENT_SPAWN_TOOL_NAMES = ['Agent', 'Task'];
|
|
69
|
+
/** True when `tool_name` denotes a sub-agent spawn (Agent | Task). */
|
|
70
|
+
export function isAgentSpawnToolName(tool_name) {
|
|
71
|
+
return AGENT_SPAWN_TOOL_NAMES.includes(tool_name ?? '');
|
|
72
|
+
}
|
|
57
73
|
/**
|
|
58
74
|
* Pattern for system-generated prompt prefixes (G9 fix).
|
|
59
75
|
*
|
|
@@ -97,6 +113,57 @@ export function isSystemGeneratedPrompt(prompt) {
|
|
|
97
113
|
export function isSkipDecisionKeyword(prompt) {
|
|
98
114
|
return /skip\s+decision/i.test(prompt);
|
|
99
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Bare inspection / listing command words (decision f61b8a0c, audit #6).
|
|
118
|
+
*
|
|
119
|
+
* A prompt consisting of ONLY one of these words (optionally with trailing
|
|
120
|
+
* punctuation) carries zero decision content — it is a pure listing/status
|
|
121
|
+
* inspection the main thread answers directly. These slip past
|
|
122
|
+
* `isLikelyTrivial` (whose keyword set targets approvals/continuations, not
|
|
123
|
+
* inspection verbs), so they minted advisory rows that never advanced.
|
|
124
|
+
*
|
|
125
|
+
* Kept intentionally narrow: only EXACT single-word matches, so substantive
|
|
126
|
+
* short prompts that merely start with one of these (e.g. `list the failing
|
|
127
|
+
* tests and fix them`) still mint. Existing must-mint fixtures (`rebase`,
|
|
128
|
+
* `fix lint`, `cd ..`, `short`) are not in this set.
|
|
129
|
+
*/
|
|
130
|
+
const BARE_INSPECTION_COMMAND_RE = /^(list|ls|pwd|dir|status|help|cat|tree|env|ps|top|clear|cls|history)[\s.!?。!?]*$/i;
|
|
131
|
+
/**
|
|
132
|
+
* Returns true when the prompt is a trivial mint trigger that should NOT
|
|
133
|
+
* produce a [DECISION HINT] / advisory decision row (decision f61b8a0c,
|
|
134
|
+
* audit #6 — "收紧 mint 启发式,治 advisory 空转").
|
|
135
|
+
*
|
|
136
|
+
* The UserPromptSubmit mint heuristic was too loose: with
|
|
137
|
+
* `DEFAULT_TRIGGER_LEN=0` every non-noise prompt minted an advisory row, so
|
|
138
|
+
* pure-image (no-text) prompts, lone punctuation, and bare inspection commands
|
|
139
|
+
* (`list`, `?`, `...`) produced advisory rows that never advanced — pure
|
|
140
|
+
*空转. This guard filters those before the row is written.
|
|
141
|
+
*
|
|
142
|
+
* Conservative by design — it only fires for prompts with no real decision
|
|
143
|
+
* content:
|
|
144
|
+
* 1. Empty / whitespace-only (pure image with no accompanying text).
|
|
145
|
+
* 2. No alphanumeric/CJK content at all (lone punctuation/symbols: `?`,
|
|
146
|
+
* `...`, `???`).
|
|
147
|
+
* 3. A bare inspection/listing command word (see BARE_INSPECTION_COMMAND_RE).
|
|
148
|
+
*
|
|
149
|
+
* It deliberately does NOT fire on short-but-actionable prompts (`rebase`,
|
|
150
|
+
* `fix lint`, `cd ..`) — those still mint. The existing `isLikelyTrivial`
|
|
151
|
+
* guard (approvals/continuations) remains and is complementary.
|
|
152
|
+
*/
|
|
153
|
+
export function isTrivialTrigger(prompt) {
|
|
154
|
+
const trimmed = (prompt ?? '').trim();
|
|
155
|
+
// 1. Empty / whitespace-only → pure image or no-text prompt.
|
|
156
|
+
if (trimmed.length === 0)
|
|
157
|
+
return true;
|
|
158
|
+
// 2. No word-content at all (only punctuation / symbols / emoji).
|
|
159
|
+
// \p{L} = any letter (covers CJK), \p{N} = any number.
|
|
160
|
+
if (!/[\p{L}\p{N}]/u.test(trimmed))
|
|
161
|
+
return true;
|
|
162
|
+
// 3. Bare inspection/listing command word (no decision content).
|
|
163
|
+
if (BARE_INSPECTION_COMMAND_RE.test(trimmed))
|
|
164
|
+
return true;
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
100
167
|
/**
|
|
101
168
|
* Resolve the effective TRIGGER_LEN from forge_config or use the default.
|
|
102
169
|
* Used by UserPromptHandler (Step 4.5) to pass into emitDecisionHintSimple.
|
|
@@ -179,7 +246,12 @@ export function isWithinDecisionMakerCoolDown(storage, session_id, windowSeconds
|
|
|
179
246
|
limit: 200,
|
|
180
247
|
});
|
|
181
248
|
for (const ev of rows) {
|
|
182
|
-
|
|
249
|
+
// Bug P1 (decision e888352d, 2026-06-10) — agent-spawn events now arrive
|
|
250
|
+
// as tool_name='Agent' under current Claude Code (DB live: 982 'Agent'
|
|
251
|
+
// vs 0 'Task'); older CC used 'Task'. Accept BOTH so the cooldown gate
|
|
252
|
+
// is not a dud (previously it was silently never triggering, masked only
|
|
253
|
+
// by the 1h active-pending window). See isAgentSpawnToolName.
|
|
254
|
+
if (!isAgentSpawnToolName(ev.tool_name))
|
|
183
255
|
continue;
|
|
184
256
|
const input = (ev.tool_input ?? {});
|
|
185
257
|
const sub = typeof input['subagent_type'] === 'string' ? input['subagent_type'] : '';
|
|
@@ -202,7 +274,10 @@ export function isWithinDecisionMakerCoolDown(storage, session_id, windowSeconds
|
|
|
202
274
|
* 3. system-generated prompt (G9 fix)
|
|
203
275
|
*
|
|
204
276
|
* When all guards pass:
|
|
205
|
-
* 1. Writes a `decisions` row (status='
|
|
277
|
+
* 1. Writes a `decisions` row (status='advisory' — decision 93e8fff1) to the
|
|
278
|
+
* DB (fail-silent). Advisory is pure bookkeeping in the post-interceptor
|
|
279
|
+
* model (decision 7c924678): it blocks nothing and the Web page renders it
|
|
280
|
+
* without a 批准 button. The status default lives in writeDecision.
|
|
206
281
|
* 2. Returns `{ message, decision_id }` — UserPromptHandler splices
|
|
207
282
|
* `decision_id: <id>` into the systemMessage
|
|
208
283
|
*
|
|
@@ -217,6 +292,16 @@ export function emitDecisionHintSimple(prompt, triggerLen = DEFAULT_TRIGGER_LEN,
|
|
|
217
292
|
// Guard: bypass keyword → respect user's wish.
|
|
218
293
|
if (isSkipDecisionKeyword(prompt))
|
|
219
294
|
return null;
|
|
295
|
+
// decision f61b8a0c (audit #6) — trivial-trigger filter. Drop pure-image /
|
|
296
|
+
// no-text prompts, lone punctuation, and bare inspection commands (`list`,
|
|
297
|
+
// `?`, `...`) BEFORE any DB write so they don't mint空转 advisory rows.
|
|
298
|
+
// Conservative: short-but-actionable prompts (`rebase`, `fix lint`) still
|
|
299
|
+
// pass. This runs ahead of the cooldown/active-pending lookups so trivial
|
|
300
|
+
// triggers never even touch storage.
|
|
301
|
+
if (isTrivialTrigger(prompt)) {
|
|
302
|
+
logger.debug(`[DecisionHint] gate=trivial-trigger (len=${prompt.trim().length})`);
|
|
303
|
+
return null;
|
|
304
|
+
}
|
|
220
305
|
// Guard: short prompts (only enforced if triggerLen > 0; default 0 = always emit).
|
|
221
306
|
if (triggerLen > 0 && prompt.length < triggerLen)
|
|
222
307
|
return null;
|
|
@@ -304,7 +389,6 @@ export function emitDecisionHintSimple(prompt, triggerLen = DEFAULT_TRIGGER_LEN,
|
|
|
304
389
|
project_path: eventContext.project_path,
|
|
305
390
|
trigger_event_id: eventContext.event_id ?? null,
|
|
306
391
|
trigger_prompt: prompt,
|
|
307
|
-
workflow_type: 'pending', // LLM will classify; daemon no longer pre-classifies
|
|
308
392
|
suggested_agent: 'decision-maker',
|
|
309
393
|
});
|
|
310
394
|
logger.debug(`[DecisionHint] wrote decision row id=${decision_id}`);
|
|
@@ -313,7 +397,9 @@ export function emitDecisionHintSimple(prompt, triggerLen = DEFAULT_TRIGGER_LEN,
|
|
|
313
397
|
logger.warn(`[DecisionHint] failed to write decision row (skipped): ${err}`);
|
|
314
398
|
}
|
|
315
399
|
}
|
|
316
|
-
|
|
400
|
+
// formatHintMessage's first arg (workflowType) is display-only; the row
|
|
401
|
+
// itself is minted 'advisory' by writeDecision (decision 93e8fff1).
|
|
402
|
+
const message = formatHintMessage('advisory', 'decision-maker', summary, decision_id);
|
|
317
403
|
return { message, decision_id };
|
|
318
404
|
}
|
|
319
405
|
/**
|
|
@@ -440,36 +526,25 @@ export function isContinuation(prompt, recentResolved, nowMs = Date.now()) {
|
|
|
440
526
|
/**
|
|
441
527
|
* Formats the hint message body. Kept separate for unit-test readability.
|
|
442
528
|
*
|
|
443
|
-
*
|
|
444
|
-
*
|
|
445
|
-
*
|
|
446
|
-
*
|
|
447
|
-
*
|
|
448
|
-
*
|
|
449
|
-
*
|
|
450
|
-
* Output contains `[DECISION HINT]` prefix so CLAUDE.md rule can detect it
|
|
451
|
-
* and enforce the spawn (R2 mitigation in spec 1702 § 9).
|
|
529
|
+
* Compressed template (decision ed98c8e8, 2026-06-10): the old 38-line
|
|
530
|
+
* version re-taught the decision-maker 5-step workflow on EVERY hint —
|
|
531
|
+
* pure duplication of the CLAUDE.md "DECISION HINT 协议契约" section
|
|
532
|
+
* (the single authoritative text). Kept: `[DECISION HINT]` marker,
|
|
533
|
+
* copy-paste Task command, model suggestion, `<!-- decision-id -->`
|
|
534
|
+
* magic comment, one-line bypass.
|
|
452
535
|
*/
|
|
453
536
|
export function formatHintMessage(workflowType, suggestedAgent, intentSummary, decision_id) {
|
|
454
537
|
const suggestedModel = isLikelyTrivial(intentSummary) ? 'haiku' : 'sonnet';
|
|
455
538
|
const lines = [
|
|
456
539
|
'[DECISION HINT]',
|
|
457
540
|
'',
|
|
458
|
-
`daemon
|
|
459
|
-
|
|
541
|
+
`daemon 判定本 prompt 值得决策。主线程第一动作:spawn \`decision-maker\``,
|
|
542
|
+
`(完整链路见 CLAUDE.md「DECISION HINT 协议契约」节):`,
|
|
460
543
|
'',
|
|
461
544
|
`Task tool subagent_type='decision-maker' with prompt: "${intentSummary}"`,
|
|
462
545
|
'',
|
|
463
|
-
|
|
464
|
-
` 1. 查 KB 理解项目背景`,
|
|
465
|
-
` 2. 读 skill catalog,选 1-3 个相关 skill`,
|
|
466
|
-
` 3. 读 agent catalog,选推荐 implementation agent`,
|
|
467
|
-
` 4. 列 2-3 方案 + pros/cons + LOC 估算`,
|
|
468
|
-
` 5. cf decisions update 持久化方案 + 推荐 agent/skill`,
|
|
469
|
-
'',
|
|
470
|
-
`建议 model:\`${suggestedModel}\`(trivial 用 haiku 加速,complex 用 sonnet 保质)`,
|
|
546
|
+
`建议 model:\`${suggestedModel}\`(trivial 用 haiku,complex 用 sonnet);原推荐 agent: \`${suggestedAgent}\``,
|
|
471
547
|
`如果已经知道要做什么,直接告知并忽略本提示即可。`,
|
|
472
|
-
`原推荐 agent: \`${suggestedAgent}\``,
|
|
473
548
|
];
|
|
474
549
|
if (decision_id) {
|
|
475
550
|
lines.push('');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-hint.js","sourceRoot":"","sources":["../../../src/daemon/services/decision-hint.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"decision-hint.js","sourceRoot":"","sources":["../../../src/daemon/services/decision-hint.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-ttl-sweep.d.ts","sourceRoot":"","sources":["../../../src/daemon/services/event-ttl-sweep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;
|
|
1
|
+
{"version":3,"file":"event-ttl-sweep.d.ts","sourceRoot":"","sources":["../../../src/daemon/services/event-ttl-sweep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iFAAiF;IACjF,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,gBAAgB,EAAE,MAAM,CAAC;IACzB,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,2EAA2E;AAC3E,eAAO,MAAM,cAAc,QAAS,CAAC;AAErC,yCAAyC;AACzC,eAAO,MAAM,YAAY,yBAAyB,CAAC;AACnD,eAAO,MAAM,YAAY,yBAAyB,CAAC;AACnD,eAAO,MAAM,kBAAkB,gCAAgC,CAAC;AAEhE,iEAAiE;AACjE,eAAO,MAAM,QAAQ;;;;CAIX,CAAC;AAWX;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,GAAE,WAAgB,GAAG;IACpF,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB,CAeA;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,WAAW,EACxB,IAAI,GAAE,WAAgB,GACrB,WAAW,CAwCb"}
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
* untouched here, surviving as the post-TTL fallback for rule audits.
|
|
31
31
|
*/
|
|
32
32
|
import { logger } from '../../core/utils/logger.js';
|
|
33
|
+
import { DAY_MS } from '../../core/utils/time.js';
|
|
33
34
|
/** Default rows-per-pass cap. Tuned to ~few-seconds writer-lock budget. */
|
|
34
35
|
export const SWEEP_MAX_ROWS = 10_000;
|
|
35
36
|
/** Config keys this service consults. */
|
|
@@ -83,8 +84,8 @@ export function resolveSweepConfig(configStore, opts = {}) {
|
|
|
83
84
|
export function sweepEventTtl(storage, configStore, opts = {}) {
|
|
84
85
|
const { warmTtlDays, coldTtlDays, maxRowsPerPass } = resolveSweepConfig(configStore, opts);
|
|
85
86
|
const now = Date.now();
|
|
86
|
-
const warmCutoff = new Date(now - warmTtlDays *
|
|
87
|
-
const coldCutoff = new Date(now - coldTtlDays *
|
|
87
|
+
const warmCutoff = new Date(now - warmTtlDays * DAY_MS).toISOString();
|
|
88
|
+
const coldCutoff = new Date(now - coldTtlDays * DAY_MS).toISOString();
|
|
88
89
|
// Cold first: DELETE row + task_events orphans.
|
|
89
90
|
let coldDeleted = 0;
|
|
90
91
|
let taskEventsPruned = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-ttl-sweep.js","sourceRoot":"","sources":["../../../src/daemon/services/event-ttl-sweep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"event-ttl-sweep.js","sourceRoot":"","sources":["../../../src/daemon/services/event-ttl-sweep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AA0BlD,2EAA2E;AAC3E,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AAErC,yCAAyC;AACzC,MAAM,CAAC,MAAM,YAAY,GAAG,sBAAsB,CAAC;AACnD,MAAM,CAAC,MAAM,YAAY,GAAG,sBAAsB,CAAC;AACnD,MAAM,CAAC,MAAM,kBAAkB,GAAG,6BAA6B,CAAC;AAEhE,iEAAiE;AACjE,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,EAAE;IACf,kBAAkB,EAAE,CAAC;CACb,CAAC;AAEX,2FAA2F;AAC3F,SAAS,aAAa,CAAC,WAAwB,EAAE,GAAW,EAAE,QAAgB;IAC5E,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACvC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IAClD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAwB,EAAE,OAAoB,EAAE;IAKjF,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,IAAI,aAAa,CAAC,WAAW,EAAE,YAAY,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IAChG,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,IAAI,aAAa,CAAC,WAAW,EAAE,YAAY,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC9F,+EAA+E;IAC/E,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CACT,6BAA6B,IAAI,sBAAsB,IAAI,2BAA2B,CACvF,CAAC;QACF,IAAI,GAAG,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,IAAI;QACjB,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,cAAc;KACtD,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAsB,EACtB,WAAwB,EACxB,OAAoB,EAAE;IAEtB,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAC3F,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,WAAW,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IACtE,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,WAAW,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAEtE,gDAAgD;IAChD,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QACnE,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;QACvB,gBAAgB,GAAG,CAAC,CAAC,UAAU,CAAC;IAClC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,wEAAwE;IACxE,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,CAAC;QACH,UAAU,GAAG,OAAO,CAAC,oBAAoB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,gEAAgE;IAChE,EAAE;IACF,2EAA2E;IAC3E,yEAAyE;IACzE,wEAAwE;IACxE,2CAA2C;IAC3C,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,CAAC;QACH,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,yCAAyC,GAAG,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,WAAW,GAAG,WAAW,IAAI,cAAc,IAAI,UAAU,IAAI,cAAc,CAAC;IAClF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC;AACpF,CAAC"}
|