@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.
Files changed (802) hide show
  1. package/AGENTS.md +33 -1
  2. package/ARCHITECTURE.md +3 -3
  3. package/bunfig.toml +6 -1
  4. package/docs/browser-use-architecture-phase2.md +1 -1
  5. package/docs/credential-execution-service.md +6 -6
  6. package/docs/plugins.md +4 -3
  7. package/knip.json +2 -1
  8. package/node_modules/@vellumai/skill-host-contracts/src/client.ts +12 -13
  9. package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +4 -1
  10. package/node_modules/@vellumai/skill-host-contracts/src/tool-types.ts +16 -14
  11. package/openapi.yaml +2748 -216
  12. package/package.json +1 -1
  13. package/src/__tests__/actor-token-service.test.ts +3 -2
  14. package/src/__tests__/agent-loop-exit-reason.test.ts +102 -9
  15. package/src/__tests__/agent-loop-override-profile.test.ts +2 -1
  16. package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +1 -0
  17. package/src/__tests__/agent-wake-override-profile.test.ts +1 -0
  18. package/src/__tests__/always-loaded-tools-guard.test.ts +2 -2
  19. package/src/__tests__/annotate-risk-options.test.ts +1 -0
  20. package/src/__tests__/anthropic-provider.test.ts +34 -37
  21. package/src/__tests__/approval-cascade.test.ts +1 -0
  22. package/src/__tests__/approval-routes-http.test.ts +9 -13
  23. package/src/__tests__/assert-not-live-db.ts +79 -0
  24. package/src/__tests__/assistant-event-hub-self-exclusion.test.ts +293 -0
  25. package/src/__tests__/assistant-feature-flags-integration.test.ts +12 -28
  26. package/src/__tests__/audit-log-rotation.test.ts +72 -18
  27. package/src/__tests__/auto-analysis-end-to-end.test.ts +6 -6
  28. package/src/__tests__/background-workers-disk-pressure.test.ts +8 -11
  29. package/src/__tests__/browser-skill-endstate.test.ts +3 -3
  30. package/src/__tests__/btw-routes.test.ts +5 -5
  31. package/src/__tests__/call-controller.test.ts +3 -3
  32. package/src/__tests__/cancel-resolves-conversation-key.test.ts +1 -1
  33. package/src/__tests__/channel-approval-routes.test.ts +3 -2
  34. package/src/__tests__/channel-guardian.test.ts +6 -5
  35. package/src/__tests__/channel-readiness-slack-remote.test.ts +175 -0
  36. package/src/__tests__/channel-reply-delivery.test.ts +35 -0
  37. package/src/__tests__/channel-retry-sweep.test.ts +320 -3
  38. package/src/__tests__/checker.test.ts +18 -27
  39. package/src/__tests__/compaction-events.test.ts +2 -0
  40. package/src/__tests__/compaction-trail-store.test.ts +264 -0
  41. package/src/__tests__/compactor-call-site-logging.test.ts +215 -0
  42. package/src/__tests__/compactor-preserved-tail-count.test.ts +1 -0
  43. package/src/__tests__/computer-use-skill-manifest-regression.test.ts +12 -16
  44. package/src/__tests__/computer-use-tools.test.ts +14 -18
  45. package/src/__tests__/config-loader-backfill.test.ts +13 -28
  46. package/src/__tests__/config-loader-corrupt.test.ts +5 -5
  47. package/src/__tests__/config-loader-platform-defaults.test.ts +93 -26
  48. package/src/__tests__/config-loader-quarantine-bulletin.test.ts +3 -3
  49. package/src/__tests__/config-managed-gemini-defaults.test.ts +3 -4
  50. package/src/__tests__/config-schema.test.ts +10 -10
  51. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
  52. package/src/__tests__/connection-model-compat.test.ts +83 -0
  53. package/src/__tests__/contacts-tools.test.ts +3 -2
  54. package/src/__tests__/context-token-estimator.test.ts +22 -0
  55. package/src/__tests__/conversation-abort-tool-results.test.ts +5 -0
  56. package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +2 -1
  57. package/src/__tests__/conversation-agent-loop-handlers-max-tokens.test.ts +55 -0
  58. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +2 -1
  59. package/src/__tests__/conversation-agent-loop-overflow.test.ts +231 -2
  60. package/src/__tests__/conversation-agent-loop.test.ts +581 -54
  61. package/src/__tests__/conversation-analysis-routes.test.ts +1 -0
  62. package/src/__tests__/conversation-app-control-instantiation.test.ts +31 -24
  63. package/src/__tests__/conversation-app-control-lifecycle.test.ts +1 -0
  64. package/src/__tests__/conversation-attention-store.test.ts +101 -0
  65. package/src/__tests__/conversation-attention-telegram.test.ts +3 -2
  66. package/src/__tests__/conversation-clear-safety.test.ts +25 -25
  67. package/src/__tests__/conversation-confirmation-signals.test.ts +1 -0
  68. package/src/__tests__/conversation-delete-schedule-cleanup.test.ts +1 -1
  69. package/src/__tests__/conversation-disk-view-integration.test.ts +2 -2
  70. package/src/__tests__/conversation-error.test.ts +61 -0
  71. package/src/__tests__/conversation-fork-crud.test.ts +239 -15
  72. package/src/__tests__/conversation-fork-route.test.ts +3 -2
  73. package/src/__tests__/conversation-history-web-search.test.ts +1 -0
  74. package/src/__tests__/conversation-inference-profile-list.test.ts +3 -2
  75. package/src/__tests__/conversation-inference-profile-route.test.ts +3 -2
  76. package/src/__tests__/conversation-lifecycle.test.ts +53 -11
  77. package/src/__tests__/conversation-list-source.test.ts +3 -2
  78. package/src/__tests__/conversation-load-history-repair.test.ts +2 -1
  79. package/src/__tests__/{conversation-load-cleaned-at.test.ts → conversation-load-history-stripped.test.ts} +14 -13
  80. package/src/__tests__/conversation-pairing.test.ts +53 -0
  81. package/src/__tests__/conversation-process-app-control-preactivation.test.ts +26 -7
  82. package/src/__tests__/conversation-process-callsite.test.ts +1 -0
  83. package/src/__tests__/conversation-provider-retry-repair.test.ts +6 -0
  84. package/src/__tests__/conversation-queue.test.ts +333 -291
  85. package/src/__tests__/conversation-routes-disk-view.test.ts +112 -18
  86. package/src/__tests__/conversation-routes-guardian-reply.test.ts +33 -8
  87. package/src/__tests__/conversation-routes-slash-commands.test.ts +68 -2
  88. package/src/__tests__/conversation-runtime-assembly.test.ts +78 -0
  89. package/src/__tests__/conversation-skill-tools.test.ts +40 -147
  90. package/src/__tests__/conversation-slash-queue.test.ts +84 -32
  91. package/src/__tests__/conversation-slash-unknown.test.ts +5 -0
  92. package/src/__tests__/conversation-speed-override.test.ts +1 -0
  93. package/src/__tests__/conversation-store.test.ts +1 -1
  94. package/src/__tests__/conversation-surfaces-action-delivery.test.ts +46 -0
  95. package/src/__tests__/conversation-surfaces-data-persist.test.ts +1 -0
  96. package/src/__tests__/conversation-surfaces-standalone-payloads.test.ts +6 -3
  97. package/src/__tests__/conversation-surfaces-standalone.test.ts +6 -3
  98. package/src/__tests__/conversation-surfaces-state-update.test.ts +3 -3
  99. package/src/__tests__/conversation-surfaces-table-action.test.ts +7 -17
  100. package/src/__tests__/conversation-sync-tags.test.ts +218 -35
  101. package/src/__tests__/conversation-title-service.test.ts +1 -0
  102. package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +30 -0
  103. package/src/__tests__/conversation-usage.test.ts +1 -0
  104. package/src/__tests__/conversation-workspace-cache-state.test.ts +2 -0
  105. package/src/__tests__/conversation-workspace-injection.test.ts +6 -1
  106. package/src/__tests__/conversation-workspace-tool-tracking.test.ts +6 -1
  107. package/src/__tests__/credential-broker-browser-fill.test.ts +3 -3
  108. package/src/__tests__/credential-broker-server-use.test.ts +5 -5
  109. package/src/__tests__/credential-execution-client.test.ts +72 -1
  110. package/src/__tests__/credential-execution-feature-gates.test.ts +19 -19
  111. package/src/__tests__/credential-execution-tools.test.ts +6 -6
  112. package/src/__tests__/credential-health-service.test.ts +252 -3
  113. package/src/__tests__/credential-security-invariants.test.ts +6 -5
  114. package/src/__tests__/credential-vault-unit.test.ts +21 -21
  115. package/src/__tests__/credential-vault.test.ts +5 -5
  116. package/src/__tests__/cross-provider-web-search.test.ts +56 -2
  117. package/src/__tests__/db-connection-isolation.test.ts +7 -6
  118. package/src/__tests__/db-conversation-fork-lineage-migration.test.ts +8 -10
  119. package/src/__tests__/db-conversation-inference-profile-migration.test.ts +7 -10
  120. package/src/__tests__/db-llm-request-log-provider-migration.test.ts +9 -15
  121. package/src/__tests__/db-test-helpers.ts +58 -0
  122. package/src/__tests__/disk-pressure-guard.test.ts +58 -41
  123. package/src/__tests__/disk-pressure-lifecycle.test.ts +13 -10
  124. package/src/__tests__/disk-pressure-routes.test.ts +0 -33
  125. package/src/__tests__/disk-pressure-tools.test.ts +0 -4
  126. package/src/__tests__/dm-persistence.test.ts +26 -40
  127. package/src/__tests__/document-create-dedupe.test.ts +189 -0
  128. package/src/__tests__/document-find-replace.test.ts +3 -2
  129. package/src/__tests__/document-tool-security.test.ts +81 -2
  130. package/src/__tests__/dynamic-page-surface.test.ts +2 -2
  131. package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +5 -4
  132. package/src/__tests__/email-html-renderer.test.ts +12 -0
  133. package/src/__tests__/encrypted-store-test-helpers.ts +56 -0
  134. package/src/__tests__/encrypted-store.test.ts +11 -9
  135. package/src/__tests__/feature-flag-test-helpers.ts +53 -0
  136. package/src/__tests__/filing-service.test.ts +1 -0
  137. package/src/__tests__/first-greeting.test.ts +62 -12
  138. package/src/__tests__/gateway-flag-listener.test.ts +236 -0
  139. package/src/__tests__/gemini-provider.test.ts +104 -0
  140. package/src/__tests__/guardian-action-sweep.test.ts +3 -2
  141. package/src/__tests__/guardian-dispatch.test.ts +0 -1
  142. package/src/__tests__/guardian-outbound-http.test.ts +10 -7
  143. package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +48 -3
  144. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +2 -1
  145. package/src/__tests__/heartbeat-disk-pressure.test.ts +5 -0
  146. package/src/__tests__/heartbeat-service.test.ts +5 -0
  147. package/src/__tests__/helpers/mock-logger.ts +26 -0
  148. package/src/__tests__/host-bash-routes.test.ts +1 -0
  149. package/src/__tests__/host-cu-routes-targeted.test.ts +1 -0
  150. package/src/__tests__/host-file-routes-targeted.test.ts +1 -0
  151. package/src/__tests__/host-shell-tool.test.ts +6 -5
  152. package/src/__tests__/host-transfer-routes-targeted.test.ts +1 -0
  153. package/src/__tests__/http-conversation-lineage.test.ts +3 -2
  154. package/src/__tests__/http-user-message-parity.test.ts +29 -7
  155. package/src/__tests__/identity-intro-cache.test.ts +133 -22
  156. package/src/__tests__/inbound-slack-persistence.test.ts +44 -72
  157. package/src/__tests__/inference-profile-reaper.test.ts +3 -2
  158. package/src/__tests__/inference-profile-session-ipc.test.ts +3 -2
  159. package/src/__tests__/init-feature-flag-overrides.test.ts +5 -6
  160. package/src/__tests__/injector-disk-pressure.test.ts +3 -17
  161. package/src/__tests__/inline-skill-load-permissions.test.ts +4 -4
  162. package/src/__tests__/list-messages-hidden-metadata.test.ts +80 -0
  163. package/src/__tests__/list-messages-tool-merge.test.ts +70 -11
  164. package/src/__tests__/llm-context-normalization.test.ts +42 -0
  165. package/src/__tests__/llm-request-log-call-site.test.ts +136 -0
  166. package/src/__tests__/llm-request-log-source-clickhouse.test.ts +26 -0
  167. package/src/__tests__/llm-resolver.test.ts +408 -9
  168. package/src/__tests__/llm-schema.test.ts +1 -1
  169. package/src/__tests__/llm-usage-store.test.ts +66 -0
  170. package/src/__tests__/logger.test.ts +89 -0
  171. package/src/__tests__/manual-token-reconciliation.test.ts +76 -1
  172. package/src/__tests__/mcp-abort-signal.test.ts +16 -2
  173. package/src/__tests__/mcp-client-auth.test.ts +14 -0
  174. package/src/__tests__/media-generate-image.test.ts +31 -0
  175. package/src/__tests__/memory-v2-static-injector.test.ts +7 -7
  176. package/src/__tests__/messaging-send-tool.test.ts +1 -0
  177. package/src/__tests__/migration-import-from-url.test.ts +3 -3
  178. package/src/__tests__/mock-gateway-ipc.ts +18 -2
  179. package/src/__tests__/model-intents.test.ts +4 -6
  180. package/src/__tests__/native-web-search.test.ts +30 -2
  181. package/src/__tests__/notification-deep-link.test.ts +62 -0
  182. package/src/__tests__/notification-guardian-path.test.ts +0 -1
  183. package/src/__tests__/oauth-commands-routes.test.ts +37 -0
  184. package/src/__tests__/oauth-provider-visibility.test.ts +8 -8
  185. package/src/__tests__/oauth-store.test.ts +3 -2
  186. package/src/__tests__/onboarding-template-contract.test.ts +4 -3
  187. package/src/__tests__/openai-provider.test.ts +54 -9
  188. package/src/__tests__/openai-responses-provider.test.ts +176 -14
  189. package/src/__tests__/openrouter-provider-only.test.ts +27 -5
  190. package/src/__tests__/outbound-slack-persistence.test.ts +46 -1
  191. package/src/__tests__/pending-interactions-resolved-event.test.ts +0 -1
  192. package/src/__tests__/persistence-pipeline.test.ts +139 -1
  193. package/src/__tests__/persistence-secret-redaction.test.ts +83 -12
  194. package/src/__tests__/platform-bash-auto-approve.test.ts +2 -2
  195. package/src/__tests__/platform.test.ts +2 -2
  196. package/src/__tests__/plugin-api-tool-definition.test.ts +92 -0
  197. package/src/__tests__/plugin-bootstrap.test.ts +11 -13
  198. package/src/__tests__/plugin-tool-contribution.test.ts +50 -40
  199. package/src/__tests__/plugin-types.test.ts +3 -2
  200. package/src/__tests__/prechat-onboarding-contract.test.ts +131 -98
  201. package/src/__tests__/pricing.test.ts +12 -0
  202. package/src/__tests__/process-message-background-slack.test.ts +21 -16
  203. package/src/__tests__/process-message-display-content.test.ts +19 -22
  204. package/src/__tests__/provider-catalog-visibility.test.ts +9 -9
  205. package/src/__tests__/provider-platform-proxy-integration.test.ts +216 -4
  206. package/src/__tests__/provider-registry-ollama.test.ts +45 -22
  207. package/src/__tests__/prune-jobs-changes-parser.test.ts +61 -0
  208. package/src/__tests__/recording-handler.test.ts +1 -0
  209. package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +1 -0
  210. package/src/__tests__/registry.test.ts +84 -84
  211. package/src/__tests__/relay-server.test.ts +10 -10
  212. package/src/__tests__/require-fresh-approval.test.ts +2 -2
  213. package/src/__tests__/runtime-attachment-metadata.test.ts +3 -2
  214. package/src/__tests__/runtime-events-sse-bilingual.test.ts +154 -0
  215. package/src/__tests__/schedule-store.test.ts +16 -1
  216. package/src/__tests__/scheduler-reuse-conversation.test.ts +48 -3
  217. package/src/__tests__/secret-ingress-http.test.ts +5 -1
  218. package/src/__tests__/secure-keys.test.ts +3 -3
  219. package/src/__tests__/send-endpoint-busy.test.ts +81 -42
  220. package/src/__tests__/server-history-render.test.ts +4 -1
  221. package/src/__tests__/shell-tool-proxy-mode.test.ts +1 -1
  222. package/src/__tests__/skill-feature-flags-integration.test.ts +8 -10
  223. package/src/__tests__/skill-feature-flags.test.ts +16 -18
  224. package/src/__tests__/skill-load-feature-flag.test.ts +5 -5
  225. package/src/__tests__/skill-projection-feature-flag.test.ts +48 -37
  226. package/src/__tests__/skill-projection.benchmark.test.ts +7 -13
  227. package/src/__tests__/skill-tool-factory.test.ts +97 -96
  228. package/src/__tests__/slack-channel-config.test.ts +3 -3
  229. package/src/__tests__/subagent-call-site-routing.test.ts +11 -3
  230. package/src/__tests__/subagent-disposal.test.ts +27 -8
  231. package/src/__tests__/subagent-fork-notifications.test.ts +24 -9
  232. package/src/__tests__/subagent-fork-spawn.test.ts +13 -4
  233. package/src/__tests__/subagent-manager-notify.test.ts +20 -8
  234. package/src/__tests__/subagent-notify-parent.test.ts +6 -5
  235. package/src/__tests__/subagent-spawn-tool-fork.test.ts +58 -0
  236. package/src/__tests__/subagent-tools.test.ts +2 -1
  237. package/src/__tests__/suggestion-routes.test.ts +2 -0
  238. package/src/__tests__/sync-message-contract.test.ts +59 -0
  239. package/src/__tests__/system-prompt.test.ts +183 -131
  240. package/src/__tests__/terminal-tools.test.ts +1 -1
  241. package/src/__tests__/test-preload-verifier.ts +68 -0
  242. package/src/__tests__/test-preload.ts +32 -39
  243. package/src/__tests__/tool-approval-handler.test.ts +1 -5
  244. package/src/__tests__/tool-execute-pipeline.test.ts +2 -2
  245. package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +2 -5
  246. package/src/__tests__/tool-executor-lifecycle-events.test.ts +35 -12
  247. package/src/__tests__/tool-executor.test.ts +64 -72
  248. package/src/__tests__/tool-grant-request-escalation.test.ts +1 -6
  249. package/src/__tests__/tool-preview-lifecycle.test.ts +1 -0
  250. package/src/__tests__/tool-result-metadata-plumbing.test.ts +1 -0
  251. package/src/__tests__/trusted-contact-approval-notifier.test.ts +0 -1
  252. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +1 -6
  253. package/src/__tests__/trusted-contact-multichannel.test.ts +0 -1
  254. package/src/__tests__/twilio-routes.test.ts +3 -2
  255. package/src/__tests__/ui-file-upload-surface.test.ts +2 -2
  256. package/src/__tests__/usage-routes.test.ts +3 -0
  257. package/src/__tests__/validate-input.test.ts +381 -0
  258. package/src/__tests__/verification-control-plane-policy.test.ts +3 -2
  259. package/src/__tests__/voice-scoped-grant-consumer.test.ts +2 -1
  260. package/src/__tests__/voice-session-bridge.test.ts +37 -28
  261. package/src/__tests__/workspace-git-service.test.ts +6 -5
  262. package/src/__tests__/workspace-migration-089-move-memory-tree-out-of-v3.test.ts +86 -0
  263. package/src/__tests__/workspace-migration-090-memory-router-cost-optimized-profile.test.ts +326 -0
  264. package/src/__tests__/workspace-migration-091-retighten-migration-onboarding-thread.test.ts +166 -0
  265. package/src/acp/__tests__/prepare-agent-env.test.ts +146 -0
  266. package/src/acp/prepare-agent-env.ts +78 -0
  267. package/src/acp/session-manager.ts +6 -7
  268. package/src/agent/loop.ts +88 -0
  269. package/src/api/README.md +127 -0
  270. package/src/api/constants/call-sites.ts +27 -0
  271. package/src/api/events/assistant-outbound-attachment.ts +51 -0
  272. package/src/api/events/assistant-text-delta.ts +32 -0
  273. package/src/api/events/assistant-turn-start.ts +33 -0
  274. package/src/api/events/document-comment-created.ts +48 -0
  275. package/src/api/events/document-comment-deleted.ts +24 -0
  276. package/src/api/events/document-comment-reopened.ts +25 -0
  277. package/src/api/events/document-comment-resolved.ts +27 -0
  278. package/src/api/events/generation-cancelled.ts +24 -0
  279. package/src/api/events/generation-handoff.ts +41 -0
  280. package/src/api/events/message-complete.ts +42 -0
  281. package/src/api/events/open-url.ts +30 -0
  282. package/src/api/events/relationship-state-updated.ts +25 -0
  283. package/src/api/events/tool-use-start.ts +32 -0
  284. package/src/api/index.ts +129 -0
  285. package/src/api/package.json +10 -0
  286. package/src/api/responses/llm-context-response.ts +39 -0
  287. package/src/api/responses/llm-request-log-entry.ts +93 -0
  288. package/src/api/responses/memory-recall-log.ts +65 -0
  289. package/src/api/responses/memory-v2-activation-log.ts +78 -0
  290. package/src/background-wake/background-wake-routes.test.ts +868 -0
  291. package/src/background-wake/platform-client.test.ts +308 -0
  292. package/src/background-wake/platform-client.ts +167 -0
  293. package/src/background-wake/publisher.ts +91 -0
  294. package/src/background-wake/runtime-registry.ts +24 -0
  295. package/src/background-wake/wake-intent-hooks.test.ts +282 -0
  296. package/src/calls/guardian-dispatch.ts +1 -0
  297. package/src/calls/voice-session-bridge.ts +4 -4
  298. package/src/cli/commands/__tests__/browser.test.ts +23 -5
  299. package/src/cli/commands/__tests__/conversations-slack.test.ts +16 -0
  300. package/src/cli/commands/__tests__/domain-register.test.ts +110 -0
  301. package/src/cli/commands/__tests__/domain-status.test.ts +33 -33
  302. package/src/cli/commands/__tests__/inference-send.test.ts +108 -5
  303. package/src/cli/commands/__tests__/memory-v2-compare-render.test.ts +98 -0
  304. package/src/cli/commands/__tests__/memory-v2.test.ts +1 -0
  305. package/src/cli/commands/__tests__/memory-v3-render.test.ts +340 -0
  306. package/src/cli/commands/__tests__/notifications.test.ts +184 -40
  307. package/src/cli/commands/browser.ts +247 -0
  308. package/src/cli/commands/channels/__tests__/channels.test.ts +143 -0
  309. package/src/cli/commands/channels/index.ts +229 -0
  310. package/src/cli/commands/domain.ts +91 -41
  311. package/src/cli/commands/inference.ts +93 -40
  312. package/src/cli/commands/memory-v2-compare-render.ts +115 -0
  313. package/src/cli/commands/memory-v2.ts +176 -1
  314. package/src/cli/commands/memory-v3-render.ts +491 -0
  315. package/src/cli/commands/memory-v3.ts +567 -0
  316. package/src/cli/commands/notifications.ts +365 -55
  317. package/src/cli/lib/open-browser.ts +7 -2
  318. package/src/cli/program.ts +4 -0
  319. package/src/config/assistant-feature-flags.ts +39 -46
  320. package/src/config/bundled-skills/document-editor/SKILL.md +16 -3
  321. package/src/config/bundled-skills/document-editor/TOOLS.json +18 -0
  322. package/src/config/bundled-skills/document-editor/tools/document-open.ts +12 -0
  323. package/src/config/bundled-skills/image-studio/SKILL.md +4 -0
  324. package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +2 -2
  325. package/src/config/bundled-skills/media-processing/tools/ingest-media.ts +13 -8
  326. package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +10 -3
  327. package/src/config/bundled-skills/phone-calls/references/TRANSCRIPTS.md +16 -14
  328. package/src/config/bundled-skills/playbooks/tools/playbook-create.ts +7 -2
  329. package/src/config/bundled-skills/playbooks/tools/playbook-update.ts +7 -2
  330. package/src/config/bundled-skills/schedule/SKILL.md +1 -1
  331. package/src/config/bundled-skills/schedule/TOOLS.json +2 -2
  332. package/src/config/bundled-skills/settings/tools/open-system-settings.ts +1 -0
  333. package/src/config/bundled-tool-registry.ts +2 -0
  334. package/src/config/call-site-defaults.ts +8 -7
  335. package/src/config/feature-flag-cache.ts +86 -0
  336. package/src/config/feature-flag-registry.json +33 -17
  337. package/src/config/llm-context-resolution.ts +10 -1
  338. package/src/config/llm-resolver.ts +121 -15
  339. package/src/config/loader.ts +4 -5
  340. package/src/config/schemas/__tests__/memory-v2.test.ts +228 -1
  341. package/src/config/schemas/call-site-catalog.ts +21 -7
  342. package/src/config/schemas/heartbeat.ts +1 -1
  343. package/src/config/schemas/llm.ts +102 -2
  344. package/src/config/schemas/memory-v2.ts +272 -0
  345. package/src/config/schemas/memory.ts +2 -1
  346. package/src/config/schemas/services.ts +6 -2
  347. package/src/config/seed-inference-profiles.ts +36 -16
  348. package/src/context/compactor.ts +52 -0
  349. package/src/context/token-estimator.ts +10 -5
  350. package/src/conversations/__tests__/message-consolidation.test.ts +350 -0
  351. package/src/conversations/message-consolidation.ts +404 -0
  352. package/src/credential-execution/executable-discovery.ts +40 -0
  353. package/src/credential-execution/process-manager.ts +6 -2
  354. package/src/credential-health/credential-health-service.ts +125 -40
  355. package/src/daemon/__tests__/conversation-lifecycle-auto-analyze.test.ts +3 -6
  356. package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +13 -15
  357. package/src/daemon/__tests__/conversation-tool-setup-exclude.test.ts +2 -3
  358. package/src/daemon/__tests__/daemon-skill-host.test.ts +2 -0
  359. package/src/daemon/__tests__/meet-manifest-loader.test.ts +25 -12
  360. package/src/daemon/__tests__/native-web-search-metadata.test.ts +1 -0
  361. package/src/daemon/__tests__/switch-inference-profile-tool.test.ts +107 -0
  362. package/src/daemon/__tests__/web-search-status-text.test.ts +1 -0
  363. package/src/daemon/conversation-agent-loop-handlers.ts +390 -80
  364. package/src/daemon/conversation-agent-loop.ts +244 -90
  365. package/src/daemon/conversation-error.ts +64 -6
  366. package/src/daemon/conversation-lifecycle.ts +27 -22
  367. package/src/daemon/conversation-messaging.ts +84 -43
  368. package/src/daemon/conversation-process.ts +74 -37
  369. package/src/daemon/conversation-runtime-assembly.ts +38 -17
  370. package/src/daemon/conversation-skill-tools.ts +14 -30
  371. package/src/daemon/conversation-surfaces.ts +69 -34
  372. package/src/daemon/conversation-tool-setup.ts +77 -32
  373. package/src/daemon/conversation-usage.ts +2 -0
  374. package/src/daemon/conversation.ts +40 -75
  375. package/src/daemon/daemon-control.ts +1 -1
  376. package/src/daemon/daemon-skill-host.ts +9 -2
  377. package/src/daemon/disk-pressure-guard.ts +39 -29
  378. package/src/daemon/first-greeting.ts +31 -13
  379. package/src/daemon/handlers/config-model.test.ts +1 -0
  380. package/src/daemon/handlers/conversations.ts +11 -3
  381. package/src/daemon/handlers/shared.ts +6 -1
  382. package/src/daemon/host-browser-proxy.ts +5 -5
  383. package/src/daemon/host-cu-proxy.ts +4 -4
  384. package/src/daemon/host-file-proxy.ts +4 -4
  385. package/src/daemon/host-proxy-base.ts +4 -4
  386. package/src/daemon/host-transfer-proxy.ts +10 -10
  387. package/src/daemon/lifecycle.ts +29 -26
  388. package/src/daemon/mcp-reload-service.ts +1 -1
  389. package/src/daemon/meet-manifest-loader.ts +11 -24
  390. package/src/daemon/message-types/conversations.ts +22 -27
  391. package/src/daemon/message-types/document-comments.ts +8 -44
  392. package/src/daemon/message-types/home.ts +2 -14
  393. package/src/daemon/message-types/integrations.ts +2 -7
  394. package/src/daemon/message-types/messages.ts +25 -48
  395. package/src/daemon/message-types/subagents.ts +6 -0
  396. package/src/daemon/message-types/sync.ts +14 -0
  397. package/src/daemon/process-message.ts +9 -9
  398. package/src/daemon/providers-setup.ts +1 -1
  399. package/src/daemon/server.ts +16 -0
  400. package/src/daemon/shutdown-handlers.ts +24 -5
  401. package/src/daemon/switch-inference-profile-tool.ts +62 -0
  402. package/src/daemon/tool-setup-types.ts +7 -0
  403. package/src/daemon/wake-target-adapter.ts +10 -0
  404. package/src/documents/document-store.ts +38 -0
  405. package/src/export/__tests__/transcript-formatter.test.ts +1 -0
  406. package/src/heartbeat/__tests__/heartbeat-service.test.ts +30 -1
  407. package/src/heartbeat/heartbeat-service.ts +63 -0
  408. package/src/home/__tests__/feed-writer.test.ts +161 -0
  409. package/src/home/__tests__/post-connect-feed.test.ts +1 -0
  410. package/src/home/__tests__/suggested-prompts.test.ts +55 -59
  411. package/src/home/feed-writer.ts +146 -7
  412. package/src/home/home-greeting.ts +0 -9
  413. package/src/home/suggested-prompts.ts +27 -154
  414. package/src/ipc/__tests__/cli-ipc.test.ts +1 -0
  415. package/src/ipc/gateway-client.test.ts +4 -1
  416. package/src/ipc/gateway-flag-listener.ts +123 -0
  417. package/src/ipc/skill-routes/__tests__/memory.test.ts +1 -0
  418. package/src/ipc/skill-routes/__tests__/registries.test.ts +36 -7
  419. package/src/ipc/skill-routes/memory.ts +4 -3
  420. package/src/ipc/skill-routes/registries.ts +35 -40
  421. package/src/memory/__tests__/db-async-query.test.ts +165 -0
  422. package/src/memory/__tests__/db-maintenance.test.ts +115 -0
  423. package/src/memory/__tests__/jobs-store-enqueue-gate.test.ts +242 -0
  424. package/src/memory/__tests__/jobs-store-job-classes.test.ts +28 -1
  425. package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +26 -5
  426. package/src/memory/__tests__/memory-retrospective-enqueue.test.ts +1 -0
  427. package/src/memory/__tests__/memory-retrospective-job.test.ts +8 -0
  428. package/src/memory/__tests__/memory-retrospective-startup-cleanup.test.ts +1 -0
  429. package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +31 -0
  430. package/src/memory/auto-analysis-enqueue.ts +5 -1
  431. package/src/memory/conversation-attention-store.ts +17 -3
  432. package/src/memory/conversation-crud.ts +423 -182
  433. package/src/memory/conversation-starters-cadence.ts +3 -1
  434. package/src/memory/conversation-title-service.ts +19 -3
  435. package/src/memory/db-async-query.ts +214 -0
  436. package/src/memory/db-connection.ts +29 -19
  437. package/src/memory/db-init.ts +14 -0
  438. package/src/memory/db-maintenance.ts +30 -21
  439. package/src/memory/db-singleton.ts +77 -0
  440. package/src/memory/delivery-channels.ts +82 -0
  441. package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +2 -4
  442. package/src/memory/graph/bootstrap.ts +8 -1
  443. package/src/memory/graph/capability-seed.ts +7 -3
  444. package/src/memory/graph/conversation-graph-memory.ts +100 -17
  445. package/src/memory/graph/extraction.ts +1 -5
  446. package/src/memory/graph/graph-search.ts +7 -1
  447. package/src/memory/graph/retriever.test.ts +3 -3
  448. package/src/memory/indexer.ts +28 -18
  449. package/src/memory/job-handlers/cleanup.ts +76 -18
  450. package/src/memory/job-handlers/conversation-starters.ts +1 -4
  451. package/src/memory/job-handlers/embedding.test.ts +3 -2
  452. package/src/memory/jobs/__tests__/embed-concept-page.test.ts +5 -2
  453. package/src/memory/jobs/embed-pkb-file.ts +6 -1
  454. package/src/memory/jobs-store.ts +14 -0
  455. package/src/memory/jobs-worker.ts +66 -22
  456. package/src/memory/llm-request-log-source-clickhouse.ts +122 -2
  457. package/src/memory/llm-request-log-source-local.ts +31 -0
  458. package/src/memory/llm-request-log-source.ts +40 -2
  459. package/src/memory/llm-request-log-store.ts +228 -1
  460. package/src/memory/llm-usage-store.ts +24 -0
  461. package/src/memory/memory-retrospective-enqueue.ts +8 -1
  462. package/src/memory/memory-retrospective-job.ts +5 -0
  463. package/src/memory/memory-v2-activation-log-store.ts +110 -7
  464. package/src/memory/migrations/260-rename-cleaned-at.ts +44 -0
  465. package/src/memory/migrations/261-llm-usage-add-raw-usage.ts +36 -0
  466. package/src/memory/migrations/262-memory-v3-coactivation.ts +57 -0
  467. package/src/memory/migrations/263-memory-v3-auto-edges.ts +50 -0
  468. package/src/memory/migrations/264-llm-request-log-call-site.ts +29 -0
  469. package/src/memory/migrations/265-drop-provider-connection-status.ts +26 -0
  470. package/src/memory/migrations/266-messages-client-message-id.ts +43 -0
  471. package/src/memory/migrations/index.ts +19 -0
  472. package/src/memory/migrations/registry.ts +33 -0
  473. package/src/memory/schema/conversations.ts +10 -2
  474. package/src/memory/schema/inference.ts +0 -1
  475. package/src/memory/schema/infrastructure.ts +21 -0
  476. package/src/memory/tool-usage-store.ts +36 -8
  477. package/src/memory/v2/__tests__/backfill-jobs.test.ts +5 -2
  478. package/src/memory/v2/__tests__/consolidation-job.test.ts +1 -0
  479. package/src/memory/v2/__tests__/harness-compare.test.ts +186 -0
  480. package/src/memory/v2/__tests__/harness-metrics.test.ts +83 -0
  481. package/src/memory/v2/__tests__/harness-oracle.test.ts +257 -0
  482. package/src/memory/v2/__tests__/harness-replay-input.test.ts +230 -0
  483. package/src/memory/v2/__tests__/harness-runner.test.ts +135 -0
  484. package/src/memory/v2/__tests__/injection.test.ts +127 -98
  485. package/src/memory/v2/__tests__/qdrant.test.ts +36 -0
  486. package/src/memory/v2/__tests__/router.test.ts +171 -3
  487. package/src/memory/v2/__tests__/sweep-job.test.ts +6 -3
  488. package/src/memory/v2/harness/compare.ts +57 -0
  489. package/src/memory/v2/harness/metrics.ts +128 -0
  490. package/src/memory/v2/harness/oracle.ts +145 -0
  491. package/src/memory/v2/harness/replay-input.ts +240 -0
  492. package/src/memory/v2/harness/retriever.ts +74 -0
  493. package/src/memory/v2/harness/router-retriever.ts +43 -0
  494. package/src/memory/v2/harness/runner.ts +112 -0
  495. package/src/memory/v2/harness/trace.ts +64 -0
  496. package/src/memory/v2/injection.ts +21 -15
  497. package/src/memory/v2/prompts/router.ts +26 -1
  498. package/src/memory/v2/qdrant.ts +14 -2
  499. package/src/memory/v2/router.ts +171 -18
  500. package/src/memory/v3/__tests__/coactivation-store.test.ts +422 -0
  501. package/src/memory/v3/__tests__/consolidation-job.test.ts +466 -0
  502. package/src/memory/v3/__tests__/coretrieval-seed.test.ts +270 -0
  503. package/src/memory/v3/__tests__/edge-learning-job.test.ts +324 -0
  504. package/src/memory/v3/__tests__/edges.test.ts +706 -0
  505. package/src/memory/v3/__tests__/filter.test.ts +560 -0
  506. package/src/memory/v3/__tests__/gate.test.ts +637 -0
  507. package/src/memory/v3/__tests__/index-composition.test.ts +291 -0
  508. package/src/memory/v3/__tests__/loop.test.ts +775 -0
  509. package/src/memory/v3/__tests__/retriever.test.ts +226 -0
  510. package/src/memory/v3/__tests__/scouts.test.ts +489 -0
  511. package/src/memory/v3/__tests__/shadow-diff.test.ts +225 -0
  512. package/src/memory/v3/__tests__/shadow-middleware.test.ts +398 -0
  513. package/src/memory/v3/__tests__/system-prompts.test.ts +154 -0
  514. package/src/memory/v3/__tests__/traversal.test.ts +508 -0
  515. package/src/memory/v3/__tests__/tree-index.test.ts +280 -0
  516. package/src/memory/v3/__tests__/tree-store.test.ts +529 -0
  517. package/src/memory/v3/__tests__/tree-walk.test.ts +784 -0
  518. package/src/memory/v3/__tests__/validate.test.ts +277 -0
  519. package/src/memory/v3/auto-edges.ts +223 -0
  520. package/src/memory/v3/coactivation-store.ts +124 -0
  521. package/src/memory/v3/consolidation-job.ts +323 -0
  522. package/src/memory/v3/coretrieval-seed.ts +240 -0
  523. package/src/memory/v3/edge-learning-job.ts +160 -0
  524. package/src/memory/v3/edges.ts +286 -0
  525. package/src/memory/v3/filter.ts +286 -0
  526. package/src/memory/v3/gate.ts +349 -0
  527. package/src/memory/v3/index-composition.ts +126 -0
  528. package/src/memory/v3/llm-capture.ts +46 -0
  529. package/src/memory/v3/loop.ts +430 -0
  530. package/src/memory/v3/maintenance.ts +144 -0
  531. package/src/memory/v3/prompt-context.ts +33 -0
  532. package/src/memory/v3/prompts/consolidation.ts +458 -0
  533. package/src/memory/v3/prompts/system-prompts.ts +196 -0
  534. package/src/memory/v3/retriever.ts +33 -0
  535. package/src/memory/v3/scouts.ts +431 -0
  536. package/src/memory/v3/shadow-diff.ts +287 -0
  537. package/src/memory/v3/shadow-middleware.ts +347 -0
  538. package/src/memory/v3/traversal.ts +211 -0
  539. package/src/memory/v3/tree-index.ts +237 -0
  540. package/src/memory/v3/tree-store.ts +394 -0
  541. package/src/memory/v3/tree-walk.ts +356 -0
  542. package/src/memory/v3/types.ts +65 -0
  543. package/src/memory/v3/validate.ts +323 -0
  544. package/src/notifications/__tests__/emit-signal-home-feed.test.ts +1 -0
  545. package/src/notifications/__tests__/home-feed-side-effect.test.ts +1 -0
  546. package/src/notifications/adapters/macos.ts +18 -1
  547. package/src/notifications/adapters/platform.ts +1 -1
  548. package/src/notifications/adapters/slack.ts +45 -11
  549. package/src/notifications/broadcaster.ts +114 -63
  550. package/src/notifications/conversation-pairing.ts +23 -3
  551. package/src/notifications/decision-engine.ts +1 -4
  552. package/src/notifications/decisions-store.ts +32 -1
  553. package/src/notifications/deliveries-store.ts +45 -0
  554. package/src/notifications/edit-notification.ts +201 -0
  555. package/src/notifications/emit-signal.ts +40 -50
  556. package/src/notifications/signal.ts +10 -0
  557. package/src/notifications/types.ts +37 -0
  558. package/src/oauth/byo-connection.test.ts +67 -3
  559. package/src/oauth/byo-connection.ts +32 -5
  560. package/src/oauth/connect-orchestrator.ts +9 -0
  561. package/src/oauth/connection-resolver.test.ts +76 -0
  562. package/src/oauth/connection-resolver.ts +49 -10
  563. package/src/oauth/manual-token-connection.ts +51 -3
  564. package/src/oauth/seed-providers.ts +3 -0
  565. package/src/permissions/approval-policy.test.ts +19 -5
  566. package/src/permissions/approval-policy.ts +14 -3
  567. package/src/permissions/checker.ts +21 -8
  568. package/src/permissions/prompter.ts +3 -3
  569. package/src/permissions/question-prompter.ts +5 -2
  570. package/src/permissions/secret-prompter.ts +2 -2
  571. package/src/platform/client.test.ts +24 -1
  572. package/src/platform/client.ts +8 -0
  573. package/src/platform/feature-gate.ts +15 -0
  574. package/src/plugin-api/index.ts +4 -0
  575. package/src/plugin-api/types.ts +7 -33
  576. package/src/plugins/defaults/index.ts +6 -0
  577. package/src/plugins/defaults/injectors.ts +20 -19
  578. package/src/plugins/defaults/persistence.ts +25 -6
  579. package/src/plugins/external-plugin-loader.ts +5 -68
  580. package/src/plugins/types.ts +68 -29
  581. package/src/proactive-artifact/aux-message-injector.ts +17 -4
  582. package/src/proactive-artifact/job.test.ts +1 -0
  583. package/src/prompts/__tests__/system-prompt.test.ts +4 -4
  584. package/src/prompts/__tests__/task-progress-hint-section.test.ts +3 -9
  585. package/src/prompts/persona-resolver.ts +36 -21
  586. package/src/prompts/sections.ts +39 -7
  587. package/src/prompts/system-prompt.ts +84 -221
  588. package/src/prompts/template-detection.ts +10 -4
  589. package/src/prompts/templates/BOOTSTRAP.md +9 -13
  590. package/src/prompts/templates/IDENTITY.md +0 -2
  591. package/src/prompts/templates/system-sections.ts +230 -8
  592. package/src/providers/__tests__/connection-model-compat.test.ts +233 -0
  593. package/src/providers/__tests__/registry-native-web-search.test.ts +122 -0
  594. package/src/providers/__tests__/retry-callsite.test.ts +85 -5
  595. package/src/providers/anthropic/client.ts +32 -66
  596. package/src/providers/call-site-routing.ts +42 -6
  597. package/src/providers/connection-model-compat.ts +61 -0
  598. package/src/providers/connection-resolution.ts +47 -14
  599. package/src/providers/fireworks/client.ts +1 -0
  600. package/src/providers/gemini/client.ts +70 -6
  601. package/src/providers/inference/__tests__/adapter-factory-openai-compatible.test.ts +0 -2
  602. package/src/providers/inference/__tests__/base-url-security.test.ts +2 -3
  603. package/src/providers/inference/__tests__/{connections-status-label.test.ts → connections-label.test.ts} +12 -111
  604. package/src/providers/inference/adapter-factory.ts +3 -0
  605. package/src/providers/inference/auth.ts +0 -8
  606. package/src/providers/inference/connections.ts +3 -66
  607. package/src/providers/inference/resolve-auth.ts +2 -3
  608. package/src/providers/minimax/client.ts +106 -0
  609. package/src/providers/model-catalog.ts +78 -1
  610. package/src/providers/model-intents.ts +4 -4
  611. package/src/providers/openai/__tests__/api-error-detail.test.ts +120 -0
  612. package/src/providers/openai/__tests__/chat-completions-provider-reasoning.test.ts +157 -5
  613. package/src/providers/openai/chat-completions-provider.ts +116 -15
  614. package/src/providers/openai/codex-models.ts +20 -0
  615. package/src/providers/openai/responses-provider.ts +87 -30
  616. package/src/providers/openrouter/client.ts +13 -8
  617. package/src/providers/provider-send-message.ts +20 -5
  618. package/src/providers/registry.ts +48 -8
  619. package/src/providers/retry.ts +50 -7
  620. package/src/providers/search-provider-catalog.ts +17 -9
  621. package/src/providers/thinking-config.ts +26 -1
  622. package/src/providers/types.ts +9 -0
  623. package/src/providers/usage-tracking.ts +2 -0
  624. package/src/runtime/AGENTS.md +2 -2
  625. package/src/runtime/__tests__/agent-wake.test.ts +1 -0
  626. package/src/runtime/__tests__/background-job-runner.test.ts +1 -0
  627. package/src/runtime/access-request-helper.ts +1 -0
  628. package/src/runtime/agent-wake.ts +1 -0
  629. package/src/runtime/assistant-event-hub.ts +76 -6
  630. package/src/runtime/auth/route-policy.ts +46 -0
  631. package/src/runtime/btw-sidechain.ts +0 -6
  632. package/src/runtime/channel-readiness-service.ts +68 -0
  633. package/src/runtime/channel-reply-delivery.ts +23 -0
  634. package/src/runtime/channel-retry-sweep.ts +47 -14
  635. package/src/runtime/confirmation-request-guardian-bridge.ts +1 -1
  636. package/src/runtime/http-types.ts +0 -2
  637. package/src/runtime/migrations/vbundle-builder.ts +12 -4
  638. package/src/runtime/pending-interactions.ts +0 -1
  639. package/src/runtime/routes/__tests__/bookmark-routes.test.ts +1 -0
  640. package/src/runtime/routes/__tests__/conversation-compaction-routes.test.ts +406 -0
  641. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +204 -0
  642. package/src/runtime/routes/__tests__/heartbeat-routes.test.ts +1 -1
  643. package/src/runtime/routes/__tests__/home-feed-routes.test.ts +209 -1
  644. package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +13 -50
  645. package/src/runtime/routes/__tests__/memory-v2-simulate-route.test.ts +76 -9
  646. package/src/runtime/routes/__tests__/memory-v3-simulate-params.test.ts +35 -0
  647. package/src/runtime/routes/__tests__/plugins-routes.test.ts +512 -0
  648. package/src/runtime/routes/__tests__/slack-channel-routes.test.ts +3 -2
  649. package/src/runtime/routes/__tests__/surface-content-routes.test.ts +294 -0
  650. package/src/runtime/routes/__tests__/task-routes.test.ts +48 -3
  651. package/src/runtime/routes/acp-routes-list.test.ts +3 -0
  652. package/src/runtime/routes/acp-routes.test.ts +255 -6
  653. package/src/runtime/routes/acp-routes.ts +8 -1
  654. package/src/runtime/routes/app-management-routes.ts +111 -4
  655. package/src/runtime/routes/avatar-routes.ts +10 -10
  656. package/src/runtime/routes/background-wake-routes.ts +356 -0
  657. package/src/runtime/routes/browser-tabs-routes.ts +200 -0
  658. package/src/runtime/routes/btw-routes.ts +4 -10
  659. package/src/runtime/routes/conversation-analysis-routes.ts +6 -0
  660. package/src/runtime/routes/conversation-cli-routes.ts +1 -1
  661. package/src/runtime/routes/conversation-compaction-routes.ts +263 -0
  662. package/src/runtime/routes/conversation-list-routes.ts +159 -4
  663. package/src/runtime/routes/conversation-management-routes.ts +108 -26
  664. package/src/runtime/routes/conversation-query-routes.ts +200 -44
  665. package/src/runtime/routes/conversation-routes.ts +409 -521
  666. package/src/runtime/routes/conversation-starter-routes.ts +6 -3
  667. package/src/runtime/routes/conversations-import-routes.ts +19 -6
  668. package/src/runtime/routes/disk-pressure-routes.ts +1 -1
  669. package/src/runtime/routes/documents-routes.ts +10 -1
  670. package/src/runtime/routes/domain-routes.ts +60 -10
  671. package/src/runtime/routes/email-routes.ts +5 -2
  672. package/src/runtime/routes/events-routes.ts +54 -10
  673. package/src/runtime/routes/group-routes.ts +35 -8
  674. package/src/runtime/routes/home-feed-routes.ts +129 -0
  675. package/src/runtime/routes/host-browser-routes.ts +10 -2
  676. package/src/runtime/routes/host-cu-routes.ts +2 -2
  677. package/src/runtime/routes/identity-intro-cache.ts +61 -16
  678. package/src/runtime/routes/identity-routes.ts +30 -9
  679. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +96 -3
  680. package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +530 -6
  681. package/src/runtime/routes/inbound-stages/background-dispatch.ts +57 -8
  682. package/src/runtime/routes/index.ts +10 -0
  683. package/src/runtime/routes/inference-profile-session-handler.ts +22 -12
  684. package/src/runtime/routes/inference-profile-session-routes.ts +7 -1
  685. package/src/runtime/routes/inference-provider-connection-routes.ts +5 -26
  686. package/src/runtime/routes/integrations/vercel.ts +15 -0
  687. package/src/runtime/routes/llm-call-sites-routes.ts +32 -5
  688. package/src/runtime/routes/llm-context-normalization.ts +7 -2
  689. package/src/runtime/routes/memory-item-routes.ts +8 -3
  690. package/src/runtime/routes/memory-v2-routes.ts +215 -5
  691. package/src/runtime/routes/memory-v3-routes.ts +474 -0
  692. package/src/runtime/routes/migration-routes.ts +32 -28
  693. package/src/runtime/routes/notification-routes.ts +63 -1
  694. package/src/runtime/routes/oauth-commands-routes.ts +6 -1
  695. package/src/runtime/routes/plugins-routes.ts +337 -0
  696. package/src/runtime/routes/rename-conversation-routes.ts +6 -2
  697. package/src/runtime/routes/secret-routes.ts +25 -5
  698. package/src/runtime/routes/settings-routes.ts +12 -11
  699. package/src/runtime/routes/slack-channel-routes.ts +5 -4
  700. package/src/runtime/routes/surface-action-routes.ts +1 -38
  701. package/src/runtime/routes/surface-content-routes.ts +12 -5
  702. package/src/runtime/routes/surface-conversation-resolver.ts +65 -0
  703. package/src/runtime/routes/wipe-conversation-routes.ts +3 -0
  704. package/src/runtime/routes/workspace-routes.ts +25 -10
  705. package/src/runtime/services/__tests__/analyze-conversation.test.ts +2 -0
  706. package/src/runtime/slack-dm-text-delivery.ts +177 -0
  707. package/src/runtime/sync/resource-sync-events.ts +106 -38
  708. package/src/runtime/sync/sync-publisher.test.ts +49 -0
  709. package/src/runtime/sync/sync-publisher.ts +2 -1
  710. package/src/runtime/tool-grant-request-helper.ts +1 -0
  711. package/src/runtime/verification-outbound-actions.ts +73 -1
  712. package/src/schedule/schedule-store.ts +8 -1
  713. package/src/schedule/scheduler.ts +111 -15
  714. package/src/security/__tests__/provider-key-env-fallback.test.ts +3 -3
  715. package/src/security/encrypted-store.ts +7 -16
  716. package/src/security/store-path-override.ts +61 -0
  717. package/src/signals/user-message.ts +5 -8
  718. package/src/skills/validate-input.ts +177 -0
  719. package/src/subagent/manager.ts +13 -13
  720. package/src/subagent/types.ts +6 -0
  721. package/src/tasks/tool-sanitizer.ts +2 -2
  722. package/src/telemetry/types.ts +12 -0
  723. package/src/telemetry/usage-telemetry-reporter.test.ts +48 -0
  724. package/src/telemetry/usage-telemetry-reporter.ts +1 -0
  725. package/src/tools/acp/spawn.test.ts +119 -0
  726. package/src/tools/acp/spawn.ts +15 -2
  727. package/src/tools/apps/definitions.ts +36 -28
  728. package/src/tools/ask-question/ask-question-tool.test.ts +3 -3
  729. package/src/tools/ask-question/ask-question-tool.ts +38 -45
  730. package/src/tools/browser/__tests__/browser-execution-acquire.test.ts +2 -8
  731. package/src/tools/browser/__tests__/pinned-tabs.test.ts +70 -0
  732. package/src/tools/browser/browser-execution.ts +16 -3
  733. package/src/tools/browser/cdp-client/__tests__/browser-tabs-factory.test.ts +402 -0
  734. package/src/tools/browser/cdp-client/__tests__/types.test.ts +3 -0
  735. package/src/tools/browser/cdp-client/cdp-inspect-client.ts +12 -0
  736. package/src/tools/browser/cdp-client/extension-cdp-client.ts +27 -1
  737. package/src/tools/browser/cdp-client/factory.ts +100 -17
  738. package/src/tools/browser/cdp-client/local-cdp-client.ts +12 -0
  739. package/src/tools/browser/cdp-client/types.ts +65 -0
  740. package/src/tools/browser/pinned-tabs.ts +96 -40
  741. package/src/tools/computer-use/definitions.ts +282 -336
  742. package/src/tools/credential-execution/make-authenticated-request.ts +3 -9
  743. package/src/tools/credential-execution/manage-secure-command-tool.ts +3 -9
  744. package/src/tools/credential-execution/run-authenticated-command.ts +3 -9
  745. package/src/tools/credentials/vault.ts +3 -9
  746. package/src/tools/document/document-tool.ts +189 -7
  747. package/src/tools/execution-target.ts +18 -23
  748. package/src/tools/executor.ts +24 -56
  749. package/src/tools/filesystem/edit.ts +3 -9
  750. package/src/tools/filesystem/list.ts +3 -9
  751. package/src/tools/filesystem/read.ts +3 -9
  752. package/src/tools/filesystem/write.ts +3 -9
  753. package/src/tools/host-filesystem/edit.test.ts +1 -0
  754. package/src/tools/host-filesystem/edit.ts +3 -9
  755. package/src/tools/host-filesystem/read.test.ts +1 -0
  756. package/src/tools/host-filesystem/read.ts +3 -9
  757. package/src/tools/host-filesystem/transfer.test.ts +31 -6
  758. package/src/tools/host-filesystem/transfer.ts +3 -9
  759. package/src/tools/host-filesystem/write.test.ts +1 -0
  760. package/src/tools/host-filesystem/write.ts +3 -9
  761. package/src/tools/host-terminal/host-shell.ts +3 -9
  762. package/src/tools/mcp/mcp-tool-factory.ts +1 -10
  763. package/src/tools/memory/register.test.ts +1 -1
  764. package/src/tools/memory/register.ts +4 -9
  765. package/src/tools/network/__tests__/managed-search-proxy.test.ts +282 -0
  766. package/src/tools/network/__tests__/web-search.test.ts +211 -3
  767. package/src/tools/network/managed-search-proxy.ts +183 -0
  768. package/src/tools/network/web-fetch.ts +3 -9
  769. package/src/tools/network/web-search.ts +224 -76
  770. package/src/tools/policy-context.ts +3 -1
  771. package/src/tools/registry.ts +150 -123
  772. package/src/tools/schedule/create.ts +1 -1
  773. package/src/tools/schema-transforms.ts +1 -1
  774. package/src/tools/skills/execute.ts +3 -9
  775. package/src/tools/skills/load.ts +3 -9
  776. package/src/tools/skills/skill-tool-factory.ts +18 -44
  777. package/src/tools/subagent/notify-parent.ts +3 -9
  778. package/src/tools/subagent/spawn.ts +3 -0
  779. package/src/tools/system/request-permission.ts +3 -9
  780. package/src/tools/terminal/shell.ts +3 -9
  781. package/src/tools/tool-approval-handler.ts +10 -4
  782. package/src/tools/tool-defaults.ts +94 -0
  783. package/src/tools/tool-name-aliases.ts +72 -14
  784. package/src/tools/types.ts +32 -101
  785. package/src/tools/ui-surface/definitions.ts +104 -108
  786. package/src/types/onboarding-context.ts +6 -0
  787. package/src/usage/attribution.ts +32 -1
  788. package/src/usage/pricing.ts +23 -0
  789. package/src/usage/types.ts +12 -0
  790. package/src/util/browser.ts +7 -2
  791. package/src/util/logger.ts +16 -7
  792. package/src/util/platform.ts +7 -2
  793. package/src/util/sqlite3-runtime.ts +65 -0
  794. package/src/workspace/migrations/086-revert-stale-gemini-mis-rewrites.ts +1 -0
  795. package/src/workspace/migrations/089-move-memory-tree-out-of-v3.ts +86 -0
  796. package/src/workspace/migrations/090-memory-router-cost-optimized-profile.ts +109 -0
  797. package/src/workspace/migrations/091-retighten-migration-onboarding-thread.ts +41 -0
  798. package/src/workspace/migrations/registry.ts +6 -0
  799. package/src/__tests__/compaction-strip-metadata-clear.test.ts +0 -206
  800. package/src/__tests__/message-complete-display-id.test.ts +0 -175
  801. package/src/daemon/query-complexity-router.ts +0 -75
  802. package/src/prompts/cache-boundary.ts +0 -8
