@vellumai/assistant 0.4.42 → 0.4.44

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 (867) hide show
  1. package/.env.example +1 -6
  2. package/.prettierignore +3 -0
  3. package/ARCHITECTURE.md +140 -403
  4. package/Dockerfile +0 -1
  5. package/README.md +81 -92
  6. package/bun.lock +8 -2
  7. package/docs/architecture/integrations.md +81 -104
  8. package/docs/architecture/memory.md +1 -1
  9. package/docs/architecture/scheduling.md +63 -63
  10. package/docs/architecture/security.md +3 -3
  11. package/docs/runbook-trusted-contacts.md +11 -12
  12. package/docs/trusted-contact-access.md +39 -39
  13. package/package.json +5 -8
  14. package/src/__tests__/access-request-decision.test.ts +4 -4
  15. package/src/__tests__/active-skill-tools.test.ts +49 -34
  16. package/src/__tests__/actor-token-service.test.ts +55 -85
  17. package/src/__tests__/amazon-cdp-integration.test.ts +14 -26
  18. package/src/__tests__/app-bundler.test.ts +14 -368
  19. package/src/__tests__/app-compiler.test.ts +0 -1
  20. package/src/__tests__/app-executors.test.ts +10 -1
  21. package/src/__tests__/approval-hardcoded-copy-guard.test.ts +1 -1
  22. package/src/__tests__/approval-primitive.test.ts +2 -4
  23. package/src/__tests__/approval-routes-http.test.ts +1 -3
  24. package/src/__tests__/asset-materialize-tool.test.ts +1 -4
  25. package/src/__tests__/asset-search-tool.test.ts +1 -4
  26. package/src/__tests__/assistant-attachments.test.ts +23 -0
  27. package/src/__tests__/assistant-feature-flags-integration.test.ts +4 -8
  28. package/src/__tests__/assistant-id-boundary-guard.test.ts +5 -5
  29. package/src/__tests__/attachments-store.test.ts +1 -4
  30. package/src/__tests__/avatar-e2e.test.ts +43 -23
  31. package/src/__tests__/browser-fill-credential.test.ts +1 -1
  32. package/src/__tests__/bundled-asset.test.ts +1 -1
  33. package/src/__tests__/bundled-skill-retrieval-guard.test.ts +2 -9
  34. package/src/__tests__/call-controller.test.ts +4 -8
  35. package/src/__tests__/call-conversation-messages.test.ts +1 -1
  36. package/src/__tests__/call-domain.test.ts +250 -8
  37. package/src/__tests__/call-pointer-message-composer.test.ts +14 -14
  38. package/src/__tests__/call-pointer-messages.test.ts +7 -11
  39. package/src/__tests__/call-recovery.test.ts +47 -0
  40. package/src/__tests__/call-routes-http.test.ts +13 -0
  41. package/src/__tests__/call-start-guardian-guard.test.ts +1 -1
  42. package/src/__tests__/callback-handoff-copy.test.ts +5 -5
  43. package/src/__tests__/canonical-guardian-store.test.ts +3 -3
  44. package/src/__tests__/channel-approval-routes.test.ts +101 -134
  45. package/src/__tests__/channel-approval.test.ts +0 -201
  46. package/src/__tests__/channel-approvals.test.ts +2 -2
  47. package/src/__tests__/channel-delivery-store.test.ts +16 -24
  48. package/src/__tests__/channel-guardian.test.ts +641 -740
  49. package/src/__tests__/channel-invite-transport.test.ts +1 -2
  50. package/src/__tests__/channel-policy.test.ts +9 -12
  51. package/src/__tests__/channel-readiness-service.test.ts +156 -45
  52. package/src/__tests__/channel-reply-delivery.test.ts +3 -3
  53. package/src/__tests__/channel-retry-sweep.test.ts +7 -7
  54. package/src/__tests__/checker.test.ts +41 -35
  55. package/src/__tests__/chrome-cdp.test.ts +57 -17
  56. package/src/__tests__/cli-help-reference-sync.test.ts +26 -0
  57. package/src/__tests__/compaction.benchmark.test.ts +25 -5
  58. package/src/__tests__/computer-use-session-lifecycle.test.ts +1 -1
  59. package/src/__tests__/computer-use-session-working-dir.test.ts +2 -6
  60. package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +1 -1
  61. package/src/__tests__/config-loader-backfill.test.ts +310 -0
  62. package/src/__tests__/config-watcher.test.ts +1 -5
  63. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +3 -5
  64. package/src/__tests__/connection-policy.test.ts +3 -62
  65. package/src/__tests__/contacts-tools.test.ts +0 -2
  66. package/src/__tests__/context-memory-e2e.test.ts +11 -7
  67. package/src/__tests__/context-overflow-policy.test.ts +2 -2
  68. package/src/__tests__/context-window-manager.test.ts +220 -61
  69. package/src/__tests__/conversation-attention-store.test.ts +178 -2
  70. package/src/__tests__/conversation-attention-telegram.test.ts +8 -11
  71. package/src/__tests__/conversation-pairing.test.ts +14 -14
  72. package/src/__tests__/conversation-routes-guardian-reply.test.ts +7 -7
  73. package/src/__tests__/conversation-store.test.ts +2 -2
  74. package/src/__tests__/conversation-unread-route.test.ts +155 -0
  75. package/src/__tests__/credential-metadata-store.test.ts +0 -2
  76. package/src/__tests__/credential-security-invariants.test.ts +10 -16
  77. package/src/__tests__/credentials-cli.test.ts +49 -5
  78. package/src/__tests__/daemon-assistant-events.test.ts +4 -22
  79. package/src/__tests__/db-migration-rollback.test.ts +2 -2
  80. package/src/__tests__/deterministic-verification-control-plane.test.ts +19 -19
  81. package/src/__tests__/dictation-mode-detection.test.ts +1 -1
  82. package/src/__tests__/dynamic-page-surface.test.ts +2 -2
  83. package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +2 -6
  84. package/src/__tests__/email-cli.test.ts +12 -12
  85. package/src/__tests__/email-service-config-fallback.test.ts +1 -1
  86. package/src/__tests__/emit-signal-routing-intent.test.ts +3 -18
  87. package/src/__tests__/error-handler-friendly-messages.test.ts +46 -0
  88. package/src/__tests__/event-bus.test.ts +0 -1
  89. package/src/__tests__/followup-tools.test.ts +0 -2
  90. package/src/__tests__/gateway-client-managed-outbound.test.ts +6 -6
  91. package/src/__tests__/gateway-only-enforcement.test.ts +13 -77
  92. package/src/__tests__/gateway-only-guard.test.ts +5 -0
  93. package/src/__tests__/guardian-action-conversation-turn.test.ts +3 -3
  94. package/src/__tests__/guardian-action-followup-executor.test.ts +29 -94
  95. package/src/__tests__/guardian-action-followup-store.test.ts +2 -12
  96. package/src/__tests__/guardian-action-grant-mint-consume.test.ts +48 -194
  97. package/src/__tests__/guardian-action-late-reply.test.ts +12 -12
  98. package/src/__tests__/guardian-action-store.test.ts +2 -2
  99. package/src/__tests__/guardian-action-sweep.test.ts +5 -5
  100. package/src/__tests__/guardian-decision-primitive-canonical.test.ts +1 -3
  101. package/src/__tests__/guardian-dispatch.test.ts +5 -46
  102. package/src/__tests__/guardian-grant-minting.test.ts +5 -44
  103. package/src/__tests__/guardian-outbound-http.test.ts +95 -114
  104. package/src/__tests__/guardian-question-mode.test.ts +1 -4
  105. package/src/__tests__/guardian-routing-invariants.test.ts +5 -13
  106. package/src/__tests__/guardian-routing-state.test.ts +3 -3
  107. package/src/__tests__/guardian-verification-voice-binding.test.ts +64 -7
  108. package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +2 -2
  109. package/src/__tests__/handle-user-message-secret-resume.test.ts +3 -5
  110. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +16 -34
  111. package/src/__tests__/headless-browser-interactions.test.ts +1 -1
  112. package/src/__tests__/headless-browser-navigate.test.ts +1 -1
  113. package/src/__tests__/headless-browser-read-tools.test.ts +1 -1
  114. package/src/__tests__/headless-browser-snapshot.test.ts +1 -1
  115. package/src/__tests__/heartbeat-service.test.ts +1 -1
  116. package/src/__tests__/host-shell-tool.test.ts +3 -12
  117. package/src/__tests__/inbound-invite-redemption.test.ts +2 -2
  118. package/src/__tests__/ingress-url-consistency.test.ts +0 -64
  119. package/src/__tests__/integration-status.test.ts +8 -8
  120. package/src/__tests__/intent-routing.test.ts +9 -13
  121. package/src/__tests__/invite-redemption-service.test.ts +4 -4
  122. package/src/__tests__/invite-routes-http.test.ts +10 -10
  123. package/src/__tests__/llm-usage-store.test.ts +45 -9
  124. package/src/__tests__/local-gateway-health.test.ts +209 -0
  125. package/src/__tests__/managed-avatar-client.test.ts +23 -12
  126. package/src/__tests__/managed-skill-lifecycle.test.ts +1 -2
  127. package/src/__tests__/managed-store.test.ts +29 -12
  128. package/src/__tests__/managed-twitter-guardrails.test.ts +357 -0
  129. package/src/__tests__/mcp-cli.test.ts +1 -1
  130. package/src/__tests__/mcp-health-check.test.ts +1 -1
  131. package/src/__tests__/media-generate-image.test.ts +1 -1
  132. package/src/__tests__/media-reuse-story.e2e.test.ts +1 -4
  133. package/src/__tests__/memory-context-benchmark.benchmark.test.ts +9 -6
  134. package/src/__tests__/memory-regressions.test.ts +1 -166
  135. package/src/__tests__/messaging-send-tool.test.ts +8 -4
  136. package/src/__tests__/migration-export-http.test.ts +2 -2
  137. package/src/__tests__/migration-transport.test.ts +44 -0
  138. package/src/__tests__/non-member-access-request.test.ts +49 -36
  139. package/src/__tests__/notification-broadcaster.test.ts +15 -15
  140. package/src/__tests__/notification-decision-fallback.test.ts +2 -2
  141. package/src/__tests__/notification-decision-strategy.test.ts +4 -4
  142. package/src/__tests__/notification-deep-link.test.ts +3 -3
  143. package/src/__tests__/notification-guardian-path.test.ts +6 -44
  144. package/src/__tests__/notification-routing-intent.test.ts +11 -7
  145. package/src/__tests__/oauth-cli.test.ts +1 -1
  146. package/src/__tests__/onboarding-starter-tasks.test.ts +2 -6
  147. package/src/__tests__/onboarding-template-contract.test.ts +2 -12
  148. package/src/__tests__/platform.test.ts +168 -5
  149. package/src/__tests__/playbook-execution.test.ts +0 -2
  150. package/src/__tests__/playbook-tools.test.ts +0 -2
  151. package/src/__tests__/pricing.test.ts +125 -0
  152. package/src/__tests__/provider-error-scenarios.test.ts +9 -3
  153. package/src/__tests__/provider-fail-open-selection.test.ts +12 -2
  154. package/src/__tests__/recording-handler.test.ts +46 -80
  155. package/src/__tests__/recording-state-machine.test.ts +112 -183
  156. package/src/__tests__/registry.test.ts +1 -1
  157. package/src/__tests__/relay-server.test.ts +69 -71
  158. package/src/__tests__/reminder-store.test.ts +3 -3
  159. package/src/__tests__/request-file-tool.test.ts +2 -2
  160. package/src/__tests__/ride-shotgun-handler.test.ts +2 -33
  161. package/src/__tests__/runtime-attachment-metadata.test.ts +3 -3
  162. package/src/__tests__/runtime-events-sse-parity.test.ts +1 -1
  163. package/src/__tests__/scaffold-managed-skill-tool.test.ts +4 -4
  164. package/src/__tests__/schedule-store.test.ts +13 -4
  165. package/src/__tests__/schedule-tools.test.ts +0 -2
  166. package/src/__tests__/scheduler-recurrence.test.ts +3 -4
  167. package/src/__tests__/scoped-approval-grants.test.ts +3 -5
  168. package/src/__tests__/scoped-grant-security-matrix.test.ts +6 -8
  169. package/src/__tests__/secret-prompt-log-hygiene.test.ts +1 -1
  170. package/src/__tests__/secret-response-routing.test.ts +1 -1
  171. package/src/__tests__/send-endpoint-busy.test.ts +1 -4
  172. package/src/__tests__/sequence-store.test.ts +0 -2
  173. package/src/__tests__/server-history-render.test.ts +2 -199
  174. package/src/__tests__/session-abort-tool-results.test.ts +9 -3
  175. package/src/__tests__/session-agent-loop.test.ts +107 -3
  176. package/src/__tests__/session-confirmation-signals.test.ts +17 -49
  177. package/src/__tests__/session-conflict-gate.test.ts +9 -3
  178. package/src/__tests__/session-init.benchmark.test.ts +22 -13
  179. package/src/__tests__/session-load-history-repair.test.ts +6 -3
  180. package/src/__tests__/session-pre-run-repair.test.ts +9 -3
  181. package/src/__tests__/session-profile-injection.test.ts +9 -3
  182. package/src/__tests__/session-provider-retry-repair.test.ts +10 -4
  183. package/src/__tests__/session-queue.test.ts +10 -4
  184. package/src/__tests__/session-runtime-assembly.test.ts +28 -18
  185. package/src/__tests__/session-skill-tools.test.ts +2 -3
  186. package/src/__tests__/session-slash-known.test.ts +11 -4
  187. package/src/__tests__/session-slash-queue.test.ts +11 -4
  188. package/src/__tests__/session-slash-unknown.test.ts +12 -4
  189. package/src/__tests__/session-surfaces-deselection.test.ts +2 -2
  190. package/src/__tests__/session-surfaces-task-progress.test.ts +3 -3
  191. package/src/__tests__/session-tool-setup-app-refresh.test.ts +1 -1
  192. package/src/__tests__/session-tool-setup-memory-scope.test.ts +1 -1
  193. package/src/__tests__/session-tool-setup-side-effect-flag.test.ts +1 -1
  194. package/src/__tests__/session-usage.test.ts +180 -0
  195. package/src/__tests__/session-workspace-cache-state.test.ts +8 -2
  196. package/src/__tests__/session-workspace-injection.test.ts +8 -2
  197. package/src/__tests__/session-workspace-tool-tracking.test.ts +8 -2
  198. package/src/__tests__/skill-feature-flags-integration.test.ts +5 -11
  199. package/src/__tests__/skill-feature-flags.test.ts +1 -0
  200. package/src/__tests__/skill-include-graph.test.ts +1 -0
  201. package/src/__tests__/skill-load-feature-flag.test.ts +3 -9
  202. package/src/__tests__/skill-load-tool.test.ts +90 -12
  203. package/src/__tests__/skill-projection-feature-flag.test.ts +14 -15
  204. package/src/__tests__/skills-uninstall.test.ts +131 -0
  205. package/src/__tests__/skills.test.ts +32 -16
  206. package/src/__tests__/slack-block-formatting.test.ts +1 -1
  207. package/src/__tests__/slack-channel-config.test.ts +71 -12
  208. package/src/__tests__/slack-inbound-verification.test.ts +7 -7
  209. package/src/__tests__/slack-share-routes.test.ts +1 -1
  210. package/src/__tests__/slack-skill.test.ts +2 -2
  211. package/src/__tests__/slash-commands-catalog.test.ts +1 -0
  212. package/src/__tests__/slash-commands-resolver.test.ts +1 -0
  213. package/src/__tests__/starter-task-flow.test.ts +10 -20
  214. package/src/__tests__/subagent-manager-notify.test.ts +1 -1
  215. package/src/__tests__/subagent-tools.test.ts +2 -2
  216. package/src/__tests__/system-prompt.test.ts +7 -12
  217. package/src/__tests__/task-compiler.test.ts +0 -2
  218. package/src/__tests__/task-management-tools.test.ts +0 -2
  219. package/src/__tests__/task-runner.test.ts +0 -2
  220. package/src/__tests__/task-scheduler.test.ts +2 -2
  221. package/src/__tests__/telegram-bot-username-resolution.test.ts +46 -44
  222. package/src/__tests__/terminal-tools.test.ts +1 -11
  223. package/src/__tests__/thread-seed-composer.test.ts +3 -1
  224. package/src/__tests__/tool-approval-handler.test.ts +5 -7
  225. package/src/__tests__/tool-executor.test.ts +2 -2
  226. package/src/__tests__/tool-grant-request-escalation.test.ts +3 -5
  227. package/src/__tests__/tool-notification-listener.test.ts +1 -1
  228. package/src/__tests__/tool-profiling-listener.test.ts +1 -1
  229. package/src/__tests__/tool-trace-listener.test.ts +1 -2
  230. package/src/__tests__/trace-emitter.test.ts +1 -1
  231. package/src/__tests__/trust-context-guards.test.ts +1 -1
  232. package/src/__tests__/trust-store.test.ts +48 -399
  233. package/src/__tests__/trusted-contact-approval-notifier.test.ts +6 -8
  234. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +5 -7
  235. package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +6 -6
  236. package/src/__tests__/trusted-contact-multichannel.test.ts +54 -47
  237. package/src/__tests__/trusted-contact-verification.test.ts +12 -12
  238. package/src/__tests__/twilio-config.test.ts +11 -2
  239. package/src/__tests__/twilio-provider.test.ts +6 -4
  240. package/src/__tests__/twilio-routes.test.ts +408 -86
  241. package/src/__tests__/twitter-platform-proxy-client.test.ts +475 -0
  242. package/src/__tests__/update-bulletin-format.test.ts +1 -1
  243. package/src/__tests__/update-bulletin-state.test.ts +1 -1
  244. package/src/__tests__/update-bulletin.test.ts +4 -8
  245. package/src/__tests__/update-template-contract.test.ts +1 -1
  246. package/src/__tests__/usage-cache-backfill-migration.test.ts +406 -0
  247. package/src/__tests__/usage-routes.test.ts +23 -5
  248. package/src/__tests__/user-reference.test.ts +1 -1
  249. package/src/__tests__/{guardian-control-plane-policy.test.ts → verification-control-plane-policy.test.ts} +142 -170
  250. package/src/__tests__/{guardian-verification-intent-routing.test.ts → verification-session-intent-routing.test.ts} +16 -16
  251. package/src/__tests__/view-image-tool.test.ts +0 -2
  252. package/src/__tests__/voice-ingress-preflight.test.ts +36 -0
  253. package/src/__tests__/voice-invite-redemption.test.ts +18 -18
  254. package/src/__tests__/voice-scoped-grant-consumer.test.ts +7 -7
  255. package/src/__tests__/voice-session-bridge.test.ts +14 -16
  256. package/src/__tests__/workspace-policy.test.ts +1 -1
  257. package/src/approvals/AGENTS.md +4 -4
  258. package/src/approvals/approval-primitive.ts +2 -2
  259. package/src/approvals/guardian-decision-primitive.ts +1 -1
  260. package/src/approvals/guardian-request-resolvers.ts +3 -4
  261. package/src/bundler/app-bundler.ts +29 -217
  262. package/src/calls/active-call-lease.ts +207 -0
  263. package/src/calls/call-constants.ts +0 -7
  264. package/src/calls/call-controller.ts +1 -1
  265. package/src/calls/call-conversation-messages.ts +6 -6
  266. package/src/calls/call-domain.ts +73 -38
  267. package/src/calls/call-pointer-message-composer.ts +6 -6
  268. package/src/calls/call-pointer-messages.ts +14 -13
  269. package/src/calls/call-recovery.ts +2 -0
  270. package/src/calls/call-store.ts +21 -28
  271. package/src/calls/guardian-action-sweep.ts +6 -8
  272. package/src/calls/guardian-dispatch.ts +2 -6
  273. package/src/calls/relay-access-wait.ts +4 -4
  274. package/src/calls/relay-server.ts +69 -80
  275. package/src/calls/relay-setup-router.ts +16 -21
  276. package/src/calls/relay-verification.ts +27 -28
  277. package/src/calls/twilio-config.ts +28 -3
  278. package/src/calls/twilio-provider.ts +5 -5
  279. package/src/calls/twilio-rest.ts +26 -27
  280. package/src/calls/twilio-routes.ts +67 -54
  281. package/src/calls/types.ts +8 -8
  282. package/src/calls/voice-ingress-preflight.ts +110 -0
  283. package/src/calls/voice-session-bridge.ts +7 -7
  284. package/src/channels/config.ts +1 -10
  285. package/src/{config/channel-permission-profiles.ts → channels/permission-profiles.ts} +1 -1
  286. package/src/channels/types.ts +2 -13
  287. package/src/cli/__tests__/notifications.test.ts +1 -1
  288. package/src/{amazon → cli/commands/amazon}/client.ts +99 -42
  289. package/src/cli/{amazon.ts → commands/amazon/index.ts} +14 -54
  290. package/src/{amazon → cli/commands/amazon}/request-extractor.ts +39 -3
  291. package/src/cli/commands/amazon/session.ts +108 -0
  292. package/src/cli/{audit.ts → commands/audit.ts} +2 -4
  293. package/src/cli/{autonomy.ts → commands/autonomy.ts} +1 -3
  294. package/src/cli/commands/browser-relay.ts +520 -0
  295. package/src/cli/commands/channel-verification-sessions.ts +442 -0
  296. package/src/cli/{completions.ts → commands/completions.ts} +1 -3
  297. package/src/cli/{config.ts → commands/config.ts} +3 -5
  298. package/src/cli/{contacts.ts → commands/contacts.ts} +15 -17
  299. package/src/cli/{credentials.ts → commands/credentials.ts} +9 -10
  300. package/src/cli/{default-action.ts → commands/default-action.ts} +3 -3
  301. package/src/cli/{dev.ts → commands/dev.ts} +4 -6
  302. package/src/cli/{doctor.ts → commands/doctor.ts} +36 -60
  303. package/src/cli/{email.ts → commands/email.ts} +2 -2
  304. package/src/cli/{keys.ts → commands/keys.ts} +6 -6
  305. package/src/cli/{map.ts → commands/map.ts} +85 -93
  306. package/src/cli/{mcp.ts → commands/mcp.ts} +5 -7
  307. package/src/cli/{memory.ts → commands/memory.ts} +6 -7
  308. package/src/cli/{notifications.ts → commands/notifications.ts} +8 -10
  309. package/src/cli/{oauth.ts → commands/oauth.ts} +2 -2
  310. package/src/cli/commands/platform.ts +176 -0
  311. package/src/cli/{sequence.ts → commands/sequence.ts} +3 -3
  312. package/src/cli/{sessions.ts → commands/sessions.ts} +32 -52
  313. package/src/cli/commands/skills.ts +498 -0
  314. package/src/cli/{trust.ts → commands/trust.ts} +2 -4
  315. package/src/cli/commands/twitter/__tests__/cli-read-routing.test.ts +345 -0
  316. package/src/cli/commands/twitter/__tests__/cli-routing.test.ts +252 -0
  317. package/src/{__tests__/twitter-oauth-client.test.ts → cli/commands/twitter/__tests__/oauth-client.test.ts} +2 -48
  318. package/src/cli/commands/twitter/index.ts +420 -0
  319. package/src/{twitter → cli/commands/twitter}/oauth-client.ts +1 -35
  320. package/src/cli/commands/twitter/router.ts +351 -0
  321. package/src/cli/commands/twitter/types.ts +30 -0
  322. package/src/cli/db.ts +1 -0
  323. package/src/cli/http-client.ts +87 -0
  324. package/src/cli/logger.ts +6 -0
  325. package/src/cli/main-screen.tsx +4 -3
  326. package/src/cli/output.ts +19 -0
  327. package/src/cli/program.ts +29 -27
  328. package/src/cli/reference.ts +27 -37
  329. package/src/cli.ts +452 -240
  330. package/src/config/assistant-feature-flags.ts +3 -15
  331. package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +3 -6
  332. package/src/config/bundled-skills/agentmail/SKILL.md +4 -4
  333. package/src/config/bundled-skills/amazon/SKILL.md +15 -6
  334. package/src/config/bundled-skills/api-mapping/SKILL.md +4 -4
  335. package/src/config/bundled-skills/app-builder/SKILL.md +4 -9
  336. package/src/config/bundled-skills/app-builder/TOOLS.json +0 -4
  337. package/src/config/bundled-skills/browser/SKILL.md +4 -5
  338. package/src/config/bundled-skills/chatgpt-import/SKILL.md +4 -4
  339. package/src/config/bundled-skills/chatgpt-import/tools/chatgpt-import.ts +1 -1
  340. package/src/config/bundled-skills/claude-code/SKILL.md +4 -4
  341. package/src/config/bundled-skills/cli-discover/SKILL.md +4 -4
  342. package/src/config/bundled-skills/computer-use/SKILL.md +4 -4
  343. package/src/config/bundled-skills/contacts/SKILL.md +23 -77
  344. package/src/config/bundled-skills/deploy-fullstack-vercel/SKILL.md +4 -4
  345. package/src/config/bundled-skills/document/SKILL.md +4 -3
  346. package/src/config/bundled-skills/document-writer/SKILL.md +4 -4
  347. package/src/config/bundled-skills/doordash/SKILL.md +4 -12
  348. package/src/config/bundled-skills/doordash/__tests__/doordash-session.test.ts +1 -90
  349. package/src/config/bundled-skills/doordash/doordash-cli.ts +132 -109
  350. package/src/config/bundled-skills/doordash/lib/session.ts +22 -19
  351. package/src/config/bundled-skills/doordash/lib/shared/platform.ts +26 -9
  352. package/src/config/bundled-skills/elevenlabs-voice/SKILL.md +140 -0
  353. package/src/config/bundled-skills/email-setup/SKILL.md +4 -4
  354. package/src/config/bundled-skills/followups/SKILL.md +4 -3
  355. package/src/config/bundled-skills/frontend-design/SKILL.md +2 -0
  356. package/src/config/bundled-skills/google-calendar/SKILL.md +4 -4
  357. package/src/config/bundled-skills/google-oauth-setup/SKILL.md +4 -6
  358. package/src/config/bundled-skills/guardian-verify-setup/SKILL.md +26 -41
  359. package/src/config/bundled-skills/image-studio/SKILL.md +4 -5
  360. package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +1 -1
  361. package/src/config/bundled-skills/influencer/SKILL.md +19 -19
  362. package/src/{influencer → config/bundled-skills/influencer/scripts}/client.ts +73 -56
  363. package/src/config/bundled-skills/influencer/scripts/influencer.ts +267 -0
  364. package/src/config/bundled-skills/knowledge-graph/SKILL.md +4 -2
  365. package/src/config/bundled-skills/macos-automation/SKILL.md +4 -5
  366. package/src/config/bundled-skills/mcp-setup/SKILL.md +4 -4
  367. package/src/config/bundled-skills/media-processing/SKILL.md +3 -2
  368. package/src/config/bundled-skills/messaging/SKILL.md +6 -33
  369. package/src/config/bundled-skills/messaging/tools/messaging-send.ts +0 -5
  370. package/src/config/bundled-skills/notifications/SKILL.md +4 -4
  371. package/src/config/bundled-skills/notion/SKILL.md +4 -4
  372. package/src/config/bundled-skills/notion-oauth-setup/SKILL.md +4 -5
  373. package/src/config/bundled-skills/oauth-setup/SKILL.md +4 -5
  374. package/src/config/bundled-skills/phone-calls/SKILL.md +24 -458
  375. package/src/config/bundled-skills/phone-calls/references/CONFIG.md +83 -0
  376. package/src/config/bundled-skills/phone-calls/references/TRANSCRIPTS.md +57 -0
  377. package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +67 -0
  378. package/src/config/bundled-skills/playbooks/SKILL.md +4 -3
  379. package/src/config/bundled-skills/public-ingress/SKILL.md +65 -14
  380. package/src/config/bundled-skills/reminder/SKILL.md +4 -3
  381. package/src/config/bundled-skills/restaurant-reservation/SKILL.md +4 -6
  382. package/src/config/bundled-skills/schedule/SKILL.md +4 -3
  383. package/src/config/bundled-skills/screen-recording/SKILL.md +4 -3
  384. package/src/config/bundled-skills/self-upgrade/SKILL.md +4 -4
  385. package/src/config/bundled-skills/skills-catalog/SKILL.md +4 -4
  386. package/src/config/bundled-skills/slack/SKILL.md +4 -8
  387. package/src/config/bundled-skills/slack/tools/slack-channel-permissions.ts +1 -1
  388. package/src/config/bundled-skills/slack-app-setup/SKILL.md +66 -88
  389. package/src/config/bundled-skills/slack-digest-setup/SKILL.md +4 -5
  390. package/src/config/bundled-skills/slack-oauth-setup/SKILL.md +4 -5
  391. package/src/config/bundled-skills/start-the-day/SKILL.md +4 -4
  392. package/src/config/bundled-skills/subagent/SKILL.md +4 -3
  393. package/src/config/bundled-skills/tasks/SKILL.md +4 -3
  394. package/src/config/bundled-skills/telegram-setup/SKILL.md +63 -112
  395. package/src/config/bundled-skills/time-based-actions/SKILL.md +4 -3
  396. package/src/config/bundled-skills/transcribe/SKILL.md +4 -3
  397. package/src/config/bundled-skills/twilio-setup/SKILL.md +23 -50
  398. package/src/config/bundled-skills/twitter/SKILL.md +73 -144
  399. package/src/config/bundled-skills/typescript-eval/SKILL.md +4 -4
  400. package/src/config/bundled-skills/vercel-token-setup/SKILL.md +4 -5
  401. package/src/config/bundled-skills/voice-setup/SKILL.md +19 -45
  402. package/src/config/bundled-skills/watcher/SKILL.md +4 -3
  403. package/src/config/env-registry.ts +1 -10
  404. package/src/config/feature-flag-registry.json +8 -16
  405. package/src/config/loader.ts +78 -38
  406. package/src/config/schema.ts +143 -106
  407. package/src/config/schemas/channels.ts +80 -0
  408. package/src/config/schemas/heartbeat.ts +51 -0
  409. package/src/config/schemas/inference.ts +136 -0
  410. package/src/config/schemas/ingress.ts +81 -0
  411. package/src/config/schemas/logging.ts +21 -0
  412. package/src/config/schemas/memory-lifecycle.ts +67 -0
  413. package/src/config/schemas/memory-processing.ts +215 -0
  414. package/src/config/schemas/memory-retrieval.ts +222 -0
  415. package/src/config/schemas/memory-storage.ts +83 -0
  416. package/src/config/schemas/memory.ts +58 -0
  417. package/src/config/schemas/platform.ts +64 -0
  418. package/src/config/schemas/security.ts +54 -0
  419. package/src/config/schemas/swarm.ts +50 -0
  420. package/src/config/schemas/timeouts.ts +47 -0
  421. package/src/config/{agent-schema.ts → schemas/workspace-git.ts} +0 -97
  422. package/src/config/skill-state.ts +3 -13
  423. package/src/config/skills.ts +196 -75
  424. package/src/config/types.ts +1 -20
  425. package/src/contacts/contact-store.ts +12 -49
  426. package/src/contacts/contacts-write.ts +1 -5
  427. package/src/contacts/index.ts +0 -2
  428. package/src/contacts/types.ts +0 -8
  429. package/src/context/window-manager.ts +73 -14
  430. package/src/daemon/assistant-attachments.ts +9 -0
  431. package/src/daemon/computer-use-session.ts +3 -3
  432. package/src/daemon/connection-policy.ts +6 -21
  433. package/src/daemon/context-overflow-policy.ts +1 -1
  434. package/src/daemon/daemon-control.ts +46 -54
  435. package/src/daemon/doordash-steps.ts +1 -1
  436. package/src/daemon/handlers/config-channels.ts +407 -71
  437. package/src/daemon/handlers/config-ingress.ts +17 -85
  438. package/src/daemon/handlers/config-model.ts +145 -123
  439. package/src/daemon/handlers/config-slack-channel.ts +43 -29
  440. package/src/daemon/handlers/config-telegram.ts +32 -27
  441. package/src/daemon/handlers/config-voice.ts +1 -4
  442. package/src/daemon/handlers/dictation.ts +11 -16
  443. package/src/daemon/handlers/identity.ts +5 -6
  444. package/src/daemon/handlers/pairing.ts +5 -13
  445. package/src/daemon/handlers/recording.ts +97 -199
  446. package/src/daemon/handlers/session-history.ts +151 -105
  447. package/src/daemon/handlers/session-user-message.ts +29 -57
  448. package/src/daemon/handlers/sessions.ts +240 -137
  449. package/src/daemon/handlers/shared.ts +62 -95
  450. package/src/daemon/handlers/skills.ts +492 -543
  451. package/src/daemon/lifecycle.ts +155 -55
  452. package/src/daemon/{ipc-contract.ts → message-protocol.ts} +49 -49
  453. package/src/daemon/{ipc-contract → message-types}/apps.ts +0 -25
  454. package/src/daemon/{ipc-contract → message-types}/computer-use.ts +0 -3
  455. package/src/daemon/{ipc-contract → message-types}/diagnostics.ts +0 -16
  456. package/src/daemon/{ipc-contract → message-types}/integrations.ts +30 -20
  457. package/src/daemon/{ipc-contract → message-types}/memory.ts +8 -0
  458. package/src/daemon/{ipc-contract → message-types}/notifications.ts +15 -1
  459. package/src/daemon/{ipc-contract → message-types}/sessions.ts +7 -1
  460. package/src/daemon/{ipc-contract → message-types}/shared.ts +0 -8
  461. package/src/daemon/{ipc-contract → message-types}/surfaces.ts +2 -0
  462. package/src/daemon/{ipc-contract → message-types}/workspace.ts +2 -2
  463. package/src/daemon/providers-setup.ts +0 -5
  464. package/src/daemon/recording-executor.ts +0 -7
  465. package/src/daemon/ride-shotgun-handler.ts +42 -14
  466. package/src/daemon/seed-files.ts +3 -27
  467. package/src/daemon/server.ts +134 -524
  468. package/src/daemon/session-agent-loop-handlers.ts +46 -9
  469. package/src/daemon/session-agent-loop.ts +86 -24
  470. package/src/daemon/session-attachments.ts +1 -1
  471. package/src/daemon/session-error.ts +1 -1
  472. package/src/daemon/session-history.ts +20 -15
  473. package/src/daemon/session-lifecycle.ts +9 -7
  474. package/src/daemon/session-memory.ts +15 -1
  475. package/src/daemon/session-messaging.ts +10 -6
  476. package/src/daemon/session-notifiers.ts +10 -8
  477. package/src/daemon/session-process.ts +34 -25
  478. package/src/daemon/session-queue-manager.ts +1 -1
  479. package/src/daemon/session-runtime-assembly.ts +6 -32
  480. package/src/daemon/session-surfaces.ts +187 -35
  481. package/src/daemon/session-tool-setup.ts +1 -1
  482. package/src/daemon/session-usage.ts +119 -18
  483. package/src/daemon/session.ts +11 -33
  484. package/src/daemon/tool-side-effects.ts +6 -5
  485. package/src/daemon/trace-emitter.ts +1 -1
  486. package/src/daemon/{guardian-verification-intent.ts → verification-session-intent.ts} +16 -16
  487. package/src/daemon/watch-handler.ts +2 -5
  488. package/src/email/service.ts +8 -8
  489. package/src/events/domain-events.ts +0 -1
  490. package/src/events/tool-notification-listener.ts +1 -1
  491. package/src/followups/followup-store.ts +1 -2
  492. package/src/followups/types.ts +0 -6
  493. package/src/heartbeat/heartbeat-service.ts +1 -1
  494. package/src/inbound/platform-callback-registration.ts +1 -1
  495. package/src/inbound/public-ingress-urls.ts +0 -8
  496. package/src/index.ts +12 -0
  497. package/src/mcp/client.ts +1 -1
  498. package/src/mcp/manager.ts +1 -1
  499. package/src/memory/app-store.ts +1 -60
  500. package/src/memory/{guardian-verification.ts → channel-verification-sessions.ts} +110 -93
  501. package/src/memory/conversation-attention-store.ts +154 -0
  502. package/src/memory/conversation-bootstrap.ts +1 -1
  503. package/src/memory/conversation-crud.ts +53 -1
  504. package/src/memory/conversation-display-order-migration.ts +2 -3
  505. package/src/memory/conversation-queries.ts +1 -29
  506. package/src/memory/conversation-title-service.ts +26 -21
  507. package/src/memory/db-connection.ts +1 -8
  508. package/src/memory/db-init.ts +20 -0
  509. package/src/memory/delivery-crud.ts +4 -34
  510. package/src/memory/external-conversation-store.ts +1 -1
  511. package/src/memory/format-recall.ts +47 -0
  512. package/src/memory/guardian-action-store.ts +4 -5
  513. package/src/memory/guardian-rate-limits.ts +0 -3
  514. package/src/memory/invite-store.ts +1 -1
  515. package/src/memory/job-handlers/backfill.ts +9 -2
  516. package/src/memory/job-handlers/extraction.ts +2 -7
  517. package/src/memory/job-handlers/summarization.ts +1 -1
  518. package/src/memory/llm-usage-store.ts +11 -0
  519. package/src/memory/migrations/114-notifications.ts +12 -40
  520. package/src/memory/migrations/140-backfill-usage-cache-accounting.ts +357 -0
  521. package/src/memory/migrations/141-rename-verification-table.ts +55 -0
  522. package/src/memory/migrations/142-rename-verification-session-id-column.ts +32 -0
  523. package/src/memory/migrations/143-rename-guardian-verification-values.ts +48 -0
  524. package/src/memory/migrations/144-rename-voice-to-phone.ts +147 -0
  525. package/src/memory/migrations/index.ts +5 -0
  526. package/src/memory/migrations/registry.ts +30 -0
  527. package/src/memory/qdrant-circuit-breaker.ts +5 -0
  528. package/src/memory/retriever.test.ts +707 -0
  529. package/src/memory/retriever.ts +120 -116
  530. package/src/memory/schema/calls.ts +3 -7
  531. package/src/memory/schema/guardian.ts +2 -2
  532. package/src/memory/schema/infrastructure.ts +0 -8
  533. package/src/memory/search/lexical.ts +4 -1
  534. package/src/memory/search/query-expansion.test.ts +70 -0
  535. package/src/memory/search/query-expansion.ts +118 -0
  536. package/src/memory/search/types.ts +18 -17
  537. package/src/messaging/providers/telegram-bot/adapter.ts +1 -1
  538. package/src/messaging/providers/whatsapp/adapter.ts +1 -4
  539. package/src/messaging/registry.ts +0 -1
  540. package/src/notifications/README.md +13 -22
  541. package/src/notifications/adapters/macos.ts +1 -1
  542. package/src/notifications/conversation-pairing.ts +2 -2
  543. package/src/notifications/copy-composer.ts +2 -2
  544. package/src/notifications/decision-engine.ts +1 -10
  545. package/src/notifications/destination-resolver.ts +2 -3
  546. package/src/notifications/emit-signal.ts +2 -8
  547. package/src/notifications/guardian-question-mode.ts +5 -8
  548. package/src/notifications/signal.ts +1 -2
  549. package/src/notifications/types.ts +1 -1
  550. package/src/oauth/token-persistence.ts +25 -1
  551. package/src/permissions/checker.ts +4 -29
  552. package/src/permissions/defaults.ts +9 -9
  553. package/src/permissions/prompter.ts +1 -1
  554. package/src/permissions/secret-prompter.ts +1 -1
  555. package/src/permissions/shell-identity.ts +1 -1
  556. package/src/permissions/trust-store.ts +13 -76
  557. package/src/permissions/workspace-policy.ts +1 -1
  558. package/src/{config → prompts}/computer-use-prompt.ts +1 -1
  559. package/src/{config → prompts}/system-prompt.ts +44 -26
  560. package/src/{config → prompts}/templates/BOOTSTRAP.md +0 -3
  561. package/src/providers/registry.ts +2 -4
  562. package/src/runtime/AGENTS.md +6 -8
  563. package/src/runtime/access-request-helper.ts +36 -55
  564. package/src/runtime/actor-trust-resolver.ts +1 -24
  565. package/src/runtime/approval-message-composer.ts +6 -2
  566. package/src/runtime/assistant-event.ts +1 -1
  567. package/src/runtime/auth/__tests__/guard-tests.test.ts +1 -0
  568. package/src/runtime/auth/__tests__/ipc-auth-context.test.ts +1 -1
  569. package/src/runtime/auth/__tests__/scopes.test.ts +2 -1
  570. package/src/runtime/auth/__tests__/subject.test.ts +32 -0
  571. package/src/runtime/auth/route-policy.ts +137 -25
  572. package/src/runtime/auth/scopes.ts +1 -0
  573. package/src/runtime/auth/subject.ts +9 -0
  574. package/src/runtime/auth/token-service.ts +12 -1
  575. package/src/runtime/auth/types.ts +1 -1
  576. package/src/runtime/channel-approval-types.ts +1 -1
  577. package/src/runtime/channel-approvals.ts +1 -1
  578. package/src/runtime/channel-invite-transport.ts +0 -2
  579. package/src/runtime/channel-invite-transports/slack.ts +5 -19
  580. package/src/runtime/channel-invite-transports/telegram.ts +17 -34
  581. package/src/runtime/channel-invite-transports/voice.ts +1 -1
  582. package/src/runtime/channel-readiness-service.ts +24 -159
  583. package/src/runtime/channel-readiness-types.ts +5 -1
  584. package/src/runtime/channel-reply-delivery.ts +43 -3
  585. package/src/runtime/channel-retry-sweep.ts +14 -22
  586. package/src/runtime/{channel-guardian-service.ts → channel-verification-service.ts} +50 -53
  587. package/src/runtime/confirmation-request-guardian-bridge.ts +2 -3
  588. package/src/runtime/gateway-client.ts +12 -15
  589. package/src/runtime/guardian-action-followup-executor.ts +8 -73
  590. package/src/runtime/guardian-action-grant-minter.ts +45 -61
  591. package/src/runtime/guardian-action-message-composer.ts +4 -4
  592. package/src/runtime/guardian-reply-router.ts +3 -3
  593. package/src/runtime/http-server.ts +133 -24
  594. package/src/runtime/http-types.ts +44 -1
  595. package/src/runtime/invite-instruction-generator.ts +1 -3
  596. package/src/runtime/invite-redemption-service.ts +5 -5
  597. package/src/runtime/invite-service.ts +7 -7
  598. package/src/runtime/local-actor-identity.ts +28 -2
  599. package/src/runtime/local-gateway-health.ts +275 -0
  600. package/src/runtime/middleware/error-handler.ts +14 -1
  601. package/src/runtime/middleware/twilio-validation.ts +3 -3
  602. package/src/runtime/migrations/migration-transport.ts +18 -3
  603. package/src/runtime/migrations/rebind-secrets-screen.ts +2 -2
  604. package/src/runtime/nl-approval-parser.ts +2 -3
  605. package/src/runtime/routes/access-request-decision.ts +2 -2
  606. package/src/runtime/routes/app-management-routes.ts +918 -0
  607. package/src/runtime/routes/approval-routes.ts +76 -7
  608. package/src/runtime/routes/approval-strategies/guardian-callback-strategy.ts +38 -203
  609. package/src/runtime/routes/brain-graph/brain-graph.html +1845 -0
  610. package/src/runtime/routes/brain-graph-routes.ts +4 -42
  611. package/src/runtime/routes/channel-delivery-routes.ts +5 -4
  612. package/src/runtime/routes/channel-route-shared.ts +1 -3
  613. package/src/runtime/routes/channel-routes.ts +1 -4
  614. package/src/runtime/routes/channel-verification-routes.ts +257 -0
  615. package/src/runtime/routes/computer-use-routes.ts +595 -0
  616. package/src/runtime/routes/contact-routes.ts +1 -317
  617. package/src/runtime/routes/conversation-attention-routes.ts +6 -5
  618. package/src/runtime/routes/conversation-routes.ts +20 -24
  619. package/src/runtime/routes/debug-routes.ts +1 -1
  620. package/src/runtime/routes/diagnostics-routes.ts +890 -0
  621. package/src/runtime/routes/documents-routes.ts +227 -0
  622. package/src/runtime/routes/guardian-approval-interception.ts +25 -48
  623. package/src/runtime/routes/guardian-bootstrap-routes.ts +3 -3
  624. package/src/runtime/routes/guardian-expiry-sweep.ts +2 -2
  625. package/src/runtime/routes/guardian-refresh-routes.ts +11 -6
  626. package/src/runtime/routes/inbound-conversation.ts +3 -10
  627. package/src/runtime/routes/inbound-message-handler.ts +7 -6
  628. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +22 -22
  629. package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +44 -0
  630. package/src/runtime/routes/inbound-stages/background-dispatch.ts +140 -22
  631. package/src/runtime/routes/inbound-stages/bootstrap-intercept.ts +4 -4
  632. package/src/runtime/routes/inbound-stages/edit-intercept.ts +5 -5
  633. package/src/runtime/routes/inbound-stages/escalation-intercept.ts +3 -3
  634. package/src/runtime/routes/inbound-stages/secret-ingress-check.ts +4 -4
  635. package/src/runtime/routes/inbound-stages/verification-intercept.ts +13 -14
  636. package/src/runtime/routes/integrations/slack/channel.ts +72 -0
  637. package/src/runtime/routes/{slack-share-routes.ts → integrations/slack/share.ts} +9 -9
  638. package/src/runtime/routes/integrations/telegram.ts +111 -0
  639. package/src/runtime/routes/integrations/twilio.ts +451 -0
  640. package/src/runtime/routes/invite-routes.ts +2 -2
  641. package/src/runtime/routes/pairing-routes.ts +1 -1
  642. package/src/runtime/routes/recording-routes.ts +332 -0
  643. package/src/{daemon/handlers/config-scheduling.ts → runtime/routes/schedule-routes.ts} +91 -106
  644. package/src/runtime/routes/session-management-routes.ts +167 -0
  645. package/src/runtime/routes/session-query-routes.ts +204 -0
  646. package/src/runtime/routes/settings-routes.ts +887 -0
  647. package/src/runtime/routes/skills-routes.ts +266 -0
  648. package/src/runtime/routes/subagents-routes.ts +246 -0
  649. package/src/runtime/routes/surface-action-routes.ts +100 -10
  650. package/src/runtime/routes/surface-content-routes.ts +1 -1
  651. package/src/runtime/routes/work-items-routes.ts +809 -0
  652. package/src/runtime/routes/workspace-routes.test.ts +778 -0
  653. package/src/runtime/routes/workspace-routes.ts +410 -0
  654. package/src/runtime/routes/workspace-utils.ts +88 -0
  655. package/src/runtime/telegram-streaming-delivery.test.ts +597 -0
  656. package/src/runtime/telegram-streaming-delivery.ts +380 -0
  657. package/src/runtime/tool-grant-request-helper.ts +1 -2
  658. package/src/runtime/trust-context-resolver.ts +0 -1
  659. package/src/runtime/{guardian-outbound-actions.ts → verification-outbound-actions.ts} +23 -188
  660. package/src/runtime/verification-rate-limiter.ts +2 -2
  661. package/src/runtime/{guardian-verification-templates.ts → verification-templates.ts} +2 -28
  662. package/src/schedule/integration-status.ts +2 -2
  663. package/src/schedule/schedule-store.ts +7 -9
  664. package/src/sequence/engine.ts +1 -1
  665. package/src/skills/active-skill-tools.ts +0 -8
  666. package/src/skills/clawhub.ts +1 -10
  667. package/src/skills/managed-store.ts +14 -4
  668. package/src/skills/slash-commands.ts +1 -1
  669. package/src/subagent/manager.ts +1 -1
  670. package/src/subagent/types.ts +1 -1
  671. package/src/tasks/SPEC.md +10 -10
  672. package/src/tasks/task-scheduler.ts +1 -1
  673. package/src/telegram/bot-username.ts +13 -0
  674. package/src/tools/AGENTS.md +38 -0
  675. package/src/tools/apps/executors.ts +0 -6
  676. package/src/tools/assets/materialize.ts +1 -1
  677. package/src/tools/assets/search.ts +1 -1
  678. package/src/tools/browser/browser-execution.ts +2 -2
  679. package/src/tools/browser/browser-manager.ts +88 -11
  680. package/src/tools/browser/browser-screencast.ts +1 -1
  681. package/src/tools/browser/headless-browser.ts +0 -17
  682. package/src/tools/browser/jit-auth.ts +1 -1
  683. package/src/tools/browser/recording-store.ts +19 -1
  684. package/src/tools/browser/runtime-check.ts +4 -2
  685. package/src/tools/calls/call-start.ts +3 -3
  686. package/src/tools/credentials/metadata-store.ts +0 -13
  687. package/src/tools/credentials/vault.ts +7 -31
  688. package/src/tools/document/editor-template.ts +10 -8
  689. package/src/tools/followups/followup_create.ts +0 -8
  690. package/src/tools/mcp/mcp-tool-factory.ts +1 -1
  691. package/src/tools/memory/definitions.ts +32 -10
  692. package/src/tools/memory/handlers.test.ts +573 -0
  693. package/src/tools/memory/handlers.ts +222 -65
  694. package/src/tools/memory/register.ts +53 -24
  695. package/src/tools/network/script-proxy/session-manager.ts +1 -12
  696. package/src/tools/schedule/update.ts +0 -8
  697. package/src/tools/skills/load.ts +3 -3
  698. package/src/tools/subagent/read.ts +1 -1
  699. package/src/tools/system/voice-config.ts +2 -14
  700. package/src/tools/terminal/safe-env.ts +5 -18
  701. package/src/tools/tool-approval-handler.ts +4 -4
  702. package/src/tools/tool-manifest.ts +4 -2
  703. package/src/tools/types.ts +1 -1
  704. package/src/tools/{guardian-control-plane-policy.ts → verification-control-plane-policy.ts} +37 -39
  705. package/src/twitter/platform-proxy-client.ts +408 -0
  706. package/src/usage/types.ts +21 -0
  707. package/src/util/canonicalize-identity.ts +2 -6
  708. package/src/util/errors.ts +12 -0
  709. package/src/util/platform.ts +93 -86
  710. package/src/util/pricing.ts +180 -43
  711. package/src/work-items/work-item-runner.ts +1 -1
  712. package/scripts/ipc/check-contract-inventory.ts +0 -107
  713. package/scripts/ipc/check-swift-decoder-drift.ts +0 -184
  714. package/scripts/ipc/generate-swift.ts +0 -528
  715. package/src/__tests__/__snapshots__/ipc-snapshot.test.ts.snap +0 -3043
  716. package/src/__tests__/app-migration.test.ts +0 -148
  717. package/src/__tests__/config-loader-migration.test.ts +0 -85
  718. package/src/__tests__/daemon-lifecycle.test.ts +0 -715
  719. package/src/__tests__/daemon-server-session-init.test.ts +0 -864
  720. package/src/__tests__/guardian-actions-endpoint.test.ts +0 -1452
  721. package/src/__tests__/handlers-add-trust-rule-metadata.test.ts +0 -228
  722. package/src/__tests__/handlers-cu-observation-blob.test.ts +0 -397
  723. package/src/__tests__/handlers-ipc-blob-probe.test.ts +0 -218
  724. package/src/__tests__/handlers-slack-config.test.ts +0 -140
  725. package/src/__tests__/handlers-telegram-config.test.ts +0 -1317
  726. package/src/__tests__/handlers-twitter-config.test.ts +0 -1145
  727. package/src/__tests__/home-base-bootstrap.test.ts +0 -86
  728. package/src/__tests__/ingress-reconcile.test.ts +0 -606
  729. package/src/__tests__/integrations-cli.test.ts +0 -232
  730. package/src/__tests__/ipc-blob-store.test.ts +0 -329
  731. package/src/__tests__/ipc-contract-inventory.test.ts +0 -69
  732. package/src/__tests__/ipc-contract.test.ts +0 -76
  733. package/src/__tests__/ipc-protocol.test.ts +0 -120
  734. package/src/__tests__/ipc-roundtrip.benchmark.test.ts +0 -250
  735. package/src/__tests__/ipc-snapshot.test.ts +0 -2197
  736. package/src/__tests__/ipc-validate.test.ts +0 -471
  737. package/src/__tests__/migration-cli-flows.test.ts +0 -186
  738. package/src/__tests__/migration-ordering.test.ts +0 -267
  739. package/src/__tests__/oauth-connect-handler.test.ts +0 -361
  740. package/src/__tests__/platform-move-helper.test.ts +0 -108
  741. package/src/__tests__/platform-socket-path.test.ts +0 -52
  742. package/src/__tests__/platform-workspace-migration.test.ts +0 -1051
  743. package/src/__tests__/prebuilt-home-base-seed.test.ts +0 -79
  744. package/src/__tests__/recording-intent-handler.test.ts +0 -1155
  745. package/src/__tests__/script-proxy-profile-template-fallback.test.ts +0 -127
  746. package/src/__tests__/sms-messaging-provider.test.ts +0 -156
  747. package/src/__tests__/tool-permission-simulate-handler.test.ts +0 -367
  748. package/src/__tests__/twitter-auth-handler.test.ts +0 -561
  749. package/src/__tests__/twitter-cli-error-shaping.test.ts +0 -224
  750. package/src/__tests__/twitter-cli-routing.test.ts +0 -286
  751. package/src/__tests__/work-item-output.test.ts +0 -150
  752. package/src/amazon/session.ts +0 -58
  753. package/src/cli/channels.ts +0 -51
  754. package/src/cli/influencer.ts +0 -319
  755. package/src/cli/integrations.ts +0 -372
  756. package/src/cli/ipc-client.ts +0 -88
  757. package/src/cli/twitter.ts +0 -1111
  758. package/src/config/bundled-skills/configure-settings/SKILL.md +0 -86
  759. package/src/config/bundled-skills/doordash/lib/shared/ipc.ts +0 -32
  760. package/src/config/bundled-skills/sms-setup/SKILL.md +0 -210
  761. package/src/config/core-schema.ts +0 -434
  762. package/src/config/memory-schema.ts +0 -617
  763. package/src/daemon/auth-manager.ts +0 -106
  764. package/src/daemon/handlers/apps.ts +0 -783
  765. package/src/daemon/handlers/avatar.ts +0 -73
  766. package/src/daemon/handlers/browser.ts +0 -3
  767. package/src/daemon/handlers/computer-use.ts +0 -231
  768. package/src/daemon/handlers/config-dispatch.ts +0 -29
  769. package/src/daemon/handlers/config-heartbeat.ts +0 -299
  770. package/src/daemon/handlers/config-inbox.ts +0 -457
  771. package/src/daemon/handlers/config-integrations.ts +0 -409
  772. package/src/daemon/handlers/config-platform.ts +0 -77
  773. package/src/daemon/handlers/config-slack.ts +0 -41
  774. package/src/daemon/handlers/config-tools.ts +0 -226
  775. package/src/daemon/handlers/config-trust.ts +0 -135
  776. package/src/daemon/handlers/config.ts +0 -64
  777. package/src/daemon/handlers/contacts.ts +0 -193
  778. package/src/daemon/handlers/diagnostics.ts +0 -382
  779. package/src/daemon/handlers/documents.ts +0 -188
  780. package/src/daemon/handlers/guardian-actions.ts +0 -82
  781. package/src/daemon/handlers/home-base.ts +0 -82
  782. package/src/daemon/handlers/index.ts +0 -222
  783. package/src/daemon/handlers/misc.ts +0 -1139
  784. package/src/daemon/handlers/navigate-settings.ts +0 -29
  785. package/src/daemon/handlers/oauth-connect.ts +0 -202
  786. package/src/daemon/handlers/open-bundle-handler.ts +0 -88
  787. package/src/daemon/handlers/publish.ts +0 -176
  788. package/src/daemon/handlers/signing.ts +0 -56
  789. package/src/daemon/handlers/subagents.ts +0 -286
  790. package/src/daemon/handlers/twitter-auth.ts +0 -220
  791. package/src/daemon/handlers/work-items.ts +0 -796
  792. package/src/daemon/handlers/workspace-files.ts +0 -84
  793. package/src/daemon/handlers.ts +0 -16
  794. package/src/daemon/ipc-blob-store.ts +0 -246
  795. package/src/daemon/ipc-contract-inventory.json +0 -348
  796. package/src/daemon/ipc-contract-inventory.ts +0 -202
  797. package/src/daemon/ipc-handler.ts +0 -120
  798. package/src/daemon/ipc-protocol.ts +0 -85
  799. package/src/daemon/ipc-validate.ts +0 -254
  800. package/src/home-base/app-link-store.ts +0 -78
  801. package/src/home-base/bootstrap.ts +0 -74
  802. package/src/home-base/prebuilt/brain-graph.html +0 -1483
  803. package/src/home-base/prebuilt/index.html +0 -702
  804. package/src/home-base/prebuilt/seed-metadata.json +0 -21
  805. package/src/home-base/prebuilt/seed.ts +0 -122
  806. package/src/home-base/prebuilt-home-base-updater.ts +0 -36
  807. package/src/memory/app-migration.ts +0 -114
  808. package/src/memory/channel-delivery-store.ts +0 -40
  809. package/src/memory/channel-guardian-store.ts +0 -83
  810. package/src/memory/conversation-store.ts +0 -102
  811. package/src/memory/schema-migration.ts +0 -38
  812. package/src/messaging/providers/sms/adapter.ts +0 -232
  813. package/src/messaging/providers/sms/client.ts +0 -93
  814. package/src/messaging/providers/sms/types.ts +0 -7
  815. package/src/migrations/config-merge.ts +0 -62
  816. package/src/migrations/data-layout.ts +0 -89
  817. package/src/migrations/data-merge.ts +0 -44
  818. package/src/migrations/hooks-merge.ts +0 -118
  819. package/src/migrations/index.ts +0 -6
  820. package/src/migrations/log.ts +0 -28
  821. package/src/migrations/skills-merge.ts +0 -44
  822. package/src/migrations/workspace-layout.ts +0 -94
  823. package/src/notifications/adapters/sms.ts +0 -94
  824. package/src/runtime/channel-approval-parser.ts +0 -123
  825. package/src/runtime/channel-invite-transports/sms.ts +0 -53
  826. package/src/runtime/routes/approval-strategies/guardian-legacy-fallback-strategy.ts +0 -82
  827. package/src/runtime/routes/integration-routes.ts +0 -381
  828. package/src/runtime/routes/twilio-routes.ts +0 -1251
  829. package/src/twitter/client.ts +0 -979
  830. package/src/twitter/router.ts +0 -131
  831. package/src/twitter/session.ts +0 -54
  832. package/src/util/cookie-session.ts +0 -114
  833. package/src/watcher/providers/slack.ts +0 -282
  834. /package/src/{amazon → cli/commands/amazon}/cart.ts +0 -0
  835. /package/src/{amazon → cli/commands/amazon}/checkout.ts +0 -0
  836. /package/src/{amazon → cli/commands/amazon}/product-details.ts +0 -0
  837. /package/src/{amazon → cli/commands/amazon}/search.ts +0 -0
  838. /package/src/config/{calls-schema.ts → schemas/calls.ts} +0 -0
  839. /package/src/config/{elevenlabs-schema.ts → schemas/elevenlabs.ts} +0 -0
  840. /package/src/config/{mcp-schema.ts → schemas/mcp.ts} +0 -0
  841. /package/src/config/{notifications-schema.ts → schemas/notifications.ts} +0 -0
  842. /package/src/config/{sandbox-schema.ts → schemas/sandbox.ts} +0 -0
  843. /package/src/config/{skills-schema.ts → schemas/skills.ts} +0 -0
  844. /package/src/daemon/{ipc-contract → message-types}/browser.ts +0 -0
  845. /package/src/daemon/{ipc-contract → message-types}/contacts.ts +0 -0
  846. /package/src/daemon/{ipc-contract → message-types}/documents.ts +0 -0
  847. /package/src/daemon/{ipc-contract → message-types}/guardian-actions.ts +0 -0
  848. /package/src/daemon/{ipc-contract → message-types}/inbox.ts +0 -0
  849. /package/src/daemon/{ipc-contract → message-types}/messages.ts +0 -0
  850. /package/src/daemon/{ipc-contract → message-types}/pairing.ts +0 -0
  851. /package/src/daemon/{ipc-contract → message-types}/schedules.ts +0 -0
  852. /package/src/daemon/{ipc-contract → message-types}/settings.ts +0 -0
  853. /package/src/daemon/{ipc-contract → message-types}/skills.ts +0 -0
  854. /package/src/daemon/{ipc-contract → message-types}/subagents.ts +0 -0
  855. /package/src/daemon/{ipc-contract → message-types}/trust.ts +0 -0
  856. /package/src/daemon/{ipc-contract → message-types}/work-items.ts +0 -0
  857. /package/src/{cli/email-guardrails.ts → email/guardrails.ts} +0 -0
  858. /package/src/{config → prompts}/__tests__/build-cli-reference-section.test.ts +0 -0
  859. /package/src/{config → prompts}/templates/IDENTITY.md +0 -0
  860. /package/src/{config → prompts}/templates/SOUL.md +0 -0
  861. /package/src/{config → prompts}/templates/UPDATES.md +0 -0
  862. /package/src/{config → prompts}/templates/USER.md +0 -0
  863. /package/src/{config → prompts}/update-bulletin-format.ts +0 -0
  864. /package/src/{config → prompts}/update-bulletin-state.ts +0 -0
  865. /package/src/{config → prompts}/update-bulletin-template-path.ts +0 -0
  866. /package/src/{config → prompts}/update-bulletin.ts +0 -0
  867. /package/src/{config → prompts}/user-reference.ts +0 -0
