@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,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLAUDE.md injection — marker-based write with diff detection and user-safe zones.
|
|
3
|
+
*
|
|
4
|
+
* Improvements over Salvador:
|
|
5
|
+
* - Diff-before-write: skips I/O if content unchanged
|
|
6
|
+
* - User-safe zones: `<!-- user:custom -->` blocks inside markers survive regeneration
|
|
7
|
+
* - Versioned markers: `<!-- agent:mode v1 -->` for future migration
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
11
|
+
import { OPEN_MARKER, CLOSE_MARKER, USER_ZONE_OPEN, USER_ZONE_CLOSE } from './compose.js';
|
|
12
|
+
import type { InjectionResult, RemovalResult } from './types.js';
|
|
13
|
+
|
|
14
|
+
/** Legacy marker patterns to detect and migrate */
|
|
15
|
+
const LEGACY_MARKERS = [
|
|
16
|
+
'<!-- agent:mode -->', // v0 (no version)
|
|
17
|
+
'<!-- salvador:mode -->', // pre-Soleri
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Extract user-safe zone content from an existing agent block.
|
|
22
|
+
* Returns the content between `<!-- user:custom -->` markers, or null.
|
|
23
|
+
*/
|
|
24
|
+
export function extractUserZone(content: string): string | null {
|
|
25
|
+
const openIdx = content.indexOf(USER_ZONE_OPEN);
|
|
26
|
+
const closeIdx = content.indexOf(USER_ZONE_CLOSE);
|
|
27
|
+
if (openIdx === -1 || closeIdx === -1 || closeIdx <= openIdx) return null;
|
|
28
|
+
const inner = content.slice(openIdx + USER_ZONE_OPEN.length, closeIdx).trim();
|
|
29
|
+
return inner || null;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Preserve user-safe zone content when regenerating.
|
|
34
|
+
* Replaces the empty user zone in `newBlock` with the saved content.
|
|
35
|
+
*/
|
|
36
|
+
function preserveUserZone(newBlock: string, savedZone: string | null): string {
|
|
37
|
+
if (!savedZone) return newBlock;
|
|
38
|
+
const emptyZone = `${USER_ZONE_OPEN}\n\n${USER_ZONE_CLOSE}`;
|
|
39
|
+
const filledZone = `${USER_ZONE_OPEN}\n${savedZone}\n${USER_ZONE_CLOSE}`;
|
|
40
|
+
return newBlock.replace(emptyZone, filledZone);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Find the agent block boundaries in content.
|
|
45
|
+
* Handles current and legacy markers.
|
|
46
|
+
*/
|
|
47
|
+
function findBlock(
|
|
48
|
+
content: string,
|
|
49
|
+
): { openIdx: number; closeIdx: number; closeLen: number } | null {
|
|
50
|
+
// Current markers
|
|
51
|
+
const openIdx = content.indexOf(OPEN_MARKER);
|
|
52
|
+
if (openIdx !== -1) {
|
|
53
|
+
const closeIdx = content.indexOf(CLOSE_MARKER, openIdx);
|
|
54
|
+
if (closeIdx > openIdx) {
|
|
55
|
+
return { openIdx, closeIdx, closeLen: CLOSE_MARKER.length };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Legacy markers
|
|
60
|
+
for (const legacy of LEGACY_MARKERS) {
|
|
61
|
+
const legacyOpen = content.indexOf(legacy);
|
|
62
|
+
if (legacyOpen === -1) continue;
|
|
63
|
+
const legacyCloseTag = legacy.replace('<!-- ', '<!-- /');
|
|
64
|
+
const legacyClose = content.indexOf(legacyCloseTag, legacyOpen);
|
|
65
|
+
if (legacyClose > legacyOpen) {
|
|
66
|
+
return { openIdx: legacyOpen, closeIdx: legacyClose, closeLen: legacyCloseTag.length };
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Inject an agent block into a CLAUDE.md file.
|
|
75
|
+
*
|
|
76
|
+
* - If markers exist: replace (preserving user-safe zones), skip if unchanged
|
|
77
|
+
* - If legacy markers: migrate
|
|
78
|
+
* - If no markers: append
|
|
79
|
+
*/
|
|
80
|
+
export function injectCLAUDEmd(filePath: string, block: string): InjectionResult {
|
|
81
|
+
try {
|
|
82
|
+
// New file
|
|
83
|
+
if (!existsSync(filePath)) {
|
|
84
|
+
writeFileSync(filePath, block + '\n', 'utf-8');
|
|
85
|
+
return { success: true, action: 'injected', message: 'Created file with agent block' };
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
89
|
+
const bounds = findBlock(content);
|
|
90
|
+
|
|
91
|
+
if (bounds) {
|
|
92
|
+
// Extract user zone from existing block before replacing
|
|
93
|
+
const existingBlock = content.slice(bounds.openIdx, bounds.closeIdx + bounds.closeLen);
|
|
94
|
+
const userZone = extractUserZone(existingBlock);
|
|
95
|
+
const finalBlock = preserveUserZone(block, userZone);
|
|
96
|
+
|
|
97
|
+
// Diff check — skip write if identical
|
|
98
|
+
if (existingBlock === finalBlock) {
|
|
99
|
+
return {
|
|
100
|
+
success: true,
|
|
101
|
+
action: 'skipped',
|
|
102
|
+
message: 'Content unchanged — no write needed',
|
|
103
|
+
diffDetected: false,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const before = content.slice(0, bounds.openIdx);
|
|
108
|
+
const after = content.slice(bounds.closeIdx + bounds.closeLen);
|
|
109
|
+
writeFileSync(filePath, before + finalBlock + after, 'utf-8');
|
|
110
|
+
return {
|
|
111
|
+
success: true,
|
|
112
|
+
action: 'replaced',
|
|
113
|
+
message: 'Replaced agent block (diff detected)',
|
|
114
|
+
diffDetected: true,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// No markers — append
|
|
119
|
+
writeFileSync(filePath, content.trimEnd() + '\n\n' + block + '\n', 'utf-8');
|
|
120
|
+
return { success: true, action: 'injected', message: 'Appended agent block' };
|
|
121
|
+
} catch (err) {
|
|
122
|
+
return {
|
|
123
|
+
success: false,
|
|
124
|
+
action: 'error',
|
|
125
|
+
message: `Injection failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Remove the agent block from a CLAUDE.md file.
|
|
132
|
+
*/
|
|
133
|
+
export function removeCLAUDEmd(filePath: string): RemovalResult {
|
|
134
|
+
try {
|
|
135
|
+
if (!existsSync(filePath)) {
|
|
136
|
+
return { success: true, action: 'not_present', message: 'File does not exist' };
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
140
|
+
const bounds = findBlock(content);
|
|
141
|
+
|
|
142
|
+
if (!bounds) {
|
|
143
|
+
return { success: true, action: 'not_present', message: 'No agent block found' };
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const before = content.slice(0, bounds.openIdx).trimEnd();
|
|
147
|
+
const after = content.slice(bounds.closeIdx + bounds.closeLen).trimStart();
|
|
148
|
+
writeFileSync(filePath, after ? before + '\n\n' + after : before + '\n', 'utf-8');
|
|
149
|
+
return { success: true, action: 'removed', message: 'Removed agent block' };
|
|
150
|
+
} catch (err) {
|
|
151
|
+
return {
|
|
152
|
+
success: false,
|
|
153
|
+
action: 'error',
|
|
154
|
+
message: `Removal failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Check if an agent block is present in a CLAUDE.md file.
|
|
161
|
+
*/
|
|
162
|
+
export function hasCLAUDEmdBlock(filePath: string): boolean {
|
|
163
|
+
if (!existsSync(filePath)) return false;
|
|
164
|
+
try {
|
|
165
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
166
|
+
return findBlock(content) !== null;
|
|
167
|
+
} catch {
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for CLAUDE.md auto-composition and injection.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/** Agent metadata for CLAUDE.md generation */
|
|
6
|
+
export interface AgentMeta {
|
|
7
|
+
id: string;
|
|
8
|
+
name: string;
|
|
9
|
+
activationPhrase: string;
|
|
10
|
+
deactivationPhrase: string;
|
|
11
|
+
activateCommand: string;
|
|
12
|
+
deactivateCommand: string;
|
|
13
|
+
/** Global instruction sections (priority-sorted, lower = higher) */
|
|
14
|
+
globalInstructions?: GlobalInstruction[];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** A standalone section in CLAUDE.md not tied to a facade */
|
|
18
|
+
export interface GlobalInstruction {
|
|
19
|
+
heading: string;
|
|
20
|
+
content: string;
|
|
21
|
+
priority?: number;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** Facade instructions for CLAUDE.md behavioral rules */
|
|
25
|
+
export interface FacadeInstructions {
|
|
26
|
+
heading: string;
|
|
27
|
+
rules?: string[];
|
|
28
|
+
templates?: Record<string, string>;
|
|
29
|
+
priority?: number;
|
|
30
|
+
keyOps?: string[];
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** Result of an injection or removal operation */
|
|
34
|
+
export interface InjectionResult {
|
|
35
|
+
success: boolean;
|
|
36
|
+
action: 'injected' | 'replaced' | 'skipped' | 'error';
|
|
37
|
+
message: string;
|
|
38
|
+
diffDetected?: boolean;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface RemovalResult {
|
|
42
|
+
success: boolean;
|
|
43
|
+
action: 'removed' | 'not_present' | 'error';
|
|
44
|
+
message: string;
|
|
45
|
+
}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Engine — entity extraction, knowledge retrieval, and confidence scoring.
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates three signals to enrich intent classification:
|
|
5
|
+
* 1. Entity extraction (regex-based, domain-agnostic)
|
|
6
|
+
* 2. Knowledge retrieval (vault FTS + Cognee vector + brain recommendations)
|
|
7
|
+
* 3. Confidence scoring (combines entity + knowledge signals)
|
|
8
|
+
*
|
|
9
|
+
* Graceful degradation: if Cognee is unavailable, vault-only.
|
|
10
|
+
* If vault is empty, keyword confidence from IntentRouter is unchanged.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import type { Vault } from '../vault/vault.js';
|
|
14
|
+
import type { Brain } from '../brain/brain.js';
|
|
15
|
+
import type { BrainIntelligence } from '../brain/intelligence.js';
|
|
16
|
+
import type { CogneeClient } from '../cognee/client.js';
|
|
17
|
+
import type {
|
|
18
|
+
EntityType,
|
|
19
|
+
ExtractedEntity,
|
|
20
|
+
EntityExtractionResult,
|
|
21
|
+
KnowledgeItem,
|
|
22
|
+
KnowledgeRetrievalResult,
|
|
23
|
+
ContextAnalysis,
|
|
24
|
+
ConfidenceLevel,
|
|
25
|
+
ContextEngineConfig,
|
|
26
|
+
} from './types.js';
|
|
27
|
+
|
|
28
|
+
// ─── Entity Patterns ────────────────────────────────────────────────
|
|
29
|
+
|
|
30
|
+
const ENTITY_PATTERNS: Array<{ type: EntityType; pattern: RegExp; confidence: number }> = [
|
|
31
|
+
// File paths: src/foo/bar.ts, ./config.json, foo.tsx
|
|
32
|
+
{ type: 'file', pattern: /(?:\.\/|src\/|packages\/)?[\w\-./]+\.\w{1,6}/g, confidence: 0.8 },
|
|
33
|
+
// Function/method names: functionName(), ClassName.method()
|
|
34
|
+
{ type: 'function', pattern: /\b[a-z]\w*(?:\.\w+)*\(\)/g, confidence: 0.7 },
|
|
35
|
+
// Domains: accessibility, performance, security, etc.
|
|
36
|
+
{
|
|
37
|
+
type: 'domain',
|
|
38
|
+
pattern:
|
|
39
|
+
/\b(?:accessibility|a11y|performance|security|architecture|testing|design|ux|devops|data|analytics|auth|api)\b/gi,
|
|
40
|
+
confidence: 0.9,
|
|
41
|
+
},
|
|
42
|
+
// Actions: create, fix, build, deploy, etc.
|
|
43
|
+
{
|
|
44
|
+
type: 'action',
|
|
45
|
+
pattern:
|
|
46
|
+
/\b(?:create|build|fix|debug|deploy|test|validate|review|improve|refactor|optimize|migrate|add|remove|update)\b/gi,
|
|
47
|
+
confidence: 0.8,
|
|
48
|
+
},
|
|
49
|
+
// Technologies: React, TypeScript, Node.js, etc.
|
|
50
|
+
{
|
|
51
|
+
type: 'technology',
|
|
52
|
+
pattern:
|
|
53
|
+
/\b(?:react|vue|svelte|angular|typescript|javascript|node\.?js|python|rust|go|docker|kubernetes|postgres|sqlite|redis|tailwind|css|html|graphql|rest|grpc)\b/gi,
|
|
54
|
+
confidence: 0.85,
|
|
55
|
+
},
|
|
56
|
+
// Patterns: kebab-case compound terms that look like patterns
|
|
57
|
+
{ type: 'pattern', pattern: /\b[a-z]+-[a-z]+(?:-[a-z]+)*\b/g, confidence: 0.5 },
|
|
58
|
+
];
|
|
59
|
+
|
|
60
|
+
// Words to ignore when extracting patterns
|
|
61
|
+
const STOP_PATTERNS = new Set([
|
|
62
|
+
'e-mail',
|
|
63
|
+
'real-time',
|
|
64
|
+
'built-in',
|
|
65
|
+
'up-to-date',
|
|
66
|
+
'well-known',
|
|
67
|
+
'open-source',
|
|
68
|
+
'third-party',
|
|
69
|
+
'cross-platform',
|
|
70
|
+
'end-to-end',
|
|
71
|
+
'out-of-the-box',
|
|
72
|
+
]);
|
|
73
|
+
|
|
74
|
+
// ─── Confidence Thresholds ──────────────────────────────────────────
|
|
75
|
+
|
|
76
|
+
const HIGH_CONFIDENCE = 0.75;
|
|
77
|
+
const MEDIUM_CONFIDENCE = 0.45;
|
|
78
|
+
|
|
79
|
+
// ─── Class ──────────────────────────────────────────────────────────
|
|
80
|
+
|
|
81
|
+
export class ContextEngine {
|
|
82
|
+
private vault: Vault;
|
|
83
|
+
private brain: Brain;
|
|
84
|
+
private brainIntelligence: BrainIntelligence;
|
|
85
|
+
private cognee: CogneeClient | null;
|
|
86
|
+
private config: Required<ContextEngineConfig>;
|
|
87
|
+
|
|
88
|
+
constructor(
|
|
89
|
+
vault: Vault,
|
|
90
|
+
brain: Brain,
|
|
91
|
+
brainIntelligence: BrainIntelligence,
|
|
92
|
+
cognee: CogneeClient | null,
|
|
93
|
+
config?: ContextEngineConfig,
|
|
94
|
+
) {
|
|
95
|
+
this.vault = vault;
|
|
96
|
+
this.brain = brain;
|
|
97
|
+
this.brainIntelligence = brainIntelligence;
|
|
98
|
+
this.cognee = cognee;
|
|
99
|
+
this.config = {
|
|
100
|
+
vaultSearchLimit: config?.vaultSearchLimit ?? 10,
|
|
101
|
+
cogneeSearchLimit: config?.cogneeSearchLimit ?? 10,
|
|
102
|
+
brainRecommendLimit: config?.brainRecommendLimit ?? 5,
|
|
103
|
+
minScoreThreshold: config?.minScoreThreshold ?? 0.1,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// ─── Entity Extraction ──────────────────────────────────────────
|
|
108
|
+
|
|
109
|
+
extractEntities(prompt: string): EntityExtractionResult {
|
|
110
|
+
const seen = new Set<string>();
|
|
111
|
+
const entities: ExtractedEntity[] = [];
|
|
112
|
+
|
|
113
|
+
for (const { type, pattern, confidence } of ENTITY_PATTERNS) {
|
|
114
|
+
// Reset lastIndex for global regex
|
|
115
|
+
pattern.lastIndex = 0;
|
|
116
|
+
let match: RegExpExecArray | null;
|
|
117
|
+
while ((match = pattern.exec(prompt)) !== null) {
|
|
118
|
+
const value = match[0].toLowerCase();
|
|
119
|
+
const key = `${type}:${value}`;
|
|
120
|
+
if (seen.has(key)) continue;
|
|
121
|
+
if (type === 'pattern' && STOP_PATTERNS.has(value)) continue;
|
|
122
|
+
seen.add(key);
|
|
123
|
+
entities.push({ type, value, confidence });
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Group by type
|
|
128
|
+
const byType: Partial<Record<EntityType, ExtractedEntity[]>> = {};
|
|
129
|
+
for (const e of entities) {
|
|
130
|
+
(byType[e.type] ??= []).push(e);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
return { entities, byType };
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// ─── Knowledge Retrieval ────────────────────────────────────────
|
|
137
|
+
|
|
138
|
+
async retrieveKnowledge(prompt: string, domain?: string): Promise<KnowledgeRetrievalResult> {
|
|
139
|
+
const items: KnowledgeItem[] = [];
|
|
140
|
+
let vaultHits = 0;
|
|
141
|
+
let cogneeHits = 0;
|
|
142
|
+
let brainHits = 0;
|
|
143
|
+
|
|
144
|
+
// 1. Vault FTS search
|
|
145
|
+
try {
|
|
146
|
+
const vaultResults = this.vault.search(prompt, {
|
|
147
|
+
domain,
|
|
148
|
+
limit: this.config.vaultSearchLimit,
|
|
149
|
+
});
|
|
150
|
+
// Normalize FTS5 -rank scores to 0-1 range
|
|
151
|
+
const maxScore = vaultResults.length > 0 ? Math.max(...vaultResults.map((r) => r.score)) : 1;
|
|
152
|
+
for (const r of vaultResults) {
|
|
153
|
+
items.push({
|
|
154
|
+
id: r.entry.id,
|
|
155
|
+
title: r.entry.title,
|
|
156
|
+
score: maxScore > 0 ? r.score / maxScore : 0.5,
|
|
157
|
+
source: 'vault',
|
|
158
|
+
domain: r.entry.domain,
|
|
159
|
+
});
|
|
160
|
+
vaultHits++;
|
|
161
|
+
}
|
|
162
|
+
} catch {
|
|
163
|
+
// Vault search failed — continue with other sources
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// 2. Cognee vector search (async, graceful degradation)
|
|
167
|
+
if (this.cognee) {
|
|
168
|
+
try {
|
|
169
|
+
const cogneeResults = await this.cognee.search(prompt, {
|
|
170
|
+
limit: this.config.cogneeSearchLimit,
|
|
171
|
+
});
|
|
172
|
+
for (const r of cogneeResults) {
|
|
173
|
+
// Avoid duplicates from vault
|
|
174
|
+
if (items.some((i) => i.id === r.id)) continue;
|
|
175
|
+
items.push({
|
|
176
|
+
id: r.id,
|
|
177
|
+
title: r.text.slice(0, 100),
|
|
178
|
+
score: r.score,
|
|
179
|
+
source: 'cognee',
|
|
180
|
+
});
|
|
181
|
+
cogneeHits++;
|
|
182
|
+
}
|
|
183
|
+
} catch {
|
|
184
|
+
// Cognee unavailable — continue without
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// 3. Brain recommendations
|
|
189
|
+
try {
|
|
190
|
+
const recommendations = this.brainIntelligence.recommend({
|
|
191
|
+
domain,
|
|
192
|
+
task: prompt,
|
|
193
|
+
limit: this.config.brainRecommendLimit,
|
|
194
|
+
});
|
|
195
|
+
for (const r of recommendations) {
|
|
196
|
+
items.push({
|
|
197
|
+
id: r.pattern,
|
|
198
|
+
title: r.pattern,
|
|
199
|
+
score: r.strength / 100,
|
|
200
|
+
source: 'brain',
|
|
201
|
+
domain: r.domain,
|
|
202
|
+
});
|
|
203
|
+
brainHits++;
|
|
204
|
+
}
|
|
205
|
+
} catch {
|
|
206
|
+
// Brain empty — continue without
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// Sort by score descending, filter by threshold
|
|
210
|
+
items.sort((a, b) => b.score - a.score);
|
|
211
|
+
const filtered = items.filter((i) => i.score >= this.config.minScoreThreshold);
|
|
212
|
+
|
|
213
|
+
return { items: filtered, vaultHits, cogneeHits, brainHits };
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// ─── Context Analysis ───────────────────────────────────────────
|
|
217
|
+
|
|
218
|
+
async analyze(prompt: string, domain?: string): Promise<ContextAnalysis> {
|
|
219
|
+
const start = performance.now();
|
|
220
|
+
|
|
221
|
+
// Extract entities
|
|
222
|
+
const entities = this.extractEntities(prompt);
|
|
223
|
+
|
|
224
|
+
// Retrieve knowledge
|
|
225
|
+
const knowledge = await this.retrieveKnowledge(prompt, domain);
|
|
226
|
+
|
|
227
|
+
// Compute confidence from multiple signals
|
|
228
|
+
const confidence = this.computeConfidence(entities, knowledge);
|
|
229
|
+
const confidenceLevel = this.toConfidenceLevel(confidence);
|
|
230
|
+
|
|
231
|
+
// Detect domains from entities + knowledge
|
|
232
|
+
const detectedDomains = this.detectDomains(entities, knowledge);
|
|
233
|
+
|
|
234
|
+
const processingTimeMs = Math.round(performance.now() - start);
|
|
235
|
+
|
|
236
|
+
return {
|
|
237
|
+
prompt,
|
|
238
|
+
entities,
|
|
239
|
+
knowledge,
|
|
240
|
+
confidence,
|
|
241
|
+
confidenceLevel,
|
|
242
|
+
detectedDomains,
|
|
243
|
+
processingTimeMs,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// ─── Private Helpers ────────────────────────────────────────────
|
|
248
|
+
|
|
249
|
+
private computeConfidence(
|
|
250
|
+
entities: EntityExtractionResult,
|
|
251
|
+
knowledge: KnowledgeRetrievalResult,
|
|
252
|
+
): number {
|
|
253
|
+
let score = 0;
|
|
254
|
+
|
|
255
|
+
// Entity signal (0-0.4): more entities = clearer prompt
|
|
256
|
+
const entityCount = entities.entities.length;
|
|
257
|
+
const entitySignal = Math.min(0.4, entityCount * 0.08);
|
|
258
|
+
score += entitySignal;
|
|
259
|
+
|
|
260
|
+
// Action signal (0-0.2): explicit actions boost confidence
|
|
261
|
+
const actions = entities.byType.action ?? [];
|
|
262
|
+
if (actions.length > 0) score += 0.2;
|
|
263
|
+
|
|
264
|
+
// Knowledge signal (0-0.3): relevant knowledge found
|
|
265
|
+
if (knowledge.items.length > 0) {
|
|
266
|
+
const topScore = knowledge.items[0].score;
|
|
267
|
+
score += topScore * 0.3;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// Source diversity bonus (0-0.1): multiple sources = more confident
|
|
271
|
+
const sources = new Set(knowledge.items.map((i) => i.source));
|
|
272
|
+
if (sources.size >= 2) score += 0.05;
|
|
273
|
+
if (sources.size >= 3) score += 0.05;
|
|
274
|
+
|
|
275
|
+
return Math.min(1, score);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
private toConfidenceLevel(confidence: number): ConfidenceLevel {
|
|
279
|
+
if (confidence >= HIGH_CONFIDENCE) return 'high';
|
|
280
|
+
if (confidence >= MEDIUM_CONFIDENCE) return 'medium';
|
|
281
|
+
return 'low';
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
private detectDomains(
|
|
285
|
+
entities: EntityExtractionResult,
|
|
286
|
+
knowledge: KnowledgeRetrievalResult,
|
|
287
|
+
): string[] {
|
|
288
|
+
const domains = new Set<string>();
|
|
289
|
+
|
|
290
|
+
// From entity extraction
|
|
291
|
+
for (const e of entities.byType.domain ?? []) {
|
|
292
|
+
domains.add(e.value);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
// From knowledge results
|
|
296
|
+
for (const item of knowledge.items) {
|
|
297
|
+
if (item.domain) domains.add(item.domain);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
return [...domains];
|
|
301
|
+
}
|
|
302
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Engine types — entity extraction, knowledge retrieval, confidence scoring.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
// ─── Entity Extraction ─────────────────────────────────────────────
|
|
6
|
+
|
|
7
|
+
export type EntityType = 'file' | 'function' | 'domain' | 'action' | 'pattern' | 'technology';
|
|
8
|
+
|
|
9
|
+
export interface ExtractedEntity {
|
|
10
|
+
type: EntityType;
|
|
11
|
+
value: string;
|
|
12
|
+
confidence: number;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface EntityExtractionResult {
|
|
16
|
+
entities: ExtractedEntity[];
|
|
17
|
+
byType: Partial<Record<EntityType, ExtractedEntity[]>>;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// ─── Knowledge Retrieval ────────────────────────────────────────────
|
|
21
|
+
|
|
22
|
+
export interface KnowledgeItem {
|
|
23
|
+
id: string;
|
|
24
|
+
title: string;
|
|
25
|
+
score: number;
|
|
26
|
+
source: 'vault' | 'cognee' | 'brain';
|
|
27
|
+
domain?: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface KnowledgeRetrievalResult {
|
|
31
|
+
items: KnowledgeItem[];
|
|
32
|
+
vaultHits: number;
|
|
33
|
+
cogneeHits: number;
|
|
34
|
+
brainHits: number;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// ─── Context Analysis ───────────────────────────────────────────────
|
|
38
|
+
|
|
39
|
+
export type ConfidenceLevel = 'high' | 'medium' | 'low';
|
|
40
|
+
|
|
41
|
+
export interface ContextAnalysis {
|
|
42
|
+
/** Original prompt that was analyzed */
|
|
43
|
+
prompt: string;
|
|
44
|
+
/** Extracted entities from the prompt */
|
|
45
|
+
entities: EntityExtractionResult;
|
|
46
|
+
/** Retrieved knowledge relevant to the prompt */
|
|
47
|
+
knowledge: KnowledgeRetrievalResult;
|
|
48
|
+
/** Enhanced confidence based on entity + knowledge signals */
|
|
49
|
+
confidence: number;
|
|
50
|
+
/** Discrete confidence level */
|
|
51
|
+
confidenceLevel: ConfidenceLevel;
|
|
52
|
+
/** Domains detected from entities + knowledge */
|
|
53
|
+
detectedDomains: string[];
|
|
54
|
+
/** Processing time in milliseconds */
|
|
55
|
+
processingTimeMs: number;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// ─── Configuration ──────────────────────────────────────────────────
|
|
59
|
+
|
|
60
|
+
export interface ContextEngineConfig {
|
|
61
|
+
/** Max vault search results to retrieve. Default: 10. */
|
|
62
|
+
vaultSearchLimit?: number;
|
|
63
|
+
/** Max Cognee search results to retrieve. Default: 10. */
|
|
64
|
+
cogneeSearchLimit?: number;
|
|
65
|
+
/** Max brain recommendations to include. Default: 5. */
|
|
66
|
+
brainRecommendLimit?: number;
|
|
67
|
+
/** Minimum score threshold for knowledge items. Default: 0.1. */
|
|
68
|
+
minScoreThreshold?: number;
|
|
69
|
+
}
|