@vellumai/assistant 0.7.0 → 0.7.1
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 +6 -7
- package/Dockerfile +1 -0
- package/README.md +2 -2
- package/__tests__/permissions/gateway-threshold-reader.test.ts +79 -139
- package/bun.lock +3 -0
- package/docs/architecture/security.md +18 -16
- package/knip.json +1 -0
- package/node_modules/@vellumai/skill-host-contracts/__tests__/client.test.ts +1 -5
- package/node_modules/@vellumai/skill-host-contracts/src/assistant-event.ts +0 -5
- package/node_modules/@vellumai/skill-host-contracts/src/client.ts +10 -16
- package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +1 -9
- package/node_modules/@vellumai/skill-host-contracts/src/tool-types.ts +12 -12
- package/node_modules/@vellumai/slack-text/bun.lock +24 -0
- package/node_modules/@vellumai/slack-text/package.json +18 -0
- package/node_modules/@vellumai/slack-text/src/index.test.ts +153 -0
- package/node_modules/@vellumai/slack-text/src/index.ts +235 -0
- package/node_modules/@vellumai/slack-text/tsconfig.json +20 -0
- package/openapi.yaml +294 -107
- package/package.json +4 -2
- package/scripts/generate-openapi.ts +16 -111
- package/src/__tests__/agent-wake-override-profile.test.ts +23 -1
- package/src/__tests__/anthropic-provider.test.ts +56 -13
- package/src/__tests__/app-conversation-ids-backfill.test.ts +278 -0
- package/src/__tests__/app-conversation-ids.test.ts +151 -0
- package/src/__tests__/approval-cascade.test.ts +0 -15
- package/src/__tests__/approval-routes-http.test.ts +6 -17
- package/src/__tests__/assistant-event-hub.test.ts +126 -77
- package/src/__tests__/assistant-event.test.ts +0 -5
- package/src/__tests__/assistant-events-sse-hardening.test.ts +37 -15
- package/src/__tests__/assistant-feature-flags-integration.test.ts +0 -29
- package/src/__tests__/background-shell-host-bash.test.ts +34 -43
- package/src/__tests__/call-controller.test.ts +1 -1
- package/src/__tests__/call-site-routing-provider.test.ts +193 -0
- package/src/__tests__/channel-approval-routes.test.ts +10 -296
- package/src/__tests__/channel-approvals.test.ts +25 -17
- package/src/__tests__/channel-guardian.test.ts +100 -146
- package/src/__tests__/checker.test.ts +20 -34
- package/src/__tests__/compact-event-conversation-id-guard.test.ts +50 -0
- package/src/__tests__/compaction-events.test.ts +2 -0
- package/src/__tests__/config-schema.test.ts +6 -48
- package/src/__tests__/config-watcher.test.ts +12 -0
- package/src/__tests__/connection-policy.test.ts +1 -52
- package/src/__tests__/contacts-write.test.ts +2 -64
- package/src/__tests__/context-image-dimensions.test.ts +1 -1
- package/src/__tests__/context-search-memory-source.test.ts +120 -1
- package/src/__tests__/context-search-memory-v2-source.test.ts +383 -0
- package/src/__tests__/context-search-pkb-source.test.ts +49 -0
- package/src/__tests__/context-search-workspace-source.test.ts +9 -22
- package/src/__tests__/context-window-manager.test.ts +46 -0
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +2 -0
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +102 -29
- package/src/__tests__/conversation-agent-loop.test.ts +980 -13
- package/src/__tests__/conversation-analysis-routes.test.ts +12 -10
- package/src/__tests__/conversation-attention-telegram.test.ts +11 -3
- package/src/__tests__/conversation-confirmation-signals.test.ts +0 -291
- package/src/__tests__/conversation-history-web-search.test.ts +4 -3
- package/src/__tests__/conversation-inference-profile-route.test.ts +12 -23
- package/src/__tests__/conversation-lifecycle.test.ts +4 -4
- package/src/__tests__/conversation-process-callsite.test.ts +79 -2
- package/src/__tests__/conversation-queue.test.ts +3 -8
- package/src/__tests__/conversation-routes-disk-view.test.ts +1 -161
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +0 -32
- package/src/__tests__/conversation-routes-slash-commands.test.ts +75 -66
- package/src/__tests__/conversation-runtime-assembly.test.ts +257 -3
- package/src/__tests__/conversation-slash-commands.test.ts +24 -4
- package/src/__tests__/conversation-slash-queue.test.ts +2 -0
- package/src/__tests__/conversation-speed-override.test.ts +0 -3
- package/src/__tests__/conversation-starter-routes.test.ts +79 -2
- package/src/__tests__/conversation-surfaces-standalone-payloads.test.ts +12 -5
- package/src/__tests__/conversation-surfaces-standalone.test.ts +18 -14
- package/src/__tests__/conversation-surfaces-state-update.test.ts +3 -2
- package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +8 -46
- package/src/__tests__/conversation-usage.test.ts +253 -3
- package/src/__tests__/credential-execution-shell-lockdown.test.ts +0 -39
- package/src/__tests__/credential-health-service.test.ts +68 -0
- package/src/__tests__/credential-security-e2e.test.ts +4 -3
- package/src/__tests__/credential-security-invariants.test.ts +1 -5
- package/src/__tests__/credential-token-resolver.test.ts +180 -0
- package/src/__tests__/cu-unified-flow.test.ts +33 -16
- package/src/__tests__/daemon-assistant-events.test.ts +34 -21
- package/src/__tests__/daemon-credential-client.test.ts +4 -1
- package/src/__tests__/db-connection-isolation.test.ts +125 -0
- package/src/__tests__/db-migration-rollback.test.ts +101 -0
- package/src/__tests__/db-slack-compaction-watermark-migration.test.ts +169 -0
- package/src/__tests__/deterministic-verification-control-plane.test.ts +7 -80
- package/src/__tests__/document-conversations.test.ts +332 -0
- package/src/__tests__/embedding-managed-proxy-selection.test.ts +2 -2
- package/src/__tests__/emit-event-signal.test.ts +4 -6
- package/src/__tests__/events-client-registration.test.ts +193 -49
- package/src/__tests__/filing-service.test.ts +58 -7
- package/src/__tests__/first-greeting.test.ts +156 -150
- package/src/__tests__/fixtures/mock-chrome-extension.ts +108 -66
- package/src/__tests__/get-skill-detail-audit.test.ts +3 -8
- package/src/__tests__/guardian-binding-drift-heal.test.ts +1 -1
- package/src/__tests__/guardian-dispatch.test.ts +1 -1
- package/src/__tests__/guardian-grant-minting.test.ts +7 -2
- package/src/__tests__/guardian-routing-invariants.test.ts +7 -2
- package/src/__tests__/guardian-routing-state.test.ts +1 -1
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +32 -11
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +2 -83
- package/src/__tests__/headless-browser-mode.test.ts +4 -9
- package/src/__tests__/headless-browser-navigate.test.ts +21 -20
- package/src/__tests__/heartbeat-service.test.ts +289 -7
- package/src/__tests__/helpers/channel-test-adapter.ts +2 -2
- package/src/__tests__/helpers/create-guardian-binding.ts +91 -0
- package/src/__tests__/host-bash-proxy.test.ts +46 -122
- package/src/__tests__/host-browser-e2e-cloud.test.ts +36 -497
- package/src/__tests__/host-browser-e2e-self-hosted-capability.test.ts +26 -96
- package/src/__tests__/host-browser-proxy.test.ts +111 -185
- package/src/__tests__/host-browser-routes.test.ts +45 -75
- package/src/__tests__/host-browser-ws-events-e2e.test.ts +26 -30
- package/src/__tests__/host-cu-proxy.test.ts +56 -111
- package/src/__tests__/host-file-proxy.test.ts +44 -98
- package/src/__tests__/host-file-read-tool.test.ts +42 -21
- package/src/__tests__/host-shell-tool.test.ts +33 -68
- package/src/__tests__/host-transfer-pending-interactions.test.ts +2 -18
- package/src/__tests__/host-transfer-proxy.test.ts +43 -53
- package/src/__tests__/http-user-message-parity.test.ts +0 -6
- package/src/__tests__/inbound-slack-persistence.test.ts +31 -0
- package/src/__tests__/injector-chain.test.ts +10 -5
- package/src/__tests__/injector-pkb-v2-silenced.test.ts +124 -0
- package/src/__tests__/inline-command-runner.test.ts +0 -66
- package/src/__tests__/inline-skill-load-permissions.test.ts +0 -2
- package/src/__tests__/install-skill-routing.test.ts +1 -13
- package/src/__tests__/llm-callsite-catalog.test.ts +34 -0
- package/src/__tests__/llm-catalog-parity.test.ts +90 -0
- package/src/__tests__/llm-context-resolution.test.ts +180 -0
- package/src/__tests__/llm-resolver.test.ts +80 -12
- package/src/__tests__/llm-usage-store.test.ts +269 -4
- package/src/__tests__/log-export-routes.test.ts +89 -0
- package/src/__tests__/managed-profile-guard.test.ts +225 -0
- package/src/__tests__/managed-skill-lifecycle.test.ts +0 -10
- package/src/__tests__/manual-token-reconciliation.test.ts +334 -0
- package/src/__tests__/memory-v2-static-injector.test.ts +95 -0
- package/src/__tests__/migration-cross-version-compatibility.test.ts +197 -291
- package/src/__tests__/migration-export-http.test.ts +33 -26
- package/src/__tests__/migration-export-streaming.test.ts +18 -10
- package/src/__tests__/migration-export-to-gcs.test.ts +49 -9
- package/src/__tests__/migration-import-commit-http.test.ts +66 -21
- package/src/__tests__/migration-import-from-gcs.test.ts +50 -9
- package/src/__tests__/migration-import-from-url.test.ts +20 -6
- package/src/__tests__/migration-import-preflight-http.test.ts +95 -95
- package/src/__tests__/migration-parity-persistence.test.ts +62 -25
- package/src/__tests__/migration-transport.test.ts +115 -23
- package/src/__tests__/migration-validate-http.test.ts +105 -80
- package/src/__tests__/migration-wizard.test.ts +133 -27
- package/src/__tests__/non-member-access-request.test.ts +1 -1
- package/src/__tests__/notification-guardian-path.test.ts +1 -1
- package/src/__tests__/oauth-store.test.ts +19 -0
- package/src/__tests__/platform-bash-auto-approve.test.ts +21 -12
- package/src/__tests__/prechat-onboarding-contract.test.ts +31 -7
- package/src/__tests__/pricing.test.ts +68 -4
- package/src/__tests__/process-message-background-slack.test.ts +331 -0
- package/src/__tests__/provider-managed-proxy-integration.test.ts +153 -17
- package/src/__tests__/provider-send-message-override-profile.test.ts +50 -0
- package/src/__tests__/provider-usage-tracking.test.ts +208 -0
- package/src/__tests__/reaction-persistence.test.ts +9 -6
- package/src/__tests__/rebind-secrets-screen.test.ts +53 -16
- package/src/__tests__/recording-handler.test.ts +64 -81
- package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +4 -3
- package/src/__tests__/relay-server.test.ts +18 -13
- package/src/__tests__/require-fresh-approval.test.ts +13 -22
- package/src/__tests__/runtime-attachment-metadata.test.ts +1 -1
- package/src/__tests__/runtime-events-sse-parity.test.ts +3 -4
- package/src/__tests__/runtime-events-sse.test.ts +3 -12
- package/src/__tests__/search-skills-unified.test.ts +9 -15
- package/src/__tests__/secret-ingress-cli.test.ts +2 -5
- package/src/__tests__/secret-ingress-http.test.ts +0 -4
- package/src/__tests__/secret-onetime-send.test.ts +4 -2
- package/src/__tests__/secret-prompt-log-hygiene.test.ts +24 -7
- package/src/__tests__/secret-prompter-channel-fallback.test.ts +42 -47
- package/src/__tests__/secret-response-routing.test.ts +29 -15
- package/src/__tests__/secret-routes-managed-proxy.test.ts +5 -1
- package/src/__tests__/secret-scanner.test.ts +2 -545
- package/src/__tests__/send-endpoint-busy.test.ts +9 -24
- package/src/__tests__/settings-routes.test.ts +1 -1
- package/src/__tests__/shell-credential-ref.test.ts +0 -8
- package/src/__tests__/shell-tool-proxy-mode.test.ts +0 -56
- package/src/__tests__/skill-script-runner-sandbox.test.ts +0 -11
- package/src/__tests__/skill-tool-factory.test.ts +97 -0
- package/src/__tests__/skills-file-content-endpoint.test.ts +9 -30
- package/src/__tests__/skills-files-catalog-fallback.test.ts +11 -17
- package/src/__tests__/slack-inbound-verification.test.ts +1 -62
- package/src/__tests__/subagent-fork-notifications.test.ts +57 -47
- package/src/__tests__/subagent-manager-notify.test.ts +70 -70
- package/src/__tests__/subagent-notify-parent.test.ts +80 -83
- package/src/__tests__/system-prompt.test.ts +115 -13
- package/src/__tests__/terminal-tools.test.ts +0 -89
- package/src/__tests__/thread-backfill.test.ts +945 -31
- package/src/__tests__/tool-domain-event-publisher.test.ts +0 -36
- package/src/__tests__/tool-execute-pipeline.test.ts +0 -6
- package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -16
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +9 -19
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +4 -7
- package/src/__tests__/tool-executor.test.ts +12 -19
- package/src/__tests__/tool-metrics-listener.test.ts +0 -35
- package/src/__tests__/tool-side-effects-slack-dm.test.ts +1 -0
- package/src/__tests__/tool-trace-listener.test.ts +0 -17
- package/src/__tests__/transfer-progress-screen.test.ts +63 -26
- package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +2 -149
- package/src/__tests__/trusted-contact-multichannel.test.ts +2 -4
- package/src/__tests__/trusted-contact-verification.test.ts +1 -1
- package/src/__tests__/tts-catalog-parity.test.ts +16 -5
- package/src/__tests__/usage-attribution.test.ts +247 -0
- package/src/__tests__/usage-cli.test.ts +143 -0
- package/src/__tests__/usage-grouped-buckets.test.ts +155 -0
- package/src/__tests__/usage-routes.test.ts +150 -0
- package/src/__tests__/validation-results-screen.test.ts +39 -16
- package/src/__tests__/vbundle-pax-and-symlink.test.ts +12 -3
- package/src/__tests__/vellum-self-knowledge-inline-command.test.ts +49 -137
- package/src/__tests__/verification-control-plane-policy.test.ts +4 -7
- package/src/__tests__/voice-session-bridge.test.ts +5 -5
- package/src/__tests__/workspace-migration-062-drop-memory-v2-edges-json.test.ts +103 -0
- package/src/__tests__/workspace-migration-063-release-notes-dynamic-model-context.test.ts +77 -0
- package/src/__tests__/workspace-migration-064-unwind-main-agent-opus-seed.test.ts +225 -0
- package/src/__tests__/workspace-migration-memory-v2-init.test.ts +8 -30
- package/src/acp/index.ts +0 -15
- package/src/acp/session-manager.ts +37 -34
- package/src/agent/loop.ts +16 -1
- package/src/approvals/AGENTS.md +4 -0
- package/src/approvals/__tests__/guardian-feed-event.test.ts +10 -3
- package/src/approvals/guardian-request-resolvers.ts +10 -2
- package/src/backup/__tests__/backup-worker.test.ts +36 -8
- package/src/backup/__tests__/paths.test.ts +2 -2
- package/src/backup/__tests__/restore.test.ts +45 -28
- package/src/backup/backup-worker.ts +36 -2
- package/src/backup/paths.ts +9 -6
- package/src/browser-session/events.ts +0 -9
- package/src/calls/call-store.ts +1 -34
- package/src/calls/guardian-question-copy.ts +0 -108
- package/src/calls/relay-server.ts +0 -24
- package/src/calls/twilio-rest.ts +0 -38
- package/src/calls/twilio-routes.ts +1 -1
- package/src/calls/voice-session-bridge.ts +7 -38
- package/src/channels/types.ts +1 -36
- package/src/cli/commands/__tests__/cache.test.ts +152 -5
- package/src/cli/commands/__tests__/memory-v2.test.ts +14 -28
- package/src/cli/commands/__tests__/trust.test.ts +21 -387
- package/src/cli/commands/backup.ts +4 -4
- package/src/cli/commands/cache-fs.ts +8 -0
- package/src/cli/commands/cache.ts +153 -82
- package/src/cli/commands/clients.ts +63 -5
- package/src/cli/commands/completions.ts +3 -3
- package/src/cli/commands/contacts.ts +231 -76
- package/src/cli/commands/keys.ts +4 -1
- package/src/cli/commands/memory-v2.ts +24 -52
- package/src/cli/commands/oauth/shared.ts +2 -29
- package/src/cli/commands/pending.ts +102 -0
- package/src/cli/commands/skills.ts +77 -35
- package/src/cli/commands/trust.ts +70 -430
- package/src/cli/commands/usage.ts +25 -16
- package/src/cli/lib/daemon-credential-client.ts +14 -0
- package/src/cli/program.ts +2 -0
- package/src/cli.ts +0 -21
- package/src/config/__tests__/feature-flag-registry-guard.test.ts +2 -2
- package/src/config/bundled-skills/messaging/TOOLS.json +14 -4
- package/src/config/env-registry.ts +12 -2
- package/src/config/env.ts +3 -14
- package/src/config/feature-flag-registry.json +30 -30
- package/src/config/llm-callsite-catalog.ts +12 -0
- package/src/config/llm-context-resolution.ts +80 -0
- package/src/config/llm-resolver.ts +58 -22
- package/src/config/loader.ts +3 -3
- package/src/config/schema.ts +2 -158
- package/src/config/schemas/__tests__/memory-v2.test.ts +1 -0
- package/src/config/schemas/call-site-catalog.ts +271 -0
- package/src/config/schemas/calls.ts +5 -5
- package/src/config/schemas/inference.ts +1 -1
- package/src/config/schemas/ingress.ts +1 -1
- package/src/config/schemas/llm.ts +31 -3
- package/src/config/schemas/memory-retrieval.ts +2 -2
- package/src/config/schemas/memory-v2.ts +9 -0
- package/src/config/schemas/security.ts +1 -42
- package/src/config/schemas/services.ts +6 -6
- package/src/config/schemas/skills.ts +5 -5
- package/src/config/schemas/tts.ts +1 -1
- package/src/config/seed-inference-profiles.ts +117 -0
- package/src/config/skills.ts +0 -90
- package/src/config/types.ts +3 -6
- package/src/contacts/contact-store.ts +0 -17
- package/src/contacts/contacts-write.ts +1 -105
- package/src/context/window-manager.ts +44 -5
- package/src/credential-execution/process-manager.ts +34 -10
- package/src/credential-health/credential-health-service.ts +21 -16
- package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +75 -82
- package/src/daemon/__tests__/daemon-skill-host.test.ts +2 -9
- package/src/daemon/connection-policy.ts +1 -26
- package/src/daemon/conversation-agent-loop-handlers.ts +53 -4
- package/src/daemon/conversation-agent-loop.ts +277 -36
- package/src/daemon/conversation-history.ts +8 -8
- package/src/daemon/conversation-launch.ts +20 -135
- package/src/daemon/conversation-lifecycle.ts +1 -1
- package/src/daemon/conversation-messaging.ts +1 -0
- package/src/daemon/conversation-process.ts +83 -163
- package/src/daemon/conversation-runtime-assembly.ts +219 -76
- package/src/daemon/conversation-slash.ts +47 -5
- package/src/daemon/conversation-store.ts +7 -31
- package/src/daemon/conversation-surfaces.ts +22 -28
- package/src/daemon/conversation-tool-setup.ts +3 -33
- package/src/daemon/conversation-usage.ts +36 -0
- package/src/daemon/conversation.ts +117 -233
- package/src/daemon/daemon-control.ts +3 -71
- package/src/daemon/daemon-skill-host.ts +8 -11
- package/src/daemon/dictation-profile-store.ts +2 -26
- package/src/daemon/first-greeting.ts +44 -156
- package/src/daemon/handlers/config-channels.ts +12 -12
- package/src/daemon/handlers/config-ingress.ts +4 -165
- package/src/daemon/handlers/config-model.ts +1 -1
- package/src/daemon/handlers/config-voice.ts +0 -42
- package/src/daemon/handlers/conversations.ts +11 -190
- package/src/daemon/handlers/recording.ts +26 -158
- package/src/daemon/handlers/shared.ts +23 -71
- package/src/daemon/handlers/skills.ts +42 -93
- package/src/daemon/host-bash-proxy.ts +67 -45
- package/src/daemon/host-browser-proxy.ts +65 -27
- package/src/daemon/host-cu-proxy.ts +40 -39
- package/src/daemon/host-file-proxy.ts +58 -37
- package/src/daemon/host-transfer-proxy.ts +84 -46
- package/src/daemon/lifecycle.ts +49 -15
- package/src/daemon/message-types/conversations.ts +7 -0
- package/src/daemon/message-types/host-bash.ts +1 -0
- package/src/daemon/message-types/host-cu.ts +1 -0
- package/src/daemon/message-types/host-file.ts +1 -0
- package/src/daemon/message-types/host-transfer.ts +1 -0
- package/src/daemon/message-types/messages.ts +10 -9
- package/src/daemon/message-types/workspace.ts +1 -1
- package/src/daemon/process-message.ts +102 -239
- package/src/daemon/server.ts +13 -462
- package/src/daemon/shutdown-handlers.ts +2 -2
- package/src/daemon/tool-side-effects.ts +125 -107
- package/src/daemon/trust-context.ts +13 -0
- package/src/daemon/wake-target-adapter.ts +4 -9
- package/src/events/domain-events.ts +0 -8
- package/src/events/tool-audit-listener.ts +3 -1
- package/src/events/tool-domain-event-publisher.ts +0 -10
- package/src/events/tool-metrics-listener.ts +0 -17
- package/src/events/tool-trace-listener.ts +0 -14
- package/src/filing/filing-service.ts +13 -1
- package/src/heartbeat/__tests__/heartbeat-feed-event.test.ts +6 -2
- package/src/heartbeat/heartbeat-service.ts +23 -5
- package/src/home/__tests__/feed-writer.test.ts +0 -4
- package/src/home/__tests__/relationship-state-writer.test.ts +30 -0
- package/src/home/feed-writer.ts +1 -2
- package/src/home/relationship-state-writer.ts +16 -3
- package/src/ipc/__tests__/browser-ipc.test.ts +2 -12
- package/src/ipc/__tests__/skill-server-bidirectional.test.ts +0 -1
- package/src/ipc/assistant-server.ts +3 -10
- package/src/ipc/routes/__tests__/memory-v2-backfill.test.ts +39 -20
- package/src/ipc/routes/route-adapter.ts +1 -1
- package/src/ipc/routes/trust-rules.test.ts +0 -95
- package/src/ipc/skill-ipc-types.ts +41 -0
- package/src/ipc/skill-routes/__tests__/events-ipc.test.ts +13 -27
- package/src/ipc/skill-routes/__tests__/identity.test.ts +4 -23
- package/src/ipc/skill-routes/events.ts +12 -23
- package/src/ipc/skill-routes/identity.ts +4 -17
- package/src/ipc/skill-routes/index.ts +1 -1
- package/src/ipc/skill-server.ts +6 -39
- package/src/live-voice/__tests__/runtime-websocket-shell.test.ts +0 -8
- package/src/live-voice/protocol.ts +4 -13
- package/src/mcp/manager.ts +0 -5
- package/src/memory/__tests__/fixtures/memory-v2-activation-fixtures.ts +55 -0
- package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +127 -0
- package/src/memory/app-git-service.ts +0 -32
- package/src/memory/app-store.ts +154 -0
- package/src/memory/attachments-store.ts +6 -0
- package/src/memory/context-search/sources/memory-v2.ts +578 -0
- package/src/memory/context-search/sources/memory.ts +5 -0
- package/src/memory/context-search/sources/pkb.ts +10 -1
- package/src/memory/context-search/sources/workspace.ts +3 -2
- package/src/memory/conversation-crud.ts +29 -4
- package/src/memory/conversation-disk-view.ts +1 -5
- package/src/memory/conversation-starter-checkpoints.ts +63 -0
- package/src/memory/db-connection.ts +62 -0
- package/src/memory/db-init.ts +14 -0
- package/src/memory/embedding-backend.ts +3 -21
- package/src/memory/embedding-gemini.ts +0 -2
- package/src/memory/embedding-local.ts +6 -6
- package/src/memory/embedding-ollama.ts +6 -6
- package/src/memory/embedding-openai.ts +6 -6
- package/src/memory/embedding-types.ts +21 -0
- package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +3 -7
- package/src/memory/graph/conversation-graph-memory.ts +35 -13
- package/src/memory/graph/injection.test.ts +2 -2
- package/src/memory/graph/injection.ts +1 -1
- package/src/memory/guardian-action-store.ts +0 -83
- package/src/memory/guardian-approvals.ts +0 -48
- package/src/memory/indexer.ts +1 -15
- package/src/memory/job-handlers/conversation-starters.ts +36 -53
- package/src/memory/job-utils.ts +0 -6
- package/src/memory/jobs-store.ts +0 -1
- package/src/memory/jobs-worker.ts +2 -16
- package/src/memory/llm-request-log-store.ts +0 -41
- package/src/memory/llm-usage-store.ts +129 -43
- package/src/memory/memory-v2-activation-log-store.ts +115 -0
- package/src/memory/migrations/233-document-conversations.ts +54 -0
- package/src/memory/migrations/234-memory-v2-activation-logs.ts +55 -0
- package/src/memory/migrations/235-llm-usage-attribution.ts +31 -0
- package/src/memory/migrations/235-slack-compaction-watermark.ts +44 -0
- package/src/memory/migrations/236-tool-invocations-matched-rule-id.ts +26 -0
- package/src/memory/migrations/__tests__/234-memory-v2-activation-logs.test.ts +182 -0
- package/src/memory/migrations/index.ts +14 -0
- package/src/memory/migrations/registry.ts +24 -0
- package/src/memory/raw-query.ts +2 -68
- package/src/memory/schema/conversations.ts +7 -0
- package/src/memory/schema/infrastructure.ts +25 -0
- package/src/memory/search/semantic.ts +5 -16
- package/src/memory/tool-usage-store.ts +2 -0
- package/src/memory/usage-buckets.ts +40 -1
- package/src/memory/usage-grouped-buckets.ts +127 -0
- package/src/memory/v2/__tests__/activation.test.ts +289 -90
- package/src/memory/v2/__tests__/backfill-jobs.test.ts +2 -129
- package/src/memory/v2/__tests__/consolidation-job.test.ts +28 -11
- package/src/memory/v2/__tests__/edge-index.test.ts +278 -0
- package/src/memory/v2/__tests__/injection.test.ts +384 -15
- package/src/memory/v2/__tests__/migration.test.ts +64 -36
- package/src/memory/v2/__tests__/page-store.test.ts +191 -8
- package/src/memory/v2/__tests__/prompts-consolidation.test.ts +181 -0
- package/src/memory/v2/__tests__/skill-store.test.ts +115 -3
- package/src/memory/v2/__tests__/static-context.test.ts +153 -0
- package/src/memory/v2/activation.ts +168 -97
- package/src/memory/v2/backfill-jobs.ts +15 -100
- package/src/memory/v2/consolidation-job.ts +14 -12
- package/src/memory/v2/edge-index.ts +191 -0
- package/src/memory/v2/injection.ts +182 -58
- package/src/memory/v2/migration.ts +57 -64
- package/src/memory/v2/now-text.ts +2 -3
- package/src/memory/v2/page-store.ts +168 -31
- package/src/memory/v2/prompts/consolidation.ts +118 -42
- package/src/memory/v2/prompts/sweep.ts +3 -3
- package/src/memory/v2/skill-store.ts +55 -7
- package/src/memory/v2/static-context.ts +62 -0
- package/src/memory/v2/types.ts +10 -20
- package/src/memory/validation.ts +0 -11
- package/src/messaging/draft-store.ts +0 -6
- package/src/messaging/provider-types.ts +8 -0
- package/src/messaging/provider.ts +7 -0
- package/src/messaging/providers/gmail/client.ts +1 -121
- package/src/messaging/providers/outlook/client.ts +0 -73
- package/src/messaging/providers/slack/__tests__/adapter-mention-rendering.test.ts +226 -0
- package/src/messaging/providers/slack/adapter.ts +122 -21
- package/src/messaging/providers/slack/backfill.test.ts +95 -6
- package/src/messaging/providers/slack/backfill.ts +89 -11
- package/src/messaging/providers/slack/client.ts +10 -124
- package/src/messaging/providers/slack/message-metadata.ts +12 -2
- package/src/messaging/providers/slack/render-transcript.test.ts +56 -0
- package/src/messaging/providers/slack/render-transcript.ts +126 -25
- package/src/messaging/providers/slack/types.ts +1 -0
- package/src/oauth/connection-resolver.test.ts +8 -0
- package/src/oauth/connection-resolver.ts +8 -16
- package/src/oauth/credential-token-resolver.ts +97 -0
- package/src/oauth/manual-token-connection.ts +30 -34
- package/src/oauth/oauth-store.ts +6 -4
- package/src/outbound-proxy/certs.ts +0 -7
- package/src/outbound-proxy/config.ts +0 -74
- package/src/outbound-proxy/health.ts +0 -44
- package/src/outbound-proxy/index.ts +0 -22
- package/src/permissions/approval-provenance.test.ts +184 -0
- package/src/permissions/approval-provenance.ts +70 -0
- package/src/permissions/checker.ts +4 -1
- package/src/permissions/gateway-threshold-reader.ts +4 -1
- package/src/permissions/prompter.ts +9 -2
- package/src/permissions/secret-prompter.ts +21 -48
- package/src/permissions/types.ts +33 -0
- package/src/permissions/workspace-policy.ts +0 -5
- package/src/platform/sync-identity.ts +0 -8
- package/src/plugins/defaults/injectors.ts +69 -2
- package/src/plugins/defaults/overflow-reduce.ts +3 -2
- package/src/plugins/types.ts +8 -0
- package/src/prompts/system-prompt.ts +34 -70
- package/src/prompts/templates/BOOTSTRAP.md +52 -6
- package/src/prompts/update-bulletin-job.ts +2 -0
- package/src/providers/__tests__/retry-callsite.test.ts +138 -1
- package/src/providers/anthropic/client.ts +72 -33
- package/src/providers/call-site-routing.ts +42 -3
- package/src/providers/gemini/client.ts +18 -2
- package/src/providers/managed-proxy/context.ts +0 -5
- package/src/providers/model-catalog.ts +105 -19
- package/src/providers/openai/chat-completions-provider.ts +6 -0
- package/src/providers/openai/responses-provider.ts +7 -1
- package/src/providers/provider-send-message.ts +45 -2
- package/src/providers/ratelimit.ts +7 -2
- package/src/providers/registry.ts +14 -9
- package/src/providers/retry.ts +96 -8
- package/src/providers/types.ts +13 -0
- package/src/providers/usage-tracking.ts +96 -0
- package/src/runtime/AGENTS.md +10 -6
- package/src/runtime/__tests__/agent-wake.test.ts +89 -0
- package/src/runtime/agent-wake.ts +39 -2
- package/src/runtime/assistant-event-hub.ts +541 -45
- package/src/runtime/assistant-event.ts +1 -6
- package/src/runtime/auth/context.ts +0 -9
- package/src/runtime/auth/middleware.ts +1 -1
- package/src/runtime/auth/route-policy.ts +11 -9
- package/src/runtime/auth/token-service.ts +0 -11
- package/src/runtime/channel-approvals.ts +6 -2
- package/src/runtime/channel-verification-service.ts +3 -5
- package/src/runtime/http-errors.ts +0 -34
- package/src/runtime/http-router.ts +6 -3
- package/src/runtime/http-server.ts +22 -82
- package/src/runtime/http-types.ts +5 -0
- package/src/runtime/interactive-ui.ts +0 -1
- package/src/runtime/middleware/auth.ts +0 -20
- package/src/runtime/migrations/__tests__/v1-test-helpers.ts +112 -0
- package/src/runtime/migrations/__tests__/vbundle-builder-credentials.test.ts +11 -4
- package/src/runtime/migrations/__tests__/vbundle-builder-v1-shape.test.ts +253 -0
- package/src/runtime/migrations/__tests__/vbundle-import-credentials.test.ts +19 -6
- package/src/runtime/migrations/__tests__/vbundle-legacy-user-md.test.ts +71 -27
- package/src/runtime/migrations/__tests__/vbundle-metadata-merge-integration.test.ts +41 -2
- package/src/runtime/migrations/__tests__/vbundle-streaming-importer.test.ts +143 -79
- package/src/runtime/migrations/__tests__/vbundle-streaming-validator.test.ts +143 -23
- package/src/runtime/migrations/__tests__/vbundle-tar-stream.test.ts +2 -2
- package/src/runtime/migrations/__tests__/vbundle-validator-v1-schema.test.ts +371 -0
- package/src/runtime/migrations/migration-transport.ts +46 -13
- package/src/runtime/migrations/migration-wizard.ts +2 -2
- package/src/runtime/migrations/origin-mode.ts +40 -0
- package/src/runtime/migrations/vbundle-builder.ts +133 -79
- package/src/runtime/migrations/vbundle-import-analyzer.ts +9 -7
- package/src/runtime/migrations/vbundle-importer.ts +7 -7
- package/src/runtime/migrations/vbundle-metadata-merge.ts +1 -1
- package/src/runtime/migrations/vbundle-streaming-importer.ts +3 -3
- package/src/runtime/migrations/vbundle-streaming-validator.ts +48 -26
- package/src/runtime/migrations/vbundle-validator.ts +214 -41
- package/src/runtime/pending-interactions.ts +13 -4
- package/src/runtime/routes/__tests__/acp-routes.test.ts +0 -1
- package/src/runtime/routes/__tests__/backup-routes.test.ts +28 -19
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +235 -0
- package/src/runtime/routes/__tests__/llm-call-sites-routes.test.ts +58 -0
- package/src/runtime/routes/__tests__/migration-export-secrets-redacted.test.ts +54 -0
- package/src/runtime/routes/__tests__/migration-import-credential-filter.test.ts +19 -6
- package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +7 -7
- package/src/runtime/routes/acp-routes.test.ts +0 -3
- package/src/runtime/routes/acp-routes.ts +3 -7
- package/src/runtime/routes/app-management-routes.ts +18 -9
- package/src/runtime/routes/approval-routes.ts +55 -14
- package/src/runtime/routes/avatar-routes.ts +3 -5
- package/src/runtime/routes/browser-routes.ts +1 -15
- package/src/runtime/routes/channel-guardian-routes.ts +1 -5
- package/src/runtime/routes/channel-readiness-routes.ts +3 -7
- package/src/runtime/routes/channel-route-shared.ts +2 -28
- package/src/runtime/routes/client-routes.ts +45 -12
- package/src/runtime/routes/consolidation-routes.ts +115 -0
- package/src/runtime/routes/conversation-list-routes.ts +12 -29
- package/src/runtime/routes/conversation-management-routes.ts +14 -51
- package/src/runtime/routes/conversation-query-routes.ts +120 -8
- package/src/runtime/routes/conversation-routes.ts +44 -528
- package/src/runtime/routes/conversation-starter-routes.ts +19 -40
- package/src/runtime/routes/documents-routes.ts +53 -18
- package/src/runtime/routes/events-routes.ts +59 -91
- package/src/runtime/routes/filing-routes.ts +18 -1
- package/src/runtime/routes/guardian-action-routes.ts +4 -9
- package/src/runtime/routes/host-bash-routes.ts +3 -2
- package/src/runtime/routes/host-browser-routes.ts +9 -33
- package/src/runtime/routes/host-cu-routes.ts +6 -1
- package/src/runtime/routes/host-file-routes.ts +3 -2
- package/src/runtime/routes/host-transfer-routes.ts +11 -15
- package/src/runtime/routes/identity-routes.ts +78 -6
- package/src/runtime/routes/inbound-message-handler.ts +580 -137
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +2 -88
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +3 -0
- package/src/runtime/routes/index.ts +4 -0
- package/src/runtime/routes/integrations/slack/channel.ts +0 -24
- package/src/runtime/routes/llm-call-sites-routes.ts +22 -0
- package/src/runtime/routes/memory-v2-routes.ts +10 -15
- package/src/runtime/routes/migration-routes.ts +188 -31
- package/src/runtime/routes/playground/guard.ts +1 -1
- package/src/runtime/routes/playground/index.ts +0 -2
- package/src/runtime/routes/recording-routes.ts +4 -24
- package/src/runtime/routes/rename-conversation-routes.ts +2 -6
- package/src/runtime/routes/schedule-routes.ts +3 -6
- package/src/runtime/routes/secret-routes.ts +87 -18
- package/src/runtime/routes/settings-routes.ts +29 -28
- package/src/runtime/routes/skills-routes.ts +12 -31
- package/src/runtime/routes/suggest-trust-rule-routes.ts +32 -1
- package/src/runtime/routes/task-routes.ts +6 -6
- package/src/runtime/routes/trust-rules-routes.ts +3 -94
- package/src/runtime/routes/types.ts +4 -4
- package/src/runtime/routes/upgrade-broadcast-routes.ts +3 -10
- package/src/runtime/routes/usage-routes.ts +87 -10
- package/src/runtime/routes/user-routes.ts +17 -31
- package/src/runtime/routes/work-items-routes.ts +1 -4
- package/src/runtime/services/__tests__/analyze-conversation.test.ts +2 -2
- package/src/runtime/services/analyze-conversation.ts +7 -17
- package/src/runtime/services/conversation-serializer.ts +2 -4
- package/src/runtime/verification-outbound-actions.ts +1 -1
- package/src/runtime/verification-rate-limiter.ts +1 -1
- package/src/schedule/schedule-store.ts +0 -16
- package/src/security/secret-scanner.ts +14 -547
- package/src/security/secure-keys.ts +31 -11
- package/src/security/token-manager.ts +7 -3
- package/src/signals/cancel.ts +16 -25
- package/src/signals/conversation-undo.ts +2 -27
- package/src/signals/emit-event.ts +1 -2
- package/src/signals/user-message.ts +108 -22
- package/src/skills/catalog-install.ts +1 -0
- package/src/skills/clawhub.ts +2 -2
- package/src/skills/inline-command-runner.ts +1 -7
- package/src/subagent/manager.ts +67 -84
- package/src/tasks/task-store.ts +1 -28
- package/src/telemetry/types.ts +6 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +38 -15
- package/src/telemetry/usage-telemetry-reporter.ts +3 -5
- package/src/tools/acp/spawn.test.ts +1 -2
- package/src/tools/acp/steer.test.ts +1 -2
- package/src/tools/browser/__tests__/browser-status.test.ts +44 -127
- package/src/tools/browser/browser-execution.ts +31 -147
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +92 -68
- package/src/tools/browser/cdp-client/factory.ts +48 -76
- package/src/tools/browser/cdp-client/index.ts +1 -14
- package/src/tools/executor.ts +44 -31
- package/src/tools/host-filesystem/edit.ts +3 -2
- package/src/tools/host-filesystem/read.ts +3 -2
- package/src/tools/host-filesystem/transfer.test.ts +45 -42
- package/src/tools/host-filesystem/transfer.ts +4 -3
- package/src/tools/host-filesystem/write.ts +3 -2
- package/src/tools/host-terminal/host-shell.ts +4 -3
- package/src/tools/network/script-proxy/index.ts +1 -10
- package/src/tools/permission-checker.ts +66 -1
- package/src/tools/skills/sandbox-runner.ts +1 -6
- package/src/tools/skills/skill-tool-factory.ts +32 -0
- package/src/tools/terminal/safe-env.ts +1 -0
- package/src/tools/terminal/shell.ts +2 -78
- package/src/tools/types.ts +12 -39
- package/src/tts/__tests__/provider-catalog.test.ts +2 -2
- package/src/tts/provider-catalog.ts +1 -1
- package/src/usage/actors.ts +2 -1
- package/src/usage/attribution.ts +185 -0
- package/src/usage/pricing.ts +166 -0
- package/src/usage/types.ts +14 -0
- package/src/util/json.ts +13 -0
- package/src/util/logger.ts +3 -3
- package/src/util/pricing.ts +50 -3
- package/src/work-items/work-item-runner.ts +15 -42
- package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +4 -3
- package/src/workspace/migrations/052-seed-default-inference-profiles.ts +3 -3
- package/src/workspace/migrations/060-memory-v2-init.ts +2 -18
- package/src/workspace/migrations/061-move-backup-key-to-workspace.ts +59 -0
- package/src/workspace/migrations/062-drop-memory-v2-edges-json.ts +27 -0
- package/src/workspace/migrations/063-release-notes-dynamic-model-context.ts +70 -0
- package/src/workspace/migrations/064-unwind-main-agent-opus-seed.ts +64 -0
- package/src/workspace/migrations/registry.ts +8 -0
- package/src/workspace/provider-commit-message-generator.ts +3 -3
- package/src/__tests__/sandbox-diagnostics.test.ts +0 -138
- package/src/__tests__/sandbox-host-parity.test.ts +0 -1024
- package/src/__tests__/secret-detection-handler.test.ts +0 -67
- package/src/__tests__/secret-scanner-executor.test.ts +0 -450
- package/src/__tests__/tcc-sandbox-deny.test.ts +0 -198
- package/src/__tests__/terminal-sandbox.test.ts +0 -374
- package/src/__tests__/tool-notification-listener.test.ts +0 -65
- package/src/context/__tests__/microcompact.test.ts +0 -805
- package/src/context/microcompact.ts +0 -443
- package/src/daemon/handlers/slack-channel-oauth-install.ts +0 -197
- package/src/events/tool-notification-listener.ts +0 -17
- package/src/ipc/routes/__tests__/memory-v2-validate.test.ts +0 -219
- package/src/memory/v2/__tests__/edges.test.ts +0 -435
- package/src/memory/v2/edges.ts +0 -217
- package/src/prompts/__tests__/system-prompt-memory-v2.test.ts +0 -197
- package/src/runtime/__tests__/chrome-extension-registry.test.ts +0 -518
- package/src/runtime/__tests__/client-registry.test.ts +0 -271
- package/src/runtime/chrome-extension-registry.ts +0 -368
- package/src/runtime/client-registry.ts +0 -254
- package/src/runtime/routes/inbound-stages/verification-intercept.ts +0 -329
- package/src/tools/secret-detection-handler.ts +0 -269
- package/src/tools/terminal/backends/native.ts +0 -327
- package/src/tools/terminal/backends/types.ts +0 -37
- package/src/tools/terminal/sandbox-diagnostics.ts +0 -87
- package/src/tools/terminal/sandbox.ts +0 -40
package/src/cli.ts
CHANGED
|
@@ -498,27 +498,6 @@ export async function startCli(): Promise<void> {
|
|
|
498
498
|
prompt();
|
|
499
499
|
break;
|
|
500
500
|
|
|
501
|
-
case "secret_detected": {
|
|
502
|
-
const wasSpinning = spinner.isSpinning;
|
|
503
|
-
spinner.stop();
|
|
504
|
-
const types = msg.matches.map((m) => m.type).join(", ");
|
|
505
|
-
const actionLabel =
|
|
506
|
-
msg.action === "redact"
|
|
507
|
-
? "redacted"
|
|
508
|
-
: msg.action === "block"
|
|
509
|
-
? "blocked"
|
|
510
|
-
: "detected";
|
|
511
|
-
process.stdout.write(
|
|
512
|
-
`\n ⚠ Secret ${actionLabel} in ${msg.toolName} output: ${types}\n`,
|
|
513
|
-
);
|
|
514
|
-
for (const match of msg.matches) {
|
|
515
|
-
process.stdout.write(` • ${match.type}: ${match.redactedValue}\n`);
|
|
516
|
-
}
|
|
517
|
-
process.stdout.write("\n");
|
|
518
|
-
if (wasSpinning) spinner.start("Thinking...");
|
|
519
|
-
break;
|
|
520
|
-
}
|
|
521
|
-
|
|
522
501
|
case "conversation_list_response":
|
|
523
502
|
if (pendingSessionPick) {
|
|
524
503
|
renderConversationPicker(msg.conversations);
|
|
@@ -31,7 +31,7 @@ function loadRegistry(): Record<string, unknown> {
|
|
|
31
31
|
return JSON.parse(raw);
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
const VALID_SCOPES = new Set(["assistant", "
|
|
34
|
+
const VALID_SCOPES = new Set(["assistant", "client"]);
|
|
35
35
|
|
|
36
36
|
// ---------------------------------------------------------------------------
|
|
37
37
|
// Tests
|
|
@@ -169,7 +169,7 @@ describe("unified feature flag registry guard", () => {
|
|
|
169
169
|
const scope = flag.scope as string;
|
|
170
170
|
if (!VALID_SCOPES.has(scope)) {
|
|
171
171
|
violations.push(
|
|
172
|
-
`flag '${flag.id}' has invalid scope '${scope}' (expected 'assistant' or '
|
|
172
|
+
`flag '${flag.id}' has invalid scope '${scope}' (expected 'assistant' or 'client')`,
|
|
173
173
|
);
|
|
174
174
|
}
|
|
175
175
|
}
|
|
@@ -21,7 +21,8 @@
|
|
|
21
21
|
"type": "string",
|
|
22
22
|
"description": "Brief non-technical explanation of why this tool is being called"
|
|
23
23
|
}
|
|
24
|
-
}
|
|
24
|
+
},
|
|
25
|
+
"additionalProperties": false
|
|
25
26
|
},
|
|
26
27
|
"executor": "tools/messaging-auth-test.ts",
|
|
27
28
|
"execution_target": "host"
|
|
@@ -58,7 +59,8 @@
|
|
|
58
59
|
"type": "string",
|
|
59
60
|
"description": "Brief non-technical explanation of why this tool is being called"
|
|
60
61
|
}
|
|
61
|
-
}
|
|
62
|
+
},
|
|
63
|
+
"additionalProperties": false
|
|
62
64
|
},
|
|
63
65
|
"executor": "tools/messaging-list-conversations.ts",
|
|
64
66
|
"execution_target": "host"
|
|
@@ -96,6 +98,7 @@
|
|
|
96
98
|
"description": "Brief non-technical explanation of why this tool is being called"
|
|
97
99
|
}
|
|
98
100
|
},
|
|
101
|
+
"additionalProperties": false,
|
|
99
102
|
"required": ["conversation_id"]
|
|
100
103
|
},
|
|
101
104
|
"executor": "tools/messaging-read.ts",
|
|
@@ -130,6 +133,7 @@
|
|
|
130
133
|
"description": "Brief non-technical explanation of why this tool is being called"
|
|
131
134
|
}
|
|
132
135
|
},
|
|
136
|
+
"additionalProperties": false,
|
|
133
137
|
"required": ["query"]
|
|
134
138
|
},
|
|
135
139
|
"executor": "tools/messaging-search.ts",
|
|
@@ -187,6 +191,7 @@
|
|
|
187
191
|
"description": "Brief non-technical explanation of why this tool is being called"
|
|
188
192
|
}
|
|
189
193
|
},
|
|
194
|
+
"additionalProperties": false,
|
|
190
195
|
"required": ["conversation_id", "text", "confidence"]
|
|
191
196
|
},
|
|
192
197
|
"executor": "tools/messaging-send.ts",
|
|
@@ -221,6 +226,7 @@
|
|
|
221
226
|
"description": "Brief non-technical explanation of why this tool is being called"
|
|
222
227
|
}
|
|
223
228
|
},
|
|
229
|
+
"additionalProperties": false,
|
|
224
230
|
"required": ["conversation_id"]
|
|
225
231
|
},
|
|
226
232
|
"executor": "tools/messaging-mark-read.ts",
|
|
@@ -254,7 +260,8 @@
|
|
|
254
260
|
"type": "string",
|
|
255
261
|
"description": "Brief non-technical explanation of why this tool is being called"
|
|
256
262
|
}
|
|
257
|
-
}
|
|
263
|
+
},
|
|
264
|
+
"additionalProperties": false
|
|
258
265
|
},
|
|
259
266
|
"executor": "tools/messaging-analyze-style.ts",
|
|
260
267
|
"execution_target": "host"
|
|
@@ -301,6 +308,7 @@
|
|
|
301
308
|
"description": "Brief non-technical explanation of why this tool is being called"
|
|
302
309
|
}
|
|
303
310
|
},
|
|
311
|
+
"additionalProperties": false,
|
|
304
312
|
"required": ["action"]
|
|
305
313
|
},
|
|
306
314
|
"executor": "tools/messaging-draft.ts",
|
|
@@ -342,7 +350,8 @@
|
|
|
342
350
|
"type": "string",
|
|
343
351
|
"description": "Brief non-technical explanation of why this tool is being called"
|
|
344
352
|
}
|
|
345
|
-
}
|
|
353
|
+
},
|
|
354
|
+
"additionalProperties": false
|
|
346
355
|
},
|
|
347
356
|
"executor": "tools/messaging-sender-digest.ts",
|
|
348
357
|
"execution_target": "host"
|
|
@@ -380,6 +389,7 @@
|
|
|
380
389
|
"description": "Set to true ONLY when the user's most recent message contains explicit approval language for this specific action (e.g. 'archive these', 'yes do it', 'go ahead'). Do NOT set this when the user merely described what they want without confirming, or when acting on prior instructions without fresh confirmation in this turn."
|
|
381
390
|
}
|
|
382
391
|
},
|
|
392
|
+
"additionalProperties": false,
|
|
383
393
|
"required": ["query", "confidence"]
|
|
384
394
|
},
|
|
385
395
|
"executor": "tools/messaging-archive-by-sender.ts",
|
|
@@ -116,6 +116,17 @@ export function getCpuLimit(): string | undefined {
|
|
|
116
116
|
return str("VELLUM_CPU_LIMIT");
|
|
117
117
|
}
|
|
118
118
|
|
|
119
|
+
/**
|
|
120
|
+
* VELLUM_MINIKUBE_STORAGE_SIZE — string (K8s resource format), default: undefined
|
|
121
|
+
* The PVC storage request size for the assistant volume (e.g. "10Gi").
|
|
122
|
+
* Only set in minikube (local dev) mode. Used by the health endpoint to
|
|
123
|
+
* report accurate disk capacity on hostPath-backed PVCs where statfsSync
|
|
124
|
+
* reports the host's entire filesystem instead of the PVC.
|
|
125
|
+
*/
|
|
126
|
+
export function getMinikubeStorageSize(): string | undefined {
|
|
127
|
+
return str("VELLUM_MINIKUBE_STORAGE_SIZE");
|
|
128
|
+
}
|
|
129
|
+
|
|
119
130
|
/**
|
|
120
131
|
* VELLUM_PROFILER_RUN_ID — string, default: undefined
|
|
121
132
|
* Unique identifier for the current profiler run. When set, the profiler
|
|
@@ -177,7 +188,6 @@ const KNOWN_VELLUM_VARS = new Set([
|
|
|
177
188
|
"VELLUM_CLOUD",
|
|
178
189
|
"VELLUM_CUSTOM_QR_CODE_PATH",
|
|
179
190
|
"VELLUM_DAEMON_AUTOSTART",
|
|
180
|
-
"VELLUM_DAEMON_NOAUTH",
|
|
181
191
|
"VELLUM_DATA_DIR",
|
|
182
192
|
"VELLUM_DEBUG",
|
|
183
193
|
"VELLUM_DESKTOP_APP",
|
|
@@ -198,10 +208,10 @@ const KNOWN_VELLUM_VARS = new Set([
|
|
|
198
208
|
"VELLUM_PROFILER_RUN_ID",
|
|
199
209
|
"VELLUM_ROOT_DIR",
|
|
200
210
|
"VELLUM_SSH_USER",
|
|
201
|
-
"VELLUM_UNSAFE_AUTH_BYPASS",
|
|
202
211
|
"VELLUM_WORKSPACE_DIR",
|
|
203
212
|
"VELLUM_CPU_LIMIT",
|
|
204
213
|
"VELLUM_MEMORY_LIMIT",
|
|
214
|
+
"VELLUM_MINIKUBE_STORAGE_SIZE",
|
|
205
215
|
]);
|
|
206
216
|
|
|
207
217
|
/**
|
package/src/config/env.ts
CHANGED
|
@@ -88,22 +88,11 @@ export function getRuntimeHttpHost(): string {
|
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
/**
|
|
91
|
-
* True when HTTP API auth is disabled via DISABLE_HTTP_AUTH=true
|
|
92
|
-
*
|
|
93
|
-
* gate, the bypass is ignored.
|
|
91
|
+
* True when HTTP API auth is disabled via DISABLE_HTTP_AUTH=true.
|
|
92
|
+
* Used in platform-managed deployments where the platform handles auth.
|
|
94
93
|
*/
|
|
95
94
|
export function isHttpAuthDisabled(): boolean {
|
|
96
|
-
|
|
97
|
-
return str("VELLUM_UNSAFE_AUTH_BYPASS")?.trim() === "1";
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* True when DISABLE_HTTP_AUTH is set but the safety gate
|
|
102
|
-
* VELLUM_UNSAFE_AUTH_BYPASS=1 is missing — used for warning messages.
|
|
103
|
-
*/
|
|
104
|
-
export function hasUngatedHttpAuthDisabled(): boolean {
|
|
105
|
-
if (str("DISABLE_HTTP_AUTH")?.toLowerCase() !== "true") return false;
|
|
106
|
-
return str("VELLUM_UNSAFE_AUTH_BYPASS")?.trim() !== "1";
|
|
95
|
+
return str("DISABLE_HTTP_AUTH")?.toLowerCase() === "true";
|
|
107
96
|
}
|
|
108
97
|
|
|
109
98
|
// ── Monitoring ───────────────────────────────────────────────────────────────
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
},
|
|
20
20
|
{
|
|
21
21
|
"id": "user-hosted-enabled",
|
|
22
|
-
"scope": "
|
|
22
|
+
"scope": "client",
|
|
23
23
|
"key": "user-hosted-enabled",
|
|
24
24
|
"label": "User Hosted Enabled",
|
|
25
25
|
"description": "Enable user-hosted onboarding flow",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
29
|
"id": "local-docker-enabled",
|
|
30
|
-
"scope": "
|
|
30
|
+
"scope": "client",
|
|
31
31
|
"key": "local-docker-enabled",
|
|
32
32
|
"label": "Local Docker Mode",
|
|
33
33
|
"description": "When enabled, the Local hosting option uses Docker under the hood for sandboxed execution, hiding the separate Docker card",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
53
|
"id": "mobile-pairing",
|
|
54
|
-
"scope": "
|
|
54
|
+
"scope": "client",
|
|
55
55
|
"key": "mobile-pairing",
|
|
56
56
|
"label": "Mobile Pairing",
|
|
57
57
|
"description": "Show the Mobile (iOS) pairing card in Settings > Account",
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
},
|
|
68
68
|
{
|
|
69
69
|
"id": "developer-menu-items",
|
|
70
|
-
"scope": "
|
|
70
|
+
"scope": "client",
|
|
71
71
|
"key": "developer-menu-items",
|
|
72
72
|
"label": "Developer Menu Items",
|
|
73
73
|
"description": "Show Component Gallery and Replay Onboarding in the menu bar",
|
|
@@ -123,7 +123,7 @@
|
|
|
123
123
|
},
|
|
124
124
|
{
|
|
125
125
|
"id": "settings-billing",
|
|
126
|
-
"scope": "
|
|
126
|
+
"scope": "client",
|
|
127
127
|
"key": "settings-billing",
|
|
128
128
|
"label": "Billing Settings Tab",
|
|
129
129
|
"description": "Show the Billing tab in Settings when signed in, displaying credits balance and top-up",
|
|
@@ -131,7 +131,7 @@
|
|
|
131
131
|
},
|
|
132
132
|
{
|
|
133
133
|
"id": "referral-codes",
|
|
134
|
-
"scope": "
|
|
134
|
+
"scope": "client",
|
|
135
135
|
"key": "referral-codes",
|
|
136
136
|
"label": "Referral Codes",
|
|
137
137
|
"description": "Surface the Earn Credits referral entry points (sidebar drawer row and Billing tab button) that open the referral modal",
|
|
@@ -139,7 +139,7 @@
|
|
|
139
139
|
},
|
|
140
140
|
{
|
|
141
141
|
"id": "managed-sign-in",
|
|
142
|
-
"scope": "
|
|
142
|
+
"scope": "client",
|
|
143
143
|
"key": "managed-sign-in",
|
|
144
144
|
"label": "Managed Sign In",
|
|
145
145
|
"description": "Enable managed (organization-hosted) sign-in flow in the onboarding experience",
|
|
@@ -179,7 +179,7 @@
|
|
|
179
179
|
},
|
|
180
180
|
{
|
|
181
181
|
"id": "quick-input",
|
|
182
|
-
"scope": "
|
|
182
|
+
"scope": "client",
|
|
183
183
|
"key": "quick-input",
|
|
184
184
|
"label": "Quick Input",
|
|
185
185
|
"description": "Enable the Quick Input popover on right-click of the menu bar icon",
|
|
@@ -187,7 +187,7 @@
|
|
|
187
187
|
},
|
|
188
188
|
{
|
|
189
189
|
"id": "expand-completed-steps",
|
|
190
|
-
"scope": "
|
|
190
|
+
"scope": "client",
|
|
191
191
|
"key": "expand-completed-steps",
|
|
192
192
|
"label": "Expand Completed Steps",
|
|
193
193
|
"description": "Auto-expand completed tool call step groups instead of showing them collapsed",
|
|
@@ -195,7 +195,7 @@
|
|
|
195
195
|
},
|
|
196
196
|
{
|
|
197
197
|
"id": "show-thinking-blocks",
|
|
198
|
-
"scope": "
|
|
198
|
+
"scope": "client",
|
|
199
199
|
"key": "show-thinking-blocks",
|
|
200
200
|
"label": "Show Thinking Blocks",
|
|
201
201
|
"description": "Display the assistant's thinking/reasoning inline in chat messages as collapsible blocks",
|
|
@@ -267,7 +267,7 @@
|
|
|
267
267
|
},
|
|
268
268
|
{
|
|
269
269
|
"id": "teleport",
|
|
270
|
-
"scope": "
|
|
270
|
+
"scope": "client",
|
|
271
271
|
"key": "teleport",
|
|
272
272
|
"label": "Teleport",
|
|
273
273
|
"description": "Enable teleport UI in General settings for moving assistants between hosting environments",
|
|
@@ -275,7 +275,7 @@
|
|
|
275
275
|
},
|
|
276
276
|
{
|
|
277
277
|
"id": "apple-container",
|
|
278
|
-
"scope": "
|
|
278
|
+
"scope": "client",
|
|
279
279
|
"key": "apple-container",
|
|
280
280
|
"label": "Apple Container",
|
|
281
281
|
"description": "Enable assistant sandboxing via Apple Containers on macOS 26+, providing a lightweight native sandbox without third-party dependencies",
|
|
@@ -299,7 +299,7 @@
|
|
|
299
299
|
},
|
|
300
300
|
{
|
|
301
301
|
"id": "fork-from-message",
|
|
302
|
-
"scope": "
|
|
302
|
+
"scope": "client",
|
|
303
303
|
"key": "fork-from-message",
|
|
304
304
|
"label": "Fork from Message",
|
|
305
305
|
"description": "Show the 'Fork from here' option in message overflow menus",
|
|
@@ -307,7 +307,7 @@
|
|
|
307
307
|
},
|
|
308
308
|
{
|
|
309
309
|
"id": "onboarding-pre-chat",
|
|
310
|
-
"scope": "
|
|
310
|
+
"scope": "client",
|
|
311
311
|
"key": "onboarding-pre-chat",
|
|
312
312
|
"label": "Pre-Chat Onboarding Flow",
|
|
313
313
|
"description": "Gates the 3-screen pre-chat onboarding flow (tools, tasks/tone, name exchange) shown before the first conversation",
|
|
@@ -315,7 +315,7 @@
|
|
|
315
315
|
},
|
|
316
316
|
{
|
|
317
317
|
"id": "home-tab",
|
|
318
|
-
"scope": "
|
|
318
|
+
"scope": "client",
|
|
319
319
|
"key": "home-tab",
|
|
320
320
|
"label": "Home Tab",
|
|
321
321
|
"description": "Replace the knowledge graph top-level tab with a new Home page showing relationship progression, facts, and capability tiers",
|
|
@@ -337,17 +337,9 @@
|
|
|
337
337
|
"description": "Enables the Google Meet joining bot and the meet-join skill.",
|
|
338
338
|
"defaultEnabled": false
|
|
339
339
|
},
|
|
340
|
-
{
|
|
341
|
-
"id": "compaction-v2",
|
|
342
|
-
"scope": "assistant",
|
|
343
|
-
"key": "compaction-v2",
|
|
344
|
-
"label": "Compaction v2",
|
|
345
|
-
"description": "Boundary-message-based compaction pipeline with forked prompt-cache-shared summarization and microcompact pre-pass. Replaces the four-tier overflow reducer and cursor-based storage.",
|
|
346
|
-
"defaultEnabled": false
|
|
347
|
-
},
|
|
348
340
|
{
|
|
349
341
|
"id": "scroll-debug-overlay",
|
|
350
|
-
"scope": "
|
|
342
|
+
"scope": "client",
|
|
351
343
|
"key": "scroll-debug-overlay",
|
|
352
344
|
"label": "Scroll Debug Overlay",
|
|
353
345
|
"description": "Show a live HUD in the top-right of the conversation with scroll geometry, velocity, update rate, and anchor-preserver activity. Developer diagnostic for investigating scroll jank.",
|
|
@@ -355,12 +347,20 @@
|
|
|
355
347
|
},
|
|
356
348
|
{
|
|
357
349
|
"id": "message-height-cache",
|
|
358
|
-
"scope": "
|
|
350
|
+
"scope": "client",
|
|
359
351
|
"key": "message-height-cache",
|
|
360
352
|
"label": "Message Height Cache",
|
|
361
353
|
"description": "Swap the transcript's LazyVStack for a plain VStack so scrollContentHeight is the true sum of row heights (no LazyVStack estimator drift). Row frames are not pinned — the earlier frame-pinning approach was removed because it caused overlap when rows grew past their first measurement (streaming, expanding thinking blocks). Tradeoff: eager layout — every row measures up-front, which can stall for many seconds to minutes on very long conversations.",
|
|
362
354
|
"defaultEnabled": true
|
|
363
355
|
},
|
|
356
|
+
{
|
|
357
|
+
"id": "coding-agents-panel",
|
|
358
|
+
"scope": "client",
|
|
359
|
+
"key": "coding-agents-panel",
|
|
360
|
+
"label": "Coding Agents Panel",
|
|
361
|
+
"description": "Gate native macOS/iOS Coding Agents panel entry points and inline ACP session deep links.",
|
|
362
|
+
"defaultEnabled": false
|
|
363
|
+
},
|
|
364
364
|
{
|
|
365
365
|
"id": "compaction-playground",
|
|
366
366
|
"scope": "assistant",
|
|
@@ -378,11 +378,11 @@
|
|
|
378
378
|
"defaultEnabled": false
|
|
379
379
|
},
|
|
380
380
|
{
|
|
381
|
-
"id": "
|
|
382
|
-
"scope": "
|
|
383
|
-
"key": "
|
|
384
|
-
"label": "
|
|
385
|
-
"description": "
|
|
381
|
+
"id": "account-deletion",
|
|
382
|
+
"scope": "client",
|
|
383
|
+
"key": "account-deletion",
|
|
384
|
+
"label": "Account Deletion",
|
|
385
|
+
"description": "Surfaces the user-initiated account deletion flow in client settings.",
|
|
386
386
|
"defaultEnabled": false
|
|
387
387
|
}
|
|
388
388
|
]
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CALL_SITE_CATALOG } from "./schemas/call-site-catalog.js";
|
|
2
|
+
import type { LLMCallSite } from "./schemas/llm.js";
|
|
3
|
+
|
|
4
|
+
// Compatibility wrapper for existing usage display imports. Do not define
|
|
5
|
+
// labels here; call-site display metadata belongs in CALL_SITE_CATALOG.
|
|
6
|
+
const LLM_CALLSITE_LABELS = new Map<LLMCallSite, string>(
|
|
7
|
+
CALL_SITE_CATALOG.map(({ id, displayName }) => [id, displayName]),
|
|
8
|
+
);
|
|
9
|
+
|
|
10
|
+
export function getLLMCallSiteLabel(callSite: LLMCallSite | string): string {
|
|
11
|
+
return LLM_CALLSITE_LABELS.get(callSite as LLMCallSite) ?? String(callSite);
|
|
12
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { PROVIDER_CATALOG } from "../providers/model-catalog.js";
|
|
2
|
+
import { resolveCallSiteConfig } from "./llm-resolver.js";
|
|
3
|
+
import {
|
|
4
|
+
type ContextWindow,
|
|
5
|
+
DEFAULT_CONTEXT_WINDOW_MAX_INPUT_TOKENS,
|
|
6
|
+
type LLMCallSite,
|
|
7
|
+
type LLMConfig,
|
|
8
|
+
} from "./schemas/llm.js";
|
|
9
|
+
import type { ContextWindowConfig } from "./types.js";
|
|
10
|
+
|
|
11
|
+
export interface EffectiveContextWindow {
|
|
12
|
+
provider: string;
|
|
13
|
+
model: string;
|
|
14
|
+
enabled: boolean;
|
|
15
|
+
maxInputTokens: number;
|
|
16
|
+
modelMaxInputTokens: number;
|
|
17
|
+
defaultInputTokens: number;
|
|
18
|
+
compactThreshold: number;
|
|
19
|
+
summaryBudgetRatio: number;
|
|
20
|
+
targetBudgetRatio: number;
|
|
21
|
+
overflowRecovery: ContextWindow["overflowRecovery"];
|
|
22
|
+
isLongContextEnabled: boolean;
|
|
23
|
+
maxOutputTokens?: number;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function resolveEffectiveContextWindow({
|
|
27
|
+
llm,
|
|
28
|
+
callSite,
|
|
29
|
+
overrideProfile,
|
|
30
|
+
}: {
|
|
31
|
+
llm: LLMConfig;
|
|
32
|
+
callSite: LLMCallSite;
|
|
33
|
+
overrideProfile?: string;
|
|
34
|
+
}): EffectiveContextWindow {
|
|
35
|
+
const resolved = resolveCallSiteConfig(callSite, llm, { overrideProfile });
|
|
36
|
+
const catalogModel = PROVIDER_CATALOG.find(
|
|
37
|
+
(provider) => provider.id === resolved.provider,
|
|
38
|
+
)?.models.find((model) => model.id === resolved.model);
|
|
39
|
+
|
|
40
|
+
const modelMaxInputTokens =
|
|
41
|
+
catalogModel?.contextWindowTokens ??
|
|
42
|
+
DEFAULT_CONTEXT_WINDOW_MAX_INPUT_TOKENS;
|
|
43
|
+
const defaultInputTokens =
|
|
44
|
+
catalogModel?.defaultContextWindowTokens ??
|
|
45
|
+
DEFAULT_CONTEXT_WINDOW_MAX_INPUT_TOKENS;
|
|
46
|
+
const maxInputTokens = Math.min(
|
|
47
|
+
resolved.contextWindow.maxInputTokens,
|
|
48
|
+
modelMaxInputTokens,
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
return {
|
|
52
|
+
provider: resolved.provider,
|
|
53
|
+
model: resolved.model,
|
|
54
|
+
enabled: resolved.contextWindow.enabled,
|
|
55
|
+
maxInputTokens,
|
|
56
|
+
modelMaxInputTokens,
|
|
57
|
+
defaultInputTokens,
|
|
58
|
+
compactThreshold: resolved.contextWindow.compactThreshold,
|
|
59
|
+
summaryBudgetRatio: resolved.contextWindow.summaryBudgetRatio,
|
|
60
|
+
targetBudgetRatio: resolved.contextWindow.targetBudgetRatio,
|
|
61
|
+
overflowRecovery: resolved.contextWindow.overflowRecovery,
|
|
62
|
+
isLongContextEnabled: maxInputTokens > defaultInputTokens,
|
|
63
|
+
maxOutputTokens: catalogModel?.maxOutputTokens,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export function contextWindowConfigFromEffective(
|
|
68
|
+
base: ContextWindowConfig,
|
|
69
|
+
effective: EffectiveContextWindow,
|
|
70
|
+
): ContextWindowConfig {
|
|
71
|
+
return {
|
|
72
|
+
...base,
|
|
73
|
+
enabled: effective.enabled,
|
|
74
|
+
maxInputTokens: effective.maxInputTokens,
|
|
75
|
+
targetBudgetRatio: effective.targetBudgetRatio,
|
|
76
|
+
compactThreshold: effective.compactThreshold,
|
|
77
|
+
summaryBudgetRatio: effective.summaryBudgetRatio,
|
|
78
|
+
overflowRecovery: effective.overflowRecovery,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
@@ -3,8 +3,8 @@ import { z } from "zod";
|
|
|
3
3
|
import {
|
|
4
4
|
type LLMCallSite,
|
|
5
5
|
LLMConfigBase,
|
|
6
|
-
type LLMConfigFragment,
|
|
7
6
|
type LLMSchema,
|
|
7
|
+
type ProfileEntry,
|
|
8
8
|
} from "./schemas/llm.js";
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -12,13 +12,24 @@ import {
|
|
|
12
12
|
* call-site overrides, optional per-call profile, an optional ad-hoc override
|
|
13
13
|
* profile, the workspace's active profile, and the required `llm.default`.
|
|
14
14
|
*
|
|
15
|
-
* Merge layers (low → high precedence; later layers override earlier)
|
|
15
|
+
* Merge layers (low → high precedence; later layers override earlier) for
|
|
16
|
+
* non-main-agent call sites:
|
|
16
17
|
* 1. `llm.default` fields (required base)
|
|
17
18
|
* 2. `llm.profiles[llm.activeProfile]` (workspace-wide active profile)
|
|
18
19
|
* 3. `llm.profiles[opts.overrideProfile]` (per-call ad-hoc override)
|
|
19
20
|
* 4. `llm.profiles[site.profile]` fields (call-site's named profile)
|
|
20
21
|
* 5. `llm.callSites[callSite]` fields (call-site override)
|
|
21
22
|
*
|
|
23
|
+
* For `mainAgent`, the selected active/conversation profile is the direct
|
|
24
|
+
* user intent for the chat loop, so profile layers intentionally sit above
|
|
25
|
+
* any static `llm.callSites.mainAgent` defaults seeded by migrations or UI
|
|
26
|
+
* settings:
|
|
27
|
+
* 1. `llm.default`
|
|
28
|
+
* 2. `llm.profiles[site.profile]`
|
|
29
|
+
* 3. `llm.callSites.mainAgent`
|
|
30
|
+
* 4. `llm.profiles[llm.activeProfile]`
|
|
31
|
+
* 5. `llm.profiles[opts.overrideProfile]`
|
|
32
|
+
*
|
|
22
33
|
* Nested objects (`thinking`, `contextWindow`, and
|
|
23
34
|
* `contextWindow.overflowRecovery`) are deep-merged so partial overrides at
|
|
24
35
|
* any nesting level merge into — rather than replace — the corresponding
|
|
@@ -38,28 +49,51 @@ export function resolveCallSiteConfig(
|
|
|
38
49
|
): z.infer<typeof LLMConfigBase> {
|
|
39
50
|
const layers: Mergeable[] = [llm.default as Mergeable];
|
|
40
51
|
|
|
41
|
-
// Layer: workspace-wide active profile. Silent fall-through on missing key
|
|
42
|
-
// — schema validation in LLMSchema.superRefine catches static references.
|
|
43
52
|
const activeFragment =
|
|
44
53
|
llm.activeProfile != null ? llm.profiles?.[llm.activeProfile] : undefined;
|
|
45
|
-
if (activeFragment != null) {
|
|
46
|
-
layers.push(activeFragment as Mergeable);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// Layer: per-call ad-hoc override (e.g. a chat conversation's pinned
|
|
50
|
-
// profile). Silent fall-through on missing key keeps the resolver pure.
|
|
51
54
|
const overrideFragment =
|
|
52
55
|
opts.overrideProfile != null
|
|
53
56
|
? llm.profiles?.[opts.overrideProfile]
|
|
54
57
|
: undefined;
|
|
55
|
-
|
|
56
|
-
|
|
58
|
+
const site = llm.callSites?.[callSite];
|
|
59
|
+
|
|
60
|
+
if (callSite === "mainAgent") {
|
|
61
|
+
appendCallSiteLayers(layers, callSite, llm, site);
|
|
62
|
+
appendProfileLayer(layers, activeFragment);
|
|
63
|
+
appendProfileLayer(layers, overrideFragment);
|
|
64
|
+
} else {
|
|
65
|
+
appendProfileLayer(layers, activeFragment);
|
|
66
|
+
appendProfileLayer(layers, overrideFragment);
|
|
67
|
+
appendCallSiteLayers(layers, callSite, llm, site);
|
|
57
68
|
}
|
|
58
69
|
|
|
59
|
-
|
|
70
|
+
return finalize(deepMerge(...layers));
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
74
|
+
// Internal helpers
|
|
75
|
+
// ---------------------------------------------------------------------------
|
|
76
|
+
|
|
77
|
+
type Mergeable = Record<string, unknown>;
|
|
78
|
+
|
|
79
|
+
function appendProfileLayer(
|
|
80
|
+
layers: Mergeable[],
|
|
81
|
+
profile: ProfileEntry | undefined,
|
|
82
|
+
): void {
|
|
83
|
+
if (profile != null) {
|
|
84
|
+
layers.push(profileConfigFragment(profile));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function appendCallSiteLayers(
|
|
89
|
+
layers: Mergeable[],
|
|
90
|
+
callSite: LLMCallSite,
|
|
91
|
+
llm: z.infer<typeof LLMSchema>,
|
|
92
|
+
site: z.infer<typeof LLMSchema>["callSites"][LLMCallSite] | undefined,
|
|
93
|
+
): void {
|
|
60
94
|
if (site != null) {
|
|
61
95
|
if (site.profile != null) {
|
|
62
|
-
const profileFragment:
|
|
96
|
+
const profileFragment: ProfileEntry | undefined =
|
|
63
97
|
llm.profiles?.[site.profile];
|
|
64
98
|
if (profileFragment == null) {
|
|
65
99
|
// Defensive: `LLMSchema.superRefine` already rejects unknown profile
|
|
@@ -70,22 +104,24 @@ export function resolveCallSiteConfig(
|
|
|
70
104
|
`LLM call site "${callSite}" references undefined profile "${site.profile}"`,
|
|
71
105
|
);
|
|
72
106
|
}
|
|
73
|
-
layers.push(profileFragment
|
|
107
|
+
layers.push(profileConfigFragment(profileFragment));
|
|
74
108
|
}
|
|
75
109
|
// Strip the `profile` discriminator before merging — it isn't a
|
|
76
110
|
// `LLMConfigBase` field.
|
|
77
111
|
const { profile: _profile, ...siteFragment } = site;
|
|
78
112
|
layers.push(siteFragment as Mergeable);
|
|
79
113
|
}
|
|
80
|
-
|
|
81
|
-
return finalize(deepMerge(...layers));
|
|
82
114
|
}
|
|
83
115
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
116
|
+
function profileConfigFragment(profile: ProfileEntry): Mergeable {
|
|
117
|
+
const {
|
|
118
|
+
source: _source,
|
|
119
|
+
label: _label,
|
|
120
|
+
description: _description,
|
|
121
|
+
...config
|
|
122
|
+
} = profile;
|
|
123
|
+
return config as Mergeable;
|
|
124
|
+
}
|
|
89
125
|
|
|
90
126
|
/**
|
|
91
127
|
* Returns true for objects we should recurse into during deep merge. We
|
package/src/config/loader.ts
CHANGED
|
@@ -512,9 +512,9 @@ export function mergeDefaultWorkspaceConfig(): void {
|
|
|
512
512
|
export function loadConfig(): AssistantConfig {
|
|
513
513
|
if (cached) return cached;
|
|
514
514
|
|
|
515
|
-
// Re-entrancy guard: log calls during loading
|
|
516
|
-
// again. Return defaults to break the cycle
|
|
517
|
-
// stack overflow.
|
|
515
|
+
// Re-entrancy guard: log calls during loading (e.g. file-mode warning)
|
|
516
|
+
// can trigger loadConfig again. Return defaults to break the cycle
|
|
517
|
+
// instead of recursing to stack overflow.
|
|
518
518
|
if (loading) return cloneDefaultConfig();
|
|
519
519
|
loading = true;
|
|
520
520
|
|