@vellumai/assistant 0.8.6 → 0.8.7-dev.202606052135.3e62c5a

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 (1079) hide show
  1. package/AGENTS.md +4 -4
  2. package/Dockerfile +21 -4
  3. package/bun.lock +13 -4
  4. package/docker-entrypoint.sh +12 -8
  5. package/docker-init-apt-root.sh +3 -1
  6. package/docker-kata-apt-env.sh +3 -1
  7. package/docker-kata-runtime-family.sh +12 -0
  8. package/docs/architecture/memory.md +1 -1
  9. package/docs/plugins.md +80 -281
  10. package/examples/plugins/echo/README.md +28 -37
  11. package/examples/plugins/echo/register.ts +35 -117
  12. package/knip.json +1 -0
  13. package/node_modules/@vellumai/environments/bun.lock +24 -0
  14. package/node_modules/@vellumai/environments/package.json +18 -0
  15. package/node_modules/@vellumai/environments/src/__tests__/package-boundary.test.ts +95 -0
  16. package/node_modules/@vellumai/environments/src/index.ts +11 -0
  17. package/node_modules/@vellumai/environments/src/seeds.ts +73 -0
  18. package/node_modules/@vellumai/environments/src/types.ts +70 -0
  19. package/node_modules/@vellumai/environments/tsconfig.json +20 -0
  20. package/node_modules/@vellumai/skill-host-contracts/src/assistant-event.ts +11 -0
  21. package/node_modules/@vellumai/skill-host-contracts/src/client.ts +3 -4
  22. package/node_modules/@vellumai/skill-host-contracts/src/server-message.ts +3 -3
  23. package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +13 -8
  24. package/openapi.yaml +6964 -539
  25. package/package.json +8 -4
  26. package/scripts/generate-openapi.ts +88 -54
  27. package/src/__tests__/agent-loop-callsite-precedence.test.ts +42 -80
  28. package/src/__tests__/agent-loop-exit-reason.test.ts +188 -45
  29. package/src/__tests__/agent-loop-mutable-latest-user-message.test.ts +141 -0
  30. package/src/__tests__/agent-loop-override-profile.test.ts +19 -32
  31. package/src/__tests__/agent-loop-provider-error-recording.test.ts +7 -5
  32. package/src/__tests__/agent-loop-thinking.test.ts +17 -12
  33. package/src/__tests__/agent-loop.test.ts +238 -422
  34. package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +6 -2
  35. package/src/__tests__/agent-wake-override-profile.test.ts +22 -40
  36. package/src/__tests__/annotate-activity-metadata.test.ts +262 -0
  37. package/src/__tests__/annotate-risk-options.test.ts +2 -3
  38. package/src/__tests__/anthropic-provider.test.ts +296 -57
  39. package/src/__tests__/app-builder-skill-instructions.test.ts +22 -0
  40. package/src/__tests__/app-control-flow.test.ts +6 -1
  41. package/src/__tests__/app-dir-path-guard.test.ts +1 -0
  42. package/src/__tests__/approval-cascade.test.ts +4 -11
  43. package/src/__tests__/approval-routes-http.test.ts +8 -3
  44. package/src/__tests__/assistant-event-hub.test.ts +25 -0
  45. package/src/__tests__/assistant-event.test.ts +15 -0
  46. package/src/__tests__/assistant-events-sse-shed.test.ts +8 -0
  47. package/src/__tests__/assistant-feature-flags-integration.test.ts +2 -2
  48. package/src/__tests__/assistant-stream-state.test.ts +645 -0
  49. package/src/__tests__/auth-fallback-events-store.test.ts +116 -0
  50. package/src/__tests__/avatar-e2e.test.ts +7 -37
  51. package/src/__tests__/avatar-generator.test.ts +12 -42
  52. package/src/__tests__/avatar-identity-sync.test.ts +28 -3
  53. package/src/__tests__/background-shell-bash.test.ts +3 -7
  54. package/src/__tests__/background-workers-disk-pressure.test.ts +6 -0
  55. package/src/__tests__/btw-routes.test.ts +69 -15
  56. package/src/__tests__/build-persisted-content.test.ts +184 -0
  57. package/src/__tests__/call-pointer-messages.test.ts +5 -3
  58. package/src/__tests__/call-site-routing-provider.test.ts +22 -40
  59. package/src/__tests__/catalog-files.test.ts +1 -0
  60. package/src/__tests__/channel-approval-routes.test.ts +49 -21
  61. package/src/__tests__/channel-approvals.test.ts +4 -2
  62. package/src/__tests__/channel-invite-transport.test.ts +1 -5
  63. package/src/__tests__/channel-readiness-routes.test.ts +0 -4
  64. package/src/__tests__/channel-readiness-slack-remote.test.ts +2 -7
  65. package/src/__tests__/channel-retry-sweep.test.ts +71 -79
  66. package/src/__tests__/clawhub-files.test.ts +1 -0
  67. package/src/__tests__/compaction-circuit.test.ts +258 -0
  68. package/src/__tests__/compaction-direct.test.ts +132 -0
  69. package/src/__tests__/compaction-events.test.ts +5 -17
  70. package/src/__tests__/compaction-trail-store.test.ts +1 -79
  71. package/src/__tests__/compaction.benchmark.test.ts +0 -30
  72. package/src/__tests__/compactor-image-manifest-trust.test.ts +112 -0
  73. package/src/__tests__/computer-use-tools.test.ts +2 -2
  74. package/src/__tests__/config-watcher.test.ts +28 -0
  75. package/src/__tests__/context-search-agent-runner.test.ts +6 -3
  76. package/src/__tests__/context-token-estimator.test.ts +34 -0
  77. package/src/__tests__/context-window-manager-compact-retry.test.ts +291 -0
  78. package/src/__tests__/conversation-abort-tool-results.test.ts +70 -25
  79. package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +9 -7
  80. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +22 -34
  81. package/src/__tests__/conversation-agent-loop-overflow.test.ts +476 -963
  82. package/src/__tests__/conversation-agent-loop.test.ts +823 -1321
  83. package/src/__tests__/conversation-analysis-routes.test.ts +7 -3
  84. package/src/__tests__/conversation-app-control-lifecycle.test.ts +1 -1
  85. package/src/__tests__/conversation-clean-command.test.ts +5 -2
  86. package/src/__tests__/conversation-clear-safety.test.ts +20 -10
  87. package/src/__tests__/conversation-confirmation-signals.test.ts +15 -45
  88. package/src/__tests__/conversation-disk-view-integration.test.ts +2 -2
  89. package/src/__tests__/conversation-disk-view.test.ts +10 -17
  90. package/src/__tests__/conversation-fork-crud.test.ts +86 -172
  91. package/src/__tests__/conversation-fork-route.test.ts +16 -14
  92. package/src/__tests__/conversation-history-web-search.test.ts +11 -1
  93. package/src/__tests__/conversation-init.benchmark.test.ts +6 -6
  94. package/src/__tests__/conversation-lifecycle.test.ts +3 -2
  95. package/src/__tests__/conversation-load-history-repair.test.ts +3 -2
  96. package/src/__tests__/conversation-load-history-stripped.test.ts +1 -1
  97. package/src/__tests__/conversation-message-sync-tags.test.ts +3 -4
  98. package/src/__tests__/conversation-pairing.test.ts +10 -7
  99. package/src/__tests__/conversation-pre-run-repair.test.ts +1 -1
  100. package/src/__tests__/conversation-process-app-control-preactivation.test.ts +10 -0
  101. package/src/__tests__/conversation-process-callsite.test.ts +27 -30
  102. package/src/__tests__/conversation-provider-retry-repair.test.ts +80 -51
  103. package/src/__tests__/conversation-queue.test.ts +272 -164
  104. package/src/__tests__/conversation-routes-disk-view.test.ts +6 -2
  105. package/src/__tests__/conversation-routes-guardian-reply.test.ts +2 -2
  106. package/src/__tests__/conversation-routes-slash-commands.test.ts +8 -7
  107. package/src/__tests__/conversation-runtime-assembly.test.ts +320 -314
  108. package/src/__tests__/conversation-runtime-workspace.test.ts +114 -36
  109. package/src/__tests__/conversation-slash-commands.test.ts +8 -42
  110. package/src/__tests__/conversation-slash-queue.test.ts +42 -31
  111. package/src/__tests__/conversation-slash-unknown.test.ts +13 -15
  112. package/src/__tests__/conversation-speed-override.test.ts +8 -22
  113. package/src/__tests__/conversation-starter-routes.test.ts +14 -6
  114. package/src/__tests__/conversation-surfaces-action-delivery.test.ts +90 -15
  115. package/src/__tests__/conversation-surfaces-app-control.test.ts +32 -4
  116. package/src/__tests__/conversation-surfaces-state-update.test.ts +5 -2
  117. package/src/__tests__/conversation-surfaces-table-action.test.ts +6 -15
  118. package/src/__tests__/conversation-sync-tags.test.ts +27 -15
  119. package/src/__tests__/conversation-title-service.test.ts +135 -2
  120. package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +23 -11
  121. package/src/__tests__/conversation-unread-route.test.ts +14 -2
  122. package/src/__tests__/conversation-usage.test.ts +0 -2
  123. package/src/__tests__/conversation-wipe.test.ts +1 -1
  124. package/src/__tests__/conversation-workspace-cache-state.test.ts +20 -17
  125. package/src/__tests__/conversation-workspace-injection.test.ts +114 -23
  126. package/src/__tests__/conversation-workspace-tool-tracking.test.ts +34 -13
  127. package/src/__tests__/conversations-import-system-filter.test.ts +101 -0
  128. package/src/__tests__/credential-execution-tools.test.ts +1 -2
  129. package/src/__tests__/credential-security-invariants.test.ts +0 -1
  130. package/src/__tests__/cross-provider-web-search.test.ts +220 -3
  131. package/src/__tests__/cu-unified-flow.test.ts +26 -1
  132. package/src/__tests__/db-acp-history.test.ts +101 -0
  133. package/src/__tests__/db-schedule-syntax-migration.test.ts +16 -0
  134. package/src/__tests__/disk-pressure-guard.test.ts +66 -0
  135. package/src/__tests__/disk-pressure-routes.test.ts +9 -2
  136. package/src/__tests__/dm-persistence.test.ts +12 -3
  137. package/src/__tests__/dynamic-page-surface.test.ts +99 -0
  138. package/src/__tests__/edit-propagation.test.ts +1 -2
  139. package/src/__tests__/empty-response-hook.test.ts +304 -0
  140. package/src/__tests__/feature-flag-test-helpers.ts +2 -2
  141. package/src/__tests__/file-write-tool.test.ts +63 -0
  142. package/src/__tests__/filing-service.test.ts +2 -2
  143. package/src/__tests__/first-greeting.test.ts +55 -14
  144. package/src/__tests__/gemini-image-service.test.ts +13 -0
  145. package/src/__tests__/gemini-inline-media.test.ts +78 -0
  146. package/src/__tests__/gemini-provider.test.ts +351 -28
  147. package/src/__tests__/guardian-grant-minting.test.ts +1 -1
  148. package/src/__tests__/guardian-routing-invariants.test.ts +2 -4
  149. package/src/__tests__/guardian-routing-state.test.ts +60 -71
  150. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +10 -8
  151. package/src/__tests__/heartbeat-disk-pressure.test.ts +2 -0
  152. package/src/__tests__/heartbeat-service.test.ts +3 -1
  153. package/src/__tests__/helpers/mock-provider.ts +110 -0
  154. package/src/__tests__/helpers/native-web-search-harness.ts +129 -0
  155. package/src/__tests__/history-repair-hook.test.ts +162 -0
  156. package/src/__tests__/history-repair-observability.test.ts +1 -1
  157. package/src/__tests__/history-repair.test.ts +2 -1
  158. package/src/__tests__/host-app-control-proxy.test.ts +2 -0
  159. package/src/__tests__/host-app-control-routes.test.ts +1 -1
  160. package/src/__tests__/host-cu-proxy.test.ts +2 -0
  161. package/src/__tests__/host-cu-routes-targeted.test.ts +3 -3
  162. package/src/__tests__/host-file-edit-tool.test.ts +4 -2
  163. package/src/__tests__/host-file-proxy.test.ts +31 -0
  164. package/src/__tests__/host-file-read-tool.test.ts +4 -2
  165. package/src/__tests__/host-file-write-tool.test.ts +9 -3
  166. package/src/__tests__/host-proxy-preactivation.test.ts +53 -14
  167. package/src/__tests__/host-shell-tool.test.ts +9 -4
  168. package/src/__tests__/http-user-message-parity.test.ts +2 -2
  169. package/src/__tests__/identity-intro-cache.test.ts +47 -114
  170. package/src/__tests__/identity-routes.test.ts +248 -7
  171. package/src/__tests__/inbound-slack-persistence.test.ts +12 -3
  172. package/src/__tests__/injector-background-turn.test.ts +3 -9
  173. package/src/__tests__/injector-chain.test.ts +139 -275
  174. package/src/__tests__/injector-disk-pressure.test.ts +75 -41
  175. package/src/__tests__/injector-document-comments.test.ts +3 -3
  176. package/src/__tests__/injector-pkb-v2-silenced.test.ts +30 -22
  177. package/src/__tests__/injector-v3-suppression.test.ts +214 -0
  178. package/src/__tests__/internal-telemetry-routes.test.ts +109 -0
  179. package/src/__tests__/list-messages-attachments.test.ts +7 -8
  180. package/src/__tests__/list-messages-hidden-metadata.test.ts +55 -15
  181. package/src/__tests__/list-messages-page-latest.test.ts +60 -1
  182. package/src/__tests__/list-messages-tool-merge.test.ts +56 -6
  183. package/src/__tests__/llm-request-log-turn-query.test.ts +42 -86
  184. package/src/__tests__/llm-resolver.test.ts +23 -47
  185. package/src/__tests__/llm-usage-store.test.ts +268 -1
  186. package/src/__tests__/log-export-routes.test.ts +59 -0
  187. package/src/__tests__/managed-skill-lifecycle.test.ts +1 -8
  188. package/src/__tests__/mcp-auth-routes.test.ts +15 -10
  189. package/src/__tests__/mcp-health-check.test.ts +18 -13
  190. package/src/__tests__/memory-retrieval-hook.test.ts +297 -0
  191. package/src/__tests__/memory-v2-static-injector.test.ts +103 -35
  192. package/src/__tests__/messaging-send-tool.test.ts +8 -4
  193. package/src/__tests__/migration-export-http.test.ts +12 -12
  194. package/src/__tests__/migration-import-commit-http.test.ts +8 -8
  195. package/src/__tests__/migration-import-preflight-http.test.ts +7 -7
  196. package/src/__tests__/migration-validate-http.test.ts +3 -3
  197. package/src/__tests__/native-web-search.test.ts +205 -20
  198. package/src/__tests__/notification-decision-identity.test.ts +9 -18
  199. package/src/__tests__/notification-decision-recipient-context.test.ts +3 -6
  200. package/src/__tests__/oauth-commands-routes.test.ts +1 -1
  201. package/src/__tests__/onboarding-template-contract.test.ts +12 -0
  202. package/src/__tests__/openai-image-service.test.ts +17 -0
  203. package/src/__tests__/openai-provider.test.ts +97 -71
  204. package/src/__tests__/openai-responses-provider.test.ts +21 -77
  205. package/src/__tests__/outbound-slack-persistence.test.ts +2 -1
  206. package/src/__tests__/{overflow-reduce-pipeline.test.ts → overflow-reduction-loop.test.ts} +64 -286
  207. package/src/__tests__/parallel-tool.benchmark.test.ts +24 -36
  208. package/src/__tests__/persist-unsendable-image.test.ts +215 -0
  209. package/src/__tests__/persistence-secret-redaction.test.ts +3 -1
  210. package/src/__tests__/pkb-autoinject.test.ts +2 -5
  211. package/src/__tests__/plugin-bootstrap.test.ts +63 -63
  212. package/src/__tests__/plugin-registry.test.ts +3 -76
  213. package/src/__tests__/plugin-route-contribution.test.ts +6 -16
  214. package/src/__tests__/plugin-skill-contribution.test.ts +7 -17
  215. package/src/__tests__/plugin-tool-contribution.test.ts +10 -26
  216. package/src/__tests__/plugin-types.test.ts +3 -203
  217. package/src/__tests__/prechat-onboarding-contract.test.ts +23 -0
  218. package/src/__tests__/process-message-background-slack.test.ts +17 -16
  219. package/src/__tests__/process-message-display-content.test.ts +36 -44
  220. package/src/__tests__/provider-commit-message-generator.test.ts +19 -14
  221. package/src/__tests__/provider-error-scenarios.test.ts +7 -6
  222. package/src/__tests__/provider-platform-proxy-integration.test.ts +3 -8
  223. package/src/__tests__/provider-send-message-override-profile.test.ts +9 -25
  224. package/src/__tests__/provider-streaming.benchmark.test.ts +12 -22
  225. package/src/__tests__/provider-usage-tracking.test.ts +0 -6
  226. package/src/__tests__/ratelimit.test.ts +9 -4
  227. package/src/__tests__/reaction-persistence.test.ts +1 -1
  228. package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +5 -1
  229. package/src/__tests__/relay-server.test.ts +20 -13
  230. package/src/__tests__/resolve-trust-class.test.ts +4 -4
  231. package/src/__tests__/retry-openrouter-only-normalization.test.ts +5 -8
  232. package/src/__tests__/retry-thinking-tool-choice.test.ts +10 -13
  233. package/src/__tests__/retry-verbosity-normalization.test.ts +5 -8
  234. package/src/__tests__/runtime-events-sse-reconnect.test.ts +390 -0
  235. package/src/__tests__/schedule-routes.test.ts +683 -12
  236. package/src/__tests__/schedule-store.test.ts +108 -0
  237. package/src/__tests__/schedule-tools.test.ts +160 -0
  238. package/src/__tests__/secret-ingress-http.test.ts +2 -2
  239. package/src/__tests__/secret-prompt-log-hygiene.test.ts +11 -7
  240. package/src/__tests__/secret-prompter-channel-fallback.test.ts +11 -9
  241. package/src/__tests__/secret-response-routing.test.ts +13 -11
  242. package/src/__tests__/send-endpoint-busy.test.ts +6 -2
  243. package/src/__tests__/server-history-render.test.ts +314 -1
  244. package/src/__tests__/shell-observability.test.ts +249 -0
  245. package/src/__tests__/skill-feature-flags-integration.test.ts +44 -11
  246. package/src/__tests__/skill-feature-flags.test.ts +6 -6
  247. package/src/__tests__/skill-load-feature-flag.test.ts +10 -10
  248. package/src/__tests__/skills-files-catalog-fallback.test.ts +10 -0
  249. package/src/__tests__/skillssh-files.test.ts +1 -0
  250. package/src/__tests__/starter-task-flow.test.ts +6 -6
  251. package/src/__tests__/strip-memory-injections.test.ts +102 -14
  252. package/src/__tests__/subagent-call-site-routing.test.ts +3 -3
  253. package/src/__tests__/subagent-fork-notifications.test.ts +1 -3
  254. package/src/__tests__/subagent-fork-spawn.test.ts +1 -1
  255. package/src/__tests__/subagent-manager-notify.test.ts +1 -3
  256. package/src/__tests__/subagent-notify-parent.test.ts +1 -3
  257. package/src/__tests__/subagent-spawn-tool-fork.test.ts +1 -1
  258. package/src/__tests__/suggestion-routes.test.ts +3 -3
  259. package/src/__tests__/sync-message-contract.test.ts +19 -16
  260. package/src/__tests__/system-prompt.test.ts +74 -0
  261. package/src/__tests__/task-scheduler.test.ts +162 -1
  262. package/src/__tests__/terminal-tools.test.ts +9 -25
  263. package/src/__tests__/thread-backfill.test.ts +4 -9
  264. package/src/__tests__/title-generate-hook.test.ts +319 -0
  265. package/src/__tests__/tool-error-hook.test.ts +278 -0
  266. package/src/__tests__/tool-preview-lifecycle.test.ts +481 -16
  267. package/src/__tests__/tool-result-metadata-plumbing.test.ts +1 -0
  268. package/src/__tests__/tool-result-truncate-hook.test.ts +127 -0
  269. package/src/__tests__/tool-result-truncation.test.ts +1 -1
  270. package/src/__tests__/tools-audio-read.test.ts +113 -0
  271. package/src/__tests__/turn-boundary-resolution.test.ts +44 -84
  272. package/src/__tests__/turn-events-store.test.ts +11 -7
  273. package/src/__tests__/ui-choice-copy-surfaces.test.ts +254 -0
  274. package/src/__tests__/ui-work-result-surface.test.ts +159 -0
  275. package/src/__tests__/usage-routes.test.ts +285 -1
  276. package/src/__tests__/user-plugin-loader.test.ts +2 -2
  277. package/src/__tests__/voice-scoped-grant-consumer.test.ts +8 -6
  278. package/src/__tests__/voice-session-bridge.test.ts +19 -10
  279. package/src/__tests__/web-search-backend-failure.test.ts +166 -0
  280. package/src/acp/__tests__/agent-process.test.ts +161 -0
  281. package/src/acp/__tests__/client-handler.test.ts +40 -0
  282. package/src/acp/__tests__/helpers/acp-history-db.ts +82 -0
  283. package/src/acp/__tests__/helpers/exec-file-stub.ts +101 -0
  284. package/src/acp/__tests__/prepare-agent-env.test.ts +143 -31
  285. package/src/acp/__tests__/session-manager-persistence.test.ts +95 -28
  286. package/src/acp/__tests__/session-manager-resume.test.ts +695 -0
  287. package/src/acp/agent-process.ts +61 -1
  288. package/src/acp/auto-install.test.ts +125 -0
  289. package/src/acp/auto-install.ts +174 -0
  290. package/src/acp/client-handler.ts +31 -0
  291. package/src/acp/feature-gate.test.ts +48 -0
  292. package/src/acp/feature-gate.ts +34 -0
  293. package/src/acp/prepare-agent-env.ts +52 -11
  294. package/src/acp/resolve-agent.test.ts +147 -6
  295. package/src/acp/resolve-agent.ts +81 -7
  296. package/src/acp/resume-hint.ts +22 -0
  297. package/src/acp/session-manager.ts +487 -71
  298. package/src/agent/compaction-circuit.ts +98 -0
  299. package/src/agent/loop.ts +651 -450
  300. package/src/api/README.md +19 -17
  301. package/src/api/constants/tool-execution.ts +21 -0
  302. package/src/api/events/assistant-activity-state.ts +75 -0
  303. package/src/api/events/assistant-outbound-attachment.ts +25 -27
  304. package/src/api/events/assistant-text-delta.ts +6 -8
  305. package/src/api/events/assistant-thinking-delta.ts +33 -0
  306. package/src/api/events/assistant-turn-start.ts +5 -7
  307. package/src/api/events/avatar-updated.ts +24 -0
  308. package/src/api/events/compaction-circuit-closed.ts +26 -0
  309. package/src/api/events/compaction-circuit-open.ts +28 -0
  310. package/src/api/events/confirmation-request.ts +114 -0
  311. package/src/api/events/contact-request.ts +33 -0
  312. package/src/api/events/conversation-error.ts +77 -0
  313. package/src/api/events/conversation-list-invalidated.ts +38 -0
  314. package/src/api/events/conversation-title-updated.ts +24 -0
  315. package/src/api/events/disk-pressure-status-changed.ts +61 -0
  316. package/src/api/events/document-comment-created.ts +24 -28
  317. package/src/api/events/document-comment-deleted.ts +6 -8
  318. package/src/api/events/document-comment-reopened.ts +6 -8
  319. package/src/api/events/document-comment-resolved.ts +8 -10
  320. package/src/api/events/document-editor-update.ts +27 -0
  321. package/src/api/events/error.ts +32 -0
  322. package/src/api/events/generation-cancelled.ts +4 -6
  323. package/src/api/events/generation-handoff.ts +13 -15
  324. package/src/api/events/home-feed-updated.ts +26 -0
  325. package/src/api/events/identity-changed.ts +32 -0
  326. package/src/api/events/interaction-resolved.ts +50 -0
  327. package/src/api/events/message-complete.ts +10 -12
  328. package/src/api/events/message-dequeued.ts +21 -0
  329. package/src/api/events/message-queued-deleted.ts +23 -0
  330. package/src/api/events/message-queued.ts +22 -0
  331. package/src/api/events/message-request-complete.ts +29 -0
  332. package/src/api/events/navigate-settings.ts +20 -0
  333. package/src/api/events/notification-intent.ts +33 -0
  334. package/src/api/events/open-url.ts +6 -8
  335. package/src/api/events/question-request.ts +67 -0
  336. package/src/api/events/relationship-state-updated.ts +4 -6
  337. package/src/api/events/secret-request.ts +42 -0
  338. package/src/api/events/subagent-event.ts +79 -0
  339. package/src/api/events/subagent-spawned.ts +40 -0
  340. package/src/api/events/subagent-status-changed.ts +65 -0
  341. package/src/api/events/sync-changed.ts +29 -0
  342. package/src/api/events/tool-output-chunk.ts +45 -0
  343. package/src/api/events/tool-result.ts +129 -0
  344. package/src/api/events/tool-use-preview-start.ts +32 -0
  345. package/src/api/events/tool-use-start.ts +8 -10
  346. package/src/api/events/trace-event.ts +69 -0
  347. package/src/api/events/turn-profile-auto-routed.ts +28 -0
  348. package/src/api/events/ui-surface-complete.ts +30 -0
  349. package/src/api/events/ui-surface-dismiss.ts +22 -0
  350. package/src/api/events/ui-surface-show.ts +67 -0
  351. package/src/api/events/ui-surface-update.ts +26 -0
  352. package/src/api/events/usage-update.ts +34 -0
  353. package/src/api/events/user-message-echo.ts +35 -0
  354. package/src/api/index.ts +389 -0
  355. package/src/api/requests/dictation.ts +45 -0
  356. package/src/api/responses/conversation-message.ts +374 -0
  357. package/src/api/responses/disk-pressure-status.ts +26 -0
  358. package/src/api/responses/home.ts +217 -0
  359. package/src/api/responses/llm-context-response.ts +2 -0
  360. package/src/api/responses/memory-v3-selection-log.ts +50 -0
  361. package/src/api/responses/subagent-detail.ts +48 -0
  362. package/src/approvals/guardian-decision-primitive.ts +7 -15
  363. package/src/approvals/guardian-request-resolvers.ts +7 -10
  364. package/src/avatar/__tests__/avatar-manifest.test.ts +236 -0
  365. package/src/avatar/__tests__/avatar-store.test.ts +198 -0
  366. package/src/avatar/avatar-manifest.ts +195 -0
  367. package/src/avatar/avatar-store.ts +113 -0
  368. package/src/avatar/traits-png-sync.ts +8 -2
  369. package/src/background-wake/next-wake.test.ts +31 -1
  370. package/src/background-wake/next-wake.ts +5 -1
  371. package/src/calls/call-conversation-messages.ts +6 -4
  372. package/src/calls/guardian-action-sweep.ts +6 -4
  373. package/src/calls/relay-server.ts +12 -8
  374. package/src/calls/voice-session-bridge.ts +13 -27
  375. package/src/cli/commands/__tests__/memory-v3.test.ts +245 -0
  376. package/src/cli/commands/__tests__/notifications.test.ts +58 -14
  377. package/src/cli/commands/avatar.ts +17 -11
  378. package/src/cli/commands/conversations.ts +15 -1
  379. package/src/cli/commands/db/__tests__/repair.test.ts +540 -0
  380. package/src/cli/commands/db/__tests__/status.test.ts +253 -0
  381. package/src/cli/commands/db/format.ts +48 -0
  382. package/src/cli/commands/db/index.ts +29 -0
  383. package/src/cli/commands/db/repair-step-conversation-backfill.ts +345 -0
  384. package/src/cli/commands/db/repair-step-integrity.ts +146 -0
  385. package/src/cli/commands/db/repair-steps.ts +164 -0
  386. package/src/cli/commands/db/repair.ts +141 -0
  387. package/src/cli/commands/db/status.ts +366 -0
  388. package/src/cli/commands/memory-v3.ts +159 -445
  389. package/src/cli/commands/notifications.ts +112 -60
  390. package/src/cli/lib/cli-colors.ts +24 -6
  391. package/src/cli/program.ts +4 -5
  392. package/src/config/__tests__/feature-flag-registry-guard.test.ts +4 -4
  393. package/src/config/acp-defaults.test.ts +10 -0
  394. package/src/config/acp-defaults.ts +6 -0
  395. package/src/config/assistant-feature-flags.ts +24 -13
  396. package/src/config/bundled-skills/acp/SKILL.md +64 -30
  397. package/src/config/bundled-skills/acp/TOOLS.json +4 -4
  398. package/src/config/bundled-skills/app-builder/SKILL.md +224 -387
  399. package/src/config/bundled-skills/app-builder/TOOLS.json +29 -0
  400. package/src/config/bundled-skills/app-builder/references/DESIGN_SYSTEM.md +48 -0
  401. package/src/config/bundled-skills/app-builder/references/RESPONSIVE.md +57 -0
  402. package/src/config/bundled-skills/app-builder/references/SLIDES.md +38 -0
  403. package/src/config/bundled-skills/app-builder/references/examples/README.md +17 -0
  404. package/src/config/bundled-skills/app-builder/references/examples/expense-tracker.md +515 -0
  405. package/src/config/bundled-skills/app-builder/references/examples/focus-timer.md +342 -0
  406. package/src/config/bundled-skills/app-builder/references/examples/habit-tracker.md +490 -0
  407. package/src/config/bundled-skills/app-builder/tools/app-list.ts +62 -0
  408. package/src/config/bundled-skills/document-editor/SKILL.md +28 -23
  409. package/src/config/bundled-skills/document-editor/TOOLS.json +1 -1
  410. package/src/config/bundled-skills/media-processing/services/reduce.ts +6 -9
  411. package/src/config/bundled-skills/messaging/SKILL.md +0 -7
  412. package/src/config/bundled-skills/messaging/tools/messaging-send.ts +7 -2
  413. package/src/config/bundled-skills/schedule/SKILL.md +1 -1
  414. package/src/config/bundled-skills/schedule/TOOLS.json +8 -0
  415. package/src/config/bundled-tool-registry.ts +2 -0
  416. package/src/config/call-site-defaults.ts +2 -7
  417. package/src/config/feature-flag-cache.ts +3 -3
  418. package/src/config/feature-flag-registry.json +68 -12
  419. package/src/config/schemas/__tests__/memory-v2.test.ts +2 -226
  420. package/src/config/schemas/__tests__/memory-v3.test.ts +25 -0
  421. package/src/config/schemas/call-site-catalog.ts +8 -15
  422. package/src/config/schemas/heartbeat.ts +9 -0
  423. package/src/config/schemas/llm.ts +3 -3
  424. package/src/config/schemas/memory-lifecycle.ts +24 -0
  425. package/src/config/schemas/memory-v2.ts +8 -253
  426. package/src/config/schemas/memory-v3.ts +47 -0
  427. package/src/config/schemas/memory.ts +6 -1
  428. package/src/config/schemas/platform.ts +8 -0
  429. package/src/config/schemas/timeouts.ts +3 -1
  430. package/src/config/seed-inference-profiles.ts +2 -2
  431. package/src/config/skills.ts +13 -0
  432. package/src/context/compactor.ts +55 -32
  433. package/src/context/strip-injections.ts +128 -0
  434. package/src/context/token-estimator.ts +42 -0
  435. package/src/context/tool-result-truncation.ts +1 -66
  436. package/src/context/window-manager.ts +143 -27
  437. package/src/credential-execution/executable-discovery.ts +16 -0
  438. package/src/daemon/__tests__/conversation-lifecycle-auto-analyze.test.ts +6 -0
  439. package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +2 -2
  440. package/src/daemon/__tests__/inference-profile-notification.test.ts +153 -0
  441. package/src/daemon/__tests__/native-web-search-metadata.test.ts +10 -8
  442. package/src/daemon/__tests__/web-search-status-text.test.ts +10 -6
  443. package/src/daemon/approval-generators.ts +4 -4
  444. package/src/daemon/assistant-attachments.ts +1 -1
  445. package/src/daemon/config-watcher.ts +7 -1
  446. package/src/daemon/context-overflow-reducer.ts +0 -1
  447. package/src/daemon/conversation-agent-loop-handlers.ts +793 -215
  448. package/src/daemon/conversation-agent-loop.ts +487 -1479
  449. package/src/daemon/conversation-error.ts +7 -7
  450. package/src/daemon/conversation-history.ts +27 -10
  451. package/src/daemon/conversation-launch.ts +4 -8
  452. package/src/daemon/conversation-lifecycle.ts +13 -42
  453. package/src/daemon/conversation-messaging.ts +8 -9
  454. package/src/daemon/conversation-notifiers.ts +7 -5
  455. package/src/daemon/conversation-process.ts +109 -93
  456. package/src/daemon/conversation-registry.ts +159 -0
  457. package/src/daemon/conversation-runtime-assembly.ts +218 -385
  458. package/src/daemon/conversation-slash.ts +6 -25
  459. package/src/daemon/conversation-store.ts +15 -95
  460. package/src/daemon/conversation-surfaces.ts +277 -73
  461. package/src/daemon/conversation-tool-setup.ts +5 -29
  462. package/src/daemon/conversation-workspace.ts +17 -0
  463. package/src/daemon/conversation.ts +123 -146
  464. package/src/daemon/daemon-skill-host.ts +2 -6
  465. package/src/daemon/disk-pressure-guard.ts +35 -29
  466. package/src/daemon/external-plugins-bootstrap.ts +53 -33
  467. package/src/daemon/first-greeting.ts +26 -4
  468. package/src/daemon/guardian-action-generators.ts +2 -2
  469. package/src/daemon/handlers/config-a2a.ts +51 -36
  470. package/src/daemon/handlers/config-slack-channel.ts +20 -14
  471. package/src/daemon/handlers/config-telegram.ts +16 -2
  472. package/src/daemon/handlers/conversations.ts +9 -23
  473. package/src/daemon/handlers/shared.ts +158 -82
  474. package/src/daemon/handlers/skills.ts +53 -20
  475. package/src/daemon/host-app-control-proxy.ts +54 -1
  476. package/src/daemon/host-cu-proxy.ts +46 -22
  477. package/src/daemon/host-file-proxy.ts +25 -1
  478. package/src/daemon/host-proxy-preactivation.ts +25 -6
  479. package/src/daemon/lifecycle.ts +53 -55
  480. package/src/daemon/message-protocol.ts +2 -3
  481. package/src/daemon/message-provenance.ts +49 -0
  482. package/src/daemon/message-types/apps.ts +1 -29
  483. package/src/daemon/message-types/contacts.ts +3 -20
  484. package/src/daemon/message-types/conversations.ts +13 -111
  485. package/src/daemon/message-types/documents.ts +3 -9
  486. package/src/daemon/message-types/home.ts +4 -17
  487. package/src/daemon/message-types/integrations.ts +2 -6
  488. package/src/daemon/message-types/messages.ts +37 -400
  489. package/src/daemon/message-types/notifications.ts +2 -32
  490. package/src/daemon/message-types/settings.ts +3 -8
  491. package/src/daemon/message-types/skills.ts +4 -0
  492. package/src/daemon/message-types/surfaces.ts +138 -3
  493. package/src/daemon/message-types/sync.ts +12 -25
  494. package/src/daemon/message-types/workspace.ts +3 -11
  495. package/src/daemon/now-scratchpad.ts +21 -0
  496. package/src/daemon/orphan-reaper.test.ts +210 -0
  497. package/src/daemon/orphan-reaper.ts +240 -0
  498. package/src/daemon/overflow-reduction-loop.ts +230 -0
  499. package/src/daemon/persist-unsendable-image.ts +117 -0
  500. package/src/daemon/process-message.ts +50 -49
  501. package/src/daemon/server.ts +14 -0
  502. package/src/daemon/tool-side-effects.ts +10 -7
  503. package/src/daemon/trace-emitter.ts +6 -4
  504. package/src/daemon/trust-context.ts +32 -0
  505. package/src/daemon/wake-target-adapter.ts +14 -2
  506. package/src/heartbeat/__tests__/heartbeat-service.test.ts +6 -1
  507. package/src/heartbeat/heartbeat-run-store.ts +54 -1
  508. package/src/heartbeat/heartbeat-service.ts +42 -0
  509. package/src/home/feed-types.ts +36 -221
  510. package/src/home/home-greeting-cache.ts +24 -1
  511. package/src/ipc/__tests__/browser-ipc.test.ts +1 -1
  512. package/src/ipc/__tests__/email-ipc.test.ts +0 -9
  513. package/src/ipc/__tests__/ui-request-route.test.ts +3 -3
  514. package/src/ipc/gateway-client.test.ts +2 -2
  515. package/src/ipc/gateway-client.ts +3 -3
  516. package/src/ipc/routes/__tests__/route-adapter.test.ts +244 -0
  517. package/src/ipc/routes/route-adapter.ts +45 -6
  518. package/src/ipc/skill-routes/__tests__/memory.test.ts +33 -9
  519. package/src/ipc/skill-routes/__tests__/providers.test.ts +10 -10
  520. package/src/ipc/skill-routes/__tests__/registries.test.ts +28 -18
  521. package/src/ipc/skill-routes/memory.ts +29 -14
  522. package/src/ipc/skill-routes/providers.ts +5 -6
  523. package/src/ipc/skill-routes/registries.ts +13 -61
  524. package/src/live-voice/__tests__/live-voice-archive.test.ts +24 -11
  525. package/src/media/gemini-image-service.ts +15 -0
  526. package/src/media/openai-image-service.ts +14 -0
  527. package/src/media/types.ts +34 -0
  528. package/src/memory/__tests__/conversation-queries.test.ts +192 -8
  529. package/src/memory/__tests__/db-maintenance.test.ts +128 -0
  530. package/src/memory/__tests__/jobs-store-job-classes.test.ts +5 -4
  531. package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +56 -0
  532. package/src/memory/__tests__/memory-retrospective-job.test.ts +10 -6
  533. package/src/memory/__tests__/memory-v3-selections-migration.test.ts +103 -0
  534. package/src/memory/auth-fallback-events-store.ts +94 -0
  535. package/src/memory/context-search/agent-runner.ts +2 -4
  536. package/src/memory/conversation-crud.ts +39 -8
  537. package/src/memory/conversation-queries.ts +78 -22
  538. package/src/memory/conversation-starter-checkpoints.ts +1 -0
  539. package/src/memory/conversation-title-service.ts +65 -41
  540. package/src/memory/db-init.ts +14 -0
  541. package/src/memory/db-maintenance.ts +18 -2
  542. package/src/memory/graph/__tests__/conversation-graph-memory-registry.test.ts +119 -0
  543. package/src/memory/graph/consolidation.ts +8 -11
  544. package/src/memory/graph/conversation-graph-memory.ts +106 -8
  545. package/src/memory/graph/extraction.ts +6 -9
  546. package/src/memory/graph/narrative.ts +2 -2
  547. package/src/memory/graph/pattern-scan.ts +2 -2
  548. package/src/memory/graph/retriever.ts +20 -26
  549. package/src/memory/graph/tools.ts +4 -4
  550. package/src/memory/job-handlers/conversation-starters.ts +45 -34
  551. package/src/memory/job-handlers/summarization.ts +1 -2
  552. package/src/memory/jobs-store.ts +36 -1
  553. package/src/memory/jobs-worker.ts +82 -43
  554. package/src/memory/llm-request-log-source-clickhouse.ts +5 -31
  555. package/src/memory/llm-request-log-source-local.ts +0 -11
  556. package/src/memory/llm-request-log-source.ts +9 -25
  557. package/src/memory/llm-request-log-store.ts +0 -41
  558. package/src/memory/llm-usage-store.ts +234 -50
  559. package/src/memory/memory-marker.ts +17 -0
  560. package/src/memory/memory-retrospective-job.ts +6 -2
  561. package/src/memory/memory-v2-activation-log-store.ts +1 -83
  562. package/src/memory/migrations/222-strip-placeholder-sentinels-from-messages.ts +6 -5
  563. package/src/memory/migrations/267-llm-usage-events-add-assistant-version.ts +46 -0
  564. package/src/memory/migrations/268-add-memory-v3-selections.ts +28 -0
  565. package/src/memory/migrations/269-schedule-script-timeout.ts +11 -0
  566. package/src/memory/migrations/270-messages-role-created-at-index.ts +18 -0
  567. package/src/memory/migrations/270-schedule-source-conversation.ts +13 -0
  568. package/src/memory/migrations/271-create-auth-fallback-events.ts +21 -0
  569. package/src/memory/migrations/272-acp-session-history-cwd.ts +36 -0
  570. package/src/memory/migrations/__tests__/267-llm-usage-events-add-assistant-version.test.ts +117 -0
  571. package/src/memory/migrations/index.ts +7 -0
  572. package/src/memory/pkb/autoinject.ts +61 -0
  573. package/src/memory/pkb/context.ts +50 -0
  574. package/src/memory/pkb/types.ts +14 -0
  575. package/src/memory/schedule-attribution-sql.ts +104 -0
  576. package/src/memory/schema/acp.ts +4 -0
  577. package/src/memory/schema/infrastructure.ts +27 -0
  578. package/src/memory/usage-grouped-buckets.ts +6 -1
  579. package/src/memory/v2/__tests__/consolidation-job.test.ts +125 -1
  580. package/src/memory/v2/__tests__/migration.test.ts +11 -3
  581. package/src/memory/v2/__tests__/page-index.test.ts +37 -1
  582. package/src/memory/v2/__tests__/router.test.ts +14 -4
  583. package/src/memory/v2/__tests__/sweep-job.test.ts +6 -5
  584. package/src/memory/v2/backfill-jobs.ts +6 -0
  585. package/src/memory/v2/consolidation-job.ts +99 -10
  586. package/src/memory/v2/migration.ts +5 -3
  587. package/src/memory/v2/page-index.ts +11 -0
  588. package/src/memory/v2/router.ts +8 -11
  589. package/src/memory/v2/sweep-job.ts +8 -11
  590. package/src/memory/v2/types.ts +1 -0
  591. package/src/messaging/providers/slack/render-transcript.test.ts +1 -1
  592. package/src/messaging/providers/slack/render-transcript.ts +2 -2
  593. package/src/messaging/style-analyzer.ts +8 -11
  594. package/src/notifications/conversation-pairing.ts +8 -13
  595. package/src/notifications/decision-engine.ts +16 -16
  596. package/src/notifications/home-feed-side-effect.ts +12 -1
  597. package/src/notifications/preference-extractor.ts +11 -14
  598. package/src/permissions/prompter.ts +46 -36
  599. package/src/permissions/question-prompter.test.ts +35 -26
  600. package/src/permissions/question-prompter.ts +6 -10
  601. package/src/plugin-api/constants.ts +4 -0
  602. package/src/plugin-api/index.ts +9 -5
  603. package/src/plugin-api/types.ts +176 -4
  604. package/src/plugins/defaults/compaction/compact.ts +59 -0
  605. package/src/plugins/defaults/compaction/package.json +15 -0
  606. package/src/plugins/defaults/compaction/register.ts +24 -0
  607. package/src/plugins/defaults/empty-response/hooks/stop.ts +126 -0
  608. package/src/plugins/defaults/empty-response/package.json +15 -0
  609. package/src/plugins/defaults/empty-response/register.ts +23 -0
  610. package/src/plugins/defaults/history-repair/hooks/user-prompt-submit.ts +35 -0
  611. package/src/plugins/defaults/history-repair/package.json +15 -0
  612. package/src/plugins/defaults/history-repair/register.ts +24 -0
  613. package/src/{daemon/history-repair.ts → plugins/defaults/history-repair/terminal.ts} +48 -35
  614. package/src/plugins/defaults/index.ts +22 -49
  615. package/src/plugins/defaults/memory-retrieval/hooks/post-compact.ts +95 -0
  616. package/src/plugins/defaults/memory-retrieval/hooks/user-prompt-submit-temp.ts +216 -0
  617. package/src/plugins/defaults/memory-retrieval/injector-chain.ts +35 -0
  618. package/src/plugins/defaults/{injectors.ts → memory-retrieval/injectors.ts} +295 -112
  619. package/src/plugins/defaults/memory-v3-shadow/__tests__/assign.test.ts +242 -0
  620. package/src/plugins/defaults/memory-v3-shadow/__tests__/capabilities.test.ts +118 -0
  621. package/src/plugins/defaults/memory-v3-shadow/__tests__/core.test.ts +39 -0
  622. package/src/plugins/defaults/memory-v3-shadow/__tests__/fixtures/eval-turns.json +36 -0
  623. package/src/plugins/defaults/memory-v3-shadow/__tests__/fixtures/live-turns.json +37 -0
  624. package/src/plugins/defaults/memory-v3-shadow/__tests__/health.test.ts +219 -0
  625. package/src/plugins/defaults/memory-v3-shadow/__tests__/live-integration.test.ts +330 -0
  626. package/src/plugins/defaults/memory-v3-shadow/__tests__/maintain-job.test.ts +288 -0
  627. package/src/plugins/defaults/memory-v3-shadow/__tests__/needle.test.ts +107 -0
  628. package/src/plugins/defaults/memory-v3-shadow/__tests__/orchestrate.test.ts +436 -0
  629. package/src/plugins/defaults/memory-v3-shadow/__tests__/provider-blocks.test.ts +13 -0
  630. package/src/plugins/defaults/memory-v3-shadow/__tests__/reconcile.test.ts +274 -0
  631. package/src/plugins/defaults/memory-v3-shadow/__tests__/render-injection.test.ts +61 -0
  632. package/src/plugins/defaults/memory-v3-shadow/__tests__/router.test.ts +332 -0
  633. package/src/plugins/defaults/memory-v3-shadow/__tests__/selection-log-store.test.ts +179 -0
  634. package/src/plugins/defaults/memory-v3-shadow/__tests__/selector.test.ts +470 -0
  635. package/src/plugins/defaults/memory-v3-shadow/__tests__/shadow-plugin.test.ts +432 -0
  636. package/src/plugins/defaults/memory-v3-shadow/__tests__/snapshot.test.ts +168 -0
  637. package/src/plugins/defaults/memory-v3-shadow/__tests__/tree.test.ts +192 -0
  638. package/src/plugins/defaults/memory-v3-shadow/__tests__/types.test.ts +54 -0
  639. package/src/plugins/defaults/memory-v3-shadow/__tests__/working-set-eviction.test.ts +106 -0
  640. package/src/plugins/defaults/memory-v3-shadow/__tests__/working-set-skeleton.test.ts +44 -0
  641. package/src/plugins/defaults/memory-v3-shadow/assign.ts +268 -0
  642. package/src/plugins/defaults/memory-v3-shadow/capabilities.ts +124 -0
  643. package/src/plugins/defaults/memory-v3-shadow/core.ts +26 -0
  644. package/src/plugins/defaults/memory-v3-shadow/data/README.md +84 -0
  645. package/src/plugins/defaults/memory-v3-shadow/data/assignments.json +5 -0
  646. package/src/plugins/defaults/memory-v3-shadow/data/core.json +1 -0
  647. package/src/plugins/defaults/memory-v3-shadow/data/leaves/domain-a/topic-x.md +9 -0
  648. package/src/plugins/defaults/memory-v3-shadow/data/leaves/domain-a/topic-y.md +9 -0
  649. package/src/plugins/defaults/memory-v3-shadow/data/leaves/domain-b/topic-z.md +9 -0
  650. package/src/plugins/defaults/memory-v3-shadow/health.ts +0 -0
  651. package/src/plugins/defaults/memory-v3-shadow/hooks/post-compact.ts +14 -0
  652. package/src/plugins/defaults/memory-v3-shadow/hooks/user-prompt-submit.ts +19 -0
  653. package/src/plugins/defaults/memory-v3-shadow/injector.ts +75 -0
  654. package/src/plugins/defaults/memory-v3-shadow/llm-retry.ts +32 -0
  655. package/src/plugins/defaults/memory-v3-shadow/maintain-job.ts +314 -0
  656. package/src/plugins/defaults/memory-v3-shadow/needle.ts +115 -0
  657. package/src/plugins/defaults/memory-v3-shadow/orchestrate.ts +126 -0
  658. package/src/plugins/defaults/memory-v3-shadow/package.json +15 -0
  659. package/src/plugins/defaults/memory-v3-shadow/page-content.ts +34 -0
  660. package/src/plugins/defaults/memory-v3-shadow/provider-blocks.ts +26 -0
  661. package/src/plugins/defaults/memory-v3-shadow/reconcile.ts +523 -0
  662. package/src/plugins/defaults/memory-v3-shadow/register.ts +26 -0
  663. package/src/plugins/defaults/memory-v3-shadow/render-injection.ts +32 -0
  664. package/src/plugins/defaults/memory-v3-shadow/router.ts +190 -0
  665. package/src/plugins/defaults/memory-v3-shadow/selection-log-store.ts +84 -0
  666. package/src/plugins/defaults/memory-v3-shadow/selector.ts +226 -0
  667. package/src/plugins/defaults/memory-v3-shadow/shadow-plugin.ts +349 -0
  668. package/src/plugins/defaults/memory-v3-shadow/snapshot.ts +209 -0
  669. package/src/plugins/defaults/memory-v3-shadow/tree.ts +174 -0
  670. package/src/plugins/defaults/memory-v3-shadow/types.ts +59 -0
  671. package/src/plugins/defaults/memory-v3-shadow/working-set.ts +88 -0
  672. package/src/plugins/defaults/title-generate/hooks/stop.ts +75 -0
  673. package/src/plugins/defaults/title-generate/hooks/user-prompt-submit.ts +35 -0
  674. package/src/plugins/defaults/title-generate/package.json +15 -0
  675. package/src/plugins/defaults/title-generate/register.ts +35 -0
  676. package/src/plugins/defaults/tool-error/hooks/post-tool-use.ts +118 -0
  677. package/src/plugins/defaults/tool-error/package.json +15 -0
  678. package/src/plugins/defaults/tool-error/register.ts +23 -0
  679. package/src/plugins/defaults/tool-result-truncate/hooks/post-tool-use.ts +32 -0
  680. package/src/plugins/defaults/tool-result-truncate/package.json +15 -0
  681. package/src/plugins/defaults/tool-result-truncate/register.ts +24 -0
  682. package/src/plugins/defaults/tool-result-truncate/terminal.ts +132 -0
  683. package/src/plugins/external-plugin-loader.ts +2 -2
  684. package/src/plugins/pipeline.ts +6 -317
  685. package/src/plugins/registry.ts +10 -55
  686. package/src/plugins/types.ts +79 -849
  687. package/src/plugins/user-loader.ts +4 -3
  688. package/src/proactive-artifact/aux-message-injector.ts +4 -5
  689. package/src/proactive-artifact/job.test.ts +28 -21
  690. package/src/proactive-artifact/job.ts +3 -1
  691. package/src/prompts/__tests__/system-prompt.test.ts +42 -0
  692. package/src/prompts/sections.ts +20 -7
  693. package/src/prompts/templates/BOOTSTRAP-ACTIVATION-RAIL.md +64 -0
  694. package/src/prompts/templates/BOOTSTRAP-CONTENT-AUTOMATION.md +2 -2
  695. package/src/prompts/templates/BOOTSTRAP.md +7 -3
  696. package/src/prompts/templates/system-sections.ts +21 -0
  697. package/src/providers/__tests__/retry-callsite.test.ts +25 -25
  698. package/src/providers/__tests__/satellite-connection-routing.test.ts +7 -21
  699. package/src/providers/anthropic/client.ts +61 -34
  700. package/src/providers/call-site-routing.ts +1 -9
  701. package/src/providers/gemini/client.ts +152 -34
  702. package/src/providers/gemini/inline-media.ts +74 -0
  703. package/src/providers/openai/__tests__/chat-completions-provider-reasoning.test.ts +112 -2
  704. package/src/providers/openai/chat-completions-provider.ts +45 -4
  705. package/src/providers/openai/responses-provider.ts +1 -4
  706. package/src/providers/openrouter/client.ts +2 -6
  707. package/src/providers/placeholder-sentinels.ts +35 -0
  708. package/src/providers/provider-send-message.ts +6 -6
  709. package/src/providers/ratelimit.ts +1 -9
  710. package/src/providers/retry.ts +0 -5
  711. package/src/providers/types.ts +11 -2
  712. package/src/providers/usage-tracking.ts +1 -9
  713. package/src/runtime/__tests__/agent-wake.test.ts +141 -32
  714. package/src/runtime/__tests__/background-job-runner.test.ts +1 -3
  715. package/src/runtime/__tests__/interactive-ui.test.ts +1 -1
  716. package/src/runtime/agent-wake.ts +95 -23
  717. package/src/runtime/assistant-event-hub.ts +38 -8
  718. package/src/runtime/assistant-stream-state.ts +368 -0
  719. package/src/runtime/auth/__tests__/guard-tests.test.ts +75 -109
  720. package/src/runtime/auth/__tests__/route-policy.test.ts +153 -170
  721. package/src/runtime/auth/route-policy.ts +42 -1079
  722. package/src/runtime/background-job-runner.ts +1 -4
  723. package/src/runtime/btw-sidechain.ts +3 -1
  724. package/src/runtime/channel-approvals.ts +4 -15
  725. package/src/runtime/channel-invite-transport.ts +5 -6
  726. package/src/runtime/channel-readiness-service.ts +2 -5
  727. package/src/runtime/channel-retry-sweep.ts +12 -16
  728. package/src/runtime/http-router.ts +35 -43
  729. package/src/runtime/http-types.ts +23 -71
  730. package/src/runtime/interactive-ui.ts +1 -1
  731. package/src/runtime/invite-instruction-generator.ts +3 -3
  732. package/src/runtime/pending-interactions.ts +3 -2
  733. package/src/runtime/routes/__tests__/acp-routes.test.ts +253 -55
  734. package/src/runtime/routes/__tests__/avatar-state-routes.test.ts +565 -0
  735. package/src/runtime/routes/__tests__/consolidation-routes.test.ts +265 -2
  736. package/src/runtime/routes/__tests__/content-source-routes.test.ts +4 -4
  737. package/src/runtime/routes/__tests__/conversation-compaction-routes.test.ts +62 -32
  738. package/src/runtime/routes/__tests__/conversation-list-routes.test.ts +237 -0
  739. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +31 -1
  740. package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +13 -22
  741. package/src/runtime/routes/__tests__/memory-v2-routes.test.ts +6 -2
  742. package/src/runtime/routes/__tests__/memory-v2-simulate-route.test.ts +7 -2
  743. package/src/runtime/routes/__tests__/sanity-routes.test.ts +6 -6
  744. package/src/runtime/routes/__tests__/stt-routes.test.ts +3 -3
  745. package/src/runtime/routes/__tests__/suggest-trust-rule-routes.test.ts +5 -2
  746. package/src/runtime/routes/__tests__/surface-action-routes.test.ts +5 -4
  747. package/src/runtime/routes/__tests__/surface-content-routes.test.ts +4 -1
  748. package/src/runtime/routes/__tests__/tts-routes.test.ts +9 -5
  749. package/src/runtime/routes/acp-routes.test.ts +186 -100
  750. package/src/runtime/routes/acp-routes.ts +110 -35
  751. package/src/runtime/routes/app-management-routes.ts +93 -131
  752. package/src/runtime/routes/app-routes.ts +38 -20
  753. package/src/runtime/routes/approval-routes.ts +17 -5
  754. package/src/runtime/routes/attachment-routes.ts +51 -16
  755. package/src/runtime/routes/audio-routes.ts +1 -0
  756. package/src/runtime/routes/audit-routes.ts +5 -0
  757. package/src/runtime/routes/auth-routes.ts +5 -0
  758. package/src/runtime/routes/avatar-routes.ts +264 -59
  759. package/src/runtime/routes/background-tool-routes.ts +9 -0
  760. package/src/runtime/routes/background-wake-routes.ts +13 -3
  761. package/src/runtime/routes/backup-routes.ts +45 -0
  762. package/src/runtime/routes/bookmark-routes.ts +13 -0
  763. package/src/runtime/routes/brain-graph-routes.ts +9 -0
  764. package/src/runtime/routes/browser-routes.ts +6 -1
  765. package/src/runtime/routes/browser-tabs-routes.ts +11 -10
  766. package/src/runtime/routes/btw-routes.ts +34 -24
  767. package/src/runtime/routes/cache-routes.ts +13 -0
  768. package/src/runtime/routes/call-routes.ts +21 -10
  769. package/src/runtime/routes/channel-availability-routes.ts +5 -1
  770. package/src/runtime/routes/channel-readiness-routes.ts +37 -4
  771. package/src/runtime/routes/channel-route-definitions.ts +21 -0
  772. package/src/runtime/routes/channel-verification-routes.ts +21 -0
  773. package/src/runtime/routes/chatgpt-subscription-auth-routes.ts +9 -2
  774. package/src/runtime/routes/client-routes.ts +9 -0
  775. package/src/runtime/routes/consolidation-routes.ts +133 -25
  776. package/src/runtime/routes/contact-prompt-routes.ts +9 -0
  777. package/src/runtime/routes/contact-routes.ts +90 -23
  778. package/src/runtime/routes/content-source-routes.ts +5 -1
  779. package/src/runtime/routes/conversation-analysis-routes.ts +5 -1
  780. package/src/runtime/routes/conversation-attention-routes.ts +5 -0
  781. package/src/runtime/routes/conversation-cli-routes.ts +54 -7
  782. package/src/runtime/routes/conversation-compaction-routes.ts +54 -25
  783. package/src/runtime/routes/conversation-list-routes.ts +81 -12
  784. package/src/runtime/routes/conversation-management-routes.ts +57 -14
  785. package/src/runtime/routes/conversation-query-routes.ts +90 -41
  786. package/src/runtime/routes/conversation-routes.ts +446 -204
  787. package/src/runtime/routes/conversation-starter-routes.ts +35 -20
  788. package/src/runtime/routes/conversations-import-routes.ts +30 -8
  789. package/src/runtime/routes/credential-prompt-routes.ts +5 -0
  790. package/src/runtime/routes/credential-routes.ts +25 -6
  791. package/src/runtime/routes/debug-bash-routes.ts +5 -0
  792. package/src/runtime/routes/debug-routes.ts +11 -2
  793. package/src/runtime/routes/defer-routes.ts +13 -0
  794. package/src/runtime/routes/diagnostics-routes.ts +37 -46
  795. package/src/runtime/routes/disk-pressure-routes.ts +17 -31
  796. package/src/runtime/routes/document-comments-routes.ts +46 -27
  797. package/src/runtime/routes/documents-routes.ts +25 -10
  798. package/src/runtime/routes/domain-routes.ts +98 -51
  799. package/src/runtime/routes/email-routes.ts +33 -0
  800. package/src/runtime/routes/epoch-millis-range.ts +34 -0
  801. package/src/runtime/routes/events-routes.ts +107 -8
  802. package/src/runtime/routes/filing-routes.ts +9 -4
  803. package/src/runtime/routes/gateway-log-routes.ts +31 -4
  804. package/src/runtime/routes/global-search-routes.ts +53 -50
  805. package/src/runtime/routes/group-routes.ts +21 -5
  806. package/src/runtime/routes/guardian-action-routes.ts +9 -0
  807. package/src/runtime/routes/guardian-approval-interception.ts +0 -31
  808. package/src/runtime/routes/heartbeat-routes.ts +57 -21
  809. package/src/runtime/routes/home-feed-routes.ts +23 -19
  810. package/src/runtime/routes/home-state-routes.ts +8 -40
  811. package/src/runtime/routes/host-app-control-routes.ts +6 -1
  812. package/src/runtime/routes/host-bash-routes.ts +5 -0
  813. package/src/runtime/routes/host-browser-routes.ts +13 -0
  814. package/src/runtime/routes/host-cu-routes.ts +6 -1
  815. package/src/runtime/routes/host-file-routes.ts +26 -6
  816. package/src/runtime/routes/host-transfer-routes.ts +13 -2
  817. package/src/runtime/routes/http-adapter.ts +1 -2
  818. package/src/runtime/routes/identity-intro-cache.ts +28 -40
  819. package/src/runtime/routes/identity-routes.ts +236 -20
  820. package/src/runtime/routes/image-generation-routes.ts +45 -2
  821. package/src/runtime/routes/inbound-message-handler.ts +16 -12
  822. package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +0 -12
  823. package/src/runtime/routes/inbound-stages/background-dispatch.ts +15 -19
  824. package/src/runtime/routes/index.ts +2 -0
  825. package/src/runtime/routes/inference-profile-session-routes.ts +13 -3
  826. package/src/runtime/routes/inference-provider-connection-routes.ts +21 -5
  827. package/src/runtime/routes/inference-send-routes.ts +11 -11
  828. package/src/runtime/routes/integrations/a2a.ts +32 -7
  829. package/src/runtime/routes/integrations/slack/__tests__/channel.test.ts +16 -0
  830. package/src/runtime/routes/integrations/slack/channel.ts +23 -3
  831. package/src/runtime/routes/integrations/slack/share.ts +36 -8
  832. package/src/runtime/routes/integrations/telegram.ts +34 -9
  833. package/src/runtime/routes/integrations/twilio.ts +77 -7
  834. package/src/runtime/routes/integrations/vercel.ts +3 -3
  835. package/src/runtime/routes/internal-oauth-routes.ts +5 -0
  836. package/src/runtime/routes/internal-telemetry-routes.ts +88 -0
  837. package/src/runtime/routes/internal-twilio-routes.ts +13 -0
  838. package/src/runtime/routes/llm-call-sites-routes.ts +39 -4
  839. package/src/runtime/routes/log-export-routes.ts +36 -10
  840. package/src/runtime/routes/mcp-auth-routes.ts +25 -0
  841. package/src/runtime/routes/memory-item-routes.ts +21 -10
  842. package/src/runtime/routes/memory-v2-routes.ts +105 -44
  843. package/src/runtime/routes/memory-v3-routes.ts +306 -408
  844. package/src/runtime/routes/migration-rollback-routes.ts +5 -1
  845. package/src/runtime/routes/migration-routes.ts +29 -0
  846. package/src/runtime/routes/notification-routes.ts +17 -1
  847. package/src/runtime/routes/oauth-apps.ts +99 -23
  848. package/src/runtime/routes/oauth-commands-routes.ts +37 -14
  849. package/src/runtime/routes/oauth-connect-routes.ts +9 -0
  850. package/src/runtime/routes/oauth-lifecycle-routes.ts +5 -1
  851. package/src/runtime/routes/oauth-providers.ts +79 -15
  852. package/src/runtime/routes/platform-routes.ts +102 -5
  853. package/src/runtime/routes/playground/__tests__/force-compact.test.ts +9 -6
  854. package/src/runtime/routes/playground/__tests__/inject-failures.test.ts +37 -16
  855. package/src/runtime/routes/playground/__tests__/reset-circuit.test.ts +7 -3
  856. package/src/runtime/routes/playground/__tests__/state.test.ts +10 -3
  857. package/src/runtime/routes/playground/force-compact.ts +2 -2
  858. package/src/runtime/routes/playground/helpers.ts +1 -2
  859. package/src/runtime/routes/playground/inject-failures.ts +13 -8
  860. package/src/runtime/routes/playground/reset-circuit.ts +14 -9
  861. package/src/runtime/routes/playground/seed-conversation.ts +1 -1
  862. package/src/runtime/routes/playground/seeded-conversations.ts +3 -3
  863. package/src/runtime/routes/playground/state.ts +4 -3
  864. package/src/runtime/routes/plugins-routes.ts +22 -19
  865. package/src/runtime/routes/profiler-routes.ts +17 -4
  866. package/src/runtime/routes/ps-routes.ts +5 -0
  867. package/src/runtime/routes/publish-routes.ts +13 -3
  868. package/src/runtime/routes/question-routes.ts +5 -0
  869. package/src/runtime/routes/recording-routes.ts +25 -12
  870. package/src/runtime/routes/rename-conversation-routes.ts +10 -0
  871. package/src/runtime/routes/sanity-routes.ts +9 -2
  872. package/src/runtime/routes/schedule-routes.ts +288 -88
  873. package/src/runtime/routes/secret-routes.ts +31 -6
  874. package/src/runtime/routes/sequence-routes.ts +33 -0
  875. package/src/runtime/routes/settings-routes.ts +65 -19
  876. package/src/runtime/routes/skills-routes.ts +166 -73
  877. package/src/runtime/routes/slack-channel-routes.ts +5 -0
  878. package/src/runtime/routes/stt-routes.ts +13 -6
  879. package/src/runtime/routes/subagents-routes.ts +24 -18
  880. package/src/runtime/routes/suggest-trust-rule-routes.ts +7 -2
  881. package/src/runtime/routes/surface-action-routes.ts +9 -0
  882. package/src/runtime/routes/surface-content-routes.ts +10 -2
  883. package/src/runtime/routes/surface-conversation-resolver.ts +4 -3
  884. package/src/runtime/routes/task-routes.ts +37 -0
  885. package/src/runtime/routes/telemetry-routes.ts +9 -0
  886. package/src/runtime/routes/tool-call-confirmation-enrichment.test.ts +161 -0
  887. package/src/runtime/routes/tool-call-confirmation-enrichment.ts +107 -0
  888. package/src/runtime/routes/trace-event-routes.ts +42 -1
  889. package/src/runtime/routes/trust-rules-routes.ts +31 -2
  890. package/src/runtime/routes/tts-routes.ts +48 -6
  891. package/src/runtime/routes/types.ts +83 -16
  892. package/src/runtime/routes/ui-request-routes.ts +5 -0
  893. package/src/runtime/routes/upgrade-broadcast-routes.ts +5 -0
  894. package/src/runtime/routes/usage-routes.ts +118 -42
  895. package/src/runtime/routes/user-routes-cli.ts +9 -0
  896. package/src/runtime/routes/user-routes.ts +5 -1
  897. package/src/runtime/routes/wake-conversation-routes.ts +5 -0
  898. package/src/runtime/routes/watcher-routes.ts +21 -0
  899. package/src/runtime/routes/webhook-routes.ts +50 -2
  900. package/src/runtime/routes/wipe-conversation-routes.ts +5 -0
  901. package/src/runtime/routes/work-items-routes.ts +49 -23
  902. package/src/runtime/routes/workspace-commit-routes.ts +5 -0
  903. package/src/runtime/routes/workspace-routes.test.ts +42 -0
  904. package/src/runtime/routes/workspace-routes.ts +124 -9
  905. package/src/runtime/services/__tests__/analyze-conversation.test.ts +8 -4
  906. package/src/runtime/services/analyze-conversation.ts +5 -8
  907. package/src/runtime/services/conversation-serializer.ts +24 -2
  908. package/src/runtime/sync/resource-sync-events.ts +16 -2
  909. package/src/runtime/sync/sync-publisher.ts +2 -2
  910. package/src/schedule/run-script.ts +28 -3
  911. package/src/schedule/schedule-store.ts +28 -1
  912. package/src/schedule/schedule-usage-store.ts +83 -0
  913. package/src/schedule/scheduler.ts +15 -6
  914. package/src/signals/cancel.ts +2 -4
  915. package/src/signals/user-message.ts +5 -8
  916. package/src/skills/catalog-files.ts +4 -1
  917. package/src/skills/catalog-install.ts +3 -0
  918. package/src/skills/categories-cache.ts +118 -0
  919. package/src/skills/clawhub-files.ts +1 -0
  920. package/src/skills/skillssh-files.ts +1 -0
  921. package/src/subagent/manager.ts +20 -11
  922. package/src/telemetry/types.ts +55 -1
  923. package/src/telemetry/usage-telemetry-reporter.test.ts +250 -4
  924. package/src/telemetry/usage-telemetry-reporter.ts +88 -2
  925. package/src/tools/acp/context.ts +20 -0
  926. package/src/tools/acp/list-agents.test.ts +7 -1
  927. package/src/tools/acp/spawn.test.ts +198 -93
  928. package/src/tools/acp/spawn.ts +32 -70
  929. package/src/tools/acp/steer.test.ts +105 -8
  930. package/src/tools/acp/steer.ts +48 -17
  931. package/src/tools/apps/definitions.ts +8 -4
  932. package/src/tools/apps/executors.ts +13 -8
  933. package/src/tools/ask-question/ask-question-tool.test.ts +120 -105
  934. package/src/tools/ask-question/ask-question-tool.ts +85 -90
  935. package/src/tools/computer-use/definitions.ts +28 -24
  936. package/src/tools/credential-execution/make-authenticated-request.ts +56 -51
  937. package/src/tools/credential-execution/manage-secure-command-tool.ts +2 -2
  938. package/src/tools/credential-execution/run-authenticated-command.ts +82 -77
  939. package/src/tools/credentials/vault.ts +112 -111
  940. package/src/tools/execution-target.ts +1 -1
  941. package/src/tools/execution-timeout.ts +3 -4
  942. package/src/tools/executor.ts +1 -53
  943. package/src/tools/filesystem/edit.ts +45 -42
  944. package/src/tools/filesystem/list.ts +33 -30
  945. package/src/tools/filesystem/read.ts +54 -35
  946. package/src/tools/filesystem/write.ts +69 -32
  947. package/src/tools/host-filesystem/edit.ts +44 -42
  948. package/src/tools/host-filesystem/read.ts +49 -35
  949. package/src/tools/host-filesystem/transfer.ts +121 -108
  950. package/src/tools/host-filesystem/write.ts +33 -31
  951. package/src/tools/host-terminal/host-shell.ts +50 -48
  952. package/src/tools/memory/register.ts +23 -24
  953. package/src/tools/network/__tests__/web-search-metadata.test.ts +7 -1
  954. package/src/tools/network/__tests__/web-search.test.ts +11 -3
  955. package/src/tools/network/web-fetch.ts +49 -46
  956. package/src/tools/network/web-search-error.test.ts +248 -0
  957. package/src/tools/network/web-search-error.ts +267 -0
  958. package/src/tools/network/web-search.ts +223 -61
  959. package/src/tools/registry.ts +39 -16
  960. package/src/tools/schedule/create.ts +13 -0
  961. package/src/tools/schedule/update.ts +16 -0
  962. package/src/tools/shared/filesystem/audio-read.ts +122 -0
  963. package/src/tools/shared/filesystem/image-read.ts +1 -1
  964. package/src/tools/skills/execute.ts +34 -31
  965. package/src/tools/skills/load.ts +29 -23
  966. package/src/tools/subagent/notify-parent.ts +35 -32
  967. package/src/tools/subagent/spawn.ts +2 -4
  968. package/src/tools/system/avatar-generator.ts +13 -22
  969. package/src/tools/system/request-permission.ts +30 -27
  970. package/src/tools/terminal/safe-env.ts +10 -1
  971. package/src/tools/terminal/shell.ts +190 -61
  972. package/src/tools/tool-defaults.ts +20 -9
  973. package/src/tools/tool-manifest.ts +4 -4
  974. package/src/tools/types.ts +74 -23
  975. package/src/tools/ui-surface/definitions.ts +99 -10
  976. package/src/tts/__tests__/provider-catalog-consistency.test.ts +85 -1
  977. package/src/tts/provider-catalog.ts +76 -1
  978. package/src/usage/types.ts +10 -0
  979. package/src/util/errors.ts +2 -2
  980. package/src/util/map-limit.ts +27 -0
  981. package/src/util/mutex.ts +47 -0
  982. package/src/util/platform.ts +15 -12
  983. package/src/work-items/work-item-runner.ts +7 -2
  984. package/src/workspace/git-service.ts +1 -42
  985. package/src/workspace/migrations/028-recover-conversations-from-disk-view.ts +7 -20
  986. package/src/workspace/migrations/051-seed-conversation-summarization-callsite.ts +4 -5
  987. package/src/workspace/migrations/092-backfill-v3-leaves.ts +169 -0
  988. package/src/workspace/migrations/093-backfill-leaf-ids.ts +144 -0
  989. package/src/workspace/migrations/094-seed-avatar-manifest.ts +155 -0
  990. package/src/workspace/migrations/095-bump-heartbeat-interval-30m-to-60m.ts +51 -0
  991. package/src/workspace/migrations/096-reduce-quality-profile-effort.ts +72 -0
  992. package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +117 -0
  993. package/src/workspace/migrations/__tests__/094-seed-avatar-manifest.test.ts +136 -0
  994. package/src/workspace/migrations/__tests__/backfill-leaf-ids.test.ts +175 -0
  995. package/src/workspace/migrations/__tests__/backfill-v3-leaves.test.ts +124 -0
  996. package/src/workspace/migrations/registry.ts +12 -0
  997. package/src/workspace/provider-commit-message-generator.ts +15 -17
  998. package/tsconfig.json +4 -1
  999. package/src/__tests__/bootstrap-turn-cleanup.test.ts +0 -44
  1000. package/src/__tests__/circuit-breaker-pipeline.test.ts +0 -405
  1001. package/src/__tests__/compaction-pipeline.test.ts +0 -210
  1002. package/src/__tests__/compaction-timeout-recovery.test.ts +0 -262
  1003. package/src/__tests__/empty-response-pipeline.test.ts +0 -301
  1004. package/src/__tests__/history-repair-pipeline.test.ts +0 -396
  1005. package/src/__tests__/llm-call-pipeline.test.ts +0 -281
  1006. package/src/__tests__/memory-retrieval-pipeline.test.ts +0 -418
  1007. package/src/__tests__/persistence-pipeline.test.ts +0 -514
  1008. package/src/__tests__/pipeline-runner.test.ts +0 -565
  1009. package/src/__tests__/title-generate-pipeline.test.ts +0 -211
  1010. package/src/__tests__/token-estimate-pipeline.test.ts +0 -481
  1011. package/src/__tests__/tool-error-pipeline.test.ts +0 -241
  1012. package/src/__tests__/tool-execute-pipeline.test.ts +0 -417
  1013. package/src/__tests__/tool-result-truncate-pipeline.test.ts +0 -344
  1014. package/src/cli/commands/__tests__/memory-v3-render.test.ts +0 -340
  1015. package/src/cli/commands/memory-v3-render.ts +0 -491
  1016. package/src/daemon/bootstrap-turn-cleanup.ts +0 -45
  1017. package/src/daemon/message-types/disk-pressure.ts +0 -9
  1018. package/src/email/feature-gate.ts +0 -23
  1019. package/src/gallery/default-gallery.ts +0 -1359
  1020. package/src/gallery/gallery-manifest.ts +0 -28
  1021. package/src/memory/v3/__tests__/coactivation-store.test.ts +0 -422
  1022. package/src/memory/v3/__tests__/consolidation-job.test.ts +0 -466
  1023. package/src/memory/v3/__tests__/coretrieval-seed.test.ts +0 -270
  1024. package/src/memory/v3/__tests__/edge-learning-job.test.ts +0 -324
  1025. package/src/memory/v3/__tests__/edges.test.ts +0 -706
  1026. package/src/memory/v3/__tests__/filter.test.ts +0 -560
  1027. package/src/memory/v3/__tests__/gate.test.ts +0 -637
  1028. package/src/memory/v3/__tests__/index-composition.test.ts +0 -291
  1029. package/src/memory/v3/__tests__/loop.test.ts +0 -775
  1030. package/src/memory/v3/__tests__/retriever.test.ts +0 -226
  1031. package/src/memory/v3/__tests__/scouts.test.ts +0 -489
  1032. package/src/memory/v3/__tests__/shadow-diff.test.ts +0 -225
  1033. package/src/memory/v3/__tests__/shadow-middleware.test.ts +0 -398
  1034. package/src/memory/v3/__tests__/system-prompts.test.ts +0 -154
  1035. package/src/memory/v3/__tests__/traversal.test.ts +0 -508
  1036. package/src/memory/v3/__tests__/tree-index.test.ts +0 -280
  1037. package/src/memory/v3/__tests__/tree-store.test.ts +0 -529
  1038. package/src/memory/v3/__tests__/tree-walk.test.ts +0 -784
  1039. package/src/memory/v3/__tests__/validate.test.ts +0 -277
  1040. package/src/memory/v3/auto-edges.ts +0 -223
  1041. package/src/memory/v3/coactivation-store.ts +0 -124
  1042. package/src/memory/v3/consolidation-job.ts +0 -323
  1043. package/src/memory/v3/coretrieval-seed.ts +0 -240
  1044. package/src/memory/v3/edge-learning-job.ts +0 -160
  1045. package/src/memory/v3/edges.ts +0 -286
  1046. package/src/memory/v3/filter.ts +0 -286
  1047. package/src/memory/v3/gate.ts +0 -349
  1048. package/src/memory/v3/index-composition.ts +0 -126
  1049. package/src/memory/v3/llm-capture.ts +0 -46
  1050. package/src/memory/v3/loop.ts +0 -430
  1051. package/src/memory/v3/maintenance.ts +0 -144
  1052. package/src/memory/v3/prompt-context.ts +0 -33
  1053. package/src/memory/v3/prompts/consolidation.ts +0 -458
  1054. package/src/memory/v3/prompts/system-prompts.ts +0 -196
  1055. package/src/memory/v3/retriever.ts +0 -33
  1056. package/src/memory/v3/scouts.ts +0 -431
  1057. package/src/memory/v3/shadow-diff.ts +0 -287
  1058. package/src/memory/v3/shadow-middleware.ts +0 -347
  1059. package/src/memory/v3/traversal.ts +0 -211
  1060. package/src/memory/v3/tree-index.ts +0 -237
  1061. package/src/memory/v3/tree-store.ts +0 -394
  1062. package/src/memory/v3/tree-walk.ts +0 -356
  1063. package/src/memory/v3/types.ts +0 -65
  1064. package/src/memory/v3/validate.ts +0 -323
  1065. package/src/plugins/defaults/circuit-breaker.ts +0 -141
  1066. package/src/plugins/defaults/compaction.ts +0 -141
  1067. package/src/plugins/defaults/empty-response.ts +0 -124
  1068. package/src/plugins/defaults/history-repair.ts +0 -83
  1069. package/src/plugins/defaults/llm-call.ts +0 -77
  1070. package/src/plugins/defaults/memory-retrieval.ts +0 -219
  1071. package/src/plugins/defaults/overflow-reduce.ts +0 -185
  1072. package/src/plugins/defaults/persistence.ts +0 -146
  1073. package/src/plugins/defaults/title-generate.ts +0 -90
  1074. package/src/plugins/defaults/token-estimate.ts +0 -101
  1075. package/src/plugins/defaults/tool-error.ts +0 -119
  1076. package/src/plugins/defaults/tool-execute.ts +0 -87
  1077. package/src/plugins/defaults/tool-result-truncate.ts +0 -84
  1078. package/src/runtime/routes/__tests__/memory-v3-simulate-params.test.ts +0 -35
  1079. package/src/skills/category-inference.ts +0 -111
