@vellumai/assistant 0.3.4 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (506) hide show
  1. package/Dockerfile +2 -0
  2. package/README.md +88 -2
  3. package/eslint.config.mjs +31 -0
  4. package/package.json +1 -1
  5. package/scripts/ipc/check-swift-decoder-drift.ts +4 -1
  6. package/scripts/ipc/generate-swift.ts +31 -2
  7. package/src/__tests__/__snapshots__/ipc-snapshot.test.ts.snap +438 -1
  8. package/src/__tests__/approval-conversation-turn.test.ts +214 -0
  9. package/src/__tests__/approval-hardcoded-copy-guard.test.ts +41 -0
  10. package/src/__tests__/approval-message-composer.test.ts +253 -0
  11. package/src/__tests__/browser-manager.test.ts +1 -0
  12. package/src/__tests__/call-conversation-messages.test.ts +130 -0
  13. package/src/__tests__/call-domain.test.ts +12 -2
  14. package/src/__tests__/call-orchestrator.test.ts +799 -249
  15. package/src/__tests__/call-pointer-messages.test.ts +148 -0
  16. package/src/__tests__/call-recovery.test.ts +3 -0
  17. package/src/__tests__/call-routes-http.test.ts +32 -2
  18. package/src/__tests__/call-store.test.ts +3 -0
  19. package/src/__tests__/channel-approval-routes.test.ts +1277 -98
  20. package/src/__tests__/channel-approval.test.ts +37 -0
  21. package/src/__tests__/channel-approvals.test.ts +36 -50
  22. package/src/__tests__/channel-guardian.test.ts +630 -22
  23. package/src/__tests__/channel-readiness-service.test.ts +324 -0
  24. package/src/__tests__/checker.test.ts +14 -7
  25. package/src/__tests__/clarification-resolver.test.ts +44 -24
  26. package/src/__tests__/commit-message-enrichment-service.test.ts +9 -4
  27. package/src/__tests__/computer-use-session-working-dir.test.ts +8 -0
  28. package/src/__tests__/config-schema.test.ts +14 -8
  29. package/src/__tests__/context-window-manager.test.ts +30 -2
  30. package/src/__tests__/contradiction-checker.test.ts +20 -5
  31. package/src/__tests__/credential-security-invariants.test.ts +7 -2
  32. package/src/__tests__/daemon-lifecycle.test.ts +13 -12
  33. package/src/__tests__/db-migration-rollback.test.ts +752 -0
  34. package/src/__tests__/dictation-mode-detection.test.ts +63 -0
  35. package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +2 -0
  36. package/src/__tests__/entity-search.test.ts +615 -0
  37. package/src/__tests__/fuzzy-match-property.test.ts +5 -5
  38. package/src/__tests__/guardian-action-store.test.ts +123 -0
  39. package/src/__tests__/guardian-action-sweep.test.ts +277 -0
  40. package/src/__tests__/guardian-dispatch.test.ts +389 -0
  41. package/src/__tests__/guardian-question-copy.test.ts +47 -0
  42. package/src/__tests__/handlers-telegram-config.test.ts +4 -2
  43. package/src/__tests__/handlers-twilio-config.test.ts +533 -0
  44. package/src/__tests__/intent-routing.test.ts +2 -0
  45. package/src/__tests__/ipc-snapshot.test.ts +291 -1
  46. package/src/__tests__/memory-upsert-concurrency.test.ts +828 -0
  47. package/src/__tests__/messaging-send-tool.test.ts +65 -0
  48. package/src/__tests__/model-intents.test.ts +96 -0
  49. package/src/__tests__/no-direct-anthropic-sdk-imports.test.ts +42 -0
  50. package/src/__tests__/oauth2-gateway-transport.test.ts +130 -0
  51. package/src/__tests__/onboarding-starter-tasks.test.ts +2 -0
  52. package/src/__tests__/provider-commit-message-generator.test.ts +89 -13
  53. package/src/__tests__/provider-error-scenarios.test.ts +621 -0
  54. package/src/__tests__/provider-fail-open-selection.test.ts +119 -0
  55. package/src/__tests__/qdrant-manager.test.ts +27 -20
  56. package/src/__tests__/relay-server.test.ts +779 -40
  57. package/src/__tests__/run-orchestrator-assistant-events.test.ts +6 -0
  58. package/src/__tests__/run-orchestrator.test.ts +42 -4
  59. package/src/__tests__/runtime-runs-http.test.ts +17 -1
  60. package/src/__tests__/runtime-runs.test.ts +16 -0
  61. package/src/__tests__/schedule-store.test.ts +18 -4
  62. package/src/__tests__/scheduler-recurrence.test.ts +13 -4
  63. package/src/__tests__/session-abort-tool-results.test.ts +6 -0
  64. package/src/__tests__/session-agent-loop.test.ts +857 -0
  65. package/src/__tests__/session-conflict-gate.test.ts +6 -0
  66. package/src/__tests__/session-pre-run-repair.test.ts +6 -0
  67. package/src/__tests__/session-profile-injection.test.ts +6 -0
  68. package/src/__tests__/session-provider-retry-repair.test.ts +6 -0
  69. package/src/__tests__/session-queue.test.ts +6 -0
  70. package/src/__tests__/session-runtime-assembly.test.ts +321 -13
  71. package/src/__tests__/session-slash-known.test.ts +6 -0
  72. package/src/__tests__/session-slash-queue.test.ts +6 -0
  73. package/src/__tests__/session-slash-unknown.test.ts +6 -0
  74. package/src/__tests__/session-surfaces-task-progress.test.ts +2 -0
  75. package/src/__tests__/session-tool-setup-app-refresh.test.ts +1 -0
  76. package/src/__tests__/session-tool-setup-memory-scope.test.ts +1 -0
  77. package/src/__tests__/session-tool-setup-side-effect-flag.test.ts +1 -0
  78. package/src/__tests__/session-workspace-injection.test.ts +6 -0
  79. package/src/__tests__/session-workspace-tool-tracking.test.ts +6 -0
  80. package/src/__tests__/skills.test.ts +2 -0
  81. package/src/__tests__/sms-messaging-provider.test.ts +126 -0
  82. package/src/__tests__/starter-task-flow.test.ts +2 -0
  83. package/src/__tests__/swarm-dag-pathological.test.ts +535 -0
  84. package/src/__tests__/system-prompt.test.ts +2 -0
  85. package/src/__tests__/task-management-tools.test.ts +2 -2
  86. package/src/__tests__/task-runner.test.ts +14 -4
  87. package/src/__tests__/terminal-tools.test.ts +25 -19
  88. package/src/__tests__/tool-execution-abort-cleanup.test.ts +545 -0
  89. package/src/__tests__/tool-executor-shell-integration.test.ts +11 -11
  90. package/src/__tests__/tool-executor.test.ts +23 -24
  91. package/src/__tests__/trust-store.test.ts +3 -3
  92. package/src/__tests__/twilio-rest.test.ts +29 -0
  93. package/src/__tests__/twilio-routes-elevenlabs.test.ts +3 -0
  94. package/src/__tests__/twilio-routes-twiml.test.ts +11 -0
  95. package/src/__tests__/twilio-routes.test.ts +167 -11
  96. package/src/__tests__/twitter-cli-error-shaping.test.ts +2 -2
  97. package/src/__tests__/user-reference.test.ts +2 -0
  98. package/src/__tests__/voice-quality.test.ts +222 -0
  99. package/src/__tests__/web-search.test.ts +46 -30
  100. package/src/__tests__/work-item-output.test.ts +110 -0
  101. package/src/agent/loop.ts +1 -1
  102. package/src/agent-heartbeat/agent-heartbeat-service.ts +2 -10
  103. package/src/amazon/client.ts +1418 -0
  104. package/src/amazon/request-extractor.ts +135 -0
  105. package/src/amazon/session.ts +109 -0
  106. package/src/autonomy/autonomy-store.ts +5 -5
  107. package/src/browser-extension-relay/client.ts +124 -0
  108. package/src/browser-extension-relay/protocol.ts +63 -0
  109. package/src/browser-extension-relay/server.ts +177 -0
  110. package/src/bundler/app-bundler.ts +3 -3
  111. package/src/bundler/bundle-signer.ts +1 -1
  112. package/src/bundler/signature-verifier.ts +1 -1
  113. package/src/calls/call-conversation-messages.ts +33 -0
  114. package/src/calls/call-domain.ts +114 -10
  115. package/src/calls/call-orchestrator.ts +268 -59
  116. package/src/calls/call-pointer-messages.ts +53 -0
  117. package/src/calls/call-recovery.ts +3 -8
  118. package/src/calls/call-store.ts +69 -87
  119. package/src/calls/elevenlabs-config.ts +3 -2
  120. package/src/calls/guardian-action-sweep.ts +105 -0
  121. package/src/calls/guardian-dispatch.ts +203 -0
  122. package/src/calls/guardian-question-copy.ts +133 -0
  123. package/src/calls/relay-server.ts +466 -8
  124. package/src/calls/speaker-identification.ts +1 -1
  125. package/src/calls/twilio-config.ts +22 -14
  126. package/src/calls/twilio-provider.ts +6 -4
  127. package/src/calls/twilio-rest.ts +308 -7
  128. package/src/calls/twilio-routes.ts +65 -12
  129. package/src/calls/types.ts +3 -1
  130. package/src/channels/types.ts +25 -0
  131. package/src/cli/amazon.ts +815 -0
  132. package/src/cli/config-commands.ts +2 -2
  133. package/src/cli/core-commands.ts +4 -3
  134. package/src/cli/influencer.ts +244 -0
  135. package/src/cli/map.ts +89 -6
  136. package/src/cli.ts +1 -1
  137. package/src/config/agent-schema.ts +171 -0
  138. package/src/config/bundled-skills/amazon/SKILL.md +127 -0
  139. package/src/config/bundled-skills/amazon/icon.svg +13 -0
  140. package/src/config/bundled-skills/api-mapping/SKILL.md +78 -0
  141. package/src/config/bundled-skills/browser/SKILL.md +1 -0
  142. package/src/config/bundled-skills/browser/TOOLS.json +17 -0
  143. package/src/config/bundled-skills/browser/tools/browser-wait-for-download.ts +25 -0
  144. package/src/config/bundled-skills/doordash/SKILL.md +51 -51
  145. package/src/config/bundled-skills/email-setup/SKILL.md +14 -5
  146. package/src/config/bundled-skills/google-oauth-setup/SKILL.md +183 -0
  147. package/src/config/bundled-skills/influencer/SKILL.md +144 -0
  148. package/src/config/bundled-skills/knowledge-graph/SKILL.md +15 -0
  149. package/src/config/bundled-skills/knowledge-graph/TOOLS.json +56 -0
  150. package/src/config/bundled-skills/knowledge-graph/tools/graph-query.ts +185 -0
  151. package/src/config/bundled-skills/macos-automation/icon.svg +12 -0
  152. package/src/config/bundled-skills/media-processing/SKILL.md +176 -0
  153. package/src/config/bundled-skills/media-processing/TOOLS.json +230 -0
  154. package/src/config/bundled-skills/media-processing/__tests__/concurrency-pool.test.ts +77 -0
  155. package/src/config/bundled-skills/media-processing/__tests__/cost-tracker.test.ts +69 -0
  156. package/src/config/bundled-skills/media-processing/__tests__/preprocess.test.ts +303 -0
  157. package/src/config/bundled-skills/media-processing/services/concurrency-pool.ts +55 -0
  158. package/src/config/bundled-skills/media-processing/services/cost-tracker.ts +86 -0
  159. package/src/config/bundled-skills/media-processing/services/gemini-map.ts +339 -0
  160. package/src/config/bundled-skills/media-processing/services/preprocess.ts +551 -0
  161. package/src/config/bundled-skills/media-processing/services/processing-pipeline.ts +259 -0
  162. package/src/config/bundled-skills/media-processing/services/reduce.ts +197 -0
  163. package/src/config/bundled-skills/media-processing/tools/analyze-keyframes.ts +136 -0
  164. package/src/config/bundled-skills/media-processing/tools/extract-keyframes.ts +59 -0
  165. package/src/config/bundled-skills/media-processing/tools/generate-clip.ts +195 -0
  166. package/src/config/bundled-skills/media-processing/tools/ingest-media.ts +197 -0
  167. package/src/config/bundled-skills/media-processing/tools/media-diagnostics.ts +143 -0
  168. package/src/config/bundled-skills/media-processing/tools/media-status.ts +75 -0
  169. package/src/config/bundled-skills/media-processing/tools/query-media-events.ts +65 -0
  170. package/src/config/bundled-skills/messaging/SKILL.md +33 -8
  171. package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +4 -7
  172. package/src/config/bundled-skills/messaging/tools/messaging-reply.ts +2 -1
  173. package/src/config/bundled-skills/messaging/tools/messaging-send.ts +5 -1
  174. package/src/config/bundled-skills/phone-calls/SKILL.md +88 -23
  175. package/src/config/bundled-skills/twitter/SKILL.md +19 -3
  176. package/src/config/bundled-skills/twitter/icon.svg +14 -0
  177. package/src/config/bundled-tool-registry.ts +310 -0
  178. package/src/config/calls-schema.ts +181 -0
  179. package/src/config/core-schema.ts +309 -0
  180. package/src/config/defaults.ts +28 -3
  181. package/src/config/env-registry.ts +162 -0
  182. package/src/config/env.ts +175 -0
  183. package/src/config/loader.ts +6 -6
  184. package/src/config/memory-schema.ts +528 -0
  185. package/src/config/sandbox-schema.ts +55 -0
  186. package/src/config/schema.ts +158 -1133
  187. package/src/config/skill-state.ts +1 -1
  188. package/src/config/skills-schema.ts +32 -0
  189. package/src/config/skills.ts +35 -24
  190. package/src/config/system-prompt.ts +131 -56
  191. package/src/config/templates/IDENTITY.md +2 -2
  192. package/src/config/templates/SOUL.md +1 -1
  193. package/src/config/types.ts +1 -0
  194. package/src/config/user-reference.ts +4 -9
  195. package/src/config/vellum-skills/catalog.json +6 -7
  196. package/src/config/vellum-skills/chatgpt-import/tools/chatgpt-import.ts +5 -1
  197. package/src/config/vellum-skills/slack-oauth-setup/SKILL.md +4 -3
  198. package/src/config/vellum-skills/sms-setup/SKILL.md +216 -0
  199. package/src/config/vellum-skills/twilio-setup/SKILL.md +40 -8
  200. package/src/context/window-manager.ts +27 -7
  201. package/src/daemon/approval-generators.ts +186 -0
  202. package/src/daemon/approved-devices-store.ts +140 -0
  203. package/src/daemon/assistant-attachments.ts +1 -1
  204. package/src/daemon/classifier.ts +35 -32
  205. package/src/daemon/config-watcher.ts +1 -1
  206. package/src/daemon/daemon-control.ts +217 -0
  207. package/src/daemon/handlers/apps.ts +2 -3
  208. package/src/daemon/handlers/config-channels.ts +158 -0
  209. package/src/daemon/handlers/config-inbox.ts +540 -0
  210. package/src/daemon/handlers/config-ingress.ts +231 -0
  211. package/src/daemon/handlers/config-integrations.ts +258 -0
  212. package/src/daemon/handlers/config-model.ts +143 -0
  213. package/src/daemon/handlers/config-parental.ts +163 -0
  214. package/src/daemon/handlers/config-scheduling.ts +172 -0
  215. package/src/daemon/handlers/config-slack.ts +92 -0
  216. package/src/daemon/handlers/config-telegram.ts +301 -0
  217. package/src/daemon/handlers/config-tools.ts +177 -0
  218. package/src/daemon/handlers/config-trust.ts +104 -0
  219. package/src/daemon/handlers/config-twilio.ts +1080 -0
  220. package/src/daemon/handlers/config.ts +53 -1689
  221. package/src/daemon/handlers/diagnostics.ts +1 -1
  222. package/src/daemon/handlers/dictation.ts +180 -0
  223. package/src/daemon/handlers/documents.ts +18 -32
  224. package/src/daemon/handlers/identity.ts +14 -23
  225. package/src/daemon/handlers/index.ts +11 -0
  226. package/src/daemon/handlers/misc.ts +3 -5
  227. package/src/daemon/handlers/pairing.ts +98 -0
  228. package/src/daemon/handlers/sessions.ts +56 -5
  229. package/src/daemon/handlers/shared.ts +6 -1
  230. package/src/daemon/handlers/skills.ts +1 -1
  231. package/src/daemon/handlers/twitter-auth.ts +2 -0
  232. package/src/daemon/handlers/work-items.ts +17 -9
  233. package/src/daemon/handlers/workspace-files.ts +4 -3
  234. package/src/daemon/install-cli-launchers.ts +113 -0
  235. package/src/daemon/ipc-contract/apps.ts +356 -0
  236. package/src/daemon/ipc-contract/browser.ts +74 -0
  237. package/src/daemon/ipc-contract/computer-use.ts +151 -0
  238. package/src/daemon/ipc-contract/diagnostics.ts +56 -0
  239. package/src/daemon/ipc-contract/documents.ts +74 -0
  240. package/src/daemon/ipc-contract/inbox.ts +209 -0
  241. package/src/daemon/ipc-contract/integrations.ts +284 -0
  242. package/src/daemon/ipc-contract/memory.ts +48 -0
  243. package/src/daemon/ipc-contract/messages.ts +211 -0
  244. package/src/daemon/ipc-contract/pairing.ts +45 -0
  245. package/src/daemon/ipc-contract/parental-control.ts +95 -0
  246. package/src/daemon/ipc-contract/schedules.ts +97 -0
  247. package/src/daemon/ipc-contract/sessions.ts +315 -0
  248. package/src/daemon/ipc-contract/shared.ts +42 -0
  249. package/src/daemon/ipc-contract/skills.ts +120 -0
  250. package/src/daemon/ipc-contract/subagents.ts +58 -0
  251. package/src/daemon/ipc-contract/surfaces.ts +250 -0
  252. package/src/daemon/ipc-contract/trust.ts +60 -0
  253. package/src/daemon/ipc-contract/work-items.ts +225 -0
  254. package/src/daemon/ipc-contract/workspace.ts +113 -0
  255. package/src/daemon/ipc-contract-inventory.json +70 -0
  256. package/src/daemon/ipc-contract-inventory.ts +55 -29
  257. package/src/daemon/ipc-contract.ts +229 -2426
  258. package/src/daemon/ipc-protocol.ts +1 -1
  259. package/src/daemon/ipc-validate.ts +7 -0
  260. package/src/daemon/lifecycle.ts +97 -377
  261. package/src/daemon/pairing-store.ts +177 -0
  262. package/src/daemon/providers-setup.ts +43 -0
  263. package/src/daemon/ride-shotgun-handler.ts +68 -3
  264. package/src/daemon/server.ts +66 -46
  265. package/src/daemon/session-agent-loop-handlers.ts +421 -0
  266. package/src/daemon/session-agent-loop.ts +117 -275
  267. package/src/daemon/session-dynamic-profile.ts +1 -1
  268. package/src/daemon/session-history.ts +1 -1
  269. package/src/daemon/session-media-retry.ts +1 -1
  270. package/src/daemon/session-messaging.ts +37 -2
  271. package/src/daemon/session-notifiers.ts +5 -25
  272. package/src/daemon/session-process.ts +99 -59
  273. package/src/daemon/session-queue-manager.ts +96 -4
  274. package/src/daemon/session-runtime-assembly.ts +199 -10
  275. package/src/daemon/session-surfaces.ts +19 -4
  276. package/src/daemon/session-tool-setup.ts +30 -30
  277. package/src/daemon/session-workspace.ts +1 -1
  278. package/src/daemon/session.ts +35 -2
  279. package/src/daemon/shutdown-handlers.ts +122 -0
  280. package/src/daemon/trace-emitter.ts +1 -1
  281. package/src/daemon/watch-handler.ts +36 -33
  282. package/src/doordash/cart-queries.ts +787 -0
  283. package/src/doordash/client.ts +144 -127
  284. package/src/doordash/order-queries.ts +85 -0
  285. package/src/doordash/queries.ts +10 -1308
  286. package/src/doordash/search-queries.ts +203 -0
  287. package/src/doordash/session.ts +3 -2
  288. package/src/doordash/store-queries.ts +246 -0
  289. package/src/doordash/types.ts +367 -0
  290. package/src/email/providers/agentmail.ts +2 -1
  291. package/src/email/providers/index.ts +3 -2
  292. package/src/email/service.ts +3 -2
  293. package/src/errors.ts +43 -0
  294. package/src/home-base/prebuilt/seed.ts +1 -1
  295. package/src/hooks/cli.ts +6 -5
  296. package/src/hooks/config.ts +6 -8
  297. package/src/hooks/discovery.ts +6 -5
  298. package/src/hooks/manager.ts +4 -3
  299. package/src/hooks/runner.ts +2 -2
  300. package/src/hooks/templates.ts +5 -5
  301. package/src/inbound/public-ingress-urls.ts +6 -4
  302. package/src/index.ts +4 -2
  303. package/src/influencer/client.ts +1104 -0
  304. package/src/instrument.ts +4 -3
  305. package/src/logfire.ts +4 -3
  306. package/src/memory/admin.ts +25 -35
  307. package/src/memory/attachments-store.ts +4 -7
  308. package/src/memory/channel-delivery-store.ts +30 -1
  309. package/src/memory/channel-guardian-store.ts +202 -2
  310. package/src/memory/clarification-resolver.ts +37 -33
  311. package/src/memory/conflict-store.ts +67 -61
  312. package/src/memory/contradiction-checker.ts +141 -117
  313. package/src/memory/conversation-store.ts +335 -51
  314. package/src/memory/db-connection.ts +27 -4
  315. package/src/memory/db-init.ts +265 -4
  316. package/src/memory/db.ts +14 -1
  317. package/src/memory/embedding-backend.ts +27 -5
  318. package/src/memory/embedding-ollama.ts +2 -1
  319. package/src/memory/entity-extractor.ts +38 -35
  320. package/src/memory/guardian-action-store.ts +430 -0
  321. package/src/memory/inbox-escalation-projection.ts +59 -0
  322. package/src/memory/inbox-thread-store.ts +218 -0
  323. package/src/memory/ingress-invite-store.ts +338 -0
  324. package/src/memory/ingress-member-store.ts +350 -0
  325. package/src/memory/items-extractor.ts +91 -97
  326. package/src/memory/job-handlers/index-maintenance.ts +3 -3
  327. package/src/memory/job-handlers/media-processing.ts +69 -0
  328. package/src/memory/job-handlers/summarization.ts +32 -26
  329. package/src/memory/job-utils.ts +3 -10
  330. package/src/memory/jobs-store.ts +8 -10
  331. package/src/memory/jobs-worker.ts +55 -36
  332. package/src/memory/media-store.ts +759 -0
  333. package/src/memory/migrations/001-job-deferrals.ts +45 -0
  334. package/src/memory/migrations/002-tool-invocations-fk.ts +43 -0
  335. package/src/memory/migrations/003-memory-fts-backfill.ts +24 -0
  336. package/src/memory/migrations/004-entity-relation-dedup.ts +87 -0
  337. package/src/memory/migrations/005-fingerprint-scope-unique.ts +80 -0
  338. package/src/memory/migrations/006-scope-salted-fingerprints.ts +62 -0
  339. package/src/memory/migrations/007-assistant-id-to-self.ts +254 -0
  340. package/src/memory/migrations/008-remove-assistant-id-columns.ts +208 -0
  341. package/src/memory/migrations/009-llm-usage-events-drop-assistant-id.ts +83 -0
  342. package/src/memory/migrations/010-ext-conv-bindings-channel-chat-unique.ts +56 -0
  343. package/src/memory/migrations/011-call-sessions-provider-sid-dedup.ts +63 -0
  344. package/src/memory/migrations/012-call-sessions-add-initiated-from.ts +19 -0
  345. package/src/memory/migrations/013-guardian-action-tables.ts +68 -0
  346. package/src/memory/migrations/014-backfill-inbox-thread-state.ts +76 -0
  347. package/src/memory/migrations/015-drop-active-search-index.ts +27 -0
  348. package/src/memory/migrations/016-memory-segments-indexes.ts +11 -0
  349. package/src/memory/migrations/017-memory-items-indexes.ts +10 -0
  350. package/src/memory/migrations/018-remaining-table-indexes.ts +13 -0
  351. package/src/memory/migrations/index.ts +24 -0
  352. package/src/memory/migrations/registry.ts +79 -0
  353. package/src/memory/migrations/validate-migration-state.ts +69 -0
  354. package/src/memory/qdrant-manager.ts +49 -8
  355. package/src/memory/query-builder.ts +1 -1
  356. package/src/memory/raw-query.ts +119 -0
  357. package/src/memory/recall-cache.ts +4 -1
  358. package/src/memory/retriever.ts +165 -47
  359. package/src/memory/schema-migration.ts +25 -984
  360. package/src/memory/schema.ts +228 -7
  361. package/src/memory/search/entity.ts +205 -31
  362. package/src/memory/search/lexical.ts +81 -52
  363. package/src/memory/search/ranking.ts +27 -23
  364. package/src/memory/search/semantic.ts +157 -19
  365. package/src/memory/search/types.ts +24 -0
  366. package/src/memory/shared-app-links-store.ts +4 -5
  367. package/src/memory/validation.ts +19 -0
  368. package/src/messaging/draft-store.ts +5 -6
  369. package/src/messaging/provider-types.ts +2 -0
  370. package/src/messaging/providers/sms/adapter.ts +201 -0
  371. package/src/messaging/providers/sms/client.ts +93 -0
  372. package/src/messaging/providers/sms/types.ts +7 -0
  373. package/src/messaging/providers/telegram-bot/adapter.ts +2 -5
  374. package/src/messaging/providers/whatsapp/adapter.ts +136 -0
  375. package/src/messaging/providers/whatsapp/client.ts +67 -0
  376. package/src/messaging/style-analyzer.ts +5 -4
  377. package/src/messaging/thread-summarizer.ts +61 -69
  378. package/src/messaging/triage-engine.ts +62 -71
  379. package/src/migrations/config-merge.ts +53 -0
  380. package/src/migrations/data-layout.ts +68 -0
  381. package/src/migrations/data-merge.ts +33 -0
  382. package/src/migrations/hooks-merge.ts +90 -0
  383. package/src/migrations/index.ts +6 -0
  384. package/src/migrations/log.ts +23 -0
  385. package/src/migrations/skills-merge.ts +33 -0
  386. package/src/migrations/workspace-layout.ts +79 -0
  387. package/src/permissions/checker.ts +133 -11
  388. package/src/permissions/prompter.ts +14 -0
  389. package/src/permissions/shell-identity.ts +31 -1
  390. package/src/permissions/trust-store.ts +21 -1
  391. package/src/providers/anthropic/client.ts +4 -4
  392. package/src/providers/failover.ts +2 -2
  393. package/src/providers/model-intents.ts +70 -0
  394. package/src/providers/ollama/client.ts +2 -1
  395. package/src/providers/provider-send-message.ts +176 -0
  396. package/src/providers/registry.ts +71 -30
  397. package/src/providers/retry.ts +35 -1
  398. package/src/providers/types.ts +12 -1
  399. package/src/runtime/approval-conversation-turn.ts +97 -0
  400. package/src/runtime/approval-message-composer.ts +253 -0
  401. package/src/runtime/channel-approval-parser.ts +36 -2
  402. package/src/runtime/channel-approvals.ts +11 -24
  403. package/src/runtime/channel-guardian-service.ts +88 -21
  404. package/src/runtime/channel-readiness-service.ts +418 -0
  405. package/src/runtime/channel-readiness-types.ts +35 -0
  406. package/src/runtime/channel-retry-sweep.ts +184 -0
  407. package/src/runtime/guardian-context-resolver.ts +108 -0
  408. package/src/runtime/http-server.ts +275 -717
  409. package/src/runtime/http-types.ts +59 -3
  410. package/src/runtime/middleware/auth.ts +116 -0
  411. package/src/runtime/middleware/error-handler.ts +33 -0
  412. package/src/runtime/middleware/twilio-validation.ts +127 -0
  413. package/src/runtime/routes/app-routes.ts +1 -1
  414. package/src/runtime/routes/call-routes.ts +51 -7
  415. package/src/runtime/routes/channel-delivery-routes.ts +170 -0
  416. package/src/runtime/routes/channel-guardian-routes.ts +1191 -0
  417. package/src/runtime/routes/channel-inbound-routes.ts +1152 -0
  418. package/src/runtime/routes/channel-route-shared.ts +144 -0
  419. package/src/runtime/routes/channel-routes.ts +32 -1588
  420. package/src/runtime/routes/conversation-routes.ts +50 -7
  421. package/src/runtime/routes/events-routes.ts +2 -2
  422. package/src/runtime/routes/identity-routes.ts +126 -0
  423. package/src/runtime/routes/pairing-routes.ts +143 -0
  424. package/src/runtime/routes/run-routes.ts +15 -1
  425. package/src/runtime/run-orchestrator.ts +86 -35
  426. package/src/schedule/schedule-store.ts +36 -32
  427. package/src/schedule/scheduler.ts +3 -3
  428. package/src/security/encrypted-store.ts +5 -7
  429. package/src/security/oauth2.ts +45 -15
  430. package/src/security/parental-control-store.ts +183 -0
  431. package/src/security/secret-allowlist.ts +4 -3
  432. package/src/security/secret-scanner.ts +5 -5
  433. package/src/security/secure-keys.ts +1 -1
  434. package/src/security/token-manager.ts +3 -2
  435. package/src/services/vercel-deploy.ts +6 -2
  436. package/src/skills/tool-manifest.ts +3 -3
  437. package/src/skills/vellum-catalog-remote.ts +75 -16
  438. package/src/slack/slack-webhook.ts +2 -1
  439. package/src/swarm/orchestrator.ts +92 -1
  440. package/src/swarm/router-planner.ts +6 -9
  441. package/src/swarm/worker-prompts.ts +9 -12
  442. package/src/tasks/task-compiler.ts +19 -28
  443. package/src/tasks/task-runner.ts +1 -1
  444. package/src/tools/assets/materialize.ts +2 -2
  445. package/src/tools/assets/search.ts +15 -14
  446. package/src/tools/browser/__tests__/auth-detector.test.ts +1 -0
  447. package/src/tools/browser/auto-navigate.ts +1 -0
  448. package/src/tools/browser/browser-execution.ts +10 -1
  449. package/src/tools/browser/browser-manager.ts +119 -4
  450. package/src/tools/browser/network-recorder.ts +5 -0
  451. package/src/tools/calls/call-start.ts +1 -0
  452. package/src/tools/credentials/broker.ts +11 -2
  453. package/src/tools/credentials/metadata-store.ts +18 -14
  454. package/src/tools/credentials/post-connect-hooks.ts +61 -0
  455. package/src/tools/credentials/vault.ts +49 -23
  456. package/src/tools/execution-target.ts +11 -1
  457. package/src/tools/executor.ts +68 -9
  458. package/src/tools/host-terminal/cli-discover.ts +1 -1
  459. package/src/tools/network/script-proxy/http-forwarder.ts +1 -1
  460. package/src/tools/network/script-proxy/mitm-handler.ts +1 -1
  461. package/src/tools/network/script-proxy/server.ts +1 -1
  462. package/src/tools/network/script-proxy/session-manager.ts +6 -5
  463. package/src/tools/network/web-fetch.ts +18 -2
  464. package/src/tools/network/web-search.ts +8 -4
  465. package/src/tools/reminder/reminder-store.ts +14 -15
  466. package/src/tools/schedule/create.ts +1 -0
  467. package/src/tools/schedule/list.ts +2 -1
  468. package/src/tools/shared/filesystem/file-ops-service.ts +5 -7
  469. package/src/tools/skills/skill-script-runner.ts +24 -9
  470. package/src/tools/skills/skill-tool-factory.ts +1 -0
  471. package/src/tools/tasks/work-item-enqueue.ts +2 -2
  472. package/src/tools/terminal/evaluate-typescript.ts +21 -12
  473. package/src/tools/terminal/parser.ts +50 -0
  474. package/src/tools/types.ts +2 -0
  475. package/src/tools/watcher/delete.ts +6 -0
  476. package/src/tools/weather/service.ts +1 -1
  477. package/src/twitter/client.ts +190 -24
  478. package/src/twitter/router.ts +1 -1
  479. package/src/twitter/session.ts +4 -3
  480. package/src/util/clipboard.ts +1 -1
  481. package/src/util/errors.ts +65 -8
  482. package/src/util/fs.ts +40 -0
  483. package/src/util/json.ts +10 -0
  484. package/src/util/log-redact.ts +189 -0
  485. package/src/util/logger.ts +19 -17
  486. package/src/util/object.ts +3 -0
  487. package/src/util/platform.ts +105 -363
  488. package/src/util/pricing.ts +1 -1
  489. package/src/util/promise-guard.ts +1 -1
  490. package/src/util/retry.ts +19 -0
  491. package/src/util/row-mapper.ts +79 -0
  492. package/src/util/silently.ts +21 -0
  493. package/src/watcher/engine.ts +5 -1
  494. package/src/watcher/provider-types.ts +20 -0
  495. package/src/watcher/providers/github.ts +156 -0
  496. package/src/watcher/providers/gmail.ts +1 -0
  497. package/src/watcher/providers/google-calendar.ts +1 -0
  498. package/src/watcher/providers/linear.ts +460 -0
  499. package/src/watcher/providers/slack.ts +1 -0
  500. package/src/work-items/work-item-runner.ts +1 -1
  501. package/src/workspace/git-service.ts +1 -1
  502. package/src/workspace/provider-commit-message-generator.ts +51 -22
  503. package/src/__tests__/call-bridge.test.ts +0 -517
  504. package/src/__tests__/session-process-bridge.test.ts +0 -244
  505. package/src/calls/call-bridge.ts +0 -168
  506. package/src/config/vellum-skills/google-oauth-setup/SKILL.md +0 -199
