@vellumai/assistant 0.10.4 → 0.10.5-dev.202607022329.d89bf2f

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 (866) hide show
  1. package/ARCHITECTURE.md +94 -91
  2. package/Dockerfile +5 -16
  3. package/README.md +7 -10
  4. package/bun.lock +0 -4
  5. package/docs/architecture/security.md +20 -20
  6. package/docs/stt-provider-onboarding.md +4 -5
  7. package/docs/trusted-contact-access.md +7 -7
  8. package/eslint-rules/cli-no-daemon-internals.js +4 -0
  9. package/eslint.config.mjs +7 -1
  10. package/knip.json +0 -1
  11. package/node_modules/@vellumai/gateway-client/src/__tests__/contact-read-contracts.test.ts +36 -0
  12. package/node_modules/@vellumai/gateway-client/src/__tests__/invite-contract.test.ts +233 -0
  13. package/node_modules/@vellumai/gateway-client/src/__tests__/trust-verdict-contract.test.ts +40 -0
  14. package/node_modules/@vellumai/gateway-client/src/gateway-ipc-contracts.ts +20 -8
  15. package/node_modules/@vellumai/gateway-client/src/inbound-contract.ts +10 -0
  16. package/node_modules/@vellumai/gateway-client/src/index.ts +33 -0
  17. package/node_modules/@vellumai/gateway-client/src/invite-contract.ts +216 -0
  18. package/node_modules/@vellumai/gateway-client/src/outbound-contract.ts +91 -0
  19. package/node_modules/@vellumai/gateway-client/src/trust-verdict-contract.ts +39 -3
  20. package/node_modules/@vellumai/service-contracts/src/__tests__/ingress.test.ts +0 -8
  21. package/node_modules/@vellumai/service-contracts/src/__tests__/package-boundary.test.ts +1 -5
  22. package/node_modules/@vellumai/service-contracts/src/twilio-ingress.ts +3 -14
  23. package/openapi.yaml +1073 -225
  24. package/package.json +1 -4
  25. package/scripts/test.sh +35 -13
  26. package/src/__tests__/access-request-seed-content-blocks.test.ts +60 -4
  27. package/src/__tests__/acp-session.test.ts +4 -1
  28. package/src/__tests__/actor-trust-resolver-address-fallback.test.ts +0 -6
  29. package/src/__tests__/add-message-preassigned-id.test.ts +56 -0
  30. package/src/__tests__/agent-loop-set-system-prompt.test.ts +139 -0
  31. package/src/__tests__/app-conversation-ids-backfill.test.ts +3 -0
  32. package/src/__tests__/app-source-watcher.test.ts +11 -0
  33. package/src/__tests__/approval-interception-trust-gates.test.ts +148 -3
  34. package/src/__tests__/assistant-attachments.test.ts +62 -4
  35. package/src/__tests__/assistant-id-boundary-guard.test.ts +0 -1
  36. package/src/__tests__/attachments-store-heic-normalize.test.ts +230 -0
  37. package/src/__tests__/attachments-store.test.ts +3 -0
  38. package/src/__tests__/background-shell-bash.test.ts +34 -0
  39. package/src/__tests__/background-shell-host-bash.test.ts +12 -0
  40. package/src/__tests__/background-tool-registry.test.ts +97 -0
  41. package/src/__tests__/background-tool-routes.test.ts +72 -1
  42. package/src/__tests__/background-workers-disk-pressure.test.ts +2 -1
  43. package/src/__tests__/btw-routes.test.ts +57 -3
  44. package/src/__tests__/call-controller.test.ts +474 -84
  45. package/src/__tests__/call-domain.test.ts +48 -1
  46. package/src/__tests__/call-pointer-messages.test.ts +57 -19
  47. package/src/__tests__/call-pointer-no-hardcoded-copy.guard.test.ts +2 -6
  48. package/src/__tests__/call-routes-http.test.ts +15 -14
  49. package/src/__tests__/call-setup-flow-invite.test.ts +568 -0
  50. package/src/__tests__/call-setup-flow-midcall-trust.test.ts +231 -0
  51. package/src/__tests__/call-setup-flow-name-capture.test.ts +754 -0
  52. package/src/__tests__/call-setup-flow-verification.test.ts +925 -0
  53. package/src/__tests__/call-setup-flow.test.ts +311 -0
  54. package/src/__tests__/cancel-resolves-conversation-key.test.ts +0 -1
  55. package/src/__tests__/channel-guardian.test.ts +4 -7
  56. package/src/__tests__/channel-readiness-service.test.ts +0 -6
  57. package/src/__tests__/channel-readiness-slack-remote.test.ts +0 -4
  58. package/src/__tests__/channel-retry-sweep.test.ts +76 -64
  59. package/src/__tests__/channel-setup-panel-ack.test.ts +184 -0
  60. package/src/__tests__/clear-all-lexical.test.ts +90 -0
  61. package/src/__tests__/compactor-media-strip.test.ts +177 -0
  62. package/src/__tests__/config-loader-backfill.test.ts +5 -5
  63. package/src/__tests__/config-schema.test.ts +17 -0
  64. package/src/__tests__/contact-store-interaction-info.test.ts +27 -70
  65. package/src/__tests__/contacts-relay-reads.test.ts +188 -23
  66. package/src/__tests__/contacts-tools.test.ts +42 -1
  67. package/src/__tests__/contacts-write.test.ts +181 -0
  68. package/src/__tests__/context-search-conversations-source.test.ts +220 -81
  69. package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +1 -0
  70. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +1 -0
  71. package/src/__tests__/conversation-agent-loop-overflow.test.ts +1 -0
  72. package/src/__tests__/conversation-agent-loop.test.ts +39 -0
  73. package/src/__tests__/conversation-analysis-routes.test.ts +1 -1
  74. package/src/__tests__/conversation-app-control-instantiation.test.ts +2 -0
  75. package/src/__tests__/conversation-clear-safety.test.ts +0 -1
  76. package/src/__tests__/conversation-crud-enabled-plugins.test.ts +60 -0
  77. package/src/__tests__/conversation-delete-schedule-cleanup.test.ts +0 -1
  78. package/src/__tests__/conversation-disk-view.test.ts +1 -0
  79. package/src/__tests__/conversation-enabledplugins-route.test.ts +184 -0
  80. package/src/__tests__/conversation-error.test.ts +0 -18
  81. package/src/__tests__/conversation-fork-crud.test.ts +67 -0
  82. package/src/__tests__/conversation-history-web-search.test.ts +7 -137
  83. package/src/__tests__/conversation-initial-prompt.test.ts +110 -0
  84. package/src/__tests__/conversation-loop-db-lock-resilience.test.ts +191 -0
  85. package/src/__tests__/conversation-process-callsite.test.ts +37 -0
  86. package/src/__tests__/conversation-queue.test.ts +149 -0
  87. package/src/__tests__/conversation-routes-enabled-plugins.test.ts +392 -0
  88. package/src/__tests__/conversation-routes-guardian-reply.test.ts +84 -0
  89. package/src/__tests__/conversation-routes-hidden-queue.test.ts +407 -0
  90. package/src/__tests__/conversation-runtime-assembly.test.ts +36 -16
  91. package/src/__tests__/conversation-skill-tools.test.ts +73 -0
  92. package/src/__tests__/conversation-wipe.test.ts +20 -5
  93. package/src/__tests__/credential-prompt-route.test.ts +69 -0
  94. package/src/__tests__/credential-security-invariants.test.ts +1 -3
  95. package/src/__tests__/db-drop-messages-fts.test.ts +115 -0
  96. package/src/__tests__/deterministic-verification-control-plane.test.ts +1 -62
  97. package/src/__tests__/edit-propagation.test.ts +56 -2
  98. package/src/__tests__/empty-state-greeting-cache.test.ts +9 -0
  99. package/src/__tests__/gateway-only-enforcement.test.ts +15 -110
  100. package/src/__tests__/guardian-expiry-notifier.test.ts +1 -0
  101. package/src/__tests__/guardian-question-mode.test.ts +57 -0
  102. package/src/__tests__/guardian-verification-voice-binding.test.ts +1 -1
  103. package/src/__tests__/guardian-wait-controller.test.ts +619 -0
  104. package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +33 -2
  105. package/src/__tests__/heic-fixture.ts +55 -0
  106. package/src/__tests__/helpers/seed-contact-channel.ts +0 -2
  107. package/src/__tests__/http-conversation-lineage.test.ts +6 -1
  108. package/src/__tests__/image-conversion.test.ts +170 -0
  109. package/src/__tests__/inbound-invite-redemption.test.ts +72 -341
  110. package/src/__tests__/introduction-card-resolver.test.ts +354 -0
  111. package/src/__tests__/invite-redeemed-ipc.test.ts +97 -0
  112. package/src/__tests__/invite-routes-http.test.ts +246 -420
  113. package/src/__tests__/job-handler-registration-guard.test.ts +104 -0
  114. package/src/__tests__/lexical-index-dual-write.test.ts +426 -0
  115. package/src/__tests__/lifecycle-memory-v2-seed.test.ts +2 -2
  116. package/src/__tests__/list-messages-attachments.test.ts +159 -0
  117. package/src/__tests__/list-messages-background-tool-completion.test.ts +141 -0
  118. package/src/__tests__/list-messages-queued.test.ts +25 -0
  119. package/src/__tests__/managed-store.test.ts +129 -1
  120. package/src/__tests__/media-stream-audio-transcode.test.ts +113 -0
  121. package/src/__tests__/media-stream-output.test.ts +350 -19
  122. package/src/__tests__/media-stream-server-integration.test.ts +943 -169
  123. package/src/__tests__/media-stream-stt-session.test.ts +498 -1
  124. package/src/__tests__/memory-jobs-worker-lanes.test.ts +2 -2
  125. package/src/__tests__/model-intents.test.ts +1 -1
  126. package/src/__tests__/mtime-cache.test.ts +19 -0
  127. package/src/__tests__/non-member-access-request.test.ts +349 -3
  128. package/src/__tests__/notification-decision-fallback.test.ts +104 -8
  129. package/src/__tests__/notification-decision-strategy.test.ts +57 -8
  130. package/src/__tests__/onboarding-template-contract.test.ts +27 -43
  131. package/src/__tests__/openai-provider.test.ts +33 -0
  132. package/src/__tests__/openai-responses-provider.test.ts +40 -0
  133. package/src/__tests__/persistence-layering-guard.test.ts +29 -20
  134. package/src/__tests__/persona-resolver.test.ts +56 -2
  135. package/src/__tests__/personal-memory-auth-bypass.test.ts +62 -0
  136. package/src/__tests__/phone.test.ts +1 -15
  137. package/src/__tests__/plugin-bootstrap.test.ts +25 -196
  138. package/src/__tests__/plugin-disabled-state.test.ts +33 -0
  139. package/src/__tests__/plugin-effective-enabled-set.test.ts +227 -0
  140. package/src/__tests__/plugin-event-hub-facade.test.ts +323 -0
  141. package/src/__tests__/plugin-import-boundary-guard.test.ts +156 -42
  142. package/src/__tests__/plugin-injector-contribution.test.ts +4 -20
  143. package/src/__tests__/plugin-pipeline.test.ts +63 -1
  144. package/src/__tests__/plugin-route-contribution.test.ts +62 -115
  145. package/src/__tests__/plugin-tool-contribution.test.ts +0 -22
  146. package/src/__tests__/plugin-types.test.ts +0 -1
  147. package/src/__tests__/pointer-conversation-trust.test.ts +38 -6
  148. package/src/__tests__/pre-model-call-sanitize.test.ts +1 -1
  149. package/src/__tests__/prune-old-tool-invocations-job.test.ts +97 -0
  150. package/src/__tests__/public-ingress-urls.test.ts +0 -48
  151. package/src/__tests__/qdrant-collection-migration.test.ts +145 -2
  152. package/src/__tests__/reaction-intercept-member-verdict-warm.test.ts +0 -1
  153. package/src/__tests__/resolve-trust-class.test.ts +28 -10
  154. package/src/__tests__/scaffold-managed-skill-tool.test.ts +137 -0
  155. package/src/__tests__/schedule-retry.test.ts +38 -14
  156. package/src/__tests__/schedule-routes-workflow-validation.test.ts +3 -3
  157. package/src/__tests__/schedule-routes.test.ts +14 -6
  158. package/src/__tests__/schedule-store.test.ts +3 -1
  159. package/src/__tests__/scheduler-disk-pressure.test.ts +17 -6
  160. package/src/__tests__/scheduler-recurrence.test.ts +57 -107
  161. package/src/__tests__/scheduler-reuse-conversation.test.ts +51 -46
  162. package/src/__tests__/scheduler-wake.test.ts +13 -23
  163. package/src/__tests__/scheduler-worker-standdown.test.ts +220 -0
  164. package/src/__tests__/secret-routes-platform-proxy.test.ts +1 -1
  165. package/src/__tests__/shell-observability.test.ts +1 -0
  166. package/src/__tests__/skill-boundary-guard.test.ts +3 -4
  167. package/src/__tests__/skill-load-plugin-scope.test.ts +238 -0
  168. package/src/__tests__/skill-projection-feature-flag.test.ts +2 -0
  169. package/src/__tests__/skill-script-runner-host.test.ts +53 -0
  170. package/src/__tests__/skill-script-runner-sandbox.test.ts +5 -2
  171. package/src/__tests__/skill-tool-factory.test.ts +73 -1
  172. package/src/__tests__/slack-app-setup-skill-regression.test.ts +37 -14
  173. package/src/__tests__/slack-inbound-verification.test.ts +36 -0
  174. package/src/__tests__/slack-notification-approval-card.test.ts +89 -2
  175. package/src/__tests__/slack-reaction-canonical-approval.test.ts +51 -1
  176. package/src/__tests__/stt-hints.test.ts +2 -256
  177. package/src/__tests__/subagent-allowlist-validation.test.ts +47 -0
  178. package/src/__tests__/subagent-call-site-routing.test.ts +72 -0
  179. package/src/__tests__/subagent-fork-notifications.test.ts +14 -2
  180. package/src/__tests__/subagent-persistence.test.ts +122 -0
  181. package/src/__tests__/subagent-spawn-and-await.test.ts +1 -0
  182. package/src/__tests__/subagent-terminal-message.test.ts +99 -0
  183. package/src/__tests__/subagent-tool-gate-mode.test.ts +78 -1
  184. package/src/__tests__/system-prompt.test.ts +17 -118
  185. package/src/__tests__/task-scheduler.test.ts +68 -89
  186. package/src/__tests__/telephony-credential-preflight.test.ts +312 -0
  187. package/src/__tests__/telephony-tts-guard.test.ts +538 -0
  188. package/src/__tests__/title-generate-hook.test.ts +16 -0
  189. package/src/__tests__/tool-approval-handler.test.ts +87 -1
  190. package/src/__tests__/tool-approval-seed-content-blocks.test.ts +45 -20
  191. package/src/__tests__/tool-grant-request-escalation.test.ts +39 -0
  192. package/src/__tests__/trust-context-guards.test.ts +21 -10
  193. package/src/__tests__/trusted-contact-multichannel.test.ts +4 -0
  194. package/src/__tests__/twilio-provider.test.ts +17 -17
  195. package/src/__tests__/twilio-routes-twiml.test.ts +6 -543
  196. package/src/__tests__/twilio-routes.test.ts +257 -387
  197. package/src/__tests__/twilio-validation.test.ts +1 -1
  198. package/src/__tests__/unified-turn-context-client-os.test.ts +45 -0
  199. package/src/__tests__/usage-cache-backfill-migration.test.ts +5 -0
  200. package/src/__tests__/voice-approval-resolver-relay.test.ts +150 -0
  201. package/src/__tests__/voice-ingress-preflight.test.ts +61 -0
  202. package/src/__tests__/voice-quality.test.ts +2 -2
  203. package/src/__tests__/voice-scoped-grant-consumer.test.ts +1 -7
  204. package/src/__tests__/voice-session-bridge-processing-wait.test.ts +27 -0
  205. package/src/__tests__/voice-session-bridge.test.ts +1 -10
  206. package/src/__tests__/workspace-git-service.test.ts +1 -1
  207. package/src/__tests__/workspace-migration-013-repair-conversation-disk-view.test.ts +1 -0
  208. package/src/__tests__/workspace-migration-118-seed-now-md.test.ts +120 -0
  209. package/src/__tests__/workspace-migration-120-revise-onboarding-threads.test.ts +175 -0
  210. package/src/__tests__/workspace-migration-121-seed-default-user-guardrails.test.ts +118 -0
  211. package/src/__tests__/workspace-migration-122-relocate-default-user-boundary.test.ts +119 -0
  212. package/src/__tests__/workspace-migration-123-swap-quality-profile-to-fable.test.ts +191 -0
  213. package/src/__tests__/workspace-migration-backfill-installation-id.test.ts +235 -241
  214. package/src/acp/__tests__/prepare-agent-env.test.ts +0 -97
  215. package/src/acp/__tests__/session-manager-persistence.test.ts +2 -0
  216. package/src/acp/__tests__/session-manager-resume.test.ts +8 -0
  217. package/src/acp/__tests__/session-manager-usage.test.ts +6 -0
  218. package/src/acp/__tests__/session-manager.test.ts +6 -0
  219. package/src/acp/agent-process.test.ts +116 -0
  220. package/src/acp/agent-process.ts +71 -0
  221. package/src/acp/auto-install.ts +12 -8
  222. package/src/acp/failure-error.test.ts +109 -0
  223. package/src/acp/failure-error.ts +111 -0
  224. package/src/acp/prepare-agent-env.ts +0 -12
  225. package/src/acp/resolve-agent.test.ts +6 -45
  226. package/src/acp/resolve-agent.ts +2 -4
  227. package/src/acp/session-manager.test.ts +312 -0
  228. package/src/acp/session-manager.ts +102 -46
  229. package/src/agent/ax-tree-compaction.test.ts +4 -1
  230. package/src/agent/image-optimize.ts +17 -127
  231. package/src/agent/loop.ts +45 -192
  232. package/src/api/events/background-tool-completed.test.ts +51 -0
  233. package/src/api/events/background-tool-completed.ts +29 -0
  234. package/src/api/events/background-tool-started.test.ts +36 -0
  235. package/src/api/events/background-tool-started.ts +28 -0
  236. package/src/api/events/conversation-error.ts +0 -1
  237. package/src/api/events/open-panel.ts +33 -0
  238. package/src/api/events/subagent-status-changed.ts +4 -1
  239. package/src/api/index.ts +19 -0
  240. package/src/api/responses/conversation-message.ts +34 -0
  241. package/src/approvals/guardian-decision-primitive.ts +74 -24
  242. package/src/approvals/guardian-request-resolvers.ts +450 -122
  243. package/src/apps/app-store.ts +1 -0
  244. package/src/apps/shared-app-links-store.ts +1 -0
  245. package/src/avatar/identity-avatar.ts +3 -7
  246. package/src/background-wake/wake-intent-hooks.test.ts +1 -1
  247. package/src/calls/__tests__/fish-audio-client.test.ts +73 -0
  248. package/src/calls/__tests__/gateway-invite-reader.test.ts +170 -0
  249. package/src/calls/__tests__/relay-setup-router.test.ts +126 -102
  250. package/src/calls/call-controller.ts +134 -48
  251. package/src/calls/call-domain.ts +18 -42
  252. package/src/calls/call-pointer-messages.ts +51 -67
  253. package/src/calls/call-setup-flow-types.ts +76 -0
  254. package/src/calls/call-setup-flow.ts +1743 -0
  255. package/src/calls/call-speech-output.ts +87 -23
  256. package/src/calls/call-store.ts +4 -0
  257. package/src/calls/call-transport.ts +22 -36
  258. package/src/calls/fish-audio-client.ts +3 -0
  259. package/src/calls/gateway-invite-reader.ts +98 -0
  260. package/src/calls/guardian-wait-controller.ts +451 -0
  261. package/src/calls/media-stream-audio-transcode.ts +82 -2
  262. package/src/calls/media-stream-output.ts +142 -36
  263. package/src/calls/media-stream-server.ts +297 -178
  264. package/src/calls/media-stream-stt-session.ts +393 -50
  265. package/src/calls/media-turn-detector.ts +4 -6
  266. package/src/calls/relay-access-wait.ts +3 -4
  267. package/src/calls/relay-setup-router.ts +22 -43
  268. package/src/calls/relay-verification.ts +17 -24
  269. package/src/calls/resolve-call-tts-provider.ts +96 -29
  270. package/src/calls/stt-hints.ts +24 -87
  271. package/src/calls/telephony-credential-preflight.ts +159 -0
  272. package/src/calls/telephony-tts-capability.ts +183 -0
  273. package/src/calls/tts-call-strategy.ts +18 -20
  274. package/src/calls/twilio-provider.ts +3 -2
  275. package/src/calls/twilio-routes.ts +47 -351
  276. package/src/calls/types.ts +5 -3
  277. package/src/calls/voice-ingress-preflight.ts +9 -0
  278. package/src/calls/voice-quality.ts +13 -18
  279. package/src/calls/voice-session-bridge.ts +25 -35
  280. package/src/channels/__tests__/types.test.ts +28 -0
  281. package/src/channels/channel-verification-sessions.ts +7 -2
  282. package/src/channels/config.ts +0 -42
  283. package/src/channels/slack-thread-store.ts +12 -0
  284. package/src/channels/types.ts +23 -0
  285. package/src/cli/commands/__tests__/conversations-slack.test.ts +1 -1
  286. package/src/cli/commands/__tests__/schedules.test.ts +83 -34
  287. package/src/cli/commands/__tests__/status.test.ts +42 -2
  288. package/src/cli/commands/contacts.ts +2 -2
  289. package/src/cli/commands/credentials.ts +17 -0
  290. package/src/cli/commands/monitoring.ts +191 -0
  291. package/src/cli/commands/schedules-worker.ts +175 -0
  292. package/src/cli/commands/schedules.ts +169 -43
  293. package/src/cli/commands/status.ts +12 -1
  294. package/src/cli/commands/tools.ts +5 -1
  295. package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +1 -0
  296. package/src/cli/lib/__tests__/search-plugins.test.ts +29 -1
  297. package/src/cli/lib/__tests__/toggle-plugin.test.ts +7 -0
  298. package/src/cli/lib/search-plugins.ts +6 -0
  299. package/src/cli/lib/toggle-plugin.ts +21 -2
  300. package/src/cli/program.ts +3 -1
  301. package/src/config/__tests__/deployment-context-defaults.test.ts +23 -0
  302. package/src/config/acp-defaults.test.ts +0 -10
  303. package/src/config/acp-defaults.ts +0 -6
  304. package/src/config/bundled-skills/acp/SKILL.md +13 -45
  305. package/src/config/bundled-skills/acp/TOOLS.json +3 -3
  306. package/src/config/bundled-skills/app-builder/SKILL.md +3 -3
  307. package/src/config/bundled-skills/app-builder/references/RESPONSIVE.md +9 -9
  308. package/src/config/bundled-skills/contacts/tools/contact-merge.ts +1 -1
  309. package/src/config/bundled-skills/contacts/tools/contact-search.ts +1 -1
  310. package/src/config/bundled-skills/phone-calls/SKILL.md +1 -1
  311. package/src/config/bundled-skills/phone-calls/references/CONFIG.md +9 -9
  312. package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +10 -7
  313. package/src/config/bundled-skills/skill-management/TOOLS.json +10 -0
  314. package/src/config/call-site-defaults.ts +0 -2
  315. package/src/config/feature-flag-registry.json +16 -8
  316. package/src/config/loader.ts +11 -0
  317. package/src/config/schema.ts +9 -1
  318. package/src/config/schemas/__tests__/memory-v2.test.ts +2 -2
  319. package/src/config/schemas/__tests__/memory-v3.test.ts +64 -0
  320. package/src/config/schemas/call-site-catalog.ts +0 -12
  321. package/src/config/schemas/calls.ts +8 -0
  322. package/src/config/schemas/elevenlabs.ts +1 -1
  323. package/src/config/schemas/llm.ts +0 -2
  324. package/src/config/schemas/memory-v2.ts +1 -1
  325. package/src/config/schemas/memory-v3.ts +82 -0
  326. package/src/config/schemas/monitoring.ts +61 -0
  327. package/src/config/schemas/schedules.ts +35 -0
  328. package/src/config/seed-inference-profiles.ts +2 -2
  329. package/src/config/skills-plugin-filter.test.ts +96 -0
  330. package/src/config/skills.ts +26 -0
  331. package/src/contacts/__tests__/member-write-relay.test.ts +156 -4
  332. package/src/contacts/canonical-guardian-store.ts +5 -0
  333. package/src/contacts/contact-store.ts +81 -35
  334. package/src/contacts/contacts-write.ts +50 -25
  335. package/src/contacts/member-write-relay.ts +115 -31
  336. package/src/contacts/types.ts +0 -8
  337. package/src/context/compactor.ts +29 -15
  338. package/src/context/outbound-sanitize.ts +202 -0
  339. package/src/daemon/__tests__/abort-null-controller.test.ts +167 -0
  340. package/src/daemon/__tests__/conversation-tool-setup-plugin-scope.test.ts +122 -0
  341. package/src/daemon/__tests__/embedding-reconcile.test.ts +99 -16
  342. package/src/daemon/__tests__/wake-conversation-ops-completion.test.ts +107 -0
  343. package/src/daemon/abort-watchdog.ts +7 -0
  344. package/src/daemon/app-source-watcher.ts +9 -0
  345. package/src/daemon/assistant-attachments.ts +42 -0
  346. package/src/daemon/conversation-agent-loop-handlers.ts +256 -147
  347. package/src/daemon/conversation-agent-loop.ts +61 -68
  348. package/src/daemon/conversation-error.ts +1 -15
  349. package/src/daemon/conversation-history.ts +32 -236
  350. package/src/daemon/conversation-initial-prompt.ts +77 -0
  351. package/src/daemon/conversation-lifecycle.ts +25 -1
  352. package/src/daemon/conversation-messaging.ts +2 -2
  353. package/src/daemon/conversation-plugin-scope.ts +38 -0
  354. package/src/daemon/conversation-process.ts +50 -14
  355. package/src/daemon/conversation-runtime-assembly.ts +36 -6
  356. package/src/daemon/conversation-skill-tools.ts +19 -3
  357. package/src/daemon/conversation-store.ts +3 -3
  358. package/src/daemon/conversation-surfaces.ts +171 -0
  359. package/src/daemon/conversation-tool-setup.test.ts +95 -0
  360. package/src/daemon/conversation-tool-setup.ts +116 -1
  361. package/src/daemon/conversation-turn-finalize.ts +211 -0
  362. package/src/daemon/conversation.ts +92 -1
  363. package/src/daemon/disk-pressure-policy.ts +2 -1
  364. package/src/daemon/event-loop-watchdog.ts +22 -6
  365. package/src/daemon/external-plugins-bootstrap.ts +47 -134
  366. package/src/daemon/handlers/__tests__/config-a2a-accept.test.ts +1 -1
  367. package/src/daemon/handlers/__tests__/config-a2a-complete.test.ts +26 -14
  368. package/src/daemon/handlers/__tests__/config-a2a-invite.test.ts +27 -14
  369. package/src/daemon/handlers/__tests__/config-channels.test.ts +0 -5
  370. package/src/daemon/handlers/config-a2a.ts +7 -14
  371. package/src/daemon/handlers/config-channels.ts +2 -10
  372. package/src/daemon/handlers/conversation-history.ts +3 -1
  373. package/src/daemon/handlers/conversations.ts +0 -52
  374. package/src/daemon/handlers/shared.ts +4 -24
  375. package/src/daemon/handlers/skills.ts +4 -1
  376. package/src/daemon/host-cu-proxy.ts +1 -1
  377. package/src/daemon/lifecycle.ts +59 -472
  378. package/src/daemon/message-protocol.ts +3 -3
  379. package/src/daemon/message-provenance.ts +12 -14
  380. package/src/daemon/message-types/background-tools.ts +28 -0
  381. package/src/daemon/message-types/contacts.ts +2 -10
  382. package/src/daemon/message-types/conversations.ts +10 -0
  383. package/src/daemon/message-types/integrations.ts +2 -0
  384. package/src/daemon/message-types/surfaces.ts +1 -0
  385. package/src/daemon/message-types/sync.ts +1 -0
  386. package/src/daemon/pointer-conversation-trust.ts +23 -9
  387. package/src/daemon/pointer-turn-runner.ts +174 -0
  388. package/src/daemon/providers-setup.ts +16 -0
  389. package/src/daemon/shutdown-handlers.ts +139 -47
  390. package/src/daemon/skill-memory-refresh.ts +2 -2
  391. package/src/daemon/sqlite-corruption-watchdog.test.ts +217 -0
  392. package/src/daemon/sqlite-corruption-watchdog.ts +155 -0
  393. package/src/daemon/tool-setup-types.ts +8 -0
  394. package/src/daemon/trust-context.ts +21 -6
  395. package/src/daemon/turn-latency-tracker.test.ts +93 -0
  396. package/src/daemon/turn-latency-tracker.ts +38 -0
  397. package/src/daemon/wake-conversation-ops.ts +10 -8
  398. package/src/documents/document-comments-store.test.ts +7 -1
  399. package/src/documents/document-comments-store.ts +8 -0
  400. package/src/documents/document-store.ts +15 -0
  401. package/src/export/__tests__/transcript-formatter.test.ts +11 -0
  402. package/src/export/transcript-formatter.ts +49 -67
  403. package/src/home/__tests__/feed-writer.test.ts +247 -1
  404. package/src/home/conversation-starter-checkpoints.ts +1 -0
  405. package/src/home/feed-writer.ts +61 -0
  406. package/src/home/job-handlers/conversation-starters.ts +1 -0
  407. package/src/hooks/hook-loader.ts +12 -0
  408. package/src/hooks/registry.ts +32 -4
  409. package/src/inbound/public-ingress-urls.ts +0 -17
  410. package/src/ipc/__tests__/contacts-info-ipc.test.ts +285 -0
  411. package/src/ipc/assistant-server.ts +28 -7
  412. package/src/ipc/routes/__tests__/contacts-mirror-apply-atomicity.test.ts +62 -0
  413. package/src/ipc/routes/__tests__/contacts-mirror-apply.test.ts +272 -0
  414. package/src/ipc/routes/__tests__/contacts-mirror-ipc-routes.test.ts +322 -0
  415. package/src/ipc/routes/__tests__/invite-ipc-routes.test.ts +60 -4
  416. package/src/ipc/routes/contacts-info-ipc-routes.ts +239 -0
  417. package/src/ipc/routes/contacts-mirror-ipc-routes.ts +202 -0
  418. package/src/ipc/routes/db-proxy.ts +5 -2
  419. package/src/ipc/routes/invite-ipc-routes.ts +53 -39
  420. package/src/jobs/worker.ts +9 -2
  421. package/src/live-voice/__tests__/live-voice-archive.test.ts +10 -1
  422. package/src/live-voice/live-voice-archive.ts +5 -0
  423. package/src/messaging/providers/__tests__/transport-dispatch.test.ts +22 -6
  424. package/src/messaging/providers/channel-transport.ts +6 -0
  425. package/src/messaging/providers/index.ts +3 -0
  426. package/src/messaging/providers/slack/api.test.ts +49 -1
  427. package/src/messaging/providers/slack/api.ts +110 -0
  428. package/src/messaging/providers/slack/send.test.ts +85 -0
  429. package/src/messaging/providers/slack/send.ts +100 -28
  430. package/src/messaging/providers/slack/transport.ts +7 -13
  431. package/src/messaging/providers/whatsapp/send.ts +29 -9
  432. package/src/monitoring/__tests__/control.test.ts +235 -0
  433. package/src/monitoring/__tests__/sample-ring-buffer.test.ts +96 -0
  434. package/src/monitoring/control.ts +105 -0
  435. package/src/monitoring/resource-sampler.ts +258 -0
  436. package/src/monitoring/sample-ring-buffer.ts +108 -0
  437. package/src/monitoring/worker.ts +94 -0
  438. package/src/notifications/README.md +1 -1
  439. package/src/notifications/access-request-copy.ts +94 -23
  440. package/src/notifications/adapters/slack.ts +89 -21
  441. package/src/notifications/approval-card-builder.ts +33 -18
  442. package/src/notifications/approval-card-data.ts +48 -15
  443. package/src/notifications/broadcaster.ts +25 -16
  444. package/src/notifications/decision-engine.ts +131 -32
  445. package/src/notifications/guardian-question-mode.ts +58 -10
  446. package/src/permissions/approval-policy.ts +8 -1
  447. package/src/permissions/checker.ts +2 -0
  448. package/src/permissions/gateway-threshold-reader.ts +7 -6
  449. package/src/permissions/ipc-risk-types.ts +1 -0
  450. package/src/permissions/secret-prompter.ts +11 -3
  451. package/src/permissions/types.ts +2 -2
  452. package/src/persistence/__tests__/conversation-queries-search.test.ts +397 -0
  453. package/src/persistence/__tests__/conversation-search-lexical.test.ts +103 -0
  454. package/src/persistence/__tests__/jobs-worker-memory-disabled.test.ts +95 -0
  455. package/src/persistence/__tests__/slow-query-log.test.ts +266 -0
  456. package/src/persistence/__tests__/slow-sync-log.test.ts +155 -0
  457. package/src/persistence/a2a-invite-store.ts +205 -0
  458. package/src/persistence/attachments-store.ts +94 -10
  459. package/src/persistence/checkpoints.ts +45 -0
  460. package/src/persistence/conversation-crud.ts +453 -260
  461. package/src/persistence/conversation-display-order-migration.ts +8 -2
  462. package/src/persistence/conversation-group-migration.test.ts +8 -0
  463. package/src/persistence/conversation-group-migration.ts +9 -0
  464. package/src/persistence/conversation-queries.ts +244 -125
  465. package/src/persistence/conversation-row-batch-delete.ts +9 -5
  466. package/src/persistence/conversation-search-lexical.ts +49 -0
  467. package/src/persistence/db-async-query.ts +42 -0
  468. package/src/persistence/db-connection.ts +13 -0
  469. package/src/persistence/delivery-channels.ts +0 -82
  470. package/src/persistence/delivery-crud.ts +27 -6
  471. package/src/persistence/embeddings/__tests__/embedding-identity.test.ts +18 -5
  472. package/src/persistence/embeddings/__tests__/messages-lexical-index.test.ts +334 -0
  473. package/src/persistence/embeddings/embedding-identity.ts +17 -5
  474. package/src/persistence/embeddings/embedding-runtime-manager.ts +31 -0
  475. package/src/persistence/embeddings/messages-lexical-index.ts +396 -0
  476. package/src/persistence/embeddings/qdrant-client.ts +81 -5
  477. package/src/persistence/group-crud.ts +13 -1
  478. package/src/persistence/job-handlers/__tests__/message-lexical-backfill.test.ts +506 -0
  479. package/src/persistence/job-handlers/__tests__/message-lexical-enqueue.test.ts +164 -0
  480. package/src/persistence/job-handlers/__tests__/message-lexical.test.ts +259 -0
  481. package/src/persistence/job-handlers/cleanup.ts +57 -9
  482. package/src/persistence/job-handlers/message-lexical-backfill.ts +187 -0
  483. package/src/persistence/job-handlers/message-lexical.ts +251 -0
  484. package/src/persistence/jobs-store.ts +102 -8
  485. package/src/persistence/jobs-worker.ts +68 -28
  486. package/src/persistence/llm-request-log-store.ts +35 -19
  487. package/src/persistence/llm-usage-store.ts +11 -0
  488. package/src/persistence/memory-lifecycle-hooks.test.ts +65 -0
  489. package/src/persistence/memory-lifecycle-hooks.ts +55 -1
  490. package/src/persistence/migrations/028-call-session-mode.ts +1 -1
  491. package/src/persistence/migrations/116-messages-fts.ts +8 -1
  492. package/src/persistence/migrations/311-create-subagents-table.ts +50 -0
  493. package/src/persistence/migrations/312-drop-inbox-conversation-state-table.ts +15 -0
  494. package/src/persistence/migrations/313-drop-messages-fts.ts +17 -0
  495. package/src/persistence/migrations/314-add-conversation-enabled-plugins.ts +25 -0
  496. package/src/persistence/migrations/315-create-a2a-invites.ts +58 -0
  497. package/src/persistence/migrations/316-drop-contact-channels-invite-id.ts +28 -0
  498. package/src/persistence/migrations/317-canonical-guardian-requester-signals.ts +24 -0
  499. package/src/persistence/migrations/318-drop-contact-channel-telemetry.ts +32 -0
  500. package/src/persistence/migrations/__tests__/315-create-a2a-invites.test.ts +161 -0
  501. package/src/persistence/migrations/__tests__/316-drop-contact-channels-invite-id.test.ts +156 -0
  502. package/src/persistence/migrations/__tests__/318-drop-contact-channel-telemetry.test.ts +134 -0
  503. package/src/persistence/migrations/__tests__/migration-prefix-guard.test.ts +99 -0
  504. package/src/persistence/raw-query.ts +50 -11
  505. package/src/persistence/schema/a2a.ts +14 -0
  506. package/src/persistence/schema/contacts.ts +0 -62
  507. package/src/persistence/schema/conversation-groups.ts +12 -0
  508. package/src/persistence/schema/conversations.ts +2 -0
  509. package/src/persistence/schema/documents.ts +65 -0
  510. package/src/persistence/schema/guardian.ts +4 -0
  511. package/src/persistence/schema/index.ts +4 -0
  512. package/src/persistence/schema/memory-injection.ts +62 -0
  513. package/src/persistence/schema/workflows.ts +55 -0
  514. package/src/persistence/slow-query-log.ts +437 -0
  515. package/src/persistence/slow-sync-log.ts +204 -0
  516. package/src/persistence/steps.ts +16 -0
  517. package/src/persistence/subagent-store.ts +125 -0
  518. package/src/persistence/worker-control.ts +45 -238
  519. package/src/plugin-api/event-hub-facade.ts +172 -0
  520. package/src/plugin-api/index.ts +9 -1
  521. package/src/plugin-api/types.ts +40 -9
  522. package/src/plugins/defaults/default-plugin-names.ts +60 -0
  523. package/src/plugins/defaults/index.ts +19 -29
  524. package/src/plugins/defaults/memory/__tests__/conversation-queries.test.ts +46 -67
  525. package/src/plugins/defaults/memory/__tests__/db-async-query.test.ts +36 -1
  526. package/src/plugins/defaults/memory/__tests__/find-most-recent-retrospective-for.test.ts +2 -4
  527. package/src/plugins/defaults/memory/__tests__/jobs-worker-v2-graph-trigger-embed.test.ts +2 -2
  528. package/src/plugins/defaults/memory/__tests__/jobs-worker-v2-schedule.test.ts +9 -0
  529. package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +7 -4
  530. package/src/plugins/defaults/memory/config.ts +11 -0
  531. package/src/plugins/defaults/memory/context-search/agent-runner.ts +1 -1
  532. package/src/plugins/defaults/memory/context-search/sources/conversations.ts +124 -113
  533. package/src/plugins/defaults/memory/embeddings.ts +77 -0
  534. package/src/plugins/defaults/memory/find-most-recent-retrospective-for.ts +66 -0
  535. package/src/plugins/defaults/memory/frontmatter.ts +50 -0
  536. package/src/plugins/defaults/memory/graph/bootstrap.test.ts +36 -10
  537. package/src/plugins/defaults/memory/graph/bootstrap.ts +6 -5
  538. package/src/plugins/defaults/memory/graph/consolidation.ts +3 -5
  539. package/src/plugins/defaults/memory/graph/extraction.ts +3 -6
  540. package/src/plugins/defaults/memory/graph/graph-search.ts +12 -23
  541. package/src/plugins/defaults/memory/graph/narrative.ts +3 -5
  542. package/src/plugins/defaults/memory/graph/pattern-scan.ts +3 -5
  543. package/src/plugins/defaults/memory/graph/retriever.test.ts +1 -6
  544. package/src/plugins/defaults/memory/graph/retriever.ts +5 -10
  545. package/src/plugins/defaults/memory/graph/tools.ts +1 -1
  546. package/src/plugins/defaults/memory/hooks/init.ts +31 -5
  547. package/src/plugins/defaults/memory/indexer.ts +2 -3
  548. package/src/plugins/defaults/memory/injectors.ts +2 -2
  549. package/src/plugins/defaults/memory/job-handler-registration.ts +96 -0
  550. package/src/plugins/defaults/memory/job-handlers/backfill.ts +4 -26
  551. package/src/plugins/defaults/memory/job-handlers/embedding.test.ts +6 -19
  552. package/src/plugins/defaults/memory/job-handlers/embedding.ts +9 -22
  553. package/src/plugins/defaults/memory/job-handlers/index-maintenance.ts +2 -3
  554. package/src/plugins/defaults/memory/job-handlers.ts +13 -12
  555. package/src/plugins/defaults/memory/jobs/embed-concept-page.ts +1 -1
  556. package/src/plugins/defaults/memory/llm-helpers.ts +76 -0
  557. package/src/plugins/defaults/memory/memory-retrospective-job.ts +8 -5
  558. package/src/plugins/defaults/memory/memory-retrospective-startup-cleanup.ts +2 -2
  559. package/src/plugins/defaults/memory/memory-v2-concept-frequency.ts +2 -0
  560. package/src/plugins/defaults/memory/persistence-hooks.ts +46 -1
  561. package/src/plugins/defaults/memory/pkb/pkb-index.ts +1 -5
  562. package/src/plugins/defaults/memory/pkb/pkb-search.ts +2 -2
  563. package/src/plugins/defaults/memory/routes/__tests__/memory-v2-simulate-route.test.ts +4 -6
  564. package/src/plugins/defaults/memory/routes/memory-item-routes.ts +1 -1
  565. package/src/plugins/defaults/memory/search/semantic.ts +2 -2
  566. package/src/plugins/defaults/memory/startup.ts +244 -0
  567. package/src/plugins/defaults/memory/task-memory-cleanup.ts +8 -0
  568. package/src/{daemon → plugins/defaults/memory/v2}/__tests__/memory-v2-startup.test.ts +6 -6
  569. package/src/plugins/defaults/memory/v2/__tests__/migration.test.ts +2 -13
  570. package/src/plugins/defaults/memory/v2/__tests__/router.test.ts +4 -5
  571. package/src/plugins/defaults/memory/v2/__tests__/sweep-job.test.ts +1 -8
  572. package/src/plugins/defaults/memory/v2/activation.ts +2 -4
  573. package/src/plugins/defaults/memory/v2/cli-command-store.ts +2 -4
  574. package/src/plugins/defaults/memory/v2/frontmatter-sweep.ts +1 -1
  575. package/src/{daemon → plugins/defaults/memory/v2}/memory-v2-startup.test.ts +8 -8
  576. package/src/{daemon → plugins/defaults/memory/v2}/memory-v2-startup.ts +20 -22
  577. package/src/plugins/defaults/memory/v2/migration.ts +2 -5
  578. package/src/plugins/defaults/memory/v2/page-store.ts +1 -1
  579. package/src/plugins/defaults/memory/v2/qdrant.ts +2 -3
  580. package/src/plugins/defaults/memory/v2/router.ts +5 -5
  581. package/src/plugins/defaults/memory/v2/sim.ts +2 -4
  582. package/src/plugins/defaults/memory/v2/skill-store.ts +2 -4
  583. package/src/plugins/defaults/memory/v2/sweep-job.ts +6 -6
  584. package/src/plugins/defaults/memory/v3/__tests__/carry-integration.test.ts +11 -9
  585. package/src/plugins/defaults/memory/v3/__tests__/dense.test.ts +107 -2
  586. package/src/plugins/defaults/memory/v3/__tests__/gate-flag.test.ts +69 -0
  587. package/src/plugins/defaults/memory/v3/__tests__/gate.test.ts +181 -0
  588. package/src/plugins/defaults/memory/v3/__tests__/live-integration.test.ts +7 -3
  589. package/src/plugins/defaults/memory/v3/__tests__/orchestrate.test.ts +345 -8
  590. package/src/plugins/defaults/memory/v3/__tests__/pool-select.test.ts +1 -4
  591. package/src/plugins/defaults/memory/v3/__tests__/section-needle.test.ts +64 -0
  592. package/src/plugins/defaults/memory/v3/__tests__/shadow-integration.test.ts +18 -13
  593. package/src/plugins/defaults/memory/v3/__tests__/shadow-plugin.test.ts +62 -1
  594. package/src/plugins/defaults/memory/v3/card.ts +1 -4
  595. package/src/plugins/defaults/memory/v3/dense.ts +60 -25
  596. package/src/plugins/defaults/memory/v3/edge.ts +1 -1
  597. package/src/plugins/defaults/memory/v3/gate-flag.ts +20 -0
  598. package/src/plugins/defaults/memory/v3/gate.ts +158 -0
  599. package/src/plugins/defaults/memory/v3/maintain-job.ts +2 -4
  600. package/src/plugins/defaults/memory/v3/orchestrate.ts +186 -25
  601. package/src/plugins/defaults/memory/v3/pool-select.test.ts +7 -9
  602. package/src/plugins/defaults/memory/v3/pool-select.ts +6 -6
  603. package/src/plugins/defaults/memory/v3/prune.ts +2 -2
  604. package/src/plugins/defaults/memory/v3/section-dense-store.ts +8 -11
  605. package/src/plugins/defaults/memory/v3/section-needle.ts +27 -7
  606. package/src/plugins/defaults/memory/v3/shadow-plugin.ts +10 -0
  607. package/src/plugins/defaults/memory/v3-eval/eval-packets.ts +1 -4
  608. package/src/plugins/defaults/title-generate/hooks/user-prompt-submit.ts +5 -0
  609. package/src/plugins/defaults/turn-context/injectors.ts +1 -0
  610. package/src/plugins/defaults/turn-context/unified-turn-context.ts +12 -0
  611. package/src/plugins/injector-registry.ts +13 -2
  612. package/src/plugins/mtime-cache.ts +36 -47
  613. package/src/plugins/pipeline.ts +15 -1
  614. package/src/plugins/types.ts +14 -23
  615. package/src/prompts/__tests__/system-prompt.test.ts +170 -32
  616. package/src/prompts/persona-resolver.ts +13 -9
  617. package/src/prompts/system-prompt.ts +30 -9
  618. package/src/prompts/templates/BOOTSTRAP.md +16 -119
  619. package/src/prompts/templates/SOUL.md +43 -13
  620. package/src/prompts/templates/system-sections.ts +32 -27
  621. package/src/prompts/templates/users/default.md +19 -0
  622. package/src/providers/__tests__/placeholder-sentinels.test.ts +56 -0
  623. package/src/providers/inference/__tests__/base-url-route-validation.test.ts +96 -1
  624. package/src/providers/model-intents.ts +2 -2
  625. package/src/providers/openai/chat-completions-provider.ts +14 -1
  626. package/src/providers/openai/responses-provider.ts +18 -0
  627. package/src/providers/placeholder-sentinels.ts +18 -8
  628. package/src/providers/retry.ts +1 -0
  629. package/src/providers/speech-to-text/__tests__/provider-catalog.test.ts +0 -64
  630. package/src/providers/speech-to-text/__tests__/resolve.test.ts +92 -79
  631. package/src/providers/speech-to-text/deepgram-realtime.test.ts +98 -0
  632. package/src/providers/speech-to-text/deepgram-realtime.ts +62 -3
  633. package/src/providers/speech-to-text/provider-catalog.ts +0 -89
  634. package/src/providers/speech-to-text/resolve.ts +55 -0
  635. package/src/providers/tool-progress-events.test.ts +50 -0
  636. package/src/providers/tool-progress-events.ts +99 -0
  637. package/src/providers/types.ts +1 -1
  638. package/src/providers/vellum-model-routing.test.ts +51 -0
  639. package/src/providers/vellum-model-routing.ts +84 -0
  640. package/src/runtime/AGENTS.md +5 -4
  641. package/src/runtime/__tests__/agent-wake.test.ts +158 -1
  642. package/src/runtime/__tests__/channel-verification-service.test.ts +2 -2
  643. package/src/runtime/__tests__/trust-verdict-consumer.test.ts +37 -8
  644. package/src/runtime/access-request-helper.ts +154 -3
  645. package/src/runtime/actor-trust-resolver.ts +7 -21
  646. package/src/runtime/agent-wake.ts +41 -1
  647. package/src/runtime/assistant-event.ts +86 -12
  648. package/src/runtime/auth/__tests__/route-policy.test.ts +31 -0
  649. package/src/runtime/channel-approval-types.ts +52 -2
  650. package/src/runtime/channel-approvals.ts +23 -8
  651. package/src/runtime/channel-invite-transport.ts +2 -2
  652. package/src/runtime/channel-invite-transports/voice.ts +1 -1
  653. package/src/runtime/channel-readiness-service.ts +3 -5
  654. package/src/runtime/channel-retry-sweep.ts +18 -24
  655. package/src/runtime/channel-verification-service.ts +9 -11
  656. package/src/runtime/finalize-event-delivery.ts +30 -16
  657. package/src/runtime/guardian-action-service.ts +10 -11
  658. package/src/runtime/guardian-reply-router.ts +122 -21
  659. package/src/runtime/http-server.ts +44 -101
  660. package/src/runtime/introduction-policy.test.ts +214 -0
  661. package/src/runtime/introduction-policy.ts +284 -0
  662. package/src/runtime/invite-service.ts +104 -361
  663. package/src/runtime/local-actor-identity.test.ts +38 -0
  664. package/src/runtime/local-actor-identity.ts +14 -0
  665. package/src/runtime/middleware/__tests__/rate-limiter.test.ts +22 -0
  666. package/src/runtime/middleware/rate-limiter.ts +30 -0
  667. package/src/runtime/middleware/twilio-validation.ts +5 -7
  668. package/src/runtime/migrations/__tests__/gcs-signed-url.test.ts +28 -0
  669. package/src/runtime/migrations/origin-mode.ts +6 -6
  670. package/src/runtime/pre-first-message-gate.ts +1 -0
  671. package/src/runtime/routes/__tests__/channel-verification-revoke.test.ts +6 -35
  672. package/src/runtime/routes/__tests__/consolidation-routes.test.ts +24 -3
  673. package/src/runtime/routes/__tests__/contact-routes.test.ts +80 -15
  674. package/src/runtime/routes/__tests__/conversation-list-routes.test.ts +7 -1
  675. package/src/runtime/routes/__tests__/global-search-routes.test.ts +0 -3
  676. package/src/runtime/routes/__tests__/home-feed-routes.test.ts +142 -1
  677. package/src/runtime/routes/__tests__/invite-relay-routes.test.ts +119 -30
  678. package/src/runtime/routes/__tests__/migration-import-allowed-hosts-env.test.ts +70 -0
  679. package/src/runtime/routes/__tests__/monitoring-routes.test.ts +194 -0
  680. package/src/runtime/routes/__tests__/plugins-routes.test.ts +755 -29
  681. package/src/runtime/routes/__tests__/retrospective-routes.test.ts +4 -0
  682. package/src/runtime/routes/__tests__/schedule-routes-create.test.ts +70 -0
  683. package/src/runtime/routes/__tests__/schedule-worker-routes.test.ts +161 -0
  684. package/src/runtime/routes/__tests__/surface-action-routes.test.ts +1 -1
  685. package/src/runtime/routes/__tests__/surface-content-routes.test.ts +1 -1
  686. package/src/runtime/routes/acp-routes.ts +15 -3
  687. package/src/runtime/routes/app-management-routes.ts +4 -7
  688. package/src/runtime/routes/approval-routes.ts +4 -0
  689. package/src/runtime/routes/attachment-routes.ts +54 -3
  690. package/src/runtime/routes/avatar-routes.ts +0 -4
  691. package/src/runtime/routes/background-tool-routes.ts +34 -5
  692. package/src/runtime/routes/btw-routes.ts +32 -4
  693. package/src/runtime/routes/channel-route-shared.ts +18 -14
  694. package/src/runtime/routes/channel-verification-routes.ts +0 -3
  695. package/src/runtime/routes/contact-routes.ts +298 -117
  696. package/src/runtime/routes/conversation-list-routes.ts +6 -0
  697. package/src/runtime/routes/conversation-management-routes.ts +74 -37
  698. package/src/runtime/routes/conversation-query-routes.ts +5 -2
  699. package/src/runtime/routes/conversation-routes.ts +222 -82
  700. package/src/runtime/routes/conversations-import-routes.ts +8 -1
  701. package/src/runtime/routes/credential-prompt-routes.ts +20 -5
  702. package/src/runtime/routes/debug-routes.ts +1 -0
  703. package/src/runtime/routes/documents-routes.ts +5 -2
  704. package/src/runtime/routes/empty-state-greeting-cache.ts +37 -10
  705. package/src/runtime/routes/global-search-routes.ts +2 -1
  706. package/src/runtime/routes/guardian-approval-interception.ts +51 -0
  707. package/src/runtime/routes/home-feed-routes.ts +60 -1
  708. package/src/runtime/routes/identity-routes.ts +4 -87
  709. package/src/runtime/routes/inbound-message-handler.ts +82 -41
  710. package/src/runtime/routes/inbound-stages/acl-enforcement.test.ts +430 -57
  711. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +302 -572
  712. package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +76 -270
  713. package/src/runtime/routes/inbound-stages/background-dispatch.ts +21 -116
  714. package/src/runtime/routes/inbound-stages/edit-intercept.ts +9 -1
  715. package/src/runtime/routes/inbound-stages/escalation-intercept.test.ts +158 -0
  716. package/src/runtime/routes/inbound-stages/escalation-intercept.ts +22 -1
  717. package/src/runtime/routes/index.ts +6 -0
  718. package/src/runtime/routes/inference-provider-connection-routes.ts +22 -16
  719. package/src/runtime/routes/internal-twilio-routes.ts +0 -15
  720. package/src/runtime/routes/messages-lexical-routes.ts +75 -0
  721. package/src/runtime/routes/migration-routes.ts +69 -6
  722. package/src/runtime/routes/monitoring-routes.ts +237 -0
  723. package/src/runtime/routes/plugins-routes.ts +329 -8
  724. package/src/runtime/routes/schedule-routes.ts +49 -8
  725. package/src/runtime/routes/schedule-worker-routes.ts +210 -0
  726. package/src/runtime/routes/secret-routes.ts +1 -1
  727. package/src/runtime/routes/surface-conversation-resolver.ts +1 -0
  728. package/src/runtime/services/__tests__/analyze-conversation.test.ts +54 -9
  729. package/src/runtime/services/__tests__/auto-analysis-enqueue.test.ts +30 -6
  730. package/src/runtime/services/__tests__/conversation-analyze-job.test.ts +43 -8
  731. package/src/runtime/services/__tests__/conversation-serializer.test.ts +20 -0
  732. package/src/runtime/services/analyze-conversation.ts +14 -4
  733. package/src/runtime/services/conversation-serializer.ts +5 -0
  734. package/src/runtime/slack-no-response.ts +47 -0
  735. package/src/runtime/slack-reply-session.test.ts +633 -0
  736. package/src/runtime/slack-reply-session.ts +382 -0
  737. package/src/runtime/slack-task-progress.ts +95 -0
  738. package/src/runtime/sync/resource-sync-events.ts +25 -0
  739. package/src/runtime/tool-grant-request-helper.ts +17 -1
  740. package/src/runtime/trust-class.test.ts +141 -0
  741. package/src/runtime/trust-class.ts +121 -0
  742. package/src/runtime/trust-verdict-consumer.ts +7 -6
  743. package/src/schedule/__tests__/run-script.test.ts +21 -0
  744. package/src/schedule/__tests__/worker-control.test.ts +241 -0
  745. package/src/schedule/run-script.ts +13 -6
  746. package/src/schedule/schedule-usage-store.ts +1 -0
  747. package/src/schedule/scheduler.ts +178 -127
  748. package/src/schedule/worker-control.ts +118 -0
  749. package/src/schedule/worker.ts +131 -0
  750. package/src/skills/__tests__/categories-cache.test.ts +38 -0
  751. package/src/skills/categories-cache.ts +40 -5
  752. package/src/skills/managed-store.ts +41 -6
  753. package/src/skills/validate-input.ts +47 -0
  754. package/src/stt/types.ts +5 -9
  755. package/src/subagent/manager.ts +267 -39
  756. package/src/subagent/types.ts +6 -2
  757. package/src/subagent/validate-allowlists.ts +65 -0
  758. package/src/telemetry/watchdog-direct-emit.test.ts +109 -0
  759. package/src/telemetry/watchdog-direct-emit.ts +89 -0
  760. package/src/tools/acp/list-agents.test.ts +0 -6
  761. package/src/tools/background-tool-registry.ts +61 -0
  762. package/src/tools/document/document-comment-tool.test.ts +4 -0
  763. package/src/tools/host-terminal/host-shell.test.ts +397 -0
  764. package/src/tools/host-terminal/host-shell.ts +203 -14
  765. package/src/tools/skills/find-similar-skills.test.ts +152 -1
  766. package/src/tools/skills/find-similar-skills.ts +30 -4
  767. package/src/tools/skills/load.ts +36 -0
  768. package/src/tools/skills/scaffold-managed.ts +66 -34
  769. package/src/tools/skills/skill-script-runner.ts +17 -0
  770. package/src/tools/skills/skill-tool-factory.ts +5 -1
  771. package/src/tools/terminal/safe-env.ts +3 -0
  772. package/src/tools/terminal/shell.test.ts +177 -0
  773. package/src/tools/terminal/shell.ts +98 -4
  774. package/src/tools/tool-approval-handler.ts +106 -29
  775. package/{node_modules/@vellumai/skill-host-contracts/src → src/tools}/tool-types.ts +16 -17
  776. package/src/tools/types.ts +29 -17
  777. package/src/tools/ui-surface/definitions.ts +3 -1
  778. package/src/tts/__tests__/provider-adapters.test.ts +37 -0
  779. package/src/tts/__tests__/provider-catalog.test.ts +21 -0
  780. package/src/tts/provider-catalog.ts +40 -9
  781. package/src/tts/providers/fish-audio-provider.ts +19 -10
  782. package/src/tts/types.ts +3 -4
  783. package/src/util/__tests__/process-tree.test.ts +10 -2
  784. package/src/util/__tests__/text-spacing.test.ts +53 -0
  785. package/src/util/cgroup-memory.ts +142 -0
  786. package/src/util/image-conversion.ts +281 -0
  787. package/src/util/phone.ts +1 -8
  788. package/src/util/platform.ts +33 -0
  789. package/src/util/process-tree.ts +10 -2
  790. package/src/util/text-spacing.ts +53 -0
  791. package/src/util/worker-process.ts +271 -0
  792. package/src/workflows/journal-store.ts +16 -1
  793. package/src/workflows/library.test.ts +35 -20
  794. package/src/workflows/library.ts +105 -66
  795. package/src/workspace/git-service.ts +1 -0
  796. package/src/workspace/migrations/011-backfill-installation-id.ts +83 -31
  797. package/src/workspace/migrations/041-backfill-google-gmail-settings-scope.ts +41 -22
  798. package/src/workspace/migrations/070-memory-v2-summary-schema-rebuild.ts +1 -1
  799. package/src/workspace/migrations/118-seed-now-md.ts +64 -0
  800. package/src/workspace/migrations/119-strip-persisted-memory-v3-tuning-defaults.ts +169 -0
  801. package/src/workspace/migrations/120-revise-onboarding-threads.ts +47 -0
  802. package/src/workspace/migrations/121-seed-default-user-guardrails.ts +82 -0
  803. package/src/workspace/migrations/122-relocate-default-user-boundary.ts +111 -0
  804. package/src/workspace/migrations/123-swap-quality-profile-to-fable.ts +85 -0
  805. package/src/workspace/migrations/__tests__/119-strip-persisted-memory-v3-tuning-defaults.test.ts +181 -0
  806. package/src/workspace/migrations/registry.ts +12 -0
  807. package/drizzle/0000_dizzy_maggott.sql +0 -301
  808. package/drizzle/meta/0000_snapshot.json +0 -1933
  809. package/drizzle/meta/_journal.json +0 -13
  810. package/node_modules/@vellumai/skill-host-contracts/__tests__/client.test.ts +0 -887
  811. package/node_modules/@vellumai/skill-host-contracts/bun.lock +0 -24
  812. package/node_modules/@vellumai/skill-host-contracts/package.json +0 -18
  813. package/node_modules/@vellumai/skill-host-contracts/src/assistant-event.ts +0 -97
  814. package/node_modules/@vellumai/skill-host-contracts/src/client.ts +0 -1349
  815. package/node_modules/@vellumai/skill-host-contracts/src/index.ts +0 -6
  816. package/node_modules/@vellumai/skill-host-contracts/src/runtime-mode.ts +0 -11
  817. package/node_modules/@vellumai/skill-host-contracts/src/server-message.ts +0 -32
  818. package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +0 -333
  819. package/node_modules/@vellumai/skill-host-contracts/tsconfig.json +0 -20
  820. package/node_modules/@vellumai/skill-host-contracts/tsconfig.test.json +0 -12
  821. package/src/__tests__/invite-redemption-service.test.ts +0 -1180
  822. package/src/__tests__/invite-service-ipc.test.ts +0 -350
  823. package/src/__tests__/job-handler-registry-guard.test.ts +0 -125
  824. package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +0 -203
  825. package/src/__tests__/relay-server.test.ts +0 -6153
  826. package/src/__tests__/telephony-stt-routing.test.ts +0 -329
  827. package/src/__tests__/voice-invite-redemption.test.ts +0 -702
  828. package/src/calls/relay-server.ts +0 -2463
  829. package/src/calls/telephony-stt-routing.ts +0 -145
  830. package/src/contacts/__tests__/contacts-write-revoke-relay.test.ts +0 -128
  831. package/src/daemon/__tests__/daemon-skill-host.test.ts +0 -273
  832. package/src/daemon/daemon-skill-host.ts +0 -262
  833. package/src/daemon/message-types/meet.ts +0 -143
  834. package/src/daemon/shutdown-registry.ts +0 -40
  835. package/src/ipc/__tests__/skill-server-bidirectional.test.ts +0 -253
  836. package/src/ipc/__tests__/skill-server.test.ts +0 -182
  837. package/src/ipc/skill-ipc-types.ts +0 -54
  838. package/src/ipc/skill-routes/__tests__/config.test.ts +0 -146
  839. package/src/ipc/skill-routes/__tests__/events-ipc.test.ts +0 -448
  840. package/src/ipc/skill-routes/__tests__/identity.test.ts +0 -62
  841. package/src/ipc/skill-routes/__tests__/log.test.ts +0 -133
  842. package/src/ipc/skill-routes/__tests__/memory.test.ts +0 -203
  843. package/src/ipc/skill-routes/__tests__/platform.test.ts +0 -111
  844. package/src/ipc/skill-routes/__tests__/providers.test.ts +0 -265
  845. package/src/ipc/skill-routes/__tests__/registries.test.ts +0 -400
  846. package/src/ipc/skill-routes/config.ts +0 -47
  847. package/src/ipc/skill-routes/events.ts +0 -147
  848. package/src/ipc/skill-routes/identity.ts +0 -21
  849. package/src/ipc/skill-routes/index.ts +0 -37
  850. package/src/ipc/skill-routes/log.ts +0 -40
  851. package/src/ipc/skill-routes/memory.ts +0 -92
  852. package/src/ipc/skill-routes/platform.ts +0 -39
  853. package/src/ipc/skill-routes/providers.ts +0 -162
  854. package/src/ipc/skill-routes/registries.ts +0 -338
  855. package/src/ipc/skill-server.ts +0 -831
  856. package/src/ipc/skill-socket-path.ts +0 -20
  857. package/src/jobs/register-job-handlers.ts +0 -74
  858. package/src/persistence/invite-store.ts +0 -481
  859. package/src/plugins/job-handler-registry.ts +0 -94
  860. package/src/providers/cache-control.ts +0 -26
  861. package/src/runtime/__tests__/runtime-mode.test.ts +0 -62
  862. package/src/runtime/invite-redemption-service.ts +0 -828
  863. package/src/runtime/invite-redemption-templates.ts +0 -46
  864. package/src/runtime/runtime-mode.ts +0 -40
  865. package/src/runtime/slack-dm-text-delivery.ts +0 -177
  866. package/src/util/voice-code.ts +0 -31
