@vellumai/assistant 0.8.8 → 0.8.9-staging.2

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 (360) hide show
  1. package/ARCHITECTURE.md +6 -6
  2. package/bun.lock +2 -2
  3. package/examples/plugins/echo/README.md +61 -60
  4. package/examples/plugins/echo/hooks/post-tool-use.ts +18 -0
  5. package/examples/plugins/echo/hooks/stop.ts +16 -0
  6. package/examples/plugins/echo/hooks/user-prompt-submit.ts +18 -0
  7. package/examples/plugins/echo/package.json +1 -2
  8. package/examples/plugins/echo/src/emit.ts +19 -0
  9. package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +7 -6
  10. package/openapi.yaml +235 -6
  11. package/package.json +2 -2
  12. package/src/__tests__/agent-loop-callsite-precedence.test.ts +69 -14
  13. package/src/__tests__/agent-loop-exit-reason.test.ts +204 -144
  14. package/src/__tests__/agent-loop-mutable-latest-user-message.test.ts +50 -35
  15. package/src/__tests__/agent-loop-output-hooks.test.ts +357 -0
  16. package/src/__tests__/agent-loop-override-profile.test.ts +25 -6
  17. package/src/__tests__/agent-loop-provider-error-recording.test.ts +41 -21
  18. package/src/__tests__/agent-loop-thinking.test.ts +36 -20
  19. package/src/__tests__/agent-loop.test.ts +441 -96
  20. package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +14 -14
  21. package/src/__tests__/agent-wake-override-profile.test.ts +17 -21
  22. package/src/__tests__/anthropic-provider.test.ts +1 -1
  23. package/src/__tests__/app-builder-tool-scripts.test.ts +21 -0
  24. package/src/__tests__/app-control-flow.test.ts +1 -1
  25. package/src/__tests__/app-dir-path-guard.test.ts +1 -0
  26. package/src/__tests__/app-executors.test.ts +132 -0
  27. package/src/__tests__/approval-cascade.test.ts +5 -4
  28. package/src/__tests__/approval-routes-http.test.ts +4 -1
  29. package/src/__tests__/background-workers-disk-pressure.test.ts +1 -1
  30. package/src/__tests__/channel-approval-routes.test.ts +1 -1
  31. package/src/__tests__/channel-approvals.test.ts +1 -1
  32. package/src/__tests__/compaction-circuit.test.ts +258 -0
  33. package/src/__tests__/compaction-direct.test.ts +132 -0
  34. package/src/__tests__/compaction-events.test.ts +5 -5
  35. package/src/__tests__/compactor-web-search-strip.test.ts +213 -0
  36. package/src/__tests__/context-overflow-reducer.test.ts +1 -1
  37. package/src/__tests__/conversation-abort-tool-results.test.ts +6 -4
  38. package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +7 -10
  39. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +78 -119
  40. package/src/__tests__/conversation-agent-loop-overflow.test.ts +142 -218
  41. package/src/__tests__/conversation-agent-loop.test.ts +297 -586
  42. package/src/__tests__/conversation-clean-command.test.ts +5 -2
  43. package/src/__tests__/conversation-confirmation-signals.test.ts +5 -4
  44. package/src/__tests__/conversation-crud-inference-profile.test.ts +7 -9
  45. package/src/__tests__/conversation-history-web-search.test.ts +1 -1
  46. package/src/__tests__/conversation-process-app-control-preactivation.test.ts +4 -4
  47. package/src/__tests__/conversation-process-callsite.test.ts +14 -14
  48. package/src/__tests__/conversation-provider-retry-repair.test.ts +70 -65
  49. package/src/__tests__/conversation-queue.test.ts +9 -9
  50. package/src/__tests__/conversation-runtime-assembly.test.ts +923 -231
  51. package/src/__tests__/conversation-runtime-workspace.test.ts +115 -20
  52. package/src/__tests__/conversation-slash-queue.test.ts +6 -4
  53. package/src/__tests__/conversation-slash-unknown.test.ts +6 -4
  54. package/src/__tests__/conversation-speed-override.test.ts +10 -9
  55. package/src/__tests__/conversation-starter-routes.test.ts +14 -6
  56. package/src/__tests__/conversation-workspace-cache-state.test.ts +23 -20
  57. package/src/__tests__/conversation-workspace-injection.test.ts +68 -6
  58. package/src/__tests__/conversation-workspace-tool-tracking.test.ts +14 -11
  59. package/src/__tests__/conversations-import-system-filter.test.ts +101 -0
  60. package/src/__tests__/credential-security-invariants.test.ts +0 -1
  61. package/src/__tests__/db-acp-history.test.ts +101 -0
  62. package/src/__tests__/dynamic-page-surface.test.ts +31 -0
  63. package/src/__tests__/empty-response-hook.test.ts +1 -1
  64. package/src/__tests__/file-write-tool.test.ts +63 -0
  65. package/src/__tests__/gateway-only-guard.test.ts +12 -2
  66. package/src/__tests__/guardian-grant-minting.test.ts +1 -1
  67. package/src/__tests__/guardian-routing-invariants.test.ts +2 -4
  68. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +1 -1
  69. package/src/__tests__/heartbeat-disk-pressure.test.ts +1 -0
  70. package/src/__tests__/heartbeat-service.test.ts +1 -0
  71. package/src/__tests__/history-repair-hook.test.ts +1 -1
  72. package/src/__tests__/host-app-control-routes.test.ts +1 -1
  73. package/src/__tests__/host-cu-routes-targeted.test.ts +3 -3
  74. package/src/__tests__/inference-profile-reaper.test.ts +62 -0
  75. package/src/__tests__/inference-profile-session-handler.test.ts +86 -0
  76. package/src/__tests__/injector-background-turn.test.ts +13 -23
  77. package/src/__tests__/injector-chain.test.ts +268 -44
  78. package/src/__tests__/injector-disk-pressure.test.ts +210 -52
  79. package/src/__tests__/injector-document-comments.test.ts +97 -114
  80. package/src/__tests__/injector-pkb-v2-silenced.test.ts +2 -2
  81. package/src/__tests__/injector-v3-suppression.test.ts +4 -4
  82. package/src/__tests__/list-messages-client-message-id.test.ts +91 -0
  83. package/src/__tests__/list-messages-hidden-metadata.test.ts +38 -0
  84. package/src/__tests__/memory-retrieval-hook.test.ts +131 -26
  85. package/src/__tests__/memory-v2-static-injector.test.ts +86 -8
  86. package/src/__tests__/parallel-tool.benchmark.test.ts +35 -8
  87. package/src/__tests__/plugin-api-shim.test.ts +6 -9
  88. package/src/__tests__/plugin-bootstrap.test.ts +12 -23
  89. package/src/__tests__/plugin-registry.test.ts +3 -49
  90. package/src/__tests__/plugin-types.test.ts +0 -70
  91. package/src/__tests__/pre-model-call-sanitize.test.ts +109 -0
  92. package/src/__tests__/reaction-persistence.test.ts +1 -1
  93. package/src/__tests__/send-endpoint-busy.test.ts +4 -1
  94. package/src/__tests__/skill-feature-flags-integration.test.ts +33 -0
  95. package/src/__tests__/steer-tool-repair.test.ts +1 -1
  96. package/src/__tests__/subagent-call-site-routing.test.ts +1 -1
  97. package/src/__tests__/subagent-detail.test.ts +25 -7
  98. package/src/__tests__/subagent-fork-notifications.test.ts +1 -3
  99. package/src/__tests__/subagent-fork-spawn.test.ts +1 -1
  100. package/src/__tests__/subagent-manager-notify.test.ts +1 -3
  101. package/src/__tests__/subagent-notify-parent.test.ts +1 -3
  102. package/src/__tests__/subagent-spawn-tool-fork.test.ts +1 -1
  103. package/src/__tests__/title-generate-hook.test.ts +1 -1
  104. package/src/__tests__/tool-error-hook.test.ts +1 -1
  105. package/src/__tests__/tool-result-truncate-hook.test.ts +1 -1
  106. package/src/__tests__/user-plugin-loader.test.ts +54 -286
  107. package/src/acp/__tests__/agent-process.test.ts +161 -0
  108. package/src/acp/__tests__/client-handler.test.ts +40 -0
  109. package/src/acp/__tests__/helpers/acp-history-db.ts +82 -0
  110. package/src/acp/__tests__/helpers/exec-file-stub.ts +106 -0
  111. package/src/acp/__tests__/prepare-agent-env.test.ts +97 -0
  112. package/src/acp/__tests__/session-manager-persistence.test.ts +95 -28
  113. package/src/acp/__tests__/session-manager-resume.test.ts +888 -0
  114. package/src/acp/agent-process.ts +61 -1
  115. package/src/acp/auto-install.test.ts +280 -0
  116. package/src/acp/auto-install.ts +232 -0
  117. package/src/acp/client-handler.ts +31 -0
  118. package/src/acp/feature-gate.test.ts +48 -0
  119. package/src/acp/feature-gate.ts +34 -0
  120. package/src/acp/prepare-agent-env.ts +80 -27
  121. package/src/acp/resolve-agent.test.ts +225 -9
  122. package/src/acp/resolve-agent.ts +122 -17
  123. package/src/acp/resume-hint.ts +23 -0
  124. package/src/acp/session-manager.ts +507 -73
  125. package/src/agent/compaction-circuit.ts +60 -102
  126. package/src/agent/loop.ts +414 -248
  127. package/src/api/responses/conversation-message.ts +14 -1
  128. package/src/approvals/guardian-request-resolvers.ts +1 -1
  129. package/src/background-wake/next-wake.ts +1 -0
  130. package/src/cli/commands/db/__tests__/repair.test.ts +3 -1
  131. package/src/cli/commands/plugins.ts +43 -37
  132. package/src/cli/lib/__tests__/install-from-github.test.ts +429 -111
  133. package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +196 -0
  134. package/src/cli/lib/__tests__/plugin-details.test.ts +372 -0
  135. package/src/cli/lib/__tests__/plugin-marketplace.test.ts +220 -0
  136. package/src/cli/lib/__tests__/search-plugins.test.ts +226 -32
  137. package/src/cli/lib/install-from-github.ts +464 -55
  138. package/src/cli/lib/plugin-catalog-cache.ts +84 -0
  139. package/src/cli/lib/plugin-details.ts +409 -0
  140. package/src/cli/lib/plugin-marketplace.ts +197 -0
  141. package/src/cli/lib/search-plugins.ts +195 -29
  142. package/src/config/__tests__/feature-flag-registry-guard.test.ts +2 -2
  143. package/src/config/acp-defaults.test.ts +10 -0
  144. package/src/config/acp-defaults.ts +6 -0
  145. package/src/config/bundled-skills/acp/SKILL.md +85 -33
  146. package/src/config/bundled-skills/acp/TOOLS.json +4 -4
  147. package/src/config/bundled-skills/app-builder/SKILL.md +224 -381
  148. package/src/config/bundled-skills/app-builder/TOOLS.json +72 -2
  149. package/src/config/bundled-skills/app-builder/references/DESIGN_SYSTEM.md +48 -0
  150. package/src/config/bundled-skills/app-builder/references/RESPONSIVE.md +57 -0
  151. package/src/config/bundled-skills/app-builder/references/SLIDES.md +38 -0
  152. package/src/config/bundled-skills/app-builder/tools/app-list.ts +62 -0
  153. package/src/config/bundled-skills/app-builder/tools/app-update.ts +18 -0
  154. package/src/config/bundled-skills/document-editor/SKILL.md +28 -23
  155. package/src/config/bundled-skills/document-editor/TOOLS.json +1 -1
  156. package/src/config/bundled-tool-registry.ts +4 -0
  157. package/src/config/call-site-defaults.ts +0 -2
  158. package/src/config/feature-flag-registry.json +15 -6
  159. package/src/config/schemas/call-site-catalog.ts +0 -14
  160. package/src/config/schemas/heartbeat.ts +9 -0
  161. package/src/config/schemas/llm.ts +0 -2
  162. package/src/context/compactor.ts +22 -4
  163. package/src/context/strip-injections.ts +8 -2
  164. package/src/context/window-manager.ts +27 -13
  165. package/src/daemon/conversation-agent-loop-handlers.ts +10 -35
  166. package/src/daemon/conversation-agent-loop.ts +175 -1055
  167. package/src/daemon/conversation-lifecycle.ts +11 -255
  168. package/src/daemon/conversation-process.ts +8 -136
  169. package/src/daemon/conversation-registry.ts +159 -0
  170. package/src/daemon/conversation-runtime-assembly.ts +293 -392
  171. package/src/daemon/conversation-store.ts +9 -90
  172. package/src/daemon/conversation-surfaces.ts +24 -8
  173. package/src/daemon/conversation-workspace.ts +17 -0
  174. package/src/daemon/conversation.ts +404 -57
  175. package/src/daemon/disk-pressure-policy.ts +0 -1
  176. package/src/daemon/external-plugins-bootstrap.ts +14 -19
  177. package/src/daemon/handlers/conversations.ts +3 -1
  178. package/src/daemon/handlers/skills.ts +4 -1
  179. package/src/daemon/host-proxy-preactivation.ts +1 -3
  180. package/src/daemon/lifecycle.ts +21 -7
  181. package/src/daemon/server.ts +2 -0
  182. package/src/daemon/wake-conversation-ops.ts +269 -0
  183. package/src/embedded/plugin-api.ts +2 -2
  184. package/src/export/__tests__/transcript-formatter.test.ts +5 -0
  185. package/src/heartbeat/__tests__/heartbeat-service.test.ts +3 -0
  186. package/src/heartbeat/heartbeat-run-store.ts +23 -1
  187. package/src/heartbeat/heartbeat-service.ts +26 -0
  188. package/src/ipc/__tests__/browser-ipc.test.ts +1 -1
  189. package/src/ipc/__tests__/ui-request-route.test.ts +3 -3
  190. package/src/ipc/skill-routes/__tests__/memory.test.ts +15 -0
  191. package/src/ipc/skill-routes/memory.ts +4 -2
  192. package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +87 -0
  193. package/src/memory/conversation-crud.ts +29 -19
  194. package/src/memory/conversation-starter-checkpoints.ts +1 -0
  195. package/src/memory/db-init.ts +2 -0
  196. package/src/memory/job-handlers/conversation-starters.ts +13 -2
  197. package/src/memory/jobs/__tests__/embed-concept-page.test.ts +5 -4
  198. package/src/memory/jobs-worker.ts +25 -1
  199. package/src/memory/migrations/272-acp-session-history-cwd.ts +36 -0
  200. package/src/memory/migrations/index.ts +1 -0
  201. package/src/memory/schema/acp.ts +4 -0
  202. package/src/memory/v2/__tests__/consolidation-job.test.ts +3 -3
  203. package/src/memory/v2/consolidation-job.ts +13 -4
  204. package/src/plugin-api/constants.ts +4 -0
  205. package/src/plugin-api/index.ts +6 -5
  206. package/src/plugin-api/types.ts +75 -0
  207. package/src/plugins/defaults/compaction/compact.ts +59 -0
  208. package/src/{daemon → plugins/defaults/compaction}/context-overflow-reducer.ts +7 -7
  209. package/src/plugins/defaults/compaction/manager-store.ts +57 -0
  210. package/src/plugins/defaults/compaction/package.json +1 -2
  211. package/src/plugins/defaults/empty-response/package.json +0 -1
  212. package/src/plugins/defaults/history-repair/package.json +0 -1
  213. package/src/plugins/defaults/index.ts +135 -26
  214. package/src/plugins/defaults/memory-retrieval/hooks/post-compact.ts +100 -52
  215. package/src/plugins/defaults/memory-retrieval/hooks/user-prompt-submit-temp.ts +184 -74
  216. package/src/plugins/defaults/memory-retrieval/injector-chain.ts +2 -2
  217. package/src/plugins/defaults/{injectors/register.ts → memory-retrieval/injectors.ts} +148 -73
  218. package/src/plugins/defaults/memory-retrieval/unified-turn-context.ts +223 -0
  219. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/assign.test.ts +4 -4
  220. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/live-integration.test.ts +9 -6
  221. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/maintain-job.test.ts +5 -5
  222. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/orchestrate.test.ts +8 -5
  223. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/reconcile.test.ts +2 -2
  224. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/render-injection.test.ts +1 -1
  225. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/router.test.ts +10 -5
  226. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/selection-log-store.test.ts +8 -8
  227. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/selector.test.ts +5 -5
  228. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/shadow-plugin.test.ts +16 -17
  229. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/types.test.ts +2 -2
  230. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/assign.ts +9 -5
  231. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/capabilities.ts +5 -2
  232. package/src/plugins/defaults/memory-v3-shadow/hooks/post-compact.ts +14 -0
  233. package/src/plugins/defaults/memory-v3-shadow/hooks/user-prompt-submit.ts +19 -0
  234. package/src/plugins/defaults/memory-v3-shadow/injector.ts +75 -0
  235. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/maintain-job.ts +15 -8
  236. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/orchestrate.ts +2 -2
  237. package/src/plugins/defaults/memory-v3-shadow/package.json +14 -0
  238. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/page-content.ts +2 -2
  239. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/provider-blocks.ts +1 -1
  240. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/reconcile.ts +7 -3
  241. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/render-injection.ts +1 -1
  242. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/router.ts +5 -5
  243. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/selection-log-store.ts +4 -4
  244. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/selector.ts +7 -7
  245. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/shadow-plugin.ts +32 -94
  246. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/tree.ts +1 -1
  247. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/types.ts +1 -1
  248. package/src/plugins/defaults/title-generate/package.json +0 -1
  249. package/src/plugins/defaults/tool-error/package.json +0 -1
  250. package/src/plugins/defaults/tool-result-truncate/package.json +0 -1
  251. package/src/plugins/pipeline.ts +6 -293
  252. package/src/plugins/registry.ts +9 -37
  253. package/src/plugins/types.ts +76 -381
  254. package/src/plugins/user-loader.ts +30 -127
  255. package/src/prompts/__tests__/system-prompt.test.ts +6 -0
  256. package/src/prompts/templates/BOOTSTRAP-ACTIVATION-RAIL.md +35 -3
  257. package/src/runtime/__tests__/agent-wake.test.ts +555 -691
  258. package/src/runtime/__tests__/interactive-ui.test.ts +1 -1
  259. package/src/runtime/agent-wake.ts +108 -209
  260. package/src/runtime/assistant-event-hub.ts +1 -1
  261. package/src/runtime/channel-approvals.ts +1 -1
  262. package/src/runtime/interactive-ui.ts +1 -1
  263. package/src/runtime/routes/__tests__/acp-routes.test.ts +315 -55
  264. package/src/runtime/routes/__tests__/conversation-list-routes.test.ts +1 -1
  265. package/src/runtime/routes/__tests__/plugins-routes.test.ts +423 -73
  266. package/src/runtime/routes/__tests__/surface-action-routes.test.ts +5 -4
  267. package/src/runtime/routes/__tests__/surface-content-routes.test.ts +4 -1
  268. package/src/runtime/routes/acp-routes.test.ts +89 -25
  269. package/src/runtime/routes/acp-routes.ts +81 -29
  270. package/src/runtime/routes/approval-routes.ts +1 -1
  271. package/src/runtime/routes/browser-routes.ts +1 -1
  272. package/src/runtime/routes/browser-tabs-routes.ts +6 -10
  273. package/src/runtime/routes/conversation-cli-routes.ts +1 -1
  274. package/src/runtime/routes/conversation-list-routes.ts +1 -1
  275. package/src/runtime/routes/conversation-query-routes.ts +1 -1
  276. package/src/runtime/routes/conversation-routes.ts +28 -2
  277. package/src/runtime/routes/conversation-starter-routes.ts +13 -7
  278. package/src/runtime/routes/conversations-import-routes.ts +24 -7
  279. package/src/runtime/routes/host-app-control-routes.ts +1 -1
  280. package/src/runtime/routes/host-cu-routes.ts +1 -1
  281. package/src/runtime/routes/identity-routes.ts +18 -3
  282. package/src/runtime/routes/inbound-message-handler.ts +1 -1
  283. package/src/runtime/routes/inference-profile-session-handler.ts +11 -0
  284. package/src/runtime/routes/inference-profile-session-reaper.ts +6 -0
  285. package/src/runtime/routes/memory-v3-routes.ts +16 -6
  286. package/src/runtime/routes/playground/helpers.ts +1 -1
  287. package/src/runtime/routes/plugins-routes.ts +337 -35
  288. package/src/runtime/routes/surface-conversation-resolver.ts +4 -3
  289. package/src/runtime/routes/work-items-routes.ts +2 -4
  290. package/src/runtime/services/conversation-serializer.ts +1 -1
  291. package/src/signals/cancel.ts +2 -4
  292. package/src/subagent/manager.ts +21 -5
  293. package/src/tools/acp/context.ts +20 -0
  294. package/src/tools/acp/list-agents.test.ts +8 -2
  295. package/src/tools/acp/spawn.test.ts +176 -195
  296. package/src/tools/acp/spawn.ts +37 -172
  297. package/src/tools/acp/steer.test.ts +105 -8
  298. package/src/tools/acp/steer.ts +48 -17
  299. package/src/tools/apps/executors.ts +166 -50
  300. package/src/tools/filesystem/write.ts +34 -0
  301. package/src/tools/subagent/spawn.ts +2 -4
  302. package/src/tools/ui-surface/definitions.ts +25 -5
  303. package/src/workspace/migrations/051-seed-conversation-summarization-callsite.ts +4 -5
  304. package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +69 -45
  305. package/docs/plugins.md +0 -832
  306. package/examples/plugins/echo/register.ts +0 -143
  307. package/src/__tests__/circuit-breaker-pipeline.test.ts +0 -405
  308. package/src/__tests__/compaction-pipeline.test.ts +0 -210
  309. package/src/__tests__/compaction-timeout-recovery.test.ts +0 -251
  310. package/src/__tests__/overflow-reduce-pipeline.test.ts +0 -667
  311. package/src/__tests__/pipeline-runner.test.ts +0 -554
  312. package/src/__tests__/plugin-external-api.test.ts +0 -68
  313. package/src/daemon/wake-target-adapter.ts +0 -253
  314. package/src/plugins/defaults/circuit-breaker/middlewares/circuitBreaker.ts +0 -93
  315. package/src/plugins/defaults/circuit-breaker/package.json +0 -15
  316. package/src/plugins/defaults/circuit-breaker/register.ts +0 -39
  317. package/src/plugins/defaults/compaction/middlewares/compaction.ts +0 -25
  318. package/src/plugins/defaults/compaction/register.ts +0 -35
  319. package/src/plugins/defaults/compaction/terminal.ts +0 -73
  320. package/src/plugins/defaults/empty-response/register.ts +0 -23
  321. package/src/plugins/defaults/history-repair/register.ts +0 -24
  322. package/src/plugins/defaults/overflow-reduce/middlewares/overflowReduce.ts +0 -126
  323. package/src/plugins/defaults/overflow-reduce/package.json +0 -15
  324. package/src/plugins/defaults/overflow-reduce/register.ts +0 -42
  325. package/src/plugins/defaults/title-generate/register.ts +0 -35
  326. package/src/plugins/defaults/tool-error/register.ts +0 -23
  327. package/src/plugins/defaults/tool-result-truncate/register.ts +0 -24
  328. package/src/plugins/external-api.ts +0 -104
  329. package/src/proactive-artifact/aux-message-injector.ts +0 -97
  330. package/src/proactive-artifact/decision.test.ts +0 -226
  331. package/src/proactive-artifact/decision.ts +0 -165
  332. package/src/proactive-artifact/index.ts +0 -7
  333. package/src/proactive-artifact/job.test.ts +0 -962
  334. package/src/proactive-artifact/job.ts +0 -372
  335. package/src/proactive-artifact/message-copy.ts +0 -58
  336. package/src/proactive-artifact/trigger-state.test.ts +0 -286
  337. package/src/proactive-artifact/trigger-state.ts +0 -123
  338. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/capabilities.test.ts +0 -0
  339. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/core.test.ts +0 -0
  340. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/fixtures/eval-turns.json +0 -0
  341. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/fixtures/live-turns.json +0 -0
  342. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/health.test.ts +0 -0
  343. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/needle.test.ts +0 -0
  344. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/provider-blocks.test.ts +0 -0
  345. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/snapshot.test.ts +0 -0
  346. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/tree.test.ts +0 -0
  347. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/working-set-eviction.test.ts +0 -0
  348. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/working-set-skeleton.test.ts +0 -0
  349. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/core.ts +0 -0
  350. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/README.md +0 -0
  351. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/assignments.json +0 -0
  352. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/core.json +0 -0
  353. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/leaves/domain-a/topic-x.md +0 -0
  354. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/leaves/domain-a/topic-y.md +0 -0
  355. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/leaves/domain-b/topic-z.md +0 -0
  356. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/health.ts +0 -0
  357. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/llm-retry.ts +0 -0
  358. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/needle.ts +0 -0
  359. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/snapshot.ts +0 -0
  360. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/working-set.ts +0 -0
