@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,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin Loader — scans directories, validates manifests, loads plugins.
|
|
3
|
+
*
|
|
4
|
+
* Plugin directories (checked in order, first occurrence wins):
|
|
5
|
+
* 1. ~/.{agentId}/plugins/ (global plugins)
|
|
6
|
+
* 2. .{agentId}/plugins/ (project plugins)
|
|
7
|
+
* 3. Custom directories (via config)
|
|
8
|
+
*
|
|
9
|
+
* Each plugin is a directory containing `soleri-plugin.json`.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
13
|
+
import { join } from 'node:path';
|
|
14
|
+
import { homedir } from 'node:os';
|
|
15
|
+
import {
|
|
16
|
+
pluginManifestSchema,
|
|
17
|
+
type LoadedPlugin,
|
|
18
|
+
type LoadResult,
|
|
19
|
+
type PluginProvenance,
|
|
20
|
+
} from './types.js';
|
|
21
|
+
|
|
22
|
+
// =============================================================================
|
|
23
|
+
// LOADER
|
|
24
|
+
// =============================================================================
|
|
25
|
+
|
|
26
|
+
const MANIFEST_FILENAME = 'soleri-plugin.json';
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Load all plugins from standard + custom directories.
|
|
30
|
+
*/
|
|
31
|
+
export function loadPlugins(
|
|
32
|
+
agentId: string,
|
|
33
|
+
projectPath?: string,
|
|
34
|
+
extraDirs: string[] = [],
|
|
35
|
+
): LoadResult {
|
|
36
|
+
const result: LoadResult = { loaded: [], errors: [] };
|
|
37
|
+
const seen = new Set<string>();
|
|
38
|
+
|
|
39
|
+
const dirs: Array<{ path: string; provenance: PluginProvenance }> = [];
|
|
40
|
+
|
|
41
|
+
// Global: ~/.{agentId}/plugins/
|
|
42
|
+
const globalDir = join(homedir(), `.${agentId}`, 'plugins');
|
|
43
|
+
if (existsSync(globalDir)) {
|
|
44
|
+
dirs.push({ path: globalDir, provenance: 'global' });
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Project: .{agentId}/plugins/
|
|
48
|
+
if (projectPath) {
|
|
49
|
+
const projectDir = join(projectPath, `.${agentId}`, 'plugins');
|
|
50
|
+
if (existsSync(projectDir)) {
|
|
51
|
+
dirs.push({ path: projectDir, provenance: 'project' });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Custom
|
|
56
|
+
for (const dir of extraDirs) {
|
|
57
|
+
if (existsSync(dir)) {
|
|
58
|
+
dirs.push({ path: dir, provenance: 'custom' });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
for (const { path: parentDir, provenance } of dirs) {
|
|
63
|
+
try {
|
|
64
|
+
const entries = readdirSync(parentDir, { withFileTypes: true });
|
|
65
|
+
for (const entry of entries) {
|
|
66
|
+
if (!entry.isDirectory()) continue;
|
|
67
|
+
|
|
68
|
+
const pluginDir = join(parentDir, entry.name);
|
|
69
|
+
const loaded = loadSinglePlugin(pluginDir, provenance);
|
|
70
|
+
|
|
71
|
+
if (loaded.error) {
|
|
72
|
+
result.errors.push({ directory: pluginDir, error: loaded.error });
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (loaded.plugin) {
|
|
77
|
+
if (seen.has(loaded.plugin.manifest.id)) continue; // first wins
|
|
78
|
+
seen.add(loaded.plugin.manifest.id);
|
|
79
|
+
result.loaded.push(loaded.plugin);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
} catch {
|
|
83
|
+
// Directory not scannable — skip
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Load a single plugin from a directory.
|
|
92
|
+
*/
|
|
93
|
+
function loadSinglePlugin(
|
|
94
|
+
pluginDir: string,
|
|
95
|
+
provenance: PluginProvenance,
|
|
96
|
+
): { plugin?: LoadedPlugin; error?: string } {
|
|
97
|
+
const manifestPath = join(pluginDir, MANIFEST_FILENAME);
|
|
98
|
+
|
|
99
|
+
if (!existsSync(manifestPath)) {
|
|
100
|
+
return { error: `No ${MANIFEST_FILENAME} found in ${pluginDir}` };
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
let raw: unknown;
|
|
104
|
+
try {
|
|
105
|
+
raw = JSON.parse(readFileSync(manifestPath, 'utf-8'));
|
|
106
|
+
} catch (e) {
|
|
107
|
+
return {
|
|
108
|
+
error: `Invalid JSON in ${manifestPath}: ${e instanceof Error ? e.message : String(e)}`,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const parseResult = pluginManifestSchema.safeParse(raw);
|
|
113
|
+
if (!parseResult.success) {
|
|
114
|
+
const issues = parseResult.error.issues
|
|
115
|
+
.map((i) => `${i.path.join('.')}: ${i.message}`)
|
|
116
|
+
.join('; ');
|
|
117
|
+
return { error: `Invalid manifest in ${pluginDir}: ${issues}` };
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return {
|
|
121
|
+
plugin: {
|
|
122
|
+
manifest: parseResult.data,
|
|
123
|
+
directory: pluginDir,
|
|
124
|
+
provenance,
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// =============================================================================
|
|
130
|
+
// DEPENDENCY HELPERS
|
|
131
|
+
// =============================================================================
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Validate that all plugin dependencies are satisfiable.
|
|
135
|
+
*/
|
|
136
|
+
export function validateDependencies(
|
|
137
|
+
plugins: LoadedPlugin[],
|
|
138
|
+
): Array<{ pluginId: string; missingDep: string }> {
|
|
139
|
+
const available = new Set(plugins.map((p) => p.manifest.id));
|
|
140
|
+
const errors: Array<{ pluginId: string; missingDep: string }> = [];
|
|
141
|
+
|
|
142
|
+
for (const { manifest } of plugins) {
|
|
143
|
+
for (const dep of manifest.dependencies) {
|
|
144
|
+
if (!available.has(dep)) {
|
|
145
|
+
errors.push({ pluginId: manifest.id, missingDep: dep });
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return errors;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Topological sort by dependency order (no-deps first).
|
|
155
|
+
* Detects and breaks circular dependencies.
|
|
156
|
+
*/
|
|
157
|
+
export function sortByDependencies(plugins: LoadedPlugin[]): LoadedPlugin[] {
|
|
158
|
+
const byId = new Map(plugins.map((p) => [p.manifest.id, p]));
|
|
159
|
+
const sorted: LoadedPlugin[] = [];
|
|
160
|
+
const visited = new Set<string>();
|
|
161
|
+
const visiting = new Set<string>();
|
|
162
|
+
|
|
163
|
+
function visit(id: string): void {
|
|
164
|
+
if (visited.has(id)) return;
|
|
165
|
+
if (visiting.has(id)) return; // circular — break
|
|
166
|
+
visiting.add(id);
|
|
167
|
+
const plugin = byId.get(id);
|
|
168
|
+
if (plugin) {
|
|
169
|
+
for (const dep of plugin.manifest.dependencies) {
|
|
170
|
+
visit(dep);
|
|
171
|
+
}
|
|
172
|
+
sorted.push(plugin);
|
|
173
|
+
}
|
|
174
|
+
visiting.delete(id);
|
|
175
|
+
visited.add(id);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
for (const { manifest } of plugins) {
|
|
179
|
+
visit(manifest.id);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
return sorted;
|
|
183
|
+
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin Registry — tracks loaded plugins and their lifecycle.
|
|
3
|
+
*
|
|
4
|
+
* Not a singleton — lives on AgentRuntime for testability.
|
|
5
|
+
* Lifecycle: load → register → activate → (deactivate | error)
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type {
|
|
9
|
+
LoadedPlugin,
|
|
10
|
+
RegisteredPlugin,
|
|
11
|
+
PluginContext,
|
|
12
|
+
PluginFacadeBuilder,
|
|
13
|
+
} from './types.js';
|
|
14
|
+
import type { FacadeConfig, OpDefinition } from '../facades/types.js';
|
|
15
|
+
import { existsSync } from 'node:fs';
|
|
16
|
+
import { join } from 'node:path';
|
|
17
|
+
import { pathToFileURL } from 'node:url';
|
|
18
|
+
|
|
19
|
+
export class PluginRegistry {
|
|
20
|
+
private plugins = new Map<string, RegisteredPlugin>();
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Register a loaded plugin. Does NOT activate it — call activate() separately.
|
|
24
|
+
*/
|
|
25
|
+
register(loaded: LoadedPlugin): RegisteredPlugin {
|
|
26
|
+
const existing = this.plugins.get(loaded.manifest.id);
|
|
27
|
+
if (existing) {
|
|
28
|
+
throw new Error(`Plugin "${loaded.manifest.id}" is already registered`);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const registered: RegisteredPlugin = {
|
|
32
|
+
id: loaded.manifest.id,
|
|
33
|
+
manifest: loaded.manifest,
|
|
34
|
+
directory: loaded.directory,
|
|
35
|
+
provenance: loaded.provenance,
|
|
36
|
+
status: 'registered',
|
|
37
|
+
facades: [],
|
|
38
|
+
registeredAt: Date.now(),
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
this.plugins.set(registered.id, registered);
|
|
42
|
+
return registered;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Activate a plugin — builds facades from its manifest or JS module.
|
|
47
|
+
*
|
|
48
|
+
* If the plugin directory contains an `index.js` with a `createFacades` export,
|
|
49
|
+
* that function is called to build facades dynamically. Otherwise, facade stubs
|
|
50
|
+
* are created from the manifest's `facades` array (static ops with no-op handlers).
|
|
51
|
+
*/
|
|
52
|
+
async activate(pluginId: string, ctx: PluginContext): Promise<RegisteredPlugin> {
|
|
53
|
+
const plugin = this.plugins.get(pluginId);
|
|
54
|
+
if (!plugin) throw new Error(`Plugin "${pluginId}" is not registered`);
|
|
55
|
+
if (plugin.status === 'active') return plugin;
|
|
56
|
+
|
|
57
|
+
try {
|
|
58
|
+
// Try dynamic facade builder first
|
|
59
|
+
let facades = await this.tryLoadFacadeBuilder(plugin, ctx);
|
|
60
|
+
|
|
61
|
+
// Fall back to static manifest facades
|
|
62
|
+
if (!facades) {
|
|
63
|
+
facades = this.buildStaticFacades(plugin);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
plugin.facades = facades;
|
|
67
|
+
plugin.status = 'active';
|
|
68
|
+
plugin.activatedAt = Date.now();
|
|
69
|
+
plugin.error = undefined;
|
|
70
|
+
} catch (e) {
|
|
71
|
+
plugin.status = 'error';
|
|
72
|
+
plugin.error = e instanceof Error ? e.message : String(e);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return plugin;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Deactivate a plugin — removes its facades from the runtime.
|
|
80
|
+
*/
|
|
81
|
+
deactivate(pluginId: string): boolean {
|
|
82
|
+
const plugin = this.plugins.get(pluginId);
|
|
83
|
+
if (!plugin) return false;
|
|
84
|
+
|
|
85
|
+
plugin.status = 'deactivated';
|
|
86
|
+
plugin.facades = [];
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Unregister a plugin completely.
|
|
92
|
+
*/
|
|
93
|
+
unregister(pluginId: string): boolean {
|
|
94
|
+
const plugin = this.plugins.get(pluginId);
|
|
95
|
+
if (!plugin) return false;
|
|
96
|
+
|
|
97
|
+
if (plugin.status === 'active') {
|
|
98
|
+
this.deactivate(pluginId);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return this.plugins.delete(pluginId);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Get a registered plugin by ID.
|
|
106
|
+
*/
|
|
107
|
+
get(pluginId: string): RegisteredPlugin | undefined {
|
|
108
|
+
return this.plugins.get(pluginId);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* List all registered plugins.
|
|
113
|
+
*/
|
|
114
|
+
list(): RegisteredPlugin[] {
|
|
115
|
+
return Array.from(this.plugins.values());
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Get all active facades from all active plugins.
|
|
120
|
+
*/
|
|
121
|
+
getActiveFacades(): FacadeConfig[] {
|
|
122
|
+
const facades: FacadeConfig[] = [];
|
|
123
|
+
for (const plugin of this.plugins.values()) {
|
|
124
|
+
if (plugin.status === 'active') {
|
|
125
|
+
facades.push(...plugin.facades);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return facades;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Get all active ops (flattened from all active plugin facades).
|
|
133
|
+
*/
|
|
134
|
+
getActiveOps(): OpDefinition[] {
|
|
135
|
+
return this.getActiveFacades().flatMap((f) => f.ops);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// ─── Private ────────────────────────────────────────────────────────
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Try to load a JS module with `createFacades` export from the plugin directory.
|
|
142
|
+
* Returns null if no module found or no export.
|
|
143
|
+
*/
|
|
144
|
+
private async tryLoadFacadeBuilder(
|
|
145
|
+
plugin: RegisteredPlugin,
|
|
146
|
+
ctx: PluginContext,
|
|
147
|
+
): Promise<FacadeConfig[] | null> {
|
|
148
|
+
const moduleFile = join(plugin.directory, 'index.js');
|
|
149
|
+
if (!existsSync(moduleFile)) {
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
try {
|
|
154
|
+
// Dynamic import of plugin's index.js
|
|
155
|
+
const mod = (await import(pathToFileURL(moduleFile).href)) as {
|
|
156
|
+
createFacades?: PluginFacadeBuilder;
|
|
157
|
+
};
|
|
158
|
+
if (typeof mod.createFacades === 'function') {
|
|
159
|
+
return mod.createFacades(ctx);
|
|
160
|
+
}
|
|
161
|
+
throw new Error(`Plugin module "${moduleFile}" must export createFacades(ctx)`);
|
|
162
|
+
} catch (e) {
|
|
163
|
+
throw new Error(
|
|
164
|
+
`Failed to load plugin module "${moduleFile}": ${e instanceof Error ? e.message : String(e)}`, { cause: e },
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Build facade configs from the manifest's static facade definitions.
|
|
171
|
+
* These have no-op handlers — useful for schema discovery and documentation.
|
|
172
|
+
*/
|
|
173
|
+
private buildStaticFacades(plugin: RegisteredPlugin): FacadeConfig[] {
|
|
174
|
+
return plugin.manifest.facades.map((f) => ({
|
|
175
|
+
name: f.name,
|
|
176
|
+
description: f.description,
|
|
177
|
+
ops: f.ops.map((op) => ({
|
|
178
|
+
name: op.name,
|
|
179
|
+
description: op.description,
|
|
180
|
+
auth: op.auth as 'read' | 'write' | 'admin',
|
|
181
|
+
handler: async () => ({
|
|
182
|
+
error: `Op "${op.name}" is a static plugin op — no handler implementation provided. Add an index.js with createFacades() to ${plugin.directory}`,
|
|
183
|
+
}),
|
|
184
|
+
})),
|
|
185
|
+
}));
|
|
186
|
+
}
|
|
187
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin System — Types & Manifest Schema
|
|
3
|
+
*
|
|
4
|
+
* A plugin is a directory containing a `soleri-plugin.json` manifest
|
|
5
|
+
* and optionally additional intelligence data. Plugins register
|
|
6
|
+
* OpDefinition[] (facades) dynamically without re-scaffolding.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
import type { FacadeConfig } from '../facades/types.js';
|
|
11
|
+
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// MANIFEST SCHEMA (validated at load time)
|
|
14
|
+
// =============================================================================
|
|
15
|
+
|
|
16
|
+
export const pluginManifestSchema = z.object({
|
|
17
|
+
id: z.string().regex(/^[a-z0-9-]+$/, 'Plugin ID must be lowercase alphanumeric with hyphens'),
|
|
18
|
+
name: z.string().min(1),
|
|
19
|
+
version: z.string().regex(/^\d+\.\d+\.\d+$/, 'Version must be semver (x.y.z)'),
|
|
20
|
+
description: z.string().optional().default(''),
|
|
21
|
+
/** Domain this plugin provides knowledge/ops for */
|
|
22
|
+
domain: z.string().optional(),
|
|
23
|
+
/** Plugin IDs this plugin depends on (must be loaded first) */
|
|
24
|
+
dependencies: z.array(z.string()).optional().default([]),
|
|
25
|
+
/** Facade definitions — each becomes an MCP tool */
|
|
26
|
+
facades: z
|
|
27
|
+
.array(
|
|
28
|
+
z.object({
|
|
29
|
+
name: z.string(),
|
|
30
|
+
description: z.string().optional().default(''),
|
|
31
|
+
ops: z.array(
|
|
32
|
+
z.object({
|
|
33
|
+
name: z.string(),
|
|
34
|
+
description: z.string().optional().default(''),
|
|
35
|
+
auth: z.enum(['read', 'write', 'admin']).optional().default('read'),
|
|
36
|
+
}),
|
|
37
|
+
),
|
|
38
|
+
}),
|
|
39
|
+
)
|
|
40
|
+
.optional()
|
|
41
|
+
.default([]),
|
|
42
|
+
/** Intelligence entries to seed into the vault */
|
|
43
|
+
intelligence: z
|
|
44
|
+
.array(
|
|
45
|
+
z.object({
|
|
46
|
+
id: z.string(),
|
|
47
|
+
type: z.string(),
|
|
48
|
+
domain: z.string().optional(),
|
|
49
|
+
title: z.string(),
|
|
50
|
+
severity: z.enum(['critical', 'warning', 'suggestion']).optional(),
|
|
51
|
+
description: z.string(),
|
|
52
|
+
tags: z.array(z.string()).optional().default([]),
|
|
53
|
+
}),
|
|
54
|
+
)
|
|
55
|
+
.optional()
|
|
56
|
+
.default([]),
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
export type PluginManifest = z.infer<typeof pluginManifestSchema>;
|
|
60
|
+
|
|
61
|
+
// =============================================================================
|
|
62
|
+
// PLUGIN TYPES
|
|
63
|
+
// =============================================================================
|
|
64
|
+
|
|
65
|
+
export type PluginStatus = 'registered' | 'active' | 'error' | 'deactivated';
|
|
66
|
+
export type PluginProvenance = 'global' | 'project' | 'custom';
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* A loaded plugin — manifest validated, ready for activation.
|
|
70
|
+
*/
|
|
71
|
+
export interface LoadedPlugin {
|
|
72
|
+
manifest: PluginManifest;
|
|
73
|
+
directory: string;
|
|
74
|
+
provenance: PluginProvenance;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* A registered plugin in the runtime — tracks lifecycle state.
|
|
79
|
+
*/
|
|
80
|
+
export interface RegisteredPlugin {
|
|
81
|
+
id: string;
|
|
82
|
+
manifest: PluginManifest;
|
|
83
|
+
directory: string;
|
|
84
|
+
provenance: PluginProvenance;
|
|
85
|
+
status: PluginStatus;
|
|
86
|
+
error?: string;
|
|
87
|
+
facades: FacadeConfig[];
|
|
88
|
+
activatedAt?: number;
|
|
89
|
+
registeredAt: number;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Plugin facade builder — plugins provide this function to create ops
|
|
94
|
+
* that have access to the agent runtime.
|
|
95
|
+
*
|
|
96
|
+
* Plugin JS modules export: `export function createFacades(ctx): FacadeConfig[]`
|
|
97
|
+
*/
|
|
98
|
+
export type PluginFacadeBuilder = (ctx: PluginContext) => FacadeConfig[];
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Context passed to plugin facade builders during activation.
|
|
102
|
+
*/
|
|
103
|
+
export interface PluginContext {
|
|
104
|
+
/** The agent runtime — full access to vault, brain, planner, etc. */
|
|
105
|
+
runtime: unknown; // AgentRuntime — kept as unknown to avoid circular deps
|
|
106
|
+
/** The plugin's own manifest */
|
|
107
|
+
manifest: PluginManifest;
|
|
108
|
+
/** The plugin's directory on disk */
|
|
109
|
+
directory: string;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// =============================================================================
|
|
113
|
+
// LOAD RESULT
|
|
114
|
+
// =============================================================================
|
|
115
|
+
|
|
116
|
+
export interface LoadResult {
|
|
117
|
+
loaded: LoadedPlugin[];
|
|
118
|
+
errors: Array<{ directory: string; error: string }>;
|
|
119
|
+
}
|