package/openapi.yaml CHANGED
@@ -3,7 +3,7 @@
3
3
  openapi: 3.1.0
4
4
  info:
5
5
  title: Vellum Assistant API
6
- version: 0.10.4
6
+ version: 0.10.5
7
7
  description: Auto-generated OpenAPI specification for the Vellum Assistant runtime HTTP server.
8
8
  servers:
9
9
  - url: http://127.0.0.1:7821
@@ -2310,8 +2310,49 @@ paths:
2310
2310
  - command
2311
2311
  - startedAt
2312
2312
  additionalProperties: false
2313
+ completed:
2314
+ type: array
2315
+ items:
2316
+ type: object
2317
+ properties:
2318
+ id:
2319
+ type: string
2320
+ toolName:
2321
+ type: string
2322
+ conversationId:
2323
+ type: string
2324
+ command:
2325
+ type: string
2326
+ startedAt:
2327
+ type: number
2328
+ status:
2329
+ type: string
2330
+ enum:
2331
+ - completed
2332
+ - failed
2333
+ - cancelled
2334
+ exitCode:
2335
+ anyOf:
2336
+ - type: number
2337
+ - type: "null"
2338
+ output:
2339
+ type: string
2340
+ completedAt:
2341
+ type: number
2342
+ required:
2343
+ - id
2344
+ - toolName
2345
+ - conversationId
2346
+ - command
2347
+ - startedAt
2348
+ - status
2349
+ - exitCode
2350
+ - output
2351
+ - completedAt
2352
+ additionalProperties: false
2313
2353
  required:
