@vellumai/assistant 0.7.1 → 0.7.2
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/ARCHITECTURE.md +32 -49
- package/Dockerfile +1 -0
- package/README.md +1 -2
- package/__tests__/permissions/gateway-threshold-reader.test.ts +9 -3
- package/bun.lock +26 -26
- package/docs/architecture/security.md +20 -0
- package/docs/plugins.md +7 -9
- package/knip.json +1 -0
- package/node_modules/@vellumai/gateway-client/src/index.ts +1 -0
- package/node_modules/@vellumai/gateway-client/src/ipc-client.ts +39 -1
- package/node_modules/@vellumai/gateway-client/src/types.ts +11 -0
- package/node_modules/@vellumai/service-contracts/package.json +2 -0
- package/node_modules/@vellumai/service-contracts/src/__tests__/contracts.test.ts +4 -0
- package/node_modules/@vellumai/service-contracts/src/__tests__/ingress.test.ts +107 -0
- package/node_modules/@vellumai/service-contracts/src/index.ts +5 -1
- package/node_modules/@vellumai/service-contracts/src/ingress.ts +24 -0
- package/node_modules/@vellumai/service-contracts/src/twilio-ingress.ts +84 -0
- package/node_modules/@vellumai/skill-host-contracts/src/assistant-event.ts +9 -0
- package/node_modules/@vellumai/twilio-client/bun.lock +24 -0
- package/node_modules/@vellumai/twilio-client/package.json +18 -0
- package/node_modules/@vellumai/twilio-client/src/__tests__/twilio-client.test.ts +128 -0
- package/node_modules/@vellumai/twilio-client/src/index.ts +179 -0
- package/node_modules/@vellumai/twilio-client/tsconfig.json +20 -0
- package/openapi.yaml +565 -12
- package/package.json +6 -3
- package/src/__tests__/app-builder-tool-scripts.test.ts +3 -3
- package/src/__tests__/app-bundler.test.ts +170 -1
- package/src/__tests__/app-control-flow.test.ts +374 -0
- package/src/__tests__/app-control-no-global-cgevent.test.ts +98 -0
- package/src/__tests__/app-control-tool-schemas.test.ts +621 -0
- package/src/__tests__/app-executors.test.ts +30 -43
- package/src/__tests__/approval-routes-http.test.ts +23 -6
- package/src/__tests__/assistant-event-hub-machine-name.test.ts +146 -0
- package/src/__tests__/assistant-event-hub-targeted.test.ts +257 -0
- package/src/__tests__/assistant-event-hub.test.ts +109 -2
- package/src/__tests__/assistant-event.test.ts +10 -0
- package/src/__tests__/assistant-events-sse-hardening.test.ts +7 -2
- package/src/__tests__/assistant-feature-flags-integration.test.ts +11 -7
- package/src/__tests__/background-shell-host-bash.test.ts +14 -15
- package/src/__tests__/bootstrap-turn-cleanup.test.ts +44 -0
- package/src/__tests__/btw-routes.test.ts +13 -4
- package/src/__tests__/call-controller.test.ts +49 -1
- package/src/__tests__/call-domain.test.ts +0 -2
- package/src/__tests__/call-routes-http.test.ts +0 -2
- package/src/__tests__/channel-readiness-service.test.ts +59 -1
- package/src/__tests__/checker.test.ts +3 -4
- package/src/__tests__/config-loader-backfill.test.ts +90 -155
- package/src/__tests__/config-loader-platform-defaults.test.ts +196 -0
- package/src/__tests__/config-schema-cmd.test.ts +0 -1
- package/src/__tests__/config-set-platform-guard.test.ts +48 -4
- package/src/__tests__/config-watcher-cleanup-throttle.test.ts +2 -2
- package/src/__tests__/config-watcher.test.ts +2 -2
- package/src/__tests__/conversation-app-control-instantiation.test.ts +392 -0
- package/src/__tests__/conversation-app-control-lifecycle.test.ts +237 -0
- package/src/__tests__/conversation-init.benchmark.test.ts +0 -2
- package/src/__tests__/conversation-lifecycle.test.ts +36 -0
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +283 -0
- package/src/__tests__/conversation-routes-disk-view.test.ts +6 -0
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +120 -72
- package/src/__tests__/conversation-routes-slash-commands.test.ts +1 -0
- package/src/__tests__/conversation-slash-commands.test.ts +0 -4
- package/src/__tests__/conversation-surfaces-action-delivery.test.ts +202 -0
- package/src/__tests__/conversation-surfaces-app-control.test.ts +317 -0
- package/src/__tests__/credential-execution-feature-gates.test.ts +5 -12
- package/src/__tests__/credential-execution-managed-contract.test.ts +3 -131
- package/src/__tests__/credentials-cli.test.ts +5 -12
- package/src/__tests__/cu-unified-flow.test.ts +185 -23
- package/src/__tests__/daemon-credential-client.test.ts +101 -19
- package/src/__tests__/db-schedule-syntax-migration.test.ts +2 -0
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
- package/src/__tests__/gateway-only-enforcement.test.ts +0 -1
- package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -2
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +0 -2
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +0 -1
- package/src/__tests__/heartbeat-service.test.ts +718 -1
- package/src/__tests__/helpers/call-route-handler.ts +7 -1
- package/src/__tests__/host-app-control-proxy.test.ts +602 -0
- package/src/__tests__/host-app-control-routes.test.ts +263 -0
- package/src/__tests__/host-bash-proxy.test.ts +246 -47
- package/src/__tests__/host-bash-routes.test.ts +294 -0
- package/src/__tests__/host-browser-proxy.test.ts +24 -22
- package/src/__tests__/host-browser-routes.test.ts +39 -13
- package/src/__tests__/host-cu-proxy.test.ts +41 -52
- package/src/__tests__/host-cu-routes-targeted.test.ts +300 -0
- package/src/__tests__/host-file-edit-tool.test.ts +47 -1
- package/src/__tests__/host-file-proxy-targeted.test.ts +339 -0
- package/src/__tests__/host-file-proxy.test.ts +37 -43
- package/src/__tests__/host-file-read-tool.test.ts +17 -0
- package/src/__tests__/host-file-routes-targeted.test.ts +262 -0
- package/src/__tests__/host-file-write-tool.test.ts +42 -1
- package/src/__tests__/host-proxy-base.test.ts +312 -0
- package/src/__tests__/host-shell-tool.test.ts +22 -4
- package/src/__tests__/host-transfer-proxy-targeted.test.ts +583 -0
- package/src/__tests__/host-transfer-proxy.test.ts +121 -22
- package/src/__tests__/host-transfer-routes-targeted.test.ts +447 -0
- package/src/__tests__/http-user-message-parity.test.ts +1 -0
- package/src/__tests__/identity-intro-cache.test.ts +29 -0
- package/src/__tests__/identity-routes.test.ts +103 -1
- package/src/__tests__/init-feature-flag-overrides.test.ts +26 -3
- package/src/__tests__/inline-command-runner.test.ts +0 -1
- package/src/__tests__/inline-skill-load-permissions.test.ts +5 -11
- package/src/__tests__/integration-status.test.ts +85 -5
- package/src/__tests__/intent-routing.test.ts +0 -1
- package/src/__tests__/jobs-store-qdrant-breaker.test.ts +95 -5
- package/src/__tests__/lifecycle-memory-v2-seed.test.ts +17 -0
- package/src/__tests__/managed-skill-lifecycle.test.ts +0 -1
- package/src/__tests__/mcp-auth-routes.test.ts +197 -0
- package/src/__tests__/mcp-cli.test.ts +338 -2
- package/src/__tests__/memory-jobs-worker-lanes.test.ts +188 -0
- package/src/__tests__/migration-import-commit-http.test.ts +108 -2
- package/src/__tests__/mock-gateway-ipc.ts +1 -0
- package/src/__tests__/oauth-cli.test.ts +0 -2
- package/src/__tests__/oauth2-gateway-transport.test.ts +0 -1
- package/src/__tests__/persistence-secret-redaction.test.ts +299 -0
- package/src/__tests__/platform-bash-auto-approve.test.ts +5 -9
- package/src/__tests__/prechat-onboarding-contract.test.ts +3 -1
- package/src/__tests__/process-message-background-slack.test.ts +2 -0
- package/src/__tests__/provider-commit-message-generator.test.ts +0 -1
- package/src/__tests__/public-ingress-urls.test.ts +97 -0
- package/src/__tests__/require-fresh-approval.test.ts +0 -1
- package/src/__tests__/retry-backoff.test.ts +87 -0
- package/src/__tests__/runtime-events-sse.test.ts +10 -6
- package/src/__tests__/sanitize-config-for-transfer.test.ts +24 -2
- package/src/__tests__/schedule-retry.test.ts +715 -0
- package/src/__tests__/script-proxy-mitm-handler.test.ts +1 -1
- package/src/__tests__/secret-ingress-http.test.ts +1 -0
- package/src/__tests__/send-endpoint-busy.test.ts +3 -0
- package/src/__tests__/shell-tool-proxy-mode.test.ts +0 -1
- package/src/__tests__/skill-feature-flags.test.ts +43 -41
- package/src/__tests__/skill-load-feature-flag.test.ts +13 -14
- package/src/__tests__/skill-load-inline-command.test.ts +0 -51
- package/src/__tests__/skill-load-inline-includes.test.ts +0 -43
- package/src/__tests__/skill-projection.benchmark.test.ts +0 -1
- package/src/__tests__/skill-script-runner-sandbox.test.ts +0 -1
- package/src/__tests__/slack-channel-config.test.ts +9 -14
- package/src/__tests__/system-prompt-ask-mode.test.ts +0 -1
- package/src/__tests__/system-prompt.test.ts +0 -1
- package/src/__tests__/telegram-config.test.ts +0 -1
- package/src/__tests__/test-preload.ts +8 -0
- package/src/__tests__/tool-approval-handler.test.ts +3 -4
- package/src/__tests__/tool-audit-listener.test.ts +48 -0
- package/src/__tests__/tool-execute-pipeline.test.ts +0 -1
- package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -1
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +0 -1
- package/src/__tests__/tool-executor.test.ts +0 -1
- package/src/__tests__/twilio-config.test.ts +3 -16
- package/src/__tests__/twilio-routes.test.ts +3 -5
- package/src/__tests__/twilio-validation.test.ts +93 -0
- package/src/__tests__/vellum-self-knowledge-inline-command.test.ts +1 -4
- package/src/__tests__/verification-control-plane-policy.test.ts +2 -4
- package/src/__tests__/voice-ingress-preflight.test.ts +19 -0
- package/src/__tests__/workspace-migration-006-services-config.test.ts +3 -2
- package/src/__tests__/workspace-migration-backfill-installation-id.test.ts +1 -5
- package/src/__tests__/workspace-migration-down-functions.test.ts +8 -8
- package/src/__tests__/workspace-migration-unify-llm-callsite-configs.test.ts +10 -6
- package/src/backup/__tests__/paths.test.ts +0 -22
- package/src/backup/__tests__/restore.test.ts +51 -151
- package/src/backup/paths.ts +2 -18
- package/src/backup/restore.ts +107 -231
- package/src/bundler/app-bundler.ts +51 -3
- package/src/calls/relay-server.ts +4 -44
- package/src/calls/twilio-config.ts +2 -17
- package/src/calls/twilio-rest.ts +33 -105
- package/src/calls/twilio-routes.ts +11 -12
- package/src/channels/types.ts +8 -7
- package/src/cli/commands/__tests__/backup.test.ts +6 -277
- package/src/cli/commands/__tests__/gateway.test.ts +288 -0
- package/src/cli/commands/__tests__/memory-v2.test.ts +4 -0
- package/src/cli/commands/__tests__/webhooks.test.ts +0 -1
- package/src/cli/commands/backup.ts +6 -331
- package/src/cli/commands/clients.ts +36 -37
- package/src/cli/commands/contacts.ts +73 -0
- package/src/cli/commands/conversations.ts +2 -5
- package/src/cli/commands/credentials.ts +15 -7
- package/src/cli/commands/domain.ts +66 -15
- package/src/cli/commands/gateway.ts +183 -0
- package/src/cli/commands/keys.ts +9 -6
- package/src/cli/commands/mcp.ts +116 -156
- package/src/cli/commands/memory-v2.ts +296 -1
- package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +0 -1
- package/src/cli/commands/platform/__tests__/connect.test.ts +0 -2
- package/src/cli/commands/platform/__tests__/disconnect.test.ts +0 -2
- package/src/cli/commands/platform/__tests__/status.test.ts +13 -15
- package/src/cli/commands/platform/disconnect.ts +5 -4
- package/src/cli/commands/platform/index.ts +0 -18
- package/src/cli/lib/daemon-credential-client.ts +110 -28
- package/src/cli/program.ts +2 -0
- package/src/config/assistant-feature-flags.ts +67 -10
- package/src/config/bundled-skills/acp/SKILL.md +6 -0
- package/src/config/bundled-skills/acp/TOOLS.json +1 -22
- package/src/config/bundled-skills/app-builder/SKILL.md +14 -109
- package/src/config/bundled-skills/app-builder/TOOLS.json +1 -28
- package/src/config/bundled-skills/app-builder/tools/app-create.ts +1 -10
- package/src/config/bundled-skills/app-control/SKILL.md +75 -0
- package/src/config/bundled-skills/app-control/TOOLS.json +299 -0
- package/src/config/bundled-skills/app-control/tools/app-control-click.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-combo.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-drag.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-observe.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-press.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-sequence.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-start.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-stop.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-type.ts +12 -0
- package/src/config/bundled-skills/computer-use/SKILL.md +6 -0
- package/src/config/bundled-skills/computer-use/TOOLS.json +67 -43
- package/src/config/bundled-skills/contacts/TOOLS.json +0 -16
- package/src/config/bundled-skills/document/TOOLS.json +0 -8
- package/src/config/bundled-skills/followups/TOOLS.json +0 -12
- package/src/config/bundled-skills/image-studio/SKILL.md +4 -0
- package/src/config/bundled-skills/image-studio/TOOLS.json +0 -4
- package/src/config/bundled-skills/media-processing/TOOLS.json +0 -24
- package/src/config/bundled-skills/messaging/TOOLS.json +0 -40
- package/src/config/bundled-skills/phone-calls/TOOLS.json +0 -12
- package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +19 -4
- package/src/config/bundled-skills/playbooks/TOOLS.json +0 -16
- package/src/config/bundled-skills/schedule/TOOLS.json +14 -14
- package/src/config/bundled-skills/sequences/TOOLS.json +0 -36
- package/src/config/bundled-skills/settings/SKILL.md +4 -0
- package/src/config/bundled-skills/settings/TOOLS.json +0 -12
- package/src/config/bundled-skills/skill-management/SKILL.md +6 -0
- package/src/config/bundled-skills/skill-management/TOOLS.json +0 -8
- package/src/config/bundled-skills/subagent/SKILL.md +6 -2
- package/src/config/bundled-skills/subagent/TOOLS.json +0 -20
- package/src/config/bundled-skills/transcribe/SKILL.md +4 -0
- package/src/config/bundled-skills/transcribe/TOOLS.json +0 -4
- package/src/config/bundled-tool-registry.ts +21 -0
- package/src/config/env-registry.ts +0 -2
- package/src/config/env.ts +19 -12
- package/src/config/feature-flag-registry.json +21 -133
- package/src/config/loader.ts +73 -99
- package/src/config/sanitize-for-transfer.ts +2 -0
- package/src/config/schemas/__tests__/memory-lifecycle.test.ts +80 -0
- package/src/config/schemas/__tests__/memory-v2.test.ts +7 -4
- package/src/config/schemas/calls.ts +0 -9
- package/src/config/schemas/heartbeat.ts +63 -0
- package/src/config/schemas/ingress.ts +10 -6
- package/src/config/schemas/llm.ts +5 -10
- package/src/config/schemas/memory-lifecycle.ts +77 -24
- package/src/config/schemas/memory-v2.ts +48 -4
- package/src/config/schemas/platform.ts +6 -0
- package/src/config/schemas/services.ts +1 -15
- package/src/config/schemas/skills.ts +0 -6
- package/src/config/seed-inference-profiles.ts +1 -1
- package/src/contacts/contact-store.ts +0 -30
- package/src/contacts/contacts-write.ts +0 -27
- package/src/context/window-manager.ts +1 -2
- package/src/credential-execution/feature-gates.ts +10 -10
- package/src/credential-execution/process-manager.ts +12 -41
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +126 -5
- package/src/daemon/bootstrap-turn-cleanup.ts +45 -0
- package/src/daemon/config-watcher.ts +4 -3
- package/src/daemon/conversation-agent-loop-handlers.ts +21 -3
- package/src/daemon/conversation-agent-loop.ts +32 -28
- package/src/daemon/conversation-lifecycle.ts +8 -1
- package/src/daemon/conversation-process.ts +16 -11
- package/src/daemon/conversation-runtime-assembly.ts +2 -2
- package/src/daemon/conversation-surfaces.ts +125 -4
- package/src/daemon/conversation-tool-setup.ts +16 -55
- package/src/daemon/conversation.ts +21 -2
- package/src/daemon/doordash-steps.ts +1 -1
- package/src/daemon/handlers/shared.ts +4 -1
- package/src/daemon/host-app-control-proxy.ts +293 -0
- package/src/daemon/host-bash-proxy.ts +84 -74
- package/src/daemon/host-browser-proxy.ts +67 -82
- package/src/daemon/host-cu-proxy.ts +81 -86
- package/src/daemon/host-file-proxy.ts +93 -69
- package/src/daemon/host-proxy-base.ts +294 -0
- package/src/daemon/host-proxy-preactivation.ts +82 -0
- package/src/daemon/host-transfer-proxy.ts +247 -129
- package/src/daemon/lifecycle.ts +115 -117
- package/src/daemon/message-protocol.ts +3 -8
- package/src/daemon/message-types/contacts.ts +23 -1
- package/src/daemon/message-types/conversations.ts +11 -8
- package/src/daemon/message-types/host-app-control.ts +150 -0
- package/src/daemon/message-types/host-bash.ts +4 -0
- package/src/daemon/message-types/host-cu.ts +2 -0
- package/src/daemon/message-types/host-file.ts +4 -0
- package/src/daemon/message-types/host-transfer.ts +3 -0
- package/src/daemon/message-types/schedules.ts +8 -3
- package/src/daemon/message-types/skills.ts +2 -2
- package/src/daemon/process-message.ts +18 -1
- package/src/daemon/shutdown-handlers.ts +0 -3
- package/src/daemon/tool-setup-types.ts +51 -0
- package/src/daemon/tool-side-effects.ts +1 -1
- package/src/events/tool-audit-listener.ts +2 -1
- package/src/heartbeat/__tests__/heartbeat-feed-event.test.ts +15 -7
- package/src/heartbeat/__tests__/heartbeat-run-store.test.ts +216 -0
- package/src/heartbeat/heartbeat-run-store.ts +236 -0
- package/src/heartbeat/heartbeat-service.ts +280 -49
- package/src/home/__tests__/post-connect-feed.test.ts +99 -0
- package/src/home/__tests__/relationship-state-writer.test.ts +11 -9
- package/src/home/__tests__/suggested-prompts.test.ts +89 -0
- package/src/home/post-connect-feed.ts +68 -0
- package/src/home/relationship-state-writer.ts +17 -92
- package/src/home/suggested-prompts.ts +46 -10
- package/src/inbound/public-ingress-urls.ts +32 -34
- package/src/ipc/__tests__/route-error-envelope.test.ts +80 -0
- package/src/ipc/assistant-server.ts +14 -1
- package/src/ipc/cli-client.ts +32 -1
- package/src/live-voice/live-voice-metrics.ts +10 -10
- package/src/mcp/__tests__/mcp-auth-orchestrator.test.ts +304 -0
- package/src/mcp/mcp-auth-orchestrator.ts +213 -0
- package/src/mcp/mcp-auth-state.ts +133 -0
- package/src/mcp/mcp-oauth-provider.ts +19 -0
- package/src/memory/__tests__/jobs-store-job-classes.test.ts +24 -0
- package/src/memory/__tests__/qdrant-client-sentinel.test.ts +49 -0
- package/src/memory/__tests__/sparse-tokenize.test.ts +66 -0
- package/src/memory/anisotropy.test.ts +247 -0
- package/src/memory/anisotropy.ts +443 -0
- package/src/memory/auto-analysis-constants.ts +17 -0
- package/src/memory/auto-analysis-guard.ts +5 -15
- package/src/memory/canonical-guardian-store.ts +7 -7
- package/src/memory/context-search/__tests__/agent-runner-redaction.test.ts +122 -0
- package/src/memory/context-search/agent-protocol.ts +6 -6
- package/src/memory/context-search/agent-runner.ts +32 -7
- package/src/memory/context-search/sources/memory-v2.ts +17 -5
- package/src/memory/conversation-crud.ts +1 -1
- package/src/memory/conversation-key-store.ts +2 -15
- package/src/memory/db-init.ts +4 -0
- package/src/memory/embedding-backend.ts +9 -21
- package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +49 -4
- package/src/memory/graph/conversation-graph-memory.ts +1 -24
- package/src/memory/graph/graph-search.ts +8 -0
- package/src/memory/graph/retriever.ts +28 -0
- package/src/memory/graph/tools.ts +1 -1
- package/src/memory/jobs/__tests__/embed-concept-page.test.ts +8 -2
- package/src/memory/jobs/embed-concept-page.ts +28 -2
- package/src/memory/jobs/embed-pkb-file.test.ts +2 -2
- package/src/memory/jobs-store.ts +66 -22
- package/src/memory/jobs-worker.ts +112 -63
- package/src/memory/memory-v2-activation-log-store.ts +1 -1
- package/src/memory/migrations/237-heartbeat-runs.ts +45 -0
- package/src/memory/migrations/238-schedule-retry-policy.ts +20 -0
- package/src/memory/migrations/index.ts +5 -0
- package/src/memory/migrations/registry.ts +8 -0
- package/src/memory/pkb/pkb-search.ts +7 -0
- package/src/memory/qdrant-client.ts +50 -20
- package/src/memory/schema/infrastructure.ts +15 -0
- package/src/memory/search/semantic.ts +7 -0
- package/src/memory/sparse-tokenize.ts +49 -0
- package/src/memory/v2/__tests__/activation.test.ts +77 -95
- package/src/memory/v2/__tests__/injection.test.ts +43 -21
- package/src/memory/v2/__tests__/sim.test.ts +166 -6
- package/src/memory/v2/__tests__/sparse-bm25.test.ts +292 -0
- package/src/memory/v2/__tests__/static-context.test.ts +0 -1
- package/src/memory/v2/activation.ts +69 -88
- package/src/memory/v2/consolidation-job.ts +3 -5
- package/src/memory/v2/constants.ts +7 -0
- package/src/memory/v2/injection.ts +86 -53
- package/src/memory/v2/prompts/consolidation.ts +312 -91
- package/src/memory/v2/qdrant.ts +99 -1
- package/src/memory/v2/sim.ts +126 -16
- package/src/memory/v2/skill-qdrant.ts +12 -3
- package/src/memory/v2/skill-store.ts +16 -1
- package/src/memory/v2/sparse-bm25.ts +245 -0
- package/src/memory/v2/static-context.ts +6 -5
- package/src/messaging/providers/gmail/types.ts +0 -49
- package/src/messaging/providers/slack/adapter.ts +1 -31
- package/src/messaging/providers/slack/types.ts +0 -32
- package/src/notifications/README.md +10 -10
- package/src/notifications/broadcaster.ts +1 -1
- package/src/notifications/guardian-question-mode.ts +5 -5
- package/src/oauth/connect-orchestrator.ts +4 -0
- package/src/oauth/credential-token-resolver.ts +1 -3
- package/src/oauth/manual-token-connection.ts +0 -4
- package/src/outbound-proxy/index.ts +1 -37
- package/src/outbound-proxy/logging.ts +1 -1
- package/src/outbound-proxy/policy.ts +6 -5
- package/src/outbound-proxy/router.ts +2 -1
- package/src/permissions/approval-policy.test.ts +6 -275
- package/src/permissions/approval-policy.ts +0 -51
- package/src/permissions/checker.test.ts +0 -1
- package/src/permissions/checker.ts +3 -17
- package/src/permissions/gateway-threshold-reader.ts +2 -0
- package/src/permissions/prompter.ts +34 -1
- package/src/permissions/secret-prompter.ts +6 -2
- package/src/prompts/bootstrap-cleanup.ts +27 -0
- package/src/prompts/system-prompt.ts +3 -18
- package/src/prompts/templates/SOUL.md +13 -1
- package/src/providers/speech-to-text/provider-catalog.ts +7 -8
- package/src/runtime/assistant-event-hub.ts +118 -96
- package/src/runtime/assistant-event.ts +1 -0
- package/src/runtime/auth/__tests__/middleware.test.ts +11 -56
- package/src/runtime/auth/middleware.ts +0 -96
- package/src/runtime/auth/route-policy.ts +19 -0
- package/src/runtime/btw-sidechain.ts +2 -3
- package/src/runtime/channel-invite-transport.ts +2 -48
- package/src/runtime/channel-invite-transports/email.ts +1 -1
- package/src/runtime/channel-invite-transports/slack.ts +1 -1
- package/src/runtime/channel-invite-transports/telegram.ts +1 -1
- package/src/runtime/channel-invite-transports/voice.ts +1 -1
- package/src/runtime/channel-invite-transports/whatsapp.ts +1 -1
- package/src/runtime/channel-invite-types.ts +54 -0
- package/src/runtime/channel-readiness-service.ts +32 -13
- package/src/runtime/http-server.ts +3 -329
- package/src/runtime/http-types.ts +0 -5
- package/src/runtime/migrations/__tests__/vbundle-import-parity.test.ts +413 -0
- package/src/runtime/migrations/__tests__/vbundle-import-policy.test.ts +260 -0
- package/src/runtime/migrations/__tests__/vbundle-import-version-compat.test.ts +189 -0
- package/src/runtime/migrations/__tests__/vbundle-streaming-importer.test.ts +153 -1
- package/src/runtime/migrations/__tests__/vbundle-symlink-importer.test.ts +451 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-streaming-importer.test.ts +0 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-streaming.test.ts +515 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-tar.test.ts +437 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-walker.test.ts +319 -0
- package/src/runtime/migrations/__tests__/vbundle-validator-v1-schema.test.ts +51 -1
- package/src/runtime/migrations/migration-transport.ts +7 -7
- package/src/runtime/migrations/vbundle-builder.ts +327 -60
- package/src/runtime/migrations/vbundle-import-analyzer.ts +4 -4
- package/src/runtime/migrations/vbundle-import-policy.ts +172 -0
- package/src/runtime/migrations/vbundle-importer.ts +245 -68
- package/src/runtime/migrations/vbundle-streaming-importer.ts +326 -35
- package/src/runtime/migrations/vbundle-streaming-validator.ts +157 -4
- package/src/runtime/migrations/vbundle-tar-stream.ts +15 -6
- package/src/runtime/migrations/vbundle-validator.ts +114 -0
- package/src/runtime/pending-interactions.ts +35 -9
- package/src/runtime/routes/__tests__/backup-routes.test.ts +22 -150
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +98 -0
- package/src/runtime/routes/__tests__/gateway-log-routes.test.ts +242 -0
- package/src/runtime/routes/__tests__/heartbeat-routes.test.ts +112 -0
- package/src/runtime/routes/approval-interception-types.ts +13 -0
- package/src/runtime/routes/approval-strategies/guardian-text-engine-strategy.ts +1 -1
- package/src/runtime/routes/backup-routes.ts +15 -38
- package/src/runtime/routes/btw-routes.ts +14 -37
- package/src/runtime/routes/client-routes.ts +1 -0
- package/src/runtime/routes/contact-prompt-routes.ts +183 -0
- package/src/runtime/routes/conversation-query-routes.ts +36 -1
- package/src/runtime/routes/conversation-routes.ts +30 -13
- package/src/runtime/routes/document-pdf-renderer.ts +165 -0
- package/src/runtime/routes/documents-routes.ts +30 -0
- package/src/runtime/routes/errors.ts +19 -4
- package/src/runtime/routes/events-routes.ts +12 -6
- package/src/runtime/routes/gateway-log-routes.ts +79 -0
- package/src/runtime/routes/guardian-approval-interception.ts +2 -8
- package/src/runtime/routes/heartbeat-routes.ts +103 -38
- package/src/runtime/routes/host-app-control-routes.ts +134 -0
- package/src/runtime/routes/host-bash-routes.ts +36 -6
- package/src/runtime/routes/host-browser-routes.ts +108 -13
- package/src/runtime/routes/host-cu-routes.ts +44 -14
- package/src/runtime/routes/host-file-routes.ts +33 -10
- package/src/runtime/routes/host-transfer-routes.ts +64 -24
- package/src/runtime/routes/http-adapter.ts +1 -0
- package/src/runtime/routes/identity-intro-cache.ts +30 -0
- package/src/runtime/routes/identity-routes.ts +15 -43
- package/src/runtime/routes/inbound-message-handler.ts +1 -9
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +0 -7
- package/src/runtime/routes/inbound-stages/edit-intercept.ts +0 -8
- package/src/runtime/routes/inbound-stages/transcribe-audio.test.ts +0 -20
- package/src/runtime/routes/inbound-stages/transcribe-audio.ts +5 -13
- package/src/runtime/routes/index.ts +8 -0
- package/src/runtime/routes/mcp-auth-routes.ts +132 -0
- package/src/runtime/routes/memory-item-routes.ts +10 -12
- package/src/runtime/routes/memory-v2-routes.ts +441 -1
- package/src/runtime/routes/migration-routes.ts +96 -0
- package/src/runtime/routes/schedule-routes.ts +7 -0
- package/src/runtime/verification-templates.ts +4 -7
- package/src/schedule/integration-status.ts +66 -2
- package/src/schedule/recurrence-engine.ts +4 -1
- package/src/schedule/retry-backoff.ts +18 -0
- package/src/schedule/retry-policy.ts +82 -0
- package/src/schedule/schedule-recovery.ts +64 -0
- package/src/schedule/schedule-store.ts +106 -2
- package/src/schedule/scheduler-types.ts +25 -0
- package/src/schedule/scheduler.ts +63 -38
- package/src/security/oauth-callback-registry.ts +8 -0
- package/src/sequence/analytics.ts +5 -5
- package/src/sequence/engine.ts +1 -1
- package/src/skills/catalog-files.ts +2 -8
- package/src/skills/include-graph.ts +5 -5
- package/src/skills/remote-skill-policy.ts +5 -5
- package/src/skills/skill-file-provider.ts +1 -1
- package/src/skills/skill-file-types.ts +13 -0
- package/src/skills/skillssh-audit-types.ts +28 -0
- package/src/skills/skillssh-registry.ts +8 -21
- package/src/telemetry/types.ts +2 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +21 -0
- package/src/telemetry/usage-telemetry-reporter.ts +1 -0
- package/src/tools/app-control/skill-proxy-bridge.ts +28 -0
- package/src/tools/apps/executors.ts +56 -69
- package/src/tools/browser/__tests__/browser-status.test.ts +21 -18
- package/src/tools/browser/browser-execution.ts +2 -2
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +55 -4
- package/src/tools/browser/cdp-client/cdp-inspect/__tests__/ws-transport.test.ts +12 -6
- package/src/tools/browser/cdp-client/factory.ts +23 -24
- package/src/tools/browser/cdp-client/index.ts +1 -14
- package/src/tools/computer-use/definitions.ts +42 -20
- package/src/tools/executor.ts +2 -0
- package/src/tools/host-filesystem/edit.ts +26 -0
- package/src/tools/host-filesystem/read.ts +26 -0
- package/src/tools/host-filesystem/transfer.ts +31 -1
- package/src/tools/host-filesystem/write.ts +26 -0
- package/src/tools/host-terminal/host-shell.ts +58 -0
- package/src/tools/schedule/create.ts +6 -0
- package/src/tools/schedule/list.ts +2 -0
- package/src/tools/schedule/update.ts +10 -0
- package/src/tools/shared/filesystem/file-ops-service.ts +2 -0
- package/src/tools/shared/filesystem/path-policy.ts +25 -1
- package/src/tools/skills/load.ts +0 -32
- package/src/tools/tool-approval-handler.ts +1 -5
- package/src/tools/types.ts +4 -0
- package/src/usage/pricing.ts +1 -1
- package/src/workspace/hatched-date.ts +86 -0
- package/src/workspace/migrations/003-seed-device-id.ts +1 -1
- package/src/workspace/migrations/006-services-config.ts +8 -5
- package/src/workspace/migrations/016-extract-feature-flags-to-protected.ts +3 -9
- package/src/workspace/migrations/021-move-signals-to-workspace.ts +4 -10
- package/src/workspace/migrations/022-move-hooks-to-workspace.ts +4 -10
- package/src/workspace/migrations/023-move-config-files-to-workspace.ts +4 -11
- package/src/workspace/migrations/024-move-runtime-files-to-workspace.ts +3 -10
- package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +3 -2
- package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +2 -1
- package/src/workspace/migrations/059-move-pid-to-workspace.ts +3 -8
- package/src/workspace/migrations/061-move-backup-key-to-workspace.ts +3 -8
- package/src/workspace/migrations/AGENTS.md +1 -1
- package/src/workspace/migrations/migrate-to-workspace-volume.ts +4 -10
- package/src/workspace/migrations/utils.ts +21 -0
- package/src/__tests__/host-browser-e2e-cloud.test.ts +0 -443
- package/src/__tests__/host-browser-e2e-self-hosted-capability.test.ts +0 -226
- package/src/__tests__/host-browser-ws-events-e2e.test.ts +0 -427
- package/src/__tests__/twilio-rest.test.ts +0 -34
- package/src/backup/__tests__/backup-key.test.ts +0 -152
- package/src/backup/__tests__/backup-worker.test.ts +0 -782
- package/src/backup/__tests__/offsite-writer.test.ts +0 -641
- package/src/backup/__tests__/stream-crypt.test.ts +0 -228
- package/src/backup/backup-key.ts +0 -137
- package/src/backup/backup-worker.ts +0 -472
- package/src/backup/offsite-writer.ts +0 -222
- package/src/backup/stream-crypt.ts +0 -263
- package/src/daemon/message-types/pairing.ts +0 -58
- package/src/outbound-proxy/config.ts +0 -20
- package/src/outbound-proxy/health.ts +0 -18
- package/src/outbound-proxy/types.ts +0 -150
- package/src/runtime/capability-tokens.ts +0 -190
- package/src/signals/mcp-reload.ts +0 -18
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
|
|
3
|
+
function emptyOrAbsoluteHttpUrl(fieldPath: string) {
|
|
4
|
+
return z
|
|
5
|
+
.string({ error: `${fieldPath} must be a string` })
|
|
6
|
+
.refine(
|
|
7
|
+
(val) => val === "" || /^https?:\/\//i.test(val),
|
|
8
|
+
`${fieldPath} must be an absolute URL starting with http:// or https://`,
|
|
9
|
+
);
|
|
10
|
+
}
|
|
11
|
+
|
|
3
12
|
const IngressWebhookConfigSchema = z
|
|
4
13
|
.object({
|
|
5
14
|
secret: z
|
|
@@ -74,12 +83,7 @@ const IngressBaseSchema = z
|
|
|
74
83
|
.boolean({ error: "ingress.enabled must be a boolean" })
|
|
75
84
|
.optional()
|
|
76
85
|
.describe("Whether the ingress HTTP server is enabled"),
|
|
77
|
-
publicBaseUrl:
|
|
78
|
-
.string({ error: "ingress.publicBaseUrl must be a string" })
|
|
79
|
-
.refine(
|
|
80
|
-
(val) => val === "" || /^https?:\/\//i.test(val),
|
|
81
|
-
"ingress.publicBaseUrl must be an absolute URL starting with http:// or https://",
|
|
82
|
-
)
|
|
86
|
+
publicBaseUrl: emptyOrAbsoluteHttpUrl("ingress.publicBaseUrl")
|
|
83
87
|
.default("")
|
|
84
88
|
.describe(
|
|
85
89
|
"Public-facing base URL for the ingress server (used in webhook callbacks)",
|
|
@@ -91,7 +91,6 @@ export type LLMCallSite = z.infer<typeof LLMCallSiteEnum>;
|
|
|
91
91
|
* mapping table.
|
|
92
92
|
*/
|
|
93
93
|
const EffortEnum = z.enum(["none", "low", "medium", "high", "xhigh", "max"]);
|
|
94
|
-
export type Effort = z.infer<typeof EffortEnum>;
|
|
95
94
|
|
|
96
95
|
export const SpeedEnum = z.enum(["standard", "fast"]);
|
|
97
96
|
export type Speed = z.infer<typeof SpeedEnum>;
|
|
@@ -102,7 +101,6 @@ export type Speed = z.infer<typeof SpeedEnum>;
|
|
|
102
101
|
* are stripped in `retry.ts` normalization.
|
|
103
102
|
*/
|
|
104
103
|
const VerbosityEnum = z.enum(["low", "medium", "high"]);
|
|
105
|
-
export type Verbosity = z.infer<typeof VerbosityEnum>;
|
|
106
104
|
|
|
107
105
|
// ---------------------------------------------------------------------------
|
|
108
106
|
// Leaf primitives (shared between LLMConfigBase and LLMConfigFragment)
|
|
@@ -150,7 +148,6 @@ const ThinkingSchema = z.object({
|
|
|
150
148
|
enabled: ThinkingEnabledSchema.default(true),
|
|
151
149
|
streamThinking: ThinkingStreamThinkingSchema.default(true),
|
|
152
150
|
});
|
|
153
|
-
export type Thinking = z.infer<typeof ThinkingSchema>;
|
|
154
151
|
|
|
155
152
|
// Fragment view: every field optional, no defaults injected. Defining this
|
|
156
153
|
// separately (rather than `ThinkingSchema.partial()`) avoids having Zod
|
|
@@ -243,7 +240,6 @@ const OpenRouterOnlyItemSchema = z.string().min(1);
|
|
|
243
240
|
const OpenRouterSchema = z.object({
|
|
244
241
|
only: z.array(OpenRouterOnlyItemSchema).default([]),
|
|
245
242
|
});
|
|
246
|
-
export type OpenRouter = z.infer<typeof OpenRouterSchema>;
|
|
247
243
|
|
|
248
244
|
const OpenRouterDeepPartialSchema = z.object({
|
|
249
245
|
only: z.array(OpenRouterOnlyItemSchema).optional(),
|
|
@@ -257,8 +253,8 @@ const OpenRouterDeepPartialSchema = z.object({
|
|
|
257
253
|
* Distinguishes daemon-managed profiles (overwritten on every startup) from
|
|
258
254
|
* user-created ones (never touched by the daemon).
|
|
259
255
|
*/
|
|
260
|
-
|
|
261
|
-
|
|
256
|
+
const ProfileSource = z.enum(["managed", "user"]);
|
|
257
|
+
type ProfileSource = z.infer<typeof ProfileSource>;
|
|
262
258
|
|
|
263
259
|
// ---------------------------------------------------------------------------
|
|
264
260
|
// Pricing overrides
|
|
@@ -270,7 +266,6 @@ const PricingOverrideSchema = z.object({
|
|
|
270
266
|
inputPer1M: z.number().nonnegative(),
|
|
271
267
|
outputPer1M: z.number().nonnegative(),
|
|
272
268
|
});
|
|
273
|
-
export type PricingOverride = z.infer<typeof PricingOverrideSchema>;
|
|
274
269
|
|
|
275
270
|
// ---------------------------------------------------------------------------
|
|
276
271
|
// Base config (all fields defaulted) and Fragment (all fields optional)
|
|
@@ -302,7 +297,7 @@ export type LLMConfigBase = z.infer<typeof LLMConfigBase>;
|
|
|
302
297
|
* objects so callers can override individual leaves (e.g. `{ thinking:
|
|
303
298
|
* { enabled: false } }`).
|
|
304
299
|
*/
|
|
305
|
-
|
|
300
|
+
const LLMConfigFragment = z.object({
|
|
306
301
|
provider: LLMProvider.optional(),
|
|
307
302
|
model: ModelSchema.optional(),
|
|
308
303
|
maxTokens: MaxTokensSchema.optional(),
|
|
@@ -314,7 +309,7 @@ export const LLMConfigFragment = z.object({
|
|
|
314
309
|
contextWindow: ContextWindowDeepPartialSchema.optional(),
|
|
315
310
|
openrouter: OpenRouterDeepPartialSchema.optional(),
|
|
316
311
|
});
|
|
317
|
-
|
|
312
|
+
type LLMConfigFragment = z.infer<typeof LLMConfigFragment>;
|
|
318
313
|
|
|
319
314
|
/**
|
|
320
315
|
* A named profile entry: an `LLMConfigFragment` augmented with
|
|
@@ -337,7 +332,7 @@ export type ProfileEntry = z.infer<typeof ProfileEntry>;
|
|
|
337
332
|
const LLMCallSiteConfig = LLMConfigFragment.extend({
|
|
338
333
|
profile: z.string().min(1).optional(),
|
|
339
334
|
});
|
|
340
|
-
|
|
335
|
+
type LLMCallSiteConfig = z.infer<typeof LLMCallSiteConfig>;
|
|
341
336
|
|
|
342
337
|
// ---------------------------------------------------------------------------
|
|
343
338
|
// Top-level LLM schema
|
|
@@ -1,29 +1,82 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
3
|
+
const DEFAULT_WORKER_CONCURRENCY = 2;
|
|
4
|
+
const DEFAULT_SLOW_LLM_CONCURRENCY = 1;
|
|
5
|
+
const DEFAULT_FAST_CONCURRENCY = 2;
|
|
6
|
+
const DEFAULT_EMBED_CONCURRENCY = 2;
|
|
7
|
+
|
|
8
|
+
const positiveInt = (field: string) =>
|
|
9
|
+
z
|
|
10
|
+
.number({ error: `memory.jobs.${field} must be a number` })
|
|
11
|
+
.int(`memory.jobs.${field} must be an integer`)
|
|
12
|
+
.positive(`memory.jobs.${field} must be a positive integer`);
|
|
13
|
+
|
|
14
|
+
// Input shape allows all fields to be omitted so we can distinguish
|
|
15
|
+
// "user explicitly set workerConcurrency" from "user accepted the default"
|
|
16
|
+
// when deriving lane caps. The output shape (after transform) always has
|
|
17
|
+
// all four fields populated.
|
|
18
|
+
const MemoryJobsConfigInputSchema = z.object({
|
|
19
|
+
workerConcurrency: positiveInt("workerConcurrency")
|
|
20
|
+
.optional()
|
|
21
|
+
.describe("Number of concurrent workers processing memory jobs"),
|
|
22
|
+
stalledJobTimeoutMs: positiveInt("stalledJobTimeoutMs")
|
|
23
|
+
.default(30 * 60 * 1000)
|
|
24
|
+
.describe(
|
|
25
|
+
"Timeout in milliseconds after which a stalled memory job is considered failed",
|
|
26
|
+
),
|
|
27
|
+
slowLlmConcurrency: positiveInt("slowLlmConcurrency")
|
|
28
|
+
.optional()
|
|
29
|
+
.describe(
|
|
30
|
+
"Concurrent slow LLM-bound jobs (graph consolidation, narrative refine, etc.)",
|
|
31
|
+
),
|
|
32
|
+
fastConcurrency: positiveInt("fastConcurrency")
|
|
33
|
+
.optional()
|
|
34
|
+
.describe(
|
|
35
|
+
"Concurrent fast jobs (concept-page embed, prunes, media processing, etc.)",
|
|
36
|
+
),
|
|
37
|
+
embedConcurrency: positiveInt("embedConcurrency")
|
|
38
|
+
.optional()
|
|
39
|
+
.describe(
|
|
40
|
+
"Concurrent segment-embed jobs (gated by Qdrant circuit breaker)",
|
|
41
|
+
),
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
export const MemoryJobsConfigSchema = MemoryJobsConfigInputSchema.transform(
|
|
45
|
+
(input) => {
|
|
46
|
+
// When `workerConcurrency` is explicitly set but lane caps are not,
|
|
47
|
+
// derive lane caps so existing user configs gain the per-lane fix
|
|
48
|
+
// without edits. Explicit lane caps always win.
|
|
49
|
+
const workerConcurrencyExplicit = input.workerConcurrency !== undefined;
|
|
50
|
+
const workerConcurrency =
|
|
51
|
+
input.workerConcurrency ?? DEFAULT_WORKER_CONCURRENCY;
|
|
52
|
+
|
|
53
|
+
const slowLlmConcurrency =
|
|
54
|
+
input.slowLlmConcurrency ??
|
|
55
|
+
(workerConcurrencyExplicit
|
|
56
|
+
? Math.max(1, Math.floor(workerConcurrency / 2))
|
|
57
|
+
: DEFAULT_SLOW_LLM_CONCURRENCY);
|
|
58
|
+
|
|
59
|
+
const fastConcurrency =
|
|
60
|
+
input.fastConcurrency ??
|
|
61
|
+
(workerConcurrencyExplicit
|
|
62
|
+
? workerConcurrency
|
|
63
|
+
: DEFAULT_FAST_CONCURRENCY);
|
|
64
|
+
|
|
65
|
+
const embedConcurrency =
|
|
66
|
+
input.embedConcurrency ??
|
|
67
|
+
(workerConcurrencyExplicit
|
|
68
|
+
? workerConcurrency
|
|
69
|
+
: DEFAULT_EMBED_CONCURRENCY);
|
|
70
|
+
|
|
71
|
+
return {
|
|
72
|
+
workerConcurrency,
|
|
73
|
+
stalledJobTimeoutMs: input.stalledJobTimeoutMs,
|
|
74
|
+
slowLlmConcurrency,
|
|
75
|
+
fastConcurrency,
|
|
76
|
+
embedConcurrency,
|
|
77
|
+
};
|
|
78
|
+
},
|
|
79
|
+
).describe("Memory background job processing configuration");
|
|
27
80
|
|
|
28
81
|
export const MemoryRetentionConfigSchema = z
|
|
29
82
|
.object({
|
|
@@ -87,6 +87,15 @@ export const MemoryV2ConfigSchema = z
|
|
|
87
87
|
.describe(
|
|
88
88
|
"Number of top-activation concept pages considered for injection per turn",
|
|
89
89
|
),
|
|
90
|
+
ann_candidate_limit: z
|
|
91
|
+
.number({ error: "memory.v2.ann_candidate_limit must be a number" })
|
|
92
|
+
.int("memory.v2.ann_candidate_limit must be an integer")
|
|
93
|
+
.positive("memory.v2.ann_candidate_limit must be a positive integer")
|
|
94
|
+
.nullable()
|
|
95
|
+
.default(null)
|
|
96
|
+
.describe(
|
|
97
|
+
"Per-channel cap on the unrestricted ANN candidate query (dense and sparse each return up to this many hits before they are unioned and fed into the activation pipeline). `null` = unlimited (every page in the v2 collection is eligible). Increase or null this out to surface more candidates at the cost of higher per-turn embedding/scoring work.",
|
|
98
|
+
),
|
|
90
99
|
top_k_skills: z
|
|
91
100
|
.number({ error: "memory.v2.top_k_skills must be a number" })
|
|
92
101
|
.int()
|
|
@@ -107,17 +116,52 @@ export const MemoryV2ConfigSchema = z
|
|
|
107
116
|
.number({ error: "memory.v2.dense_weight must be a number" })
|
|
108
117
|
.min(0, "memory.v2.dense_weight must be >= 0")
|
|
109
118
|
.max(1, "memory.v2.dense_weight must be <= 1")
|
|
110
|
-
.default(0.
|
|
119
|
+
.default(0.85)
|
|
111
120
|
.describe(
|
|
112
|
-
"Weight on dense (cosine) similarity in the hybrid retrieval score",
|
|
121
|
+
"Weight on dense (cosine) similarity in the hybrid retrieval score — dense embeddings dominate the score.",
|
|
113
122
|
),
|
|
114
123
|
sparse_weight: z
|
|
115
124
|
.number({ error: "memory.v2.sparse_weight must be a number" })
|
|
116
125
|
.min(0, "memory.v2.sparse_weight must be >= 0")
|
|
117
126
|
.max(1, "memory.v2.sparse_weight must be <= 1")
|
|
118
|
-
.default(0.
|
|
127
|
+
.default(0.15)
|
|
128
|
+
.describe(
|
|
129
|
+
"Weight on sparse (BM25-style) similarity in the hybrid retrieval score — sparse acts as a discriminator for keyword-rich queries.",
|
|
130
|
+
),
|
|
131
|
+
// Adaptive sparse-weighting knobs. Both fields are intentionally
|
|
132
|
+
// optional with no default — the schema serialiser drops absent
|
|
133
|
+
// optionals so these stay invisible to operators who never tune them.
|
|
134
|
+
// The defaults live in `effectiveWeights` (sim.ts).
|
|
135
|
+
min_sparse_spread: z
|
|
136
|
+
.number({ error: "memory.v2.min_sparse_spread must be a number" })
|
|
137
|
+
.min(0, "memory.v2.min_sparse_spread must be >= 0")
|
|
138
|
+
.max(1, "memory.v2.min_sparse_spread must be <= 1")
|
|
139
|
+
.optional()
|
|
140
|
+
.describe(
|
|
141
|
+
"Adaptive sparse weighting: when the spread (max - min) of normalized sparse scores across the candidate hit set falls below this, sparse contribution collapses to 0. Linear interpolation between this and `full_sparse_spread`. Optional escape hatch — leave unset to use the built-in default.",
|
|
142
|
+
),
|
|
143
|
+
full_sparse_spread: z
|
|
144
|
+
.number({ error: "memory.v2.full_sparse_spread must be a number" })
|
|
145
|
+
.min(0, "memory.v2.full_sparse_spread must be >= 0")
|
|
146
|
+
.max(1, "memory.v2.full_sparse_spread must be <= 1")
|
|
147
|
+
.optional()
|
|
148
|
+
.describe(
|
|
149
|
+
"Adaptive sparse weighting: at or above this spread, sparse weight stays at the configured `sparse_weight`. Optional escape hatch — leave unset to use the built-in default.",
|
|
150
|
+
),
|
|
151
|
+
bm25_k1: z
|
|
152
|
+
.number({ error: "memory.v2.bm25_k1 must be a number" })
|
|
153
|
+
.min(0, "memory.v2.bm25_k1 must be >= 0")
|
|
154
|
+
.default(1.2)
|
|
155
|
+
.describe(
|
|
156
|
+
"BM25 term-frequency saturation parameter. Standard Lucene default — increase to make repeated mentions of a term matter more, decrease to flatten the curve.",
|
|
157
|
+
),
|
|
158
|
+
bm25_b: z
|
|
159
|
+
.number({ error: "memory.v2.bm25_b must be a number" })
|
|
160
|
+
.min(0, "memory.v2.bm25_b must be >= 0")
|
|
161
|
+
.max(1, "memory.v2.bm25_b must be <= 1")
|
|
162
|
+
.default(0.4)
|
|
119
163
|
.describe(
|
|
120
|
-
"
|
|
164
|
+
"BM25 document-length normalization. 0 disables length normalization, 1 fully normalizes. Lucene's default is 0.75 (tuned for narrative/web corpora); we run lower because concept-page collections include structured list pages with high information density per word — full Lucene normalization over-penalizes them.",
|
|
121
165
|
),
|
|
122
166
|
consolidation_interval_hours: z
|
|
123
167
|
.number({
|
|
@@ -10,6 +10,12 @@ export const PlatformConfigSchema = z
|
|
|
10
10
|
)
|
|
11
11
|
.default("")
|
|
12
12
|
.describe("Base URL of the Vellum platform API"),
|
|
13
|
+
subdomain: z
|
|
14
|
+
.string({ error: "platform.subdomain must be a string" })
|
|
15
|
+
.default("")
|
|
16
|
+
.describe(
|
|
17
|
+
"Registered subdomain on vellum.me (e.g. 'apollobot' → apollobot.vellum.me). Set automatically by 'assistant domain register'.",
|
|
18
|
+
),
|
|
13
19
|
})
|
|
14
20
|
.describe("Vellum platform connection settings");
|
|
15
21
|
|
|
@@ -4,7 +4,7 @@ import { SttServiceSchema } from "./stt.js";
|
|
|
4
4
|
import { TtsServiceSchema } from "./tts.js";
|
|
5
5
|
|
|
6
6
|
const ServiceModeSchema = z.enum(["managed", "your-own"]);
|
|
7
|
-
|
|
7
|
+
type ServiceMode = z.infer<typeof ServiceModeSchema>;
|
|
8
8
|
|
|
9
9
|
export const VALID_INFERENCE_PROVIDERS = [
|
|
10
10
|
"anthropic",
|
|
@@ -26,7 +26,6 @@ const VALID_WEB_SEARCH_PROVIDERS = [
|
|
|
26
26
|
const BaseServiceSchema = z.object({
|
|
27
27
|
mode: ServiceModeSchema.default("your-own"),
|
|
28
28
|
});
|
|
29
|
-
export type BaseService = z.infer<typeof BaseServiceSchema>;
|
|
30
29
|
|
|
31
30
|
/**
|
|
32
31
|
* Inference service entry. Carries only the routing `mode`
|
|
@@ -37,52 +36,41 @@ export type BaseService = z.infer<typeof BaseServiceSchema>;
|
|
|
37
36
|
* workspace migration `039-drop-legacy-llm-keys`.
|
|
38
37
|
*/
|
|
39
38
|
const InferenceServiceSchema = BaseServiceSchema;
|
|
40
|
-
export type InferenceService = z.infer<typeof InferenceServiceSchema>;
|
|
41
39
|
|
|
42
40
|
const ImageGenerationServiceSchema = BaseServiceSchema.extend({
|
|
43
41
|
provider: z.enum(VALID_IMAGE_GEN_PROVIDERS).default("gemini"),
|
|
44
42
|
model: z.string().default("gemini-3.1-flash-image-preview"),
|
|
45
43
|
});
|
|
46
|
-
export type ImageGenerationService = z.infer<
|
|
47
|
-
typeof ImageGenerationServiceSchema
|
|
48
|
-
>;
|
|
49
44
|
|
|
50
45
|
const WebSearchServiceSchema = BaseServiceSchema.extend({
|
|
51
46
|
provider: z
|
|
52
47
|
.enum(VALID_WEB_SEARCH_PROVIDERS)
|
|
53
48
|
.default("inference-provider-native"),
|
|
54
49
|
});
|
|
55
|
-
export type WebSearchService = z.infer<typeof WebSearchServiceSchema>;
|
|
56
50
|
|
|
57
51
|
const GoogleOAuthServiceSchema = BaseServiceSchema.extend({
|
|
58
52
|
mode: ServiceModeSchema.default("your-own"),
|
|
59
53
|
});
|
|
60
|
-
export type GoogleOAuthService = z.infer<typeof GoogleOAuthServiceSchema>;
|
|
61
54
|
|
|
62
55
|
const OutlookOAuthServiceSchema = BaseServiceSchema.extend({
|
|
63
56
|
mode: ServiceModeSchema.default("your-own"),
|
|
64
57
|
});
|
|
65
|
-
export type OutlookOAuthService = z.infer<typeof OutlookOAuthServiceSchema>;
|
|
66
58
|
|
|
67
59
|
const LinearOAuthServiceSchema = BaseServiceSchema.extend({
|
|
68
60
|
mode: ServiceModeSchema.default("your-own"),
|
|
69
61
|
});
|
|
70
|
-
export type LinearOAuthService = z.infer<typeof LinearOAuthServiceSchema>;
|
|
71
62
|
|
|
72
63
|
const GitHubOAuthServiceSchema = BaseServiceSchema.extend({
|
|
73
64
|
mode: ServiceModeSchema.default("your-own"),
|
|
74
65
|
});
|
|
75
|
-
export type GitHubOAuthService = z.infer<typeof GitHubOAuthServiceSchema>;
|
|
76
66
|
|
|
77
67
|
const NotionOAuthServiceSchema = BaseServiceSchema.extend({
|
|
78
68
|
mode: ServiceModeSchema.default("your-own"),
|
|
79
69
|
});
|
|
80
|
-
export type NotionOAuthService = z.infer<typeof NotionOAuthServiceSchema>;
|
|
81
70
|
|
|
82
71
|
const TwitterOAuthServiceSchema = BaseServiceSchema.extend({
|
|
83
72
|
mode: ServiceModeSchema.default("your-own"),
|
|
84
73
|
});
|
|
85
|
-
export type TwitterOAuthService = z.infer<typeof TwitterOAuthServiceSchema>;
|
|
86
74
|
|
|
87
75
|
/**
|
|
88
76
|
* `services.meet.host.*` — daemon-side knobs for the externalized meet-join
|
|
@@ -106,7 +94,6 @@ const MeetHostConfigSchema = z
|
|
|
106
94
|
),
|
|
107
95
|
})
|
|
108
96
|
.describe("Daemon-side configuration for the external meet-join skill host");
|
|
109
|
-
export type MeetHostConfig = z.infer<typeof MeetHostConfigSchema>;
|
|
110
97
|
|
|
111
98
|
/**
|
|
112
99
|
* Daemon-side `services.meet` block. Intentionally distinct from the
|
|
@@ -120,7 +107,6 @@ const MeetDaemonServiceSchema = z
|
|
|
120
107
|
host: MeetHostConfigSchema.default(MeetHostConfigSchema.parse({})),
|
|
121
108
|
})
|
|
122
109
|
.describe("meet-join skill daemon-side configuration");
|
|
123
|
-
export type MeetDaemonService = z.infer<typeof MeetDaemonServiceSchema>;
|
|
124
110
|
|
|
125
111
|
export const ServicesSchema = z.object({
|
|
126
112
|
inference: InferenceServiceSchema.default(InferenceServiceSchema.parse({})),
|
|
@@ -149,9 +149,3 @@ export const SkillsConfigSchema = z
|
|
|
149
149
|
);
|
|
150
150
|
|
|
151
151
|
export type SkillEntryConfig = z.infer<typeof SkillEntryConfigSchema>;
|
|
152
|
-
export type SkillsLoadConfig = z.infer<typeof SkillsLoadConfigSchema>;
|
|
153
|
-
export type SkillsInstallConfig = z.infer<typeof SkillsInstallConfigSchema>;
|
|
154
|
-
export type RemoteProviderConfig = z.infer<typeof RemoteProviderConfigSchema>;
|
|
155
|
-
export type RemoteProvidersConfig = z.infer<typeof RemoteProvidersConfigSchema>;
|
|
156
|
-
export type RemotePolicyConfig = z.infer<typeof RemotePolicyConfigSchema>;
|
|
157
|
-
export type SkillsConfig = z.infer<typeof SkillsConfigSchema>;
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
* updates propagate automatically. User-created profiles (keyed by
|
|
12
12
|
* different names) are never touched.
|
|
13
13
|
*/
|
|
14
|
-
|
|
14
|
+
const MANAGED_PROFILE_SEED_DATA: Record<string, ProfileEntry> = {
|
|
15
15
|
balanced: {
|
|
16
16
|
source: "managed",
|
|
17
17
|
label: "Balanced",
|
|
@@ -961,19 +961,6 @@ export function updateChannelStatus(
|
|
|
961
961
|
return parseChannel(existing);
|
|
962
962
|
}
|
|
963
963
|
|
|
964
|
-
/**
|
|
965
|
-
* Update the lastSeenAt timestamp on a contact channel by its primary key.
|
|
966
|
-
* Optimized for the hot path — single UPDATE with no prior SELECT.
|
|
967
|
-
*/
|
|
968
|
-
export function updateChannelLastSeenById(channelId: string): void {
|
|
969
|
-
const db = getDb();
|
|
970
|
-
const now = Date.now();
|
|
971
|
-
db.update(contactChannels)
|
|
972
|
-
.set({ lastSeenAt: now, updatedAt: now })
|
|
973
|
-
.where(eq(contactChannels.id, channelId))
|
|
974
|
-
.run();
|
|
975
|
-
}
|
|
976
|
-
|
|
977
964
|
/**
|
|
978
965
|
* Update a guardian contact's principalId and its channel's identity fields.
|
|
979
966
|
* Used for healing guardian binding drift when the JWT principal no longer
|
|
@@ -1037,23 +1024,6 @@ export function updateContactPrincipalAndChannel(
|
|
|
1037
1024
|
return true;
|
|
1038
1025
|
}
|
|
1039
1026
|
|
|
1040
|
-
/**
|
|
1041
|
-
* Atomically increment interactionCount and set lastInteraction on a contact channel.
|
|
1042
|
-
* Optimized for the hot path — single UPDATE with no prior SELECT.
|
|
1043
|
-
*/
|
|
1044
|
-
export function updateChannelInteraction(channelId: string): void {
|
|
1045
|
-
const db = getDb();
|
|
1046
|
-
const now = Date.now();
|
|
1047
|
-
db.update(contactChannels)
|
|
1048
|
-
.set({
|
|
1049
|
-
lastInteraction: now,
|
|
1050
|
-
interactionCount: sql`${contactChannels.interactionCount} + 1`,
|
|
1051
|
-
updatedAt: now,
|
|
1052
|
-
})
|
|
1053
|
-
.where(eq(contactChannels.id, channelId))
|
|
1054
|
-
.run();
|
|
1055
|
-
}
|
|
1056
|
-
|
|
1057
1027
|
// ── Assistant Contact Metadata ──────────────────────────────────────
|
|
1058
1028
|
|
|
1059
1029
|
function parseAssistantMetadata(
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
|
|
9
9
|
import type { ChannelId } from "../channels/types.js";
|
|
10
10
|
import { canonicalizeInboundIdentity } from "../util/canonicalize-identity.js";
|
|
11
|
-
import { getLogger } from "../util/logger.js";
|
|
12
11
|
import { emitContactChange } from "./contact-events.js";
|
|
13
12
|
import {
|
|
14
13
|
findContactChannel,
|
|
@@ -16,8 +15,6 @@ import {
|
|
|
16
15
|
getChannelById,
|
|
17
16
|
getContact,
|
|
18
17
|
getContactInternal,
|
|
19
|
-
updateChannelInteraction,
|
|
20
|
-
updateChannelLastSeenById,
|
|
21
18
|
updateChannelStatus,
|
|
22
19
|
upsertContact,
|
|
23
20
|
} from "./contact-store.js";
|
|
@@ -28,7 +25,6 @@ import type {
|
|
|
28
25
|
ContactWriteResult,
|
|
29
26
|
} from "./types.js";
|
|
30
27
|
|
|
31
|
-
const log = getLogger("contacts-write");
|
|
32
28
|
|
|
33
29
|
// ── Guardian operations ──────────────────────────────────────────────
|
|
34
30
|
|
|
@@ -179,26 +175,3 @@ export function revokeMember(
|
|
|
179
175
|
return { contact, channel: updatedChannel };
|
|
180
176
|
}
|
|
181
177
|
|
|
182
|
-
/**
|
|
183
|
-
* Update the lastSeenAt timestamp on a contact channel by its ID.
|
|
184
|
-
* Expects a plain channel UUID (ContactChannel.id), not the composite API ID.
|
|
185
|
-
*/
|
|
186
|
-
export function touchChannelLastSeen(channelId: string): void {
|
|
187
|
-
try {
|
|
188
|
-
updateChannelLastSeenById(channelId);
|
|
189
|
-
} catch (err) {
|
|
190
|
-
log.warn({ err }, "Failed to update channel lastSeenAt");
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
/**
|
|
195
|
-
* Track an interaction on the specific channel that received it.
|
|
196
|
-
* Swallows errors to avoid disrupting the inbound message hot path.
|
|
197
|
-
*/
|
|
198
|
-
export function touchContactInteraction(channelId: string): void {
|
|
199
|
-
try {
|
|
200
|
-
updateChannelInteraction(channelId);
|
|
201
|
-
} catch (err) {
|
|
202
|
-
log.warn({ err }, "Failed to update channel interaction stats");
|
|
203
|
-
}
|
|
204
|
-
}
|
|
@@ -22,8 +22,7 @@ import { truncateToolResultsAcrossHistory } from "./tool-result-truncation.js";
|
|
|
22
22
|
const log = getLogger("context-window");
|
|
23
23
|
|
|
24
24
|
export const CONTEXT_SUMMARY_MARKER = "<context_summary>";
|
|
25
|
-
|
|
26
|
-
"conversationSummarization";
|
|
25
|
+
const CONVERSATION_SUMMARY_CALL_SITE: LLMCallSite = "conversationSummarization";
|
|
27
26
|
const MAX_BLOCK_PREVIEW_CHARS = 3000;
|
|
28
27
|
const MAX_FALLBACK_SUMMARY_CHARS = 12000;
|
|
29
28
|
const COMPACTION_COOLDOWN_MS = 2 * 60 * 1000;
|
|
@@ -28,12 +28,12 @@ export const CES_SECURE_INSTALL_FLAG_KEY = "ces-secure-install" as const;
|
|
|
28
28
|
/** Gate for credential grant and audit inspection surfaces. */
|
|
29
29
|
export const CES_GRANT_AUDIT_FLAG_KEY = "ces-grant-audit" as const;
|
|
30
30
|
|
|
31
|
-
/** Gate for managed sidecar transport in containerized environments. */
|
|
32
|
-
export const CES_MANAGED_SIDECAR_FLAG_KEY = "ces-managed-sidecar" as const;
|
|
33
|
-
|
|
34
31
|
/** Gate for routing credential reads/writes through the CES process. */
|
|
35
32
|
const CES_CREDENTIAL_BACKEND_FLAG_KEY = "ces-credential-backend" as const;
|
|
36
33
|
|
|
34
|
+
/** Gate for managed sidecar transport in containerized environments. */
|
|
35
|
+
export const CES_MANAGED_SIDECAR_FLAG_KEY = "ces-managed-sidecar" as const;
|
|
36
|
+
|
|
37
37
|
// ---------------------------------------------------------------------------
|
|
38
38
|
// Public API — predicate functions
|
|
39
39
|
// ---------------------------------------------------------------------------
|
|
@@ -66,13 +66,6 @@ export function isCesGrantAuditEnabled(config: AssistantConfig): boolean {
|
|
|
66
66
|
return isAssistantFeatureFlagEnabled(CES_GRANT_AUDIT_FLAG_KEY, config);
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
/**
|
|
70
|
-
* Whether managed sidecar transport should be used for CES communication.
|
|
71
|
-
*/
|
|
72
|
-
export function isCesManagedSidecarEnabled(config: AssistantConfig): boolean {
|
|
73
|
-
return isAssistantFeatureFlagEnabled(CES_MANAGED_SIDECAR_FLAG_KEY, config);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
69
|
/**
|
|
77
70
|
* Whether credential reads and writes should be routed through the CES process.
|
|
78
71
|
*/
|
|
@@ -81,3 +74,10 @@ export function isCesCredentialBackendEnabled(
|
|
|
81
74
|
): boolean {
|
|
82
75
|
return isAssistantFeatureFlagEnabled(CES_CREDENTIAL_BACKEND_FLAG_KEY, config);
|
|
83
76
|
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Whether managed sidecar transport should be used for CES communication.
|
|
80
|
+
*/
|
|
81
|
+
export function isCesManagedSidecarEnabled(config: AssistantConfig): boolean {
|
|
82
|
+
return isAssistantFeatureFlagEnabled(CES_MANAGED_SIDECAR_FLAG_KEY, config);
|
|
83
|
+
}
|
|
@@ -12,12 +12,6 @@
|
|
|
12
12
|
* creates a socket-based CesTransport. The CES sidecar manages its own
|
|
13
13
|
* lifecycle; the process manager only manages the transport connection.
|
|
14
14
|
*
|
|
15
|
-
* Feature-flag gate: Managed sidecar mode is controlled by the
|
|
16
|
-
* `ces-managed-sidecar` feature flag (checked via the required
|
|
17
|
-
* AssistantConfig). When the flag is off, the process manager skips
|
|
18
|
-
* managed discovery even in containerized environments, ensuring
|
|
19
|
-
* rollback safety.
|
|
20
|
-
*
|
|
21
15
|
* Managed env contract:
|
|
22
16
|
* - CES_BOOTSTRAP_SOCKET — Path to the bootstrap Unix socket (shared emptyDir)
|
|
23
17
|
* - /assistant-data-ro — Assistant data mounted read-only into the CES sidecar
|
|
@@ -42,7 +36,6 @@ import {
|
|
|
42
36
|
type LocalSourceDiscoverySuccess,
|
|
43
37
|
type ManagedDiscoverySuccess,
|
|
44
38
|
} from "./executable-discovery.js";
|
|
45
|
-
import { isCesManagedSidecarEnabled } from "./feature-gates.js";
|
|
46
39
|
|
|
47
40
|
const log = getLogger("ces-process-manager");
|
|
48
41
|
|
|
@@ -71,10 +64,8 @@ export const CES_PRIVATE_DATA_DIR = "/ces-data";
|
|
|
71
64
|
|
|
72
65
|
export interface CesProcessManagerConfig {
|
|
73
66
|
/**
|
|
74
|
-
* Assistant configuration
|
|
75
|
-
*
|
|
76
|
-
* feature flag via this config. When omitted (e.g. CLI / admin
|
|
77
|
-
* callers), managed mode is allowed unconditionally.
|
|
67
|
+
* Assistant configuration.
|
|
68
|
+
* Reserved for future feature-flag checks or config-driven behavior.
|
|
78
69
|
*/
|
|
79
70
|
assistantConfig?: AssistantConfig;
|
|
80
71
|
}
|
|
@@ -88,10 +79,6 @@ export interface CesProcessManager {
|
|
|
88
79
|
* Start the CES process (local) or connect to the sidecar (managed).
|
|
89
80
|
* Returns a CesTransport ready for use with createCesClient().
|
|
90
81
|
*
|
|
91
|
-
* When the `ces-managed-sidecar` feature flag is off, managed mode
|
|
92
|
-
* is skipped even in containerized environments — the process manager
|
|
93
|
-
* falls back to local discovery.
|
|
94
|
-
*
|
|
95
82
|
* Throws if CES is unavailable.
|
|
96
83
|
*/
|
|
97
84
|
start(): Promise<CesTransport>;
|
|
@@ -118,7 +105,7 @@ export interface CesProcessManager {
|
|
|
118
105
|
// ---------------------------------------------------------------------------
|
|
119
106
|
|
|
120
107
|
export function createCesProcessManager(
|
|
121
|
-
|
|
108
|
+
_config: CesProcessManagerConfig,
|
|
122
109
|
): CesProcessManager {
|
|
123
110
|
let childProcess: Subprocess | null = null;
|
|
124
111
|
let managedSocket: Socket | null = null;
|
|
@@ -131,31 +118,15 @@ export function createCesProcessManager(
|
|
|
131
118
|
throw new Error("CES process manager is already running");
|
|
132
119
|
}
|
|
133
120
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
discoveryResult = await discoverCes();
|
|
144
|
-
if (discoveryResult.mode === "unavailable") {
|
|
145
|
-
// The managed sidecar bootstrap socket is not present — this happens
|
|
146
|
-
// when the flag is enabled by default but the instance pre-dates the
|
|
147
|
-
// socket volume mount (e.g. existing Docker configs without the
|
|
148
|
-
// ces-bootstrap volume). Warn and fall back to local discovery so
|
|
149
|
-
// these deployments don't fail on upgrade.
|
|
150
|
-
log.warn(
|
|
151
|
-
{ reason: discoveryResult.reason },
|
|
152
|
-
"CES managed sidecar bootstrap socket unavailable — falling back to local CES discovery",
|
|
153
|
-
);
|
|
154
|
-
discoveryResult = discoverLocalCes();
|
|
155
|
-
}
|
|
156
|
-
} else {
|
|
157
|
-
log.info(
|
|
158
|
-
"CES managed sidecar feature flag is off — skipping managed discovery, falling back to local",
|
|
121
|
+
discoveryResult = await discoverCes();
|
|
122
|
+
if (discoveryResult.mode === "unavailable") {
|
|
123
|
+
// The managed sidecar bootstrap socket is not present — this happens
|
|
124
|
+
// when the instance pre-dates the socket volume mount (e.g. existing
|
|
125
|
+
// Docker configs without the ces-bootstrap volume). Warn and fall
|
|
126
|
+
// back to local discovery so these deployments don't fail on upgrade.
|
|
127
|
+
log.warn(
|
|
128
|
+
{ reason: discoveryResult.reason },
|
|
129
|
+
"CES managed sidecar bootstrap socket unavailable — falling back to local CES discovery",
|
|
159
130
|
);
|
|
160
131
|
discoveryResult = discoverLocalCes();
|
|
161
132
|
}
|