package/docs/plugins.md CHANGED
@@ -1,25 +1,32 @@
1
- # Plugin authoring guide
2
-
3
- Plugins let you extend the assistant by hooking middleware into named
4
- runtime pipelines, contributing tools/routes/skills, and injecting
5
- system-prompt content. This guide is the authoritative reference for how
6
- plugins are structured, registered, and executed — everything the code
7
- actually enforces.
8
-
9
- For a worked minimal example, see
10
- [`assistant/examples/plugins/echo/`](../examples/plugins/echo/README.md).
11
- That plugin observes every pipeline and logs to stderr, and is the fastest
12
- way to see the system in action.
1
+ # Plugins
2
+
3
+ > **Note:** This guide documents the **legacy** plugin architecture — the
4
+ > in-tree `register.ts` registration system. We are converging on
5
+ > the schema at
6
+ > [`experimental/plugins/README.md`](../../experimental/plugins/README.md)
7
+ > (file-based discovery, a `package.json` manifest, the
8
+ > `@vellumai/plugin-api` public contract). The plan is to reshape this guide
9
+ > section by section until it matches that one; wherever the two still
10
+ > differ is the next piece of consolidation work. New plugins should target
11
+ > the modern schema.
12
+
13
+ Plugins extend the assistant's default capabilities using hooks, tools,
14
+ skills, and more.
15
+
16
+ If you're authoring a plugin against the current convention, this file is
17
+ your map. Read [`examples/plugins/echo/`](../examples/plugins/echo/README.md)
18
+ alongside, it's the canonical reference implementation and exercises every
19
+ wired surface.
13
20
 