2314
2354
  - tools
2355
+ - completed
2315
2356
  additionalProperties: false
2316
2357
  /v1/background-tools/cancel:
2317
2358
  post:
@@ -3359,6 +3400,9 @@ paths:
3359
3400
  content:
3360
3401
  type: string
3361
3402
  description: User prompt content
3403
+ clientTimezone:
3404
+ description: IANA timezone reported by the active client
3405
+ type: string
3362
3406
  required:
3363
3407
  - conversationKey
3364
3408
  - content
@@ -4027,6 +4071,8 @@ paths:
4027
4071
  type: boolean
4028
4072
  account:
4029
4073
  type: string
4074
+ actorTeamId:
4075
+ type: string
4030
4076
  admissionPolicy:
4031
4077
  type: string
4032
4078
  enum:
@@ -4087,9 +4133,17 @@ paths:
4087
4133
  - type: "null"
4088
4134
  memberDisplayName:
4089
4135
  type: string
4136
+ interactionCount:
4137
+ type: number
4138
+ lastInteraction:
4139
+ anyOf:
4140
+ - type: number
4141
+ - type: "null"
4090
4142
  required:
4091
4143
  - trustClass
4092
4144
  - canonicalSenderId
4145
+ emailProvider:
4146
+ type: string
4093
4147
  emailSubject:
4094
4148
  type: string
4095
4149
  emailRecipient:
@@ -4591,6 +4645,162 @@ paths:
4591
4645
  required: true
4592
4646
  schema:
4593
4647
  type: string
4648
+ requestBody:
4649
+ required: true
4650
+ content:
4651
+ application/json:
4652
+ schema:
4653
+ type: object
4654
+ properties:
4655
+ provider:
4656
+ $ref: "#/components/schemas/LLMProvider"
4657
+ model:
4658
+ type: string
4659
+ minLength: 1
4660
+ maxTokens:
4661
+ type: integer
4662
+ exclusiveMinimum: 0
4663
+ maximum: 9007199254740991
4664
+ effort:
4665
+ type: string
4666
+ enum:
4667
+ - none
4668
+ - low
4669
+ - medium
4670
+ - high
4671
+ - xhigh
4672
+ - max
4673
+ speed:
4674
+ type: string
4675
+ enum:
4676
+ - standard
4677
+ - fast
4678
+ verbosity:
4679
+ type: string
4680
+ enum:
4681
+ - low
4682
+ - medium
4683
+ - high
4684
+ temperature:
4685
+ anyOf:
4686
+ - type: number
4687
+ minimum: 0
4688
+ maximum: 2
4689
+ - type: "null"
4690
+ topP:
4691
+ anyOf:
4692
+ - type: number
4693
+ minimum: 0
4694
+ maximum: 1
4695
+ - type: "null"
4696
+ thinking:
4697
+ type: object
4698
+ properties:
4699
+ enabled:
4700
+ type: boolean
4701
+ streamThinking:
4702
+ type: boolean
4703
+ level:
4704
+ type: string
4705
+ enum:
4706
+ - minimal
4707
+ - low
4708
+ - medium
4709
+ - high
4710
+ contextWindow:
4711
+ type: object
4712
+ properties:
4713
+ enabled:
4714
+ type: boolean
4715
+ maxInputTokens:
4716
+ type: integer
4717
+ exclusiveMinimum: 0
4718
+ maximum: 9007199254740991
4719
+ targetBudgetRatio:
4720
+ type: number
4721
+ exclusiveMinimum: 0
4722
+ maximum: 1
4723
+ compactThreshold:
4724
+ type: number
4725
+ exclusiveMinimum: 0
4726
+ maximum: 1
4727
+ summaryBudgetRatio:
4728
+ type: number
4729
+ exclusiveMinimum: 0
4730
+ maximum: 1
4731
+ overflowRecovery:
4732
+ type: object
4733
+ properties:
4734
+ enabled:
4735
+ type: boolean
4736
+ safetyMarginRatio:
4737
+ type: number
4738
+ exclusiveMinimum: 0
4739
+ exclusiveMaximum: 1
4740
+ maxAttempts:
4741
+ type: integer
4742
+ exclusiveMinimum: 0
4743
+ maximum: 9007199254740991
4744
+ interactiveLatestTurnCompression:
4745
+ type: string
4746
+ enum:
4747
+ - truncate
4748
+ - summarize
4749
+ - drop
4750
+ nonInteractiveLatestTurnCompression:
4751
+ type: string
4752
+ enum:
4753
+ - truncate
4754
+ - summarize
4755
+ - drop
4756
+ openrouter:
4757
+ type: object
4758
+ properties:
4759
+ only:
4760
+ type: array
4761
+ items:
4762
+ type: string
4763
+ minLength: 1
4764
+ logitBias:
4765
+ type: string
4766
+ enum:
4767
+ - suppress-cjk
4768
+ disableCache:
4769
+ type: boolean
4770
+ source:
4771
+ type: string
4772
+ enum:
4773
+ - managed
4774
+ - user
4775
+ label:
4776
+ anyOf:
4777
+ - type: string
4778
+ minLength: 1
4779
+ - type: "null"
4780
+ description:
4781
+ type: string
4782
+ provider_connection:
4783
+ type: string
4784
+ minLength: 1
4785
+ status:
4786
+ anyOf:
4787
+ - $ref: "#/components/schemas/ProfileStatus"
4788
+ - type: "null"
4789
+ mix:
4790
+ minItems: 2
4791
+ type: array
4792
+ items:
4793
+ type: object
4794
+ properties:
4795
+ profile:
4796
+ type: string
4797
+ minLength: 1
4798
+ weight:
4799
+ type: number
4800
+ exclusiveMinimum: 0
4801
+ required:
4802
+ - profile
4803
+ - weight
4594
4804
  responses:
