@soleri/core 2.9.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/planning/gap-analysis.d.ts.map +1 -1
- package/dist/planning/gap-analysis.js +3 -1
- package/dist/planning/gap-analysis.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/planning/gap-analysis.ts +52 -7
- 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,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context facade — entity extraction, knowledge retrieval, and context analysis.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import type { OpDefinition } from '../../facades/types.js';
|
|
7
|
+
import type { AgentRuntime } from '../types.js';
|
|
8
|
+
|
|
9
|
+
export function createContextFacadeOps(runtime: AgentRuntime): OpDefinition[] {
|
|
10
|
+
const { contextEngine } = runtime;
|
|
11
|
+
|
|
12
|
+
return [
|
|
13
|
+
{
|
|
14
|
+
name: 'context_extract_entities',
|
|
15
|
+
description:
|
|
16
|
+
'Extract named entities from a prompt — files, functions, domains, actions, technologies, patterns.',
|
|
17
|
+
auth: 'read',
|
|
18
|
+
schema: z.object({
|
|
19
|
+
prompt: z.string().describe('The user prompt to analyze.'),
|
|
20
|
+
}),
|
|
21
|
+
handler: async (params) => {
|
|
22
|
+
return contextEngine.extractEntities(params.prompt as string);
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
name: 'context_retrieve_knowledge',
|
|
27
|
+
description:
|
|
28
|
+
'Retrieve relevant knowledge from vault (FTS), Cognee (vector), and brain (recommendations). Returns scored and ranked items.',
|
|
29
|
+
auth: 'read',
|
|
30
|
+
schema: z.object({
|
|
31
|
+
prompt: z.string().describe('Query to search for.'),
|
|
32
|
+
domain: z.string().optional().describe('Filter by domain.'),
|
|
33
|
+
}),
|
|
34
|
+
handler: async (params) => {
|
|
35
|
+
return contextEngine.retrieveKnowledge(
|
|
36
|
+
params.prompt as string,
|
|
37
|
+
params.domain as string | undefined,
|
|
38
|
+
);
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'context_analyze',
|
|
43
|
+
description:
|
|
44
|
+
'Full context analysis — extract entities, retrieve knowledge, compute confidence, detect domains. Combines all signals into a single response.',
|
|
45
|
+
auth: 'read',
|
|
46
|
+
schema: z.object({
|
|
47
|
+
prompt: z.string().describe('The user prompt to analyze.'),
|
|
48
|
+
domain: z.string().optional().describe('Optional domain hint.'),
|
|
49
|
+
}),
|
|
50
|
+
handler: async (params) => {
|
|
51
|
+
return contextEngine.analyze(params.prompt as string, params.domain as string | undefined);
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
];
|
|
55
|
+
}
|
|
@@ -17,6 +17,9 @@ import { createLoopFacadeOps } from './loop-facade.js';
|
|
|
17
17
|
import { createOrchestrateFacadeOps } from './orchestrate-facade.js';
|
|
18
18
|
import { createControlFacadeOps } from './control-facade.js';
|
|
19
19
|
import { createCogneeFacadeOps } from './cognee-facade.js';
|
|
20
|
+
import { createContextFacadeOps } from './context-facade.js';
|
|
21
|
+
import { createAgencyFacadeOps } from './agency-facade.js';
|
|
22
|
+
import { createChatFacadeOps } from './chat-facade.js';
|
|
20
23
|
|
|
21
24
|
export function createSemanticFacades(runtime: AgentRuntime, agentId: string): FacadeConfig[] {
|
|
22
25
|
return [
|
|
@@ -57,7 +60,8 @@ export function createSemanticFacades(runtime: AgentRuntime, agentId: string): F
|
|
|
57
60
|
},
|
|
58
61
|
{
|
|
59
62
|
name: `${agentId}_orchestrate`,
|
|
60
|
-
description:
|
|
63
|
+
description:
|
|
64
|
+
'Execution orchestration — project registration, playbooks, plan/execute/complete.',
|
|
61
65
|
ops: createOrchestrateFacadeOps(runtime),
|
|
62
66
|
},
|
|
63
67
|
{
|
|
@@ -70,5 +74,22 @@ export function createSemanticFacades(runtime: AgentRuntime, agentId: string): F
|
|
|
70
74
|
description: 'Knowledge graph — Cognee search, sync, export, graph stats.',
|
|
71
75
|
ops: createCogneeFacadeOps(runtime),
|
|
72
76
|
},
|
|
77
|
+
{
|
|
78
|
+
name: `${agentId}_context`,
|
|
79
|
+
description: 'Context analysis — entity extraction, knowledge retrieval, confidence scoring.',
|
|
80
|
+
ops: createContextFacadeOps(runtime),
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
name: `${agentId}_agency`,
|
|
84
|
+
description:
|
|
85
|
+
'Proactive intelligence — file watching, pattern surfacing, warnings, clarification.',
|
|
86
|
+
ops: createAgencyFacadeOps(runtime),
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: `${agentId}_chat`,
|
|
90
|
+
description:
|
|
91
|
+
'Chat transport — session management, response chunking, authentication for chat-based interfaces.',
|
|
92
|
+
ops: createChatFacadeOps(runtime),
|
|
93
|
+
},
|
|
73
94
|
];
|
|
74
95
|
}
|
|
@@ -6,13 +6,16 @@
|
|
|
6
6
|
import { z } from 'zod';
|
|
7
7
|
import type { OpDefinition } from '../../facades/types.js';
|
|
8
8
|
import type { IntelligenceEntry } from '../../intelligence/types.js';
|
|
9
|
+
import type { VaultTier } from '../../vault/vault-types.js';
|
|
9
10
|
import type { AgentRuntime } from '../types.js';
|
|
10
11
|
import { createVaultExtraOps } from '../vault-extra-ops.js';
|
|
11
12
|
import { createCaptureOps } from '../capture-ops.js';
|
|
12
13
|
import { createIntakeOps } from '../intake-ops.js';
|
|
14
|
+
import { createVaultSharingOps } from '../vault-sharing-ops.js';
|
|
15
|
+
import { ObsidianSync } from '../../vault/obsidian-sync.js';
|
|
13
16
|
|
|
14
17
|
export function createVaultFacadeOps(runtime: AgentRuntime): OpDefinition[] {
|
|
15
|
-
const { vault, brain,
|
|
18
|
+
const { vault, brain, intakePipeline, vaultManager } = runtime;
|
|
16
19
|
|
|
17
20
|
return [
|
|
18
21
|
// ─── Search / Vault (inline from core-ops.ts) ───────────────
|
|
@@ -215,9 +218,266 @@ export function createVaultFacadeOps(runtime: AgentRuntime): OpDefinition[] {
|
|
|
215
218
|
},
|
|
216
219
|
},
|
|
217
220
|
|
|
221
|
+
// ─── Multi-vault ops ────────────────────────────────────────
|
|
222
|
+
{
|
|
223
|
+
name: 'vault_connect',
|
|
224
|
+
description:
|
|
225
|
+
'Connect an additional vault tier (project or team). Opens a separate SQLite database.',
|
|
226
|
+
auth: 'admin',
|
|
227
|
+
schema: z.object({
|
|
228
|
+
tier: z.enum(['project', 'team']).describe('Vault tier to connect'),
|
|
229
|
+
path: z.string().describe('Path to the SQLite database file'),
|
|
230
|
+
}),
|
|
231
|
+
handler: async (params) => {
|
|
232
|
+
const tier = params.tier as VaultTier;
|
|
233
|
+
const path = params.path as string;
|
|
234
|
+
vaultManager.open(tier, path);
|
|
235
|
+
return { connected: true, tier, path };
|
|
236
|
+
},
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
name: 'vault_disconnect',
|
|
240
|
+
description: 'Disconnect a vault tier. Cannot disconnect the agent tier.',
|
|
241
|
+
auth: 'admin',
|
|
242
|
+
schema: z.object({
|
|
243
|
+
tier: z.enum(['project', 'team']).describe('Vault tier to disconnect'),
|
|
244
|
+
}),
|
|
245
|
+
handler: async (params) => {
|
|
246
|
+
const tier = params.tier as VaultTier;
|
|
247
|
+
const removed = vaultManager.disconnect(tier);
|
|
248
|
+
return { disconnected: removed, tier };
|
|
249
|
+
},
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
name: 'vault_tiers',
|
|
253
|
+
description: 'List all vault tiers with connection status and entry counts.',
|
|
254
|
+
auth: 'read',
|
|
255
|
+
handler: async () => {
|
|
256
|
+
return { tiers: vaultManager.listTiers() };
|
|
257
|
+
},
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
name: 'vault_search_all',
|
|
261
|
+
description:
|
|
262
|
+
'Search across all connected vault tiers with priority-weighted cascading. Agent tier results ranked highest.',
|
|
263
|
+
auth: 'read',
|
|
264
|
+
schema: z.object({
|
|
265
|
+
query: z.string(),
|
|
266
|
+
limit: z.number().optional(),
|
|
267
|
+
}),
|
|
268
|
+
handler: async (params) => {
|
|
269
|
+
const results = vaultManager.search(params.query as string, (params.limit as number) ?? 20);
|
|
270
|
+
return { results, count: results.length };
|
|
271
|
+
},
|
|
272
|
+
},
|
|
273
|
+
|
|
274
|
+
// ─── Named vault connections ────────────────────────────────
|
|
275
|
+
{
|
|
276
|
+
name: 'vault_connect_source',
|
|
277
|
+
description:
|
|
278
|
+
'Connect a named vault source (e.g., shared team knowledge base) with a configurable search priority.',
|
|
279
|
+
auth: 'admin',
|
|
280
|
+
schema: z.object({
|
|
281
|
+
name: z.string().describe('Unique name for this vault connection'),
|
|
282
|
+
path: z.string().describe('Path to the SQLite database file'),
|
|
283
|
+
priority: z
|
|
284
|
+
.number()
|
|
285
|
+
.min(0)
|
|
286
|
+
.max(2)
|
|
287
|
+
.optional()
|
|
288
|
+
.describe('Search priority weight (default: 0.5)'),
|
|
289
|
+
}),
|
|
290
|
+
handler: async (params) => {
|
|
291
|
+
const name = params.name as string;
|
|
292
|
+
const path = params.path as string;
|
|
293
|
+
const priority = (params.priority as number) ?? 0.5;
|
|
294
|
+
vaultManager.connect(name, path, priority);
|
|
295
|
+
return { connected: true, name, path, priority };
|
|
296
|
+
},
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
name: 'vault_disconnect_source',
|
|
300
|
+
description: 'Disconnect a named vault source.',
|
|
301
|
+
auth: 'admin',
|
|
302
|
+
schema: z.object({
|
|
303
|
+
name: z.string().describe('Name of the vault connection to remove'),
|
|
304
|
+
}),
|
|
305
|
+
handler: async (params) => {
|
|
306
|
+
const name = params.name as string;
|
|
307
|
+
const removed = vaultManager.disconnectNamed(name);
|
|
308
|
+
return { disconnected: removed, name };
|
|
309
|
+
},
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
name: 'vault_list_sources',
|
|
313
|
+
description: 'List all dynamically connected vault sources with their priorities.',
|
|
314
|
+
auth: 'read',
|
|
315
|
+
handler: async () => {
|
|
316
|
+
return { sources: vaultManager.listConnected() };
|
|
317
|
+
},
|
|
318
|
+
},
|
|
319
|
+
|
|
320
|
+
// ─── Branching ─────────────────────────────────────────────
|
|
321
|
+
{
|
|
322
|
+
name: 'vault_branch',
|
|
323
|
+
description:
|
|
324
|
+
'Create a named vault branch for experimentation. Changes can be reviewed and merged later.',
|
|
325
|
+
auth: 'write',
|
|
326
|
+
schema: z.object({
|
|
327
|
+
name: z.string().describe('Unique branch name'),
|
|
328
|
+
}),
|
|
329
|
+
handler: async (params) => {
|
|
330
|
+
const { vaultBranching } = runtime;
|
|
331
|
+
try {
|
|
332
|
+
vaultBranching.branch(params.name as string);
|
|
333
|
+
return { created: true, name: params.name };
|
|
334
|
+
} catch (err) {
|
|
335
|
+
return { error: (err as Error).message };
|
|
336
|
+
}
|
|
337
|
+
},
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
name: 'vault_branch_add',
|
|
341
|
+
description: 'Add an operation (add/modify/remove) to a vault branch.',
|
|
342
|
+
auth: 'write',
|
|
343
|
+
schema: z.object({
|
|
344
|
+
branchName: z.string().describe('Branch to add the operation to'),
|
|
345
|
+
entryId: z.string().describe('Entry ID'),
|
|
346
|
+
action: z.enum(['add', 'modify', 'remove']).describe('Operation type'),
|
|
347
|
+
entryData: z
|
|
348
|
+
.record(z.unknown())
|
|
349
|
+
.optional()
|
|
350
|
+
.describe('Full entry data (required for add/modify)'),
|
|
351
|
+
}),
|
|
352
|
+
handler: async (params) => {
|
|
353
|
+
const { vaultBranching } = runtime;
|
|
354
|
+
try {
|
|
355
|
+
vaultBranching.addOperation(
|
|
356
|
+
params.branchName as string,
|
|
357
|
+
params.entryId as string,
|
|
358
|
+
params.action as 'add' | 'modify' | 'remove',
|
|
359
|
+
params.entryData as IntelligenceEntry | undefined,
|
|
360
|
+
);
|
|
361
|
+
return {
|
|
362
|
+
added: true,
|
|
363
|
+
branchName: params.branchName,
|
|
364
|
+
entryId: params.entryId,
|
|
365
|
+
action: params.action,
|
|
366
|
+
};
|
|
367
|
+
} catch (err) {
|
|
368
|
+
return { error: (err as Error).message };
|
|
369
|
+
}
|
|
370
|
+
},
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
name: 'vault_branch_list',
|
|
374
|
+
description: 'List all vault branches with entry counts and merge status.',
|
|
375
|
+
auth: 'read',
|
|
376
|
+
handler: async () => {
|
|
377
|
+
const { vaultBranching } = runtime;
|
|
378
|
+
return { branches: vaultBranching.listBranches() };
|
|
379
|
+
},
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
name: 'vault_merge_branch',
|
|
383
|
+
description: 'Merge a branch into the main vault. Branch entries win on conflict.',
|
|
384
|
+
auth: 'admin',
|
|
385
|
+
schema: z.object({
|
|
386
|
+
branchName: z.string().describe('Branch to merge'),
|
|
387
|
+
}),
|
|
388
|
+
handler: async (params) => {
|
|
389
|
+
const { vaultBranching } = runtime;
|
|
390
|
+
try {
|
|
391
|
+
return vaultBranching.merge(params.branchName as string);
|
|
392
|
+
} catch (err) {
|
|
393
|
+
return { error: (err as Error).message };
|
|
394
|
+
}
|
|
395
|
+
},
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
name: 'vault_delete_branch',
|
|
399
|
+
description: 'Delete a vault branch and all its operations.',
|
|
400
|
+
auth: 'admin',
|
|
401
|
+
schema: z.object({
|
|
402
|
+
branchName: z.string().describe('Branch to delete'),
|
|
403
|
+
}),
|
|
404
|
+
handler: async (params) => {
|
|
405
|
+
const { vaultBranching } = runtime;
|
|
406
|
+
const deleted = vaultBranching.deleteBranch(params.branchName as string);
|
|
407
|
+
return { deleted, branchName: params.branchName };
|
|
408
|
+
},
|
|
409
|
+
},
|
|
410
|
+
|
|
411
|
+
// ─── Obsidian Sync ──────────────────────────────────────────
|
|
412
|
+
{
|
|
413
|
+
name: 'obsidian_export',
|
|
414
|
+
description:
|
|
415
|
+
'Export vault entries to Obsidian-compatible markdown files with YAML frontmatter. Creates domain subdirectories.',
|
|
416
|
+
auth: 'read',
|
|
417
|
+
schema: z.object({
|
|
418
|
+
obsidianDir: z.string().describe('Path to Obsidian vault directory'),
|
|
419
|
+
types: z.array(z.string()).optional().describe('Filter by entry types'),
|
|
420
|
+
domains: z.array(z.string()).optional().describe('Filter by domains'),
|
|
421
|
+
dryRun: z.boolean().optional().describe('Preview without writing files'),
|
|
422
|
+
}),
|
|
423
|
+
handler: async (params) => {
|
|
424
|
+
const sync = new ObsidianSync({ vault });
|
|
425
|
+
return sync.export(params.obsidianDir as string, {
|
|
426
|
+
types: params.types as string[] | undefined,
|
|
427
|
+
domains: params.domains as string[] | undefined,
|
|
428
|
+
dryRun: params.dryRun as boolean | undefined,
|
|
429
|
+
});
|
|
430
|
+
},
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
name: 'obsidian_import',
|
|
434
|
+
description:
|
|
435
|
+
'Import Obsidian markdown files with YAML frontmatter into the vault. Parses title, type, domain, tags from frontmatter.',
|
|
436
|
+
auth: 'write',
|
|
437
|
+
schema: z.object({
|
|
438
|
+
obsidianDir: z.string().describe('Path to Obsidian vault directory to import from'),
|
|
439
|
+
defaultType: z
|
|
440
|
+
.string()
|
|
441
|
+
.optional()
|
|
442
|
+
.describe('Default type for entries without frontmatter type'),
|
|
443
|
+
defaultDomain: z.string().optional().describe('Default domain for entries without one'),
|
|
444
|
+
dryRun: z.boolean().optional().describe('Preview without modifying vault'),
|
|
445
|
+
}),
|
|
446
|
+
handler: async (params) => {
|
|
447
|
+
const sync = new ObsidianSync({ vault });
|
|
448
|
+
return sync.import(params.obsidianDir as string, {
|
|
449
|
+
defaultType: params.defaultType as string | undefined,
|
|
450
|
+
defaultDomain: params.defaultDomain as string | undefined,
|
|
451
|
+
dryRun: params.dryRun as boolean | undefined,
|
|
452
|
+
});
|
|
453
|
+
},
|
|
454
|
+
},
|
|
455
|
+
{
|
|
456
|
+
name: 'obsidian_sync',
|
|
457
|
+
description:
|
|
458
|
+
'Bidirectional sync between vault and Obsidian directory. Modes: push (vault→Obsidian), pull (Obsidian→vault), bidirectional.',
|
|
459
|
+
auth: 'write',
|
|
460
|
+
schema: z.object({
|
|
461
|
+
obsidianDir: z.string().describe('Path to Obsidian vault directory'),
|
|
462
|
+
mode: z
|
|
463
|
+
.enum(['push', 'pull', 'bidirectional'])
|
|
464
|
+
.optional()
|
|
465
|
+
.describe('Sync mode. Default: bidirectional'),
|
|
466
|
+
dryRun: z.boolean().optional().describe('Preview without making changes'),
|
|
467
|
+
}),
|
|
468
|
+
handler: async (params) => {
|
|
469
|
+
const sync = new ObsidianSync({ vault });
|
|
470
|
+
return sync.sync(params.obsidianDir as string, {
|
|
471
|
+
mode: params.mode as 'push' | 'pull' | 'bidirectional' | undefined,
|
|
472
|
+
dryRun: params.dryRun as boolean | undefined,
|
|
473
|
+
});
|
|
474
|
+
},
|
|
475
|
+
},
|
|
476
|
+
|
|
218
477
|
// ─── Satellite ops ───────────────────────────────────────────
|
|
219
478
|
...createVaultExtraOps(runtime),
|
|
220
479
|
...createCaptureOps(runtime),
|
|
221
480
|
...createIntakeOps(intakePipeline),
|
|
481
|
+
...createVaultSharingOps(runtime),
|
|
222
482
|
];
|
|
223
483
|
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
2
|
+
import { dirname } from 'node:path';
|
|
3
|
+
|
|
4
|
+
export interface FlagDefinition {
|
|
5
|
+
description: string;
|
|
6
|
+
defaultValue: boolean;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/** Built-in flags with defaults */
|
|
10
|
+
const BUILT_IN_FLAGS: Record<string, FlagDefinition> = {
|
|
11
|
+
'auth-enforcement': {
|
|
12
|
+
description: 'Enforce auth levels in facade dispatch',
|
|
13
|
+
defaultValue: false,
|
|
14
|
+
},
|
|
15
|
+
'hot-reload': { description: 'Enable hot reload of vault and config', defaultValue: true },
|
|
16
|
+
'search-feedback': {
|
|
17
|
+
description: 'Record search feedback for brain learning',
|
|
18
|
+
defaultValue: true,
|
|
19
|
+
},
|
|
20
|
+
telemetry: { description: 'Collect op-level telemetry metrics', defaultValue: true },
|
|
21
|
+
'agency-mode': { description: 'Enable proactive agent behavior', defaultValue: false },
|
|
22
|
+
'cognee-sync': {
|
|
23
|
+
description: 'Sync vault entries to Cognee knowledge graph',
|
|
24
|
+
defaultValue: true,
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export class FeatureFlags {
|
|
29
|
+
private flags: Map<string, boolean> = new Map();
|
|
30
|
+
private readonly filePath: string | null;
|
|
31
|
+
|
|
32
|
+
constructor(filePath?: string) {
|
|
33
|
+
this.filePath = filePath ?? null;
|
|
34
|
+
|
|
35
|
+
// 1. Apply defaults
|
|
36
|
+
for (const [name, def] of Object.entries(BUILT_IN_FLAGS)) {
|
|
37
|
+
this.flags.set(name, def.defaultValue);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// 2. Load from file (if exists)
|
|
41
|
+
if (this.filePath && existsSync(this.filePath)) {
|
|
42
|
+
try {
|
|
43
|
+
const data = JSON.parse(readFileSync(this.filePath, 'utf-8'));
|
|
44
|
+
for (const [key, value] of Object.entries(data)) {
|
|
45
|
+
if (typeof value === 'boolean') {
|
|
46
|
+
this.flags.set(key, value);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
} catch {
|
|
50
|
+
// Corrupt file — use defaults
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// 3. Environment variable overrides: SOLERI_FLAG_AUTH_ENFORCEMENT=true
|
|
55
|
+
for (const [key, value] of Object.entries(process.env)) {
|
|
56
|
+
if (key.startsWith('SOLERI_FLAG_')) {
|
|
57
|
+
const flagName = key.slice('SOLERI_FLAG_'.length).toLowerCase().replace(/_/g, '-');
|
|
58
|
+
this.flags.set(flagName, value === 'true' || value === '1');
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
isEnabled(flag: string): boolean {
|
|
64
|
+
return this.flags.get(flag) ?? false;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
set(flag: string, enabled: boolean): void {
|
|
68
|
+
this.flags.set(flag, enabled);
|
|
69
|
+
this.persist();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
getAll(): Record<string, { enabled: boolean; description: string; source: string }> {
|
|
73
|
+
const result: Record<string, { enabled: boolean; description: string; source: string }> = {};
|
|
74
|
+
for (const [name, enabled] of this.flags) {
|
|
75
|
+
const builtIn = BUILT_IN_FLAGS[name];
|
|
76
|
+
const envKey = `SOLERI_FLAG_${name.replace(/-/g, '_').toUpperCase()}`;
|
|
77
|
+
const hasEnv = process.env[envKey] !== undefined;
|
|
78
|
+
result[name] = {
|
|
79
|
+
enabled,
|
|
80
|
+
description: builtIn?.description ?? 'Custom flag',
|
|
81
|
+
source: hasEnv ? 'env' : builtIn ? 'default' : 'runtime',
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
return result;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
private persist(): void {
|
|
88
|
+
if (!this.filePath) return;
|
|
89
|
+
try {
|
|
90
|
+
const dir = dirname(this.filePath);
|
|
91
|
+
mkdirSync(dir, { recursive: true });
|
|
92
|
+
const obj: Record<string, boolean> = {};
|
|
93
|
+
for (const [k, v] of this.flags) {
|
|
94
|
+
obj[k] = v;
|
|
95
|
+
}
|
|
96
|
+
writeFileSync(this.filePath, JSON.stringify(obj, null, 2) + '\n');
|
|
97
|
+
} catch {
|
|
98
|
+
// Non-critical — flags still work in-memory
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pack Operations — 4 ops for knowledge pack management.
|
|
3
|
+
*
|
|
4
|
+
* pack_install, pack_list, pack_uninstall, pack_validate
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import type { OpDefinition } from '../facades/types.js';
|
|
9
|
+
import type { AgentRuntime } from './types.js';
|
|
10
|
+
|
|
11
|
+
export function createPackOps(runtime: AgentRuntime): OpDefinition[] {
|
|
12
|
+
const { packInstaller } = runtime;
|
|
13
|
+
|
|
14
|
+
return [
|
|
15
|
+
// ─── pack_validate ────────────────────────────────────────────────
|
|
16
|
+
{
|
|
17
|
+
name: 'pack_validate',
|
|
18
|
+
description:
|
|
19
|
+
'Validate a knowledge pack directory without installing. Returns manifest, counts, and any errors/warnings.',
|
|
20
|
+
auth: 'read',
|
|
21
|
+
schema: z.object({
|
|
22
|
+
packDir: z.string().describe('Path to the knowledge pack directory.'),
|
|
23
|
+
}),
|
|
24
|
+
handler: async (params) => {
|
|
25
|
+
return packInstaller.validate(params.packDir as string);
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
// ─── pack_install ─────────────────────────────────────────────────
|
|
30
|
+
{
|
|
31
|
+
name: 'pack_install',
|
|
32
|
+
description:
|
|
33
|
+
'Install a knowledge pack — validates manifest, seeds vault entries, registers facades, discovers skills and hooks.',
|
|
34
|
+
auth: 'admin',
|
|
35
|
+
schema: z.object({
|
|
36
|
+
packDir: z.string().describe('Path to the knowledge pack directory.'),
|
|
37
|
+
}),
|
|
38
|
+
handler: async (params) => {
|
|
39
|
+
return packInstaller.install(params.packDir as string, runtime);
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
// ─── pack_list ────────────────────────────────────────────────────
|
|
44
|
+
{
|
|
45
|
+
name: 'pack_list',
|
|
46
|
+
description: 'List all installed knowledge packs with their status and contents.',
|
|
47
|
+
auth: 'read',
|
|
48
|
+
handler: async () => {
|
|
49
|
+
const packs = packInstaller.list();
|
|
50
|
+
return {
|
|
51
|
+
packs: packs.map((p) => ({
|
|
52
|
+
id: p.id,
|
|
53
|
+
name: p.manifest.name,
|
|
54
|
+
version: p.manifest.version,
|
|
55
|
+
domains: p.manifest.domains,
|
|
56
|
+
status: p.status,
|
|
57
|
+
vaultEntries: p.vaultEntries,
|
|
58
|
+
skills: p.skills,
|
|
59
|
+
hooks: p.hooks,
|
|
60
|
+
facadesRegistered: p.facadesRegistered,
|
|
61
|
+
error: p.error,
|
|
62
|
+
})),
|
|
63
|
+
count: packs.length,
|
|
64
|
+
};
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
// ─── pack_uninstall ───────────────────────────────────────────────
|
|
69
|
+
{
|
|
70
|
+
name: 'pack_uninstall',
|
|
71
|
+
description:
|
|
72
|
+
'Uninstall a knowledge pack — deactivates facades. Vault entries are NOT removed (knowledge persists).',
|
|
73
|
+
auth: 'admin',
|
|
74
|
+
schema: z.object({
|
|
75
|
+
packId: z.string().describe('Pack ID to uninstall.'),
|
|
76
|
+
}),
|
|
77
|
+
handler: async (params) => {
|
|
78
|
+
const packId = params.packId as string;
|
|
79
|
+
const success = packInstaller.uninstall(packId);
|
|
80
|
+
if (!success) return { error: `Pack not found: ${packId}` };
|
|
81
|
+
return { uninstalled: true, id: packId };
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
];
|
|
85
|
+
}
|