@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
|
@@ -1,27 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Vault Sharing Ops — knowledge scoping
|
|
2
|
+
* Vault Sharing Ops — knowledge scoping operations.
|
|
3
3
|
*
|
|
4
4
|
* Covers:
|
|
5
5
|
* - #105: Knowledge scoping (detect_scope, set_scope, scope-aware filtering)
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
*
|
|
7
|
+
* Git/Obsidian/pack sync ops → sync-ops.ts (sync facade)
|
|
8
|
+
* Review workflow ops → review-ops.ts (review facade)
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import { z } from 'zod';
|
|
12
12
|
import type { OpDefinition } from '../facades/types.js';
|
|
13
13
|
import type { AgentRuntime } from './types.js';
|
|
14
14
|
import { detectScope, type ScopeInput } from '../vault/scope-detector.js';
|
|
15
|
-
import { GitVaultSync, type GitVaultSyncConfig } from '../vault/git-vault-sync.js';
|
|
16
|
-
import type {
|
|
17
|
-
IntelligenceEntry,
|
|
18
|
-
IntelligenceBundle,
|
|
19
|
-
IntelligenceBundleLink,
|
|
20
|
-
} from '../intelligence/types.js';
|
|
21
|
-
import { LinkManager } from '../vault/linking.js';
|
|
22
15
|
|
|
23
16
|
export function createVaultSharingOps(runtime: AgentRuntime): OpDefinition[] {
|
|
24
|
-
const { vault
|
|
17
|
+
const { vault } = runtime;
|
|
25
18
|
|
|
26
19
|
return [
|
|
27
20
|
// ─── Scoping (#105) ───────────────────────────────────────────
|
|
@@ -110,322 +103,5 @@ export function createVaultSharingOps(runtime: AgentRuntime): OpDefinition[] {
|
|
|
110
103
|
return { entries, count: entries.length, tier };
|
|
111
104
|
},
|
|
112
105
|
},
|
|
113
|
-
|
|
114
|
-
// ─── Export to Pack (#104) ─────────────────────────────────────
|
|
115
|
-
{
|
|
116
|
-
name: 'vault_export_pack',
|
|
117
|
-
description:
|
|
118
|
-
'Export vault entries as a shareable intelligence pack. Filters by tier, domain, or tags. Returns IntelligenceBundle format.',
|
|
119
|
-
auth: 'read' as const,
|
|
120
|
-
schema: z.object({
|
|
121
|
-
name: z.string().optional().describe('Pack name (default: agent ID)'),
|
|
122
|
-
version: z.string().optional().describe('Pack version (default: 1.0.0)'),
|
|
123
|
-
tier: z.enum(['agent', 'project', 'team']).optional().describe('Filter by scope tier'),
|
|
124
|
-
domain: z.string().optional().describe('Filter by domain'),
|
|
125
|
-
tags: z.array(z.string()).optional().describe('Filter by tags (OR match)'),
|
|
126
|
-
excludeIds: z.array(z.string()).optional().describe('Entry IDs to exclude'),
|
|
127
|
-
}),
|
|
128
|
-
handler: async (params) => {
|
|
129
|
-
const tier = params.tier as string | undefined;
|
|
130
|
-
const domain = params.domain as string | undefined;
|
|
131
|
-
const tags = params.tags as string[] | undefined;
|
|
132
|
-
const excludeIds = new Set((params.excludeIds as string[] | undefined) ?? []);
|
|
133
|
-
|
|
134
|
-
// Get all matching entries
|
|
135
|
-
let entries = vault.list({ domain, tags, limit: 10000 });
|
|
136
|
-
|
|
137
|
-
// Filter by tier if specified
|
|
138
|
-
if (tier) {
|
|
139
|
-
entries = entries.filter((e) => e.tier === tier);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
// Exclude specified IDs
|
|
143
|
-
if (excludeIds.size > 0) {
|
|
144
|
-
entries = entries.filter((e) => !excludeIds.has(e.id));
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// Group by domain into bundles
|
|
148
|
-
const byDomain = new Map<string, IntelligenceEntry[]>();
|
|
149
|
-
for (const entry of entries) {
|
|
150
|
-
const d = entry.domain;
|
|
151
|
-
if (!byDomain.has(d)) byDomain.set(d, []);
|
|
152
|
-
byDomain.get(d)!.push(entry);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
// Collect links for exported entries (Zettelkasten edge export)
|
|
156
|
-
const entryIds = new Set(entries.map((e) => e.id));
|
|
157
|
-
const linkManager = new LinkManager(vault.getProvider());
|
|
158
|
-
const allLinks = linkManager.getAllLinksForEntries([...entryIds]);
|
|
159
|
-
// Only include links where BOTH endpoints are in the export set
|
|
160
|
-
const exportLinks = allLinks.filter(
|
|
161
|
-
(l) => entryIds.has(l.sourceId) && entryIds.has(l.targetId),
|
|
162
|
-
);
|
|
163
|
-
|
|
164
|
-
// Build a domain→links map (group by source entry's domain)
|
|
165
|
-
const entryDomainMap = new Map(entries.map((e) => [e.id, e.domain]));
|
|
166
|
-
const linksByDomain = new Map<string, IntelligenceBundleLink[]>();
|
|
167
|
-
for (const link of exportLinks) {
|
|
168
|
-
const linkDomain = entryDomainMap.get(link.sourceId) ?? 'unknown';
|
|
169
|
-
if (!linksByDomain.has(linkDomain)) linksByDomain.set(linkDomain, []);
|
|
170
|
-
linksByDomain.get(linkDomain)!.push({
|
|
171
|
-
sourceId: link.sourceId,
|
|
172
|
-
targetId: link.targetId,
|
|
173
|
-
linkType: link.linkType,
|
|
174
|
-
note: link.note,
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
const version = (params.version as string) ?? '1.0.0';
|
|
179
|
-
const bundles: IntelligenceBundle[] = [];
|
|
180
|
-
for (const [d, domainEntries] of byDomain) {
|
|
181
|
-
bundles.push({
|
|
182
|
-
domain: d,
|
|
183
|
-
version,
|
|
184
|
-
entries: domainEntries,
|
|
185
|
-
links: linksByDomain.get(d) ?? [],
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
return {
|
|
190
|
-
name: (params.name as string) ?? runtime.config.agentId,
|
|
191
|
-
version,
|
|
192
|
-
bundles,
|
|
193
|
-
totalEntries: entries.length,
|
|
194
|
-
totalLinks: exportLinks.length,
|
|
195
|
-
domains: [...byDomain.keys()],
|
|
196
|
-
};
|
|
197
|
-
},
|
|
198
|
-
},
|
|
199
|
-
{
|
|
200
|
-
name: 'vault_import_pack',
|
|
201
|
-
description:
|
|
202
|
-
'Import an intelligence pack into the vault with content-hash dedup. Entries with duplicate content are skipped.',
|
|
203
|
-
auth: 'write' as const,
|
|
204
|
-
schema: z.object({
|
|
205
|
-
bundles: z
|
|
206
|
-
.array(
|
|
207
|
-
z.object({
|
|
208
|
-
domain: z.string(),
|
|
209
|
-
version: z.string(),
|
|
210
|
-
entries: z.array(z.record(z.unknown())),
|
|
211
|
-
}),
|
|
212
|
-
)
|
|
213
|
-
.describe('Array of IntelligenceBundle objects to import'),
|
|
214
|
-
tier: z
|
|
215
|
-
.enum(['agent', 'project', 'team'])
|
|
216
|
-
.optional()
|
|
217
|
-
.describe('Force all imported entries to this tier'),
|
|
218
|
-
}),
|
|
219
|
-
handler: async (params) => {
|
|
220
|
-
const bundles = params.bundles as Array<{
|
|
221
|
-
domain: string;
|
|
222
|
-
version: string;
|
|
223
|
-
entries: IntelligenceEntry[];
|
|
224
|
-
links?: IntelligenceBundleLink[];
|
|
225
|
-
}>;
|
|
226
|
-
const forceTier = params.tier as 'agent' | 'project' | 'team' | undefined;
|
|
227
|
-
let imported = 0;
|
|
228
|
-
let duplicates = 0;
|
|
229
|
-
let linksCreated = 0;
|
|
230
|
-
let linksSkipped = 0;
|
|
231
|
-
|
|
232
|
-
// Track ID remapping: bundle entry ID → actual vault entry ID
|
|
233
|
-
const idRemap = new Map<string, string>();
|
|
234
|
-
const linkManager = new LinkManager(vault.getProvider());
|
|
235
|
-
|
|
236
|
-
for (const bundle of bundles) {
|
|
237
|
-
const entries = bundle.entries.map((e) => ({
|
|
238
|
-
...e,
|
|
239
|
-
tier: forceTier ?? e.tier ?? 'project',
|
|
240
|
-
}));
|
|
241
|
-
const results = vault.seedDedup(entries);
|
|
242
|
-
for (let i = 0; i < results.length; i++) {
|
|
243
|
-
const r = results[i];
|
|
244
|
-
const originalId = bundle.entries[i].id;
|
|
245
|
-
// For duplicates, map to the existing vault entry; for inserts, keep original ID
|
|
246
|
-
idRemap.set(originalId, r.existingId ?? r.id);
|
|
247
|
-
if (r.action === 'inserted') imported++;
|
|
248
|
-
else duplicates++;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
// Import links if present
|
|
252
|
-
if (bundle.links && bundle.links.length > 0) {
|
|
253
|
-
for (const link of bundle.links) {
|
|
254
|
-
const sourceId = idRemap.get(link.sourceId);
|
|
255
|
-
const targetId = idRemap.get(link.targetId);
|
|
256
|
-
if (sourceId && targetId) {
|
|
257
|
-
linkManager.addLink(sourceId, targetId, link.linkType, link.note);
|
|
258
|
-
linksCreated++;
|
|
259
|
-
} else {
|
|
260
|
-
linksSkipped++;
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
return { imported, duplicates, linksCreated, linksSkipped, total: imported + duplicates };
|
|
267
|
-
},
|
|
268
|
-
},
|
|
269
|
-
|
|
270
|
-
// ─── Git Sync (#67) ───────────────────────────────────────────
|
|
271
|
-
{
|
|
272
|
-
name: 'vault_git_push',
|
|
273
|
-
description:
|
|
274
|
-
'Push all vault entries to a git-tracked directory. Each entry becomes a JSON file under domain subdirectories.',
|
|
275
|
-
auth: 'write' as const,
|
|
276
|
-
schema: z.object({
|
|
277
|
-
repoDir: z.string().describe('Path to git-tracked vault directory'),
|
|
278
|
-
authorName: z.string().optional().describe('Git author name'),
|
|
279
|
-
authorEmail: z.string().optional().describe('Git author email'),
|
|
280
|
-
}),
|
|
281
|
-
handler: async (params) => {
|
|
282
|
-
const config: GitVaultSyncConfig = {
|
|
283
|
-
repoDir: params.repoDir as string,
|
|
284
|
-
authorName: params.authorName as string | undefined,
|
|
285
|
-
authorEmail: params.authorEmail as string | undefined,
|
|
286
|
-
};
|
|
287
|
-
const sync = new GitVaultSync(config);
|
|
288
|
-
await sync.init();
|
|
289
|
-
const { entries } = vault.exportAll();
|
|
290
|
-
return sync.syncAll(entries);
|
|
291
|
-
},
|
|
292
|
-
},
|
|
293
|
-
{
|
|
294
|
-
name: 'vault_git_pull',
|
|
295
|
-
description:
|
|
296
|
-
'Pull entries from a git-tracked directory into the vault. Reads JSON files and imports with conflict resolution.',
|
|
297
|
-
auth: 'write' as const,
|
|
298
|
-
schema: z.object({
|
|
299
|
-
repoDir: z.string().describe('Path to git-tracked vault directory'),
|
|
300
|
-
onConflict: z
|
|
301
|
-
.enum(['git', 'vault'])
|
|
302
|
-
.optional()
|
|
303
|
-
.describe(
|
|
304
|
-
'Conflict resolution: "git" (default) overwrites vault, "vault" keeps existing',
|
|
305
|
-
),
|
|
306
|
-
}),
|
|
307
|
-
handler: async (params) => {
|
|
308
|
-
const config: GitVaultSyncConfig = {
|
|
309
|
-
repoDir: params.repoDir as string,
|
|
310
|
-
autoCommit: false,
|
|
311
|
-
};
|
|
312
|
-
const sync = new GitVaultSync(config);
|
|
313
|
-
await sync.init();
|
|
314
|
-
return sync.pull(vault, {
|
|
315
|
-
onConflict: params.onConflict as 'git' | 'vault' | undefined,
|
|
316
|
-
});
|
|
317
|
-
},
|
|
318
|
-
},
|
|
319
|
-
{
|
|
320
|
-
name: 'vault_git_sync',
|
|
321
|
-
description:
|
|
322
|
-
'Bidirectional sync between vault and git directory. Pushes vault entries to git and pulls git-only entries into vault.',
|
|
323
|
-
auth: 'write' as const,
|
|
324
|
-
schema: z.object({
|
|
325
|
-
repoDir: z.string().describe('Path to git-tracked vault directory'),
|
|
326
|
-
onConflict: z
|
|
327
|
-
.enum(['git', 'vault'])
|
|
328
|
-
.optional()
|
|
329
|
-
.describe('Conflict resolution for entries that exist in both'),
|
|
330
|
-
authorName: z.string().optional(),
|
|
331
|
-
authorEmail: z.string().optional(),
|
|
332
|
-
}),
|
|
333
|
-
handler: async (params) => {
|
|
334
|
-
const config: GitVaultSyncConfig = {
|
|
335
|
-
repoDir: params.repoDir as string,
|
|
336
|
-
authorName: params.authorName as string | undefined,
|
|
337
|
-
authorEmail: params.authorEmail as string | undefined,
|
|
338
|
-
};
|
|
339
|
-
const sync = new GitVaultSync(config);
|
|
340
|
-
await sync.init();
|
|
341
|
-
return sync.sync(vault, {
|
|
342
|
-
onConflict: params.onConflict as 'git' | 'vault' | undefined,
|
|
343
|
-
});
|
|
344
|
-
},
|
|
345
|
-
},
|
|
346
|
-
|
|
347
|
-
// ─── Review Workflows (#65) ───────────────────────────────────
|
|
348
|
-
{
|
|
349
|
-
name: 'vault_submit_review',
|
|
350
|
-
description:
|
|
351
|
-
'Submit a vault entry for team review. Transitions entry from draft → pending_review.',
|
|
352
|
-
auth: 'write' as const,
|
|
353
|
-
schema: z.object({
|
|
354
|
-
entryId: z.string().describe('Entry ID to submit for review'),
|
|
355
|
-
submittedBy: z.string().optional().describe('Name/ID of the submitter'),
|
|
356
|
-
}),
|
|
357
|
-
handler: async (params) => {
|
|
358
|
-
try {
|
|
359
|
-
return knowledgeReview.submit({
|
|
360
|
-
entryId: params.entryId as string,
|
|
361
|
-
submittedBy: params.submittedBy as string | undefined,
|
|
362
|
-
});
|
|
363
|
-
} catch (err) {
|
|
364
|
-
return { error: (err as Error).message };
|
|
365
|
-
}
|
|
366
|
-
},
|
|
367
|
-
},
|
|
368
|
-
{
|
|
369
|
-
name: 'vault_approve',
|
|
370
|
-
description: 'Approve a pending vault entry. Transitions from pending_review → approved.',
|
|
371
|
-
auth: 'admin' as const,
|
|
372
|
-
schema: z.object({
|
|
373
|
-
entryId: z.string().describe('Entry ID to approve'),
|
|
374
|
-
reviewedBy: z.string().optional().describe('Name/ID of the reviewer'),
|
|
375
|
-
comment: z.string().optional().describe('Review comment'),
|
|
376
|
-
}),
|
|
377
|
-
handler: async (params) => {
|
|
378
|
-
try {
|
|
379
|
-
return knowledgeReview.approve({
|
|
380
|
-
entryId: params.entryId as string,
|
|
381
|
-
reviewedBy: params.reviewedBy as string | undefined,
|
|
382
|
-
comment: params.comment as string | undefined,
|
|
383
|
-
});
|
|
384
|
-
} catch (err) {
|
|
385
|
-
return { error: (err as Error).message };
|
|
386
|
-
}
|
|
387
|
-
},
|
|
388
|
-
},
|
|
389
|
-
{
|
|
390
|
-
name: 'vault_reject',
|
|
391
|
-
description: 'Reject a pending vault entry. Transitions from pending_review → rejected.',
|
|
392
|
-
auth: 'admin' as const,
|
|
393
|
-
schema: z.object({
|
|
394
|
-
entryId: z.string().describe('Entry ID to reject'),
|
|
395
|
-
reviewedBy: z.string().optional().describe('Name/ID of the reviewer'),
|
|
396
|
-
comment: z.string().optional().describe('Reason for rejection'),
|
|
397
|
-
}),
|
|
398
|
-
handler: async (params) => {
|
|
399
|
-
try {
|
|
400
|
-
return knowledgeReview.reject({
|
|
401
|
-
entryId: params.entryId as string,
|
|
402
|
-
reviewedBy: params.reviewedBy as string | undefined,
|
|
403
|
-
comment: params.comment as string | undefined,
|
|
404
|
-
});
|
|
405
|
-
} catch (err) {
|
|
406
|
-
return { error: (err as Error).message };
|
|
407
|
-
}
|
|
408
|
-
},
|
|
409
|
-
},
|
|
410
|
-
{
|
|
411
|
-
name: 'vault_pending_reviews',
|
|
412
|
-
description: 'List all vault entries pending team review.',
|
|
413
|
-
auth: 'read' as const,
|
|
414
|
-
schema: z.object({
|
|
415
|
-
limit: z.number().optional().describe('Max entries to return'),
|
|
416
|
-
}),
|
|
417
|
-
handler: async (params) => {
|
|
418
|
-
const pending = knowledgeReview.listPending((params.limit as number) ?? 50);
|
|
419
|
-
return { pending, count: pending.length };
|
|
420
|
-
},
|
|
421
|
-
},
|
|
422
|
-
{
|
|
423
|
-
name: 'vault_review_stats',
|
|
424
|
-
description: 'Get review workflow statistics — counts by status.',
|
|
425
|
-
auth: 'read' as const,
|
|
426
|
-
handler: async () => {
|
|
427
|
-
return knowledgeReview.stats();
|
|
428
|
-
},
|
|
429
|
-
},
|
|
430
106
|
];
|
|
431
107
|
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill sync — discovers SKILL.md files in agent skills directories
|
|
3
|
+
* and copies them to ~/.claude/commands/ for Claude Code discovery.
|
|
4
|
+
*
|
|
5
|
+
* Injects agent branding so users know which agent owns the skill.
|
|
6
|
+
* Called automatically at engine startup and by admin_setup_global.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
existsSync,
|
|
11
|
+
readdirSync,
|
|
12
|
+
readFileSync,
|
|
13
|
+
writeFileSync,
|
|
14
|
+
mkdirSync,
|
|
15
|
+
statSync,
|
|
16
|
+
} from 'node:fs';
|
|
17
|
+
import { join } from 'node:path';
|
|
18
|
+
import { homedir } from 'node:os';
|
|
19
|
+
|
|
20
|
+
export interface SkillEntry {
|
|
21
|
+
name: string;
|
|
22
|
+
sourcePath: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface SyncResult {
|
|
26
|
+
installed: string[];
|
|
27
|
+
updated: string[];
|
|
28
|
+
skipped: string[];
|
|
29
|
+
failed: string[];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** Discover skill files (SKILL.md) in skills directories */
|
|
33
|
+
export function discoverSkills(skillsDirs: string[]): SkillEntry[] {
|
|
34
|
+
const skills: SkillEntry[] = [];
|
|
35
|
+
|
|
36
|
+
for (const dir of skillsDirs) {
|
|
37
|
+
if (!existsSync(dir)) continue;
|
|
38
|
+
const entries = readdirSync(dir, { withFileTypes: true });
|
|
39
|
+
for (const entry of entries) {
|
|
40
|
+
if (!entry.isDirectory()) continue;
|
|
41
|
+
const skillPath = join(dir, entry.name, 'SKILL.md');
|
|
42
|
+
if (existsSync(skillPath)) {
|
|
43
|
+
skills.push({ name: entry.name, sourcePath: skillPath });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return skills;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** Inject agent branding after YAML frontmatter */
|
|
52
|
+
function brandSkillContent(content: string, agentName: string): string {
|
|
53
|
+
// Find end of frontmatter (second ---)
|
|
54
|
+
const fmEnd = content.indexOf('---', content.indexOf('---') + 3);
|
|
55
|
+
if (fmEnd === -1) return content;
|
|
56
|
+
|
|
57
|
+
const afterFm = fmEnd + 3;
|
|
58
|
+
const before = content.slice(0, afterFm);
|
|
59
|
+
const after = content.slice(afterFm);
|
|
60
|
+
|
|
61
|
+
const brandLine = `\n\n> **${agentName}** skill\n`;
|
|
62
|
+
return before + brandLine + after;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Sync skills from agent directory to ~/.claude/commands/.
|
|
67
|
+
* - New skills are installed with agent branding
|
|
68
|
+
* - Changed skills are overwritten (compared by mtime)
|
|
69
|
+
* - Missing source skills leave target untouched (other agents may own them)
|
|
70
|
+
*/
|
|
71
|
+
export function syncSkillsToClaudeCode(
|
|
72
|
+
skillsDirs: string[],
|
|
73
|
+
agentName?: string,
|
|
74
|
+
): SyncResult {
|
|
75
|
+
const commandsDir = join(homedir(), '.claude', 'commands');
|
|
76
|
+
const skills = discoverSkills(skillsDirs);
|
|
77
|
+
const result: SyncResult = { installed: [], updated: [], skipped: [], failed: [] };
|
|
78
|
+
|
|
79
|
+
if (skills.length === 0) return result;
|
|
80
|
+
|
|
81
|
+
mkdirSync(commandsDir, { recursive: true });
|
|
82
|
+
|
|
83
|
+
for (const skill of skills) {
|
|
84
|
+
const targetPath = join(commandsDir, `${skill.name}.md`);
|
|
85
|
+
try {
|
|
86
|
+
const sourceContent = readFileSync(skill.sourcePath, 'utf-8');
|
|
87
|
+
const branded = agentName ? brandSkillContent(sourceContent, agentName) : sourceContent;
|
|
88
|
+
|
|
89
|
+
if (!existsSync(targetPath)) {
|
|
90
|
+
writeFileSync(targetPath, branded);
|
|
91
|
+
result.installed.push(skill.name);
|
|
92
|
+
} else {
|
|
93
|
+
const sourceMtime = statSync(skill.sourcePath).mtimeMs;
|
|
94
|
+
const targetMtime = statSync(targetPath).mtimeMs;
|
|
95
|
+
if (sourceMtime > targetMtime) {
|
|
96
|
+
writeFileSync(targetPath, branded);
|
|
97
|
+
result.updated.push(skill.name);
|
|
98
|
+
} else {
|
|
99
|
+
result.skipped.push(skill.name);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
} catch {
|
|
103
|
+
result.failed.push(skill.name);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return result;
|
|
108
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { normalize, collect } from './normalize.js';
|
|
3
|
+
|
|
4
|
+
// ─── normalize ───────────────────────────────────────────────────────
|
|
5
|
+
|
|
6
|
+
describe('normalize', () => {
|
|
7
|
+
it('yields a single value', async () => {
|
|
8
|
+
const result = await collect(normalize(42));
|
|
9
|
+
expect(result).toEqual([42]);
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
it('yields a flat array', async () => {
|
|
13
|
+
const result = await collect(normalize([1, 2, 3]));
|
|
14
|
+
expect(result).toEqual([1, 2, 3]);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('resolves a promise of a single value', async () => {
|
|
18
|
+
const result = await collect(normalize(Promise.resolve('hello')));
|
|
19
|
+
expect(result).toEqual(['hello']);
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('resolves a promise of an array', async () => {
|
|
23
|
+
const result = await collect(normalize(Promise.resolve([10, 20])));
|
|
24
|
+
expect(result).toEqual([10, 20]);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it('flattens an async iterable', async () => {
|
|
28
|
+
async function* gen(): AsyncIterable<number> {
|
|
29
|
+
yield 1;
|
|
30
|
+
yield 2;
|
|
31
|
+
yield 3;
|
|
32
|
+
}
|
|
33
|
+
const result = await collect(normalize(gen()));
|
|
34
|
+
expect(result).toEqual([1, 2, 3]);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it('flattens nested sync iterables', async () => {
|
|
38
|
+
const nested = [[1, 2], [3], [4, 5]];
|
|
39
|
+
const result = await collect(normalize(nested));
|
|
40
|
+
expect(result).toEqual([1, 2, 3, 4, 5]);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('treats strings as leaf values (not iterables)', async () => {
|
|
44
|
+
const result = await collect(normalize('hello'));
|
|
45
|
+
expect(result).toEqual(['hello']);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it('treats an array of strings as individual leaves', async () => {
|
|
49
|
+
const result = await collect(normalize(['a', 'b', 'c']));
|
|
50
|
+
expect(result).toEqual(['a', 'b', 'c']);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('handles mixed nested structure', async () => {
|
|
54
|
+
async function* gen(): AsyncIterable<number> {
|
|
55
|
+
yield 100;
|
|
56
|
+
}
|
|
57
|
+
const mixed = [1, [2, 3], Promise.resolve(4), gen()];
|
|
58
|
+
// normalize expects NestableInput<number>, but mixed iterables work
|
|
59
|
+
const result: number[] = [];
|
|
60
|
+
for await (const item of normalize<number>(mixed as never)) {
|
|
61
|
+
result.push(item);
|
|
62
|
+
}
|
|
63
|
+
expect(result).toEqual([1, 2, 3, 4, 100]);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it('handles empty array', async () => {
|
|
67
|
+
const result = await collect(normalize([]));
|
|
68
|
+
expect(result).toEqual([]);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it('handles deeply nested arrays', async () => {
|
|
72
|
+
const deep = [[[1]], [[2, 3]]];
|
|
73
|
+
const result = await collect(normalize(deep));
|
|
74
|
+
expect(result).toEqual([1, 2, 3]);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
// ─── collect ─────────────────────────────────────────────────────────
|
|
79
|
+
|
|
80
|
+
describe('collect', () => {
|
|
81
|
+
it('collects async iterable into array', async () => {
|
|
82
|
+
async function* gen(): AsyncIterable<string> {
|
|
83
|
+
yield 'a';
|
|
84
|
+
yield 'b';
|
|
85
|
+
}
|
|
86
|
+
expect(await collect(gen())).toEqual(['a', 'b']);
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it('returns empty array for empty source', async () => {
|
|
90
|
+
async function* empty(): AsyncIterable<never> {
|
|
91
|
+
// nothing
|
|
92
|
+
}
|
|
93
|
+
expect(await collect(empty())).toEqual([]);
|
|
94
|
+
});
|
|
95
|
+
});
|