@soleri/core 9.0.3 → 9.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +55 -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 +33 -10
- 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 +59 -3
- package/src/engine/core-ops.test.ts +254 -0
- package/src/engine/core-ops.ts +35 -10
- 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
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared type definitions for the planning module.
|
|
3
|
+
* Extracted to avoid circular imports between planner.ts and its extracted modules.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { PlanStatus, PlanGrade } from './plan-lifecycle.js';
|
|
7
|
+
import type { PlanGap } from './gap-types.js';
|
|
8
|
+
import type { GapAnalysisOptions } from './gap-analysis.js';
|
|
9
|
+
|
|
10
|
+
export type TaskStatus = 'pending' | 'in_progress' | 'completed' | 'skipped' | 'failed';
|
|
11
|
+
|
|
12
|
+
export interface TaskEvidence {
|
|
13
|
+
/** What the evidence proves (maps to an acceptance criterion). */
|
|
14
|
+
criterion: string;
|
|
15
|
+
/** Evidence content — command output, URL, file path, description. */
|
|
16
|
+
content: string;
|
|
17
|
+
/** Evidence type. */
|
|
18
|
+
type: 'command_output' | 'url' | 'file' | 'description';
|
|
19
|
+
submittedAt: number;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface TaskMetrics {
|
|
23
|
+
durationMs?: number;
|
|
24
|
+
iterations?: number;
|
|
25
|
+
toolCalls?: number;
|
|
26
|
+
modelTier?: string;
|
|
27
|
+
estimatedCostUsd?: number;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface TaskDeliverable {
|
|
31
|
+
type: 'file' | 'vault_entry' | 'url';
|
|
32
|
+
path: string;
|
|
33
|
+
hash?: string;
|
|
34
|
+
verifiedAt?: number;
|
|
35
|
+
stale?: boolean;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface ExecutionSummary {
|
|
39
|
+
totalDurationMs: number;
|
|
40
|
+
tasksCompleted: number;
|
|
41
|
+
tasksSkipped: number;
|
|
42
|
+
tasksFailed: number;
|
|
43
|
+
avgTaskDurationMs: number;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface VerificationFinding {
|
|
47
|
+
/** What was found (bug, issue, code smell). */
|
|
48
|
+
description: string;
|
|
49
|
+
/** How severe the finding is. */
|
|
50
|
+
severity: 'critical' | 'high' | 'medium' | 'low';
|
|
51
|
+
/** Whether the finding was proven reproducible before fixing. */
|
|
52
|
+
proven: boolean;
|
|
53
|
+
/** How the finding was proven (test case, reproduction steps, stack trace). */
|
|
54
|
+
proof?: string;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export interface TaskVerification {
|
|
58
|
+
/** Findings that motivated changes to existing code. */
|
|
59
|
+
findings: VerificationFinding[];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export interface PlanTask {
|
|
63
|
+
id: string;
|
|
64
|
+
title: string;
|
|
65
|
+
description: string;
|
|
66
|
+
status: TaskStatus;
|
|
67
|
+
/** Optional dependency IDs — tasks that must complete before this one. */
|
|
68
|
+
dependsOn?: string[];
|
|
69
|
+
/** Evidence submitted for task acceptance criteria. */
|
|
70
|
+
evidence?: TaskEvidence[];
|
|
71
|
+
/** Whether this task has been verified (all evidence checked + reviews passed). */
|
|
72
|
+
verified?: boolean;
|
|
73
|
+
/** Task-level acceptance criteria (for verification checking). */
|
|
74
|
+
acceptanceCriteria?: string[];
|
|
75
|
+
/** Timestamp when task was first moved to in_progress. */
|
|
76
|
+
startedAt?: number;
|
|
77
|
+
/** Timestamp when task reached a terminal state (completed/skipped/failed). */
|
|
78
|
+
completedAt?: number;
|
|
79
|
+
/** Per-task execution metrics. */
|
|
80
|
+
metrics?: TaskMetrics;
|
|
81
|
+
/** Deliverables produced by this task. */
|
|
82
|
+
deliverables?: TaskDeliverable[];
|
|
83
|
+
/** Verification findings for tasks that modify existing code. Advisory only. */
|
|
84
|
+
verification?: TaskVerification;
|
|
85
|
+
updatedAt: number;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export interface DriftItem {
|
|
89
|
+
/** Type of drift */
|
|
90
|
+
type: 'skipped' | 'added' | 'modified' | 'reordered';
|
|
91
|
+
/** What drifted */
|
|
92
|
+
description: string;
|
|
93
|
+
/** How much this affected the plan */
|
|
94
|
+
impact: 'low' | 'medium' | 'high';
|
|
95
|
+
/** Why the drift occurred */
|
|
96
|
+
rationale: string;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export interface ReconciliationReport {
|
|
100
|
+
planId: string;
|
|
101
|
+
/** Accuracy score: 100 = perfect execution, 0 = total drift. Impact-weighted. */
|
|
102
|
+
accuracy: number;
|
|
103
|
+
driftItems: DriftItem[];
|
|
104
|
+
/** Human-readable summary of the drift */
|
|
105
|
+
summary: string;
|
|
106
|
+
reconciledAt: number;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export interface ReviewEvidence {
|
|
110
|
+
planId: string;
|
|
111
|
+
taskId?: string;
|
|
112
|
+
reviewer: string;
|
|
113
|
+
outcome: 'approved' | 'rejected' | 'needs_changes';
|
|
114
|
+
comments: string;
|
|
115
|
+
reviewedAt: number;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export interface PlanCheck {
|
|
119
|
+
checkId: string;
|
|
120
|
+
planId: string;
|
|
121
|
+
grade: PlanGrade;
|
|
122
|
+
score: number; // 0-100
|
|
123
|
+
gaps: PlanGap[];
|
|
124
|
+
iteration: number;
|
|
125
|
+
checkedAt: number;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* A structured decision with rationale.
|
|
130
|
+
* Ported from Salvador's PlanContent.decisions.
|
|
131
|
+
*/
|
|
132
|
+
export interface PlanDecision {
|
|
133
|
+
decision: string;
|
|
134
|
+
rationale: string;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* A rejected alternative approach considered during planning.
|
|
139
|
+
* Plans with 2+ alternatives score higher — forced alternative analysis
|
|
140
|
+
* prevents tunnel vision and strengthens decision rationale.
|
|
141
|
+
*/
|
|
142
|
+
export interface PlanAlternative {
|
|
143
|
+
approach: string;
|
|
144
|
+
pros: string[];
|
|
145
|
+
cons: string[];
|
|
146
|
+
rejected_reason: string;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export interface Plan {
|
|
150
|
+
id: string;
|
|
151
|
+
objective: string;
|
|
152
|
+
scope: string;
|
|
153
|
+
status: PlanStatus;
|
|
154
|
+
/**
|
|
155
|
+
* Decisions can be flat strings (backward compat) or structured {decision, rationale}.
|
|
156
|
+
* New plans should prefer PlanDecision[].
|
|
157
|
+
*/
|
|
158
|
+
decisions: (string | PlanDecision)[];
|
|
159
|
+
tasks: PlanTask[];
|
|
160
|
+
/** High-level approach description. Ported from Salvador's PlanContent. */
|
|
161
|
+
approach?: string;
|
|
162
|
+
/** Additional context for the plan. */
|
|
163
|
+
context?: string;
|
|
164
|
+
/** Measurable success criteria. */
|
|
165
|
+
success_criteria?: string[];
|
|
166
|
+
/** Tools to use in execution order. */
|
|
167
|
+
tool_chain?: string[];
|
|
168
|
+
/** Flow definition to follow (e.g., 'developer', 'reviewer', 'designer'). */
|
|
169
|
+
flow?: string;
|
|
170
|
+
/** Target operational mode (e.g., 'build', 'review', 'fix'). */
|
|
171
|
+
target_mode?: string;
|
|
172
|
+
/** Rejected alternative approaches — plans with 2+ alternatives score higher. */
|
|
173
|
+
alternatives?: PlanAlternative[];
|
|
174
|
+
/** Reconciliation report — populated by reconcile(). */
|
|
175
|
+
reconciliation?: ReconciliationReport;
|
|
176
|
+
/** Review evidence — populated by addReview(). */
|
|
177
|
+
reviews?: ReviewEvidence[];
|
|
178
|
+
/** Latest grading check. */
|
|
179
|
+
latestCheck?: PlanCheck;
|
|
180
|
+
/** All check history. */
|
|
181
|
+
checks: PlanCheck[];
|
|
182
|
+
/** Matched playbook info (set by orchestration layer via playbook_match). */
|
|
183
|
+
playbookMatch?: {
|
|
184
|
+
label: string;
|
|
185
|
+
genericId?: string;
|
|
186
|
+
domainId?: string;
|
|
187
|
+
};
|
|
188
|
+
/** Source GitHub issue this plan was created from (e.g., #NNN in prompt). */
|
|
189
|
+
githubIssue?: { owner: string; repo: string; number: number };
|
|
190
|
+
/** GitHub issue projection — populated by orchestrate_project_to_github. */
|
|
191
|
+
githubProjection?: {
|
|
192
|
+
repo: string;
|
|
193
|
+
milestone?: number;
|
|
194
|
+
issues: Array<{
|
|
195
|
+
taskId: string;
|
|
196
|
+
issueNumber: number;
|
|
197
|
+
}>;
|
|
198
|
+
projectedAt: number;
|
|
199
|
+
};
|
|
200
|
+
/** Aggregate execution metrics — populated by reconcile() and complete(). */
|
|
201
|
+
executionSummary?: ExecutionSummary;
|
|
202
|
+
createdAt: number;
|
|
203
|
+
updatedAt: number;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export interface PlanStore {
|
|
207
|
+
version: string;
|
|
208
|
+
plans: Plan[];
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
export interface PlannerOptions {
|
|
212
|
+
gapOptions?: GapAnalysisOptions;
|
|
213
|
+
/** Minimum grade required for plan approval. Default: 'A'. Set to undefined to disable. */
|
|
214
|
+
minGradeForApproval?: PlanGrade;
|
|
215
|
+
}
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
-
import { Planner } from '
|
|
3
|
-
import type { PlanGap } from '
|
|
4
|
-
import {
|
|
2
|
+
import { Planner, PlanGradeRejectionError } from './planner.js';
|
|
3
|
+
import type { PlanGap } from './gap-types.js';
|
|
4
|
+
import type { PlanAlternative } from './planner.js';
|
|
5
|
+
import { generateGapId } from './gap-types.js';
|
|
5
6
|
import { mkdirSync, rmSync } from 'node:fs';
|
|
6
7
|
import { join } from 'node:path';
|
|
7
8
|
import { tmpdir } from 'node:os';
|
|
8
9
|
|
|
10
|
+
/** Two well-structured alternatives to satisfy pass 8. */
|
|
11
|
+
const TWO_ALTERNATIVES: PlanAlternative[] = [
|
|
12
|
+
{ approach: 'Use alternative A', pros: ['Pro A'], cons: ['Con A'], rejected_reason: 'Not suitable for our use case' },
|
|
13
|
+
{ approach: 'Use alternative B', pros: ['Pro B'], cons: ['Con B'], rejected_reason: 'Too complex for the scope' },
|
|
14
|
+
];
|
|
15
|
+
|
|
9
16
|
describe('Planner', () => {
|
|
10
17
|
let tempDir: string;
|
|
11
18
|
let planner: Planner;
|
|
@@ -101,6 +108,135 @@ describe('Planner', () => {
|
|
|
101
108
|
it('should throw for unknown plan', () => {
|
|
102
109
|
expect(() => planner.approve('plan-xxx')).toThrow('not found');
|
|
103
110
|
});
|
|
111
|
+
|
|
112
|
+
it('should approve a plan with A+ grade', () => {
|
|
113
|
+
const plan = planner.create({
|
|
114
|
+
objective: 'Well-graded plan',
|
|
115
|
+
scope: 'test',
|
|
116
|
+
tasks: [
|
|
117
|
+
{ title: 'Task 1', description: 'A well-described task for implementation' },
|
|
118
|
+
{ title: 'Task 2', description: 'Another well-described task for testing' },
|
|
119
|
+
],
|
|
120
|
+
decisions: ['Use TypeScript for type safety'],
|
|
121
|
+
});
|
|
122
|
+
// Grade the plan — set an A+ grade check
|
|
123
|
+
const p = planner.get(plan.id)!;
|
|
124
|
+
p.latestCheck = {
|
|
125
|
+
checkId: 'chk-test-aplus',
|
|
126
|
+
planId: plan.id,
|
|
127
|
+
grade: 'A+',
|
|
128
|
+
score: 98,
|
|
129
|
+
gaps: [],
|
|
130
|
+
iteration: 1,
|
|
131
|
+
checkedAt: Date.now(),
|
|
132
|
+
};
|
|
133
|
+
p.checks = [p.latestCheck];
|
|
134
|
+
const approved = planner.approve(plan.id);
|
|
135
|
+
expect(approved.status).toBe('approved');
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
it('should reject approval when grade is below A', () => {
|
|
139
|
+
const plan = planner.create({
|
|
140
|
+
objective: 'Bad plan',
|
|
141
|
+
scope: 'test',
|
|
142
|
+
});
|
|
143
|
+
// Manually set a B grade check on the plan
|
|
144
|
+
const p = planner.get(plan.id)!;
|
|
145
|
+
p.latestCheck = {
|
|
146
|
+
checkId: 'chk-test',
|
|
147
|
+
planId: plan.id,
|
|
148
|
+
grade: 'B',
|
|
149
|
+
score: 82,
|
|
150
|
+
gaps: [
|
|
151
|
+
{
|
|
152
|
+
id: 'gap-1',
|
|
153
|
+
severity: 'major',
|
|
154
|
+
category: 'completeness',
|
|
155
|
+
description: 'Missing tasks',
|
|
156
|
+
recommendation: 'Add tasks',
|
|
157
|
+
location: 'tasks',
|
|
158
|
+
},
|
|
159
|
+
],
|
|
160
|
+
iteration: 1,
|
|
161
|
+
checkedAt: Date.now(),
|
|
162
|
+
};
|
|
163
|
+
p.checks = [p.latestCheck];
|
|
164
|
+
expect(() => planner.approve(plan.id)).toThrow(PlanGradeRejectionError);
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
it('should approve a plan with no grade check (backward compatibility)', () => {
|
|
168
|
+
const plan = planner.create({ objective: 'No grade plan', scope: 'test' });
|
|
169
|
+
// No grade() call — latestCheck is undefined
|
|
170
|
+
const approved = planner.approve(plan.id);
|
|
171
|
+
expect(approved.status).toBe('approved');
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
it('should respect configurable minGradeForApproval threshold', () => {
|
|
175
|
+
const lenientPlanner = new Planner(join(tempDir, 'lenient-plans.json'), {
|
|
176
|
+
minGradeForApproval: 'B',
|
|
177
|
+
});
|
|
178
|
+
const plan = lenientPlanner.create({ objective: 'B-grade plan', scope: 'test' });
|
|
179
|
+
// Set a B grade check
|
|
180
|
+
const p = lenientPlanner.get(plan.id)!;
|
|
181
|
+
p.latestCheck = {
|
|
182
|
+
checkId: 'chk-test-b',
|
|
183
|
+
planId: plan.id,
|
|
184
|
+
grade: 'B',
|
|
185
|
+
score: 82,
|
|
186
|
+
gaps: [],
|
|
187
|
+
iteration: 1,
|
|
188
|
+
checkedAt: Date.now(),
|
|
189
|
+
};
|
|
190
|
+
p.checks = [p.latestCheck];
|
|
191
|
+
// B grade should pass with B threshold
|
|
192
|
+
const approved = lenientPlanner.approve(plan.id);
|
|
193
|
+
expect(approved.status).toBe('approved');
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
it('should reject with PlanGradeRejectionError containing gap details', () => {
|
|
197
|
+
const plan = planner.create({ objective: 'Gap details', scope: 'test' });
|
|
198
|
+
const p = planner.get(plan.id)!;
|
|
199
|
+
const testGaps = [
|
|
200
|
+
{
|
|
201
|
+
id: 'gap-crit',
|
|
202
|
+
severity: 'critical' as const,
|
|
203
|
+
category: 'structure',
|
|
204
|
+
description: 'Missing critical structure',
|
|
205
|
+
recommendation: 'Fix structure',
|
|
206
|
+
location: 'tasks',
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
id: 'gap-maj',
|
|
210
|
+
severity: 'major' as const,
|
|
211
|
+
category: 'completeness',
|
|
212
|
+
description: 'Incomplete scope',
|
|
213
|
+
recommendation: 'Add scope details',
|
|
214
|
+
location: 'scope',
|
|
215
|
+
},
|
|
216
|
+
];
|
|
217
|
+
p.latestCheck = {
|
|
218
|
+
checkId: 'chk-test-gaps',
|
|
219
|
+
planId: plan.id,
|
|
220
|
+
grade: 'C',
|
|
221
|
+
score: 65,
|
|
222
|
+
gaps: testGaps,
|
|
223
|
+
iteration: 1,
|
|
224
|
+
checkedAt: Date.now(),
|
|
225
|
+
};
|
|
226
|
+
p.checks = [p.latestCheck];
|
|
227
|
+
try {
|
|
228
|
+
planner.approve(plan.id);
|
|
229
|
+
expect.unreachable('Should have thrown');
|
|
230
|
+
} catch (err) {
|
|
231
|
+
expect(err).toBeInstanceOf(PlanGradeRejectionError);
|
|
232
|
+
const rejection = err as PlanGradeRejectionError;
|
|
233
|
+
expect(rejection.grade).toBe('C');
|
|
234
|
+
expect(rejection.score).toBe(65);
|
|
235
|
+
expect(rejection.minGrade).toBe('A');
|
|
236
|
+
expect(rejection.gaps).toHaveLength(2);
|
|
237
|
+
expect(rejection.message).toContain('below the minimum required grade A');
|
|
238
|
+
}
|
|
239
|
+
});
|
|
104
240
|
});
|
|
105
241
|
|
|
106
242
|
describe('startExecution', () => {
|
|
@@ -187,16 +323,31 @@ describe('Planner', () => {
|
|
|
187
323
|
expect(completed.status).toBe('completed');
|
|
188
324
|
});
|
|
189
325
|
|
|
190
|
-
it('should
|
|
191
|
-
const plan = planner.create({ objective: '
|
|
326
|
+
it('should auto-reconcile when completing from executing state', () => {
|
|
327
|
+
const plan = planner.create({ objective: 'Auto reconcile', scope: 'test' });
|
|
192
328
|
planner.approve(plan.id);
|
|
193
329
|
planner.startExecution(plan.id);
|
|
194
|
-
|
|
330
|
+
const completed = planner.complete(plan.id);
|
|
331
|
+
expect(completed.status).toBe('completed');
|
|
332
|
+
expect(completed.reconciliation).toBeDefined();
|
|
333
|
+
expect(completed.reconciliation!.summary).toBe('All tasks completed');
|
|
334
|
+
expect(completed.reconciliation!.reconciledAt).toBeGreaterThan(0);
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
it('should auto-reconcile when completing from validating state', () => {
|
|
338
|
+
const plan = planner.create({ objective: 'Auto reconcile from validating', scope: 'test' });
|
|
339
|
+
planner.approve(plan.id);
|
|
340
|
+
planner.startExecution(plan.id);
|
|
341
|
+
planner.startValidation(plan.id);
|
|
342
|
+
const completed = planner.complete(plan.id);
|
|
343
|
+
expect(completed.status).toBe('completed');
|
|
344
|
+
expect(completed.reconciliation).toBeDefined();
|
|
345
|
+
expect(completed.reconciliation!.summary).toBe('All tasks completed');
|
|
195
346
|
});
|
|
196
347
|
|
|
197
348
|
it('should throw when completing from draft', () => {
|
|
198
349
|
const plan = planner.create({ objective: 'Not executing', scope: 'test' });
|
|
199
|
-
expect(() => planner.complete(plan.id)).toThrow(
|
|
350
|
+
expect(() => planner.complete(plan.id)).toThrow();
|
|
200
351
|
});
|
|
201
352
|
});
|
|
202
353
|
|
|
@@ -264,6 +415,7 @@ describe('Planner', () => {
|
|
|
264
415
|
},
|
|
265
416
|
{ title: 'Add monitoring', description: 'Track and verify cache hit rate metrics' },
|
|
266
417
|
],
|
|
418
|
+
alternatives: TWO_ALTERNATIVES,
|
|
267
419
|
});
|
|
268
420
|
const check = planner.grade(plan.id);
|
|
269
421
|
// Iteration 1: minor gaps are free, so well-formed plan scores very high
|
|
@@ -283,15 +435,15 @@ describe('Planner', () => {
|
|
|
283
435
|
});
|
|
284
436
|
|
|
285
437
|
it('should use severity-weighted scoring', () => {
|
|
286
|
-
// Plan with 1 critical gap (missing tasks) = -30
|
|
438
|
+
// Plan with 1 critical gap (missing tasks) = -30, 1 major (no alternatives) = -15
|
|
287
439
|
const plan = planner.create({
|
|
288
440
|
objective: 'Good objective with some detail',
|
|
289
441
|
scope: 'Narrow scope that excludes nothing important',
|
|
290
442
|
});
|
|
291
443
|
const check = planner.grade(plan.id);
|
|
292
|
-
// No tasks = critical (-30),
|
|
293
|
-
// On iteration 1, minor gaps are free, so only critical
|
|
294
|
-
expect(check.score).toBe(
|
|
444
|
+
// No tasks = critical (-30), no alternatives = major (-15)
|
|
445
|
+
// On iteration 1, minor gaps are free, so only critical + major count
|
|
446
|
+
expect(check.score).toBe(55); // 100 - 30 (no tasks) - 15 (no alternatives)
|
|
295
447
|
});
|
|
296
448
|
|
|
297
449
|
it('should detect duplicate task titles', () => {
|
|
@@ -359,6 +511,7 @@ describe('Planner', () => {
|
|
|
359
511
|
},
|
|
360
512
|
{ title: 'Write auth tests', description: 'Integration tests for all auth endpoints' },
|
|
361
513
|
],
|
|
514
|
+
alternatives: TWO_ALTERNATIVES,
|
|
362
515
|
});
|
|
363
516
|
|
|
364
517
|
// Iteration 1: minor gaps free → score should be 100
|
|
@@ -442,11 +595,12 @@ describe('Planner', () => {
|
|
|
442
595
|
|
|
443
596
|
it('should use correct grade thresholds: A+=95, A=90, B=80, C=70, D=60', () => {
|
|
444
597
|
// We can verify by creating plans with known gap profiles
|
|
445
|
-
// Plan with
|
|
598
|
+
// Plan with 2 major gaps = score 70 → grade C (70-79)
|
|
446
599
|
const plan = planner.create({
|
|
447
600
|
objective: 'Test threshold plan with a good objective description',
|
|
448
601
|
scope: 'Narrow scope, does not include anything beyond testing',
|
|
449
602
|
decisions: [], // no decisions = major gap from semantic-quality (-15)
|
|
603
|
+
// no alternatives = major gap from alternative-analysis (-15)
|
|
450
604
|
tasks: [
|
|
451
605
|
{ title: 'Task 1', description: 'First detailed task description' },
|
|
452
606
|
{ title: 'Task 2', description: 'Second detailed task description' },
|
|
@@ -454,9 +608,9 @@ describe('Planner', () => {
|
|
|
454
608
|
],
|
|
455
609
|
});
|
|
456
610
|
const check = planner.grade(plan.id);
|
|
457
|
-
//
|
|
458
|
-
expect(check.score).toBe(
|
|
459
|
-
expect(check.grade).toBe('
|
|
611
|
+
// 2 major gaps: no decisions (-15) + no alternatives (-15) = -30, iter 1 minor gaps free
|
|
612
|
+
expect(check.score).toBe(70);
|
|
613
|
+
expect(check.grade).toBe('C');
|
|
460
614
|
});
|
|
461
615
|
});
|
|
462
616
|
|