@vellumai/assistant 0.8.8 → 0.8.9-dev.202606091853.fbaa2ae

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 (475) hide show
  1. package/ARCHITECTURE.md +6 -6
  2. package/bun.lock +2 -2
  3. package/docs/activation-funnel-telemetry.md +310 -0
  4. package/examples/plugins/echo/README.md +61 -60
  5. package/examples/plugins/echo/hooks/post-tool-use.ts +18 -0
  6. package/examples/plugins/echo/hooks/stop.ts +16 -0
  7. package/examples/plugins/echo/hooks/user-prompt-submit.ts +18 -0
  8. package/examples/plugins/echo/package.json +1 -2
  9. package/examples/plugins/echo/src/emit.ts +19 -0
  10. package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +7 -6
  11. package/openapi.yaml +263 -121
  12. package/package.json +2 -2
  13. package/src/__tests__/activation-early-marking.test.ts +120 -0
  14. package/src/__tests__/agent-loop-callsite-precedence.test.ts +69 -14
  15. package/src/__tests__/agent-loop-exit-reason.test.ts +204 -144
  16. package/src/__tests__/agent-loop-mutable-latest-user-message.test.ts +50 -35
  17. package/src/__tests__/agent-loop-output-hooks.test.ts +357 -0
  18. package/src/__tests__/agent-loop-override-profile.test.ts +25 -6
  19. package/src/__tests__/agent-loop-provider-error-recording.test.ts +41 -21
  20. package/src/__tests__/agent-loop-thinking.test.ts +36 -20
  21. package/src/__tests__/agent-loop.test.ts +441 -96
  22. package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +14 -14
  23. package/src/__tests__/agent-wake-override-profile.test.ts +17 -21
  24. package/src/__tests__/anthropic-provider.test.ts +23 -8
  25. package/src/__tests__/app-builder-tool-scripts.test.ts +21 -0
  26. package/src/__tests__/app-control-flow.test.ts +1 -1
  27. package/src/__tests__/app-dir-path-guard.test.ts +1 -0
  28. package/src/__tests__/app-executors.test.ts +132 -0
  29. package/src/__tests__/approval-cascade.test.ts +6 -5
  30. package/src/__tests__/approval-routes-http.test.ts +4 -1
  31. package/src/__tests__/background-workers-disk-pressure.test.ts +1 -1
  32. package/src/__tests__/channel-approval-routes.test.ts +1 -1
  33. package/src/__tests__/channel-approvals.test.ts +1 -1
  34. package/src/__tests__/compaction-circuit.test.ts +258 -0
  35. package/src/__tests__/compaction-direct.test.ts +146 -0
  36. package/src/__tests__/compaction-events.test.ts +7 -7
  37. package/src/__tests__/compaction.benchmark.test.ts +1 -1
  38. package/src/__tests__/compactor-web-search-strip.test.ts +213 -0
  39. package/src/__tests__/context-overflow-reducer.test.ts +265 -125
  40. package/src/__tests__/context-window-manager-compact-retry.test.ts +121 -15
  41. package/src/__tests__/conversation-abort-tool-results.test.ts +7 -5
  42. package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +7 -10
  43. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +78 -119
  44. package/src/__tests__/conversation-agent-loop-overflow.test.ts +158 -234
  45. package/src/__tests__/conversation-agent-loop.test.ts +342 -623
  46. package/src/__tests__/conversation-clean-command.test.ts +5 -2
  47. package/src/__tests__/conversation-confirmation-signals.test.ts +6 -5
  48. package/src/__tests__/conversation-crud-inference-profile.test.ts +7 -9
  49. package/src/__tests__/conversation-error.test.ts +15 -1
  50. package/src/__tests__/conversation-history-web-search.test.ts +6 -1
  51. package/src/__tests__/conversation-media-retry.test.ts +1 -1
  52. package/src/__tests__/conversation-process-app-control-preactivation.test.ts +44 -4
  53. package/src/__tests__/conversation-process-callsite.test.ts +15 -15
  54. package/src/__tests__/conversation-provider-retry-repair.test.ts +66 -65
  55. package/src/__tests__/conversation-queue.test.ts +10 -10
  56. package/src/__tests__/conversation-runtime-assembly.test.ts +1059 -231
  57. package/src/__tests__/conversation-runtime-workspace.test.ts +115 -20
  58. package/src/__tests__/conversation-slash-queue.test.ts +7 -5
  59. package/src/__tests__/conversation-slash-unknown.test.ts +7 -5
  60. package/src/__tests__/conversation-speed-override.test.ts +11 -10
  61. package/src/__tests__/conversation-starter-routes.test.ts +14 -6
  62. package/src/__tests__/conversation-surfaces-activation-emit.test.ts +395 -0
  63. package/src/__tests__/conversation-surfaces-app-control.test.ts +48 -1
  64. package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +73 -4
  65. package/src/__tests__/conversation-undo.test.ts +2 -2
  66. package/src/__tests__/conversation-workspace-cache-state.test.ts +24 -21
  67. package/src/__tests__/conversation-workspace-injection.test.ts +69 -7
  68. package/src/__tests__/conversation-workspace-tool-tracking.test.ts +15 -12
  69. package/src/__tests__/conversations-import-system-filter.test.ts +101 -0
  70. package/src/__tests__/corrected-target.test.ts +93 -0
  71. package/src/__tests__/credential-security-invariants.test.ts +1 -0
  72. package/src/__tests__/cu-unified-flow.test.ts +36 -0
  73. package/src/__tests__/db-acp-history.test.ts +101 -0
  74. package/src/__tests__/dynamic-page-surface.test.ts +31 -0
  75. package/src/__tests__/empty-response-hook.test.ts +1 -1
  76. package/src/__tests__/file-write-tool.test.ts +63 -0
  77. package/src/__tests__/gateway-only-guard.test.ts +17 -2
  78. package/src/__tests__/guardian-grant-minting.test.ts +1 -1
  79. package/src/__tests__/guardian-routing-invariants.test.ts +93 -4
  80. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +1 -1
  81. package/src/__tests__/heartbeat-disk-pressure.test.ts +1 -0
  82. package/src/__tests__/heartbeat-service.test.ts +1 -0
  83. package/src/__tests__/history-repair-hook.test.ts +5 -1
  84. package/src/__tests__/host-app-control-proxy.test.ts +45 -0
  85. package/src/__tests__/host-app-control-routes.test.ts +1 -1
  86. package/src/__tests__/host-cu-routes-targeted.test.ts +3 -3
  87. package/src/__tests__/inference-profile-reaper.test.ts +62 -0
  88. package/src/__tests__/inference-profile-session-handler.test.ts +86 -0
  89. package/src/__tests__/injector-background-turn.test.ts +13 -23
  90. package/src/__tests__/injector-chain.test.ts +268 -44
  91. package/src/__tests__/injector-disk-pressure.test.ts +210 -52
  92. package/src/__tests__/injector-document-comments.test.ts +97 -114
  93. package/src/__tests__/injector-pkb-v2-silenced.test.ts +2 -2
  94. package/src/__tests__/injector-v3-suppression.test.ts +4 -4
  95. package/src/__tests__/list-messages-client-message-id.test.ts +91 -0
  96. package/src/__tests__/list-messages-hidden-metadata.test.ts +38 -0
  97. package/src/__tests__/llm-resolver.test.ts +73 -0
  98. package/src/__tests__/memory-retrieval-hook.test.ts +156 -38
  99. package/src/__tests__/memory-v2-static-injector.test.ts +86 -8
  100. package/src/__tests__/notification-decision-strategy.test.ts +3 -3
  101. package/src/__tests__/parallel-tool.benchmark.test.ts +35 -8
  102. package/src/__tests__/persist-unsendable-image-downscale.test.ts +145 -0
  103. package/src/__tests__/persist-unsendable-image.test.ts +97 -1
  104. package/src/__tests__/plugin-api-shim.test.ts +6 -9
  105. package/src/__tests__/plugin-bootstrap.test.ts +91 -81
  106. package/src/__tests__/plugin-registry.test.ts +3 -49
  107. package/src/__tests__/plugin-skill-contribution.test.ts +15 -14
  108. package/src/__tests__/plugin-tool-contribution.test.ts +7 -4
  109. package/src/__tests__/plugin-types.test.ts +0 -70
  110. package/src/__tests__/post-turn-tool-result-truncation.test.ts +69 -0
  111. package/src/__tests__/pre-model-call-sanitize.test.ts +109 -0
  112. package/src/__tests__/published-app-updater.test.ts +138 -0
  113. package/src/__tests__/reaction-persistence.test.ts +1 -1
  114. package/src/__tests__/send-endpoint-busy.test.ts +4 -1
  115. package/src/__tests__/skill-feature-flags-integration.test.ts +31 -0
  116. package/src/__tests__/steer-tool-repair.test.ts +1 -1
  117. package/src/__tests__/subagent-call-site-routing.test.ts +1 -1
  118. package/src/__tests__/subagent-detail.test.ts +25 -7
  119. package/src/__tests__/subagent-fork-notifications.test.ts +1 -3
  120. package/src/__tests__/subagent-fork-spawn.test.ts +1 -1
  121. package/src/__tests__/subagent-manager-notify.test.ts +1 -3
  122. package/src/__tests__/subagent-notify-parent.test.ts +1 -3
  123. package/src/__tests__/subagent-spawn-tool-fork.test.ts +1 -1
  124. package/src/__tests__/title-generate-hook.test.ts +5 -1
  125. package/src/__tests__/tool-error-hook.test.ts +1 -1
  126. package/src/__tests__/tool-result-truncate-hook.test.ts +1 -1
  127. package/src/__tests__/user-plugin-loader.test.ts +54 -286
  128. package/src/__tests__/web-fetch.test.ts +45 -0
  129. package/src/acp/__tests__/agent-process.test.ts +161 -0
  130. package/src/acp/__tests__/client-handler.test.ts +40 -0
  131. package/src/acp/__tests__/helpers/acp-config-stub.ts +0 -2
  132. package/src/acp/__tests__/helpers/acp-history-db.ts +82 -0
  133. package/src/acp/__tests__/helpers/exec-file-stub.ts +106 -0
  134. package/src/acp/__tests__/prepare-agent-env.test.ts +97 -0
  135. package/src/acp/__tests__/session-manager-persistence.test.ts +95 -28
  136. package/src/acp/__tests__/session-manager-resume.test.ts +888 -0
  137. package/src/acp/agent-process.ts +61 -1
  138. package/src/acp/auto-install.test.ts +280 -0
  139. package/src/acp/auto-install.ts +232 -0
  140. package/src/acp/client-handler.ts +31 -0
  141. package/src/acp/prepare-agent-env.ts +80 -27
  142. package/src/acp/resolve-agent.test.ts +188 -28
  143. package/src/acp/resolve-agent.ts +119 -42
  144. package/src/acp/resume-hint.ts +23 -0
  145. package/src/acp/session-manager.ts +507 -73
  146. package/src/agent/compaction-circuit.ts +60 -102
  147. package/src/agent/loop.ts +403 -251
  148. package/src/api/responses/conversation-message.ts +22 -2
  149. package/src/api/responses/memory-v3-selection-log.ts +19 -10
  150. package/src/approvals/guardian-request-resolvers.ts +27 -1
  151. package/src/background-wake/next-wake.ts +1 -0
  152. package/src/cli/commands/__tests__/memory-v3.test.ts +191 -210
  153. package/src/cli/commands/channel-verification-sessions.ts +6 -6
  154. package/src/cli/commands/db/__tests__/repair.test.ts +3 -1
  155. package/src/cli/commands/memory-v3.ts +57 -199
  156. package/src/cli/commands/plugins.ts +43 -37
  157. package/src/cli/lib/__tests__/install-from-github.test.ts +790 -111
  158. package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +196 -0
  159. package/src/cli/lib/__tests__/plugin-details.test.ts +381 -0
  160. package/src/cli/lib/__tests__/plugin-marketplace.test.ts +270 -0
  161. package/src/cli/lib/__tests__/search-plugins.test.ts +233 -32
  162. package/src/cli/lib/install-from-github.ts +797 -60
  163. package/src/cli/lib/plugin-catalog-cache.ts +84 -0
  164. package/src/cli/lib/plugin-details.ts +416 -0
  165. package/src/cli/lib/plugin-marketplace.ts +215 -0
  166. package/src/cli/lib/search-plugins.ts +201 -29
  167. package/src/config/__tests__/feature-flag-registry-guard.test.ts +2 -2
  168. package/src/config/acp-defaults.test.ts +10 -0
  169. package/src/config/acp-defaults.ts +9 -3
  170. package/src/config/acp-schema.ts +1 -7
  171. package/src/config/bundled-skills/acp/SKILL.md +80 -41
  172. package/src/config/bundled-skills/acp/TOOLS.json +4 -4
  173. package/src/config/bundled-skills/app-builder/SKILL.md +224 -381
  174. package/src/config/bundled-skills/app-builder/TOOLS.json +72 -2
  175. package/src/config/bundled-skills/app-builder/references/DESIGN_SYSTEM.md +48 -0
  176. package/src/config/bundled-skills/app-builder/references/RESPONSIVE.md +57 -0
  177. package/src/config/bundled-skills/app-builder/references/SLIDES.md +38 -0
  178. package/src/config/bundled-skills/app-builder/tools/app-list.ts +62 -0
  179. package/src/config/bundled-skills/app-builder/tools/app-update.ts +18 -0
  180. package/src/config/bundled-skills/document-editor/SKILL.md +28 -23
  181. package/src/config/bundled-skills/document-editor/TOOLS.json +1 -1
  182. package/src/config/bundled-tool-registry.ts +4 -0
  183. package/src/config/call-site-defaults.ts +0 -3
  184. package/src/config/feature-flag-registry.json +10 -16
  185. package/src/config/llm-resolver.ts +39 -7
  186. package/src/config/schemas/__tests__/memory-v3.test.ts +25 -9
  187. package/src/config/schemas/call-site-catalog.ts +0 -21
  188. package/src/config/schemas/heartbeat.ts +9 -0
  189. package/src/config/schemas/llm.ts +17 -3
  190. package/src/config/schemas/memory-v3.ts +58 -8
  191. package/src/config/seed-inference-profiles.ts +18 -0
  192. package/src/context/compactor.ts +22 -4
  193. package/src/context/post-turn-tool-result-truncation.ts +39 -1
  194. package/src/context/strip-injections.ts +8 -2
  195. package/src/daemon/conversation-agent-loop-handlers.ts +18 -36
  196. package/src/daemon/conversation-agent-loop.ts +308 -1297
  197. package/src/daemon/conversation-error.ts +31 -4
  198. package/src/daemon/conversation-history.ts +1 -1
  199. package/src/daemon/conversation-lifecycle.ts +11 -255
  200. package/src/daemon/conversation-media-retry.ts +19 -6
  201. package/src/daemon/conversation-messaging.ts +17 -0
  202. package/src/daemon/conversation-process.ts +22 -141
  203. package/src/daemon/conversation-queue-manager.ts +8 -0
  204. package/src/daemon/conversation-registry.ts +159 -0
  205. package/src/daemon/conversation-runtime-assembly.ts +361 -393
  206. package/src/daemon/conversation-store.ts +9 -90
  207. package/src/daemon/conversation-surfaces.ts +165 -11
  208. package/src/daemon/conversation-workspace.ts +17 -0
  209. package/src/daemon/conversation.ts +444 -62
  210. package/src/daemon/disk-pressure-policy.ts +0 -1
  211. package/src/daemon/external-plugins-bootstrap.ts +36 -46
  212. package/src/daemon/handlers/config-channels.ts +11 -2
  213. package/src/daemon/handlers/conversations.ts +3 -1
  214. package/src/daemon/handlers/skills.ts +4 -1
  215. package/src/daemon/host-app-control-proxy.ts +72 -57
  216. package/src/daemon/host-proxy-preactivation.ts +1 -3
  217. package/src/daemon/lifecycle.ts +21 -7
  218. package/src/daemon/persist-unsendable-image.ts +62 -25
  219. package/src/daemon/process-message.ts +1 -1
  220. package/src/daemon/server.ts +2 -0
  221. package/src/daemon/tool-side-effects.ts +15 -0
  222. package/src/daemon/wake-conversation-ops.ts +269 -0
  223. package/src/embedded/plugin-api.ts +2 -2
  224. package/src/export/__tests__/transcript-formatter.test.ts +5 -0
  225. package/src/heartbeat/__tests__/heartbeat-service.test.ts +3 -0
  226. package/src/heartbeat/heartbeat-run-store.ts +23 -1
  227. package/src/heartbeat/heartbeat-service.ts +26 -0
  228. package/src/ipc/__tests__/browser-ipc.test.ts +1 -1
  229. package/src/ipc/__tests__/ui-request-route.test.ts +3 -3
  230. package/src/ipc/skill-routes/__tests__/memory.test.ts +15 -0
  231. package/src/ipc/skill-routes/memory.ts +4 -2
  232. package/src/memory/__tests__/activation-session-store.test.ts +41 -0
  233. package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +87 -0
  234. package/src/memory/__tests__/onboarding-events-store.test.ts +80 -0
  235. package/src/memory/activation-session-store.ts +43 -0
  236. package/src/memory/conversation-crud.ts +29 -19
  237. package/src/memory/conversation-starter-checkpoints.ts +1 -0
  238. package/src/memory/db-init.ts +6 -0
  239. package/src/memory/job-handlers/conversation-starters.ts +13 -2
  240. package/src/memory/jobs/__tests__/embed-concept-page.test.ts +5 -4
  241. package/src/memory/jobs-worker.ts +25 -1
  242. package/src/memory/migrations/272-acp-session-history-cwd.ts +36 -0
  243. package/src/memory/migrations/273-onboarding-events-funnel-columns.ts +46 -0
  244. package/src/memory/migrations/274-create-activation-sessions.ts +15 -0
  245. package/src/memory/migrations/index.ts +3 -0
  246. package/src/memory/onboarding-events-store.ts +66 -18
  247. package/src/memory/schema/acp.ts +4 -0
  248. package/src/memory/schema/infrastructure.ts +13 -0
  249. package/src/memory/v2/__tests__/consolidation-job.test.ts +4 -97
  250. package/src/memory/v2/__tests__/page-store.test.ts +22 -0
  251. package/src/memory/v2/consolidation-job.ts +2 -63
  252. package/src/memory/v2/types.ts +5 -0
  253. package/src/messaging/providers/telegram-bot/api.ts +14 -5
  254. package/src/notifications/__tests__/copy-composer.test.ts +244 -0
  255. package/src/notifications/access-request-copy.ts +298 -0
  256. package/src/notifications/adapters/slack.ts +3 -3
  257. package/src/notifications/adapters/telegram.ts +9 -2
  258. package/src/notifications/copy-composer.ts +49 -267
  259. package/src/notifications/decision-engine.ts +16 -35
  260. package/src/notifications/home-feed-side-effect.ts +1 -6
  261. package/src/plugin-api/constants.ts +4 -0
  262. package/src/plugin-api/index.ts +40 -11
  263. package/src/plugin-api/types.ts +108 -0
  264. package/src/plugins/defaults/compaction/compact.ts +106 -0
  265. package/src/{daemon → plugins/defaults/compaction}/context-overflow-reducer.ts +250 -42
  266. package/src/plugins/defaults/compaction/corrected-target.ts +53 -0
  267. package/src/plugins/defaults/compaction/manager-store.ts +57 -0
  268. package/src/plugins/defaults/compaction/package.json +1 -2
  269. package/src/{context → plugins/defaults/compaction}/window-manager.ts +95 -25
  270. package/src/plugins/defaults/empty-response/package.json +0 -1
  271. package/src/plugins/defaults/history-repair/package.json +0 -1
  272. package/src/plugins/defaults/index.ts +156 -26
  273. package/src/plugins/defaults/memory-retrieval/hooks/post-compact.ts +100 -52
  274. package/src/plugins/defaults/memory-retrieval/hooks/user-prompt-submit.ts +285 -0
  275. package/src/plugins/defaults/memory-retrieval/injector-chain.ts +2 -2
  276. package/src/plugins/defaults/{injectors/register.ts → memory-retrieval/injectors.ts} +148 -73
  277. package/src/plugins/defaults/memory-retrieval/package.json +14 -0
  278. package/src/plugins/defaults/memory-retrieval/unified-turn-context.ts +223 -0
  279. package/src/plugins/defaults/memory-v3-shadow/__tests__/capabilities.test.ts +71 -0
  280. package/src/plugins/defaults/memory-v3-shadow/__tests__/dense.test.ts +181 -0
  281. package/src/plugins/defaults/memory-v3-shadow/__tests__/edge.test.ts +247 -0
  282. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/live-integration.test.ts +147 -134
  283. package/src/plugins/defaults/memory-v3-shadow/__tests__/maintain-job.test.ts +456 -0
  284. package/src/plugins/defaults/memory-v3-shadow/__tests__/orchestrate.test.ts +662 -0
  285. package/src/plugins/defaults/memory-v3-shadow/__tests__/pool-select.test.ts +306 -0
  286. package/src/plugins/defaults/memory-v3-shadow/__tests__/render-injection.test.ts +91 -0
  287. package/src/plugins/defaults/memory-v3-shadow/__tests__/section-dense-store.test.ts +402 -0
  288. package/src/plugins/defaults/memory-v3-shadow/__tests__/section-needle.test.ts +135 -0
  289. package/src/plugins/defaults/memory-v3-shadow/__tests__/sections.test.ts +125 -0
  290. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/selection-log-store.test.ts +74 -19
  291. package/src/plugins/defaults/memory-v3-shadow/__tests__/shadow-integration.test.ts +446 -0
  292. package/src/plugins/defaults/memory-v3-shadow/__tests__/shadow-plugin.test.ts +592 -0
  293. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/types.test.ts +2 -24
  294. package/src/plugins/defaults/memory-v3-shadow/capabilities.ts +91 -0
  295. package/src/plugins/defaults/memory-v3-shadow/dense.ts +97 -0
  296. package/src/plugins/defaults/memory-v3-shadow/edge.ts +252 -0
  297. package/src/plugins/defaults/memory-v3-shadow/hooks/post-compact.ts +14 -0
  298. package/src/plugins/defaults/memory-v3-shadow/hooks/user-prompt-submit.ts +19 -0
  299. package/src/plugins/defaults/memory-v3-shadow/injector.ts +76 -0
  300. package/src/plugins/defaults/memory-v3-shadow/maintain-job.ts +555 -0
  301. package/src/plugins/defaults/memory-v3-shadow/orchestrate.ts +266 -0
  302. package/src/plugins/defaults/memory-v3-shadow/package.json +14 -0
  303. package/src/plugins/defaults/memory-v3-shadow/page-content.ts +71 -0
  304. package/src/plugins/defaults/memory-v3-shadow/pool-select.ts +204 -0
  305. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/render-injection.ts +16 -8
  306. package/src/plugins/defaults/memory-v3-shadow/section-dense-store.ts +236 -0
  307. package/src/plugins/defaults/memory-v3-shadow/section-needle.ts +200 -0
  308. package/src/plugins/defaults/memory-v3-shadow/sections.ts +115 -0
  309. package/src/plugins/defaults/memory-v3-shadow/selection-log-store.ts +156 -0
  310. package/src/plugins/defaults/memory-v3-shadow/shadow-plugin.ts +382 -0
  311. package/src/plugins/defaults/memory-v3-shadow/types.ts +92 -0
  312. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/working-set.ts +4 -1
  313. package/src/plugins/defaults/title-generate/package.json +0 -1
  314. package/src/plugins/defaults/tool-error/package.json +0 -1
  315. package/src/plugins/defaults/tool-result-truncate/package.json +0 -1
  316. package/src/plugins/external-api.ts +12 -2
  317. package/src/plugins/pipeline.ts +6 -293
  318. package/src/plugins/registry.ts +9 -37
  319. package/src/plugins/types.ts +76 -381
  320. package/src/plugins/user-loader.ts +30 -127
  321. package/src/prompts/__tests__/system-prompt.test.ts +6 -0
  322. package/src/prompts/system-prompt.ts +61 -10
  323. package/src/prompts/templates/BOOTSTRAP-ACTIVATION-RAIL.md +71 -4
  324. package/src/providers/anthropic/client.ts +9 -10
  325. package/src/providers/inference/kimi-cjk-token-ids.ts +493 -0
  326. package/src/providers/inference/logit-bias.ts +55 -0
  327. package/src/providers/model-catalog.ts +34 -0
  328. package/src/providers/openai/__tests__/vision-not-supported.test.ts +75 -0
  329. package/src/providers/openai/chat-completions-provider.ts +44 -1
  330. package/src/providers/retry.ts +22 -0
  331. package/src/providers/types.ts +6 -0
  332. package/src/runtime/__tests__/agent-wake.test.ts +555 -691
  333. package/src/runtime/__tests__/interactive-ui.test.ts +1 -1
  334. package/src/runtime/agent-wake.ts +108 -209
  335. package/src/runtime/assistant-event-hub.ts +1 -1
  336. package/src/runtime/channel-approvals.ts +1 -1
  337. package/src/runtime/interactive-ui.ts +1 -1
  338. package/src/runtime/routes/__tests__/acp-routes.test.ts +466 -55
  339. package/src/runtime/routes/__tests__/conversation-list-routes.test.ts +1 -1
  340. package/src/runtime/routes/__tests__/plugins-routes.test.ts +423 -73
  341. package/src/runtime/routes/__tests__/stt-routes.test.ts +112 -0
  342. package/src/runtime/routes/__tests__/surface-action-routes.test.ts +5 -4
  343. package/src/runtime/routes/__tests__/surface-content-routes.test.ts +4 -1
  344. package/src/runtime/routes/acp-routes.test.ts +185 -32
  345. package/src/runtime/routes/acp-routes.ts +328 -30
  346. package/src/runtime/routes/app-management-routes.ts +3 -0
  347. package/src/runtime/routes/approval-routes.ts +1 -1
  348. package/src/runtime/routes/browser-routes.ts +1 -1
  349. package/src/runtime/routes/browser-tabs-routes.ts +6 -10
  350. package/src/runtime/routes/channel-verification-routes.ts +14 -5
  351. package/src/runtime/routes/conversation-cli-routes.ts +1 -1
  352. package/src/runtime/routes/conversation-list-routes.ts +1 -1
  353. package/src/runtime/routes/conversation-query-routes.ts +1 -1
  354. package/src/runtime/routes/conversation-routes.ts +30 -2
  355. package/src/runtime/routes/conversation-starter-routes.ts +13 -7
  356. package/src/runtime/routes/conversations-import-routes.ts +24 -7
  357. package/src/runtime/routes/host-app-control-routes.ts +1 -1
  358. package/src/runtime/routes/host-cu-routes.ts +1 -1
  359. package/src/runtime/routes/identity-routes.ts +18 -3
  360. package/src/runtime/routes/inbound-message-handler.ts +1 -1
  361. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +33 -34
  362. package/src/runtime/routes/inference-profile-session-handler.ts +11 -0
  363. package/src/runtime/routes/inference-profile-session-reaper.ts +6 -0
  364. package/src/runtime/routes/memory-v3-routes.ts +65 -305
  365. package/src/runtime/routes/playground/__tests__/force-compact.test.ts +1 -1
  366. package/src/runtime/routes/playground/helpers.ts +1 -1
  367. package/src/runtime/routes/plugins-routes.ts +337 -35
  368. package/src/runtime/routes/stt-routes.ts +45 -12
  369. package/src/runtime/routes/surface-conversation-resolver.ts +4 -3
  370. package/src/runtime/routes/work-items-routes.ts +2 -4
  371. package/src/runtime/routes/workspace-routes.ts +50 -15
  372. package/src/runtime/services/conversation-serializer.ts +1 -1
  373. package/src/runtime/verification-outbound-actions.ts +147 -2
  374. package/src/runtime/verification-templates.ts +29 -3
  375. package/src/services/published-app-updater.ts +30 -8
  376. package/src/signals/cancel.ts +2 -4
  377. package/src/subagent/manager.ts +21 -5
  378. package/src/telemetry/__tests__/activation-funnel.test.ts +95 -0
  379. package/src/telemetry/activation-funnel.ts +167 -0
  380. package/src/telemetry/types.ts +13 -0
  381. package/src/telemetry/usage-telemetry-reporter.test.ts +154 -0
  382. package/src/telemetry/usage-telemetry-reporter.ts +26 -1
  383. package/src/tools/acp/context.ts +20 -0
  384. package/src/tools/acp/list-agents.test.ts +9 -19
  385. package/src/tools/acp/list-agents.ts +3 -15
  386. package/src/tools/acp/spawn.test.ts +173 -202
  387. package/src/tools/acp/spawn.ts +37 -172
  388. package/src/tools/acp/steer.test.ts +105 -8
  389. package/src/tools/acp/steer.ts +48 -17
  390. package/src/tools/apps/executors.ts +166 -50
  391. package/src/tools/browser/browser-execution.ts +12 -2
  392. package/src/tools/filesystem/write.ts +34 -0
  393. package/src/tools/network/web-fetch.ts +65 -24
  394. package/src/tools/skills/load.ts +1 -1
  395. package/src/tools/subagent/spawn.ts +2 -4
  396. package/src/tools/ui-surface/definitions.ts +32 -5
  397. package/src/workspace/migrations/051-seed-conversation-summarization-callsite.ts +4 -5
  398. package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +69 -45
  399. package/docs/plugins.md +0 -832
  400. package/examples/plugins/echo/register.ts +0 -143
  401. package/src/__tests__/circuit-breaker-pipeline.test.ts +0 -405
  402. package/src/__tests__/compaction-pipeline.test.ts +0 -210
  403. package/src/__tests__/compaction-timeout-recovery.test.ts +0 -251
  404. package/src/__tests__/overflow-reduce-pipeline.test.ts +0 -667
  405. package/src/__tests__/pipeline-runner.test.ts +0 -554
  406. package/src/daemon/wake-target-adapter.ts +0 -253
  407. package/src/memory/v3/__tests__/assign.test.ts +0 -242
  408. package/src/memory/v3/__tests__/capabilities.test.ts +0 -118
  409. package/src/memory/v3/__tests__/core.test.ts +0 -39
  410. package/src/memory/v3/__tests__/health.test.ts +0 -219
  411. package/src/memory/v3/__tests__/maintain-job.test.ts +0 -288
  412. package/src/memory/v3/__tests__/needle.test.ts +0 -107
  413. package/src/memory/v3/__tests__/orchestrate.test.ts +0 -436
  414. package/src/memory/v3/__tests__/provider-blocks.test.ts +0 -13
  415. package/src/memory/v3/__tests__/reconcile.test.ts +0 -274
  416. package/src/memory/v3/__tests__/render-injection.test.ts +0 -61
  417. package/src/memory/v3/__tests__/router.test.ts +0 -332
  418. package/src/memory/v3/__tests__/selector.test.ts +0 -470
  419. package/src/memory/v3/__tests__/shadow-plugin.test.ts +0 -432
  420. package/src/memory/v3/__tests__/snapshot.test.ts +0 -168
  421. package/src/memory/v3/__tests__/tree.test.ts +0 -192
  422. package/src/memory/v3/assign.ts +0 -268
  423. package/src/memory/v3/capabilities.ts +0 -124
  424. package/src/memory/v3/core.ts +0 -26
  425. package/src/memory/v3/health.ts +0 -0
  426. package/src/memory/v3/maintain-job.ts +0 -314
  427. package/src/memory/v3/needle.ts +0 -115
  428. package/src/memory/v3/orchestrate.ts +0 -126
  429. package/src/memory/v3/page-content.ts +0 -34
  430. package/src/memory/v3/provider-blocks.ts +0 -26
  431. package/src/memory/v3/reconcile.ts +0 -523
  432. package/src/memory/v3/router.ts +0 -190
  433. package/src/memory/v3/selection-log-store.ts +0 -84
  434. package/src/memory/v3/selector.ts +0 -226
  435. package/src/memory/v3/shadow-plugin.ts +0 -411
  436. package/src/memory/v3/snapshot.ts +0 -209
  437. package/src/memory/v3/tree.ts +0 -174
  438. package/src/memory/v3/types.ts +0 -59
  439. package/src/notifications/__tests__/emit-signal-home-feed.test.ts +0 -187
  440. package/src/plugins/defaults/circuit-breaker/middlewares/circuitBreaker.ts +0 -93
  441. package/src/plugins/defaults/circuit-breaker/package.json +0 -15
  442. package/src/plugins/defaults/circuit-breaker/register.ts +0 -39
  443. package/src/plugins/defaults/compaction/middlewares/compaction.ts +0 -25
  444. package/src/plugins/defaults/compaction/register.ts +0 -35
  445. package/src/plugins/defaults/compaction/terminal.ts +0 -73
  446. package/src/plugins/defaults/empty-response/register.ts +0 -23
  447. package/src/plugins/defaults/history-repair/register.ts +0 -24
  448. package/src/plugins/defaults/memory-retrieval/hooks/user-prompt-submit-temp.ts +0 -216
  449. package/src/plugins/defaults/overflow-reduce/middlewares/overflowReduce.ts +0 -126
  450. package/src/plugins/defaults/overflow-reduce/package.json +0 -15
  451. package/src/plugins/defaults/overflow-reduce/register.ts +0 -42
  452. package/src/plugins/defaults/title-generate/register.ts +0 -35
  453. package/src/plugins/defaults/tool-error/register.ts +0 -23
  454. package/src/plugins/defaults/tool-result-truncate/register.ts +0 -24
  455. package/src/proactive-artifact/aux-message-injector.ts +0 -97
  456. package/src/proactive-artifact/decision.test.ts +0 -226
  457. package/src/proactive-artifact/decision.ts +0 -165
  458. package/src/proactive-artifact/index.ts +0 -7
  459. package/src/proactive-artifact/job.test.ts +0 -962
  460. package/src/proactive-artifact/job.ts +0 -372
  461. package/src/proactive-artifact/message-copy.ts +0 -58
  462. package/src/proactive-artifact/trigger-state.test.ts +0 -286
  463. package/src/proactive-artifact/trigger-state.ts +0 -123
  464. package/src/util/map-limit.ts +0 -27
  465. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/fixtures/eval-turns.json +0 -0
  466. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/fixtures/live-turns.json +0 -0
  467. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/working-set-eviction.test.ts +0 -0
  468. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/working-set-skeleton.test.ts +0 -0
  469. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/README.md +0 -0
  470. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/assignments.json +0 -0
  471. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/core.json +0 -0
  472. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/leaves/domain-a/topic-x.md +0 -0
  473. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/leaves/domain-a/topic-y.md +0 -0
  474. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/leaves/domain-b/topic-z.md +0 -0
  475. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/llm-retry.ts +0 -0
