@vellumai/assistant 0.8.8 → 0.8.9-staging.1

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 (340) hide show
  1. package/bun.lock +2 -2
  2. package/examples/plugins/echo/README.md +61 -60
  3. package/examples/plugins/echo/hooks/post-tool-use.ts +18 -0
  4. package/examples/plugins/echo/hooks/stop.ts +16 -0
  5. package/examples/plugins/echo/hooks/user-prompt-submit.ts +18 -0
  6. package/examples/plugins/echo/package.json +1 -2
  7. package/examples/plugins/echo/src/emit.ts +19 -0
  8. package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +7 -6
  9. package/openapi.yaml +236 -6
  10. package/package.json +2 -2
  11. package/src/__tests__/agent-loop-callsite-precedence.test.ts +69 -14
  12. package/src/__tests__/agent-loop-exit-reason.test.ts +185 -140
  13. package/src/__tests__/agent-loop-mutable-latest-user-message.test.ts +50 -35
  14. package/src/__tests__/agent-loop-output-hooks.test.ts +357 -0
  15. package/src/__tests__/agent-loop-override-profile.test.ts +25 -6
  16. package/src/__tests__/agent-loop-provider-error-recording.test.ts +41 -21
  17. package/src/__tests__/agent-loop-thinking.test.ts +36 -20
  18. package/src/__tests__/agent-loop.test.ts +441 -96
  19. package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +14 -14
  20. package/src/__tests__/agent-wake-override-profile.test.ts +17 -21
  21. package/src/__tests__/anthropic-provider.test.ts +1 -1
  22. package/src/__tests__/app-control-flow.test.ts +1 -1
  23. package/src/__tests__/app-dir-path-guard.test.ts +1 -0
  24. package/src/__tests__/approval-cascade.test.ts +5 -4
  25. package/src/__tests__/approval-routes-http.test.ts +4 -1
  26. package/src/__tests__/background-workers-disk-pressure.test.ts +1 -1
  27. package/src/__tests__/channel-approval-routes.test.ts +1 -1
  28. package/src/__tests__/channel-approvals.test.ts +1 -1
  29. package/src/__tests__/compaction-circuit.test.ts +258 -0
  30. package/src/__tests__/compaction-direct.test.ts +132 -0
  31. package/src/__tests__/compaction-events.test.ts +5 -5
  32. package/src/__tests__/conversation-abort-tool-results.test.ts +6 -4
  33. package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +7 -10
  34. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +59 -103
  35. package/src/__tests__/conversation-agent-loop-overflow.test.ts +94 -189
  36. package/src/__tests__/conversation-agent-loop.test.ts +249 -490
  37. package/src/__tests__/conversation-clean-command.test.ts +5 -2
  38. package/src/__tests__/conversation-confirmation-signals.test.ts +5 -4
  39. package/src/__tests__/conversation-crud-inference-profile.test.ts +7 -9
  40. package/src/__tests__/conversation-process-app-control-preactivation.test.ts +4 -4
  41. package/src/__tests__/conversation-process-callsite.test.ts +14 -14
  42. package/src/__tests__/conversation-provider-retry-repair.test.ts +18 -16
  43. package/src/__tests__/conversation-queue.test.ts +9 -9
  44. package/src/__tests__/conversation-runtime-assembly.test.ts +923 -231
  45. package/src/__tests__/conversation-runtime-workspace.test.ts +115 -20
  46. package/src/__tests__/conversation-slash-queue.test.ts +6 -4
  47. package/src/__tests__/conversation-slash-unknown.test.ts +6 -4
  48. package/src/__tests__/conversation-speed-override.test.ts +10 -9
  49. package/src/__tests__/conversation-starter-routes.test.ts +14 -6
  50. package/src/__tests__/conversation-workspace-cache-state.test.ts +23 -20
  51. package/src/__tests__/conversation-workspace-injection.test.ts +68 -6
  52. package/src/__tests__/conversation-workspace-tool-tracking.test.ts +14 -11
  53. package/src/__tests__/conversations-import-system-filter.test.ts +101 -0
  54. package/src/__tests__/credential-security-invariants.test.ts +0 -1
  55. package/src/__tests__/db-acp-history.test.ts +101 -0
  56. package/src/__tests__/dynamic-page-surface.test.ts +31 -0
  57. package/src/__tests__/empty-response-hook.test.ts +1 -1
  58. package/src/__tests__/file-write-tool.test.ts +63 -0
  59. package/src/__tests__/gateway-only-guard.test.ts +12 -2
  60. package/src/__tests__/guardian-grant-minting.test.ts +1 -1
  61. package/src/__tests__/guardian-routing-invariants.test.ts +2 -4
  62. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +1 -1
  63. package/src/__tests__/heartbeat-disk-pressure.test.ts +1 -0
  64. package/src/__tests__/heartbeat-service.test.ts +1 -0
  65. package/src/__tests__/history-repair-hook.test.ts +1 -1
  66. package/src/__tests__/host-app-control-routes.test.ts +1 -1
  67. package/src/__tests__/host-cu-routes-targeted.test.ts +3 -3
  68. package/src/__tests__/inference-profile-reaper.test.ts +62 -0
  69. package/src/__tests__/inference-profile-session-handler.test.ts +86 -0
  70. package/src/__tests__/injector-background-turn.test.ts +13 -23
  71. package/src/__tests__/injector-chain.test.ts +268 -44
  72. package/src/__tests__/injector-disk-pressure.test.ts +210 -52
  73. package/src/__tests__/injector-document-comments.test.ts +97 -114
  74. package/src/__tests__/injector-pkb-v2-silenced.test.ts +2 -2
  75. package/src/__tests__/injector-v3-suppression.test.ts +4 -4
  76. package/src/__tests__/list-messages-client-message-id.test.ts +91 -0
  77. package/src/__tests__/list-messages-hidden-metadata.test.ts +38 -0
  78. package/src/__tests__/memory-retrieval-hook.test.ts +73 -6
  79. package/src/__tests__/memory-v2-static-injector.test.ts +86 -8
  80. package/src/__tests__/parallel-tool.benchmark.test.ts +35 -8
  81. package/src/__tests__/plugin-api-shim.test.ts +6 -9
  82. package/src/__tests__/plugin-bootstrap.test.ts +12 -23
  83. package/src/__tests__/plugin-registry.test.ts +3 -49
  84. package/src/__tests__/plugin-types.test.ts +0 -70
  85. package/src/__tests__/reaction-persistence.test.ts +1 -1
  86. package/src/__tests__/send-endpoint-busy.test.ts +4 -1
  87. package/src/__tests__/skill-feature-flags-integration.test.ts +33 -0
  88. package/src/__tests__/steer-tool-repair.test.ts +1 -1
  89. package/src/__tests__/subagent-call-site-routing.test.ts +1 -1
  90. package/src/__tests__/subagent-detail.test.ts +25 -7
  91. package/src/__tests__/subagent-fork-notifications.test.ts +1 -3
  92. package/src/__tests__/subagent-fork-spawn.test.ts +1 -1
  93. package/src/__tests__/subagent-manager-notify.test.ts +1 -3
  94. package/src/__tests__/subagent-notify-parent.test.ts +1 -3
  95. package/src/__tests__/subagent-spawn-tool-fork.test.ts +1 -1
  96. package/src/__tests__/title-generate-hook.test.ts +1 -1
  97. package/src/__tests__/tool-error-hook.test.ts +1 -1
  98. package/src/__tests__/tool-result-truncate-hook.test.ts +1 -1
  99. package/src/__tests__/user-plugin-loader.test.ts +54 -286
  100. package/src/acp/__tests__/agent-process.test.ts +161 -0
  101. package/src/acp/__tests__/client-handler.test.ts +40 -0
  102. package/src/acp/__tests__/helpers/acp-history-db.ts +82 -0
  103. package/src/acp/__tests__/helpers/exec-file-stub.ts +101 -0
  104. package/src/acp/__tests__/prepare-agent-env.test.ts +137 -0
  105. package/src/acp/__tests__/session-manager-persistence.test.ts +95 -28
  106. package/src/acp/__tests__/session-manager-resume.test.ts +736 -0
  107. package/src/acp/agent-process.ts +61 -1
  108. package/src/acp/auto-install.test.ts +196 -0
  109. package/src/acp/auto-install.ts +177 -0
  110. package/src/acp/client-handler.ts +31 -0
  111. package/src/acp/feature-gate.test.ts +48 -0
  112. package/src/acp/feature-gate.ts +34 -0
  113. package/src/acp/prepare-agent-env.ts +83 -29
  114. package/src/acp/resolve-agent.test.ts +320 -7
  115. package/src/acp/resolve-agent.ts +182 -18
  116. package/src/acp/resume-hint.ts +25 -0
  117. package/src/acp/session-manager.ts +495 -73
  118. package/src/acp/types.ts +8 -0
  119. package/src/agent/compaction-circuit.ts +60 -102
  120. package/src/agent/loop.ts +390 -240
  121. package/src/api/responses/conversation-message.ts +14 -1
  122. package/src/approvals/guardian-request-resolvers.ts +1 -1
  123. package/src/background-wake/next-wake.ts +1 -0
  124. package/src/cli/commands/db/__tests__/repair.test.ts +3 -1
  125. package/src/cli/commands/plugins.ts +43 -37
  126. package/src/cli/lib/__tests__/install-from-github.test.ts +429 -111
  127. package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +196 -0
  128. package/src/cli/lib/__tests__/plugin-details.test.ts +372 -0
  129. package/src/cli/lib/__tests__/plugin-marketplace.test.ts +220 -0
  130. package/src/cli/lib/__tests__/search-plugins.test.ts +226 -32
  131. package/src/cli/lib/install-from-github.ts +464 -55
  132. package/src/cli/lib/plugin-catalog-cache.ts +84 -0
  133. package/src/cli/lib/plugin-details.ts +409 -0
  134. package/src/cli/lib/plugin-marketplace.ts +197 -0
  135. package/src/cli/lib/search-plugins.ts +195 -29
  136. package/src/config/__tests__/feature-flag-registry-guard.test.ts +2 -2
  137. package/src/config/acp-defaults.test.ts +10 -0
  138. package/src/config/acp-defaults.ts +6 -0
  139. package/src/config/bundled-skills/acp/SKILL.md +83 -31
  140. package/src/config/bundled-skills/acp/TOOLS.json +4 -4
  141. package/src/config/bundled-skills/app-builder/SKILL.md +224 -381
  142. package/src/config/bundled-skills/app-builder/TOOLS.json +29 -0
  143. package/src/config/bundled-skills/app-builder/references/DESIGN_SYSTEM.md +48 -0
  144. package/src/config/bundled-skills/app-builder/references/RESPONSIVE.md +57 -0
  145. package/src/config/bundled-skills/app-builder/references/SLIDES.md +38 -0
  146. package/src/config/bundled-skills/app-builder/tools/app-list.ts +62 -0
  147. package/src/config/bundled-skills/document-editor/SKILL.md +28 -23
  148. package/src/config/bundled-skills/document-editor/TOOLS.json +1 -1
  149. package/src/config/bundled-tool-registry.ts +2 -0
  150. package/src/config/feature-flag-registry.json +14 -5
  151. package/src/config/schemas/heartbeat.ts +9 -0
  152. package/src/context/strip-injections.ts +8 -2
  153. package/src/context/window-manager.ts +27 -13
  154. package/src/daemon/conversation-agent-loop-handlers.ts +10 -35
  155. package/src/daemon/conversation-agent-loop.ts +167 -1005
  156. package/src/daemon/conversation-lifecycle.ts +11 -255
  157. package/src/daemon/conversation-process.ts +8 -136
  158. package/src/daemon/conversation-registry.ts +159 -0
  159. package/src/daemon/conversation-runtime-assembly.ts +293 -392
  160. package/src/daemon/conversation-store.ts +9 -90
  161. package/src/daemon/conversation-surfaces.ts +24 -8
  162. package/src/daemon/conversation-workspace.ts +17 -0
  163. package/src/daemon/conversation.ts +383 -56
  164. package/src/daemon/external-plugins-bootstrap.ts +14 -19
  165. package/src/daemon/handlers/conversations.ts +3 -1
  166. package/src/daemon/handlers/skills.ts +4 -1
  167. package/src/daemon/host-proxy-preactivation.ts +1 -3
  168. package/src/daemon/lifecycle.ts +21 -0
  169. package/src/daemon/server.ts +2 -0
  170. package/src/daemon/wake-conversation-ops.ts +269 -0
  171. package/src/embedded/plugin-api.ts +2 -2
  172. package/src/export/__tests__/transcript-formatter.test.ts +5 -0
  173. package/src/heartbeat/__tests__/heartbeat-service.test.ts +3 -0
  174. package/src/heartbeat/heartbeat-run-store.ts +23 -1
  175. package/src/heartbeat/heartbeat-service.ts +26 -0
  176. package/src/ipc/__tests__/browser-ipc.test.ts +1 -1
  177. package/src/ipc/__tests__/ui-request-route.test.ts +3 -3
  178. package/src/ipc/skill-routes/__tests__/memory.test.ts +15 -0
  179. package/src/ipc/skill-routes/memory.ts +4 -2
  180. package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +87 -0
  181. package/src/memory/conversation-crud.ts +29 -19
  182. package/src/memory/conversation-starter-checkpoints.ts +1 -0
  183. package/src/memory/db-init.ts +2 -0
  184. package/src/memory/job-handlers/conversation-starters.ts +13 -2
  185. package/src/memory/jobs/__tests__/embed-concept-page.test.ts +5 -4
  186. package/src/memory/jobs-worker.ts +25 -1
  187. package/src/memory/migrations/272-acp-session-history-cwd.ts +36 -0
  188. package/src/memory/migrations/index.ts +1 -0
  189. package/src/memory/schema/acp.ts +4 -0
  190. package/src/memory/v2/__tests__/consolidation-job.test.ts +3 -3
  191. package/src/memory/v2/consolidation-job.ts +13 -4
  192. package/src/plugin-api/constants.ts +4 -0
  193. package/src/plugin-api/index.ts +6 -5
  194. package/src/plugin-api/types.ts +75 -0
  195. package/src/plugins/defaults/compaction/compact.ts +59 -0
  196. package/src/plugins/defaults/compaction/manager-store.ts +44 -0
  197. package/src/plugins/defaults/compaction/package.json +1 -2
  198. package/src/plugins/defaults/empty-response/package.json +0 -1
  199. package/src/plugins/defaults/history-repair/package.json +0 -1
  200. package/src/plugins/defaults/index.ts +135 -26
  201. package/src/plugins/defaults/memory-retrieval/hooks/post-compact.ts +103 -38
  202. package/src/plugins/defaults/memory-retrieval/hooks/user-prompt-submit-temp.ts +167 -56
  203. package/src/plugins/defaults/memory-retrieval/injector-chain.ts +2 -2
  204. package/src/plugins/defaults/{injectors/register.ts → memory-retrieval/injectors.ts} +148 -73
  205. package/src/plugins/defaults/memory-retrieval/unified-turn-context.ts +223 -0
  206. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/assign.test.ts +4 -4
  207. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/live-integration.test.ts +9 -6
  208. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/maintain-job.test.ts +5 -5
  209. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/orchestrate.test.ts +8 -5
  210. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/reconcile.test.ts +2 -2
  211. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/render-injection.test.ts +1 -1
  212. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/router.test.ts +10 -5
  213. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/selection-log-store.test.ts +8 -8
  214. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/selector.test.ts +5 -5
  215. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/shadow-plugin.test.ts +16 -17
  216. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/types.test.ts +2 -2
  217. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/assign.ts +9 -5
  218. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/capabilities.ts +5 -2
  219. package/src/plugins/defaults/memory-v3-shadow/hooks/post-compact.ts +14 -0
  220. package/src/plugins/defaults/memory-v3-shadow/hooks/user-prompt-submit.ts +19 -0
  221. package/src/plugins/defaults/memory-v3-shadow/injector.ts +75 -0
  222. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/maintain-job.ts +15 -8
  223. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/orchestrate.ts +2 -2
  224. package/src/plugins/defaults/memory-v3-shadow/package.json +14 -0
  225. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/page-content.ts +2 -2
  226. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/provider-blocks.ts +1 -1
  227. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/reconcile.ts +7 -3
  228. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/render-injection.ts +1 -1
  229. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/router.ts +5 -5
  230. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/selection-log-store.ts +4 -4
  231. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/selector.ts +7 -7
  232. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/shadow-plugin.ts +32 -94
  233. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/tree.ts +1 -1
  234. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/types.ts +1 -1
  235. package/src/plugins/defaults/title-generate/package.json +0 -1
  236. package/src/plugins/defaults/tool-error/package.json +0 -1
  237. package/src/plugins/defaults/tool-result-truncate/package.json +0 -1
  238. package/src/plugins/pipeline.ts +6 -293
  239. package/src/plugins/registry.ts +9 -37
  240. package/src/plugins/types.ts +76 -381
  241. package/src/plugins/user-loader.ts +30 -127
  242. package/src/proactive-artifact/aux-message-injector.ts +1 -1
  243. package/src/proactive-artifact/job.test.ts +1 -1
  244. package/src/prompts/__tests__/system-prompt.test.ts +6 -0
  245. package/src/prompts/templates/BOOTSTRAP-ACTIVATION-RAIL.md +35 -3
  246. package/src/runtime/__tests__/agent-wake.test.ts +555 -691
  247. package/src/runtime/__tests__/interactive-ui.test.ts +1 -1
  248. package/src/runtime/agent-wake.ts +108 -209
  249. package/src/runtime/assistant-event-hub.ts +1 -1
  250. package/src/runtime/channel-approvals.ts +1 -1
  251. package/src/runtime/interactive-ui.ts +1 -1
  252. package/src/runtime/routes/__tests__/acp-routes.test.ts +283 -55
  253. package/src/runtime/routes/__tests__/conversation-list-routes.test.ts +1 -1
  254. package/src/runtime/routes/__tests__/plugins-routes.test.ts +398 -73
  255. package/src/runtime/routes/__tests__/surface-action-routes.test.ts +5 -4
  256. package/src/runtime/routes/__tests__/surface-content-routes.test.ts +4 -1
  257. package/src/runtime/routes/acp-routes.test.ts +89 -25
  258. package/src/runtime/routes/acp-routes.ts +81 -29
  259. package/src/runtime/routes/approval-routes.ts +1 -1
  260. package/src/runtime/routes/browser-routes.ts +1 -1
  261. package/src/runtime/routes/browser-tabs-routes.ts +6 -10
  262. package/src/runtime/routes/conversation-cli-routes.ts +1 -1
  263. package/src/runtime/routes/conversation-list-routes.ts +1 -1
  264. package/src/runtime/routes/conversation-query-routes.ts +1 -1
  265. package/src/runtime/routes/conversation-routes.ts +28 -2
  266. package/src/runtime/routes/conversation-starter-routes.ts +13 -7
  267. package/src/runtime/routes/conversations-import-routes.ts +24 -7
  268. package/src/runtime/routes/host-app-control-routes.ts +1 -1
  269. package/src/runtime/routes/host-cu-routes.ts +1 -1
  270. package/src/runtime/routes/identity-routes.ts +18 -3
  271. package/src/runtime/routes/inbound-message-handler.ts +1 -1
  272. package/src/runtime/routes/inference-profile-session-handler.ts +11 -0
  273. package/src/runtime/routes/inference-profile-session-reaper.ts +6 -0
  274. package/src/runtime/routes/memory-v3-routes.ts +16 -6
  275. package/src/runtime/routes/playground/helpers.ts +1 -1
  276. package/src/runtime/routes/plugins-routes.ts +336 -35
  277. package/src/runtime/routes/surface-conversation-resolver.ts +4 -3
  278. package/src/runtime/routes/work-items-routes.ts +2 -4
  279. package/src/runtime/services/conversation-serializer.ts +1 -1
  280. package/src/signals/cancel.ts +2 -4
  281. package/src/subagent/manager.ts +21 -5
  282. package/src/tools/acp/context.ts +20 -0
  283. package/src/tools/acp/list-agents.test.ts +7 -1
  284. package/src/tools/acp/spawn.test.ts +158 -55
  285. package/src/tools/acp/spawn.ts +47 -72
  286. package/src/tools/acp/steer.test.ts +105 -8
  287. package/src/tools/acp/steer.ts +48 -17
  288. package/src/tools/apps/executors.ts +13 -8
  289. package/src/tools/filesystem/write.ts +34 -0
  290. package/src/tools/subagent/spawn.ts +2 -4
  291. package/src/tools/ui-surface/definitions.ts +25 -5
  292. package/src/workspace/migrations/051-seed-conversation-summarization-callsite.ts +4 -5
  293. package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +69 -45
  294. package/docs/plugins.md +0 -832
  295. package/examples/plugins/echo/register.ts +0 -143
  296. package/src/__tests__/circuit-breaker-pipeline.test.ts +0 -405
  297. package/src/__tests__/compaction-pipeline.test.ts +0 -210
  298. package/src/__tests__/compaction-timeout-recovery.test.ts +0 -251
  299. package/src/__tests__/overflow-reduce-pipeline.test.ts +0 -667
  300. package/src/__tests__/pipeline-runner.test.ts +0 -554
  301. package/src/__tests__/plugin-external-api.test.ts +0 -68
  302. package/src/daemon/wake-target-adapter.ts +0 -253
  303. package/src/plugins/defaults/circuit-breaker/middlewares/circuitBreaker.ts +0 -93
  304. package/src/plugins/defaults/circuit-breaker/package.json +0 -15
  305. package/src/plugins/defaults/circuit-breaker/register.ts +0 -39
  306. package/src/plugins/defaults/compaction/middlewares/compaction.ts +0 -25
  307. package/src/plugins/defaults/compaction/register.ts +0 -35
  308. package/src/plugins/defaults/compaction/terminal.ts +0 -73
  309. package/src/plugins/defaults/empty-response/register.ts +0 -23
  310. package/src/plugins/defaults/history-repair/register.ts +0 -24
  311. package/src/plugins/defaults/overflow-reduce/middlewares/overflowReduce.ts +0 -126
  312. package/src/plugins/defaults/overflow-reduce/package.json +0 -15
  313. package/src/plugins/defaults/overflow-reduce/register.ts +0 -42
  314. package/src/plugins/defaults/title-generate/register.ts +0 -35
  315. package/src/plugins/defaults/tool-error/register.ts +0 -23
  316. package/src/plugins/defaults/tool-result-truncate/register.ts +0 -24
  317. package/src/plugins/external-api.ts +0 -104
  318. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/capabilities.test.ts +0 -0
  319. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/core.test.ts +0 -0
  320. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/fixtures/eval-turns.json +0 -0
  321. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/fixtures/live-turns.json +0 -0
  322. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/health.test.ts +0 -0
  323. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/needle.test.ts +0 -0
  324. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/provider-blocks.test.ts +0 -0
  325. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/snapshot.test.ts +0 -0
  326. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/tree.test.ts +0 -0
  327. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/working-set-eviction.test.ts +0 -0
  328. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/working-set-skeleton.test.ts +0 -0
  329. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/core.ts +0 -0
  330. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/README.md +0 -0
  331. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/assignments.json +0 -0
  332. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/core.json +0 -0
  333. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/leaves/domain-a/topic-x.md +0 -0
  334. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/leaves/domain-a/topic-y.md +0 -0
  335. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/leaves/domain-b/topic-z.md +0 -0
  336. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/health.ts +0 -0
  337. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/llm-retry.ts +0 -0
  338. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/needle.ts +0 -0
  339. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/snapshot.ts +0 -0
  340. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/working-set.ts +0 -0
