@vellumai/assistant 0.4.43 → 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 (713) hide show
  1. package/.prettierignore +4 -0
  2. package/ARCHITECTURE.md +46 -44
  3. package/README.md +15 -16
  4. package/bun.lock +10 -35
  5. package/docs/architecture/integrations.md +102 -215
  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 -3
  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-asset.test.ts +1 -1
  40. package/src/__tests__/bundled-skill-retrieval-guard.test.ts +23 -9
  41. package/src/__tests__/call-controller.test.ts +0 -1
  42. package/src/__tests__/call-conversation-messages.test.ts +0 -1
  43. package/src/__tests__/call-domain.test.ts +0 -1
  44. package/src/__tests__/call-pointer-messages.test.ts +0 -1
  45. package/src/__tests__/call-recovery.test.ts +0 -1
  46. package/src/__tests__/call-routes-http.test.ts +0 -1
  47. package/src/__tests__/call-store.test.ts +0 -1
  48. package/src/__tests__/canonical-guardian-store.test.ts +0 -1
  49. package/src/__tests__/channel-approval-routes.test.ts +1 -1
  50. package/src/__tests__/channel-approvals.test.ts +1 -1
  51. package/src/__tests__/channel-delivery-store.test.ts +0 -1
  52. package/src/__tests__/channel-guardian.test.ts +5 -7
  53. package/src/__tests__/channel-retry-sweep.test.ts +0 -1
  54. package/src/__tests__/checker.test.ts +32 -36
  55. package/src/__tests__/compaction.benchmark.test.ts +16 -14
  56. package/src/__tests__/computer-use-session-lifecycle.test.ts +10 -11
  57. package/src/__tests__/computer-use-session-working-dir.test.ts +2 -6
  58. package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +2 -5
  59. package/src/__tests__/computer-use-tools.test.ts +35 -31
  60. package/src/__tests__/config-schema.test.ts +11 -15
  61. package/src/__tests__/config-watcher.test.ts +0 -1
  62. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
  63. package/src/__tests__/conflict-store.test.ts +0 -1
  64. package/src/__tests__/connection-policy.test.ts +4 -7
  65. package/src/__tests__/contacts-tools.test.ts +0 -1
  66. package/src/__tests__/context-memory-e2e.test.ts +2 -4
  67. package/src/__tests__/context-overflow-reducer.test.ts +2 -4
  68. package/src/__tests__/context-window-manager.test.ts +147 -60
  69. package/src/__tests__/contradiction-checker.test.ts +0 -1
  70. package/src/__tests__/conversation-attention-store.test.ts +0 -1
  71. package/src/__tests__/conversation-attention-telegram.test.ts +1 -1
  72. package/src/__tests__/conversation-pairing.test.ts +2 -2
  73. package/src/__tests__/conversation-routes-guardian-reply.test.ts +31 -7
  74. package/src/__tests__/conversation-routes-slash-commands.test.ts +381 -0
  75. package/src/__tests__/conversation-store.test.ts +0 -1
  76. package/src/__tests__/conversation-unread-route.test.ts +1 -2
  77. package/src/__tests__/credential-security-invariants.test.ts +8 -8
  78. package/src/__tests__/cross-provider-web-search.test.ts +353 -0
  79. package/src/__tests__/daemon-assistant-events.test.ts +6 -7
  80. package/src/__tests__/db-schedule-syntax-migration.test.ts +15 -3
  81. package/src/__tests__/delete-managed-skill-tool.test.ts +5 -9
  82. package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -1
  83. package/src/__tests__/diagnostics-export.test.ts +189 -0
  84. package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
  85. package/src/__tests__/emit-signal-routing-intent.test.ts +3 -3
  86. package/src/__tests__/entity-extractor.test.ts +0 -1
  87. package/src/__tests__/entity-search.test.ts +0 -1
  88. package/src/__tests__/ephemeral-permissions.test.ts +2 -4
  89. package/src/__tests__/error-handler-friendly-messages.test.ts +46 -0
  90. package/src/__tests__/file-read-tool.test.ts +86 -0
  91. package/src/__tests__/followup-tools.test.ts +0 -1
  92. package/src/__tests__/frontmatter.test.ts +77 -34
  93. package/src/__tests__/gateway-only-enforcement.test.ts +0 -1
  94. package/src/__tests__/gateway-only-guard.test.ts +1 -1
  95. package/src/__tests__/guardian-action-conversation-turn.test.ts +0 -1
  96. package/src/__tests__/guardian-action-followup-executor.test.ts +0 -1
  97. package/src/__tests__/guardian-action-followup-store.test.ts +0 -1
  98. package/src/__tests__/guardian-action-grant-mint-consume.test.ts +0 -1
  99. package/src/__tests__/guardian-action-late-reply.test.ts +0 -1
  100. package/src/__tests__/guardian-action-store.test.ts +0 -1
  101. package/src/__tests__/guardian-action-sweep.test.ts +0 -1
  102. package/src/__tests__/guardian-decision-primitive-canonical.test.ts +0 -1
  103. package/src/__tests__/guardian-dispatch.test.ts +1 -2
  104. package/src/__tests__/guardian-grant-minting.test.ts +1 -1
  105. package/src/__tests__/guardian-outbound-http.test.ts +0 -1
  106. package/src/__tests__/guardian-principal-id-roundtrip.test.ts +0 -1
  107. package/src/__tests__/guardian-routing-invariants.test.ts +1 -1
  108. package/src/__tests__/guardian-routing-state.test.ts +0 -1
  109. package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -1
  110. package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +3 -5
  111. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +28 -426
  112. package/src/__tests__/host-bash-proxy.test.ts +335 -0
  113. package/src/__tests__/host-file-proxy.test.ts +374 -0
  114. package/src/__tests__/host-shell-tool.test.ts +147 -1
  115. package/src/__tests__/http-user-message-parity.test.ts +361 -0
  116. package/src/__tests__/inbound-invite-redemption.test.ts +0 -1
  117. package/src/__tests__/integration-status.test.ts +3 -8
  118. package/src/__tests__/intent-routing.test.ts +7 -46
  119. package/src/__tests__/invite-redemption-service.test.ts +0 -1
  120. package/src/__tests__/invite-routes-http.test.ts +0 -1
  121. package/src/__tests__/llm-usage-store.test.ts +0 -1
  122. package/src/__tests__/managed-avatar-client.test.ts +101 -55
  123. package/src/__tests__/managed-skill-lifecycle.test.ts +9 -18
  124. package/src/__tests__/managed-store.test.ts +94 -21
  125. package/src/__tests__/media-reuse-story.e2e.test.ts +0 -1
  126. package/src/__tests__/memory-context-benchmark.benchmark.test.ts +2 -4
  127. package/src/__tests__/memory-lifecycle-e2e.test.ts +0 -1
  128. package/src/__tests__/memory-recall-quality.test.ts +0 -1
  129. package/src/__tests__/memory-regressions.experimental.test.ts +0 -1
  130. package/src/__tests__/memory-regressions.test.ts +0 -1
  131. package/src/__tests__/memory-retrieval.benchmark.test.ts +0 -1
  132. package/src/__tests__/memory-upsert-concurrency.test.ts +0 -1
  133. package/src/__tests__/messaging-send-tool.test.ts +35 -0
  134. package/src/__tests__/messaging-skill-split.test.ts +138 -0
  135. package/src/__tests__/migration-cross-version-compatibility.test.ts +0 -1
  136. package/src/__tests__/migration-export-http.test.ts +2 -3
  137. package/src/__tests__/migration-import-commit-http.test.ts +1 -2
  138. package/src/__tests__/migration-import-preflight-http.test.ts +1 -2
  139. package/src/__tests__/migration-validate-http.test.ts +1 -2
  140. package/src/__tests__/native-web-search.test.ts +475 -0
  141. package/src/__tests__/navigate-settings-tab.test.ts +84 -0
  142. package/src/__tests__/non-member-access-request.test.ts +0 -1
  143. package/src/__tests__/notification-broadcaster.test.ts +15 -15
  144. package/src/__tests__/notification-decision-strategy.test.ts +6 -6
  145. package/src/__tests__/notification-deep-link.test.ts +7 -7
  146. package/src/__tests__/notification-guardian-path.test.ts +2 -3
  147. package/src/__tests__/notification-telegram-adapter.test.ts +1 -1
  148. package/src/__tests__/notification-thread-candidates.test.ts +4 -4
  149. package/src/__tests__/onboarding-starter-tasks.test.ts +0 -1
  150. package/src/__tests__/onboarding-template-contract.test.ts +0 -10
  151. package/src/__tests__/playbook-execution.test.ts +0 -1
  152. package/src/__tests__/playbook-tools.test.ts +0 -1
  153. package/src/__tests__/profile-compiler.test.ts +0 -1
  154. package/src/__tests__/provider-fail-open-selection.test.ts +12 -2
  155. package/src/__tests__/provider-managed-proxy-integration.test.ts +25 -0
  156. package/src/__tests__/qdrant-collection-migration.test.ts +223 -0
  157. package/src/__tests__/recording-handler.test.ts +30 -94
  158. package/src/__tests__/registry.test.ts +28 -35
  159. package/src/__tests__/relay-server.test.ts +0 -1
  160. package/src/__tests__/ride-shotgun-handler.test.ts +4 -20
  161. package/src/__tests__/runtime-attachment-metadata.test.ts +0 -1
  162. package/src/__tests__/runtime-events-sse-parity.test.ts +3 -4
  163. package/src/__tests__/runtime-events-sse.test.ts +0 -1
  164. package/src/__tests__/sandbox-diagnostics.test.ts +0 -1
  165. package/src/__tests__/scaffold-managed-skill-tool.test.ts +30 -28
  166. package/src/__tests__/schedule-store.test.ts +441 -1
  167. package/src/__tests__/schedule-tools.test.ts +468 -7
  168. package/src/__tests__/scheduler-recurrence.test.ts +196 -23
  169. package/src/__tests__/scoped-approval-grants.test.ts +0 -1
  170. package/src/__tests__/scoped-grant-security-matrix.test.ts +0 -1
  171. package/src/__tests__/secret-prompt-log-hygiene.test.ts +6 -3
  172. package/src/__tests__/secret-response-routing.test.ts +4 -1
  173. package/src/__tests__/send-endpoint-busy.test.ts +14 -5
  174. package/src/__tests__/send-notification-tool.test.ts +0 -7
  175. package/src/__tests__/sequence-store.test.ts +0 -1
  176. package/src/__tests__/server-history-render.test.ts +1 -2
  177. package/src/__tests__/session-abort-tool-results.test.ts +0 -1
  178. package/src/__tests__/session-agent-loop.test.ts +46 -6
  179. package/src/__tests__/session-confirmation-signals.test.ts +7 -46
  180. package/src/__tests__/session-conflict-gate.test.ts +2 -6
  181. package/src/__tests__/session-error.test.ts +5 -14
  182. package/src/__tests__/session-init.benchmark.test.ts +3 -5
  183. package/src/__tests__/session-load-history-repair.test.ts +0 -1
  184. package/src/__tests__/session-media-retry.test.ts +12 -74
  185. package/src/__tests__/session-pre-run-repair.test.ts +0 -1
  186. package/src/__tests__/session-profile-injection.test.ts +2 -6
  187. package/src/__tests__/session-provider-retry-repair.test.ts +2 -6
  188. package/src/__tests__/session-queue.test.ts +94 -139
  189. package/src/__tests__/session-skill-tools.test.ts +115 -115
  190. package/src/__tests__/session-slash-known.test.ts +0 -1
  191. package/src/__tests__/session-slash-queue.test.ts +0 -1
  192. package/src/__tests__/session-slash-unknown.test.ts +0 -1
  193. package/src/__tests__/session-surfaces-task-progress.test.ts +34 -0
  194. package/src/__tests__/session-usage.test.ts +0 -1
  195. package/src/__tests__/session-workspace-cache-state.test.ts +2 -6
  196. package/src/__tests__/session-workspace-injection.test.ts +2 -6
  197. package/src/__tests__/session-workspace-tool-tracking.test.ts +2 -6
  198. package/src/__tests__/skill-feature-flags-integration.test.ts +180 -184
  199. package/src/__tests__/skill-feature-flags.test.ts +125 -18
  200. package/src/__tests__/skill-load-feature-flag.test.ts +1 -2
  201. package/src/__tests__/skill-load-tool.test.ts +194 -2
  202. package/src/__tests__/skill-projection-feature-flag.test.ts +27 -16
  203. package/src/__tests__/skill-projection.benchmark.test.ts +15 -14
  204. package/src/__tests__/skills.test.ts +14 -53
  205. package/src/__tests__/slack-channel-config.test.ts +0 -1
  206. package/src/__tests__/slack-inbound-verification.test.ts +0 -1
  207. package/src/__tests__/slack-skill.test.ts +1 -1
  208. package/src/__tests__/starter-task-flow.test.ts +9 -19
  209. package/src/__tests__/subagent-tools.test.ts +2 -2
  210. package/src/__tests__/system-prompt.test.ts +7 -7
  211. package/src/__tests__/task-compiler.test.ts +0 -1
  212. package/src/__tests__/task-management-tools.test.ts +0 -1
  213. package/src/__tests__/task-memory-cleanup.test.ts +0 -1
  214. package/src/__tests__/task-runner.test.ts +0 -1
  215. package/src/__tests__/task-scheduler.test.ts +0 -1
  216. package/src/__tests__/terminal-tools.test.ts +0 -1
  217. package/src/__tests__/test-support/computer-use-skill-harness.ts +2 -4
  218. package/src/__tests__/thread-seed-composer.test.ts +5 -5
  219. package/src/__tests__/tool-approval-handler.test.ts +0 -1
  220. package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -1
  221. package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +0 -1
  222. package/src/__tests__/tool-executor.test.ts +8 -86
  223. package/src/__tests__/tool-grant-request-escalation.test.ts +0 -1
  224. package/src/__tests__/tool-notification-listener.test.ts +1 -1
  225. package/src/__tests__/tool-preview-lifecycle.test.ts +416 -0
  226. package/src/__tests__/trust-store.test.ts +84 -8
  227. package/src/__tests__/trusted-contact-approval-notifier.test.ts +0 -1
  228. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +0 -1
  229. package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +0 -1
  230. package/src/__tests__/trusted-contact-multichannel.test.ts +0 -1
  231. package/src/__tests__/trusted-contact-verification.test.ts +0 -1
  232. package/src/__tests__/twilio-provider.test.ts +0 -1
  233. package/src/__tests__/twilio-routes.test.ts +0 -1
  234. package/src/__tests__/{request-file-tool.test.ts → ui-file-upload-surface.test.ts} +11 -72
  235. package/src/__tests__/update-bulletin.test.ts +0 -1
  236. package/src/__tests__/usage-cache-backfill-migration.test.ts +0 -1
  237. package/src/__tests__/usage-routes.test.ts +0 -1
  238. package/src/__tests__/verification-control-plane-policy.test.ts +4 -4
  239. package/src/__tests__/voice-invite-redemption.test.ts +0 -1
  240. package/src/__tests__/voice-scoped-grant-consumer.test.ts +0 -1
  241. package/src/__tests__/voice-session-bridge.test.ts +9 -1
  242. package/src/__tests__/web-fetch.test.ts +57 -0
  243. package/src/__tests__/workspace-git-service.test.ts +5 -14
  244. package/src/__tests__/workspace-policy.test.ts +0 -1
  245. package/src/agent/loop.ts +22 -34
  246. package/src/bundler/bundle-signer.ts +4 -4
  247. package/src/calls/call-controller.ts +1 -1
  248. package/src/calls/relay-server.ts +1 -1
  249. package/src/calls/twilio-rest.ts +1 -1
  250. package/src/calls/voice-session-bridge.ts +3 -1
  251. package/src/cli/__tests__/notifications.test.ts +3 -4
  252. package/src/cli/commands/map.ts +2 -6
  253. package/src/cli/commands/mcp.ts +73 -15
  254. package/src/cli/commands/notifications.ts +4 -4
  255. package/src/cli/commands/sessions.ts +9 -1
  256. package/src/cli/commands/skills.ts +6 -10
  257. package/src/cli/http-client.ts +2 -3
  258. package/src/cli/main-screen.tsx +10 -10
  259. package/src/cli/program.ts +0 -4
  260. package/src/cli/reference.ts +0 -2
  261. package/src/cli.ts +15 -9
  262. package/src/config/__tests__/bundled-tool-registry-guard.test.ts +120 -0
  263. package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +11 -0
  264. package/src/config/bundled-skills/app-builder/SKILL.md +6 -7
  265. package/src/config/bundled-skills/app-builder/TOOLS.json +0 -4
  266. package/src/config/bundled-skills/browser/SKILL.md +6 -1
  267. package/src/config/bundled-skills/chatgpt-import/SKILL.md +5 -1
  268. package/src/config/bundled-skills/claude-code/SKILL.md +5 -1
  269. package/src/config/bundled-skills/computer-use/SKILL.md +6 -1
  270. package/src/config/bundled-skills/computer-use/TOOLS.json +6 -69
  271. package/src/config/bundled-skills/computer-use/tools/computer-use-click.ts +10 -1
  272. package/src/config/bundled-skills/contacts/SKILL.md +10 -1
  273. package/src/config/bundled-skills/contacts/TOOLS.json +35 -0
  274. package/src/config/bundled-skills/{messaging → contacts}/tools/google-contacts.ts +9 -2
  275. package/src/config/bundled-skills/document/SKILL.md +4 -1
  276. package/src/config/bundled-skills/doordash/SKILL.md +8 -2
  277. package/src/config/bundled-skills/doordash/__tests__/doordash-session.test.ts +1 -82
  278. package/src/config/bundled-skills/doordash/doordash-cli.ts +17 -28
  279. package/src/config/bundled-skills/doordash/lib/session.ts +21 -17
  280. package/src/config/bundled-skills/doordash/lib/shared/platform.ts +4 -1
  281. package/src/config/bundled-skills/followups/SKILL.md +4 -1
  282. package/src/config/bundled-skills/gmail/SKILL.md +180 -0
  283. package/src/config/bundled-skills/gmail/TOOLS.json +506 -0
  284. package/src/config/bundled-skills/gmail/tools/gmail-archive.ts +149 -0
  285. package/src/config/bundled-skills/gmail/tools/gmail-attachments.ts +110 -0
  286. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-draft.ts +1 -1
  287. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-filters.ts +1 -1
  288. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-follow-up.ts +1 -1
  289. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-forward.ts +1 -1
  290. package/src/config/bundled-skills/gmail/tools/gmail-label.ts +50 -0
  291. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-outreach-scan.ts +8 -90
  292. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-send-draft.ts +1 -1
  293. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-sender-digest.ts +2 -2
  294. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-trash.ts +1 -1
  295. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-unsubscribe.ts +1 -1
  296. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-vacation.ts +1 -1
  297. package/src/config/bundled-skills/gmail/tools/shared.ts +47 -0
  298. package/src/config/bundled-skills/google-calendar/SKILL.md +5 -1
  299. package/src/config/bundled-skills/image-studio/SKILL.md +5 -1
  300. package/src/config/bundled-skills/knowledge-graph/SKILL.md +4 -1
  301. package/src/config/bundled-skills/media-processing/SKILL.md +7 -13
  302. package/src/config/bundled-skills/media-processing/TOOLS.json +0 -22
  303. package/src/config/bundled-skills/media-processing/tools/generate-clip.ts +12 -1
  304. package/src/config/bundled-skills/messaging/SKILL.md +23 -139
  305. package/src/config/bundled-skills/messaging/TOOLS.json +33 -1215
  306. package/src/config/bundled-skills/messaging/tools/gmail-mime-helpers.ts +42 -0
  307. package/src/config/bundled-skills/messaging/tools/messaging-send.ts +165 -2
  308. package/src/config/bundled-skills/messaging/tools/messaging-sender-digest.ts +1 -13
  309. package/src/config/bundled-skills/messaging/tools/shared.ts +81 -34
  310. package/src/config/bundled-skills/notifications/SKILL.md +5 -1
  311. package/src/config/bundled-skills/orchestration/SKILL.md +30 -0
  312. package/src/config/bundled-skills/orchestration/TOOLS.json +35 -0
  313. package/src/config/bundled-skills/{reminder/tools/reminder-cancel.ts → orchestration/tools/swarm-delegate.ts} +3 -3
  314. package/src/config/bundled-skills/phone-calls/SKILL.md +9 -1
  315. package/src/config/bundled-skills/playbooks/SKILL.md +4 -1
  316. package/src/config/bundled-skills/schedule/SKILL.md +70 -9
  317. package/src/config/bundled-skills/schedule/TOOLS.json +38 -6
  318. package/src/config/bundled-skills/screen-watch/SKILL.md +28 -0
  319. package/src/config/bundled-skills/screen-watch/TOOLS.json +35 -0
  320. package/src/config/bundled-skills/{reminder/tools/reminder-create.ts → screen-watch/tools/start-screen-watch.ts} +3 -3
  321. package/src/config/bundled-skills/sequences/SKILL.md +47 -0
  322. package/src/config/bundled-skills/sequences/TOOLS.json +340 -0
  323. package/src/config/bundled-skills/sequences/tools/sequence-update.ts +128 -0
  324. package/src/config/bundled-skills/sequences/tools/shared.ts +9 -0
  325. package/src/config/bundled-skills/settings/SKILL.md +12 -0
  326. package/src/config/bundled-skills/settings/TOOLS.json +112 -0
  327. package/src/config/bundled-skills/settings/tools/navigate-settings-tab.ts +43 -0
  328. package/src/config/bundled-skills/settings/tools/open-system-settings.ts +52 -0
  329. package/src/config/bundled-skills/{computer-use/tools/computer-use-right-click.ts → settings/tools/set-avatar.ts} +2 -6
  330. package/src/{tools/system/voice-config.ts → config/bundled-skills/settings/tools/voice-config-update.ts} +59 -96
  331. package/src/config/bundled-skills/skill-management/SKILL.md +18 -0
  332. package/src/config/bundled-skills/skill-management/TOOLS.json +90 -0
  333. package/src/config/bundled-skills/{computer-use/tools/computer-use-double-click.ts → skill-management/tools/delete-managed.ts} +2 -6
  334. package/src/config/bundled-skills/skill-management/tools/scaffold-managed.ts +12 -0
  335. package/src/config/bundled-skills/slack/SKILL.md +5 -1
  336. package/src/config/bundled-skills/subagent/SKILL.md +4 -1
  337. package/src/config/bundled-skills/tasks/SKILL.md +5 -2
  338. package/src/config/bundled-skills/transcribe/SKILL.md +4 -1
  339. package/src/config/bundled-skills/watcher/SKILL.md +4 -1
  340. package/src/config/bundled-tool-registry.ts +118 -107
  341. package/src/config/env.ts +5 -2
  342. package/src/config/feature-flag-registry.json +33 -9
  343. package/src/config/loader.ts +10 -2
  344. package/src/config/schema.ts +19 -16
  345. package/src/config/schemas/inference.ts +12 -22
  346. package/src/config/schemas/memory-storage.ts +19 -1
  347. package/src/config/schemas/platform.ts +0 -16
  348. package/src/config/skill-state.ts +11 -8
  349. package/src/config/skills.ts +83 -32
  350. package/src/context/token-estimator.ts +11 -0
  351. package/src/context/window-manager.ts +180 -151
  352. package/src/daemon/computer-use-session.ts +11 -43
  353. package/src/daemon/daemon-control.ts +4 -1
  354. package/src/daemon/handlers/config-channels.ts +5 -9
  355. package/src/daemon/handlers/config-ingress.ts +0 -4
  356. package/src/daemon/handlers/config-model.ts +7 -13
  357. package/src/daemon/handlers/config-telegram.ts +4 -8
  358. package/src/daemon/handlers/config-voice.ts +2 -5
  359. package/src/daemon/handlers/dictation.ts +2 -12
  360. package/src/daemon/handlers/identity.ts +0 -105
  361. package/src/daemon/handlers/recording.ts +3 -23
  362. package/src/daemon/handlers/session-history.ts +42 -10
  363. package/src/daemon/handlers/sessions.ts +53 -72
  364. package/src/daemon/handlers/shared.ts +7 -28
  365. package/src/daemon/handlers/skills.ts +31 -27
  366. package/src/daemon/host-bash-proxy.ts +148 -0
  367. package/src/daemon/host-file-proxy.ts +135 -0
  368. package/src/daemon/lifecycle.ts +53 -41
  369. package/src/daemon/mcp-reload-service.ts +123 -0
  370. package/src/daemon/message-protocol.ts +6 -0
  371. package/src/daemon/message-types/apps.ts +0 -25
  372. package/src/daemon/message-types/browser.ts +1 -1
  373. package/src/daemon/message-types/computer-use.ts +1 -4
  374. package/src/daemon/message-types/guardian-actions.ts +1 -1
  375. package/src/daemon/message-types/host-bash.ts +18 -0
  376. package/src/daemon/message-types/host-file.ts +44 -0
  377. package/src/daemon/message-types/integrations.ts +1 -73
  378. package/src/daemon/message-types/messages.ts +15 -0
  379. package/src/daemon/message-types/schedules.ts +11 -27
  380. package/src/daemon/message-types/sessions.ts +8 -2
  381. package/src/daemon/message-types/settings.ts +1 -1
  382. package/src/daemon/message-types/shared.ts +1 -1
  383. package/src/daemon/message-types/surfaces.ts +2 -0
  384. package/src/daemon/ride-shotgun-handler.ts +35 -43
  385. package/src/daemon/seed-files.ts +3 -27
  386. package/src/daemon/server.ts +45 -28
  387. package/src/daemon/session-agent-loop-handlers.ts +72 -9
  388. package/src/daemon/session-agent-loop.ts +97 -66
  389. package/src/daemon/session-attachments.ts +1 -1
  390. package/src/daemon/session-error.ts +17 -16
  391. package/src/daemon/session-lifecycle.ts +20 -1
  392. package/src/daemon/session-media-retry.ts +1 -15
  393. package/src/daemon/session-messaging.ts +14 -6
  394. package/src/daemon/session-process.ts +36 -7
  395. package/src/daemon/session-queue-manager.ts +62 -103
  396. package/src/daemon/session-runtime-assembly.ts +27 -7
  397. package/src/daemon/session-skill-tools.ts +12 -11
  398. package/src/daemon/session-slash.ts +7 -0
  399. package/src/daemon/session-surfaces.ts +192 -118
  400. package/src/daemon/session-tool-setup.ts +146 -6
  401. package/src/daemon/session.ts +75 -37
  402. package/src/errors.ts +0 -2
  403. package/src/export/formatter.ts +6 -0
  404. package/src/mcp/mcp-oauth-provider.ts +1 -3
  405. package/src/media/avatar-router.ts +20 -28
  406. package/src/media/avatar-types.ts +7 -14
  407. package/src/media/managed-avatar-client.ts +70 -34
  408. package/src/memory/app-store.ts +0 -18
  409. package/src/memory/conversation-title-service.ts +1 -2
  410. package/src/memory/db-init.ts +16 -0
  411. package/src/memory/embedding-backend.ts +129 -27
  412. package/src/memory/embedding-gemini.test.ts +256 -0
  413. package/src/memory/embedding-gemini.ts +47 -13
  414. package/src/memory/embedding-local.ts +14 -2
  415. package/src/memory/embedding-ollama.ts +15 -2
  416. package/src/memory/embedding-openai.ts +15 -2
  417. package/src/memory/embedding-types.test.ts +116 -0
  418. package/src/memory/embedding-types.ts +61 -0
  419. package/src/memory/fingerprint.ts +1 -1
  420. package/src/memory/indexer.ts +25 -1
  421. package/src/memory/job-handlers/embedding.test.ts +258 -0
  422. package/src/memory/job-handlers/embedding.ts +81 -1
  423. package/src/memory/job-handlers/index-maintenance.ts +35 -1
  424. package/src/memory/job-handlers/media-processing.ts +11 -1
  425. package/src/memory/job-utils.ts +21 -6
  426. package/src/memory/jobs-store.ts +5 -1
  427. package/src/memory/jobs-worker.ts +8 -0
  428. package/src/memory/message-content.ts +66 -0
  429. package/src/memory/migrations/100-core-tables.ts +1 -31
  430. package/src/memory/migrations/104-core-indexes.ts +0 -11
  431. package/src/memory/migrations/145-drop-accounts-table.ts +19 -0
  432. package/src/memory/migrations/146-schedule-oneshot-routing.ts +94 -0
  433. package/src/memory/migrations/147-migrate-reminders-to-schedules.ts +129 -0
  434. package/src/memory/migrations/148-drop-reminders-table.ts +18 -0
  435. package/src/memory/migrations/index.ts +4 -0
  436. package/src/memory/migrations/registry.ts +19 -0
  437. package/src/memory/qdrant-client.ts +158 -43
  438. package/src/memory/retriever.test.ts +0 -1
  439. package/src/memory/retriever.ts +12 -2
  440. package/src/memory/schema/infrastructure.ts +5 -37
  441. package/src/memory/search/formatting.ts +34 -9
  442. package/src/memory/search/semantic.ts +57 -2
  443. package/src/memory/search/types.ts +2 -1
  444. package/src/notifications/AGENTS.md +2 -2
  445. package/src/notifications/README.md +59 -58
  446. package/src/notifications/adapters/macos.ts +1 -1
  447. package/src/notifications/broadcaster.ts +5 -5
  448. package/src/notifications/copy-composer.ts +1 -1
  449. package/src/notifications/decision-engine.ts +2 -2
  450. package/src/notifications/destination-resolver.ts +2 -2
  451. package/src/notifications/emit-signal.ts +8 -8
  452. package/src/notifications/signal.ts +1 -1
  453. package/src/notifications/thread-seed-composer.ts +1 -1
  454. package/src/oauth/connect-orchestrator.ts +1 -1
  455. package/src/oauth/token-persistence.ts +1 -1
  456. package/src/permissions/checker.ts +12 -1
  457. package/src/permissions/defaults.ts +13 -17
  458. package/src/permissions/trust-store.ts +37 -0
  459. package/src/permissions/workspace-policy.ts +0 -1
  460. package/src/prompts/__tests__/build-cli-reference-section.test.ts +11 -0
  461. package/src/prompts/computer-use-prompt.ts +1 -1
  462. package/src/prompts/system-prompt.ts +33 -35
  463. package/src/prompts/templates/BOOTSTRAP.md +0 -3
  464. package/src/prompts/templates/SOUL.md +1 -2
  465. package/src/prompts/templates/UPDATES.md +16 -7
  466. package/src/providers/anthropic/client.ts +87 -33
  467. package/src/providers/gemini/client.ts +6 -0
  468. package/src/providers/managed-proxy/constants.ts +5 -0
  469. package/src/providers/openai/client.ts +15 -0
  470. package/src/providers/registry.ts +4 -6
  471. package/src/providers/types.ts +24 -2
  472. package/src/runtime/AGENTS.md +18 -0
  473. package/src/runtime/assistant-event-hub.ts +2 -3
  474. package/src/runtime/assistant-event.ts +4 -4
  475. package/src/runtime/auth/__tests__/context.test.ts +5 -5
  476. package/src/runtime/auth/__tests__/credential-service.test.ts +0 -1
  477. package/src/runtime/auth/__tests__/guard-tests.test.ts +3 -2
  478. package/src/runtime/auth/__tests__/{ipc-auth-context.test.ts → local-auth-context.test.ts} +21 -21
  479. package/src/runtime/auth/__tests__/route-policy.test.ts +2 -2
  480. package/src/runtime/auth/__tests__/scopes.test.ts +9 -8
  481. package/src/runtime/auth/__tests__/subject.test.ts +8 -8
  482. package/src/runtime/auth/__tests__/token-service.test.ts +0 -1
  483. package/src/runtime/auth/route-policy.ts +8 -8
  484. package/src/runtime/auth/scopes.ts +2 -1
  485. package/src/runtime/auth/subject.ts +4 -4
  486. package/src/runtime/auth/token-service.ts +1 -24
  487. package/src/runtime/auth/types.ts +3 -3
  488. package/src/runtime/guardian-action-followup-executor.ts +1 -1
  489. package/src/runtime/guardian-action-grant-minter.ts +1 -1
  490. package/src/runtime/guardian-action-service.ts +3 -3
  491. package/src/runtime/http-server.ts +15 -2
  492. package/src/runtime/http-types.ts +10 -0
  493. package/src/runtime/invite-service.ts +3 -3
  494. package/src/runtime/local-actor-identity.ts +17 -22
  495. package/src/runtime/middleware/error-handler.ts +14 -1
  496. package/src/runtime/pending-interactions.ts +21 -9
  497. package/src/runtime/routes/app-management-routes.ts +63 -67
  498. package/src/runtime/routes/approval-routes.ts +1 -3
  499. package/src/runtime/routes/brain-graph/brain-graph.html +1845 -0
  500. package/src/runtime/routes/brain-graph-routes.ts +4 -42
  501. package/src/runtime/routes/btw-routes.ts +155 -0
  502. package/src/runtime/routes/computer-use-routes.ts +77 -31
  503. package/src/runtime/routes/conversation-routes.ts +234 -47
  504. package/src/runtime/routes/diagnostics-routes.ts +154 -43
  505. package/src/runtime/routes/documents-routes.ts +2 -2
  506. package/src/runtime/routes/global-search-routes.ts +1 -1
  507. package/src/runtime/routes/host-bash-routes.ts +83 -0
  508. package/src/runtime/routes/host-file-routes.ts +79 -0
  509. package/src/runtime/routes/integrations/slack/share.ts +1 -1
  510. package/src/runtime/routes/log-export-routes.ts +120 -0
  511. package/src/runtime/routes/mcp-routes.ts +20 -0
  512. package/src/runtime/routes/migration-routes.ts +3 -3
  513. package/src/runtime/routes/pairing-routes.ts +1 -1
  514. package/src/runtime/routes/recording-routes.ts +6 -4
  515. package/src/runtime/routes/schedule-routes.ts +31 -5
  516. package/src/runtime/routes/session-management-routes.ts +2 -6
  517. package/src/runtime/routes/session-query-routes.ts +18 -15
  518. package/src/runtime/routes/settings-routes.ts +7 -351
  519. package/src/runtime/routes/skills-routes.ts +7 -6
  520. package/src/runtime/routes/subagents-routes.ts +4 -10
  521. package/src/runtime/routes/surface-action-routes.ts +3 -14
  522. package/src/runtime/routes/surface-content-routes.ts +22 -5
  523. package/src/runtime/routes/work-items-routes.ts +21 -25
  524. package/src/runtime/routes/workspace-routes.test.ts +3 -3
  525. package/src/runtime/routes/workspace-utils.ts +1 -1
  526. package/src/runtime/telegram-streaming-delivery.ts +3 -0
  527. package/src/runtime/verification-outbound-actions.ts +2 -2
  528. package/src/schedule/integration-status.ts +0 -6
  529. package/src/schedule/schedule-store.ts +234 -43
  530. package/src/schedule/scheduler.ts +73 -74
  531. package/src/security/oauth2.ts +1 -1
  532. package/src/sequence/store.ts +12 -2
  533. package/src/skills/frontmatter.ts +19 -77
  534. package/src/skills/managed-store.ts +11 -2
  535. package/src/subagent/manager.ts +5 -3
  536. package/src/tasks/ephemeral-permissions.ts +3 -5
  537. package/src/tools/AGENTS.md +37 -0
  538. package/src/tools/apps/executors.ts +0 -6
  539. package/src/tools/browser/browser-manager.ts +17 -11
  540. package/src/tools/browser/jit-auth.ts +4 -1
  541. package/src/tools/claude-code/claude-code.ts +1 -1
  542. package/src/tools/computer-use/definitions.ts +48 -60
  543. package/src/tools/document/document-tool.ts +6 -6
  544. package/src/tools/document/editor-template.ts +10 -8
  545. package/src/tools/filesystem/edit.ts +2 -1
  546. package/src/tools/filesystem/read.ts +20 -2
  547. package/src/tools/filesystem/write.ts +2 -1
  548. package/src/tools/host-filesystem/edit.ts +17 -1
  549. package/src/tools/host-filesystem/read.ts +16 -1
  550. package/src/tools/host-filesystem/write.ts +15 -1
  551. package/src/tools/host-terminal/host-shell.ts +24 -0
  552. package/src/tools/memory/definitions.ts +45 -81
  553. package/src/tools/memory/handlers.test.ts +0 -1
  554. package/src/tools/memory/handlers.ts +1 -1
  555. package/src/tools/memory/register.ts +26 -60
  556. package/src/tools/network/script-proxy/session-manager.ts +6 -8
  557. package/src/tools/network/web-fetch.ts +7 -1
  558. package/src/tools/network/web-search.ts +2 -1
  559. package/src/tools/registry.ts +23 -0
  560. package/src/tools/schedule/create.ts +113 -5
  561. package/src/tools/schedule/list.ts +57 -15
  562. package/src/tools/schedule/update.ts +73 -3
  563. package/src/tools/shared/filesystem/image-read.ts +192 -0
  564. package/src/tools/side-effects.ts +1 -7
  565. package/src/tools/skills/delete-managed.ts +27 -64
  566. package/src/tools/skills/execute.ts +54 -0
  567. package/src/tools/skills/load.ts +127 -5
  568. package/src/tools/skills/scaffold-managed.ts +93 -172
  569. package/src/tools/subagent/message.ts +0 -7
  570. package/src/tools/subagent/spawn.ts +1 -1
  571. package/src/tools/swarm/delegate.ts +0 -3
  572. package/src/tools/system/avatar-generator.ts +13 -19
  573. package/src/tools/system/request-permission.ts +2 -1
  574. package/src/tools/terminal/safe-env.ts +1 -0
  575. package/src/tools/tool-manifest.ts +41 -47
  576. package/src/tools/types.ts +6 -2
  577. package/src/tools/ui-surface/definitions.ts +0 -55
  578. package/src/util/errors.ts +12 -10
  579. package/src/workspace/git-service.ts +0 -2
  580. package/src/__tests__/account-registry.test.ts +0 -258
  581. package/src/__tests__/email-classifier.test.ts +0 -25
  582. package/src/__tests__/gmail-integration.test.ts +0 -97
  583. package/src/__tests__/handle-user-message-secret-resume.test.ts +0 -172
  584. package/src/__tests__/home-base-bootstrap.test.ts +0 -84
  585. package/src/__tests__/managed-twitter-guardrails.test.ts +0 -353
  586. package/src/__tests__/prebuilt-home-base-seed.test.ts +0 -79
  587. package/src/__tests__/recording-intent-fallback.test.ts +0 -199
  588. package/src/__tests__/recording-intent.test.ts +0 -985
  589. package/src/__tests__/recording-state-machine.test.ts +0 -1574
  590. package/src/__tests__/reminder-store.test.ts +0 -350
  591. package/src/__tests__/reminder.test.ts +0 -337
  592. package/src/__tests__/scan-result-store.test.ts +0 -121
  593. package/src/__tests__/twitter-platform-proxy-client.test.ts +0 -450
  594. package/src/__tests__/view-image-tool.test.ts +0 -241
  595. package/src/cli/commands/amazon/cart.ts +0 -513
  596. package/src/cli/commands/amazon/checkout.ts +0 -394
  597. package/src/cli/commands/amazon/client.ts +0 -513
  598. package/src/cli/commands/amazon/index.ts +0 -920
  599. package/src/cli/commands/amazon/product-details.ts +0 -145
  600. package/src/cli/commands/amazon/request-extractor.ts +0 -187
  601. package/src/cli/commands/amazon/search.ts +0 -76
  602. package/src/cli/commands/amazon/session.ts +0 -116
  603. package/src/cli/commands/twitter/__tests__/cli-error-shaping.test.ts +0 -265
  604. package/src/cli/commands/twitter/__tests__/cli-read-routing.test.ts +0 -483
  605. package/src/cli/commands/twitter/__tests__/cli-routing.test.ts +0 -412
  606. package/src/cli/commands/twitter/__tests__/oauth-client.test.ts +0 -197
  607. package/src/cli/commands/twitter/client.ts +0 -989
  608. package/src/cli/commands/twitter/index.ts +0 -1160
  609. package/src/cli/commands/twitter/oauth-client.ts +0 -94
  610. package/src/cli/commands/twitter/router.ts +0 -396
  611. package/src/cli/commands/twitter/session.ts +0 -121
  612. package/src/config/bundled-skills/agentmail/SKILL.md +0 -132
  613. package/src/config/bundled-skills/agentmail/icon.svg +0 -21
  614. package/src/config/bundled-skills/amazon/SKILL.md +0 -137
  615. package/src/config/bundled-skills/amazon/icon.svg +0 -13
  616. package/src/config/bundled-skills/api-mapping/SKILL.md +0 -78
  617. package/src/config/bundled-skills/api-mapping/icon.svg +0 -18
  618. package/src/config/bundled-skills/cli-discover/SKILL.md +0 -68
  619. package/src/config/bundled-skills/deploy-fullstack-vercel/SKILL.md +0 -179
  620. package/src/config/bundled-skills/document-writer/SKILL.md +0 -195
  621. package/src/config/bundled-skills/elevenlabs-voice/SKILL.md +0 -140
  622. package/src/config/bundled-skills/email-setup/SKILL.md +0 -68
  623. package/src/config/bundled-skills/frontend-design/SKILL.md +0 -44
  624. package/src/config/bundled-skills/frontend-design/icon.svg +0 -16
  625. package/src/config/bundled-skills/google-oauth-setup/SKILL.md +0 -452
  626. package/src/config/bundled-skills/guardian-verify-setup/SKILL.md +0 -203
  627. package/src/config/bundled-skills/influencer/SKILL.md +0 -144
  628. package/src/config/bundled-skills/influencer/scripts/client.ts +0 -1269
  629. package/src/config/bundled-skills/influencer/scripts/influencer.ts +0 -267
  630. package/src/config/bundled-skills/macos-automation/SKILL.md +0 -65
  631. package/src/config/bundled-skills/macos-automation/icon.svg +0 -12
  632. package/src/config/bundled-skills/mcp-setup/SKILL.md +0 -75
  633. package/src/config/bundled-skills/media-processing/tools/media-diagnostics.ts +0 -184
  634. package/src/config/bundled-skills/messaging/tools/gmail-archive-by-query.ts +0 -80
  635. package/src/config/bundled-skills/messaging/tools/gmail-archive.ts +0 -29
  636. package/src/config/bundled-skills/messaging/tools/gmail-batch-archive.ts +0 -56
  637. package/src/config/bundled-skills/messaging/tools/gmail-batch-label.ts +0 -34
  638. package/src/config/bundled-skills/messaging/tools/gmail-download-attachment.ts +0 -47
  639. package/src/config/bundled-skills/messaging/tools/gmail-label.ts +0 -31
  640. package/src/config/bundled-skills/messaging/tools/gmail-list-attachments.ts +0 -67
  641. package/src/config/bundled-skills/messaging/tools/gmail-send-with-attachments.ts +0 -97
  642. package/src/config/bundled-skills/messaging/tools/gmail-summarize-thread.ts +0 -87
  643. package/src/config/bundled-skills/messaging/tools/gmail-triage.ts +0 -135
  644. package/src/config/bundled-skills/messaging/tools/messaging-analyze-activity.ts +0 -24
  645. package/src/config/bundled-skills/messaging/tools/messaging-reply.ts +0 -201
  646. package/src/config/bundled-skills/messaging/tools/send-notification.ts +0 -1
  647. package/src/config/bundled-skills/messaging/tools/sequence-cancel.ts +0 -27
  648. package/src/config/bundled-skills/messaging/tools/sequence-pause.ts +0 -48
  649. package/src/config/bundled-skills/messaging/tools/sequence-resume.ts +0 -27
  650. package/src/config/bundled-skills/messaging/tools/sequence-update.ts +0 -56
  651. package/src/config/bundled-skills/notion/SKILL.md +0 -240
  652. package/src/config/bundled-skills/notion-oauth-setup/SKILL.md +0 -126
  653. package/src/config/bundled-skills/oauth-setup/SKILL.md +0 -143
  654. package/src/config/bundled-skills/public-ingress/SKILL.md +0 -258
  655. package/src/config/bundled-skills/reminder/SKILL.md +0 -79
  656. package/src/config/bundled-skills/reminder/TOOLS.json +0 -89
  657. package/src/config/bundled-skills/reminder/tools/reminder-list.ts +0 -12
  658. package/src/config/bundled-skills/restaurant-reservation/SKILL.md +0 -141
  659. package/src/config/bundled-skills/screen-recording/SKILL.md +0 -148
  660. package/src/config/bundled-skills/self-upgrade/SKILL.md +0 -69
  661. package/src/config/bundled-skills/skills-catalog/SKILL.md +0 -78
  662. package/src/config/bundled-skills/slack-app-setup/SKILL.md +0 -178
  663. package/src/config/bundled-skills/slack-digest-setup/SKILL.md +0 -163
  664. package/src/config/bundled-skills/slack-oauth-setup/SKILL.md +0 -157
  665. package/src/config/bundled-skills/start-the-day/SKILL.md +0 -70
  666. package/src/config/bundled-skills/start-the-day/icon.svg +0 -13
  667. package/src/config/bundled-skills/telegram-setup/SKILL.md +0 -105
  668. package/src/config/bundled-skills/time-based-actions/SKILL.md +0 -142
  669. package/src/config/bundled-skills/twilio-setup/SKILL.md +0 -232
  670. package/src/config/bundled-skills/twitter/SKILL.md +0 -319
  671. package/src/config/bundled-skills/twitter/icon.svg +0 -14
  672. package/src/config/bundled-skills/typescript-eval/SKILL.md +0 -60
  673. package/src/config/bundled-skills/vercel-token-setup/SKILL.md +0 -214
  674. package/src/config/bundled-skills/voice-setup/SKILL.md +0 -131
  675. package/src/config/bundled-skills/voice-setup/icon.svg +0 -20
  676. package/src/daemon/handlers/pairing.ts +0 -119
  677. package/src/daemon/handlers/session-user-message.ts +0 -961
  678. package/src/daemon/recording-executor.ts +0 -180
  679. package/src/daemon/recording-intent-fallback.ts +0 -162
  680. package/src/daemon/recording-intent.ts +0 -493
  681. package/src/home-base/app-link-store.ts +0 -78
  682. package/src/home-base/bootstrap.ts +0 -74
  683. package/src/home-base/prebuilt/brain-graph.html +0 -1483
  684. package/src/home-base/prebuilt/index.html +0 -702
  685. package/src/home-base/prebuilt/seed-metadata.json +0 -21
  686. package/src/home-base/prebuilt/seed.ts +0 -122
  687. package/src/home-base/prebuilt-home-base-updater.ts +0 -36
  688. package/src/memory/account-store.ts +0 -117
  689. package/src/messaging/activity-analyzer.ts +0 -76
  690. package/src/messaging/email-classifier.ts +0 -208
  691. package/src/messaging/index.ts +0 -2
  692. package/src/messaging/outreach-classifier.ts +0 -185
  693. package/src/messaging/thread-summarizer.ts +0 -346
  694. package/src/messaging/types.ts +0 -17
  695. package/src/tools/browser/x-auto-navigate.ts +0 -254
  696. package/src/tools/credentials/account-registry.ts +0 -144
  697. package/src/tools/filesystem/view-image.ts +0 -244
  698. package/src/tools/reminder/reminder-store.ts +0 -194
  699. package/src/tools/reminder/reminder.ts +0 -158
  700. package/src/tools/system/navigate-settings.ts +0 -74
  701. package/src/tools/system/open-system-settings.ts +0 -85
  702. package/src/tools/system/version.ts +0 -54
  703. package/src/twitter/platform-proxy-client.ts +0 -405
  704. package/src/util/cookie-session.ts +0 -98
  705. /package/src/config/bundled-skills/{messaging → gmail}/tools/scan-result-store.ts +0 -0
  706. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-analytics.ts +0 -0
  707. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-create.ts +0 -0
  708. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-delete.ts +0 -0
  709. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enroll.ts +0 -0
  710. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enrollment-list.ts +0 -0
  711. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-get.ts +0 -0
  712. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-import.ts +0 -0
  713. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-list.ts +0 -0
