@soleri/core 2.9.0 → 2.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agency/agency-manager.d.ts +47 -0
- package/dist/agency/agency-manager.d.ts.map +1 -0
- package/dist/agency/agency-manager.js +281 -0
- package/dist/agency/agency-manager.js.map +1 -0
- package/dist/agency/index.d.ts +3 -0
- package/dist/agency/index.d.ts.map +1 -0
- package/dist/agency/index.js +2 -0
- package/dist/agency/index.js.map +1 -0
- package/dist/agency/types.d.ts +69 -0
- package/dist/agency/types.d.ts.map +1 -0
- package/dist/agency/types.js +5 -0
- package/dist/agency/types.js.map +1 -0
- package/dist/brain/brain.d.ts +0 -1
- package/dist/brain/brain.d.ts.map +1 -1
- package/dist/brain/brain.js +14 -0
- package/dist/brain/brain.js.map +1 -1
- package/dist/brain/intelligence.d.ts +5 -1
- package/dist/brain/intelligence.d.ts.map +1 -1
- package/dist/brain/intelligence.js +83 -0
- package/dist/brain/intelligence.js.map +1 -1
- package/dist/brain/types.d.ts +21 -0
- package/dist/brain/types.d.ts.map +1 -1
- package/dist/chat/agent-loop-types.d.ts +82 -0
- package/dist/chat/agent-loop-types.d.ts.map +1 -0
- package/dist/chat/agent-loop-types.js +8 -0
- package/dist/chat/agent-loop-types.js.map +1 -0
- package/dist/chat/agent-loop.d.ts +19 -0
- package/dist/chat/agent-loop.d.ts.map +1 -0
- package/dist/chat/agent-loop.js +261 -0
- package/dist/chat/agent-loop.js.map +1 -0
- package/dist/chat/auth-manager.d.ts +49 -0
- package/dist/chat/auth-manager.d.ts.map +1 -0
- package/dist/chat/auth-manager.js +152 -0
- package/dist/chat/auth-manager.js.map +1 -0
- package/dist/chat/browser-session.d.ts +86 -0
- package/dist/chat/browser-session.d.ts.map +1 -0
- package/dist/chat/browser-session.js +143 -0
- package/dist/chat/browser-session.js.map +1 -0
- package/dist/chat/cancellation.d.ts +54 -0
- package/dist/chat/cancellation.d.ts.map +1 -0
- package/dist/chat/cancellation.js +80 -0
- package/dist/chat/cancellation.js.map +1 -0
- package/dist/chat/chat-session.d.ts +86 -0
- package/dist/chat/chat-session.d.ts.map +1 -0
- package/dist/chat/chat-session.js +252 -0
- package/dist/chat/chat-session.js.map +1 -0
- package/dist/chat/file-handler.d.ts +63 -0
- package/dist/chat/file-handler.d.ts.map +1 -0
- package/dist/chat/file-handler.js +182 -0
- package/dist/chat/file-handler.js.map +1 -0
- package/dist/chat/fragment-buffer.d.ts +49 -0
- package/dist/chat/fragment-buffer.d.ts.map +1 -0
- package/dist/chat/fragment-buffer.js +130 -0
- package/dist/chat/fragment-buffer.js.map +1 -0
- package/dist/chat/index.d.ts +24 -0
- package/dist/chat/index.d.ts.map +1 -0
- package/dist/chat/index.js +15 -0
- package/dist/chat/index.js.map +1 -0
- package/dist/chat/mcp-bridge.d.ts +60 -0
- package/dist/chat/mcp-bridge.d.ts.map +1 -0
- package/dist/chat/mcp-bridge.js +111 -0
- package/dist/chat/mcp-bridge.js.map +1 -0
- package/dist/chat/notifications.d.ts +82 -0
- package/dist/chat/notifications.d.ts.map +1 -0
- package/dist/chat/notifications.js +119 -0
- package/dist/chat/notifications.js.map +1 -0
- package/dist/chat/output-compressor.d.ts +30 -0
- package/dist/chat/output-compressor.d.ts.map +1 -0
- package/dist/chat/output-compressor.js +95 -0
- package/dist/chat/output-compressor.js.map +1 -0
- package/dist/chat/queue.d.ts +91 -0
- package/dist/chat/queue.d.ts.map +1 -0
- package/dist/chat/queue.js +146 -0
- package/dist/chat/queue.js.map +1 -0
- package/dist/chat/response-chunker.d.ts +29 -0
- package/dist/chat/response-chunker.d.ts.map +1 -0
- package/dist/chat/response-chunker.js +163 -0
- package/dist/chat/response-chunker.js.map +1 -0
- package/dist/chat/self-update.d.ts +62 -0
- package/dist/chat/self-update.d.ts.map +1 -0
- package/dist/chat/self-update.js +90 -0
- package/dist/chat/self-update.js.map +1 -0
- package/dist/chat/types.d.ts +105 -0
- package/dist/chat/types.d.ts.map +1 -0
- package/dist/chat/types.js +8 -0
- package/dist/chat/types.js.map +1 -0
- package/dist/chat/voice.d.ts +39 -0
- package/dist/chat/voice.d.ts.map +1 -0
- package/dist/chat/voice.js +80 -0
- package/dist/chat/voice.js.map +1 -0
- package/dist/claudemd/compose.d.ts +31 -0
- package/dist/claudemd/compose.d.ts.map +1 -0
- package/dist/claudemd/compose.js +105 -0
- package/dist/claudemd/compose.js.map +1 -0
- package/dist/claudemd/index.d.ts +5 -0
- package/dist/claudemd/index.d.ts.map +1 -0
- package/dist/claudemd/index.js +3 -0
- package/dist/claudemd/index.js.map +1 -0
- package/dist/claudemd/inject.d.ts +31 -0
- package/dist/claudemd/inject.d.ts.map +1 -0
- package/dist/claudemd/inject.js +157 -0
- package/dist/claudemd/inject.js.map +1 -0
- package/dist/claudemd/types.d.ts +41 -0
- package/dist/claudemd/types.d.ts.map +1 -0
- package/dist/claudemd/types.js +5 -0
- package/dist/claudemd/types.js.map +1 -0
- package/dist/context/context-engine.d.ts +31 -0
- package/dist/context/context-engine.d.ts.map +1 -0
- package/dist/context/context-engine.js +245 -0
- package/dist/context/context-engine.js.map +1 -0
- package/dist/context/index.d.ts +3 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +2 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/types.d.ts +54 -0
- package/dist/context/types.d.ts.map +1 -0
- package/dist/context/types.js +5 -0
- package/dist/context/types.js.map +1 -0
- package/dist/enforcement/adapters/claude-code.d.ts +18 -0
- package/dist/enforcement/adapters/claude-code.d.ts.map +1 -0
- package/dist/enforcement/adapters/claude-code.js +106 -0
- package/dist/enforcement/adapters/claude-code.js.map +1 -0
- package/dist/enforcement/adapters/index.d.ts +2 -0
- package/dist/enforcement/adapters/index.d.ts.map +1 -0
- package/dist/enforcement/adapters/index.js +2 -0
- package/dist/enforcement/adapters/index.js.map +1 -0
- package/dist/enforcement/index.d.ts +4 -0
- package/dist/enforcement/index.d.ts.map +1 -0
- package/dist/enforcement/index.js +3 -0
- package/dist/enforcement/index.js.map +1 -0
- package/dist/enforcement/registry.d.ts +23 -0
- package/dist/enforcement/registry.d.ts.map +1 -0
- package/dist/enforcement/registry.js +63 -0
- package/dist/enforcement/registry.js.map +1 -0
- package/dist/enforcement/types.d.ts +51 -0
- package/dist/enforcement/types.d.ts.map +1 -0
- package/dist/enforcement/types.js +8 -0
- package/dist/enforcement/types.js.map +1 -0
- package/dist/facades/facade-factory.d.ts +10 -3
- package/dist/facades/facade-factory.d.ts.map +1 -1
- package/dist/facades/facade-factory.js +94 -5
- package/dist/facades/facade-factory.js.map +1 -1
- package/dist/facades/types.d.ts +15 -1
- package/dist/facades/types.d.ts.map +1 -1
- package/dist/facades/types.js +6 -0
- package/dist/facades/types.js.map +1 -1
- package/dist/health/health-registry.d.ts +40 -0
- package/dist/health/health-registry.d.ts.map +1 -0
- package/dist/health/health-registry.js +134 -0
- package/dist/health/health-registry.js.map +1 -0
- package/dist/health/index.d.ts +5 -0
- package/dist/health/index.d.ts.map +1 -0
- package/dist/health/index.js +3 -0
- package/dist/health/index.js.map +1 -0
- package/dist/health/vault-integrity.d.ts +13 -0
- package/dist/health/vault-integrity.d.ts.map +1 -0
- package/dist/health/vault-integrity.js +49 -0
- package/dist/health/vault-integrity.js.map +1 -0
- package/dist/index.d.ts +67 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +51 -3
- package/dist/index.js.map +1 -1
- package/dist/intake/intake-pipeline.d.ts +0 -7
- package/dist/intake/intake-pipeline.d.ts.map +1 -1
- package/dist/intake/intake-pipeline.js +1 -1
- package/dist/intake/intake-pipeline.js.map +1 -1
- package/dist/intelligence/types.d.ts +1 -0
- package/dist/intelligence/types.d.ts.map +1 -1
- package/dist/migrations/index.d.ts +6 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +5 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/migrations/migration-runner.d.ts +51 -0
- package/dist/migrations/migration-runner.d.ts.map +1 -0
- package/dist/migrations/migration-runner.js +141 -0
- package/dist/migrations/migration-runner.js.map +1 -0
- package/dist/packs/index.d.ts +10 -0
- package/dist/packs/index.d.ts.map +1 -0
- package/dist/packs/index.js +8 -0
- package/dist/packs/index.js.map +1 -0
- package/dist/packs/lockfile.d.ts +97 -0
- package/dist/packs/lockfile.d.ts.map +1 -0
- package/dist/packs/lockfile.js +129 -0
- package/dist/packs/lockfile.js.map +1 -0
- package/dist/packs/pack-installer.d.ts +41 -0
- package/dist/packs/pack-installer.d.ts.map +1 -0
- package/dist/packs/pack-installer.js +253 -0
- package/dist/packs/pack-installer.js.map +1 -0
- package/dist/packs/resolver.d.ts +51 -0
- package/dist/packs/resolver.d.ts.map +1 -0
- package/dist/packs/resolver.js +195 -0
- package/dist/packs/resolver.js.map +1 -0
- package/dist/packs/types.d.ts +186 -0
- package/dist/packs/types.d.ts.map +1 -0
- package/dist/packs/types.js +69 -0
- package/dist/packs/types.js.map +1 -0
- package/dist/persistence/postgres-provider.d.ts +42 -7
- package/dist/persistence/postgres-provider.d.ts.map +1 -1
- package/dist/persistence/postgres-provider.js +187 -46
- package/dist/persistence/postgres-provider.js.map +1 -1
- package/dist/planning/gap-analysis.d.ts.map +1 -1
- package/dist/planning/gap-analysis.js +3 -1
- package/dist/planning/gap-analysis.js.map +1 -1
- package/dist/playbooks/index.d.ts +2 -0
- package/dist/playbooks/index.d.ts.map +1 -1
- package/dist/playbooks/index.js +2 -0
- package/dist/playbooks/index.js.map +1 -1
- package/dist/playbooks/playbook-executor.d.ts +100 -0
- package/dist/playbooks/playbook-executor.d.ts.map +1 -0
- package/dist/playbooks/playbook-executor.js +207 -0
- package/dist/playbooks/playbook-executor.js.map +1 -0
- package/dist/plugins/index.d.ts +7 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +7 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/plugin-loader.d.ts +28 -0
- package/dist/plugins/plugin-loader.d.ts.map +1 -0
- package/dist/plugins/plugin-loader.js +150 -0
- package/dist/plugins/plugin-loader.js.map +1 -0
- package/dist/plugins/plugin-registry.d.ts +58 -0
- package/dist/plugins/plugin-registry.d.ts.map +1 -0
- package/dist/plugins/plugin-registry.js +157 -0
- package/dist/plugins/plugin-registry.js.map +1 -0
- package/dist/plugins/types.d.ts +180 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +48 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/runtime/admin-extra-ops.d.ts.map +1 -1
- package/dist/runtime/admin-extra-ops.js +181 -8
- package/dist/runtime/admin-extra-ops.js.map +1 -1
- package/dist/runtime/capture-ops.d.ts.map +1 -1
- package/dist/runtime/capture-ops.js +106 -7
- package/dist/runtime/capture-ops.js.map +1 -1
- package/dist/runtime/deprecation.d.ts +33 -0
- package/dist/runtime/deprecation.d.ts.map +1 -0
- package/dist/runtime/deprecation.js +41 -0
- package/dist/runtime/deprecation.js.map +1 -0
- package/dist/runtime/facades/admin-facade.d.ts.map +1 -1
- package/dist/runtime/facades/admin-facade.js +12 -1
- package/dist/runtime/facades/admin-facade.js.map +1 -1
- package/dist/runtime/facades/agency-facade.d.ts +7 -0
- package/dist/runtime/facades/agency-facade.d.ts.map +1 -0
- package/dist/runtime/facades/agency-facade.js +103 -0
- package/dist/runtime/facades/agency-facade.js.map +1 -0
- package/dist/runtime/facades/brain-facade.d.ts.map +1 -1
- package/dist/runtime/facades/brain-facade.js +58 -0
- package/dist/runtime/facades/brain-facade.js.map +1 -1
- package/dist/runtime/facades/chat-facade.d.ts +7 -0
- package/dist/runtime/facades/chat-facade.d.ts.map +1 -0
- package/dist/runtime/facades/chat-facade.js +808 -0
- package/dist/runtime/facades/chat-facade.js.map +1 -0
- package/dist/runtime/facades/context-facade.d.ts +7 -0
- package/dist/runtime/facades/context-facade.d.ts.map +1 -0
- package/dist/runtime/facades/context-facade.js +45 -0
- package/dist/runtime/facades/context-facade.js.map +1 -0
- package/dist/runtime/facades/index.d.ts.map +1 -1
- package/dist/runtime/facades/index.js +18 -0
- package/dist/runtime/facades/index.js.map +1 -1
- package/dist/runtime/facades/vault-facade.d.ts.map +1 -1
- package/dist/runtime/facades/vault-facade.js +247 -1
- package/dist/runtime/facades/vault-facade.js.map +1 -1
- package/dist/runtime/feature-flags.d.ts +18 -0
- package/dist/runtime/feature-flags.d.ts.map +1 -0
- package/dist/runtime/feature-flags.js +90 -0
- package/dist/runtime/feature-flags.js.map +1 -0
- package/dist/runtime/pack-ops.d.ts +9 -0
- package/dist/runtime/pack-ops.d.ts.map +1 -0
- package/dist/runtime/pack-ops.js +76 -0
- package/dist/runtime/pack-ops.js.map +1 -0
- package/dist/runtime/playbook-ops.d.ts +3 -7
- package/dist/runtime/playbook-ops.d.ts.map +1 -1
- package/dist/runtime/playbook-ops.js +101 -10
- package/dist/runtime/playbook-ops.js.map +1 -1
- package/dist/runtime/plugin-ops.d.ts +9 -0
- package/dist/runtime/plugin-ops.d.ts.map +1 -0
- package/dist/runtime/plugin-ops.js +235 -0
- package/dist/runtime/plugin-ops.js.map +1 -0
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +72 -5
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/telemetry-ops.d.ts +10 -0
- package/dist/runtime/telemetry-ops.d.ts.map +1 -0
- package/dist/runtime/telemetry-ops.js +53 -0
- package/dist/runtime/telemetry-ops.js.map +1 -0
- package/dist/runtime/types.d.ts +35 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/vault-sharing-ops.d.ts +13 -0
- package/dist/runtime/vault-sharing-ops.d.ts.map +1 -0
- package/dist/runtime/vault-sharing-ops.js +345 -0
- package/dist/runtime/vault-sharing-ops.js.map +1 -0
- package/dist/streams/index.d.ts +1 -1
- package/dist/streams/index.d.ts.map +1 -1
- package/dist/streams/index.js +1 -1
- package/dist/streams/index.js.map +1 -1
- package/dist/streams/replayable-stream.d.ts +13 -1
- package/dist/streams/replayable-stream.d.ts.map +1 -1
- package/dist/streams/replayable-stream.js +27 -3
- package/dist/streams/replayable-stream.js.map +1 -1
- package/dist/text/similarity.d.ts +0 -1
- package/dist/text/similarity.d.ts.map +1 -1
- package/dist/text/similarity.js +1 -1
- package/dist/text/similarity.js.map +1 -1
- package/dist/transport/http-server.d.ts +56 -0
- package/dist/transport/http-server.d.ts.map +1 -0
- package/dist/transport/http-server.js +210 -0
- package/dist/transport/http-server.js.map +1 -0
- package/dist/transport/index.d.ts +11 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +10 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/lsp-server.d.ts +140 -0
- package/dist/transport/lsp-server.d.ts.map +1 -0
- package/dist/transport/lsp-server.js +239 -0
- package/dist/transport/lsp-server.js.map +1 -0
- package/dist/transport/rate-limiter.d.ts +35 -0
- package/dist/transport/rate-limiter.d.ts.map +1 -0
- package/dist/transport/rate-limiter.js +72 -0
- package/dist/transport/rate-limiter.js.map +1 -0
- package/dist/transport/session-manager.d.ts +49 -0
- package/dist/transport/session-manager.d.ts.map +1 -0
- package/dist/transport/session-manager.js +83 -0
- package/dist/transport/session-manager.js.map +1 -0
- package/dist/transport/token-auth.d.ts +29 -0
- package/dist/transport/token-auth.d.ts.map +1 -0
- package/dist/transport/token-auth.js +84 -0
- package/dist/transport/token-auth.js.map +1 -0
- package/dist/transport/types.d.ts +61 -0
- package/dist/transport/types.d.ts.map +1 -0
- package/dist/transport/types.js +5 -0
- package/dist/transport/types.js.map +1 -0
- package/dist/transport/ws-server.d.ts +78 -0
- package/dist/transport/ws-server.d.ts.map +1 -0
- package/dist/transport/ws-server.js +342 -0
- package/dist/transport/ws-server.js.map +1 -0
- package/dist/vault/git-vault-sync.d.ts +107 -0
- package/dist/vault/git-vault-sync.d.ts.map +1 -0
- package/dist/vault/git-vault-sync.js +251 -0
- package/dist/vault/git-vault-sync.js.map +1 -0
- package/dist/vault/knowledge-review.d.ts +67 -0
- package/dist/vault/knowledge-review.d.ts.map +1 -0
- package/dist/vault/knowledge-review.js +133 -0
- package/dist/vault/knowledge-review.js.map +1 -0
- package/dist/vault/obsidian-sync.d.ts +94 -0
- package/dist/vault/obsidian-sync.d.ts.map +1 -0
- package/dist/vault/obsidian-sync.js +247 -0
- package/dist/vault/obsidian-sync.js.map +1 -0
- package/dist/vault/scope-detector.d.ts +31 -0
- package/dist/vault/scope-detector.d.ts.map +1 -0
- package/dist/vault/scope-detector.js +182 -0
- package/dist/vault/scope-detector.js.map +1 -0
- package/dist/vault/vault-branching.d.ts +71 -0
- package/dist/vault/vault-branching.d.ts.map +1 -0
- package/dist/vault/vault-branching.js +180 -0
- package/dist/vault/vault-branching.js.map +1 -0
- package/dist/vault/vault-manager.d.ts +89 -0
- package/dist/vault/vault-manager.d.ts.map +1 -0
- package/dist/vault/vault-manager.js +199 -0
- package/dist/vault/vault-manager.js.map +1 -0
- package/dist/vault/vault-types.d.ts +30 -0
- package/dist/vault/vault-types.d.ts.map +1 -0
- package/dist/vault/vault-types.js +10 -0
- package/dist/vault/vault-types.js.map +1 -0
- package/dist/vault/vault.d.ts +10 -0
- package/dist/vault/vault.d.ts.map +1 -1
- package/dist/vault/vault.js +36 -3
- package/dist/vault/vault.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/admin-extra-ops.test.ts +31 -11
- package/src/__tests__/agency-manager.test.ts +374 -0
- package/src/__tests__/agent-loop.test.ts +256 -0
- package/src/__tests__/capture-ops.test.ts +275 -0
- package/src/__tests__/chat-differentiators.test.ts +251 -0
- package/src/__tests__/chat-enhanced.test.ts +390 -0
- package/src/__tests__/chat-transport.test.ts +665 -0
- package/src/__tests__/claudemd.test.ts +282 -0
- package/src/__tests__/context-engine.test.ts +256 -0
- package/src/__tests__/core-ops.test.ts +97 -5
- package/src/__tests__/deprecation.test.ts +78 -0
- package/src/__tests__/enforcement.test.ts +153 -0
- package/src/__tests__/facade-factory.test.ts +271 -0
- package/src/__tests__/feature-flags.test.ts +138 -0
- package/src/__tests__/git-vault-sync.test.ts +230 -0
- package/src/__tests__/health-registry.test.ts +173 -0
- package/src/__tests__/knowledge-review.test.ts +104 -0
- package/src/__tests__/lsp-transport.test.ts +442 -0
- package/src/__tests__/migration-runner.test.ts +170 -0
- package/src/__tests__/normalize.test.ts +10 -0
- package/src/__tests__/obsidian-sync.test.ts +354 -0
- package/src/__tests__/pack-lockfile.test.ts +261 -0
- package/src/__tests__/pack-ops.test.ts +146 -0
- package/src/__tests__/pack-system.test.ts +423 -0
- package/src/__tests__/playbook-executor.test.ts +249 -0
- package/src/__tests__/playbook-ops-execution.test.ts +189 -0
- package/src/__tests__/plugin-ops.test.ts +411 -0
- package/src/__tests__/plugin-system.test.ts +509 -0
- package/src/__tests__/postgres-provider.test.ts +64 -6
- package/src/__tests__/replayable-stream.test.ts +112 -1
- package/src/__tests__/scope-detector.test.ts +121 -0
- package/src/__tests__/session-lifecycle.test.ts +259 -0
- package/src/__tests__/transport.test.ts +758 -0
- package/src/__tests__/vault-branching.test.ts +274 -0
- package/src/__tests__/vault-connect.test.ts +179 -0
- package/src/__tests__/vault-integrity.test.ts +71 -0
- package/src/__tests__/vault-manager.test.ts +238 -0
- package/src/__tests__/vault-scaling.test.ts +281 -0
- package/src/__tests__/vault-sharing.test.ts +270 -0
- package/src/__tests__/ws-transport.test.ts +479 -0
- package/src/agency/agency-manager.ts +326 -0
- package/src/agency/index.ts +13 -0
- package/src/agency/types.ts +88 -0
- package/src/brain/brain.ts +15 -11
- package/src/brain/intelligence.ts +103 -0
- package/src/brain/types.ts +26 -0
- package/src/chat/agent-loop-types.ts +99 -0
- package/src/chat/agent-loop.ts +357 -0
- package/src/chat/auth-manager.ts +171 -0
- package/src/chat/browser-session.ts +188 -0
- package/src/chat/cancellation.ts +99 -0
- package/src/chat/chat-session.ts +283 -0
- package/src/chat/file-handler.ts +230 -0
- package/src/chat/fragment-buffer.ts +160 -0
- package/src/chat/index.ts +72 -0
- package/src/chat/mcp-bridge.ts +135 -0
- package/src/chat/notifications.ts +164 -0
- package/src/chat/output-compressor.ts +116 -0
- package/src/chat/queue.ts +208 -0
- package/src/chat/response-chunker.ts +200 -0
- package/src/chat/self-update.ts +117 -0
- package/src/chat/types.ts +126 -0
- package/src/chat/voice.ts +134 -0
- package/src/claudemd/compose.ts +142 -0
- package/src/claudemd/index.ts +17 -0
- package/src/claudemd/inject.ts +170 -0
- package/src/claudemd/types.ts +45 -0
- package/src/context/context-engine.ts +302 -0
- package/src/context/index.ts +11 -0
- package/src/context/types.ts +69 -0
- package/src/enforcement/adapters/claude-code.ts +135 -0
- package/src/enforcement/adapters/index.ts +1 -0
- package/src/enforcement/index.ts +10 -0
- package/src/enforcement/registry.ts +82 -0
- package/src/enforcement/types.ts +56 -0
- package/src/facades/facade-factory.ts +138 -5
- package/src/facades/types.ts +21 -0
- package/src/health/health-registry.ts +165 -0
- package/src/health/index.ts +11 -0
- package/src/health/vault-integrity.ts +66 -0
- package/src/index.ts +294 -2
- package/src/intake/intake-pipeline.ts +1 -1
- package/src/intelligence/types.ts +1 -0
- package/src/migrations/index.ts +6 -0
- package/src/migrations/migration-runner.ts +185 -0
- package/src/packs/index.ts +20 -0
- package/src/packs/lockfile.ts +180 -0
- package/src/packs/pack-installer.ts +289 -0
- package/src/packs/resolver.ts +237 -0
- package/src/packs/types.ts +125 -0
- package/src/persistence/postgres-provider.ts +211 -58
- package/src/planning/gap-analysis.ts +52 -7
- package/src/playbooks/index.ts +11 -0
- package/src/playbooks/playbook-executor.ts +301 -0
- package/src/plugins/index.ts +19 -0
- package/src/plugins/plugin-loader.ts +183 -0
- package/src/plugins/plugin-registry.ts +187 -0
- package/src/plugins/types.ts +119 -0
- package/src/runtime/admin-extra-ops.ts +193 -8
- package/src/runtime/capture-ops.ts +113 -8
- package/src/runtime/deprecation.ts +58 -0
- package/src/runtime/facades/admin-facade.ts +16 -1
- package/src/runtime/facades/agency-facade.ts +111 -0
- package/src/runtime/facades/brain-facade.ts +60 -0
- package/src/runtime/facades/chat-facade.ts +918 -0
- package/src/runtime/facades/context-facade.ts +55 -0
- package/src/runtime/facades/index.ts +22 -1
- package/src/runtime/facades/vault-facade.ts +261 -1
- package/src/runtime/feature-flags.ts +101 -0
- package/src/runtime/pack-ops.ts +85 -0
- package/src/runtime/playbook-ops.ts +113 -9
- package/src/runtime/plugin-ops.ts +258 -0
- package/src/runtime/runtime.ts +84 -5
- package/src/runtime/telemetry-ops.ts +57 -0
- package/src/runtime/types.ts +35 -0
- package/src/runtime/vault-sharing-ops.ts +372 -0
- package/src/streams/index.ts +1 -1
- package/src/streams/replayable-stream.ts +34 -3
- package/src/text/similarity.ts +1 -1
- package/src/transport/http-server.ts +269 -0
- package/src/transport/index.ts +48 -0
- package/src/transport/lsp-server.ts +401 -0
- package/src/transport/rate-limiter.ts +97 -0
- package/src/transport/session-manager.ts +120 -0
- package/src/transport/token-auth.ts +96 -0
- package/src/transport/types.ts +66 -0
- package/src/transport/ws-server.ts +415 -0
- package/src/vault/git-vault-sync.ts +318 -0
- package/src/vault/knowledge-review.ts +221 -0
- package/src/vault/obsidian-sync.ts +346 -0
- package/src/vault/scope-detector.ts +219 -0
- package/src/vault/vault-branching.ts +264 -0
- package/src/vault/vault-manager.ts +237 -0
- package/src/vault/vault-types.ts +50 -0
- package/src/vault/vault.ts +41 -3
- package/src/governance/index.ts +0 -18
|
@@ -0,0 +1,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
|
+
}
|
|
@@ -76,21 +76,32 @@ export function createAdminExtraOps(runtime: AgentRuntime): OpDefinition[] {
|
|
|
76
76
|
// ─── Permissions ────────────────────────────────────────────────
|
|
77
77
|
{
|
|
78
78
|
name: 'admin_permissions',
|
|
79
|
-
description:
|
|
80
|
-
|
|
79
|
+
description:
|
|
80
|
+
'Get or set auth enforcement policy. Modes: permissive (no checks), warn (log violations), enforce (block violations).',
|
|
81
|
+
auth: 'admin',
|
|
81
82
|
schema: z.object({
|
|
82
83
|
action: z.enum(['get', 'set']),
|
|
83
|
-
|
|
84
|
+
mode: z.enum(['permissive', 'warn', 'enforce']).optional(),
|
|
85
|
+
callerLevel: z.enum(['read', 'write', 'admin']).optional(),
|
|
84
86
|
}),
|
|
85
87
|
handler: async (params) => {
|
|
86
88
|
const action = params.action as string;
|
|
87
89
|
if (action === 'set') {
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
90
|
+
const mode = params.mode as 'permissive' | 'warn' | 'enforce' | undefined;
|
|
91
|
+
const callerLevel = params.callerLevel as 'read' | 'write' | 'admin' | undefined;
|
|
92
|
+
if (mode) runtime.authPolicy.mode = mode;
|
|
93
|
+
if (callerLevel) runtime.authPolicy.callerLevel = callerLevel;
|
|
94
|
+
// Keep legacy field in sync
|
|
95
|
+
permissionLevel =
|
|
96
|
+
mode === 'enforce' ? 'strict' : mode === 'warn' ? 'moderate' : 'permissive';
|
|
92
97
|
}
|
|
93
|
-
return {
|
|
98
|
+
return {
|
|
99
|
+
level: permissionLevel,
|
|
100
|
+
authPolicy: {
|
|
101
|
+
mode: runtime.authPolicy.mode,
|
|
102
|
+
callerLevel: runtime.authPolicy.callerLevel,
|
|
103
|
+
},
|
|
104
|
+
};
|
|
94
105
|
},
|
|
95
106
|
},
|
|
96
107
|
|
|
@@ -649,6 +660,79 @@ export function createAdminExtraOps(runtime: AgentRuntime): OpDefinition[] {
|
|
|
649
660
|
},
|
|
650
661
|
},
|
|
651
662
|
|
|
663
|
+
// ─── Health Registry (#176) ─────────────────────────────────────
|
|
664
|
+
{
|
|
665
|
+
name: 'admin_health_snapshot',
|
|
666
|
+
description:
|
|
667
|
+
'Full health snapshot — overall status plus per-subsystem health (status, failure count, last error).',
|
|
668
|
+
auth: 'read',
|
|
669
|
+
handler: async () => {
|
|
670
|
+
return runtime.health.snapshot();
|
|
671
|
+
},
|
|
672
|
+
},
|
|
673
|
+
{
|
|
674
|
+
name: 'admin_subsystem_health',
|
|
675
|
+
description: 'Get health status of a specific subsystem.',
|
|
676
|
+
auth: 'read',
|
|
677
|
+
schema: z.object({
|
|
678
|
+
subsystem: z.string().describe('Subsystem name (e.g. "vault", "cognee", "llm")'),
|
|
679
|
+
}),
|
|
680
|
+
handler: async (params) => {
|
|
681
|
+
const sub = runtime.health.get(params.subsystem as string);
|
|
682
|
+
if (!sub) {
|
|
683
|
+
const snapshot = runtime.health.snapshot();
|
|
684
|
+
return {
|
|
685
|
+
error: `Unknown subsystem: ${params.subsystem}`,
|
|
686
|
+
available: Object.keys(snapshot.subsystems),
|
|
687
|
+
};
|
|
688
|
+
}
|
|
689
|
+
return sub;
|
|
690
|
+
},
|
|
691
|
+
},
|
|
692
|
+
|
|
693
|
+
// ─── Feature Flags (#173) ───────────────────────────────────────
|
|
694
|
+
{
|
|
695
|
+
name: 'admin_list_flags',
|
|
696
|
+
description:
|
|
697
|
+
'List all feature flags with current state, description, and source (default/env/runtime).',
|
|
698
|
+
auth: 'read',
|
|
699
|
+
handler: async () => {
|
|
700
|
+
return runtime.flags.getAll();
|
|
701
|
+
},
|
|
702
|
+
},
|
|
703
|
+
{
|
|
704
|
+
name: 'admin_get_flag',
|
|
705
|
+
description: 'Get the current value of a specific feature flag.',
|
|
706
|
+
auth: 'read',
|
|
707
|
+
schema: z.object({
|
|
708
|
+
flag: z.string().describe('Flag name (e.g. "auth-enforcement", "cognee-sync")'),
|
|
709
|
+
}),
|
|
710
|
+
handler: async (params) => {
|
|
711
|
+
const flag = params.flag as string;
|
|
712
|
+
const all = runtime.flags.getAll();
|
|
713
|
+
const info = all[flag];
|
|
714
|
+
if (!info) {
|
|
715
|
+
return { error: `Unknown flag: ${flag}`, availableFlags: Object.keys(all) };
|
|
716
|
+
}
|
|
717
|
+
return { flag, ...info };
|
|
718
|
+
},
|
|
719
|
+
},
|
|
720
|
+
{
|
|
721
|
+
name: 'admin_set_flag',
|
|
722
|
+
description: 'Set a feature flag at runtime. Persists to flags.json.',
|
|
723
|
+
auth: 'admin',
|
|
724
|
+
schema: z.object({
|
|
725
|
+
flag: z.string().describe('Flag name'),
|
|
726
|
+
enabled: z.boolean().describe('Enable (true) or disable (false)'),
|
|
727
|
+
}),
|
|
728
|
+
handler: async (params) => {
|
|
729
|
+
const flag = params.flag as string;
|
|
730
|
+
const enabled = params.enabled as boolean;
|
|
731
|
+
runtime.flags.set(flag, enabled);
|
|
732
|
+
return { flag, enabled, persisted: true };
|
|
733
|
+
},
|
|
734
|
+
},
|
|
735
|
+
|
|
652
736
|
// ─── Persistence ────────────────────────────────────────────────
|
|
653
737
|
{
|
|
654
738
|
name: 'admin_persistence_info',
|
|
@@ -681,5 +765,106 @@ export function createAdminExtraOps(runtime: AgentRuntime): OpDefinition[] {
|
|
|
681
765
|
return { backend, tables };
|
|
682
766
|
},
|
|
683
767
|
},
|
|
768
|
+
|
|
769
|
+
// ─── Setup Wizard (#182) ─────────────────────────────────────────
|
|
770
|
+
{
|
|
771
|
+
name: 'admin_setup_check',
|
|
772
|
+
description:
|
|
773
|
+
'Check agent setup status — vault health, brain vocabulary, cognee connection, LLM keys, templates.',
|
|
774
|
+
auth: 'read',
|
|
775
|
+
handler: async () => {
|
|
776
|
+
const checks: Record<string, { ok: boolean; detail: string }> = {};
|
|
777
|
+
|
|
778
|
+
// Vault
|
|
779
|
+
try {
|
|
780
|
+
const stats = vault.stats();
|
|
781
|
+
checks.vault = {
|
|
782
|
+
ok: true,
|
|
783
|
+
detail: `${stats.totalEntries} entries, ${Object.keys(stats.byDomain).length} domains`,
|
|
784
|
+
};
|
|
785
|
+
} catch (err) {
|
|
786
|
+
checks.vault = { ok: false, detail: err instanceof Error ? err.message : 'Failed' };
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
// Brain vocabulary
|
|
790
|
+
try {
|
|
791
|
+
const brainStats = brain.getStats();
|
|
792
|
+
checks.brain = {
|
|
793
|
+
ok: brainStats.vocabularySize > 0,
|
|
794
|
+
detail: `${brainStats.vocabularySize} terms`,
|
|
795
|
+
};
|
|
796
|
+
} catch {
|
|
797
|
+
checks.brain = { ok: false, detail: 'Brain not initialized' };
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
// Cognee
|
|
801
|
+
const cogneeStatus = cognee.getStatus();
|
|
802
|
+
checks.cognee = {
|
|
803
|
+
ok: cogneeStatus?.available ?? false,
|
|
804
|
+
detail: cogneeStatus?.available ? 'Connected' : 'Not available (optional)',
|
|
805
|
+
};
|
|
806
|
+
|
|
807
|
+
// LLM keys
|
|
808
|
+
const llmAvail = runtime.llmClient.isAvailable();
|
|
809
|
+
checks.llm = {
|
|
810
|
+
ok: llmAvail.openai || llmAvail.anthropic,
|
|
811
|
+
detail: `OpenAI: ${llmAvail.openai ? 'yes' : 'no'}, Anthropic: ${llmAvail.anthropic ? 'yes' : 'no'}`,
|
|
812
|
+
};
|
|
813
|
+
|
|
814
|
+
// Health registry
|
|
815
|
+
const healthSnap = runtime.health.snapshot();
|
|
816
|
+
checks.health = {
|
|
817
|
+
ok: healthSnap.overall !== 'down',
|
|
818
|
+
detail: `Overall: ${healthSnap.overall}`,
|
|
819
|
+
};
|
|
820
|
+
|
|
821
|
+
const allOk = Object.values(checks).every((c) => c.ok);
|
|
822
|
+
|
|
823
|
+
return {
|
|
824
|
+
ready: allOk,
|
|
825
|
+
checks,
|
|
826
|
+
agentId: runtime.config.agentId,
|
|
827
|
+
};
|
|
828
|
+
},
|
|
829
|
+
},
|
|
830
|
+
{
|
|
831
|
+
name: 'admin_setup_run',
|
|
832
|
+
description:
|
|
833
|
+
'Run first-time agent setup — rebuild brain vocabulary, validate vault schema, seed defaults if empty.',
|
|
834
|
+
auth: 'admin',
|
|
835
|
+
handler: async () => {
|
|
836
|
+
const actions: string[] = [];
|
|
837
|
+
|
|
838
|
+
// Rebuild brain vocabulary
|
|
839
|
+
try {
|
|
840
|
+
brain.rebuildVocabulary();
|
|
841
|
+
actions.push('brain_vocabulary_rebuilt');
|
|
842
|
+
} catch {
|
|
843
|
+
// Non-fatal
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
// Rebuild FTS index
|
|
847
|
+
try {
|
|
848
|
+
vault.rebuildFtsIndex();
|
|
849
|
+
actions.push('fts_index_rebuilt');
|
|
850
|
+
} catch {
|
|
851
|
+
// Non-fatal
|
|
852
|
+
}
|
|
853
|
+
|
|
854
|
+
// Reload templates
|
|
855
|
+
try {
|
|
856
|
+
runtime.templateManager.load();
|
|
857
|
+
actions.push('templates_reloaded');
|
|
858
|
+
} catch {
|
|
859
|
+
// Non-fatal
|
|
860
|
+
}
|
|
861
|
+
|
|
862
|
+
return {
|
|
863
|
+
setup: true,
|
|
864
|
+
actions,
|
|
865
|
+
agentId: runtime.config.agentId,
|
|
866
|
+
};
|
|
867
|
+
},
|
|
868
|
+
},
|
|
684
869
|
];
|
|
685
870
|
}
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
import { z } from 'zod';
|
|
9
9
|
import type { OpDefinition } from '../facades/types.js';
|
|
10
10
|
import type { AgentRuntime } from './types.js';
|
|
11
|
+
import { detectScope } from '../vault/scope-detector.js';
|
|
12
|
+
import type { ScopeTier, ScopeDetectionResult } from '../vault/scope-detector.js';
|
|
11
13
|
|
|
12
14
|
/**
|
|
13
15
|
* Create the 4 intelligent capture operations for an agent runtime.
|
|
@@ -26,6 +28,10 @@ export function createCaptureOps(runtime: AgentRuntime): OpDefinition[] {
|
|
|
26
28
|
auth: 'write',
|
|
27
29
|
schema: z.object({
|
|
28
30
|
projectPath: z.string().optional().default('.'),
|
|
31
|
+
tier: z
|
|
32
|
+
.enum(['agent', 'project', 'team'])
|
|
33
|
+
.optional()
|
|
34
|
+
.describe('Manual tier override. If omitted, tier is auto-detected from content.'),
|
|
29
35
|
entries: z.array(
|
|
30
36
|
z.object({
|
|
31
37
|
id: z.string().optional(),
|
|
@@ -49,11 +55,16 @@ export function createCaptureOps(runtime: AgentRuntime): OpDefinition[] {
|
|
|
49
55
|
example: z.string().optional(),
|
|
50
56
|
counterExample: z.string().optional(),
|
|
51
57
|
why: z.string().optional(),
|
|
58
|
+
tier: z
|
|
59
|
+
.enum(['agent', 'project', 'team'])
|
|
60
|
+
.optional()
|
|
61
|
+
.describe('Per-entry tier override. Falls back to top-level tier, then auto-detect.'),
|
|
52
62
|
}),
|
|
53
63
|
),
|
|
54
64
|
}),
|
|
55
65
|
handler: async (params) => {
|
|
56
66
|
const projectPath = (params.projectPath as string | undefined) ?? '.';
|
|
67
|
+
const topTier = params.tier as ScopeTier | undefined;
|
|
57
68
|
const entries = params.entries as Array<{
|
|
58
69
|
id?: string;
|
|
59
70
|
type: string;
|
|
@@ -66,12 +77,19 @@ export function createCaptureOps(runtime: AgentRuntime): OpDefinition[] {
|
|
|
66
77
|
example?: string;
|
|
67
78
|
counterExample?: string;
|
|
68
79
|
why?: string;
|
|
80
|
+
tier?: ScopeTier;
|
|
69
81
|
}>;
|
|
70
82
|
|
|
71
83
|
let captured = 0;
|
|
72
84
|
let proposed = 0;
|
|
73
85
|
let rejected = 0;
|
|
74
|
-
|
|
86
|
+
let duplicated = 0;
|
|
87
|
+
const results: Array<{
|
|
88
|
+
id: string;
|
|
89
|
+
action: string;
|
|
90
|
+
reason?: string;
|
|
91
|
+
scope?: { tier: ScopeTier; confidence: string; reason: string };
|
|
92
|
+
}> = [];
|
|
75
93
|
|
|
76
94
|
for (const entry of entries) {
|
|
77
95
|
const entryId =
|
|
@@ -79,6 +97,22 @@ export function createCaptureOps(runtime: AgentRuntime): OpDefinition[] {
|
|
|
79
97
|
const mappedSeverity = mapSeverity(entry.severity);
|
|
80
98
|
const mappedType = mapType(entry.type);
|
|
81
99
|
|
|
100
|
+
// Scope detection: per-entry tier > top-level tier > auto-detect
|
|
101
|
+
const resolvedTier = entry.tier ?? topTier;
|
|
102
|
+
let scopeResult: ScopeDetectionResult | undefined;
|
|
103
|
+
let finalTier: ScopeTier;
|
|
104
|
+
if (resolvedTier) {
|
|
105
|
+
finalTier = resolvedTier;
|
|
106
|
+
} else {
|
|
107
|
+
scopeResult = detectScope({
|
|
108
|
+
title: entry.title,
|
|
109
|
+
description: entry.description,
|
|
110
|
+
category: entry.domain,
|
|
111
|
+
tags: entry.tags,
|
|
112
|
+
});
|
|
113
|
+
finalTier = scopeResult.tier;
|
|
114
|
+
}
|
|
115
|
+
|
|
82
116
|
try {
|
|
83
117
|
const decision = governance.evaluateCapture(projectPath, {
|
|
84
118
|
type: mappedType,
|
|
@@ -89,7 +123,7 @@ export function createCaptureOps(runtime: AgentRuntime): OpDefinition[] {
|
|
|
89
123
|
switch (decision.action) {
|
|
90
124
|
case 'capture': {
|
|
91
125
|
try {
|
|
92
|
-
brain.enrichAndCapture({
|
|
126
|
+
const captureResult = brain.enrichAndCapture({
|
|
93
127
|
id: entryId,
|
|
94
128
|
type: mappedType as 'pattern' | 'anti-pattern' | 'rule' | 'playbook',
|
|
95
129
|
domain: entry.domain,
|
|
@@ -101,9 +135,39 @@ export function createCaptureOps(runtime: AgentRuntime): OpDefinition[] {
|
|
|
101
135
|
example: entry.example,
|
|
102
136
|
counterExample: entry.counterExample,
|
|
103
137
|
why: entry.why,
|
|
138
|
+
tier: finalTier,
|
|
104
139
|
});
|
|
105
|
-
|
|
106
|
-
|
|
140
|
+
const scopeMeta = scopeResult
|
|
141
|
+
? {
|
|
142
|
+
tier: scopeResult.tier,
|
|
143
|
+
confidence: scopeResult.confidence,
|
|
144
|
+
reason: scopeResult.reason,
|
|
145
|
+
}
|
|
146
|
+
: {
|
|
147
|
+
tier: finalTier,
|
|
148
|
+
confidence: 'MANUAL' as const,
|
|
149
|
+
reason: 'explicit override',
|
|
150
|
+
};
|
|
151
|
+
if (captureResult.blocked) {
|
|
152
|
+
duplicated++;
|
|
153
|
+
results.push({
|
|
154
|
+
id: captureResult.duplicate?.id ?? entryId,
|
|
155
|
+
action: 'duplicate',
|
|
156
|
+
scope: scopeMeta,
|
|
157
|
+
});
|
|
158
|
+
} else {
|
|
159
|
+
captured++;
|
|
160
|
+
const result: (typeof results)[number] = {
|
|
161
|
+
id: entryId,
|
|
162
|
+
action: 'capture',
|
|
163
|
+
scope: scopeMeta,
|
|
164
|
+
};
|
|
165
|
+
if (scopeResult?.confidence === 'LOW') {
|
|
166
|
+
result.reason =
|
|
167
|
+
'Low confidence scope detection — consider reviewing tier assignment';
|
|
168
|
+
}
|
|
169
|
+
results.push(result);
|
|
170
|
+
}
|
|
107
171
|
} catch (err) {
|
|
108
172
|
rejected++;
|
|
109
173
|
results.push({
|
|
@@ -163,7 +227,7 @@ export function createCaptureOps(runtime: AgentRuntime): OpDefinition[] {
|
|
|
163
227
|
}
|
|
164
228
|
}
|
|
165
229
|
|
|
166
|
-
return { captured, proposed, rejected, results };
|
|
230
|
+
return { captured, proposed, rejected, duplicated, results };
|
|
167
231
|
},
|
|
168
232
|
},
|
|
169
233
|
|
|
@@ -189,6 +253,10 @@ export function createCaptureOps(runtime: AgentRuntime): OpDefinition[] {
|
|
|
189
253
|
title: z.string(),
|
|
190
254
|
description: z.string(),
|
|
191
255
|
tags: z.array(z.string()).optional().default([]),
|
|
256
|
+
tier: z
|
|
257
|
+
.enum(['agent', 'project', 'team'])
|
|
258
|
+
.optional()
|
|
259
|
+
.describe('Manual tier override. If omitted, tier is auto-detected from content.'),
|
|
192
260
|
}),
|
|
193
261
|
handler: async (params) => {
|
|
194
262
|
const projectPath = (params.projectPath as string | undefined) ?? '.';
|
|
@@ -197,11 +265,29 @@ export function createCaptureOps(runtime: AgentRuntime): OpDefinition[] {
|
|
|
197
265
|
const title = params.title as string;
|
|
198
266
|
const description = params.description as string;
|
|
199
267
|
const tags = (params.tags as string[] | undefined) ?? [];
|
|
268
|
+
const manualTier = params.tier as ScopeTier | undefined;
|
|
200
269
|
|
|
201
|
-
const id = `${domain}-${Date.now()}`;
|
|
270
|
+
const id = `${domain}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
202
271
|
const mappedSeverity = 'info' as const;
|
|
203
272
|
const mappedType = mapType(entryType);
|
|
204
273
|
|
|
274
|
+
// Scope detection
|
|
275
|
+
let scopeResult: ScopeDetectionResult | undefined;
|
|
276
|
+
let finalTier: ScopeTier;
|
|
277
|
+
if (manualTier) {
|
|
278
|
+
finalTier = manualTier;
|
|
279
|
+
} else {
|
|
280
|
+
scopeResult = detectScope({ title, description, category: domain, tags });
|
|
281
|
+
finalTier = scopeResult.tier;
|
|
282
|
+
}
|
|
283
|
+
const scopeMeta = scopeResult
|
|
284
|
+
? {
|
|
285
|
+
tier: scopeResult.tier,
|
|
286
|
+
confidence: scopeResult.confidence,
|
|
287
|
+
reason: scopeResult.reason,
|
|
288
|
+
}
|
|
289
|
+
: { tier: finalTier, confidence: 'MANUAL' as const, reason: 'explicit override' };
|
|
290
|
+
|
|
205
291
|
try {
|
|
206
292
|
const decision = governance.evaluateCapture(projectPath, {
|
|
207
293
|
type: mappedType,
|
|
@@ -212,7 +298,7 @@ export function createCaptureOps(runtime: AgentRuntime): OpDefinition[] {
|
|
|
212
298
|
switch (decision.action) {
|
|
213
299
|
case 'capture': {
|
|
214
300
|
try {
|
|
215
|
-
brain.enrichAndCapture({
|
|
301
|
+
const captureResult = brain.enrichAndCapture({
|
|
216
302
|
id,
|
|
217
303
|
type: mappedType as 'pattern' | 'anti-pattern' | 'rule' | 'playbook',
|
|
218
304
|
domain,
|
|
@@ -220,8 +306,27 @@ export function createCaptureOps(runtime: AgentRuntime): OpDefinition[] {
|
|
|
220
306
|
severity: mapSeverity(mappedSeverity),
|
|
221
307
|
description,
|
|
222
308
|
tags,
|
|
309
|
+
tier: finalTier,
|
|
223
310
|
});
|
|
224
|
-
|
|
311
|
+
if (captureResult.blocked) {
|
|
312
|
+
return {
|
|
313
|
+
captured: false,
|
|
314
|
+
id: captureResult.duplicate?.id ?? id,
|
|
315
|
+
governance: { action: 'duplicate' as const },
|
|
316
|
+
scope: scopeMeta,
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
const result: Record<string, unknown> = {
|
|
320
|
+
captured: true,
|
|
321
|
+
id,
|
|
322
|
+
governance: { action: 'capture' as const },
|
|
323
|
+
scope: scopeMeta,
|
|
324
|
+
};
|
|
325
|
+
if (scopeResult?.confidence === 'LOW') {
|
|
326
|
+
result.reviewNote =
|
|
327
|
+
'Low confidence scope detection — consider reviewing tier assignment';
|
|
328
|
+
}
|
|
329
|
+
return result;
|
|
225
330
|
} catch (err) {
|
|
226
331
|
return {
|
|
227
332
|
captured: false,
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deprecation utilities — log warnings for deprecated ops with migration paths.
|
|
3
|
+
*
|
|
4
|
+
* Follows Soleri's semver policy:
|
|
5
|
+
* 1. Op marked deprecated → logs warning (minor version)
|
|
6
|
+
* 2. Warning persists for 2+ minor versions
|
|
7
|
+
* 3. Op removed (next major version)
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
const warned = new Set<string>();
|
|
11
|
+
|
|
12
|
+
export interface DeprecationInfo {
|
|
13
|
+
/** The deprecated op/function name */
|
|
14
|
+
name: string;
|
|
15
|
+
/** Version when it was deprecated */
|
|
16
|
+
since: string;
|
|
17
|
+
/** Version when it will be removed */
|
|
18
|
+
removeIn?: string;
|
|
19
|
+
/** What to use instead */
|
|
20
|
+
replacement?: string;
|
|
21
|
+
/** Additional migration guidance */
|
|
22
|
+
message?: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Log a deprecation warning (once per op per process lifetime).
|
|
27
|
+
*/
|
|
28
|
+
export function deprecationWarning(info: DeprecationInfo): void {
|
|
29
|
+
if (warned.has(info.name)) return;
|
|
30
|
+
warned.add(info.name);
|
|
31
|
+
|
|
32
|
+
const parts = [`[DEPRECATED] "${info.name}" is deprecated since v${info.since}.`];
|
|
33
|
+
if (info.replacement) parts.push(`Use "${info.replacement}" instead.`);
|
|
34
|
+
if (info.removeIn) parts.push(`Will be removed in v${info.removeIn}.`);
|
|
35
|
+
if (info.message) parts.push(info.message);
|
|
36
|
+
|
|
37
|
+
console.warn(parts.join(' '));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Create a deprecated op handler that wraps the real handler with a warning.
|
|
42
|
+
*/
|
|
43
|
+
export function wrapDeprecated<T extends (...args: unknown[]) => unknown>(
|
|
44
|
+
fn: T,
|
|
45
|
+
info: DeprecationInfo,
|
|
46
|
+
): T {
|
|
47
|
+
return ((...args: unknown[]) => {
|
|
48
|
+
deprecationWarning(info);
|
|
49
|
+
return fn(...args);
|
|
50
|
+
}) as T;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Clear warned set (for testing).
|
|
55
|
+
*/
|
|
56
|
+
export function resetDeprecationWarnings(): void {
|
|
57
|
+
warned.clear();
|
|
58
|
+
}
|
|
@@ -8,11 +8,14 @@ import type { OpDefinition } from '../../facades/types.js';
|
|
|
8
8
|
import type { AgentRuntime } from '../types.js';
|
|
9
9
|
import { createAdminOps } from '../admin-ops.js';
|
|
10
10
|
import { createAdminExtraOps } from '../admin-extra-ops.js';
|
|
11
|
+
import { createPluginOps } from '../plugin-ops.js';
|
|
12
|
+
import { createPackOps } from '../pack-ops.js';
|
|
13
|
+
import { createTelemetryOps } from '../telemetry-ops.js';
|
|
11
14
|
|
|
12
15
|
export function createAdminFacadeOps(runtime: AgentRuntime): OpDefinition[] {
|
|
13
16
|
const { llmClient, keyPool } = runtime;
|
|
14
17
|
|
|
15
|
-
|
|
18
|
+
const ops: OpDefinition[] = [
|
|
16
19
|
// ─── LLM (inline from core-ops.ts) ──────────────────────────
|
|
17
20
|
{
|
|
18
21
|
name: 'llm_rotate',
|
|
@@ -98,4 +101,16 @@ export function createAdminFacadeOps(runtime: AgentRuntime): OpDefinition[] {
|
|
|
98
101
|
...createAdminOps(runtime),
|
|
99
102
|
...createAdminExtraOps(runtime),
|
|
100
103
|
];
|
|
104
|
+
|
|
105
|
+
// Plugin ops must mutate the same live op array that MCP dispatch reads.
|
|
106
|
+
const pluginOps = createPluginOps(runtime, ops);
|
|
107
|
+
ops.push(...pluginOps);
|
|
108
|
+
|
|
109
|
+
// Pack ops
|
|
110
|
+
ops.push(...createPackOps(runtime));
|
|
111
|
+
|
|
112
|
+
// Telemetry ops
|
|
113
|
+
ops.push(...createTelemetryOps(runtime));
|
|
114
|
+
|
|
115
|
+
return ops;
|
|
101
116
|
}
|