@@ -0,0 +1,284 @@
1
+ // External service integrations: Slack, Telegram, Twilio, Twitter, Vercel, ingress, channel readiness, guardian.
2
+
3
+ import type { ChannelId } from '../../channels/types.js';
4
+
5
+ // === Client → Server ===
6
+
7
+ export interface SlackWebhookConfigRequest {
8
+ type: 'slack_webhook_config';
9
+ action: 'get' | 'set';
10
+ webhookUrl?: string;
11
+ }
12
+
13
+ export interface IngressConfigRequest {
14
+ type: 'ingress_config';
15
+ action: 'get' | 'set';
16
+ publicBaseUrl?: string;
17
+ enabled?: boolean;
18
+ }
19
+
20
+ export interface VercelApiConfigRequest {
21
+ type: 'vercel_api_config';
22
+ action: 'get' | 'set' | 'delete';
23
+ apiToken?: string;
24
+ }
25
+
26
+ export interface TwitterIntegrationConfigRequest {
27
+ type: 'twitter_integration_config';
28
+ action: 'get' | 'set_mode' | 'set_local_client' | 'clear_local_client' | 'disconnect' | 'get_strategy' | 'set_strategy';
29
+ mode?: 'local_byo' | 'managed';
30
+ clientId?: string;
31
+ clientSecret?: string;
32
+ strategy?: string;
33
+ }
34
+
35
+ export interface TelegramConfigRequest {
36
+ type: 'telegram_config';
37
+ action: 'get' | 'set' | 'clear' | 'set_commands';
38
+ botToken?: string; // Only for action: 'set'
39
+ commands?: Array<{ command: string; description: string }>; // Only for action: 'set_commands'
40
+ }
41
+
42
+ export interface TwilioConfigRequest {
43
+ type: 'twilio_config';
44
+ action: 'get' | 'set_credentials' | 'clear_credentials' | 'provision_number' | 'assign_number' | 'list_numbers'
45
+ | 'sms_compliance_status' | 'sms_submit_tollfree_verification' | 'sms_update_tollfree_verification'
46
+ | 'sms_delete_tollfree_verification' | 'release_number' | 'sms_send_test' | 'sms_doctor';
47
+ accountSid?: string; // Only for action: 'set_credentials'
48
+ authToken?: string; // Only for action: 'set_credentials'
49
+ phoneNumber?: string; // Only for action: 'assign_number' or 'sms_send_test'
50
+ areaCode?: string; // Only for action: 'provision_number'
51
+ country?: string; // Only for action: 'provision_number' (ISO 3166-1 alpha-2, default 'US')
52
+ assistantId?: string; // Scope number assignment/lookup to a specific assistant
53
+ verificationSid?: string; // Only for update/delete verification actions
54
+ verificationParams?: {
55
+ tollfreePhoneNumberSid?: string;
56
+ businessName?: string;
57
+ businessWebsite?: string;
58
+ notificationEmail?: string;
59
+ useCaseCategories?: string[];
60
+ useCaseSummary?: string;
61
+ productionMessageSample?: string;
62
+ optInImageUrls?: string[];
63
+ optInType?: string;
64
+ messageVolume?: string;
65
+ businessType?: string;
66
+ customerProfileSid?: string;
67
+ };
68
+ text?: string; // Only for action: 'sms_send_test' (default: "Test SMS from your Vellum assistant")
69
+ }
70
+
71
+ export interface ChannelReadinessRequest {
72
+ type: 'channel_readiness';
73
+ action: 'get' | 'refresh';
74
+ channel?: ChannelId;
75
+ assistantId?: string;
76
+ includeRemote?: boolean;
77
+ }
78
+
79
+ export interface GuardianVerificationRequest {
80
+ type: 'guardian_verification';
81
+ action: 'create_challenge' | 'status' | 'revoke';
82
+ channel?: ChannelId; // Defaults to 'telegram'
83
+ sessionId?: string;
84
+ assistantId?: string; // Defaults to 'self'
85
+ }
86
+
87
+ export interface TwitterAuthStartRequest {
88
+ type: 'twitter_auth_start';
89
+ }
90
+
91
+ export interface TwitterAuthStatusRequest {
92
+ type: 'twitter_auth_status';
93
+ }
94
+
95
+ export interface IntegrationListRequest {
96
+ type: 'integration_list';
97
+ }
98
+
99
+ export interface IntegrationConnectRequest {
100
+ type: 'integration_connect';
101
+ integrationId: string;
102
+ }
103
+
104
+ export interface IntegrationDisconnectRequest {
105
+ type: 'integration_disconnect';
106
+ integrationId: string;
107
+ }
108
+
109
+ export interface LinkOpenRequest {
110
+ type: 'link_open_request';
111
+ url: string;
112
+ metadata?: Record<string, unknown>;
113
+ }
114
+
115
+ // === Server → Client ===
116
+
117
+ export interface SlackWebhookConfigResponse {
118
+ type: 'slack_webhook_config_response';
119
+ webhookUrl?: string;
120
+ success: boolean;
121
+ error?: string;
122
+ }
123
+
124
+ export interface IngressConfigResponse {
125
+ type: 'ingress_config_response';
126
+ enabled: boolean;
127
+ publicBaseUrl: string;
128
+ /** Read-only gateway target computed from GATEWAY_PORT env var (default 7830) + loopback host. */
129
+ localGatewayTarget: string;
130
+ success: boolean;
131
+ error?: string;
132
+ }
133
+
134
+ export interface VercelApiConfigResponse {
135
+ type: 'vercel_api_config_response';
136
+ hasToken: boolean;
137
+ success: boolean;
138
+ error?: string;
139
+ }
140
+
141
+ export interface TwitterIntegrationConfigResponse {
142
+ type: 'twitter_integration_config_response';
143
+ success: boolean;
144
+ mode?: 'local_byo' | 'managed';
145
+ managedAvailable: boolean;
146
+ localClientConfigured: boolean;
147
+ connected: boolean;
148
+ accountInfo?: string;
149
+ strategy?: 'oauth' | 'browser' | 'auto';
150
+ /** Whether the user has explicitly set a strategy (vs. relying on the default 'auto'). */
151
+ strategyConfigured?: boolean;
152
+ error?: string;
153
+ }
154
+
155
+ export interface TelegramConfigResponse {
156
+ type: 'telegram_config_response';
157
+ success: boolean;
158
+ hasBotToken: boolean;
159
+ botUsername?: string;
160
+ connected: boolean;
161
+ hasWebhookSecret: boolean;
162
+ lastError?: string;
163
+ error?: string;
164
+ }
165
+
166
+ export interface TwilioConfigResponse {
167
+ type: 'twilio_config_response';
168
+ success: boolean;
169
+ hasCredentials: boolean;
170
+ phoneNumber?: string;
171
+ numbers?: Array<{ phoneNumber: string; friendlyName: string; capabilities: { voice: boolean; sms: boolean } }>;
172
+ error?: string;
173
+ /** Non-fatal warning message (e.g. webhook sync failure that did not prevent the primary operation). */
174
+ warning?: string;
175
+ compliance?: {
176
+ numberType?: string;
177
+ verificationSid?: string;
178
+ verificationStatus?: string;
179
+ rejectionReason?: string;
180
+ rejectionReasons?: string[];
181
+ errorCode?: string;
182
+ editAllowed?: boolean;
183
+ editExpiration?: string;
184
+ };
185
+ /** Present when action is 'sms_send_test'. */
186
+ testResult?: {
187
+ messageSid: string;
188
+ to: string;
189
+ initialStatus: string;
190
+ finalStatus: string;
191
+ errorCode?: string;
192
+ errorMessage?: string;
193
+ };
194
+ /** Present when action is 'sms_doctor'. */
195
+ diagnostics?: {
196
+ readiness: { ready: boolean; issues: string[] };
197
+ compliance: { status: string; detail?: string; remediation?: string };
198
+ lastSend?: { status: string; errorCode?: string; remediation?: string };
199
+ overallStatus: 'healthy' | 'degraded' | 'broken';
200
+ actionItems: string[];
201
+ };
202
+ }
203
+
204
+ export interface ChannelReadinessResponse {
205
+ type: 'channel_readiness_response';
206
+ success: boolean;
207
+ snapshots?: Array<{
208
+ channel: ChannelId;
209
+ ready: boolean;
210
+ checkedAt: number;
211
+ stale: boolean;
212
+ reasons: Array<{ code: string; text: string }>;
213
+ localChecks: Array<{ name: string; passed: boolean; message: string }>;
214
+ remoteChecks?: Array<{ name: string; passed: boolean; message: string }>;
215
+ }>;
216
+ error?: string;
217
+ }
218
+
219
+ export interface GuardianVerificationResponse {
220
+ type: 'guardian_verification_response';
221
+ success: boolean;
222
+ secret?: string;
223
+ instruction?: string;
224
+ /** Present when action is 'status'. */
225
+ bound?: boolean;
226
+ guardianExternalUserId?: string;
227
+ /** The channel this status pertains to (e.g. "telegram", "sms"). Present when action is 'status'. */
228
+ channel?: ChannelId;
229
+ /** The assistant ID scoped to this status. Present when action is 'status'. */
230
+ assistantId?: string;
231
+ /** The delivery chat ID for the guardian (e.g. Telegram chat ID). Present when action is 'status' and bound is true. */
232
+ guardianDeliveryChatId?: string;
233
+ /** Optional channel username/handle for the bound guardian (for UI display). */
234
+ guardianUsername?: string;
235
+ /** Optional display name for the bound guardian (for UI display). */
236
+ guardianDisplayName?: string;
237
+ /** Whether a pending verification challenge exists for this (assistantId, channel). Used by relay setup to detect active voice verification sessions. */
238
+ hasPendingChallenge?: boolean;
239
+ error?: string;
240
+ }
241
+
242
+ export interface TwitterAuthResult {
243
+ type: 'twitter_auth_result';
244
+ success: boolean;
245
+ accountInfo?: string;
246
+ error?: string;
247
+ }
248
+
249
+ export interface TwitterAuthStatusResponse {
250
+ type: 'twitter_auth_status_response';
251
+ connected: boolean;
252
+ accountInfo?: string;
253
+ mode?: 'local_byo' | 'managed';
254
+ error?: string;
255
+ }
256
+
257
+ export interface IntegrationListResponse {
258
+ type: 'integration_list_response';
259
+ integrations: Array<{
260
+ id: string;
261
+ connected: boolean;
262
+ accountInfo?: string | null;
263
+ connectedAt?: number | null;
264
+ lastUsed?: number | null;
265
+ error?: string | null;
266
+ }>;
267
+ }
268
+
269
+ export interface IntegrationConnectResult {
270
+ type: 'integration_connect_result';
271
+ integrationId: string;
272
+ success: boolean;
273
+ accountInfo?: string | null;
274
+ error?: string | null;
275
+ setupRequired?: boolean;
276
+ setupSkillId?: string;
277
+ setupHint?: string;
278
+ }
279
+
280
+ export interface OpenUrl {
281
+ type: 'open_url';
282
+ url: string;
283
+ title?: string;
284
+ }
@@ -0,0 +1,48 @@
1
+ // Memory recall and status types.
2
+
3
+ export interface MemoryRecalledCandidateDebug {
4
+ key: string;
5
+ type: string;
6
+ kind: string;
7
+ finalScore: number;
8
+ lexical: number;
9
+ semantic: number;
10
+ recency: number;
11
+ }
12
+
13
+ export interface MemoryRecalled {
14
+ type: 'memory_recalled';
15
+ provider: string;
16
+ model: string;
17
+ lexicalHits: number;
18
+ semanticHits: number;
19
+ recencyHits: number;
20
+ entityHits: number;
21
+ relationSeedEntityCount?: number;
22
+ relationTraversedEdgeCount?: number;
23
+ relationNeighborEntityCount?: number;
24
+ relationExpandedItemCount?: number;
25
+ earlyTerminated?: boolean;
26
+ mergedCount: number;
27
+ selectedCount: number;
28
+ rerankApplied: boolean;
29
+ injectedTokens: number;
30
+ latencyMs: number;
31
+ topCandidates: MemoryRecalledCandidateDebug[];
32
+ }
33
+
34
+ export interface MemoryStatus {
35
+ type: 'memory_status';
36
+ enabled: boolean;
37
+ degraded: boolean;
38
+ reason?: string;
39
+ provider?: string;
40
+ model?: string;
41
+ conflictsPending: number;
42
+ conflictsResolved: number;
43
+ oldestPendingConflictAgeMs: number | null;
44
+ cleanupResolvedJobsPending: number;
45
+ cleanupSupersededJobsPending: number;
46
+ cleanupResolvedJobsCompleted24h: number;
47
+ cleanupSupersededJobsCompleted24h: number;
48
+ }
@@ -0,0 +1,211 @@
1
+ // User/assistant messages, tool results, confirmations, secrets, errors, and generation lifecycle.
2
+
3
+ import type { ChannelId } from '../../channels/types.js';
4
+ import type { UserMessageAttachment } from './shared.js';
5
+
6
+ // === Client → Server ===
7
+
8
+ export interface UserMessage {
9
+ type: 'user_message';
10
+ sessionId: string;
11
+ content?: string;
12
+ attachments?: UserMessageAttachment[];
13
+ activeSurfaceId?: string;
14
+ /** The page currently displayed in the WebView (e.g. "settings.html"). */
15
+ currentPage?: string;
16
+ /** When true, skip the secret-ingress check. Set by the client when the user clicks "Send Anyway". */
17
+ bypassSecretCheck?: boolean;
18
+ /** Originating channel identifier (e.g. 'macos', 'ios'). Defaults to 'macos' when absent. */
19
+ channel?: ChannelId;
20
+ }
21
+
22
+ export interface ConfirmationResponse {
23
+ type: 'confirmation_response';
24
+ requestId: string;
25
+ decision: 'allow' | 'always_allow' | 'always_allow_high_risk' | 'deny' | 'always_deny';
26
+ selectedPattern?: string;
27
+ selectedScope?: string;
28
+ }
29
+
30
+ export interface SecretResponse {
31
+ type: 'secret_response';
32
+ requestId: string;
33
+ value?: string; // undefined = user cancelled
34
+ /** How the secret should be delivered: 'store' persists to keychain (default), 'transient_send' for one-time use without persisting. */
35
+ delivery?: 'store' | 'transient_send';
36
+ }
37
+
38
+ export interface SuggestionRequest {
39
+ type: 'suggestion_request';
40
+ sessionId: string;
41
+ requestId: string;
42
+ }
43
+
44
+ // === Server → Client ===
45
+
46
+ export interface UserMessageEcho {
47
+ type: 'user_message_echo';
48
+ text: string;
49
+ sessionId?: string;
50
+ }
51
+
52
+ export interface AssistantTextDelta {
53
+ type: 'assistant_text_delta';
54
+ text: string;
55
+ sessionId?: string;
56
+ }
57
+
58
+ export interface AssistantThinkingDelta {
59
+ type: 'assistant_thinking_delta';
60
+ thinking: string;
61
+ }
62
+
63
+ export interface ToolUseStart {
64
+ type: 'tool_use_start';
65
+ toolName: string;
66
+ input: Record<string, unknown>;
67
+ sessionId?: string;
68
+ }
69
+
70
+ export interface ToolOutputChunk {
71
+ type: 'tool_output_chunk';
72
+ chunk: string;
73
+ sessionId?: string;
74
+ subType?: 'tool_start' | 'tool_complete' | 'status';
75
+ subToolName?: string;
76
+ subToolInput?: string;
77
+ subToolIsError?: boolean;
78
+ subToolId?: string;
79
+ }
80
+
81
+ export interface ToolInputDelta {
82
+ type: 'tool_input_delta';
83
+ toolName: string;
84
+ content: string;
85
+ sessionId?: string;
86
+ }
87
+
88
+ export interface ToolResult {
89
+ type: 'tool_result';
90
+ toolName: string;
91
+ result: string;
92
+ isError?: boolean;
93
+ diff?: { filePath: string; oldContent: string; newContent: string; isNewFile: boolean };
94
+ status?: string;
95
+ sessionId?: string;
96
+ /** Base64-encoded image data extracted from contentBlocks (e.g. browser_screenshot). */
97
+ imageData?: string;
98
+ }
99
+
100
+ export interface ConfirmationRequest {
101
+ type: 'confirmation_request';
102
+ requestId: string;
103
+ toolName: string;
104
+ input: Record<string, unknown>;
105
+ riskLevel: string;
106
+ executionTarget?: 'sandbox' | 'host';
107
+ allowlistOptions: Array<{ label: string; description: string; pattern: string }>;
108
+ scopeOptions: Array<{ label: string; scope: string }>;
109
+ diff?: { filePath: string; oldContent: string; newContent: string; isNewFile: boolean };
110
+ sandboxed?: boolean;
111
+ sessionId?: string;
112
+ /** When false, the client should hide "always allow" / trust-rule persistence affordances. */
113
+ persistentDecisionsAllowed?: boolean;
114
+ }
115
+
116
+ export interface SecretRequest {
117
+ type: 'secret_request';
118
+ requestId: string;
119
+ service: string;
120
+ field: string;
121
+ label: string;
122
+ description?: string;
123
+ placeholder?: string;
124
+ sessionId?: string;
125
+ /** Intended purpose of the credential (displayed to user). */
126
+ purpose?: string;
127
+ /** Tools allowed to use this credential. */
128
+ allowedTools?: string[];
129
+ /** Domains where this credential may be used. */
130
+ allowedDomains?: string[];
131
+ /** Whether one-time send override is available. */
132
+ allowOneTimeSend?: boolean;
133
+ }
134
+
135
+ export interface MessageComplete {
136
+ type: 'message_complete';
137
+ sessionId?: string;
138
+ attachments?: UserMessageAttachment[];
139
+ }
140
+
141
+ export interface ErrorMessage {
142
+ type: 'error';
143
+ message: string;
144
+ /** Categorizes the error so the client can offer contextual actions (e.g. "Send Anyway" for secret_blocked). */
145
+ category?: string;
146
+ }
147
+
148
+ export interface SecretDetected {
149
+ type: 'secret_detected';
150
+ toolName: string;
151
+ matches: Array<{ type: string; redactedValue: string }>;
152
+ action: 'redact' | 'warn' | 'block' | 'prompt';
153
+ }
154
+
155
+ export interface MessageQueued {
156
+ type: 'message_queued';
157
+ sessionId: string;
158
+ requestId: string;
159
+ position: number;
160
+ }
161
+
162
+ export interface MessageDequeued {
163
+ type: 'message_dequeued';
164
+ sessionId: string;
165
+ requestId: string;
166
+ }
167
+
168
+ export interface MessageQueuedDeleted {
169
+ type: 'message_queued_deleted';
170
+ sessionId: string;
171
+ requestId: string;
172
+ }
173
+
174
+ export interface SuggestionResponse {
175
+ type: 'suggestion_response';
176
+ requestId: string;
177
+ suggestion: string | null;
178
+ source: 'llm' | 'none';
179
+ }
180
+
181
+ export type TraceEventKind =
182
+ | 'request_received'
183
+ | 'request_queued'
184
+ | 'request_dequeued'
185
+ | 'llm_call_started'
186
+ | 'llm_call_finished'
187
+ | 'assistant_message'
188
+ | 'tool_started'
189
+ | 'tool_permission_requested'
190
+ | 'tool_permission_decided'
191
+ | 'tool_finished'
192
+ | 'tool_failed'
193
+ | 'secret_detected'
194
+ | 'generation_handoff'
195
+ | 'message_complete'
196
+ | 'generation_cancelled'
197
+ | 'request_error'
198
+ | 'tool_profiling_summary';
199
+
200
+ export interface TraceEvent {
201
+ type: 'trace_event';
202
+ eventId: string;
203
+ sessionId: string;
204
+ requestId?: string;
205
+ timestampMs: number;
206
+ sequence: number;
207
+ kind: TraceEventKind;
208
+ status?: 'info' | 'success' | 'warning' | 'error';
209
+ summary: string;
210
+ attributes?: Record<string, string | number | boolean | null>;
211
+ }
@@ -0,0 +1,45 @@
1
+ // Pairing approval and approved-device management types.
2
+
3
+ // === Client → Server ===
4
+
5
+ export interface PairingApprovalResponse {
6
+ type: 'pairing_approval_response';
7
+ pairingRequestId: string;
8
+ decision: 'approve_once' | 'always_allow' | 'deny';
9
+ }
10
+
11
+ export interface ApprovedDevicesList {
12
+ type: 'approved_devices_list';
13
+ }
14
+
15
+ export interface ApprovedDeviceRemove {
16
+ type: 'approved_device_remove';
17
+ hashedDeviceId: string;
18
+ }
19
+
20
+ export interface ApprovedDevicesClear {
21
+ type: 'approved_devices_clear';
22
+ }
23
+
24
+ // === Server → Client ===
25
+
26
+ export interface PairingApprovalRequest {
27
+ type: 'pairing_approval_request';
28
+ pairingRequestId: string;
29
+ deviceId: string;
30
+ deviceName: string;
31
+ }
32
+
33
+ export interface ApprovedDevicesListResponse {
34
+ type: 'approved_devices_list_response';
35
+ devices: Array<{
36
+ hashedDeviceId: string;
37
+ deviceName: string;
38
+ lastPairedAt: number;
39
+ }>;
40
+ }
41
+
42
+ export interface ApprovedDeviceRemoveResponse {
43
+ type: 'approved_device_remove_response';
44
+ success: boolean;
45
+ }
@@ -0,0 +1,95 @@
1
+ // Parental control IPC types.
2
+ //
3
+ // The parental control system lets a parent or guardian lock the assistant
4
+ // behind a 6-digit PIN and configure per-topic content restrictions and
5
+ // per-category tool blocks. All mutating operations require the PIN when
6
+ // one has been set.
7
+
8
+ // === Shared data types ===
9
+
10
+ /**
11
+ * Topics that can be individually blocked.
12
+ * All unlisted topics are allowed.
13
+ */
14
+ export type ParentalContentTopic =
15
+ | 'violence'
16
+ | 'adult_content'
17
+ | 'political'
18
+ | 'gambling'
19
+ | 'drugs';
20
+
21
+ /**
22
+ * Broad tool categories that can be disabled for age-appropriate use.
23
+ * When a category is blocked, individual tool invocations within that
24
+ * category are rejected before the permission pipeline runs.
25
+ */
26
+ export type ParentalToolCategory =
27
+ | 'computer_use'
28
+ | 'network'
29
+ | 'shell'
30
+ | 'file_write';
31
+
32
+ // === Client → Server ===
33
+
34
+ /** Retrieve the current parental control settings and PIN status. */
35
+ export interface ParentalControlGetRequest {
36
+ type: 'parental_control_get';
37
+ }
38
+
39
+ /** Verify a PIN attempt without changing any state. Useful to gate an unlock-settings flow before showing the full panel. */
40
+ export interface ParentalControlVerifyPinRequest {
41
+ type: 'parental_control_verify_pin';
42
+ pin: string;
43
+ }
44
+
45
+ /** Set, change, or clear the parental control PIN. To set for the first time provide only new_pin. To change provide current_pin and new_pin. To clear provide current_pin and set clear:true. */
46
+ export interface ParentalControlSetPinRequest {
47
+ type: 'parental_control_set_pin';
48
+ current_pin?: string;
49
+ new_pin?: string;
50
+ clear?: boolean;
51
+ }
52
+
53
+ /** Update parental control settings. Requires the PIN when parental mode is already enabled. */
54
+ export interface ParentalControlUpdateRequest {
55
+ type: 'parental_control_update';
56
+ /** Current PIN — required when parental mode is already enabled. */
57
+ pin?: string;
58
+ /** Enable or disable parental control mode. */
59
+ enabled?: boolean;
60
+ /** Full replacement list of blocked content topics. */
61
+ content_restrictions?: ParentalContentTopic[];
62
+ /** Full replacement list of blocked tool categories. */
63
+ blocked_tool_categories?: ParentalToolCategory[];
64
+ }
65
+
66
+ // === Server → Client ===
67
+
68
+ export interface ParentalControlGetResponse {
69
+ type: 'parental_control_get_response';
70
+ enabled: boolean;
71
+ has_pin: boolean;
72
+ content_restrictions: ParentalContentTopic[];
73
+ blocked_tool_categories: ParentalToolCategory[];
74
+ }
75
+
76
+ export interface ParentalControlVerifyPinResponse {
77
+ type: 'parental_control_verify_pin_response';
78
+ verified: boolean;
79
+ }
80
+
81
+ export interface ParentalControlSetPinResponse {
82
+ type: 'parental_control_set_pin_response';
83
+ success: boolean;
84
+ error?: string;
85
+ }
86
+
87
+ export interface ParentalControlUpdateResponse {
88
+ type: 'parental_control_update_response';
89
+ success: boolean;
90
+ error?: string;
91
+ enabled: boolean;
92
+ has_pin: boolean;
93
+ content_restrictions: ParentalContentTopic[];
94
+ blocked_tool_categories: ParentalToolCategory[];
95
+ }