@@ -15,7 +15,7 @@ import { createRequire } from "node:module";
15
15
  import { afterAll, beforeEach, describe, expect, mock, test } from "bun:test";
16
16
 
17
17
  import { CompactionCircuit } from "../agent/compaction-circuit.js";
18
- import type { AgentEvent, AgentLoopRunOptions } from "../agent/loop.js";
18
+ import type { AgentLoopRunOptions } from "../agent/loop.js";
19
19
  import type { LLMCallSite } from "../config/schemas/llm.js";
20
20
  import { resetPluginRegistryAndRegisterDefaults } from "../plugins/defaults/index.js";
21
21
  import type { Message, ToolDefinition } from "../providers/types.js";
@@ -102,23 +102,26 @@ mock.module("../context/token-estimator.js", () => ({
102
102
  estimateToolsTokens: () => 0,
103
103
  }));
104
104
 
105
- mock.module("../daemon/context-overflow-reducer.js", () => ({
106
- createInitialReducerState: () => ({
107
- appliedTiers: [],
108
- injectionMode: "full" as const,
109
- exhausted: false,
110
- }),
111
- reduceContextOverflow: async (msgs: Message[]) => ({
112
- messages: msgs,
113
- tier: "forced_compaction",
114
- state: {
115
- appliedTiers: ["forced_compaction"],
116
- injectionMode: "full",
117
- exhausted: true,
118
- },
119
- estimatedTokens: 1000,
105
+ mock.module(
106
+ "../plugins/defaults/compaction/context-overflow-reducer.js",
107
+ () => ({
108
+ createInitialReducerState: () => ({
109
+ appliedTiers: [],
110
+ injectionMode: "full" as const,
111
+ exhausted: false,
112
+ }),
113
+ reduceContextOverflow: async (msgs: Message[]) => ({
114
+ messages: msgs,
115
+ tier: "forced_compaction",
116
+ state: {
117
+ appliedTiers: ["forced_compaction"],
118
+ injectionMode: "full",
119
+ exhausted: true,
120
+ },
121
+ estimatedTokens: 1000,
122
+ }),
120
123
  }),
121
- }));
124
+ );
122
125
 
123
126
  mock.module("../daemon/context-overflow-policy.js", () => ({
124
127
  resolveOverflowAction: () => "fail_gracefully",
@@ -150,12 +153,26 @@ mock.module("../memory/conversation-crud.js", () => ({
150
153
  updateMessageMetadata: () => {},
151
154
  getMessages: () => [],
152
155
  getConversation: () => mockConversationRow,
153
- getConversationOverrideProfileFromRow: (
154
- row: { conversationType?: string; inferenceProfile?: string | null } | null,
156
+ resolveOverrideProfile: (
157
+ fields: {
158
+ conversationType?: string | null;
159
+ inferenceProfile?: string | null;
160
+ inferenceProfileExpiresAt?: number | null;
161
+ } | null,
155
162
  ) => {
156
- if (row?.conversationType === "background") return undefined;
157
- const profile = row?.inferenceProfile;
158
- return typeof profile === "string" ? profile : undefined;
163
+ if (
164
+ fields?.conversationType === "background" ||
165
+ fields?.conversationType === "scheduled"
166
+ ) {
167
+ return undefined;
168
+ }
169
+ if (
170
+ fields?.inferenceProfileExpiresAt != null &&
171
+ fields.inferenceProfileExpiresAt <= Date.now()
172
+ ) {
173
+ return undefined;
174
+ }
175
+ return fields?.inferenceProfile ?? undefined;
159
176
  },
160
177
  provenanceFromTrustContext: () => ({
161
178
  source: "user",
@@ -343,10 +360,8 @@ mock.module("../memory/llm-request-log-store.js", () => ({
343
360
 
344
361
  // ── Imports (after mocks) ────────────────────────────────────────────
345
362
 
346
- import {
347
- type AgentLoopConversationContext,
348
- runAgentLoopImpl,
349
- } from "../daemon/conversation-agent-loop.js";
363
+ import type { Conversation } from "../daemon/conversation.js";
364
+ import { runAgentLoopImpl } from "../daemon/conversation-agent-loop.js";
350
365
 
351
366
  // ── Test helpers ─────────────────────────────────────────────────────
352
367
 
@@ -362,22 +377,20 @@ let mutateBeforeResolveOverrideProfile: (() => void) | undefined;
362
377
 
363
378
  function makeCtx(
364
379
  captured: CapturedAgentLoopRun[],
365
- overrides?: Partial<AgentLoopConversationContext>,
366
- ): AgentLoopConversationContext {
380
+ overrides?: Partial<Conversation>,
381
+ ): Conversation {
367
382
  const agentLoopRun = async (
368
- messages: Message[],
369
- _onEvent: (event: AgentEvent) => void,
370
- options?: AgentLoopRunOptions,
383
+ options: AgentLoopRunOptions,
371
384
  ): Promise<Message[]> => {
372
385
  mutateBeforeResolveOverrideProfile?.();
373
386
  captured.push({
374
- callSite: options?.callSite,
375
- overrideProfile: options?.overrideProfile,
376
- resolvedOverrideProfile: options?.resolveOverrideProfile?.(),
377
- resolvedMaxInputTokens: options?.resolveContextWindow?.().maxInputTokens,
387
+ callSite: options.callSite,
388
+ overrideProfile: options.overrideProfile,
389
+ resolvedOverrideProfile: options.resolveOverrideProfile?.(),
390
+ resolvedMaxInputTokens: options.resolveContextWindow?.().maxInputTokens,
378
391
  });
379
392
  return [
380
- ...messages,
393
+ ...options.messages,
381
394
  {
382
395
  role: "assistant" as const,
383
396
  content: [{ type: "text" as const, text: "response" }],
@@ -406,7 +419,7 @@ function makeCtx(
406
419
  getResolvedTools: () => [] as ToolDefinition[],
407
420
  getActiveModel: () => undefined,
408
421
  compactionCircuit: new CompactionCircuit("test-conv"),
409
- } as unknown as AgentLoopConversationContext["agentLoop"],
422
+ } as unknown as Conversation["agentLoop"],
410
423
  provider: {
411
424
  name: "mock-provider",
412
425
  sendMessage: async () => ({
@@ -415,13 +428,14 @@ function makeCtx(
415
428
  usage: { inputTokens: 0, outputTokens: 0 },
416
429
  stopReason: "end_turn",
417
430
  }),
418
- } as unknown as AgentLoopConversationContext["provider"],
431
+ } as unknown as Conversation["provider"],
419
432
  systemPrompt: "system prompt",
420
433
 
421
434
  contextWindowManager: {
435
+ updateConfig: () => {},
422
436
  shouldCompact: () => ({ needed: false, estimatedTokens: 0 }),
423
437
  maybeCompact: async () => ({ compacted: false }),
424
- } as unknown as AgentLoopConversationContext["contextWindowManager"],
438
+ } as unknown as Conversation["contextWindowManager"],
425
439
  contextCompactedMessageCount: 0,
426
440
  contextCompactedAt: null,
427
441
 
@@ -435,8 +449,6 @@ function makeCtx(
435
449
  currentTurnSurfaces: [],
436
450
 
437
451
  workingDir: "/tmp",
438
- workspaceTopLevelContext: null,
439
- workspaceTopLevelDirty: false,
440
452
  channelCapabilities: undefined,
441
453
  commandIntent: undefined,
442
454
  trustContext: undefined,
@@ -446,15 +458,15 @@ function makeCtx(
446
458
  preactivatedSkillIds: undefined,
447
459
  skillProjectionState: new Map(),
448
460
  skillProjectionCache:
449
- new Map() as unknown as AgentLoopConversationContext["skillProjectionCache"],
461
+ new Map() as unknown as Conversation["skillProjectionCache"],
450
462
 
451
463
  traceEmitter: {
452
464
  emit: () => {},
453
- } as unknown as AgentLoopConversationContext["traceEmitter"],
465
+ } as unknown as Conversation["traceEmitter"],
454
466
  profiler: {
455
467
  startRequest: () => {},
456
468
  emitSummary: () => {},
457
- } as unknown as AgentLoopConversationContext["profiler"],
469
+ } as unknown as Conversation["profiler"],
458
470
  usageStats: {
459
471
  totalInputTokens: 0,
460
472
  totalOutputTokens: 0,
@@ -467,13 +479,12 @@ function makeCtx(
467
479
  lastAttachmentWarnings: [],
468
480
 
469
481
  hasNoClient: false,
470
- prompter: {} as unknown as AgentLoopConversationContext["prompter"],
471
- queue: {} as unknown as AgentLoopConversationContext["queue"],
482
+ prompter: {} as unknown as Conversation["prompter"],
483
+ queue: {} as unknown as Conversation["queue"],
472
484
 
473
485
  getWorkspaceGitService: () => ({ ensureInitialized: async () => {} }),
474
486
  commitTurnChanges: async () => {},
475
487
 
476
- refreshWorkspaceTopLevelContextIfNeeded: () => {},
477
488
  markWorkspaceTopLevelDirty: () => {},
478
489
  emitActivityState: () => {},
479
490
  getQueueDepth: () => 0,
@@ -500,10 +511,10 @@ function makeCtx(
500
511
  }),
501
512
  retrackCachedNodes: () => {},
502
513
  recordPkbQueryVectors: () => {},
503
- } as unknown as AgentLoopConversationContext["graphMemory"],
514
+ } as unknown as Conversation["graphMemory"],
504
515
 
505
516
  ...overrides,
506
- } as AgentLoopConversationContext;
517
+ } as unknown as Conversation;
507
518
  }
508
519
 
509
520
  // ── Tests ────────────────────────────────────────────────────────────
@@ -541,20 +552,11 @@ afterAll(() => {
541
552
 
542
553
  describe("runAgentLoopImpl — per-conversation inferenceProfile", () => {
543
554
  test("non-background conversation with inferenceProfile threads it through as overrideProfile", async () => {
544
- mockConversationRow = {
545
- id: "conv-1",
555
+ const captured: CapturedAgentLoopRun[] = [];
556
+ const ctx = makeCtx(captured, {
546
557
  conversationType: "standard",
547
558
  inferenceProfile: "quality-optimized",
548
- contextSummary: null,
549
- contextCompactedMessageCount: 0,
550
- totalInputTokens: 0,
551
- totalOutputTokens: 0,
552
- totalEstimatedCost: 0,
553
- title: null,
554
- };
555
-
556
- const captured: CapturedAgentLoopRun[] = [];
557
- const ctx = makeCtx(captured);
559
+ });
558
560
 
559
561
  await runAgentLoopImpl(ctx, "hello", "msg-1", () => {});
560
562
 
@@ -564,21 +566,12 @@ describe("runAgentLoopImpl — per-conversation inferenceProfile", () => {
564
566
  }
565
567
  });
566
568
 
567
- test("background conversation ignores inferenceProfile column", async () => {
568
- mockConversationRow = {
569
- id: "conv-1",
569
+ test("background conversation ignores inferenceProfile", async () => {
570
+ const captured: CapturedAgentLoopRun[] = [];
571
+ const ctx = makeCtx(captured, {
570
572
  conversationType: "background",
571
573
  inferenceProfile: "quality-optimized",
572
- contextSummary: null,
573
- contextCompactedMessageCount: 0,
574
- totalInputTokens: 0,
575
- totalOutputTokens: 0,
576
- totalEstimatedCost: 0,
577
- title: null,
578
- };
579
-
580
- const captured: CapturedAgentLoopRun[] = [];
581
- const ctx = makeCtx(captured);
574
+ });
582
575
 
583
576
  await runAgentLoopImpl(ctx, "hello", "msg-1", () => {});
584
577
 
@@ -588,22 +581,9 @@ describe("runAgentLoopImpl — per-conversation inferenceProfile", () => {
588
581
  }
589
582
  });
590
583
 
591
- test("absence of inferenceProfile column behaves identically to today (no override)", async () => {
592
- // `mockConversationRow` already defaults to inferenceProfile: null.
593
- // Also explicitly cover the case where the column is missing entirely.
594
- mockConversationRow = {
595
- id: "conv-1",
596
- conversationType: "standard",
597
- contextSummary: null,
598
- contextCompactedMessageCount: 0,
599
- totalInputTokens: 0,
600
- totalOutputTokens: 0,
601
- totalEstimatedCost: 0,
602
- title: null,
603
- };
604
-
584
+ test("absence of inferenceProfile behaves identically to today (no override)", async () => {
605
585
  const captured: CapturedAgentLoopRun[] = [];
606
- const ctx = makeCtx(captured);
586
+ const ctx = makeCtx(captured, { conversationType: "standard" });
607
587
 
608
588
  await runAgentLoopImpl(ctx, "hello", "msg-1", () => {});
609
589
 
@@ -613,26 +593,17 @@ describe("runAgentLoopImpl — per-conversation inferenceProfile", () => {
613
593
  }
614
594
  });
615
595
 
616
- test("explicit options.overrideProfile takes precedence over the column read", async () => {
596
+ test("explicit options.overrideProfile takes precedence over the conversation override", async () => {
617
597
  // Subagent path: SubagentManager forwards the parent's pinned profile
618
598
  // into the spawned (background) conversation's runAgentLoop call via
619
599
  // `options.overrideProfile`. The agent loop must respect that even
620
- // though the subagent's own conversation row is `background` (which
600
+ // though the subagent's own conversation is `background` (which
621
601
  // would otherwise zero out the override per the rule above).
622
- mockConversationRow = {
623
- id: "conv-1",
602
+ const captured: CapturedAgentLoopRun[] = [];
603
+ const ctx = makeCtx(captured, {
624
604
  conversationType: "background",
625
605
  inferenceProfile: null,
626
- contextSummary: null,
627
- contextCompactedMessageCount: 0,
628
- totalInputTokens: 0,
629
- totalOutputTokens: 0,
630
- totalEstimatedCost: 0,
631
- title: null,
632
- };
633
-
634
- const captured: CapturedAgentLoopRun[] = [];
635
- const ctx = makeCtx(captured);
606
+ });
636
607
 
637
608
  await runAgentLoopImpl(ctx, "hello", "msg-1", () => {}, {
638
609
  overrideProfile: "fast",
@@ -645,27 +616,15 @@ describe("runAgentLoopImpl — per-conversation inferenceProfile", () => {
645
616
  });
646
617
 
647
618
  test("re-resolves inferenceProfile when a tool changes it mid-turn", async () => {
648
- mockConversationRow = {
649
- id: "conv-1",
619
+ const captured: CapturedAgentLoopRun[] = [];
620
+ const ctx = makeCtx(captured, {
650
621
  conversationType: "standard",
651
622
  inferenceProfile: null,
652
- contextSummary: null,
653
- contextCompactedMessageCount: 0,
654
- totalInputTokens: 0,
655
- totalOutputTokens: 0,
656
- totalEstimatedCost: 0,
657
- title: null,
658
- };
623
+ });
659
624
  mutateBeforeResolveOverrideProfile = () => {
660
- mockConversationRow = {
661
- ...mockConversationRow!,
662
- inferenceProfile: "quality-optimized",
663
- };
625
+ ctx.inferenceProfile = "quality-optimized";
664
626
  };
665
627
 
666
- const captured: CapturedAgentLoopRun[] = [];
667
- const ctx = makeCtx(captured);
668
-
669
628
  await runAgentLoopImpl(ctx, "hello", "msg-1", () => {});
670
629
 
671
630
  expect(captured.length).toBeGreaterThan(0);