@vellumai/assistant 0.8.11 → 0.8.12-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 (244) hide show
  1. package/ARCHITECTURE.md +15 -17
  2. package/README.md +0 -6
  3. package/bun.lock +6 -122
  4. package/node_modules/@vellumai/gateway-client/bun.lock +1 -0
  5. package/node_modules/@vellumai/gateway-client/package.json +3 -1
  6. package/node_modules/@vellumai/gateway-client/src/__tests__/gateway-client.test.ts +1 -1
  7. package/node_modules/@vellumai/gateway-client/src/gateway-ipc-contracts.ts +87 -0
  8. package/node_modules/@vellumai/gateway-client/src/index.ts +3 -5
  9. package/openapi.yaml +633 -4
  10. package/package.json +1 -3
  11. package/src/__tests__/adaptive-thinking-repair.test.ts +185 -0
  12. package/src/__tests__/agent-loop-compaction-events.test.ts +7 -6
  13. package/src/__tests__/anthropic-provider.test.ts +129 -0
  14. package/src/__tests__/background-workers-disk-pressure.test.ts +4 -1
  15. package/src/__tests__/btw-routes.test.ts +7 -34
  16. package/src/__tests__/checker.test.ts +6 -12
  17. package/src/__tests__/config-loader-backfill.test.ts +4 -2
  18. package/src/__tests__/config-loader-quarantine-notice.test.ts +167 -0
  19. package/src/__tests__/config-watcher.test.ts +2 -2
  20. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +1 -1
  21. package/src/__tests__/conversation-error.test.ts +2 -6
  22. package/src/__tests__/conversation-history-web-search.test.ts +8 -0
  23. package/src/__tests__/conversation-title-service.test.ts +2 -1
  24. package/src/__tests__/credential-security-invariants.test.ts +1 -1
  25. package/src/__tests__/disk-pressure-tools.test.ts +1 -1
  26. package/src/__tests__/exploration-drift-hook.test.ts +692 -0
  27. package/src/__tests__/filing-service.test.ts +8 -3
  28. package/src/__tests__/guardian-action-store.test.ts +0 -167
  29. package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +1 -1
  30. package/src/__tests__/heartbeat-disk-pressure.test.ts +4 -1
  31. package/src/__tests__/heartbeat-service.test.ts +5 -2
  32. package/src/__tests__/identity-intro-cache.test.ts +12 -5
  33. package/src/__tests__/identity-routes.test.ts +16 -57
  34. package/src/__tests__/injector-chain.test.ts +8 -3
  35. package/src/__tests__/injector-config-quarantine-notice.test.ts +115 -0
  36. package/src/__tests__/llm-catalog-parity.test.ts +16 -0
  37. package/src/__tests__/llm-usage-store.test.ts +11 -0
  38. package/src/__tests__/log-export-workspace.test.ts +468 -3
  39. package/src/__tests__/memory-v2-static-injector.test.ts +22 -0
  40. package/src/__tests__/model-intents.test.ts +1 -1
  41. package/src/__tests__/oauth-cli.test.ts +19 -8
  42. package/src/__tests__/openai-provider.test.ts +34 -0
  43. package/src/__tests__/prechat-onboarding-contract.test.ts +0 -1
  44. package/src/__tests__/recurrence-engine.test.ts +45 -0
  45. package/src/__tests__/schedule-routes.test.ts +34 -0
  46. package/src/__tests__/scheduler-disk-pressure.test.ts +1 -1
  47. package/src/__tests__/script-proxy-conversation-manager.test.ts +10 -5
  48. package/src/__tests__/secret-fixtures.ts +20 -0
  49. package/src/__tests__/skill-tool-factory.test.ts +49 -0
  50. package/src/__tests__/subagent-role-registry.test.ts +24 -1
  51. package/src/__tests__/subagent-tools.test.ts +1 -0
  52. package/src/__tests__/system-prompt.test.ts +109 -11
  53. package/src/__tests__/tool-approval-handler.test.ts +85 -0
  54. package/src/__tests__/tool-audit-listener.test.ts +86 -0
  55. package/src/__tests__/tool-error-hook.test.ts +1 -0
  56. package/src/__tests__/tool-result-spool.test.ts +337 -0
  57. package/src/__tests__/tool-result-truncate-hook.test.ts +1 -0
  58. package/src/__tests__/validate-input.test.ts +95 -1
  59. package/src/__tests__/workspace-migration-098-remove-stale-updates-bulletin-file.test.ts +65 -0
  60. package/src/__tests__/workspace-migration-099-disable-cache-one-shot-callsites.test.ts +139 -0
  61. package/src/__tests__/workspace-migration-100-upgrade-quality-profile-to-fable-5.test.ts +174 -0
  62. package/src/__tests__/workspace-migration-101-upgrade-balanced-economy-to-minimax-m3.test.ts +162 -0
  63. package/src/__tests__/workspace-release-notes-feature-flag-guard.test.ts +45 -95
  64. package/src/acp/__tests__/agent-process.test.ts +315 -2
  65. package/src/acp/__tests__/prepare-agent-env.test.ts +79 -5
  66. package/src/acp/agent-process.ts +163 -34
  67. package/src/acp/prepare-agent-env.ts +55 -15
  68. package/src/agent/loop.ts +81 -24
  69. package/src/api/events/usage-progress.ts +28 -0
  70. package/src/api/index.ts +6 -0
  71. package/src/background-wake/wake-intent-hooks.test.ts +2 -0
  72. package/src/bundler/app-bundler.ts +25 -42
  73. package/src/bundler/app-compiler.ts +8 -0
  74. package/src/calls/call-controller.ts +1 -1
  75. package/src/cli/commands/plugins.ts +248 -15
  76. package/src/cli/lib/__tests__/inspect-plugin.test.ts +318 -0
  77. package/src/cli/lib/__tests__/install-from-github.test.ts +16 -9
  78. package/src/cli/lib/__tests__/plugin-artifact.test.ts +183 -0
  79. package/src/cli/lib/__tests__/plugin-details.test.ts +158 -0
  80. package/src/cli/lib/__tests__/plugin-fingerprint.test.ts +245 -0
  81. package/src/cli/lib/__tests__/upgrade-plugin.test.ts +307 -0
  82. package/src/cli/lib/inspect-plugin.ts +252 -0
  83. package/src/cli/lib/install-from-github.ts +214 -21
  84. package/src/cli/lib/list-installed-plugins.ts +17 -6
  85. package/src/cli/lib/plugin-artifact.ts +103 -0
  86. package/src/cli/lib/plugin-details.ts +18 -1
  87. package/src/cli/lib/plugin-fingerprint.ts +197 -0
  88. package/src/cli/lib/upgrade-plugin.ts +225 -0
  89. package/src/config/bundled-skills/subagent/SKILL.md +2 -0
  90. package/src/config/bundled-skills/subagent/TOOLS.json +8 -2
  91. package/src/config/call-site-defaults.ts +13 -2
  92. package/src/config/feature-flag-registry.json +8 -16
  93. package/src/config/loader.ts +52 -59
  94. package/src/config/schema.ts +0 -2
  95. package/src/config/schemas/__tests__/memory-v2.test.ts +1 -0
  96. package/src/config/schemas/__tests__/memory-v3.test.ts +10 -0
  97. package/src/config/schemas/llm.ts +10 -0
  98. package/src/config/schemas/memory-v2.ts +13 -0
  99. package/src/config/schemas/memory-v3.ts +92 -0
  100. package/src/config/seed-inference-profiles.ts +4 -8
  101. package/src/context/post-turn-tool-result-truncation.ts +32 -18
  102. package/src/context/tool-result-spool.ts +104 -0
  103. package/src/credential-execution/feature-gates.ts +0 -1
  104. package/src/daemon/conversation-agent-loop-handlers.ts +41 -16
  105. package/src/daemon/conversation-error.ts +6 -15
  106. package/src/daemon/conversation.ts +9 -0
  107. package/src/daemon/disk-pressure-policy.ts +0 -1
  108. package/src/daemon/lifecycle.ts +1 -20
  109. package/src/daemon/message-types/conversations.ts +2 -15
  110. package/src/daemon/trust-context.ts +1 -1
  111. package/src/events/tool-audit-listener.ts +40 -9
  112. package/src/heartbeat/__tests__/heartbeat-service.test.ts +1 -1
  113. package/src/home/__tests__/home-content-refresh.test.ts +114 -0
  114. package/src/home/__tests__/suggested-prompts.test.ts +86 -5
  115. package/src/home/home-content-refresh.ts +43 -31
  116. package/src/home/home-greeting-cache.ts +8 -1
  117. package/src/home/home-greeting.ts +13 -9
  118. package/src/home/suggested-prompts.ts +77 -24
  119. package/src/ipc/routes/trust-rules.test.ts +66 -72
  120. package/src/media/image-credentials.ts +2 -2
  121. package/src/memory/__tests__/compaction-log-store-clickhouse.test.ts +432 -0
  122. package/src/memory/{compaction-log-writer-clickhouse.ts → compaction-log-store-clickhouse.ts} +264 -55
  123. package/src/memory/conversation-attention-store.ts +1 -0
  124. package/src/memory/conversation-bootstrap.ts +18 -9
  125. package/src/memory/conversation-crud.ts +12 -2
  126. package/src/memory/conversation-title-service.ts +53 -9
  127. package/src/memory/delivery-channels.ts +0 -69
  128. package/src/memory/graph/extraction-job.ts +0 -15
  129. package/src/memory/guardian-action-store.ts +1 -376
  130. package/src/memory/llm-usage-store.ts +5 -1
  131. package/src/memory/migrations/181-rename-thread-starters-checkpoints.ts +2 -2
  132. package/src/memory/v2/__tests__/consolidation-job.test.ts +183 -2
  133. package/src/memory/v2/__tests__/injection.test.ts +70 -0
  134. package/src/memory/v2/__tests__/static-context.test.ts +12 -0
  135. package/src/memory/v2/consolidation-job.ts +93 -9
  136. package/src/memory/v2/injection.ts +53 -0
  137. package/src/memory/v2/prompts/consolidation.ts +1 -0
  138. package/src/memory/v2/static-context.ts +13 -1
  139. package/src/memory/v2/sweep-job.ts +1 -1
  140. package/src/memory/v2/types.ts +5 -0
  141. package/src/plugin-api/types.ts +7 -0
  142. package/src/plugins/defaults/exploration-drift/hooks/post-tool-use.ts +300 -0
  143. package/src/plugins/defaults/exploration-drift/package.json +15 -0
  144. package/src/plugins/defaults/index.ts +25 -0
  145. package/src/plugins/defaults/memory-retrieval/injectors.ts +132 -4
  146. package/src/plugins/defaults/memory-v3-shadow/__tests__/card.test.ts +92 -0
  147. package/src/plugins/defaults/memory-v3-shadow/__tests__/carry-integration.test.ts +2 -1
  148. package/src/plugins/defaults/memory-v3-shadow/__tests__/fresh-set.test.ts +52 -0
  149. package/src/plugins/defaults/memory-v3-shadow/__tests__/injection.test.ts +1 -0
  150. package/src/plugins/defaults/memory-v3-shadow/__tests__/live-integration.test.ts +2 -1
  151. package/src/plugins/defaults/memory-v3-shadow/__tests__/orchestrate.test.ts +136 -5
  152. package/src/plugins/defaults/memory-v3-shadow/__tests__/pool-select.test.ts +17 -0
  153. package/src/plugins/defaults/memory-v3-shadow/__tests__/selection-log-store.test.ts +6 -0
  154. package/src/plugins/defaults/memory-v3-shadow/__tests__/shadow-integration.test.ts +5 -1
  155. package/src/plugins/defaults/memory-v3-shadow/__tests__/shadow-plugin.test.ts +68 -4
  156. package/src/plugins/defaults/memory-v3-shadow/card.ts +49 -5
  157. package/src/plugins/defaults/memory-v3-shadow/fresh-set.ts +59 -0
  158. package/src/plugins/defaults/memory-v3-shadow/injector.ts +4 -2
  159. package/src/plugins/defaults/memory-v3-shadow/learned-edges.test.ts +169 -0
  160. package/src/plugins/defaults/memory-v3-shadow/learned-edges.ts +178 -0
  161. package/src/plugins/defaults/memory-v3-shadow/orchestrate.ts +115 -26
  162. package/src/plugins/defaults/memory-v3-shadow/pool-select.ts +13 -9
  163. package/src/plugins/defaults/memory-v3-shadow/shadow-plugin.ts +144 -22
  164. package/src/plugins/defaults/memory-v3-shadow/types.ts +24 -6
  165. package/src/plugins/defaults/title-generate/hooks/stop.ts +13 -0
  166. package/src/plugins/defaults/title-generate/hooks/user-prompt-submit.ts +16 -0
  167. package/src/prompts/cache-boundary.ts +17 -0
  168. package/src/prompts/sections.ts +50 -17
  169. package/src/prompts/system-prompt.ts +12 -4
  170. package/src/prompts/templates/system-sections.ts +22 -0
  171. package/src/providers/__tests__/unparseable-tool-args.test.ts +53 -0
  172. package/src/providers/anthropic/client.ts +74 -28
  173. package/src/providers/gemini/client.ts +5 -1
  174. package/src/providers/minimax/client.ts +9 -0
  175. package/src/providers/model-catalog.ts +28 -0
  176. package/src/providers/model-intents.ts +3 -3
  177. package/src/providers/openai/chat-completions-provider.ts +4 -2
  178. package/src/providers/openai/responses-provider.ts +7 -2
  179. package/src/providers/retry.ts +8 -0
  180. package/src/providers/types.ts +11 -0
  181. package/src/providers/unparseable-tool-args.ts +56 -0
  182. package/src/runtime/AGENTS.md +6 -0
  183. package/src/runtime/__tests__/agent-wake.test.ts +2 -2
  184. package/src/runtime/agent-wake.ts +5 -5
  185. package/src/runtime/background-job-runner.ts +2 -2
  186. package/src/runtime/migrations/__tests__/vbundle-legacy-user-md.test.ts +150 -3
  187. package/src/runtime/migrations/vbundle-import-analyzer.ts +29 -6
  188. package/src/runtime/migrations/vbundle-import-policy.ts +23 -0
  189. package/src/runtime/migrations/vbundle-importer.ts +9 -4
  190. package/src/runtime/migrations/vbundle-streaming-importer.ts +8 -3
  191. package/src/runtime/pre-first-message-gate.ts +1 -1
  192. package/src/runtime/routes/__tests__/conversation-compaction-routes.test.ts +241 -0
  193. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +132 -0
  194. package/src/runtime/routes/__tests__/gateway-log-routes.test.ts +97 -185
  195. package/src/runtime/routes/__tests__/home-feed-routes.test.ts +17 -0
  196. package/src/runtime/routes/__tests__/plugins-routes.test.ts +348 -0
  197. package/src/runtime/routes/__tests__/task-routes.test.ts +3 -3
  198. package/src/runtime/routes/btw-routes.ts +0 -14
  199. package/src/runtime/routes/conversation-compaction-routes.ts +86 -19
  200. package/src/runtime/routes/conversation-list-routes.ts +77 -5
  201. package/src/runtime/routes/conversation-management-routes.ts +54 -0
  202. package/src/runtime/routes/conversation-query-routes.ts +79 -4
  203. package/src/runtime/routes/gateway-log-routes.ts +14 -64
  204. package/src/runtime/routes/home-feed-routes.ts +10 -0
  205. package/src/runtime/routes/identity-intro-cache.ts +1 -1
  206. package/src/runtime/routes/identity-routes.ts +76 -20
  207. package/src/runtime/routes/inbound-message-handler.ts +0 -36
  208. package/src/runtime/routes/log-export-routes.ts +143 -96
  209. package/src/runtime/routes/plugins-routes.ts +380 -0
  210. package/src/runtime/routes/redact-staged-export.ts +259 -0
  211. package/src/runtime/routes/schedule-routes.ts +19 -2
  212. package/src/runtime/routes/trust-rules-routes.ts +14 -67
  213. package/src/schedule/recurrence-engine.ts +34 -0
  214. package/src/schedule/scheduler.ts +1 -0
  215. package/src/security/redact-json.ts +61 -0
  216. package/src/skills/validate-input.ts +41 -1
  217. package/src/subagent/types.ts +26 -1
  218. package/src/telemetry/types.ts +15 -1
  219. package/src/telemetry/usage-telemetry-reporter.test.ts +6 -1
  220. package/src/telemetry/usage-telemetry-reporter.ts +1 -0
  221. package/src/tools/apps/executors.ts +1 -1
  222. package/src/tools/skills/skill-tool-factory.ts +19 -8
  223. package/src/tools/tool-approval-handler.ts +31 -0
  224. package/src/usage/types.ts +8 -1
  225. package/src/util/platform.ts +16 -0
  226. package/src/watcher/engine.ts +1 -0
  227. package/src/workspace/adaptive-thinking-repair.ts +113 -0
  228. package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +70 -67
  229. package/src/workspace/migrations/098-remove-stale-updates-bulletin-file.ts +31 -0
  230. package/src/workspace/migrations/099-disable-cache-one-shot-callsites.ts +81 -0
  231. package/src/workspace/migrations/100-upgrade-quality-profile-to-fable-5.ts +86 -0
  232. package/src/workspace/migrations/101-upgrade-balanced-economy-to-minimax-m3.ts +70 -0
  233. package/src/workspace/migrations/registry.ts +8 -0
  234. package/src/__tests__/config-loader-quarantine-bulletin.test.ts +0 -202
  235. package/src/__tests__/conversation-starters-cadence.test.ts +0 -161
  236. package/src/__tests__/guardian-action-followup-executor.test.ts +0 -322
  237. package/src/__tests__/guardian-action-followup-store.test.ts +0 -373
  238. package/src/__tests__/guardian-action-late-reply.test.ts +0 -1083
  239. package/src/__tests__/update-bulletin-job.test.ts +0 -292
  240. package/src/config/schemas/updates.ts +0 -14
  241. package/src/memory/__tests__/compaction-log-writer-clickhouse.test.ts +0 -227
  242. package/src/memory/conversation-starters-cadence.ts +0 -78
  243. package/src/prompts/update-bulletin-job.ts +0 -180
  244. package/src/runtime/guardian-action-followup-executor.ts +0 -306