@@ -1,45 +1,17 @@
1
1
  /**
2
2
  * HTTP route handlers for settings, identity/avatar, voice config,
3
- * OAuth connect, Twitter auth, home base, and workspace files.
3
+ * OAuth connect, and workspace files.
4
4
  *
5
- * Migrated from IPC handlers:
6
- * - handlers/config-voice.ts (voice_config_update)
7
- * - handlers/avatar.ts (generate_avatar)
8
- * - handlers/oauth-connect.ts (oauth_connect_start)
9
- * - handlers/twitter-auth.ts (twitter_auth_start, twitter_auth_status)
10
- * - handlers/home-base.ts (home_base_get)
11
- * - handlers/workspace-files.ts (workspace_files_list, workspace_file_read)
5
+ * Handles settings, identity/avatar, voice config,
6
+ * OAuth connect, and workspace files.
12
7
  * - handlers/config-tools.ts (tool_names_list, tool_permission_simulate, env_vars_request)
13
8
  */
14
9
 
15
10
  import { readFileSync } from "node:fs";
16
11
  import { join } from "node:path";
17
12
 
18
- import {
19
- getPlatformAssistantId,
20
- getPlatformBaseUrl,
21
- } from "../../config/env.js";
22
- import {
23
- getNestedValue,
24
- invalidateConfigCache,
25
- loadConfig,
26
- loadRawConfig,
27
- saveRawConfig,
28
- setNestedValue,
29
- } from "../../config/loader.js";
30
13
  import { loadSkillCatalog } from "../../config/skills.js";
