@vellumai/assistant 0.8.4 → 0.8.6
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 +33 -1
- package/ARCHITECTURE.md +3 -3
- package/bunfig.toml +6 -1
- package/docs/browser-use-architecture-phase2.md +1 -1
- package/docs/credential-execution-service.md +6 -6
- package/docs/plugins.md +4 -3
- package/knip.json +2 -1
- package/node_modules/@vellumai/skill-host-contracts/src/client.ts +12 -13
- package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +4 -1
- package/node_modules/@vellumai/skill-host-contracts/src/tool-types.ts +16 -14
- package/openapi.yaml +2748 -216
- package/package.json +1 -1
- package/src/__tests__/actor-token-service.test.ts +3 -2
- package/src/__tests__/agent-loop-exit-reason.test.ts +102 -9
- package/src/__tests__/agent-loop-override-profile.test.ts +2 -1
- package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +1 -0
- package/src/__tests__/agent-wake-override-profile.test.ts +1 -0
- package/src/__tests__/always-loaded-tools-guard.test.ts +2 -2
- package/src/__tests__/annotate-risk-options.test.ts +1 -0
- package/src/__tests__/anthropic-provider.test.ts +34 -37
- package/src/__tests__/approval-cascade.test.ts +1 -0
- package/src/__tests__/approval-routes-http.test.ts +9 -13
- package/src/__tests__/assert-not-live-db.ts +79 -0
- package/src/__tests__/assistant-event-hub-self-exclusion.test.ts +293 -0
- package/src/__tests__/assistant-feature-flags-integration.test.ts +12 -28
- package/src/__tests__/audit-log-rotation.test.ts +72 -18
- package/src/__tests__/auto-analysis-end-to-end.test.ts +6 -6
- package/src/__tests__/background-workers-disk-pressure.test.ts +8 -11
- package/src/__tests__/browser-skill-endstate.test.ts +3 -3
- package/src/__tests__/btw-routes.test.ts +5 -5
- package/src/__tests__/call-controller.test.ts +3 -3
- package/src/__tests__/cancel-resolves-conversation-key.test.ts +1 -1
- package/src/__tests__/channel-approval-routes.test.ts +3 -2
- package/src/__tests__/channel-guardian.test.ts +6 -5
- package/src/__tests__/channel-readiness-slack-remote.test.ts +175 -0
- package/src/__tests__/channel-reply-delivery.test.ts +35 -0
- package/src/__tests__/channel-retry-sweep.test.ts +320 -3
- package/src/__tests__/checker.test.ts +18 -27
- package/src/__tests__/compaction-events.test.ts +2 -0
- package/src/__tests__/compaction-trail-store.test.ts +264 -0
- package/src/__tests__/compactor-call-site-logging.test.ts +215 -0
- package/src/__tests__/compactor-preserved-tail-count.test.ts +1 -0
- package/src/__tests__/computer-use-skill-manifest-regression.test.ts +12 -16
- package/src/__tests__/computer-use-tools.test.ts +14 -18
- package/src/__tests__/config-loader-backfill.test.ts +13 -28
- package/src/__tests__/config-loader-corrupt.test.ts +5 -5
- package/src/__tests__/config-loader-platform-defaults.test.ts +93 -26
- package/src/__tests__/config-loader-quarantine-bulletin.test.ts +3 -3
- package/src/__tests__/config-managed-gemini-defaults.test.ts +3 -4
- package/src/__tests__/config-schema.test.ts +10 -10
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
- package/src/__tests__/connection-model-compat.test.ts +83 -0
- package/src/__tests__/contacts-tools.test.ts +3 -2
- package/src/__tests__/context-token-estimator.test.ts +22 -0
- package/src/__tests__/conversation-abort-tool-results.test.ts +5 -0
- package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +2 -1
- package/src/__tests__/conversation-agent-loop-handlers-max-tokens.test.ts +55 -0
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +2 -1
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +231 -2
- package/src/__tests__/conversation-agent-loop.test.ts +581 -54
- package/src/__tests__/conversation-analysis-routes.test.ts +1 -0
- package/src/__tests__/conversation-app-control-instantiation.test.ts +31 -24
- package/src/__tests__/conversation-app-control-lifecycle.test.ts +1 -0
- package/src/__tests__/conversation-attention-store.test.ts +101 -0
- package/src/__tests__/conversation-attention-telegram.test.ts +3 -2
- package/src/__tests__/conversation-clear-safety.test.ts +25 -25
- package/src/__tests__/conversation-confirmation-signals.test.ts +1 -0
- package/src/__tests__/conversation-delete-schedule-cleanup.test.ts +1 -1
- package/src/__tests__/conversation-disk-view-integration.test.ts +2 -2
- package/src/__tests__/conversation-error.test.ts +61 -0
- package/src/__tests__/conversation-fork-crud.test.ts +239 -15
- package/src/__tests__/conversation-fork-route.test.ts +3 -2
- package/src/__tests__/conversation-history-web-search.test.ts +1 -0
- package/src/__tests__/conversation-inference-profile-list.test.ts +3 -2
- package/src/__tests__/conversation-inference-profile-route.test.ts +3 -2
- package/src/__tests__/conversation-lifecycle.test.ts +53 -11
- package/src/__tests__/conversation-list-source.test.ts +3 -2
- package/src/__tests__/conversation-load-history-repair.test.ts +2 -1
- package/src/__tests__/{conversation-load-cleaned-at.test.ts → conversation-load-history-stripped.test.ts} +14 -13
- package/src/__tests__/conversation-pairing.test.ts +53 -0
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +26 -7
- package/src/__tests__/conversation-process-callsite.test.ts +1 -0
- package/src/__tests__/conversation-provider-retry-repair.test.ts +6 -0
- package/src/__tests__/conversation-queue.test.ts +333 -291
- package/src/__tests__/conversation-routes-disk-view.test.ts +112 -18
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +33 -8
- package/src/__tests__/conversation-routes-slash-commands.test.ts +68 -2
- package/src/__tests__/conversation-runtime-assembly.test.ts +78 -0
- package/src/__tests__/conversation-skill-tools.test.ts +40 -147
- package/src/__tests__/conversation-slash-queue.test.ts +84 -32
- package/src/__tests__/conversation-slash-unknown.test.ts +5 -0
- package/src/__tests__/conversation-speed-override.test.ts +1 -0
- package/src/__tests__/conversation-store.test.ts +1 -1
- package/src/__tests__/conversation-surfaces-action-delivery.test.ts +46 -0
- package/src/__tests__/conversation-surfaces-data-persist.test.ts +1 -0
- package/src/__tests__/conversation-surfaces-standalone-payloads.test.ts +6 -3
- package/src/__tests__/conversation-surfaces-standalone.test.ts +6 -3
- package/src/__tests__/conversation-surfaces-state-update.test.ts +3 -3
- package/src/__tests__/conversation-surfaces-table-action.test.ts +7 -17
- package/src/__tests__/conversation-sync-tags.test.ts +218 -35
- package/src/__tests__/conversation-title-service.test.ts +1 -0
- package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +30 -0
- package/src/__tests__/conversation-usage.test.ts +1 -0
- package/src/__tests__/conversation-workspace-cache-state.test.ts +2 -0
- package/src/__tests__/conversation-workspace-injection.test.ts +6 -1
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +6 -1
- package/src/__tests__/credential-broker-browser-fill.test.ts +3 -3
- package/src/__tests__/credential-broker-server-use.test.ts +5 -5
- package/src/__tests__/credential-execution-client.test.ts +72 -1
- package/src/__tests__/credential-execution-feature-gates.test.ts +19 -19
- package/src/__tests__/credential-execution-tools.test.ts +6 -6
- package/src/__tests__/credential-health-service.test.ts +252 -3
- package/src/__tests__/credential-security-invariants.test.ts +6 -5
- package/src/__tests__/credential-vault-unit.test.ts +21 -21
- package/src/__tests__/credential-vault.test.ts +5 -5
- package/src/__tests__/cross-provider-web-search.test.ts +56 -2
- package/src/__tests__/db-connection-isolation.test.ts +7 -6
- package/src/__tests__/db-conversation-fork-lineage-migration.test.ts +8 -10
- package/src/__tests__/db-conversation-inference-profile-migration.test.ts +7 -10
- package/src/__tests__/db-llm-request-log-provider-migration.test.ts +9 -15
- package/src/__tests__/db-test-helpers.ts +58 -0
- package/src/__tests__/disk-pressure-guard.test.ts +58 -41
- package/src/__tests__/disk-pressure-lifecycle.test.ts +13 -10
- package/src/__tests__/disk-pressure-routes.test.ts +0 -33
- package/src/__tests__/disk-pressure-tools.test.ts +0 -4
- package/src/__tests__/dm-persistence.test.ts +26 -40
- package/src/__tests__/document-create-dedupe.test.ts +189 -0
- package/src/__tests__/document-find-replace.test.ts +3 -2
- package/src/__tests__/document-tool-security.test.ts +81 -2
- package/src/__tests__/dynamic-page-surface.test.ts +2 -2
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +5 -4
- package/src/__tests__/email-html-renderer.test.ts +12 -0
- package/src/__tests__/encrypted-store-test-helpers.ts +56 -0
- package/src/__tests__/encrypted-store.test.ts +11 -9
- package/src/__tests__/feature-flag-test-helpers.ts +53 -0
- package/src/__tests__/filing-service.test.ts +1 -0
- package/src/__tests__/first-greeting.test.ts +62 -12
- package/src/__tests__/gateway-flag-listener.test.ts +236 -0
- package/src/__tests__/gemini-provider.test.ts +104 -0
- package/src/__tests__/guardian-action-sweep.test.ts +3 -2
- package/src/__tests__/guardian-dispatch.test.ts +0 -1
- package/src/__tests__/guardian-outbound-http.test.ts +10 -7
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +48 -3
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +2 -1
- package/src/__tests__/heartbeat-disk-pressure.test.ts +5 -0
- package/src/__tests__/heartbeat-service.test.ts +5 -0
- package/src/__tests__/helpers/mock-logger.ts +26 -0
- package/src/__tests__/host-bash-routes.test.ts +1 -0
- package/src/__tests__/host-cu-routes-targeted.test.ts +1 -0
- package/src/__tests__/host-file-routes-targeted.test.ts +1 -0
- package/src/__tests__/host-shell-tool.test.ts +6 -5
- package/src/__tests__/host-transfer-routes-targeted.test.ts +1 -0
- package/src/__tests__/http-conversation-lineage.test.ts +3 -2
- package/src/__tests__/http-user-message-parity.test.ts +29 -7
- package/src/__tests__/identity-intro-cache.test.ts +133 -22
- package/src/__tests__/inbound-slack-persistence.test.ts +44 -72
- package/src/__tests__/inference-profile-reaper.test.ts +3 -2
- package/src/__tests__/inference-profile-session-ipc.test.ts +3 -2
- package/src/__tests__/init-feature-flag-overrides.test.ts +5 -6
- package/src/__tests__/injector-disk-pressure.test.ts +3 -17
- package/src/__tests__/inline-skill-load-permissions.test.ts +4 -4
- package/src/__tests__/list-messages-hidden-metadata.test.ts +80 -0
- package/src/__tests__/list-messages-tool-merge.test.ts +70 -11
- package/src/__tests__/llm-context-normalization.test.ts +42 -0
- package/src/__tests__/llm-request-log-call-site.test.ts +136 -0
- package/src/__tests__/llm-request-log-source-clickhouse.test.ts +26 -0
- package/src/__tests__/llm-resolver.test.ts +408 -9
- package/src/__tests__/llm-schema.test.ts +1 -1
- package/src/__tests__/llm-usage-store.test.ts +66 -0
- package/src/__tests__/logger.test.ts +89 -0
- package/src/__tests__/manual-token-reconciliation.test.ts +76 -1
- package/src/__tests__/mcp-abort-signal.test.ts +16 -2
- package/src/__tests__/mcp-client-auth.test.ts +14 -0
- package/src/__tests__/media-generate-image.test.ts +31 -0
- package/src/__tests__/memory-v2-static-injector.test.ts +7 -7
- package/src/__tests__/messaging-send-tool.test.ts +1 -0
- package/src/__tests__/migration-import-from-url.test.ts +3 -3
- package/src/__tests__/mock-gateway-ipc.ts +18 -2
- package/src/__tests__/model-intents.test.ts +4 -6
- package/src/__tests__/native-web-search.test.ts +30 -2
- package/src/__tests__/notification-deep-link.test.ts +62 -0
- package/src/__tests__/notification-guardian-path.test.ts +0 -1
- package/src/__tests__/oauth-commands-routes.test.ts +37 -0
- package/src/__tests__/oauth-provider-visibility.test.ts +8 -8
- package/src/__tests__/oauth-store.test.ts +3 -2
- package/src/__tests__/onboarding-template-contract.test.ts +4 -3
- package/src/__tests__/openai-provider.test.ts +54 -9
- package/src/__tests__/openai-responses-provider.test.ts +176 -14
- package/src/__tests__/openrouter-provider-only.test.ts +27 -5
- package/src/__tests__/outbound-slack-persistence.test.ts +46 -1
- package/src/__tests__/pending-interactions-resolved-event.test.ts +0 -1
- package/src/__tests__/persistence-pipeline.test.ts +139 -1
- package/src/__tests__/persistence-secret-redaction.test.ts +83 -12
- package/src/__tests__/platform-bash-auto-approve.test.ts +2 -2
- package/src/__tests__/platform.test.ts +2 -2
- package/src/__tests__/plugin-api-tool-definition.test.ts +92 -0
- package/src/__tests__/plugin-bootstrap.test.ts +11 -13
- package/src/__tests__/plugin-tool-contribution.test.ts +50 -40
- package/src/__tests__/plugin-types.test.ts +3 -2
- package/src/__tests__/prechat-onboarding-contract.test.ts +131 -98
- package/src/__tests__/pricing.test.ts +12 -0
- package/src/__tests__/process-message-background-slack.test.ts +21 -16
- package/src/__tests__/process-message-display-content.test.ts +19 -22
- package/src/__tests__/provider-catalog-visibility.test.ts +9 -9
- package/src/__tests__/provider-platform-proxy-integration.test.ts +216 -4
- package/src/__tests__/provider-registry-ollama.test.ts +45 -22
- package/src/__tests__/prune-jobs-changes-parser.test.ts +61 -0
- package/src/__tests__/recording-handler.test.ts +1 -0
- package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +1 -0
- package/src/__tests__/registry.test.ts +84 -84
- package/src/__tests__/relay-server.test.ts +10 -10
- package/src/__tests__/require-fresh-approval.test.ts +2 -2
- package/src/__tests__/runtime-attachment-metadata.test.ts +3 -2
- package/src/__tests__/runtime-events-sse-bilingual.test.ts +154 -0
- package/src/__tests__/schedule-store.test.ts +16 -1
- package/src/__tests__/scheduler-reuse-conversation.test.ts +48 -3
- package/src/__tests__/secret-ingress-http.test.ts +5 -1
- package/src/__tests__/secure-keys.test.ts +3 -3
- package/src/__tests__/send-endpoint-busy.test.ts +81 -42
- package/src/__tests__/server-history-render.test.ts +4 -1
- package/src/__tests__/shell-tool-proxy-mode.test.ts +1 -1
- package/src/__tests__/skill-feature-flags-integration.test.ts +8 -10
- package/src/__tests__/skill-feature-flags.test.ts +16 -18
- package/src/__tests__/skill-load-feature-flag.test.ts +5 -5
- package/src/__tests__/skill-projection-feature-flag.test.ts +48 -37
- package/src/__tests__/skill-projection.benchmark.test.ts +7 -13
- package/src/__tests__/skill-tool-factory.test.ts +97 -96
- package/src/__tests__/slack-channel-config.test.ts +3 -3
- package/src/__tests__/subagent-call-site-routing.test.ts +11 -3
- package/src/__tests__/subagent-disposal.test.ts +27 -8
- package/src/__tests__/subagent-fork-notifications.test.ts +24 -9
- package/src/__tests__/subagent-fork-spawn.test.ts +13 -4
- package/src/__tests__/subagent-manager-notify.test.ts +20 -8
- package/src/__tests__/subagent-notify-parent.test.ts +6 -5
- package/src/__tests__/subagent-spawn-tool-fork.test.ts +58 -0
- package/src/__tests__/subagent-tools.test.ts +2 -1
- package/src/__tests__/suggestion-routes.test.ts +2 -0
- package/src/__tests__/sync-message-contract.test.ts +59 -0
- package/src/__tests__/system-prompt.test.ts +183 -131
- package/src/__tests__/terminal-tools.test.ts +1 -1
- package/src/__tests__/test-preload-verifier.ts +68 -0
- package/src/__tests__/test-preload.ts +32 -39
- package/src/__tests__/tool-approval-handler.test.ts +1 -5
- package/src/__tests__/tool-execute-pipeline.test.ts +2 -2
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +2 -5
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +35 -12
- package/src/__tests__/tool-executor.test.ts +64 -72
- package/src/__tests__/tool-grant-request-escalation.test.ts +1 -6
- package/src/__tests__/tool-preview-lifecycle.test.ts +1 -0
- package/src/__tests__/tool-result-metadata-plumbing.test.ts +1 -0
- package/src/__tests__/trusted-contact-approval-notifier.test.ts +0 -1
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +1 -6
- package/src/__tests__/trusted-contact-multichannel.test.ts +0 -1
- package/src/__tests__/twilio-routes.test.ts +3 -2
- package/src/__tests__/ui-file-upload-surface.test.ts +2 -2
- package/src/__tests__/usage-routes.test.ts +3 -0
- package/src/__tests__/validate-input.test.ts +381 -0
- package/src/__tests__/verification-control-plane-policy.test.ts +3 -2
- package/src/__tests__/voice-scoped-grant-consumer.test.ts +2 -1
- package/src/__tests__/voice-session-bridge.test.ts +37 -28
- package/src/__tests__/workspace-git-service.test.ts +6 -5
- package/src/__tests__/workspace-migration-089-move-memory-tree-out-of-v3.test.ts +86 -0
- package/src/__tests__/workspace-migration-090-memory-router-cost-optimized-profile.test.ts +326 -0
- package/src/__tests__/workspace-migration-091-retighten-migration-onboarding-thread.test.ts +166 -0
- package/src/acp/__tests__/prepare-agent-env.test.ts +146 -0
- package/src/acp/prepare-agent-env.ts +78 -0
- package/src/acp/session-manager.ts +6 -7
- package/src/agent/loop.ts +88 -0
- package/src/api/README.md +127 -0
- package/src/api/constants/call-sites.ts +27 -0
- package/src/api/events/assistant-outbound-attachment.ts +51 -0
- package/src/api/events/assistant-text-delta.ts +32 -0
- package/src/api/events/assistant-turn-start.ts +33 -0
- package/src/api/events/document-comment-created.ts +48 -0
- package/src/api/events/document-comment-deleted.ts +24 -0
- package/src/api/events/document-comment-reopened.ts +25 -0
- package/src/api/events/document-comment-resolved.ts +27 -0
- package/src/api/events/generation-cancelled.ts +24 -0
- package/src/api/events/generation-handoff.ts +41 -0
- package/src/api/events/message-complete.ts +42 -0
- package/src/api/events/open-url.ts +30 -0
- package/src/api/events/relationship-state-updated.ts +25 -0
- package/src/api/events/tool-use-start.ts +32 -0
- package/src/api/index.ts +129 -0
- package/src/api/package.json +10 -0
- package/src/api/responses/llm-context-response.ts +39 -0
- package/src/api/responses/llm-request-log-entry.ts +93 -0
- package/src/api/responses/memory-recall-log.ts +65 -0
- package/src/api/responses/memory-v2-activation-log.ts +78 -0
- package/src/background-wake/background-wake-routes.test.ts +868 -0
- package/src/background-wake/platform-client.test.ts +308 -0
- package/src/background-wake/platform-client.ts +167 -0
- package/src/background-wake/publisher.ts +91 -0
- package/src/background-wake/runtime-registry.ts +24 -0
- package/src/background-wake/wake-intent-hooks.test.ts +282 -0
- package/src/calls/guardian-dispatch.ts +1 -0
- package/src/calls/voice-session-bridge.ts +4 -4
- package/src/cli/commands/__tests__/browser.test.ts +23 -5
- package/src/cli/commands/__tests__/conversations-slack.test.ts +16 -0
- package/src/cli/commands/__tests__/domain-register.test.ts +110 -0
- package/src/cli/commands/__tests__/domain-status.test.ts +33 -33
- package/src/cli/commands/__tests__/inference-send.test.ts +108 -5
- package/src/cli/commands/__tests__/memory-v2-compare-render.test.ts +98 -0
- package/src/cli/commands/__tests__/memory-v2.test.ts +1 -0
- package/src/cli/commands/__tests__/memory-v3-render.test.ts +340 -0
- package/src/cli/commands/__tests__/notifications.test.ts +184 -40
- package/src/cli/commands/browser.ts +247 -0
- package/src/cli/commands/channels/__tests__/channels.test.ts +143 -0
- package/src/cli/commands/channels/index.ts +229 -0
- package/src/cli/commands/domain.ts +91 -41
- package/src/cli/commands/inference.ts +93 -40
- package/src/cli/commands/memory-v2-compare-render.ts +115 -0
- package/src/cli/commands/memory-v2.ts +176 -1
- package/src/cli/commands/memory-v3-render.ts +491 -0
- package/src/cli/commands/memory-v3.ts +567 -0
- package/src/cli/commands/notifications.ts +365 -55
- package/src/cli/lib/open-browser.ts +7 -2
- package/src/cli/program.ts +4 -0
- package/src/config/assistant-feature-flags.ts +39 -46
- package/src/config/bundled-skills/document-editor/SKILL.md +16 -3
- package/src/config/bundled-skills/document-editor/TOOLS.json +18 -0
- package/src/config/bundled-skills/document-editor/tools/document-open.ts +12 -0
- package/src/config/bundled-skills/image-studio/SKILL.md +4 -0
- package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +2 -2
- package/src/config/bundled-skills/media-processing/tools/ingest-media.ts +13 -8
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +10 -3
- package/src/config/bundled-skills/phone-calls/references/TRANSCRIPTS.md +16 -14
- package/src/config/bundled-skills/playbooks/tools/playbook-create.ts +7 -2
- package/src/config/bundled-skills/playbooks/tools/playbook-update.ts +7 -2
- package/src/config/bundled-skills/schedule/SKILL.md +1 -1
- package/src/config/bundled-skills/schedule/TOOLS.json +2 -2
- package/src/config/bundled-skills/settings/tools/open-system-settings.ts +1 -0
- package/src/config/bundled-tool-registry.ts +2 -0
- package/src/config/call-site-defaults.ts +8 -7
- package/src/config/feature-flag-cache.ts +86 -0
- package/src/config/feature-flag-registry.json +33 -17
- package/src/config/llm-context-resolution.ts +10 -1
- package/src/config/llm-resolver.ts +121 -15
- package/src/config/loader.ts +4 -5
- package/src/config/schemas/__tests__/memory-v2.test.ts +228 -1
- package/src/config/schemas/call-site-catalog.ts +21 -7
- package/src/config/schemas/heartbeat.ts +1 -1
- package/src/config/schemas/llm.ts +102 -2
- package/src/config/schemas/memory-v2.ts +272 -0
- package/src/config/schemas/memory.ts +2 -1
- package/src/config/schemas/services.ts +6 -2
- package/src/config/seed-inference-profiles.ts +36 -16
- package/src/context/compactor.ts +52 -0
- package/src/context/token-estimator.ts +10 -5
- package/src/conversations/__tests__/message-consolidation.test.ts +350 -0
- package/src/conversations/message-consolidation.ts +404 -0
- package/src/credential-execution/executable-discovery.ts +40 -0
- package/src/credential-execution/process-manager.ts +6 -2
- package/src/credential-health/credential-health-service.ts +125 -40
- package/src/daemon/__tests__/conversation-lifecycle-auto-analyze.test.ts +3 -6
- package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +13 -15
- package/src/daemon/__tests__/conversation-tool-setup-exclude.test.ts +2 -3
- package/src/daemon/__tests__/daemon-skill-host.test.ts +2 -0
- package/src/daemon/__tests__/meet-manifest-loader.test.ts +25 -12
- package/src/daemon/__tests__/native-web-search-metadata.test.ts +1 -0
- package/src/daemon/__tests__/switch-inference-profile-tool.test.ts +107 -0
- package/src/daemon/__tests__/web-search-status-text.test.ts +1 -0
- package/src/daemon/conversation-agent-loop-handlers.ts +390 -80
- package/src/daemon/conversation-agent-loop.ts +244 -90
- package/src/daemon/conversation-error.ts +64 -6
- package/src/daemon/conversation-lifecycle.ts +27 -22
- package/src/daemon/conversation-messaging.ts +84 -43
- package/src/daemon/conversation-process.ts +74 -37
- package/src/daemon/conversation-runtime-assembly.ts +38 -17
- package/src/daemon/conversation-skill-tools.ts +14 -30
- package/src/daemon/conversation-surfaces.ts +69 -34
- package/src/daemon/conversation-tool-setup.ts +77 -32
- package/src/daemon/conversation-usage.ts +2 -0
- package/src/daemon/conversation.ts +40 -75
- package/src/daemon/daemon-control.ts +1 -1
- package/src/daemon/daemon-skill-host.ts +9 -2
- package/src/daemon/disk-pressure-guard.ts +39 -29
- package/src/daemon/first-greeting.ts +31 -13
- package/src/daemon/handlers/config-model.test.ts +1 -0
- package/src/daemon/handlers/conversations.ts +11 -3
- package/src/daemon/handlers/shared.ts +6 -1
- package/src/daemon/host-browser-proxy.ts +5 -5
- package/src/daemon/host-cu-proxy.ts +4 -4
- package/src/daemon/host-file-proxy.ts +4 -4
- package/src/daemon/host-proxy-base.ts +4 -4
- package/src/daemon/host-transfer-proxy.ts +10 -10
- package/src/daemon/lifecycle.ts +29 -26
- package/src/daemon/mcp-reload-service.ts +1 -1
- package/src/daemon/meet-manifest-loader.ts +11 -24
- package/src/daemon/message-types/conversations.ts +22 -27
- package/src/daemon/message-types/document-comments.ts +8 -44
- package/src/daemon/message-types/home.ts +2 -14
- package/src/daemon/message-types/integrations.ts +2 -7
- package/src/daemon/message-types/messages.ts +25 -48
- package/src/daemon/message-types/subagents.ts +6 -0
- package/src/daemon/message-types/sync.ts +14 -0
- package/src/daemon/process-message.ts +9 -9
- package/src/daemon/providers-setup.ts +1 -1
- package/src/daemon/server.ts +16 -0
- package/src/daemon/shutdown-handlers.ts +24 -5
- package/src/daemon/switch-inference-profile-tool.ts +62 -0
- package/src/daemon/tool-setup-types.ts +7 -0
- package/src/daemon/wake-target-adapter.ts +10 -0
- package/src/documents/document-store.ts +38 -0
- package/src/export/__tests__/transcript-formatter.test.ts +1 -0
- package/src/heartbeat/__tests__/heartbeat-service.test.ts +30 -1
- package/src/heartbeat/heartbeat-service.ts +63 -0
- package/src/home/__tests__/feed-writer.test.ts +161 -0
- package/src/home/__tests__/post-connect-feed.test.ts +1 -0
- package/src/home/__tests__/suggested-prompts.test.ts +55 -59
- package/src/home/feed-writer.ts +146 -7
- package/src/home/home-greeting.ts +0 -9
- package/src/home/suggested-prompts.ts +27 -154
- package/src/ipc/__tests__/cli-ipc.test.ts +1 -0
- package/src/ipc/gateway-client.test.ts +4 -1
- package/src/ipc/gateway-flag-listener.ts +123 -0
- package/src/ipc/skill-routes/__tests__/memory.test.ts +1 -0
- package/src/ipc/skill-routes/__tests__/registries.test.ts +36 -7
- package/src/ipc/skill-routes/memory.ts +4 -3
- package/src/ipc/skill-routes/registries.ts +35 -40
- package/src/memory/__tests__/db-async-query.test.ts +165 -0
- package/src/memory/__tests__/db-maintenance.test.ts +115 -0
- package/src/memory/__tests__/jobs-store-enqueue-gate.test.ts +242 -0
- package/src/memory/__tests__/jobs-store-job-classes.test.ts +28 -1
- package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +26 -5
- package/src/memory/__tests__/memory-retrospective-enqueue.test.ts +1 -0
- package/src/memory/__tests__/memory-retrospective-job.test.ts +8 -0
- package/src/memory/__tests__/memory-retrospective-startup-cleanup.test.ts +1 -0
- package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +31 -0
- package/src/memory/auto-analysis-enqueue.ts +5 -1
- package/src/memory/conversation-attention-store.ts +17 -3
- package/src/memory/conversation-crud.ts +423 -182
- package/src/memory/conversation-starters-cadence.ts +3 -1
- package/src/memory/conversation-title-service.ts +19 -3
- package/src/memory/db-async-query.ts +214 -0
- package/src/memory/db-connection.ts +29 -19
- package/src/memory/db-init.ts +14 -0
- package/src/memory/db-maintenance.ts +30 -21
- package/src/memory/db-singleton.ts +77 -0
- package/src/memory/delivery-channels.ts +82 -0
- package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +2 -4
- package/src/memory/graph/bootstrap.ts +8 -1
- package/src/memory/graph/capability-seed.ts +7 -3
- package/src/memory/graph/conversation-graph-memory.ts +100 -17
- package/src/memory/graph/extraction.ts +1 -5
- package/src/memory/graph/graph-search.ts +7 -1
- package/src/memory/graph/retriever.test.ts +3 -3
- package/src/memory/indexer.ts +28 -18
- package/src/memory/job-handlers/cleanup.ts +76 -18
- package/src/memory/job-handlers/conversation-starters.ts +1 -4
- package/src/memory/job-handlers/embedding.test.ts +3 -2
- package/src/memory/jobs/__tests__/embed-concept-page.test.ts +5 -2
- package/src/memory/jobs/embed-pkb-file.ts +6 -1
- package/src/memory/jobs-store.ts +14 -0
- package/src/memory/jobs-worker.ts +66 -22
- package/src/memory/llm-request-log-source-clickhouse.ts +122 -2
- package/src/memory/llm-request-log-source-local.ts +31 -0
- package/src/memory/llm-request-log-source.ts +40 -2
- package/src/memory/llm-request-log-store.ts +228 -1
- package/src/memory/llm-usage-store.ts +24 -0
- package/src/memory/memory-retrospective-enqueue.ts +8 -1
- package/src/memory/memory-retrospective-job.ts +5 -0
- package/src/memory/memory-v2-activation-log-store.ts +110 -7
- package/src/memory/migrations/260-rename-cleaned-at.ts +44 -0
- package/src/memory/migrations/261-llm-usage-add-raw-usage.ts +36 -0
- package/src/memory/migrations/262-memory-v3-coactivation.ts +57 -0
- package/src/memory/migrations/263-memory-v3-auto-edges.ts +50 -0
- package/src/memory/migrations/264-llm-request-log-call-site.ts +29 -0
- package/src/memory/migrations/265-drop-provider-connection-status.ts +26 -0
- package/src/memory/migrations/266-messages-client-message-id.ts +43 -0
- package/src/memory/migrations/index.ts +19 -0
- package/src/memory/migrations/registry.ts +33 -0
- package/src/memory/schema/conversations.ts +10 -2
- package/src/memory/schema/inference.ts +0 -1
- package/src/memory/schema/infrastructure.ts +21 -0
- package/src/memory/tool-usage-store.ts +36 -8
- package/src/memory/v2/__tests__/backfill-jobs.test.ts +5 -2
- package/src/memory/v2/__tests__/consolidation-job.test.ts +1 -0
- package/src/memory/v2/__tests__/harness-compare.test.ts +186 -0
- package/src/memory/v2/__tests__/harness-metrics.test.ts +83 -0
- package/src/memory/v2/__tests__/harness-oracle.test.ts +257 -0
- package/src/memory/v2/__tests__/harness-replay-input.test.ts +230 -0
- package/src/memory/v2/__tests__/harness-runner.test.ts +135 -0
- package/src/memory/v2/__tests__/injection.test.ts +127 -98
- package/src/memory/v2/__tests__/qdrant.test.ts +36 -0
- package/src/memory/v2/__tests__/router.test.ts +171 -3
- package/src/memory/v2/__tests__/sweep-job.test.ts +6 -3
- package/src/memory/v2/harness/compare.ts +57 -0
- package/src/memory/v2/harness/metrics.ts +128 -0
- package/src/memory/v2/harness/oracle.ts +145 -0
- package/src/memory/v2/harness/replay-input.ts +240 -0
- package/src/memory/v2/harness/retriever.ts +74 -0
- package/src/memory/v2/harness/router-retriever.ts +43 -0
- package/src/memory/v2/harness/runner.ts +112 -0
- package/src/memory/v2/harness/trace.ts +64 -0
- package/src/memory/v2/injection.ts +21 -15
- package/src/memory/v2/prompts/router.ts +26 -1
- package/src/memory/v2/qdrant.ts +14 -2
- package/src/memory/v2/router.ts +171 -18
- package/src/memory/v3/__tests__/coactivation-store.test.ts +422 -0
- package/src/memory/v3/__tests__/consolidation-job.test.ts +466 -0
- package/src/memory/v3/__tests__/coretrieval-seed.test.ts +270 -0
- package/src/memory/v3/__tests__/edge-learning-job.test.ts +324 -0
- package/src/memory/v3/__tests__/edges.test.ts +706 -0
- package/src/memory/v3/__tests__/filter.test.ts +560 -0
- package/src/memory/v3/__tests__/gate.test.ts +637 -0
- package/src/memory/v3/__tests__/index-composition.test.ts +291 -0
- package/src/memory/v3/__tests__/loop.test.ts +775 -0
- package/src/memory/v3/__tests__/retriever.test.ts +226 -0
- package/src/memory/v3/__tests__/scouts.test.ts +489 -0
- package/src/memory/v3/__tests__/shadow-diff.test.ts +225 -0
- package/src/memory/v3/__tests__/shadow-middleware.test.ts +398 -0
- package/src/memory/v3/__tests__/system-prompts.test.ts +154 -0
- package/src/memory/v3/__tests__/traversal.test.ts +508 -0
- package/src/memory/v3/__tests__/tree-index.test.ts +280 -0
- package/src/memory/v3/__tests__/tree-store.test.ts +529 -0
- package/src/memory/v3/__tests__/tree-walk.test.ts +784 -0
- package/src/memory/v3/__tests__/validate.test.ts +277 -0
- package/src/memory/v3/auto-edges.ts +223 -0
- package/src/memory/v3/coactivation-store.ts +124 -0
- package/src/memory/v3/consolidation-job.ts +323 -0
- package/src/memory/v3/coretrieval-seed.ts +240 -0
- package/src/memory/v3/edge-learning-job.ts +160 -0
- package/src/memory/v3/edges.ts +286 -0
- package/src/memory/v3/filter.ts +286 -0
- package/src/memory/v3/gate.ts +349 -0
- package/src/memory/v3/index-composition.ts +126 -0
- package/src/memory/v3/llm-capture.ts +46 -0
- package/src/memory/v3/loop.ts +430 -0
- package/src/memory/v3/maintenance.ts +144 -0
- package/src/memory/v3/prompt-context.ts +33 -0
- package/src/memory/v3/prompts/consolidation.ts +458 -0
- package/src/memory/v3/prompts/system-prompts.ts +196 -0
- package/src/memory/v3/retriever.ts +33 -0
- package/src/memory/v3/scouts.ts +431 -0
- package/src/memory/v3/shadow-diff.ts +287 -0
- package/src/memory/v3/shadow-middleware.ts +347 -0
- package/src/memory/v3/traversal.ts +211 -0
- package/src/memory/v3/tree-index.ts +237 -0
- package/src/memory/v3/tree-store.ts +394 -0
- package/src/memory/v3/tree-walk.ts +356 -0
- package/src/memory/v3/types.ts +65 -0
- package/src/memory/v3/validate.ts +323 -0
- package/src/notifications/__tests__/emit-signal-home-feed.test.ts +1 -0
- package/src/notifications/__tests__/home-feed-side-effect.test.ts +1 -0
- package/src/notifications/adapters/macos.ts +18 -1
- package/src/notifications/adapters/platform.ts +1 -1
- package/src/notifications/adapters/slack.ts +45 -11
- package/src/notifications/broadcaster.ts +114 -63
- package/src/notifications/conversation-pairing.ts +23 -3
- package/src/notifications/decision-engine.ts +1 -4
- package/src/notifications/decisions-store.ts +32 -1
- package/src/notifications/deliveries-store.ts +45 -0
- package/src/notifications/edit-notification.ts +201 -0
- package/src/notifications/emit-signal.ts +40 -50
- package/src/notifications/signal.ts +10 -0
- package/src/notifications/types.ts +37 -0
- package/src/oauth/byo-connection.test.ts +67 -3
- package/src/oauth/byo-connection.ts +32 -5
- package/src/oauth/connect-orchestrator.ts +9 -0
- package/src/oauth/connection-resolver.test.ts +76 -0
- package/src/oauth/connection-resolver.ts +49 -10
- package/src/oauth/manual-token-connection.ts +51 -3
- package/src/oauth/seed-providers.ts +3 -0
- package/src/permissions/approval-policy.test.ts +19 -5
- package/src/permissions/approval-policy.ts +14 -3
- package/src/permissions/checker.ts +21 -8
- package/src/permissions/prompter.ts +3 -3
- package/src/permissions/question-prompter.ts +5 -2
- package/src/permissions/secret-prompter.ts +2 -2
- package/src/platform/client.test.ts +24 -1
- package/src/platform/client.ts +8 -0
- package/src/platform/feature-gate.ts +15 -0
- package/src/plugin-api/index.ts +4 -0
- package/src/plugin-api/types.ts +7 -33
- package/src/plugins/defaults/index.ts +6 -0
- package/src/plugins/defaults/injectors.ts +20 -19
- package/src/plugins/defaults/persistence.ts +25 -6
- package/src/plugins/external-plugin-loader.ts +5 -68
- package/src/plugins/types.ts +68 -29
- package/src/proactive-artifact/aux-message-injector.ts +17 -4
- package/src/proactive-artifact/job.test.ts +1 -0
- package/src/prompts/__tests__/system-prompt.test.ts +4 -4
- package/src/prompts/__tests__/task-progress-hint-section.test.ts +3 -9
- package/src/prompts/persona-resolver.ts +36 -21
- package/src/prompts/sections.ts +39 -7
- package/src/prompts/system-prompt.ts +84 -221
- package/src/prompts/template-detection.ts +10 -4
- package/src/prompts/templates/BOOTSTRAP.md +9 -13
- package/src/prompts/templates/IDENTITY.md +0 -2
- package/src/prompts/templates/system-sections.ts +230 -8
- package/src/providers/__tests__/connection-model-compat.test.ts +233 -0
- package/src/providers/__tests__/registry-native-web-search.test.ts +122 -0
- package/src/providers/__tests__/retry-callsite.test.ts +85 -5
- package/src/providers/anthropic/client.ts +32 -66
- package/src/providers/call-site-routing.ts +42 -6
- package/src/providers/connection-model-compat.ts +61 -0
- package/src/providers/connection-resolution.ts +47 -14
- package/src/providers/fireworks/client.ts +1 -0
- package/src/providers/gemini/client.ts +70 -6
- package/src/providers/inference/__tests__/adapter-factory-openai-compatible.test.ts +0 -2
- package/src/providers/inference/__tests__/base-url-security.test.ts +2 -3
- package/src/providers/inference/__tests__/{connections-status-label.test.ts → connections-label.test.ts} +12 -111
- package/src/providers/inference/adapter-factory.ts +3 -0
- package/src/providers/inference/auth.ts +0 -8
- package/src/providers/inference/connections.ts +3 -66
- package/src/providers/inference/resolve-auth.ts +2 -3
- package/src/providers/minimax/client.ts +106 -0
- package/src/providers/model-catalog.ts +78 -1
- package/src/providers/model-intents.ts +4 -4
- package/src/providers/openai/__tests__/api-error-detail.test.ts +120 -0
- package/src/providers/openai/__tests__/chat-completions-provider-reasoning.test.ts +157 -5
- package/src/providers/openai/chat-completions-provider.ts +116 -15
- package/src/providers/openai/codex-models.ts +20 -0
- package/src/providers/openai/responses-provider.ts +87 -30
- package/src/providers/openrouter/client.ts +13 -8
- package/src/providers/provider-send-message.ts +20 -5
- package/src/providers/registry.ts +48 -8
- package/src/providers/retry.ts +50 -7
- package/src/providers/search-provider-catalog.ts +17 -9
- package/src/providers/thinking-config.ts +26 -1
- package/src/providers/types.ts +9 -0
- package/src/providers/usage-tracking.ts +2 -0
- package/src/runtime/AGENTS.md +2 -2
- package/src/runtime/__tests__/agent-wake.test.ts +1 -0
- package/src/runtime/__tests__/background-job-runner.test.ts +1 -0
- package/src/runtime/access-request-helper.ts +1 -0
- package/src/runtime/agent-wake.ts +1 -0
- package/src/runtime/assistant-event-hub.ts +76 -6
- package/src/runtime/auth/route-policy.ts +46 -0
- package/src/runtime/btw-sidechain.ts +0 -6
- package/src/runtime/channel-readiness-service.ts +68 -0
- package/src/runtime/channel-reply-delivery.ts +23 -0
- package/src/runtime/channel-retry-sweep.ts +47 -14
- package/src/runtime/confirmation-request-guardian-bridge.ts +1 -1
- package/src/runtime/http-types.ts +0 -2
- package/src/runtime/migrations/vbundle-builder.ts +12 -4
- package/src/runtime/pending-interactions.ts +0 -1
- package/src/runtime/routes/__tests__/bookmark-routes.test.ts +1 -0
- package/src/runtime/routes/__tests__/conversation-compaction-routes.test.ts +406 -0
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +204 -0
- package/src/runtime/routes/__tests__/heartbeat-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/home-feed-routes.test.ts +209 -1
- package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +13 -50
- package/src/runtime/routes/__tests__/memory-v2-simulate-route.test.ts +76 -9
- package/src/runtime/routes/__tests__/memory-v3-simulate-params.test.ts +35 -0
- package/src/runtime/routes/__tests__/plugins-routes.test.ts +512 -0
- package/src/runtime/routes/__tests__/slack-channel-routes.test.ts +3 -2
- package/src/runtime/routes/__tests__/surface-content-routes.test.ts +294 -0
- package/src/runtime/routes/__tests__/task-routes.test.ts +48 -3
- package/src/runtime/routes/acp-routes-list.test.ts +3 -0
- package/src/runtime/routes/acp-routes.test.ts +255 -6
- package/src/runtime/routes/acp-routes.ts +8 -1
- package/src/runtime/routes/app-management-routes.ts +111 -4
- package/src/runtime/routes/avatar-routes.ts +10 -10
- package/src/runtime/routes/background-wake-routes.ts +356 -0
- package/src/runtime/routes/browser-tabs-routes.ts +200 -0
- package/src/runtime/routes/btw-routes.ts +4 -10
- package/src/runtime/routes/conversation-analysis-routes.ts +6 -0
- package/src/runtime/routes/conversation-cli-routes.ts +1 -1
- package/src/runtime/routes/conversation-compaction-routes.ts +263 -0
- package/src/runtime/routes/conversation-list-routes.ts +159 -4
- package/src/runtime/routes/conversation-management-routes.ts +108 -26
- package/src/runtime/routes/conversation-query-routes.ts +200 -44
- package/src/runtime/routes/conversation-routes.ts +409 -521
- package/src/runtime/routes/conversation-starter-routes.ts +6 -3
- package/src/runtime/routes/conversations-import-routes.ts +19 -6
- package/src/runtime/routes/disk-pressure-routes.ts +1 -1
- package/src/runtime/routes/documents-routes.ts +10 -1
- package/src/runtime/routes/domain-routes.ts +60 -10
- package/src/runtime/routes/email-routes.ts +5 -2
- package/src/runtime/routes/events-routes.ts +54 -10
- package/src/runtime/routes/group-routes.ts +35 -8
- package/src/runtime/routes/home-feed-routes.ts +129 -0
- package/src/runtime/routes/host-browser-routes.ts +10 -2
- package/src/runtime/routes/host-cu-routes.ts +2 -2
- package/src/runtime/routes/identity-intro-cache.ts +61 -16
- package/src/runtime/routes/identity-routes.ts +30 -9
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +96 -3
- package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +530 -6
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +57 -8
- package/src/runtime/routes/index.ts +10 -0
- package/src/runtime/routes/inference-profile-session-handler.ts +22 -12
- package/src/runtime/routes/inference-profile-session-routes.ts +7 -1
- package/src/runtime/routes/inference-provider-connection-routes.ts +5 -26
- package/src/runtime/routes/integrations/vercel.ts +15 -0
- package/src/runtime/routes/llm-call-sites-routes.ts +32 -5
- package/src/runtime/routes/llm-context-normalization.ts +7 -2
- package/src/runtime/routes/memory-item-routes.ts +8 -3
- package/src/runtime/routes/memory-v2-routes.ts +215 -5
- package/src/runtime/routes/memory-v3-routes.ts +474 -0
- package/src/runtime/routes/migration-routes.ts +32 -28
- package/src/runtime/routes/notification-routes.ts +63 -1
- package/src/runtime/routes/oauth-commands-routes.ts +6 -1
- package/src/runtime/routes/plugins-routes.ts +337 -0
- package/src/runtime/routes/rename-conversation-routes.ts +6 -2
- package/src/runtime/routes/secret-routes.ts +25 -5
- package/src/runtime/routes/settings-routes.ts +12 -11
- package/src/runtime/routes/slack-channel-routes.ts +5 -4
- package/src/runtime/routes/surface-action-routes.ts +1 -38
- package/src/runtime/routes/surface-content-routes.ts +12 -5
- package/src/runtime/routes/surface-conversation-resolver.ts +65 -0
- package/src/runtime/routes/wipe-conversation-routes.ts +3 -0
- package/src/runtime/routes/workspace-routes.ts +25 -10
- package/src/runtime/services/__tests__/analyze-conversation.test.ts +2 -0
- package/src/runtime/slack-dm-text-delivery.ts +177 -0
- package/src/runtime/sync/resource-sync-events.ts +106 -38
- package/src/runtime/sync/sync-publisher.test.ts +49 -0
- package/src/runtime/sync/sync-publisher.ts +2 -1
- package/src/runtime/tool-grant-request-helper.ts +1 -0
- package/src/runtime/verification-outbound-actions.ts +73 -1
- package/src/schedule/schedule-store.ts +8 -1
- package/src/schedule/scheduler.ts +111 -15
- package/src/security/__tests__/provider-key-env-fallback.test.ts +3 -3
- package/src/security/encrypted-store.ts +7 -16
- package/src/security/store-path-override.ts +61 -0
- package/src/signals/user-message.ts +5 -8
- package/src/skills/validate-input.ts +177 -0
- package/src/subagent/manager.ts +13 -13
- package/src/subagent/types.ts +6 -0
- package/src/tasks/tool-sanitizer.ts +2 -2
- package/src/telemetry/types.ts +12 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +48 -0
- package/src/telemetry/usage-telemetry-reporter.ts +1 -0
- package/src/tools/acp/spawn.test.ts +119 -0
- package/src/tools/acp/spawn.ts +15 -2
- package/src/tools/apps/definitions.ts +36 -28
- package/src/tools/ask-question/ask-question-tool.test.ts +3 -3
- package/src/tools/ask-question/ask-question-tool.ts +38 -45
- package/src/tools/browser/__tests__/browser-execution-acquire.test.ts +2 -8
- package/src/tools/browser/__tests__/pinned-tabs.test.ts +70 -0
- package/src/tools/browser/browser-execution.ts +16 -3
- package/src/tools/browser/cdp-client/__tests__/browser-tabs-factory.test.ts +402 -0
- package/src/tools/browser/cdp-client/__tests__/types.test.ts +3 -0
- package/src/tools/browser/cdp-client/cdp-inspect-client.ts +12 -0
- package/src/tools/browser/cdp-client/extension-cdp-client.ts +27 -1
- package/src/tools/browser/cdp-client/factory.ts +100 -17
- package/src/tools/browser/cdp-client/local-cdp-client.ts +12 -0
- package/src/tools/browser/cdp-client/types.ts +65 -0
- package/src/tools/browser/pinned-tabs.ts +96 -40
- package/src/tools/computer-use/definitions.ts +282 -336
- package/src/tools/credential-execution/make-authenticated-request.ts +3 -9
- package/src/tools/credential-execution/manage-secure-command-tool.ts +3 -9
- package/src/tools/credential-execution/run-authenticated-command.ts +3 -9
- package/src/tools/credentials/vault.ts +3 -9
- package/src/tools/document/document-tool.ts +189 -7
- package/src/tools/execution-target.ts +18 -23
- package/src/tools/executor.ts +24 -56
- package/src/tools/filesystem/edit.ts +3 -9
- package/src/tools/filesystem/list.ts +3 -9
- package/src/tools/filesystem/read.ts +3 -9
- package/src/tools/filesystem/write.ts +3 -9
- package/src/tools/host-filesystem/edit.test.ts +1 -0
- package/src/tools/host-filesystem/edit.ts +3 -9
- package/src/tools/host-filesystem/read.test.ts +1 -0
- package/src/tools/host-filesystem/read.ts +3 -9
- package/src/tools/host-filesystem/transfer.test.ts +31 -6
- package/src/tools/host-filesystem/transfer.ts +3 -9
- package/src/tools/host-filesystem/write.test.ts +1 -0
- package/src/tools/host-filesystem/write.ts +3 -9
- package/src/tools/host-terminal/host-shell.ts +3 -9
- package/src/tools/mcp/mcp-tool-factory.ts +1 -10
- package/src/tools/memory/register.test.ts +1 -1
- package/src/tools/memory/register.ts +4 -9
- package/src/tools/network/__tests__/managed-search-proxy.test.ts +282 -0
- package/src/tools/network/__tests__/web-search.test.ts +211 -3
- package/src/tools/network/managed-search-proxy.ts +183 -0
- package/src/tools/network/web-fetch.ts +3 -9
- package/src/tools/network/web-search.ts +224 -76
- package/src/tools/policy-context.ts +3 -1
- package/src/tools/registry.ts +150 -123
- package/src/tools/schedule/create.ts +1 -1
- package/src/tools/schema-transforms.ts +1 -1
- package/src/tools/skills/execute.ts +3 -9
- package/src/tools/skills/load.ts +3 -9
- package/src/tools/skills/skill-tool-factory.ts +18 -44
- package/src/tools/subagent/notify-parent.ts +3 -9
- package/src/tools/subagent/spawn.ts +3 -0
- package/src/tools/system/request-permission.ts +3 -9
- package/src/tools/terminal/shell.ts +3 -9
- package/src/tools/tool-approval-handler.ts +10 -4
- package/src/tools/tool-defaults.ts +94 -0
- package/src/tools/tool-name-aliases.ts +72 -14
- package/src/tools/types.ts +32 -101
- package/src/tools/ui-surface/definitions.ts +104 -108
- package/src/types/onboarding-context.ts +6 -0
- package/src/usage/attribution.ts +32 -1
- package/src/usage/pricing.ts +23 -0
- package/src/usage/types.ts +12 -0
- package/src/util/browser.ts +7 -2
- package/src/util/logger.ts +16 -7
- package/src/util/platform.ts +7 -2
- package/src/util/sqlite3-runtime.ts +65 -0
- package/src/workspace/migrations/086-revert-stale-gemini-mis-rewrites.ts +1 -0
- package/src/workspace/migrations/089-move-memory-tree-out-of-v3.ts +86 -0
- package/src/workspace/migrations/090-memory-router-cost-optimized-profile.ts +109 -0
- package/src/workspace/migrations/091-retighten-migration-onboarding-thread.ts +41 -0
- package/src/workspace/migrations/registry.ts +6 -0
- package/src/__tests__/compaction-strip-metadata-clear.test.ts +0 -206
- package/src/__tests__/message-complete-display-id.test.ts +0 -175
- package/src/daemon/query-complexity-router.ts +0 -75
- package/src/prompts/cache-boundary.ts +0 -8
|
@@ -11,7 +11,11 @@ import type { ChannelId, InterfaceId } from "../../../channels/types.js";
|
|
|
11
11
|
import { findGuardianForChannel } from "../../../contacts/contact-store.js";
|
|
12
12
|
import type { ServerMessage } from "../../../daemon/message-protocol.js";
|
|
13
13
|
import type { TrustContext } from "../../../daemon/trust-context.js";
|
|
14
|
-
import {
|
|
14
|
+
import {
|
|
15
|
+
addSlackDmLiveDeliveredTextResponseIndex,
|
|
16
|
+
getSlackDmLiveDeliveredTextResponseIndexes,
|
|
17
|
+
updateDeliveredSegmentCount,
|
|
18
|
+
} from "../../../memory/delivery-channels.js";
|
|
15
19
|
import {
|
|
16
20
|
linkMessage,
|
|
17
21
|
storeReplyMessageId,
|
|
@@ -44,6 +48,10 @@ import type {
|
|
|
44
48
|
MessageProcessor,
|
|
45
49
|
SlackInboundMessageMetadata,
|
|
46
50
|
} from "../../http-types.js";
|
|
51
|
+
import {
|
|
52
|
+
createSlackDmTextDeliveryController,
|
|
53
|
+
isSlackDeliveryCallbackUrl,
|
|
54
|
+
} from "../../slack-dm-text-delivery.js";
|
|
47
55
|
import { resolveRoutingState } from "../../trust-context-resolver.js";
|
|
48
56
|
import { deliverReplyViaCallback } from "../channel-delivery-routes.js";
|
|
49
57
|
import { deliverGeneratedApprovalPrompt } from "../guardian-approval-prompt.js";
|
|
@@ -228,6 +236,21 @@ export function processChannelMessageInBackground(
|
|
|
228
236
|
}
|
|
229
237
|
: undefined;
|
|
230
238
|
let replyMessageId: string | undefined;
|
|
239
|
+
const slackDmTextDelivery = createSlackDmTextDeliveryController({
|
|
240
|
+
sourceChannel,
|
|
241
|
+
chatType,
|
|
242
|
+
replyCallbackUrl,
|
|
243
|
+
chatId: externalChatId,
|
|
244
|
+
assistantId,
|
|
245
|
+
deliveredTextResponseIndexes:
|
|
246
|
+
getSlackDmLiveDeliveredTextResponseIndexes(eventId),
|
|
247
|
+
onTextResponseDelivered: (responseIndex, reason) => {
|
|
248
|
+
addSlackDmLiveDeliveredTextResponseIndex(eventId, responseIndex);
|
|
249
|
+
if (reason === "before_tool") {
|
|
250
|
+
slackThinkingStatus?.refreshAfterReply();
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
});
|
|
231
254
|
const observeAgentEvent = (msg: ServerMessage): void => {
|
|
232
255
|
if (
|
|
233
256
|
msg.type === "message_complete" &&
|
|
@@ -236,6 +259,7 @@ export function processChannelMessageInBackground(
|
|
|
236
259
|
) {
|
|
237
260
|
replyMessageId = msg.messageId;
|
|
238
261
|
}
|
|
262
|
+
slackDmTextDelivery?.observeEvent(msg);
|
|
239
263
|
slackThinkingStatus?.observeEvent(msg);
|
|
240
264
|
};
|
|
241
265
|
|
|
@@ -297,12 +321,21 @@ export function processChannelMessageInBackground(
|
|
|
297
321
|
{ err, conversationId },
|
|
298
322
|
"Background channel message processing failed",
|
|
299
323
|
);
|
|
324
|
+
if (slackDmTextDelivery) {
|
|
325
|
+
await slackDmTextDelivery.waitForPendingDeliveries();
|
|
326
|
+
}
|
|
300
327
|
recordProcessingFailure(eventId, err);
|
|
301
328
|
return;
|
|
302
329
|
}
|
|
303
330
|
|
|
304
331
|
if (replyCallbackUrl) {
|
|
305
332
|
try {
|
|
333
|
+
if (slackDmTextDelivery) {
|
|
334
|
+
await slackDmTextDelivery.waitForPendingDeliveries();
|
|
335
|
+
}
|
|
336
|
+
const liveDeliveryResumeOptions =
|
|
337
|
+
slackDmTextDelivery?.getFinalDeliveryResumeOptions(replyMessageId);
|
|
338
|
+
|
|
306
339
|
await deliverReplyViaCallback(
|
|
307
340
|
conversationId,
|
|
308
341
|
externalChatId,
|
|
@@ -311,6 +344,7 @@ export function processChannelMessageInBackground(
|
|
|
311
344
|
{
|
|
312
345
|
messageId: replyMessageId,
|
|
313
346
|
sinceMessageId: userMessageId,
|
|
347
|
+
...liveDeliveryResumeOptions,
|
|
314
348
|
onSegmentDelivered: (count) =>
|
|
315
349
|
updateDeliveredSegmentCount(eventId, count),
|
|
316
350
|
},
|
|
@@ -395,11 +429,13 @@ function startTelegramTypingHeartbeat(
|
|
|
395
429
|
|
|
396
430
|
type SlackThinkingStatusController = {
|
|
397
431
|
observeEvent: (msg: ServerMessage) => void;
|
|
432
|
+
refreshAfterReply: () => void;
|
|
398
433
|
stop: () => void;
|
|
399
434
|
};
|
|
400
435
|
|
|
401
436
|
type SlackThinkingStatusHandle = {
|
|
402
437
|
updateLoadingMessages: (loadingMessages?: string[]) => void;
|
|
438
|
+
refresh: (loadingMessages?: string[]) => void;
|
|
403
439
|
clear: () => void;
|
|
404
440
|
};
|
|
405
441
|
|
|
@@ -440,12 +476,9 @@ function shouldEmitSlackThinkingStatus(
|
|
|
440
476
|
sourceChannel: ChannelId,
|
|
441
477
|
replyCallbackUrl?: string,
|
|
442
478
|
): boolean {
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
} catch {
|
|
447
|
-
return replyCallbackUrl.endsWith("/deliver/slack");
|
|
448
|
-
}
|
|
479
|
+
return (
|
|
480
|
+
sourceChannel === "slack" && isSlackDeliveryCallbackUrl(replyCallbackUrl)
|
|
481
|
+
);
|
|
449
482
|
}
|
|
450
483
|
|
|
451
484
|
export function shouldStartSlackThinkingStatusImmediately(params: {
|
|
@@ -547,6 +580,13 @@ function createSlackThinkingStatusController(params: {
|
|
|
547
580
|
start();
|
|
548
581
|
}
|
|
549
582
|
},
|
|
583
|
+
refreshAfterReply() {
|
|
584
|
+
if (stopped || !slackThinkingStatus) return;
|
|
585
|
+
// Slack clears assistant thread status when the app sends a reply, so
|
|
586
|
+
// live pre-tool replies need to reassert it while work continues.
|
|
587
|
+
slackThinkingStatus.refresh(currentLoadingMessages);
|
|
588
|
+
lastSentLoadingMessageKey = getLoadingMessagesKey(currentLoadingMessages);
|
|
589
|
+
},
|
|
550
590
|
stop() {
|
|
551
591
|
stopped = true;
|
|
552
592
|
slackThinkingStatus?.clear();
|
|
@@ -627,7 +667,9 @@ function getTaskProgressLoadingMessage(
|
|
|
627
667
|
|
|
628
668
|
const activeStep = progress.steps[activeStepIndex]!;
|
|
629
669
|
return [
|
|
630
|
-
`In progress (${activeStepIndex + 1}/${progress.steps.length}): ${
|
|
670
|
+
`In progress (${activeStepIndex + 1}/${progress.steps.length}): ${
|
|
671
|
+
activeStep.label
|
|
672
|
+
}`,
|
|
631
673
|
];
|
|
632
674
|
}
|
|
633
675
|
|
|
@@ -656,6 +698,7 @@ function setSlackThinkingStatus(
|
|
|
656
698
|
if (!messageTs) {
|
|
657
699
|
return {
|
|
658
700
|
updateLoadingMessages: () => {},
|
|
701
|
+
refresh: () => {},
|
|
659
702
|
clear: () => {},
|
|
660
703
|
};
|
|
661
704
|
}
|
|
@@ -697,6 +740,7 @@ function setSlackThinkingStatus(
|
|
|
697
740
|
|
|
698
741
|
return {
|
|
699
742
|
updateLoadingMessages: () => {},
|
|
743
|
+
refresh: () => {},
|
|
700
744
|
clear: clearReaction,
|
|
701
745
|
};
|
|
702
746
|
}
|
|
@@ -739,6 +783,10 @@ function setSlackThinkingStatus(
|
|
|
739
783
|
);
|
|
740
784
|
};
|
|
741
785
|
|
|
786
|
+
const refresh = (nextLoadingMessages?: string[]): void => {
|
|
787
|
+
updateLoadingMessages(nextLoadingMessages);
|
|
788
|
+
};
|
|
789
|
+
|
|
742
790
|
const clearStatus = (): void => {
|
|
743
791
|
if (cleared) return;
|
|
744
792
|
cleared = true;
|
|
@@ -766,6 +814,7 @@ function setSlackThinkingStatus(
|
|
|
766
814
|
|
|
767
815
|
return {
|
|
768
816
|
updateLoadingMessages,
|
|
817
|
+
refresh,
|
|
769
818
|
clear: clearStatus,
|
|
770
819
|
};
|
|
771
820
|
}
|
|
@@ -18,10 +18,12 @@ import { ROUTES as AUDIT_ROUTES } from "./audit-routes.js";
|
|
|
18
18
|
import { ROUTES as AUTH_ROUTES } from "./auth-routes.js";
|
|
19
19
|
import { ROUTES as AVATAR_ROUTES } from "./avatar-routes.js";
|
|
20
20
|
import { ROUTES as BACKGROUND_TOOL_ROUTES } from "./background-tool-routes.js";
|
|
21
|
+
import { ROUTES as BACKGROUND_WAKE_ROUTES } from "./background-wake-routes.js";
|
|
21
22
|
import { ROUTES as BACKUP_ROUTES } from "./backup-routes.js";
|
|
22
23
|
import { ROUTES as BOOKMARK_ROUTES } from "./bookmark-routes.js";
|
|
23
24
|
import { ROUTES as BRAIN_GRAPH_ROUTES } from "./brain-graph-routes.js";
|
|
24
25
|
import { ROUTES as BROWSER_ROUTES } from "./browser-routes.js";
|
|
26
|
+
import { ROUTES as BROWSER_TABS_ROUTES } from "./browser-tabs-routes.js";
|
|
25
27
|
import { ROUTES as BTW_ROUTES } from "./btw-routes.js";
|
|
26
28
|
import { ROUTES as CACHE_ROUTES } from "./cache-routes.js";
|
|
27
29
|
import { ROUTES as CALL_ROUTES } from "./call-routes.js";
|
|
@@ -38,6 +40,7 @@ import { ROUTES as CONTENT_SOURCE_ROUTES } from "./content-source-routes.js";
|
|
|
38
40
|
import { ROUTES as CONVERSATION_ANALYSIS_ROUTES } from "./conversation-analysis-routes.js";
|
|
39
41
|
import { ROUTES as CONVERSATION_ATTENTION_ROUTES } from "./conversation-attention-routes.js";
|
|
40
42
|
import { ROUTES as CONVERSATION_CLI_ROUTES } from "./conversation-cli-routes.js";
|
|
43
|
+
import { ROUTES as CONVERSATION_COMPACTION_ROUTES } from "./conversation-compaction-routes.js";
|
|
41
44
|
import { ROUTES as CONVERSATION_LIST_ROUTES } from "./conversation-list-routes.js";
|
|
42
45
|
import { ROUTES as CONVERSATION_MANAGEMENT_ROUTES } from "./conversation-management-routes.js";
|
|
43
46
|
import { ROUTES as CONVERSATION_QUERY_ROUTES } from "./conversation-query-routes.js";
|
|
@@ -88,6 +91,7 @@ import { ROUTES as LOG_EXPORT_ROUTES } from "./log-export-routes.js";
|
|
|
88
91
|
import { ROUTES as MCP_AUTH_ROUTES } from "./mcp-auth-routes.js";
|
|
89
92
|
import { ROUTES as MEMORY_ITEM_ROUTES } from "./memory-item-routes.js";
|
|
90
93
|
import { ROUTES as MEMORY_V2_ROUTES } from "./memory-v2-routes.js";
|
|
94
|
+
import { ROUTES as MEMORY_V3_ROUTES } from "./memory-v3-routes.js";
|
|
91
95
|
import { ROUTES as MIGRATION_ROLLBACK_ROUTES } from "./migration-rollback-routes.js";
|
|
92
96
|
import { ROUTES as MIGRATION_ROUTES } from "./migration-routes.js";
|
|
93
97
|
import { ROUTES as NOTIFICATION_ROUTES } from "./notification-routes.js";
|
|
@@ -98,6 +102,7 @@ import { ROUTES as OAUTH_LIFECYCLE_ROUTES } from "./oauth-lifecycle-routes.js";
|
|
|
98
102
|
import { ROUTES as OAUTH_PROVIDERS_ROUTES } from "./oauth-providers.js";
|
|
99
103
|
import { ROUTES as PLATFORM_ROUTES } from "./platform-routes.js";
|
|
100
104
|
import { ROUTES as PLAYGROUND_ROUTES } from "./playground/index.js";
|
|
105
|
+
import { ROUTES as PLUGINS_ROUTES } from "./plugins-routes.js";
|
|
101
106
|
import { ROUTES as PROFILER_ROUTES } from "./profiler-routes.js";
|
|
102
107
|
import { ROUTES as PS_ROUTES } from "./ps-routes.js";
|
|
103
108
|
import { ROUTES as PUBLISH_ROUTES } from "./publish-routes.js";
|
|
@@ -145,6 +150,7 @@ export const ROUTES: RouteDefinition[] = [
|
|
|
145
150
|
...AUDIT_ROUTES,
|
|
146
151
|
...AUTH_ROUTES,
|
|
147
152
|
...AVATAR_ROUTES,
|
|
153
|
+
...BACKGROUND_WAKE_ROUTES,
|
|
148
154
|
...BACKGROUND_TOOL_ROUTES,
|
|
149
155
|
...BACKUP_ROUTES,
|
|
150
156
|
...BOOKMARK_ROUTES,
|
|
@@ -156,6 +162,7 @@ export const ROUTES: RouteDefinition[] = [
|
|
|
156
162
|
...CHANNEL_AVAILABILITY_ROUTES,
|
|
157
163
|
...CHANNEL_READINESS_ROUTES,
|
|
158
164
|
...BROWSER_ROUTES,
|
|
165
|
+
...BROWSER_TABS_ROUTES,
|
|
159
166
|
...BTW_ROUTES,
|
|
160
167
|
...BRAIN_GRAPH_ROUTES,
|
|
161
168
|
...CLIENT_ROUTES,
|
|
@@ -173,6 +180,7 @@ export const ROUTES: RouteDefinition[] = [
|
|
|
173
180
|
...CREDENTIAL_PROMPT_ROUTES,
|
|
174
181
|
...CREDENTIAL_ROUTES,
|
|
175
182
|
...DEFER_ROUTES,
|
|
183
|
+
...CONVERSATION_COMPACTION_ROUTES,
|
|
176
184
|
...CONVERSATION_QUERY_ROUTES,
|
|
177
185
|
...CONVERSATION_STARTER_ROUTES,
|
|
178
186
|
...DEBUG_BASH_ROUTES,
|
|
@@ -211,6 +219,7 @@ export const ROUTES: RouteDefinition[] = [
|
|
|
211
219
|
...LLM_CALL_SITES_ROUTES,
|
|
212
220
|
...MEMORY_ITEM_ROUTES,
|
|
213
221
|
...MEMORY_V2_ROUTES,
|
|
222
|
+
...MEMORY_V3_ROUTES,
|
|
214
223
|
...MIGRATION_ROLLBACK_ROUTES,
|
|
215
224
|
...MIGRATION_ROUTES,
|
|
216
225
|
...NOTIFICATION_ROUTES,
|
|
@@ -220,6 +229,7 @@ export const ROUTES: RouteDefinition[] = [
|
|
|
220
229
|
...OAUTH_PROVIDERS_ROUTES,
|
|
221
230
|
...PLATFORM_ROUTES,
|
|
222
231
|
...PLAYGROUND_ROUTES,
|
|
232
|
+
...PLUGINS_ROUTES,
|
|
223
233
|
...PROFILER_ROUTES,
|
|
224
234
|
...PS_ROUTES,
|
|
225
235
|
...PUBLISH_ROUTES,
|
|
@@ -67,11 +67,13 @@ export async function setInferenceProfileSession({
|
|
|
67
67
|
profile,
|
|
68
68
|
ttlSeconds,
|
|
69
69
|
sessionId: callerSessionId,
|
|
70
|
+
originClientId,
|
|
70
71
|
}: {
|
|
71
72
|
conversationId: string;
|
|
72
73
|
profile: string | null;
|
|
73
74
|
ttlSeconds?: number | null;
|
|
74
75
|
sessionId?: string;
|
|
76
|
+
originClientId?: string;
|
|
75
77
|
}): Promise<InferenceProfileSessionResult> {
|
|
76
78
|
const resolvedId = resolveConversationId(conversationId) ?? conversationId;
|
|
77
79
|
const conversation = getConversation(resolvedId);
|
|
@@ -116,12 +118,15 @@ export async function setInferenceProfileSession({
|
|
|
116
118
|
};
|
|
117
119
|
}
|
|
118
120
|
setConversationInferenceProfileSession(resolvedId, null, null, null);
|
|
119
|
-
publishConversationInferenceProfileChanged(
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
121
|
+
publishConversationInferenceProfileChanged(
|
|
122
|
+
{
|
|
123
|
+
conversationId: resolvedId,
|
|
124
|
+
profile: null,
|
|
125
|
+
sessionId: null,
|
|
126
|
+
expiresAt: null,
|
|
127
|
+
},
|
|
128
|
+
originClientId,
|
|
129
|
+
);
|
|
125
130
|
return {
|
|
126
131
|
conversationId: resolvedId,
|
|
127
132
|
profile: null,
|
|
@@ -184,12 +189,15 @@ export async function setInferenceProfileSession({
|
|
|
184
189
|
newExpiresAt ?? null,
|
|
185
190
|
);
|
|
186
191
|
|
|
187
|
-
publishConversationInferenceProfileChanged(
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
192
|
+
publishConversationInferenceProfileChanged(
|
|
193
|
+
{
|
|
194
|
+
conversationId: resolvedId,
|
|
195
|
+
profile,
|
|
196
|
+
sessionId: newSessionId ?? null,
|
|
197
|
+
expiresAt: newExpiresAt ?? null,
|
|
198
|
+
},
|
|
199
|
+
originClientId,
|
|
200
|
+
);
|
|
193
201
|
|
|
194
202
|
return {
|
|
195
203
|
conversationId: resolvedId,
|
|
@@ -218,6 +226,7 @@ export async function setInferenceProfileSession({
|
|
|
218
226
|
*/
|
|
219
227
|
export async function closeInferenceProfileSession(
|
|
220
228
|
conversationId: string,
|
|
229
|
+
originClientId?: string,
|
|
221
230
|
): Promise<{
|
|
222
231
|
conversationId: string;
|
|
223
232
|
closed: { profile: string | null; sessionId: string | null } | null;
|
|
@@ -241,6 +250,7 @@ export async function closeInferenceProfileSession(
|
|
|
241
250
|
const result = await setInferenceProfileSession({
|
|
242
251
|
conversationId: resolvedId,
|
|
243
252
|
profile: null,
|
|
253
|
+
originClientId,
|
|
244
254
|
});
|
|
245
255
|
return {
|
|
246
256
|
conversationId: result.conversationId,
|
|
@@ -22,6 +22,7 @@ import type { RouteDefinition, RouteHandlerArgs } from "./types.js";
|
|
|
22
22
|
|
|
23
23
|
async function handleOpenInferenceProfileSession({
|
|
24
24
|
body = {},
|
|
25
|
+
headers,
|
|
25
26
|
}: RouteHandlerArgs) {
|
|
26
27
|
if (body.profile == null || typeof body.profile !== "string") {
|
|
27
28
|
throw new BadRequestError("profile must be a non-empty string");
|
|
@@ -31,13 +32,18 @@ async function handleOpenInferenceProfileSession({
|
|
|
31
32
|
profile: body.profile,
|
|
32
33
|
ttlSeconds: body.ttlSeconds as number | null | undefined,
|
|
33
34
|
sessionId: body.sessionId as string | undefined,
|
|
35
|
+
originClientId: headers?.["x-vellum-client-id"]?.trim() || undefined,
|
|
34
36
|
});
|
|
35
37
|
}
|
|
36
38
|
|
|
37
39
|
async function handleCloseInferenceProfileSession({
|
|
38
40
|
body = {},
|
|
41
|
+
headers,
|
|
39
42
|
}: RouteHandlerArgs) {
|
|
40
|
-
return closeInferenceProfileSession(
|
|
43
|
+
return closeInferenceProfileSession(
|
|
44
|
+
body.conversationId as string,
|
|
45
|
+
headers?.["x-vellum-client-id"]?.trim() || undefined,
|
|
46
|
+
);
|
|
41
47
|
}
|
|
42
48
|
|
|
43
49
|
function handleListInferenceProfileSessions({
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* GET /v1/inference/provider-connections — list all connections (optional ?provider= filter)
|
|
5
5
|
* GET /v1/inference/provider-connections/:name — single connection by name
|
|
6
6
|
* POST /v1/inference/provider-connections — create a new connection
|
|
7
|
-
* PATCH /v1/inference/provider-connections/:name — update auth/label
|
|
7
|
+
* PATCH /v1/inference/provider-connections/:name — update auth/label (cannot rename or change provider; auth is locked to platform for managed connections)
|
|
8
8
|
* DELETE /v1/inference/provider-connections/:name — delete (rejects if profiles or call sites reference it; rejects outright for managed connections)
|
|
9
9
|
*/
|
|
10
10
|
|
|
@@ -18,7 +18,6 @@ import {
|
|
|
18
18
|
type ConnectionModel,
|
|
19
19
|
ConnectionModelSchema,
|
|
20
20
|
ConnectionProviderSchema,
|
|
21
|
-
ConnectionStatusSchema,
|
|
22
21
|
ProviderConnectionSchema,
|
|
23
22
|
VALID_CONNECTION_PROVIDERS,
|
|
24
23
|
} from "../../providers/inference/auth.js";
|
|
@@ -223,14 +222,6 @@ async function handleCreateConnection({ body = {} }: RouteHandlerArgs) {
|
|
|
223
222
|
throw new BadRequestError(`Invalid auth: ${authResult.error.message}`);
|
|
224
223
|
}
|
|
225
224
|
|
|
226
|
-
const statusResult =
|
|
227
|
-
body.status !== undefined
|
|
228
|
-
? ConnectionStatusSchema.safeParse(body.status)
|
|
229
|
-
: null;
|
|
230
|
-
if (statusResult && !statusResult.success) {
|
|
231
|
-
throw new BadRequestError(`Invalid status: must be "active" or "disabled"`);
|
|
232
|
-
}
|
|
233
|
-
|
|
234
225
|
const labelRaw = body.label;
|
|
235
226
|
if (
|
|
236
227
|
labelRaw !== undefined &&
|
|
@@ -248,7 +239,6 @@ async function handleCreateConnection({ body = {} }: RouteHandlerArgs) {
|
|
|
248
239
|
name,
|
|
249
240
|
provider: providerResult.data,
|
|
250
241
|
auth: authResult.data,
|
|
251
|
-
...(statusResult ? { status: statusResult.data } : {}),
|
|
252
242
|
...(labelRaw !== undefined ? { label: labelRaw as string | null } : {}),
|
|
253
243
|
...customFields,
|
|
254
244
|
});
|
|
@@ -302,14 +292,6 @@ async function handleUpdateConnection({
|
|
|
302
292
|
throw new BadRequestError(`Invalid auth: ${authResult.error.message}`);
|
|
303
293
|
}
|
|
304
294
|
|
|
305
|
-
const statusResult =
|
|
306
|
-
body.status !== undefined
|
|
307
|
-
? ConnectionStatusSchema.safeParse(body.status)
|
|
308
|
-
: null;
|
|
309
|
-
if (statusResult && !statusResult.success) {
|
|
310
|
-
throw new BadRequestError(`Invalid status: must be "active" or "disabled"`);
|
|
311
|
-
}
|
|
312
|
-
|
|
313
295
|
const labelRaw = body.label;
|
|
314
296
|
if (
|
|
315
297
|
labelRaw !== undefined &&
|
|
@@ -323,8 +305,8 @@ async function handleUpdateConnection({
|
|
|
323
305
|
|
|
324
306
|
// Managed connections: lock auth to `{type:"platform"}`. The boot upsert in
|
|
325
307
|
// `seedCanonicalConnections` would revert any other value on next restart;
|
|
326
|
-
// reject the write here so the surprise loop never happens. Label
|
|
327
|
-
//
|
|
308
|
+
// reject the write here so the surprise loop never happens. Label remains
|
|
309
|
+
// user-editable (the boot upsert leaves it alone).
|
|
328
310
|
if (
|
|
329
311
|
MANAGED_CONNECTION_NAMES.has(name) &&
|
|
330
312
|
authResult.data.type !== "platform"
|
|
@@ -338,7 +320,6 @@ async function handleUpdateConnection({
|
|
|
338
320
|
|
|
339
321
|
const result = updateConnection(getDb(), name, {
|
|
340
322
|
auth: authResult.data,
|
|
341
|
-
...(statusResult ? { status: statusResult.data } : {}),
|
|
342
323
|
...(labelRaw !== undefined ? { label: labelRaw as string | null } : {}),
|
|
343
324
|
...customFields,
|
|
344
325
|
});
|
|
@@ -387,7 +368,7 @@ function handleDeleteConnection({ pathParams = {} }: RouteHandlerArgs) {
|
|
|
387
368
|
// re-overlaid by `seed-inference-profiles.ts` on boot).
|
|
388
369
|
if (MANAGED_CONNECTION_NAMES.has(name)) {
|
|
389
370
|
throw new BadRequestError(
|
|
390
|
-
`Cannot delete managed connection "${name}". This is a Vellum-managed connection
|
|
371
|
+
`Cannot delete managed connection "${name}". This is a Vellum-managed connection that is re-seeded on every startup.`,
|
|
391
372
|
);
|
|
392
373
|
}
|
|
393
374
|
|
|
@@ -485,7 +466,6 @@ export const ROUTES: RouteDefinition[] = [
|
|
|
485
466
|
provider: ConnectionProviderSchema,
|
|
486
467
|
auth: AuthSchema,
|
|
487
468
|
label: z.string().min(1).optional(),
|
|
488
|
-
status: ConnectionStatusSchema.optional(),
|
|
489
469
|
base_url: z.string().url().nullable().optional(),
|
|
490
470
|
models: z.array(ConnectionModelSchema).nullable().optional(),
|
|
491
471
|
}),
|
|
@@ -504,12 +484,11 @@ export const ROUTES: RouteDefinition[] = [
|
|
|
504
484
|
policyKey: "inference/provider-connections/detail",
|
|
505
485
|
summary: "Update a provider connection",
|
|
506
486
|
description:
|
|
507
|
-
"Update an existing connection. Cannot rename or change the provider. For managed connections (anthropic-managed, openai-managed, gemini-managed) the auth is locked to platform; label
|
|
487
|
+
"Update an existing connection. Cannot rename or change the provider. For managed connections (anthropic-managed, openai-managed, gemini-managed) the auth is locked to platform; label remains editable.",
|
|
508
488
|
tags: ["inference"],
|
|
509
489
|
pathParams: [{ name: "name", description: "Connection name" }],
|
|
510
490
|
requestBody: z.object({
|
|
511
491
|
auth: AuthSchema,
|
|
512
|
-
status: ConnectionStatusSchema.optional(),
|
|
513
492
|
label: z.string().min(1).nullable().optional(),
|
|
514
493
|
base_url: z.string().url().nullable().optional(),
|
|
515
494
|
models: z.array(ConnectionModelSchema).nullable().optional(),
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
* ("set" or "delete") rather than using HTTP verbs directly.
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
+
import { z } from "zod";
|
|
13
|
+
|
|
12
14
|
import {
|
|
13
15
|
deleteVercelConfig,
|
|
14
16
|
getVercelConfig,
|
|
@@ -17,6 +19,12 @@ import {
|
|
|
17
19
|
import { BadRequestError } from "../errors.js";
|
|
18
20
|
import type { RouteDefinition, RouteHandlerArgs } from "../types.js";
|
|
19
21
|
|
|
22
|
+
const vercelConfigResponseSchema = z.object({
|
|
23
|
+
hasToken: z.boolean(),
|
|
24
|
+
success: z.boolean(),
|
|
25
|
+
error: z.string().optional(),
|
|
26
|
+
});
|
|
27
|
+
|
|
20
28
|
// ---------------------------------------------------------------------------
|
|
21
29
|
// Handlers
|
|
22
30
|
// ---------------------------------------------------------------------------
|
|
@@ -66,6 +74,7 @@ export const ROUTES: RouteDefinition[] = [
|
|
|
66
74
|
description: "Check if a Vercel API token is stored.",
|
|
67
75
|
tags: ["integrations"],
|
|
68
76
|
requirePolicyEnforcement: true,
|
|
77
|
+
responseBody: vercelConfigResponseSchema,
|
|
69
78
|
handler: () => handleGetVercelConfig(),
|
|
70
79
|
},
|
|
71
80
|
{
|
|
@@ -77,6 +86,11 @@ export const ROUTES: RouteDefinition[] = [
|
|
|
77
86
|
"Set or delete the Vercel API token. Action is determined by the body action field.",
|
|
78
87
|
tags: ["integrations"],
|
|
79
88
|
requirePolicyEnforcement: true,
|
|
89
|
+
requestBody: z.object({
|
|
90
|
+
action: z.enum(["get", "set", "delete"]).optional(),
|
|
91
|
+
apiToken: z.string().optional(),
|
|
92
|
+
}),
|
|
93
|
+
responseBody: vercelConfigResponseSchema,
|
|
80
94
|
handler: handlePostVercelConfig,
|
|
81
95
|
},
|
|
82
96
|
{
|
|
@@ -87,6 +101,7 @@ export const ROUTES: RouteDefinition[] = [
|
|
|
87
101
|
description: "Delete the stored Vercel API token.",
|
|
88
102
|
tags: ["integrations"],
|
|
89
103
|
requirePolicyEnforcement: true,
|
|
104
|
+
responseBody: vercelConfigResponseSchema,
|
|
90
105
|
handler: () => handleDeleteVercelConfig(),
|
|
91
106
|
},
|
|
92
107
|
];
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { resolveDefaultProfileKey } from "../../config/llm-resolver.js";
|
|
2
2
|
import { loadConfig } from "../../config/loader.js";
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
CALL_SITE_CATALOG,
|
|
5
|
+
CALL_SITE_DOMAINS,
|
|
6
|
+
} from "../../config/schemas/call-site-catalog.js";
|
|
4
7
|
import type { LLMCallSite } from "../../config/schemas/llm.js";
|
|
5
8
|
import type { RouteDefinition } from "./types.js";
|
|
6
9
|
|
|
@@ -10,14 +13,28 @@ async function handleGetCallSites() {
|
|
|
10
13
|
domains: CALL_SITE_DOMAINS,
|
|
11
14
|
callSites: CALL_SITE_CATALOG.map((entry) => ({
|
|
12
15
|
...entry,
|
|
13
|
-
defaultProfile: resolveDefaultProfileKey(
|
|
14
|
-
entry.id as LLMCallSite,
|
|
15
|
-
llm,
|
|
16
|
-
),
|
|
16
|
+
defaultProfile: resolveDefaultProfileKey(entry.id as LLMCallSite, llm),
|
|
17
17
|
})),
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
export interface LlmProfilesListResult {
|
|
22
|
+
/** Sorted list of profile names defined in `llm.profiles`. */
|
|
23
|
+
profiles: string[];
|
|
24
|
+
/** The workspace-wide active profile name, if one is set. */
|
|
25
|
+
activeProfile: string | null;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
async function handleListProfiles(): Promise<LlmProfilesListResult> {
|
|
29
|
+
const { llm } = loadConfig();
|
|
30
|
+
const profiles = llm?.profiles ?? {};
|
|
31
|
+
return {
|
|
32
|
+
profiles: Object.keys(profiles).sort(),
|
|
33
|
+
activeProfile:
|
|
34
|
+
typeof llm?.activeProfile === "string" ? llm.activeProfile : null,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
21
38
|
export const ROUTES: RouteDefinition[] = [
|
|
22
39
|
{
|
|
23
40
|
operationId: "llm_call_sites_list",
|
|
@@ -29,4 +46,14 @@ export const ROUTES: RouteDefinition[] = [
|
|
|
29
46
|
"Returns the full catalog of LLM call sites with display names, descriptions, and domain groupings. Used by clients to render the per-call-site override settings UI.",
|
|
30
47
|
tags: ["config"],
|
|
31
48
|
},
|
|
49
|
+
{
|
|
50
|
+
operationId: "llm_profiles_list",
|
|
51
|
+
method: "GET",
|
|
52
|
+
endpoint: "config/llm/profiles",
|
|
53
|
+
handler: handleListProfiles,
|
|
54
|
+
summary: "List defined LLM profiles",
|
|
55
|
+
description:
|
|
56
|
+
"Returns the sorted list of profile names defined in `llm.profiles` plus the workspace-wide active profile. Used to populate per-call profile dropdowns (e.g. memory router playground) without requiring the caller to type profile names.",
|
|
57
|
+
tags: ["config"],
|
|
58
|
+
},
|
|
32
59
|
];
|
|
@@ -1057,8 +1057,13 @@ function extractOpenAiResponsesRequestToolNames(tools: unknown): string[] {
|
|
|
1057
1057
|
if (asString(tool.type) === "function" && asString(tool.name)) {
|
|
1058
1058
|
return asString(tool.name);
|
|
1059
1059
|
}
|
|
1060
|
-
// Native web search
|
|
1061
|
-
|
|
1060
|
+
// Native web search tools:
|
|
1061
|
+
// - OpenAI API: { type: "web_search_preview" }
|
|
1062
|
+
// - Codex subscription endpoint: { type: "web_search" }
|
|
1063
|
+
if (
|
|
1064
|
+
asString(tool.type) === "web_search_preview" ||
|
|
1065
|
+
asString(tool.type) === "web_search"
|
|
1066
|
+
) {
|
|
1062
1067
|
return "web_search";
|
|
1063
1068
|
}
|
|
1064
1069
|
return undefined;
|
|
@@ -44,7 +44,10 @@ import type {
|
|
|
44
44
|
MemoryType,
|
|
45
45
|
NewNode,
|
|
46
46
|
} from "../../memory/graph/types.js";
|
|
47
|
-
import {
|
|
47
|
+
import {
|
|
48
|
+
enqueueMemoryJob,
|
|
49
|
+
isMemoryEnabled,
|
|
50
|
+
} from "../../memory/jobs-store.js";
|
|
48
51
|
import { withQdrantBreaker } from "../../memory/qdrant-circuit-breaker.js";
|
|
49
52
|
import { getQdrantClient } from "../../memory/qdrant-client.js";
|
|
50
53
|
import { memoryGraphNodes } from "../../memory/schema.js";
|
|
@@ -525,7 +528,9 @@ async function handleCreateMemoryItem(body: Record<string, unknown>) {
|
|
|
525
528
|
};
|
|
526
529
|
|
|
527
530
|
const created = createNode(newNode);
|
|
528
|
-
|
|
531
|
+
if (isMemoryEnabled()) {
|
|
532
|
+
enqueueMemoryJob("embed_graph_node", { nodeId: created.id });
|
|
533
|
+
}
|
|
529
534
|
|
|
530
535
|
return { item: nodeToPayload(created) };
|
|
531
536
|
}
|
|
@@ -619,7 +624,7 @@ async function handleUpdateMemoryItem(
|
|
|
619
624
|
|
|
620
625
|
updateNode(id, changes);
|
|
621
626
|
|
|
622
|
-
if (contentChanged) {
|
|
627
|
+
if (contentChanged && isMemoryEnabled()) {
|
|
623
628
|
enqueueMemoryJob("embed_graph_node", { nodeId: id });
|
|
624
629
|
}
|
|
625
630
|
|