@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
|
@@ -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
|
+
}
|
|
@@ -59,11 +59,30 @@ export function createDomainFacade(
|
|
|
59
59
|
limit: z.number().optional(),
|
|
60
60
|
}),
|
|
61
61
|
handler: async (params) => {
|
|
62
|
-
|
|
62
|
+
const limit = (params.limit as number) ?? 10;
|
|
63
|
+
const results = await brain.intelligentSearch(params.query as string, {
|
|
63
64
|
domain,
|
|
64
65
|
tags: params.tags as string[] | undefined,
|
|
65
|
-
limit
|
|
66
|
+
limit,
|
|
66
67
|
});
|
|
68
|
+
// Fallback: when brain returns empty, try vault FTS directly
|
|
69
|
+
if (results.length === 0) {
|
|
70
|
+
const ftsResults = vault.search(params.query as string, { domain, limit });
|
|
71
|
+
return ftsResults.map((r) => ({
|
|
72
|
+
entry: r.entry,
|
|
73
|
+
score: 0,
|
|
74
|
+
breakdown: {
|
|
75
|
+
semantic: 0,
|
|
76
|
+
vector: 0,
|
|
77
|
+
severity: 0,
|
|
78
|
+
temporalDecay: 0,
|
|
79
|
+
tagOverlap: 0,
|
|
80
|
+
domainMatch: 0,
|
|
81
|
+
total: 0,
|
|
82
|
+
},
|
|
83
|
+
}));
|
|
84
|
+
}
|
|
85
|
+
return results;
|
|
67
86
|
},
|
|
68
87
|
},
|
|
69
88
|
{
|
|
@@ -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
|
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agency facade — proactive file watching, pattern surfacing, warning detection.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import type { OpDefinition } from '../../facades/types.js';
|
|
7
|
+
import type { AgentRuntime } from '../types.js';
|
|
8
|
+
|
|
9
|
+
export function createAgencyFacadeOps(runtime: AgentRuntime): OpDefinition[] {
|
|
10
|
+
const { agencyManager } = runtime;
|
|
11
|
+
|
|
12
|
+
return [
|
|
13
|
+
{
|
|
14
|
+
name: 'agency_enable',
|
|
15
|
+
description:
|
|
16
|
+
'Enable agency mode — starts proactive file watching, pattern surfacing, and warning detection.',
|
|
17
|
+
auth: 'write',
|
|
18
|
+
schema: z.object({
|
|
19
|
+
projectPath: z.string().optional().describe('Project root to watch. Default: "."'),
|
|
20
|
+
}),
|
|
21
|
+
handler: async (params) => {
|
|
22
|
+
const projectPath = (params.projectPath as string) ?? '.';
|
|
23
|
+
agencyManager.enable(projectPath);
|
|
24
|
+
return agencyManager.getStatus();
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: 'agency_disable',
|
|
29
|
+
description: 'Disable agency mode — stops file watching and clears pending state.',
|
|
30
|
+
auth: 'write',
|
|
31
|
+
handler: async () => {
|
|
32
|
+
agencyManager.disable();
|
|
33
|
+
return agencyManager.getStatus();
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'agency_status',
|
|
38
|
+
description: 'Get agency mode status — enabled, watching, detectors, pending warnings.',
|
|
39
|
+
auth: 'read',
|
|
40
|
+
handler: async () => {
|
|
41
|
+
return agencyManager.getStatus();
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'agency_config',
|
|
46
|
+
description: 'Update agency configuration — watch paths, extensions, debounce, thresholds.',
|
|
47
|
+
auth: 'write',
|
|
48
|
+
schema: z.object({
|
|
49
|
+
watchPaths: z.array(z.string()).optional(),
|
|
50
|
+
ignorePatterns: z.array(z.string()).optional(),
|
|
51
|
+
extensions: z.array(z.string()).optional(),
|
|
52
|
+
debounceMs: z.number().optional(),
|
|
53
|
+
minPatternConfidence: z.number().optional(),
|
|
54
|
+
cooldownMs: z.number().optional(),
|
|
55
|
+
}),
|
|
56
|
+
handler: async (params) => {
|
|
57
|
+
agencyManager.updateConfig(params as Record<string, unknown>);
|
|
58
|
+
return agencyManager.getStatus();
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: 'agency_scan_file',
|
|
63
|
+
description: 'Manually scan a file for warnings using registered detectors.',
|
|
64
|
+
auth: 'read',
|
|
65
|
+
schema: z.object({
|
|
66
|
+
filePath: z.string().describe('Path to file to scan.'),
|
|
67
|
+
}),
|
|
68
|
+
handler: async (params) => {
|
|
69
|
+
const warnings = agencyManager.scanFile(params.filePath as string);
|
|
70
|
+
return { warnings, count: warnings.length };
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
name: 'agency_warnings',
|
|
75
|
+
description: 'Get all pending warnings from recent file scans.',
|
|
76
|
+
auth: 'read',
|
|
77
|
+
handler: async () => {
|
|
78
|
+
const warnings = agencyManager.getPendingWarnings();
|
|
79
|
+
return { warnings, count: warnings.length };
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
name: 'agency_surface_patterns',
|
|
84
|
+
description: 'Surface vault patterns relevant to a file change.',
|
|
85
|
+
auth: 'read',
|
|
86
|
+
schema: z.object({
|
|
87
|
+
filePath: z.string().describe('File path that changed.'),
|
|
88
|
+
}),
|
|
89
|
+
handler: async (params) => {
|
|
90
|
+
const patterns = agencyManager.surfacePatterns(params.filePath as string);
|
|
91
|
+
return { patterns, count: patterns.length };
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
name: 'agency_clarify',
|
|
96
|
+
description: 'Generate a clarification question when intent is ambiguous (low confidence).',
|
|
97
|
+
auth: 'read',
|
|
98
|
+
schema: z.object({
|
|
99
|
+
prompt: z.string().describe('The user prompt to analyze.'),
|
|
100
|
+
confidence: z.number().describe('Current intent classification confidence (0-1).'),
|
|
101
|
+
}),
|
|
102
|
+
handler: async (params) => {
|
|
103
|
+
const question = agencyManager.generateClarification(
|
|
104
|
+
params.prompt as string,
|
|
105
|
+
params.confidence as number,
|
|
106
|
+
);
|
|
107
|
+
return question ?? { clarificationNeeded: false };
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
];
|
|
111
|
+
}
|