package/openapi.yaml CHANGED
@@ -3,7 +3,7 @@
3
3
  openapi: 3.1.0
4
4
  info:
5
5
  title: Vellum Assistant API
6
- version: 0.8.11
6
+ version: 0.8.12
7
7
  description: Auto-generated OpenAPI specification for the Vellum Assistant runtime HTTP server.
8
8
  servers:
9
9
  - url: http://127.0.0.1:7821
@@ -5937,6 +5937,7 @@ paths:
5937
5937
  - macos_notification_view
5938
5938
  - macos_conversation_opened
5939
5939
  - ios_conversation_opened
5940
+ - web_bulk_mark_read
5940
5941
  - telegram_inbound_message
5941
5942
  - telegram_callback
5942
5943
  - slack_inbound_message
@@ -6300,6 +6301,7 @@ paths:
6300
6301
  - macos_notification_view
6301
6302
  - macos_conversation_opened
6302
6303
  - ios_conversation_opened
6304
+ - web_bulk_mark_read
6303
6305
  - telegram_inbound_message
6304
6306
  - telegram_callback
6305
6307
  - slack_inbound_message
@@ -6500,6 +6502,7 @@ paths:
6500
6502
  - macos_notification_view
6501
6503
  - macos_conversation_opened
6502
6504
  - ios_conversation_opened
6505
+ - web_bulk_mark_read
6503
6506
  - telegram_inbound_message
6504
6507
  - telegram_callback
6505
6508
  - slack_inbound_message
@@ -6628,9 +6631,10 @@ paths:
6628
6631
  description:
6629
6632
  Return the chronological list of compaction events that ran in the same agent turn as the call identified
6630
6633
  by `callId`. Turn bounds are walked from the `messages` table (real user messages — tool-result user messages
6631
- are not boundaries). Projected from `llm_request_logs` rows where `call_site = "compactionAgent"`. When the
6632
- conversation has no other messages around the selected call, every compaction strictly before the call's
6633
- `createdAt` is in scope. Drives the Inspector's Compaction tab.
6634
+ are not boundaries). Served from the first-class compaction log when `compactionLogs.destination = "clickhouse"`
6635
+ is configured, falling back to the legacy projection over `llm_request_logs` rows where `call_site =
6636
+ "compactionAgent"`. When the conversation has no other messages around the selected call, every compaction
6637
+ strictly before the call's `createdAt` is in scope. Drives the Inspector's Compaction tab.
6634
6638
  tags:
6635
6639
  - conversations
6636
6640
  responses:
@@ -7095,6 +7099,44 @@ paths:
7095
7099
  required: true
7096
7100
  schema:
7097
7101
  type: string
7102
+ /v1/conversations/archive/bulk:
7103
+ post:
7104
+ operationId: conversations_archive_bulk_post
7105
+ summary: Bulk archive conversations
7106
+ description: Archive multiple conversations in one request. Emits a single sync invalidation for the entire batch.
7107
+ tags:
7108
+ - conversations
7109
+ responses:
7110
+ "200":
7111
+ description: Successful response
7112
+ content:
7113
+ application/json:
7114
+ schema:
7115
+ type: object
7116
+ properties:
7117
+ ok:
7118
+ type: boolean
7119
+ archived:
7120
+ type: number
7121
+ required:
7122
+ - ok
7123
+ - archived
7124
+ additionalProperties: false
7125
+ requestBody:
7126
+ required: true
7127
+ content:
7128
+ application/json:
7129
+ schema:
7130
+ type: object
7131
+ properties:
7132
+ conversationIds:
7133
+ minItems: 1
7134
+ type: array
7135
+ items:
7136
+ type: string
7137
+ required:
7138
+ - conversationIds
7139
+ additionalProperties: false
7098
7140
  /v1/conversations/attention:
7099
7141
  get:
7100
7142
  operationId: conversations_attention_get
@@ -7515,6 +7557,7 @@ paths:
7515
7557
  - macos_notification_view
7516
7558
  - macos_conversation_opened
7517
7559
  - ios_conversation_opened
7560
+ - web_bulk_mark_read
7518
7561
  - telegram_inbound_message
7519
7562
  - telegram_callback
7520
7563
  - slack_inbound_message
@@ -8341,6 +8384,15 @@ paths:
8341
8384
  schema:
8342
8385
  type: string
8343
8386
  description: Internal conversation identifier.
8387
+ - name: view
8388
+ in: query
8389
+ required: false
8390
+ schema:
8391
+ type: string
8392
+ enum:
8393
+ - full
8394
+ - summary
8395
+ description: Response shape. 'summary' omits per-log request/response sections; defaults to 'full'.
8344
8396
  /v1/conversations/rename:
8345
8397
  post:
8346
8398
  operationId: conversations_rename_post
@@ -8522,6 +8574,46 @@ paths:
8522
8574
  required:
8523
8575
  - conversationId
8524
8576
  additionalProperties: false
8577
+ /v1/conversations/seen/bulk:
8578
+ post:
8579
+ operationId: conversations_seen_bulk_post
8580
+ summary: Bulk mark conversations as seen
8581
+ description:
8582
+ Mark multiple conversations as seen in one request. Emits a single sync invalidation for the entire batch
8583
+ instead of per-conversation events.
8584
+ tags:
8585
+ - conversations
8586
+ responses:
8587
+ "200":
8588
+ description: Successful response
8589
+ content:
8590
+ application/json:
8591
+ schema:
8592
+ type: object
8593
+ properties:
8594
+ ok:
8595
+ type: boolean
8596
+ updated:
8597
+ type: number
8598
+ required:
8599
+ - ok
8600
+ - updated
8601
+ additionalProperties: false
8602
+ requestBody:
8603
+ required: true
8604
+ content:
8605
+ application/json:
8606
+ schema:
8607
+ type: object
8608
+ properties:
8609
+ conversationIds:
8610
+ minItems: 1
8611
+ type: array
8612
+ items:
8613
+ type: string
8614
+ required:
8615
+ - conversationIds
8616
+ additionalProperties: false
8525
8617
  /v1/conversations/switch:
8526
8618
  post:
8527
8619
  operationId: conversations_switch_post
@@ -12920,6 +13012,23 @@ paths:
12920
13012
  - source
12921
13013
  - refreshing
12922
13014
  additionalProperties: false
13015
+ parameters:
13016
+ - name: localHour
13017
+ in: query
13018
+ required: false
13019
+ schema:
13020
+ type: integer
13021
+ minimum: 0
13022
+ maximum: 23
13023
+ description: Optional client-local hour of day used only when refreshing generated greetings.
13024
+ - name: localMinute
13025
+ in: query
13026
+ required: false
13027
+ schema:
13028
+ type: integer
13029
+ minimum: 0
13030
+ maximum: 59
13031
+ description: Optional client-local minute used only when refreshing generated greetings.
12923
13032
  /v1/image-generation/generate:
12924
13033
  post:
12925
13034
  operationId: imagegeneration_generate_post
@@ -15182,6 +15291,191 @@ paths:
15182
15291
  responses:
15183
15292
  "200":
15184
15293
  description: Successful response
15294
+ /v1/llm-request-logs/{id}/context:
15295
+ get:
15296
+ operationId: llmrequestlogs_by_id_context_get
15297
+ summary: Get normalized context for a single LLM request log
15298
+ description: Return the normalized summary and request/response sections for a specific log entry.
15299
+ tags:
15300
+ - messages
15301
+ responses:
15302
+ "200":
15303
+ description: Successful response
15304
+ content:
15305
+ application/json:
15306
+ schema:
15307
+ type: object
15308
+ properties:
15309
+ id:
15310
+ type: string
15311
+ createdAt:
15312
+ type: number
15313
+ requestPayload:
15314
+ type: "null"
15315
+ responsePayload:
15316
+ type: "null"
15317
+ provider:
15318
+ anyOf:
15319
+ - type: string
15320
+ - type: "null"
15321
+ summary:
15322
+ anyOf:
15323
+ - type: object
15324
+ properties:
15325
+ provider:
15326
+ anyOf:
15327
+ - type: string
15328
+ - type: "null"
15329
+ model:
15330
+ anyOf:
15331
+ - type: string
15332
+ - type: "null"
15333
+ status:
15334
+ anyOf:
15335
+ - type: string
15336
+ - type: "null"
15337
+ inputTokens:
15338
+ anyOf:
15339
+ - type: number
15340
+ - type: "null"
15341
+ outputTokens:
15342
+ anyOf:
15343
+ - type: number
15344
+ - type: "null"
15345
+ cacheCreationInputTokens:
15346
+ anyOf:
15347
+ - type: number
15348
+ - type: "null"
15349
+ cacheReadInputTokens:
15350
+ anyOf:
15351
+ - type: number
15352
+ - type: "null"
15353
+ stopReason:
15354
+ anyOf:
15355
+ - type: string
15356
+ - type: "null"
15357
+ requestMessageCount:
15358
+ anyOf:
15359
+ - type: number
15360
+ - type: "null"
15361
+ requestToolCount:
15362
+ anyOf:
15363
+ - type: number
15364
+ - type: "null"
15365
+ responseMessageCount:
15366
+ anyOf:
15367
+ - type: number
15368
+ - type: "null"
15369
+ responseToolCallCount:
15370
+ anyOf:
15371
+ - type: number
15372
+ - type: "null"
15373
+ responsePreview:
15374
+ anyOf:
15375
+ - type: string
15376
+ - type: "null"
15377
+ toolCallNames:
15378
+ anyOf:
15379
+ - type: array
15380
+ items:
15381
+ type: string
15382
+ - type: "null"
15383
+ estimatedCostUsd:
15384
+ anyOf:
15385
+ - type: number
15386
+ - type: "null"
15387
+ durationMs:
15388
+ anyOf:
15389
+ - type: number
15390
+ - type: "null"
15391
+ additionalProperties: false
15392
+ - type: "null"
15393
+ requestSections:
15394
+ anyOf:
15395
+ - type: array
15396
+ items:
15397
+ type: object
15398
+ properties:
15399
+ kind:
15400
+ type: string
15401
+ label:
15402
+ anyOf:
15403
+ - type: string
15404
+ - type: "null"
15405
+ role:
15406
+ anyOf:
15407
+ - type: string
15408
+ - type: "null"
15409
+ text:
15410
+ anyOf:
15411
+ - type: string
15412
+ - type: "null"
15413
+ toolName:
15414
+ anyOf:
15415
+ - type: string
15416
+ - type: "null"
15417
+ data: {}
15418
+ language:
15419
+ anyOf:
15420
+ - type: string
15421
+ - type: "null"
15422
+ required:
15423
+ - kind
15424
+ additionalProperties: false
15425
+ - type: "null"
15426
+ responseSections:
15427
+ anyOf:
15428
+ - type: array
15429
+ items:
15430
+ type: object
15431
+ properties:
15432
+ kind:
15433
+ type: string
15434
+ label:
15435
+ anyOf:
15436
+ - type: string
15437
+ - type: "null"
15438
+ role:
15439
+ anyOf:
15440
+ - type: string
15441
+ - type: "null"
15442
+ text:
15443
+ anyOf:
15444
+ - type: string
15445
+ - type: "null"
15446
+ toolName:
15447
+ anyOf:
15448
+ - type: string
15449
+ - type: "null"
15450
+ data: {}
15451
+ language:
15452
+ anyOf:
15453
+ - type: string
15454
+ - type: "null"
15455
+ required:
15456
+ - kind
15457
+ additionalProperties: false
15458
+ - type: "null"
15459
+ agentLoopExitReason:
15460
+ anyOf:
15461
+ - type: string
15462
+ - type: "null"
15463
+ callSite:
15464
+ anyOf:
15465
+ - type: string
15466
+ - type: "null"
15467
+ required:
15468
+ - id
15469
+ - createdAt
15470
+ - requestPayload
15471
+ - responsePayload
15472
+ additionalProperties: false
15473
+ parameters:
15474
+ - name: id
15475
+ in: path
15476
+ required: true
15477
+ schema:
15478
+ type: string
15185
15479
  /v1/llm-request-logs/{id}/payload:
15186
15480
  get:
15187
15481
  operationId: llmrequestlogs_by_id_payload_get
@@ -17494,6 +17788,15 @@ paths:
17494
17788
  required: true
17495
17789
  schema:
17496
17790
  type: string
17791
+ - name: view
17792
+ in: query
17793
+ required: false
17794
+ schema:
17795
+ type: string
17796
+ enum:
17797
+ - full
17798
+ - summary
17799
+ description: Response shape. 'summary' omits per-log request/response sections; defaults to 'full'.
17497
17800
  /v1/messages/{messageId}/tts:
17498
17801
  post:
17499
17802
  operationId: messages_by_messageId_tts_post
@@ -19464,6 +19767,27 @@ paths:
19464
19767
  ref:
19465
19768
  type: string
19466
19769
  description: Git ref the catalog metadata / README were resolved at.
19770
+ artifact:
19771
+ anyOf:
19772
+ - type: object
19773
+ properties:
19774
+ url:
19775
+ type: string
19776
+ description: HTTPS URL the prebuilt client artifact is downloaded from.
19777
+ sha256:
19778
+ type: string
19779
+ description: Lowercase 64-char hex SHA-256 the download is verified against.
19780
+ label:
19781
+ description: Optional human label for the download (e.g. "Download for macOS"); absent when the plugin doesn't name it.
19782
+ type: string
19783
+ required:
19784
+ - url
19785
+ - sha256
19786
+ additionalProperties: false
19787
+ - type: "null"
19788
+ description:
19789
+ Prebuilt client artifact from `package.json` `vellum.artifact`, or null when the plugin ships none or its
19790
+ descriptor is incomplete (e.g. a placeholder sha256).
19467
19791
  required:
19468
19792
  - name
19469
19793
  - installed
@@ -19474,6 +19798,7 @@ paths:
19474
19798
  - source
19475
19799
  - readme
19476
19800
  - ref
19801
+ - artifact
19477
19802
  additionalProperties: false
19478
19803
  "400":
19479
19804
  description: The plugin name failed sanitization (e.g. contained slashes, dots, or uppercase letters).
@@ -19491,6 +19816,310 @@ paths:
19491
19816
  schema:
19492
19817
  type: string
19493
19818
  description: Optional git ref to read catalog metadata / README at. Defaults to the CLI's `DEFAULT_PLUGIN_REF`.
19819
+ /v1/plugins/{name}/inspect:
19820
+ get:
19821
+ operationId: plugins_by_name_inspect_get
19822
+ summary: Inspect a plugin's install drift
19823
+ description:
19824
+ 'Compare the locally installed copy of a plugin against the marketplace''s current pinned commit and report
19825
+ whether an upgrade is available. Returns a six-way `status` (`up-to-date`, `update-available`, `not-installed`,
19826
+ `not-in-marketplace`, `unknown-provenance`, `remote-unavailable`) plus the local provenance (installed commit,
19827
+ version, source, and any local edits vs the install-time fingerprint) and the remote pin. An unreachable
19828
+ marketplace for an installed plugin is not fatal — it returns 200 with `status: "remote-unavailable"`. A name
19829
+ that is neither installed nor in the catalog returns 404. Powers the web upgrade affordance; mirrors the CLI''s
19830
+ `assistant plugins inspect <name>` and `GET /v1/skills/:id/inspect`.'
19831
+ tags:
19832
+ - plugins
19833
+ responses:
19834
+ "200":
19835
+ description: Successful response
19836
+ content:
19837
+ application/json:
19838
+ schema:
19839
+ type: object
19840
+ properties:
19841
+ name:
19842
+ type: string
19843
+ description: Install name. Matches `assistant plugins install <name>`.
19844
+ installed:
19845
+ type: boolean
19846
+ description: Whether a copy is materialized under `<workspaceDir>/plugins/`.
19847
+ status:
19848
+ type: string
19849
+ enum:
19850
+ - up-to-date
19851
+ - update-available
19852
+ - not-installed
19853
+ - not-in-marketplace
19854
+ - unknown-provenance
19855
+ - remote-unavailable
19856
+ description: Drift classification between the installed copy and the marketplace pin.
19857
+ local:
19858
+ anyOf:
19859
+ - type: object
19860
+ properties:
19861
+ target:
19862
+ type: string
19863
+ description: Absolute path to the installed plugin directory.
19864
+ commit:
19865
+ anyOf:
19866
+ - type: string
19867
+ - type: "null"
19868
+ description: Resolved commit the copy was installed at; null when no provenance was recorded.
19869
+ version:
19870
+ anyOf:
19871
+ - type: string
19872
+ - type: "null"
19873
+ description: Installed `package.json#version`.
19874
+ description:
19875
+ anyOf:
19876
+ - type: string
19877
+ - type: "null"
19878
+ description: Installed `package.json#description`.
19879
+ installedAt:
19880
+ anyOf:
19881
+ - type: string
19882
+ - type: "null"
19883
+ description: ISO-8601 install timestamp from the sidecar; null when absent.
19884
+ source:
19885
+ anyOf:
19886
+ - type: object
19887
+ properties:
19888
+ kind:
19889
+ type: string
19890
+ description: Source kind. Only `github` is written today.
19891
+ owner:
19892
+ type: string
19893
+ repo:
19894
+ type: string
19895
+ path:
19896
+ description: Repo-relative directory holding the plugin root; absent = repo root.
19897
+ type: string
19898
+ ref:
19899
+ type: string
19900
+ description: Ref the install resolved through (the pinned commit SHA for marketplace installs).
19901
+ required:
19902
+ - kind
19903
+ - owner
19904
+ - repo
19905
+ - ref
19906
+ additionalProperties: false
19907
+ description: Source coordinates recorded in the install-time provenance sidecar.
19908
+ - type: "null"
19909
+ description: Source recorded at install time; null when no sidecar exists.
19910
+ localChanges:
19911
+ anyOf:
19912
+ - type: object
19913
+ properties:
19914
+ modified:
19915
+ type: array
19916
+ items:
19917
+ type: string
19918
+ description: Tracked files whose content changed since install.
19919
+ added:
19920
+ type: array
19921
+ items:
19922
+ type: string
19923
+ description: Files present on disk but absent from the install baseline.
19924
+ removed:
19925
+ type: array
19926
+ items:
19927
+ type: string
19928
+ description: Files recorded at install but missing from the on-disk copy.
19929
+ clean:
19930
+ type: boolean
19931
+ description: True when no files were added, removed, or modified.
19932
+ required:
19933
+ - modified
19934
+ - added
19935
+ - removed
19936
+ - clean
19937
+ additionalProperties: false
19938
+ description: Local-edit comparison of the on-disk tree against the install-time fingerprint.
19939
+ - type: "null"
19940
+ description:
19941
+ Local-edit state vs the install-time fingerprint; null when no baseline was recorded (older/manual
19942
+ install).
19943
+ issues:
19944
+ type: array
19945
+ items:
19946
+ type: string
19947
+ description: Non-fatal issues with the installed copy (e.g. malformed `package.json`).
19948
+ required:
19949
+ - target
19950
+ - commit
19951
+ - version
19952
+ - description
19953
+ - installedAt
19954
+ - source
19955
+ - localChanges
19956
+ - issues
19957
+ additionalProperties: false
19958
+ description: The locally installed copy of the plugin.
19959
+ - type: "null"
19960
+ description: Locally installed copy; null when the plugin is not installed.
19961
+ remote:
19962
+ anyOf:
19963
+ - type: object
19964
+ properties:
19965
+ repo:
19966
+ type: string
19967
+ description: "`owner/repo` of the external plugin repository."
19968
+ path:
19969
+ type: string
19970
+ description: Repo-relative directory holding the plugin root; `""` = repo root.
19971
+ commit:
19972
+ type: string
19973
+ description: Pinned commit SHA the marketplace currently resolves installs to.
19974
+ description:
19975
+ anyOf:
19976
+ - type: string
19977
+ - type: "null"
19978
+ homepage:
19979
+ anyOf:
19980
+ - type: string
19981
+ - type: "null"
19982
+ license:
19983
+ anyOf:
19984
+ - type: string
19985
+ - type: "null"
19986
+ category:
19987
+ anyOf:
19988
+ - type: string
19989
+ - type: "null"
19990
+ marketplaceRef:
19991
+ type: string
19992
+ description: Ref of the canonical repo the marketplace manifest was read from.
19993
+ required:
19994
+ - repo
19995
+ - path
19996
+ - commit
19997
+ - description
19998
+ - homepage
19999
+ - license
20000
+ - category
20001
+ - marketplaceRef
20002
+ additionalProperties: false
20003
+ description: The marketplace's current pin and advertised metadata.
20004
+ - type: "null"
20005
+ description: Marketplace pin + metadata; null when no entry claims the name or it was unreachable.
20006
+ remoteError:
20007
+ anyOf:
20008
+ - type: string
20009
+ - type: "null"
20010
+ description: Marketplace fetch error message, when the catalog could not be read.
20011
+ required:
20012
+ - name
20013
+ - installed
20014
+ - status
20015
+ - local
20016
+ - remote
20017
+ - remoteError
20018
+ additionalProperties: false
20019
+ "400":
20020
+ description: The plugin name failed sanitization (e.g. contained slashes, dots, or uppercase letters).
20021
+ "404":
20022
+ description: No installed copy and no catalog entry claims the given name.
20023
+ parameters:
20024
+ - name: name
20025
+ in: path
20026
+ required: true
20027
+ schema:
20028
+ type: string
20029
+ /v1/plugins/{name}/upgrade:
20030
+ post:
20031
+ operationId: plugins_by_name_upgrade_post
20032
+ summary: Upgrade a plugin to the marketplace pin
20033
+ description:
20034
+ 'Move an installed plugin to the marketplace''s current pinned commit, re-materializing it under
20035
+ `<workspaceDir>/plugins/<name>/`. Always resolves against the curated marketplace pin (no caller-supplied ref),
20036
+ mirroring `plugins install`''s curation boundary. A no-op (`outcome: "already-up-to-date"`) when the installed
20037
+ commit already equals the pin; pass `dryRun` to preview the move (`outcome: "would-upgrade"`) without touching
20038
+ the install. Installs lacking provenance are re-pinned to the current SHA. The assistant must be restarted to
20039
+ load the upgraded code. This does not gate on local edits — callers should consult `GET
20040
+ /v1/plugins/:name/inspect` (`local.localChanges`) first and confirm before overwriting. Mirrors the CLI''s
20041
+ `assistant plugins upgrade <name>`.'
20042
+ tags:
20043
+ - plugins
20044
+ responses:
20045
+ "200":
20046
+ description: Successful response
20047
+ content:
20048
+ application/json:
20049
+ schema:
20050
+ type: object
20051
+ properties:
20052
+ name:
20053
+ type: string
20054
+ description: Install name that was (or would be) upgraded.
20055
+ outcome:
20056
+ type: string
20057
+ enum:
20058
+ - upgraded
20059
+ - already-up-to-date
20060
+ - would-upgrade
20061
+ description:
20062
+ "`upgraded` moved the install to the pin; `already-up-to-date` was a no-op; `would-upgrade` is a dry-run
20063
+ that found drift."
20064
+ fromCommit:
20065
+ anyOf:
20066
+ - type: string
20067
+ - type: "null"
20068
+ description: Installed commit before the upgrade; null when no provenance was recorded.
20069
+ toCommit:
20070
+ type: string
20071
+ description: Marketplace-pinned commit the install was (or would be) moved to.
20072
+ target:
20073
+ type: string
20074
+ description: Absolute path to the installed plugin directory on the host.
20075
+ fileCount:
20076
+ anyOf:
20077
+ - type: number
20078
+ - type: "null"
20079
+ description: Files materialized by the upgrade; null for a no-op or dry run.
20080
+ dryRun:
20081
+ type: boolean
20082
+ description: Whether this was a dry run (no changes made).
20083
+ provenanceWasUnknown:
20084
+ type: boolean
20085
+ description:
20086
+ Whether the install lacked resolvable provenance before the upgrade; such installs are re-pinned to record
20087
+ it going forward.
20088
+ required:
20089
+ - name
20090
+ - outcome
20091
+ - fromCommit
20092
+ - toCommit
20093
+ - target
20094
+ - fileCount
20095
+ - dryRun
20096
+ - provenanceWasUnknown
20097
+ additionalProperties: false
20098
+ "400":
20099
+ description: The plugin name failed sanitization (e.g. contained slashes, dots, or uppercase letters).
20100
+ "404":
20101
+ description: No copy of the plugin is installed, or its source resolves to nothing.
20102
+ "409":
20103
+ description: The install exists but has no marketplace entry to advance to.
20104
+ "503":
20105
+ description: The plugin source (GitHub) was temporarily unavailable; the upgrade is retryable.
20106
+ parameters:
20107
+ - name: name
20108
+ in: path
20109
+ required: true
20110
+ schema:
20111
+ type: string
20112
+ requestBody:
20113
+ required: true
20114
+ content:
20115
+ application/json:
20116
+ schema:
20117
+ type: object
20118
+ properties:
20119
+ dryRun:
20120
+ description: Report what would change without modifying the install. Defaults to false.
20121
+ type: boolean
20122
+ additionalProperties: false
19494
20123
  /v1/plugins/install:
19495
20124
  post:
19496
20125
  operationId: plugins_install_post