@@ -1,47 +1,38 @@
1
1
  /**
2
2
  * `assistant memory v3` CLI subgroup.
3
3
  *
4
- * Operator-facing tree-gardening + core-editing subcommands for the v3 memory
5
- * subsystem (leaf-tree activation model). The daemon owns the live tree, so the
6
- * mutating verbs route through `cliIpcCall` to handlers that run inside the
7
- * assistant process (where the in-memory lanes can be invalidated after a
8
- * write). The read-only `health` report and the `set-core` cost preview also
9
- * route through the daemon so it stays the single source of truth for the live
10
- * workspace tree.
4
+ * Operator-facing live-lane maintenance subcommands for the v3 memory subsystem
5
+ * (section-lane retrieval model). The daemon owns the live shadow lanes, so the
6
+ * verbs route through `cliIpcCall` to handlers that run inside the assistant
7
+ * process (where the in-memory lanes can be invalidated/rebuilt after a write).
11
8
  *
12
9
  * Subcommands:
13
10
  *
14
- * - `health` — print the structural health report (read-only).
15
- * - `reconcile` — v1 convergence pass: rewrites any dangling page/core ref to
16
- * the current on-disk tree and prunes stale core entries. It does NOT yet
17
- * detect renames/moves/splits — that requires a captured prior leaf
18
- * snapshot (a follow-up), so `renames` is always empty in v1.
19
- * - `set-core` — add/remove always-on core leaves. Validates that every added
20
- * leaf exists, previews the resulting always-on page count, and writes only
21
- * on `--yes`.
22
11
  * - `rebuild-index` — invalidate the v3 lanes so the next turn rebuilds.
23
- *
24
- * Deferred to follow-ups: thin `add-leaf` / `rename-leaf` / `delete-leaf`
25
- * wrappers (edit the leaf file[s] then reconcile).
12
+ * - `backfill-sections` — one-time: embed every page's sections (including
13
+ * synthetic skill/CLI rows) into the dense store, then advance the maintain
14
+ * checkpoint. For the transition before A/B/cutover, since the collection
15
+ * starts empty and the incremental maintain pass only re-embeds deltas.
26
16
  */
