@soleri/core 2.10.0 → 2.12.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 +24 -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/loader.d.ts.map +1 -1
- package/dist/intelligence/loader.js +51 -5
- package/dist/intelligence/loader.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/domain-ops.d.ts.map +1 -1
- package/dist/runtime/domain-ops.js +21 -2
- package/dist/runtime/domain-ops.js.map +1 -1
- 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/orchestrate-ops.d.ts.map +1 -1
- package/dist/runtime/orchestrate-ops.js +13 -0
- package/dist/runtime/orchestrate-ops.js.map +1 -1
- 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 +27 -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/loader.ts +58 -5
- 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/domain-ops.ts +21 -2
- 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/orchestrate-ops.ts +13 -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,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Voice — transcription and text-to-speech via pure HTTP (no SDK deps).
|
|
3
|
+
*
|
|
4
|
+
* Supports OpenAI Whisper for transcription and OpenAI TTS for speech synthesis.
|
|
5
|
+
* Graceful degradation when API keys are missing.
|
|
6
|
+
*/
|
|
7
|
+
export interface VoiceConfig {
|
|
8
|
+
/** OpenAI API key for Whisper transcription and TTS. */
|
|
9
|
+
openaiApiKey?: string;
|
|
10
|
+
/** TTS voice ID. Default: 'onyx'. */
|
|
11
|
+
ttsVoice?: string;
|
|
12
|
+
/** TTS model. Default: 'tts-1'. */
|
|
13
|
+
ttsModel?: string;
|
|
14
|
+
/** Whisper model. Default: 'whisper-1'. */
|
|
15
|
+
whisperModel?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface TranscriptionResult {
|
|
18
|
+
/** Transcribed text. */
|
|
19
|
+
text: string;
|
|
20
|
+
/** Whether transcription was successful. */
|
|
21
|
+
success: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface SpeechResult {
|
|
24
|
+
/** Audio data as Buffer (MP3). */
|
|
25
|
+
audio: Buffer;
|
|
26
|
+
/** Whether synthesis was successful. */
|
|
27
|
+
success: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Transcribe audio using OpenAI Whisper API.
|
|
31
|
+
* Returns a fallback message if no API key is configured.
|
|
32
|
+
*/
|
|
33
|
+
export declare function transcribeAudio(audioBuffer: Buffer, config: VoiceConfig, filename?: string): Promise<TranscriptionResult>;
|
|
34
|
+
/**
|
|
35
|
+
* Synthesize speech from text using OpenAI TTS API.
|
|
36
|
+
* Returns null if no API key is configured.
|
|
37
|
+
*/
|
|
38
|
+
export declare function synthesizeSpeech(text: string, config: VoiceConfig): Promise<SpeechResult | null>;
|
|
39
|
+
//# sourceMappingURL=voice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voice.d.ts","sourceRoot":"","sources":["../../src/chat/voice.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,WAAW;IAC1B,wDAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,OAAO,EAAE,OAAO,CAAC;CAClB;AAID;;;GAGG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EACnB,QAAQ,GAAE,MAAoB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,CAoD9B;AAID;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CA0B9B"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Voice — transcription and text-to-speech via pure HTTP (no SDK deps).
|
|
3
|
+
*
|
|
4
|
+
* Supports OpenAI Whisper for transcription and OpenAI TTS for speech synthesis.
|
|
5
|
+
* Graceful degradation when API keys are missing.
|
|
6
|
+
*/
|
|
7
|
+
// ─── Transcriber ──────────────────────────────────────────────────────
|
|
8
|
+
/**
|
|
9
|
+
* Transcribe audio using OpenAI Whisper API.
|
|
10
|
+
* Returns a fallback message if no API key is configured.
|
|
11
|
+
*/
|
|
12
|
+
export async function transcribeAudio(audioBuffer, config, filename = 'audio.ogg') {
|
|
13
|
+
if (!config.openaiApiKey) {
|
|
14
|
+
return { text: '[Voice message — transcription unavailable]', success: false };
|
|
15
|
+
}
|
|
16
|
+
const model = config.whisperModel ?? 'whisper-1';
|
|
17
|
+
// Build multipart form data manually (no SDK)
|
|
18
|
+
const boundary = `----SoleriFormBoundary${Date.now()}`;
|
|
19
|
+
const parts = [];
|
|
20
|
+
// File part
|
|
21
|
+
parts.push(Buffer.from(`--${boundary}\r\nContent-Disposition: form-data; name="file"; filename="${filename}"\r\nContent-Type: audio/ogg\r\n\r\n`));
|
|
22
|
+
parts.push(audioBuffer);
|
|
23
|
+
parts.push(Buffer.from('\r\n'));
|
|
24
|
+
// Model part
|
|
25
|
+
parts.push(Buffer.from(`--${boundary}\r\nContent-Disposition: form-data; name="model"\r\n\r\n${model}\r\n`));
|
|
26
|
+
parts.push(Buffer.from(`--${boundary}--\r\n`));
|
|
27
|
+
const body = Buffer.concat(parts);
|
|
28
|
+
try {
|
|
29
|
+
const response = await fetch('https://api.openai.com/v1/audio/transcriptions', {
|
|
30
|
+
method: 'POST',
|
|
31
|
+
headers: {
|
|
32
|
+
Authorization: `Bearer ${config.openaiApiKey}`,
|
|
33
|
+
'Content-Type': `multipart/form-data; boundary=${boundary}`,
|
|
34
|
+
},
|
|
35
|
+
body,
|
|
36
|
+
signal: AbortSignal.timeout(30_000),
|
|
37
|
+
});
|
|
38
|
+
if (!response.ok) {
|
|
39
|
+
await response.text().catch(() => { });
|
|
40
|
+
return { text: `[Transcription failed: ${response.status}]`, success: false };
|
|
41
|
+
}
|
|
42
|
+
const data = (await response.json());
|
|
43
|
+
return { text: data.text ?? '', success: true };
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
47
|
+
return { text: `[Transcription error: ${msg}]`, success: false };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// ─── TTS ──────────────────────────────────────────────────────────────
|
|
51
|
+
/**
|
|
52
|
+
* Synthesize speech from text using OpenAI TTS API.
|
|
53
|
+
* Returns null if no API key is configured.
|
|
54
|
+
*/
|
|
55
|
+
export async function synthesizeSpeech(text, config) {
|
|
56
|
+
if (!config.openaiApiKey)
|
|
57
|
+
return null;
|
|
58
|
+
const model = config.ttsModel ?? 'tts-1';
|
|
59
|
+
const voice = config.ttsVoice ?? 'onyx';
|
|
60
|
+
try {
|
|
61
|
+
const response = await fetch('https://api.openai.com/v1/audio/speech', {
|
|
62
|
+
method: 'POST',
|
|
63
|
+
headers: {
|
|
64
|
+
Authorization: `Bearer ${config.openaiApiKey}`,
|
|
65
|
+
'Content-Type': 'application/json',
|
|
66
|
+
},
|
|
67
|
+
body: JSON.stringify({ model, voice, input: text }),
|
|
68
|
+
signal: AbortSignal.timeout(30_000),
|
|
69
|
+
});
|
|
70
|
+
if (!response.ok) {
|
|
71
|
+
return { audio: Buffer.alloc(0), success: false };
|
|
72
|
+
}
|
|
73
|
+
const audio = Buffer.from(await response.arrayBuffer());
|
|
74
|
+
return { audio, success: true };
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return { audio: Buffer.alloc(0), success: false };
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=voice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voice.js","sourceRoot":"","sources":["../../src/chat/voice.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLAUDE.md composition — generates LLM instructions from agent config and facades.
|
|
3
|
+
*
|
|
4
|
+
* Produces markdown with:
|
|
5
|
+
* 1. Global instructions (priority-sorted)
|
|
6
|
+
* 2. Activation / deactivation
|
|
7
|
+
* 3. Session start protocol
|
|
8
|
+
* 4. Facade reference table (auto-generated from registered facades)
|
|
9
|
+
* 5. Facade behavioral rules (from FacadeInstructions)
|
|
10
|
+
*
|
|
11
|
+
* Wrapped in versioned markers: `<!-- agent:mode v1 -->` / `<!-- /agent:mode -->`
|
|
12
|
+
*/
|
|
13
|
+
import type { FacadeConfig } from '../facades/types.js';
|
|
14
|
+
import type { AgentMeta, FacadeInstructions } from './types.js';
|
|
15
|
+
export declare const FORMAT_VERSION = 1;
|
|
16
|
+
export declare const OPEN_MARKER = "<!-- agent:mode v1 -->";
|
|
17
|
+
export declare const CLOSE_MARKER = "<!-- /agent:mode -->";
|
|
18
|
+
export declare const USER_ZONE_OPEN = "<!-- user:custom -->";
|
|
19
|
+
export declare const USER_ZONE_CLOSE = "<!-- /user:custom -->";
|
|
20
|
+
export interface ComposeOptions {
|
|
21
|
+
/** Per-facade behavioral instructions */
|
|
22
|
+
facadeInstructions?: Map<string, FacadeInstructions>;
|
|
23
|
+
/** Include an empty user-safe zone */
|
|
24
|
+
includeUserZone?: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Compose the full CLAUDE.md agent block from metadata and facades.
|
|
28
|
+
* Returns the content wrapped in versioned markers.
|
|
29
|
+
*/
|
|
30
|
+
export declare function composeCLAUDEmd(agent: AgentMeta, facades: FacadeConfig[], options?: ComposeOptions): string;
|
|
31
|
+
//# sourceMappingURL=compose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../src/claudemd/compose.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAqB,MAAM,YAAY,CAAC;AAEnF,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,WAAW,2BAA2C,CAAC;AACpE,eAAO,MAAM,YAAY,yBAAyB,CAAC;AACnD,eAAO,MAAM,cAAc,yBAAyB,CAAC;AACrD,eAAO,MAAM,eAAe,0BAA0B,CAAC;AAuEvD,MAAM,WAAW,cAAc;IAC7B,yCAAyC;IACzC,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACrD,sCAAsC;IACtC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,CAAC,EAAE,cAAc,GACvB,MAAM,CAmCR"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLAUDE.md composition — generates LLM instructions from agent config and facades.
|
|
3
|
+
*
|
|
4
|
+
* Produces markdown with:
|
|
5
|
+
* 1. Global instructions (priority-sorted)
|
|
6
|
+
* 2. Activation / deactivation
|
|
7
|
+
* 3. Session start protocol
|
|
8
|
+
* 4. Facade reference table (auto-generated from registered facades)
|
|
9
|
+
* 5. Facade behavioral rules (from FacadeInstructions)
|
|
10
|
+
*
|
|
11
|
+
* Wrapped in versioned markers: `<!-- agent:mode v1 -->` / `<!-- /agent:mode -->`
|
|
12
|
+
*/
|
|
13
|
+
export const FORMAT_VERSION = 1;
|
|
14
|
+
export const OPEN_MARKER = `<!-- agent:mode v${FORMAT_VERSION} -->`;
|
|
15
|
+
export const CLOSE_MARKER = '<!-- /agent:mode -->';
|
|
16
|
+
export const USER_ZONE_OPEN = '<!-- user:custom -->';
|
|
17
|
+
export const USER_ZONE_CLOSE = '<!-- /user:custom -->';
|
|
18
|
+
function sortByPriority(items) {
|
|
19
|
+
return [...items].sort((a, b) => (a.priority ?? 50) - (b.priority ?? 50));
|
|
20
|
+
}
|
|
21
|
+
function renderActivation(agent) {
|
|
22
|
+
return [
|
|
23
|
+
`## ${agent.name} Mode`,
|
|
24
|
+
'',
|
|
25
|
+
'### Activation',
|
|
26
|
+
'',
|
|
27
|
+
`- "${agent.activationPhrase}" → \`${agent.activateCommand}\``,
|
|
28
|
+
`- "${agent.deactivationPhrase}" → \`${agent.deactivateCommand}\``,
|
|
29
|
+
'',
|
|
30
|
+
'> Persona details are returned dynamically by the activate response.',
|
|
31
|
+
].join('\n');
|
|
32
|
+
}
|
|
33
|
+
function renderSessionStart(agent) {
|
|
34
|
+
return [
|
|
35
|
+
'### Session Start Protocol',
|
|
36
|
+
'',
|
|
37
|
+
'On EVERY new session:',
|
|
38
|
+
`1. Register project: \`${agent.id}_core op:register params:{ projectPath: "." }\``,
|
|
39
|
+
'2. Check activation response for `persistence.status`, `vault.connected`',
|
|
40
|
+
`3. Check for plans in \`executing\` state — remind user to reconcile`,
|
|
41
|
+
].join('\n');
|
|
42
|
+
}
|
|
43
|
+
function renderFacadeTable(facades, instructions) {
|
|
44
|
+
const lines = ['### Essential Tools', '', '| Facade | Key Ops |', '|--------|---------|'];
|
|
45
|
+
for (const facade of facades) {
|
|
46
|
+
const instr = instructions?.get(facade.name);
|
|
47
|
+
const allOps = facade.ops.map((o) => o.name);
|
|
48
|
+
const keyOps = instr?.keyOps ?? allOps.slice(0, 5);
|
|
49
|
+
const display = keyOps.map((o) => `\`${o}\``).join(', ');
|
|
50
|
+
const suffix = allOps.length > keyOps.length ? ', ...' : '';
|
|
51
|
+
lines.push(`| \`${facade.name}\` | ${display}${suffix} |`);
|
|
52
|
+
}
|
|
53
|
+
return lines.join('\n');
|
|
54
|
+
}
|
|
55
|
+
function renderGlobalInstruction(gi) {
|
|
56
|
+
return `## ${gi.heading}\n\n${gi.content.trim()}`;
|
|
57
|
+
}
|
|
58
|
+
function renderFacadeRules(name, instr) {
|
|
59
|
+
const lines = [`## ${instr.heading}`, ''];
|
|
60
|
+
if (instr.rules?.length) {
|
|
61
|
+
for (const rule of instr.rules) {
|
|
62
|
+
lines.push(`- ${rule}`);
|
|
63
|
+
}
|
|
64
|
+
lines.push('');
|
|
65
|
+
}
|
|
66
|
+
if (instr.templates) {
|
|
67
|
+
for (const [label, template] of Object.entries(instr.templates)) {
|
|
68
|
+
lines.push(`### ${label}`, '', template.trim(), '');
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return lines.join('\n').trimEnd();
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Compose the full CLAUDE.md agent block from metadata and facades.
|
|
75
|
+
* Returns the content wrapped in versioned markers.
|
|
76
|
+
*/
|
|
77
|
+
export function composeCLAUDEmd(agent, facades, options) {
|
|
78
|
+
const sections = [];
|
|
79
|
+
// 1. Global instructions (sorted by priority)
|
|
80
|
+
if (agent.globalInstructions?.length) {
|
|
81
|
+
const sorted = sortByPriority(agent.globalInstructions);
|
|
82
|
+
for (const gi of sorted) {
|
|
83
|
+
sections.push(renderGlobalInstruction(gi));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// 2. Activation + session start
|
|
87
|
+
sections.push(renderActivation(agent));
|
|
88
|
+
sections.push(renderSessionStart(agent));
|
|
89
|
+
// 3. Facade reference table
|
|
90
|
+
sections.push(renderFacadeTable(facades, options?.facadeInstructions));
|
|
91
|
+
// 4. Facade behavioral rules
|
|
92
|
+
if (options?.facadeInstructions) {
|
|
93
|
+
const entries = [...options.facadeInstructions.entries()].sort(([, a], [, b]) => (a.priority ?? 50) - (b.priority ?? 50));
|
|
94
|
+
for (const [name, instr] of entries) {
|
|
95
|
+
sections.push(renderFacadeRules(name, instr));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// 5. User-safe zone
|
|
99
|
+
if (options?.includeUserZone) {
|
|
100
|
+
sections.push(`${USER_ZONE_OPEN}\n\n${USER_ZONE_CLOSE}`);
|
|
101
|
+
}
|
|
102
|
+
const body = sections.join('\n\n');
|
|
103
|
+
return `${OPEN_MARKER}\n\n${body}\n\n${CLOSE_MARKER}`;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=compose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose.js","sourceRoot":"","sources":["../../src/claudemd/compose.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { composeCLAUDEmd, FORMAT_VERSION, OPEN_MARKER, CLOSE_MARKER, USER_ZONE_OPEN, USER_ZONE_CLOSE, } from './compose.js';
|
|
2
|
+
export type { ComposeOptions } from './compose.js';
|
|
3
|
+
export { injectCLAUDEmd, removeCLAUDEmd, hasCLAUDEmdBlock, extractUserZone } from './inject.js';
|
|
4
|
+
export type { AgentMeta, GlobalInstruction, FacadeInstructions, InjectionResult, RemovalResult, } from './types.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/claudemd/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,cAAc,EACd,WAAW,EACX,YAAY,EACZ,cAAc,EACd,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAChG,YAAY,EACV,SAAS,EACT,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,aAAa,GACd,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/claudemd/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,cAAc,EACd,WAAW,EACX,YAAY,EACZ,cAAc,EACd,eAAe,GAChB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
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
|
+
import type { InjectionResult, RemovalResult } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Extract user-safe zone content from an existing agent block.
|
|
12
|
+
* Returns the content between `<!-- user:custom -->` markers, or null.
|
|
13
|
+
*/
|
|
14
|
+
export declare function extractUserZone(content: string): string | null;
|
|
15
|
+
/**
|
|
16
|
+
* Inject an agent block into a CLAUDE.md file.
|
|
17
|
+
*
|
|
18
|
+
* - If markers exist: replace (preserving user-safe zones), skip if unchanged
|
|
19
|
+
* - If legacy markers: migrate
|
|
20
|
+
* - If no markers: append
|
|
21
|
+
*/
|
|
22
|
+
export declare function injectCLAUDEmd(filePath: string, block: string): InjectionResult;
|
|
23
|
+
/**
|
|
24
|
+
* Remove the agent block from a CLAUDE.md file.
|
|
25
|
+
*/
|
|
26
|
+
export declare function removeCLAUDEmd(filePath: string): RemovalResult;
|
|
27
|
+
/**
|
|
28
|
+
* Check if an agent block is present in a CLAUDE.md file.
|
|
29
|
+
*/
|
|
30
|
+
export declare function hasCLAUDEmdBlock(filePath: string): boolean;
|
|
31
|
+
//# sourceMappingURL=inject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject.d.ts","sourceRoot":"","sources":["../../src/claudemd/inject.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAQjE;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM9D;AA2CD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe,CAgD/E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAwB9D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAQ1D"}
|
|
@@ -0,0 +1,157 @@
|
|
|
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
|
+
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
10
|
+
import { OPEN_MARKER, CLOSE_MARKER, USER_ZONE_OPEN, USER_ZONE_CLOSE } from './compose.js';
|
|
11
|
+
/** Legacy marker patterns to detect and migrate */
|
|
12
|
+
const LEGACY_MARKERS = [
|
|
13
|
+
'<!-- agent:mode -->', // v0 (no version)
|
|
14
|
+
'<!-- salvador:mode -->', // pre-Soleri
|
|
15
|
+
];
|
|
16
|
+
/**
|
|
17
|
+
* Extract user-safe zone content from an existing agent block.
|
|
18
|
+
* Returns the content between `<!-- user:custom -->` markers, or null.
|
|
19
|
+
*/
|
|
20
|
+
export function extractUserZone(content) {
|
|
21
|
+
const openIdx = content.indexOf(USER_ZONE_OPEN);
|
|
22
|
+
const closeIdx = content.indexOf(USER_ZONE_CLOSE);
|
|
23
|
+
if (openIdx === -1 || closeIdx === -1 || closeIdx <= openIdx)
|
|
24
|
+
return null;
|
|
25
|
+
const inner = content.slice(openIdx + USER_ZONE_OPEN.length, closeIdx).trim();
|
|
26
|
+
return inner || null;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Preserve user-safe zone content when regenerating.
|
|
30
|
+
* Replaces the empty user zone in `newBlock` with the saved content.
|
|
31
|
+
*/
|
|
32
|
+
function preserveUserZone(newBlock, savedZone) {
|
|
33
|
+
if (!savedZone)
|
|
34
|
+
return newBlock;
|
|
35
|
+
const emptyZone = `${USER_ZONE_OPEN}\n\n${USER_ZONE_CLOSE}`;
|
|
36
|
+
const filledZone = `${USER_ZONE_OPEN}\n${savedZone}\n${USER_ZONE_CLOSE}`;
|
|
37
|
+
return newBlock.replace(emptyZone, filledZone);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Find the agent block boundaries in content.
|
|
41
|
+
* Handles current and legacy markers.
|
|
42
|
+
*/
|
|
43
|
+
function findBlock(content) {
|
|
44
|
+
// Current markers
|
|
45
|
+
const openIdx = content.indexOf(OPEN_MARKER);
|
|
46
|
+
if (openIdx !== -1) {
|
|
47
|
+
const closeIdx = content.indexOf(CLOSE_MARKER, openIdx);
|
|
48
|
+
if (closeIdx > openIdx) {
|
|
49
|
+
return { openIdx, closeIdx, closeLen: CLOSE_MARKER.length };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Legacy markers
|
|
53
|
+
for (const legacy of LEGACY_MARKERS) {
|
|
54
|
+
const legacyOpen = content.indexOf(legacy);
|
|
55
|
+
if (legacyOpen === -1)
|
|
56
|
+
continue;
|
|
57
|
+
const legacyCloseTag = legacy.replace('<!-- ', '<!-- /');
|
|
58
|
+
const legacyClose = content.indexOf(legacyCloseTag, legacyOpen);
|
|
59
|
+
if (legacyClose > legacyOpen) {
|
|
60
|
+
return { openIdx: legacyOpen, closeIdx: legacyClose, closeLen: legacyCloseTag.length };
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Inject an agent block into a CLAUDE.md file.
|
|
67
|
+
*
|
|
68
|
+
* - If markers exist: replace (preserving user-safe zones), skip if unchanged
|
|
69
|
+
* - If legacy markers: migrate
|
|
70
|
+
* - If no markers: append
|
|
71
|
+
*/
|
|
72
|
+
export function injectCLAUDEmd(filePath, block) {
|
|
73
|
+
try {
|
|
74
|
+
// New file
|
|
75
|
+
if (!existsSync(filePath)) {
|
|
76
|
+
writeFileSync(filePath, block + '\n', 'utf-8');
|
|
77
|
+
return { success: true, action: 'injected', message: 'Created file with agent block' };
|
|
78
|
+
}
|
|
79
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
80
|
+
const bounds = findBlock(content);
|
|
81
|
+
if (bounds) {
|
|
82
|
+
// Extract user zone from existing block before replacing
|
|
83
|
+
const existingBlock = content.slice(bounds.openIdx, bounds.closeIdx + bounds.closeLen);
|
|
84
|
+
const userZone = extractUserZone(existingBlock);
|
|
85
|
+
const finalBlock = preserveUserZone(block, userZone);
|
|
86
|
+
// Diff check — skip write if identical
|
|
87
|
+
if (existingBlock === finalBlock) {
|
|
88
|
+
return {
|
|
89
|
+
success: true,
|
|
90
|
+
action: 'skipped',
|
|
91
|
+
message: 'Content unchanged — no write needed',
|
|
92
|
+
diffDetected: false,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
const before = content.slice(0, bounds.openIdx);
|
|
96
|
+
const after = content.slice(bounds.closeIdx + bounds.closeLen);
|
|
97
|
+
writeFileSync(filePath, before + finalBlock + after, 'utf-8');
|
|
98
|
+
return {
|
|
99
|
+
success: true,
|
|
100
|
+
action: 'replaced',
|
|
101
|
+
message: 'Replaced agent block (diff detected)',
|
|
102
|
+
diffDetected: true,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
// No markers — append
|
|
106
|
+
writeFileSync(filePath, content.trimEnd() + '\n\n' + block + '\n', 'utf-8');
|
|
107
|
+
return { success: true, action: 'injected', message: 'Appended agent block' };
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
return {
|
|
111
|
+
success: false,
|
|
112
|
+
action: 'error',
|
|
113
|
+
message: `Injection failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Remove the agent block from a CLAUDE.md file.
|
|
119
|
+
*/
|
|
120
|
+
export function removeCLAUDEmd(filePath) {
|
|
121
|
+
try {
|
|
122
|
+
if (!existsSync(filePath)) {
|
|
123
|
+
return { success: true, action: 'not_present', message: 'File does not exist' };
|
|
124
|
+
}
|
|
125
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
126
|
+
const bounds = findBlock(content);
|
|
127
|
+
if (!bounds) {
|
|
128
|
+
return { success: true, action: 'not_present', message: 'No agent block found' };
|
|
129
|
+
}
|
|
130
|
+
const before = content.slice(0, bounds.openIdx).trimEnd();
|
|
131
|
+
const after = content.slice(bounds.closeIdx + bounds.closeLen).trimStart();
|
|
132
|
+
writeFileSync(filePath, after ? before + '\n\n' + after : before + '\n', 'utf-8');
|
|
133
|
+
return { success: true, action: 'removed', message: 'Removed agent block' };
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
return {
|
|
137
|
+
success: false,
|
|
138
|
+
action: 'error',
|
|
139
|
+
message: `Removal failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Check if an agent block is present in a CLAUDE.md file.
|
|
145
|
+
*/
|
|
146
|
+
export function hasCLAUDEmdBlock(filePath) {
|
|
147
|
+
if (!existsSync(filePath))
|
|
148
|
+
return false;
|
|
149
|
+
try {
|
|
150
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
151
|
+
return findBlock(content) !== null;
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=inject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../../src/claudemd/inject.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for CLAUDE.md auto-composition and injection.
|
|
3
|
+
*/
|
|
4
|
+
/** Agent metadata for CLAUDE.md generation */
|
|
5
|
+
export interface AgentMeta {
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
activationPhrase: string;
|
|
9
|
+
deactivationPhrase: string;
|
|
10
|
+
activateCommand: string;
|
|
11
|
+
deactivateCommand: string;
|
|
12
|
+
/** Global instruction sections (priority-sorted, lower = higher) */
|
|
13
|
+
globalInstructions?: GlobalInstruction[];
|
|
14
|
+
}
|
|
15
|
+
/** A standalone section in CLAUDE.md not tied to a facade */
|
|
16
|
+
export interface GlobalInstruction {
|
|
17
|
+
heading: string;
|
|
18
|
+
content: string;
|
|
19
|
+
priority?: number;
|
|
20
|
+
}
|
|
21
|
+
/** Facade instructions for CLAUDE.md behavioral rules */
|
|
22
|
+
export interface FacadeInstructions {
|
|
23
|
+
heading: string;
|
|
24
|
+
rules?: string[];
|
|
25
|
+
templates?: Record<string, string>;
|
|
26
|
+
priority?: number;
|
|
27
|
+
keyOps?: string[];
|
|
28
|
+
}
|
|
29
|
+
/** Result of an injection or removal operation */
|
|
30
|
+
export interface InjectionResult {
|
|
31
|
+
success: boolean;
|
|
32
|
+
action: 'injected' | 'replaced' | 'skipped' | 'error';
|
|
33
|
+
message: string;
|
|
34
|
+
diffDetected?: boolean;
|
|
35
|
+
}
|
|
36
|
+
export interface RemovalResult {
|
|
37
|
+
success: boolean;
|
|
38
|
+
action: 'removed' | 'not_present' | 'error';
|
|
39
|
+
message: string;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/claudemd/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,8CAA8C;AAC9C,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oEAAoE;IACpE,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC1C;AAED,6DAA6D;AAC7D,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,yDAAyD;AACzD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,OAAO,CAAC;IAC5C,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/claudemd/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,31 @@
|
|
|
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
|
+
import type { Vault } from '../vault/vault.js';
|
|
13
|
+
import type { Brain } from '../brain/brain.js';
|
|
14
|
+
import type { BrainIntelligence } from '../brain/intelligence.js';
|
|
15
|
+
import type { CogneeClient } from '../cognee/client.js';
|
|
16
|
+
import type { EntityExtractionResult, KnowledgeRetrievalResult, ContextAnalysis, ContextEngineConfig } from './types.js';
|
|
17
|
+
export declare class ContextEngine {
|
|
18
|
+
private vault;
|
|
19
|
+
private brain;
|
|
20
|
+
private brainIntelligence;
|
|
21
|
+
private cognee;
|
|
22
|
+
private config;
|
|
23
|
+
constructor(vault: Vault, brain: Brain, brainIntelligence: BrainIntelligence, cognee: CogneeClient | null, config?: ContextEngineConfig);
|
|
24
|
+
extractEntities(prompt: string): EntityExtractionResult;
|
|
25
|
+
retrieveKnowledge(prompt: string, domain?: string): Promise<KnowledgeRetrievalResult>;
|
|
26
|
+
analyze(prompt: string, domain?: string): Promise<ContextAnalysis>;
|
|
27
|
+
private computeConfidence;
|
|
28
|
+
private toConfidenceLevel;
|
|
29
|
+
private detectDomains;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=context-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-engine.d.ts","sourceRoot":"","sources":["../../src/context/context-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAGV,sBAAsB,EAEtB,wBAAwB,EACxB,eAAe,EAEf,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAuDpB,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,MAAM,CAAgC;gBAG5C,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,iBAAiB,EAAE,iBAAiB,EACpC,MAAM,EAAE,YAAY,GAAG,IAAI,EAC3B,MAAM,CAAC,EAAE,mBAAmB;IAgB9B,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB;IA6BjD,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAgFrF,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA+BxE,OAAO,CAAC,iBAAiB;IA6BzB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,aAAa;CAkBtB"}
|