@@ -217,47 +217,6 @@ function backfillDefaults(rules: TrustRule[]): boolean {
217
217
  return changed;
218
218
  }
219
219
 
220
- /**
221
- * Update persisted starter-bundle rules whose pattern matches a known legacy
222
- * format (e.g. the old "tool:**" prefix was changed to standalone "**").
223
- * Returns true when at least one rule was updated.
224
- *
225
- * Only rules with a recognised legacy pattern are migrated. If a user has
226
- * intentionally customised a starter rule's pattern (e.g. narrowed it), it is
227
- * left untouched.
228
- */
229
- function migrateStarterRulePatterns(rules: TrustRule[]): boolean {
230
- const templatesByID = new Map(getStarterBundleRules().map((t) => [t.id, t]));
231
- let changed = false;
232
- for (const rule of rules) {
233
- const template = templatesByID.get(rule.id);
234
- if (!template || rule.pattern === template.pattern) continue;
235
- // Only migrate patterns that match a known legacy format.
236
- // The "tool:**" prefix (e.g. "file_read:**") was the original pattern
237
- // before it was changed to standalone "**".
238
- if (!isLegacyStarterPattern(rule.pattern, rule.tool)) continue;
239
- log.info(
240
- {
241
- ruleId: rule.id,
242
- oldPattern: rule.pattern,
243
- newPattern: template.pattern,
244
- },
245
- "Migrated starter rule pattern to current template",
246
- );
247
- rule.pattern = template.pattern;
248
- changed = true;
249
- }
250
- return changed;
251
- }
252
-
253
- /** Recognises legacy starter-rule patterns that should be auto-migrated. */
254
- function isLegacyStarterPattern(pattern: string, tool: string): boolean {
255
- // Legacy format used "tool:**" prefixes, e.g. "file_read:**", "glob:**".
256
- // Only match the exact legacy pattern for this specific tool to avoid
257
- // silently resetting user-customised patterns.
258
- return pattern === `${tool}:**`;
259
- }
260
-
261
220
  function loadFromDisk(): TrustRule[] {
262
221
  const path = getTrustPath();
263
222
  let rules: TrustRule[] = [];
@@ -274,33 +233,19 @@ function loadFromDisk(): TrustRule[] {
274
233
  // Restore persisted starter bundle flag
275
234
  cachedStarterBundleAccepted = data.starterBundleAccepted === true;
276
235
 
277
- if (data.version === 1) {
278
- // Migration: v1 → v2. All existing rules are user-created → priority 100.
279
- rules = rawRules.map((r) => ({
280
- ...r,
281
- priority: 100,
282
- }));
283
- needsSave = true;
284
- log.info(
285
- { ruleCount: rules.length },
286
- "Migrated v1 trust rules to v2 (priority=100)",
287
- );
288
- // Fall through to v2 → v3 migration below
289
- }
290
-
291
- if (data.version === 2 || (data.version === 1 && needsSave)) {
292
- // Migration: v2 → v3. Existing rules have no principal fields,
293
- // which is correct — missing principal fields act as wildcards.
294
- if (data.version === 2) {
295
- rules = rawRules;
296
- }
297
- needsSave = true;
298
- log.info(
299
- { ruleCount: rules.length },
300
- "Migrated v2 trust rules to v3 (principal fields)",
301
- );
302
- } else if (data.version === TRUST_FILE_VERSION) {
236
+ if (
237
+ data.version === TRUST_FILE_VERSION ||
238
+ data.version === 1 ||
239
+ data.version === 2
240
+ ) {
303
241
  rules = rawRules;
242
+ if (data.version !== TRUST_FILE_VERSION) {
243
+ needsSave = true;
244
+ log.info(
245
+ { version: data.version, targetVersion: TRUST_FILE_VERSION },
246
+ "Migrating legacy trust file version",
247
+ );
248
+ }
304
249
 
305
250
  // Strip legacy principal-scoped fields from persisted v3 rules.
306
251
  // Before the principal concept was removed, rules could carry
@@ -323,7 +268,7 @@ function loadFromDisk(): TrustRule[] {
323
268
  needsSave = true;
324
269
  }
325
270
  }
326
- } else if (data.version !== 1) {
271
+ } else {
327
272
  log.warn(
328
273
  { version: data.version },
329
274
  "Unknown trust file version, applying defaults in-memory only",
@@ -347,12 +292,6 @@ function loadFromDisk(): TrustRule[] {
347
292
  needsSave = true;
348
293
  }
349
294
 
350
- // Migrate persisted starter rules whose pattern has drifted from the
351
- // current template (e.g. old "tool:**" → "**").
352
- if (migrateStarterRulePatterns(rules)) {
353
- needsSave = true;
354
- }
355
-
356
295
  rules.sort(ruleOrder);
357
296
 
358
297
  if (needsSave) {
@@ -711,8 +650,6 @@ export interface AcceptStarterBundleResult {
711
650
  */
712
651
  export function acceptStarterBundle(): AcceptStarterBundleResult {
713
652
  // Re-read from disk to avoid lost updates.
714
- // loadFromDisk() also runs migrateStarterRulePatterns() to fix any
715
- // stale patterns (e.g. old "tool:**" → "**") before we get here.
716
653
  cachedRules = null;
717
654
  cachedStarterBundleAccepted = null;
718
655
  const rules = [...getRules()];
@@ -80,7 +80,7 @@ const HOST_TOOLS = new Set([
80
80
  const ALWAYS_SCOPED_TOOLS = new Set([
81
81
  "skill_load",
82
82
  "view_image",
83
- "memory_search",
83
+ "memory_recall",
84
84
  "ui_update",
85
85
  "ui_dismiss",
86
86
  ]);
@@ -71,7 +71,7 @@ APP-SPECIFIC TIPS:
71
71
  - Messages: Click the search bar or use cmd+n for a new message.
72
72
 
73
73
  VERIFICATION CODES:
74
- When a signup or login flow requires a verification code (email, SMS, or authenticator):
74
+ When a signup or login flow requires a verification code (email or authenticator):
75
75
  1. Use ui_show with surface_type "form" to ask the user:
76
76
  ui_show({ surface_type: "form", title: "Verification Code", data: { fields: [{ id: "code", type: "text", label: "Enter the verification code", required: true }] } })
77
77
  2. Wait for the user's response
@@ -2,6 +2,11 @@ import { copyFileSync, existsSync, readFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
 
4
4
  import { CLI_HELP_REFERENCE } from "../cli/reference.js";
5
+ import { isAssistantFeatureFlagEnabled } from "../config/assistant-feature-flags.js";
6
+ import { getBaseDataDir, getIsContainerized } from "../config/env-registry.js";
7
+ import { getConfig, getNestedValue, loadRawConfig } from "../config/loader.js";
8
+ import { skillFlagKey } from "../config/skill-state.js";
9
+ import { loadSkillCatalog, type SkillSummary } from "../config/skills.js";
5
10
  import { listCredentialMetadata } from "../tools/credentials/metadata-store.js";
6
11
  import { resolveBundledDir } from "../util/bundled-asset.js";
7
12
  import { getLogger } from "../util/logger.js";
@@ -10,11 +15,6 @@ import {
10
15
  getWorkspacePromptPath,
11
16
  isMacOS,
12
17
  } from "../util/platform.js";
13
- import { isAssistantFeatureFlagEnabled } from "./assistant-feature-flags.js";
14
- import { getBaseDataDir, getIsContainerized } from "./env-registry.js";
15
- import { getConfig } from "./loader.js";
16
- import { skillFlagKey } from "./skill-state.js";
17
- import { loadSkillCatalog, type SkillSummary } from "./skills.js";
18
18
  import { resolveUserPronouns, resolveUserReference } from "./user-reference.js";
19
19
 
20
20
  const log = getLogger("system-prompt");
@@ -170,7 +170,7 @@ export function buildSystemPrompt(): string {
170
170
  config,
171
171
  )
172
172
  ) {
173
- parts.push(buildGuardianVerificationRoutingSection());
173
+ parts.push(buildVerificationRoutingSection());
174
174
  }
175
175
  parts.push(buildAttachmentSection());
176
176
  parts.push(buildInChatConfigurationSection());
@@ -186,6 +186,7 @@ export function buildSystemPrompt(): string {
186
186
  parts.push(buildAccessPreferenceSection());
187
187
  parts.push(buildIntegrationSection());
188
188
  parts.push(buildMemoryPersistenceSection());
189
+ parts.push(buildMemoryRecallSection());
189
190
  parts.push(buildWorkspaceReflectionSection());
190
191
  parts.push(buildLearningMemorySection());
191
192
 
@@ -227,7 +228,7 @@ function buildTaskScheduleReminderRoutingSection(): string {
227
228
  ].join("\n");
228
229
  }
229
230
 
230
- export function buildGuardianVerificationRoutingSection(): string {
231
+ export function buildVerificationRoutingSection(): string {
231
232
  return [
232
233
  "## Routing: Guardian Verification",
233
234
  "",
@@ -238,13 +239,13 @@ export function buildGuardianVerificationRoutingSection(): string {
238
239
  "### Trigger phrases",
239
240
  '- "verify guardian"',
240
241
  '- "verify my Telegram account"',
241
- '- "verify voice channel"',
242
+ '- "verify phone channel"',
242
243
  '- "verify my phone number"',
243
244
  '- "set up guardian verification"',
244
245
  "",
245
246
  "### What it does",
246
- "The skill walks through outbound guardian verification for voice or Telegram:",
247
- "1. Confirm channel (voice, telegram)",
247
+ "The skill walks through outbound guardian verification for phone or Telegram:",
248
+ "1. Confirm channel (phone, telegram)",
248
249
  "2. Collect destination (phone number or Telegram handle/chat ID)",
249
250
  "3. Start outbound verification via runtime HTTP API",
250
251
  "4. Guide the user through code entry, resend, or cancel",
@@ -297,17 +298,16 @@ export function buildStarterTaskPlaybookSection(): string {
297
298
  '- `[STARTER_TASK:research_to_ui]` — "Turn it into a webpage or interactive UI" flow',
298
299
  "",
299
300
  "### Playbook: make_it_yours",
300
- "Goal: Help the user choose an accent color for their dashboard.",
301
+ "Goal: Help the user choose an accent color preference for apps and interfaces.",
301
302
  "",
302
303
  "1. If the user's locale is missing or has `confidence: low` in USER.md, briefly confirm their location/language before proceeding.",
303
304
  "2. Present a concise set of accent color options (e.g. 5-7 curated colors with names and hex codes). Keep it short and scannable.",
304
305
  '3. Let the user pick one. Accept color names, hex values, or descriptions (e.g. "something warm").',
305
306
  '4. Confirm the selection: "I\'ll set your accent color to **{label}** ({hex}). Sound good?"',
306
307
  "5. On confirmation:",
307
- ' - Update the `## Dashboard Color Preference` section in USER.md with `label`, `hex`, `source: "user_selected"`, and `applied: true`.',
308
- " - Update the `## Onboarding Tasks` section: set `make_it_yours` to `done`.",
309
- " - Apply the color to the Home Base dashboard using `app_file_edit` to update the theme styles in the Home Base HTML with the chosen accent color.",
310
- "6. If the user declines or wants to skip, set `make_it_yours` to `deferred_to_dashboard` in USER.md and move on.",
308
+ ' - Use `app_file_edit` to update the `## Dashboard Color Preference` section in USER.md with `label`, `hex`, `source: "user_selected"`, and `applied: true`.',
309
+ " - Use `app_file_edit` to update the `## Onboarding Tasks` section: set `make_it_yours` to `done`.",
310
+ "6. If the user declines or wants to skip, set `make_it_yours` to `skipped` in USER.md and move on.",
311
311
  "",
312
312
  "### Playbook: research_topic",
313
313
  "Goal: Research a topic the user is interested in and summarise findings.",
@@ -403,9 +403,9 @@ export function buildPhoneCallsRoutingSection(): string {
403
403
  "### Trigger phrases",
404
404
  '- "Set up phone calling" / "enable calls"',
405
405
  '- "Make a call to..." / "call [number/business]"',
406
- '- "Configure Twilio" (in context of voice calls, not SMS)',
406
+ '- "Configure Twilio" (in context of voice calls)',
407
407
  '- "Can you make phone calls?"',
408
- '- "Set up my phone number" (for calling, not SMS)',
408
+ '- "Set up my phone number" (for calling)',
409
409
  "",
410
410
  "### What it does",
411
411
  "The skill handles the full phone calling lifecycle:",
@@ -506,7 +506,7 @@ export function buildChannelAwarenessSection(): string {
506
506
  "",
507
507
  "### Push-to-talk awareness",
508
508
  "- The `<channel_capabilities>` block may include `ptt_activation_key` and `ptt_enabled` fields indicating the user's push-to-talk configuration.",
509
- "- You can change the push-to-talk activation key using the `voice_config_update` tool. Valid keys: fn (Fn/Globe key), ctrl (Control key), fn_shift (Fn+Shift), none (disable PTT).",
509
+ '- You can change the push-to-talk activation key using the `voice_config_update` tool. The key is provided as a JSON PTTActivator payload (e.g. `{"kind":"modifierOnly","modifierFlags":8388608}` for Fn).',
510
510
  "- When the user asks about voice input or push-to-talk settings, use the tool to apply changes directly rather than directing them to settings.",
511
511
  "- When `microphone_permission_granted` is `false`, guide the user to grant microphone access in System Settings before using voice features.",
512
512
  "",
@@ -633,11 +633,14 @@ function buildIntegrationSection(): string {
633
633
  );
634
634
  if (oauthCreds.length === 0) return "";
635
635
 
636
+ const raw = loadRawConfig();
636
637
  const lines = ["## Connected Services", ""];
637
638
  for (const cred of oauthCreds) {
638
- const state = cred.accountInfo
639
- ? `Connected (${cred.accountInfo})`
640
- : "Connected";
639
+ const acctInfo = getNestedValue(
640
+ raw,
641
+ `integrations.accountInfo.${cred.service}`,
642
+ ) as string | undefined;
643
+ const state = acctInfo ? `Connected (${acctInfo})` : "Connected";
641
644
  lines.push(`- **${cred.service}**: ${state}`);
642
645
  }
643
646
 
@@ -659,6 +662,21 @@ function buildMemoryPersistenceSection(): string {
659
662
  ].join("\n");
660
663
  }
661
664
 
665
+ function buildMemoryRecallSection(): string {
666
+ return [
667
+ "## Memory Recall",
668
+ "",
669
+ "You have access to a `memory_recall` tool for deep memory retrieval. Use it when:",
670
+ "",
671
+ "- The user asks about past conversations, decisions, or context you don't have in the current window",
672
+ "- You need to recall specific facts, preferences, or project details",
673
+ "- The auto-injected memory context doesn't contain what you need",
674
+ "- The user references something from a previous session",
675
+ "",
676
+ "The tool searches across semantic, lexical, entity graph, and recency sources. Be specific in your query for best results.",
677
+ ].join("\n");
678
+ }
679
+
662
680
  function buildWorkspaceReflectionSection(): string {
663
681
  return [
664
682
  "## Workspace Reflection",
@@ -871,7 +889,7 @@ function appendSkillsCatalog(basePrompt: string): string {
871
889
  }
872
890
 
873
891
  function buildDynamicSkillWorkflowSection(
874
- config: import("./schema.js").AssistantConfig,
892
+ config: import("../config/schema.js").AssistantConfig,
875
893
  ): string {
876
894
  const lines = [
877
895
  "## Dynamic Skill Authoring Workflow",
@@ -909,7 +927,7 @@ function buildDynamicSkillWorkflowSection(
909
927
  lines.push(
910
928
  "",
911
929
  "### Messaging Skill",
912
- 'When the user asks about email, messaging, inbox management, or wants to read/send/search messages on any platform (Gmail, Slack, Telegram, SMS), load the "messaging" skill using `skill_load`. The messaging skill handles connection setup, credential flows, and all messaging operations — do not improvise setup instructions from general knowledge.',
930
+ 'When the user asks about email, messaging, inbox management, or wants to read/send/search messages on any platform (Gmail, Slack, Telegram), load the "messaging" skill using `skill_load`. The messaging skill handles connection setup, credential flows, and all messaging operations — do not improvise setup instructions from general knowledge.',
913
931
  );
914
932
  }
915
933
 
@@ -953,7 +971,7 @@ function formatSkillsCatalog(skills: SkillSummary[]): string {
953
971
  const lines = ["<available_skills>"];
954
972
  for (const skill of visible) {
955
973
  const idAttr = escapeXml(skill.id);
956
- const nameAttr = escapeXml(skill.name);
974
+ const nameAttr = escapeXml(skill.displayName);
957
975
  const descAttr =
958
976
  skill.id === "mcp-setup"
959
977
  ? escapeXml(getMcpSetupDescription())
@@ -978,7 +996,7 @@ function formatSkillsCatalog(skills: SkillSummary[]): string {
978
996
  "### Installing additional skills",
979
997
  "If `skill_load` fails because a skill is not found, additional first-party skills may be available in the Vellum catalog.",
980
998
  "Use `bash` to discover and install them:",
981
- "- `vellum skills list` — list all available catalog skills",
982
- "- `vellum skills install <skill-id>` — install a skill, then retry `skill_load`",
999
+ "- `assistant skills list` — list all available catalog skills",
1000
+ "- `assistant skills install <skill-id>` — install a skill, then retry `skill_load`",
983
1001
  ].join("\n");
984
1002
  }
@@ -42,8 +42,6 @@ Then figure out together:
42
42
  The two actions MUST have different labels and prompts. Double-check before calling ui_show that you are not repeating the same suggestion.
43
43
  If `ui_show` is not available (voice, SMS, or other non-dashboard channels), present the two suggestions as plain text messages instead, numbered so the user can reply with which one they'd like. If the user types a response instead of clicking, continue via the text path. If they want to defer both suggestions and do something else entirely, that's fine too.
44
44
 
45
- 7. Create Home Base silently. After the suggestion interaction (user picked one, deferred, or typed something else), create their Home Base using `app_create` with `set_as_home_base: true` and `auto_open: false`. Include personalized starter tasks based on what you learned. Do NOT open it with `app_open`. Do NOT announce it, mention it, or hint that something was created. No "check this out," no "I put something together," no "here's what I came up with." Just create it quietly and move on.
46
-
47
45
  ## Requirements
48
46
 
49
47
  Only your vibe is hard-required. Your name matters but don't push for it -- if the user doesn't offer one, pick one yourself. Everything else about the user is best-effort. Ask naturally, not as a form. If something is unclear, you can ask one short follow-up, but if the user declines or dodges, do not push. Just move on.
@@ -70,7 +68,6 @@ Do NOT delete this file until ALL of the following are true:
70
68
  - You've figured out your vibe and adopted it
71
69
  - 2 suggestions shown (via `ui_show` or as text if UI unavailable)
72
70
  - The user selected one, deferred both, or typed an alternate direction
73
- - Home Base has been created silently
74
71
 
75
72
  Once every condition is met, delete this file. You're done here.
76
73
 
@@ -1,5 +1,5 @@
1
1
  import { wrapWithLogfire } from "../logfire.js";
2
- import { ConfigError } from "../util/errors.js";
2
+ import { ConfigError, ProviderNotConfiguredError } from "../util/errors.js";
3
3
  import { AnthropicProvider } from "./anthropic/client.js";
4
4
  import { FailoverProvider, type ProviderHealthStatus } from "./failover.js";
5
5
  import { FireworksProvider } from "./fireworks/client.js";
@@ -94,9 +94,7 @@ export function getFailoverProvider(
94
94
  const selection = resolveProviderSelection(primaryName, providerOrder);
95
95
 
96
96
  if (!selection.selectedPrimary) {
97
- throw new ConfigError(
98
- `No providers available. Requested: "${primaryName}". Registered: ${listProviders().join(", ") || "none"}`,
99
- );
97
+ throw new ProviderNotConfiguredError(primaryName, listProviders());
100
98
  }
101
99
 
102
100
  const orderedProviders: Provider[] = selection.availableProviders.map(
@@ -10,7 +10,7 @@ The single HTTP send endpoint is `POST /v1/messages`. Key behaviors:
10
10
  - **Fire-and-forget**: Returns `202 { accepted: true }` immediately. The client observes progress via SSE (`GET /v1/events`).
11
11
  - **Hub publishing**: All agent events are published to `assistantEventHub`, making them observable via SSE.
12
12
 
13
- Do NOT add new send endpoints. All message ingress should go through `POST /v1/messages` (HTTP) or `session.processMessage()` (IPC).
13
+ Do NOT add new send endpoints. All message ingress should go through `POST /v1/messages` (HTTP).
14
14
 
15
15
  ### Approvals (confirmations, secrets, trust rules)
16
16
 
@@ -18,9 +18,9 @@ Approvals are **orthogonal to message sending**. The assistant asks for approval
18
18
 
19
19
  - **Discovery**: Clients discover pending approvals via SSE events (`confirmation_request`, `secret_request`) which include a `requestId`.
20
20
  - **Resolution**: Clients respond via standalone endpoints keyed by `requestId`:
21
- - `POST /v1/confirm` — `{ requestId, decision: "allow" | "deny" }`
21
+ - `POST /v1/confirm` — `{ requestId, decision, selectedPattern?, selectedScope? }`. Valid decisions: `"allow"`, `"allow_10m"`, `"allow_thread"`, `"deny"`, `"always_allow"`, `"always_deny"`, `"always_allow_high_risk"`. For persistent decisions (`always_allow`, `always_deny`, `always_allow_high_risk`), `selectedPattern` and `selectedScope` are validated against the server-provided allowlist/scope options from the original confirmation request before trust rules are persisted.
22
22
  - `POST /v1/secret` — `{ requestId, value, delivery }`
23
- - `POST /v1/trust-rules` — `{ requestId, pattern, scope }`
23
+ - `POST /v1/trust-rules` — `{ requestId, pattern, scope, decision, allowHighRisk? }`. Validates pattern/scope against server-provided options. Does not resolve the confirmation itself.
24
24
  - **Tracking**: The `pending-interactions` tracker (`assistant/src/runtime/pending-interactions.ts`) maps `requestId → session`. Use `register()` to track, `resolve()` to consume, `getByConversation()` to query.
25
25
 
26
26
  Do NOT couple approval handling to message sending. Do NOT add run/status tracking to the send path.
@@ -33,10 +33,8 @@ Channel approval flows use `requestId` (not `runId`) as the primary identifier:
33
33
  - Guardian approval records in `channelGuardianApprovalRequests` link via `requestId`.
34
34
  - The conversational approval engine classifies user intent and resolves via `session.handleConfirmationResponse(requestId, decision)`.
35
35
 
36
- ## HTTP-First for New Endpoints
36
+ ## HTTP-Only Transport
37
37
 
38
- New configuration and control endpoints MUST be exposed over HTTP on the runtime server (`assistant/src/runtime/http-server.ts`), not as IPC-only message types. The runtime HTTP server is the canonical API surface IPC is a legacy transport being phased out.
38
+ HTTP is the sole transport for client-daemon communication. The runtime HTTP server (`assistant/src/runtime/http-server.ts`) is the canonical API surface. Clients connect via HTTP for request/response operations and SSE (`GET /v1/events`) for streaming server-to-client events.
39
39
 
40
- Existing IPC-only handlers should be migrated to HTTP when touched. The pattern: extract business logic into a shared function, add an HTTP route handler in `assistant/src/runtime/routes/`, keep the IPC handler as a thin wrapper that calls the same logic.
41
-
42
- When writing skills that need to call daemon configuration endpoints, use `curl` with the runtime HTTP API (JWT-authenticated via `Authorization: Bearer <jwt>`) rather than describing IPC socket protocol details. The assistant already knows how to use `curl`.
40
+ When writing skills that need to call daemon configuration endpoints, use `curl` with the runtime HTTP API (JWT-authenticated via `Authorization: Bearer <jwt>`). The assistant already knows how to use `curl`.
@@ -7,18 +7,13 @@
7
7
  *
8
8
  * Access requests are a special case: they always create a canonical request
9
9
  * and emit a notification signal, even when no same-channel guardian binding
10
- * exists. Guardian identity resolution uses a contacts-first fallback strategy:
11
- * 1. Source-channel guardian contact channel.
12
- * 2. Any active guardian channel (deterministic, most-recently-verified).
13
- * 3. No guardian identity (trusted/vellum-only resolution path).
10
+ * exists. Guardian identity resolution is anchored on the assistant's vellum
11
+ * principal so access requests cannot bind to stale/cross-assistant contacts.
14
12
  */
15
13
 
16
14
  import type { ChannelId } from "../channels/types.js";
17
- import {
18
- findGuardianForChannel,
19
- listGuardianChannels,
20
- } from "../contacts/contact-store.js";
21
- import type { MemberStatus } from "../contacts/types.js";
15
+ import { findGuardianForChannel } from "../contacts/contact-store.js";
16
+ import type { ChannelStatus } from "../contacts/types.js";
22
17
  import {
23
18
  createCanonicalGuardianDelivery,
24
19
  createCanonicalGuardianRequest,
@@ -56,7 +51,7 @@ export interface AccessRequestParams {
56
51
  actorExternalId?: string;
57
52
  actorDisplayName?: string;
58
53
  actorUsername?: string;
59
- previousMemberStatus?: MemberStatus;
54
+ previousMemberStatus?: Exclude<ChannelStatus, "unverified">;
60
55
  }
61
56
 
62
57
  export type AccessRequestResult =
@@ -74,9 +69,9 @@ export type AccessRequestResult =
74
69
  * Returns a result indicating whether the guardian was notified and whether
75
70
  * a new request was created or an existing one was deduped.
76
71
  *
77
- * Guardian identity resolution: contacts-first for source channel, then any
78
- * active guardian channel, then null (notification pipeline handles delivery
79
- * via trusted/vellum channels when no binding exists).
72
+ * Guardian identity resolution uses the assistant's vellum principal as the
73
+ * trust anchor and only accepts source-channel contacts that match it. This
74
+ * prevents stale or cross-assistant contacts from being bound to the request.
80
75
  *
81
76
  * This is intentionally synchronous with respect to the canonical store writes
82
77
  * and fire-and-forget for the notification signal emission.
@@ -98,62 +93,52 @@ export function notifyGuardianOfAccessRequest(
98
93
  return { notified: false, reason: "no_sender_id" };
99
94
  }
100
95
 
101
- // Resolve guardian identity with contacts-first strategy:
102
- // 1. Source-channel guardian contact channel
103
- // 2. Any active guardian channel (deterministic, most-recently-verified)
104
- // 3. null (notification pipeline handles delivery via trusted channels)
96
+ // Resolve guardian identity with assistant-anchored strategy:
97
+ // 1. Ensure the assistant has a vellum guardian principal (trust anchor)
98
+ // 2. Use source-channel guardian only when principal matches anchor
99
+ // 3. Fallback to vellum guardian identity for this assistant principal
105
100
  let guardianExternalUserId: string | null = null;
106
101
  let guardianPrincipalId: string | null = null;
107
102
  let guardianBindingChannel: string | null = null;
108
- let guardianResolutionSource: "contacts" | "contacts-fallback" | "none" =
109
- "none";
103
+ let guardianResolutionSource:
104
+ | "source-channel-contact"
105
+ | "vellum-anchor"
106
+ | "none" = "none";
107
+
108
+ const assistantGuardianPrincipalId =
109
+ ensureVellumGuardianBinding(canonicalAssistantId);
110
110
 
111
- // Try contacts-first: source channel
111
+ // Try source-channel guardian, but only if it maps to the assistant's
112
+ // anchored principal. This blocks cross-assistant/stale contact selection.
112
113
  const sourceGuardian = findGuardianForChannel(sourceChannel);
113
- if (sourceGuardian) {
114
+ if (
115
+ sourceGuardian &&
116
+ sourceGuardian.contact.principalId === assistantGuardianPrincipalId
117
+ ) {
114
118
  guardianExternalUserId = sourceGuardian.channel.externalUserId;
115
119
  guardianPrincipalId = sourceGuardian.contact.principalId;
116
120
  guardianBindingChannel = sourceGuardian.channel.type;
117
- guardianResolutionSource = "contacts";
118
- } else {
119
- // Try contacts-first: any active guardian channel
120
- const allGuardianChannels = listGuardianChannels();
121
- if (allGuardianChannels && allGuardianChannels.channels.length > 0) {
122
- const fallbackChannel = allGuardianChannels.channels[0];
123
- guardianExternalUserId = fallbackChannel.externalUserId;
124
- guardianPrincipalId = allGuardianChannels.contact.principalId;
125
- guardianBindingChannel = fallbackChannel.type;
126
- guardianResolutionSource = "contacts-fallback";
127
- log.debug(
128
- {
129
- sourceChannel,
130
- fallbackChannel: guardianBindingChannel,
131
- canonicalAssistantId,
132
- },
133
- "Using cross-channel guardian contact fallback for access request",
134
- );
135
- }
136
- // If no guardian found via contacts, guardianResolutionSource stays "none"
121
+ guardianResolutionSource = "source-channel-contact";
137
122
  }
138
123
 
139
- // Self-heal: access_request requires a principal. If none found via
140
- // contacts, bootstrap the vellum binding.
124
+ // Access requests always require a principal. If source-channel resolution
125
+ // did not match the assistant anchor, use the anchored vellum identity.
141
126
  if (!guardianPrincipalId) {
142
- log.info(
143
- { sourceChannel, canonicalAssistantId },
144
- "No guardian principal for access request — self-healing vellum binding",
145
- );
146
- const healedPrincipalId = ensureVellumGuardianBinding(canonicalAssistantId);
147
127
  const vellumGuardian = findGuardianForChannel("vellum");
148
- if (vellumGuardian) {
128
+ if (
129
+ vellumGuardian &&
130
+ vellumGuardian.contact.principalId === assistantGuardianPrincipalId
131
+ ) {
149
132
  guardianExternalUserId =
150
133
  vellumGuardian.channel.externalUserId ?? guardianExternalUserId;
151
134
  guardianPrincipalId =
152
- vellumGuardian.contact.principalId ?? healedPrincipalId;
135
+ vellumGuardian.contact.principalId ?? assistantGuardianPrincipalId;
153
136
  guardianBindingChannel = guardianBindingChannel ?? "vellum";
137
+ guardianResolutionSource = "vellum-anchor";
154
138
  } else {
155
- guardianPrincipalId = healedPrincipalId;
139
+ guardianPrincipalId = assistantGuardianPrincipalId;
156
140
  guardianBindingChannel = guardianBindingChannel ?? "vellum";
141
+ guardianResolutionSource = "vellum-anchor";
157
142
  }
158
143
  }
159
144
 
@@ -264,10 +249,6 @@ export function notifyGuardianOfAccessRequest(
264
249
  continue;
265
250
  }
266
251
 
267
- if (result.channel !== "telegram" && result.channel !== "sms") {
268
- continue;
269
- }
270
-
271
252
  const delivery = createCanonicalGuardianDelivery({
272
253
  requestId: canonicalRequest.id,
273
254
  destinationChannel: result.channel,
@@ -51,16 +51,6 @@ export function isUntrustedTrustClass(
51
51
  return trustClass === "trusted_contact" || trustClass === "unknown";
52
52
  }
53
53
 
54
- /**
55
- * Reason an actor was denied access during trust resolution.
56
- *
57
- * - `'no_binding'`: No guardian binding exists for this (assistant, channel),
58
- * so trust cannot be established for any actor.
59
- * - `'no_identity'`: The inbound message carried no usable identity fields
60
- * (e.g. missing external user ID), so the sender could not be identified.
61
- */
62
- export type DenialReason = "no_binding" | "no_identity";
63
-
64
54
  /**
65
55
  * Fully resolved trust context from the actor trust resolver.
66
56
  *
@@ -98,8 +88,6 @@ export interface ActorTrustContext {
98
88
  channel: ChannelId;
99
89
  trustStatus: TrustClass;
100
90
  };
101
- /** Legacy denial reason for backward-compatible unverified_channel paths. */
102
- denialReason?: DenialReason;
103
91
  }
104
92
 
105
93
  /**
@@ -176,7 +164,6 @@ export function resolveActorTrust(
176
164
  channel: input.sourceChannel,
177
165
  trustStatus: "unknown",
178
166
  },
179
- denialReason: "no_identity",
180
167
  };
181
168
  }
182
169
 
@@ -249,8 +236,6 @@ export function resolveActorTrust(
249
236
  ) === canonicalSenderId
250
237
  : false;
251
238
 
252
- // ContactChannel has no username field — the shim always set it to null.
253
- const memberUsername = undefined;
254
239
  const memberDisplayName =
255
240
  memberMatchesSender &&
256
241
  typeof memberRecord?.contact.displayName === "string" &&
@@ -260,7 +245,7 @@ export function resolveActorTrust(
260
245
  // Prefer member profile metadata over transient sender metadata so guardian-
261
246
  // curated contact details are canonical for assistant-facing identity —
262
247
  // but only when the member record actually belongs to the current sender.
263
- const resolvedUsername = memberUsername ?? senderUsername;
248
+ const resolvedUsername = senderUsername;
264
249
  const resolvedDisplayName = memberDisplayName ?? senderDisplayName;
265
250
  const resolvedIdentifier = resolvedUsername
266
251
  ? `@${resolvedUsername}`
@@ -280,12 +265,6 @@ export function resolveActorTrust(
280
265
  trustClass = "unknown";
281
266
  }
282
267
 
283
- // Denial reason for legacy compatibility
284
- let denialReason: DenialReason | undefined;
285
- if (!isGuardian && !guardianBindingMatch) {
286
- denialReason = "no_binding";
287
- }
288
-
289
268
  return {
290
269
  canonicalSenderId,
291
270
  guardianBindingMatch,
@@ -301,7 +280,6 @@ export function resolveActorTrust(
301
280
  channel: input.sourceChannel,
302
281
  trustStatus: trustClass,
303
282
  },
304
- denialReason,
305
283
  };
306
284
  }
307
285
 
@@ -338,6 +316,5 @@ export function toTrustContext(
338
316
  requesterMemberDisplayName: ctx.actorMetadata.memberDisplayName,
339
317
  requesterExternalUserId: ctx.canonicalSenderId ?? undefined,
340
318
  requesterChatId: conversationExternalId,
341
- denialReason: ctx.denialReason,
342
319
  };
343
320
  }
@@ -35,7 +35,8 @@ export type ApprovalMessageScenario =
35
35
  | "guardian_deny_no_identity"
36
36
  | "guardian_deny_no_binding"
37
37
  | "requester_cancel"
38
- | "approval_already_resolved";
38
+ | "approval_already_resolved"
39
+ | "guardian_text_unavailable";
39
40
 
40
41
  export interface ApprovalMessageContext {
41
42
  scenario: ApprovalMessageScenario;
@@ -257,7 +258,7 @@ export function getFallbackMessage(context: ApprovalMessageContext): string {
257
258
  // Detect whether the code is a short numeric (identity-bound outbound)
258
259
  // or a high-entropy hex (inbound challenge/bootstrap) and adjust wording.
259
260
  const isNumeric = /^\d{4,8}$/.test(code);
260
- if (context.channel === "voice") {
261
+ if (context.channel === "phone") {
261
262
  if (isNumeric) {
262
263
  return `To complete guardian verification, speak or enter the ${code.length}-digit code: ${code}.`;
263
264
  }
@@ -289,6 +290,9 @@ export function getFallbackMessage(context: ApprovalMessageContext): string {
289
290
  case "approval_already_resolved":
290
291
  return "This approval request has already been resolved.";
291
292
 
293
+ case "guardian_text_unavailable":
294
+ return "I can't process text replies for approvals right now. Please use the approve/deny buttons above to respond.";
295
+
292
296
  default: {
293
297
  // Exhaustive check — TypeScript will flag if a scenario is missing.
294
298
  const _exhaustive: never = context.scenario;