27
17
 
28
18
  import type { Command } from "commander";
29
19
 
30
20
  import { cliIpcCall } from "../../ipc/cli-client.js";
31
21
  import type {
32
- MemoryV3HealthResult,
22
+ MemoryV3BackfillSectionsResult,
33
23
  MemoryV3RebuildIndexResult,
34
- MemoryV3ReconcileResult,
35
- MemoryV3SetCoreResult,
36
24
  } from "../../runtime/routes/memory-v3-routes.js";
37
25
  import { registerCommand } from "../lib/register-command.js";
38
26
  import { log } from "../logger.js";
39
27
 
40
- /** Commander collector for a repeatable option: accumulates each value. */
41
- function collect(val: string, acc: string[]): string[] {
42
- acc.push(val);
43
- return acc;
44
- }
28
+ /**
29
+ * IPC timeout for `backfill-sections`. The one-time full-corpus section embed
30
+ * runs every page's chunks through the embedder sequentially, which easily
31
+ * outlasts `cliIpcCall`'s default 60s — so we give it a generous 30-minute
32
+ * ceiling rather than report a spurious "Request timed out" while the assistant
33
+ * keeps working.
34
+ */
35
+ const BACKFILL_IPC_TIMEOUT_MS = 30 * 60 * 1000;
45
36
 