4595
4805
  "200":
4596
4806
  description: Successful response
@@ -4958,7 +5168,9 @@ paths:
4958
5168
  - type: number
4959
5169
  - type: "null"
4960
5170
  interactionCount:
4961
- type: number
5171
+ anyOf:
5172
+ - type: number
5173
+ - type: "null"
4962
5174
  createdAt:
4963
5175
  type: number
4964
5176
  updatedAt:
@@ -4999,7 +5211,9 @@ paths:
4999
5211
  - type: number
5000
5212
  - type: "null"
5001
5213
  interactionCount:
5002
- type: number
5214
+ anyOf:
5215
+ - type: number
5216
+ - type: "null"
5003
5217
  lastInteraction:
5004
5218
  anyOf:
5005
5219
  - type: number
@@ -5118,7 +5332,9 @@ paths:
5118
5332
  - type: number
5119
5333
  - type: "null"
5120
5334
  interactionCount:
5121
- type: number
5335
+ anyOf:
5336
+ - type: number
5337
+ - type: "null"
5122
5338
  createdAt:
5123
5339
  type: number
5124
5340
  updatedAt:
@@ -5159,7 +5375,9 @@ paths:
5159
5375
  - type: number
5160
5376
  - type: "null"
5161
5377
  interactionCount:
5162
- type: number
5378
+ anyOf:
5379
+ - type: number
5380
+ - type: "null"
5163
5381
  lastInteraction:
5164
5382
  anyOf:
5165
5383
  - type: number
@@ -5247,7 +5465,9 @@ paths:
5247
5465
  - type: number
5248
5466
  - type: "null"
5249
5467
  interactionCount:
5250
- type: number
5468
+ anyOf:
5469
+ - type: number
5470
+ - type: "null"
5251
5471
  createdAt:
5252
5472
  type: number
5253
5473
  updatedAt:
@@ -5288,7 +5508,9 @@ paths:
5288
5508
  - type: number
5289
5509
  - type: "null"
5290
5510
  interactionCount:
5291
- type: number
5511
+ anyOf:
5512
+ - type: number
5513
+ - type: "null"
5292
5514
  lastInteraction:
5293
5515
  anyOf:
5294
5516
  - type: number
@@ -5414,6 +5636,9 @@ paths:
5414
5636
  expectedExternalUserId:
5415
5637
  type: string
5416
5638
  description: Expected user ID (E.164 for phone)
5639
+ sourceConversationId:
5640
+ type: string
5641
+ description: Conversation the invite was created from (opaque)
5417
5642
  required:
5418
5643
  - contactId
5419
5644
  responses:
@@ -5462,7 +5687,9 @@ paths:
5462
5687
  post:
5463
5688
  operationId: contacts_invites_by_id_call_post
5464
5689
  summary: Trigger invite call
5465
- description: Trigger an outbound call for a phone invite.
5690
+ description:
5691
+ "Trigger an outbound call for a phone invite. Gateway-only: the gateway validates its canonical invite row
5692
+ and supplies the resolved call fields in the body."
5466
5693
  tags:
5467
5694
  - contacts
5468
5695
  parameters:
@@ -5471,6 +5698,28 @@ paths:
5471
5698
  required: true
5472
5699
  schema:
5473
5700
  type: string
5701
+ requestBody:
5702
+ required: true
5703
+ content:
5704
+ application/json:
5705
+ schema:
5706
+ type: object
5707
+ properties:
5708
+ phoneNumber:
5709
+ type: string
5710
+ description: E.164 number the invite call dials (invite's bound caller)
5711
+ friendName:
5712
+ description: Invitee display name for the call greeting
5713
+ anyOf:
5714
+ - type: string
5715
+ - type: "null"
5716
+ guardianName:
5717
+ description: Guardian display label recorded on the invite
5718
+ anyOf:
5719
+ - type: string
5720
+ - type: "null"
5721
+ required:
5722
+ - phoneNumber
5474
5723
  responses:
5475
5724
  "200":
5476
5725
  description: Successful response
@@ -5505,34 +5754,32 @@ paths:
5505
5754
  type: object
5506
5755
  properties:
5507
5756
  token:
5508
- type: string
5509
5757
  description: Invite token (token-based redemption)
5510
- code:
5511
5758
  type: string
5759
+ code:
5512
5760
  description: Voice code (voice-code redemption)
5513
- callerExternalUserId:
5514
5761
  type: string
5762
+ callerExternalUserId:
5515
5763
  description: Caller E.164 phone (voice-code)
5516
- externalUserId:
5517
5764
  type: string
5765
+ externalUserId:
5518
5766
  description: External user ID (token-based)
5519
- externalChatId:
5520
5767
  type: string
5768
+ externalChatId:
5521
5769
  description: External chat ID (token-based)
5522
- sourceChannel:
5523
5770
  type: string
5771
+ sourceChannel:
5524
5772
  description: Source channel (token-based)
5525
- assistantId:
5526
5773
  type: string
5774
+ displayName:
5775
+ description: Sender display name (token-based)
5776
+ type: string
5777
+ username:
5778
+ description: Sender username (token-based)
5779
+ type: string
5780
+ assistantId:
5527
5781
  description: Assistant ID (voice-code)
5528
- required:
5529
- - token
5530
- - code
5531
- - callerExternalUserId
5532
- - externalUserId
5533
- - externalChatId
5534
- - sourceChannel
5535
- - assistantId
5782
+ type: string
5536
5783
  responses:
5537
5784
  "200":
5538
5785
  description: Successful response
@@ -5621,7 +5868,9 @@ paths:
5621
5868
  - type: number
5622
5869
  - type: "null"
5623
5870
  interactionCount:
5624
- type: number
5871
+ anyOf:
5872
+ - type: number
5873
+ - type: "null"
5625
5874
  createdAt:
5626
5875
  type: number
5627
5876
  updatedAt:
@@ -5662,7 +5911,9 @@ paths:
5662
5911
  - type: number
5663
5912
  - type: "null"
5664
5913
  interactionCount:
5665
- type: number
5914
+ anyOf:
5915
+ - type: number
5916
+ - type: "null"
5666
5917
  lastInteraction:
5667
5918
  anyOf:
5668
5919
  - type: number
@@ -5815,7 +6066,9 @@ paths:
5815
6066
  - type: number
5816
6067
  - type: "null"
5817
6068
  interactionCount:
5818
- type: number
6069
+ anyOf:
6070
+ - type: number
6071
+ - type: "null"
5819
6072
  createdAt:
5820
6073
  type: number
5821
6074
  updatedAt:
@@ -5856,7 +6109,9 @@ paths:
5856
6109
  - type: number
5857
6110
  - type: "null"
5858
6111
  interactionCount:
5859
- type: number
6112
+ anyOf:
6113
+ - type: number
6114
+ - type: "null"
5860
6115
  lastInteraction:
5861
6116
  anyOf:
5862
6117
  - type: number
@@ -6262,6 +6517,12 @@ paths:
6262
6517
  type: number
6263
6518
  inferenceProfile:
6264
6519
  type: string
6520
+ enabledPlugins:
6521
+ anyOf:
6522
+ - type: array
6523
+ items:
6524
+ type: string
6525
+ - type: "null"
6265
6526
  isProcessing:
6266
6527
  type: boolean
6267
6528
  required:
@@ -6601,6 +6862,12 @@ paths:
6601
6862
  type: number
6602
6863
  inferenceProfile:
6603
6864
  type: string
6865
+ enabledPlugins:
6866
+ anyOf:
6867
+ - type: array
6868
+ items:
6869
+ type: string
6870
+ - type: "null"
6604
6871
  isProcessing:
6605
6872
  type: boolean
6606
6873
  required:
@@ -6802,6 +7069,12 @@ paths:
6802
7069
  type: number
6803
7070
  inferenceProfile:
6804
7071
  type: string
7072
+ enabledPlugins:
7073
+ anyOf:
7074
+ - type: array
7075
+ items:
7076
+ type: string
7077
+ - type: "null"
6805
7078
  isProcessing:
6806
7079
  type: boolean
6807
7080
  required:
@@ -7003,12 +7276,62 @@ paths:
7003
7276
  additionalProperties: false
7004
7277
  required:
7005
7278
  - conversationId
7006
- - events
7279
+ - events
7280
+ additionalProperties: false
7281
+ "400":
7282
+ description: Returned when the callId is missing or refers to a call in a different conversation.
7283
+ "404":
7284
+ description: Returned when the conversation or the referenced LLM call does not exist.
7285
+ /v1/conversations/{id}/enabledplugins:
7286
+ put:
7287
+ operationId: conversations_by_id_enabledplugins_put
7288
+ summary: Set conversation enabled plugins
7289
+ description:
7290
+ Scope a single conversation to a subset of installed plugins (first-party defaults are always available).
7291
+ Pass null to clear the scope back to the default (all enabled plugins).
7292
+ tags:
7293
+ - conversations
7294
+ parameters:
7295
+ - name: id
7296
+ in: path
7297
+ required: true
7298
+ schema:
7299
+ type: string
7300
+ requestBody:
7301
+ required: true
7302
+ content:
7303
+ application/json:
7304
+ schema:
7305
+ type: object
7306
+ properties:
7307
+ enabledPlugins:
7308
+ anyOf:
7309
+ - type: array
7310
+ items:
7311
+ type: string
7312
+ - type: "null"
7313
+ required:
7314
+ - enabledPlugins
7315
+ responses:
7316
+ "200":
7317
+ description: Successful response
7318
+ content:
7319
+ application/json:
7320
+ schema:
7321
+ type: object
7322
+ properties:
7323
+ conversationId:
7324
+ type: string
7325
+ enabledPlugins:
7326
+ anyOf:
7327
+ - type: array
7328
+ items:
7329
+ type: string
7330
+ - type: "null"
7331
+ required:
7332
+ - conversationId
7333
+ - enabledPlugins
7007
7334
  additionalProperties: false
7008
- "400":
7009
- description: Returned when the callId is missing or refers to a call in a different conversation.
7010
- "404":
7011
- description: Returned when the conversation or the referenced LLM call does not exist.
7012
7335
  /v1/conversations/{id}/inference-profile:
7013
7336
  put:
7014
7337
  operationId: conversations_by_id_inferenceprofile_put
@@ -7213,22 +7536,6 @@ paths:
7213
7536
  responses:
7214
7537
  "200":
7215
7538
  description: Successful response
7216
- /v1/conversations/{id}/regenerate:
7217
- post:
7218
- operationId: conversations_by_id_regenerate_post
7219
- summary: Regenerate response
7220
- description: Re-run the assistant for the last user message in a conversation.
7221
- tags:
7222
- - conversations
7223
- parameters:
7224
- - name: id
7225
- in: path
7226
- required: true
7227
- schema:
7228
- type: string
7229
- responses:
7230
- "202":
7231
- description: Successful response
7232
7539
  /v1/conversations/{id}/slash:
7233
7540
  post:
7234
7541
  operationId: conversations_by_id_slash_post
@@ -7955,6 +8262,12 @@ paths:
7955
8262
  type: number
7956
8263
  inferenceProfile:
7957
8264
  type: string
8265
+ enabledPlugins:
8266
+ anyOf:
8267
+ - type: array
8268
+ items:
8269
+ type: string
8270
+ - type: "null"
7958
8271
  isProcessing:
7959
8272
  type: boolean
7960
8273
  required:
@@ -9407,6 +9720,8 @@ paths:
9407
9720
  properties:
9408
9721
  ok:
9409
9722
  type: boolean
9723
+ cancelled:
9724
+ type: boolean
9410
9725
  error:
9411
9726
  type: string
9412
9727
  service:
@@ -12653,6 +12968,68 @@ paths:
12653
12968
  description: Feed item or action not found
12654
12969
  "500":
12655
12970
  description: Failed to create conversation
12971
+ /v1/home/feed/mark-all:
12972
+ post:
12973
+ operationId: home_feed_markall_post
12974
+ summary: Bulk update home feed item statuses
12975
+ description:
12976
+ Flip every home feed item currently at one of the `from` statuses to the single `to` status. Returns the
12977
+ count of items whose status actually changed (items already at `to`, or outside `from`, are left untouched).
12978
+ Used to implement 'Mark all as read' (from=['new'], to='seen') and 'Clear all' (from=['new','seen','acted_on'],
12979
+ to='dismissed').
12980
+ tags:
12981
+ - home
12982
+ requestBody:
12983
+ required: true
12984
+ content:
12985
+ application/json:
12986
+ schema:
12987
+ type: object
12988
+ properties:
12989
+ from:
12990
+ minItems: 1
12991
+ type: array
12992
+ items:
12993
+ type: string
12994
+ enum:
12995
+ - new
12996
+ - seen
12997
+ - acted_on
12998
+ - dismissed
12999
+ to:
13000
+ type: string
13001
+ enum:
13002
+ - new
13003
+ - seen
13004
+ - acted_on
13005
+ - dismissed
13006
+ ids:
13007
+ type: array
13008
+ items:
13009
+ type: string
13010
+ required:
13011
+ - from
13012
+ - to
13013
+ responses:
13014
+ "200":
13015
+ description: Successful response
13016
+ content:
13017
+ application/json:
13018
+ schema:
13019
+ type: object
13020
+ properties:
13021
+ updatedCount:
13022
+ type: integer
13023
+ minimum: 0
13024
+ maximum: 9007199254740991
13025
+ updatedAt:
13026
+ type: string
13027
+ required:
13028
+ - updatedCount
13029
+ - updatedAt
13030
+ additionalProperties: false
13031
+ "500":
13032
+ description: Failed to persist bulk status update
12656
13033
  /v1/home/feed/query:
12657
13034
  post:
12658
13035
  operationId: home_feed_query_post
@@ -15313,16 +15690,6 @@ paths:
15313
15690
  required:
15314
15691
  - skipped
15315
15692
  additionalProperties: false
15316
- /v1/internal/twilio/connect-action:
15317
- post:
15318
- operationId: internal_twilio_connectaction_post
15319
- summary: Internal Twilio connect-action
15320
- description: Gateway-to-runtime forwarding for ConversationRelay connect-action callback.
15321
- tags:
15322
- - internal
15323
- responses:
15324
- "200":
15325
- description: Successful response
15326
15693
  /v1/internal/twilio/status:
15327
15694
  post:
15328
15695
  operationId: internal_twilio_status_post
@@ -17733,6 +18100,46 @@ paths:
17733
18100
  required:
17734
18101
  - acpSessionId
17735
18102
  additionalProperties: false
18103
+ backgroundEventNotification:
18104
+ type: boolean
18105
+ backgroundToolCompletion:
18106
+ type: object
18107
+ properties:
18108
+ id:
18109
+ type: string
18110
+ toolName:
18111
+ type: string
18112
+ conversationId:
18113
+ type: string
18114
+ command:
18115
+ type: string
18116
+ startedAt:
18117
+ type: number
18118
+ status:
18119
+ type: string
18120
+ enum:
18121
+ - completed
18122
+ - failed
18123
+ - cancelled
18124
+ exitCode:
18125
+ anyOf:
18126
+ - type: number
18127
+ - type: "null"
18128
+ output:
18129
+ type: string
18130
+ completedAt:
18131
+ type: number
18132
+ required:
18133
+ - id
18134
+ - toolName
18135
+ - conversationId
18136
+ - command
18137
+ - startedAt
18138
+ - status
18139
+ - exitCode
18140
+ - output
18141
+ - completedAt
18142
+ additionalProperties: false
17736
18143
  slackMessage:
17737
18144
  type: object
17738
18145
  properties:
@@ -17894,6 +18301,11 @@ paths:
17894
18301
  type: string
17895
18302
  clientTimezone:
17896
18303
  type: string
18304
+ clientOs:
18305
+ description:
18306
+ Client OS surface ("web" | "ios" | "macos" | "android"), reported separately from `interface`. Drives the
18307
+ per-turn `client_os` context only; does not affect transport/host-proxy capabilities.
18308
+ type: string
17897
18309
  clientMessageId:
17898
18310
  type: string
17899
18311
  description:
@@ -17904,6 +18316,17 @@ paths:
17904
18316
  anyOf:
17905
18317
  - type: string
17906
18318
  - type: "null"
18319
+ enabledPlugins:
18320
+ description:
18321
+ Plugin ids that scope this conversation to a subset of installed plugins (first-party defaults are always
18322
+ available). When present on a message, it sets/updates the conversation's plugin scope (the web
18323
+ client sends it only on the first message of a new chat). null clears the scope to default (all
18324
+ enabled plugins); omitting the field leaves the existing scope unchanged.
18325
+ anyOf:
18326
+ - type: array
18327
+ items:
18328
+ type: string
18329
+ - type: "null"
17907
18330
  riskThreshold:
17908
18331
  type: string
17909
18332
  enum:
@@ -17911,6 +18334,15 @@ paths:
17911
18334
  - low
17912
18335
  - medium
17913
18336
  - high
18337
+ hidden:
18338
+ description:
18339
+ "When true, persist the user message but suppress it from the UI transcript (it stays in LLM-side history
18340
+ and still drives the turn). Used for machine signals the user never typed (proactive-greeting
18341
+ priming, channel-setup wizard close). Suppression covers the queued path too: a hidden send that
18342
+ lands mid-turn returns { queued: true, requestId } but never appears in list-messages queued
18343
+ snapshots, emits no echo, and does not supersede pending interactions. Honored on the standard send
18344
+ path only — slash-command content bypasses it."
18345
+ type: boolean
17914
18346
  onboarding:
17915
18347
  type: object
17916
18348
  properties:
@@ -18589,6 +19021,30 @@ paths:
18589
19021
  responses:
18590
19022
  "200":
18591
19023
  description: Successful response
19024
+ /v1/messages/lexical/backfill:
19025
+ post:
19026
+ operationId: messages_lexical_backfill_post
19027
+ summary: Enqueue a resumable backfill of messages into the lexical index
19028
+ description:
19029
+ "Enqueues the cursor-checkpointed backfill job that indexes existing messages into the Qdrant lexical
19030
+ (BM25-style) collection in batches. Resumable and idempotent — re-running continues from the last checkpoint.
19031
+ Pass `force: true` to reset the cursor and re-index from the beginning. The same backfill is also auto-enqueued
19032
+ once per instance on upgrade at assistant startup."
19033
+ tags:
19034
+ - memory
19035
+ requestBody:
19036
+ required: true
19037
+ content:
19038
+ application/json:
19039
+ schema:
19040
+ type: object
19041
+ properties:
19042
+ force:
19043
+ type: boolean
19044
+ additionalProperties: false
19045
+ responses:
19046
+ "200":
19047
+ description: Successful response
18592
19048
  /v1/messages/queued/{id}:
18593
19049
  delete:
18594
19050
  operationId: messages_queued_by_id_delete
@@ -19040,6 +19496,175 @@ paths:
19040
19496
  responses:
19041
19497
  "200":
19042
19498
  description: Successful response
19499
+ /v1/monitoring/start:
19500
+ post:
19501
+ operationId: monitoring_start_post
19502
+ summary: Start the resource monitor
19503
+ description: Spawns (or reuses) the resource monitor process as a child of the daemon and enables monitoring.enabled.
19504
+ tags:
19505
+ - system
19506
+ responses:
19507
+ "200":
19508
+ description: Successful response
19509
+ content:
19510
+ application/json:
19511
+ schema:
19512
+ type: object
19513
+ properties:
19514
+ pid:
19515
+ type: number
19516
+ alreadyRunning:
19517
+ type: boolean
19518
+ monitoringEnabled:
19519
+ type: boolean
19520
+ const: true
19521
+ pidPath:
19522
+ type: string
19523
+ required:
19524
+ - pid
19525
+ - alreadyRunning
19526
+ - monitoringEnabled
19527
+ - pidPath
19528
+ additionalProperties: false
19529
+ /v1/monitoring/status:
19530
+ get:
19531
+ operationId: monitoring_status_get
19532
+ summary: Resource monitor status
19533
+ description:
19534
+ Reports the resource monitor process state, monitoring.enabled, the forensics data directory, and the most
19535
+ recent persisted memory/disk sample.
19536
+ tags:
19537
+ - system
19538
+ responses:
19539
+ "200":
19540
+ description: Successful response
19541
+ content:
19542
+ application/json:
19543
+ schema:
19544
+ type: object
19545
+ properties:
19546
+ status:
19547
+ type: string
19548
+ enum:
19549
+ - running
19550
+ - not_running
19551
+ pid:
19552
+ type: number
19553
+ monitoringEnabled:
19554
+ type: boolean
19555
+ dataDir:
19556
+ type: string
19557
+ latestSample:
19558
+ anyOf:
19559
+ - type: object
19560
+ properties:
19561
+ ts:
19562
+ type: number
19563
+ memory:
19564
+ anyOf:
19565
+ - type: object
19566
+ properties:
19567
+ currentBytes:
19568
+ type: number
19569
+ limitBytes:
19570
+ anyOf:
19571
+ - type: number
19572
+ - type: "null"
19573
+ peakBytes:
19574
+ anyOf:
19575
+ - type: number
19576
+ - type: "null"
19577
+ ratio:
19578
+ anyOf:
19579
+ - type: number
19580
+ - type: "null"
19581
+ required:
19582
+ - currentBytes
19583
+ - limitBytes
19584
+ - peakBytes
19585
+ - ratio
19586
+ additionalProperties: false
19587
+ - type: "null"
19588
+ events:
19589
+ anyOf:
19590
+ - type: object
19591
+ properties:
19592
+ low:
19593
+ type: number
19594
+ high:
19595
+ type: number
19596
+ max:
19597
+ type: number
19598
+ oom:
19599
+ type: number
19600
+ oomKill:
19601
+ type: number
19602
+ required:
19603
+ - low
19604
+ - high
19605
+ - max
19606
+ - oom
19607
+ - oomKill
19608
+ additionalProperties: false
19609
+ - type: "null"
19610
+ disk:
19611
+ anyOf:
19612
+ - type: object
19613
+ properties:
19614
+ path:
19615
+ type: string
19616
+ usedMb:
19617
+ type: number
19618
+ totalMb:
19619
+ type: number
19620
+ freeMb:
19621
+ type: number
19622
+ required:
19623
+ - path
19624
+ - usedMb
19625
+ - totalMb
19626
+ - freeMb
19627
+ additionalProperties: false
19628
+ - type: "null"
19629
+ required:
19630
+ - ts
19631
+ - memory
19632
+ - events
19633
+ - disk
19634
+ additionalProperties: false
19635
+ - type: "null"
19636
+ required:
19637
+ - status
19638
+ - monitoringEnabled
19639
+ - dataDir
19640
+ - latestSample
19641
+ additionalProperties: false
19642
+ /v1/monitoring/stop:
19643
+ post:
19644
+ operationId: monitoring_stop_post
19645
+ summary: Stop the resource monitor
19646
+ description: Disables monitoring.enabled and SIGTERMs the resource monitor process if it is running.
19647
+ tags:
19648
+ - system
19649
+ responses:
19650
+ "200":
19651
+ description: Successful response
19652
+ content:
19653
+ application/json:
19654
+ schema:
19655
+ type: object
19656
+ properties:
19657
+ monitoringWasRunning:
19658
+ type: boolean
19659
+ pid:
19660
+ type: number
19661
+ monitoringEnabled:
19662
+ type: boolean
19663
+ const: false
19664
+ required:
19665
+ - monitoringWasRunning
19666
+ - monitoringEnabled
19667
+ additionalProperties: false
19043
19668
  /v1/notification-intent-result:
19044
19669
  post:
19045
19670
  operationId: notificationintentresult_post
@@ -20592,7 +21217,10 @@ paths:
20592
21217
  description:
20593
21218
  Return one entry per directory under `<workspaceDir>/plugins/`, sorted alphabetically. Matches the CLI's
20594
21219
  `assistant plugins list`. Supports `?q=<text>` for case-insensitive substring matching across plugin id, name,
20595
- and description.
21220
+ and description. Each entry carries a `category` (marketplace slug from the Skills taxonomy, or `null` for
21221
+ non-marketplace installs); the response also reports `categoryCounts` (per-category totals, computed before the
21222
+ category filter) and `totalCount`. `?category=<slug>` filters the returned plugins by category server-side while
21223
+ leaving the counts unfiltered. A marketplace outage degrades `category` to `null` without failing the list.
20596
21224
  tags:
20597
21225
  - plugins
20598
21226
  parameters:
@@ -20602,6 +21230,12 @@ paths:
20602
21230
  schema:
20603
21231
  type: string
20604
21232
  description: Optional substring filter applied to plugin id, name, and description.
21233
+ - name: category
21234
+ in: query
21235
+ required: false
21236
+ schema:
21237
+ type: string
21238
+ description: Filter installed plugins by category slug (Skills taxonomy).
20605
21239
  responses:
20606
21240
  "200":
20607
21241
  description: Successful response
@@ -20621,6 +21255,11 @@ paths:
20621
21255
  name:
20622
21256
  type: string
20623
21257
  description: Display name. Equal to `id` today.
21258
+ enabled:
21259
+ type: boolean
21260
+ description:
21261
+ Whether the plugin is active in this workspace. `false` when a `.disabled` sentinel is present under its
21262
+ directory; `true` otherwise.
20624
21263
  description:
20625
21264
  anyOf:
20626
21265
  - type: string
@@ -20639,12 +21278,30 @@ paths:
20639
21278
  type: array
20640
21279
  items:
20641
21280
  type: string
21281
+ category:
21282
+ description:
21283
+ Marketplace category slug (Skills taxonomy); null when origin/category is unknown, e.g. non-marketplace
21284
+ installs.
21285
+ anyOf:
21286
+ - type: string
21287
+ - type: "null"
20642
21288
  required:
20643
21289
  - id
20644
21290
  - name
21291
+ - enabled
20645
21292
  - description
20646
21293
  - version
20647
21294
  additionalProperties: false
21295
+ categoryCounts:
21296
+ description: Installed plugins per category (before the category filter is applied).
21297
+ type: object
21298
+ propertyNames:
21299
+ type: string
21300
+ additionalProperties:
21301
+ type: number
21302
+ totalCount:
21303
+ description: Total installed plugins matching non-category filters.
21304
+ type: number
20648
21305
  required:
20649
21306
  - plugins
20650
21307
  additionalProperties: false
@@ -20915,6 +21572,80 @@ paths:
20915
21572
  description: The install recorded no commit or no fingerprint to re-materialize and verify a baseline from.
20916
21573
  "503":
20917
21574
  description: The plugin source (GitHub) was temporarily unavailable; the diff is retryable.
