@soleri/core 2.10.0 → 2.11.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/agency/agency-manager.d.ts +47 -0
- package/dist/agency/agency-manager.d.ts.map +1 -0
- package/dist/agency/agency-manager.js +281 -0
- package/dist/agency/agency-manager.js.map +1 -0
- package/dist/agency/index.d.ts +3 -0
- package/dist/agency/index.d.ts.map +1 -0
- package/dist/agency/index.js +2 -0
- package/dist/agency/index.js.map +1 -0
- package/dist/agency/types.d.ts +69 -0
- package/dist/agency/types.d.ts.map +1 -0
- package/dist/agency/types.js +5 -0
- package/dist/agency/types.js.map +1 -0
- package/dist/brain/brain.d.ts +0 -1
- package/dist/brain/brain.d.ts.map +1 -1
- package/dist/brain/brain.js +14 -0
- package/dist/brain/brain.js.map +1 -1
- package/dist/brain/intelligence.d.ts +5 -1
- package/dist/brain/intelligence.d.ts.map +1 -1
- package/dist/brain/intelligence.js +83 -0
- package/dist/brain/intelligence.js.map +1 -1
- package/dist/brain/types.d.ts +21 -0
- package/dist/brain/types.d.ts.map +1 -1
- package/dist/chat/agent-loop-types.d.ts +82 -0
- package/dist/chat/agent-loop-types.d.ts.map +1 -0
- package/dist/chat/agent-loop-types.js +8 -0
- package/dist/chat/agent-loop-types.js.map +1 -0
- package/dist/chat/agent-loop.d.ts +19 -0
- package/dist/chat/agent-loop.d.ts.map +1 -0
- package/dist/chat/agent-loop.js +261 -0
- package/dist/chat/agent-loop.js.map +1 -0
- package/dist/chat/auth-manager.d.ts +49 -0
- package/dist/chat/auth-manager.d.ts.map +1 -0
- package/dist/chat/auth-manager.js +152 -0
- package/dist/chat/auth-manager.js.map +1 -0
- package/dist/chat/browser-session.d.ts +86 -0
- package/dist/chat/browser-session.d.ts.map +1 -0
- package/dist/chat/browser-session.js +143 -0
- package/dist/chat/browser-session.js.map +1 -0
- package/dist/chat/cancellation.d.ts +54 -0
- package/dist/chat/cancellation.d.ts.map +1 -0
- package/dist/chat/cancellation.js +80 -0
- package/dist/chat/cancellation.js.map +1 -0
- package/dist/chat/chat-session.d.ts +86 -0
- package/dist/chat/chat-session.d.ts.map +1 -0
- package/dist/chat/chat-session.js +252 -0
- package/dist/chat/chat-session.js.map +1 -0
- package/dist/chat/file-handler.d.ts +63 -0
- package/dist/chat/file-handler.d.ts.map +1 -0
- package/dist/chat/file-handler.js +182 -0
- package/dist/chat/file-handler.js.map +1 -0
- package/dist/chat/fragment-buffer.d.ts +49 -0
- package/dist/chat/fragment-buffer.d.ts.map +1 -0
- package/dist/chat/fragment-buffer.js +130 -0
- package/dist/chat/fragment-buffer.js.map +1 -0
- package/dist/chat/index.d.ts +24 -0
- package/dist/chat/index.d.ts.map +1 -0
- package/dist/chat/index.js +15 -0
- package/dist/chat/index.js.map +1 -0
- package/dist/chat/mcp-bridge.d.ts +60 -0
- package/dist/chat/mcp-bridge.d.ts.map +1 -0
- package/dist/chat/mcp-bridge.js +111 -0
- package/dist/chat/mcp-bridge.js.map +1 -0
- package/dist/chat/notifications.d.ts +82 -0
- package/dist/chat/notifications.d.ts.map +1 -0
- package/dist/chat/notifications.js +119 -0
- package/dist/chat/notifications.js.map +1 -0
- package/dist/chat/output-compressor.d.ts +30 -0
- package/dist/chat/output-compressor.d.ts.map +1 -0
- package/dist/chat/output-compressor.js +95 -0
- package/dist/chat/output-compressor.js.map +1 -0
- package/dist/chat/queue.d.ts +91 -0
- package/dist/chat/queue.d.ts.map +1 -0
- package/dist/chat/queue.js +146 -0
- package/dist/chat/queue.js.map +1 -0
- package/dist/chat/response-chunker.d.ts +29 -0
- package/dist/chat/response-chunker.d.ts.map +1 -0
- package/dist/chat/response-chunker.js +163 -0
- package/dist/chat/response-chunker.js.map +1 -0
- package/dist/chat/self-update.d.ts +62 -0
- package/dist/chat/self-update.d.ts.map +1 -0
- package/dist/chat/self-update.js +90 -0
- package/dist/chat/self-update.js.map +1 -0
- package/dist/chat/types.d.ts +105 -0
- package/dist/chat/types.d.ts.map +1 -0
- package/dist/chat/types.js +8 -0
- package/dist/chat/types.js.map +1 -0
- package/dist/chat/voice.d.ts +39 -0
- package/dist/chat/voice.d.ts.map +1 -0
- package/dist/chat/voice.js +80 -0
- package/dist/chat/voice.js.map +1 -0
- package/dist/claudemd/compose.d.ts +31 -0
- package/dist/claudemd/compose.d.ts.map +1 -0
- package/dist/claudemd/compose.js +105 -0
- package/dist/claudemd/compose.js.map +1 -0
- package/dist/claudemd/index.d.ts +5 -0
- package/dist/claudemd/index.d.ts.map +1 -0
- package/dist/claudemd/index.js +3 -0
- package/dist/claudemd/index.js.map +1 -0
- package/dist/claudemd/inject.d.ts +31 -0
- package/dist/claudemd/inject.d.ts.map +1 -0
- package/dist/claudemd/inject.js +157 -0
- package/dist/claudemd/inject.js.map +1 -0
- package/dist/claudemd/types.d.ts +41 -0
- package/dist/claudemd/types.d.ts.map +1 -0
- package/dist/claudemd/types.js +5 -0
- package/dist/claudemd/types.js.map +1 -0
- package/dist/context/context-engine.d.ts +31 -0
- package/dist/context/context-engine.d.ts.map +1 -0
- package/dist/context/context-engine.js +245 -0
- package/dist/context/context-engine.js.map +1 -0
- package/dist/context/index.d.ts +3 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +2 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/types.d.ts +54 -0
- package/dist/context/types.d.ts.map +1 -0
- package/dist/context/types.js +5 -0
- package/dist/context/types.js.map +1 -0
- package/dist/enforcement/adapters/claude-code.d.ts +18 -0
- package/dist/enforcement/adapters/claude-code.d.ts.map +1 -0
- package/dist/enforcement/adapters/claude-code.js +106 -0
- package/dist/enforcement/adapters/claude-code.js.map +1 -0
- package/dist/enforcement/adapters/index.d.ts +2 -0
- package/dist/enforcement/adapters/index.d.ts.map +1 -0
- package/dist/enforcement/adapters/index.js +2 -0
- package/dist/enforcement/adapters/index.js.map +1 -0
- package/dist/enforcement/index.d.ts +4 -0
- package/dist/enforcement/index.d.ts.map +1 -0
- package/dist/enforcement/index.js +3 -0
- package/dist/enforcement/index.js.map +1 -0
- package/dist/enforcement/registry.d.ts +23 -0
- package/dist/enforcement/registry.d.ts.map +1 -0
- package/dist/enforcement/registry.js +63 -0
- package/dist/enforcement/registry.js.map +1 -0
- package/dist/enforcement/types.d.ts +51 -0
- package/dist/enforcement/types.d.ts.map +1 -0
- package/dist/enforcement/types.js +8 -0
- package/dist/enforcement/types.js.map +1 -0
- package/dist/facades/facade-factory.d.ts +10 -3
- package/dist/facades/facade-factory.d.ts.map +1 -1
- package/dist/facades/facade-factory.js +94 -5
- package/dist/facades/facade-factory.js.map +1 -1
- package/dist/facades/types.d.ts +15 -1
- package/dist/facades/types.d.ts.map +1 -1
- package/dist/facades/types.js +6 -0
- package/dist/facades/types.js.map +1 -1
- package/dist/health/health-registry.d.ts +40 -0
- package/dist/health/health-registry.d.ts.map +1 -0
- package/dist/health/health-registry.js +134 -0
- package/dist/health/health-registry.js.map +1 -0
- package/dist/health/index.d.ts +5 -0
- package/dist/health/index.d.ts.map +1 -0
- package/dist/health/index.js +3 -0
- package/dist/health/index.js.map +1 -0
- package/dist/health/vault-integrity.d.ts +13 -0
- package/dist/health/vault-integrity.d.ts.map +1 -0
- package/dist/health/vault-integrity.js +49 -0
- package/dist/health/vault-integrity.js.map +1 -0
- package/dist/index.d.ts +67 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +51 -3
- package/dist/index.js.map +1 -1
- package/dist/intake/intake-pipeline.d.ts +0 -7
- package/dist/intake/intake-pipeline.d.ts.map +1 -1
- package/dist/intake/intake-pipeline.js +1 -1
- package/dist/intake/intake-pipeline.js.map +1 -1
- package/dist/intelligence/types.d.ts +1 -0
- package/dist/intelligence/types.d.ts.map +1 -1
- package/dist/migrations/index.d.ts +6 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +5 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/migrations/migration-runner.d.ts +51 -0
- package/dist/migrations/migration-runner.d.ts.map +1 -0
- package/dist/migrations/migration-runner.js +141 -0
- package/dist/migrations/migration-runner.js.map +1 -0
- package/dist/packs/index.d.ts +10 -0
- package/dist/packs/index.d.ts.map +1 -0
- package/dist/packs/index.js +8 -0
- package/dist/packs/index.js.map +1 -0
- package/dist/packs/lockfile.d.ts +97 -0
- package/dist/packs/lockfile.d.ts.map +1 -0
- package/dist/packs/lockfile.js +129 -0
- package/dist/packs/lockfile.js.map +1 -0
- package/dist/packs/pack-installer.d.ts +41 -0
- package/dist/packs/pack-installer.d.ts.map +1 -0
- package/dist/packs/pack-installer.js +253 -0
- package/dist/packs/pack-installer.js.map +1 -0
- package/dist/packs/resolver.d.ts +51 -0
- package/dist/packs/resolver.d.ts.map +1 -0
- package/dist/packs/resolver.js +195 -0
- package/dist/packs/resolver.js.map +1 -0
- package/dist/packs/types.d.ts +186 -0
- package/dist/packs/types.d.ts.map +1 -0
- package/dist/packs/types.js +69 -0
- package/dist/packs/types.js.map +1 -0
- package/dist/persistence/postgres-provider.d.ts +42 -7
- package/dist/persistence/postgres-provider.d.ts.map +1 -1
- package/dist/persistence/postgres-provider.js +187 -46
- package/dist/persistence/postgres-provider.js.map +1 -1
- package/dist/playbooks/index.d.ts +2 -0
- package/dist/playbooks/index.d.ts.map +1 -1
- package/dist/playbooks/index.js +2 -0
- package/dist/playbooks/index.js.map +1 -1
- package/dist/playbooks/playbook-executor.d.ts +100 -0
- package/dist/playbooks/playbook-executor.d.ts.map +1 -0
- package/dist/playbooks/playbook-executor.js +207 -0
- package/dist/playbooks/playbook-executor.js.map +1 -0
- package/dist/plugins/index.d.ts +7 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +7 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/plugin-loader.d.ts +28 -0
- package/dist/plugins/plugin-loader.d.ts.map +1 -0
- package/dist/plugins/plugin-loader.js +150 -0
- package/dist/plugins/plugin-loader.js.map +1 -0
- package/dist/plugins/plugin-registry.d.ts +58 -0
- package/dist/plugins/plugin-registry.d.ts.map +1 -0
- package/dist/plugins/plugin-registry.js +157 -0
- package/dist/plugins/plugin-registry.js.map +1 -0
- package/dist/plugins/types.d.ts +180 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +48 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/runtime/admin-extra-ops.d.ts.map +1 -1
- package/dist/runtime/admin-extra-ops.js +181 -8
- package/dist/runtime/admin-extra-ops.js.map +1 -1
- package/dist/runtime/capture-ops.d.ts.map +1 -1
- package/dist/runtime/capture-ops.js +106 -7
- package/dist/runtime/capture-ops.js.map +1 -1
- package/dist/runtime/deprecation.d.ts +33 -0
- package/dist/runtime/deprecation.d.ts.map +1 -0
- package/dist/runtime/deprecation.js +41 -0
- package/dist/runtime/deprecation.js.map +1 -0
- package/dist/runtime/facades/admin-facade.d.ts.map +1 -1
- package/dist/runtime/facades/admin-facade.js +12 -1
- package/dist/runtime/facades/admin-facade.js.map +1 -1
- package/dist/runtime/facades/agency-facade.d.ts +7 -0
- package/dist/runtime/facades/agency-facade.d.ts.map +1 -0
- package/dist/runtime/facades/agency-facade.js +103 -0
- package/dist/runtime/facades/agency-facade.js.map +1 -0
- package/dist/runtime/facades/brain-facade.d.ts.map +1 -1
- package/dist/runtime/facades/brain-facade.js +58 -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 -0
- package/dist/runtime/facades/chat-facade.js +808 -0
- package/dist/runtime/facades/chat-facade.js.map +1 -0
- package/dist/runtime/facades/context-facade.d.ts +7 -0
- package/dist/runtime/facades/context-facade.d.ts.map +1 -0
- package/dist/runtime/facades/context-facade.js +45 -0
- package/dist/runtime/facades/context-facade.js.map +1 -0
- package/dist/runtime/facades/index.d.ts.map +1 -1
- package/dist/runtime/facades/index.js +18 -0
- package/dist/runtime/facades/index.js.map +1 -1
- package/dist/runtime/facades/vault-facade.d.ts.map +1 -1
- package/dist/runtime/facades/vault-facade.js +247 -1
- package/dist/runtime/facades/vault-facade.js.map +1 -1
- package/dist/runtime/feature-flags.d.ts +18 -0
- package/dist/runtime/feature-flags.d.ts.map +1 -0
- package/dist/runtime/feature-flags.js +90 -0
- package/dist/runtime/feature-flags.js.map +1 -0
- package/dist/runtime/pack-ops.d.ts +9 -0
- package/dist/runtime/pack-ops.d.ts.map +1 -0
- package/dist/runtime/pack-ops.js +76 -0
- package/dist/runtime/pack-ops.js.map +1 -0
- package/dist/runtime/playbook-ops.d.ts +3 -7
- package/dist/runtime/playbook-ops.d.ts.map +1 -1
- package/dist/runtime/playbook-ops.js +101 -10
- package/dist/runtime/playbook-ops.js.map +1 -1
- package/dist/runtime/plugin-ops.d.ts +9 -0
- package/dist/runtime/plugin-ops.d.ts.map +1 -0
- package/dist/runtime/plugin-ops.js +235 -0
- package/dist/runtime/plugin-ops.js.map +1 -0
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +72 -5
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/telemetry-ops.d.ts +10 -0
- package/dist/runtime/telemetry-ops.d.ts.map +1 -0
- package/dist/runtime/telemetry-ops.js +53 -0
- package/dist/runtime/telemetry-ops.js.map +1 -0
- package/dist/runtime/types.d.ts +35 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/vault-sharing-ops.d.ts +13 -0
- package/dist/runtime/vault-sharing-ops.d.ts.map +1 -0
- package/dist/runtime/vault-sharing-ops.js +345 -0
- package/dist/runtime/vault-sharing-ops.js.map +1 -0
- package/dist/streams/index.d.ts +1 -1
- package/dist/streams/index.d.ts.map +1 -1
- package/dist/streams/index.js +1 -1
- package/dist/streams/index.js.map +1 -1
- package/dist/streams/replayable-stream.d.ts +13 -1
- package/dist/streams/replayable-stream.d.ts.map +1 -1
- package/dist/streams/replayable-stream.js +27 -3
- package/dist/streams/replayable-stream.js.map +1 -1
- package/dist/text/similarity.d.ts +0 -1
- package/dist/text/similarity.d.ts.map +1 -1
- package/dist/text/similarity.js +1 -1
- package/dist/text/similarity.js.map +1 -1
- package/dist/transport/http-server.d.ts +56 -0
- package/dist/transport/http-server.d.ts.map +1 -0
- package/dist/transport/http-server.js +210 -0
- package/dist/transport/http-server.js.map +1 -0
- package/dist/transport/index.d.ts +11 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +10 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/lsp-server.d.ts +140 -0
- package/dist/transport/lsp-server.d.ts.map +1 -0
- package/dist/transport/lsp-server.js +239 -0
- package/dist/transport/lsp-server.js.map +1 -0
- package/dist/transport/rate-limiter.d.ts +35 -0
- package/dist/transport/rate-limiter.d.ts.map +1 -0
- package/dist/transport/rate-limiter.js +72 -0
- package/dist/transport/rate-limiter.js.map +1 -0
- package/dist/transport/session-manager.d.ts +49 -0
- package/dist/transport/session-manager.d.ts.map +1 -0
- package/dist/transport/session-manager.js +83 -0
- package/dist/transport/session-manager.js.map +1 -0
- package/dist/transport/token-auth.d.ts +29 -0
- package/dist/transport/token-auth.d.ts.map +1 -0
- package/dist/transport/token-auth.js +84 -0
- package/dist/transport/token-auth.js.map +1 -0
- package/dist/transport/types.d.ts +61 -0
- package/dist/transport/types.d.ts.map +1 -0
- package/dist/transport/types.js +5 -0
- package/dist/transport/types.js.map +1 -0
- package/dist/transport/ws-server.d.ts +78 -0
- package/dist/transport/ws-server.d.ts.map +1 -0
- package/dist/transport/ws-server.js +342 -0
- package/dist/transport/ws-server.js.map +1 -0
- package/dist/vault/git-vault-sync.d.ts +107 -0
- package/dist/vault/git-vault-sync.d.ts.map +1 -0
- package/dist/vault/git-vault-sync.js +251 -0
- package/dist/vault/git-vault-sync.js.map +1 -0
- package/dist/vault/knowledge-review.d.ts +67 -0
- package/dist/vault/knowledge-review.d.ts.map +1 -0
- package/dist/vault/knowledge-review.js +133 -0
- package/dist/vault/knowledge-review.js.map +1 -0
- package/dist/vault/obsidian-sync.d.ts +94 -0
- package/dist/vault/obsidian-sync.d.ts.map +1 -0
- package/dist/vault/obsidian-sync.js +247 -0
- package/dist/vault/obsidian-sync.js.map +1 -0
- package/dist/vault/scope-detector.d.ts +31 -0
- package/dist/vault/scope-detector.d.ts.map +1 -0
- package/dist/vault/scope-detector.js +182 -0
- package/dist/vault/scope-detector.js.map +1 -0
- package/dist/vault/vault-branching.d.ts +71 -0
- package/dist/vault/vault-branching.d.ts.map +1 -0
- package/dist/vault/vault-branching.js +180 -0
- package/dist/vault/vault-branching.js.map +1 -0
- package/dist/vault/vault-manager.d.ts +89 -0
- package/dist/vault/vault-manager.d.ts.map +1 -0
- package/dist/vault/vault-manager.js +199 -0
- package/dist/vault/vault-manager.js.map +1 -0
- package/dist/vault/vault-types.d.ts +30 -0
- package/dist/vault/vault-types.d.ts.map +1 -0
- package/dist/vault/vault-types.js +10 -0
- package/dist/vault/vault-types.js.map +1 -0
- package/dist/vault/vault.d.ts +10 -0
- package/dist/vault/vault.d.ts.map +1 -1
- package/dist/vault/vault.js +36 -3
- package/dist/vault/vault.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/admin-extra-ops.test.ts +31 -11
- package/src/__tests__/agency-manager.test.ts +374 -0
- package/src/__tests__/agent-loop.test.ts +256 -0
- package/src/__tests__/capture-ops.test.ts +275 -0
- package/src/__tests__/chat-differentiators.test.ts +251 -0
- package/src/__tests__/chat-enhanced.test.ts +390 -0
- package/src/__tests__/chat-transport.test.ts +665 -0
- package/src/__tests__/claudemd.test.ts +282 -0
- package/src/__tests__/context-engine.test.ts +256 -0
- package/src/__tests__/core-ops.test.ts +97 -5
- package/src/__tests__/deprecation.test.ts +78 -0
- package/src/__tests__/enforcement.test.ts +153 -0
- package/src/__tests__/facade-factory.test.ts +271 -0
- package/src/__tests__/feature-flags.test.ts +138 -0
- package/src/__tests__/git-vault-sync.test.ts +230 -0
- package/src/__tests__/health-registry.test.ts +173 -0
- package/src/__tests__/knowledge-review.test.ts +104 -0
- package/src/__tests__/lsp-transport.test.ts +442 -0
- package/src/__tests__/migration-runner.test.ts +170 -0
- package/src/__tests__/normalize.test.ts +10 -0
- package/src/__tests__/obsidian-sync.test.ts +354 -0
- package/src/__tests__/pack-lockfile.test.ts +261 -0
- package/src/__tests__/pack-ops.test.ts +146 -0
- package/src/__tests__/pack-system.test.ts +423 -0
- package/src/__tests__/playbook-executor.test.ts +249 -0
- package/src/__tests__/playbook-ops-execution.test.ts +189 -0
- package/src/__tests__/plugin-ops.test.ts +411 -0
- package/src/__tests__/plugin-system.test.ts +509 -0
- package/src/__tests__/postgres-provider.test.ts +64 -6
- package/src/__tests__/replayable-stream.test.ts +112 -1
- package/src/__tests__/scope-detector.test.ts +121 -0
- package/src/__tests__/session-lifecycle.test.ts +259 -0
- package/src/__tests__/transport.test.ts +758 -0
- package/src/__tests__/vault-branching.test.ts +274 -0
- package/src/__tests__/vault-connect.test.ts +179 -0
- package/src/__tests__/vault-integrity.test.ts +71 -0
- package/src/__tests__/vault-manager.test.ts +238 -0
- package/src/__tests__/vault-scaling.test.ts +281 -0
- package/src/__tests__/vault-sharing.test.ts +270 -0
- package/src/__tests__/ws-transport.test.ts +479 -0
- package/src/agency/agency-manager.ts +326 -0
- package/src/agency/index.ts +13 -0
- package/src/agency/types.ts +88 -0
- package/src/brain/brain.ts +15 -11
- package/src/brain/intelligence.ts +103 -0
- package/src/brain/types.ts +26 -0
- package/src/chat/agent-loop-types.ts +99 -0
- package/src/chat/agent-loop.ts +357 -0
- package/src/chat/auth-manager.ts +171 -0
- package/src/chat/browser-session.ts +188 -0
- package/src/chat/cancellation.ts +99 -0
- package/src/chat/chat-session.ts +283 -0
- package/src/chat/file-handler.ts +230 -0
- package/src/chat/fragment-buffer.ts +160 -0
- package/src/chat/index.ts +72 -0
- package/src/chat/mcp-bridge.ts +135 -0
- package/src/chat/notifications.ts +164 -0
- package/src/chat/output-compressor.ts +116 -0
- package/src/chat/queue.ts +208 -0
- package/src/chat/response-chunker.ts +200 -0
- package/src/chat/self-update.ts +117 -0
- package/src/chat/types.ts +126 -0
- package/src/chat/voice.ts +134 -0
- package/src/claudemd/compose.ts +142 -0
- package/src/claudemd/index.ts +17 -0
- package/src/claudemd/inject.ts +170 -0
- package/src/claudemd/types.ts +45 -0
- package/src/context/context-engine.ts +302 -0
- package/src/context/index.ts +11 -0
- package/src/context/types.ts +69 -0
- package/src/enforcement/adapters/claude-code.ts +135 -0
- package/src/enforcement/adapters/index.ts +1 -0
- package/src/enforcement/index.ts +10 -0
- package/src/enforcement/registry.ts +82 -0
- package/src/enforcement/types.ts +56 -0
- package/src/facades/facade-factory.ts +138 -5
- package/src/facades/types.ts +21 -0
- package/src/health/health-registry.ts +165 -0
- package/src/health/index.ts +11 -0
- package/src/health/vault-integrity.ts +66 -0
- package/src/index.ts +294 -2
- package/src/intake/intake-pipeline.ts +1 -1
- package/src/intelligence/types.ts +1 -0
- package/src/migrations/index.ts +6 -0
- package/src/migrations/migration-runner.ts +185 -0
- package/src/packs/index.ts +20 -0
- package/src/packs/lockfile.ts +180 -0
- package/src/packs/pack-installer.ts +289 -0
- package/src/packs/resolver.ts +237 -0
- package/src/packs/types.ts +125 -0
- package/src/persistence/postgres-provider.ts +211 -58
- package/src/playbooks/index.ts +11 -0
- package/src/playbooks/playbook-executor.ts +301 -0
- package/src/plugins/index.ts +19 -0
- package/src/plugins/plugin-loader.ts +183 -0
- package/src/plugins/plugin-registry.ts +187 -0
- package/src/plugins/types.ts +119 -0
- package/src/runtime/admin-extra-ops.ts +193 -8
- package/src/runtime/capture-ops.ts +113 -8
- package/src/runtime/deprecation.ts +58 -0
- package/src/runtime/facades/admin-facade.ts +16 -1
- package/src/runtime/facades/agency-facade.ts +111 -0
- package/src/runtime/facades/brain-facade.ts +60 -0
- package/src/runtime/facades/chat-facade.ts +918 -0
- package/src/runtime/facades/context-facade.ts +55 -0
- package/src/runtime/facades/index.ts +22 -1
- package/src/runtime/facades/vault-facade.ts +261 -1
- package/src/runtime/feature-flags.ts +101 -0
- package/src/runtime/pack-ops.ts +85 -0
- package/src/runtime/playbook-ops.ts +113 -9
- package/src/runtime/plugin-ops.ts +258 -0
- package/src/runtime/runtime.ts +84 -5
- package/src/runtime/telemetry-ops.ts +57 -0
- package/src/runtime/types.ts +35 -0
- package/src/runtime/vault-sharing-ops.ts +372 -0
- package/src/streams/index.ts +1 -1
- package/src/streams/replayable-stream.ts +34 -3
- package/src/text/similarity.ts +1 -1
- package/src/transport/http-server.ts +269 -0
- package/src/transport/index.ts +48 -0
- package/src/transport/lsp-server.ts +401 -0
- package/src/transport/rate-limiter.ts +97 -0
- package/src/transport/session-manager.ts +120 -0
- package/src/transport/token-auth.ts +96 -0
- package/src/transport/types.ts +66 -0
- package/src/transport/ws-server.ts +415 -0
- package/src/vault/git-vault-sync.ts +318 -0
- package/src/vault/knowledge-review.ts +221 -0
- package/src/vault/obsidian-sync.ts +346 -0
- package/src/vault/scope-detector.ts +219 -0
- package/src/vault/vault-branching.ts +264 -0
- package/src/vault/vault-manager.ts +237 -0
- package/src/vault/vault-types.ts +50 -0
- package/src/vault/vault.ts +41 -3
- package/src/governance/index.ts +0 -18
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vault Branching — experiment with knowledge changes on named branches
|
|
3
|
+
* before merging to the main vault.
|
|
4
|
+
*
|
|
5
|
+
* Each branch tracks a set of operations (add/modify/remove) against vault entries.
|
|
6
|
+
* On merge, all operations are applied atomically to the main vault.
|
|
7
|
+
* Conflict resolution: branch entry wins (explicit user action to merge).
|
|
8
|
+
*
|
|
9
|
+
* Improved over Salvador: uses PersistenceProvider abstraction, separate
|
|
10
|
+
* metadata table (no sentinel markers), and merge logic built-in.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import type { PersistenceProvider } from '../persistence/types.js';
|
|
14
|
+
import type { IntelligenceEntry } from '../intelligence/types.js';
|
|
15
|
+
import type { Vault } from './vault.js';
|
|
16
|
+
|
|
17
|
+
// =============================================================================
|
|
18
|
+
// TYPES
|
|
19
|
+
// =============================================================================
|
|
20
|
+
|
|
21
|
+
export type BranchAction = 'add' | 'modify' | 'remove';
|
|
22
|
+
|
|
23
|
+
export interface BranchEntry {
|
|
24
|
+
id: number;
|
|
25
|
+
branchName: string;
|
|
26
|
+
entryId: string;
|
|
27
|
+
action: BranchAction;
|
|
28
|
+
entryData: IntelligenceEntry | null;
|
|
29
|
+
createdAt: number;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface BranchSummary {
|
|
33
|
+
name: string;
|
|
34
|
+
entryCount: number;
|
|
35
|
+
createdAt: number;
|
|
36
|
+
merged: boolean;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface MergeResult {
|
|
40
|
+
merged: boolean;
|
|
41
|
+
branchName: string;
|
|
42
|
+
added: number;
|
|
43
|
+
modified: number;
|
|
44
|
+
removed: number;
|
|
45
|
+
total: number;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// =============================================================================
|
|
49
|
+
// VAULT BRANCHING
|
|
50
|
+
// =============================================================================
|
|
51
|
+
|
|
52
|
+
export class VaultBranching {
|
|
53
|
+
private provider: PersistenceProvider;
|
|
54
|
+
private vault: Vault;
|
|
55
|
+
|
|
56
|
+
constructor(vault: Vault) {
|
|
57
|
+
this.vault = vault;
|
|
58
|
+
this.provider = vault.getProvider();
|
|
59
|
+
this.initialize();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
private initialize(): void {
|
|
63
|
+
this.provider.execSql(`
|
|
64
|
+
CREATE TABLE IF NOT EXISTS vault_branch_meta (
|
|
65
|
+
name TEXT PRIMARY KEY,
|
|
66
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
67
|
+
merged_at INTEGER
|
|
68
|
+
);
|
|
69
|
+
CREATE TABLE IF NOT EXISTS vault_branch_ops (
|
|
70
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
71
|
+
branch_name TEXT NOT NULL REFERENCES vault_branch_meta(name),
|
|
72
|
+
entry_id TEXT NOT NULL,
|
|
73
|
+
action TEXT NOT NULL CHECK(action IN ('add', 'modify', 'remove')),
|
|
74
|
+
entry_data TEXT,
|
|
75
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
76
|
+
);
|
|
77
|
+
CREATE INDEX IF NOT EXISTS idx_branch_ops_name ON vault_branch_ops(branch_name);
|
|
78
|
+
`);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Create a new branch. Name must be unique among active (unmerged) branches.
|
|
83
|
+
*/
|
|
84
|
+
branch(name: string): boolean {
|
|
85
|
+
const existing = this.provider.get<{ name: string; merged_at: number | null }>(
|
|
86
|
+
'SELECT name, merged_at FROM vault_branch_meta WHERE name = @name',
|
|
87
|
+
{ name },
|
|
88
|
+
);
|
|
89
|
+
if (existing && existing.merged_at === null) {
|
|
90
|
+
throw new Error(`Branch '${name}' already exists`);
|
|
91
|
+
}
|
|
92
|
+
// Allow reuse of merged branch names — delete old record first
|
|
93
|
+
if (existing) {
|
|
94
|
+
this.provider.run('DELETE FROM vault_branch_ops WHERE branch_name = @name', { name });
|
|
95
|
+
this.provider.run('DELETE FROM vault_branch_meta WHERE name = @name', { name });
|
|
96
|
+
}
|
|
97
|
+
this.provider.run('INSERT INTO vault_branch_meta (name) VALUES (@name)', { name });
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Add an operation to a branch.
|
|
103
|
+
* For 'add' and 'modify', entryData is required.
|
|
104
|
+
* For 'remove', entryData is optional.
|
|
105
|
+
*/
|
|
106
|
+
addOperation(
|
|
107
|
+
branchName: string,
|
|
108
|
+
entryId: string,
|
|
109
|
+
action: BranchAction,
|
|
110
|
+
entryData?: IntelligenceEntry,
|
|
111
|
+
): void {
|
|
112
|
+
this.assertActiveBranch(branchName);
|
|
113
|
+
if ((action === 'add' || action === 'modify') && !entryData) {
|
|
114
|
+
throw new Error(`Entry data required for '${action}' action`);
|
|
115
|
+
}
|
|
116
|
+
this.provider.run(
|
|
117
|
+
`INSERT INTO vault_branch_ops (branch_name, entry_id, action, entry_data)
|
|
118
|
+
VALUES (@branchName, @entryId, @action, @entryData)`,
|
|
119
|
+
{
|
|
120
|
+
branchName,
|
|
121
|
+
entryId,
|
|
122
|
+
action,
|
|
123
|
+
entryData: entryData ? JSON.stringify(entryData) : null,
|
|
124
|
+
},
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* List entries on a branch.
|
|
130
|
+
*/
|
|
131
|
+
listEntries(branchName: string): BranchEntry[] {
|
|
132
|
+
const rows = this.provider.all<{
|
|
133
|
+
id: number;
|
|
134
|
+
branch_name: string;
|
|
135
|
+
entry_id: string;
|
|
136
|
+
action: string;
|
|
137
|
+
entry_data: string | null;
|
|
138
|
+
created_at: number;
|
|
139
|
+
}>(
|
|
140
|
+
`SELECT id, branch_name, entry_id, action, entry_data, created_at
|
|
141
|
+
FROM vault_branch_ops WHERE branch_name = @branchName
|
|
142
|
+
ORDER BY created_at ASC`,
|
|
143
|
+
{ branchName },
|
|
144
|
+
);
|
|
145
|
+
return rows.map((r) => ({
|
|
146
|
+
id: r.id,
|
|
147
|
+
branchName: r.branch_name,
|
|
148
|
+
entryId: r.entry_id,
|
|
149
|
+
action: r.action as BranchAction,
|
|
150
|
+
entryData: r.entry_data ? (JSON.parse(r.entry_data) as IntelligenceEntry) : null,
|
|
151
|
+
createdAt: r.created_at,
|
|
152
|
+
}));
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* List all branches with summary info.
|
|
157
|
+
*/
|
|
158
|
+
listBranches(): BranchSummary[] {
|
|
159
|
+
const rows = this.provider.all<{
|
|
160
|
+
name: string;
|
|
161
|
+
created_at: number;
|
|
162
|
+
merged_at: number | null;
|
|
163
|
+
entry_count: number;
|
|
164
|
+
}>(
|
|
165
|
+
`SELECT m.name, m.created_at, m.merged_at,
|
|
166
|
+
COALESCE(COUNT(o.id), 0) as entry_count
|
|
167
|
+
FROM vault_branch_meta m
|
|
168
|
+
LEFT JOIN vault_branch_ops o ON o.branch_name = m.name
|
|
169
|
+
GROUP BY m.name
|
|
170
|
+
ORDER BY m.created_at DESC`,
|
|
171
|
+
);
|
|
172
|
+
return rows.map((r) => ({
|
|
173
|
+
name: r.name,
|
|
174
|
+
entryCount: r.entry_count,
|
|
175
|
+
createdAt: r.created_at,
|
|
176
|
+
merged: r.merged_at !== null,
|
|
177
|
+
}));
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Merge a branch into the main vault. Applies all operations atomically.
|
|
182
|
+
* Conflict resolution: branch entry wins (the user explicitly chose to merge).
|
|
183
|
+
*/
|
|
184
|
+
merge(branchName: string): MergeResult {
|
|
185
|
+
this.assertActiveBranch(branchName);
|
|
186
|
+
const ops = this.listEntries(branchName);
|
|
187
|
+
|
|
188
|
+
// Collapse ops: for each entryId, only the last action matters
|
|
189
|
+
const collapsed = new Map<string, BranchEntry>();
|
|
190
|
+
for (const op of ops) {
|
|
191
|
+
collapsed.set(op.entryId, op);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
let added = 0;
|
|
195
|
+
let modified = 0;
|
|
196
|
+
let removed = 0;
|
|
197
|
+
|
|
198
|
+
this.provider.transaction(() => {
|
|
199
|
+
for (const op of collapsed.values()) {
|
|
200
|
+
switch (op.action) {
|
|
201
|
+
case 'add':
|
|
202
|
+
if (op.entryData) {
|
|
203
|
+
this.vault.add(op.entryData);
|
|
204
|
+
added++;
|
|
205
|
+
}
|
|
206
|
+
break;
|
|
207
|
+
case 'modify':
|
|
208
|
+
if (op.entryData) {
|
|
209
|
+
// Branch wins: upsert via seed (INSERT OR REPLACE)
|
|
210
|
+
this.vault.add(op.entryData);
|
|
211
|
+
modified++;
|
|
212
|
+
}
|
|
213
|
+
break;
|
|
214
|
+
case 'remove':
|
|
215
|
+
this.vault.remove(op.entryId);
|
|
216
|
+
removed++;
|
|
217
|
+
break;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// Mark branch as merged
|
|
221
|
+
this.provider.run(
|
|
222
|
+
'UPDATE vault_branch_meta SET merged_at = unixepoch() WHERE name = @branchName',
|
|
223
|
+
{ branchName },
|
|
224
|
+
);
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
return {
|
|
228
|
+
merged: true,
|
|
229
|
+
branchName,
|
|
230
|
+
added,
|
|
231
|
+
modified,
|
|
232
|
+
removed,
|
|
233
|
+
total: added + modified + removed,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Delete a branch and all its operations.
|
|
239
|
+
*/
|
|
240
|
+
deleteBranch(branchName: string): boolean {
|
|
241
|
+
const existing = this.provider.get<{ name: string }>(
|
|
242
|
+
'SELECT name FROM vault_branch_meta WHERE name = @branchName',
|
|
243
|
+
{ branchName },
|
|
244
|
+
);
|
|
245
|
+
if (!existing) return false;
|
|
246
|
+
|
|
247
|
+
this.provider.transaction(() => {
|
|
248
|
+
this.provider.run('DELETE FROM vault_branch_ops WHERE branch_name = @branchName', {
|
|
249
|
+
branchName,
|
|
250
|
+
});
|
|
251
|
+
this.provider.run('DELETE FROM vault_branch_meta WHERE name = @branchName', { branchName });
|
|
252
|
+
});
|
|
253
|
+
return true;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
private assertActiveBranch(name: string): void {
|
|
257
|
+
const branch = this.provider.get<{ merged_at: number | null }>(
|
|
258
|
+
'SELECT merged_at FROM vault_branch_meta WHERE name = @name',
|
|
259
|
+
{ name },
|
|
260
|
+
);
|
|
261
|
+
if (!branch) throw new Error(`Branch '${name}' does not exist`);
|
|
262
|
+
if (branch.merged_at !== null) throw new Error(`Branch '${name}' is already merged`);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VaultManager — orchestrates multiple vault instances across tiers.
|
|
3
|
+
*
|
|
4
|
+
* Each tier (agent, project, team) is a separate SQLite database with its own
|
|
5
|
+
* FTS5 index. Search cascades across all connected tiers with priority weighting.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* const mgr = new VaultManager({ agentId: 'my-agent' });
|
|
9
|
+
* mgr.open('agent', '~/.my-agent/vault.db');
|
|
10
|
+
* mgr.open('project', '.soleri/vault.db');
|
|
11
|
+
* const results = mgr.search('pattern name');
|
|
12
|
+
* mgr.close();
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { Vault, type SearchResult } from './vault.js';
|
|
16
|
+
import {
|
|
17
|
+
TIER_WEIGHTS,
|
|
18
|
+
type VaultTier,
|
|
19
|
+
type VaultTierInfo,
|
|
20
|
+
type VaultManagerConfig,
|
|
21
|
+
} from './vault-types.js';
|
|
22
|
+
|
|
23
|
+
// =============================================================================
|
|
24
|
+
// VAULT MANAGER
|
|
25
|
+
// =============================================================================
|
|
26
|
+
|
|
27
|
+
/** A dynamically connected vault source with a name and priority. */
|
|
28
|
+
export interface ConnectedVault {
|
|
29
|
+
name: string;
|
|
30
|
+
path: string;
|
|
31
|
+
priority: number;
|
|
32
|
+
vault: Vault;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export class VaultManager {
|
|
36
|
+
private vaults = new Map<VaultTier, { vault: Vault; path: string }>();
|
|
37
|
+
private connected = new Map<string, ConnectedVault>();
|
|
38
|
+
private weights: Record<VaultTier, number>;
|
|
39
|
+
private config: VaultManagerConfig;
|
|
40
|
+
|
|
41
|
+
constructor(config: VaultManagerConfig) {
|
|
42
|
+
this.config = config;
|
|
43
|
+
this.weights = {
|
|
44
|
+
...TIER_WEIGHTS,
|
|
45
|
+
...config.weights,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Open a vault for the given tier.
|
|
51
|
+
* If a vault is already open for this tier, it is closed first.
|
|
52
|
+
*/
|
|
53
|
+
open(tier: VaultTier, path: string): Vault {
|
|
54
|
+
// Close existing if re-opening
|
|
55
|
+
const existing = this.vaults.get(tier);
|
|
56
|
+
if (existing) {
|
|
57
|
+
existing.vault.close();
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const vault = new Vault(path);
|
|
61
|
+
this.vaults.set(tier, { vault, path });
|
|
62
|
+
return vault;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Get the vault for a specific tier.
|
|
67
|
+
* Throws if not connected.
|
|
68
|
+
*/
|
|
69
|
+
getTier(tier: VaultTier): Vault {
|
|
70
|
+
const entry = this.vaults.get(tier);
|
|
71
|
+
if (!entry) {
|
|
72
|
+
throw new Error(`Vault tier '${tier}' is not connected`);
|
|
73
|
+
}
|
|
74
|
+
return entry.vault;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Check if a tier is connected.
|
|
79
|
+
*/
|
|
80
|
+
hasTier(tier: VaultTier): boolean {
|
|
81
|
+
return this.vaults.has(tier);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Disconnect a specific tier.
|
|
86
|
+
*/
|
|
87
|
+
disconnect(tier: VaultTier): boolean {
|
|
88
|
+
const entry = this.vaults.get(tier);
|
|
89
|
+
if (!entry) return false;
|
|
90
|
+
entry.vault.close();
|
|
91
|
+
this.vaults.delete(tier);
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// ─── Dynamic Named Connections ──────────────────────────────────────
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Connect a named vault source with a configurable priority.
|
|
99
|
+
* Throws if a vault with this name is already connected.
|
|
100
|
+
*/
|
|
101
|
+
connect(name: string, path: string, priority = 0.5): ConnectedVault {
|
|
102
|
+
if (this.connected.has(name)) {
|
|
103
|
+
throw new Error(`Vault '${name}' is already connected`);
|
|
104
|
+
}
|
|
105
|
+
const vault = new Vault(path);
|
|
106
|
+
const entry: ConnectedVault = { name, path, priority, vault };
|
|
107
|
+
this.connected.set(name, entry);
|
|
108
|
+
return entry;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Disconnect a named vault source.
|
|
113
|
+
* Throws if not connected.
|
|
114
|
+
*/
|
|
115
|
+
disconnectNamed(name: string): boolean {
|
|
116
|
+
const entry = this.connected.get(name);
|
|
117
|
+
if (!entry) return false;
|
|
118
|
+
entry.vault.close();
|
|
119
|
+
this.connected.delete(name);
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* List all dynamically connected vaults, sorted by priority descending.
|
|
125
|
+
*/
|
|
126
|
+
listConnected(): Array<{ name: string; path: string; priority: number }> {
|
|
127
|
+
return Array.from(this.connected.values())
|
|
128
|
+
.sort((a, b) => b.priority - a.priority)
|
|
129
|
+
.map(({ name, path, priority }) => ({ name, path, priority }));
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Get a named connected vault.
|
|
134
|
+
*/
|
|
135
|
+
getConnected(name: string): ConnectedVault | undefined {
|
|
136
|
+
return this.connected.get(name);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// ─── Search ────────────────────────────────────────────────────────
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Search across all connected tiers AND named vaults with priority weighting.
|
|
143
|
+
*
|
|
144
|
+
* Results from each source are weighted by priority,
|
|
145
|
+
* then merged and deduplicated (highest-priority entry wins).
|
|
146
|
+
*/
|
|
147
|
+
search(query: string, limit = 20): SearchResult[] {
|
|
148
|
+
const allResults: Array<SearchResult & { source: string; weightedScore: number }> = [];
|
|
149
|
+
|
|
150
|
+
// Tier vaults
|
|
151
|
+
for (const [tier, { vault }] of this.vaults) {
|
|
152
|
+
const weight = this.weights[tier];
|
|
153
|
+
const results = vault.search(query);
|
|
154
|
+
for (const r of results) {
|
|
155
|
+
allResults.push({
|
|
156
|
+
...r,
|
|
157
|
+
source: tier,
|
|
158
|
+
weightedScore: r.score * weight,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// Named connected vaults
|
|
164
|
+
for (const { name, priority, vault } of this.connected.values()) {
|
|
165
|
+
const results = vault.search(query);
|
|
166
|
+
for (const r of results) {
|
|
167
|
+
allResults.push({
|
|
168
|
+
...r,
|
|
169
|
+
source: name,
|
|
170
|
+
weightedScore: r.score * priority,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// Deduplicate: keep highest-weighted version of each entry
|
|
176
|
+
const seen = new Map<string, (typeof allResults)[number]>();
|
|
177
|
+
for (const r of allResults) {
|
|
178
|
+
const existing = seen.get(r.entry.id);
|
|
179
|
+
if (!existing || r.weightedScore > existing.weightedScore) {
|
|
180
|
+
seen.set(r.entry.id, r);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// Sort by weighted score descending, take top N
|
|
185
|
+
const merged = Array.from(seen.values());
|
|
186
|
+
merged.sort((a, b) => b.weightedScore - a.weightedScore);
|
|
187
|
+
|
|
188
|
+
return merged.slice(0, limit).map((r) => ({
|
|
189
|
+
entry: r.entry,
|
|
190
|
+
score: r.weightedScore,
|
|
191
|
+
}));
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Get info about all tiers (connected or not).
|
|
196
|
+
*/
|
|
197
|
+
listTiers(): VaultTierInfo[] {
|
|
198
|
+
const allTiers: VaultTier[] = ['agent', 'project', 'team'];
|
|
199
|
+
return allTiers.map((tier) => {
|
|
200
|
+
const entry = this.vaults.get(tier);
|
|
201
|
+
if (!entry) {
|
|
202
|
+
return { tier, path: '', connected: false, entryCount: 0 };
|
|
203
|
+
}
|
|
204
|
+
const stats = entry.vault.stats();
|
|
205
|
+
return {
|
|
206
|
+
tier,
|
|
207
|
+
path: entry.path,
|
|
208
|
+
connected: true,
|
|
209
|
+
entryCount: stats.totalEntries,
|
|
210
|
+
};
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/** Number of connected tiers. */
|
|
215
|
+
get size(): number {
|
|
216
|
+
return this.vaults.size;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/** Get the underlying config. */
|
|
220
|
+
getConfig(): VaultManagerConfig {
|
|
221
|
+
return this.config;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Close all connected vaults.
|
|
226
|
+
*/
|
|
227
|
+
close(): void {
|
|
228
|
+
for (const { vault } of this.vaults.values()) {
|
|
229
|
+
vault.close();
|
|
230
|
+
}
|
|
231
|
+
this.vaults.clear();
|
|
232
|
+
for (const { vault } of this.connected.values()) {
|
|
233
|
+
vault.close();
|
|
234
|
+
}
|
|
235
|
+
this.connected.clear();
|
|
236
|
+
}
|
|
237
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vault Types — tier definitions and multi-vault configuration.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
// =============================================================================
|
|
6
|
+
// VAULT TIERS
|
|
7
|
+
// =============================================================================
|
|
8
|
+
|
|
9
|
+
/** Vault tier — determines search priority and default path. */
|
|
10
|
+
export type VaultTier = 'agent' | 'project' | 'team';
|
|
11
|
+
|
|
12
|
+
/** Priority weights for search result merging (higher = ranked first). */
|
|
13
|
+
export const TIER_WEIGHTS: Record<VaultTier, number> = {
|
|
14
|
+
agent: 1.0,
|
|
15
|
+
project: 0.8,
|
|
16
|
+
team: 0.6,
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
// =============================================================================
|
|
20
|
+
// VAULT MANAGER CONFIG
|
|
21
|
+
// =============================================================================
|
|
22
|
+
|
|
23
|
+
/** Configuration for a single vault tier. */
|
|
24
|
+
export interface VaultTierConfig {
|
|
25
|
+
tier: VaultTier;
|
|
26
|
+
/** Path to the SQLite database file. */
|
|
27
|
+
path: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** Configuration for VaultManager. */
|
|
31
|
+
export interface VaultManagerConfig {
|
|
32
|
+
/** Agent identifier (used for default path: ~/.{agentId}/vault.db) */
|
|
33
|
+
agentId: string;
|
|
34
|
+
/** Override default paths per tier. */
|
|
35
|
+
tiers?: VaultTierConfig[];
|
|
36
|
+
/** Custom priority weights (overrides TIER_WEIGHTS). */
|
|
37
|
+
weights?: Partial<Record<VaultTier, number>>;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// =============================================================================
|
|
41
|
+
// VAULT TIER INFO
|
|
42
|
+
// =============================================================================
|
|
43
|
+
|
|
44
|
+
/** Runtime info about a connected vault tier. */
|
|
45
|
+
export interface VaultTierInfo {
|
|
46
|
+
tier: VaultTier;
|
|
47
|
+
path: string;
|
|
48
|
+
connected: boolean;
|
|
49
|
+
entryCount: number;
|
|
50
|
+
}
|
package/src/vault/vault.ts
CHANGED
|
@@ -179,6 +179,18 @@ export class Vault {
|
|
|
179
179
|
this.migrateBrainSchema();
|
|
180
180
|
this.migrateTemporalSchema();
|
|
181
181
|
this.migrateContentHash();
|
|
182
|
+
this.migrateTierColumn();
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
private migrateTierColumn(): void {
|
|
186
|
+
try {
|
|
187
|
+
this.provider.run("ALTER TABLE entries ADD COLUMN tier TEXT DEFAULT 'agent'");
|
|
188
|
+
} catch {
|
|
189
|
+
// Column already exists
|
|
190
|
+
}
|
|
191
|
+
this.provider.execSql(
|
|
192
|
+
'CREATE INDEX IF NOT EXISTS idx_entries_tier ON entries(tier) WHERE tier IS NOT NULL',
|
|
193
|
+
);
|
|
182
194
|
}
|
|
183
195
|
|
|
184
196
|
private migrateTemporalSchema(): void {
|
|
@@ -281,12 +293,12 @@ export class Vault {
|
|
|
281
293
|
|
|
282
294
|
seed(entries: IntelligenceEntry[]): number {
|
|
283
295
|
const sql = `
|
|
284
|
-
INSERT INTO entries (id,type,domain,title,severity,description,context,example,counter_example,why,tags,applies_to,valid_from,valid_until,content_hash)
|
|
285
|
-
VALUES (@id,@type,@domain,@title,@severity,@description,@context,@example,@counterExample,@why,@tags,@appliesTo,@validFrom,@validUntil,@contentHash)
|
|
296
|
+
INSERT INTO entries (id,type,domain,title,severity,description,context,example,counter_example,why,tags,applies_to,valid_from,valid_until,content_hash,tier)
|
|
297
|
+
VALUES (@id,@type,@domain,@title,@severity,@description,@context,@example,@counterExample,@why,@tags,@appliesTo,@validFrom,@validUntil,@contentHash,@tier)
|
|
286
298
|
ON CONFLICT(id) DO UPDATE SET type=excluded.type,domain=excluded.domain,title=excluded.title,severity=excluded.severity,
|
|
287
299
|
description=excluded.description,context=excluded.context,example=excluded.example,counter_example=excluded.counter_example,
|
|
288
300
|
why=excluded.why,tags=excluded.tags,applies_to=excluded.applies_to,valid_from=excluded.valid_from,valid_until=excluded.valid_until,
|
|
289
|
-
content_hash=excluded.content_hash,updated_at=unixepoch()
|
|
301
|
+
content_hash=excluded.content_hash,tier=excluded.tier,updated_at=unixepoch()
|
|
290
302
|
`;
|
|
291
303
|
return this.provider.transaction(() => {
|
|
292
304
|
let count = 0;
|
|
@@ -307,6 +319,7 @@ export class Vault {
|
|
|
307
319
|
validFrom: entry.validFrom ?? null,
|
|
308
320
|
validUntil: entry.validUntil ?? null,
|
|
309
321
|
contentHash: computeContentHash(entry),
|
|
322
|
+
tier: entry.tier ?? 'agent',
|
|
310
323
|
});
|
|
311
324
|
count++;
|
|
312
325
|
if (this.syncManager) {
|
|
@@ -317,6 +330,30 @@ export class Vault {
|
|
|
317
330
|
});
|
|
318
331
|
}
|
|
319
332
|
|
|
333
|
+
/**
|
|
334
|
+
* Seed entries with content-hash dedup. Returns per-entry results.
|
|
335
|
+
* Unlike seed(), skips entries whose content already exists in the vault.
|
|
336
|
+
*/
|
|
337
|
+
seedDedup(
|
|
338
|
+
entries: IntelligenceEntry[],
|
|
339
|
+
): Array<{ id: string; action: 'inserted' | 'duplicate'; existingId?: string }> {
|
|
340
|
+
return this.provider.transaction(() => {
|
|
341
|
+
const results: Array<{ id: string; action: 'inserted' | 'duplicate'; existingId?: string }> =
|
|
342
|
+
[];
|
|
343
|
+
for (const entry of entries) {
|
|
344
|
+
const hash = computeContentHash(entry);
|
|
345
|
+
const existing = this.findByContentHash(hash);
|
|
346
|
+
if (existing && existing !== entry.id) {
|
|
347
|
+
results.push({ id: entry.id, action: 'duplicate', existingId: existing });
|
|
348
|
+
} else {
|
|
349
|
+
this.seed([entry]);
|
|
350
|
+
results.push({ id: entry.id, action: 'inserted' });
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
return results;
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
|
|
320
357
|
search(
|
|
321
358
|
query: string,
|
|
322
359
|
options?: {
|
|
@@ -1095,6 +1132,7 @@ function rowToEntry(row: Record<string, unknown>): IntelligenceEntry {
|
|
|
1095
1132
|
why: (row.why as string) ?? undefined,
|
|
1096
1133
|
tags: JSON.parse((row.tags as string) || '[]'),
|
|
1097
1134
|
appliesTo: JSON.parse((row.applies_to as string) || '[]'),
|
|
1135
|
+
tier: (row.tier as IntelligenceEntry['tier']) ?? undefined,
|
|
1098
1136
|
validFrom: (row.valid_from as number) ?? undefined,
|
|
1099
1137
|
validUntil: (row.valid_until as number) ?? undefined,
|
|
1100
1138
|
};
|
package/src/governance/index.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export { Governance } from './governance.js';
|
|
2
|
-
export type {
|
|
3
|
-
PolicyType,
|
|
4
|
-
PolicyPreset,
|
|
5
|
-
PolicyAction,
|
|
6
|
-
QuotaPolicy,
|
|
7
|
-
RetentionPolicy,
|
|
8
|
-
AutoCapturePolicy,
|
|
9
|
-
VaultPolicy,
|
|
10
|
-
QuotaStatus,
|
|
11
|
-
PolicyDecision,
|
|
12
|
-
BatchDecision,
|
|
13
|
-
PolicyAuditEntry,
|
|
14
|
-
ProposalStatus,
|
|
15
|
-
Proposal,
|
|
16
|
-
ProposalStats,
|
|
17
|
-
GovernanceDashboard,
|
|
18
|
-
} from './types.js';
|