46
37
  export function registerMemoryV3Command(program: Command): void {
47
38
  // Reuse an existing `memory` parent if some other registrar attached to it
@@ -54,97 +45,80 @@ export function registerMemoryV3Command(program: Command): void {
54
45
  registerCommand(memory, {
55
46
  name: "v3",
56
47
  transport: "ipc",
57
- description: "Memory v3 tree-gardening and core-editing (leaf-tree model)",
48
+ description: "Memory v3 live-lane maintenance (section-lane model)",
58
49
  build: (v3) => {
59
50
  v3.addHelpText(
60
51
  "after",
61
52
  `
62
- The v3 memory subsystem organizes concept pages under a curated leaf tree
63
- (/workspace/memory/v3/data/) and pins an always-on "core" set of leaves.
64
- These commands garden that tree safely: each mutating verb snapshots and
65
- fail-closed validates before committing, and invalidates the live lanes so
66
- the next turn rebuilds from the reconciled state.
53
+ The v3 memory subsystem retrieves concept pages over section-grain lanes and
54
+ caches them as live shadow lanes inside the assistant. These commands maintain
55
+ that live state safely.
67
56
 
68
57
  Examples:
69
- $ assistant memory v3 health
70
- $ assistant memory v3 set-core --add domain-a/topic-x
71
- $ assistant memory v3 set-core --remove domain-a/topic-y --yes
72
- $ assistant memory v3 reconcile
73
- $ assistant memory v3 rebuild-index`,
58
+ $ assistant memory v3 rebuild-index
59
+ $ assistant memory v3 backfill-sections`,
74
60
  );
75
61
 
76
- // ── health ────────────────────────────────────────────────────────────
62
+ // ── rebuild-index ─────────────────────────────────────────────────────
77
63
 
78
- v3.command("health")
79
- .description("Print the v3 structural health report (read-only)")
80
- .option("--json", "Emit raw JSON instead of the rendered report")
64
+ v3.command("rebuild-index")
65
+ .description("Invalidate the v3 lanes so the next turn rebuilds")
81
66
  .addHelpText(
82
67
  "after",
83
68
  `
84
- Loads the live leaf tree + core set and reports where the taxonomy has
85
- drifted from the page graph: unassigned slugs, dangling refs, novel
86
- clusters, and over/under-sized leaves. Read-only — no writes. Prints
87
- "all green" when no maintenance is warranted.
69
+ Drops the assistant's cached v3 shadow lanes so the section index is rebuilt
70
+ from the current on-disk state on the next turn. Useful after editing concept
71
+ pages out-of-band.
88
72
 
89
73
  Examples:
90
- $ assistant memory v3 health
91
- $ assistant memory v3 health --json | jq '.counts'`,
74
+ $ assistant memory v3 rebuild-index`,
92
75
  )
93
- .action(async (opts: { json?: boolean }) => {
94
- const result = await cliIpcCall<MemoryV3HealthResult>(
95
- "memory_v3_health",
76
+ .action(async () => {
77
+ const result = await cliIpcCall<MemoryV3RebuildIndexResult>(
78
+ "memory_v3_rebuild_index",
96
79
  { body: {} },
97
80
  );
98
81
  if (!result.ok) {
99
- log.error(result.error ?? "Failed to compute v3 health");
82
+ log.error(result.error ?? "Failed to invalidate the v3 lanes");
100
83
  process.exitCode = 1;
101
84
  return;
102
85
  }
103
- const payload = result.result!;
104
- if (opts.json === true) {
105
- log.info(JSON.stringify(payload, null, 2));
106
- return;
107
- }
108
- log.info(
109
- payload.rendered === ""
110
- ? "memory-v3 health: all green"
111
- : payload.rendered,
112
- );
86
+ log.info("v3 lanes invalidated; next turn will rebuild.");
113
87
  });
114
88
 
115
- // ── reconcile ─────────────────────────────────────────────────────────
89
+ // ── backfill-sections ─────────────────────────────────────────────────
116
90
 
117
- v3.command("reconcile")
91
+ v3.command("backfill-sections")
118
92
  .description(
119
- "v1 convergence/prune pass over page/core refs (no rename detection yet)",
93
+ "One-time: embed every page's sections into the dense store (incl skills/CLI)",
120
94
  )
121
95
  .option("--json", "Emit raw JSON instead of a formatted summary")
122
96
  .addHelpText(
123
97
  "after",
124
98
  `
125
- Runs a convergence pass over the leaf tree: rewrites any page leaves:
126
- frontmatter or core.json entry that dangles to a path the current on-disk
127
- tree no longer has, and prunes stale core entries. Fail-closed: snapshots
128
- before mutating and rolls back if any dangling reference survives
129
- validation. On success the v3 lanes are invalidated.
99
+ Embeds EVERY concept page's sections — including synthetic skill and CLI
100
+ capability rows — into the section dense store in one pass, then advances
101
+ the maintain checkpoint so the next incremental pass only re-embeds future
102
+ edits. Use this once on an existing install before the section-lane A/B and
103
+ cutover: the dense collection starts empty, and the periodic maintenance
104
+ pass only re-embeds pages edited since its last run (and never the synthetic
105
+ rows), so most of the corpus would otherwise never be embedded.
130
106
 
131
- Limitation: v1 cannot detect renames/moves/splits. The reconciler diffs
132
- the current tree against itself (there is no captured "before" snapshot),
133
- so renames always report as empty and a true rename surfaces as a
134
- delete + add. Full rename/move/split detection requires persisting a prior
135
- leaf snapshot and is a planned follow-up.
107
+ Idempotent and safe to re-run. Runs inside the assistant so it uses the live
108
+ configuration and advances the checkpoint the assistant reads.
136
109
 
137
110
  Examples:
138
- $ assistant memory v3 reconcile
139
- $ assistant memory v3 reconcile --json | jq '.prunedCore'`,
111
+ $ assistant memory v3 backfill-sections
112
+ $ assistant memory v3 backfill-sections --json | jq '.sections'`,
140
113
  )
141
114
  .action(async (opts: { json?: boolean }) => {
142
- const result = await cliIpcCall<MemoryV3ReconcileResult>(
143
- "memory_v3_reconcile",
115
+ const result = await cliIpcCall<MemoryV3BackfillSectionsResult>(
116
+ "memory_v3_backfill_sections",
144
117
  { body: {} },
118
+ { timeoutMs: BACKFILL_IPC_TIMEOUT_MS },
145
119
  );
146
120
  if (!result.ok) {
147
- log.error(result.error ?? "Failed to reconcile the v3 tree");
121
+ log.error(result.error ?? "Failed to backfill section embeddings");
148
122
  process.exitCode = 1;
149
123
  return;
150
124
  }
@@ -154,127 +128,11 @@ Examples:
154
128
  return;
155
129
  }
156
130
  log.info(
157
- `Renamed: ${payload.renames.length === 0 ? "none" : payload.renames.length}`,
158
- );
159
- for (const r of payload.renames) {
160
- log.info(` - ${r.oldPath} → ${r.newPath}`);
161
- }
162
- log.info(
163
- `Deleted: ${payload.deleted.length === 0 ? "none" : payload.deleted.join(", ")}`,
131
+ `Embedded ${payload.sections} sections across ${payload.articles} pages` +
132
+ (payload.failures > 0
133
+ ? ` (${payload.failures} page(s) failed — see assistant logs).`
134
+ : "."),
164
135
  );
165
- log.info(
166
- `Pruned core: ${payload.prunedCore.length === 0 ? "none" : payload.prunedCore.join(", ")}`,
167
- );
168
- });
169
-
170
- // ── set-core ──────────────────────────────────────────────────────────
171
-
172
- v3.command("set-core")
173
- .description(
174
- "Add/remove always-on core leaves (previews cost; writes on --yes)",
175
- )
176
- .option(
177
- "--add <leaf>",
178
- "Leaf path to add to the always-on core set (repeatable)",
179
- collect,
180
- [] as string[],
181
- )
182
- .option(
183
- "--remove <leaf>",
184
- "Leaf path to remove from the always-on core set (repeatable)",
185
- collect,
186
- [] as string[],
187
- )
188
- .option("--yes", "Apply the change (otherwise preview only)")
189
- .option("--json", "Emit raw JSON instead of a formatted summary")
190
- .addHelpText(
191
- "after",
192
- `
193
- Edits the always-on core leaf set in core.json. Every --add entry must
194
- exist in the live tree (unknown leaves are rejected). Without --yes this
195
- PREVIEWS the resulting core set and the number of unique page slugs it
196
- would pin always-on, WITHOUT writing. Pass --yes to persist and invalidate
197
- the lanes.
198
-
199
- Examples:
200
- $ assistant memory v3 set-core --add domain-a/topic-x # preview
201
- $ assistant memory v3 set-core --add domain-a/topic-x --yes # apply
202
- $ assistant memory v3 set-core --remove domain-b/topic-z --yes`,
203
- )
204
- .action(
205
- async (opts: {
206
- add: string[];
207
- remove: string[];
208
- yes?: boolean;
209
- json?: boolean;
210
- }) => {
211
- if (opts.add.length === 0 && opts.remove.length === 0) {
212
- log.error("Pass at least one --add or --remove leaf path.");
213
- process.exitCode = 1;
214
- return;
215
- }
216
-
217
- const result = await cliIpcCall<MemoryV3SetCoreResult>(
218
- "memory_v3_set_core",
219
- {
220
- body: {
221
- add: opts.add,
222
- remove: opts.remove,
223
- write: opts.yes === true,
224
- },
225
- },
226
- );
227
- if (!result.ok) {
228
- log.error(result.error ?? "Failed to update the v3 core set");
229
- process.exitCode = 1;
230
- return;
231
- }
232
- const payload = result.result!;
233
- if (opts.json === true) {
234
- log.info(JSON.stringify(payload, null, 2));
235
- return;
236
- }
237
- log.info(
238
- `Core leaves (${payload.nextCore.length}): ${
239
- payload.nextCore.length === 0
240
- ? "none"
241
- : payload.nextCore.join(", ")
242
- }`,
243
- );
244
- log.info(`Always-on page count: ${payload.alwaysOnPageCount}`);
245
- if (payload.written) {
246
- log.info("Written to core.json; lanes invalidated.");
247
- } else {
248
- log.info("Preview only — re-run with --yes to apply.");
249
- }
250
- },
251
- );
252
-
253
- // ── rebuild-index ─────────────────────────────────────────────────────
254
-
255
- v3.command("rebuild-index")
256
- .description("Invalidate the v3 lanes so the next turn rebuilds")
257
- .addHelpText(
258
- "after",
259
- `
260
- Drops the daemon's cached v3 shadow lanes so the tree + needle are rebuilt
261
- from the current on-disk state on the next turn. Useful after editing leaf
262
- files or assignments out-of-band.
263
-
264
- Examples:
265
- $ assistant memory v3 rebuild-index`,
266
- )
267
- .action(async () => {
268
- const result = await cliIpcCall<MemoryV3RebuildIndexResult>(
269
- "memory_v3_rebuild_index",
270
- { body: {} },
271
- );
272
- if (!result.ok) {
273
- log.error(result.error ?? "Failed to invalidate the v3 lanes");
274
- process.exitCode = 1;
275
- return;
276
- }
277
- log.info("v3 lanes invalidated; next turn will rebuild.");
278
136
  });
279
137
  },
280
138
  });
@@ -62,45 +62,51 @@ Examples:
62
62
  "--ref <ref>",
63
63
  `Git ref to fetch from (default: ${DEFAULT_PLUGIN_REF})`,
64
64
  )
65
- .action(async (name: string, opts: { force?: boolean; ref?: string }) => {
66
- try {
67
- const result = await installPlugin(
68
- {
69
- name,
70
- force: opts.force ?? false,
71
- ref: opts.ref ?? DEFAULT_PLUGIN_REF,
72
- },
73
- { fetch: globalThis.fetch.bind(globalThis) },
74
- );
75
- log.info(
76
- {
77
- name: result.name,
78
- target: result.target,
79
- fileCount: result.fileCount,
80
- ref: result.ref,
81
- },
82
- "external plugin installed",
83
- );
84
- console.log(
85
- `Installed plugin "${result.name}" (${result.fileCount} file${result.fileCount === 1 ? "" : "s"}) → ${result.target}`,
86
- );
87
- console.log("Restart the assistant to pick up the new plugin.");
88
- } catch (err) {
89
- if (err instanceof PluginAlreadyInstalledError) {
90
- console.error(`${err.message}\nPass --force to overwrite.`);
91
- process.exitCode = 1;
92
- return;
93
- }
94
- if (err instanceof PluginNotFoundError) {
95
- console.error(err.message);
65
+ .action(
66
+ async (name: string, opts: { force?: boolean; ref?: string }) => {
67
+ try {
68
+ const result = await installPlugin(
69
+ {
70
+ name,
71
+ force: opts.force ?? false,
72
+ ref: opts.ref ?? DEFAULT_PLUGIN_REF,
73
+ },
74
+ { fetch: globalThis.fetch.bind(globalThis) },
75
+ );
76
+ log.info(
77
+ {
78
+ name: result.name,
79
+ target: result.target,
80
+ fileCount: result.fileCount,
81
+ ref: result.ref,
82
+ commit: result.commit,
83
+ },
84
+ "external plugin installed",
85
+ );
86
+ const pinned = result.commit
87
+ ? ` at ${result.commit.slice(0, 7)}`
88
+ : "";
89
+ console.log(
90
+ `Installed plugin "${result.name}" (${result.fileCount} file${result.fileCount === 1 ? "" : "s"})${pinned} → ${result.target}`,
91
+ );
92
+ console.log("Restart the assistant to pick up the new plugin.");
93
+ } catch (err) {
94
+ if (err instanceof PluginAlreadyInstalledError) {
95
+ console.error(`${err.message}\nPass --force to overwrite.`);
96
+ process.exitCode = 1;
97
+ return;
98
+ }
99
+ if (err instanceof PluginNotFoundError) {
100
+ console.error(err.message);
101
+ process.exitCode = 1;
102
+ return;
103
+ }
104
+ const message = err instanceof Error ? err.message : String(err);
105
+ console.error(`Plugin install failed: ${message}`);
96
106
  process.exitCode = 1;
97
- return;
98
107
  }
99
- const message = err instanceof Error ? err.message : String(err);
100
- console.error(`Plugin install failed: ${message}`);
101
- process.exitCode = 1;
102
- }
103
- });
108
+ },
109
+ );
104
110
 
105
111
  plugins
106
112
  .command("list")