21575
+ /v1/plugins/{name}/disable:
21576
+ post:
21577
+ operationId: plugins_by_name_disable_post
21578
+ summary: Disable a plugin
21579
+ description:
21580
+ Disable a plugin in this workspace by dropping a `.disabled` sentinel, mirroring the CLI's `assistant
21581
+ plugins disable <name>`. The change is honored live at read time by every tool / injector / hook gate — no
21582
+ restart required. Broadcasts a `sync_changed` invalidation carrying the `plugins:list` tag so other clients
21583
+ refetch `GET /v1/plugins`. An already-disabled plugin returns 409; a user plugin with no directory returns 404
21584
+ (default plugins are stubbed on demand via the `default-` prefix); a malformed name returns 400.
21585
+ tags:
21586
+ - plugins
21587
+ parameters:
21588
+ - name: name
21589
+ in: path
21590
+ required: true
21591
+ schema:
21592
+ type: string
21593
+ responses:
21594
+ "200":
21595
+ description: Successful response
21596
+ content:
21597
+ application/json:
21598
+ schema:
21599
+ type: object
21600
+ properties:
21601
+ ok:
21602
+ type: boolean
21603
+ required:
21604
+ - ok
21605
+ additionalProperties: false
21606
+ "400":
21607
+ description: The plugin name failed validation (not kebab-case alphanumerics).
21608
+ "404":
21609
+ description: No plugin directory exists with the given name (user plugins must already be installed).
21610
+ "409":
21611
+ description: The plugin is already disabled.
21612
+ /v1/plugins/{name}/enable:
21613
+ post:
21614
+ operationId: plugins_by_name_enable_post
21615
+ summary: Enable a plugin
21616
+ description:
21617
+ Enable a plugin in this workspace by removing its `.disabled` sentinel, mirroring the CLI's `assistant
21618
+ plugins enable <name>`. The change is honored live at read time by every tool / injector / hook gate — no
21619
+ restart required. Broadcasts a `sync_changed` invalidation carrying the `plugins:list` tag so other clients
21620
+ refetch `GET /v1/plugins`. An already-enabled plugin returns 409; a name with no plugin directory returns 404
21621
+ (prefix a default plugin with `default-`); a malformed name returns 400.
21622
+ tags:
21623
+ - plugins
21624
+ parameters:
21625
+ - name: name
21626
+ in: path
21627
+ required: true
21628
+ schema:
21629
+ type: string
21630
+ responses:
21631
+ "200":
21632
+ description: Successful response
21633
+ content:
21634
+ application/json:
21635
+ schema:
21636
+ type: object
21637
+ properties:
21638
+ ok:
21639
+ type: boolean
21640
+ required:
21641
+ - ok
21642
+ additionalProperties: false
21643
+ "400":
21644
+ description: The plugin name failed validation (not kebab-case alphanumerics).
21645
+ "404":
21646
+ description: No plugin directory exists with the given name.
21647
+ "409":
21648
+ description: The plugin is already enabled.
20918
21649
  /v1/plugins/{name}/inspect:
20919
21650
  get:
20920
21651
  operationId: plugins_by_name_inspect_get
@@ -21505,6 +22236,11 @@ paths:
21505
22236
  description:
21506
22237
  description: Short description, when known (external entries only today).
21507
22238
  type: string
22239
+ category:
22240
+ anyOf:
22241
+ - type: string
22242
+ - type: "null"
22243
+ description: Marketplace category slug (Skills taxonomy); null when the entry declares none.
21508
22244
  source:
21509
22245
  type: object
21510
22246
  properties:
@@ -21529,6 +22265,7 @@ paths:
21529
22265
  required:
21530
22266
  - name
21531
22267
  - path
22268
+ - category
21532
22269
  - source
21533
22270
  additionalProperties: false
21534
22271
  description: Directory matches, sorted alphabetically by name.
@@ -22442,7 +23179,7 @@ paths:
22442
23179
  post:
22443
23180
  operationId: schedules_post
22444
23181
  summary: Create schedule
22445
- description: Create a new recurring schedule. Currently restricted to mode='execute'.
23182
+ description: Create a new recurring schedule (execute, script, or workflow mode).
22446
23183
  tags:
22447
23184
  - schedules
22448
23185
  requestBody:
@@ -22473,172 +23210,178 @@ paths:
22473
23210
  description: IANA timezone, e.g. America/New_York
22474
23211
  enabled:
22475
23212
  type: boolean
22476
- description: Whether the schedule starts active (default true)
22477
- mode:
22478
- type: string
22479
- description: "'execute' (default) or 'workflow' (flag-gated)"
22480
- workflowName:
22481
- type: string
22482
- description: Saved workflow to trigger (required for workflow mode)
22483
- workflowArgs:
22484
- description: Args passed to the workflow run (workflow mode)
22485
- inferenceProfile:
22486
- anyOf:
22487
- - type: string
22488
- - type: "null"
22489
- description:
22490
- Inference profile (llm.profiles key) the schedule's runs use. Omitted or null = default, i.e. the mainAgent
22491
- call-site model selection.
22492
- required:
22493
- - name
22494
- - expression
22495
- responses:
22496
- "200":
22497
- description: Successful response
22498
- content:
22499
- application/json:
22500
- schema:
22501
- type: object
22502
- properties:
22503
- schedules:
22504
- type: array
22505
- items:
22506
- type: object
22507
- properties:
22508
- id:
22509
- type: string
22510
- name:
22511
- type: string
22512
- enabled:
22513
- type: boolean
22514
- syntax:
22515
- type: string
22516
- enum:
22517
- - cron
22518
- - rrule
22519
- expression:
22520
- anyOf:
22521
- - type: string
22522
- - type: "null"
22523
- cronExpression:
22524
- anyOf:
22525
- - type: string
22526
- - type: "null"
22527
- timezone:
22528
- anyOf:
22529
- - type: string
22530
- - type: "null"
22531
- message:
22532
- type: string
22533
- script:
22534
- anyOf:
22535
- - type: string
22536
- - type: "null"
22537
- nextRunAt:
22538
- type: number
22539
- lastRunAt:
22540
- anyOf:
22541
- - type: number
22542
- - type: "null"
22543
- lastStatus:
22544
- anyOf:
22545
- - type: string
22546
- - type: "null"
22547
- retryCount:
22548
- type: number
22549
- maxRetries:
22550
- type: number
22551
- retryBackoffMs:
22552
- type: number
22553
- timeoutMs:
22554
- anyOf:
22555
- - type: number
22556
- - type: "null"
22557
- inferenceProfile:
22558
- anyOf:
22559
- - type: string
22560
- - type: "null"
22561
- createdFromConversationId:
22562
- anyOf:
22563
- - type: string
22564
- - type: "null"
22565
- createdFromConversationExists:
22566
- type: boolean
22567
- createdFromConversationArchivedAt:
22568
- anyOf:
22569
- - type: number
22570
- - type: "null"
22571
- description:
22572
- type: string
22573
- cadenceDescription:
22574
- type: string
22575
- mode:
22576
- type: string
22577
- enum:
22578
- - notify
22579
- - execute
22580
- - script
22581
- - wake
22582
- - workflow
22583
- status:
22584
- type: string
22585
- enum:
22586
- - active
22587
- - firing
22588
- - fired
22589
- - cancelled
22590
- routingIntent:
22591
- type: string
22592
- enum:
22593
- - single_channel
22594
- - multi_channel
22595
- - all_channels
22596
- reuseConversation:
22597
- type: boolean
22598
- wakeConversationId:
22599
- anyOf:
22600
- - type: string
22601
- - type: "null"
22602
- workflowName:
22603
- anyOf:
22604
- - type: string
22605
- - type: "null"
22606
- isOneShot:
22607
- type: boolean
22608
- required:
22609
- - id
22610
- - name
22611
- - enabled
22612
- - syntax
22613
- - expression
22614
- - cronExpression
22615
- - timezone
22616
- - message
22617
- - script
22618
- - nextRunAt
22619
- - lastRunAt
22620
- - lastStatus
22621
- - retryCount
22622
- - maxRetries
22623
- - retryBackoffMs
22624
- - timeoutMs
22625
- - inferenceProfile
22626
- - createdFromConversationId
22627
- - createdFromConversationExists
22628
- - createdFromConversationArchivedAt
22629
- - description
22630
- - cadenceDescription
22631
- - mode
22632
- - status
22633
- - routingIntent
22634
- - reuseConversation
22635
- - wakeConversationId
22636
- - workflowName
22637
- - isOneShot
22638
- additionalProperties: false
22639
- description: Updated schedule list
23213
+ description: Whether the schedule starts active (default true)
23214
+ mode:
23215
+ type: string
23216
+ description: "'execute' (default), 'script', or 'workflow' (flag-gated)"
23217
+ workflowName:
23218
+ type: string
23219
+ description: Saved workflow to trigger (required for workflow mode)
23220
+ workflowArgs:
23221
+ description: Args passed to the workflow run (workflow mode)
23222
+ script:
23223
+ type: string
23224
+ description: Shell command run on each fire (required for script mode)
23225
+ timeoutMs:
23226
+ anyOf:
23227
+ - type: number
23228
+ - type: "null"
23229
+ description: Script execution timeout override in ms (script mode)
23230
+ inferenceProfile:
23231
+ anyOf:
23232
+ - type: string
23233
+ - type: "null"
23234
+ description:
23235
+ Inference profile (llm.profiles key) the schedule's runs use. Omitted or null = default, i.e. the mainAgent
23236
+ call-site model selection.
23237
+ required:
23238
+ - name
23239
+ - expression
23240
+ responses:
23241
+ "200":
23242
+ description: Successful response
23243
+ content:
23244
+ application/json:
23245
+ schema:
23246
+ type: object
23247
+ properties:
23248
+ schedule:
23249
+ type: object
23250
+ properties:
23251
+ id:
23252
+ type: string
23253
+ name:
23254
+ type: string
23255
+ enabled:
23256
+ type: boolean
23257
+ syntax:
23258
+ type: string
23259
+ enum:
23260
+ - cron
23261
+ - rrule
23262
+ expression:
23263
+ anyOf:
23264
+ - type: string
23265
+ - type: "null"
23266
+ cronExpression:
23267
+ anyOf:
23268
+ - type: string
23269
+ - type: "null"
23270
+ timezone:
23271
+ anyOf:
23272
+ - type: string
23273
+ - type: "null"
23274
+ message:
23275
+ type: string
23276
+ script:
23277
+ anyOf:
23278
+ - type: string
23279
+ - type: "null"
23280
+ nextRunAt:
23281
+ type: number
23282
+ lastRunAt:
23283
+ anyOf:
23284
+ - type: number
23285
+ - type: "null"
23286
+ lastStatus:
23287
+ anyOf:
23288
+ - type: string
23289
+ - type: "null"
23290
+ retryCount:
23291
+ type: number
23292
+ maxRetries:
23293
+ type: number
23294
+ retryBackoffMs:
23295
+ type: number
23296
+ timeoutMs:
23297
+ anyOf:
23298
+ - type: number
23299
+ - type: "null"
23300
+ inferenceProfile:
23301
+ anyOf:
23302
+ - type: string
23303
+ - type: "null"
23304
+ createdFromConversationId:
23305
+ anyOf:
23306
+ - type: string
23307
+ - type: "null"
23308
+ createdFromConversationExists:
23309
+ type: boolean
23310
+ createdFromConversationArchivedAt:
23311
+ anyOf:
23312
+ - type: number
23313
+ - type: "null"
23314
+ description:
23315
+ type: string
23316
+ cadenceDescription:
23317
+ type: string
23318
+ mode:
23319
+ type: string
23320
+ enum:
23321
+ - notify
23322
+ - execute
23323
+ - script
23324
+ - wake
23325
+ - workflow
23326
+ status:
23327
+ type: string
23328
+ enum:
23329
+ - active
23330
+ - firing
23331
+ - fired
23332
+ - cancelled
23333
+ routingIntent:
23334
+ type: string
23335
+ enum:
23336
+ - single_channel
23337
+ - multi_channel
23338
+ - all_channels
23339
+ reuseConversation:
23340
+ type: boolean
23341
+ wakeConversationId:
23342
+ anyOf:
23343
+ - type: string
23344
+ - type: "null"
23345
+ workflowName:
23346
+ anyOf:
23347
+ - type: string
23348
+ - type: "null"
23349
+ isOneShot:
23350
+ type: boolean
23351
+ required:
23352
+ - id
23353
+ - name
23354
+ - enabled
23355
+ - syntax
23356
+ - expression
23357
+ - cronExpression
23358
+ - timezone
23359
+ - message
23360
+ - script
23361
+ - nextRunAt
23362
+ - lastRunAt
23363
+ - lastStatus
23364
+ - retryCount
23365
+ - maxRetries
23366
+ - retryBackoffMs
23367
+ - timeoutMs
23368
+ - inferenceProfile
23369
+ - createdFromConversationId
23370
+ - createdFromConversationExists
23371
+ - createdFromConversationArchivedAt
23372
+ - description
23373
+ - cadenceDescription
23374
+ - mode
23375
+ - status
23376
+ - routingIntent
23377
+ - reuseConversation
23378
+ - wakeConversationId
23379
+ - workflowName
23380
+ - isOneShot
23381
+ additionalProperties: false
23382
+ description: The created schedule
22640
23383
  required:
22641
- - schedules
23384
+ - schedule
22642
23385
  additionalProperties: false
22643
23386
  /v1/schedules/{id}:
22644
23387
  delete:
@@ -23823,6 +24566,110 @@ paths:
23823
24566
  required:
23824
24567
  - summaries
23825
24568
  additionalProperties: false
24569
+ /v1/schedules/worker/start:
24570
+ post:
24571
+ operationId: schedules_worker_start_post
24572
+ summary: Start the schedule worker
24573
+ description:
24574
+ Spawns (or reuses) the schedule worker process as a child of the daemon and enables
24575
+ schedules.worker.enabled, so scheduled jobs run out of process.
24576
+ tags:
24577
+ - system
24578
+ responses:
24579
+ "200":
24580
+ description: Successful response
24581
+ content:
24582
+ application/json:
24583
+ schema:
24584
+ type: object
24585
+ properties:
24586
+ pid:
24587
+ type: number
24588
+ alreadyRunning:
24589
+ type: boolean
24590
+ workerEnabled:
24591
+ type: boolean
24592
+ const: true
24593
+ pidPath:
24594
+ type: string
24595
+ required:
24596
+ - pid
24597
+ - alreadyRunning
24598
+ - workerEnabled
24599
+ - pidPath
24600
+ additionalProperties: false
24601
+ /v1/schedules/worker/status:
24602
+ get:
24603
+ operationId: schedules_worker_status_get
24604
+ summary: Schedule worker status
24605
+ description:
24606
+ Reports the schedule worker process state, schedules.worker.enabled, and whether the daemon's in-process
24607
+ scheduler is currently executing schedules.
24608
+ tags:
24609
+ - system
24610
+ responses:
24611
+ "200":
24612
+ description: Successful response
24613
+ content:
24614
+ application/json:
24615
+ schema:
24616
+ type: object
24617
+ properties:
24618
+ status:
24619
+ type: string
24620
+ enum:
24621
+ - running
24622
+ - not_running
24623
+ pid:
24624
+ type: number
24625
+ workerEnabled:
24626
+ type: boolean
24627
+ inProcessScheduler:
24628
+ type: object
24629
+ properties:
24630
+ status:
24631
+ type: string
24632
+ enum:
24633
+ - running
24634
+ - not_running
24635
+ pid:
24636
+ type: number
24637
+ required:
24638
+ - status
24639
+ additionalProperties: false
24640
+ required:
24641
+ - status
24642
+ - workerEnabled
24643
+ - inProcessScheduler
24644
+ additionalProperties: false
24645
+ /v1/schedules/worker/stop:
24646
+ post:
24647
+ operationId: schedules_worker_stop_post
24648
+ summary: Stop the schedule worker
24649
+ description:
24650
+ Disables schedules.worker.enabled (handing schedule execution back to the in-process scheduler) and
24651
+ SIGTERMs the schedule worker process if it is running.
24652
+ tags:
24653
+ - system
24654
+ responses:
24655
+ "200":
24656
+ description: Successful response
24657
+ content:
24658
+ application/json:
24659
+ schema:
24660
+ type: object
24661
+ properties:
24662
+ workerWasRunning:
24663
+ type: boolean
24664
+ pid:
24665
+ type: number
24666
+ workerEnabled:
24667
+ type: boolean
24668
+ const: false
24669
+ required:
24670
+ - workerWasRunning
24671
+ - workerEnabled
24672
+ additionalProperties: false
23826
24673
  /v1/search:
23827
24674
  get:
23828
24675
  operationId: search_get
@@ -26786,6 +27633,7 @@ paths:
26786
27633
  - completed
26787
27634
  - failed
26788
27635
  - aborted
27636
+ - interrupted
26789
27637
  usage:
26790
27638
  type: object
26791
27639
  properties: