@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
@@ -1,253 +0,0 @@
1
- /**
2
- * Adapter that wraps a live {@link Conversation} as a {@link WakeTarget}
3
- * for `wakeAgentForOpportunity()`.
4
- *
5
- * Extracted from `server.ts` so that `runtime/agent-wake.ts` can import
6
- * the resolver directly instead of going through a DI callback registered
7
- * at daemon startup.
8
- */
9
-
10
- import type { AgentEvent } from "../agent/loop.js";
11
- import {
12
- addMessage,
13
- getConversation,
14
- provenanceFromTrustContext,
15
- } from "../memory/conversation-crud.js";
16
- import { syncMessageToDisk } from "../memory/conversation-disk-view.js";
17
- import { backfillMessageIdOnLogs } from "../memory/llm-request-log-store.js";
18
- import type { WakeTarget } from "../runtime/agent-wake.js";
19
- import { broadcastMessage } from "../runtime/assistant-event-hub.js";
20
- import { getLogger } from "../util/logger.js";
21
- import type { Conversation } from "./conversation.js";
22
- import type { ServerMessage } from "./message-protocol.js";
23
-
24
- const log = getLogger("wake-target-adapter");
25
-
26
- /**
27
- * Translate a raw {@link AgentEvent} from the agent loop into the
28
- * corresponding {@link ServerMessage} wire frame. The normal user-turn
29
- * path does this via the full state-aware handler in
30
- * `conversation-agent-loop-handlers.ts`; the wake path has no tool
31
- * accounting, title generation, or activity-state tracking to worry
32
- * about, so we only need the subset that produces client-visible
33
- * frames. Events that have no client-visible wire shape (usage, error,
34
- * preview/input-json deltas, etc.) are dropped — they produce no UI.
35
- *
36
- * Keeping this translator co-located with the wake adapter preserves
37
- * the runtime/daemon layering: `runtime/agent-wake.ts` never imports
38
- * `message-protocol.ts` or wire shapes, and the daemon owns all
39
- * translation from agent-loop semantics to client frames.
40
- */
41
- function translateAgentEventToServerMessage(
42
- event: AgentEvent,
43
- conversationId: string,
44
- ): ServerMessage | null {
45
- switch (event.type) {
46
- case "text_delta":
47
- return {
48
- type: "assistant_text_delta",
49
- text: event.text,
50
- conversationId,
51
- };
52
- case "thinking_delta":
53
- return {
54
- type: "assistant_thinking_delta",
55
- thinking: event.thinking,
56
- conversationId,
57
- };
58
- case "tool_use":
59
- return {
60
- type: "tool_use_start",
61
- toolName: event.name,
62
- input: event.input,
63
- conversationId,
64
- toolUseId: event.id,
65
- };
66
- case "tool_use_preview_start":
67
- return {
68
- type: "tool_use_preview_start",
69
- toolUseId: event.toolUseId,
70
- toolName: event.toolName,
71
- conversationId,
72
- };
73
- case "tool_output_chunk":
74
- return {
75
- type: "tool_output_chunk",
76
- chunk: event.chunk,
77
- conversationId,
78
- toolUseId: event.toolUseId,
79
- };
80
- case "tool_result": {
81
- const imageBlocks = event.contentBlocks?.filter(
82
- (b): b is Extract<typeof b, { type: "image" }> => b.type === "image",
83
- );
84
- const imageDataList = imageBlocks?.length
85
- ? imageBlocks.map((b) => b.source.data)
86
- : undefined;
87
- return {
88
- type: "tool_result",
89
- toolName: "",
90
- result: event.content,
91
- isError: event.isError,
92
- diff: event.diff,
93
- status: event.status,
94
- conversationId,
95
- imageData: imageDataList?.[0],
96
- imageDataList,
97
- toolUseId: event.toolUseId,
98
- };
99
- }
100
- case "server_tool_start":
101
- return {
102
- type: "tool_use_start",
103
- toolName: event.name,
104
- input: event.input,
105
- conversationId,
106
- toolUseId: event.toolUseId,
107
- };
108
- case "server_tool_complete": {
109
- let resultText = "";
110
- if (Array.isArray(event.content) && event.content.length > 0) {
111
- resultText = (event.content as unknown[])
112
- .filter(
113
- (r): r is { type: string; title: string; url: string } =>
114
- typeof r === "object" &&
115
- r != null &&
116
- (r as { type?: string }).type === "web_search_result",
117
- )
118
- .map((r) => `${r.title}\n${r.url}`)
119
- .join("\n\n");
120
- }
121
- return {
122
- type: "tool_result",
123
- toolName: "web_search",
124
- result: resultText,
125
- isError: event.isError,
126
- conversationId,
127
- toolUseId: event.toolUseId,
128
- };
129
- }
130
- case "message_complete":
131
- return {
132
- type: "message_complete",
133
- conversationId,
134
- };
135
- case "input_json_delta":
136
- case "usage":
137
- case "error":
138
- case "provider_error":
139
- case "max_tokens_reached":
140
- case "context_compacting":
141
- case "compaction_circuit_open":
142
- case "compaction_circuit_closed":
143
- case "compaction_completed":
144
- case "history_stripped":
145
- case "agent_loop_exit":
146
- return null;
147
- case "llm_call_started":
148
- // The wake path persists its assistant tail via `persistTailMessage`
149
- // (an `addMessage`-shaped call below) rather than via the main
150
- // event-handler's `reserve` → `updateContent` pipeline, so there is
151
- // no row to reserve here. Translation returns null and the wake
152
- // path's existing end-of-turn persist continues to mint the row.
153
- // Following up with full wake-path pre-allocation parity is tracked
154
- // as a B3 follow-up.
155
- return null;
156
- }
157
- }
158
-
159
- /**
160
- * Adapt a live {@link Conversation} to the narrow {@link WakeTarget}
161
- * surface expected by `wakeAgentForOpportunity()`.
162
- */
163
- export function conversationToWakeTarget(
164
- conversation: Conversation,
165
- ): WakeTarget {
166
- return {
167
- conversationId: conversation.conversationId,
168
- agentLoop: conversation.agentLoop,
169
- getMessages: () => conversation.getMessages(),
170
- pushMessage: (msg) => {
171
- conversation.messages.push(msg);
172
- },
173
- onWakeProducedOutput: (source, hint, surfaceId) => {
174
- broadcastMessage({
175
- type: "ui_surface_show",
176
- conversationId: conversation.conversationId,
177
- surfaceId,
178
- surfaceType: "card",
179
- data: {
180
- title: "Conversation Woke",
181
- body: hint,
182
- metadata: [{ label: "Source", value: source }],
183
- },
184
- display: "inline",
185
- });
186
- },
187
- emitAgentEvent: (event) => {
188
- const frame = translateAgentEventToServerMessage(
189
- event,
190
- conversation.conversationId,
191
- );
192
- if (!frame) return;
193
- broadcastMessage(frame);
194
- },
195
- isProcessing: () => conversation.isProcessing(),
196
- markProcessing: (on) => {
197
- conversation.setProcessing(on);
198
- },
199
- setTrustContext: (ctx) => conversation.setTrustContext(ctx),
200
- setWakeAllowedTools: (tools) => {
201
- const previous = conversation.subagentAllowedTools;
202
- conversation.setSubagentAllowedTools(new Set(tools));
203
- return () => {
204
- conversation.setSubagentAllowedTools(previous);
205
- };
206
- },
207
- persistTailMessage: async (message) => {
208
- const turnChannelCtx = conversation.getTurnChannelContext();
209
- const turnInterfaceCtx = conversation.getTurnInterfaceContext();
210
- const metadata: Record<string, unknown> = {
211
- ...provenanceFromTrustContext(conversation.trustContext),
212
- userMessageChannel: turnChannelCtx?.userMessageChannel ?? "vellum",
213
- assistantMessageChannel:
214
- turnChannelCtx?.assistantMessageChannel ?? "vellum",
215
- userMessageInterface: turnInterfaceCtx?.userMessageInterface ?? "web",
216
- assistantMessageInterface:
217
- turnInterfaceCtx?.assistantMessageInterface ?? "web",
218
- };
219
- const persisted = await addMessage(
220
- conversation.conversationId,
221
- message.role,
222
- JSON.stringify(message.content),
223
- { metadata },
224
- );
225
- if (message.role === "assistant") {
226
- try {
227
- backfillMessageIdOnLogs(conversation.conversationId, persisted.id);
228
- } catch (err) {
229
- log.warn(
230
- { err, conversationId: conversation.conversationId },
231
- "wake adapter: backfill messageId on LLM logs failed (non-fatal)",
232
- );
233
- }
234
- }
235
- try {
236
- const convRow = getConversation(conversation.conversationId);
237
- if (convRow) {
238
- syncMessageToDisk(
239
- conversation.conversationId,
240
- persisted.id,
241
- convRow.createdAt,
242
- );
243
- }
244
- } catch (err) {
245
- log.warn(
246
- { err, conversationId: conversation.conversationId },
247
- "wake adapter: syncMessageToDisk failed (non-fatal)",
248
- );
249
- }
250
- },
251
- drainQueue: () => conversation.drainQueue(),
252
- };
253
- }
@@ -1,93 +0,0 @@
1
- import type {
2
- CircuitBreakerArgs,
3
- CircuitBreakerResult,
4
- Middleware,
5
- } from "../../../types.js";
6
-
7
- /**
8
- * Consecutive failures required to trip the breaker. Matches the legacy
9
- * `COMPACTION_CIRCUIT_FAILURE_THRESHOLD` in `conversation-agent-loop.ts`.
10
- */
11
- export const COMPACTION_CIRCUIT_FAILURE_THRESHOLD = 3;
12
-
13
- /**
14
- * Cooldown window after the breaker trips, during which auto-compaction is
15
- * suspended. Matches the legacy `COMPACTION_CIRCUIT_COOLDOWN_MS`.
16
- */
17
- export const COMPACTION_CIRCUIT_COOLDOWN_MS = 60 * 60 * 1000;
18
-
19
- /**
20
- * Default middleware for the `circuitBreaker` pipeline. A thin wrapper over the
21
- * state container passed in `CircuitBreakerArgs.state`:
22
- *
23
- * - `{ key }` — query. Defers to `next` for the current
24
- * `{ open, cooldownRemainingMs? }`.
25
- * - `{ key, outcome }` — update state based on outcome, then defer to `next`
26
- * for the post-update decision. A run of three failures trips the breaker;
27
- * any non-failure outcome resets both the counter and the cooldown timestamp.
28
- *
29
- * Event emission preserves the existing `trackCompactionOutcome` behavior:
30
- * `compaction_circuit_open` fires once when the counter first reaches the
31
- * threshold while the circuit is dormant; `compaction_circuit_closed` fires
32
- * only on the open→closed transition.
33
- */
34
- const circuitBreaker: Middleware<CircuitBreakerArgs, CircuitBreakerResult> =
35
- async function circuitBreaker(args, next) {
36
- const { outcome, state, onEvent } = args;
37
-
38
- // Update branch — mutate state first, then defer to the downstream
39
- // chain (or terminal) for the decision so outer observers still see
40
- // the fully-processed outcome. Separating state mutation from
41
- // decision computation also keeps this middleware composable: an
42
- // outer plugin may wrap the invocation to observe both the pre-update
43
- // args and the post-update result.
44
- if (outcome !== undefined) {
45
- if (outcome === "failure") {
46
- state.consecutiveCompactionFailures += 1;
47
- // Treat a stale/expired open-until timestamp the same as null so
48
- // a new 3-strike window can re-open the circuit after the prior
49
- // cooldown elapses. Without this, subsequent trips would no-op
50
- // because `compactionCircuitOpenUntil` remains set to a past
51
- // timestamp even though the breaker is effectively closed.
52
- const circuitDormant =
53
- state.compactionCircuitOpenUntil === null ||
54
- Date.now() >= state.compactionCircuitOpenUntil;
55
- if (
56
- state.consecutiveCompactionFailures >=
57
- COMPACTION_CIRCUIT_FAILURE_THRESHOLD &&
58
- circuitDormant
59
- ) {
60
- const openUntil = Date.now() + COMPACTION_CIRCUIT_COOLDOWN_MS;
61
- state.compactionCircuitOpenUntil = openUntil;
62
- if (onEvent) {
63
- onEvent({
64
- type: "compaction_circuit_open",
65
- conversationId: state.conversationId,
66
- reason: "3_consecutive_failures",
67
- openUntil,
68
- });
69
- }
70
- }
71
- } else {
72
- // Emit only on the open→closed transition; firing on the common
73
- // closed→closed case would be noise.
74
- const wasOpen = state.compactionCircuitOpenUntil !== null;
75
- state.consecutiveCompactionFailures = 0;
76
- state.compactionCircuitOpenUntil = null;
77
- if (wasOpen && onEvent) {
78
- onEvent({
79
- type: "compaction_circuit_closed",
80
- conversationId: state.conversationId,
81
- });
82
- }
83
- }
84
- }
85
-
86
- // Defer to downstream (the terminal, in the default registration, but
87
- // potentially another plugin in a customized chain) for the final
88
- // decision. The terminal's implementation is the canonical read of
89
- // the (now-updated) state container.
90
- return next(args);
91
- };
92
-
93
- export default circuitBreaker;
@@ -1,15 +0,0 @@
1
- {
2
- "name": "default-circuit-breaker",
3
- "version": "1.0.0",
4
- "description": "First-party default plugin wrapping the assistant's built-in circuit-breaker pipeline with a passthrough implementation.",
5
- "private": true,
6
- "license": "MIT",
7
- "type": "module",
8
- "main": "./register.ts",
9
- "engines": {
10
- "node": ">=20.12.0"
11
- },
12
- "peerDependencies": {
13
- "@vellumai/plugin-api": "^0.8.0"
14
- }
15
- }
@@ -1,39 +0,0 @@
1
- /**
2
- * Default `circuitBreaker` plugin.
3
- *
4
- * Replicates the inline compaction circuit-breaker logic that previously
5
- * lived in `daemon/conversation-agent-loop.ts`: three consecutive summary-LLM
6
- * failures open the circuit for a one-hour cooldown, and any successful
7
- * compaction resets the counter.
8
- *
9
- * The plugin is a thin wrapper over the state container passed in
10
- * `CircuitBreakerArgs.state`. The {@link Conversation} owns the underlying
11
- * fields (`consecutiveCompactionFailures`, `compactionCircuitOpenUntil`)
12
- * because dev-only playground routes (`POST /playground/reset-compaction-circuit`,
13
- * `POST /playground/inject-compaction-failures`) read and mutate them
14
- * directly. Keeping ownership on the conversation lets this plugin stay a
15
- * pure wrapper while preserving those hatches.
16
- *
17
- * The `key` parameter is carried through for multi-circuit futures but the
18
- * default plugin currently bundles all circuit state into the `state`
19
- * container; the key is attached to the log record via the pipeline runner.
20
- */
21
-
22
- import { type Plugin } from "../../types.js";
23
- import circuitBreaker from "./middlewares/circuitBreaker.js";
24
- import pkg from "./package.json" with { type: "json" };
25
-
26
- /**
27
- * Default plugin registered at daemon startup. Consumers negotiate against
28
- * `circuitBreakerApi@v1` via the registry's capability table.
29
- */
30
- export const defaultCircuitBreakerPlugin: Plugin = {
31
- manifest: {
32
- name: pkg.name,
33
- version: pkg.version,
34
- },
35
-
36
- middleware: {
37
- circuitBreaker,
38
- },
39
- };
@@ -1,25 +0,0 @@
1
- import type {
2
- CompactionArgs,
3
- CompactionResult,
4
- Middleware,
5
- } from "../../../types.js";
6
-
7
- /**
8
- * Passthrough middleware for the `compaction` pipeline. Forwards to
9
- * `next(args)` so any custom plugins layered outside still run; when this is
10
- * the only middleware, `next` is the terminal handler (`../terminal.ts`) and
11
- * returns the real compaction output.
12
- *
13
- * Defaults register at the OUTERMOST onion position, so deciding here without
14
- * calling `next` would shadow every later-registered plugin. Routing through
15
- * `next(args)` lets user middleware participate normally.
16
- */
17
- const defaultCompactionMiddleware: Middleware<
18
- CompactionArgs,
19
- CompactionResult
20
- > = async function defaultCompaction(args, next, ctx) {
21
- void ctx;
22
- return next(args);
23
- };
24
-
25
- export default defaultCompactionMiddleware;
@@ -1,35 +0,0 @@
1
- /**
2
- * Default `compaction` plugin.
3
- *
4
- * The plugin's middleware is a passthrough — it calls `next(args)` and returns
5
- * the result unchanged. The actual compaction lives in the terminal handler in
6
- * `./terminal.ts`, which is wired in as the pipeline's `terminal` argument by
7
- * the `runPipeline` call site in `daemon/conversation-agent-loop.ts`. This
8
- * separation matters: the default plugin is registered before any user plugin
9
- * (defaults load first in `bootstrapPlugins()`), which puts it at the
10
- * OUTERMOST position of the onion chain. If the default middleware were to
11
- * invoke the terminal directly without calling `next`, it would shadow every
12
- * later-registered plugin. Routing through `next(args)` lets user middleware
13
- * participate normally.
14
- *
15
- * Design doc: `.private/plans/agent-plugin-system.md` (PR 25).
16
- */
17
-
18
- import { type Plugin } from "../../types.js";
19
- import defaultCompactionMiddleware from "./middlewares/compaction.js";
20
- import pkg from "./package.json" with { type: "json" };
21
-
22
- /**
23
- * Manifest + middleware wiring for the default compaction plugin. The
24
- * registration happens in `daemon/external-plugins-bootstrap.ts` before
25
- * {@link bootstrapPlugins} fires plugin `init()` hooks.
26
- */
27
- export const defaultCompactionPlugin: Plugin = {
28
- manifest: {
29
- name: pkg.name,
30
- version: pkg.version,
31
- },
32
- middleware: {
33
- compaction: defaultCompactionMiddleware,
34
- },
35
- };
@@ -1,73 +0,0 @@
1
- /**
2
- * Default `compaction` behavior: summarizes conversation history when the
3
- * context window fills up.
4
- *
5
- * This module is side-effect free: importing it does not register any plugin.
6
- *
7
- * Delegates to the orchestrator's existing {@link ContextWindowManager}
8
- * instance, read from `ctx.contextWindowManager` on the {@link TurnContext} as
9
- * a typed optional field. The orchestrator is responsible for attaching that
10
- * handle to the per-turn context. If the handle is missing, this throws a
11
- * {@link PluginExecutionError} so the bug surfaces with clear attribution
12
- * instead of a late `undefined.maybeCompact is not a function`.
13
- */
14
-
15
- import type {
16
- ContextWindowCompactOptions,
17
- ContextWindowManager,
18
- ContextWindowResult,
19
- } from "../../../context/window-manager.js";
20
- import type { Message } from "../../../providers/types.js";
21
- import {
22
- type CompactionArgs,
23
- type CompactionResult,
24
- PluginExecutionError,
25
- type TurnContext,
26
- } from "../../types.js";
27
-
28
- /**
29
- * Name under which the default plugin registers. Exposed so tests and later
30
- * plugins can assert registration order or override the default via
31
- * composition.
32
- */
33
- export const DEFAULT_COMPACTION_PLUGIN_NAME = "default-compaction";
34
-
35
- /**
36
- * Read `contextWindowManager` off the turn context. Throws
37
- * {@link PluginExecutionError} when absent so the failure attributes cleanly
38
- * to the default plugin instead of manifesting as a later NPE.
39
- */
40
- function extractManager(ctx: TurnContext): ContextWindowManager {
41
- const manager = ctx.contextWindowManager;
42
- if (
43
- manager == null ||
44
- typeof manager !== "object" ||
45
- typeof (manager as { maybeCompact?: unknown }).maybeCompact !== "function"
46
- ) {
47
- throw new PluginExecutionError(
48
- "default-compaction: ctx.contextWindowManager is missing — orchestrator must attach it before invoking compaction",
49
- DEFAULT_COMPACTION_PLUGIN_NAME,
50
- );
51
- }
52
- return manager;
53
- }
54
-
55
- /**
56
- * Run compaction for the turn: reads the context window manager off the turn
57
- * context and returns the (possibly summarized) message history from
58
- * `maybeCompact`.
59
- */
60
- export async function defaultCompactionTerminal(
61
- args: CompactionArgs,
62
- ctx: TurnContext,
63
- ): Promise<CompactionResult> {
64
- const manager = extractManager(ctx);
65
- const messages = args.messages as Message[];
66
- const options = args.options as ContextWindowCompactOptions | undefined;
67
- const result: ContextWindowResult = await manager.maybeCompact(
68
- messages,
69
- args.signal,
70
- options,
71
- );
72
- return result;
73
- }
@@ -1,23 +0,0 @@
1
- /**
2
- * Default `empty-response` plugin.
3
- *
4
- * Contributes a `stop` hook that re-queries the model when a turn yields with
5
- * no tool calls but came back empty (or as a provider refusal). The decision
6
- * logic lives in `./hooks/stop.ts`. Defaults register before user plugins, so
7
- * this runs at the front of the `stop` hook chain.
8
- */
9
-
10
- import { type Plugin } from "../../types.js";
11
- import stop from "./hooks/stop.js";
12
- import pkg from "./package.json" with { type: "json" };
13
-
14
- /** Singleton plugin — the registry rejects duplicate registrations by name. */
15
- export const defaultEmptyResponsePlugin: Plugin = {
16
- manifest: {
17
- name: pkg.name,
18
- version: pkg.version,
19
- },
20
- hooks: {
21
- stop,
22
- },
23
- };
@@ -1,24 +0,0 @@
1
- /**
2
- * Default `history-repair` plugin.
3
- *
4
- * Contributes a `user-prompt-submit` hook that normalizes the working message
5
- * history (tool-use/tool-result pairing, role alternation) before the agent
6
- * loop hands it to the provider. The repair implementation lives in
7
- * `./terminal.ts`; the hook in `./hooks/user-prompt-submit.ts` wires it into
8
- * the lifecycle. Defaults register before user plugins, so this normalization
9
- * runs at the front of the hook chain.
10
- */
11
-
12
- import { type Plugin } from "../../types.js";
13
- import userPromptSubmit from "./hooks/user-prompt-submit.js";
14
- import pkg from "./package.json" with { type: "json" };
15
-
16
- export const defaultHistoryRepairPlugin: Plugin = {
17
- manifest: {
18
- name: pkg.name,
19
- version: pkg.version,
20
- },
21
- hooks: {
22
- "user-prompt-submit": userPromptSubmit,
23
- },
24
- };