@@ -120,7 +120,7 @@ describe("stripInjectionsForCompaction preserves history shape", () => {
120
120
  expect(out[3]).toEqual(messages[3]);
121
121
  });
122
122
 
123
- test("leaves <turn_context>, <workspace>, and <memory __injected> alone", () => {
123
+ test("strips <workspace> but leaves <turn_context> and <memory __injected> alone", () => {
124
124
  const messages: Message[] = [
125
125
  {
126
126
  role: "user",
@@ -132,6 +132,9 @@ describe("stripInjectionsForCompaction preserves history shape", () => {
132
132
  },
133
133
  ];
134
134
  const out = stripInjectionsForCompaction(messages);
135
- expect(out[0].content).toEqual(messages[0].content);
135
+ expect(out[0].content).toEqual([
136
+ { type: "text", text: "<turn_context>\nnow\n</turn_context>" },
137
+ { type: "text", text: "<memory __injected>\nrecent\n</memory>" },
138
+ ]);
136
139
  });
137
140
  });
@@ -167,6 +167,7 @@ mock.module("../memory/retriever.js", () => ({
167
167
  mock.module("../context/window-manager.js", () => ({
168
168
  ContextWindowManager: class {
169
169
  constructor() {}
170
+ updateConfig() {}
170
171
  shouldCompact() {
171
172
  return { needed: false, estimatedTokens: 0 };
172
173
  }
@@ -199,10 +200,10 @@ mock.module("../agent/loop.js", () => ({
199
200
  getActiveModel() {
200
201
  return undefined;
201
202
  }
202
- async run(
203
- _messages: Message[],
204
- _onEvent: (event: AgentEvent) => void,
205
- ): Promise<Message[]> {
203
+ async run(_options: {
204
+ messages: Message[];
205
+ onEvent: (event: AgentEvent) => void;
206
+ }): Promise<Message[]> {
206
207
  return [];
207
208
  }
208
209
  },
@@ -9,7 +9,7 @@ mock.module("../util/logger.js", () => ({
9
9
  import {
10
10
  createConversation,
11
11
  getConversation,
12
- getConversationOverrideProfileFromRow,
12
+ resolveOverrideProfile,
13
13
  setConversationInferenceProfile,
14
14
  setConversationInferenceProfileSession,
15
15
  } from "../memory/conversation-crud.js";
@@ -55,7 +55,7 @@ describe("setConversationInferenceProfile", () => {
55
55
  });
56
56
  });
57
57
 
58
- describe("getConversationOverrideProfileFromRow — lazy expiry check", () => {
58
+ describe("resolveOverrideProfile — lazy expiry check", () => {
59
59
  beforeEach(() => {
60
60
  const db = getDb();
61
61
  db.run(`DELETE FROM messages`);
@@ -73,7 +73,7 @@ describe("getConversationOverrideProfileFromRow — lazy expiry check", () => {
73
73
  );
74
74
  const row = getConversation(conv.id);
75
75
  expect(row).not.toBeNull();
76
- expect(getConversationOverrideProfileFromRow(row)).toBeUndefined();
76
+ expect(resolveOverrideProfile(row)).toBeUndefined();
77
77
  });
78
78
 
79
79
  test("returns the profile when inferenceProfileExpiresAt is in the future", () => {
@@ -86,7 +86,7 @@ describe("getConversationOverrideProfileFromRow — lazy expiry check", () => {
86
86
  );
87
87
  const row = getConversation(conv.id);
88
88
  expect(row).not.toBeNull();
89
- expect(getConversationOverrideProfileFromRow(row)).toBe("balanced");
89
+ expect(resolveOverrideProfile(row)).toBe("balanced");
90
90
  });
91
91
 
92
92
  test("returns undefined at the exact-expiry boundary (expiresAt === now)", () => {
@@ -110,7 +110,7 @@ describe("getConversationOverrideProfileFromRow — lazy expiry check", () => {
110
110
  const realNow = Date.now;
111
111
  Date.now = () => now;
112
112
  try {
113
- expect(getConversationOverrideProfileFromRow(row)).toBeUndefined();
113
+ expect(resolveOverrideProfile(row)).toBeUndefined();
114
114
  } finally {
115
115
  Date.now = realNow;
116
116
  }
@@ -126,9 +126,7 @@ describe("getConversationOverrideProfileFromRow — lazy expiry check", () => {
126
126
  );
127
127
  const row = getConversation(conv.id);
128
128
  expect(row).not.toBeNull();
129
- expect(getConversationOverrideProfileFromRow(row)).toBe(
130
- "quality-optimized",
131
- );
129
+ expect(resolveOverrideProfile(row)).toBe("quality-optimized");
132
130
  });
133
131
 
134
132
  test.each<"background" | "scheduled">(["background", "scheduled"])(
@@ -148,7 +146,7 @@ describe("getConversationOverrideProfileFromRow — lazy expiry check", () => {
148
146
  expect(row).not.toBeNull();
149
147
  expect(row?.conversationType).toBe(conversationType);
150
148
  expect(row?.inferenceProfile).toBe("quality-optimized");
151
- expect(getConversationOverrideProfileFromRow(row)).toBeUndefined();
149
+ expect(resolveOverrideProfile(row)).toBeUndefined();
152
150
  },
153
151
  );
154
152
  });
@@ -92,7 +92,7 @@ mock.module("../daemon/conversation-messaging.js", () => ({
92
92
  // ---------------------------------------------------------------------------
93
93
 
94
94
  import type { TurnInterfaceContext } from "../channels/types.js";
95
- import type { ProcessConversationContext } from "../daemon/conversation-process.js";
95
+ import type { Conversation } from "../daemon/conversation.js";
96
96
  import { drainQueue } from "../daemon/conversation-process.js";
97
97
  import {
98
98
  MessageQueue,
@@ -102,7 +102,7 @@ import { TraceEmitter } from "../daemon/trace-emitter.js";
102
102
 
103
103
  // ---------------------------------------------------------------------------
104
104
  // Fake context — captures preactivation calls, satisfies the bare minimum
105
- // of `ProcessConversationContext`. `runAgentLoop` resolves immediately so
105
+ // of `Conversation`. `runAgentLoop` resolves immediately so
106
106
  // the drain-chain does not recurse forever.
107
107
  // ---------------------------------------------------------------------------
108
108
 
@@ -113,7 +113,7 @@ interface FakeRecord {
113
113
  function makeFakeContext(opts: {
114
114
  queue: MessageQueue;
115
115
  turnInterfaceContext?: TurnInterfaceContext;
116
- }): ProcessConversationContext & FakeRecord {
116
+ }): Conversation & FakeRecord {
117
117
  const calls: string[] = [];
118
118
  let preactivatedSkillIds: string[] | undefined = undefined;
119
119
  const ctx = {
@@ -177,7 +177,7 @@ function makeFakeContext(opts: {
177
177
  setTransportHints() {},
178
178
  applyHostEnvFromTransport() {},
179
179
  ensureHostProxiesForTurn() {},
180
- } as unknown as ProcessConversationContext & FakeRecord;
180
+ } as unknown as Conversation & FakeRecord;
181
181
  return ctx;
182
182
  }
183
183
 
@@ -208,14 +208,12 @@ mock.module("../memory/retriever.js", () => ({
208
208
  mock.module("../agent/loop.js", () => ({
209
209
  AgentLoop: class {
210
210
  compactionCircuit = new CompactionCircuit("test-conv");
211
- constructor(
212
- _provider: unknown,
213
- _systemPrompt: string,
214
- options?: {
215
- config?: Record<string, unknown>;
216
- resolveSystemPrompt?: (history: Message[]) => Record<string, unknown>;
217
- },
218
- ) {
211
+ constructor(options?: {
212
+ provider?: unknown;
213
+ systemPrompt?: string;
214
+ config?: Record<string, unknown>;
215
+ resolveSystemPrompt?: (history: Message[]) => Record<string, unknown>;
216
+ }) {
219
217
  captured.constructorMaxTokens = options?.config?.maxTokens;
220
218
  const resolved = options?.resolveSystemPrompt?.([]);
221
219
  captured.resolvedMaxTokens = resolved?.maxTokens;
@@ -229,12 +227,13 @@ mock.module("../agent/loop.js", () => ({
229
227
  getResolvedTools() {
230
228
  return [];
231
229
  }
232
- async run(
233
- messages: Message[],
234
- onEvent: (event: Record<string, unknown>) => void,
235
- options?: { callSite?: string },
236
- ): Promise<Message[]> {
237
- captured.callSite = options?.callSite;
230
+ async run(options: {
231
+ messages: Message[];
232
+ onEvent: (event: Record<string, unknown>) => void;
233
+ callSite?: string;
234
+ }): Promise<Message[]> {
235
+ const { messages, onEvent } = options;
236
+ captured.callSite = options.callSite;
238
237
  onEvent({
239
238
  type: "usage",
240
239
  inputTokens: 0,
@@ -253,6 +252,7 @@ mock.module("../agent/loop.js", () => ({
253
252
  mock.module("../context/window-manager.js", () => ({
254
253
  ContextWindowManager: class {
255
254
  constructor() {}
255
+ updateConfig() {}
256
256
  shouldCompact() {
257
257
  return { needed: false, estimatedTokens: 0 };
258
258
  }
@@ -221,6 +221,7 @@ let forceCompactionEnabled = false;
221
221
  mock.module("../context/window-manager.js", () => ({
222
222
  ContextWindowManager: class {
223
223
  constructor() {}
224
+ updateConfig() {}
224
225
  shouldCompact() {
225
226
  return { needed: false, estimatedTokens: 0 };
226
227
  }
@@ -280,10 +281,11 @@ mock.module("../agent/loop.js", () => ({
280
281
  getActiveModel() {
281
282
  return undefined;
282
283
  }
283
- async run(
284
- messages: Message[],
285
- onEvent: (event: AgentEvent) => void,
286
- ): Promise<AgentLoopRunResult> {
284
+ async run(options: {
285
+ messages: Message[];
286
+ onEvent: (event: AgentEvent) => void;
287
+ }): Promise<AgentLoopRunResult> {
288
+ const { messages, onEvent } = options;
287
289
  // Prime the assistant row anchor — production code emits this from
288
290
  // `AgentLoop.run` just before `provider.sendMessage`.
289
291
  await onEvent({ type: "llm_call_started" });
@@ -486,11 +488,10 @@ describe("provider ordering error retry", () => {
486
488
  firstRunErrorMode = "ordering";
487
489
  maybeCompactCalls = [];
488
490
  forceCompactionEnabled = false;
489
- // Orchestrator pipelines (`overflowReduce`, `persistence`, …) run through
490
- // the plugin registry; re-register every default so each pipeline has a
491
- // middleware to dispatch to. The `context-overflow-reducer` module itself
492
- // (and other collaborators) are mocked above, so the default plugins'
493
- // delegates go through the mocked implementations.
491
+ // The compaction pipeline runs through the plugin registry; re-register
492
+ // every default so it has a middleware to dispatch to. Collaborators are
493
+ // mocked above, so the default plugins' delegates go through the mocked
494
+ // implementations.
494
495
  resetPluginRegistryAndRegisterDefaults();
495
496
  });
496
497
 
@@ -570,7 +571,7 @@ describe("provider ordering error retry", () => {
570
571
  });
571
572
 
572
573
  expect(agentLoopRunCount).toBe(2);
573
- expect(maybeCompactCalls).toEqual([{ force: false }, { force: true }]);
574
+ expect(maybeCompactCalls).toEqual([{ force: true }]);
574
575
  expect(events.some((e) => e.type === "message_complete")).toBe(true);
575
576
  expect(events.some((e) => e.type === "conversation_error")).toBe(false);
576
577
  });
@@ -595,9 +596,10 @@ describe("provider ordering error retry", () => {
595
596
  // (forceCompactionEnabled=false), the second run also fails with
596
597
  // context_too_large. The overflow policy (fail_gracefully) surfaces error.
597
598
  expect(agentLoopRunCount).toBe(2);
598
- // Two maybeCompact calls: initial auto-compact (force:false),
599
- // reducer's compactFn (force:true).
600
- expect(maybeCompactCalls).toEqual([{ force: false }, { force: true }]);
599
+ // One maybeCompact call: the reducer's compactFn (force:true). The
600
+ // orchestrator's start-of-turn auto-compact no longer runs — the loop's
601
+ // pre-call budget gate owns turn-start compaction and doesn't trip here.
602
+ expect(maybeCompactCalls).toEqual([{ force: true }]);
601
603
 
602
604
  expect(events.some((e) => e.type === "conversation_error")).toBe(true);
603
605
  });
@@ -618,7 +620,7 @@ describe("provider ordering error retry", () => {
618
620
 
619
621
  // Same as above — convergence loop re-runs agent loop, which also fails.
620
622
  expect(agentLoopRunCount).toBe(2);
621
- expect(maybeCompactCalls).toEqual([{ force: false }, { force: true }]);
623
+ expect(maybeCompactCalls).toEqual([{ force: true }]);
622
624
  expect(events.some((e) => e.type === "conversation_error")).toBe(true);
623
625
  });
624
626
 
@@ -637,7 +639,7 @@ describe("provider ordering error retry", () => {
637
639
  });
638
640
 
639
641
  expect(agentLoopRunCount).toBe(2);
640
- expect(maybeCompactCalls).toEqual([{ force: false }, { force: true }]);
642
+ expect(maybeCompactCalls).toEqual([{ force: true }]);
641
643
  expect(events.some((e) => e.type === "message_complete")).toBe(true);
642
644
  expect(events.some((e) => e.type === "conversation_error")).toBe(false);
643
645
  });
@@ -660,7 +662,7 @@ describe("provider ordering error retry", () => {
660
662
  // the regex patterns, but classifyConversationError recognizes statusCode 413
661
663
  // as CONTEXT_TOO_LARGE and sets contextTooLargeDetected = true.
662
664
  expect(agentLoopRunCount).toBe(2);
663
- expect(maybeCompactCalls).toEqual([{ force: false }, { force: true }]);
665
+ expect(maybeCompactCalls).toEqual([{ force: true }]);
664
666
  expect(events.some((e) => e.type === "message_complete")).toBe(true);
665
667
  expect(events.some((e) => e.type === "conversation_error")).toBe(false);
666
668
  });
@@ -265,6 +265,7 @@ mock.module("../memory/retriever.js", () => ({
265
265
  mock.module("../context/window-manager.js", () => ({
266
266
  ContextWindowManager: class {
267
267
  constructor() {}
268
+ updateConfig() {}
268
269
  shouldCompact() {
269
270
  return { needed: false, estimatedTokens: 0 };
270
271
  }
@@ -353,15 +354,14 @@ mock.module("../agent/loop.js", () => ({
353
354
  getActiveModel() {
354
355
  return undefined;
355
356
  }
356
- async run(
357
- messages: Message[],
358
- onEvent: (event: AgentEvent) => void | Promise<void>,
359
- options?: {
360
- onCheckpoint?: (
361
- checkpoint: CheckpointInfo,
362
- ) => CheckpointDecision | Promise<CheckpointDecision>;
363
- },
364
- ): Promise<AgentLoopRunResult> {
357
+ async run(options: {
358
+ messages: Message[];
359
+ onEvent: (event: AgentEvent) => void | Promise<void>;
360
+ onCheckpoint?: (
361
+ checkpoint: CheckpointInfo,
362
+ ) => CheckpointDecision | Promise<CheckpointDecision>;
363
+ }): Promise<AgentLoopRunResult> {
364
+ const { messages, onEvent } = options;
365
365
  return new Promise<AgentLoopRunResult>((resolveResult, reject) => {
366
366
  const pending: PendingRun = {
367
367
  resolve: (history: Message[]) =>