14
21
  ## Table of contents
15
22
 
23
+ - [TL;DR](#tldr)
24
+ - [What a plugin can contribute today](#what-a-plugin-can-contribute-today)
16
25
  - [Anatomy of a plugin](#anatomy-of-a-plugin)
17
26
  - [Where plugins live](#where-plugins-live)
18
27
  - [Manifest](#manifest)
19
28
  - [Registration](#registration)
20
- - [Middleware patterns](#middleware-patterns)
21
- - [Pipeline reference](#pipeline-reference)
22
- - [Timeouts](#timeouts)
29
+ - [Hooks](#hooks)
23
30
  - [Strict-fail semantics](#strict-fail-semantics)
24
31
  - [Credentials and config](#credentials-and-config)
25
32
  - [Tool, route, and skill contributions](#tool-route-and-skill-contributions)
@@ -29,13 +36,36 @@ way to see the system in action.
29
36
 
30
37
  ---
31
38
 
39
+ ## TL;DR
40
+
41
+ 1. Create a directory `<workspaceDir>/plugins/my-plugin/`.
42
+ 2. Drop a `package.json` with a `name` and a `peerDependencies["@vellumai/plugin-api"]` semver range.
43
+ 3. Add `hooks/<name>.ts` files (default export = hook function).
44
+ 4. Add `tools/<name>.ts` files (default export = tool definition).
45
+ 5. Restart the assistant — the loader scans `<workspaceDir>/plugins/*` and
46
+ registers the plugin on startup.
47
+
48
+ ## What a plugin can contribute today
49
+
50
+ | Surface | Where | Discovery |
51
+ | -------------------------- | --------------- | ------------------------------------------ |
52
+ | Model-visible tools | `plugin.tools` | each `PluginToolRegistration` |
53
+ | HTTP routes | `plugin.routes` | each `PluginRouteRegistration` |
54
+ | Skills | `plugin.skills` | each `PluginSkillRegistration` |
55
+ | Lifecycle & per-turn hooks | `plugin.hooks` | keyed by hook name (`init`, `shutdown`, …) |
56
+
57
+ The modern schema wires only **hooks** and **tools**; routes and skills
58
+ above are the surfaces that still have no modern equivalent.
59
+
60
+ ---
61
+
32
62
  ## Anatomy of a plugin
33
63
 
34
64
  A plugin is a directory that exports a single `register.ts` (or compiled
35
65
  `register.js`) entry point. That file builds a `Plugin` object and passes
36
66
  it to `registerPlugin()` as an import-time side effect. Everything else —
37
- pipeline middleware, lifecycle hooks, model-visible capabilities — hangs
38
- off that one `Plugin` object.
67
+ lifecycle hooks, model-visible capabilities — hangs off that one `Plugin`
68
+ object.
39
69
 
40
70
  ```
41
71
  my-plugin/
@@ -50,19 +80,17 @@ The `Plugin` shape is declared in
50
80
  ```typescript
51
81
  export interface Plugin {
52
82
  manifest: PluginManifest;
53
- init?(ctx: PluginInitContext): Promise<void>;
54
- onShutdown?(): Promise<void>;
55
- tools?: PluginToolRegistration[];
83
+ hooks?: PluginHooks;
84
+ tools?: Tool[];
56
85
  routes?: PluginRouteRegistration[];
57
86
  skills?: PluginSkillRegistration[];
58
- injectors?: Injector[];
59
- middleware?: Partial<PipelineMiddlewareMap>;
60
87
  }
61
88
  ```
62
89
 
63
90
  Every field except `manifest` is optional. A plugin that only contributes
64
- middleware doesn't need tools or routes; a plugin that only contributes a
65
- skill can omit middleware entirely.
91
+ a hook doesn't need tools or routes; a plugin that only contributes a
92
+ skill can omit everything else. Lifecycle and per-turn behavior live under
93
+ `hooks` (see [Hooks](#hooks)).
66
94
 
67
95
  ## Where plugins live
68
96
 
@@ -220,7 +248,7 @@ const myPlugin: Plugin = {
220
248
  name: "my-plugin",
221
249
  version: "0.1.0",
222
250
  },
223
- middleware: {
251
+ hooks: {
224
252
  /* ... */
225
253
  },
226
254
  };
@@ -256,180 +284,31 @@ and they have no module-identity effect at runtime.
256
284
  - The bridge is installed by the daemon before `loadUserPlugins()` runs, so
257
285
  the global is always present when a plugin's module body executes.
258
286
 
259
- ## Middleware patterns
260
-
261
- Middleware is the heart of the plugin system. Every pipeline slot uses the
262
- same onion-style signature:
263
-
264
- ```typescript
265
- export type Middleware<A, R> = (
266
- args: A,
267
- next: (args: A) => Promise<R>,
268
- ctx: TurnContext,
269
- ) => Promise<R>;
270
- ```
271
-
272
- The runner composes an array of middleware around a terminal handler. The
273
- first middleware sees the request first and the response last; the
274
- terminal runs at the innermost layer. See
275
- [`assistant/src/plugins/pipeline.ts`](../src/plugins/pipeline.ts) for the
276
- composition algorithm.
277
-
278
- Four common patterns emerge from that signature:
279
-
280
- ### Observe-only
281
-
282
- Record something without changing the call. Call `next(args)` unchanged,
283
- return the result unchanged. Wrap the call in `try`/`finally` so your
284
- observer runs on both success and failure paths.
285
-
286
- ```typescript
287
- const observer: Middleware<ToolExecuteArgs, ToolExecuteResult> =
288
- async function observeToolExecute(args, next, ctx) {
289
- const start = performance.now();
290
- let outcome: "success" | "error" = "success";
291
- try {
292
- return await next(args);
293
- } catch (err) {
294
- outcome = "error";
295
- throw err;
296
- } finally {
297
- const ms = Math.round(performance.now() - start);
298
- console.error(JSON.stringify({ tool: args.name, ms, outcome }));
299
- }
300
- };
301
- ```
302
-
303
- ### Transform input
304
-
305
- Rewrite `args` before calling downstream. Useful for request shimming
306
- (adding headers, redacting inputs, picking a different provider).
307
-
308
- ```typescript
309
- const addHeader: Middleware<LLMCallArgs, LLMCallResult> =
310
- async function addHeader(args, next, ctx) {
311
- const tagged = {
312
- ...args,
313
- options: {
314
- ...args.options,
315
- config: { ...args.options?.config, requestId: ctx.requestId },
316
- },
317
- };
318
- return next(tagged);
319
- };
320
- ```
321
-
322
- ### Transform output
323
-
324
- Call `next(args)` first, then modify the result before returning.
287
+ ## Hooks
325
288
 
326
- ```typescript
327
- const redactPII: Middleware<LLMCallArgs, LLMCallResult> =
328
- async function redactPII(args, next, ctx) {
329
- const response = await next(args);
330
- return {
331
- ...response,
332
- content: response.content.map(redactBlock),
333
- };
334
- };
335
- ```
289
+ Hooks are the **modern** lifecycle surface: a plugin contributes one
290
+ function per phase under `plugin.hooks`, keyed by hook name. The wired
291
+ hook names live in [`HOOKS`](../src/plugin-api/constants.ts); the context
292
+ shapes and a full authoring walkthrough live in the
293
+ [experimental plugin guide](../../experimental/plugins/README.md#hooks).
336
294
 
337
- ### Short-circuit
338
-
339
- Do not call `next(args)` — return a synthetic result directly. The
340
- terminal and any inner middleware are skipped. Use this to stub, cache,
341
- or mock a pipeline.
342
-
343
- ```typescript
344
- const cacheHit: Middleware<LLMCallArgs, LLMCallResult> =
345
- async function cacheHit(args, next, ctx) {
346
- const cached = await lookupCache(args);
347
- if (cached) return cached;
348
- return next(args);
349
- };
350
- ```
351
-
352
- ### Veto (throw)
353
-
354
- Throwing from middleware aborts the pipeline. The error propagates out
355
- through any outer middleware unchanged — there is no internal
356
- `try`/`catch` around user middleware.
357
-
358
- ```typescript
359
- const denyIfUnauthorized: Middleware<ToolExecuteArgs, ToolExecuteResult> =
360
- async function denyIfUnauthorized(args, next, ctx) {
361
- if (!isAuthorizedFor(args.name, ctx.trust)) {
362
- throw new Error(`tool ${args.name} denied by policy`);
363
- }
364
- return next(args);
365
- };
366
- ```
295
+ Every hook implements `PluginHookFn` — it receives a context and either
296
+ mutates it in place (returning `void`) or returns a replacement. Hooks
297
+ from multiple plugins chain in registration order, and defaults register
298
+ first.
367
299
 
368
- ### Naming middleware
369
-
370
- Give middleware a stable `name` (via `async function <name>(…)`). The
371
- pipeline runner pulls `Function.name` into its `chain` log field so
372
- operators can see the registered chain at a glance:
373
-
374
- ```
375
- plugin.pipeline pipeline=llmCall chain=["observeLlm","addHeader","defaultLlmCall"] durationMs=1840 outcome=success
376
- ```
377
-
378
- ## Pipeline reference
379
-
380
- Every pipeline slot and its purpose. Type details live in
381
- [`types.ts`](../src/plugins/types.ts).
382
-
383
- | Pipeline | Purpose |
384
- | -------------------- | ------------------------------------------------------------------------------------------------------------- |
385
- | `turn` | The outermost wrapper around a single assistant turn. Middleware here sees everything a turn does end-to-end. |
386
- | `llmCall` | Every call to `Provider.sendMessage`. Input carries `messages`, `tools`, `systemPrompt`, `options`. |
387
- | `toolExecute` | Every `ToolExecutor.execute` call. Input carries `name`, `input`, and the full `ToolContext`. |
388
- | `memoryRetrieval` | PKB, NOW.md, and memory-graph retrieval for a turn. Output is a merged `MemoryResult`. |
389
- | `historyRepair` | The pre-run repair pass on the message history. Wraps `repairHistory`. |
390
- | `tokenEstimate` | The token-count estimate used for budgeting. Wraps `estimatePromptTokensRaw`. |
391
- | `compaction` | The conversation-compaction step. Wraps `ContextWindowManager.maybeCompact`. |
392
- | `overflowReduce` | The reducer tier loop invoked when a turn blows the context budget. |
393
- | `persistence` | Every message CRUD op (`add` / `update` / `delete`). Discriminated by `args.op`. |
394
- | `titleGenerate` | Conversation title generation. Fire-and-forget by default. |
395
- | `toolResultTruncate` | The per-tool-result truncation step that fits a tool's output into the context window. |
396
- | `emptyResponse` | The decision about what to do when the model returns an empty turn (nudge / accept / error). |
397
- | `toolError` | The decision about what to do when one or more tool calls errored on a turn. |
398
- | `circuitBreaker` | The compaction circuit breaker. Tracks consecutive-failure state, decides whether to open the circuit. |
399
-
400
- ## Timeouts
401
-
402
- Each pipeline has a default timeout budget in milliseconds. When the
403
- budget is exceeded the runner throws `PluginTimeoutError` carrying the
404
- pipeline name, the offending plugin's name (if known), and the elapsed
405
- duration. See
406
- [`assistant/src/plugins/pipeline.ts`](../src/plugins/pipeline.ts) for the
407
- current values.
408
-
409
- | Pipeline | Timeout | Rationale |
410
- | -------------------- | -------- | -------------------------------------------------------------------------------------------------------------- |
411
- | `turn` | none | Turn duration is bounded by the downstream `llmCall` / `toolExecute` timeouts, not a pipeline-level timer. |
412
- | `llmCall` | none | Deferred to the provider's HTTP timeout so network hiccups surface as provider errors, not pipeline timeouts. |
413
- | `toolExecute` | none | Deferred to the per-tool timeout already enforced by `ToolExecutor`. |
414
- | `memoryRetrieval` | 5000 ms | Memory reads may hit Qdrant and disk; 5 s leaves slack for cold caches without blocking the turn indefinitely. |
415
- | `historyRepair` | 1000 ms | CPU-bound list walk — should finish in a few ms. |
416
- | `tokenEstimate` | 1000 ms | Same — CPU-bound, should return instantly. |
417
- | `compaction` | 30000 ms | Summarization involves a provider call; mirrors the pipeline-level budget for LLM-backed operations. |
418
- | `overflowReduce` | 30000 ms | Iterative compaction; matches the `compaction` budget since each tier step may invoke it. |
419
- | `persistence` | 10000 ms | SQLite writes, Qdrant deletes, and disk syncs. 10 s is generous for the slowest op (batched segment inserts). |
420
- | `titleGenerate` | 30000 ms | Provider-backed. Fire-and-forget, but the budget exists so a stuck call doesn't leak forever. |
421
- | `toolResultTruncate` | 1000 ms | Pure string op. |
422
- | `emptyResponse` | 500 ms | Decision logic only — must be near-instant. |
423
- | `toolError` | 500 ms | Decision logic only — must be near-instant. |
424
- | `circuitBreaker` | 500 ms | Numeric state update — must be near-instant. |
425
-
426
- `null` timeouts skip the timer entirely. Finite timeouts arm a
427
- `setTimeout` that races the pipeline via `Promise.race`.
300
+ | Hook | Fires | Context |
301
+ | -------------------- | ----------------------------------------------------------------- | ------------------------- |
302
+ | `init` | Once when the plugin is registered. | `PluginInitContext` |
303
+ | `shutdown` | Once when the plugin is torn down. | `PluginShutdownContext` |
304
+ | `user-prompt-submit` | Once per user turn, before the agent loop receives the messages. | `UserPromptSubmitContext` |
305
+ | `post-tool-use` | Once per tool result, before it joins the provider-bound history. | `PostToolUseContext` |
306
+ | `stop` | Once per run when the model yields a turn with no tool calls. | `StopContext` |
428
307
 
429
308
  ## Strict-fail semantics
430
309
 
431
- **Plugin errors and timeouts fail the turn loudly. There is no silent
432
- fallback to the default behavior.**
310
+ **Plugin errors fail the turn loudly. There is no silent fallback to the
311
+ default behavior.**
433
312
 
434
313
  This is a deliberate design decision. The old inline behavior silently
435
314
  absorbed many edge cases (a memory retrieval failure became an empty
@@ -439,20 +318,15 @@ logs nobody checked.
439
318
 
440
319
  With strict-fail:
441
320
 
442
- - Any error thrown from middleware propagates up to the caller. The
443
- pipeline runner does not catch it.
444
- - Any `PluginTimeoutError` from a budget breach propagates identically.
321
+ - Any error thrown from a hook propagates up to the caller. The hook
322
+ runner does not catch it.
445
323
  - The caller (agent loop, memory subsystem, whoever) decides how to
446
- degrade. The pipeline itself does not paper over the failure.
447
- - Exactly one structured log line is emitted per pipeline invocation, in
448
- a `finally` block, regardless of outcome. It carries `outcome`
449
- (`"success" | "error" | "timeout"`), `durationMs`, `chain`, plugin
450
- attribution, and error details when applicable.
451
-
452
- If you're writing middleware that wants to "try, fall back to default on
453
- failure," express that at the call site instead — wrap the pipeline
324
+ degrade. The runner itself does not paper over the failure.
325
+
326
+ If you're writing a hook that wants to "try, fall back to default on
327
+ failure," express that at the call site instead — wrap the hook
454
328
  invocation in your own try/catch. Do not swallow the error inside your
455
- middleware's `try`/`catch` and silently return a degraded result.
329
+ hook's `try`/`catch` and silently return a degraded result.
456
330
 
457
331
  ## Credentials and config
458
332
 
@@ -542,7 +416,7 @@ assistant restart. The bootstrap creates it on demand.
542
416
  ## Tool, route, and skill contributions
543
417
 
544
418
  Plugins can contribute model-visible capabilities alongside their
545
- middleware. Each is optional.
419
+ hooks. Each is optional.
546
420
 
547
421
  ### Tools (`plugin.tools`)
548
422
 
@@ -632,37 +506,6 @@ See
632
506
  [`plugin-skill-contributions.ts`](../src/plugins/plugin-skill-contributions.ts)
633
507
  for the in-memory registry details and ref-counted lifecycle.
634
508
 
635
- ### Injectors (`plugin.injectors`)
636
-
637
- An array of `Injector` objects that emit system-prompt-time content.
638
- Each has a stable `name`, an ascending `order` used to position it in the
639
- injection chain, and a `produce(ctx)` method that returns an
640
- `InjectionBlock` or `null`.
641
-
642
- The default injectors use `order` 10 through 70 with gaps of 10, so
643
- plugin-contributed injectors can slot at `25`, `35`, etc. without
644
- renumbering.
645
-
646
- ```typescript
647
- const myPlugin: Plugin = {
648
- manifest: {
649
- /* ... */
650
- },
651
- injectors: [
652
- {
653
- name: "my-plugin/status",
654
- order: 25,
655
- async produce(ctx) {
656
- return {
657
- id: "my-plugin/status",
658
- text: `<my_plugin_status>ok</my_plugin_status>`,
659
- };
660
- },
661
- },
662
- ],
663
- };
664
- ```
665
-
666
509
  ## Cross-plugin communication
667
510
 
668
511
  Plugins should not call each other directly. There is no cross-plugin
@@ -743,50 +586,6 @@ The config block under `config.plugins.<name>` failed the manifest's
743
586
  parser. Check your config against the plugin's schema — the error
744
587
  message carries the validator's diagnostic.
745
588
 
746
- ### `PluginTimeoutError: Plugin pipeline '<name>' timed out after N ms`
747
-
748
- A plugin's middleware exceeded the pipeline's budget. The offending
749
- plugin is named in `ctx.pluginName` when available. Tighten the
750
- middleware (it's probably blocking on I/O it shouldn't) or, if the
751
- work is genuinely heavy, move it out of the critical path into a
752
- background job that publishes results through `assistantEventHub`.
753
-
754
- ### Reading pipeline log records
755
-
756
- Every pipeline invocation emits one structured line tagged
757
- `event=plugin.pipeline`. The fields:
758
-
759
- | Field | Meaning |
760
- | ------------------------------------------ | ----------------------------------------------------------------------- |
761
- | `pipeline` | Pipeline name (`llmCall`, `toolExecute`, …). |
762
- | `chain` | Ordered list of middleware function names, outermost first. |
763
- | `durationMs` | Total time spent in the composed chain. |
764
- | `outcome` | `"success"`, `"error"`, or `"timeout"`. |
765
- | `pluginName` | The specific plugin's name when the runner could attribute the frame. |
766
- | `timeoutMs` | The configured budget (only when one was set). |
767
- | `errorName`, `errorMessage`, `errorStack` | Present on failure outcomes. |
768
- | `requestId`, `conversationId`, `turnIndex` | Per-turn context for correlating with the rest of the assistant's logs. |
769
-
770
- Pipe the assistant's stderr through `jq` to filter and inspect:
771
-
772
- ```bash
773
- tail -f ~/.vellum/daemon.log | jq 'select(.event == "plugin.pipeline")'
774
- ```
775
-
776
- To isolate slow pipelines:
777
-
778
- ```bash
779
- tail -f ~/.vellum/daemon.log \
780
- | jq 'select(.event == "plugin.pipeline" and .durationMs > 1000)'
781
- ```
782
-
783
- To isolate errors and timeouts:
784
-
785
- ```bash
786
- tail -f ~/.vellum/daemon.log \
787
- | jq 'select(.event == "plugin.pipeline" and .outcome != "success")'
788
- ```
789
-
790
589
  ### Plugin not loading at all
791
590
 
792
591
  - Confirm the directory is under `<workspaceDir>/plugins/`.
@@ -1,32 +1,30 @@
1
1
  # Echo plugin
2
2
 
3
- Minimal example plugin. Observes every assistant pipeline and logs one JSON
4
- line per invocation to `stderr`:
3
+ Minimal example plugin. Observes the assistant's turn-lifecycle hooks and logs
4
+ one JSON line per hook invocation to `stderr`:
5
5
 
6
6
  ```json
7
- {"plugin":"echo","pipeline":"toolExecute","durationMs":42,"outcome":"success"}
8
- {"plugin":"echo","pipeline":"llmCall","durationMs":1873,"outcome":"success"}
7
+ {
8
+ "plugin": "echo",
9
+ "hook": "post-tool-use",
10
+ "conversationId": "conv_abc123"
11
+ }
9
12
  ```
10
13
 
11
14
  Use this as a starting point for writing your own plugin, or as a quick way
12
- to eyeball which pipelines fire during a conversation and how long they
13
- take.
15
+ to eyeball which hooks fire during a conversation.
14
16
 
15
17
  For the full plugin authoring guide, see
16
18
  [`assistant/docs/plugins.md`](../../../docs/plugins.md).
17
19
 
18
20
  ## What it does
19
21
 
20
- - Registers one observer middleware per slot in
21
- `PipelineMiddlewareMap` — `turn`, `llmCall`, `toolExecute`,
22
- `memoryRetrieval`, `historyRepair`, `tokenEstimate`, `compaction`,
23
- `overflowReduce`, `persistence`, `titleGenerate`, `toolResultTruncate`,
24
- `emptyResponse`, `toolError`, and `circuitBreaker`.
25
- - Each middleware calls `next(args)` to pass the request through unchanged,
26
- measures wall-clock duration, and emits one line to `stderr` whether the
27
- downstream succeeded or threw.
28
- - Never modifies arguments, never rewrites results, never swallows errors.
29
- It is purely observational — safe to stack alongside any other plugin.
22
+ - Registers one observer hook per turn-lifecycle event:
23
+ `user-prompt-submit`, `post-tool-use`, and `stop`.
24
+ - Each hook emits one line to `stderr` and returns `void`, so the threaded
25
+ context flows through unchanged.
26
+ - Never modifies the turn's messages, tool results, or stop decision. It is
27
+ purely observational — safe to stack alongside any other plugin.
30
28
 
31
29
  ## Install locally
32
30
 
@@ -86,28 +84,23 @@ vellum restart
86
84
  ## Verify it works
87
85
 
88
86
  With the plugin installed and the assistant restarted, send any message
89
- that exercises a pipeline — a conversation turn, a tool call, a title
90
- generation — and tail the assistant's stderr log:
87
+ that exercises a turn — a conversation reply, a tool call — and tail the
88
+ assistant's stderr log:
91
89
 
92
90
  ```bash
93
91
  tail -f ~/.vellum/daemon.log
94
92
  ```
95
93
 
96
- You should see one line per pipeline invocation, similar to:
94
+ You should see one line per hook invocation, similar to:
97
95
 
98
96
  ```json
99
- {"plugin":"echo","pipeline":"persistence","durationMs":3,"outcome":"success"}
100
- {"plugin":"echo","pipeline":"tokenEstimate","durationMs":1,"outcome":"success"}
101
- {"plugin":"echo","pipeline":"memoryRetrieval","durationMs":64,"outcome":"success"}
102
- {"plugin":"echo","pipeline":"historyRepair","durationMs":0,"outcome":"success"}
103
- {"plugin":"echo","pipeline":"llmCall","durationMs":1520,"outcome":"success"}
104
- {"plugin":"echo","pipeline":"turn","durationMs":1590,"outcome":"success"}
97
+ {
98
+ "plugin": "echo",
99
+ "hook": "post-tool-use",
100
+ "conversationId": "conv_abc123"
101
+ }
105
102
  ```
106
103
 
107
- If a pipeline throws (for example, a tool that errors out), you'll see a
108
- line with `"outcome":"error"` — the plugin rethrows after logging so the
109
- original error still propagates.
110
-
111
104
  ## Uninstall
112
105
 
113
106
  Remove the symlink (or the copied directory) and restart the assistant:
@@ -120,13 +113,11 @@ vellum restart
120
113
  ## Next steps
121
114
 
122
115
  - Read [`assistant/docs/plugins.md`](../../../docs/plugins.md) for the full
123
- plugin authoring guide: manifest shape, middleware patterns
124
- (observe / transform / short-circuit / veto), strict-fail semantics, the
125
- per-pipeline timeout table, credential and config access, and
126
- troubleshooting.
116
+ plugin authoring guide: manifest shape, hook patterns
117
+ (observe / transform), credential and config access, and troubleshooting.
127
118
  - Look at the first-party default plugins under
128
- `assistant/src/plugins/defaults/` for examples of non-observational
129
- middleware.
119
+ `assistant/src/plugins/defaults/` for examples of hooks that transform a
120
+ turn rather than just observing it.
130
121
  - Build your own plugin by copying this directory, renaming the manifest
131
- `name`, and replacing the observer with a middleware that does whatever
132
- you need.
122
+ `name`, and replacing the observer hooks with ones that do whatever you
123
+ need.