@vellumai/assistant 0.8.10 → 0.8.11-dev.202606112057.e4bc22e

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 (417) hide show
  1. package/bun.lock +63 -118
  2. package/docs/workspace-tools.md +196 -0
  3. package/examples/plugins/echo/README.md +3 -3
  4. package/knip.json +1 -0
  5. package/openapi.yaml +578 -128
  6. package/package.json +2 -3
  7. package/scripts/build-plugin-api.ts +299 -0
  8. package/src/__tests__/agent-loop-callsite-precedence.test.ts +7 -0
  9. package/src/__tests__/agent-loop-compaction-events.test.ts +197 -0
  10. package/src/__tests__/agent-loop-exit-reason.test.ts +93 -96
  11. package/src/__tests__/agent-loop-mutable-latest-user-message.test.ts +2 -0
  12. package/src/__tests__/agent-loop-output-hooks.test.ts +274 -1
  13. package/src/__tests__/agent-loop-override-profile.test.ts +3 -0
  14. package/src/__tests__/agent-loop-provider-error-recording.test.ts +4 -0
  15. package/src/__tests__/agent-loop-thinking.test.ts +4 -0
  16. package/src/__tests__/agent-loop.test.ts +578 -5
  17. package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +0 -1
  18. package/src/__tests__/approval-cascade.test.ts +1 -0
  19. package/src/__tests__/background-workers-disk-pressure.test.ts +0 -2
  20. package/src/__tests__/btw-routes.test.ts +7 -35
  21. package/src/__tests__/build-persisted-content.test.ts +75 -1
  22. package/src/__tests__/catalog-install-normalize.test.ts +141 -0
  23. package/src/__tests__/ces-startup-timeout.test.ts +60 -0
  24. package/src/__tests__/compaction-events.test.ts +1 -0
  25. package/src/__tests__/config-managed-gemini-defaults.test.ts +2 -46
  26. package/src/__tests__/context-overflow-reducer.test.ts +264 -124
  27. package/src/__tests__/context-window-manager-overflow-rung.test.ts +351 -0
  28. package/src/__tests__/conversation-abort-tool-results.test.ts +1 -1
  29. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +13 -5
  30. package/src/__tests__/conversation-agent-loop-overflow.test.ts +284 -455
  31. package/src/__tests__/conversation-agent-loop.test.ts +131 -551
  32. package/src/__tests__/conversation-app-control-instantiation.test.ts +13 -0
  33. package/src/__tests__/conversation-confirmation-signals.test.ts +1 -0
  34. package/src/__tests__/conversation-error.test.ts +2 -6
  35. package/src/__tests__/conversation-fork-crud.test.ts +259 -0
  36. package/src/__tests__/conversation-history-web-search.test.ts +1 -1
  37. package/src/__tests__/conversation-lifecycle.test.ts +257 -1
  38. package/src/__tests__/conversation-process-callsite.test.ts +1 -0
  39. package/src/__tests__/conversation-provider-retry-repair.test.ts +38 -377
  40. package/src/__tests__/conversation-queue.test.ts +1 -39
  41. package/src/__tests__/conversation-runtime-assembly.test.ts +119 -8
  42. package/src/__tests__/conversation-skill-tools.test.ts +491 -5
  43. package/src/__tests__/conversation-slash-queue.test.ts +1 -1
  44. package/src/__tests__/conversation-slash-unknown.test.ts +1 -0
  45. package/src/__tests__/conversation-speed-override.test.ts +1 -0
  46. package/src/__tests__/conversation-store.test.ts +74 -0
  47. package/src/__tests__/conversation-surfaces-app-control.test.ts +4 -1
  48. package/src/__tests__/conversation-tool-setup-attribution.test.ts +323 -0
  49. package/src/__tests__/conversation-tool-setup-tools-disabled.test.ts +34 -0
  50. package/src/__tests__/conversation-workspace-cache-state.test.ts +1 -0
  51. package/src/__tests__/conversation-workspace-injection.test.ts +1 -1
  52. package/src/__tests__/conversation-workspace-tool-tracking.test.ts +1 -0
  53. package/src/__tests__/corrected-target.test.ts +93 -0
  54. package/src/__tests__/credential-execution-feature-gates.test.ts +3 -5
  55. package/src/__tests__/credential-execution-tools.test.ts +23 -11
  56. package/src/__tests__/credential-security-invariants.test.ts +6 -1
  57. package/src/__tests__/db-schedule-syntax-migration.test.ts +80 -0
  58. package/src/__tests__/device-id.test.ts +70 -1
  59. package/src/__tests__/embedding-managed-proxy-selection.test.ts +6 -40
  60. package/src/__tests__/empty-response-hook.test.ts +242 -66
  61. package/src/__tests__/external-plugin-loader.test.ts +0 -31
  62. package/src/__tests__/get-skill-detail-audit.test.ts +43 -1
  63. package/src/__tests__/guardian-routing-invariants.test.ts +91 -0
  64. package/src/__tests__/history-repair-hook.test.ts +228 -3
  65. package/src/__tests__/host-app-control-proxy.test.ts +45 -0
  66. package/src/__tests__/host-browser-proxy.test.ts +254 -9
  67. package/src/__tests__/identity-intro-cache.test.ts +12 -5
  68. package/src/__tests__/identity-routes.test.ts +17 -57
  69. package/src/__tests__/image-recovery-hook.test.ts +387 -0
  70. package/src/__tests__/injector-chain.test.ts +5 -4
  71. package/src/__tests__/injector-v3-suppression.test.ts +373 -47
  72. package/src/__tests__/intent-routing.test.ts +7 -0
  73. package/src/__tests__/memory-retrieval-hook.test.ts +117 -15
  74. package/src/__tests__/model-intents.test.ts +1 -1
  75. package/src/__tests__/notification-decision-strategy.test.ts +3 -3
  76. package/src/__tests__/oauth-store.test.ts +0 -85
  77. package/src/__tests__/{context-overflow-policy.test.ts → overflow-policy.test.ts} +1 -1
  78. package/src/__tests__/parallel-tool.benchmark.test.ts +4 -0
  79. package/src/__tests__/persist-unsendable-image-downscale.test.ts +29 -9
  80. package/src/__tests__/persist-unsendable-image.test.ts +4 -4
  81. package/src/__tests__/persistence-secret-redaction.test.ts +78 -0
  82. package/src/__tests__/plugin-bootstrap.test.ts +82 -73
  83. package/src/__tests__/plugin-tool-contribution.test.ts +7 -4
  84. package/src/__tests__/plugin-types.test.ts +0 -8
  85. package/src/__tests__/provider-catalog-visibility.test.ts +1 -9
  86. package/src/__tests__/prune-old-conversations-job.test.ts +99 -0
  87. package/src/__tests__/registry.test.ts +240 -1
  88. package/src/__tests__/require-fresh-approval.test.ts +3 -0
  89. package/src/__tests__/schedule-routes.test.ts +116 -1
  90. package/src/__tests__/schedule-store.test.ts +28 -0
  91. package/src/__tests__/schedule-tools.test.ts +94 -1
  92. package/src/__tests__/server-history-render.test.ts +39 -0
  93. package/src/__tests__/skill-projection-feature-flag.test.ts +13 -0
  94. package/src/__tests__/skill-projection.benchmark.test.ts +25 -7
  95. package/src/__tests__/skills.test.ts +202 -0
  96. package/src/__tests__/slim-skill-category.test.ts +195 -0
  97. package/src/__tests__/strip-memory-injections.test.ts +33 -39
  98. package/src/__tests__/test-support/tool-invocation-seed.ts +79 -0
  99. package/src/__tests__/title-generate-hook.test.ts +9 -7
  100. package/src/__tests__/tool-audit-listener.test.ts +264 -1
  101. package/src/__tests__/tool-error-hook.test.ts +4 -3
  102. package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +1 -0
  103. package/src/__tests__/tool-executor-lifecycle-events.test.ts +273 -0
  104. package/src/__tests__/tool-result-truncate-hook.test.ts +1 -0
  105. package/src/__tests__/tool-start-timestamp.test.ts +218 -0
  106. package/src/__tests__/tools-get-route.test.ts +202 -0
  107. package/src/__tests__/workspace-tool-loader.test.ts +319 -0
  108. package/src/__tests__/workspace-tools-watcher-flag.test.ts +70 -0
  109. package/src/agent/loop.ts +569 -319
  110. package/src/api/events/tool-result.ts +9 -0
  111. package/src/api/events/tool-use-start.ts +7 -0
  112. package/src/api/events/usage-progress.ts +28 -0
  113. package/src/api/index.ts +16 -0
  114. package/src/api/responses/conversation-message.ts +135 -27
  115. package/src/api/responses/memory-v3-selection-log.ts +4 -4
  116. package/src/approvals/guardian-request-resolvers.ts +26 -0
  117. package/src/browser-session/backends/host-bridge.ts +29 -0
  118. package/src/browser-session/index.ts +1 -0
  119. package/src/browser-session/types.ts +5 -1
  120. package/src/bundler/app-bundler.ts +25 -42
  121. package/src/cli/commands/__tests__/schedules.test.ts +62 -4
  122. package/src/cli/commands/__tests__/skills.test.ts +53 -0
  123. package/src/cli/commands/channel-verification-sessions.ts +6 -6
  124. package/src/cli/commands/inference-providers.ts +0 -8
  125. package/src/cli/commands/plugins.ts +2 -2
  126. package/src/cli/commands/schedules.ts +27 -4
  127. package/src/cli/commands/skills.ts +187 -146
  128. package/src/cli/commands/tools.ts +106 -0
  129. package/src/cli/lib/__tests__/install-from-github.test.ts +256 -328
  130. package/src/cli/lib/__tests__/plugin-artifact.test.ts +116 -0
  131. package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +6 -2
  132. package/src/cli/lib/__tests__/plugin-details.test.ts +166 -16
  133. package/src/cli/lib/__tests__/plugin-marketplace.test.ts +2 -2
  134. package/src/cli/lib/__tests__/search-plugins.test.ts +145 -240
  135. package/src/cli/lib/install-from-github.ts +187 -117
  136. package/src/cli/lib/plugin-artifact.ts +84 -0
  137. package/src/cli/lib/plugin-catalog-cache.ts +9 -9
  138. package/src/cli/lib/plugin-details.ts +56 -69
  139. package/src/cli/lib/plugin-marketplace.ts +42 -14
  140. package/src/cli/lib/search-plugins.ts +29 -129
  141. package/src/cli/program.ts +2 -0
  142. package/src/config/bundled-skills/acp/SKILL.md +1 -0
  143. package/src/config/bundled-skills/app-builder/SKILL.md +1 -0
  144. package/src/config/bundled-skills/app-control/SKILL.md +1 -0
  145. package/src/config/bundled-skills/computer-use/SKILL.md +1 -0
  146. package/src/config/bundled-skills/contacts/SKILL.md +1 -0
  147. package/src/config/bundled-skills/document-editor/SKILL.md +1 -0
  148. package/src/config/bundled-skills/followups/SKILL.md +1 -0
  149. package/src/config/bundled-skills/image-studio/SKILL.md +1 -0
  150. package/src/config/bundled-skills/media-processing/SKILL.md +1 -0
  151. package/src/config/bundled-skills/messaging/SKILL.md +1 -0
  152. package/src/config/bundled-skills/phone-calls/SKILL.md +1 -0
  153. package/src/config/bundled-skills/playbooks/SKILL.md +1 -0
  154. package/src/config/bundled-skills/schedule/SKILL.md +1 -0
  155. package/src/config/bundled-skills/schedule/TOOLS.json +11 -3
  156. package/src/config/bundled-skills/sequences/SKILL.md +1 -0
  157. package/src/config/bundled-skills/settings/SKILL.md +1 -0
  158. package/src/config/bundled-skills/skill-management/SKILL.md +101 -1
  159. package/src/config/bundled-skills/subagent/SKILL.md +1 -0
  160. package/src/config/bundled-skills/transcribe/SKILL.md +1 -0
  161. package/src/config/env-registry.ts +23 -0
  162. package/src/config/feature-flag-registry.json +17 -89
  163. package/src/config/loader.ts +5 -22
  164. package/src/config/schema.ts +2 -0
  165. package/src/config/schemas/__tests__/compaction-logs.test.ts +56 -0
  166. package/src/config/schemas/__tests__/memory-v2.test.ts +0 -1
  167. package/src/config/schemas/__tests__/memory-v3.test.ts +61 -1
  168. package/src/config/schemas/compaction-logs.ts +79 -0
  169. package/src/config/schemas/memory-v2.ts +0 -8
  170. package/src/config/schemas/memory-v3.ts +104 -33
  171. package/src/config/seed-inference-profiles.ts +1 -1
  172. package/src/config/skills.ts +117 -47
  173. package/src/context/compactor.ts +11 -0
  174. package/src/context/strip-injections.ts +38 -4
  175. package/src/credential-execution/feature-gates.ts +0 -21
  176. package/src/credential-execution/startup-timeout.ts +32 -4
  177. package/src/daemon/__tests__/conversation-tool-setup-exclude.test.ts +18 -0
  178. package/src/daemon/conversation-agent-loop-handlers.ts +140 -91
  179. package/src/daemon/conversation-agent-loop.ts +123 -658
  180. package/src/daemon/conversation-error.ts +12 -48
  181. package/src/daemon/conversation-lifecycle.ts +1 -1
  182. package/src/daemon/conversation-runtime-assembly.ts +183 -22
  183. package/src/daemon/conversation-skill-tools.ts +137 -8
  184. package/src/daemon/conversation-slash.ts +0 -14
  185. package/src/daemon/conversation-store.ts +2 -19
  186. package/src/daemon/conversation-tool-setup.ts +87 -1
  187. package/src/daemon/conversation.ts +119 -50
  188. package/src/daemon/external-plugins-bootstrap.ts +36 -95
  189. package/src/daemon/handlers/config-channels.ts +11 -2
  190. package/src/daemon/handlers/shared.ts +9 -1
  191. package/src/daemon/handlers/skills.ts +10 -4
  192. package/src/daemon/host-app-control-proxy.ts +72 -57
  193. package/src/daemon/host-browser-proxy.ts +117 -22
  194. package/src/daemon/lifecycle.ts +34 -5
  195. package/src/daemon/message-protocol.ts +0 -7
  196. package/src/daemon/message-types/conversations.ts +2 -15
  197. package/src/daemon/message-types/schedules.ts +1 -0
  198. package/src/daemon/message-types/skills.ts +17 -0
  199. package/src/daemon/providers-setup.ts +3 -0
  200. package/src/daemon/server.ts +3 -3
  201. package/src/daemon/tool-setup-types.ts +9 -3
  202. package/src/daemon/trust-context.ts +23 -0
  203. package/src/daemon/workspace-tools-watcher.ts +324 -0
  204. package/src/events/tool-audit-listener.ts +78 -16
  205. package/src/events/tool-metrics-listener.ts +2 -5
  206. package/src/media/image-credentials.ts +2 -2
  207. package/src/memory/__tests__/compaction-log-writer-clickhouse.test.ts +227 -0
  208. package/src/memory/__tests__/conversation-queries.test.ts +176 -0
  209. package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +20 -32
  210. package/src/memory/compaction-log-writer-clickhouse.ts +418 -0
  211. package/src/memory/conversation-attention-store.ts +1 -0
  212. package/src/memory/conversation-crud.ts +134 -3
  213. package/src/memory/conversation-queries.ts +64 -7
  214. package/src/memory/db-init.ts +14 -0
  215. package/src/memory/delivery-channels.ts +0 -69
  216. package/src/memory/embedding-backend.test.ts +130 -1
  217. package/src/memory/embedding-backend.ts +79 -106
  218. package/src/memory/embedding-gemini.ts +5 -0
  219. package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +12 -0
  220. package/src/memory/graph/__tests__/handle-remember-v2.test.ts +19 -0
  221. package/src/memory/graph/conversation-graph-memory.ts +36 -25
  222. package/src/memory/graph/tool-handlers.ts +3 -0
  223. package/src/memory/job-handlers/cleanup.ts +3 -1
  224. package/src/memory/jobs-store.ts +0 -28
  225. package/src/memory/jobs-worker.ts +10 -22
  226. package/src/memory/memory-marker.ts +29 -0
  227. package/src/memory/memory-retrospective-startup-cleanup.ts +1 -1
  228. package/src/memory/migrations/268-add-memory-v3-selections.ts +6 -0
  229. package/src/memory/migrations/270-schedule-description.ts +36 -0
  230. package/src/memory/migrations/275-tool-invocations-add-skill-id.test.ts +81 -0
  231. package/src/memory/migrations/275-tool-invocations-add-skill-id.ts +20 -0
  232. package/src/memory/migrations/276-tool-invocations-created-at-id-index.test.ts +68 -0
  233. package/src/memory/migrations/276-tool-invocations-created-at-id-index.ts +20 -0
  234. package/src/memory/migrations/277-add-memory-v3-ever-injected.ts +29 -0
  235. package/src/memory/migrations/278-tool-invocations-telemetry-columns.test.ts +96 -0
  236. package/src/memory/migrations/278-tool-invocations-telemetry-columns.ts +39 -0
  237. package/src/memory/migrations/279-create-skill-loaded-events.test.ts +84 -0
  238. package/src/memory/migrations/279-create-skill-loaded-events.ts +26 -0
  239. package/src/memory/migrations/280-conversations-surfaced-at.test.ts +88 -0
  240. package/src/memory/migrations/280-conversations-surfaced-at.ts +24 -0
  241. package/src/memory/migrations/index.ts +10 -0
  242. package/src/memory/migrations/registry.ts +8 -0
  243. package/src/memory/schema/conversations.ts +16 -0
  244. package/src/memory/schema/infrastructure.ts +26 -0
  245. package/src/memory/skill-loaded-events-store.test.ts +160 -0
  246. package/src/memory/skill-loaded-events-store.ts +95 -0
  247. package/src/memory/tool-executed-events-store.test.ts +219 -0
  248. package/src/memory/tool-executed-events-store.ts +102 -0
  249. package/src/memory/tool-usage-store.ts +15 -3
  250. package/src/memory/v2/__tests__/consolidation-job.test.ts +117 -12
  251. package/src/memory/v2/__tests__/consolidation-prompt-flag-gating-guard.test.ts +189 -0
  252. package/src/memory/v2/__tests__/injected-block-slugs.test.ts +90 -0
  253. package/src/memory/v2/__tests__/page-store.test.ts +33 -0
  254. package/src/memory/v2/__tests__/prompts-consolidation.test.ts +88 -15
  255. package/src/memory/v2/activation-store.ts +50 -1
  256. package/src/memory/v2/consolidation-job.ts +113 -29
  257. package/src/memory/v2/injected-block-slugs.ts +79 -0
  258. package/src/memory/v2/injection.ts +6 -1
  259. package/src/memory/v2/prompts/consolidation.ts +414 -13
  260. package/src/memory/v2/router.ts +2 -28
  261. package/src/memory/v2/static-context.ts +1 -1
  262. package/src/memory/v2/types.ts +16 -0
  263. package/src/notifications/__tests__/copy-composer.test.ts +244 -0
  264. package/src/notifications/access-request-copy.ts +298 -0
  265. package/src/notifications/adapters/slack.ts +3 -3
  266. package/src/notifications/adapters/telegram.ts +2 -1
  267. package/src/notifications/copy-composer.ts +49 -267
  268. package/src/notifications/decision-engine.ts +16 -35
  269. package/src/notifications/home-feed-side-effect.ts +1 -6
  270. package/src/oauth/oauth-store.ts +0 -9
  271. package/src/permissions/checker.test.ts +83 -1
  272. package/src/permissions/checker.ts +25 -2
  273. package/src/permissions/gateway-threshold-reader.test.ts +182 -0
  274. package/src/permissions/gateway-threshold-reader.ts +80 -0
  275. package/src/platform/client.ts +1 -3
  276. package/src/platform/feature-gate.ts +3 -12
  277. package/src/plugin-api/constants.ts +4 -2
  278. package/src/plugin-api/index.ts +63 -11
  279. package/src/plugin-api/types.ts +236 -71
  280. package/src/plugins/defaults/compaction/compact.ts +66 -2
  281. package/src/plugins/defaults/compaction/context-overflow-reducer.ts +240 -32
  282. package/src/plugins/defaults/compaction/corrected-target.ts +53 -0
  283. package/src/{daemon/context-overflow-policy.ts → plugins/defaults/compaction/overflow-policy.ts} +1 -1
  284. package/src/plugins/defaults/compaction/window-manager.ts +303 -1
  285. package/src/plugins/defaults/empty-response/hooks/post-model-call.ts +173 -0
  286. package/src/plugins/defaults/empty-response/hooks/stop.ts +11 -115
  287. package/src/plugins/defaults/empty-response/nudge-state-store.ts +46 -0
  288. package/src/plugins/defaults/history-repair/hooks/post-model-call.ts +50 -0
  289. package/src/plugins/defaults/history-repair/hooks/stop.ts +22 -0
  290. package/src/plugins/defaults/history-repair/repair-state-store.ts +51 -0
  291. package/src/plugins/defaults/history-repair/terminal.ts +39 -2
  292. package/src/plugins/defaults/image-recovery/detect.ts +25 -0
  293. package/src/plugins/defaults/image-recovery/hooks/post-model-call.ts +73 -0
  294. package/src/plugins/defaults/image-recovery/hooks/stop.ts +22 -0
  295. package/src/plugins/defaults/image-recovery/image-recovery-state-store.ts +48 -0
  296. package/src/plugins/defaults/image-recovery/package.json +14 -0
  297. package/src/{daemon/persist-unsendable-image.ts → plugins/defaults/image-recovery/recover.ts} +67 -14
  298. package/src/plugins/defaults/index.ts +71 -5
  299. package/src/plugins/defaults/memory-retrieval/hooks/post-compact.ts +76 -112
  300. package/src/plugins/defaults/memory-retrieval/hooks/{user-prompt-submit-temp.ts → user-prompt-submit.ts} +83 -74
  301. package/src/plugins/defaults/memory-retrieval/injector-chain.ts +14 -8
  302. package/src/plugins/defaults/memory-retrieval/injectors.ts +2 -18
  303. package/src/plugins/defaults/memory-retrieval/package.json +14 -0
  304. package/src/plugins/defaults/memory-v3-shadow/__tests__/carry-integration.test.ts +1157 -0
  305. package/src/plugins/defaults/memory-v3-shadow/__tests__/injection.test.ts +683 -0
  306. package/src/plugins/defaults/memory-v3-shadow/__tests__/live-integration.test.ts +161 -140
  307. package/src/plugins/defaults/memory-v3-shadow/__tests__/maintain-job.test.ts +160 -0
  308. package/src/plugins/defaults/memory-v3-shadow/__tests__/orchestrate.test.ts +335 -316
  309. package/src/plugins/defaults/memory-v3-shadow/__tests__/pool-select.test.ts +145 -53
  310. package/src/plugins/defaults/memory-v3-shadow/__tests__/render-injection.test.ts +38 -1
  311. package/src/plugins/defaults/memory-v3-shadow/__tests__/selection-log-store.test.ts +18 -8
  312. package/src/plugins/defaults/memory-v3-shadow/__tests__/shadow-integration.test.ts +112 -71
  313. package/src/plugins/defaults/memory-v3-shadow/__tests__/shadow-plugin.test.ts +192 -51
  314. package/src/plugins/defaults/memory-v3-shadow/__tests__/types.test.ts +4 -16
  315. package/src/plugins/defaults/memory-v3-shadow/card.test.ts +173 -0
  316. package/src/plugins/defaults/memory-v3-shadow/card.ts +116 -0
  317. package/src/plugins/defaults/memory-v3-shadow/core-set.test.ts +104 -0
  318. package/src/plugins/defaults/memory-v3-shadow/core-set.ts +59 -0
  319. package/src/plugins/defaults/memory-v3-shadow/ever-injected-store.test.ts +305 -0
  320. package/src/plugins/defaults/memory-v3-shadow/ever-injected-store.ts +278 -0
  321. package/src/plugins/defaults/memory-v3-shadow/hot-set.test.ts +138 -0
  322. package/src/plugins/defaults/memory-v3-shadow/hot-set.ts +85 -0
  323. package/src/plugins/defaults/memory-v3-shadow/injector.ts +331 -24
  324. package/src/plugins/defaults/memory-v3-shadow/maintain-job.ts +119 -13
  325. package/src/plugins/defaults/memory-v3-shadow/orchestrate.ts +169 -114
  326. package/src/plugins/defaults/memory-v3-shadow/page-content.ts +47 -16
  327. package/src/plugins/defaults/memory-v3-shadow/pool-select.ts +144 -66
  328. package/src/plugins/defaults/memory-v3-shadow/prune.test.ts +758 -0
  329. package/src/plugins/defaults/memory-v3-shadow/prune.ts +471 -0
  330. package/src/plugins/defaults/memory-v3-shadow/render-injection.ts +68 -16
  331. package/src/plugins/defaults/memory-v3-shadow/selection-log-store.ts +19 -12
  332. package/src/plugins/defaults/memory-v3-shadow/shadow-plugin.ts +96 -43
  333. package/src/plugins/defaults/memory-v3-shadow/types.ts +34 -17
  334. package/src/plugins/defaults/title-generate/hooks/stop.ts +9 -11
  335. package/src/plugins/pipeline.ts +8 -5
  336. package/src/plugins/types.ts +5 -51
  337. package/src/providers/cache-control.ts +26 -0
  338. package/src/providers/inference/__tests__/base-url-route-validation.test.ts +1 -2
  339. package/src/providers/model-catalog.ts +13 -1
  340. package/src/providers/model-intents.ts +2 -2
  341. package/src/providers/openai/__tests__/tool-choice-mapping.test.ts +147 -0
  342. package/src/providers/openai/chat-completions-provider.ts +46 -0
  343. package/src/providers/openai/responses-provider.ts +45 -0
  344. package/src/providers/registry.ts +0 -8
  345. package/src/runtime/AGENTS.md +2 -0
  346. package/src/runtime/__tests__/agent-wake.test.ts +0 -1
  347. package/src/runtime/agent-wake.ts +13 -0
  348. package/src/runtime/routes/__tests__/acp-routes.test.ts +151 -0
  349. package/src/runtime/routes/__tests__/consolidation-routes.test.ts +12 -50
  350. package/src/runtime/routes/__tests__/conversation-surface-routes.test.ts +322 -0
  351. package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +0 -62
  352. package/src/runtime/routes/__tests__/plugins-routes.test.ts +32 -11
  353. package/src/runtime/routes/acp-routes.test.ts +106 -0
  354. package/src/runtime/routes/acp-routes.ts +248 -2
  355. package/src/runtime/routes/browser-tabs-routes.ts +1 -1
  356. package/src/runtime/routes/btw-routes.ts +0 -14
  357. package/src/runtime/routes/channel-verification-routes.ts +14 -5
  358. package/src/runtime/routes/chatgpt-subscription-auth-routes.ts +0 -14
  359. package/src/runtime/routes/consolidation-routes.ts +6 -82
  360. package/src/runtime/routes/conversation-list-routes.ts +83 -5
  361. package/src/runtime/routes/conversation-management-routes.ts +125 -0
  362. package/src/runtime/routes/identity-intro-cache.ts +1 -1
  363. package/src/runtime/routes/identity-routes.ts +84 -20
  364. package/src/runtime/routes/inbound-message-handler.ts +0 -36
  365. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +33 -34
  366. package/src/runtime/routes/inference-provider-connection-routes.ts +0 -45
  367. package/src/runtime/routes/plugins-routes.ts +49 -45
  368. package/src/runtime/routes/schedule-routes.ts +43 -5
  369. package/src/runtime/routes/settings-routes.ts +140 -15
  370. package/src/runtime/routes/skills-routes.ts +18 -6
  371. package/src/runtime/services/__tests__/conversation-serializer.test.ts +140 -0
  372. package/src/runtime/services/conversation-serializer.ts +38 -1
  373. package/src/runtime/verification-outbound-actions.ts +147 -2
  374. package/src/runtime/verification-templates.ts +29 -3
  375. package/src/schedule/schedule-store.ts +19 -0
  376. package/src/skills/catalog-install.ts +77 -13
  377. package/src/tasks/task-scheduler.ts +1 -0
  378. package/src/telemetry/types.ts +66 -1
  379. package/src/telemetry/usage-telemetry-reporter.test.ts +542 -13
  380. package/src/telemetry/usage-telemetry-reporter.ts +213 -20
  381. package/src/tools/apps/executors.ts +1 -1
  382. package/src/tools/browser/__tests__/browser-execution-acquire.test.ts +49 -2
  383. package/src/tools/browser/__tests__/browser-status.test.ts +29 -5
  384. package/src/tools/browser/browser-execution.ts +27 -9
  385. package/src/tools/browser/cdp-client/__tests__/factory.test.ts +380 -4
  386. package/src/tools/browser/cdp-client/__tests__/host-bridge-cdp-client.test.ts +107 -0
  387. package/src/tools/browser/cdp-client/__tests__/types.test.ts +6 -1
  388. package/src/tools/browser/cdp-client/factory.ts +217 -17
  389. package/src/tools/browser/cdp-client/host-bridge-cdp-client.ts +67 -0
  390. package/src/tools/browser/cdp-client/types.ts +22 -2
  391. package/src/tools/credential-execution/make-authenticated-request.ts +2 -1
  392. package/src/tools/credential-execution/manage-secure-command-tool.ts +169 -164
  393. package/src/tools/credential-execution/run-authenticated-command.ts +2 -1
  394. package/src/tools/executor.ts +39 -7
  395. package/src/tools/registry.ts +387 -5
  396. package/src/tools/schedule/create.ts +16 -0
  397. package/src/tools/schedule/list.ts +12 -4
  398. package/src/tools/schedule/update.ts +12 -0
  399. package/src/tools/skills/load.ts +11 -6
  400. package/src/tools/terminal/safe-env.ts +2 -0
  401. package/src/tools/types.ts +65 -9
  402. package/src/tools/workspace-tools/loader.ts +673 -0
  403. package/src/usage/attribution.ts +28 -0
  404. package/src/util/device-id.ts +17 -3
  405. package/src/util/platform.ts +16 -0
  406. package/tsconfig.plugin-api.json +13 -0
  407. package/src/__tests__/plugin-external-api.test.ts +0 -68
  408. package/src/__tests__/plugin-skill-contribution.test.ts +0 -355
  409. package/src/daemon/message-types/browser.ts +0 -10
  410. package/src/notifications/__tests__/emit-signal-home-feed.test.ts +0 -187
  411. package/src/plugins/defaults/memory-v3-shadow/__tests__/fixtures/eval-turns.json +0 -36
  412. package/src/plugins/defaults/memory-v3-shadow/__tests__/fixtures/live-turns.json +0 -37
  413. package/src/plugins/defaults/memory-v3-shadow/__tests__/working-set-eviction.test.ts +0 -106
  414. package/src/plugins/defaults/memory-v3-shadow/__tests__/working-set-skeleton.test.ts +0 -44
  415. package/src/plugins/defaults/memory-v3-shadow/working-set.ts +0 -91
  416. package/src/plugins/external-api.ts +0 -114
  417. package/src/plugins/plugin-skill-contributions.ts +0 -292
