@vellumai/assistant 0.7.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (666) hide show
  1. package/ARCHITECTURE.md +6 -7
  2. package/Dockerfile +1 -0
  3. package/README.md +2 -2
  4. package/__tests__/permissions/gateway-threshold-reader.test.ts +79 -139
  5. package/bun.lock +3 -0
  6. package/docs/architecture/security.md +18 -16
  7. package/knip.json +1 -0
  8. package/node_modules/@vellumai/skill-host-contracts/__tests__/client.test.ts +1 -5
  9. package/node_modules/@vellumai/skill-host-contracts/src/assistant-event.ts +0 -5
  10. package/node_modules/@vellumai/skill-host-contracts/src/client.ts +10 -16
  11. package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +1 -9
  12. package/node_modules/@vellumai/skill-host-contracts/src/tool-types.ts +12 -12
  13. package/node_modules/@vellumai/slack-text/bun.lock +24 -0
  14. package/node_modules/@vellumai/slack-text/package.json +18 -0
  15. package/node_modules/@vellumai/slack-text/src/index.test.ts +153 -0
  16. package/node_modules/@vellumai/slack-text/src/index.ts +235 -0
  17. package/node_modules/@vellumai/slack-text/tsconfig.json +20 -0
  18. package/openapi.yaml +294 -107
  19. package/package.json +4 -2
  20. package/scripts/generate-openapi.ts +16 -111
  21. package/src/__tests__/agent-wake-override-profile.test.ts +23 -1
  22. package/src/__tests__/anthropic-provider.test.ts +56 -13
  23. package/src/__tests__/app-conversation-ids-backfill.test.ts +278 -0
  24. package/src/__tests__/app-conversation-ids.test.ts +151 -0
  25. package/src/__tests__/approval-cascade.test.ts +0 -15
  26. package/src/__tests__/approval-routes-http.test.ts +6 -17
  27. package/src/__tests__/assistant-event-hub.test.ts +126 -77
  28. package/src/__tests__/assistant-event.test.ts +0 -5
  29. package/src/__tests__/assistant-events-sse-hardening.test.ts +37 -15
  30. package/src/__tests__/assistant-feature-flags-integration.test.ts +0 -29
  31. package/src/__tests__/background-shell-host-bash.test.ts +34 -43
  32. package/src/__tests__/call-controller.test.ts +1 -1
  33. package/src/__tests__/call-site-routing-provider.test.ts +193 -0
  34. package/src/__tests__/channel-approval-routes.test.ts +10 -296
  35. package/src/__tests__/channel-approvals.test.ts +25 -17
  36. package/src/__tests__/channel-guardian.test.ts +100 -146
  37. package/src/__tests__/checker.test.ts +20 -34
  38. package/src/__tests__/compact-event-conversation-id-guard.test.ts +50 -0
  39. package/src/__tests__/compaction-events.test.ts +2 -0
  40. package/src/__tests__/config-schema.test.ts +6 -48
  41. package/src/__tests__/config-watcher.test.ts +12 -0
  42. package/src/__tests__/connection-policy.test.ts +1 -52
  43. package/src/__tests__/contacts-write.test.ts +2 -64
  44. package/src/__tests__/context-image-dimensions.test.ts +1 -1
  45. package/src/__tests__/context-search-memory-source.test.ts +120 -1
  46. package/src/__tests__/context-search-memory-v2-source.test.ts +383 -0
  47. package/src/__tests__/context-search-pkb-source.test.ts +49 -0
  48. package/src/__tests__/context-search-workspace-source.test.ts +9 -22
  49. package/src/__tests__/context-window-manager.test.ts +46 -0
  50. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +2 -0
  51. package/src/__tests__/conversation-agent-loop-overflow.test.ts +102 -29
  52. package/src/__tests__/conversation-agent-loop.test.ts +980 -13
  53. package/src/__tests__/conversation-analysis-routes.test.ts +12 -10
  54. package/src/__tests__/conversation-attention-telegram.test.ts +11 -3
  55. package/src/__tests__/conversation-confirmation-signals.test.ts +0 -291
  56. package/src/__tests__/conversation-history-web-search.test.ts +4 -3
  57. package/src/__tests__/conversation-inference-profile-route.test.ts +12 -23
  58. package/src/__tests__/conversation-lifecycle.test.ts +4 -4
  59. package/src/__tests__/conversation-process-callsite.test.ts +79 -2
  60. package/src/__tests__/conversation-queue.test.ts +3 -8
  61. package/src/__tests__/conversation-routes-disk-view.test.ts +1 -161
  62. package/src/__tests__/conversation-routes-guardian-reply.test.ts +0 -32
  63. package/src/__tests__/conversation-routes-slash-commands.test.ts +75 -66
  64. package/src/__tests__/conversation-runtime-assembly.test.ts +257 -3
  65. package/src/__tests__/conversation-slash-commands.test.ts +24 -4
  66. package/src/__tests__/conversation-slash-queue.test.ts +2 -0
  67. package/src/__tests__/conversation-speed-override.test.ts +0 -3
  68. package/src/__tests__/conversation-starter-routes.test.ts +79 -2
  69. package/src/__tests__/conversation-surfaces-standalone-payloads.test.ts +12 -5
  70. package/src/__tests__/conversation-surfaces-standalone.test.ts +18 -14
  71. package/src/__tests__/conversation-surfaces-state-update.test.ts +3 -2
  72. package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +8 -46
  73. package/src/__tests__/conversation-usage.test.ts +253 -3
  74. package/src/__tests__/credential-execution-shell-lockdown.test.ts +0 -39
  75. package/src/__tests__/credential-health-service.test.ts +68 -0
  76. package/src/__tests__/credential-security-e2e.test.ts +4 -3
  77. package/src/__tests__/credential-security-invariants.test.ts +1 -5
  78. package/src/__tests__/credential-token-resolver.test.ts +180 -0
  79. package/src/__tests__/cu-unified-flow.test.ts +33 -16
  80. package/src/__tests__/daemon-assistant-events.test.ts +34 -21
  81. package/src/__tests__/daemon-credential-client.test.ts +4 -1
  82. package/src/__tests__/db-connection-isolation.test.ts +125 -0
  83. package/src/__tests__/db-migration-rollback.test.ts +101 -0
  84. package/src/__tests__/db-slack-compaction-watermark-migration.test.ts +169 -0
  85. package/src/__tests__/deterministic-verification-control-plane.test.ts +7 -80
  86. package/src/__tests__/document-conversations.test.ts +332 -0
  87. package/src/__tests__/embedding-managed-proxy-selection.test.ts +2 -2
  88. package/src/__tests__/emit-event-signal.test.ts +4 -6
  89. package/src/__tests__/events-client-registration.test.ts +193 -49
  90. package/src/__tests__/filing-service.test.ts +58 -7
  91. package/src/__tests__/first-greeting.test.ts +156 -150
  92. package/src/__tests__/fixtures/mock-chrome-extension.ts +108 -66
  93. package/src/__tests__/get-skill-detail-audit.test.ts +3 -8
  94. package/src/__tests__/guardian-binding-drift-heal.test.ts +1 -1
  95. package/src/__tests__/guardian-dispatch.test.ts +1 -1
  96. package/src/__tests__/guardian-grant-minting.test.ts +7 -2
  97. package/src/__tests__/guardian-routing-invariants.test.ts +7 -2
  98. package/src/__tests__/guardian-routing-state.test.ts +1 -1
  99. package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +32 -11
  100. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +2 -83
  101. package/src/__tests__/headless-browser-mode.test.ts +4 -9
  102. package/src/__tests__/headless-browser-navigate.test.ts +21 -20
  103. package/src/__tests__/heartbeat-service.test.ts +289 -7
  104. package/src/__tests__/helpers/channel-test-adapter.ts +2 -2
  105. package/src/__tests__/helpers/create-guardian-binding.ts +91 -0
  106. package/src/__tests__/host-bash-proxy.test.ts +46 -122
  107. package/src/__tests__/host-browser-e2e-cloud.test.ts +36 -497
  108. package/src/__tests__/host-browser-e2e-self-hosted-capability.test.ts +26 -96
  109. package/src/__tests__/host-browser-proxy.test.ts +111 -185
  110. package/src/__tests__/host-browser-routes.test.ts +45 -75
  111. package/src/__tests__/host-browser-ws-events-e2e.test.ts +26 -30
  112. package/src/__tests__/host-cu-proxy.test.ts +56 -111
  113. package/src/__tests__/host-file-proxy.test.ts +44 -98
  114. package/src/__tests__/host-file-read-tool.test.ts +42 -21
  115. package/src/__tests__/host-shell-tool.test.ts +33 -68
  116. package/src/__tests__/host-transfer-pending-interactions.test.ts +2 -18
  117. package/src/__tests__/host-transfer-proxy.test.ts +43 -53
  118. package/src/__tests__/http-user-message-parity.test.ts +0 -6
  119. package/src/__tests__/inbound-slack-persistence.test.ts +31 -0
  120. package/src/__tests__/injector-chain.test.ts +10 -5
  121. package/src/__tests__/injector-pkb-v2-silenced.test.ts +124 -0
  122. package/src/__tests__/inline-command-runner.test.ts +0 -66
  123. package/src/__tests__/inline-skill-load-permissions.test.ts +0 -2
  124. package/src/__tests__/install-skill-routing.test.ts +1 -13
  125. package/src/__tests__/llm-callsite-catalog.test.ts +34 -0
  126. package/src/__tests__/llm-catalog-parity.test.ts +90 -0
  127. package/src/__tests__/llm-context-resolution.test.ts +180 -0
  128. package/src/__tests__/llm-resolver.test.ts +80 -12
  129. package/src/__tests__/llm-usage-store.test.ts +269 -4
  130. package/src/__tests__/log-export-routes.test.ts +89 -0
  131. package/src/__tests__/managed-profile-guard.test.ts +225 -0
  132. package/src/__tests__/managed-skill-lifecycle.test.ts +0 -10
  133. package/src/__tests__/manual-token-reconciliation.test.ts +334 -0
  134. package/src/__tests__/memory-v2-static-injector.test.ts +95 -0
  135. package/src/__tests__/migration-cross-version-compatibility.test.ts +197 -291
  136. package/src/__tests__/migration-export-http.test.ts +33 -26
  137. package/src/__tests__/migration-export-streaming.test.ts +18 -10
  138. package/src/__tests__/migration-export-to-gcs.test.ts +49 -9
  139. package/src/__tests__/migration-import-commit-http.test.ts +66 -21
  140. package/src/__tests__/migration-import-from-gcs.test.ts +50 -9
  141. package/src/__tests__/migration-import-from-url.test.ts +20 -6
  142. package/src/__tests__/migration-import-preflight-http.test.ts +95 -95
  143. package/src/__tests__/migration-parity-persistence.test.ts +62 -25
  144. package/src/__tests__/migration-transport.test.ts +115 -23
  145. package/src/__tests__/migration-validate-http.test.ts +105 -80
  146. package/src/__tests__/migration-wizard.test.ts +133 -27
  147. package/src/__tests__/non-member-access-request.test.ts +1 -1
  148. package/src/__tests__/notification-guardian-path.test.ts +1 -1
  149. package/src/__tests__/oauth-store.test.ts +19 -0
  150. package/src/__tests__/platform-bash-auto-approve.test.ts +21 -12
  151. package/src/__tests__/prechat-onboarding-contract.test.ts +31 -7
  152. package/src/__tests__/pricing.test.ts +68 -4
  153. package/src/__tests__/process-message-background-slack.test.ts +331 -0
  154. package/src/__tests__/provider-managed-proxy-integration.test.ts +153 -17
  155. package/src/__tests__/provider-send-message-override-profile.test.ts +50 -0
  156. package/src/__tests__/provider-usage-tracking.test.ts +208 -0
  157. package/src/__tests__/reaction-persistence.test.ts +9 -6
  158. package/src/__tests__/rebind-secrets-screen.test.ts +53 -16
  159. package/src/__tests__/recording-handler.test.ts +64 -81
  160. package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +4 -3
  161. package/src/__tests__/relay-server.test.ts +18 -13
  162. package/src/__tests__/require-fresh-approval.test.ts +13 -22
  163. package/src/__tests__/runtime-attachment-metadata.test.ts +1 -1
  164. package/src/__tests__/runtime-events-sse-parity.test.ts +3 -4
  165. package/src/__tests__/runtime-events-sse.test.ts +3 -12
  166. package/src/__tests__/search-skills-unified.test.ts +9 -15
  167. package/src/__tests__/secret-ingress-cli.test.ts +2 -5
  168. package/src/__tests__/secret-ingress-http.test.ts +0 -4
  169. package/src/__tests__/secret-onetime-send.test.ts +4 -2
  170. package/src/__tests__/secret-prompt-log-hygiene.test.ts +24 -7
  171. package/src/__tests__/secret-prompter-channel-fallback.test.ts +42 -47
  172. package/src/__tests__/secret-response-routing.test.ts +29 -15
  173. package/src/__tests__/secret-routes-managed-proxy.test.ts +5 -1
  174. package/src/__tests__/secret-scanner.test.ts +2 -545
  175. package/src/__tests__/send-endpoint-busy.test.ts +9 -24
  176. package/src/__tests__/settings-routes.test.ts +1 -1
  177. package/src/__tests__/shell-credential-ref.test.ts +0 -8
  178. package/src/__tests__/shell-tool-proxy-mode.test.ts +0 -56
  179. package/src/__tests__/skill-script-runner-sandbox.test.ts +0 -11
  180. package/src/__tests__/skill-tool-factory.test.ts +97 -0
  181. package/src/__tests__/skills-file-content-endpoint.test.ts +9 -30
  182. package/src/__tests__/skills-files-catalog-fallback.test.ts +11 -17
  183. package/src/__tests__/slack-inbound-verification.test.ts +1 -62
  184. package/src/__tests__/subagent-fork-notifications.test.ts +57 -47
  185. package/src/__tests__/subagent-manager-notify.test.ts +70 -70
  186. package/src/__tests__/subagent-notify-parent.test.ts +80 -83
  187. package/src/__tests__/system-prompt.test.ts +115 -13
  188. package/src/__tests__/terminal-tools.test.ts +0 -89
  189. package/src/__tests__/thread-backfill.test.ts +945 -31
  190. package/src/__tests__/tool-domain-event-publisher.test.ts +0 -36
  191. package/src/__tests__/tool-execute-pipeline.test.ts +0 -6
  192. package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -16
  193. package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +9 -19
  194. package/src/__tests__/tool-executor-lifecycle-events.test.ts +4 -7
  195. package/src/__tests__/tool-executor.test.ts +12 -19
  196. package/src/__tests__/tool-metrics-listener.test.ts +0 -35
  197. package/src/__tests__/tool-side-effects-slack-dm.test.ts +1 -0
  198. package/src/__tests__/tool-trace-listener.test.ts +0 -17
  199. package/src/__tests__/transfer-progress-screen.test.ts +63 -26
  200. package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +2 -149
  201. package/src/__tests__/trusted-contact-multichannel.test.ts +2 -4
  202. package/src/__tests__/trusted-contact-verification.test.ts +1 -1
  203. package/src/__tests__/tts-catalog-parity.test.ts +16 -5
  204. package/src/__tests__/usage-attribution.test.ts +247 -0
  205. package/src/__tests__/usage-cli.test.ts +143 -0
  206. package/src/__tests__/usage-grouped-buckets.test.ts +155 -0
  207. package/src/__tests__/usage-routes.test.ts +150 -0
  208. package/src/__tests__/validation-results-screen.test.ts +39 -16
  209. package/src/__tests__/vbundle-pax-and-symlink.test.ts +12 -3
  210. package/src/__tests__/vellum-self-knowledge-inline-command.test.ts +49 -137
  211. package/src/__tests__/verification-control-plane-policy.test.ts +4 -7
  212. package/src/__tests__/voice-session-bridge.test.ts +5 -5
  213. package/src/__tests__/workspace-migration-062-drop-memory-v2-edges-json.test.ts +103 -0
  214. package/src/__tests__/workspace-migration-063-release-notes-dynamic-model-context.test.ts +77 -0
  215. package/src/__tests__/workspace-migration-064-unwind-main-agent-opus-seed.test.ts +225 -0
  216. package/src/__tests__/workspace-migration-memory-v2-init.test.ts +8 -30
  217. package/src/acp/index.ts +0 -15
  218. package/src/acp/session-manager.ts +37 -34
  219. package/src/agent/loop.ts +16 -1
  220. package/src/approvals/AGENTS.md +4 -0
  221. package/src/approvals/__tests__/guardian-feed-event.test.ts +10 -3
  222. package/src/approvals/guardian-request-resolvers.ts +10 -2
  223. package/src/backup/__tests__/backup-worker.test.ts +36 -8
  224. package/src/backup/__tests__/paths.test.ts +2 -2
  225. package/src/backup/__tests__/restore.test.ts +45 -28
  226. package/src/backup/backup-worker.ts +36 -2
  227. package/src/backup/paths.ts +9 -6
  228. package/src/browser-session/events.ts +0 -9
  229. package/src/calls/call-store.ts +1 -34
  230. package/src/calls/guardian-question-copy.ts +0 -108
  231. package/src/calls/relay-server.ts +0 -24
  232. package/src/calls/twilio-rest.ts +0 -38
  233. package/src/calls/twilio-routes.ts +1 -1
  234. package/src/calls/voice-session-bridge.ts +7 -38
  235. package/src/channels/types.ts +1 -36
  236. package/src/cli/commands/__tests__/cache.test.ts +152 -5
  237. package/src/cli/commands/__tests__/memory-v2.test.ts +14 -28
  238. package/src/cli/commands/__tests__/trust.test.ts +21 -387
  239. package/src/cli/commands/backup.ts +4 -4
  240. package/src/cli/commands/cache-fs.ts +8 -0
  241. package/src/cli/commands/cache.ts +153 -82
  242. package/src/cli/commands/clients.ts +63 -5
  243. package/src/cli/commands/completions.ts +3 -3
  244. package/src/cli/commands/contacts.ts +231 -76
  245. package/src/cli/commands/keys.ts +4 -1
  246. package/src/cli/commands/memory-v2.ts +24 -52
  247. package/src/cli/commands/oauth/shared.ts +2 -29
  248. package/src/cli/commands/pending.ts +102 -0
  249. package/src/cli/commands/skills.ts +77 -35
  250. package/src/cli/commands/trust.ts +70 -430
  251. package/src/cli/commands/usage.ts +25 -16
  252. package/src/cli/lib/daemon-credential-client.ts +14 -0
  253. package/src/cli/program.ts +2 -0
  254. package/src/cli.ts +0 -21
  255. package/src/config/__tests__/feature-flag-registry-guard.test.ts +2 -2
  256. package/src/config/bundled-skills/messaging/TOOLS.json +14 -4
  257. package/src/config/env-registry.ts +12 -2
  258. package/src/config/env.ts +3 -14
  259. package/src/config/feature-flag-registry.json +30 -30
  260. package/src/config/llm-callsite-catalog.ts +12 -0
  261. package/src/config/llm-context-resolution.ts +80 -0
  262. package/src/config/llm-resolver.ts +58 -22
  263. package/src/config/loader.ts +3 -3
  264. package/src/config/schema.ts +2 -158
  265. package/src/config/schemas/__tests__/memory-v2.test.ts +1 -0
  266. package/src/config/schemas/call-site-catalog.ts +271 -0
  267. package/src/config/schemas/calls.ts +5 -5
  268. package/src/config/schemas/inference.ts +1 -1
  269. package/src/config/schemas/ingress.ts +1 -1
  270. package/src/config/schemas/llm.ts +31 -3
  271. package/src/config/schemas/memory-retrieval.ts +2 -2
  272. package/src/config/schemas/memory-v2.ts +9 -0
  273. package/src/config/schemas/security.ts +1 -42
  274. package/src/config/schemas/services.ts +6 -6
  275. package/src/config/schemas/skills.ts +5 -5
  276. package/src/config/schemas/tts.ts +1 -1
  277. package/src/config/seed-inference-profiles.ts +117 -0
  278. package/src/config/skills.ts +0 -90
  279. package/src/config/types.ts +3 -6
  280. package/src/contacts/contact-store.ts +0 -17
  281. package/src/contacts/contacts-write.ts +1 -105
  282. package/src/context/window-manager.ts +44 -5
  283. package/src/credential-execution/process-manager.ts +34 -10
  284. package/src/credential-health/credential-health-service.ts +21 -16
  285. package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +75 -82
  286. package/src/daemon/__tests__/daemon-skill-host.test.ts +2 -9
  287. package/src/daemon/connection-policy.ts +1 -26
  288. package/src/daemon/conversation-agent-loop-handlers.ts +53 -4
  289. package/src/daemon/conversation-agent-loop.ts +277 -36
  290. package/src/daemon/conversation-history.ts +8 -8
  291. package/src/daemon/conversation-launch.ts +20 -135
  292. package/src/daemon/conversation-lifecycle.ts +1 -1
  293. package/src/daemon/conversation-messaging.ts +1 -0
  294. package/src/daemon/conversation-process.ts +83 -163
  295. package/src/daemon/conversation-runtime-assembly.ts +219 -76
  296. package/src/daemon/conversation-slash.ts +47 -5
  297. package/src/daemon/conversation-store.ts +7 -31
  298. package/src/daemon/conversation-surfaces.ts +22 -28
  299. package/src/daemon/conversation-tool-setup.ts +3 -33
  300. package/src/daemon/conversation-usage.ts +36 -0
  301. package/src/daemon/conversation.ts +117 -233
  302. package/src/daemon/daemon-control.ts +3 -71
  303. package/src/daemon/daemon-skill-host.ts +8 -11
  304. package/src/daemon/dictation-profile-store.ts +2 -26
  305. package/src/daemon/first-greeting.ts +44 -156
  306. package/src/daemon/handlers/config-channels.ts +12 -12
  307. package/src/daemon/handlers/config-ingress.ts +4 -165
  308. package/src/daemon/handlers/config-model.ts +1 -1
  309. package/src/daemon/handlers/config-voice.ts +0 -42
  310. package/src/daemon/handlers/conversations.ts +11 -190
  311. package/src/daemon/handlers/recording.ts +26 -158
  312. package/src/daemon/handlers/shared.ts +23 -71
  313. package/src/daemon/handlers/skills.ts +42 -93
  314. package/src/daemon/host-bash-proxy.ts +67 -45
  315. package/src/daemon/host-browser-proxy.ts +65 -27
  316. package/src/daemon/host-cu-proxy.ts +40 -39
  317. package/src/daemon/host-file-proxy.ts +58 -37
  318. package/src/daemon/host-transfer-proxy.ts +84 -46
  319. package/src/daemon/lifecycle.ts +49 -15
  320. package/src/daemon/message-types/conversations.ts +7 -0
  321. package/src/daemon/message-types/host-bash.ts +1 -0
  322. package/src/daemon/message-types/host-cu.ts +1 -0
  323. package/src/daemon/message-types/host-file.ts +1 -0
  324. package/src/daemon/message-types/host-transfer.ts +1 -0
  325. package/src/daemon/message-types/messages.ts +10 -9
  326. package/src/daemon/message-types/workspace.ts +1 -1
  327. package/src/daemon/process-message.ts +102 -239
  328. package/src/daemon/server.ts +13 -462
  329. package/src/daemon/shutdown-handlers.ts +2 -2
  330. package/src/daemon/tool-side-effects.ts +125 -107
  331. package/src/daemon/trust-context.ts +13 -0
  332. package/src/daemon/wake-target-adapter.ts +4 -9
  333. package/src/events/domain-events.ts +0 -8
  334. package/src/events/tool-audit-listener.ts +3 -1
  335. package/src/events/tool-domain-event-publisher.ts +0 -10
  336. package/src/events/tool-metrics-listener.ts +0 -17
  337. package/src/events/tool-trace-listener.ts +0 -14
  338. package/src/filing/filing-service.ts +13 -1
  339. package/src/heartbeat/__tests__/heartbeat-feed-event.test.ts +6 -2
  340. package/src/heartbeat/heartbeat-service.ts +23 -5
  341. package/src/home/__tests__/feed-writer.test.ts +0 -4
  342. package/src/home/__tests__/relationship-state-writer.test.ts +30 -0
  343. package/src/home/feed-writer.ts +1 -2
  344. package/src/home/relationship-state-writer.ts +16 -3
  345. package/src/ipc/__tests__/browser-ipc.test.ts +2 -12
  346. package/src/ipc/__tests__/skill-server-bidirectional.test.ts +0 -1
  347. package/src/ipc/assistant-server.ts +3 -10
  348. package/src/ipc/routes/__tests__/memory-v2-backfill.test.ts +39 -20
  349. package/src/ipc/routes/route-adapter.ts +1 -1
  350. package/src/ipc/routes/trust-rules.test.ts +0 -95
  351. package/src/ipc/skill-ipc-types.ts +41 -0
  352. package/src/ipc/skill-routes/__tests__/events-ipc.test.ts +13 -27
  353. package/src/ipc/skill-routes/__tests__/identity.test.ts +4 -23
  354. package/src/ipc/skill-routes/events.ts +12 -23
  355. package/src/ipc/skill-routes/identity.ts +4 -17
  356. package/src/ipc/skill-routes/index.ts +1 -1
  357. package/src/ipc/skill-server.ts +6 -39
  358. package/src/live-voice/__tests__/runtime-websocket-shell.test.ts +0 -8
  359. package/src/live-voice/protocol.ts +4 -13
  360. package/src/mcp/manager.ts +0 -5
  361. package/src/memory/__tests__/fixtures/memory-v2-activation-fixtures.ts +55 -0
  362. package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +127 -0
  363. package/src/memory/app-git-service.ts +0 -32
  364. package/src/memory/app-store.ts +154 -0
  365. package/src/memory/attachments-store.ts +6 -0
  366. package/src/memory/context-search/sources/memory-v2.ts +578 -0
  367. package/src/memory/context-search/sources/memory.ts +5 -0
  368. package/src/memory/context-search/sources/pkb.ts +10 -1
  369. package/src/memory/context-search/sources/workspace.ts +3 -2
  370. package/src/memory/conversation-crud.ts +29 -4
  371. package/src/memory/conversation-disk-view.ts +1 -5
  372. package/src/memory/conversation-starter-checkpoints.ts +63 -0
  373. package/src/memory/db-connection.ts +62 -0
  374. package/src/memory/db-init.ts +14 -0
  375. package/src/memory/embedding-backend.ts +3 -21
  376. package/src/memory/embedding-gemini.ts +0 -2
  377. package/src/memory/embedding-local.ts +6 -6
  378. package/src/memory/embedding-ollama.ts +6 -6
  379. package/src/memory/embedding-openai.ts +6 -6
  380. package/src/memory/embedding-types.ts +21 -0
  381. package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +3 -7
  382. package/src/memory/graph/conversation-graph-memory.ts +35 -13
  383. package/src/memory/graph/injection.test.ts +2 -2
  384. package/src/memory/graph/injection.ts +1 -1
  385. package/src/memory/guardian-action-store.ts +0 -83
  386. package/src/memory/guardian-approvals.ts +0 -48
  387. package/src/memory/indexer.ts +1 -15
  388. package/src/memory/job-handlers/conversation-starters.ts +36 -53
  389. package/src/memory/job-utils.ts +0 -6
  390. package/src/memory/jobs-store.ts +0 -1
  391. package/src/memory/jobs-worker.ts +2 -16
  392. package/src/memory/llm-request-log-store.ts +0 -41
  393. package/src/memory/llm-usage-store.ts +129 -43
  394. package/src/memory/memory-v2-activation-log-store.ts +115 -0
  395. package/src/memory/migrations/233-document-conversations.ts +54 -0
  396. package/src/memory/migrations/234-memory-v2-activation-logs.ts +55 -0
  397. package/src/memory/migrations/235-llm-usage-attribution.ts +31 -0
  398. package/src/memory/migrations/235-slack-compaction-watermark.ts +44 -0
  399. package/src/memory/migrations/236-tool-invocations-matched-rule-id.ts +26 -0
  400. package/src/memory/migrations/__tests__/234-memory-v2-activation-logs.test.ts +182 -0
  401. package/src/memory/migrations/index.ts +14 -0
  402. package/src/memory/migrations/registry.ts +24 -0
  403. package/src/memory/raw-query.ts +2 -68
  404. package/src/memory/schema/conversations.ts +7 -0
  405. package/src/memory/schema/infrastructure.ts +25 -0
  406. package/src/memory/search/semantic.ts +5 -16
  407. package/src/memory/tool-usage-store.ts +2 -0
  408. package/src/memory/usage-buckets.ts +40 -1
  409. package/src/memory/usage-grouped-buckets.ts +127 -0
  410. package/src/memory/v2/__tests__/activation.test.ts +289 -90
  411. package/src/memory/v2/__tests__/backfill-jobs.test.ts +2 -129
  412. package/src/memory/v2/__tests__/consolidation-job.test.ts +28 -11
  413. package/src/memory/v2/__tests__/edge-index.test.ts +278 -0
  414. package/src/memory/v2/__tests__/injection.test.ts +384 -15
  415. package/src/memory/v2/__tests__/migration.test.ts +64 -36
  416. package/src/memory/v2/__tests__/page-store.test.ts +191 -8
  417. package/src/memory/v2/__tests__/prompts-consolidation.test.ts +181 -0
  418. package/src/memory/v2/__tests__/skill-store.test.ts +115 -3
  419. package/src/memory/v2/__tests__/static-context.test.ts +153 -0
  420. package/src/memory/v2/activation.ts +168 -97
  421. package/src/memory/v2/backfill-jobs.ts +15 -100
  422. package/src/memory/v2/consolidation-job.ts +14 -12
  423. package/src/memory/v2/edge-index.ts +191 -0
  424. package/src/memory/v2/injection.ts +182 -58
  425. package/src/memory/v2/migration.ts +57 -64
  426. package/src/memory/v2/now-text.ts +2 -3
  427. package/src/memory/v2/page-store.ts +168 -31
  428. package/src/memory/v2/prompts/consolidation.ts +118 -42
  429. package/src/memory/v2/prompts/sweep.ts +3 -3
  430. package/src/memory/v2/skill-store.ts +55 -7
  431. package/src/memory/v2/static-context.ts +62 -0
  432. package/src/memory/v2/types.ts +10 -20
  433. package/src/memory/validation.ts +0 -11
  434. package/src/messaging/draft-store.ts +0 -6
  435. package/src/messaging/provider-types.ts +8 -0
  436. package/src/messaging/provider.ts +7 -0
  437. package/src/messaging/providers/gmail/client.ts +1 -121
  438. package/src/messaging/providers/outlook/client.ts +0 -73
  439. package/src/messaging/providers/slack/__tests__/adapter-mention-rendering.test.ts +226 -0
  440. package/src/messaging/providers/slack/adapter.ts +122 -21
  441. package/src/messaging/providers/slack/backfill.test.ts +95 -6
  442. package/src/messaging/providers/slack/backfill.ts +89 -11
  443. package/src/messaging/providers/slack/client.ts +10 -124
  444. package/src/messaging/providers/slack/message-metadata.ts +12 -2
  445. package/src/messaging/providers/slack/render-transcript.test.ts +56 -0
  446. package/src/messaging/providers/slack/render-transcript.ts +126 -25
  447. package/src/messaging/providers/slack/types.ts +1 -0
  448. package/src/oauth/connection-resolver.test.ts +8 -0
  449. package/src/oauth/connection-resolver.ts +8 -16
  450. package/src/oauth/credential-token-resolver.ts +97 -0
  451. package/src/oauth/manual-token-connection.ts +30 -34
  452. package/src/oauth/oauth-store.ts +6 -4
  453. package/src/outbound-proxy/certs.ts +0 -7
  454. package/src/outbound-proxy/config.ts +0 -74
  455. package/src/outbound-proxy/health.ts +0 -44
  456. package/src/outbound-proxy/index.ts +0 -22
  457. package/src/permissions/approval-provenance.test.ts +184 -0
  458. package/src/permissions/approval-provenance.ts +70 -0
  459. package/src/permissions/checker.ts +4 -1
  460. package/src/permissions/gateway-threshold-reader.ts +4 -1
  461. package/src/permissions/prompter.ts +9 -2
  462. package/src/permissions/secret-prompter.ts +21 -48
  463. package/src/permissions/types.ts +33 -0
  464. package/src/permissions/workspace-policy.ts +0 -5
  465. package/src/platform/sync-identity.ts +0 -8
  466. package/src/plugins/defaults/injectors.ts +69 -2
  467. package/src/plugins/defaults/overflow-reduce.ts +3 -2
  468. package/src/plugins/types.ts +8 -0
  469. package/src/prompts/system-prompt.ts +34 -70
  470. package/src/prompts/templates/BOOTSTRAP.md +52 -6
  471. package/src/prompts/update-bulletin-job.ts +2 -0
  472. package/src/providers/__tests__/retry-callsite.test.ts +138 -1
  473. package/src/providers/anthropic/client.ts +72 -33
  474. package/src/providers/call-site-routing.ts +42 -3
  475. package/src/providers/gemini/client.ts +18 -2
  476. package/src/providers/managed-proxy/context.ts +0 -5
  477. package/src/providers/model-catalog.ts +105 -19
  478. package/src/providers/openai/chat-completions-provider.ts +6 -0
  479. package/src/providers/openai/responses-provider.ts +7 -1
  480. package/src/providers/provider-send-message.ts +45 -2
  481. package/src/providers/ratelimit.ts +7 -2
  482. package/src/providers/registry.ts +14 -9
  483. package/src/providers/retry.ts +96 -8
  484. package/src/providers/types.ts +13 -0
  485. package/src/providers/usage-tracking.ts +96 -0
  486. package/src/runtime/AGENTS.md +10 -6
  487. package/src/runtime/__tests__/agent-wake.test.ts +89 -0
  488. package/src/runtime/agent-wake.ts +39 -2
  489. package/src/runtime/assistant-event-hub.ts +541 -45
  490. package/src/runtime/assistant-event.ts +1 -6
  491. package/src/runtime/auth/context.ts +0 -9
  492. package/src/runtime/auth/middleware.ts +1 -1
  493. package/src/runtime/auth/route-policy.ts +11 -9
  494. package/src/runtime/auth/token-service.ts +0 -11
  495. package/src/runtime/channel-approvals.ts +6 -2
  496. package/src/runtime/channel-verification-service.ts +3 -5
  497. package/src/runtime/http-errors.ts +0 -34
  498. package/src/runtime/http-router.ts +6 -3
  499. package/src/runtime/http-server.ts +22 -82
  500. package/src/runtime/http-types.ts +5 -0
  501. package/src/runtime/interactive-ui.ts +0 -1
  502. package/src/runtime/middleware/auth.ts +0 -20
  503. package/src/runtime/migrations/__tests__/v1-test-helpers.ts +112 -0
  504. package/src/runtime/migrations/__tests__/vbundle-builder-credentials.test.ts +11 -4
  505. package/src/runtime/migrations/__tests__/vbundle-builder-v1-shape.test.ts +253 -0
  506. package/src/runtime/migrations/__tests__/vbundle-import-credentials.test.ts +19 -6
  507. package/src/runtime/migrations/__tests__/vbundle-legacy-user-md.test.ts +71 -27
  508. package/src/runtime/migrations/__tests__/vbundle-metadata-merge-integration.test.ts +41 -2
  509. package/src/runtime/migrations/__tests__/vbundle-streaming-importer.test.ts +143 -79
  510. package/src/runtime/migrations/__tests__/vbundle-streaming-validator.test.ts +143 -23
  511. package/src/runtime/migrations/__tests__/vbundle-tar-stream.test.ts +2 -2
  512. package/src/runtime/migrations/__tests__/vbundle-validator-v1-schema.test.ts +371 -0
  513. package/src/runtime/migrations/migration-transport.ts +46 -13
  514. package/src/runtime/migrations/migration-wizard.ts +2 -2
  515. package/src/runtime/migrations/origin-mode.ts +40 -0
  516. package/src/runtime/migrations/vbundle-builder.ts +133 -79
  517. package/src/runtime/migrations/vbundle-import-analyzer.ts +9 -7
  518. package/src/runtime/migrations/vbundle-importer.ts +7 -7
  519. package/src/runtime/migrations/vbundle-metadata-merge.ts +1 -1
  520. package/src/runtime/migrations/vbundle-streaming-importer.ts +3 -3
  521. package/src/runtime/migrations/vbundle-streaming-validator.ts +48 -26
  522. package/src/runtime/migrations/vbundle-validator.ts +214 -41
  523. package/src/runtime/pending-interactions.ts +13 -4
  524. package/src/runtime/routes/__tests__/acp-routes.test.ts +0 -1
  525. package/src/runtime/routes/__tests__/backup-routes.test.ts +28 -19
  526. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +235 -0
  527. package/src/runtime/routes/__tests__/llm-call-sites-routes.test.ts +58 -0
  528. package/src/runtime/routes/__tests__/migration-export-secrets-redacted.test.ts +54 -0
  529. package/src/runtime/routes/__tests__/migration-import-credential-filter.test.ts +19 -6
  530. package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +7 -7
  531. package/src/runtime/routes/acp-routes.test.ts +0 -3
  532. package/src/runtime/routes/acp-routes.ts +3 -7
  533. package/src/runtime/routes/app-management-routes.ts +18 -9
  534. package/src/runtime/routes/approval-routes.ts +55 -14
  535. package/src/runtime/routes/avatar-routes.ts +3 -5
  536. package/src/runtime/routes/browser-routes.ts +1 -15
  537. package/src/runtime/routes/channel-guardian-routes.ts +1 -5
  538. package/src/runtime/routes/channel-readiness-routes.ts +3 -7
  539. package/src/runtime/routes/channel-route-shared.ts +2 -28
  540. package/src/runtime/routes/client-routes.ts +45 -12
  541. package/src/runtime/routes/consolidation-routes.ts +115 -0
  542. package/src/runtime/routes/conversation-list-routes.ts +12 -29
  543. package/src/runtime/routes/conversation-management-routes.ts +14 -51
  544. package/src/runtime/routes/conversation-query-routes.ts +120 -8
  545. package/src/runtime/routes/conversation-routes.ts +44 -528
  546. package/src/runtime/routes/conversation-starter-routes.ts +19 -40
  547. package/src/runtime/routes/documents-routes.ts +53 -18
  548. package/src/runtime/routes/events-routes.ts +59 -91
  549. package/src/runtime/routes/filing-routes.ts +18 -1
  550. package/src/runtime/routes/guardian-action-routes.ts +4 -9
  551. package/src/runtime/routes/host-bash-routes.ts +3 -2
  552. package/src/runtime/routes/host-browser-routes.ts +9 -33
  553. package/src/runtime/routes/host-cu-routes.ts +6 -1
  554. package/src/runtime/routes/host-file-routes.ts +3 -2
  555. package/src/runtime/routes/host-transfer-routes.ts +11 -15
  556. package/src/runtime/routes/identity-routes.ts +78 -6
  557. package/src/runtime/routes/inbound-message-handler.ts +580 -137
  558. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +2 -88
  559. package/src/runtime/routes/inbound-stages/background-dispatch.ts +3 -0
  560. package/src/runtime/routes/index.ts +4 -0
  561. package/src/runtime/routes/integrations/slack/channel.ts +0 -24
  562. package/src/runtime/routes/llm-call-sites-routes.ts +22 -0
  563. package/src/runtime/routes/memory-v2-routes.ts +10 -15
  564. package/src/runtime/routes/migration-routes.ts +188 -31
  565. package/src/runtime/routes/playground/guard.ts +1 -1
  566. package/src/runtime/routes/playground/index.ts +0 -2
  567. package/src/runtime/routes/recording-routes.ts +4 -24
  568. package/src/runtime/routes/rename-conversation-routes.ts +2 -6
  569. package/src/runtime/routes/schedule-routes.ts +3 -6
  570. package/src/runtime/routes/secret-routes.ts +87 -18
  571. package/src/runtime/routes/settings-routes.ts +29 -28
  572. package/src/runtime/routes/skills-routes.ts +12 -31
  573. package/src/runtime/routes/suggest-trust-rule-routes.ts +32 -1
  574. package/src/runtime/routes/task-routes.ts +6 -6
  575. package/src/runtime/routes/trust-rules-routes.ts +3 -94
  576. package/src/runtime/routes/types.ts +4 -4
  577. package/src/runtime/routes/upgrade-broadcast-routes.ts +3 -10
  578. package/src/runtime/routes/usage-routes.ts +87 -10
  579. package/src/runtime/routes/user-routes.ts +17 -31
  580. package/src/runtime/routes/work-items-routes.ts +1 -4
  581. package/src/runtime/services/__tests__/analyze-conversation.test.ts +2 -2
  582. package/src/runtime/services/analyze-conversation.ts +7 -17
  583. package/src/runtime/services/conversation-serializer.ts +2 -4
  584. package/src/runtime/verification-outbound-actions.ts +1 -1
  585. package/src/runtime/verification-rate-limiter.ts +1 -1
  586. package/src/schedule/schedule-store.ts +0 -16
  587. package/src/security/secret-scanner.ts +14 -547
  588. package/src/security/secure-keys.ts +31 -11
  589. package/src/security/token-manager.ts +7 -3
  590. package/src/signals/cancel.ts +16 -25
  591. package/src/signals/conversation-undo.ts +2 -27
  592. package/src/signals/emit-event.ts +1 -2
  593. package/src/signals/user-message.ts +108 -22
  594. package/src/skills/catalog-install.ts +1 -0
  595. package/src/skills/clawhub.ts +2 -2
  596. package/src/skills/inline-command-runner.ts +1 -7
  597. package/src/subagent/manager.ts +67 -84
  598. package/src/tasks/task-store.ts +1 -28
  599. package/src/telemetry/types.ts +6 -0
  600. package/src/telemetry/usage-telemetry-reporter.test.ts +38 -15
  601. package/src/telemetry/usage-telemetry-reporter.ts +3 -5
  602. package/src/tools/acp/spawn.test.ts +1 -2
  603. package/src/tools/acp/steer.test.ts +1 -2
  604. package/src/tools/browser/__tests__/browser-status.test.ts +44 -127
  605. package/src/tools/browser/browser-execution.ts +31 -147
  606. package/src/tools/browser/cdp-client/__tests__/factory.test.ts +92 -68
  607. package/src/tools/browser/cdp-client/factory.ts +48 -76
  608. package/src/tools/browser/cdp-client/index.ts +1 -14
  609. package/src/tools/executor.ts +44 -31
  610. package/src/tools/host-filesystem/edit.ts +3 -2
  611. package/src/tools/host-filesystem/read.ts +3 -2
  612. package/src/tools/host-filesystem/transfer.test.ts +45 -42
  613. package/src/tools/host-filesystem/transfer.ts +4 -3
  614. package/src/tools/host-filesystem/write.ts +3 -2
  615. package/src/tools/host-terminal/host-shell.ts +4 -3
  616. package/src/tools/network/script-proxy/index.ts +1 -10
  617. package/src/tools/permission-checker.ts +66 -1
  618. package/src/tools/skills/sandbox-runner.ts +1 -6
  619. package/src/tools/skills/skill-tool-factory.ts +32 -0
  620. package/src/tools/terminal/safe-env.ts +1 -0
  621. package/src/tools/terminal/shell.ts +2 -78
  622. package/src/tools/types.ts +12 -39
  623. package/src/tts/__tests__/provider-catalog.test.ts +2 -2
  624. package/src/tts/provider-catalog.ts +1 -1
  625. package/src/usage/actors.ts +2 -1
  626. package/src/usage/attribution.ts +185 -0
  627. package/src/usage/pricing.ts +166 -0
  628. package/src/usage/types.ts +14 -0
  629. package/src/util/json.ts +13 -0
  630. package/src/util/logger.ts +3 -3
  631. package/src/util/pricing.ts +50 -3
  632. package/src/work-items/work-item-runner.ts +15 -42
  633. package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +4 -3
  634. package/src/workspace/migrations/052-seed-default-inference-profiles.ts +3 -3
  635. package/src/workspace/migrations/060-memory-v2-init.ts +2 -18
  636. package/src/workspace/migrations/061-move-backup-key-to-workspace.ts +59 -0
  637. package/src/workspace/migrations/062-drop-memory-v2-edges-json.ts +27 -0
  638. package/src/workspace/migrations/063-release-notes-dynamic-model-context.ts +70 -0
  639. package/src/workspace/migrations/064-unwind-main-agent-opus-seed.ts +64 -0
  640. package/src/workspace/migrations/registry.ts +8 -0
  641. package/src/workspace/provider-commit-message-generator.ts +3 -3
  642. package/src/__tests__/sandbox-diagnostics.test.ts +0 -138
  643. package/src/__tests__/sandbox-host-parity.test.ts +0 -1024
  644. package/src/__tests__/secret-detection-handler.test.ts +0 -67
  645. package/src/__tests__/secret-scanner-executor.test.ts +0 -450
  646. package/src/__tests__/tcc-sandbox-deny.test.ts +0 -198
  647. package/src/__tests__/terminal-sandbox.test.ts +0 -374
  648. package/src/__tests__/tool-notification-listener.test.ts +0 -65
  649. package/src/context/__tests__/microcompact.test.ts +0 -805
  650. package/src/context/microcompact.ts +0 -443
  651. package/src/daemon/handlers/slack-channel-oauth-install.ts +0 -197
  652. package/src/events/tool-notification-listener.ts +0 -17
  653. package/src/ipc/routes/__tests__/memory-v2-validate.test.ts +0 -219
  654. package/src/memory/v2/__tests__/edges.test.ts +0 -435
  655. package/src/memory/v2/edges.ts +0 -217
  656. package/src/prompts/__tests__/system-prompt-memory-v2.test.ts +0 -197
  657. package/src/runtime/__tests__/chrome-extension-registry.test.ts +0 -518
  658. package/src/runtime/__tests__/client-registry.test.ts +0 -271
  659. package/src/runtime/chrome-extension-registry.ts +0 -368
  660. package/src/runtime/client-registry.ts +0 -254
  661. package/src/runtime/routes/inbound-stages/verification-intercept.ts +0 -329
  662. package/src/tools/secret-detection-handler.ts +0 -269
  663. package/src/tools/terminal/backends/native.ts +0 -327
  664. package/src/tools/terminal/backends/types.ts +0 -37
  665. package/src/tools/terminal/sandbox-diagnostics.ts +0 -87
  666. package/src/tools/terminal/sandbox.ts +0 -40