31
14
  import { normalizeActivationKey } from "../../daemon/handlers/config-voice.js";
32
- import { getHomeBaseAppLink } from "../../home-base/app-link-store.js";
33
- import {
34
- bootstrapHomeBaseAppLink,
35
- resolveHomeBaseAppId,
36
- } from "../../home-base/bootstrap.js";
37
- import {
38
- getPrebuiltHomeBasePreview,
39
- getPrebuiltHomeBaseTaskPayload,
40
- } from "../../home-base/prebuilt/seed.js";
41
- import { getPublicBaseUrl } from "../../inbound/public-ingress-urls.js";
42
- import { getApp } from "../../memory/app-store.js";
43
15
  import { orchestrateOAuthConnect } from "../../oauth/connect-orchestrator.js";
44
16
  import {
45
17
  getProviderProfile,
@@ -61,7 +33,6 @@ import {
61
33
  import { getAllTools, getTool } from "../../tools/registry.js";
62
34
  import { isSideEffectTool } from "../../tools/side-effects.js";
63
35
  import { setAvatarTool } from "../../tools/system/avatar-generator.js";
64
- import { ConfigError } from "../../util/errors.js";
65
36
  import { pathExists } from "../../util/fs.js";
66
37
  import { getLogger } from "../../util/logger.js";
67
38
  import { getWorkspaceDir } from "../../util/platform.js";
@@ -80,9 +51,8 @@ function handleVoiceConfigUpdate(activationKey: string): Response {
80
51
  if (!result.ok) {
81
52
  return httpError("BAD_REQUEST", result.reason, 400);
82
53
  }
83
- // The broadcast to IPC clients happens via the IPC handler. The HTTP
84
- // route validates and returns the canonical value; the caller (client)
85
- // applies the setting locally.
54
+ // The HTTP route validates and returns the canonical value; the caller
55
+ // (client) applies the setting locally.
86
56
  return Response.json({ ok: true, activationKey: result.value });
87
57
  }
88
58
 
@@ -269,296 +239,7 @@ async function handleOAuthConnectStart(body: {
269
239
  }
270
240
 
271
241
  // ---------------------------------------------------------------------------
272
- // Twitter auth
273
- // ---------------------------------------------------------------------------
274
-
275
- function sanitizeTwitterAuthError(message: string): string {
276
- const lower = message.toLowerCase();
277
- if (lower.includes("timed out")) {
278
- return "Twitter authentication timed out. Please try again.";
279
- }
280
- if (lower.includes("user_cancelled") || lower.includes("cancelled")) {
281
- return "Twitter authentication was cancelled.";
282
- }
283
- if (lower.includes("denied") || lower.includes("invalid_grant")) {
284
- return "Twitter denied the authorization request. Please try again.";
285
- }
286
- return "Twitter authentication failed. Please try again.";
287
- }
288
-
289
- async function handleTwitterAuthStart(): Promise<Response> {
290
- try {
291
- assertMetadataWritable();
292
- } catch {
293
- return httpError(
294
- "UNPROCESSABLE_ENTITY",
295
- "Credential metadata file has an unrecognized version. Cannot store OAuth credentials.",
296
- 422,
297
- );
298
- }
299
-
300
- try {
301
- const raw = loadRawConfig();
302
- const mode =
303
- (getNestedValue(raw, "twitter.integrationMode") as string | undefined) ??
304
- "local_byo";
305
- if (mode === "managed") {
306
- const apiKey = getSecureKey("credential:vellum:assistant_api_key");
307
- if (!apiKey) {
308
- return Response.json(
309
- {
310
- ok: false,
311
- error:
312
- "An AssistantAPIKey is required for managed Twitter. Run assistant setup.",
313
- errorCode: "managed_missing_api_key",
314
- },
315
- { status: 400 },
316
- );
317
- }
318
- return Response.json(
319
- {
320
- ok: false,
321
- error:
322
- "Managed Twitter authentication is handled through the Vellum platform. Open Settings to connect.",
323
- errorCode: "managed_auth_via_platform",
324
- },
325
- { status: 400 },
326
- );
327
- }
328
- if (mode !== "local_byo") {
329
- return httpError(
330
- "BAD_REQUEST",
331
- 'Twitter integration mode must be "local_byo" to use this flow.',
332
- 400,
333
- );
334
- }
335
-
336
- const clientId = getSecureKey("credential:integration:twitter:client_id");
337
- if (!clientId) {
338
- return httpError(
339
- "BAD_REQUEST",
340
- "No Twitter client credentials configured. Please set up your Client ID first.",
341
- 400,
342
- );
343
- }
344
-
345
- const clientSecret =
346
- getSecureKey("credential:integration:twitter:client_secret") || undefined;
347
-
348
- let config;
349
- try {
350
- config = loadConfig();
351
- } catch (err) {
352
- const detail = err instanceof ConfigError ? err.message : String(err);
353
- return httpError(
354
- "INTERNAL_ERROR",
355
- `Unable to load config: ${detail}`,
356
- 500,
357
- );
358
- }
359
-
360
- try {
361
- getPublicBaseUrl(config);
362
- } catch {
363
- return httpError(
364
- "BAD_REQUEST",
365
- "Set ingress.publicBaseUrl (or INGRESS_PUBLIC_BASE_URL) so OAuth callbacks can route through /webhooks/oauth/callback on the gateway.",
366
- 400,
367
- );
368
- }
369
-
370
- let authUrl: string | undefined;
371
-
372
- const result = await orchestrateOAuthConnect({
373
- service: "integration:twitter",
374
- clientId,
375
- clientSecret,
376
- isInteractive: true,
377
- openUrl: (url: string) => {
378
- authUrl = url;
379
- },
380
- allowedTools: ["twitter_post"],
381
- });
382
-
383
- if (!result.success) {
384
- log.error(
385
- { err: result.error },
386
- "Twitter OAuth orchestrator returned error",
387
- );
388
- return httpError(
389
- "INTERNAL_ERROR",
390
- result.safeError
391
- ? result.error
392
- : sanitizeTwitterAuthError(result.error),
393
- 500,
394
- );
395
- }
396
-
397
- if (result.deferred) {
398
- return Response.json({
399
- ok: true,
400
- deferred: true,
401
- authUrl: result.authUrl,
402
- });
403
- }
404
-
405
- // Persist accountInfo to config
406
- if (result.accountInfo) {
407
- try {
408
- const raw2 = loadRawConfig();
409
- setNestedValue(raw2, "twitter.accountInfo", result.accountInfo);
410
- saveRawConfig(raw2);
411
- invalidateConfigCache();
412
- } catch {
413
- // Non-fatal
414
- }
415
- }
416
-
417
- return Response.json({
418
- ok: true,
419
- accountInfo: result.accountInfo,
420
- ...(authUrl ? { authUrl } : {}),
421
- });
422
- } catch (err) {
423
- const message = err instanceof Error ? err.message : String(err);
424
- log.error({ err }, "Twitter OAuth flow failed");
425
- return httpError("INTERNAL_ERROR", sanitizeTwitterAuthError(message), 500);
426
- }
427
- }
428
-
429
- function handleTwitterAuthStatus(): Response {
430
- try {
431
- const accessToken = getSecureKey(
432
- "credential:integration:twitter:access_token",
433
- );
434
- const raw = loadRawConfig();
435
- const mode =
436
- (getNestedValue(raw, "twitter.integrationMode") as
437
- | "local_byo"
438
- | "managed"
439
- | undefined) ?? "local_byo";
440
- const accountInfo = getNestedValue(raw, "twitter.accountInfo") as
441
- | string
442
- | undefined;
443
-
444
- // Managed prerequisites
445
- const integrationModeManaged = mode === "managed";
446
- const assistantApiKeyPresent = !!getSecureKey(
447
- "credential:vellum:assistant_api_key",
448
- );
449
- const platformBaseUrlFromEnv = getPlatformBaseUrl();
450
- const platformBaseUrlFromConfig = (
451
- raw?.platform as Record<string, unknown> | undefined
452
- )?.baseUrl as string | undefined;
453
- const platformAssistantIdResolvable = !!(
454
- (platformBaseUrlFromEnv || platformBaseUrlFromConfig) &&
455
- getPlatformAssistantId()
456
- );
457
-
458
- const managedPrerequisites = {
459
- integrationModeManaged,
460
- assistantApiKeyPresent,
461
- platformAssistantIdResolvable,
462
- };
463
- const managedAvailable =
464
- integrationModeManaged &&
465
- assistantApiKeyPresent &&
466
- platformAssistantIdResolvable;
467
-
468
- // Local client configured
469
- const localClientConfigured = !!getSecureKey(
470
- "credential:integration:twitter:client_id",
471
- );
472
-
473
- // Strategy
474
- const strategyRaw = getNestedValue(raw, "twitter.strategy") as
475
- | string
476
- | undefined;
477
- const strategy = strategyRaw ?? "auto";
478
- const strategyConfigured = strategyRaw !== undefined;
479
-
480
- // In managed mode, connected is always false (auth goes through platform)
481
- const connected = mode === "managed" ? false : !!accessToken;
482
-
483
- return Response.json({
484
- connected,
485
- accountInfo: accountInfo ?? undefined,
486
- mode,
487
- managedAvailable,
488
- managedPrerequisites,
489
- localClientConfigured,
490
- strategy,
491
- strategyConfigured,
492
- });
493
- } catch (err) {
494
- const message = err instanceof Error ? err.message : String(err);
495
- log.error({ err }, "Failed to get Twitter auth status");
496
- return httpError("INTERNAL_ERROR", message, 500);
497
- }
498
- }
499
-
500
- // ---------------------------------------------------------------------------
501
- // Home base
502
- // ---------------------------------------------------------------------------
503
-
504
- function handleHomeBaseGet(ensureLinked: boolean): Response {
505
- try {
506
- if (ensureLinked !== false) {
507
- bootstrapHomeBaseAppLink();
508
- }
509
-
510
- const appId = resolveHomeBaseAppId();
511
- if (!appId) {
512
- return Response.json({ homeBase: null });
513
- }
514
-
515
- const link = getHomeBaseAppLink();
516
- const source = link?.source ?? "prebuilt_seed";
517
-
518
- let preview: {
519
- title: string;
520
- subtitle: string;
521
- description: string;
522
- icon: string;
523
- metrics: Array<{ label: string; value: string }>;
524
- };
525
-
526
- if (source === "personalized") {
527
- const app = getApp(appId);
528
- if (app) {
529
- preview = {
530
- title: app.name,
531
- subtitle: "Dashboard",
532
- description: app.description ?? "",
533
- icon: app.icon ?? "🏠",
534
- metrics: [],
535
- };
536
- } else {
537
- preview = getPrebuiltHomeBasePreview();
538
- }
539
- } else {
540
- preview = getPrebuiltHomeBasePreview();
541
- }
542
-
543
- const tasks = getPrebuiltHomeBaseTaskPayload();
544
-
545
- return Response.json({
546
- homeBase: {
547
- appId,
548
- source,
549
- starterTasks: tasks.starterTasks,
550
- onboardingTasks: tasks.onboardingTasks,
551
- preview,
552
- },
553
- });
554
- } catch (err) {
555
- log.error({ err }, "Failed to resolve home base metadata");
556
- return Response.json({ homeBase: null });
557
- }
558
- }
559
-
560
- // ---------------------------------------------------------------------------
561
- // Workspace files (IPC-style list/read)
242
+ // Workspace files (list/read)
562
243
  // ---------------------------------------------------------------------------
563
244
 
564
245
  const WORKSPACE_FILES = ["IDENTITY.md", "SOUL.md", "USER.md", "skills/"];
@@ -892,32 +573,7 @@ export function settingsRouteDefinitions(): RouteDefinition[] {
892
573
  },
893
574
  },
894
575
 
895
- // Twitter auth
896
- {
897
- endpoint: "integrations/twitter/auth/start",
898
- method: "POST",
899
- policyKey: "integrations/twitter/auth/start",
900
- handler: async () => handleTwitterAuthStart(),
901
- },
902
- {
903
- endpoint: "integrations/twitter/auth/status",
904
- method: "GET",
905
- policyKey: "integrations/twitter/auth/status",
906
- handler: () => handleTwitterAuthStatus(),
907
- },
908
-
909
- // Home base
910
- {
911
- endpoint: "home-base",
912
- method: "GET",
913
- policyKey: "home-base",
914
- handler: ({ url }) => {
915
- const ensureLinked = url.searchParams.get("ensureLinked") !== "false";
916
- return handleHomeBaseGet(ensureLinked);
917
- },
918
- },
919
-
920
- // Workspace files (IPC-style list/read -- distinct from workspace-routes.ts tree/file)
576
+ // Workspace files (list/read -- distinct from workspace-routes.ts tree/file)
921
577
  {
922
578
  endpoint: "workspace-files",
923
579
  method: "GET",
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Route handlers for skill management operations.
3
3
  *
4
- * These HTTP routes expose the same business logic as the IPC skill handlers,
4
+ * These HTTP routes expose the same business logic as the skill handlers,
5
5
  * using the standalone functions extracted in `../../daemon/handlers/skills.ts`.
6
6
  */
7
7
 
@@ -173,12 +173,13 @@ export function skillRouteDefinitions(deps: SkillRouteDeps): RouteDefinition[] {
173
173
  if (!body.sourceText || typeof body.sourceText !== "string") {
174
174
  return httpError("BAD_REQUEST", "sourceText is required", 400);
175
175
  }
176
- const result = await draftSkill(
177
- { sourceText: body.sourceText },
178
- ctx(),
179
- );
176
+ const result = await draftSkill({ sourceText: body.sourceText }, ctx());
180
177
  if (!result.success) {
181
- return httpError("INTERNAL_ERROR", result.error ?? "Draft failed", 500);
178
+ return httpError(
179
+ "INTERNAL_ERROR",
180
+ result.error ?? "Draft failed",
181
+ 500,
182
+ );
182
183
  }
183
184
  return Response.json(result);
184
185
  },
@@ -2,7 +2,7 @@
2
2
  * Route handlers for subagent operations.
3
3
  *
4
4
  * Exposes subagent detail, abort, and message operations over HTTP,
5
- * sharing business logic with the IPC handlers in
5
+ * sharing business logic with the handlers in
6
6
  * `daemon/handlers/subagents.ts`.
7
7
  */
8
8
  import { getMessages } from "../../memory/conversation-crud.js";
@@ -14,7 +14,7 @@ import type { RouteDefinition } from "../http-router.js";
14
14
  const log = getLogger("subagents-routes");
15
15
 
16
16
  // ---------------------------------------------------------------------------
17
- // Shared business logic (used by both IPC handlers and HTTP routes)
17
+ // Shared business logic (used by both message handlers and HTTP routes)
18
18
  // ---------------------------------------------------------------------------
19
19
 
20
20
  function isRecord(value: unknown): value is Record<string, unknown> {
@@ -167,7 +167,7 @@ export function subagentRouteDefinitions(): RouteDefinition[] {
167
167
  const manager = getSubagentManager();
168
168
  const aborted = manager.abort(
169
169
  params.id,
170
- () => {}, // No IPC send callback needed for HTTP
170
+ () => {}, // No send callback needed for HTTP
171
171
  sessionId,
172
172
  );
173
173
 
@@ -219,13 +219,7 @@ export function subagentRouteDefinitions(): RouteDefinition[] {
219
219
 
220
220
  const result = await manager.sendMessage(params.id, body.content);
221
221
 
222
- if (result === "queue_full") {
223
- return httpError(
224
- "CONFLICT",
225
- `Subagent "${params.id}" message queue is full. Please wait for current messages to be processed.`,
226
- 409,
227
- );
228
- } else if (result === "empty") {
222
+ if (result === "empty") {
229
223
  return httpError(
230
224
  "BAD_REQUEST",
231
225
  "Message content is empty or whitespace-only.",
@@ -62,11 +62,7 @@ export async function handleSurfaceAction(
62
62
  : findSessionBySurfaceId?.(surfaceId);
63
63
 
64
64
  if (!session) {
65
- return httpError(
66
- "NOT_FOUND",
67
- "No active session found",
68
- 404,
69
- );
65
+ return httpError("NOT_FOUND", "No active session found", 404);
70
66
  }
71
67
 
72
68
  try {
@@ -115,11 +111,7 @@ export async function handleSurfaceUndo(
115
111
  : findSessionBySurfaceId?.(surfaceId);
116
112
 
117
113
  if (!session) {
118
- return httpError(
119
- "NOT_FOUND",
120
- "No active session found",
121
- 404,
122
- );
114
+ return httpError("NOT_FOUND", "No active session found", 404);
123
115
  }
124
116
 
125
117
  if (!session.handleSurfaceUndo) {
@@ -132,10 +124,7 @@ export async function handleSurfaceUndo(
132
124
 
133
125
  try {
134
126
  session.handleSurfaceUndo(surfaceId);
135
- log.info(
136
- { sessionId, surfaceId },
137
- "Surface undo handled via HTTP",
138
- );
127
+ log.info({ sessionId, surfaceId }, "Surface undo handled via HTTP");
139
128
  return Response.json({ ok: true });
140
129
  } catch (err) {
141
130
  log.error(
@@ -5,7 +5,10 @@
5
5
  * session's in-memory surface state. Used by clients to re-hydrate surfaces
6
6
  * whose data was stripped during memory compaction.
7
7
  */
8
- import type { SurfaceData, SurfaceType } from "../../daemon/message-types/surfaces.js";
8
+ import type {
9
+ SurfaceData,
10
+ SurfaceType,
11
+ } from "../../daemon/message-types/surfaces.js";
9
12
  import { getLogger } from "../../util/logger.js";
10
13
  import { httpError } from "../http-errors.js";
11
14
  import type { RouteDefinition } from "../http-router.js";
@@ -53,12 +56,20 @@ export function surfaceContentRouteDefinitions(deps: {
53
56
 
54
57
  const sessionId = url.searchParams.get("sessionId");
55
58
  if (!sessionId) {
56
- return httpError("BAD_REQUEST", "sessionId query parameter is required", 400);
59
+ return httpError(
60
+ "BAD_REQUEST",
61
+ "sessionId query parameter is required",
62
+ 400,
63
+ );
57
64
  }
58
65
 
59
66
  const surfaceId = params.surfaceId;
60
67
  if (!surfaceId) {
61
- return httpError("BAD_REQUEST", "surfaceId path parameter is required", 400);
68
+ return httpError(
69
+ "BAD_REQUEST",
70
+ "surfaceId path parameter is required",
71
+ 400,
72
+ );
62
73
  }
63
74
 
64
75
  const session = deps.findSession(sessionId);
@@ -73,7 +84,10 @@ export function surfaceContentRouteDefinitions(deps: {
73
84
  // Look up the surface in the session's in-memory state.
74
85
  const stored = session.surfaceState.get(surfaceId);
75
86
  if (stored) {
76
- log.info({ sessionId, surfaceId }, "Surface content served from surfaceState");
87
+ log.info(
88
+ { sessionId, surfaceId },
89
+ "Surface content served from surfaceState",
90
+ );
77
91
  return Response.json({
78
92
  surfaceId,
79
93
  surfaceType: stored.surfaceType,
@@ -88,7 +102,10 @@ export function surfaceContentRouteDefinitions(deps: {
88
102
  (s) => s.surfaceId === surfaceId,
89
103
  );
90
104
  if (turnSurface) {
91
- log.info({ sessionId, surfaceId }, "Surface content served from currentTurnSurfaces");
105
+ log.info(
106
+ { sessionId, surfaceId },
107
+ "Surface content served from currentTurnSurfaces",
108
+ );
92
109
  return Response.json({
93
110
  surfaceId,
94
111
  surfaceType: turnSurface.surfaceType,
@@ -2,7 +2,7 @@
2
2
  * Route handlers for work item (task queue) operations.
3
3
  *
4
4
  * Exposes all work item CRUD and lifecycle operations over HTTP,
5
- * sharing business logic with the IPC handlers in
5
+ * sharing business logic with the handlers in
6
6
  * `daemon/handlers/work-items.ts`.
7
7
  */
8
8
  import type { ServerMessage } from "../../daemon/message-protocol.js";
@@ -195,7 +195,7 @@ function extractToolHighlights(
195
195
  }
196
196
 
197
197
  // ---------------------------------------------------------------------------
198
- // Shared business logic functions (exported for IPC handler reuse)
198
+ // Shared business logic functions (exported for handler reuse)
199
199
  // ---------------------------------------------------------------------------
200
200
 
201
201
  export interface WorkItemOutputResult {
@@ -283,8 +283,7 @@ export function getWorkItemOutput(id: string): WorkItemOutputResult {
283
283
  if (!summary && msgs.length > 0) {
284
284
  const toolHighlights = extractToolHighlights(msgs, 10);
285
285
  if (toolHighlights.length > 0) {
286
- summary =
287
- "Task completed. Tool outcomes:\n" + toolHighlights.join("\n");
286
+ summary = "Task completed. Tool outcomes:\n" + toolHighlights.join("\n");
288
287
  highlights = toolHighlights.slice(0, 5);
289
288
  }
290
289
  }
@@ -458,10 +457,7 @@ export function workItemRouteDefinitions(
458
457
  // Don't allow overwriting a cancelled status
459
458
  if (body.status !== undefined) {
460
459
  const existing = getWorkItem(params.id);
461
- if (
462
- existing?.status === "cancelled" &&
463
- body.status !== "cancelled"
464
- ) {
460
+ if (existing?.status === "cancelled" && body.status !== "cancelled") {
465
461
  return Response.json({ item: existing });
466
462
  }
467
463
  }
@@ -497,7 +493,11 @@ export function workItemRouteDefinitions(
497
493
  handler: ({ params }) => {
498
494
  const existing = getWorkItem(params.id);
499
495
  if (!existing) {
500
- return httpError("NOT_FOUND", `Work item not found: ${params.id}`, 404);
496
+ return httpError(
497
+ "NOT_FOUND",
498
+ `Work item not found: ${params.id}`,
499
+ 404,
500
+ );
501
501
  }
502
502
  if (existing.status !== "awaiting_review") {
503
503
  return httpError(
@@ -580,9 +580,16 @@ export function workItemRouteDefinitions(
580
580
  handler: async ({ req, params }) => {
581
581
  const body = (await req.json()) as { approvedTools?: string[] };
582
582
  if (!Array.isArray(body.approvedTools)) {
583
- return httpError("BAD_REQUEST", "approvedTools array is required", 400);
583
+ return httpError(
584
+ "BAD_REQUEST",
585
+ "approvedTools array is required",
586
+ 400,
587
+ );
584
588
  }
585
- const result = approveWorkItemPermissions(params.id, body.approvedTools);
589
+ const result = approveWorkItemPermissions(
590
+ params.id,
591
+ body.approvedTools,
592
+ );
586
593
  if (!result.success) {
587
594
  return httpError("NOT_FOUND", result.error!, 404);
588
595
  }
@@ -620,11 +627,7 @@ export function workItemRouteDefinitions(
620
627
  }
621
628
 
622
629
  if (workItem.status === "running") {
623
- return httpError(
624
- "CONFLICT",
625
- "Work item is already running",
626
- 409,
627
- );
630
+ return httpError("CONFLICT", "Work item is already running", 409);
628
631
  }
629
632
 
630
633
  const NON_RUNNABLE_STATUSES: readonly string[] = ["archived"];
@@ -755,10 +758,7 @@ export function workItemRouteDefinitions(
755
758
  if (session) {
756
759
  (session as { headlessLock: boolean }).headlessLock = false;
757
760
  }
758
- log.error(
759
- { err, workItemId },
760
- "work_item_run_task (HTTP) failed",
761
- );
761
+ log.error({ err, workItemId }, "work_item_run_task (HTTP) failed");
762
762
  updateWorkItem(workItemId, {
763
763
  status: "failed",
764
764
  lastRunStatus: "failed",
@@ -797,11 +797,7 @@ export function workItemRouteDefinitions(
797
797
  { err, workItemId: params.id },
798
798
  "GET /v1/work-items/:id/output failed",
799
799
  );
800
- return httpError(
801
- "INTERNAL_ERROR",
802
- "Failed to load task output",
803
- 500,
804
- );
800
+ return httpError("INTERNAL_ERROR", "Failed to load task output", 500);
805
801
  }
806
802
  },
807
803
  },
@@ -657,9 +657,9 @@ describe("POST /v1/workspace/rename", () => {
657
657
  const res = await handler(ctx);
658
658
  expect(res.status).toBe(200);
659
659
  expect(existsSync(srcDir)).toBe(false);
660
- expect(
661
- existsSync(join(testWorkspaceDir, "dir-renamed", "child.txt")),
662
- ).toBe(true);
660
+ expect(existsSync(join(testWorkspaceDir, "dir-renamed", "child.txt"))).toBe(
661
+ true,
662
+ );
663
663
  });
664
664
 
665
665
  test("rejects missing source with 404", async () => {
@@ -45,7 +45,7 @@ export function resolveWorkspacePath(relativePath: string): string | undefined {
45
45
  }
46
46
 
47
47
  let ancestor = resolved;
48
-
48
+
49
49
  while (true) {
50
50
  const parent = resolve(ancestor, "..");
51
51
  if (parent === ancestor) break; // reached filesystem root