@@ -0,0 +1,196 @@
1
+ # Workspace Tool Overrides
2
+
3
+ Workspace tool overrides let the operator replace a core assistant tool (or
4
+ add a brand-new one) by dropping a single file under their
5
+ `<workspaceDir>/tools/` directory. The override survives assistant restarts,
6
+ takes effect during the same startup phase as core tool initialization,
7
+ and is recoverable: removing the file restores the original core behavior.
8
+ When the `workspace-tools-watcher` feature flag is enabled, overrides are
9
+ also hot-reloaded by a filesystem watcher (no restart required after the
10
+ initial boot).
11
+
12
+ This page explains the file convention, lifecycle position, and the
13
+ "single canonical source per name" invariant the design is built around.
14
+
15
+ ## File convention
16
+
17
+ ```
18
+ <workspaceDir>/
19
+ tools/
20
+ skill_load.ts ← name="skill_load" via .ts default export
21
+ my_tool.js ← name="my_tool" via compiled .js
22
+ data_lookup.json ← name="data_lookup" via JSON spec
23
+ host_bash.removed ← name="host_bash" — strip from registry
24
+ ```
25
+
26
+ Rules:
27
+
28
+ - The **filename stem** is the registered tool name verbatim. There is no
29
+ derivation, no basename transformation, no directory layer.
30
+ - The loader looks for `.js` first, then `.ts`, then `.json`. The
31
+ `.js`-preferred ordering matches compiled-binary semantics: a release
32
+ build that ships compiled artifacts next to source runs the compiled
33
+ file.
34
+ - `.json` files load as declarative specs — they describe schema and
35
+ metadata but cannot supply an `execute` function. Calling a
36
+ JSON-sourced tool returns an `isError` result; they exist for stubs
37
+ and override placeholders.
38
+ - A `<name>.removed` sentinel file (any contents, typically empty)
39
+ strips the same-named core tool from the registry without
40
+ substituting a replacement. Removing the sentinel file restores the
41
+ core tool on the next reconcile.
42
+ - Filename stems must satisfy `isProviderSafeToolName`
43
+ (`/^[a-zA-Z0-9_-]{1,64}$/`). A stem with spaces or punctuation is
44
+ logged at error and skipped; the loader never silently rewrites the
45
+ name with a hash suffix that would be unfindable.
46
+ - Stems starting with `.` are skipped (so `.gitignore`, `.DS_Store`
47
+ cannot accidentally register a tool).
48
+ - If `<name>.ts` and `<name>.js` (or any other shadow combination)
49
+ coexist for the same stem, the winning extension is used and the
50
+ shadowed siblings are logged at warn.
51
+
52
+ ## Tool file shape
53
+
54
+ The default export is a generic `ToolDefinition` — the same shape every
55
+ tool surface in the assistant uses. All four normally-required fields
56
+ fall back to documented defaults if omitted, so a misconfigured tool
57
+ still loads cleanly and surfaces its problem at call time rather than
58
+ blocking assistant boot.
59
+
60
+ ```ts
61
+ // /workspace/tools/skill_load.ts
62
+ import type {
63
+ ToolContext,
64
+ ToolDefinition,
65
+ ToolExecutionResult,
66
+ } from "@vellumai/plugin-api";
67
+
68
+ const tool: ToolDefinition = {
69
+ description: "Skill loader (custom workspace implementation)",
70
+ defaultRiskLevel: "low",
71
+ input_schema: {
72
+ type: "object",
73
+ properties: { skill_id: { type: "string" } },
74
+ required: ["skill_id"],
75
+ },
76
+ async execute(
77
+ input: { skill_id: string },
78
+ ctx: ToolContext,
79
+ ): Promise<ToolExecutionResult> {
80
+ return { content: `loaded ${input.skill_id}`, isError: false };
81
+ },
82
+ };
83
+
84
+ export default tool;
85
+ ```
86
+
87
+ Defaults applied when fields are omitted:
88
+
89
+ | Field | Default |
90
+ | ------------------ | ------------------------------------------------------------------------------------------- |
91
+ | `description` | `""` |
92
+ | `defaultRiskLevel` | `"high"` |
93
+ | `executionTarget` | `"sandbox"` |
94
+ | `input_schema` | `{ type: "object", properties: {}, additionalProperties: false }` |
95
+ | `execute` | Returns `{ content: "workspace tool <name> has no execute implementation", isError: true }` |
96
+
97
+ ## Override semantics
98
+
99
+ Workspace tools are the highest-priority origin in the tool registry:
100
+
101
+ - **Same name as a core tool** → the original core tool is moved into an
102
+ internal stash (`getCoreToolOverride(name)`) and the workspace tool takes
103
+ its place. Removing the workspace file causes the watcher to restore
104
+ the original — workspace tools are not destructive to the core baseline.
105
+ - **Brand-new name** → registers as a net-new entry. No stash.
106
+ - **`<name>.removed` sentinel for a core tool** → the core tool is
107
+ stripped (stashed in the same map as override-style stashing) and no
108
+ replacement is registered. Deleting the sentinel restores the core
109
+ tool. Stripping a name that doesn't exist is a logged no-op.
110
+ - **Collision with a skill / plugin / MCP tool of the same name** → the
111
+ workspace registration throws. Workspace tools must register before
112
+ other extension categories; seeing one of these owners during a
113
+ workspace registration means the assistant startup order regressed.
114
+
115
+ Subsequent (post-workspace-load) registrations from plugins, skills, or
116
+ MCP servers that try to claim a name a workspace tool already owns (or
117
+ has stripped via `.removed`) are **warn-and-skipped**. Plugins, skills,
118
+ and MCP servers cannot bypass this by registering before workspace
119
+ tools load — the lifecycle pins workspace tools to register first.
120
+
121
+ Skill / plugin / MCP collisions with a workspace tool name across the
122
+ distinct namespacing those surfaces enforce are impossible — each runs
123
+ in its own owner-scoped registry path, and the workspace registration's
124
+ stamping is authoritative regardless of pre-existing ownership fields
125
+ on the incoming tool.
126
+
127
+ ## Lifecycle position
128
+
129
+ ```
130
+ initializeTools() # core tools register
131
+ → loadWorkspaceTools() # initial workspace tool scan
132
+ → MCP tool registration
133
+ → loadUserPlugins()
134
+ → bootstrapPlugins()
135
+
136
+ # after providers-setup completes:
137
+ DaemonServer.start()
138
+ → WorkspaceToolsWatcher.getInstance().start() # hot register/unregister via fs.watch
139
+ ```
140
+
141
+ Workspace tools register _after_ core tools and _before_ every other
142
+ extension surface during the initial scan so that every subsequent
143
+ registration sees the workspace tool as already-owned. The initial scan
144
+ (`loadWorkspaceTools()`) always runs, so workspace tools load from disk
145
+ at every boot regardless of the flag.
146
+
147
+ The filesystem watcher is gated on the `workspace-tools-watcher` feature
148
+ flag (default off). When enabled, it runs for the lifetime of the
149
+ assistant, picking up add/change/delete events on `<workspaceDir>/tools/`
150
+ and reconciling the registry without requiring a restart. When disabled,
151
+ no watch loop is mounted and live edits to `<workspaceDir>/tools/` take
152
+ effect only on the next daemon restart. The flag is read at startup, so
153
+ toggling it takes effect on restart rather than mid-process.
154
+
155
+ The watcher debounces per filename stem and reconciles by re-deriving
156
+ the world from disk ("given what's on disk right now for `<stem>.*`,
157
+ what registry state should the assistant be in?") rather than routing
158
+ on `fs.watch`'s unreliable add/change/rename event types. This is the
159
+ same eventual-consistency pattern the plugin source watcher uses.
160
+
161
+ ## Per-tool isolation
162
+
163
+ A single broken workspace tool must never block assistant boot. The
164
+ loader applies the same per-tool isolation contract as the user-plugin
165
+ loader:
166
+
167
+ - A `.ts` / `.js` whose module body throws during import is logged at
168
+ error and skipped — the loader proceeds to the next file.
169
+ - A `.ts` / `.js` whose default export is missing or not an object is
170
+ logged at error and skipped.
171
+ - A `.json` that doesn't parse, or doesn't decode to an object, is
172
+ logged at error and skipped.
173
+ - A `.ts` / `.js` whose module evaluation hangs is bounded by a
174
+ 10-second timeout. The abandoned import continues running in the
175
+ background but the loader has already moved on. Bun's `import()`
176
+ cannot be cancelled, so the registry guards against late-arriving
177
+ registrations by the time-bounded path.
178
+
179
+ The registry's batch validation runs ahead of any mutation, so a single
180
+ late-discovered conflict (e.g. duplicate name within the batch) aborts
181
+ the whole call without partially populating the registry.
182
+
183
+ ## Unregistering
184
+
185
+ Deleting `<workspaceDir>/tools/<name>.{ts,js,json}` triggers the file
186
+ watcher's reconcile, which calls `unregisterWorkspaceTool(name)` and
187
+ restores the stashed core tool when one exists, or simply deletes the
188
+ entry when the workspace tool was net-new. No assistant restart is
189
+ required.
190
+
191
+ To strip a core tool without substituting a replacement, drop an empty
192
+ `<workspaceDir>/tools/<name>.removed` file. Removing that sentinel
193
+ restores the core tool on the next reconcile. The two states (override
194
+ vs. strip) are mutually exclusive — placing both `<name>.ts` and
195
+ `<name>.removed` for the same stem causes the watcher to tear down
196
+ both states until the conflict is resolved on disk.
@@ -16,8 +16,8 @@ to eyeball which hooks fire during a conversation.
16
16
 
17
17
  For the full plugin authoring guide — manifest shape, every contribution
18
18
  surface, hook patterns, and conventions — see
19
- [`experimental/plugins/README.md`](../../../../experimental/plugins/README.md).
20
- [`simple-memory`](../../../../experimental/plugins/simple-memory/) is the
19
+ [`plugins/README.md`](../../../../plugins/README.md).
20
+ [`simple-memory`](../../../../plugins/simple-memory/) is the
21
21
  canonical reference implementation that exercises every wired surface.
22
22
 
23
23
  ## What it does
@@ -115,7 +115,7 @@ vellum restart
115
115
 
116
116
  ## Next steps
117
117
 
118
- - Read [`experimental/plugins/README.md`](../../../../experimental/plugins/README.md)
118
+ - Read [`plugins/README.md`](../../../../plugins/README.md)
119
119
  for the full plugin authoring guide: manifest shape, every contribution
120
120
  surface, hook patterns (observe / transform), tool contributions, and
121
121
  conventions.
package/knip.json CHANGED
@@ -9,6 +9,7 @@
9
9
  ],
10
10
  "project": ["src/**/*.ts!", "src/**/*.tsx!", "scripts/**/*.ts"],
11
11
  "ignoreDependencies": [
12
+ "@microsoft/api-extractor",
12
13
  "@vellumai/ces-client",
13
14
  "@vellumai/credential-storage",
14
15
  "@vellumai/egress-proxy",