@@ -20,6 +20,7 @@ import { isAbsolute } from "node:path";
20
20
 
21
21
  import { getConfig } from "../../config/loader.js";
22
22
  import { isCesShellLockdownEnabled } from "../../credential-execution/feature-gates.js";
23
+ import { HostBashProxy } from "../../daemon/host-bash-proxy.js";
23
24
  import { RiskLevel } from "../../permissions/types.js";
24
25
  import type { ToolDefinition } from "../../providers/types.js";
25
26
  import { isUntrustedTrustClass } from "../../runtime/actor-trust-resolver.js";
@@ -191,7 +192,7 @@ class HostShellTool implements Tool {
191
192
 
192
193
  // Proxy to connected client for execution on the user's machine
193
194
  // when a capable client is available (managed/cloud-hosted mode).
194
- if (context.hostBashProxy?.isAvailable()) {
195
+ if (HostBashProxy.instance.isAvailable()) {
195
196
  const rawSec =
196
197
  typeof input.timeout_seconds === "number"
197
198
  ? input.timeout_seconds
@@ -220,7 +221,7 @@ class HostShellTool implements Tool {
220
221
 
221
222
  const bgId = generateBackgroundToolId();
222
223
  const abortController = new AbortController();
223
- const proxyPromise = context.hostBashProxy.request(
224
+ const proxyPromise = HostBashProxy.instance.request(
224
225
  {
225
226
  command,
226
227
  working_dir: rawWorkingDir as string | undefined,
@@ -266,7 +267,7 @@ class HostShellTool implements Tool {
266
267
  };
267
268
  }
268
269
 
269
- return context.hostBashProxy.request(
270
+ return HostBashProxy.instance.request(
270
271
  {
271
272
  command,
272
273
  working_dir: rawWorkingDir as string | undefined,
@@ -1,10 +1 @@
1
- export {
2
- createSession,
3
- getActiveSession,
4
- getOrStartSession,
5
- getSessionEnv,
6
- getSessionsForConversation,
7
- startSession,
8
- stopAllSessions,
9
- stopSession,
10
- } from "./session-manager.js";
1
+ export { getOrStartSession, getSessionEnv } from "./session-manager.js";
@@ -1,4 +1,5 @@
1
1
  import { getIsContainerized } from "../config/env-registry.js";
2
+ import { mapApprovalProvenance } from "../permissions/approval-provenance.js";
2
3
  import {
3
4
  check,
4
5
  classifyRisk,
@@ -8,6 +9,7 @@ import {
8
9
  } from "../permissions/checker.js";
9
10
  import { getAutoApproveThreshold } from "../permissions/gateway-threshold-reader.js";
10
11
  import type { PermissionPrompter } from "../permissions/prompter.js";
12
+ import type { ApprovalMode, ApprovalReason, RiskThreshold } from "../permissions/types.js";
11
13
  import { RiskLevel } from "../permissions/types.js";
12
14
  import { getLogger } from "../util/logger.js";
13
15
  import { buildPolicyContext } from "./policy-context.js";
@@ -23,6 +25,8 @@ export type PermissionDecision =
23
25
  decision: string;
24
26
  riskLevel: string;
25
27
  wasPrompted?: boolean;
28
+ /** ID of the trust rule that matched this invocation (if any). Always set when a rule matched, even for non-classifier tools where riskMeta is absent. */
29
+ matchedTrustRuleId?: string;
26
30
  /** Risk metadata from the classifier assessment cache (when available). */
27
31
  riskMeta?: {
28
32
  riskLevel: string;
@@ -31,12 +35,17 @@ export type PermissionDecision =
31
35
  riskDirectoryScopeOptions?: Array<{ scope: string; label: string }>;
32
36
  isContainerized?: boolean;
33
37
  };
38
+ approvalMode?: ApprovalMode;
39
+ approvalReason?: ApprovalReason;
40
+ riskThreshold?: RiskThreshold;
34
41
  }
35
42
  | {
36
43
  allowed: false;
37
44
  decision: string;
38
45
  riskLevel: string;
39
46
  content: string;
47
+ /** ID of the trust rule that matched this invocation (if any). Always set when a rule matched, even for non-classifier tools where riskMeta is absent. */
48
+ matchedTrustRuleId?: string;
40
49
  /** Risk metadata from the classifier assessment cache (when available). */
41
50
  riskMeta?: {
42
51
  riskLevel: string;
@@ -45,6 +54,9 @@ export type PermissionDecision =
45
54
  riskDirectoryScopeOptions?: Array<{ scope: string; label: string }>;
46
55
  isContainerized?: boolean;
47
56
  };
57
+ approvalMode?: ApprovalMode;
58
+ approvalReason?: ApprovalReason;
59
+ riskThreshold?: RiskThreshold;
48
60
  };
49
61
 
50
62
  export class PermissionChecker {
@@ -120,6 +132,19 @@ export class PermissionChecker {
120
132
  context.signal,
121
133
  );
122
134
 
135
+ // Extract the matched rule ID for propagation. Returned as a top-level
136
+ // field on PermissionDecision so it reaches the executor even when
137
+ // riskMeta is absent (non-classifier tools like MCP don't populate it).
138
+ const matchedTrustRuleId = result.matchedRule?.id;
139
+
140
+ // Resolved threshold snapshot for provenance. getAutoApproveThreshold
141
+ // returns from cache (populated by check() above), so this is free.
142
+ const conversationThreshold = await getAutoApproveThreshold(
143
+ policyContext.conversationId,
144
+ policyContext.executionContext,
145
+ );
146
+ const riskThreshold = conversationThreshold as RiskThreshold;
147
+
123
148
  // Some callers force prompting for side-effect tools even when a
124
149
  // trust/allow rule would auto-allow. Deny decisions are preserved -
125
150
  // only allow → prompt promotion happens here.
@@ -155,16 +180,21 @@ export class PermissionChecker {
155
180
  requestId: context.requestId,
156
181
  riskLevel,
157
182
  riskReason,
183
+ matchedTrustRuleId,
158
184
  decision: "deny",
159
185
  reason: result.reason,
160
186
  durationMs,
161
187
  });
188
+ const provenance = mapApprovalProvenance("denied", { matchedTrustRuleId });
162
189
  return {
163
190
  allowed: false,
164
191
  decision: "denied",
165
192
  riskLevel,
166
193
  content: result.reason,
194
+ matchedTrustRuleId,
167
195
  riskMeta,
196
+ ...provenance,
197
+ riskThreshold,
168
198
  };
169
199
  }
170
200
 
@@ -189,7 +219,10 @@ export class PermissionChecker {
189
219
  allowed: true,
190
220
  decision: "platform_auto_approve",
191
221
  riskLevel,
222
+ matchedTrustRuleId,
192
223
  riskMeta,
224
+ ...mapApprovalProvenance("platform_auto_approve", {}),
225
+ riskThreshold,
193
226
  };
194
227
  }
195
228
 
@@ -245,7 +278,10 @@ export class PermissionChecker {
245
278
  allowed: true,
246
279
  decision: "guardian_auto_approve",
247
280
  riskLevel,
281
+ matchedTrustRuleId,
248
282
  riskMeta,
283
+ ...mapApprovalProvenance("guardian_auto_approve", {}),
284
+ riskThreshold: bgThreshold as RiskThreshold,
249
285
  };
250
286
  }
251
287
  }
@@ -268,6 +304,7 @@ export class PermissionChecker {
268
304
  requestId: context.requestId,
269
305
  riskLevel,
270
306
  riskReason,
307
+ matchedTrustRuleId,
271
308
  decision: "deny",
272
309
  reason: "Non-interactive session: no client to approve prompt",
273
310
  durationMs,
@@ -277,7 +314,13 @@ export class PermissionChecker {
277
314
  decision: "denied",
278
315
  riskLevel,
279
316
  content: `Permission denied: tool "${name}" requires user approval but no interactive client is connected. The tool was not executed. To allow this tool in non-interactive sessions, add a trust rule via permission settings.`,
317
+ matchedTrustRuleId,
280
318
  riskMeta,
319
+ // Do not pass matchedTrustRuleId here: an ask-rule match put us in
320
+ // the prompt path, but the *reason* for denial is no interactive
321
+ // client, not a deny rule. Always emit no_interactive_client.
322
+ ...mapApprovalProvenance("denied", {}),
323
+ riskThreshold,
281
324
  };
282
325
  }
283
326
 
@@ -352,6 +395,7 @@ export class PermissionChecker {
352
395
  requestId: context.requestId,
353
396
  riskLevel,
354
397
  riskReason,
398
+ matchedTrustRuleId,
355
399
  decision: "deny",
356
400
  reason: denialReason,
357
401
  durationMs,
@@ -361,7 +405,14 @@ export class PermissionChecker {
361
405
  decision,
362
406
  riskLevel,
363
407
  content: denialMessage,
408
+ matchedTrustRuleId,
364
409
  riskMeta,
410
+ ...mapApprovalProvenance(decision, {
411
+ wasTimeout: response.wasTimeout,
412
+ wasSystemCancel: response.wasSystemCancel,
413
+ wasAbort: response.wasAbort,
414
+ }),
415
+ riskThreshold,
365
416
  };
366
417
  }
367
418
 
@@ -370,12 +421,26 @@ export class PermissionChecker {
370
421
  decision,
371
422
  riskLevel,
372
423
  wasPrompted: true,
424
+ matchedTrustRuleId,
373
425
  riskMeta,
426
+ ...mapApprovalProvenance(decision, { wasPrompted: true }),
427
+ riskThreshold,
374
428
  };
375
429
  }
376
430
 
377
431
  // result.decision === 'allow'
378
- return { allowed: true, decision: "allow", riskLevel, riskMeta };
432
+ return {
433
+ allowed: true,
434
+ decision: "allow",
435
+ riskLevel,
436
+ matchedTrustRuleId,
437
+ riskMeta,
438
+ ...mapApprovalProvenance("allow", {
439
+ hasSandboxAutoApprove: result.hasSandboxAutoApprove,
440
+ matchedTrustRuleId,
441
+ }),
442
+ riskThreshold,
443
+ };
379
444
  } catch (err) {
380
445
  if (err instanceof Error) {
381
446
  (err as Error & { riskLevel?: string }).riskLevel = riskLevel;
@@ -6,7 +6,6 @@ import { join, resolve } from "node:path";
6
6
  import { computeSkillVersionHash } from "../../skills/version-hash.js";
7
7
  import { safeStringSlice } from "../../util/unicode.js";
8
8
  import { buildSanitizedEnv } from "../terminal/safe-env.js";
9
- import { wrapCommand } from "../terminal/sandbox.js";
10
9
  import type { ToolContext, ToolExecutionResult } from "../types.js";
11
10
 
12
11
  const DEFAULT_TIMEOUT_MS = 30_000;
@@ -138,12 +137,8 @@ function spawnRunner(
138
137
  const stderrChunks: Buffer[] = [];
139
138
  let timedOut = false;
140
139
 
141
- // The assistant runs exclusively in Docker or platform-managed
142
- // environments where the container provides isolation.
143
- const sandboxConfig = { enabled: false } as const;
144
-
145
140
  const bunRunCmd = "bun run __skill_runner.ts";
146
- const wrapped = wrapCommand(bunRunCmd, runDir, sandboxConfig);
141
+ const wrapped = { command: "bash", args: ["-c", "--", bunRunCmd] };
147
142
 
148
143
  const env = buildSanitizedEnv();
149
144
  env.__SKILL_INPUT_JSON = JSON.stringify(input);
@@ -15,6 +15,31 @@ const riskMap: Record<SkillToolEntry["risk"], RiskLevel> = {
15
15
  high: RiskLevel.High,
16
16
  };
17
17
 
18
+ /**
19
+ * Validate that all keys in `input` are declared in the tool's input_schema
20
+ * properties. Returns an error result listing unknown parameters, or undefined
21
+ * if validation passes.
22
+ */
23
+ function validateNoUnknownParams(
24
+ toolName: string,
25
+ input: Record<string, unknown>,
26
+ schema: SkillToolEntry["input_schema"],
27
+ ): ToolExecutionResult | undefined {
28
+ const properties = schema?.properties;
29
+ if (!properties) return undefined;
30
+
31
+ const knownKeys = new Set(Object.keys(properties));
32
+ const unknownKeys = Object.keys(input).filter((k) => !knownKeys.has(k));
33
+ if (unknownKeys.length === 0) return undefined;
34
+
35
+ const listed = unknownKeys.map((k) => `"${k}"`).join(", ");
36
+ const supported = [...knownKeys].map((k) => `"${k}"`).join(", ");
37
+ return {
38
+ content: `Unknown parameter${unknownKeys.length > 1 ? "s" : ""} ${listed} for tool "${toolName}". Supported parameters: ${supported}. Remove unsupported parameters and retry.`,
39
+ isError: true,
40
+ };
41
+ }
42
+
18
43
  /**
19
44
  * Create a runtime Tool object from a manifest entry.
20
45
  * Maps SkillToolEntry metadata to the Tool interface and routes execution
@@ -50,6 +75,13 @@ export function createSkillTool(
50
75
  input: Record<string, unknown>,
51
76
  context: ToolContext,
52
77
  ): Promise<ToolExecutionResult> {
78
+ const validationError = validateNoUnknownParams(
79
+ entry.name,
80
+ input,
81
+ entry.input_schema,
82
+ );
83
+ if (validationError) return validationError;
84
+
53
85
  return runSkillToolScript(skillDir, entry.executor, input, context, {
54
86
  target: entry.execution_target,
55
87
  expectedSkillVersionHash: versionHash,
@@ -54,6 +54,7 @@ export const SAFE_ENV_VARS = [
54
54
  "VELLUM_PROFILER_MIN_FREE_MB",
55
55
  "VELLUM_MEMORY_LIMIT",
56
56
  "VELLUM_CPU_LIMIT",
57
+ "VELLUM_MINIKUBE_STORAGE_SIZE",
57
58
  "VELLUM_BACKUP_DIR",
58
59
  "VELLUM_BACKUP_KEY_PATH",
59
60
  ] as const;
@@ -1,7 +1,5 @@
1
1
  import type { ChildProcess } from "node:child_process";
2
2
  import { spawn } from "node:child_process";
3
- import { homedir } from "node:os";
4
- import { dirname, join } from "node:path";
5
3
 
6
4
  import { getConfig } from "../../config/loader.js";
7
5
  import { isCesShellLockdownEnabled } from "../../credential-execution/feature-gates.js";
@@ -11,11 +9,7 @@ import { isUntrustedTrustClass } from "../../runtime/actor-trust-resolver.js";
11
9
  import { wakeAgentForOpportunity } from "../../runtime/agent-wake.js";
12
10
  import { redactSecrets } from "../../security/secret-scanner.js";
13
11
  import { getLogger } from "../../util/logger.js";
14
- import {
15
- getDataDir,
16
- getProtectedDir,
17
- getWorkspaceDir,
18
- } from "../../util/platform.js";
12
+ import { getDataDir } from "../../util/platform.js";
19
13
  import {
20
14
  generateBackgroundToolId,
21
15
  isBackgroundToolLimitReached,
@@ -37,7 +31,6 @@ import type {
37
31
  ToolExecutionResult,
38
32
  } from "../types.js";
39
33
  import { buildSanitizedEnv } from "./safe-env.js";
40
- import { wrapCommand } from "./sandbox.js";
41
34
 
42
35
  /** Build a credential ref resolution trace for diagnostic logging. */
43
36
  function buildCredentialRefTrace(
@@ -48,62 +41,6 @@ function buildCredentialRefTrace(
48
41
  return { rawRefs, resolvedIds, unresolvedRefs };
49
42
  }
50
43
 
51
- /**
52
- * Build the list of absolute paths that should be blocked from read access
53
- * inside the sandbox when CES shell lockdown is active.
54
- *
55
- * Blocked paths include:
56
- * - Gateway security directory (credential store secrets, CES data)
57
- * - ~/.vellum/workspace/data/db/ - database files that may contain credential metadata
58
- * - CES bootstrap socket directory (/run/ces-bootstrap/ or CES_BOOTSTRAP_SOCKET_DIR)
59
- * - CES managed-mode data root (CES_DATA_DIR, or /ces-data when CES_MANAGED_MODE is set)
60
- */
61
- function buildCesProtectedPaths(): string[] {
62
- const protectedDirs = process.env.GATEWAY_SECURITY_DIR
63
- ? [process.env.GATEWAY_SECURITY_DIR]
64
- : Array.from(
65
- new Set([join(homedir(), ".vellum", "protected"), getProtectedDir()]),
66
- );
67
- const paths = [...protectedDirs, join(getWorkspaceDir(), "data", "db")];
68
-
69
- // CES bootstrap socket directory - block access to the Unix socket that
70
- // accepts RPC commands from the assistant process.
71
- const bootstrapSocketDir =
72
- process.env["CES_BOOTSTRAP_SOCKET_DIR"] || "/run/ces-bootstrap";
73
- paths.push(bootstrapSocketDir);
74
-
75
- // IPC socket directories - block access to the shared emptyDir volumes
76
- // used for gateway↔daemon IPC in containerized deployments.
77
- const gatewayIpcSocketDir =
78
- process.env["GATEWAY_IPC_SOCKET_DIR"] || "/run/gateway-ipc";
79
- paths.push(gatewayIpcSocketDir);
80
-
81
- const assistantIpcSocketDir =
82
- process.env["ASSISTANT_IPC_SOCKET_DIR"] || "/run/assistant-ipc";
83
- paths.push(assistantIpcSocketDir);
84
-
85
- // If a full socket path override is set (without the dir env var), block
86
- // its parent directory as well.
87
- if (
88
- !process.env["CES_BOOTSTRAP_SOCKET_DIR"] &&
89
- process.env["CES_BOOTSTRAP_SOCKET"]
90
- ) {
91
- paths.push(dirname(process.env["CES_BOOTSTRAP_SOCKET"]));
92
- }
93
-
94
- // CES managed-mode private data root - in managed deployments the CES
95
- // data lives outside the Vellum root, so it isn't covered by the
96
- // gateway security directory entry above.
97
- const cesDataDir = process.env["CES_DATA_DIR"];
98
- if (cesDataDir) {
99
- paths.push(cesDataDir);
100
- } else if (process.env["CES_MANAGED_MODE"]) {
101
- paths.push("/ces-data");
102
- }
103
-
104
- return paths;
105
- }
106
-
107
44
  const log = getLogger("shell-tool");
108
45
 
109
46
  class ShellTool implements Tool {
@@ -292,10 +229,6 @@ class ShellTool implements Tool {
292
229
  "Executing shell command",
293
230
  );
294
231
 
295
- // The assistant runs exclusively in Docker or platform-managed
296
- // environments where the container provides isolation.
297
- const sandboxConfig = { enabled: false } as const;
298
-
299
232
  // Acquire proxy session if proxied mode is requested.
300
233
  // `getOrStartSession` serializes per-conversation so concurrent proxied
301
234
  // commands share a single session instead of each creating one.
@@ -337,16 +270,7 @@ class ShellTool implements Tool {
337
270
  env.VELLUM_UNTRUSTED_SHELL = "1";
338
271
  }
339
272
 
340
- // CES shell lockdown: build deny-read paths for protected credential
341
- // data, the protected dir, and data sub-dirs that contain secrets.
342
- const denyReadPaths: string[] | undefined = shellLockdownActive
343
- ? buildCesProtectedPaths()
344
- : undefined;
345
-
346
- const wrapped = wrapCommand(command, context.workingDir, sandboxConfig, {
347
- networkMode,
348
- denyReadPaths,
349
- });
273
+ const wrapped = { command: "bash", args: ["-c", "--", command] };
350
274
 
351
275
  // -----------------------------------------------------------------------
352
276
  // Background mode: spawn and return immediately. The process output is
@@ -10,15 +10,10 @@ import type {
10
10
  ToolExecutionStartEvent,
11
11
  ToolPermissionDeniedEvent,
12
12
  ToolPermissionPromptEvent,
13
- ToolSecretDetectedEvent,
14
13
  } from "@vellumai/skill-host-contracts";
15
14
 
16
15
  import type { InterfaceId } from "../channels/types.js";
17
16
  import type { CesClient } from "../credential-execution/client.js";
18
- import type { HostBashProxy } from "../daemon/host-bash-proxy.js";
19
- import type { HostBrowserProxy } from "../daemon/host-browser-proxy.js";
20
- import type { HostFileProxy } from "../daemon/host-file-proxy.js";
21
- import type { HostTransferProxy } from "../daemon/host-transfer-proxy.js";
22
17
  import type { SecretPromptResult } from "../permissions/secret-prompter.js";
23
18
  import type { ContentBlock } from "../providers/types.js";
24
19
  import type { TrustClass } from "../runtime/actor-trust-resolver.js";
@@ -59,7 +54,6 @@ export type {
59
54
  ToolExecutionStartEvent,
60
55
  ToolPermissionDeniedEvent,
61
56
  ToolPermissionPromptEvent,
62
- ToolSecretDetectedEvent,
63
57
  } from "@vellumai/skill-host-contracts";
64
58
  export { RiskLevel } from "@vellumai/skill-host-contracts";
65
59
 
@@ -97,6 +91,14 @@ export interface ToolExecutionResult {
97
91
  riskLevel?: string;
98
92
  /** Human-readable reason for the risk classification. */
99
93
  riskReason?: string;
94
+ /** ID of the trust rule that matched this invocation (if any). */
95
+ matchedTrustRuleId?: string;
96
+ /** How the decision was reached: prompted, auto, blocked, or unknown (legacy). */
97
+ approvalMode?: string;
98
+ /** Why the decision was reached (stable enum for client display). */
99
+ approvalReason?: string;
100
+ /** Snapshot of the auto-approve threshold at the time of execution. */
101
+ riskThreshold?: string;
100
102
  /** Whether the daemon is running in a containerized (Docker) environment. */
101
103
  isContainerized?: boolean;
102
104
  /** Scope options ladder for the rule editor (narrowest to broadest). */
@@ -134,6 +136,8 @@ export interface ToolExecutedEvent {
134
136
  requestId?: string;
135
137
  executionTarget?: ExecutionTarget;
136
138
  riskLevel: string;
139
+ /** ID of the trust rule that matched this invocation (if any). */
140
+ matchedTrustRuleId?: string;
137
141
  decision: string;
138
142
  durationMs: number;
139
143
  result: ToolExecutionResult;
@@ -144,8 +148,7 @@ export type ToolLifecycleEvent =
144
148
  | ToolPermissionPromptEvent
145
149
  | ToolPermissionDeniedEvent
146
150
  | ToolExecutedEvent
147
- | ToolExecutionErrorEvent
148
- | ToolSecretDetectedEvent;
151
+ | ToolExecutionErrorEvent;
149
152
 
150
153
  export type ToolLifecycleEventHandler = (
151
154
  event: ToolLifecycleEvent,
@@ -164,7 +167,7 @@ export interface ToolContext {
164
167
  onOutput?: (chunk: string) => void;
165
168
  /** Abort signal for cooperative cancellation. Tools should check this periodically. */
166
169
  signal?: AbortSignal;
167
- /** Optional callback for tool lifecycle events (start/prompt/deny/execute/error/secret_detected). */
170
+ /** Optional callback for tool lifecycle events (start/prompt/deny/execute/error). */
168
171
  onToolLifecycleEvent?: ToolLifecycleEventHandler;
169
172
  /** Optional resolver for proxy tools - delegates execution to an external client. */
170
173
  proxyToolResolver?: ProxyToolResolver;
@@ -239,14 +242,6 @@ export interface ToolContext {
239
242
  channelPermissionChannelId?: string;
240
243
  /** The tool_use block ID from the LLM response, used to correlate confirmation prompts with specific tool invocations. */
241
244
  toolUseId?: string;
242
- /** Optional proxy for delegating host_bash execution to a connected client (managed/cloud-hosted mode). */
243
- hostBashProxy?: HostBashProxy;
244
- /** Optional proxy for delegating CDP commands to a connected client (managed/cloud-hosted mode). */
245
- hostBrowserProxy?: HostBrowserProxy;
246
- /** Optional proxy for delegating host_file_read/write/edit execution to a connected client (managed/cloud-hosted mode). */
247
- hostFileProxy?: HostFileProxy;
248
- /** Optional proxy for delegating bidirectional file transfers between sandbox and host (managed/cloud-hosted mode). */
249
- hostTransferProxy?: HostTransferProxy;
250
245
  /** True when the assistant is running as a platform-managed remote instance. Used to auto-approve sandboxed bash tools. */
251
246
  isPlatformHosted?: boolean;
252
247
  /** CES RPC client for credential execution operations. When present, the executor can bridge CES approval flows. */
@@ -259,28 +254,6 @@ export interface ToolContext {
259
254
  * to cdp-inspect or local Playwright.
260
255
  */
261
256
  transportInterface?: InterfaceId;
262
- /**
263
- * True when the host browser proxy's sender was overridden by a
264
- * registry-routed extension connection (ChromeExtensionRegistry WebSocket).
265
- * The CDP factory uses this to distinguish between an SSE-backed proxy
266
- * (macOS, no extension) and an extension-backed proxy: only the latter
267
- * should suppress desktop-auto cdp-inspect when temporarily unavailable,
268
- * because the extension transport was explicitly expected and the
269
- * disconnection is transient. An SSE-backed proxy that reports
270
- * unavailable (e.g. non-interactive turn) should NOT suppress
271
- * cdp-inspect — the proxy was never expected to service browser requests.
272
- */
273
- hostBrowserRegistryRouted?: boolean;
274
- /**
275
- * Connected clients that support the `host_browser` capability, populated
276
- * from the ClientRegistry. Used by `browser status` to report accurate
277
- * extension availability even when no proxy is bound to the current
278
- * conversation (e.g. when called from the CLI without a conversation ID).
279
- */
280
- connectedBrowserClients?: Array<{
281
- clientId: string;
282
- interfaceId: string;
283
- }>;
284
257
  /**
285
258
  * The per-turn inference-profile override the agent loop is currently
286
259
  * running under, propagated through tool context so subagent-spawn tools
@@ -172,9 +172,9 @@ describe("Deepgram catalog entry", () => {
172
172
  expect(entry.capabilities.supportedFormats).toContain("opus");
173
173
  });
174
174
 
175
- test("requires a bare API key stored under 'deepgram'", () => {
175
+ test("requires an API key stored under 'credential/deepgram/api_key'", () => {
176
176
  const apiKeySecret = entry.secretRequirements.find(
177
- (s) => s.credentialStoreKey === "deepgram",
177
+ (s) => s.credentialStoreKey === "credential/deepgram/api_key",
178
178
  );
179
179
  expect(apiKeySecret).toBeDefined();
180
180
  expect(apiKeySecret!.displayName).toContain("Deepgram");
@@ -152,7 +152,7 @@ const CATALOG: readonly TtsProviderCatalogEntry[] = [
152
152
  },
153
153
  secretRequirements: [
154
154
  {
155
- credentialStoreKey: "deepgram",
155
+ credentialStoreKey: "credential/deepgram/api_key",
156
156
  displayName: "Deepgram API Key",
157
157
  setCommand: "assistant keys set deepgram <key>",
158
158
  },
@@ -9,4 +9,5 @@ export type UsageActor =
9
9
  | "ambient_analyzer"
10
10
  | "suggestion_generator"
11
11
  | "computer_use_agent"
12
- | "memory_embedding";
12
+ | "memory_embedding"
13
+ | "llm_call_site";