@soleri/core 9.0.4 → 9.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/brain/intelligence.d.ts +27 -0
- package/dist/brain/intelligence.d.ts.map +1 -1
- package/dist/brain/intelligence.js +160 -14
- package/dist/brain/intelligence.js.map +1 -1
- package/dist/brain/learning-radar.d.ts +4 -0
- package/dist/brain/learning-radar.d.ts.map +1 -1
- package/dist/brain/learning-radar.js +20 -1
- package/dist/brain/learning-radar.js.map +1 -1
- package/dist/brain/strength-scorer.d.ts +31 -0
- package/dist/brain/strength-scorer.d.ts.map +1 -0
- package/dist/brain/strength-scorer.js +264 -0
- package/dist/brain/strength-scorer.js.map +1 -0
- package/dist/chat/agent-loop.d.ts.map +1 -1
- package/dist/chat/agent-loop.js +2 -0
- package/dist/chat/agent-loop.js.map +1 -1
- package/dist/chat/notifications.d.ts.map +1 -1
- package/dist/chat/notifications.js +2 -0
- package/dist/chat/notifications.js.map +1 -1
- package/dist/claudemd/compose.js +1 -1
- package/dist/claudemd/compose.js.map +1 -1
- package/dist/control/intent-router.d.ts.map +1 -1
- package/dist/control/intent-router.js +12 -4
- package/dist/control/intent-router.js.map +1 -1
- package/dist/curator/contradiction-detector.d.ts +27 -0
- package/dist/curator/contradiction-detector.d.ts.map +1 -0
- package/dist/curator/contradiction-detector.js +62 -0
- package/dist/curator/contradiction-detector.js.map +1 -0
- package/dist/curator/curator.d.ts +3 -4
- package/dist/curator/curator.d.ts.map +1 -1
- package/dist/curator/curator.js +90 -525
- package/dist/curator/curator.js.map +1 -1
- package/dist/curator/duplicate-detector.d.ts +14 -0
- package/dist/curator/duplicate-detector.d.ts.map +1 -0
- package/dist/curator/duplicate-detector.js +77 -0
- package/dist/curator/duplicate-detector.js.map +1 -0
- package/dist/curator/health-audit.d.ts +15 -0
- package/dist/curator/health-audit.d.ts.map +1 -0
- package/dist/curator/health-audit.js +97 -0
- package/dist/curator/health-audit.js.map +1 -0
- package/dist/curator/metadata-enricher.d.ts +17 -0
- package/dist/curator/metadata-enricher.d.ts.map +1 -0
- package/dist/curator/metadata-enricher.js +60 -0
- package/dist/curator/metadata-enricher.js.map +1 -0
- package/dist/curator/schema.d.ts +7 -0
- package/dist/curator/schema.d.ts.map +1 -0
- package/dist/curator/schema.js +62 -0
- package/dist/curator/schema.js.map +1 -0
- package/dist/curator/tag-manager.d.ts +36 -0
- package/dist/curator/tag-manager.d.ts.map +1 -0
- package/dist/curator/tag-manager.js +78 -0
- package/dist/curator/tag-manager.js.map +1 -0
- package/dist/engine/bin/soleri-engine.js +24 -3
- package/dist/engine/bin/soleri-engine.js.map +1 -1
- package/dist/engine/core-ops.d.ts.map +1 -1
- package/dist/engine/core-ops.js +23 -8
- package/dist/engine/core-ops.js.map +1 -1
- package/dist/engine/module-manifest.d.ts.map +1 -1
- package/dist/engine/module-manifest.js +22 -2
- package/dist/engine/module-manifest.js.map +1 -1
- package/dist/engine/register-engine.d.ts.map +1 -1
- package/dist/engine/register-engine.js +26 -2
- package/dist/engine/register-engine.js.map +1 -1
- package/dist/errors/retry.d.ts.map +1 -1
- package/dist/errors/retry.js +2 -0
- package/dist/errors/retry.js.map +1 -1
- package/dist/facades/types.d.ts +1 -1
- package/dist/flows/chain-types.d.ts +18 -18
- package/dist/flows/gate-evaluator.d.ts.map +1 -1
- package/dist/flows/gate-evaluator.js +22 -0
- package/dist/flows/gate-evaluator.js.map +1 -1
- package/dist/flows/types.d.ts +157 -28
- package/dist/flows/types.d.ts.map +1 -1
- package/dist/flows/types.js +4 -0
- package/dist/flows/types.js.map +1 -1
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/intake/intake-pipeline.d.ts.map +1 -1
- package/dist/intake/intake-pipeline.js +1 -0
- package/dist/intake/intake-pipeline.js.map +1 -1
- package/dist/intake/text-ingester.d.ts.map +1 -1
- package/dist/intake/text-ingester.js +2 -0
- package/dist/intake/text-ingester.js.map +1 -1
- package/dist/llm/key-pool.d.ts +1 -1
- package/dist/llm/key-pool.d.ts.map +1 -1
- package/dist/llm/key-pool.js +3 -4
- package/dist/llm/key-pool.js.map +1 -1
- package/dist/llm/utils.d.ts.map +1 -1
- package/dist/llm/utils.js +2 -0
- package/dist/llm/utils.js.map +1 -1
- package/dist/migrations/migration-runner.test-helpers.d.ts +13 -0
- package/dist/migrations/migration-runner.test-helpers.d.ts.map +1 -0
- package/dist/migrations/migration-runner.test-helpers.js +47 -0
- package/dist/migrations/migration-runner.test-helpers.js.map +1 -0
- package/dist/operator/operator-profile.d.ts +44 -0
- package/dist/operator/operator-profile.d.ts.map +1 -0
- package/dist/operator/operator-profile.js +377 -0
- package/dist/operator/operator-profile.js.map +1 -0
- package/dist/operator/operator-signals.d.ts +45 -0
- package/dist/operator/operator-signals.d.ts.map +1 -0
- package/dist/operator/operator-signals.js +228 -0
- package/dist/operator/operator-signals.js.map +1 -0
- package/dist/operator/operator-types.d.ts +360 -0
- package/dist/operator/operator-types.d.ts.map +1 -0
- package/dist/operator/operator-types.js +24 -0
- package/dist/operator/operator-types.js.map +1 -0
- package/dist/packs/types.d.ts +27 -27
- package/dist/paths.d.ts +40 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +98 -0
- package/dist/paths.js.map +1 -0
- package/dist/persistence/index.d.ts +1 -1
- package/dist/persistence/index.d.ts.map +1 -1
- package/dist/persistence/index.js +1 -1
- package/dist/persistence/index.js.map +1 -1
- package/dist/persistence/sqlite-provider.d.ts +2 -0
- package/dist/persistence/sqlite-provider.d.ts.map +1 -1
- package/dist/persistence/sqlite-provider.js +8 -5
- package/dist/persistence/sqlite-provider.js.map +1 -1
- package/dist/planning/evidence-collector.d.ts +13 -1
- package/dist/planning/evidence-collector.d.ts.map +1 -1
- package/dist/planning/evidence-collector.js +33 -0
- package/dist/planning/evidence-collector.js.map +1 -1
- package/dist/planning/gap-analysis.d.ts +5 -4
- package/dist/planning/gap-analysis.d.ts.map +1 -1
- package/dist/planning/gap-analysis.js +7 -341
- package/dist/planning/gap-analysis.js.map +1 -1
- package/dist/planning/gap-passes.d.ts +19 -0
- package/dist/planning/gap-passes.d.ts.map +1 -0
- package/dist/planning/gap-passes.js +157 -0
- package/dist/planning/gap-passes.js.map +1 -0
- package/dist/planning/gap-patterns.d.ts +29 -0
- package/dist/planning/gap-patterns.d.ts.map +1 -0
- package/dist/planning/gap-patterns.js +129 -0
- package/dist/planning/gap-patterns.js.map +1 -0
- package/dist/planning/gap-types.d.ts +1 -1
- package/dist/planning/gap-types.d.ts.map +1 -1
- package/dist/planning/gap-types.js +1 -0
- package/dist/planning/gap-types.js.map +1 -1
- package/dist/planning/github-projection.d.ts +122 -0
- package/dist/planning/github-projection.d.ts.map +1 -0
- package/dist/planning/github-projection.js +294 -0
- package/dist/planning/github-projection.js.map +1 -0
- package/dist/planning/impact-analyzer.d.ts +26 -0
- package/dist/planning/impact-analyzer.d.ts.map +1 -0
- package/dist/planning/impact-analyzer.js +199 -0
- package/dist/planning/impact-analyzer.js.map +1 -0
- package/dist/planning/plan-lifecycle.d.ts +136 -0
- package/dist/planning/plan-lifecycle.d.ts.map +1 -0
- package/dist/planning/plan-lifecycle.js +296 -0
- package/dist/planning/plan-lifecycle.js.map +1 -0
- package/dist/planning/planner-types.d.ts +202 -0
- package/dist/planning/planner-types.d.ts.map +1 -0
- package/dist/planning/planner-types.js +6 -0
- package/dist/planning/planner-types.js.map +1 -0
- package/dist/planning/planner.d.ts +31 -383
- package/dist/planning/planner.d.ts.map +1 -1
- package/dist/planning/planner.js +154 -878
- package/dist/planning/planner.js.map +1 -1
- package/dist/planning/rationalization-detector.d.ts +32 -0
- package/dist/planning/rationalization-detector.d.ts.map +1 -0
- package/dist/planning/rationalization-detector.js +89 -0
- package/dist/planning/rationalization-detector.js.map +1 -0
- package/dist/planning/reconciliation-engine.d.ts +47 -0
- package/dist/planning/reconciliation-engine.d.ts.map +1 -0
- package/dist/planning/reconciliation-engine.js +128 -0
- package/dist/planning/reconciliation-engine.js.map +1 -0
- package/dist/planning/task-verifier.d.ts +85 -0
- package/dist/planning/task-verifier.d.ts.map +1 -0
- package/dist/planning/task-verifier.js +227 -0
- package/dist/planning/task-verifier.js.map +1 -0
- package/dist/plugins/types.d.ts +4 -4
- package/dist/runtime/admin-ops.d.ts +2 -2
- package/dist/runtime/admin-ops.d.ts.map +1 -1
- package/dist/runtime/admin-ops.js +44 -17
- package/dist/runtime/admin-ops.js.map +1 -1
- package/dist/runtime/admin-setup-ops.d.ts.map +1 -1
- package/dist/runtime/admin-setup-ops.js +21 -46
- package/dist/runtime/admin-setup-ops.js.map +1 -1
- package/dist/runtime/archive-ops.d.ts +10 -0
- package/dist/runtime/archive-ops.d.ts.map +1 -0
- package/dist/runtime/archive-ops.js +310 -0
- package/dist/runtime/archive-ops.js.map +1 -0
- package/dist/runtime/capture-ops.d.ts.map +1 -1
- package/dist/runtime/capture-ops.js +42 -7
- package/dist/runtime/capture-ops.js.map +1 -1
- package/dist/runtime/claude-md-helpers.js +1 -1
- package/dist/runtime/claude-md-helpers.js.map +1 -1
- package/dist/runtime/context-health.d.ts +31 -0
- package/dist/runtime/context-health.d.ts.map +1 -0
- package/dist/runtime/context-health.js +57 -0
- package/dist/runtime/context-health.js.map +1 -0
- package/dist/runtime/facades/archive-facade.d.ts +10 -0
- package/dist/runtime/facades/archive-facade.d.ts.map +1 -0
- package/dist/runtime/facades/archive-facade.js +11 -0
- package/dist/runtime/facades/archive-facade.js.map +1 -0
- package/dist/runtime/facades/brain-facade.d.ts.map +1 -1
- package/dist/runtime/facades/brain-facade.js +2 -0
- package/dist/runtime/facades/brain-facade.js.map +1 -1
- package/dist/runtime/facades/chat-facade.d.ts +7 -0
- package/dist/runtime/facades/chat-facade.d.ts.map +1 -1
- package/dist/runtime/facades/chat-facade.js +15 -800
- package/dist/runtime/facades/chat-facade.js.map +1 -1
- package/dist/runtime/facades/chat-service-ops.d.ts +9 -0
- package/dist/runtime/facades/chat-service-ops.d.ts.map +1 -0
- package/dist/runtime/facades/chat-service-ops.js +330 -0
- package/dist/runtime/facades/chat-service-ops.js.map +1 -0
- package/dist/runtime/facades/chat-session-ops.d.ts +8 -0
- package/dist/runtime/facades/chat-session-ops.d.ts.map +1 -0
- package/dist/runtime/facades/chat-session-ops.js +136 -0
- package/dist/runtime/facades/chat-session-ops.js.map +1 -0
- package/dist/runtime/facades/chat-state.d.ts +31 -0
- package/dist/runtime/facades/chat-state.d.ts.map +1 -0
- package/dist/runtime/facades/chat-state.js +32 -0
- package/dist/runtime/facades/chat-state.js.map +1 -0
- package/dist/runtime/facades/chat-transport-ops.d.ts +9 -0
- package/dist/runtime/facades/chat-transport-ops.d.ts.map +1 -0
- package/dist/runtime/facades/chat-transport-ops.js +337 -0
- package/dist/runtime/facades/chat-transport-ops.js.map +1 -0
- package/dist/runtime/facades/control-facade.d.ts.map +1 -1
- package/dist/runtime/facades/control-facade.js +4 -1
- package/dist/runtime/facades/control-facade.js.map +1 -1
- package/dist/runtime/facades/index.d.ts.map +1 -1
- package/dist/runtime/facades/index.js +6 -0
- package/dist/runtime/facades/index.js.map +1 -1
- package/dist/runtime/facades/memory-facade.d.ts.map +1 -1
- package/dist/runtime/facades/memory-facade.js +75 -6
- package/dist/runtime/facades/memory-facade.js.map +1 -1
- package/dist/runtime/facades/operator-facade.d.ts +8 -0
- package/dist/runtime/facades/operator-facade.d.ts.map +1 -0
- package/dist/runtime/facades/operator-facade.js +220 -0
- package/dist/runtime/facades/operator-facade.js.map +1 -0
- package/dist/runtime/facades/orchestrate-facade.js +3 -3
- package/dist/runtime/facades/orchestrate-facade.js.map +1 -1
- package/dist/runtime/facades/plan-facade.d.ts.map +1 -1
- package/dist/runtime/facades/plan-facade.js +39 -6
- package/dist/runtime/facades/plan-facade.js.map +1 -1
- package/dist/runtime/facades/review-facade.d.ts +7 -0
- package/dist/runtime/facades/review-facade.d.ts.map +1 -0
- package/dist/runtime/facades/review-facade.js +8 -0
- package/dist/runtime/facades/review-facade.js.map +1 -0
- package/dist/runtime/facades/sync-facade.d.ts +7 -0
- package/dist/runtime/facades/sync-facade.d.ts.map +1 -0
- package/dist/runtime/facades/sync-facade.js +8 -0
- package/dist/runtime/facades/sync-facade.js.map +1 -0
- package/dist/runtime/facades/vault-facade.d.ts +4 -1
- package/dist/runtime/facades/vault-facade.d.ts.map +1 -1
- package/dist/runtime/facades/vault-facade.js +13 -66
- package/dist/runtime/facades/vault-facade.js.map +1 -1
- package/dist/runtime/github-integration.d.ts +49 -0
- package/dist/runtime/github-integration.d.ts.map +1 -0
- package/dist/runtime/github-integration.js +113 -0
- package/dist/runtime/github-integration.js.map +1 -0
- package/dist/runtime/grading-ops.js +1 -1
- package/dist/runtime/grading-ops.js.map +1 -1
- package/dist/runtime/memory-extra-ops.d.ts.map +1 -1
- package/dist/runtime/memory-extra-ops.js +6 -2
- package/dist/runtime/memory-extra-ops.js.map +1 -1
- package/dist/runtime/orchestrate-ops.d.ts.map +1 -1
- package/dist/runtime/orchestrate-ops.js +367 -40
- package/dist/runtime/orchestrate-ops.js.map +1 -1
- package/dist/runtime/planning-extra-ops.d.ts.map +1 -1
- package/dist/runtime/planning-extra-ops.js +69 -4
- package/dist/runtime/planning-extra-ops.js.map +1 -1
- package/dist/runtime/review-ops.d.ts +10 -0
- package/dist/runtime/review-ops.d.ts.map +1 -0
- package/dist/runtime/review-ops.js +97 -0
- package/dist/runtime/review-ops.js.map +1 -0
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +27 -12
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/session-briefing.d.ts +3 -0
- package/dist/runtime/session-briefing.d.ts.map +1 -1
- package/dist/runtime/session-briefing.js +68 -1
- package/dist/runtime/session-briefing.js.map +1 -1
- package/dist/runtime/sync-ops.d.ts +12 -0
- package/dist/runtime/sync-ops.d.ts.map +1 -0
- package/dist/runtime/sync-ops.js +288 -0
- package/dist/runtime/sync-ops.js.map +1 -0
- package/dist/runtime/types.d.ts +10 -4
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/vault-extra-ops.d.ts +5 -4
- package/dist/runtime/vault-extra-ops.d.ts.map +1 -1
- package/dist/runtime/vault-extra-ops.js +5 -300
- package/dist/runtime/vault-extra-ops.js.map +1 -1
- package/dist/runtime/vault-sharing-ops.d.ts +4 -4
- package/dist/runtime/vault-sharing-ops.d.ts.map +1 -1
- package/dist/runtime/vault-sharing-ops.js +5 -300
- package/dist/runtime/vault-sharing-ops.js.map +1 -1
- package/dist/skills/sync-skills.d.ts +27 -0
- package/dist/skills/sync-skills.d.ts.map +1 -0
- package/dist/skills/sync-skills.js +81 -0
- package/dist/skills/sync-skills.js.map +1 -0
- package/dist/update-check.d.ts +14 -0
- package/dist/update-check.d.ts.map +1 -0
- package/dist/update-check.js +96 -0
- package/dist/update-check.js.map +1 -0
- package/dist/vault/linking.d.ts +10 -12
- package/dist/vault/linking.d.ts.map +1 -1
- package/dist/vault/linking.js +104 -161
- package/dist/vault/linking.js.map +1 -1
- package/dist/vault/vault-entries.d.ts +69 -0
- package/dist/vault/vault-entries.d.ts.map +1 -0
- package/dist/vault/vault-entries.js +257 -0
- package/dist/vault/vault-entries.js.map +1 -0
- package/dist/vault/vault-interfaces.d.ts +153 -0
- package/dist/vault/vault-interfaces.d.ts.map +1 -0
- package/dist/vault/vault-interfaces.js +2 -0
- package/dist/vault/vault-interfaces.js.map +1 -0
- package/dist/vault/vault-maintenance.d.ts +40 -0
- package/dist/vault/vault-maintenance.d.ts.map +1 -0
- package/dist/vault/vault-maintenance.js +142 -0
- package/dist/vault/vault-maintenance.js.map +1 -0
- package/dist/vault/vault-markdown-sync.d.ts +22 -0
- package/dist/vault/vault-markdown-sync.d.ts.map +1 -0
- package/dist/vault/vault-markdown-sync.js +143 -0
- package/dist/vault/vault-markdown-sync.js.map +1 -0
- package/dist/vault/vault-memories.d.ts +61 -0
- package/dist/vault/vault-memories.d.ts.map +1 -0
- package/dist/vault/vault-memories.js +240 -0
- package/dist/vault/vault-memories.js.map +1 -0
- package/dist/vault/vault-schema.d.ts +9 -0
- package/dist/vault/vault-schema.d.ts.map +1 -0
- package/dist/vault/vault-schema.js +179 -0
- package/dist/vault/vault-schema.js.map +1 -0
- package/dist/vault/vault.d.ts +29 -81
- package/dist/vault/vault.d.ts.map +1 -1
- package/dist/vault/vault.js +78 -931
- package/dist/vault/vault.js.map +1 -1
- package/package.json +1 -1
- package/src/agency/agency-manager.test.ts +600 -0
- package/src/agency/default-rules.test.ts +228 -0
- package/src/{__tests__ → brain}/brain-intelligence.test.ts +37 -14
- package/src/{__tests__ → brain}/brain.test.ts +1 -1
- package/src/brain/intelligence.ts +196 -15
- package/src/brain/learning-radar.ts +22 -1
- package/src/{__tests__ → brain}/second-brain-features.test.ts +4 -4
- package/src/{__tests__ → brain}/session-lifecycle.test.ts +2 -2
- package/src/brain/strength-scorer.ts +404 -0
- package/src/capabilities/chain-mapping.test.ts +66 -0
- package/src/capabilities/registry.test.ts +369 -0
- package/src/chat/agent-loop.test.ts +394 -0
- package/src/chat/agent-loop.ts +2 -0
- package/src/{__tests__ → chat}/chat-differentiators.test.ts +3 -3
- package/src/{__tests__ → chat}/chat-enhanced.test.ts +4 -4
- package/src/{__tests__ → chat}/chat-transport.test.ts +6 -6
- package/src/chat/mcp-bridge.test.ts +173 -0
- package/src/chat/notifications.ts +2 -0
- package/src/chat/output-compressor.test.ts +164 -0
- package/src/claudemd/compose.test.ts +178 -0
- package/src/claudemd/compose.ts +1 -1
- package/src/claudemd/inject.test.ts +211 -0
- package/src/context/context-engine.test.ts +461 -0
- package/src/control/identity-manager.test.ts +305 -0
- package/src/control/intent-router.test.ts +360 -0
- package/src/control/intent-router.ts +13 -4
- package/src/curator/classifier.test.ts +104 -0
- package/src/curator/contradiction-detector.test.ts +180 -0
- package/src/curator/contradiction-detector.ts +87 -0
- package/src/{__tests__ → curator}/curator-pipeline-e2e.test.ts +10 -10
- package/src/{__tests__ → curator}/curator.test.ts +77 -1
- package/src/curator/curator.ts +115 -777
- package/src/curator/duplicate-detector.test.ts +183 -0
- package/src/curator/duplicate-detector.ts +103 -0
- package/src/curator/health-audit.ts +126 -0
- package/src/curator/metadata-enricher.ts +84 -0
- package/src/curator/quality-gate.test.ts +135 -0
- package/src/curator/schema.ts +65 -0
- package/src/curator/tag-manager.test.ts +165 -0
- package/src/curator/tag-manager.ts +109 -0
- package/src/domain-packs/inject-rules.test.ts +117 -0
- package/src/domain-packs/knowledge-installer.test.ts +171 -0
- package/src/domain-packs/loader.test.ts +86 -0
- package/src/domain-packs/pack-runtime.test.ts +140 -0
- package/src/domain-packs/skills-installer.test.ts +135 -0
- package/src/domain-packs/token-resolver.test.ts +150 -0
- package/src/domain-packs/types.test.ts +130 -0
- package/src/enforcement/adapters/claude-code.test.ts +216 -0
- package/src/enforcement/registry.test.ts +264 -0
- package/src/engine/bin/soleri-engine.ts +28 -4
- package/src/engine/core-ops.test.ts +254 -0
- package/src/engine/core-ops.ts +25 -8
- package/src/engine/module-manifest.test.ts +124 -0
- package/src/engine/module-manifest.ts +22 -2
- package/src/engine/register-engine.test.ts +230 -0
- package/src/engine/register-engine.ts +26 -2
- package/src/errors/classify.test.ts +199 -0
- package/src/errors/retry.test.ts +156 -0
- package/src/errors/retry.ts +2 -0
- package/src/errors/types.test.ts +108 -0
- package/src/events/event-bus.test.ts +149 -0
- package/src/extensions/middleware.test.ts +234 -0
- package/src/facades/facade-factory.test.ts +424 -0
- package/src/flows/chain-runner.test.ts +273 -0
- package/src/flows/context-router.test.ts +52 -0
- package/src/flows/dispatch-registry.test.ts +128 -0
- package/src/flows/epilogue.test.ts +107 -0
- package/src/flows/executor.test.ts +263 -0
- package/src/flows/gate-evaluator.test.ts +194 -0
- package/src/flows/gate-evaluator.ts +25 -0
- package/src/flows/types.ts +4 -0
- package/src/governance/governance.test.ts +726 -0
- package/src/health/health-registry.test.ts +186 -0
- package/src/health/vault-integrity.test.ts +110 -0
- package/src/index.ts +92 -0
- package/src/intake/content-classifier.test.ts +209 -0
- package/src/intake/dedup-gate.test.ts +131 -0
- package/src/intake/intake-pipeline.test.ts +506 -0
- package/src/intake/intake-pipeline.ts +1 -0
- package/src/intake/text-ingester.test.ts +194 -0
- package/src/intake/text-ingester.ts +2 -0
- package/src/llm/key-pool.test.ts +236 -0
- package/src/llm/key-pool.ts +3 -4
- package/src/llm/llm-client.test.ts +345 -0
- package/src/llm/oauth-discovery.test.ts +180 -0
- package/src/llm/utils.test.ts +327 -0
- package/src/llm/utils.ts +2 -0
- package/src/{__tests__ → logging}/logger.test.ts +41 -62
- package/src/loop/loop-manager.test.ts +519 -0
- package/src/migrations/migration-runner.edge-cases.test.ts +319 -0
- package/src/migrations/migration-runner.test-helpers.ts +64 -0
- package/src/migrations/migration-runner.test.ts +385 -0
- package/src/operator/auto-signal-pipeline.test.ts +207 -0
- package/src/operator/operator-profile-extended.test.ts +320 -0
- package/src/operator/operator-profile.test.ts +314 -0
- package/src/operator/operator-profile.ts +469 -0
- package/src/operator/operator-signals-extended.test.ts +245 -0
- package/src/operator/operator-signals.test.ts +281 -0
- package/src/operator/operator-signals.ts +261 -0
- package/src/operator/operator-types.ts +444 -0
- package/src/operator/prompts/hook-precompact-operator-dispatch.md +94 -0
- package/src/operator/prompts/subagent-soft-signal-extractor.md +125 -0
- package/src/operator/prompts/subagent-synthesis-cognition.md +181 -0
- package/src/operator/prompts/subagent-synthesis-communication.md +140 -0
- package/src/operator/prompts/subagent-synthesis-technical.md +160 -0
- package/src/operator/prompts/subagent-synthesis-trust.md +143 -0
- package/src/{__tests__ → packs}/pack-lockfile.test.ts +3 -3
- package/src/{__tests__ → packs}/pack-system.test.ts +2 -2
- package/src/paths.ts +115 -0
- package/src/persistence/index.ts +1 -1
- package/src/persistence/sqlite-provider.test.ts +540 -0
- package/src/persistence/sqlite-provider.ts +8 -5
- package/src/persona/defaults.test.ts +59 -0
- package/src/persona/loader.test.ts +67 -0
- package/src/persona/prompt-generator.test.ts +127 -0
- package/src/planning/evidence-collector.test.ts +406 -0
- package/src/planning/evidence-collector.ts +50 -0
- package/src/planning/gap-analysis-alternatives.test.ts +169 -0
- package/src/planning/gap-analysis.ts +21 -636
- package/src/planning/gap-passes.test.ts +372 -0
- package/src/planning/gap-passes.ts +298 -0
- package/src/planning/gap-patterns.test.ts +320 -0
- package/src/planning/gap-patterns.ts +234 -0
- package/src/planning/gap-types.ts +4 -1
- package/src/planning/github-projection.test.ts +177 -0
- package/src/planning/github-projection.ts +425 -0
- package/src/planning/impact-analyzer.test.ts +180 -0
- package/src/planning/impact-analyzer.ts +264 -0
- package/src/planning/plan-lifecycle.test.ts +312 -0
- package/src/planning/plan-lifecycle.ts +346 -0
- package/src/planning/planner-types.ts +215 -0
- package/src/{__tests__ → planning}/planner.test.ts +169 -15
- package/src/planning/planner.ts +197 -1228
- package/src/planning/rationalization-detector.test.ts +171 -0
- package/src/planning/rationalization-detector.ts +138 -0
- package/src/planning/reconciliation-engine.test.ts +141 -0
- package/src/planning/reconciliation-engine.ts +162 -0
- package/src/planning/task-verifier.test.ts +235 -0
- package/src/planning/task-verifier.ts +303 -0
- package/src/planning/verification-protocol.test.ts +201 -0
- package/src/playbooks/generic/generic-playbooks.test.ts +438 -0
- package/src/playbooks/index.test.ts +77 -0
- package/src/playbooks/playbook-executor.test.ts +255 -0
- package/src/playbooks/playbook-registry.test.ts +232 -0
- package/src/playbooks/playbook-seeder.test.ts +153 -0
- package/src/plugins/plugin-loader.test.ts +212 -0
- package/src/plugins/plugin-registry.test.ts +272 -0
- package/src/project/project-registry.test.ts +428 -0
- package/src/prompts/parser.test.ts +100 -0
- package/src/prompts/template-manager.test.ts +109 -0
- package/src/{__tests__ → queue}/async-infrastructure.test.ts +3 -3
- package/src/queue/job-queue.test.ts +331 -0
- package/src/queue/pipeline-runner.test.ts +209 -0
- package/src/runtime/admin-extra-ops.test.ts +527 -0
- package/src/runtime/admin-ops.test.ts +257 -0
- package/src/runtime/admin-ops.ts +45 -17
- package/src/runtime/admin-setup-ops.test.ts +328 -0
- package/src/runtime/admin-setup-ops.ts +20 -43
- package/src/runtime/archive-ops.test.ts +269 -0
- package/src/runtime/archive-ops.ts +347 -0
- package/src/runtime/capture-ops.test.ts +433 -0
- package/src/runtime/capture-ops.ts +50 -8
- package/src/runtime/chain-ops.test.ts +149 -0
- package/src/runtime/claude-md-helpers.test.ts +191 -0
- package/src/runtime/claude-md-helpers.ts +1 -1
- package/src/runtime/context-health.test.ts +78 -0
- package/src/runtime/context-health.ts +85 -0
- package/src/runtime/curator-extra-ops.test.ts +202 -0
- package/src/runtime/deprecation.test.ts +98 -0
- package/src/runtime/domain-ops.test.ts +268 -0
- package/src/runtime/facades/admin-facade.test.ts +333 -0
- package/src/runtime/facades/agency-facade.test.ts +278 -0
- package/src/runtime/facades/archive-facade.test.ts +294 -0
- package/src/runtime/facades/archive-facade.ts +14 -0
- package/src/runtime/facades/brain-facade.test.ts +714 -0
- package/src/runtime/facades/brain-facade.ts +2 -0
- package/src/runtime/facades/chat-facade.test.ts +166 -0
- package/src/runtime/facades/chat-facade.ts +15 -906
- package/src/runtime/facades/chat-service-ops.test.ts +276 -0
- package/src/runtime/facades/chat-service-ops.ts +374 -0
- package/src/runtime/facades/chat-session-ops.test.ts +197 -0
- package/src/runtime/facades/chat-session-ops.ts +146 -0
- package/src/runtime/facades/chat-state.ts +60 -0
- package/src/runtime/facades/chat-transport-ops.test.ts +269 -0
- package/src/runtime/facades/chat-transport-ops.ts +380 -0
- package/src/runtime/facades/context-facade.test.ts +108 -0
- package/src/runtime/facades/control-facade.test.ts +436 -0
- package/src/runtime/facades/control-facade.ts +6 -1
- package/src/runtime/facades/curator-facade.test.ts +303 -0
- package/src/runtime/facades/index.ts +6 -0
- package/src/runtime/facades/loop-facade.test.ts +245 -0
- package/src/runtime/facades/memory-facade.test.ts +269 -0
- package/src/runtime/facades/memory-facade.ts +78 -6
- package/src/runtime/facades/operator-facade.test.ts +208 -0
- package/src/runtime/facades/operator-facade.ts +236 -0
- package/src/runtime/facades/orchestrate-facade.test.ts +185 -0
- package/src/runtime/facades/orchestrate-facade.ts +3 -3
- package/src/runtime/facades/plan-facade.test.ts +266 -0
- package/src/runtime/facades/plan-facade.ts +42 -6
- package/src/runtime/facades/review-facade.test.ts +82 -0
- package/src/runtime/facades/review-facade.ts +11 -0
- package/src/runtime/facades/sync-facade.test.ts +113 -0
- package/src/runtime/facades/sync-facade.ts +11 -0
- package/src/runtime/facades/vault-facade.test.ts +631 -0
- package/src/runtime/facades/vault-facade.ts +15 -70
- package/src/runtime/feature-flags.test.ts +140 -0
- package/src/runtime/github-integration.test.ts +89 -0
- package/src/runtime/github-integration.ts +159 -0
- package/src/runtime/grading-ops.test.ts +141 -0
- package/src/runtime/grading-ops.ts +1 -1
- package/src/runtime/intake-ops.test.ts +208 -0
- package/src/runtime/loop-ops.test.ts +238 -0
- package/src/runtime/memory-cross-project-ops.test.ts +177 -0
- package/src/runtime/memory-extra-ops.test.ts +453 -0
- package/src/runtime/memory-extra-ops.ts +6 -2
- package/src/runtime/orchestrate-ops.test.ts +302 -0
- package/src/runtime/orchestrate-ops.ts +435 -46
- package/src/runtime/pack-ops.test.ts +158 -0
- package/src/runtime/planning-extra-ops.test.ts +583 -0
- package/src/runtime/planning-extra-ops.ts +72 -4
- package/src/{__tests__ → runtime}/playbook-ops-execution.test.ts +3 -3
- package/src/runtime/playbook-ops.test.ts +262 -0
- package/src/runtime/plugin-ops.test.ts +201 -0
- package/src/runtime/project-ops.test.ts +235 -0
- package/src/runtime/review-ops.test.ts +142 -0
- package/src/runtime/review-ops.ts +99 -0
- package/src/runtime/runtime.test.ts +363 -0
- package/src/runtime/runtime.ts +39 -12
- package/src/runtime/session-briefing.test.ts +302 -0
- package/src/runtime/session-briefing.ts +80 -1
- package/src/runtime/sync-ops.test.ts +221 -0
- package/src/runtime/sync-ops.ts +325 -0
- package/src/runtime/telemetry-ops.test.ts +132 -0
- package/src/runtime/types.ts +10 -4
- package/src/runtime/vault-extra-ops.test.ts +246 -0
- package/src/runtime/vault-extra-ops.ts +5 -332
- package/src/runtime/vault-linking-ops.test.ts +237 -0
- package/src/runtime/vault-sharing-ops.test.ts +130 -0
- package/src/runtime/vault-sharing-ops.ts +5 -329
- package/src/skills/sync-skills.ts +108 -0
- package/src/streams/normalize.test.ts +95 -0
- package/src/streams/replayable-stream.test.ts +166 -0
- package/src/telemetry/telemetry.test.ts +143 -0
- package/src/transport/http-server.test.ts +394 -0
- package/src/transport/lsp-server.test.ts +458 -0
- package/src/transport/rate-limiter.test.ts +126 -0
- package/src/transport/session-manager.test.ts +133 -0
- package/src/transport/token-auth.test.ts +136 -0
- package/src/transport/ws-server.test.ts +294 -0
- package/src/update-check.ts +111 -0
- package/src/vault/__tests__/vault-characterization.test.ts +168 -0
- package/src/vault/content-hash.test.ts +78 -0
- package/src/vault/git-vault-sync.test.ts +234 -0
- package/src/vault/knowledge-review.test.ts +269 -0
- package/src/vault/linking.test.ts +358 -0
- package/src/vault/linking.ts +149 -183
- package/src/vault/obsidian-sync.test.ts +342 -0
- package/src/vault/playbook.test.ts +152 -0
- package/src/vault/scope-detector.test.ts +187 -0
- package/src/vault/vault-branching.test.ts +250 -0
- package/src/{__tests__ → vault}/vault-connect.test.ts +1 -1
- package/src/vault/vault-entries.ts +282 -0
- package/src/vault/vault-interfaces.ts +56 -0
- package/src/vault/vault-maintenance.ts +205 -0
- package/src/vault/vault-manager.test.ts +206 -0
- package/src/vault/vault-markdown-sync.test.ts +203 -0
- package/src/vault/vault-markdown-sync.ts +160 -0
- package/src/vault/vault-memories.ts +339 -0
- package/src/{__tests__ → vault}/vault-scaling.test.ts +1 -1
- package/src/vault/vault-schema.ts +181 -0
- package/src/{__tests__ → vault}/vault-sharing.test.ts +4 -4
- package/src/{__tests__ → vault}/vault.test.ts +2 -2
- package/src/vault/vault.ts +89 -1171
- package/dist/cognee/client.d.ts +0 -43
- package/dist/cognee/client.d.ts.map +0 -1
- package/dist/cognee/client.js +0 -375
- package/dist/cognee/client.js.map +0 -1
- package/dist/cognee/sync-manager.d.ts +0 -153
- package/dist/cognee/sync-manager.d.ts.map +0 -1
- package/dist/cognee/sync-manager.js +0 -390
- package/dist/cognee/sync-manager.js.map +0 -1
- package/dist/cognee/types.d.ts +0 -62
- package/dist/cognee/types.d.ts.map +0 -1
- package/dist/cognee/types.js +0 -3
- package/dist/cognee/types.js.map +0 -1
- package/dist/governance/index.d.ts +0 -3
- package/dist/governance/index.d.ts.map +0 -1
- package/dist/governance/index.js +0 -2
- package/dist/governance/index.js.map +0 -1
- package/dist/health/doctor-checks.d.ts +0 -15
- package/dist/health/doctor-checks.d.ts.map +0 -1
- package/dist/health/doctor-checks.js +0 -98
- package/dist/health/doctor-checks.js.map +0 -1
- package/dist/persistence/postgres-provider.d.ts +0 -81
- package/dist/persistence/postgres-provider.d.ts.map +0 -1
- package/dist/persistence/postgres-provider.js +0 -256
- package/dist/persistence/postgres-provider.js.map +0 -1
- package/dist/runtime/cognee-sync-ops.d.ts +0 -12
- package/dist/runtime/cognee-sync-ops.d.ts.map +0 -1
- package/dist/runtime/cognee-sync-ops.js +0 -93
- package/dist/runtime/cognee-sync-ops.js.map +0 -1
- package/dist/runtime/core-ops.d.ts +0 -23
- package/dist/runtime/core-ops.d.ts.map +0 -1
- package/dist/runtime/core-ops.js +0 -1296
- package/dist/runtime/core-ops.js.map +0 -1
- package/dist/runtime/facades/cognee-facade.d.ts +0 -8
- package/dist/runtime/facades/cognee-facade.d.ts.map +0 -1
- package/dist/runtime/facades/cognee-facade.js +0 -156
- package/dist/runtime/facades/cognee-facade.js.map +0 -1
- package/src/__tests__/admin-extra-ops.test.ts +0 -484
- package/src/__tests__/admin-ops.test.ts +0 -268
- package/src/__tests__/admin-setup-ops.test.ts +0 -355
- package/src/__tests__/agency-manager.test.ts +0 -374
- package/src/__tests__/agent-loop.test.ts +0 -256
- package/src/__tests__/capture-ops.test.ts +0 -784
- package/src/__tests__/claudemd.test.ts +0 -282
- package/src/__tests__/content-hash.test.ts +0 -60
- package/src/__tests__/context-engine.test.ts +0 -251
- package/src/__tests__/core-ops.test.ts +0 -550
- package/src/__tests__/curator-extra-ops.test.ts +0 -383
- package/src/__tests__/deprecation.test.ts +0 -78
- package/src/__tests__/domain-ops.test.ts +0 -226
- package/src/__tests__/domain-packs.test.ts +0 -421
- package/src/__tests__/enforcement.test.ts +0 -153
- package/src/__tests__/errors.test.ts +0 -388
- package/src/__tests__/extensions.test.ts +0 -233
- package/src/__tests__/facade-factory.test.ts +0 -271
- package/src/__tests__/feature-flags.test.ts +0 -137
- package/src/__tests__/flows.test.ts +0 -604
- package/src/__tests__/git-vault-sync.test.ts +0 -230
- package/src/__tests__/governance.test.ts +0 -522
- package/src/__tests__/grading-ops.test.ts +0 -361
- package/src/__tests__/health-registry.test.ts +0 -173
- package/src/__tests__/identity-manager.test.ts +0 -243
- package/src/__tests__/intake-pipeline.test.ts +0 -162
- package/src/__tests__/intent-router.test.ts +0 -222
- package/src/__tests__/knowledge-review.test.ts +0 -104
- package/src/__tests__/llm-client.test.ts +0 -69
- package/src/__tests__/llm.test.ts +0 -556
- package/src/__tests__/loader.test.ts +0 -176
- package/src/__tests__/loop-ops.test.ts +0 -469
- package/src/__tests__/lsp-transport.test.ts +0 -442
- package/src/__tests__/memory-cross-project-ops.test.ts +0 -248
- package/src/__tests__/memory-extra-ops.test.ts +0 -352
- package/src/__tests__/migration-runner.test.ts +0 -170
- package/src/__tests__/module-manifest-drift.test.ts +0 -59
- package/src/__tests__/normalize.test.ts +0 -85
- package/src/__tests__/obsidian-sync.test.ts +0 -354
- package/src/__tests__/orchestrate-ops.test.ts +0 -289
- package/src/__tests__/pack-ops.test.ts +0 -146
- package/src/__tests__/persistence.test.ts +0 -291
- package/src/__tests__/planning-extra-ops.test.ts +0 -706
- package/src/__tests__/playbook-executor.test.ts +0 -249
- package/src/__tests__/playbook-registry.test.ts +0 -326
- package/src/__tests__/playbook-seeder.test.ts +0 -163
- package/src/__tests__/playbook.test.ts +0 -389
- package/src/__tests__/plugin-ops.test.ts +0 -411
- package/src/__tests__/plugin-system.test.ts +0 -509
- package/src/__tests__/project-ops.test.ts +0 -381
- package/src/__tests__/replayable-stream.test.ts +0 -177
- package/src/__tests__/runtime.test.ts +0 -95
- package/src/__tests__/scope-detector.test.ts +0 -121
- package/src/__tests__/template-manager.test.ts +0 -222
- package/src/__tests__/token-resolver.test.ts +0 -79
- package/src/__tests__/transport.test.ts +0 -758
- package/src/__tests__/vault-branching.test.ts +0 -274
- package/src/__tests__/vault-extra-ops.test.ts +0 -482
- package/src/__tests__/vault-integrity.test.ts +0 -71
- package/src/__tests__/vault-manager.test.ts +0 -238
- package/src/__tests__/ws-transport.test.ts +0 -479
|
@@ -17,6 +17,24 @@ import { FlowExecutor } from '../flows/executor.js';
|
|
|
17
17
|
import { createDispatcher } from '../flows/dispatch-registry.js';
|
|
18
18
|
import { runEpilogue } from '../flows/epilogue.js';
|
|
19
19
|
import type { OrchestrationPlan, ExecutionResult } from '../flows/types.js';
|
|
20
|
+
import type { ContextHealthStatus } from './context-health.js';
|
|
21
|
+
import {
|
|
22
|
+
detectGitHubContext,
|
|
23
|
+
findMatchingMilestone,
|
|
24
|
+
findDuplicateIssue,
|
|
25
|
+
formatIssueBody,
|
|
26
|
+
createGitHubIssue,
|
|
27
|
+
updateGitHubIssueBody,
|
|
28
|
+
} from '../planning/github-projection.js';
|
|
29
|
+
import type { PlanMetadataForIssue, GitHubProjection } from '../planning/github-projection.js';
|
|
30
|
+
import {
|
|
31
|
+
extractIssueNumber,
|
|
32
|
+
detectGitHubRemote as detectGitHubRemoteAsync,
|
|
33
|
+
getIssueDetails,
|
|
34
|
+
} from './github-integration.js';
|
|
35
|
+
import { detectRationalizations } from '../planning/rationalization-detector.js';
|
|
36
|
+
import { ImpactAnalyzer } from '../planning/impact-analyzer.js';
|
|
37
|
+
import type { ImpactReport } from '../planning/impact-analyzer.js';
|
|
20
38
|
|
|
21
39
|
// ---------------------------------------------------------------------------
|
|
22
40
|
// Intent detection — keyword-based mapping from prompt to intent
|
|
@@ -61,11 +79,7 @@ const planStore = new Map<string, PlanEntry>();
|
|
|
61
79
|
* If facades are provided, uses the full dispatch registry.
|
|
62
80
|
* Otherwise, falls back to a simple runtime-based dispatcher.
|
|
63
81
|
*/
|
|
64
|
-
function buildDispatch(
|
|
65
|
-
agentId: string,
|
|
66
|
-
runtime: AgentRuntime,
|
|
67
|
-
facades?: FacadeConfig[],
|
|
68
|
-
) {
|
|
82
|
+
function buildDispatch(agentId: string, runtime: AgentRuntime, facades?: FacadeConfig[]) {
|
|
69
83
|
if (facades && facades.length > 0) {
|
|
70
84
|
return createDispatcher(agentId, facades);
|
|
71
85
|
}
|
|
@@ -110,6 +124,104 @@ function buildDispatch(
|
|
|
110
124
|
};
|
|
111
125
|
}
|
|
112
126
|
|
|
127
|
+
// ---------------------------------------------------------------------------
|
|
128
|
+
// Context health warning builder
|
|
129
|
+
// ---------------------------------------------------------------------------
|
|
130
|
+
|
|
131
|
+
interface HealthWarning {
|
|
132
|
+
level: string;
|
|
133
|
+
recommendation: string;
|
|
134
|
+
sessionCaptured?: boolean;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Build a context health warning if level is yellow or red.
|
|
139
|
+
* On red: auto-triggers a session capture to vault memory.
|
|
140
|
+
*/
|
|
141
|
+
function buildHealthWarning(
|
|
142
|
+
status: ContextHealthStatus,
|
|
143
|
+
vault: AgentRuntime['vault'],
|
|
144
|
+
): HealthWarning | null {
|
|
145
|
+
if (status.level === 'green') return null;
|
|
146
|
+
|
|
147
|
+
const warning: HealthWarning = {
|
|
148
|
+
level: status.level,
|
|
149
|
+
recommendation: status.recommendation,
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
if (status.level === 'red') {
|
|
153
|
+
try {
|
|
154
|
+
vault.captureMemory({
|
|
155
|
+
projectPath: '.',
|
|
156
|
+
type: 'session',
|
|
157
|
+
context: 'Auto-captured by context health monitor (red level)',
|
|
158
|
+
summary: `Context fill at ${(status.estimatedFill * 100).toFixed(0)}% (${status.toolCallCount} tool calls, ~${status.estimatedTokens} tokens). Session capture recommended.`,
|
|
159
|
+
topics: ['context-health'],
|
|
160
|
+
filesModified: [],
|
|
161
|
+
toolsUsed: [],
|
|
162
|
+
intent: null,
|
|
163
|
+
decisions: [],
|
|
164
|
+
currentState: `Context health: ${status.level}`,
|
|
165
|
+
nextSteps: ['Compact context or start a new session'],
|
|
166
|
+
vaultEntriesReferenced: [],
|
|
167
|
+
});
|
|
168
|
+
warning.sessionCaptured = true;
|
|
169
|
+
} catch {
|
|
170
|
+
warning.sessionCaptured = false;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return warning;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// ---------------------------------------------------------------------------
|
|
178
|
+
// Anti-rationalization helpers
|
|
179
|
+
// ---------------------------------------------------------------------------
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Collect all acceptance criteria from a plan's tasks.
|
|
183
|
+
* Returns empty array if plan not found or has no criteria (graceful skip).
|
|
184
|
+
*/
|
|
185
|
+
function collectAcceptanceCriteria(
|
|
186
|
+
plannerRef: AgentRuntime['planner'],
|
|
187
|
+
planId: string,
|
|
188
|
+
): string[] {
|
|
189
|
+
const plan = plannerRef.get(planId);
|
|
190
|
+
if (!plan) return [];
|
|
191
|
+
const criteria: string[] = [];
|
|
192
|
+
for (const task of plan.tasks) {
|
|
193
|
+
if (task.acceptanceCriteria) {
|
|
194
|
+
criteria.push(...task.acceptanceCriteria);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return criteria;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Capture detected rationalization as an anti-pattern in vault.
|
|
202
|
+
* Best-effort — never throws.
|
|
203
|
+
*/
|
|
204
|
+
function captureRationalizationAntiPattern(
|
|
205
|
+
vaultRef: AgentRuntime['vault'],
|
|
206
|
+
report: import('../planning/rationalization-detector.js').RationalizationReport,
|
|
207
|
+
): void {
|
|
208
|
+
try {
|
|
209
|
+
const patterns = report.items.map((i) => i.pattern).join(', ');
|
|
210
|
+
vaultRef.add({
|
|
211
|
+
id: `antipattern-rationalization-${Date.now()}`,
|
|
212
|
+
title: 'Rationalization detected in completion claim',
|
|
213
|
+
description: `Detected rationalization patterns: ${patterns}. ` +
|
|
214
|
+
`Items: ${report.items.map((i) => `"${i.phrase}" (${i.pattern})`).join('; ')}.`,
|
|
215
|
+
type: 'anti-pattern',
|
|
216
|
+
domain: 'planning',
|
|
217
|
+
severity: 'warning',
|
|
218
|
+
tags: ['rationalization', 'anti-pattern', 'completion-gate'],
|
|
219
|
+
});
|
|
220
|
+
} catch {
|
|
221
|
+
// Vault capture is best-effort
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
113
225
|
// ---------------------------------------------------------------------------
|
|
114
226
|
// Op factory
|
|
115
227
|
// ---------------------------------------------------------------------------
|
|
@@ -122,7 +234,7 @@ export function createOrchestrateOps(
|
|
|
122
234
|
runtime: AgentRuntime,
|
|
123
235
|
facades?: FacadeConfig[],
|
|
124
236
|
): OpDefinition[] {
|
|
125
|
-
const { planner, brainIntelligence, vault } = runtime;
|
|
237
|
+
const { planner, brainIntelligence, vault, contextHealth } = runtime;
|
|
126
238
|
const agentId = runtime.config.agentId;
|
|
127
239
|
|
|
128
240
|
return [
|
|
@@ -135,27 +247,12 @@ export function createOrchestrateOps(
|
|
|
135
247
|
'a pruned orchestration plan with gate-guarded steps.',
|
|
136
248
|
auth: 'write',
|
|
137
249
|
schema: z.object({
|
|
138
|
-
prompt: z
|
|
139
|
-
|
|
140
|
-
.describe('Natural language description of what to do'),
|
|
141
|
-
projectPath: z
|
|
142
|
-
.string()
|
|
143
|
-
.optional()
|
|
144
|
-
.default('.')
|
|
145
|
-
.describe('Project root path'),
|
|
250
|
+
prompt: z.string().optional().describe('Natural language description of what to do (or use objective)'),
|
|
251
|
+
projectPath: z.string().optional().default('.').describe('Project root path'),
|
|
146
252
|
// Legacy params — still accepted for backward compat
|
|
147
|
-
objective: z
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
.describe('(Legacy) Plan objective — use prompt instead'),
|
|
151
|
-
scope: z
|
|
152
|
-
.string()
|
|
153
|
-
.optional()
|
|
154
|
-
.describe('(Legacy) Plan scope'),
|
|
155
|
-
domain: z
|
|
156
|
-
.string()
|
|
157
|
-
.optional()
|
|
158
|
-
.describe('Domain hint for brain recommendations'),
|
|
253
|
+
objective: z.string().optional().describe('(Legacy) Plan objective — use prompt instead'),
|
|
254
|
+
scope: z.string().optional().describe('(Legacy) Plan scope'),
|
|
255
|
+
domain: z.string().optional().describe('Domain hint for brain recommendations'),
|
|
159
256
|
tasks: z
|
|
160
257
|
.array(z.object({ title: z.string(), description: z.string() }))
|
|
161
258
|
.optional()
|
|
@@ -170,17 +267,21 @@ export function createOrchestrateOps(
|
|
|
170
267
|
const intent = detectIntent(prompt);
|
|
171
268
|
|
|
172
269
|
// 2. Get brain recommendations — graceful degradation
|
|
173
|
-
let recommendations: Array<{ pattern: string; strength: number }> = [];
|
|
270
|
+
let recommendations: Array<{ pattern: string; strength: number; entryId?: string }> = [];
|
|
174
271
|
try {
|
|
175
272
|
const raw = brainIntelligence.recommend({
|
|
176
273
|
domain,
|
|
177
274
|
task: prompt,
|
|
178
275
|
limit: 5,
|
|
179
276
|
});
|
|
180
|
-
recommendations = raw.map((r) =>
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
277
|
+
recommendations = raw.map((r) => {
|
|
278
|
+
// Look up vault entry ID by title for feedback tracking
|
|
279
|
+
const entries = vault.search(r.pattern, { limit: 1 });
|
|
280
|
+
const entryId = entries.length > 0 && entries[0].entry.title === r.pattern
|
|
281
|
+
? entries[0].entry.id
|
|
282
|
+
: undefined;
|
|
283
|
+
return { pattern: r.pattern, strength: r.strength, entryId };
|
|
284
|
+
});
|
|
184
285
|
} catch {
|
|
185
286
|
// Brain has no data yet
|
|
186
287
|
}
|
|
@@ -192,6 +293,7 @@ export function createOrchestrateOps(
|
|
|
192
293
|
recommendations = vaultResults.map((r) => ({
|
|
193
294
|
pattern: r.entry.title,
|
|
194
295
|
strength: 50,
|
|
296
|
+
entryId: r.entry.id,
|
|
195
297
|
}));
|
|
196
298
|
} catch {
|
|
197
299
|
// Vault search failed
|
|
@@ -206,18 +308,44 @@ export function createOrchestrateOps(
|
|
|
206
308
|
|
|
207
309
|
// 5. Also create a planner plan for lifecycle tracking (backward compat)
|
|
208
310
|
const decisions = recommendations.map(
|
|
209
|
-
(r) =>
|
|
311
|
+
(r) => {
|
|
312
|
+
const base = `Brain pattern: ${r.pattern} (strength: ${r.strength.toFixed(1)})`;
|
|
313
|
+
return r.entryId ? `${base} [entryId:${r.entryId}]` : base;
|
|
314
|
+
},
|
|
210
315
|
);
|
|
211
316
|
const tasks = (params.tasks as Array<{ title: string; description: string }>) ?? [];
|
|
212
317
|
|
|
318
|
+
// 5b. Extract GitHub issue context if prompt references #NNN
|
|
319
|
+
let githubIssue: { owner: string; repo: string; number: number } | undefined;
|
|
320
|
+
const issueNum = extractIssueNumber(prompt);
|
|
321
|
+
if (issueNum) {
|
|
322
|
+
const remote = await detectGitHubRemoteAsync(projectPath);
|
|
323
|
+
if (remote) {
|
|
324
|
+
githubIssue = { owner: remote.owner, repo: remote.repo, number: issueNum };
|
|
325
|
+
const details = await getIssueDetails(remote.owner, remote.repo, issueNum);
|
|
326
|
+
if (details) {
|
|
327
|
+
// Enrich objective with issue context
|
|
328
|
+
const enriched = `${prompt}\n\n--- GitHub Issue #${issueNum}: ${details.title} ---\n${details.body}`;
|
|
329
|
+
decisions.unshift(`Source: GitHub issue #${issueNum} — ${details.title}`);
|
|
330
|
+
// Replace prompt for plan creation
|
|
331
|
+
Object.assign(params, { _enrichedObjective: enriched });
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
const planObjective = (params as Record<string, unknown>)._enrichedObjective as string | undefined ?? prompt;
|
|
337
|
+
|
|
213
338
|
let legacyPlan;
|
|
214
339
|
try {
|
|
215
340
|
legacyPlan = planner.create({
|
|
216
|
-
objective:
|
|
341
|
+
objective: planObjective,
|
|
217
342
|
scope: (params.scope as string) ?? `${intent} workflow`,
|
|
218
343
|
decisions,
|
|
219
344
|
tasks,
|
|
220
345
|
});
|
|
346
|
+
if (legacyPlan && githubIssue) {
|
|
347
|
+
legacyPlan.githubIssue = githubIssue;
|
|
348
|
+
}
|
|
221
349
|
} catch {
|
|
222
350
|
// Planner creation failed — flow plan still valid
|
|
223
351
|
}
|
|
@@ -271,13 +399,25 @@ export function createOrchestrateOps(
|
|
|
271
399
|
// Store result
|
|
272
400
|
entry.executionResult = executionResult;
|
|
273
401
|
|
|
274
|
-
//
|
|
275
|
-
const
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
402
|
+
// Reuse brain session from plan_split if one exists, otherwise start new
|
|
403
|
+
const existingSession = brainIntelligence.getSessionByPlanId(planId);
|
|
404
|
+
const session =
|
|
405
|
+
existingSession && !existingSession.endedAt
|
|
406
|
+
? existingSession
|
|
407
|
+
: brainIntelligence.lifecycle({
|
|
408
|
+
action: 'start',
|
|
409
|
+
domain,
|
|
410
|
+
context,
|
|
411
|
+
planId,
|
|
412
|
+
});
|
|
413
|
+
|
|
414
|
+
// Track execution in context health monitor
|
|
415
|
+
contextHealth.track({
|
|
416
|
+
type: 'orchestrate_execute',
|
|
417
|
+
payloadSize: JSON.stringify(executionResult).length,
|
|
280
418
|
});
|
|
419
|
+
const healthStatus = contextHealth.check();
|
|
420
|
+
const healthWarning = buildHealthWarning(healthStatus, vault);
|
|
281
421
|
|
|
282
422
|
return {
|
|
283
423
|
plan: { id: planId, status: 'executing' },
|
|
@@ -289,19 +429,37 @@ export function createOrchestrateOps(
|
|
|
289
429
|
toolsCalled: executionResult.toolsCalled,
|
|
290
430
|
durationMs: executionResult.durationMs,
|
|
291
431
|
},
|
|
432
|
+
...(healthWarning ? { contextHealth: healthWarning } : {}),
|
|
292
433
|
};
|
|
293
434
|
}
|
|
294
435
|
|
|
295
436
|
// Legacy path: no flow plan found, use planner directly
|
|
296
437
|
const plan = planner.startExecution(planId);
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
438
|
+
// Reuse brain session from plan_split if one exists, otherwise start new
|
|
439
|
+
const existingSession = brainIntelligence.getSessionByPlanId(planId);
|
|
440
|
+
const session =
|
|
441
|
+
existingSession && !existingSession.endedAt
|
|
442
|
+
? existingSession
|
|
443
|
+
: brainIntelligence.lifecycle({
|
|
444
|
+
action: 'start',
|
|
445
|
+
domain,
|
|
446
|
+
context,
|
|
447
|
+
planId,
|
|
448
|
+
});
|
|
449
|
+
|
|
450
|
+
// Track legacy execution in context health monitor
|
|
451
|
+
contextHealth.track({
|
|
452
|
+
type: 'orchestrate_execute_legacy',
|
|
453
|
+
payloadSize: JSON.stringify(plan).length,
|
|
302
454
|
});
|
|
455
|
+
const healthStatus = contextHealth.check();
|
|
456
|
+
const healthWarning = buildHealthWarning(healthStatus, vault);
|
|
303
457
|
|
|
304
|
-
return {
|
|
458
|
+
return {
|
|
459
|
+
plan,
|
|
460
|
+
session,
|
|
461
|
+
...(healthWarning ? { contextHealth: healthWarning } : {}),
|
|
462
|
+
};
|
|
305
463
|
},
|
|
306
464
|
},
|
|
307
465
|
|
|
@@ -320,15 +478,67 @@ export function createOrchestrateOps(
|
|
|
320
478
|
.optional()
|
|
321
479
|
.default('completed')
|
|
322
480
|
.describe('Plan outcome'),
|
|
481
|
+
summary: z.string().optional().describe('Completion summary — checked for rationalization language'),
|
|
323
482
|
toolsUsed: z.array(z.string()).optional().describe('Tools used during execution'),
|
|
324
483
|
filesModified: z.array(z.string()).optional().describe('Files modified during execution'),
|
|
484
|
+
projectPath: z.string().optional().default('.').describe('Project root path for impact analysis'),
|
|
485
|
+
overrideRationalization: z.boolean().optional().default(false)
|
|
486
|
+
.describe('Set true to bypass rationalization gate and impact warnings after review'),
|
|
325
487
|
}),
|
|
326
488
|
handler: async (params) => {
|
|
327
489
|
const planId = params.planId as string;
|
|
328
490
|
const sessionId = params.sessionId as string;
|
|
329
491
|
const outcome = (params.outcome as string) ?? 'completed';
|
|
492
|
+
const completionSummary = (params.summary as string) ?? '';
|
|
330
493
|
const toolsUsed = (params.toolsUsed as string[]) ?? [];
|
|
331
494
|
const filesModified = (params.filesModified as string[]) ?? [];
|
|
495
|
+
const overrideRationalization = (params.overrideRationalization as boolean) ?? false;
|
|
496
|
+
|
|
497
|
+
// Anti-rationalization gate: check completion summary before completing
|
|
498
|
+
if (outcome === 'completed' && !overrideRationalization) {
|
|
499
|
+
const criteria = collectAcceptanceCriteria(planner, planId);
|
|
500
|
+
if (criteria.length > 0 && completionSummary) {
|
|
501
|
+
const report = detectRationalizations(criteria, completionSummary);
|
|
502
|
+
if (report.detected) {
|
|
503
|
+
captureRationalizationAntiPattern(vault, report);
|
|
504
|
+
return {
|
|
505
|
+
blocked: true,
|
|
506
|
+
reason: 'Rationalization language detected in completion summary',
|
|
507
|
+
rationalization: report,
|
|
508
|
+
hint: 'Address the unmet criteria, or set overrideRationalization: true to bypass this gate.',
|
|
509
|
+
};
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
// Impact analysis gate: assess downstream impact of modified files
|
|
515
|
+
let impactReport: ImpactReport | null = null;
|
|
516
|
+
if (filesModified.length > 0) {
|
|
517
|
+
try {
|
|
518
|
+
const analyzer = new ImpactAnalyzer();
|
|
519
|
+
const planObj = planner.get(planId);
|
|
520
|
+
const scopeHints = planObj?.scope
|
|
521
|
+
? [planObj.scope]
|
|
522
|
+
: undefined;
|
|
523
|
+
impactReport = analyzer.analyzeImpact(
|
|
524
|
+
filesModified,
|
|
525
|
+
(params.projectPath as string) ?? '.',
|
|
526
|
+
scopeHints,
|
|
527
|
+
);
|
|
528
|
+
|
|
529
|
+
// If high risk and not overridden, warn the user
|
|
530
|
+
if (impactReport.riskLevel === 'high' && !overrideRationalization) {
|
|
531
|
+
return {
|
|
532
|
+
warning: true,
|
|
533
|
+
reason: 'High impact detected — review before completing',
|
|
534
|
+
impactReport,
|
|
535
|
+
hint: 'Review affected consumers and re-run with overrideRationalization: true or address the issues.',
|
|
536
|
+
};
|
|
537
|
+
}
|
|
538
|
+
} catch {
|
|
539
|
+
// Impact analysis is best-effort — never blocks
|
|
540
|
+
}
|
|
541
|
+
}
|
|
332
542
|
|
|
333
543
|
// Complete the planner plan (legacy lifecycle)
|
|
334
544
|
const plan = planner.complete(planId);
|
|
@@ -372,7 +582,13 @@ export function createOrchestrateOps(
|
|
|
372
582
|
planStore.delete(planId);
|
|
373
583
|
}
|
|
374
584
|
|
|
375
|
-
return {
|
|
585
|
+
return {
|
|
586
|
+
plan,
|
|
587
|
+
session,
|
|
588
|
+
extraction,
|
|
589
|
+
epilogue: epilogueResult,
|
|
590
|
+
...(impactReport ? { impactAnalysis: impactReport } : {}),
|
|
591
|
+
};
|
|
376
592
|
},
|
|
377
593
|
},
|
|
378
594
|
|
|
@@ -483,5 +699,178 @@ export function createOrchestrateOps(
|
|
|
483
699
|
return { session: endedSession, extraction };
|
|
484
700
|
},
|
|
485
701
|
},
|
|
702
|
+
|
|
703
|
+
// ─── orchestrate_project_to_github ─────────────────────────────
|
|
704
|
+
{
|
|
705
|
+
name: 'orchestrate_project_to_github',
|
|
706
|
+
description:
|
|
707
|
+
'Project plan tasks as GitHub issues. Detects the GitHub remote, checks milestones ' +
|
|
708
|
+
'and existing issues for duplicates, creates issues with plan metadata linked, and ' +
|
|
709
|
+
'stores the projection on the plan. Opt-in: the agent suggests, user confirms.',
|
|
710
|
+
auth: 'write',
|
|
711
|
+
schema: z.object({
|
|
712
|
+
planId: z.string().describe('ID of the plan to project to GitHub'),
|
|
713
|
+
projectPath: z.string().optional().default('.').describe('Project root path for git detection'),
|
|
714
|
+
milestone: z.number().optional().describe('GitHub milestone number to assign issues to'),
|
|
715
|
+
labels: z.array(z.string()).optional().describe('Labels to apply to created issues'),
|
|
716
|
+
linkToIssue: z.number().optional().describe('Existing issue number to link plan to instead of creating new issues'),
|
|
717
|
+
dryRun: z.boolean().optional().default(false).describe('Preview what would be created without actually creating issues'),
|
|
718
|
+
}),
|
|
719
|
+
handler: async (params) => {
|
|
720
|
+
const planId = params.planId as string;
|
|
721
|
+
const projectPath = (params.projectPath as string) ?? '.';
|
|
722
|
+
const milestone = params.milestone as number | undefined;
|
|
723
|
+
const labels = (params.labels as string[]) ?? [];
|
|
724
|
+
const linkToIssue = params.linkToIssue as number | undefined;
|
|
725
|
+
const dryRun = (params.dryRun as boolean) ?? false;
|
|
726
|
+
|
|
727
|
+
// 1. Find the plan
|
|
728
|
+
const plan = planner.get(planId);
|
|
729
|
+
if (!plan) throw new Error(`Plan not found: ${planId}`);
|
|
730
|
+
|
|
731
|
+
if (plan.tasks.length === 0) {
|
|
732
|
+
throw new Error('Plan has no tasks — run plan_split first to define tasks before projecting to GitHub');
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
// 2. Detect GitHub context
|
|
736
|
+
const ctx = detectGitHubContext(projectPath);
|
|
737
|
+
if (!ctx) {
|
|
738
|
+
return {
|
|
739
|
+
status: 'skipped',
|
|
740
|
+
reason: 'No GitHub remote detected or gh CLI not authenticated',
|
|
741
|
+
};
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
const repoSlug = `${ctx.repo.owner}/${ctx.repo.repo}`;
|
|
745
|
+
|
|
746
|
+
// 3. Build plan metadata for issue body
|
|
747
|
+
const planMeta: PlanMetadataForIssue = {
|
|
748
|
+
planId: plan.id,
|
|
749
|
+
grade: plan.latestCheck?.grade ?? 'N/A',
|
|
750
|
+
score: plan.latestCheck?.score ?? 0,
|
|
751
|
+
objective: plan.objective,
|
|
752
|
+
decisions: plan.decisions,
|
|
753
|
+
tasks: plan.tasks.map((t) => ({
|
|
754
|
+
id: t.id,
|
|
755
|
+
title: t.title,
|
|
756
|
+
description: t.description,
|
|
757
|
+
dependsOn: t.dependsOn,
|
|
758
|
+
})),
|
|
759
|
+
};
|
|
760
|
+
|
|
761
|
+
// 4. Handle "link to existing issue" flow
|
|
762
|
+
if (linkToIssue) {
|
|
763
|
+
const body = formatIssueBody(planMeta, plan.objective, plan.scope);
|
|
764
|
+
if (dryRun) {
|
|
765
|
+
return {
|
|
766
|
+
status: 'dry_run',
|
|
767
|
+
action: 'update_existing',
|
|
768
|
+
repo: repoSlug,
|
|
769
|
+
issueNumber: linkToIssue,
|
|
770
|
+
bodyPreview: body.slice(0, 500),
|
|
771
|
+
};
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
const updated = updateGitHubIssueBody(ctx.repo, linkToIssue, body);
|
|
775
|
+
if (!updated) {
|
|
776
|
+
return {
|
|
777
|
+
status: 'error',
|
|
778
|
+
reason: `Failed to update issue #${linkToIssue}`,
|
|
779
|
+
};
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
const projection: GitHubProjection = {
|
|
783
|
+
repo: repoSlug,
|
|
784
|
+
issues: [{ taskId: 'all', issueNumber: linkToIssue }],
|
|
785
|
+
projectedAt: Date.now(),
|
|
786
|
+
};
|
|
787
|
+
planner.setGitHubProjection(planId, projection);
|
|
788
|
+
|
|
789
|
+
return {
|
|
790
|
+
status: 'linked',
|
|
791
|
+
repo: repoSlug,
|
|
792
|
+
issueNumber: linkToIssue,
|
|
793
|
+
message: `Plan linked to existing issue #${linkToIssue}`,
|
|
794
|
+
};
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
// 5. Milestone matching
|
|
798
|
+
let milestoneNumber = milestone;
|
|
799
|
+
let milestoneMatch: string | undefined;
|
|
800
|
+
if (!milestoneNumber && ctx.milestones.length > 0 && plan.scope) {
|
|
801
|
+
const match = findMatchingMilestone(plan.scope, ctx.milestones);
|
|
802
|
+
if (match) {
|
|
803
|
+
milestoneNumber = match.number;
|
|
804
|
+
milestoneMatch = match.title;
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
// 6. Create issues per task (with duplicate detection)
|
|
809
|
+
const created: Array<{ taskId: string; issueNumber: number; title: string }> = [];
|
|
810
|
+
const skipped: Array<{ taskId: string; title: string; existingIssue: number; reason: string }> = [];
|
|
811
|
+
const failed: Array<{ taskId: string; title: string; reason: string }> = [];
|
|
812
|
+
|
|
813
|
+
for (const task of plan.tasks) {
|
|
814
|
+
// Duplicate detection
|
|
815
|
+
const dup = findDuplicateIssue(task.title, ctx.existingIssues);
|
|
816
|
+
if (dup) {
|
|
817
|
+
skipped.push({
|
|
818
|
+
taskId: task.id,
|
|
819
|
+
title: task.title,
|
|
820
|
+
existingIssue: dup.number,
|
|
821
|
+
reason: `Existing issue #${dup.number} "${dup.title}" looks like it covers this task`,
|
|
822
|
+
});
|
|
823
|
+
continue;
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
const body = formatIssueBody(planMeta, task.title, task.description);
|
|
827
|
+
|
|
828
|
+
if (dryRun) {
|
|
829
|
+
created.push({ taskId: task.id, issueNumber: 0, title: task.title });
|
|
830
|
+
continue;
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
const issueNumber = createGitHubIssue(ctx.repo, task.title, body, {
|
|
834
|
+
milestone: milestoneNumber,
|
|
835
|
+
labels: labels.length > 0 ? labels : undefined,
|
|
836
|
+
});
|
|
837
|
+
|
|
838
|
+
if (issueNumber) {
|
|
839
|
+
created.push({ taskId: task.id, issueNumber, title: task.title });
|
|
840
|
+
} else {
|
|
841
|
+
failed.push({ taskId: task.id, title: task.title, reason: 'gh issue create failed' });
|
|
842
|
+
}
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
// 7. Store projection on the plan (unless dry run)
|
|
846
|
+
if (!dryRun && created.length > 0) {
|
|
847
|
+
const projection: GitHubProjection = {
|
|
848
|
+
repo: repoSlug,
|
|
849
|
+
milestone: milestoneNumber,
|
|
850
|
+
issues: created.map((c) => ({ taskId: c.taskId, issueNumber: c.issueNumber })),
|
|
851
|
+
projectedAt: Date.now(),
|
|
852
|
+
};
|
|
853
|
+
planner.setGitHubProjection(planId, projection);
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
return {
|
|
857
|
+
status: dryRun ? 'dry_run' : 'projected',
|
|
858
|
+
repo: repoSlug,
|
|
859
|
+
milestone: milestoneMatch
|
|
860
|
+
? { number: milestoneNumber, title: milestoneMatch }
|
|
861
|
+
: milestoneNumber
|
|
862
|
+
? { number: milestoneNumber }
|
|
863
|
+
: null,
|
|
864
|
+
created,
|
|
865
|
+
skipped,
|
|
866
|
+
failed,
|
|
867
|
+
context: {
|
|
868
|
+
milestonesFound: ctx.milestones.length,
|
|
869
|
+
existingIssuesChecked: ctx.existingIssues.length,
|
|
870
|
+
labelsAvailable: ctx.labels.length,
|
|
871
|
+
},
|
|
872
|
+
};
|
|
873
|
+
},
|
|
874
|
+
},
|
|
486
875
|
];
|
|
487
876
|
}
|