@vellumai/assistant 0.4.44 → 0.4.45

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 (681) hide show
  1. package/.prettierignore +4 -0
  2. package/ARCHITECTURE.md +34 -31
  3. package/README.md +4 -4
  4. package/bun.lock +10 -35
  5. package/docs/architecture/integrations.md +102 -197
  6. package/docs/architecture/keychain-broker.md +1 -1
  7. package/docs/architecture/memory.md +2 -2
  8. package/docs/architecture/scheduling.md +1 -1
  9. package/docs/architecture/security.md +11 -11
  10. package/docs/error-handling.md +1 -1
  11. package/docs/trusted-contact-access.md +3 -3
  12. package/drizzle/meta/0000_snapshot.json +34 -100
  13. package/drizzle/meta/_journal.json +1 -1
  14. package/drizzle.config.ts +4 -4
  15. package/package.json +3 -2
  16. package/scripts/capture-x-graphql.ts +237 -141
  17. package/scripts/generate-bundled-tool-registry.ts +223 -0
  18. package/src/__tests__/access-request-decision.test.ts +0 -1
  19. package/src/__tests__/actor-token-service.test.ts +23 -24
  20. package/src/__tests__/agent-loop.test.ts +0 -131
  21. package/src/__tests__/always-loaded-tools-guard.test.ts +71 -0
  22. package/src/__tests__/amazon-cdp-integration.test.ts +11 -9
  23. package/src/__tests__/approval-primitive.test.ts +0 -1
  24. package/src/__tests__/approval-routes-http.test.ts +11 -1
  25. package/src/__tests__/asset-materialize-tool.test.ts +0 -1
  26. package/src/__tests__/asset-search-tool.test.ts +0 -1
  27. package/src/__tests__/assistant-attachment-directive.test.ts +1 -1
  28. package/src/__tests__/assistant-events-sse-hardening.test.ts +0 -1
  29. package/src/__tests__/assistant-feature-flag-guardrails.test.ts +0 -2
  30. package/src/__tests__/assistant-feature-flags-integration.test.ts +70 -18
  31. package/src/__tests__/assistant-id-boundary-guard.test.ts +6 -6
  32. package/src/__tests__/attachments-store.test.ts +0 -1
  33. package/src/__tests__/avatar-e2e.test.ts +74 -115
  34. package/src/__tests__/avatar-router.test.ts +25 -62
  35. package/src/__tests__/browser-manager.test.ts +24 -0
  36. package/src/__tests__/browser-skill-baseline-tool-payload.test.ts +4 -3
  37. package/src/__tests__/browser-skill-endstate.test.ts +8 -11
  38. package/src/__tests__/btw-routes.test.ts +326 -0
  39. package/src/__tests__/bundled-skill-retrieval-guard.test.ts +23 -9
  40. package/src/__tests__/call-controller.test.ts +0 -1
  41. package/src/__tests__/call-conversation-messages.test.ts +0 -1
  42. package/src/__tests__/call-domain.test.ts +0 -1
  43. package/src/__tests__/call-pointer-messages.test.ts +0 -1
  44. package/src/__tests__/call-recovery.test.ts +0 -1
  45. package/src/__tests__/call-routes-http.test.ts +0 -1
  46. package/src/__tests__/call-store.test.ts +0 -1
  47. package/src/__tests__/canonical-guardian-store.test.ts +0 -1
  48. package/src/__tests__/channel-approval-routes.test.ts +1 -1
  49. package/src/__tests__/channel-approvals.test.ts +1 -1
  50. package/src/__tests__/channel-delivery-store.test.ts +0 -1
  51. package/src/__tests__/channel-guardian.test.ts +5 -7
  52. package/src/__tests__/channel-retry-sweep.test.ts +0 -1
  53. package/src/__tests__/checker.test.ts +4 -11
  54. package/src/__tests__/compaction.benchmark.test.ts +16 -14
  55. package/src/__tests__/computer-use-session-lifecycle.test.ts +10 -11
  56. package/src/__tests__/computer-use-session-working-dir.test.ts +2 -6
  57. package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +2 -5
  58. package/src/__tests__/computer-use-tools.test.ts +35 -31
  59. package/src/__tests__/config-schema.test.ts +11 -15
  60. package/src/__tests__/config-watcher.test.ts +0 -1
  61. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
  62. package/src/__tests__/conflict-store.test.ts +0 -1
  63. package/src/__tests__/connection-policy.test.ts +4 -7
  64. package/src/__tests__/contacts-tools.test.ts +0 -1
  65. package/src/__tests__/context-memory-e2e.test.ts +2 -4
  66. package/src/__tests__/context-overflow-reducer.test.ts +2 -4
  67. package/src/__tests__/context-window-manager.test.ts +147 -60
  68. package/src/__tests__/contradiction-checker.test.ts +0 -1
  69. package/src/__tests__/conversation-attention-store.test.ts +0 -1
  70. package/src/__tests__/conversation-attention-telegram.test.ts +1 -1
  71. package/src/__tests__/conversation-pairing.test.ts +2 -2
  72. package/src/__tests__/conversation-routes-guardian-reply.test.ts +25 -1
  73. package/src/__tests__/conversation-routes-slash-commands.test.ts +381 -0
  74. package/src/__tests__/conversation-store.test.ts +0 -1
  75. package/src/__tests__/conversation-unread-route.test.ts +1 -2
  76. package/src/__tests__/credential-security-invariants.test.ts +7 -8
  77. package/src/__tests__/cross-provider-web-search.test.ts +353 -0
  78. package/src/__tests__/daemon-assistant-events.test.ts +6 -7
  79. package/src/__tests__/db-schedule-syntax-migration.test.ts +15 -3
  80. package/src/__tests__/delete-managed-skill-tool.test.ts +5 -9
  81. package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -1
  82. package/src/__tests__/diagnostics-export.test.ts +189 -0
  83. package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
  84. package/src/__tests__/emit-signal-routing-intent.test.ts +3 -3
  85. package/src/__tests__/entity-extractor.test.ts +0 -1
  86. package/src/__tests__/entity-search.test.ts +0 -1
  87. package/src/__tests__/ephemeral-permissions.test.ts +2 -4
  88. package/src/__tests__/file-read-tool.test.ts +86 -0
  89. package/src/__tests__/followup-tools.test.ts +0 -1
  90. package/src/__tests__/frontmatter.test.ts +77 -34
  91. package/src/__tests__/gateway-only-enforcement.test.ts +0 -1
  92. package/src/__tests__/gateway-only-guard.test.ts +1 -1
  93. package/src/__tests__/guardian-action-conversation-turn.test.ts +0 -1
  94. package/src/__tests__/guardian-action-followup-executor.test.ts +0 -1
  95. package/src/__tests__/guardian-action-followup-store.test.ts +0 -1
  96. package/src/__tests__/guardian-action-grant-mint-consume.test.ts +0 -1
  97. package/src/__tests__/guardian-action-late-reply.test.ts +0 -1
  98. package/src/__tests__/guardian-action-store.test.ts +0 -1
  99. package/src/__tests__/guardian-action-sweep.test.ts +0 -1
  100. package/src/__tests__/guardian-decision-primitive-canonical.test.ts +0 -1
  101. package/src/__tests__/guardian-dispatch.test.ts +1 -2
  102. package/src/__tests__/guardian-grant-minting.test.ts +1 -1
  103. package/src/__tests__/guardian-outbound-http.test.ts +0 -1
  104. package/src/__tests__/guardian-principal-id-roundtrip.test.ts +0 -1
  105. package/src/__tests__/guardian-routing-invariants.test.ts +1 -1
  106. package/src/__tests__/guardian-routing-state.test.ts +0 -1
  107. package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -1
  108. package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +3 -5
  109. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +28 -426
  110. package/src/__tests__/host-bash-proxy.test.ts +335 -0
  111. package/src/__tests__/host-file-proxy.test.ts +374 -0
  112. package/src/__tests__/host-shell-tool.test.ts +147 -1
  113. package/src/__tests__/http-user-message-parity.test.ts +361 -0
  114. package/src/__tests__/inbound-invite-redemption.test.ts +0 -1
  115. package/src/__tests__/integration-status.test.ts +3 -8
  116. package/src/__tests__/intent-routing.test.ts +7 -46
  117. package/src/__tests__/invite-redemption-service.test.ts +0 -1
  118. package/src/__tests__/invite-routes-http.test.ts +0 -1
  119. package/src/__tests__/llm-usage-store.test.ts +0 -1
  120. package/src/__tests__/managed-avatar-client.test.ts +101 -55
  121. package/src/__tests__/managed-skill-lifecycle.test.ts +9 -18
  122. package/src/__tests__/managed-store.test.ts +94 -21
  123. package/src/__tests__/media-reuse-story.e2e.test.ts +0 -1
  124. package/src/__tests__/memory-context-benchmark.benchmark.test.ts +2 -4
  125. package/src/__tests__/memory-lifecycle-e2e.test.ts +0 -1
  126. package/src/__tests__/memory-recall-quality.test.ts +0 -1
  127. package/src/__tests__/memory-regressions.experimental.test.ts +0 -1
  128. package/src/__tests__/memory-regressions.test.ts +0 -1
  129. package/src/__tests__/memory-retrieval.benchmark.test.ts +0 -1
  130. package/src/__tests__/memory-upsert-concurrency.test.ts +0 -1
  131. package/src/__tests__/messaging-send-tool.test.ts +35 -0
  132. package/src/__tests__/messaging-skill-split.test.ts +138 -0
  133. package/src/__tests__/migration-cross-version-compatibility.test.ts +0 -1
  134. package/src/__tests__/migration-export-http.test.ts +2 -3
  135. package/src/__tests__/migration-import-commit-http.test.ts +1 -2
  136. package/src/__tests__/migration-import-preflight-http.test.ts +1 -2
  137. package/src/__tests__/migration-validate-http.test.ts +1 -2
  138. package/src/__tests__/native-web-search.test.ts +475 -0
  139. package/src/__tests__/navigate-settings-tab.test.ts +84 -0
  140. package/src/__tests__/non-member-access-request.test.ts +0 -1
  141. package/src/__tests__/notification-broadcaster.test.ts +15 -15
  142. package/src/__tests__/notification-decision-strategy.test.ts +6 -6
  143. package/src/__tests__/notification-deep-link.test.ts +7 -7
  144. package/src/__tests__/notification-guardian-path.test.ts +2 -3
  145. package/src/__tests__/notification-telegram-adapter.test.ts +1 -1
  146. package/src/__tests__/notification-thread-candidates.test.ts +4 -4
  147. package/src/__tests__/onboarding-starter-tasks.test.ts +0 -1
  148. package/src/__tests__/playbook-execution.test.ts +0 -1
  149. package/src/__tests__/playbook-tools.test.ts +0 -1
  150. package/src/__tests__/profile-compiler.test.ts +0 -1
  151. package/src/__tests__/provider-managed-proxy-integration.test.ts +25 -0
  152. package/src/__tests__/qdrant-collection-migration.test.ts +223 -0
  153. package/src/__tests__/recording-handler.test.ts +30 -94
  154. package/src/__tests__/registry.test.ts +28 -35
  155. package/src/__tests__/relay-server.test.ts +0 -1
  156. package/src/__tests__/ride-shotgun-handler.test.ts +4 -20
  157. package/src/__tests__/runtime-attachment-metadata.test.ts +0 -1
  158. package/src/__tests__/runtime-events-sse-parity.test.ts +3 -4
  159. package/src/__tests__/runtime-events-sse.test.ts +0 -1
  160. package/src/__tests__/sandbox-diagnostics.test.ts +0 -1
  161. package/src/__tests__/scaffold-managed-skill-tool.test.ts +30 -28
  162. package/src/__tests__/schedule-store.test.ts +441 -1
  163. package/src/__tests__/schedule-tools.test.ts +468 -7
  164. package/src/__tests__/scheduler-recurrence.test.ts +196 -23
  165. package/src/__tests__/scoped-approval-grants.test.ts +0 -1
  166. package/src/__tests__/scoped-grant-security-matrix.test.ts +0 -1
  167. package/src/__tests__/secret-prompt-log-hygiene.test.ts +6 -3
  168. package/src/__tests__/secret-response-routing.test.ts +4 -1
  169. package/src/__tests__/send-endpoint-busy.test.ts +14 -2
  170. package/src/__tests__/send-notification-tool.test.ts +0 -7
  171. package/src/__tests__/sequence-store.test.ts +0 -1
  172. package/src/__tests__/server-history-render.test.ts +1 -2
  173. package/src/__tests__/session-abort-tool-results.test.ts +0 -1
  174. package/src/__tests__/session-agent-loop.test.ts +46 -6
  175. package/src/__tests__/session-confirmation-signals.test.ts +0 -1
  176. package/src/__tests__/session-conflict-gate.test.ts +2 -6
  177. package/src/__tests__/session-error.test.ts +5 -14
  178. package/src/__tests__/session-init.benchmark.test.ts +3 -5
  179. package/src/__tests__/session-load-history-repair.test.ts +0 -1
  180. package/src/__tests__/session-media-retry.test.ts +12 -74
  181. package/src/__tests__/session-pre-run-repair.test.ts +0 -1
  182. package/src/__tests__/session-profile-injection.test.ts +2 -6
  183. package/src/__tests__/session-provider-retry-repair.test.ts +2 -6
  184. package/src/__tests__/session-queue.test.ts +94 -139
  185. package/src/__tests__/session-skill-tools.test.ts +115 -115
  186. package/src/__tests__/session-slash-known.test.ts +0 -1
  187. package/src/__tests__/session-slash-queue.test.ts +0 -1
  188. package/src/__tests__/session-slash-unknown.test.ts +0 -1
  189. package/src/__tests__/session-surfaces-task-progress.test.ts +34 -0
  190. package/src/__tests__/session-usage.test.ts +0 -1
  191. package/src/__tests__/session-workspace-cache-state.test.ts +2 -6
  192. package/src/__tests__/session-workspace-injection.test.ts +2 -6
  193. package/src/__tests__/session-workspace-tool-tracking.test.ts +2 -6
  194. package/src/__tests__/skill-feature-flags-integration.test.ts +180 -184
  195. package/src/__tests__/skill-feature-flags.test.ts +125 -18
  196. package/src/__tests__/skill-load-feature-flag.test.ts +1 -2
  197. package/src/__tests__/skill-load-tool.test.ts +194 -2
  198. package/src/__tests__/skill-projection-feature-flag.test.ts +27 -16
  199. package/src/__tests__/skill-projection.benchmark.test.ts +15 -14
  200. package/src/__tests__/skills.test.ts +14 -53
  201. package/src/__tests__/slack-channel-config.test.ts +0 -1
  202. package/src/__tests__/slack-inbound-verification.test.ts +0 -1
  203. package/src/__tests__/slack-skill.test.ts +1 -1
  204. package/src/__tests__/subagent-tools.test.ts +2 -2
  205. package/src/__tests__/system-prompt.test.ts +4 -3
  206. package/src/__tests__/task-compiler.test.ts +0 -1
  207. package/src/__tests__/task-management-tools.test.ts +0 -1
  208. package/src/__tests__/task-memory-cleanup.test.ts +0 -1
  209. package/src/__tests__/task-runner.test.ts +0 -1
  210. package/src/__tests__/task-scheduler.test.ts +0 -1
  211. package/src/__tests__/terminal-tools.test.ts +0 -1
  212. package/src/__tests__/test-support/computer-use-skill-harness.ts +2 -4
  213. package/src/__tests__/thread-seed-composer.test.ts +5 -5
  214. package/src/__tests__/tool-approval-handler.test.ts +0 -1
  215. package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -1
  216. package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +0 -1
  217. package/src/__tests__/tool-executor.test.ts +8 -86
  218. package/src/__tests__/tool-grant-request-escalation.test.ts +0 -1
  219. package/src/__tests__/tool-notification-listener.test.ts +1 -1
  220. package/src/__tests__/tool-preview-lifecycle.test.ts +416 -0
  221. package/src/__tests__/trust-store.test.ts +80 -4
  222. package/src/__tests__/trusted-contact-approval-notifier.test.ts +0 -1
  223. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +0 -1
  224. package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +0 -1
  225. package/src/__tests__/trusted-contact-multichannel.test.ts +0 -1
  226. package/src/__tests__/trusted-contact-verification.test.ts +0 -1
  227. package/src/__tests__/twilio-provider.test.ts +0 -1
  228. package/src/__tests__/twilio-routes.test.ts +0 -1
  229. package/src/__tests__/{request-file-tool.test.ts → ui-file-upload-surface.test.ts} +11 -72
  230. package/src/__tests__/update-bulletin.test.ts +0 -1
  231. package/src/__tests__/usage-cache-backfill-migration.test.ts +0 -1
  232. package/src/__tests__/usage-routes.test.ts +0 -1
  233. package/src/__tests__/verification-control-plane-policy.test.ts +4 -4
  234. package/src/__tests__/voice-invite-redemption.test.ts +0 -1
  235. package/src/__tests__/voice-scoped-grant-consumer.test.ts +0 -1
  236. package/src/__tests__/voice-session-bridge.test.ts +9 -1
  237. package/src/__tests__/web-fetch.test.ts +57 -0
  238. package/src/__tests__/workspace-git-service.test.ts +5 -14
  239. package/src/__tests__/workspace-policy.test.ts +0 -1
  240. package/src/agent/loop.ts +22 -34
  241. package/src/bundler/bundle-signer.ts +4 -4
  242. package/src/calls/call-controller.ts +1 -1
  243. package/src/calls/relay-server.ts +1 -1
  244. package/src/calls/twilio-rest.ts +1 -1
  245. package/src/calls/voice-session-bridge.ts +3 -1
  246. package/src/cli/__tests__/notifications.test.ts +3 -4
  247. package/src/cli/commands/map.ts +2 -6
  248. package/src/cli/commands/mcp.ts +73 -15
  249. package/src/cli/commands/notifications.ts +4 -4
  250. package/src/cli/commands/sessions.ts +9 -1
  251. package/src/cli/commands/skills.ts +6 -10
  252. package/src/cli/http-client.ts +2 -3
  253. package/src/cli/main-screen.tsx +10 -10
  254. package/src/cli/program.ts +0 -4
  255. package/src/cli/reference.ts +0 -2
  256. package/src/cli.ts +15 -9
  257. package/src/config/__tests__/bundled-tool-registry-guard.test.ts +120 -0
  258. package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +11 -0
  259. package/src/config/bundled-skills/app-builder/SKILL.md +6 -1
  260. package/src/config/bundled-skills/browser/SKILL.md +6 -1
  261. package/src/config/bundled-skills/chatgpt-import/SKILL.md +5 -1
  262. package/src/config/bundled-skills/claude-code/SKILL.md +5 -1
  263. package/src/config/bundled-skills/computer-use/SKILL.md +6 -1
  264. package/src/config/bundled-skills/computer-use/TOOLS.json +6 -69
  265. package/src/config/bundled-skills/computer-use/tools/computer-use-click.ts +10 -1
  266. package/src/config/bundled-skills/contacts/SKILL.md +10 -1
  267. package/src/config/bundled-skills/contacts/TOOLS.json +35 -0
  268. package/src/config/bundled-skills/{messaging → contacts}/tools/google-contacts.ts +9 -2
  269. package/src/config/bundled-skills/document/SKILL.md +4 -1
  270. package/src/config/bundled-skills/doordash/SKILL.md +8 -1
  271. package/src/config/bundled-skills/doordash/lib/shared/platform.ts +4 -1
  272. package/src/config/bundled-skills/followups/SKILL.md +4 -1
  273. package/src/config/bundled-skills/gmail/SKILL.md +180 -0
  274. package/src/config/bundled-skills/gmail/TOOLS.json +506 -0
  275. package/src/config/bundled-skills/gmail/tools/gmail-archive.ts +149 -0
  276. package/src/config/bundled-skills/gmail/tools/gmail-attachments.ts +110 -0
  277. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-draft.ts +1 -1
  278. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-filters.ts +1 -1
  279. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-follow-up.ts +1 -1
  280. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-forward.ts +1 -1
  281. package/src/config/bundled-skills/gmail/tools/gmail-label.ts +50 -0
  282. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-outreach-scan.ts +8 -90
  283. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-send-draft.ts +1 -1
  284. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-sender-digest.ts +2 -2
  285. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-trash.ts +1 -1
  286. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-unsubscribe.ts +1 -1
  287. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-vacation.ts +1 -1
  288. package/src/config/bundled-skills/gmail/tools/shared.ts +47 -0
  289. package/src/config/bundled-skills/google-calendar/SKILL.md +5 -1
  290. package/src/config/bundled-skills/image-studio/SKILL.md +5 -1
  291. package/src/config/bundled-skills/knowledge-graph/SKILL.md +4 -1
  292. package/src/config/bundled-skills/media-processing/SKILL.md +7 -13
  293. package/src/config/bundled-skills/media-processing/TOOLS.json +0 -22
  294. package/src/config/bundled-skills/media-processing/tools/generate-clip.ts +12 -1
  295. package/src/config/bundled-skills/messaging/SKILL.md +23 -139
  296. package/src/config/bundled-skills/messaging/TOOLS.json +33 -1215
  297. package/src/config/bundled-skills/messaging/tools/gmail-mime-helpers.ts +42 -0
  298. package/src/config/bundled-skills/messaging/tools/messaging-send.ts +165 -2
  299. package/src/config/bundled-skills/messaging/tools/messaging-sender-digest.ts +1 -13
  300. package/src/config/bundled-skills/messaging/tools/shared.ts +81 -34
  301. package/src/config/bundled-skills/notifications/SKILL.md +5 -1
  302. package/src/config/bundled-skills/orchestration/SKILL.md +30 -0
  303. package/src/config/bundled-skills/orchestration/TOOLS.json +35 -0
  304. package/src/config/bundled-skills/{reminder/tools/reminder-create.ts → orchestration/tools/swarm-delegate.ts} +3 -3
  305. package/src/config/bundled-skills/phone-calls/SKILL.md +9 -1
  306. package/src/config/bundled-skills/playbooks/SKILL.md +4 -1
  307. package/src/config/bundled-skills/schedule/SKILL.md +70 -9
  308. package/src/config/bundled-skills/schedule/TOOLS.json +38 -6
  309. package/src/config/bundled-skills/screen-watch/SKILL.md +28 -0
  310. package/src/config/bundled-skills/screen-watch/TOOLS.json +35 -0
  311. package/src/config/bundled-skills/{reminder/tools/reminder-cancel.ts → screen-watch/tools/start-screen-watch.ts} +3 -3
  312. package/src/config/bundled-skills/sequences/SKILL.md +47 -0
  313. package/src/config/bundled-skills/sequences/TOOLS.json +340 -0
  314. package/src/config/bundled-skills/sequences/tools/sequence-update.ts +128 -0
  315. package/src/config/bundled-skills/sequences/tools/shared.ts +9 -0
  316. package/src/config/bundled-skills/settings/SKILL.md +12 -0
  317. package/src/config/bundled-skills/settings/TOOLS.json +112 -0
  318. package/src/config/bundled-skills/settings/tools/navigate-settings-tab.ts +43 -0
  319. package/src/config/bundled-skills/settings/tools/open-system-settings.ts +52 -0
  320. package/src/config/bundled-skills/{computer-use/tools/computer-use-right-click.ts → settings/tools/set-avatar.ts} +2 -6
  321. package/src/{tools/system/voice-config.ts → config/bundled-skills/settings/tools/voice-config-update.ts} +59 -96
  322. package/src/config/bundled-skills/skill-management/SKILL.md +18 -0
  323. package/src/config/bundled-skills/skill-management/TOOLS.json +90 -0
  324. package/src/config/bundled-skills/{computer-use/tools/computer-use-double-click.ts → skill-management/tools/delete-managed.ts} +2 -6
  325. package/src/config/bundled-skills/skill-management/tools/scaffold-managed.ts +12 -0
  326. package/src/config/bundled-skills/slack/SKILL.md +5 -1
  327. package/src/config/bundled-skills/subagent/SKILL.md +4 -1
  328. package/src/config/bundled-skills/tasks/SKILL.md +5 -2
  329. package/src/config/bundled-skills/transcribe/SKILL.md +4 -1
  330. package/src/config/bundled-skills/watcher/SKILL.md +4 -1
  331. package/src/config/bundled-tool-registry.ts +118 -107
  332. package/src/config/env.ts +5 -2
  333. package/src/config/feature-flag-registry.json +25 -9
  334. package/src/config/loader.ts +10 -2
  335. package/src/config/schema.ts +19 -16
  336. package/src/config/schemas/inference.ts +12 -22
  337. package/src/config/schemas/memory-storage.ts +19 -1
  338. package/src/config/schemas/platform.ts +0 -16
  339. package/src/config/skill-state.ts +11 -8
  340. package/src/config/skills.ts +83 -32
  341. package/src/context/token-estimator.ts +11 -0
  342. package/src/context/window-manager.ts +180 -151
  343. package/src/daemon/computer-use-session.ts +11 -43
  344. package/src/daemon/daemon-control.ts +4 -1
  345. package/src/daemon/handlers/config-channels.ts +5 -9
  346. package/src/daemon/handlers/config-ingress.ts +0 -4
  347. package/src/daemon/handlers/config-model.ts +7 -13
  348. package/src/daemon/handlers/config-telegram.ts +4 -8
  349. package/src/daemon/handlers/config-voice.ts +2 -5
  350. package/src/daemon/handlers/dictation.ts +2 -12
  351. package/src/daemon/handlers/identity.ts +0 -105
  352. package/src/daemon/handlers/recording.ts +3 -23
  353. package/src/daemon/handlers/session-history.ts +1 -1
  354. package/src/daemon/handlers/sessions.ts +53 -72
  355. package/src/daemon/handlers/shared.ts +7 -28
  356. package/src/daemon/handlers/skills.ts +31 -27
  357. package/src/daemon/host-bash-proxy.ts +148 -0
  358. package/src/daemon/host-file-proxy.ts +135 -0
  359. package/src/daemon/lifecycle.ts +49 -24
  360. package/src/daemon/mcp-reload-service.ts +123 -0
  361. package/src/daemon/message-protocol.ts +6 -0
  362. package/src/daemon/message-types/browser.ts +1 -1
  363. package/src/daemon/message-types/computer-use.ts +1 -4
  364. package/src/daemon/message-types/guardian-actions.ts +1 -1
  365. package/src/daemon/message-types/host-bash.ts +18 -0
  366. package/src/daemon/message-types/host-file.ts +44 -0
  367. package/src/daemon/message-types/integrations.ts +1 -67
  368. package/src/daemon/message-types/messages.ts +15 -0
  369. package/src/daemon/message-types/schedules.ts +11 -27
  370. package/src/daemon/message-types/sessions.ts +2 -1
  371. package/src/daemon/message-types/settings.ts +1 -1
  372. package/src/daemon/message-types/shared.ts +1 -1
  373. package/src/daemon/ride-shotgun-handler.ts +2 -42
  374. package/src/daemon/server.ts +43 -10
  375. package/src/daemon/session-agent-loop-handlers.ts +48 -7
  376. package/src/daemon/session-agent-loop.ts +97 -66
  377. package/src/daemon/session-attachments.ts +1 -1
  378. package/src/daemon/session-error.ts +17 -16
  379. package/src/daemon/session-lifecycle.ts +20 -1
  380. package/src/daemon/session-media-retry.ts +1 -15
  381. package/src/daemon/session-messaging.ts +14 -6
  382. package/src/daemon/session-process.ts +36 -7
  383. package/src/daemon/session-queue-manager.ts +62 -103
  384. package/src/daemon/session-runtime-assembly.ts +27 -0
  385. package/src/daemon/session-skill-tools.ts +12 -11
  386. package/src/daemon/session-slash.ts +7 -0
  387. package/src/daemon/session-surfaces.ts +19 -97
  388. package/src/daemon/session-tool-setup.ts +146 -6
  389. package/src/daemon/session.ts +77 -13
  390. package/src/errors.ts +0 -2
  391. package/src/export/formatter.ts +6 -0
  392. package/src/mcp/mcp-oauth-provider.ts +1 -3
  393. package/src/media/avatar-router.ts +20 -28
  394. package/src/media/avatar-types.ts +7 -14
  395. package/src/media/managed-avatar-client.ts +70 -34
  396. package/src/memory/conversation-title-service.ts +1 -2
  397. package/src/memory/db-init.ts +16 -0
  398. package/src/memory/embedding-backend.ts +129 -27
  399. package/src/memory/embedding-gemini.test.ts +256 -0
  400. package/src/memory/embedding-gemini.ts +47 -13
  401. package/src/memory/embedding-local.ts +14 -2
  402. package/src/memory/embedding-ollama.ts +15 -2
  403. package/src/memory/embedding-openai.ts +15 -2
  404. package/src/memory/embedding-types.test.ts +116 -0
  405. package/src/memory/embedding-types.ts +61 -0
  406. package/src/memory/fingerprint.ts +1 -1
  407. package/src/memory/indexer.ts +25 -1
  408. package/src/memory/job-handlers/embedding.test.ts +258 -0
  409. package/src/memory/job-handlers/embedding.ts +81 -1
  410. package/src/memory/job-handlers/index-maintenance.ts +35 -1
  411. package/src/memory/job-handlers/media-processing.ts +11 -1
  412. package/src/memory/job-utils.ts +21 -6
  413. package/src/memory/jobs-store.ts +5 -1
  414. package/src/memory/jobs-worker.ts +8 -0
  415. package/src/memory/message-content.ts +66 -0
  416. package/src/memory/migrations/100-core-tables.ts +1 -31
  417. package/src/memory/migrations/104-core-indexes.ts +0 -11
  418. package/src/memory/migrations/145-drop-accounts-table.ts +19 -0
  419. package/src/memory/migrations/146-schedule-oneshot-routing.ts +94 -0
  420. package/src/memory/migrations/147-migrate-reminders-to-schedules.ts +129 -0
  421. package/src/memory/migrations/148-drop-reminders-table.ts +18 -0
  422. package/src/memory/migrations/index.ts +4 -0
  423. package/src/memory/migrations/registry.ts +19 -0
  424. package/src/memory/qdrant-client.ts +158 -43
  425. package/src/memory/retriever.test.ts +0 -1
  426. package/src/memory/retriever.ts +12 -2
  427. package/src/memory/schema/infrastructure.ts +5 -29
  428. package/src/memory/search/formatting.ts +34 -9
  429. package/src/memory/search/semantic.ts +57 -2
  430. package/src/memory/search/types.ts +2 -1
  431. package/src/notifications/AGENTS.md +2 -2
  432. package/src/notifications/README.md +59 -58
  433. package/src/notifications/adapters/macos.ts +1 -1
  434. package/src/notifications/broadcaster.ts +5 -5
  435. package/src/notifications/copy-composer.ts +1 -1
  436. package/src/notifications/decision-engine.ts +2 -2
  437. package/src/notifications/destination-resolver.ts +2 -2
  438. package/src/notifications/emit-signal.ts +8 -8
  439. package/src/notifications/signal.ts +1 -1
  440. package/src/notifications/thread-seed-composer.ts +1 -1
  441. package/src/oauth/connect-orchestrator.ts +1 -1
  442. package/src/oauth/token-persistence.ts +1 -1
  443. package/src/permissions/checker.ts +12 -1
  444. package/src/permissions/defaults.ts +10 -14
  445. package/src/permissions/trust-store.ts +37 -0
  446. package/src/permissions/workspace-policy.ts +0 -1
  447. package/src/prompts/__tests__/build-cli-reference-section.test.ts +11 -0
  448. package/src/prompts/computer-use-prompt.ts +1 -1
  449. package/src/prompts/system-prompt.ts +29 -30
  450. package/src/prompts/templates/SOUL.md +1 -2
  451. package/src/prompts/templates/UPDATES.md +16 -7
  452. package/src/providers/anthropic/client.ts +87 -33
  453. package/src/providers/gemini/client.ts +6 -0
  454. package/src/providers/managed-proxy/constants.ts +5 -0
  455. package/src/providers/openai/client.ts +15 -0
  456. package/src/providers/registry.ts +2 -2
  457. package/src/providers/types.ts +24 -2
  458. package/src/runtime/AGENTS.md +18 -0
  459. package/src/runtime/assistant-event-hub.ts +2 -3
  460. package/src/runtime/assistant-event.ts +4 -4
  461. package/src/runtime/auth/__tests__/context.test.ts +5 -5
  462. package/src/runtime/auth/__tests__/credential-service.test.ts +0 -1
  463. package/src/runtime/auth/__tests__/guard-tests.test.ts +2 -2
  464. package/src/runtime/auth/__tests__/{ipc-auth-context.test.ts → local-auth-context.test.ts} +21 -21
  465. package/src/runtime/auth/__tests__/route-policy.test.ts +2 -2
  466. package/src/runtime/auth/__tests__/scopes.test.ts +7 -7
  467. package/src/runtime/auth/__tests__/subject.test.ts +8 -8
  468. package/src/runtime/auth/__tests__/token-service.test.ts +0 -1
  469. package/src/runtime/auth/route-policy.ts +8 -4
  470. package/src/runtime/auth/scopes.ts +1 -1
  471. package/src/runtime/auth/subject.ts +4 -4
  472. package/src/runtime/auth/token-service.ts +0 -23
  473. package/src/runtime/auth/types.ts +3 -3
  474. package/src/runtime/guardian-action-followup-executor.ts +1 -1
  475. package/src/runtime/guardian-action-grant-minter.ts +1 -1
  476. package/src/runtime/guardian-action-service.ts +3 -3
  477. package/src/runtime/http-server.ts +15 -2
  478. package/src/runtime/invite-service.ts +3 -3
  479. package/src/runtime/local-actor-identity.ts +17 -22
  480. package/src/runtime/pending-interactions.ts +21 -9
  481. package/src/runtime/routes/app-management-routes.ts +2 -3
  482. package/src/runtime/routes/approval-routes.ts +1 -3
  483. package/src/runtime/routes/btw-routes.ts +155 -0
  484. package/src/runtime/routes/computer-use-routes.ts +77 -31
  485. package/src/runtime/routes/conversation-routes.ts +230 -46
  486. package/src/runtime/routes/diagnostics-routes.ts +63 -29
  487. package/src/runtime/routes/documents-routes.ts +2 -2
  488. package/src/runtime/routes/global-search-routes.ts +1 -1
  489. package/src/runtime/routes/host-bash-routes.ts +83 -0
  490. package/src/runtime/routes/host-file-routes.ts +79 -0
  491. package/src/runtime/routes/integrations/slack/share.ts +1 -1
  492. package/src/runtime/routes/log-export-routes.ts +120 -0
  493. package/src/runtime/routes/mcp-routes.ts +20 -0
  494. package/src/runtime/routes/migration-routes.ts +3 -3
  495. package/src/runtime/routes/pairing-routes.ts +1 -1
  496. package/src/runtime/routes/recording-routes.ts +6 -4
  497. package/src/runtime/routes/schedule-routes.ts +31 -5
  498. package/src/runtime/routes/session-management-routes.ts +2 -6
  499. package/src/runtime/routes/session-query-routes.ts +18 -15
  500. package/src/runtime/routes/settings-routes.ts +7 -261
  501. package/src/runtime/routes/skills-routes.ts +7 -6
  502. package/src/runtime/routes/subagents-routes.ts +4 -10
  503. package/src/runtime/routes/surface-action-routes.ts +3 -14
  504. package/src/runtime/routes/surface-content-routes.ts +22 -5
  505. package/src/runtime/routes/work-items-routes.ts +21 -25
  506. package/src/runtime/routes/workspace-routes.test.ts +3 -3
  507. package/src/runtime/routes/workspace-utils.ts +1 -1
  508. package/src/runtime/telegram-streaming-delivery.ts +3 -0
  509. package/src/runtime/verification-outbound-actions.ts +2 -2
  510. package/src/schedule/integration-status.ts +0 -6
  511. package/src/schedule/schedule-store.ts +234 -43
  512. package/src/schedule/scheduler.ts +73 -74
  513. package/src/security/oauth2.ts +1 -1
  514. package/src/sequence/store.ts +12 -2
  515. package/src/skills/frontmatter.ts +19 -77
  516. package/src/skills/managed-store.ts +11 -2
  517. package/src/subagent/manager.ts +5 -3
  518. package/src/tasks/ephemeral-permissions.ts +3 -5
  519. package/src/tools/AGENTS.md +0 -1
  520. package/src/tools/browser/browser-manager.ts +17 -11
  521. package/src/tools/browser/jit-auth.ts +4 -1
  522. package/src/tools/claude-code/claude-code.ts +1 -1
  523. package/src/tools/computer-use/definitions.ts +48 -60
  524. package/src/tools/document/document-tool.ts +6 -6
  525. package/src/tools/filesystem/edit.ts +2 -1
  526. package/src/tools/filesystem/read.ts +20 -2
  527. package/src/tools/filesystem/write.ts +2 -1
  528. package/src/tools/host-filesystem/edit.ts +17 -1
  529. package/src/tools/host-filesystem/read.ts +16 -1
  530. package/src/tools/host-filesystem/write.ts +15 -1
  531. package/src/tools/host-terminal/host-shell.ts +24 -0
  532. package/src/tools/memory/definitions.ts +45 -81
  533. package/src/tools/memory/handlers.test.ts +0 -1
  534. package/src/tools/memory/handlers.ts +1 -1
  535. package/src/tools/memory/register.ts +26 -60
  536. package/src/tools/network/script-proxy/session-manager.ts +6 -8
  537. package/src/tools/network/web-fetch.ts +7 -1
  538. package/src/tools/network/web-search.ts +2 -1
  539. package/src/tools/registry.ts +23 -0
  540. package/src/tools/schedule/create.ts +113 -5
  541. package/src/tools/schedule/list.ts +57 -15
  542. package/src/tools/schedule/update.ts +73 -3
  543. package/src/tools/shared/filesystem/image-read.ts +192 -0
  544. package/src/tools/side-effects.ts +1 -7
  545. package/src/tools/skills/delete-managed.ts +27 -64
  546. package/src/tools/skills/execute.ts +54 -0
  547. package/src/tools/skills/load.ts +127 -5
  548. package/src/tools/skills/scaffold-managed.ts +93 -172
  549. package/src/tools/subagent/message.ts +0 -7
  550. package/src/tools/subagent/spawn.ts +1 -1
  551. package/src/tools/swarm/delegate.ts +0 -3
  552. package/src/tools/system/avatar-generator.ts +13 -19
  553. package/src/tools/system/request-permission.ts +2 -1
  554. package/src/tools/terminal/safe-env.ts +1 -0
  555. package/src/tools/tool-manifest.ts +41 -47
  556. package/src/tools/types.ts +6 -2
  557. package/src/tools/ui-surface/definitions.ts +0 -55
  558. package/src/util/errors.ts +0 -10
  559. package/src/workspace/git-service.ts +0 -2
  560. package/src/__tests__/account-registry.test.ts +0 -258
  561. package/src/__tests__/email-classifier.test.ts +0 -25
  562. package/src/__tests__/gmail-integration.test.ts +0 -97
  563. package/src/__tests__/handle-user-message-secret-resume.test.ts +0 -172
  564. package/src/__tests__/managed-twitter-guardrails.test.ts +0 -357
  565. package/src/__tests__/recording-intent-fallback.test.ts +0 -199
  566. package/src/__tests__/recording-intent.test.ts +0 -985
  567. package/src/__tests__/recording-state-machine.test.ts +0 -1574
  568. package/src/__tests__/reminder-store.test.ts +0 -350
  569. package/src/__tests__/reminder.test.ts +0 -337
  570. package/src/__tests__/scan-result-store.test.ts +0 -121
  571. package/src/__tests__/twitter-platform-proxy-client.test.ts +0 -475
  572. package/src/__tests__/view-image-tool.test.ts +0 -241
  573. package/src/cli/commands/amazon/cart.ts +0 -513
  574. package/src/cli/commands/amazon/checkout.ts +0 -394
  575. package/src/cli/commands/amazon/client.ts +0 -513
  576. package/src/cli/commands/amazon/index.ts +0 -885
  577. package/src/cli/commands/amazon/product-details.ts +0 -145
  578. package/src/cli/commands/amazon/request-extractor.ts +0 -187
  579. package/src/cli/commands/amazon/search.ts +0 -76
  580. package/src/cli/commands/amazon/session.ts +0 -108
  581. package/src/cli/commands/twitter/__tests__/cli-read-routing.test.ts +0 -345
  582. package/src/cli/commands/twitter/__tests__/cli-routing.test.ts +0 -252
  583. package/src/cli/commands/twitter/__tests__/oauth-client.test.ts +0 -151
  584. package/src/cli/commands/twitter/index.ts +0 -420
  585. package/src/cli/commands/twitter/oauth-client.ts +0 -60
  586. package/src/cli/commands/twitter/router.ts +0 -351
  587. package/src/cli/commands/twitter/types.ts +0 -30
  588. package/src/config/bundled-skills/agentmail/SKILL.md +0 -132
  589. package/src/config/bundled-skills/agentmail/icon.svg +0 -21
  590. package/src/config/bundled-skills/amazon/SKILL.md +0 -136
  591. package/src/config/bundled-skills/amazon/icon.svg +0 -13
  592. package/src/config/bundled-skills/api-mapping/SKILL.md +0 -78
  593. package/src/config/bundled-skills/api-mapping/icon.svg +0 -18
  594. package/src/config/bundled-skills/cli-discover/SKILL.md +0 -68
  595. package/src/config/bundled-skills/deploy-fullstack-vercel/SKILL.md +0 -179
  596. package/src/config/bundled-skills/document-writer/SKILL.md +0 -195
  597. package/src/config/bundled-skills/elevenlabs-voice/SKILL.md +0 -140
  598. package/src/config/bundled-skills/email-setup/SKILL.md +0 -68
  599. package/src/config/bundled-skills/frontend-design/SKILL.md +0 -44
  600. package/src/config/bundled-skills/frontend-design/icon.svg +0 -16
  601. package/src/config/bundled-skills/google-oauth-setup/SKILL.md +0 -452
  602. package/src/config/bundled-skills/guardian-verify-setup/SKILL.md +0 -203
  603. package/src/config/bundled-skills/influencer/SKILL.md +0 -144
  604. package/src/config/bundled-skills/influencer/scripts/client.ts +0 -1269
  605. package/src/config/bundled-skills/influencer/scripts/influencer.ts +0 -267
  606. package/src/config/bundled-skills/macos-automation/SKILL.md +0 -65
  607. package/src/config/bundled-skills/macos-automation/icon.svg +0 -12
  608. package/src/config/bundled-skills/mcp-setup/SKILL.md +0 -75
  609. package/src/config/bundled-skills/media-processing/tools/media-diagnostics.ts +0 -184
  610. package/src/config/bundled-skills/messaging/tools/gmail-archive-by-query.ts +0 -80
  611. package/src/config/bundled-skills/messaging/tools/gmail-archive.ts +0 -29
  612. package/src/config/bundled-skills/messaging/tools/gmail-batch-archive.ts +0 -56
  613. package/src/config/bundled-skills/messaging/tools/gmail-batch-label.ts +0 -34
  614. package/src/config/bundled-skills/messaging/tools/gmail-download-attachment.ts +0 -47
  615. package/src/config/bundled-skills/messaging/tools/gmail-label.ts +0 -31
  616. package/src/config/bundled-skills/messaging/tools/gmail-list-attachments.ts +0 -67
  617. package/src/config/bundled-skills/messaging/tools/gmail-send-with-attachments.ts +0 -97
  618. package/src/config/bundled-skills/messaging/tools/gmail-summarize-thread.ts +0 -87
  619. package/src/config/bundled-skills/messaging/tools/gmail-triage.ts +0 -135
  620. package/src/config/bundled-skills/messaging/tools/messaging-analyze-activity.ts +0 -24
  621. package/src/config/bundled-skills/messaging/tools/messaging-reply.ts +0 -201
  622. package/src/config/bundled-skills/messaging/tools/send-notification.ts +0 -1
  623. package/src/config/bundled-skills/messaging/tools/sequence-cancel.ts +0 -27
  624. package/src/config/bundled-skills/messaging/tools/sequence-pause.ts +0 -48
  625. package/src/config/bundled-skills/messaging/tools/sequence-resume.ts +0 -27
  626. package/src/config/bundled-skills/messaging/tools/sequence-update.ts +0 -56
  627. package/src/config/bundled-skills/notion/SKILL.md +0 -240
  628. package/src/config/bundled-skills/notion-oauth-setup/SKILL.md +0 -126
  629. package/src/config/bundled-skills/oauth-setup/SKILL.md +0 -143
  630. package/src/config/bundled-skills/public-ingress/SKILL.md +0 -258
  631. package/src/config/bundled-skills/reminder/SKILL.md +0 -79
  632. package/src/config/bundled-skills/reminder/TOOLS.json +0 -89
  633. package/src/config/bundled-skills/reminder/tools/reminder-list.ts +0 -12
  634. package/src/config/bundled-skills/restaurant-reservation/SKILL.md +0 -141
  635. package/src/config/bundled-skills/screen-recording/SKILL.md +0 -148
  636. package/src/config/bundled-skills/self-upgrade/SKILL.md +0 -69
  637. package/src/config/bundled-skills/skills-catalog/SKILL.md +0 -78
  638. package/src/config/bundled-skills/slack-app-setup/SKILL.md +0 -178
  639. package/src/config/bundled-skills/slack-digest-setup/SKILL.md +0 -163
  640. package/src/config/bundled-skills/slack-oauth-setup/SKILL.md +0 -157
  641. package/src/config/bundled-skills/start-the-day/SKILL.md +0 -70
  642. package/src/config/bundled-skills/start-the-day/icon.svg +0 -13
  643. package/src/config/bundled-skills/telegram-setup/SKILL.md +0 -105
  644. package/src/config/bundled-skills/time-based-actions/SKILL.md +0 -142
  645. package/src/config/bundled-skills/twilio-setup/SKILL.md +0 -232
  646. package/src/config/bundled-skills/twitter/SKILL.md +0 -206
  647. package/src/config/bundled-skills/twitter/icon.svg +0 -14
  648. package/src/config/bundled-skills/typescript-eval/SKILL.md +0 -60
  649. package/src/config/bundled-skills/vercel-token-setup/SKILL.md +0 -214
  650. package/src/config/bundled-skills/voice-setup/SKILL.md +0 -131
  651. package/src/config/bundled-skills/voice-setup/icon.svg +0 -20
  652. package/src/daemon/handlers/pairing.ts +0 -119
  653. package/src/daemon/handlers/session-user-message.ts +0 -961
  654. package/src/daemon/recording-executor.ts +0 -180
  655. package/src/daemon/recording-intent-fallback.ts +0 -162
  656. package/src/daemon/recording-intent.ts +0 -493
  657. package/src/memory/account-store.ts +0 -117
  658. package/src/messaging/activity-analyzer.ts +0 -76
  659. package/src/messaging/email-classifier.ts +0 -208
  660. package/src/messaging/index.ts +0 -2
  661. package/src/messaging/outreach-classifier.ts +0 -185
  662. package/src/messaging/thread-summarizer.ts +0 -346
  663. package/src/messaging/types.ts +0 -17
  664. package/src/tools/browser/x-auto-navigate.ts +0 -254
  665. package/src/tools/credentials/account-registry.ts +0 -144
  666. package/src/tools/filesystem/view-image.ts +0 -244
  667. package/src/tools/reminder/reminder-store.ts +0 -194
  668. package/src/tools/reminder/reminder.ts +0 -158
  669. package/src/tools/system/navigate-settings.ts +0 -74
  670. package/src/tools/system/open-system-settings.ts +0 -85
  671. package/src/tools/system/version.ts +0 -54
  672. package/src/twitter/platform-proxy-client.ts +0 -408
  673. /package/src/config/bundled-skills/{messaging → gmail}/tools/scan-result-store.ts +0 -0
  674. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-analytics.ts +0 -0
  675. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-create.ts +0 -0
  676. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-delete.ts +0 -0
  677. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enroll.ts +0 -0
  678. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enrollment-list.ts +0 -0
  679. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-get.ts +0 -0
  680. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-import.ts +0 -0
  681. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-list.ts +0 -0
