@vellumai/assistant 0.8.0 → 0.8.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/AGENTS.md +11 -0
- package/ARCHITECTURE.md +2 -7
- package/Dockerfile +80 -5
- package/README.md +2 -2
- package/bun.lock +11 -1
- package/docker-entrypoint.sh +21 -0
- package/docker-init-apt-root.sh +94 -0
- package/docker-kata-apt-env.sh +39 -0
- package/docs/plugins.md +88 -47
- package/docs/skills.md +9 -7
- package/eslint-rules/__tests__/cli-no-daemon-internals.test.ts +420 -0
- package/eslint-rules/cli-no-daemon-internals.js +283 -0
- package/eslint.config.mjs +12 -0
- package/examples/plugins/echo/README.md +27 -27
- package/examples/plugins/echo/package.json +3 -0
- package/examples/plugins/echo/register.ts +31 -31
- package/knip.json +2 -1
- package/node_modules/@vellumai/skill-host-contracts/src/client.ts +10 -1
- package/node_modules/@vellumai/slack-text/src/index.test.ts +114 -14
- package/node_modules/@vellumai/slack-text/src/index.ts +82 -18
- package/openapi.yaml +4462 -991
- package/package.json +5 -1
- package/scripts/generate-openapi.ts +135 -14
- package/scripts/sync-llm-catalog.ts +165 -0
- package/scripts/sync-web-search-catalog.ts +129 -0
- package/src/__tests__/actor-trust-resolver-address-fallback.test.ts +169 -0
- package/src/__tests__/agent-image-optimize.test.ts +11 -3
- package/src/__tests__/agent-loop-override-profile.test.ts +26 -1
- package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +131 -0
- package/src/__tests__/anthropic-provider.test.ts +137 -2
- package/src/__tests__/app-builder-tool-scripts.test.ts +9 -3
- package/src/__tests__/app-control-flow.test.ts +7 -0
- package/src/__tests__/app-executors.test.ts +220 -4
- package/src/__tests__/assistant-events-sse-shed.test.ts +232 -0
- package/src/__tests__/auto-analysis-end-to-end.test.ts +35 -0
- package/src/__tests__/avatar-identity-sync.test.ts +87 -0
- package/src/__tests__/background-workers-disk-pressure.test.ts +11 -22
- package/src/__tests__/btw-routes.test.ts +1 -0
- package/src/__tests__/bundled-asset.test.ts +6 -6
- package/src/__tests__/call-site-routing-provider.test.ts +172 -45
- package/src/__tests__/cancel-resolves-conversation-key.test.ts +44 -3
- package/src/__tests__/channel-availability-routes.test.ts +206 -0
- package/src/__tests__/channel-delivery-store.test.ts +289 -1
- package/src/__tests__/channel-policy.test.ts +12 -0
- package/src/__tests__/checker.test.ts +89 -0
- package/src/__tests__/circuit-breaker-pipeline.test.ts +0 -1
- package/src/__tests__/clawhub.test.ts +75 -16
- package/src/__tests__/cli-memory-v2-reembed-skills.test.ts +35 -7
- package/src/__tests__/compact-event-conversation-id-guard.test.ts +33 -5
- package/src/__tests__/compaction-strip-metadata-clear.test.ts +26 -1
- package/src/__tests__/compactor-tail-resolution.test.ts +41 -0
- package/src/__tests__/config-loader-backfill.test.ts +526 -102
- package/src/__tests__/config-loader-corrupt.test.ts +68 -0
- package/src/__tests__/config-loader-platform-defaults.test.ts +77 -23
- package/src/__tests__/config-schema-cmd.test.ts +63 -29
- package/src/__tests__/config-schema.test.ts +35 -3
- package/src/__tests__/config-set-platform-guard.test.ts +75 -152
- package/src/__tests__/config-set-route.test.ts +278 -0
- package/src/__tests__/config-sounds-sync.test.ts +97 -0
- package/src/__tests__/config-watcher-skill-reseed.test.ts +453 -0
- package/src/__tests__/config-watcher.test.ts +6 -0
- package/src/__tests__/contacts-tools.test.ts +51 -199
- package/src/__tests__/context-search-agent-protocol.test.ts +21 -2
- package/src/__tests__/context-search-agent-runner.test.ts +22 -138
- package/src/__tests__/context-search-conversations-source.test.ts +159 -18
- package/src/__tests__/context-search-fanout.test.ts +20 -157
- package/src/__tests__/context-search-memory-v2-source.test.ts +3 -4
- package/src/__tests__/context-search-types.test.ts +7 -2
- package/src/__tests__/context-search-workspace-source.test.ts +7 -0
- package/src/__tests__/context-token-estimator.test.ts +1 -0
- package/src/__tests__/conversation-abort-tool-results.test.ts +4 -1
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +1 -0
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +93 -92
- package/src/__tests__/conversation-agent-loop.test.ts +2 -0
- package/src/__tests__/conversation-crud-inference-profile.test.ts +100 -0
- package/src/__tests__/conversation-error.test.ts +80 -3
- package/src/__tests__/conversation-fork-crud.test.ts +323 -1
- package/src/__tests__/conversation-inference-profile-route.test.ts +54 -18
- package/src/__tests__/conversation-init.benchmark.test.ts +1 -0
- package/src/__tests__/conversation-lifecycle.test.ts +297 -0
- package/src/__tests__/conversation-message-sync-tags.test.ts +97 -0
- package/src/__tests__/conversation-pairing.test.ts +54 -0
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +100 -1
- package/src/__tests__/conversation-process-callsite.test.ts +25 -2
- package/src/__tests__/conversation-provider-retry-repair.test.ts +5 -1
- package/src/__tests__/conversation-queue.test.ts +4 -1
- package/src/__tests__/conversation-runtime-assembly.test.ts +80 -13
- package/src/__tests__/conversation-slash-commands.test.ts +194 -2
- package/src/__tests__/conversation-slash-queue.test.ts +59 -1
- package/src/__tests__/conversation-slash-unknown.test.ts +4 -1
- package/src/__tests__/conversation-surfaces-app-control.test.ts +323 -3
- package/src/__tests__/conversation-surfaces-table-action.test.ts +360 -0
- package/src/__tests__/conversation-sync-tags.test.ts +235 -0
- package/src/__tests__/conversation-workspace-injection.test.ts +5 -1
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +5 -1
- package/src/__tests__/credential-security-invariants.test.ts +8 -8
- package/src/__tests__/daemon-credential-client.test.ts +56 -1
- package/src/__tests__/db-activation-state-fk-cascade.test.ts +132 -0
- package/src/__tests__/db-conversation-inference-profile-migration.test.ts +37 -0
- package/src/__tests__/db-memory-graph-event-date-repair.test.ts +43 -20
- package/src/__tests__/db-proxy-transaction.test.ts +206 -0
- package/src/__tests__/db-slack-external-content-normalization.test.ts +301 -0
- package/src/__tests__/delete-managed-skill-tool.test.ts +55 -13
- package/src/__tests__/disk-pressure-tools.test.ts +1 -0
- package/src/__tests__/dm-backfill.test.ts +121 -10
- package/src/__tests__/document-tool-security.test.ts +258 -0
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
- package/src/__tests__/edit-propagation.test.ts +33 -0
- package/src/__tests__/empty-response-pipeline.test.ts +0 -4
- package/src/__tests__/external-plugin-loader.test.ts +482 -0
- package/src/__tests__/filing-service.test.ts +163 -3
- package/src/__tests__/fixtures/mock-chrome-extension.ts +5 -0
- package/src/__tests__/gateway-only-guard.test.ts +0 -1
- package/src/__tests__/get-skill-detail-audit.test.ts +0 -4
- package/src/__tests__/graph-extraction-event-date.test.ts +34 -0
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +42 -69
- package/src/__tests__/heartbeat-disk-pressure.test.ts +21 -8
- package/src/__tests__/heartbeat-service.test.ts +50 -233
- package/src/__tests__/helpers/tar-fixtures.ts +39 -0
- package/src/__tests__/helpers/wait-for.ts +21 -0
- package/src/__tests__/history-repair-pipeline.test.ts +0 -3
- package/src/__tests__/history-repair.test.ts +162 -0
- package/src/__tests__/host-app-control-proxy.test.ts +365 -1
- package/src/__tests__/host-app-control-routes.test.ts +247 -1
- package/src/__tests__/host-browser-proxy.test.ts +416 -20
- package/src/__tests__/host-browser-routes.test.ts +325 -33
- package/src/__tests__/host-proxy-preactivation.test.ts +211 -0
- package/src/__tests__/image-credentials.test.ts +1 -1
- package/src/__tests__/inbound-slack-persistence.test.ts +2 -0
- package/src/__tests__/inference-no-mode-boot-e2e.test.ts +246 -0
- package/src/__tests__/inference-profile-reaper.test.ts +156 -0
- package/src/__tests__/inference-profile-session-handler.test.ts +410 -0
- package/src/__tests__/inference-profile-session-ipc.test.ts +248 -0
- package/src/__tests__/injector-chain.test.ts +10 -8
- package/src/__tests__/inline-skill-load-permissions.test.ts +6 -1
- package/src/__tests__/install-skill-routing.test.ts +157 -39
- package/src/__tests__/lifecycle-memory-v2-seed.test.ts +107 -3
- package/src/__tests__/list-messages-page-latest.test.ts +55 -0
- package/src/__tests__/llm-call-pipeline.test.ts +0 -3
- package/src/__tests__/llm-callsite-catalog.test.ts +20 -1
- package/src/__tests__/llm-catalog-parity.test.ts +190 -2
- package/src/__tests__/llm-request-log-source-clickhouse.test.ts +222 -0
- package/src/__tests__/llm-request-log-source-factory.test.ts +100 -0
- package/src/__tests__/llm-resolver.test.ts +46 -0
- package/src/__tests__/llm-usage-store.test.ts +114 -0
- package/src/__tests__/managed-profile-guard.test.ts +145 -14
- package/src/__tests__/managed-skill-lifecycle.test.ts +109 -18
- package/src/__tests__/managed-store.test.ts +84 -192
- package/src/__tests__/mcp-auth-routes.test.ts +1 -0
- package/src/__tests__/mcp-cli.test.ts +182 -220
- package/src/__tests__/mcp-health-check.test.ts +56 -27
- package/src/__tests__/media-generate-image.test.ts +1 -1
- package/src/__tests__/memory-jobs-worker-lanes.test.ts +18 -11
- package/src/__tests__/memory-retrieval-pipeline.test.ts +0 -2
- package/src/__tests__/message-complete-display-id.test.ts +175 -0
- package/src/__tests__/messages-after-tiebreaker.test.ts +122 -0
- package/src/__tests__/notification-platform-adapter.test.ts +229 -0
- package/src/__tests__/oauth-cli.test.ts +38 -2009
- package/src/__tests__/oauth-commands-routes.test.ts +863 -0
- package/src/__tests__/oauth-connect-routes.test.ts +174 -11
- package/src/__tests__/oauth-provider-profiles.test.ts +9 -0
- package/src/__tests__/oauth-providers-routes.test.ts +14 -10
- package/src/__tests__/openai-provider.test.ts +24 -0
- package/src/__tests__/openai-responses-cutover-guard.test.ts +48 -19
- package/src/__tests__/openai-responses-provider.test.ts +17 -0
- package/src/__tests__/overflow-reduce-pipeline.test.ts +0 -2
- package/src/__tests__/persistence-pipeline.test.ts +0 -2
- package/src/__tests__/{managed-proxy-context.test.ts → platform-proxy-context.test.ts} +1 -1
- package/src/__tests__/platform.test.ts +2 -0
- package/src/__tests__/plugin-api-shim.test.ts +125 -0
- package/src/__tests__/plugin-bootstrap.test.ts +41 -38
- package/src/__tests__/plugin-external-api.test.ts +68 -0
- package/src/__tests__/plugin-registry.test.ts +0 -77
- package/src/__tests__/plugin-route-contribution.test.ts +31 -4
- package/src/__tests__/plugin-skill-contribution.test.ts +0 -2
- package/src/__tests__/plugin-tool-contribution.test.ts +47 -18
- package/src/__tests__/plugin-types.test.ts +15 -23
- package/src/__tests__/process-message-background-slack.test.ts +53 -0
- package/src/__tests__/process-message-display-content.test.ts +421 -0
- package/src/__tests__/profile-entry-status.test.ts +43 -0
- package/src/__tests__/provider-catalog-visibility.test.ts +142 -0
- package/src/__tests__/provider-error-scenarios.test.ts +111 -0
- package/src/__tests__/{provider-managed-proxy-integration.test.ts → provider-platform-proxy-integration.test.ts} +20 -12
- package/src/__tests__/provider-registry-ollama.test.ts +12 -4
- package/src/__tests__/provider-send-message-override-profile.test.ts +10 -4
- package/src/__tests__/relay-server.test.ts +118 -0
- package/src/__tests__/retry-thinking-tool-choice.test.ts +15 -0
- package/src/__tests__/scaffold-managed-skill-tool.test.ts +65 -13
- package/src/__tests__/schedule-retry.test.ts +56 -4
- package/src/__tests__/schedule-routes.test.ts +151 -0
- package/src/__tests__/schedule-store.test.ts +94 -0
- package/src/__tests__/scheduler-disk-pressure.test.ts +0 -4
- package/src/__tests__/scheduler-recurrence.test.ts +87 -34
- package/src/__tests__/scheduler-reuse-conversation.test.ts +208 -5
- package/src/__tests__/scheduler-wake.test.ts +0 -63
- package/src/__tests__/schema-transforms.test.ts +20 -0
- package/src/__tests__/search-skills-unified.test.ts +0 -5
- package/src/__tests__/secret-allowlist.test.ts +1 -0
- package/src/__tests__/{secret-routes-managed-proxy.test.ts → secret-routes-platform-proxy.test.ts} +12 -4
- package/src/__tests__/server-history-render.test.ts +43 -0
- package/src/__tests__/shell-credential-ref.test.ts +95 -3
- package/src/__tests__/shell-tool-proxy-mode.test.ts +14 -0
- package/src/__tests__/skill-load-feature-flag.test.ts +1 -12
- package/src/__tests__/skill-load-tool.test.ts +29 -93
- package/src/__tests__/skill-memory.test.ts +23 -3
- package/src/__tests__/skills-file-content-endpoint.test.ts +9 -38
- package/src/__tests__/skills-files-catalog-fallback.test.ts +0 -3
- package/src/__tests__/skills-install-extract.test.ts +49 -38
- package/src/__tests__/skills-install-staging.test.ts +159 -0
- package/src/__tests__/skills-uninstall.test.ts +9 -41
- package/src/__tests__/skills.test.ts +51 -58
- package/src/__tests__/slack-channel-config.test.ts +9 -0
- package/src/__tests__/subagent-call-site-routing.test.ts +78 -16
- package/src/__tests__/subagent-tool-filtering.test.ts +50 -0
- package/src/__tests__/suggestion-routes.test.ts +3 -3
- package/src/__tests__/sync-message-contract.test.ts +63 -0
- package/src/__tests__/system-prompt.test.ts +737 -63
- package/src/__tests__/task-scheduler.test.ts +88 -23
- package/src/__tests__/terminal-tools.test.ts +28 -1
- package/src/__tests__/thread-backfill.test.ts +557 -27
- package/src/__tests__/title-generate-pipeline.test.ts +0 -13
- package/src/__tests__/token-estimate-pipeline.test.ts +0 -3
- package/src/__tests__/tool-error-pipeline.test.ts +0 -3
- package/src/__tests__/tool-execute-pipeline.test.ts +0 -5
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +1 -1
- package/src/__tests__/tool-executor.test.ts +16 -4
- package/src/__tests__/tool-result-truncate-pipeline.test.ts +0 -12
- package/src/__tests__/turn-events-store.test.ts +256 -0
- package/src/__tests__/twilio-routes.test.ts +4 -0
- package/src/__tests__/update-bulletin-job.test.ts +96 -193
- package/src/__tests__/usage-cli.test.ts +11 -73
- package/src/__tests__/user-plugin-loader.test.ts +143 -5
- package/src/__tests__/vercel-config.test.ts +168 -0
- package/src/__tests__/voice-session-bridge.test.ts +198 -0
- package/src/__tests__/web-search-catalog-parity.test.ts +108 -0
- package/src/__tests__/web-search.test.ts +303 -2
- package/src/__tests__/workspace-migration-039-drop-legacy-llm-keys.test.ts +1 -21
- package/src/__tests__/workspace-migration-057-repair-stale-gemini-model-ids.test.ts +170 -0
- package/src/__tests__/workspace-migration-069-seed-onboarding-threads.test.ts +53 -20
- package/src/__tests__/workspace-migration-072-seed-reply-suggestion-callsite.test.ts +241 -0
- package/src/__tests__/workspace-migration-073-repair-recall-callsite-empty-profile.test.ts +153 -0
- package/src/__tests__/workspace-migration-076-drop-services-inference-mode.test.ts +211 -0
- package/src/__tests__/workspace-migration-077-seed-memory-router-callsite.test.ts +174 -0
- package/src/__tests__/workspace-migration-079-home-feed-notification-only.test.ts +323 -0
- package/src/__tests__/workspace-migration-080-restrict-vercel-api-token-metadata.test.ts +299 -0
- package/src/__tests__/workspace-migration-081-backfill-bash-allowed-tools.test.ts +410 -0
- package/src/__tests__/workspace-migration-082-backfill-managed-profile-labels.test.ts +268 -0
- package/src/__tests__/workspace-migration-085-memory-v2-bm25-b-reembed-disabled-v2-pages.test.ts +220 -0
- package/src/__tests__/workspace-migration-086-revert-stale-gemini-mis-rewrites.test.ts +269 -0
- package/src/__tests__/workspace-migration-remove-legacy-skills-index.test.ts +309 -0
- package/src/__tests__/workspace-migration-unify-llm-callsite-configs.test.ts +3 -3
- package/src/__tests__/workspace-migrations-runner.test.ts +111 -3
- package/src/__tests__/workspace-release-notes-feature-flag-guard.test.ts +115 -0
- package/src/acp/__tests__/helpers/which-stub.ts +4 -2
- package/src/acp/resolve-agent.test.ts +25 -0
- package/src/acp/resolve-agent.ts +13 -2
- package/src/acp/session-manager.ts +14 -0
- package/src/agent/image-optimize.ts +13 -5
- package/src/approvals/guardian-request-resolvers.ts +32 -87
- package/src/calls/relay-server.ts +35 -0
- package/src/calls/relay-setup-router.ts +36 -0
- package/src/calls/types.ts +1 -0
- package/src/calls/voice-session-bridge.ts +74 -36
- package/src/channels/config.ts +14 -1
- package/src/channels/types.ts +109 -0
- package/src/cli/AGENTS.md +164 -4
- package/src/cli/__tests__/notifications.test.ts +54 -0
- package/src/cli/__tests__/unknown-command.test.ts +24 -0
- package/src/cli/commands/__tests__/avatar.test.ts +540 -0
- package/src/cli/commands/__tests__/backup.test.ts +236 -776
- package/src/cli/commands/__tests__/cache.test.ts +1 -1
- package/src/cli/commands/__tests__/changelog.test.ts +578 -0
- package/src/cli/commands/__tests__/channel-verification-sessions.test.ts +503 -0
- package/src/cli/commands/__tests__/conversations-import.test.ts +515 -0
- package/src/cli/commands/__tests__/domain-register.test.ts +140 -167
- package/src/cli/commands/__tests__/domain-status.test.ts +137 -76
- package/src/cli/commands/__tests__/email-attachment.test.ts +314 -337
- package/src/cli/commands/__tests__/email-core.test.ts +579 -0
- package/src/cli/commands/__tests__/image-generation.test.ts +87 -824
- package/src/cli/commands/__tests__/inference-send.test.ts +30 -266
- package/src/cli/commands/__tests__/inference-session.test.ts +423 -0
- package/src/cli/commands/__tests__/memory-v2.test.ts +81 -110
- package/src/cli/commands/__tests__/schedules.test.ts +491 -0
- package/src/cli/commands/__tests__/skills.test.ts +563 -0
- package/src/cli/commands/__tests__/status.test.ts +249 -0
- package/src/cli/commands/__tests__/stt.test.ts +320 -0
- package/src/cli/commands/__tests__/tts-synthesize.test.ts +4 -603
- package/src/cli/commands/__tests__/tts.test.ts +321 -0
- package/src/cli/commands/__tests__/webhooks.test.ts +86 -511
- package/src/cli/commands/attachment.ts +8 -3
- package/src/cli/commands/audit.ts +95 -64
- package/src/cli/commands/auth.ts +61 -58
- package/src/cli/commands/avatar.ts +276 -390
- package/src/cli/commands/backup.ts +409 -505
- package/src/cli/commands/bash.ts +9 -5
- package/src/cli/commands/browser.ts +28 -9
- package/src/cli/commands/cache.ts +9 -4
- package/src/cli/commands/changelog.ts +478 -0
- package/src/cli/commands/channel-verification-sessions.ts +238 -317
- package/src/cli/commands/clients.ts +8 -3
- package/src/cli/commands/completions.ts +9 -9
- package/src/cli/commands/config.ts +102 -72
- package/src/cli/commands/contacts.ts +575 -696
- package/src/cli/commands/conversations-defer.ts +17 -69
- package/src/cli/commands/conversations-import.ts +90 -253
- package/src/cli/commands/conversations.ts +429 -434
- package/src/cli/commands/credential-execution.ts +9 -6
- package/src/cli/commands/credentials.ts +456 -736
- package/src/cli/commands/default-action.ts +10 -53
- package/src/cli/commands/domain.ts +128 -206
- package/src/cli/commands/email.ts +606 -794
- package/src/cli/commands/gateway.ts +8 -1
- package/src/cli/commands/image-generation.ts +157 -205
- package/src/cli/commands/inference-providers.ts +352 -0
- package/src/cli/commands/inference-session.ts +415 -0
- package/src/cli/commands/inference.ts +87 -65
- package/src/cli/commands/keys.ts +8 -3
- package/src/cli/commands/mcp.ts +103 -287
- package/src/cli/commands/memory-v2.ts +162 -516
- package/src/cli/commands/notifications.ts +342 -304
- package/src/cli/commands/oauth/apps.ts +292 -261
- package/src/cli/commands/oauth/connect.ts +176 -297
- package/src/cli/commands/oauth/disconnect.ts +16 -215
- package/src/cli/commands/oauth/index.ts +49 -45
- package/src/cli/commands/oauth/mode.ts +43 -199
- package/src/cli/commands/oauth/ping.ts +17 -125
- package/src/cli/commands/oauth/providers.ts +732 -921
- package/src/cli/commands/oauth/request.ts +60 -350
- package/src/cli/commands/oauth/shared.ts +11 -121
- package/src/cli/commands/oauth/status.ts +31 -121
- package/src/cli/commands/oauth/token.ts +13 -55
- package/src/cli/commands/pending.ts +19 -10
- package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +133 -183
- package/src/cli/commands/platform/__tests__/connect.test.ts +66 -181
- package/src/cli/commands/platform/__tests__/disconnect.test.ts +71 -227
- package/src/cli/commands/platform/__tests__/status.test.ts +169 -287
- package/src/cli/commands/platform/connect.ts +16 -80
- package/src/cli/commands/platform/disconnect.ts +14 -112
- package/src/cli/commands/platform/index.ts +177 -246
- package/src/cli/commands/plugins.ts +185 -0
- package/src/cli/commands/routes.ts +153 -336
- package/src/cli/commands/schedules.ts +391 -0
- package/src/cli/commands/sequence.ts +316 -360
- package/src/cli/commands/skills.ts +449 -671
- package/src/cli/commands/status.ts +58 -37
- package/src/cli/commands/stt.ts +94 -262
- package/src/cli/commands/task.ts +14 -40
- package/src/cli/commands/telemetry.ts +40 -0
- package/src/cli/commands/trust.ts +8 -3
- package/src/cli/commands/tts.ts +162 -167
- package/src/cli/commands/ui.ts +35 -42
- package/src/cli/commands/usage.ts +188 -126
- package/src/cli/commands/watchers.ts +8 -3
- package/src/cli/commands/webhooks.ts +99 -193
- package/src/cli/lib/__tests__/cli-colors.test.ts +48 -0
- package/src/cli/lib/__tests__/confirm-prompt.test.ts +159 -0
- package/src/cli/lib/__tests__/install-from-github.test.ts +355 -0
- package/src/cli/lib/__tests__/list-installed-plugins.test.ts +154 -0
- package/src/cli/lib/__tests__/register-command.test.ts +85 -0
- package/src/cli/lib/__tests__/uninstall-plugin.test.ts +124 -0
- package/src/cli/lib/__tests__/unknown-command.test.ts +106 -0
- package/src/cli/lib/cli-colors.ts +12 -0
- package/src/cli/lib/confirm-prompt.ts +79 -0
- package/src/cli/lib/daemon-credential-client.ts +4 -5
- package/src/cli/lib/install-from-github.ts +304 -0
- package/src/cli/lib/list-installed-plugins.ts +137 -0
- package/src/cli/lib/nested-value.ts +44 -0
- package/src/cli/lib/open-browser.ts +36 -0
- package/src/cli/lib/register-command.ts +19 -0
- package/src/cli/lib/time-ago.ts +34 -0
- package/src/cli/lib/uninstall-plugin.ts +82 -0
- package/src/cli/lib/unknown-command.ts +111 -0
- package/src/cli/program.ts +40 -6
- package/src/cli/utils/__tests__/conversation-id.test.ts +66 -0
- package/src/cli/utils/__tests__/parse-duration.test.ts +49 -0
- package/src/cli/utils/conversation-id.ts +30 -0
- package/src/cli/utils/parse-duration.ts +41 -0
- package/src/config/acp-defaults.test.ts +5 -1
- package/src/config/acp-defaults.ts +11 -4
- package/src/config/bundled-skills/acp/TOOLS.json +2 -2
- package/src/config/bundled-skills/app-builder/SKILL.md +23 -21
- package/src/config/bundled-skills/app-builder/TOOLS.json +7 -0
- package/src/config/bundled-skills/app-control/TOOLS.json +32 -0
- package/src/config/bundled-skills/computer-use/TOOLS.json +15 -52
- package/src/config/bundled-skills/contacts/SKILL.md +12 -45
- package/src/config/bundled-skills/contacts/TOOLS.json +0 -57
- package/src/config/bundled-skills/document/SKILL.md +23 -3
- package/src/config/bundled-skills/document/TOOLS.json +53 -0
- package/src/config/bundled-skills/document/tools/document-delete.ts +12 -0
- package/src/config/bundled-skills/document/tools/document-list.ts +12 -0
- package/src/config/bundled-skills/document/tools/document-read.ts +12 -0
- package/src/config/bundled-skills/messaging/tools/messaging-archive-by-sender.ts +0 -12
- package/src/config/bundled-skills/messaging/tools/messaging-send.ts +0 -58
- package/src/config/bundled-skills/skill-management/SKILL.md +2 -2
- package/src/config/bundled-skills/skill-management/TOOLS.json +7 -7
- package/src/config/bundled-tool-registry.ts +6 -2
- package/src/config/feature-flag-registry.json +57 -1
- package/src/config/llm-resolver.ts +16 -1
- package/src/config/loader.ts +140 -52
- package/src/config/raw-config-utils.ts +2 -30
- package/src/config/schema.ts +8 -7
- package/src/config/schemas/__tests__/llm-request-logs.test.ts +36 -0
- package/src/config/schemas/__tests__/memory-v2.test.ts +49 -0
- package/src/config/schemas/call-site-catalog.ts +29 -7
- package/src/config/schemas/channels.ts +8 -0
- package/src/config/schemas/compaction.ts +28 -0
- package/src/config/schemas/heartbeat.ts +9 -0
- package/src/config/schemas/llm-request-logs.ts +81 -0
- package/src/config/schemas/llm.ts +55 -2
- package/src/config/schemas/memory-retrieval.ts +18 -0
- package/src/config/schemas/memory-retrospective.ts +48 -0
- package/src/config/schemas/memory-v2.ts +32 -1
- package/src/config/schemas/memory.ts +4 -0
- package/src/config/schemas/services.ts +15 -12
- package/src/config/schemas/tools.ts +14 -0
- package/src/config/seed-inference-profiles.ts +195 -134
- package/src/config/skills.ts +3 -96
- package/src/contacts/contact-store.ts +0 -61
- package/src/context/compactor.ts +1047 -0
- package/src/context/token-estimator.ts +2 -2
- package/src/context/window-manager.ts +197 -1334
- package/src/credential-execution/managed-catalog.ts +37 -0
- package/src/credential-health/credential-health-service.ts +280 -19
- package/src/daemon/__tests__/conversation-lifecycle-auto-analyze.test.ts +113 -0
- package/src/daemon/__tests__/conversation-tool-setup-exclude.test.ts +138 -0
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +183 -4
- package/src/daemon/__tests__/daemon-skill-host.test.ts +10 -4
- package/src/daemon/approval-generators.ts +26 -30
- package/src/daemon/config-watcher.ts +94 -29
- package/src/daemon/conversation-agent-loop-handlers.ts +24 -0
- package/src/daemon/conversation-agent-loop.ts +293 -103
- package/src/daemon/conversation-error.ts +188 -33
- package/src/daemon/conversation-lifecycle.ts +80 -26
- package/src/daemon/conversation-messaging.ts +25 -6
- package/src/daemon/conversation-process.ts +85 -31
- package/src/daemon/conversation-runtime-assembly.ts +30 -6
- package/src/daemon/conversation-slash.ts +184 -25
- package/src/daemon/conversation-store.ts +24 -10
- package/src/daemon/conversation-surfaces.ts +76 -12
- package/src/daemon/conversation-tool-setup.ts +63 -21
- package/src/daemon/conversation.ts +81 -10
- package/src/daemon/external-plugins-bootstrap.ts +231 -185
- package/src/daemon/first-greeting.ts +22 -2
- package/src/daemon/guardian-action-generators.ts +7 -22
- package/src/daemon/handlers/config-model.ts +13 -130
- package/src/daemon/handlers/config-slack-channel.ts +25 -10
- package/src/daemon/handlers/config-vercel.ts +3 -1
- package/src/daemon/handlers/shared.ts +14 -5
- package/src/daemon/handlers/skills.ts +166 -84
- package/src/daemon/history-repair.ts +61 -7
- package/src/daemon/host-app-control-proxy.ts +129 -29
- package/src/daemon/host-bash-proxy.ts +85 -158
- package/src/daemon/host-browser-proxy.ts +96 -35
- package/src/daemon/host-proxy-base.ts +13 -1
- package/src/daemon/host-proxy-preactivation.ts +25 -1
- package/src/daemon/identity-helpers.ts +19 -0
- package/src/daemon/lifecycle.ts +79 -70
- package/src/daemon/meet-host-supervisor.ts +20 -19
- package/src/daemon/memory-v2-startup.ts +58 -2
- package/src/daemon/message-protocol.ts +7 -0
- package/src/daemon/message-types/bookmarks.ts +18 -0
- package/src/daemon/message-types/conversations.ts +37 -9
- package/src/daemon/message-types/messages.ts +70 -1
- package/src/daemon/message-types/subagents.ts +1 -0
- package/src/daemon/message-types/sync.ts +61 -0
- package/src/daemon/pkb-reminder-builder.test.ts +54 -13
- package/src/daemon/pkb-reminder-builder.ts +21 -7
- package/src/daemon/plugin-source-watcher.ts +146 -0
- package/src/daemon/process-message.ts +77 -26
- package/src/daemon/server.ts +34 -20
- package/src/daemon/shutdown-handlers.ts +0 -2
- package/src/daemon/skill-memory-refresh.ts +29 -0
- package/src/daemon/tool-setup-types.ts +9 -0
- package/src/daemon/tool-side-effects.ts +6 -4
- package/src/daemon/wake-target-adapter.ts +11 -0
- package/src/documents/document-store.ts +221 -3
- package/src/embedded/plugin-api.ts +40 -0
- package/src/export/transcript-formatter.ts +61 -2
- package/src/filing/filing-service.ts +79 -53
- package/src/heartbeat/__tests__/heartbeat-service.test.ts +444 -0
- package/src/heartbeat/heartbeat-run-store.ts +3 -1
- package/src/heartbeat/heartbeat-service.ts +189 -127
- package/src/home/__tests__/feed-types.test.ts +99 -127
- package/src/home/__tests__/feed-writer.test.ts +77 -278
- package/src/home/__tests__/post-connect-feed.test.ts +9 -12
- package/src/home/feed-types.ts +41 -73
- package/src/home/feed-writer.ts +25 -156
- package/src/home/post-connect-feed.ts +2 -3
- package/src/index.ts +18 -1
- package/src/ipc/__tests__/cli-ipc.test.ts +2 -0
- package/src/ipc/__tests__/email-ipc.test.ts +506 -0
- package/src/ipc/__tests__/exit-helper.test.ts +104 -0
- package/src/ipc/__tests__/streaming-client.test.ts +237 -0
- package/src/ipc/__tests__/streaming-framing.test.ts +142 -0
- package/src/ipc/assistant-server.ts +55 -6
- package/src/ipc/cli-client.ts +370 -50
- package/src/ipc/routes/db-proxy-transaction.ts +151 -0
- package/src/ipc/skill-routes/__tests__/events-ipc.test.ts +60 -0
- package/src/ipc/skill-routes/events.ts +30 -3
- package/src/live-voice/__tests__/live-voice-session-manager.test.ts +46 -0
- package/src/live-voice/__tests__/live-voice-stt.test.ts +57 -0
- package/src/live-voice/__tests__/runtime-websocket-shell.test.ts +1 -0
- package/src/live-voice/live-voice-session-manager.ts +11 -4
- package/src/live-voice/live-voice-session.ts +14 -6
- package/src/mcp/client.ts +20 -4
- package/src/media/image-credentials.ts +3 -3
- package/src/memory/__tests__/bookmark-crud.test.ts +264 -0
- package/src/memory/__tests__/bookmark-schema.test.ts +181 -0
- package/src/memory/__tests__/conversation-queries.test.ts +263 -0
- package/src/memory/__tests__/conversation-types.test.ts +36 -0
- package/src/memory/__tests__/find-most-recent-retrospective-for.test.ts +130 -0
- package/src/memory/__tests__/jobs-worker-v2-graph-trigger-embed.test.ts +113 -0
- package/src/memory/__tests__/memory-retrospective-enqueue.test.ts +177 -0
- package/src/memory/__tests__/memory-retrospective-job.test.ts +328 -0
- package/src/memory/__tests__/memory-retrospective-startup-cleanup.test.ts +318 -0
- package/src/memory/__tests__/memory-retrospective-trigger-check.test.ts +90 -0
- package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +69 -0
- package/src/memory/__tests__/memory-v2-concept-frequency.test.ts +3 -0
- package/src/memory/__tests__/message-content.test.ts +35 -0
- package/src/memory/bookmark-crud.ts +211 -0
- package/src/memory/context-search/__tests__/agent-runner-redaction.test.ts +31 -9
- package/src/memory/context-search/agent-protocol.ts +5 -1
- package/src/memory/context-search/agent-runner.ts +60 -85
- package/src/memory/context-search/limits.ts +1 -4
- package/src/memory/context-search/search.ts +23 -113
- package/src/memory/context-search/sources/conversations.ts +80 -8
- package/src/memory/context-search/sources/memory-v2.ts +39 -14
- package/src/memory/context-search/sources/memory.ts +7 -0
- package/src/memory/context-search/sources/workspace.ts +17 -10
- package/src/memory/context-search/types.ts +1 -1
- package/src/memory/conversation-bootstrap.ts +11 -0
- package/src/memory/conversation-crud.ts +368 -22
- package/src/memory/conversation-queries.ts +116 -12
- package/src/memory/conversation-title-service.ts +1 -0
- package/src/memory/conversation-types.ts +16 -0
- package/src/memory/db-init.ts +20 -0
- package/src/memory/delivery-crud.ts +152 -5
- package/src/memory/embedding-backend.ts +6 -5
- package/src/memory/embedding-runtime-manager.ts +1 -2
- package/src/memory/external-conversation-store.ts +66 -5
- package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +66 -9
- package/src/memory/graph/__tests__/remember-description.test.ts +55 -0
- package/src/memory/graph/conversation-graph-memory.ts +92 -5
- package/src/memory/graph/extraction.ts +4 -0
- package/src/memory/graph/graph-memory-state-store.ts +16 -3
- package/src/memory/graph/tool-handlers.ts +17 -7
- package/src/memory/graph/tools.ts +45 -6
- package/src/memory/indexer.ts +51 -29
- package/src/memory/jobs/__tests__/embed-concept-page.test.ts +86 -15
- package/src/memory/jobs/embed-concept-page.ts +65 -20
- package/src/memory/jobs-store.ts +51 -1
- package/src/memory/jobs-worker.ts +57 -3
- package/src/memory/llm-request-log-source-clickhouse.ts +324 -0
- package/src/memory/llm-request-log-source-local.ts +26 -0
- package/src/memory/llm-request-log-source.ts +64 -0
- package/src/memory/llm-request-log-store.ts +1 -1
- package/src/memory/llm-usage-store.ts +125 -5
- package/src/memory/memory-retrospective-constants.ts +13 -0
- package/src/memory/memory-retrospective-enqueue.ts +114 -0
- package/src/memory/memory-retrospective-job.ts +351 -0
- package/src/memory/memory-retrospective-startup-cleanup.ts +175 -0
- package/src/memory/memory-retrospective-state.ts +162 -0
- package/src/memory/memory-retrospective-trigger-check.ts +91 -0
- package/src/memory/memory-v2-activation-log-store.ts +49 -5
- package/src/memory/memory-v2-concept-frequency.ts +4 -0
- package/src/memory/message-content.ts +38 -1
- package/src/memory/migrations/109-external-conversation-bindings.ts +15 -4
- package/src/memory/migrations/227-add-conversation-inference-profile.ts +6 -1
- package/src/memory/migrations/228-rename-inference-profile-snake-case.ts +20 -7
- package/src/memory/migrations/229-delete-private-conversations.test.ts +107 -1
- package/src/memory/migrations/229-delete-private-conversations.ts +19 -0
- package/src/memory/migrations/231-repair-memory-graph-event-dates.ts +16 -2
- package/src/memory/migrations/240-conversation-inference-profile-session.ts +25 -0
- package/src/memory/migrations/241-activation-state-fk-cascade.ts +50 -0
- package/src/memory/migrations/242-message-bookmarks.ts +38 -0
- package/src/memory/migrations/243-provider-connections.ts +68 -0
- package/src/memory/migrations/244-provider-connection-status-label.ts +23 -0
- package/src/memory/migrations/245-memory-retrospective-state.ts +36 -0
- package/src/memory/migrations/246-backfill-provider-connection-label.ts +81 -0
- package/src/memory/migrations/247-external-conversation-binding-thread-id.ts +78 -0
- package/src/memory/migrations/248-create-onboarding-events.ts +21 -0
- package/src/memory/migrations/249-normalize-slack-external-content.ts +240 -0
- package/src/memory/migrations/__tests__/244-provider-connection-status-label.test.ts +84 -0
- package/src/memory/migrations/__tests__/245-memory-retrospective-state.test.ts +125 -0
- package/src/memory/migrations/__tests__/246-backfill-provider-connection-label.test.ts +192 -0
- package/src/memory/migrations/index.ts +13 -0
- package/src/memory/migrations/registry.ts +8 -0
- package/src/memory/onboarding-events-store.ts +106 -0
- package/src/memory/published-pages-store.ts +16 -0
- package/src/memory/schema/bookmarks.ts +36 -0
- package/src/memory/schema/calls.ts +1 -0
- package/src/memory/schema/conversations.ts +2 -0
- package/src/memory/schema/index.ts +2 -0
- package/src/memory/schema/inference.ts +27 -0
- package/src/memory/schema/infrastructure.ts +12 -0
- package/src/memory/schema/memory-core.ts +9 -0
- package/src/memory/search/semantic.ts +1 -4
- package/src/memory/turn-events-store.ts +127 -2
- package/src/memory/v2/__tests__/__snapshots__/prompts-router.test.ts.snap +27 -0
- package/src/memory/v2/__tests__/activation-store.test.ts +5 -5
- package/src/memory/v2/__tests__/activation.test.ts +11 -12
- package/src/memory/v2/__tests__/backfill-jobs.test.ts +38 -21
- package/src/memory/v2/__tests__/consolidation-job.test.ts +123 -135
- package/src/memory/v2/__tests__/edge-index.test.ts +1 -1
- package/src/memory/v2/__tests__/frontmatter-sweep.test.ts +111 -0
- package/src/memory/v2/__tests__/injection.test.ts +726 -18
- package/src/memory/v2/__tests__/migration.test.ts +94 -3
- package/src/memory/v2/__tests__/page-index.test.ts +360 -0
- package/src/memory/v2/__tests__/page-store.test.ts +14 -1
- package/src/memory/v2/__tests__/prompts-router.test.ts +309 -0
- package/src/memory/v2/__tests__/qdrant.test.ts +138 -3
- package/src/memory/v2/__tests__/reranker.test.ts +4 -4
- package/src/memory/v2/__tests__/router.test.ts +531 -0
- package/src/memory/v2/__tests__/sim.test.ts +45 -1
- package/src/memory/v2/__tests__/skill-store.test.ts +445 -11
- package/src/memory/v2/__tests__/static-context.test.ts +7 -22
- package/src/memory/v2/__tests__/sweep-job.test.ts +95 -0
- package/src/memory/v2/activation-store.ts +34 -5
- package/src/memory/v2/activation.ts +40 -27
- package/src/memory/v2/backfill-jobs.ts +17 -84
- package/src/memory/v2/consolidation-job.ts +85 -78
- package/src/memory/v2/frontmatter-sweep.ts +91 -0
- package/src/memory/v2/injection.ts +466 -109
- package/src/memory/v2/migration.ts +147 -20
- package/src/memory/v2/page-index.ts +221 -0
- package/src/memory/v2/page-store.ts +3 -0
- package/src/memory/v2/prompts/consolidation.ts +9 -7
- package/src/memory/v2/prompts/router.ts +195 -0
- package/src/memory/v2/prompts/sweep.ts +2 -2
- package/src/memory/v2/qdrant.ts +234 -93
- package/src/memory/v2/reranker.ts +14 -7
- package/src/memory/v2/router.ts +323 -0
- package/src/memory/v2/sim.ts +25 -12
- package/src/memory/v2/skill-store.ts +204 -30
- package/src/memory/v2/static-context.ts +16 -9
- package/src/memory/v2/sweep-job.ts +122 -96
- package/src/memory/v2/types.ts +10 -6
- package/src/memory/validation.ts +13 -0
- package/src/messaging/providers/slack/__tests__/adapter-token-routing.test.ts +45 -5
- package/src/messaging/providers/slack/__tests__/download.test.ts +231 -0
- package/src/messaging/providers/slack/adapter.ts +43 -5
- package/src/messaging/providers/slack/client.ts +27 -0
- package/src/messaging/providers/slack/deep-link.ts +65 -0
- package/src/messaging/providers/slack/download.ts +104 -0
- package/src/messaging/providers/slack/message-metadata.test.ts +32 -0
- package/src/messaging/providers/slack/message-metadata.ts +27 -0
- package/src/messaging/providers/slack/render-transcript.test.ts +134 -0
- package/src/messaging/providers/slack/render-transcript.ts +69 -5
- package/src/messaging/providers/slack/types.ts +20 -1
- package/src/notifications/__tests__/emit-signal-home-feed.test.ts +182 -0
- package/src/notifications/__tests__/home-feed-side-effect.test.ts +199 -0
- package/src/notifications/__tests__/signal-registry.test.ts +17 -0
- package/src/notifications/adapters/platform.ts +171 -0
- package/src/notifications/conversation-pairing.ts +4 -3
- package/src/notifications/copy-composer.ts +15 -0
- package/src/notifications/decision-engine.ts +2 -1
- package/src/notifications/destination-resolver.ts +21 -0
- package/src/notifications/emit-signal.ts +48 -2
- package/src/notifications/home-feed-side-effect.ts +165 -0
- package/src/notifications/signal.ts +8 -1
- package/src/oauth/connection-resolver.ts +8 -4
- package/src/oauth/platform-connection.ts +6 -2
- package/src/oauth/seed-providers.ts +10 -1
- package/src/permissions/checker.ts +14 -0
- package/src/permissions/ipc-risk-types.ts +3 -0
- package/src/permissions/question-prompter.test.ts +416 -0
- package/src/permissions/question-prompter.ts +294 -0
- package/src/platform/client.test.ts +1 -1
- package/src/platform/client.ts +1 -1
- package/src/plugin-api/constants.ts +26 -0
- package/src/plugin-api/index.ts +46 -0
- package/src/plugin-api/package.json +12 -0
- package/src/plugin-api/types.ts +144 -0
- package/src/plugins/defaults/circuit-breaker.ts +0 -5
- package/src/plugins/defaults/compaction.ts +0 -4
- package/src/plugins/defaults/empty-response.ts +0 -2
- package/src/plugins/defaults/history-repair.ts +0 -2
- package/src/plugins/defaults/injectors.ts +55 -6
- package/src/plugins/defaults/llm-call.ts +0 -2
- package/src/plugins/defaults/memory-retrieval.ts +0 -1
- package/src/plugins/defaults/overflow-reduce.ts +0 -1
- package/src/plugins/defaults/persistence.ts +0 -2
- package/src/plugins/defaults/title-generate.ts +0 -5
- package/src/plugins/defaults/token-estimate.ts +0 -2
- package/src/plugins/defaults/tool-error.ts +0 -7
- package/src/plugins/defaults/tool-execute.ts +0 -2
- package/src/plugins/defaults/tool-result-truncate.ts +0 -4
- package/src/plugins/ensure-plugin-api-shim.ts +96 -0
- package/src/plugins/external-api.ts +104 -0
- package/src/plugins/external-plugin-loader.ts +367 -0
- package/src/plugins/feature-gate.ts +22 -0
- package/src/plugins/pipeline.ts +37 -0
- package/src/plugins/registry.ts +48 -80
- package/src/plugins/types.ts +74 -53
- package/src/plugins/user-loader.ts +85 -43
- package/src/proactive-artifact/aux-message-injector.ts +11 -0
- package/src/proactive-artifact/job.test.ts +49 -9
- package/src/proactive-artifact/job.ts +4 -0
- package/src/proactive-artifact/trigger-state.test.ts +9 -0
- package/src/proactive-artifact/trigger-state.ts +4 -0
- package/src/prompts/__tests__/system-prompt.test.ts +117 -0
- package/src/prompts/__tests__/task-progress-hint-section.test.ts +99 -0
- package/src/prompts/normalize-onboarding.ts +27 -0
- package/src/prompts/sections.ts +302 -0
- package/src/prompts/system-prompt.ts +72 -154
- package/src/prompts/templates/BOOTSTRAP.md +17 -1
- package/src/prompts/templates/system-sections.ts +173 -0
- package/src/prompts/update-bulletin-job.ts +61 -73
- package/src/providers/__tests__/dispatch-connection-routing.test.ts +279 -0
- package/src/providers/__tests__/inference.test.ts +303 -0
- package/src/providers/__tests__/provider-env-vars.test.ts +6 -0
- package/src/providers/__tests__/provider-secret-catalog.test.ts +6 -0
- package/src/providers/__tests__/retry-callsite.test.ts +14 -32
- package/src/providers/__tests__/satellite-connection-routing.test.ts +510 -0
- package/src/providers/__tests__/search-provider-catalog.test.ts +80 -0
- package/src/providers/anthropic/client.ts +123 -54
- package/src/providers/call-site-routing.ts +94 -16
- package/src/providers/connection-resolution.ts +170 -0
- package/src/providers/inference/__tests__/connections-status-label.test.ts +250 -0
- package/src/providers/inference/adapter-factory.ts +210 -0
- package/src/providers/inference/auth.ts +112 -0
- package/src/providers/inference/backfill.ts +196 -0
- package/src/providers/inference/connections.ts +401 -0
- package/src/providers/inference/resolve-auth.ts +73 -0
- package/src/providers/model-catalog.ts +386 -6
- package/src/providers/openai/chat-completions-provider.ts +10 -2
- package/src/providers/openai/responses-provider.ts +4 -2
- package/src/providers/openrouter/client.ts +7 -0
- package/src/providers/{managed-proxy → platform-proxy}/constants.ts +4 -1
- package/src/providers/{managed-proxy → platform-proxy}/context.ts +3 -3
- package/src/providers/provider-availability.ts +17 -2
- package/src/providers/provider-catalog-visibility.ts +36 -0
- package/src/providers/provider-env-vars.ts +17 -7
- package/src/providers/provider-secret-catalog.ts +49 -30
- package/src/providers/provider-send-message.ts +41 -20
- package/src/providers/registry.ts +151 -159
- package/src/providers/retry.ts +65 -11
- package/src/providers/search-provider-catalog.ts +121 -0
- package/src/runtime/AGENTS.md +18 -5
- package/src/runtime/__tests__/agent-wake.test.ts +152 -0
- package/src/runtime/__tests__/background-job-runner.test.ts +357 -0
- package/src/runtime/__tests__/pre-first-message-gate.test.ts +82 -0
- package/src/runtime/actor-trust-resolver.ts +32 -10
- package/src/runtime/agent-wake.ts +64 -7
- package/src/runtime/assistant-event-hub.ts +3 -85
- package/src/runtime/auth/route-policy.ts +311 -9
- package/src/runtime/auth/same-actor.ts +2 -0
- package/src/runtime/background-job-runner.ts +339 -0
- package/src/runtime/btw-sidechain.ts +3 -0
- package/src/runtime/http-router.ts +36 -1
- package/src/runtime/http-server.ts +31 -5
- package/src/runtime/http-types.ts +21 -0
- package/src/runtime/middleware/__tests__/request-logger.test.ts +162 -0
- package/src/runtime/middleware/request-logger.ts +62 -1
- package/src/runtime/migrations/origin-mode.ts +1 -1
- package/src/runtime/pending-interactions.ts +1 -0
- package/src/runtime/pre-first-message-gate.ts +83 -0
- package/src/runtime/routes/__tests__/backup-routes.test.ts +8 -1
- package/src/runtime/routes/__tests__/bookmark-routes.test.ts +268 -0
- package/src/runtime/routes/__tests__/connection-routes-vs-cli-parity.test.ts +142 -0
- package/src/runtime/routes/__tests__/conversation-management-routes.test.ts +319 -0
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +280 -4
- package/src/runtime/routes/__tests__/home-feed-routes.test.ts +15 -136
- package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +736 -0
- package/src/runtime/routes/__tests__/memory-v2-routes.test.ts +4 -4
- package/src/runtime/routes/__tests__/question-routes.test.ts +395 -0
- package/src/runtime/routes/__tests__/stt-routes.test.ts +5 -1
- package/src/runtime/routes/__tests__/surface-action-routes.test.ts +384 -0
- package/src/runtime/routes/__tests__/tts-routes.test.ts +70 -3
- package/src/runtime/routes/acp-routes-list.test.ts +143 -0
- package/src/runtime/routes/acp-routes.ts +12 -8
- package/src/runtime/routes/app-management-routes.ts +228 -3
- package/src/runtime/routes/approval-routes.ts +0 -18
- package/src/runtime/routes/audit-routes.ts +43 -0
- package/src/runtime/routes/auth-routes.ts +72 -0
- package/src/runtime/routes/avatar-routes.ts +273 -20
- package/src/runtime/routes/backup-routes.ts +406 -2
- package/src/runtime/routes/bookmark-routes.ts +156 -0
- package/src/runtime/routes/btw-routes.ts +5 -1
- package/src/runtime/routes/channel-availability-routes.ts +121 -0
- package/src/runtime/routes/channel-verification-routes.ts +2 -1
- package/src/runtime/routes/contact-routes.ts +0 -160
- package/src/runtime/routes/conversation-cli-routes.ts +233 -0
- package/src/runtime/routes/conversation-list-routes.ts +3 -20
- package/src/runtime/routes/conversation-management-routes.ts +47 -85
- package/src/runtime/routes/conversation-query-routes.ts +350 -97
- package/src/runtime/routes/conversation-routes.ts +121 -21
- package/src/runtime/routes/conversations-import-routes.ts +229 -0
- package/src/runtime/routes/credential-routes.ts +540 -0
- package/src/runtime/routes/debug-routes.ts +2 -2
- package/src/runtime/routes/document-pdf-renderer.ts +5 -1
- package/src/runtime/routes/documents-routes.ts +25 -86
- package/src/runtime/routes/domain-routes.ts +167 -0
- package/src/runtime/routes/email-routes.ts +603 -0
- package/src/runtime/routes/errors.ts +2 -2
- package/src/runtime/routes/events-routes.ts +192 -0
- package/src/runtime/routes/group-routes.ts +5 -0
- package/src/runtime/routes/home-feed-routes.ts +6 -78
- package/src/runtime/routes/host-app-control-routes.ts +44 -2
- package/src/runtime/routes/host-browser-routes.ts +103 -22
- package/src/runtime/routes/http-adapter.ts +2 -0
- package/src/runtime/routes/identity-routes.ts +5 -0
- package/src/runtime/routes/image-generation-routes.ts +99 -0
- package/src/runtime/routes/inbound-conversation.ts +28 -8
- package/src/runtime/routes/inbound-message-handler.ts +236 -41
- package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +248 -1
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +118 -7
- package/src/runtime/routes/inbound-stages/edit-intercept.ts +17 -4
- package/src/runtime/routes/inbound-stages/guardian-reply-intercept.test.ts +156 -0
- package/src/runtime/routes/inbound-stages/guardian-reply-intercept.ts +22 -4
- package/src/runtime/routes/index.ts +42 -0
- package/src/runtime/routes/inference-profile-session-handler.ts +285 -0
- package/src/runtime/routes/inference-profile-session-reaper.ts +84 -0
- package/src/runtime/routes/inference-profile-session-routes.ts +146 -0
- package/src/runtime/routes/inference-provider-connection-routes.ts +361 -0
- package/src/runtime/routes/inference-send-routes.ts +115 -0
- package/src/runtime/routes/integrations/slack/share.ts +4 -52
- package/src/runtime/routes/integrations/slack/token.ts +43 -0
- package/src/runtime/routes/integrations/twilio.ts +7 -13
- package/src/runtime/routes/mcp-auth-routes.ts +283 -9
- package/src/runtime/routes/memory-v2-routes.ts +13 -398
- package/src/runtime/routes/notification-routes.ts +3 -1
- package/src/runtime/routes/oauth-apps.ts +112 -7
- package/src/runtime/routes/oauth-commands-routes.ts +1097 -0
- package/src/runtime/routes/oauth-connect-routes.ts +67 -5
- package/src/runtime/routes/oauth-lifecycle-routes.ts +43 -0
- package/src/runtime/routes/oauth-providers.ts +298 -8
- package/src/runtime/routes/platform-routes.ts +336 -0
- package/src/runtime/routes/playground/inject-failures.ts +2 -1
- package/src/runtime/routes/playground/reset-circuit.ts +2 -1
- package/src/runtime/routes/playground/state.ts +2 -1
- package/src/runtime/routes/publish-routes.ts +221 -0
- package/src/runtime/routes/question-routes.ts +259 -0
- package/src/runtime/routes/rename-conversation-routes.ts +2 -33
- package/src/runtime/routes/schedule-routes.ts +79 -0
- package/src/runtime/routes/sequence-routes.ts +291 -0
- package/src/runtime/routes/settings-routes.ts +2 -10
- package/src/runtime/routes/skills-routes.ts +31 -1
- package/src/runtime/routes/stt-routes.ts +240 -3
- package/src/runtime/routes/subagents-routes.ts +57 -18
- package/src/runtime/routes/surface-action-routes.ts +43 -7
- package/src/runtime/routes/telemetry-routes.ts +27 -0
- package/src/runtime/routes/tts-routes.ts +93 -1
- package/src/runtime/routes/types.ts +32 -0
- package/src/runtime/routes/user-routes-cli.ts +243 -0
- package/src/runtime/routes/webhook-routes.ts +165 -0
- package/src/runtime/routes/workspace-routes.test.ts +43 -0
- package/src/runtime/routes/workspace-routes.ts +28 -0
- package/src/runtime/services/conversation-serializer.ts +39 -7
- package/src/runtime/sync/resource-sync-events.ts +117 -0
- package/src/runtime/sync/sync-publisher.test.ts +105 -0
- package/src/runtime/sync/sync-publisher.ts +21 -0
- package/src/schedule/schedule-store.ts +27 -2
- package/src/schedule/scheduler.ts +208 -123
- package/src/security/__tests__/provider-key-env-fallback.test.ts +12 -6
- package/src/security/__tests__/untrusted-content.test.ts +86 -0
- package/src/security/secret-patterns.ts +3 -0
- package/src/security/untrusted-content.ts +93 -8
- package/src/sequence/engine.ts +38 -40
- package/src/skills/catalog-files.ts +1 -1
- package/src/skills/catalog-install.ts +233 -116
- package/src/skills/clawhub.ts +70 -13
- package/src/skills/managed-store.ts +4 -119
- package/src/skills/skillssh-registry.ts +27 -48
- package/src/subagent/manager.ts +28 -15
- package/src/telemetry/types.ts +113 -1
- package/src/telemetry/usage-telemetry-reporter.test.ts +312 -5
- package/src/telemetry/usage-telemetry-reporter.ts +113 -7
- package/src/tools/apps/executors.ts +58 -7
- package/src/tools/ask-question/ask-question-tool.test.ts +509 -0
- package/src/tools/ask-question/ask-question-tool.ts +304 -0
- package/src/tools/browser/__tests__/browser-execution-acquire.test.ts +206 -0
- package/src/tools/browser/browser-execution.ts +29 -14
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +174 -0
- package/src/tools/browser/cdp-client/cdp-inspect/__tests__/ws-transport.test.ts +16 -13
- package/src/tools/browser/cdp-client/extension-cdp-client.ts +24 -1
- package/src/tools/browser/cdp-client/factory.ts +66 -5
- package/src/tools/browser/runtime-check.ts +77 -0
- package/src/tools/computer-use/definitions.ts +3 -3
- package/src/tools/credentials/vault.ts +1 -1
- package/src/tools/document/document-tool.ts +124 -1
- package/src/tools/filesystem/edit.ts +1 -1
- package/src/tools/filesystem/list.ts +1 -1
- package/src/tools/filesystem/read.ts +1 -1
- package/src/tools/filesystem/write.ts +5 -2
- package/src/tools/host-filesystem/transfer.ts +1 -1
- package/src/tools/host-terminal/host-shell.ts +1 -1
- package/src/tools/memory/register.test.ts +3 -3
- package/src/tools/memory/register.ts +9 -1
- package/src/tools/network/__tests__/web-search.test.ts +156 -0
- package/src/tools/network/web-search.ts +280 -37
- package/src/tools/permission-checker.ts +14 -6
- package/src/tools/registry.ts +17 -7
- package/src/tools/schedule/create.ts +2 -2
- package/src/tools/schema-transforms.ts +7 -2
- package/src/tools/side-effects.ts +1 -0
- package/src/tools/skills/delete-managed.ts +4 -4
- package/src/tools/skills/execute.ts +1 -1
- package/src/tools/skills/scaffold-managed.ts +3 -2
- package/src/tools/subagent/notify-parent.ts +1 -1
- package/src/tools/subagent/spawn.ts +3 -3
- package/src/tools/system/request-permission.ts +2 -2
- package/src/tools/terminal/safe-env.ts +60 -1
- package/src/tools/terminal/shell.ts +44 -0
- package/src/tools/tool-manifest.ts +2 -0
- package/src/tools/types.ts +72 -21
- package/src/tools/ui-surface/definitions.ts +6 -5
- package/src/tts/__tests__/provider-adapters.test.ts +76 -2
- package/src/tts/providers/elevenlabs-provider.ts +75 -1
- package/src/types/onboarding-context.ts +2 -0
- package/src/usage/attribution.ts +3 -2
- package/src/util/errors.ts +17 -0
- package/src/util/platform.ts +10 -0
- package/src/util/pricing.ts +86 -160
- package/src/watcher/__tests__/engine.test.ts +323 -0
- package/src/watcher/constants.ts +7 -0
- package/src/watcher/engine.ts +94 -90
- package/src/workspace/migrations/046-seed-conversation-starters-callsite.ts +6 -9
- package/src/workspace/migrations/054-seed-recall-callsite.ts +10 -1
- package/src/workspace/migrations/057-repair-stale-gemini-model-ids.ts +94 -5
- package/src/workspace/migrations/069-seed-onboarding-threads.ts +8 -2
- package/src/workspace/migrations/072-seed-reply-suggestion-callsite.ts +117 -0
- package/src/workspace/migrations/073-repair-recall-callsite-empty-profile.ts +95 -0
- package/src/workspace/migrations/074-drop-deprecated-secret-detection-keys.ts +117 -0
- package/src/workspace/migrations/075-memory-v2-bm25-b-default-reembed.ts +61 -0
- package/src/workspace/migrations/076-drop-services-inference-mode.ts +62 -0
- package/src/workspace/migrations/077-seed-memory-router-callsite.ts +89 -0
- package/src/workspace/migrations/078-release-notes-tavily-web-search.ts +66 -0
- package/src/workspace/migrations/079-home-feed-notification-only.ts +197 -0
- package/src/workspace/migrations/080-restrict-vercel-api-token-metadata.ts +182 -0
- package/src/workspace/migrations/081-backfill-bash-allowed-tools-for-injection-credentials.ts +160 -0
- package/src/workspace/migrations/082-backfill-managed-profile-labels.ts +154 -0
- package/src/workspace/migrations/083-system-prompt-prefix-to-file.ts +191 -0
- package/src/workspace/migrations/084-remove-legacy-skills-index.ts +276 -0
- package/src/workspace/migrations/085-memory-v2-bm25-b-reembed-disabled-v2-pages.ts +137 -0
- package/src/workspace/migrations/086-revert-stale-gemini-mis-rewrites.ts +198 -0
- package/src/workspace/migrations/registry.ts +30 -0
- package/src/workspace/migrations/runner.ts +46 -5
- package/src/workspace/migrations/types.ts +17 -3
- package/src/workspace/provider-commit-message-generator.ts +3 -2
- package/examples/plugins/echo/bun.lock +0 -25
- package/src/__tests__/context-search-pkb-source.test.ts +0 -498
- package/src/__tests__/context-window-manager.test.ts +0 -2093
- package/src/__tests__/credentials-cli.test.ts +0 -1225
- package/src/__tests__/memory-admin-recall.test.ts +0 -213
- package/src/approvals/__tests__/guardian-feed-event.test.ts +0 -303
- package/src/cli/commands/__tests__/email-download.test.ts +0 -260
- package/src/cli/commands/__tests__/email-list.test.ts +0 -216
- package/src/cli/commands/__tests__/email-register.test.ts +0 -186
- package/src/cli/commands/__tests__/email-send.test.ts +0 -416
- package/src/cli/commands/__tests__/email-status.test.ts +0 -185
- package/src/cli/commands/__tests__/email-unregister.test.ts +0 -168
- package/src/cli/commands/__tests__/routes.test.ts +0 -562
- package/src/cli/commands/__tests__/stt-transcribe.test.ts +0 -454
- package/src/cli/commands/autonomy.ts +0 -365
- package/src/cli/commands/memory.ts +0 -424
- package/src/cli/commands/oauth/__tests__/connect.test.ts +0 -947
- package/src/cli/commands/oauth/__tests__/disconnect.test.ts +0 -686
- package/src/cli/commands/oauth/__tests__/mode.test.ts +0 -632
- package/src/cli/commands/oauth/__tests__/ping.test.ts +0 -631
- package/src/cli/commands/oauth/__tests__/providers-delete.test.ts +0 -573
- package/src/cli/commands/oauth/__tests__/providers-register.test.ts +0 -330
- package/src/cli/commands/oauth/__tests__/providers-update.test.ts +0 -521
- package/src/cli/commands/oauth/__tests__/status.test.ts +0 -551
- package/src/cli/commands/oauth/__tests__/token.test.ts +0 -420
- package/src/cli/lib/daemon-avatar-client.ts +0 -37
- package/src/config/bundled-skills/contacts/tools/contact-upsert.ts +0 -87
- package/src/config/bundled-skills/messaging/tools/__tests__/messaging-feed-events.test.ts +0 -207
- package/src/context/__tests__/compact-prompt.test.ts +0 -63
- package/src/context/prompts/compact.md +0 -26
- package/src/daemon/__tests__/conversation-feed-event.test.ts +0 -304
- package/src/heartbeat/__tests__/heartbeat-feed-event.test.ts +0 -233
- package/src/home/__tests__/assistant-feed-authoring.test.ts +0 -156
- package/src/home/__tests__/emit-feed-event.test.ts +0 -169
- package/src/home/__tests__/feed-population-integration.test.ts +0 -312
- package/src/home/__tests__/feed-scheduler.test.ts +0 -222
- package/src/home/__tests__/phase5-exit-criteria.test.ts +0 -229
- package/src/home/__tests__/platform-gmail-digest.test.ts +0 -222
- package/src/home/__tests__/rollup-producer.test.ts +0 -507
- package/src/home/assistant-feed-authoring.ts +0 -135
- package/src/home/emit-feed-event.ts +0 -169
- package/src/home/feed-scheduler.ts +0 -281
- package/src/home/platform-gmail-digest.ts +0 -163
- package/src/home/rewrite-command-preview.ts +0 -66
- package/src/home/rewrite-feed-title.ts +0 -58
- package/src/home/rollup-producer.ts +0 -426
- package/src/memory/admin.ts +0 -326
- package/src/memory/context-search/sources/pkb.ts +0 -476
- package/src/memory/graph/compaction.ts +0 -299
- package/src/prompts/__tests__/build-cli-reference-section.test.ts +0 -37
- /package/src/cli/{commands → lib}/cache-fs.ts +0 -0
|
@@ -14,13 +14,16 @@
|
|
|
14
14
|
* shared rate-limit timestamps, broadcast).
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
+
import { resolveCallSiteConfig } from "../config/llm-resolver.js";
|
|
17
18
|
import { getConfig } from "../config/loader.js";
|
|
18
19
|
import type { CesClient } from "../credential-execution/client.js";
|
|
19
20
|
import { buildSystemPrompt } from "../prompts/system-prompt.js";
|
|
20
|
-
import {
|
|
21
|
+
import { wrapWithCallSiteRouting } from "../providers/call-site-routing.js";
|
|
22
|
+
import { resolveDefaultProvider } from "../providers/connection-resolution.js";
|
|
21
23
|
import { RateLimitProvider } from "../providers/ratelimit.js";
|
|
22
|
-
import {
|
|
24
|
+
import { listProviders } from "../providers/registry.js";
|
|
23
25
|
import { getSubagentManager } from "../subagent/index.js";
|
|
26
|
+
import { ProviderNotConfiguredError } from "../util/errors.js";
|
|
24
27
|
import { getSandboxWorkingDir } from "../util/platform.js";
|
|
25
28
|
import { Conversation } from "./conversation.js";
|
|
26
29
|
import type { ConversationEvictor } from "./conversation-evictor.js";
|
|
@@ -222,14 +225,25 @@ export async function getOrCreateConversation(
|
|
|
222
225
|
|
|
223
226
|
const createPromise = (async () => {
|
|
224
227
|
const config = getConfig();
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
228
|
+
// Connection-aware default-provider resolution. Throws
|
|
229
|
+
// `ConnectionResolutionError` when the default profile's
|
|
230
|
+
// `provider_connection` is unset / unknown / mismatched (config
|
|
231
|
+
// bugs). Returns null on soft credential failures (missing
|
|
232
|
+
// credential, platform auth unavailable).
|
|
233
|
+
const baseProvider = await resolveDefaultProvider(config);
|
|
234
|
+
if (!baseProvider) {
|
|
235
|
+
const resolved = resolveCallSiteConfig("mainAgent", config.llm);
|
|
236
|
+
throw new ProviderNotConfiguredError(
|
|
237
|
+
resolved.provider,
|
|
238
|
+
listProviders(),
|
|
239
|
+
{
|
|
240
|
+
connectionName: resolved.provider_connection,
|
|
241
|
+
},
|
|
242
|
+
);
|
|
243
|
+
}
|
|
244
|
+
// Per-call `callSite` routing layered on top, with connection-awareness
|
|
245
|
+
// for alternate profiles (matches the canonical dispatch path).
|
|
246
|
+
let provider = wrapWithCallSiteRouting(baseProvider, config);
|
|
233
247
|
const { rateLimit } = config;
|
|
234
248
|
if (rateLimit.maxRequestsPerMinute > 0) {
|
|
235
249
|
provider = new RateLimitProvider(
|
|
@@ -2023,14 +2023,6 @@ export async function surfaceProxyResolver(
|
|
|
2023
2023
|
|
|
2024
2024
|
// Route app-control proxy tools (all app_control_* tool variants)
|
|
2025
2025
|
if (toolName.startsWith("app_control_")) {
|
|
2026
|
-
if (!ctx.hostAppControlProxy || !ctx.hostAppControlProxy.isAvailable()) {
|
|
2027
|
-
return {
|
|
2028
|
-
content:
|
|
2029
|
-
"App control is not available — enable the `app-control` feature flag and connect a macOS client.",
|
|
2030
|
-
isError: true,
|
|
2031
|
-
};
|
|
2032
|
-
}
|
|
2033
|
-
|
|
2034
2026
|
// `app_control_stop` resolves immediately: tear down the proxy without
|
|
2035
2027
|
// a client round-trip. Mirrors CU's terminal-tool short-circuit
|
|
2036
2028
|
// (`computer_use_done` / `computer_use_respond`). Clear the
|
|
@@ -2039,15 +2031,85 @@ export async function surfaceProxyResolver(
|
|
|
2039
2031
|
// instead of dispatching against a torn-down proxy, and so a sibling
|
|
2040
2032
|
// conversation can acquire the released singleton lock without the
|
|
2041
2033
|
// disposed proxy still being addressable.
|
|
2034
|
+
//
|
|
2035
|
+
// Run this BEFORE the isAvailable() gate so a disconnected client
|
|
2036
|
+
// doesn't strand the singleton lock — stop is local-only.
|
|
2042
2037
|
if (toolName === "app_control_stop") {
|
|
2043
|
-
if (ctx.
|
|
2044
|
-
ctx.setHostAppControlProxy
|
|
2045
|
-
|
|
2046
|
-
|
|
2038
|
+
if (ctx.hostAppControlProxy) {
|
|
2039
|
+
if (ctx.setHostAppControlProxy) {
|
|
2040
|
+
ctx.setHostAppControlProxy(undefined);
|
|
2041
|
+
} else {
|
|
2042
|
+
ctx.hostAppControlProxy.dispose();
|
|
2043
|
+
}
|
|
2047
2044
|
}
|
|
2048
2045
|
return { content: "App control stopped.", isError: false };
|
|
2049
2046
|
}
|
|
2050
2047
|
|
|
2048
|
+
if (!ctx.hostAppControlProxy || !ctx.hostAppControlProxy.isAvailable()) {
|
|
2049
|
+
return {
|
|
2050
|
+
content:
|
|
2051
|
+
"App control is not available — enable the `app-control` feature flag and connect a macOS client.",
|
|
2052
|
+
isError: true,
|
|
2053
|
+
};
|
|
2054
|
+
}
|
|
2055
|
+
|
|
2056
|
+
// Resolve target client. Mirrors the host_cu block above: validate
|
|
2057
|
+
// explicit target_client_id (existence, capability, same-actor), then
|
|
2058
|
+
// multi-client guard when no target is supplied. App-control is
|
|
2059
|
+
// single-client-only at the host (one active session per macOS
|
|
2060
|
+
// machine), so a broadcast across multiple capable clients would fire
|
|
2061
|
+
// the same input on every machine.
|
|
2062
|
+
let targetClientId: string | undefined =
|
|
2063
|
+
typeof input.target_client_id === "string" &&
|
|
2064
|
+
input.target_client_id !== ""
|
|
2065
|
+
? input.target_client_id
|
|
2066
|
+
: undefined;
|
|
2067
|
+
|
|
2068
|
+
const sourceActorPrincipalId = ctx.trustContext?.guardianPrincipalId;
|
|
2069
|
+
if (targetClientId != null) {
|
|
2070
|
+
const client = assistantEventHub.getClientById(targetClientId);
|
|
2071
|
+
if (!client) {
|
|
2072
|
+
return {
|
|
2073
|
+
content: `No connected client with id '${targetClientId}'. Run \`assistant clients list --capability host_app_control\` to see available clients.`,
|
|
2074
|
+
isError: true,
|
|
2075
|
+
};
|
|
2076
|
+
}
|
|
2077
|
+
if (!client.capabilities.includes("host_app_control")) {
|
|
2078
|
+
return {
|
|
2079
|
+
content: `Client '${targetClientId}' does not support host_app_control. Run \`assistant clients list --capability host_app_control\` to see available clients.`,
|
|
2080
|
+
isError: true,
|
|
2081
|
+
};
|
|
2082
|
+
}
|
|
2083
|
+
const rejection = enforceSameActorOrErrorResult({
|
|
2084
|
+
hub: assistantEventHub,
|
|
2085
|
+
sourceActorPrincipalId,
|
|
2086
|
+
targetClientId,
|
|
2087
|
+
op: "host_app_control",
|
|
2088
|
+
});
|
|
2089
|
+
if (rejection) return rejection;
|
|
2090
|
+
}
|
|
2091
|
+
|
|
2092
|
+
if (targetClientId == null) {
|
|
2093
|
+
const allAcClients =
|
|
2094
|
+
assistantEventHub.listClientsByCapability("host_app_control");
|
|
2095
|
+
const sameUserAcClients = allAcClients.filter(
|
|
2096
|
+
(c) => c.actorPrincipalId === sourceActorPrincipalId,
|
|
2097
|
+
);
|
|
2098
|
+
if (sameUserAcClients.length > 1) {
|
|
2099
|
+
return {
|
|
2100
|
+
content: `Error: multiple clients support host_app_control. Specify which client to target with \`target_client_id\`. Run \`assistant clients list --capability host_app_control\` to see client IDs and labels.`,
|
|
2101
|
+
isError: true,
|
|
2102
|
+
};
|
|
2103
|
+
}
|
|
2104
|
+
// When cross-user host_app_control clients are connected, auto-
|
|
2105
|
+
// resolve to the unique same-user client. Otherwise the proxy would
|
|
2106
|
+
// dispatch untargeted and the action could reach a cross-user
|
|
2107
|
+
// client. Belt-and-suspenders: the proxy re-checks same-user.
|
|
2108
|
+
if (sameUserAcClients.length === 1 && allAcClients.length > 1) {
|
|
2109
|
+
targetClientId = sameUserAcClients[0].clientId;
|
|
2110
|
+
}
|
|
2111
|
+
}
|
|
2112
|
+
|
|
2051
2113
|
// The TS `HostAppControlInput` (and the Swift mirror) is a discriminated
|
|
2052
2114
|
// union on `tool` ("start" | "observe" | "press" | …). The agent's raw
|
|
2053
2115
|
// tool input only carries the action-specific payload (app, x/y, text,
|
|
@@ -2066,6 +2128,8 @@ export async function surfaceProxyResolver(
|
|
|
2066
2128
|
inputWithTool,
|
|
2067
2129
|
ctx.conversationId,
|
|
2068
2130
|
signal ?? new AbortController().signal,
|
|
2131
|
+
sourceActorPrincipalId,
|
|
2132
|
+
targetClientId,
|
|
2069
2133
|
);
|
|
2070
2134
|
}
|
|
2071
2135
|
|
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
} from "../channels/types.js";
|
|
14
14
|
import { isHttpAuthDisabled } from "../config/env.js";
|
|
15
15
|
import { getIsPlatform } from "../config/env-registry.js";
|
|
16
|
+
import { getConfig } from "../config/loader.js";
|
|
16
17
|
import { getBindingByConversation } from "../memory/external-conversation-store.js";
|
|
17
18
|
import type { PermissionPrompter } from "../permissions/prompter.js";
|
|
18
19
|
import type { SecretPrompter } from "../permissions/secret-prompter.js";
|
|
@@ -156,6 +157,7 @@ export function createToolExecutor(
|
|
|
156
157
|
onOutput,
|
|
157
158
|
signal: ctx.abortController?.signal,
|
|
158
159
|
allowedToolNames: ctx.allowedToolNames,
|
|
160
|
+
forcePromptSideEffects: ctx.forcePromptSideEffects,
|
|
159
161
|
diskPressureCleanupModeActive: ctx.diskPressureCleanupModeActive,
|
|
160
162
|
toolUseId,
|
|
161
163
|
isPlatformHosted: getIsPlatform(),
|
|
@@ -361,28 +363,38 @@ export const HOST_TOOL_TO_CAPABILITY = new Map<string, HostProxyCapability>([
|
|
|
361
363
|
export const HOST_TOOL_NAMES = new Set(HOST_TOOL_TO_CAPABILITY.keys());
|
|
362
364
|
/**
|
|
363
365
|
* Capabilities eligible for cross-client exposure on non-host-proxy
|
|
364
|
-
* transports (e.g. web, ios routing to a connected
|
|
366
|
+
* transports (e.g. web, ios routing to a connected capable client).
|
|
365
367
|
* Adding a capability here exposes ALL tools that map to it (per
|
|
366
368
|
* HOST_TOOL_TO_CAPABILITY) on non-host-proxy transports — the daemon then
|
|
367
369
|
* routes the actual invocation to the connected capable client via the
|
|
368
370
|
* proxy's targetClientId path.
|
|
369
371
|
*
|
|
372
|
+
* All members below adopt the same-actor enforcement pattern: the proxy
|
|
373
|
+
* binds the request to a specific client id + actor principal id at
|
|
374
|
+
* dispatch time, and the corresponding result route requires the
|
|
375
|
+
* submitting client to present an `x-vellum-client-id` matching the
|
|
376
|
+
* captured target plus an `x-vellum-actor-principal-id` matching the
|
|
377
|
+
* captured actor (see `enforceSameActorOrThrow` in
|
|
378
|
+
* `runtime/auth/same-actor.ts`).
|
|
379
|
+
*
|
|
370
380
|
* Inclusions:
|
|
371
381
|
* - host_bash (Phase 1, PR #29322)
|
|
372
382
|
* - host_file (Phases 2 & 3, PRs #29398 + #29440)
|
|
383
|
+
* - host_browser (PR #27489 executor parity + PR #29829 cross-client
|
|
384
|
+
* exposure with same-actor guard at proxy dispatch and result route)
|
|
373
385
|
*
|
|
374
386
|
* Exclusions:
|
|
375
|
-
* -
|
|
376
|
-
*
|
|
377
|
-
*
|
|
378
|
-
* - host_app_control, host_cu: not in HOST_TOOL_TO_CAPABILITY
|
|
379
|
-
* (skill-routed).
|
|
387
|
+
* - host_app_control, host_cu: not in HOST_TOOL_TO_CAPABILITY (skill-routed).
|
|
388
|
+
* Their cross-client exposure is handled at the skill preactivation layer
|
|
389
|
+
* via `preactivateHostProxySkills` — see host-proxy-preactivation.ts.
|
|
380
390
|
*/
|
|
381
391
|
const CROSS_CLIENT_EXPOSED_CAPABILITIES = new Set<HostProxyCapability>([
|
|
382
392
|
"host_bash",
|
|
383
393
|
"host_file",
|
|
394
|
+
"host_browser",
|
|
384
395
|
]);
|
|
385
|
-
|
|
396
|
+
// Tools that require a connected client but no specific host proxy capability.
|
|
397
|
+
const CLIENT_CAPABILITY_TOOL_NAMES = new Set(["app_open", "ask_question"]);
|
|
386
398
|
const PLATFORM_TOOL_NAMES = new Set(["request_system_permission"]);
|
|
387
399
|
|
|
388
400
|
/**
|
|
@@ -396,16 +408,34 @@ export const SUBAGENT_ONLY_TOOL_NAMES = new Set<string>([
|
|
|
396
408
|
]);
|
|
397
409
|
|
|
398
410
|
/**
|
|
399
|
-
* Determine whether a tool
|
|
400
|
-
*
|
|
401
|
-
*
|
|
402
|
-
*
|
|
403
|
-
* fail.
|
|
411
|
+
* Determine whether a tool is part of the final exposed tool set for the
|
|
412
|
+
* current turn. This helper mirrors the filtering applied by
|
|
413
|
+
* `createResolveToolsCallback` — including the subagent allowlist,
|
|
414
|
+
* `toolsDisabledDepth`, and disk-pressure cleanup restrictions.
|
|
404
415
|
*/
|
|
405
416
|
export function isToolActiveForContext(
|
|
406
417
|
name: string,
|
|
407
418
|
ctx: SkillProjectionContext,
|
|
408
419
|
): boolean {
|
|
420
|
+
// When the conversation is acting as a subagent, the parent orchestrator
|
|
421
|
+
// restricts the tool list. A tool that isn't on the allowlist is not
|
|
422
|
+
// available for this turn, so short-circuit before any capability checks.
|
|
423
|
+
if (ctx.subagentAllowedTools && !ctx.subagentAllowedTools.has(name)) {
|
|
424
|
+
return false;
|
|
425
|
+
}
|
|
426
|
+
// `createResolveToolsCallback` returns an empty tool list when tools are
|
|
427
|
+
// disabled (e.g. pointer-generation turns) and restricts to cleanup-safe
|
|
428
|
+
// tools under disk pressure. Mirror both here so this helper reports the
|
|
429
|
+
// same final tool set the LLM receives.
|
|
430
|
+
if (ctx.toolsDisabledDepth > 0) {
|
|
431
|
+
return false;
|
|
432
|
+
}
|
|
433
|
+
if (
|
|
434
|
+
ctx.diskPressureCleanupModeActive === true &&
|
|
435
|
+
!isDiskPressureCleanupToolName(name)
|
|
436
|
+
) {
|
|
437
|
+
return false;
|
|
438
|
+
}
|
|
409
439
|
if (UI_SURFACE_TOOL_NAMES.has(name)) {
|
|
410
440
|
return ctx.channelCapabilities?.supportsDynamicUi ?? !ctx.hasNoClient;
|
|
411
441
|
}
|
|
@@ -417,15 +447,15 @@ export function isToolActiveForContext(
|
|
|
417
447
|
// transport cannot service this capability, the tool is filtered out.
|
|
418
448
|
if (transport && capability && !supportsHostProxy(transport, capability)) {
|
|
419
449
|
// Cross-client exception: allow host tools whose capabilities have
|
|
420
|
-
// cross-client routing infrastructure (Phases 1–3
|
|
421
|
-
// non-host-proxy transports (e.g.
|
|
422
|
-
// capable client is connected via
|
|
423
|
-
//
|
|
424
|
-
//
|
|
425
|
-
// own executor and web turns don't have a CDP target model).
|
|
450
|
+
// cross-client routing infrastructure (Phases 1–3 plus host_browser
|
|
451
|
+
// via PR #27489) to be exposed for non-host-proxy transports (e.g.
|
|
452
|
+
// "web", "ios") when at least one capable client is connected via
|
|
453
|
+
// the event hub. Members of CROSS_CLIENT_EXPOSED_CAPABILITIES
|
|
454
|
+
// (host_bash, host_file, host_browser) qualify.
|
|
426
455
|
// chrome-extension transport is excluded as a security boundary
|
|
427
|
-
// (extension only gets host_browser
|
|
428
|
-
// (no interactive approval UI
|
|
456
|
+
// (extension only gets host_browser via its own executor path);
|
|
457
|
+
// hasNoClient turns are excluded (no interactive approval UI
|
|
458
|
+
// available).
|
|
429
459
|
if (
|
|
430
460
|
capability &&
|
|
431
461
|
CROSS_CLIENT_EXPOSED_CAPABILITIES.has(capability) &&
|
|
@@ -453,6 +483,14 @@ export function isToolActiveForContext(
|
|
|
453
483
|
return !ctx.hasNoClient;
|
|
454
484
|
}
|
|
455
485
|
if (CLIENT_CAPABILITY_TOOL_NAMES.has(name)) {
|
|
486
|
+
if (
|
|
487
|
+
name === "ask_question" &&
|
|
488
|
+
ctx.channelCapabilities?.clientOS === "macos"
|
|
489
|
+
) {
|
|
490
|
+
// macOS has no UI handler for question_request yet; hiding the tool
|
|
491
|
+
// avoids a 5-minute prompter timeout when the LLM would otherwise call it.
|
|
492
|
+
return false;
|
|
493
|
+
}
|
|
456
494
|
return !ctx.hasNoClient;
|
|
457
495
|
}
|
|
458
496
|
if (PLATFORM_TOOL_NAMES.has(name)) {
|
|
@@ -534,7 +572,10 @@ export function createResolveToolsCallback(
|
|
|
534
572
|
const scopedMcpDefs = ctx.subagentAllowedTools
|
|
535
573
|
? currentMcpDefs.filter((d) => ctx.subagentAllowedTools!.has(d.name))
|
|
536
574
|
: currentMcpDefs;
|
|
537
|
-
const
|
|
575
|
+
const excluded = new Set(getConfig().tools.exclude);
|
|
576
|
+
const allBaseDefs = [...scopedCoreDefs, ...scopedMcpDefs].filter(
|
|
577
|
+
(d) => !excluded.has(d.name),
|
|
578
|
+
);
|
|
538
579
|
|
|
539
580
|
const effectivePreactivated = [
|
|
540
581
|
...DEFAULT_PREACTIVATED_SKILL_IDS,
|
|
@@ -551,6 +592,7 @@ export function createResolveToolsCallback(
|
|
|
551
592
|
if (ctx.subagentAllowedTools && !ctx.subagentAllowedTools.has(name)) {
|
|
552
593
|
continue;
|
|
553
594
|
}
|
|
595
|
+
if (excluded.has(name)) continue;
|
|
554
596
|
turnAllowed.add(name);
|
|
555
597
|
}
|
|
556
598
|
if (ctx.diskPressureCleanupModeActive === true) {
|
|
@@ -27,6 +27,7 @@ import {
|
|
|
27
27
|
contextWindowConfigFromEffective,
|
|
28
28
|
resolveEffectiveContextWindow,
|
|
29
29
|
} from "../config/llm-context-resolution.js";
|
|
30
|
+
import { resolveCallSiteConfig } from "../config/llm-resolver.js";
|
|
30
31
|
import { getConfig } from "../config/loader.js";
|
|
31
32
|
import type { LLMCallSite, Speed } from "../config/schemas/llm.js";
|
|
32
33
|
import type { ContextWindowConfig } from "../config/types.js";
|
|
@@ -53,7 +54,9 @@ import {
|
|
|
53
54
|
getConversationOriginChannel,
|
|
54
55
|
getConversationOverrideProfileFromRow,
|
|
55
56
|
} from "../memory/conversation-crud.js";
|
|
57
|
+
import { isBackgroundConversationType } from "../memory/conversation-types.js";
|
|
56
58
|
import { ConversationGraphMemory } from "../memory/graph/conversation-graph-memory.js";
|
|
59
|
+
import { shouldExposePersonalMemory } from "../memory/v2/static-context.js";
|
|
57
60
|
import { PermissionPrompter } from "../permissions/prompter.js";
|
|
58
61
|
import { SecretPrompter } from "../permissions/secret-prompter.js";
|
|
59
62
|
import type { UserDecision } from "../permissions/types.js";
|
|
@@ -116,11 +119,13 @@ import {
|
|
|
116
119
|
buildToolDefinitions,
|
|
117
120
|
createResolveToolsCallback,
|
|
118
121
|
createToolExecutor,
|
|
122
|
+
resolveTrustClass,
|
|
119
123
|
} from "./conversation-tool-setup.js";
|
|
120
124
|
import { refreshWorkspaceTopLevelContextIfNeeded as refreshWorkspaceImpl } from "./conversation-workspace.js";
|
|
121
125
|
import { canonicalizeTimeZone } from "./date-context.js";
|
|
122
|
-
import
|
|
126
|
+
import { HostAppControlProxy } from "./host-app-control-proxy.js";
|
|
123
127
|
import { HostCuProxy } from "./host-cu-proxy.js";
|
|
128
|
+
import { shouldAttachHostProxyForCapability } from "./host-proxy-preactivation.js";
|
|
124
129
|
import type {
|
|
125
130
|
ServerMessage,
|
|
126
131
|
SurfaceData,
|
|
@@ -177,6 +182,17 @@ export class Conversation {
|
|
|
177
182
|
/** @internal */ contextWindowManager: ContextWindowManager;
|
|
178
183
|
/** @internal */ contextCompactedMessageCount = 0;
|
|
179
184
|
/** @internal */ contextCompactedAt: number | null = null;
|
|
185
|
+
/**
|
|
186
|
+
* Set true by `applyCompactionResult` when compaction strips runtime
|
|
187
|
+
* injections from the tail. The next agent loop turn reads this flag at
|
|
188
|
+
* entry, treats it as a `compactedThisTurn` trigger (re-injecting NOW.md,
|
|
189
|
+
* PKB, and the v2 essentials/threads/recent/buffer block), and clears it.
|
|
190
|
+
*
|
|
191
|
+
* Required because `/compact` runs outside the agent loop — without this
|
|
192
|
+
* signal, the next turn cannot tell that the static blocks were just
|
|
193
|
+
* stripped and never re-emits them.
|
|
194
|
+
*/
|
|
195
|
+
/** @internal */ pendingPostCompactReinject = false;
|
|
180
196
|
/**
|
|
181
197
|
* Tracks consecutive compaction failures (summary LLM call threw). In-memory
|
|
182
198
|
* only — resets to 0 on process restart, which is the intended "one free
|
|
@@ -222,6 +238,7 @@ export class Conversation {
|
|
|
222
238
|
/** @internal */ currentTurnOverrideProfile?: string;
|
|
223
239
|
/** @internal */ authContext?: AuthContext;
|
|
224
240
|
/** @internal */ loadedHistoryTrustClass?: TrustClass;
|
|
241
|
+
/** @internal */ loadedHistoryPersonalMemoryAllowed?: boolean;
|
|
225
242
|
/** @internal */ voiceCallControlPrompt?: string;
|
|
226
243
|
/** @internal */ transportHints?: string[];
|
|
227
244
|
/** @internal */ slackRuntimeContextNotice?: string;
|
|
@@ -233,6 +250,14 @@ export class Conversation {
|
|
|
233
250
|
};
|
|
234
251
|
/** @internal */ surfaceActionRequestIds = new Set<string>();
|
|
235
252
|
/** @internal */ approvedViaPromptThisTurn = false;
|
|
253
|
+
/**
|
|
254
|
+
* When true, side-effect tools must prompt even if a trust/allow rule
|
|
255
|
+
* would auto-allow. Set by non-interactive callers (e.g. non-guardian
|
|
256
|
+
* phone voice) so their auto-deny handler reliably sees a
|
|
257
|
+
* `confirmation_request` event. See ToolSetupContext.forcePromptSideEffects.
|
|
258
|
+
* @internal
|
|
259
|
+
*/
|
|
260
|
+
forcePromptSideEffects = false;
|
|
236
261
|
/** @internal */ pendingSurfaceActions = new Map<
|
|
237
262
|
string,
|
|
238
263
|
{ surfaceType: SurfaceType }
|
|
@@ -424,7 +449,8 @@ export class Conversation {
|
|
|
424
449
|
);
|
|
425
450
|
|
|
426
451
|
const config = getConfig();
|
|
427
|
-
|
|
452
|
+
const resolvedMainAgent = resolveCallSiteConfig("mainAgent", config.llm);
|
|
453
|
+
this.streamThinking = resolvedMainAgent.thinking.streamThinking ?? false;
|
|
428
454
|
|
|
429
455
|
// CES (Credential Execution Service) — use the shared server-level client.
|
|
430
456
|
// The CES sidecar accepts exactly one bootstrap connection, so the
|
|
@@ -463,6 +489,9 @@ export class Conversation {
|
|
|
463
489
|
channelPersona: persona.channelPersona,
|
|
464
490
|
userSlug: persona.userSlug,
|
|
465
491
|
onboardingContext: this.getOnboardingContext(),
|
|
492
|
+
isBackgroundConversation: isBackgroundConversationType(
|
|
493
|
+
getConversation(this.conversationId)?.conversationType,
|
|
494
|
+
),
|
|
466
495
|
});
|
|
467
496
|
})(),
|
|
468
497
|
};
|
|
@@ -476,20 +505,19 @@ export class Conversation {
|
|
|
476
505
|
};
|
|
477
506
|
|
|
478
507
|
const fastModeEnabled = isAssistantFeatureFlagEnabled("fast-mode", config);
|
|
479
|
-
const resolvedSpeed = speedOverride ??
|
|
480
|
-
const llmDefault = config.llm.default;
|
|
508
|
+
const resolvedSpeed = speedOverride ?? resolvedMainAgent.speed;
|
|
481
509
|
const initialContextWindow = resolveEffectiveContextWindow({
|
|
482
510
|
llm: config.llm,
|
|
483
511
|
callSite: "mainAgent",
|
|
484
512
|
});
|
|
485
513
|
const initialContextWindowConfig = contextWindowConfigFromEffective(
|
|
486
|
-
|
|
514
|
+
resolvedMainAgent.contextWindow,
|
|
487
515
|
initialContextWindow,
|
|
488
516
|
);
|
|
489
517
|
|
|
490
518
|
const agentLoopConfig: Partial<AgentLoopConfig> = {
|
|
491
|
-
thinking:
|
|
492
|
-
effort:
|
|
519
|
+
thinking: resolvedMainAgent.thinking,
|
|
520
|
+
effort: resolvedMainAgent.effort,
|
|
493
521
|
...(fastModeEnabled && resolvedSpeed === "fast"
|
|
494
522
|
? { speed: resolvedSpeed }
|
|
495
523
|
: {}),
|
|
@@ -513,6 +541,10 @@ export class Conversation {
|
|
|
513
541
|
systemPrompt: () => resolveSystemPromptCallback([]).systemPrompt,
|
|
514
542
|
config: initialContextWindowConfig,
|
|
515
543
|
toolTokenBudget: this.agentLoop.getToolTokenBudget(),
|
|
544
|
+
conversationId: this.conversationId,
|
|
545
|
+
resolveTools: resolveTools
|
|
546
|
+
? () => resolveTools(this.messages)
|
|
547
|
+
: undefined,
|
|
516
548
|
});
|
|
517
549
|
}
|
|
518
550
|
|
|
@@ -551,6 +583,9 @@ export class Conversation {
|
|
|
551
583
|
channelPersona: persona.channelPersona,
|
|
552
584
|
userSlug: persona.userSlug,
|
|
553
585
|
onboardingContext: this.getOnboardingContext(),
|
|
586
|
+
isBackgroundConversation: isBackgroundConversationType(
|
|
587
|
+
getConversation(this.conversationId)?.conversationType,
|
|
588
|
+
),
|
|
554
589
|
});
|
|
555
590
|
})();
|
|
556
591
|
const tools = buildToolDefinitions();
|
|
@@ -630,7 +665,21 @@ export class Conversation {
|
|
|
630
665
|
|
|
631
666
|
async ensureActorScopedHistory(): Promise<void> {
|
|
632
667
|
const currentTrustClass = this.trustContext?.trustClass;
|
|
633
|
-
|
|
668
|
+
// `loadFromDb` gates personal-memory rehydration on `sourceChannel` too
|
|
669
|
+
// (via `shouldExposePersonalMemory`), so a same-trust-class reuse from a
|
|
670
|
+
// different channel (e.g. internal `vellum` → remote channel) must also
|
|
671
|
+
// trigger a reload. Otherwise stale personal-memory blocks can leak to
|
|
672
|
+
// an untrusted remote turn, or be hidden when they should be present.
|
|
673
|
+
const currentPersonalMemoryAllowed = shouldExposePersonalMemory({
|
|
674
|
+
sourceChannel: this.trustContext?.sourceChannel,
|
|
675
|
+
isTrustedActor: resolveTrustClass(this.trustContext) === "guardian",
|
|
676
|
+
});
|
|
677
|
+
if (
|
|
678
|
+
this.loadedHistoryTrustClass === currentTrustClass &&
|
|
679
|
+
this.loadedHistoryPersonalMemoryAllowed === currentPersonalMemoryAllowed
|
|
680
|
+
) {
|
|
681
|
+
return;
|
|
682
|
+
}
|
|
634
683
|
await this.loadFromDb();
|
|
635
684
|
}
|
|
636
685
|
|
|
@@ -943,6 +992,23 @@ export class Conversation {
|
|
|
943
992
|
this.hostAppControlProxy = proxy;
|
|
944
993
|
}
|
|
945
994
|
|
|
995
|
+
ensureHostProxiesForTurn(
|
|
996
|
+
sourceInterface: import("../channels/types.js").InterfaceId | undefined,
|
|
997
|
+
): void {
|
|
998
|
+
if (
|
|
999
|
+
shouldAttachHostProxyForCapability("host_cu", sourceInterface) &&
|
|
1000
|
+
!this.hostCuProxy
|
|
1001
|
+
) {
|
|
1002
|
+
this.setHostCuProxy(new HostCuProxy());
|
|
1003
|
+
}
|
|
1004
|
+
if (
|
|
1005
|
+
shouldAttachHostProxyForCapability("host_app_control", sourceInterface) &&
|
|
1006
|
+
!this.hostAppControlProxy
|
|
1007
|
+
) {
|
|
1008
|
+
this.setHostAppControlProxy(new HostAppControlProxy(this.conversationId));
|
|
1009
|
+
}
|
|
1010
|
+
}
|
|
1011
|
+
|
|
946
1012
|
// ── Server-authoritative state signals ─────────────────────────────
|
|
947
1013
|
|
|
948
1014
|
emitConfirmationStateChanged(
|
|
@@ -991,7 +1057,9 @@ export class Conversation {
|
|
|
991
1057
|
}
|
|
992
1058
|
}
|
|
993
1059
|
|
|
994
|
-
async forceCompact(
|
|
1060
|
+
async forceCompact(options?: {
|
|
1061
|
+
targetInputTokensOverride?: number;
|
|
1062
|
+
}): Promise<ContextWindowResult> {
|
|
995
1063
|
const conversationRow = getConversation(this.conversationId);
|
|
996
1064
|
const overrideProfile =
|
|
997
1065
|
getConversationOverrideProfileFromRow(conversationRow) ?? null;
|
|
@@ -1007,7 +1075,9 @@ export class Conversation {
|
|
|
1007
1075
|
}
|
|
1008
1076
|
).updateConfig?.(
|
|
1009
1077
|
contextWindowConfigFromEffective(
|
|
1010
|
-
config.llm
|
|
1078
|
+
resolveCallSiteConfig("mainAgent", config.llm, {
|
|
1079
|
+
overrideProfile: overrideProfile ?? undefined,
|
|
1080
|
+
}).contextWindow,
|
|
1011
1081
|
effectiveContextWindow,
|
|
1012
1082
|
),
|
|
1013
1083
|
);
|
|
@@ -1037,6 +1107,7 @@ export class Conversation {
|
|
|
1037
1107
|
conversationOriginChannel:
|
|
1038
1108
|
getConversationOriginChannel(this.conversationId) ?? undefined,
|
|
1039
1109
|
overrideProfile,
|
|
1110
|
+
targetInputTokensOverride: options?.targetInputTokensOverride,
|
|
1040
1111
|
},
|
|
1041
1112
|
);
|
|
1042
1113
|
// Track circuit-breaker state for user-initiated `/compact` and other
|