@@ -1,10 +1,10 @@
1
1
  import type * as genai from "@google/genai";
2
- import { ApiError, GoogleGenAI } from "@google/genai";
2
+ import { ApiError, GoogleGenAI, ThinkingLevel } from "@google/genai";
3
3
 
4
- import { SYSTEM_PROMPT_CACHE_BOUNDARY } from "../../prompts/cache-boundary.js";
5
4
  import { isAbortReason } from "../../util/abort-reasons.js";
6
5
  import { ProviderError } from "../../util/errors.js";
7
6
  import { getLogger } from "../../util/logger.js";
7
+ import { PROVIDER_CATALOG } from "../model-catalog.js";
8
8
  import { createStreamTimeout } from "../stream-timeout.js";
9
9
  import type {
10
10
  ContentBlock,
@@ -34,6 +34,65 @@ function isGemini3Model(model: string): boolean {
34
34
  return model.startsWith("gemini-3") || model.startsWith("models/gemini-3");
35
35
  }
36
36
 
37
+ const THINKING_LEVEL_BY_NAME: Record<string, ThinkingLevel> = {
38
+ minimal: ThinkingLevel.MINIMAL,
39
+ low: ThinkingLevel.LOW,
40
+ medium: ThinkingLevel.MEDIUM,
41
+ high: ThinkingLevel.HIGH,
42
+ };
43
+
44
+ /**
45
+ * Translate the resolved wire-shape `thinking` config into Gemini's
46
+ * `thinkingConfig`. Returns `undefined` when no thinking config was supplied,
47
+ * which lets Google's per-model default apply (e.g. `gemini-3.5-flash`
48
+ * defaults to dynamic medium-level thinking).
49
+ *
50
+ * `enabled: false` maps to `thinkingLevel: MINIMAL` because Gemini 3.x cannot
51
+ * fully disable thinking — `"minimal"` is the floor. `includeThoughts` is
52
+ * gated on `streamThinking` so callers that opted out of streaming thoughts
53
+ * don't pay for thought tokens in the response.
54
+ */
55
+ function buildThinkingConfig(
56
+ thinking: Record<string, unknown> | undefined,
57
+ ): genai.ThinkingConfig | undefined {
58
+ if (!thinking) return undefined;
59
+ if (thinking.type === "disabled") {
60
+ return {
61
+ thinkingLevel: ThinkingLevel.MINIMAL,
62
+ includeThoughts: false,
63
+ };
64
+ }
65
+ if (thinking.type !== "adaptive") return undefined;
66
+
67
+ const result: genai.ThinkingConfig = {};
68
+ if (typeof thinking.level === "string") {
69
+ const mapped = THINKING_LEVEL_BY_NAME[thinking.level];
70
+ if (mapped) result.thinkingLevel = mapped;
71
+ }
72
+ if (typeof thinking.streamThinking === "boolean") {
73
+ result.includeThoughts = thinking.streamThinking;
74
+ }
75
+ return Object.keys(result).length > 0 ? result : undefined;
76
+ }
77
+
78
+ /**
79
+ * Whether the active Gemini model accepts a `thinkingConfig`. Non-thinking
80
+ * models (e.g. `gemini-2.5-flash-lite`) reject thinking params, and gemini is
81
+ * in `THINKING_AWARE_PROVIDERS` so `providers/retry.ts` no longer strips them —
82
+ * so we gate on the catalog's `supportsThinking` capability here. Unknown or
83
+ * uncatalogued models default to allowing thinking config (preserving prior
84
+ * behavior); only an explicit `supportsThinking: false` suppresses it.
85
+ */
86
+ function geminiModelSupportsThinking(model: string): boolean {
87
+ const normalized = model.startsWith("models/")
88
+ ? model.slice("models/".length)
89
+ : model;
90
+ const catalogModel = PROVIDER_CATALOG.find(
91
+ (provider) => provider.id === "gemini",
92
+ )?.models.find((m) => m.id === normalized);
93
+ return catalogModel?.supportsThinking !== false;
94
+ }
95
+
37
96
  function stripGeminiHttpOptions(
38
97
  config: genai.GenerateContentConfig,
39
98
  ): genai.GenerateContentConfig {
@@ -176,6 +235,11 @@ export class GeminiProvider implements Provider {
176
235
  | Record<string, string>
177
236
  | undefined;
178
237
  const activeModel = modelOverride ?? this.model;
238
+ const thinkingConfig = geminiModelSupportsThinking(activeModel)
239
+ ? buildThinkingConfig(
240
+ configObj?.thinking as Record<string, unknown> | undefined,
241
+ )
242
+ : undefined;
179
243
 
180
244
  try {
181
245
  const geminiContents = this.toGeminiContents(messages, activeModel);
@@ -183,14 +247,14 @@ export class GeminiProvider implements Provider {
183
247
  const geminiConfig: genai.GenerateContentConfig = {};
184
248
 
185
249
  if (systemPrompt) {
186
- geminiConfig.systemInstruction = systemPrompt.replaceAll(
187
- SYSTEM_PROMPT_CACHE_BOUNDARY,
188
- "\n",
189
- );
250
+ geminiConfig.systemInstruction = systemPrompt;
190
251
  }
191
252
  if (maxTokens) {
192
253
  geminiConfig.maxOutputTokens = maxTokens;
193
254
  }
255
+ if (thinkingConfig) {
256
+ geminiConfig.thinkingConfig = thinkingConfig;
257
+ }
194
258
  if (tools && tools.length > 0) {
195
259
  geminiConfig.tools = [
196
260
  {
@@ -24,7 +24,6 @@ describe("openai-compatible adapter factory", () => {
24
24
  name: "my-vllm",
25
25
  provider: "openai-compatible",
26
26
  auth: { type: "api_key", credential: "cred-vllm" },
27
- status: "active",
28
27
  label: "vLLM",
29
28
  baseUrl: "http://localhost:8080/v1",
30
29
  models: [{ id: "my-model" }],
@@ -52,7 +51,6 @@ describe("openai-compatible adapter factory", () => {
52
51
  name: "my-vllm",
53
52
  provider: "openai-compatible",
54
53
  auth: { type: "none" },
55
- status: "active",
56
54
  label: null,
57
55
  baseUrl: "http://localhost:8080/v1",
58
56
  models: [{ id: "my-model" }],
@@ -7,6 +7,7 @@ import { migrateCreateProviderConnections } from "../../../memory/migrations/243
7
7
  import { migrateProviderConnectionStatusLabel } from "../../../memory/migrations/244-provider-connection-status-label.js";
8
8
  import { migrateProviderConnectionBaseUrlAndModels } from "../../../memory/migrations/250-provider-connection-base-url-and-models.js";
9
9
  import { migrateStripBaseUrlNonOpenaiCompatible } from "../../../memory/migrations/257-strip-base-url-non-openai-compatible.js";
10
+ import { migrateDropProviderConnectionStatus } from "../../../memory/migrations/265-drop-provider-connection-status.js";
10
11
  import * as schema from "../../../memory/schema.js";
11
12
  import { providerConnections } from "../../../memory/schema/inference.js";
12
13
  import { getConnection } from "../connections.js";
@@ -22,6 +23,7 @@ function bootDb() {
22
23
  const db = createTestDb();
23
24
  migrateCreateProviderConnections(db);
24
25
  migrateProviderConnectionStatusLabel(db);
26
+ migrateDropProviderConnectionStatus(db);
25
27
  migrateProviderConnectionBaseUrlAndModels(db);
26
28
  return db;
27
29
  }
@@ -42,7 +44,6 @@ describe("migration 257: strip base_url from non-openai-compatible connections",
42
44
  name: "bad-anthropic",
43
45
  provider: "anthropic",
44
46
  auth: JSON.stringify({ type: "api_key", credential: "cred-abc" }),
45
- status: "active",
46
47
  baseUrl: "https://evil.example.com/v1",
47
48
  createdAt: now,
48
49
  updatedAt: now,
@@ -65,7 +66,6 @@ describe("migration 257: strip base_url from non-openai-compatible connections",
65
66
  name: "good-vllm",
66
67
  provider: "openai-compatible",
67
68
  auth: JSON.stringify({ type: "api_key", credential: "cred-vllm" }),
68
- status: "active",
69
69
  baseUrl: "https://my-vllm.example.com/v1",
70
70
  models: JSON.stringify([{ id: "my-model" }]),
71
71
  createdAt: now,
@@ -89,7 +89,6 @@ describe("migration 257: strip base_url from non-openai-compatible connections",
89
89
  name: "bad-openai",
90
90
  provider: "openai",
91
91
  auth: JSON.stringify({ type: "api_key", credential: "cred-abc" }),
92
- status: "active",
93
92
  baseUrl: "https://evil.example.com/v1",
94
93
  createdAt: now,
95
94
  updatedAt: now,
@@ -6,10 +6,10 @@ import { drizzle } from "drizzle-orm/bun-sqlite";
6
6
  import { migrateCreateProviderConnections } from "../../../memory/migrations/243-provider-connections.js";
7
7
  import { migrateProviderConnectionStatusLabel } from "../../../memory/migrations/244-provider-connection-status-label.js";
8
8
  import { migrateProviderConnectionBaseUrlAndModels } from "../../../memory/migrations/250-provider-connection-base-url-and-models.js";
9
+ import { migrateDropProviderConnectionStatus } from "../../../memory/migrations/265-drop-provider-connection-status.js";
9
10
  import * as schema from "../../../memory/schema.js";
10
11
  import {
11
12
  createConnection,
12
- disableManagedConnectionsForByokHatch,
13
13
  getConnection,
14
14
  listConnections,
15
15
  seedCanonicalConnections,
@@ -25,13 +25,17 @@ function createTestDb() {
25
25
  function bootDb() {
26
26
  const db = createTestDb();
27
27
  migrateCreateProviderConnections(db);
28
+ // 244 adds status + label columns. 265 drops status. This mirrors the
29
+ // production migration sequence so the Drizzle schema (which no longer
30
+ // declares status) stays consistent with the DB shape.
28
31
  migrateProviderConnectionStatusLabel(db);
32
+ migrateDropProviderConnectionStatus(db);
29
33
  migrateProviderConnectionBaseUrlAndModels(db);
30
34
  return db;
31
35
  }
32
36
 
33
- describe("connection CRUD status + label defaults", () => {
34
- test("new connection without status/label gets status=active and label=null", () => {
37
+ describe("connection CRUD label defaults", () => {
38
+ test("new connection without label gets label=null", () => {
35
39
  const db = bootDb();
36
40
  const result = createConnection(db, {
37
41
  name: "my-conn",
@@ -40,61 +44,38 @@ describe("connection CRUD status + label defaults", () => {
40
44
  });
41
45
  expect(result.ok).toBe(true);
42
46
  if (result.ok) {
43
- expect(result.connection.status).toBe("active");
44
47
  expect(result.connection.label).toBeNull();
45
48
  }
46
49
  });
47
50
 
48
- test("createConnection passes explicit status and label", () => {
51
+ test("createConnection passes explicit label", () => {
49
52
  const db = bootDb();
50
53
  const result = createConnection(db, {
51
- name: "disabled-conn",
54
+ name: "labeled-conn",
52
55
  provider: "openai",
53
56
  auth: { type: "platform" },
54
- status: "disabled",
55
57
  label: "My OpenAI",
56
58
  });
57
59
  expect(result.ok).toBe(true);
58
60
  if (result.ok) {
59
- expect(result.connection.status).toBe("disabled");
60
61
  expect(result.connection.label).toBe("My OpenAI");
61
62
  }
62
63
  });
63
64
 
64
- test("getConnection returns status and label from DB", () => {
65
+ test("getConnection returns label from DB", () => {
65
66
  const db = bootDb();
66
67
  createConnection(db, {
67
68
  name: "get-me",
68
69
  provider: "gemini",
69
70
  auth: { type: "platform" },
70
- status: "disabled",
71
71
  label: "Gemini Pro",
72
72
  });
73
73
 
74
74
  const conn = getConnection(db, "get-me");
75
75
  expect(conn).not.toBeNull();
76
- expect(conn!.status).toBe("disabled");
77
76
  expect(conn!.label).toBe("Gemini Pro");
78
77
  });
79
78
 
80
- test("updateConnection updates status", () => {
81
- const db = bootDb();
82
- createConnection(db, {
83
- name: "toggle-me",
84
- provider: "anthropic",
85
- auth: { type: "platform" },
86
- });
87
-
88
- const result = updateConnection(db, "toggle-me", {
89
- auth: { type: "platform" },
90
- status: "disabled",
91
- });
92
- expect(result.ok).toBe(true);
93
- if (result.ok) {
94
- expect(result.connection.status).toBe("disabled");
95
- }
96
- });
97
-
98
79
  test("updateConnection clears label when set to null", () => {
99
80
  const db = bootDb();
100
81
  createConnection(db, {
@@ -116,7 +97,7 @@ describe("connection CRUD status + label defaults", () => {
116
97
  });
117
98
 
118
99
  describe("seedCanonicalConnections labels", () => {
119
- test("first boot seeds default labels on all three managed connections", () => {
100
+ test("first boot seeds default labels on all managed connections", () => {
120
101
  const db = bootDb();
121
102
  seedCanonicalConnections(db);
122
103
 
@@ -162,7 +143,7 @@ describe("seedCanonicalConnections labels", () => {
162
143
  expect(after?.label).toBe("Anthropic");
163
144
  });
164
145
 
165
- test("backfill leaves explicit empty-overwrite null untouched on subsequent boot", () => {
146
+ test("backfill fills null label on subsequent boot", () => {
166
147
  const db = bootDb();
167
148
  seedCanonicalConnections(db);
168
149
 
@@ -183,83 +164,3 @@ describe("seedCanonicalConnections labels", () => {
183
164
  expect(conn?.label).toBe("OpenAI");
184
165
  });
185
166
  });
186
-
187
- describe("disableManagedConnectionsForByokHatch", () => {
188
- test("flips all three canonical managed connections to status='disabled'", () => {
189
- const db = bootDb();
190
- seedCanonicalConnections(db);
191
-
192
- // Sanity: seeded rows default to active.
193
- expect(getConnection(db, "anthropic-managed")?.status).toBe("active");
194
- expect(getConnection(db, "openai-managed")?.status).toBe("active");
195
- expect(getConnection(db, "gemini-managed")?.status).toBe("active");
196
-
197
- disableManagedConnectionsForByokHatch(db);
198
-
199
- expect(getConnection(db, "anthropic-managed")?.status).toBe("disabled");
200
- expect(getConnection(db, "openai-managed")?.status).toBe("disabled");
201
- expect(getConnection(db, "gemini-managed")?.status).toBe("disabled");
202
- });
203
-
204
- test("leaves an excluded managed connection active", () => {
205
- const db = bootDb();
206
- seedCanonicalConnections(db);
207
-
208
- disableManagedConnectionsForByokHatch(db, {
209
- excludeConnection: "anthropic-managed",
210
- });
211
-
212
- expect(getConnection(db, "anthropic-managed")?.status).toBe("active");
213
- expect(getConnection(db, "openai-managed")?.status).toBe("disabled");
214
- expect(getConnection(db, "gemini-managed")?.status).toBe("disabled");
215
- });
216
-
217
- test("subsequent seedCanonicalConnections call does NOT re-flip a user-re-enabled connection", () => {
218
- // Models the post-hatch lifecycle: at hatch we disable; the user
219
- // later flips one back to active (e.g. after Vellum login). Every
220
- // subsequent daemon boot runs seedCanonicalConnections — and that
221
- // boot must NOT revert the user's choice. The hatch-disable helper
222
- // is only ever called from the seedInferenceProfiles hatch branch,
223
- // so it does not run on a non-hatch boot; this test confirms the
224
- // ambient seed pass leaves status alone.
225
- const db = bootDb();
226
- seedCanonicalConnections(db);
227
- disableManagedConnectionsForByokHatch(db);
228
-
229
- // User re-enables anthropic post-hatch.
230
- updateConnection(db, "anthropic-managed", {
231
- auth: { type: "platform" },
232
- status: "active",
233
- });
234
- expect(getConnection(db, "anthropic-managed")?.status).toBe("active");
235
-
236
- // Simulate a normal restart: seedCanonicalConnections runs every boot,
237
- // disableManagedConnectionsForByokHatch does NOT.
238
- seedCanonicalConnections(db);
239
-
240
- expect(getConnection(db, "anthropic-managed")?.status).toBe("active");
241
- // The two the user didn't touch stay disabled.
242
- expect(getConnection(db, "openai-managed")?.status).toBe("disabled");
243
- expect(getConnection(db, "gemini-managed")?.status).toBe("disabled");
244
- });
245
-
246
- test("idempotent re-hatch leaves all three at disabled", () => {
247
- // Workspace reset / re-hatch scenario: helper runs again and any
248
- // user re-enable from before the reset is intentionally undone —
249
- // re-hatch means re-onboard.
250
- const db = bootDb();
251
- seedCanonicalConnections(db);
252
- disableManagedConnectionsForByokHatch(db);
253
-
254
- updateConnection(db, "anthropic-managed", {
255
- auth: { type: "platform" },
256
- status: "active",
257
- });
258
-
259
- disableManagedConnectionsForByokHatch(db);
260
-
261
- expect(getConnection(db, "anthropic-managed")?.status).toBe("disabled");
262
- expect(getConnection(db, "openai-managed")?.status).toBe("disabled");
263
- expect(getConnection(db, "gemini-managed")?.status).toBe("disabled");
264
- });
265
- });
@@ -21,6 +21,7 @@
21
21
  import { AnthropicProvider } from "../anthropic/client.js";
22
22
  import { FireworksProvider } from "../fireworks/client.js";
23
23
  import { GeminiProvider } from "../gemini/client.js";
24
+ import { MinimaxProvider } from "../minimax/client.js";
24
25
  import { PROVIDER_CATALOG } from "../model-catalog.js";
25
26
  import { OllamaProvider } from "../ollama/client.js";
26
27
  import { OpenAIChatCompletionsProvider } from "../openai/chat-completions-provider.js";
@@ -111,6 +112,8 @@ const ADAPTER_FACTORIES: Record<string, AdapterFactory> = {
111
112
  streamTimeoutMs,
112
113
  ...(baseURL ? { baseURL } : {}),
113
114
  }),
115
+ minimax: ({ apiKey, model, streamTimeoutMs }) =>
116
+ new MinimaxProvider(apiKey, model, { streamTimeoutMs }),
114
117
  };
115
118
 
116
119
  /**
@@ -79,13 +79,6 @@ export const ConnectionProviderSchema = z.enum(
79
79
  VALID_CONNECTION_PROVIDERS as readonly [string, ...string[]],
80
80
  );
81
81
 
82
- // ---------------------------------------------------------------------------
83
- // Connection status
84
- // ---------------------------------------------------------------------------
85
-
86
- export const ConnectionStatusSchema = z.enum(["active", "disabled"]);
87
- export type ConnectionStatus = z.infer<typeof ConnectionStatusSchema>;
88
-
89
82
  // ---------------------------------------------------------------------------
90
83
  // Per-connection model entries (openai-compatible)
91
84
  // ---------------------------------------------------------------------------
@@ -104,7 +97,6 @@ export const ProviderConnectionSchema = z.object({
104
97
  name: z.string().min(1),
105
98
  provider: ConnectionProviderSchema,
106
99
  auth: AuthSchema,
107
- status: ConnectionStatusSchema,
108
100
  label: z.string().min(1).nullable(),
109
101
  baseUrl: z.string().url().nullable(),
110
102
  models: z.array(ConnectionModelSchema).nullable(),
@@ -11,8 +11,6 @@ import {
11
11
  ConnectionModelSchema,
12
12
  type ConnectionProvider,
13
13
  ConnectionProviderSchema,
14
- type ConnectionStatus,
15
- ConnectionStatusSchema,
16
14
  type ProviderConnection,
17
15
  VALID_CONNECTION_PROVIDERS,
18
16
  } from "./auth.js";
@@ -55,16 +53,11 @@ export function listConnections(
55
53
  if (!auth.success) return [];
56
54
  const provider = ConnectionProviderSchema.safeParse(row.provider);
57
55
  if (!provider.success) return [];
58
- const statusResult = ConnectionStatusSchema.safeParse(row.status);
59
- const status: ConnectionStatus = statusResult.success
60
- ? statusResult.data
61
- : "active";
62
56
  return [
63
57
  {
64
58
  ...row,
65
59
  auth: auth.data,
66
60
  provider: provider.data,
67
- status,
68
61
  label: row.label ?? null,
69
62
  baseUrl: row.baseUrl ?? null,
70
63
  models: parseModelsColumn(row.models),
@@ -89,15 +82,10 @@ export function getConnection(
89
82
  if (!auth.success) return null;
90
83
  const provider = ConnectionProviderSchema.safeParse(row.provider);
91
84
  if (!provider.success) return null;
92
- const statusResult = ConnectionStatusSchema.safeParse(row.status);
93
- const status: ConnectionStatus = statusResult.success
94
- ? statusResult.data
95
- : "active";
96
85
  return {
97
86
  ...row,
98
87
  auth: auth.data,
99
88
  provider: provider.data,
100
- status,
101
89
  label: row.label ?? null,
102
90
  baseUrl: row.baseUrl ?? null,
103
91
  models: parseModelsColumn(row.models),
@@ -113,7 +101,6 @@ export type CreateConnectionInput = {
113
101
  name: string;
114
102
  provider: string;
115
103
  auth: Auth;
116
- status?: ConnectionStatus;
117
104
  label?: string | null;
118
105
  baseUrl?: string | null;
119
106
  models?: ConnectionModel[] | null;
@@ -121,7 +108,6 @@ export type CreateConnectionInput = {
121
108
 
122
109
  export type UpdateConnectionInput = {
123
110
  auth: Auth;
124
- status?: ConnectionStatus;
125
111
  label?: string | null;
126
112
  baseUrl?: string | null;
127
113
  models?: ConnectionModel[] | null;
@@ -173,7 +159,6 @@ export function createConnection(
173
159
  return { ok: false, error: { code: "already_exists" } };
174
160
  }
175
161
 
176
- const status = input.status ?? "active";
177
162
  const label = input.label ?? null;
178
163
  const baseUrl = input.baseUrl ?? null;
179
164
  const models = input.models ?? null;
@@ -191,7 +176,6 @@ export function createConnection(
191
176
  name: input.name,
192
177
  provider,
193
178
  auth: JSON.stringify(authResult.data),
194
- status,
195
179
  label,
196
180
  baseUrl,
197
181
  models: models === null ? null : JSON.stringify(models),
@@ -210,7 +194,6 @@ export function createConnection(
210
194
  name: input.name,
211
195
  provider,
212
196
  auth: authResult.data,
213
- status,
214
197
  label,
215
198
  baseUrl,
216
199
  models,
@@ -255,12 +238,10 @@ export function updateConnection(
255
238
  const setClause: {
256
239
  auth: string;
257
240
  updatedAt: number;
258
- status?: string;
259
241
  label?: string | null;
260
242
  baseUrl?: string | null;
261
243
  models?: string | null;
262
244
  } = { auth: JSON.stringify(authResult.data), updatedAt: now };
263
- if (input.status !== undefined) setClause.status = input.status;
264
245
  if (input.label !== undefined) setClause.label = input.label;
265
246
  if (input.baseUrl !== undefined) setClause.baseUrl = input.baseUrl;
266
247
  if (input.models !== undefined)
@@ -280,7 +261,6 @@ export function updateConnection(
280
261
  connection: {
281
262
  ...existing,
282
263
  auth: authResult.data,
283
- status: input.status !== undefined ? input.status : existing.status,
284
264
  label: input.label !== undefined ? input.label : existing.label,
285
265
  baseUrl: nextBaseUrl,
286
266
  models: nextModels,
@@ -376,10 +356,9 @@ const CANONICAL_CONNECTIONS: Array<{
376
356
  * blocking prevents a confusing delete → re-appear loop).
377
357
  * - PATCH that changes `auth` is blocked (auth is locked to `{type:"platform"}`
378
358
  * so any other value would be reverted on the next boot upsert).
379
- * - PATCH that changes `label` and/or `status` is allowed — users may legitimately
380
- * disable or relabel the managed connection. `status` is never touched by the
381
- * boot upsert. `label` is seeded on initial INSERT and backfilled when null
382
- * on subsequent boots so pre-seed installs pick up the default; a non-null
359
+ * - PATCH that changes `label` is allowed — users may legitimately relabel the
360
+ * managed connection. `label` is seeded on initial INSERT and backfilled when
361
+ * null on subsequent boots so pre-seed installs pick up the default; a non-null
383
362
  * user-customized label is preserved (see `seedCanonicalConnections`).
384
363
  *
385
364
  * Mirrors `MANAGED_PROFILE_NAMES` (config/seed-inference-profiles.ts).
@@ -399,14 +378,6 @@ export const MANAGED_CONNECTION_NAMES: ReadonlySet<string> = new Set(
399
378
  * customization is preserved; the separate backfill step below assigns the
400
379
  * default only when the existing row has `label IS NULL`, covering installs
401
380
  * that pre-date the label seed.
402
- *
403
- * Status handling: the upsert never touches `status` so user customization
404
- * is preserved across reboots. New rows default to `status: "active"` via the
405
- * column default. Off-platform installs flip canonical managed rows to
406
- * `status: "disabled"` ONCE at hatch time via
407
- * `disableManagedConnectionsForByokHatch` (called from `seedInferenceProfiles`
408
- * when `isHatch && !isPlatform`); subsequent boots leave whatever the user
409
- * has chosen alone, so a post-hatch re-enable persists.
410
381
  */
411
382
  export function seedCanonicalConnections(db: DrizzleDb): void {
412
383
  const now = Date.now();
@@ -445,37 +416,3 @@ export function seedCanonicalConnections(db: DrizzleDb): void {
445
416
  }
446
417
  }
447
418
 
448
- /**
449
- * Flip canonical managed connections to `status: "disabled"` at
450
- * hatch time on BYOK (off-platform) installs.
451
- *
452
- * Why hatch-time only: managed connections need platform auth that a fresh
453
- * BYOK user doesn't have yet, so surfacing them as enabled in the picker
454
- * would let users pick an unusable option on day one. But this is a
455
- * first-time-only default — the moment the user explicitly flips one
456
- * back to active (e.g. after logging into Vellum), we never want a daemon
457
- * restart to revert that. `seedCanonicalConnections` leaves `status` alone
458
- * on the UPDATE path, and this helper is invoked ONLY from
459
- * `seedInferenceProfiles`'s `isHatch && !isPlatform` branch. Subsequent
460
- * non-hatch boots never call it.
461
- *
462
- * Idempotent: a second hatch (workspace reset) re-disables the rows, which
463
- * is the right call — re-hatch means re-onboard.
464
- *
465
- * When onboarding explicitly selected a managed profile, callers may exclude
466
- * that selected connection so the managed route remains usable for the first
467
- * post-onboarding message.
468
- */
469
- export function disableManagedConnectionsForByokHatch(
470
- db: DrizzleDb,
471
- options: { excludeConnection?: string } = {},
472
- ): void {
473
- const now = Date.now();
474
- for (const name of MANAGED_CONNECTION_NAMES) {
475
- if (name === options.excludeConnection) continue;
476
- db.update(providerConnections)
477
- .set({ status: "disabled", updatedAt: now })
478
- .where(eq(providerConnections.name, name))
479
- .run();
480
- }
481
- }
@@ -89,9 +89,8 @@ export async function resolveAuth(
89
89
  // we need the prefix "credential/openai-codex" for the refresh logic.
90
90
  const credentialPrefix = auth.credential.replace(/\/access_token$/, "");
91
91
 
92
- const { getValidCodexAccessToken } = await import(
93
- "./codex-token-refresh.js"
94
- );
92
+ const { getValidCodexAccessToken } =
93
+ await import("./codex-token-refresh.js");
95
94
  const token = await getValidCodexAccessToken(credentialPrefix);
96
95
 
97
96
  if (!token) {