@@ -297,7 +297,7 @@ describe("scope profile contract", () => {
297
297
  "attachments.write",
298
298
  "internal.write",
299
299
  ],
300
- ipc_v1: ["ipc.all"],
300
+ local_v1: ["local.all"],
301
301
  ui_page_v1: ["settings.read"],
302
302
  };
303
303
 
@@ -320,7 +320,7 @@ describe("scope profile contract", () => {
320
320
  "actor_client_v1",
321
321
  "gateway_ingress_v1",
322
322
  "gateway_service_v1",
323
- "ipc_v1",
323
+ "local_v1",
324
324
  "ui_page_v1",
325
325
  ];
326
326
 
@@ -1,56 +1,56 @@
1
1
  import { describe, expect, test } from "bun:test";
2
2
 
3
3
  import { DAEMON_INTERNAL_ASSISTANT_ID } from "../../assistant-scope.js";
4
- import { buildIpcAuthContext } from "../../local-actor-identity.js";
4
+ import { buildLocalAuthContext } from "../../local-actor-identity.js";
5
5
  import { CURRENT_POLICY_EPOCH } from "../policy.js";
6
6
  import { resolveScopeProfile } from "../scopes.js";
7
7
 
8
- describe("buildIpcAuthContext", () => {
8
+ describe("buildLocalAuthContext", () => {
9
9
  test("produces correct subject pattern", () => {
10
- const ctx = buildIpcAuthContext("session-abc");
11
- expect(ctx.subject).toBe("ipc:self:session-abc");
10
+ const ctx = buildLocalAuthContext("session-abc");
11
+ expect(ctx.subject).toBe("local:self:session-abc");
12
12
  });
13
13
 
14
- test("sets principalType to ipc", () => {
15
- const ctx = buildIpcAuthContext("session-abc");
16
- expect(ctx.principalType).toBe("ipc");
14
+ test("sets principalType to local", () => {
15
+ const ctx = buildLocalAuthContext("session-abc");
16
+ expect(ctx.principalType).toBe("local");
17
17
  });
18
18
 
19
19
  test("uses DAEMON_INTERNAL_ASSISTANT_ID for assistantId", () => {
20
- const ctx = buildIpcAuthContext("session-abc");
20
+ const ctx = buildLocalAuthContext("session-abc");
21
21
  expect(ctx.assistantId).toBe(DAEMON_INTERNAL_ASSISTANT_ID);
22
22
  expect(ctx.assistantId).toBe("self");
23
23
  });
24
24
 
25
25
  test("includes sessionId from argument", () => {
26
- const ctx = buildIpcAuthContext("my-session-123");
26
+ const ctx = buildLocalAuthContext("my-session-123");
27
27
  expect(ctx.sessionId).toBe("my-session-123");
28
28
  });
29
29
 
30
- test("uses ipc_v1 scope profile", () => {
31
- const ctx = buildIpcAuthContext("session-abc");
32
- expect(ctx.scopeProfile).toBe("ipc_v1");
30
+ test("uses local_v1 scope profile", () => {
31
+ const ctx = buildLocalAuthContext("session-abc");
32
+ expect(ctx.scopeProfile).toBe("local_v1");
33
33
  });
34
34
 
35
- test("resolves scopes from ipc_v1 profile", () => {
36
- const ctx = buildIpcAuthContext("session-abc");
37
- const expectedScopes = resolveScopeProfile("ipc_v1");
35
+ test("resolves scopes from local_v1 profile", () => {
36
+ const ctx = buildLocalAuthContext("session-abc");
37
+ const expectedScopes = resolveScopeProfile("local_v1");
38
38
  expect(ctx.scopes).toBe(expectedScopes);
39
- expect(ctx.scopes.has("ipc.all")).toBe(true);
39
+ expect(ctx.scopes.has("local.all")).toBe(true);
40
40
  });
41
41
 
42
42
  test("uses current policy epoch", () => {
43
- const ctx = buildIpcAuthContext("session-abc");
43
+ const ctx = buildLocalAuthContext("session-abc");
44
44
  expect(ctx.policyEpoch).toBe(CURRENT_POLICY_EPOCH);
45
45
  });
46
46
 
47
47
  test("does not set actorPrincipalId", () => {
48
- const ctx = buildIpcAuthContext("session-abc");
48
+ const ctx = buildLocalAuthContext("session-abc");
49
49
  expect(ctx.actorPrincipalId).toBeUndefined();
50
50
  });
51
51
 
52
52
  test("matches AuthContext shape from HTTP JWT-derived contexts", () => {
53
- const ctx = buildIpcAuthContext("session-xyz");
53
+ const ctx = buildLocalAuthContext("session-xyz");
54
54
 
55
55
  // Verify all required AuthContext fields are present
56
56
  expect(typeof ctx.subject).toBe("string");
@@ -63,8 +63,8 @@ describe("buildIpcAuthContext", () => {
63
63
  });
64
64
 
65
65
  test("different session IDs produce different subjects", () => {
66
- const ctx1 = buildIpcAuthContext("session-1");
67
- const ctx2 = buildIpcAuthContext("session-2");
66
+ const ctx1 = buildLocalAuthContext("session-1");
67
+ const ctx2 = buildLocalAuthContext("session-2");
68
68
  expect(ctx1.subject).not.toBe(ctx2.subject);
69
69
  expect(ctx1.sessionId).not.toBe(ctx2.sessionId);
70
70
  });
@@ -129,13 +129,13 @@ describe("enforcePolicy", () => {
129
129
  expect(result!.status).toBe(403);
130
130
  });
131
131
 
132
- test("standard actor endpoints allow actor, svc_gateway, and ipc", () => {
132
+ test("standard actor endpoints allow actor, svc_gateway, and local", () => {
133
133
  authDisabled = false;
134
134
  const policy = getPolicy("messages:POST");
135
135
  expect(policy).toBeDefined();
136
136
  expect(policy!.allowedPrincipalTypes).toContain("actor");
137
137
  expect(policy!.allowedPrincipalTypes).toContain("svc_gateway");
138
- expect(policy!.allowedPrincipalTypes).toContain("ipc");
138
+ expect(policy!.allowedPrincipalTypes).toContain("local");
139
139
  });
140
140
 
141
141
  test("dev bypass allows all requests through regardless of policy", () => {
@@ -42,7 +42,7 @@ describe("resolveScopeProfile", () => {
42
42
  const scopes = resolveScopeProfile("actor_client_v1");
43
43
  expect(scopes.has("ingress.write")).toBe(false);
44
44
  expect(scopes.has("internal.write")).toBe(false);
45
- expect(scopes.has("ipc.all")).toBe(false);
45
+ expect(scopes.has("local.all")).toBe(false);
46
46
  });
47
47
 
48
48
  test("gateway_ingress_v1 includes ingress and internal scopes", () => {
@@ -64,9 +64,9 @@ describe("resolveScopeProfile", () => {
64
64
  expect(scopes.size).toBe(7);
65
65
  });
66
66
 
67
- test("ipc_v1 includes only ipc.all", () => {
68
- const scopes = resolveScopeProfile("ipc_v1");
69
- expect(scopes.has("ipc.all")).toBe(true);
67
+ test("local_v1 includes only local.all", () => {
68
+ const scopes = resolveScopeProfile("local_v1");
69
+ expect(scopes.has("local.all")).toBe(true);
70
70
  expect(scopes.size).toBe(1);
71
71
  });
72
72
  });
@@ -82,9 +82,9 @@ describe("hasScope", () => {
82
82
  expect(hasScope(ctx, "ingress.write")).toBe(false);
83
83
  });
84
84
 
85
- test("returns true for ipc.all on ipc_v1 profile", () => {
86
- const ctx = makeCtx("ipc_v1");
87
- expect(hasScope(ctx, "ipc.all")).toBe(true);
85
+ test("returns true for local.all on local_v1 profile", () => {
86
+ const ctx = makeCtx("local_v1");
87
+ expect(hasScope(ctx, "local.all")).toBe(true);
88
88
  });
89
89
  });
90
90
 
@@ -76,14 +76,14 @@ describe("parseSub", () => {
76
76
  });
77
77
 
78
78
  // -------------------------------------------------------------------------
79
- // ipc pattern
79
+ // local pattern
80
80
  // -------------------------------------------------------------------------
81
81
 
82
- test("parses ipc:<assistantId>:<sessionId>", () => {
83
- const result = parseSub("ipc:self:session-xyz");
82
+ test("parses local:<assistantId>:<sessionId>", () => {
83
+ const result = parseSub("local:self:session-xyz");
84
84
  expect(result.ok).toBe(true);
85
85
  if (result.ok) {
86
- expect(result.principalType).toBe("ipc");
86
+ expect(result.principalType).toBe("local");
87
87
  expect(result.assistantId).toBe("self");
88
88
  expect(result.sessionId).toBe("session-xyz");
89
89
  expect(result.actorPrincipalId).toBeUndefined();
@@ -158,16 +158,16 @@ describe("parseSub", () => {
158
158
  }
159
159
  });
160
160
 
161
- test("fails on ipc with empty sessionId", () => {
162
- const result = parseSub("ipc:self:");
161
+ test("fails on local with empty sessionId", () => {
162
+ const result = parseSub("local:self:");
163
163
  expect(result.ok).toBe(false);
164
164
  if (!result.ok) {
165
165
  expect(result.reason).toContain("empty");
166
166
  }
167
167
  });
168
168
 
169
- test("fails on ipc with empty assistantId", () => {
170
- const result = parseSub("ipc::session-abc");
169
+ test("fails on local with empty assistantId", () => {
170
+ const result = parseSub("local::session-abc");
171
171
  expect(result.ok).toBe(false);
172
172
  if (!result.ok) {
173
173
  expect(result.reason).toContain("empty");
@@ -13,7 +13,6 @@ mock.module("../../../util/platform.js", () => ({
13
13
  isMacOS: () => process.platform === "darwin",
14
14
  isLinux: () => process.platform === "linux",
15
15
  isWindows: () => process.platform === "win32",
16
- getSocketPath: () => join(testDir, "test.sock"),
17
16
  getPidPath: () => join(testDir, "test.pid"),
18
17
  getLogPath: () => join(testDir, "test.log"),
19
18
  ensureDataDir: () => {},
@@ -126,6 +126,7 @@ const ACTOR_ENDPOINTS: Array<{ endpoint: string; scopes: Scope[] }> = [
126
126
  // Conversation / messaging
127
127
  { endpoint: "messages:GET", scopes: ["chat.read"] },
128
128
  { endpoint: "messages:POST", scopes: ["chat.write"] },
129
+ { endpoint: "btw", scopes: ["chat.write"] },
129
130
  { endpoint: "conversations", scopes: ["chat.read"] },
130
131
  { endpoint: "conversations:DELETE", scopes: ["chat.write"] },
131
132
  { endpoint: "conversations/switch", scopes: ["chat.write"] },
@@ -144,6 +145,7 @@ const ACTOR_ENDPOINTS: Array<{ endpoint: string; scopes: Scope[] }> = [
144
145
  { endpoint: "confirm", scopes: ["approval.write"] },
145
146
  { endpoint: "secret", scopes: ["approval.write"] },
146
147
  { endpoint: "trust-rules", scopes: ["approval.write"] },
148
+ { endpoint: "host-bash-result", scopes: ["approval.write"] },
147
149
  { endpoint: "pending-interactions", scopes: ["approval.read"] },
148
150
 
149
151
  // Guardian actions
@@ -379,6 +381,9 @@ const ACTOR_ENDPOINTS: Array<{ endpoint: string; scopes: Scope[] }> = [
379
381
  // Delivery ack
380
382
  { endpoint: "channels/delivery-ack", scopes: ["internal.write"] },
381
383
 
384
+ // MCP
385
+ { endpoint: "mcp/reload", scopes: ["settings.write"] },
386
+
382
387
  // Migrations
383
388
  { endpoint: "migrations/validate", scopes: ["settings.write"] },
384
389
  { endpoint: "migrations/export", scopes: ["settings.write"] },
@@ -395,6 +400,7 @@ const ACTOR_ENDPOINTS: Array<{ endpoint: string; scopes: Scope[] }> = [
395
400
  { endpoint: "schedules:DELETE", scopes: ["settings.write"] },
396
401
  { endpoint: "schedules/toggle", scopes: ["settings.write"] },
397
402
  { endpoint: "schedules/run", scopes: ["settings.write"] },
403
+ { endpoint: "schedules/cancel", scopes: ["settings.write"] },
398
404
 
399
405
  // Diagnostics
400
406
  { endpoint: "diagnostics/export", scopes: ["settings.read"] },
@@ -405,10 +411,8 @@ const ACTOR_ENDPOINTS: Array<{ endpoint: string; scopes: Scope[] }> = [
405
411
 
406
412
  // OAuth / integrations
407
413
  { endpoint: "integrations/oauth/start", scopes: ["settings.write"] },
408
- { endpoint: "integrations/twitter/auth/start", scopes: ["settings.write"] },
409
- { endpoint: "integrations/twitter/auth/status", scopes: ["settings.read"] },
410
414
 
411
- // Workspace files (IPC-migrated)
415
+ // Workspace files
412
416
  { endpoint: "workspace-files", scopes: ["settings.read"] },
413
417
  { endpoint: "workspace-files/read", scopes: ["settings.read"] },
414
418
 
@@ -420,7 +424,7 @@ const ACTOR_ENDPOINTS: Array<{ endpoint: string; scopes: Scope[] }> = [
420
424
  for (const { endpoint, scopes } of ACTOR_ENDPOINTS) {
421
425
  registerPolicy(endpoint, {
422
426
  requiredScopes: scopes,
423
- allowedPrincipalTypes: ["actor", "svc_gateway", "svc_daemon", "ipc"],
427
+ allowedPrincipalTypes: ["actor", "svc_gateway", "svc_daemon", "local"],
424
428
  });
425
429
  }
426
430
 
@@ -37,7 +37,7 @@ const PROFILE_SCOPES: Record<ScopeProfile, ReadonlySet<Scope>> = {
37
37
  "attachments.write",
38
38
  "internal.write",
39
39
  ]),
40
- ipc_v1: new Set<Scope>(["ipc.all"]),
40
+ local_v1: new Set<Scope>(["local.all"]),
41
41
  ui_page_v1: new Set<Scope>(["settings.read"]),
42
42
  };
43
43
 
@@ -32,7 +32,7 @@ export type ParseSubResult =
32
32
  * actor:<assistantId>:<actorPrincipalId>
33
33
  * svc:gateway:<assistantId>
34
34
  * svc:daemon:<identifier>
35
- * ipc:<assistantId>:<sessionId>
35
+ * local:<assistantId>:<sessionId>
36
36
  */
37
37
  export function parseSub(sub: string): ParseSubResult {
38
38
  if (!sub || typeof sub !== "string") {
@@ -68,15 +68,15 @@ export function parseSub(sub: string): ParseSubResult {
68
68
  return { ok: true, principalType: "svc_daemon", assistantId: identifier };
69
69
  }
70
70
 
71
- if (parts[0] === "ipc" && parts.length === 3) {
71
+ if (parts[0] === "local" && parts.length === 3) {
72
72
  const [, assistantId, sessionId] = parts;
73
73
  if (!assistantId || !sessionId) {
74
74
  return {
75
75
  ok: false,
76
- reason: "ipc sub has empty assistantId or sessionId",
76
+ reason: "local sub has empty assistantId or sessionId",
77
77
  };
78
78
  }
79
- return { ok: true, principalType: "ipc", assistantId, sessionId };
79
+ return { ok: true, principalType: "local", assistantId, sessionId };
80
80
  }
81
81
 
82
82
  return { ok: false, reason: `unrecognized sub pattern: ${sub}` };
@@ -329,29 +329,6 @@ export function mintUiPageToken(): string {
329
329
  });
330
330
  }
331
331
 
332
- // ---------------------------------------------------------------------------
333
- // CLI edge token
334
- // ---------------------------------------------------------------------------
335
-
336
- /**
337
- * Mint a long-lived JWT for the CLI to authenticate with the gateway.
338
- *
339
- * Written to ~/.vellum/http-token at daemon startup so the CLI can read it
340
- * and pass it as a Bearer token. Regenerated on each daemon restart. A 30-day
341
- * TTL avoids expiry between restarts while keeping the window bounded.
342
- *
343
- * Uses aud=vellum-gateway so the gateway's edge-auth middleware accepts it.
344
- */
345
- export function mintCliEdgeToken(): string {
346
- return mintToken({
347
- aud: "vellum-gateway",
348
- sub: "svc:daemon:self",
349
- scope_profile: "gateway_service_v1",
350
- policy_epoch: CURRENT_POLICY_EPOCH,
351
- ttlSeconds: 86400 * 30,
352
- });
353
- }
354
-
355
332
  // ---------------------------------------------------------------------------
356
333
  // Pairing bearer token
357
334
  // ---------------------------------------------------------------------------
@@ -13,7 +13,7 @@ export type ScopeProfile =
13
13
  | "actor_client_v1"
14
14
  | "gateway_ingress_v1"
15
15
  | "gateway_service_v1"
16
- | "ipc_v1"
16
+ | "local_v1"
17
17
  | "ui_page_v1";
18
18
 
19
19
  // ---------------------------------------------------------------------------
@@ -35,13 +35,13 @@ export type Scope =
35
35
  | "internal.write"
36
36
  | "feature_flags.read"
37
37
  | "feature_flags.write"
38
- | "ipc.all";
38
+ | "local.all";
39
39
 
40
40
  // ---------------------------------------------------------------------------
41
41
  // Principal types — derived from the sub pattern
42
42
  // ---------------------------------------------------------------------------
43
43
 
44
- export type PrincipalType = "actor" | "svc_gateway" | "svc_daemon" | "ipc";
44
+ export type PrincipalType = "actor" | "svc_gateway" | "svc_daemon" | "local";
45
45
 
46
46
  // ---------------------------------------------------------------------------
47
47
  // Token audience — which service the JWT is intended for
@@ -13,7 +13,7 @@
13
13
  * reply text for the guardian's confirmation message.
14
14
  *
15
15
  * This module is channel-agnostic: both inbound-message-handler (Telegram
16
- * channels) and session-process (mac/IPC channel) use it.
16
+ * channels) and session-process (desktop channel) use it.
17
17
  */
18
18
 
19
19
  import { startCall } from "../calls/call-domain.js";
@@ -3,7 +3,7 @@
3
3
  * request is resolved with tool metadata.
4
4
  *
5
5
  * Used by both the channel inbound path (inbound-message-handler.ts) and
6
- * the desktop/IPC path (session-process.ts) to ensure grants are minted
6
+ * the desktop path (session-process.ts) to ensure grants are minted
7
7
  * consistently regardless of which channel the guardian answers on.
8
8
  */
9
9
 
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Encapsulates the core business logic — validation, conversation scoping,
5
5
  * canonical decision application, and result mapping — so both the HTTP
6
- * handler and the IPC handler can delegate here without duplicating code.
6
+ * handler and the message handler can delegate here without duplicating code.
7
7
  */
8
8
 
9
9
  import { applyCanonicalGuardianDecision } from "../approvals/guardian-decision-primitive.js";
@@ -61,7 +61,7 @@ export type ProcessGuardianDecisionResult =
61
61
  *
62
62
  * Validates the action, checks conversation scope if applicable, applies the
63
63
  * canonical decision, and maps the result to a caller-agnostic shape that
64
- * both HTTP and IPC handlers can interpret.
64
+ * both HTTP and message handlers can interpret.
65
65
  */
66
66
  export async function processGuardianDecision(
67
67
  params: ProcessGuardianDecisionParams,
@@ -97,7 +97,7 @@ export async function processGuardianDecision(
97
97
  action: action as ApprovalAction,
98
98
  actorContext: {
99
99
  actorPrincipalId: actorContext.actorPrincipalId,
100
- actorExternalUserId: undefined, // Desktop/IPC path — no channel-native ID
100
+ actorExternalUserId: undefined, // Desktop path — no channel-native ID
101
101
  channel,
102
102
  guardianPrincipalId: actorContext.guardianPrincipalId,
103
103
  },
@@ -97,6 +97,7 @@ import { appRouteDefinitions } from "./routes/app-routes.js";
97
97
  import { approvalRouteDefinitions } from "./routes/approval-routes.js";
98
98
  import { attachmentRouteDefinitions } from "./routes/attachment-routes.js";
99
99
  import { brainGraphRouteDefinitions } from "./routes/brain-graph-routes.js";
100
+ import { btwRouteDefinitions } from "./routes/btw-routes.js";
100
101
  import { callRouteDefinitions } from "./routes/call-routes.js";
101
102
  import {
102
103
  startCanonicalGuardianExpirySweep,
@@ -124,6 +125,8 @@ import { globalSearchRouteDefinitions } from "./routes/global-search-routes.js";
124
125
  import { guardianActionRouteDefinitions } from "./routes/guardian-action-routes.js";
125
126
  import { handleGuardianBootstrap } from "./routes/guardian-bootstrap-routes.js";
126
127
  import { handleGuardianRefresh } from "./routes/guardian-refresh-routes.js";
128
+ import { hostBashRouteDefinitions } from "./routes/host-bash-routes.js";
129
+ import { hostFileRouteDefinitions } from "./routes/host-file-routes.js";
127
130
  import { handleHealth } from "./routes/identity-routes.js";
128
131
  import { identityRouteDefinitions } from "./routes/identity-routes.js";
129
132
  import { slackChannelRouteDefinitions } from "./routes/integrations/slack/channel.js";
@@ -131,6 +134,8 @@ import { slackShareRouteDefinitions } from "./routes/integrations/slack/share.js
131
134
  import { telegramRouteDefinitions } from "./routes/integrations/telegram.js";
132
135
  import { twilioRouteDefinitions } from "./routes/integrations/twilio.js";
133
136
  import { inviteRouteDefinitions } from "./routes/invite-routes.js";
137
+ import { logExportRouteDefinitions } from "./routes/log-export-routes.js";
138
+ import { mcpRouteDefinitions } from "./routes/mcp-routes.js";
134
139
  import { migrationRouteDefinitions } from "./routes/migration-routes.js";
135
140
  import type { PairingHandlerContext } from "./routes/pairing-routes.js";
136
141
  import {
@@ -242,12 +247,12 @@ export class RuntimeHttpServer {
242
247
  return this.server?.port ?? this.port;
243
248
  }
244
249
 
245
- /** Expose the pairing store so the daemon server can wire IPC handlers. */
250
+ /** Expose the pairing store so the daemon server can wire HTTP handlers. */
246
251
  getPairingStore(): PairingStore {
247
252
  return this.pairingStore;
248
253
  }
249
254
 
250
- /** Set a callback for broadcasting IPC messages (wired by daemon server). */
255
+ /** Set a callback for broadcasting server messages (wired by daemon server). */
251
256
  setPairingBroadcast(fn: (msg: ServerMessage) => void): void {
252
257
  this.pairingBroadcast = fn;
253
258
  }
@@ -712,6 +717,7 @@ export class RuntimeHttpServer {
712
717
  ...secretRouteDefinitions(),
713
718
  ...identityRouteDefinitions(),
714
719
  ...debugRouteDefinitions(),
720
+ ...mcpRouteDefinitions(),
715
721
  ...usageRouteDefinitions(),
716
722
  ...workspaceRouteDefinitions(),
717
723
  ...settingsRouteDefinitions(),
@@ -719,6 +725,7 @@ export class RuntimeHttpServer {
719
725
  sendMessageDeps: this.sendMessageDeps,
720
726
  }),
721
727
  ...diagnosticsRouteDefinitions(),
728
+ ...logExportRouteDefinitions(),
722
729
  ...documentRouteDefinitions(),
723
730
  ...workItemRouteDefinitions(
724
731
  this.sendMessageDeps
@@ -920,6 +927,10 @@ export class RuntimeHttpServer {
920
927
  },
921
928
  },
922
929
 
930
+ ...btwRouteDefinitions({
931
+ sendMessageDeps: this.sendMessageDeps,
932
+ }),
933
+
923
934
  ...conversationRouteDefinitions({
924
935
  interfacesDir: this.interfacesDir,
925
936
  sendMessageDeps: this.sendMessageDeps,
@@ -929,6 +940,8 @@ export class RuntimeHttpServer {
929
940
  }),
930
941
  ...globalSearchRouteDefinitions(),
931
942
  ...approvalRouteDefinitions(),
943
+ ...hostBashRouteDefinitions(),
944
+ ...hostFileRouteDefinitions(),
932
945
  ...(this.getSkillContext
933
946
  ? skillRouteDefinitions({
934
947
  getSkillContext: this.getSkillContext,
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Shared business logic for invite management.
3
3
  *
4
- * Extracted from the IPC handlers in daemon/handlers/config-inbox.ts so that
5
- * both the HTTP routes and the IPC handlers call the same logic.
4
+ * Extracted from the handlers in daemon/handlers/config-inbox.ts so that
5
+ * both the HTTP routes and the message handlers call the same logic.
6
6
  *
7
7
  * Member/contact operations have been migrated to the /v1/contacts and
8
8
  * /v1/contacts/channels endpoints.
@@ -38,7 +38,7 @@ import {
38
38
  } from "./invite-redemption-service.js";
39
39
 
40
40
  // ---------------------------------------------------------------------------
41
- // Response shapes — used by both HTTP routes and IPC handlers
41
+ // Response shapes — used by both HTTP routes and message handlers
42
42
  // ---------------------------------------------------------------------------
43
43
 
44
44
  export interface InviteResponseData {
@@ -1,12 +1,12 @@
1
1
  /**
2
- * Deterministic local actor identity for IPC connections.
2
+ * Deterministic local actor identity for local connections.
3
3
  *
4
- * IPC (Unix domain socket) connections come from the local macOS native app.
5
- * No actor token is sent over the socket; instead, the daemon assigns a
4
+ * Local connections come from the native app via local HTTP sessions.
5
+ * No actor token is sent over the connection; instead, the daemon assigns a
6
6
  * deterministic local actor identity server-side by looking up the vellum
7
7
  * channel guardian binding.
8
8
  *
9
- * This routes IPC connections through the same `resolveTrustContext`
9
+ * This routes local connections through the same `resolveTrustContext`
10
10
  * pathway used by HTTP channel ingress, producing equivalent
11
11
  * guardian-context behavior for the vellum channel.
12
12
  */
@@ -34,34 +34,29 @@ const log = getLogger("local-actor-identity");
34
34
  */
35
35
  export function buildLocalAuthContext(sessionId: string): AuthContext {
36
36
  return {
37
- subject: `ipc:self:${sessionId}`,
38
- principalType: "ipc",
37
+ subject: `local:self:${sessionId}`,
38
+ principalType: "local",
39
39
  assistantId: DAEMON_INTERNAL_ASSISTANT_ID,
40
40
  sessionId,
41
- scopeProfile: "ipc_v1",
42
- scopes: resolveScopeProfile("ipc_v1"),
41
+ scopeProfile: "local_v1",
42
+ scopes: resolveScopeProfile("local_v1"),
43
43
  policyEpoch: CURRENT_POLICY_EPOCH,
44
44
  };
45
45
  }
46
46
 
47
47
  /**
48
- * @deprecated Use `buildLocalAuthContext` instead.
49
- */
50
- export const buildIpcAuthContext = buildLocalAuthContext;
51
-
52
- /**
53
- * Resolve the guardian runtime context for a local IPC connection.
48
+ * Resolve the guardian runtime context for a local connection.
54
49
  *
55
50
  * Looks up the vellum guardian binding to obtain the `guardianPrincipalId`,
56
51
  * then passes it as the sender identity through `resolveTrustContext` --
57
- * the same pathway HTTP channel routes use. This ensures IPC and HTTP
52
+ * the same pathway HTTP channel routes use. This ensures local and HTTP
58
53
  * produce equivalent trust classification for the vellum channel.
59
54
  *
60
55
  * When no vellum guardian binding exists (e.g. fresh install before
61
56
  * bootstrap), falls back to a minimal guardian context so the local
62
57
  * user is not incorrectly denied.
63
58
  */
64
- export function resolveLocalIpcTrustContext(
59
+ export function resolveLocalTrustContext(
65
60
  sourceChannel: ChannelId = "vellum",
66
61
  ): TrustContext {
67
62
  const assistantId = DAEMON_INTERNAL_ASSISTANT_ID;
@@ -81,7 +76,7 @@ export function resolveLocalIpcTrustContext(
81
76
 
82
77
  // No guardian contact with a principalId — bootstrap via ensureVellumGuardianBinding
83
78
  // to self-heal (creates the binding + contact if missing).
84
- log.debug("No vellum guardian contact found; bootstrapping binding for IPC");
79
+ log.debug("No vellum guardian contact found; bootstrapping binding for local session");
85
80
  try {
86
81
  const principalId = ensureVellumGuardianBinding(assistantId);
87
82
  const trustCtx = resolveTrustContext({
@@ -107,15 +102,15 @@ export function resolveLocalIpcTrustContext(
107
102
  }
108
103
 
109
104
  /**
110
- * Build an AuthContext for a local IPC connection.
105
+ * Build an AuthContext for a local connection.
111
106
  *
112
107
  * Produces the same AuthContext shape that HTTP routes receive from JWT
113
- * verification, using the `ipc_v1` scope profile. The `actorPrincipalId`
108
+ * verification, using the `local_v1` scope profile. The `actorPrincipalId`
114
109
  * is populated from the vellum guardian binding when available, enabling
115
110
  * downstream code to resolve guardian context using the same
116
111
  * `authContext.actorPrincipalId` path as HTTP sessions.
117
112
  */
118
- export function resolveLocalIpcAuthContext(sessionId: string): AuthContext {
113
+ export function resolveLocalAuthContext(sessionId: string): AuthContext {
119
114
  const authContext = buildLocalAuthContext(sessionId);
120
115
 
121
116
  // Enrich with the guardian principal ID from contacts-first path
@@ -128,10 +123,10 @@ export function resolveLocalIpcAuthContext(sessionId: string): AuthContext {
128
123
  }
129
124
 
130
125
  // Self-heal: no guardian contact with principalId — bootstrap via
131
- // ensureVellumGuardianBinding (mirrors resolveLocalIpcTrustContext).
126
+ // ensureVellumGuardianBinding (mirrors resolveLocalTrustContext).
132
127
  try {
133
128
  log.debug(
134
- "No vellum guardian contact found; bootstrapping binding for IPC auth",
129
+ "No vellum guardian contact found; bootstrapping binding for local auth",
135
130
  );
136
131
  const principalId = ensureVellumGuardianBinding(authContext.assistantId);
137
132
  return { ...authContext, actorPrincipalId: principalId };
@@ -1,11 +1,12 @@
1
1
  /**
2
2
  * In-memory tracker that maps requestId to session info for pending
3
- * confirmation and secret interactions.
3
+ * confirmation, secret, host_bash, and host_file interactions.
4
4
  *
5
- * When the agent loop emits a confirmation_request or secret_request,
6
- * the onEvent callback registers the interaction here. Standalone HTTP
7
- * endpoints (/v1/confirm, /v1/secret, /v1/trust-rules) look up the
8
- * session from this tracker to resolve the interaction.
5
+ * When the agent loop emits a confirmation_request, secret_request,
6
+ * host_bash_request, or host_file_request, the onEvent callback registers
7
+ * the interaction here. Standalone HTTP endpoints (/v1/confirm, /v1/secret,
8
+ * /v1/trust-rules, /v1/host-bash-result, /v1/host-file-result) look up
9
+ * the session from this tracker to resolve the interaction.
9
10
  */
10
11
 
11
12
  import type { Session } from "../daemon/session.js";
@@ -28,7 +29,7 @@ export interface ConfirmationDetails {
28
29
  export interface PendingInteraction {
29
30
  session: Session;
30
31
  conversationId: string;
31
- kind: "confirmation" | "secret";
32
+ kind: "confirmation" | "secret" | "host_bash" | "host_file";
32
33
  confirmationDetails?: ConfirmationDetails;
33
34
  }
34
35
 
@@ -78,12 +79,23 @@ export function getByConversation(
78
79
  }
79
80
 
80
81
  /**
81
- * Remove all pending interactions for a given session.
82
- * Used when auto-denying all pending confirmations (e.g. new user message).
82
+ * Remove pending confirmation and secret interactions for a given session.
83
+ * Used when auto-denying all pending interactions (e.g. new user message).
84
+ *
85
+ * host_bash and host_file interactions are intentionally skipped — they
86
+ * represent in-flight tool executions proxied to the client, not
87
+ * confirmations to auto-deny. Removing them would orphan the request: the
88
+ * client would POST to /v1/host-bash-result or /v1/host-file-result after
89
+ * completing the operation, get a 404, and the proxy timer would fire with
90
+ * a spurious timeout error.
83
91
  */
84
92
  export function removeBySession(session: Session): void {
85
93
  for (const [requestId, interaction] of pending) {
86
- if (interaction.session === session) {
94
+ if (
95
+ interaction.session === session &&
96
+ interaction.kind !== "host_bash" &&
97
+ interaction.kind !== "host_file"
98
+ ) {
87
99
  pending.delete(requestId);
88
100
  }
89
101
  }