@tangle-network/agent-app 0.45.53 → 0.45.55

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 (480) hide show
  1. package/README.md +1 -1
  2. package/dist/alerting/index.d.ts +5 -175
  3. package/dist/alerting/slack.d.ts +176 -0
  4. package/dist/app-auth/index.d.ts +14 -17
  5. package/dist/assets/index.d.ts +2 -504
  6. package/dist/assets/schema.d.ts +264 -0
  7. package/dist/assets/types.d.ts +237 -0
  8. package/dist/assistant/AssistantDock.d.ts +56 -0
  9. package/dist/assistant/AssistantHistory.d.ts +41 -0
  10. package/dist/assistant/AssistantPanel.d.ts +84 -0
  11. package/dist/assistant/ProposalCard.d.ts +41 -0
  12. package/dist/assistant/ResizeHandle.d.ts +19 -0
  13. package/dist/assistant/client-context.d.ts +20 -0
  14. package/dist/assistant/client.d.ts +117 -0
  15. package/dist/assistant/index.d.ts +19 -848
  16. package/dist/assistant/launcher.d.ts +23 -0
  17. package/dist/assistant/persistence.d.ts +26 -0
  18. package/dist/assistant/presentation.d.ts +99 -0
  19. package/dist/assistant/provider-label.d.ts +7 -0
  20. package/dist/assistant/reducer.d.ts +130 -0
  21. package/dist/assistant/sse.d.ts +24 -0
  22. package/dist/assistant/time-ago.d.ts +6 -0
  23. package/dist/assistant/transcript.d.ts +97 -0
  24. package/dist/assistant/types.d.ts +291 -0
  25. package/dist/assistant/use-stick-to-bottom.d.ts +28 -0
  26. package/dist/assistant/useAssistantChat.d.ts +63 -0
  27. package/dist/assistant/useAssistantModels.d.ts +22 -0
  28. package/dist/assistant/useAssistantThreads.d.ts +47 -0
  29. package/dist/assistant/usePanelPrefs.d.ts +55 -0
  30. package/dist/billing/index.d.ts +19 -21
  31. package/dist/brand/index.d.ts +16 -10
  32. package/dist/brand-extraction/extract.d.ts +34 -0
  33. package/dist/brand-extraction/index.d.ts +12 -214
  34. package/dist/brand-extraction/map.d.ts +58 -0
  35. package/dist/brand-extraction/types.d.ts +119 -0
  36. package/dist/catalog/index.d.ts +11 -101
  37. package/dist/chat-react/composer-mode-controls.d.ts +14 -0
  38. package/dist/chat-react/entry-composer.d.ts +92 -0
  39. package/dist/chat-react/index.d.ts +22 -118
  40. package/dist/chat-react/types.d.ts +11 -0
  41. package/dist/chat-routes/attachment-store.d.ts +84 -0
  42. package/dist/chat-routes/attachment-upload.d.ts +84 -0
  43. package/dist/chat-routes/attachment-validation.d.ts +95 -0
  44. package/dist/chat-routes/binary-sniff.d.ts +45 -0
  45. package/dist/chat-routes/completed-sandbox-turn.d.ts +25 -0
  46. package/dist/chat-routes/detached-turn.d.ts +197 -0
  47. package/dist/chat-routes/dispatch-parts.d.ts +101 -0
  48. package/dist/chat-routes/draft-persistence.d.ts +189 -0
  49. package/dist/chat-routes/durable-projection.d.ts +18 -0
  50. package/dist/chat-routes/file-index.d.ts +115 -0
  51. package/dist/chat-routes/index.d.ts +25 -1840
  52. package/dist/chat-routes/model-failover-stream.d.ts +206 -0
  53. package/dist/chat-routes/promote-file-part.d.ts +84 -0
  54. package/dist/chat-routes/resolve-attachments.d.ts +72 -0
  55. package/dist/chat-routes/sandbox-producer.d.ts +146 -0
  56. package/dist/chat-routes/sandbox-turn-usage.d.ts +4 -0
  57. package/dist/{stale-turn-lock-DucQzvXu.d.ts → chat-routes/stale-turn-lock.d.ts} +7 -9
  58. package/dist/chat-routes/turn-routes.d.ts +540 -0
  59. package/dist/chat-routes/upload.d.ts +84 -0
  60. package/dist/{wire-DOZ-O6hD.d.ts → chat-routes/wire.d.ts} +41 -44
  61. package/dist/chat-store/core.d.ts +19 -0
  62. package/dist/chat-store/index.d.ts +22 -322
  63. package/dist/{parts-BqIHMdyu.d.ts → chat-store/parts.d.ts} +49 -47
  64. package/dist/chat-store/schema.d.ts +157 -0
  65. package/dist/chat-store/store.d.ts +177 -0
  66. package/dist/config/index.d.ts +13 -18
  67. package/dist/crypto/index.d.ts +10 -12
  68. package/dist/crypto/web-token.d.ts +22 -0
  69. package/dist/design-canvas/apply.d.ts +70 -0
  70. package/dist/design-canvas/drizzle-store.d.ts +29 -0
  71. package/dist/design-canvas/drizzle.d.ts +7 -575
  72. package/dist/{export-presets-mgVulRaV.d.ts → design-canvas/export-presets.d.ts} +18 -22
  73. package/dist/design-canvas/index.d.ts +22 -268
  74. package/dist/design-canvas/mcp-entry.d.ts +15 -0
  75. package/dist/design-canvas/mcp-handler.d.ts +34 -0
  76. package/dist/design-canvas/mcp-tools.d.ts +30 -0
  77. package/dist/{model-DnfO_PdJ.d.ts → design-canvas/model.d.ts} +33 -35
  78. package/dist/{operations-ByJ6yXOW.d.ts → design-canvas/operations.d.ts} +21 -25
  79. package/dist/design-canvas/schema.d.ts +558 -0
  80. package/dist/{store-CqfDtnPQ.d.ts → design-canvas/store.d.ts} +8 -12
  81. package/dist/design-canvas/templates.d.ts +72 -0
  82. package/dist/design-canvas/validate.d.ts +32 -0
  83. package/dist/design-canvas-react/components/BleedTrimOverlay.d.ts +22 -0
  84. package/dist/design-canvas-react/components/BrandKnot.d.ts +11 -0
  85. package/dist/design-canvas-react/components/CanvasEmptyState.d.ts +32 -0
  86. package/dist/design-canvas-react/components/CanvasInsertPanel.d.ts +53 -0
  87. package/dist/{lazy-DrkVyDpe.d.ts → design-canvas-react/components/DesignCanvas.d.ts} +27 -20
  88. package/dist/design-canvas-react/components/DesignCanvasEditor.d.ts +23 -0
  89. package/dist/design-canvas-react/components/ElementNode.d.ts +51 -0
  90. package/dist/design-canvas-react/components/ExportControl.d.ts +21 -0
  91. package/dist/design-canvas-react/components/GridLayer.d.ts +47 -0
  92. package/dist/design-canvas-react/components/InlineTextEditor.d.ts +25 -0
  93. package/dist/design-canvas-react/components/LayersPanel.d.ts +20 -0
  94. package/dist/design-canvas-react/components/PagesStrip.d.ts +34 -0
  95. package/dist/design-canvas-react/components/Rulers.d.ts +31 -0
  96. package/dist/design-canvas-react/components/SelectionLayer.d.ts +51 -0
  97. package/dist/design-canvas-react/components/SnapGuidesOverlay.d.ts +25 -0
  98. package/dist/design-canvas-react/components/Toolbar.d.ts +64 -0
  99. package/dist/design-canvas-react/components/Workspace.d.ts +92 -0
  100. package/dist/design-canvas-react/components/ZoomControls.d.ts +14 -0
  101. package/dist/design-canvas-react/components/glyphs.d.ts +46 -0
  102. package/dist/design-canvas-react/components/icon-button.d.ts +22 -0
  103. package/dist/design-canvas-react/components/index.d.ts +27 -0
  104. package/dist/design-canvas-react/components/layer-tree.d.ts +34 -0
  105. package/dist/design-canvas-react/components/ruler-math.d.ts +78 -0
  106. package/dist/design-canvas-react/components/transform-math.d.ts +168 -0
  107. package/dist/{command-stack-TNPWJCzW.d.ts → design-canvas-react/contracts.d.ts} +16 -63
  108. package/dist/design-canvas-react/engine/command-stack.d.ts +43 -0
  109. package/dist/design-canvas-react/engine/commands.d.ts +154 -0
  110. package/dist/design-canvas-react/engine/selection.d.ts +48 -0
  111. package/dist/design-canvas-react/engine/snap.d.ts +24 -0
  112. package/dist/design-canvas-react/engine/zoom-pan.d.ts +18 -0
  113. package/dist/design-canvas-react/engine.d.ts +21 -399
  114. package/dist/design-canvas-react/export-math.d.ts +104 -0
  115. package/dist/design-canvas-react/export.d.ts +89 -0
  116. package/dist/design-canvas-react/index.d.ts +16 -586
  117. package/dist/design-canvas-react/insert-builders.d.ts +61 -0
  118. package/dist/design-canvas-react/lazy.d.ts +21 -6
  119. package/dist/documents/docx.d.ts +50 -0
  120. package/dist/documents/extract.d.ts +87 -0
  121. package/dist/documents/index.d.ts +26 -232
  122. package/dist/documents/media-type.d.ts +33 -0
  123. package/dist/documents/pdf-inspector.d.ts +5 -9
  124. package/dist/{types-DrBidf3O.d.ts → documents/types.d.ts} +13 -15
  125. package/dist/documents/zip.d.ts +56 -0
  126. package/dist/eval/calibration.d.ts +106 -0
  127. package/dist/eval/index.d.ts +8 -116
  128. package/dist/eval-campaign/index.d.ts +11 -12
  129. package/dist/{trust-gate-Dcm5xSva.d.ts → eval-campaign/trust-gate.d.ts} +5 -9
  130. package/dist/forms/blank.d.ts +48 -0
  131. package/dist/forms/fill.d.ts +105 -0
  132. package/dist/forms/index.d.ts +58 -332
  133. package/dist/forms/registry.d.ts +115 -0
  134. package/dist/forms/verify.d.ts +58 -0
  135. package/dist/harness/index.d.ts +21 -19
  136. package/dist/intakes/api.d.ts +5 -11
  137. package/dist/{completion-CvcNUz07.d.ts → intakes/completion.d.ts} +7 -11
  138. package/dist/intakes/context-sufficiency.d.ts +113 -0
  139. package/dist/intakes/drizzle/schema.d.ts +338 -0
  140. package/dist/intakes/drizzle/store.d.ts +75 -0
  141. package/dist/intakes/drizzle.d.ts +12 -391
  142. package/dist/intakes/index.d.ts +23 -113
  143. package/dist/{model-C8U0HZxL.d.ts → intakes/model.d.ts} +15 -17
  144. package/dist/intakes-react/components/BrandMark.d.ts +10 -0
  145. package/dist/intakes-react/components/IntakeInterview.d.ts +15 -0
  146. package/dist/intakes-react/components/index.d.ts +1 -0
  147. package/dist/intakes-react/contracts.d.ts +42 -0
  148. package/dist/intakes-react/index.d.ts +12 -47
  149. package/dist/intakes-react/lazy.d.ts +9 -8
  150. package/dist/integrations/index.d.ts +10 -12
  151. package/dist/{contract-OxG_jVMx.d.ts → interactions/contract.d.ts} +40 -42
  152. package/dist/interactions/index.d.ts +16 -256
  153. package/dist/interactions/route.d.ts +151 -0
  154. package/dist/interactions/sidecar.d.ts +100 -0
  155. package/dist/knowledge/index.d.ts +7 -11
  156. package/dist/knowledge-loop/index.d.ts +13 -20
  157. package/dist/legibility/checks/empty-state.d.ts +59 -0
  158. package/dist/legibility/checks/reachability.d.ts +103 -0
  159. package/dist/legibility/checks/silent-failure.d.ts +57 -0
  160. package/dist/legibility/checks/success.d.ts +38 -0
  161. package/dist/legibility/checks/vocabulary.d.ts +65 -0
  162. package/dist/legibility/cli-args.d.ts +30 -0
  163. package/dist/legibility/cli.d.ts +25 -0
  164. package/dist/legibility/index.d.ts +10 -530
  165. package/dist/legibility/report.d.ts +22 -0
  166. package/dist/legibility/scan.d.ts +29 -0
  167. package/dist/legibility/source.d.ts +132 -0
  168. package/dist/legibility/suppress.d.ts +36 -0
  169. package/dist/legibility/types.d.ts +168 -0
  170. package/dist/legibility/walk-sources.d.ts +21 -0
  171. package/dist/{agent-activity-C8ZG0F0M.d.ts → missions/agent-activity.d.ts} +3 -5
  172. package/dist/missions/engine.d.ts +251 -0
  173. package/dist/missions/events.d.ts +195 -0
  174. package/dist/missions/index.d.ts +12 -765
  175. package/dist/missions/plan-parse.d.ts +50 -0
  176. package/dist/missions/service.d.ts +265 -0
  177. package/dist/{failover-D-3UXXTb.d.ts → model-resolution/failover.d.ts} +10 -12
  178. package/dist/model-resolution/index.d.ts +15 -18
  179. package/dist/object-store/index.d.ts +15 -17
  180. package/dist/openui/action.d.ts +54 -0
  181. package/dist/openui/authoring.d.ts +25 -0
  182. package/dist/openui/index.d.ts +24 -206
  183. package/dist/openui/route.d.ts +124 -0
  184. package/dist/openui/segments.d.ts +71 -0
  185. package/dist/openui/values.d.ts +82 -0
  186. package/dist/openui-react/index.d.ts +9 -13
  187. package/dist/peer-floors/check.d.ts +9 -190
  188. package/dist/peer-floors/cli.d.ts +2 -3
  189. package/dist/peer-floors/dependency-source.d.ts +178 -0
  190. package/dist/plans/index.d.ts +13 -14
  191. package/dist/{billing-BuNlaKlE.d.ts → platform/billing.d.ts} +28 -32
  192. package/dist/platform/guards.d.ts +79 -0
  193. package/dist/platform/hub.d.ts +107 -0
  194. package/dist/platform/index.d.ts +7 -112
  195. package/dist/{sso-Cm00S61u.d.ts → platform/sso.d.ts} +15 -97
  196. package/dist/preflight/cli.d.ts +3 -6
  197. package/dist/preflight/index.d.ts +16 -18
  198. package/dist/preset-cloudflare/headers.d.ts +12 -0
  199. package/dist/preset-cloudflare/index.d.ts +22 -74
  200. package/dist/preset-cloudflare/workflow-instance.d.ts +35 -0
  201. package/dist/profile/budget.d.ts +72 -0
  202. package/dist/profile/fingerprint.d.ts +65 -0
  203. package/dist/profile/index.d.ts +27 -19
  204. package/dist/prompt/index.d.ts +3 -5
  205. package/dist/record/drizzle/schema.d.ts +488 -0
  206. package/dist/record/drizzle/store.d.ts +224 -0
  207. package/dist/record/drizzle.d.ts +10 -679
  208. package/dist/record/fold.d.ts +99 -0
  209. package/dist/record/index.d.ts +13 -13
  210. package/dist/{fold-DACU7gtf.d.ts → record/model.d.ts} +22 -124
  211. package/dist/record/ulid.d.ts +12 -0
  212. package/dist/redact/index.d.ts +14 -16
  213. package/dist/run/index.d.ts +11 -16
  214. package/dist/runtime/agent.d.ts +23 -0
  215. package/dist/runtime/certified-delivery.d.ts +57 -0
  216. package/dist/runtime/index.d.ts +17 -367
  217. package/dist/runtime/loop.d.ts +58 -0
  218. package/dist/runtime/model-catalog.d.ts +103 -0
  219. package/dist/{model-CdCDfBA9.d.ts → runtime/model.d.ts} +25 -27
  220. package/dist/runtime/openai-stream.d.ts +126 -0
  221. package/dist/runtime/surface-profile.d.ts +115 -0
  222. package/dist/sandbox/binary-read.d.ts +63 -0
  223. package/dist/sandbox/diagnostics.d.ts +69 -0
  224. package/dist/sandbox/index.d.ts +103 -1085
  225. package/dist/sandbox/model.d.ts +179 -0
  226. package/dist/sandbox/outcome.d.ts +10 -0
  227. package/dist/sandbox/prewarm-claim-d1.d.ts +80 -0
  228. package/dist/sandbox/prewarm.d.ts +193 -0
  229. package/dist/sandbox/recovery.d.ts +216 -0
  230. package/dist/sandbox/terminal-connection.d.ts +145 -0
  231. package/dist/sandbox/workspace-sandbox-manager.d.ts +44 -0
  232. package/dist/sequences/apply.d.ts +54 -0
  233. package/dist/sequences/captions.d.ts +91 -0
  234. package/dist/sequences/drizzle-store.d.ts +36 -0
  235. package/dist/sequences/drizzle.d.ts +7 -1252
  236. package/dist/sequences/exports.d.ts +138 -0
  237. package/dist/sequences/index.d.ts +19 -340
  238. package/dist/sequences/mcp-entry.d.ts +15 -0
  239. package/dist/sequences/mcp-handler.d.ts +39 -0
  240. package/dist/sequences/mcp-tools.d.ts +47 -0
  241. package/dist/{store-B7LLlk9p.d.ts → sequences/model.d.ts} +26 -110
  242. package/dist/sequences/operations.d.ts +126 -0
  243. package/dist/sequences/schema.d.ts +1231 -0
  244. package/dist/sequences/store.d.ts +81 -0
  245. package/dist/sequences/validate.d.ts +98 -0
  246. package/dist/sequences-react/components/BrandMark.d.ts +10 -0
  247. package/dist/sequences-react/components/PreviewCanvas.d.ts +26 -0
  248. package/dist/sequences-react/components/SnapIndicatorLine.d.ts +11 -0
  249. package/dist/sequences-react/components/TimelineClipChip.d.ts +80 -0
  250. package/dist/sequences-react/components/TimelineEditor.d.ts +44 -0
  251. package/dist/sequences-react/components/TimelineEmptyState.d.ts +21 -0
  252. package/dist/sequences-react/components/TimelineGhostLanes.d.ts +14 -0
  253. package/dist/sequences-react/components/TimelinePlayhead.d.ts +11 -0
  254. package/dist/sequences-react/components/TimelineRuler.d.ts +16 -0
  255. package/dist/sequences-react/components/TimelineSmallScreenGate.d.ts +12 -0
  256. package/dist/sequences-react/components/TimelineTrackRow.d.ts +51 -0
  257. package/dist/sequences-react/components/ZoomControl.d.ts +15 -0
  258. package/dist/sequences-react/components/composite-command.d.ts +8 -0
  259. package/dist/sequences-react/components/glyphs.d.ts +26 -0
  260. package/dist/sequences-react/components/index.d.ts +31 -0
  261. package/dist/sequences-react/components/interaction-math.d.ts +103 -0
  262. package/dist/sequences-react/contracts.d.ts +187 -0
  263. package/dist/sequences-react/engine/command-stack.d.ts +18 -0
  264. package/dist/sequences-react/engine/commands.d.ts +146 -0
  265. package/dist/sequences-react/engine/playback.d.ts +18 -0
  266. package/dist/sequences-react/engine/snap.d.ts +29 -0
  267. package/dist/sequences-react/engine/zoom.d.ts +29 -0
  268. package/dist/sequences-react/index.d.ts +20 -880
  269. package/dist/sequences-react/lazy.d.ts +8 -0
  270. package/dist/sequences-react/media/frame-provider.d.ts +70 -0
  271. package/dist/sequences-react/media/transcription.d.ts +33 -0
  272. package/dist/sequences-react/media/waveform.d.ts +34 -0
  273. package/dist/session-shell/index.d.ts +31 -204
  274. package/dist/session-shell/nav-guard.d.ts +170 -0
  275. package/dist/session-shell/path.d.ts +19 -0
  276. package/dist/signoff/cli.d.ts +4 -7
  277. package/dist/signoff/config.d.ts +12 -0
  278. package/dist/signoff/exec.d.ts +44 -0
  279. package/dist/signoff/index.d.ts +56 -14
  280. package/dist/signoff/invoked-as-script.d.ts +25 -0
  281. package/dist/signoff/node-version.d.ts +50 -0
  282. package/dist/signoff/proof-attach.d.ts +88 -0
  283. package/dist/signoff/proof-cli.d.ts +1 -0
  284. package/dist/signoff/proof-fixture.d.ts +13 -0
  285. package/dist/signoff/proof-from-report.d.ts +22 -0
  286. package/dist/signoff/proof-git.d.ts +57 -0
  287. package/dist/signoff/proof-record.d.ts +202 -0
  288. package/dist/signoff/proof-verify.d.ts +103 -0
  289. package/dist/signoff/proof.d.ts +35 -310
  290. package/dist/signoff/report.d.ts +7 -0
  291. package/dist/{run-D80hoLKh.d.ts → signoff/run.d.ts} +3 -6
  292. package/dist/signoff/schedule.d.ts +55 -0
  293. package/dist/signoff/seeds.d.ts +50 -0
  294. package/dist/signoff/store.d.ts +22 -0
  295. package/dist/{types-Bd6uW9vQ.d.ts → signoff/types.d.ts} +15 -17
  296. package/dist/signoff/workflow-pin.d.ts +56 -0
  297. package/dist/signoff/workspace.d.ts +40 -0
  298. package/dist/skills/index.d.ts +28 -32
  299. package/dist/skills-placement/index.d.ts +7 -11
  300. package/dist/spend/budget.d.ts +123 -0
  301. package/dist/spend/ceiling.d.ts +51 -0
  302. package/dist/spend/cli-args.d.ts +20 -0
  303. package/dist/spend/cli.d.ts +1 -0
  304. package/dist/spend/fixtures/incident-parked-time.d.ts +55 -0
  305. package/dist/spend/index.d.ts +38 -1144
  306. package/dist/spend/liveness.d.ts +131 -0
  307. package/dist/spend/ownership.d.ts +87 -0
  308. package/dist/spend/reconcile.d.ts +109 -0
  309. package/dist/spend/reference.d.ts +42 -0
  310. package/dist/spend/report.d.ts +12 -0
  311. package/dist/spend/store.d.ts +123 -0
  312. package/dist/spend/types.d.ts +466 -0
  313. package/dist/store/index.d.ts +10 -12
  314. package/dist/stories/app-shell/fixtures.d.ts +43 -0
  315. package/dist/stories/app-shell/shell.d.ts +81 -0
  316. package/dist/stories/assistant/fixtures.d.ts +73 -0
  317. package/dist/stories/chat/fixtures.d.ts +70 -0
  318. package/dist/stories/chat/markdown.d.ts +11 -0
  319. package/dist/stories/chat/run-drill-in.d.ts +19 -0
  320. package/dist/stories/chat-controls/fixtures.d.ts +116 -0
  321. package/dist/stories/design-canvas/fixtures.d.ts +57 -0
  322. package/dist/stories/fixtures/canvas.d.ts +10 -0
  323. package/dist/stories/fixtures/catalog.d.ts +7 -0
  324. package/dist/stories/fixtures/chat.d.ts +39 -0
  325. package/dist/stories/fixtures/index.d.ts +4 -0
  326. package/dist/stories/fixtures/sequences.d.ts +17 -0
  327. package/dist/stories/panels/fixtures.d.ts +63 -0
  328. package/dist/stories/sequences/fixtures.d.ts +30 -0
  329. package/dist/stories/studio/fixtures.d.ts +22 -0
  330. package/dist/stream/index.d.ts +10 -56
  331. package/dist/{stream-normalizer-DKRxyVlZ.d.ts → stream/stream-normalizer.d.ts} +23 -26
  332. package/dist/{turn-buffer-COMQUwO2.d.ts → stream/turn-buffer.d.ts} +21 -23
  333. package/dist/stream/turn-identity.d.ts +49 -0
  334. package/dist/studio/generation.d.ts +179 -0
  335. package/dist/studio/index.d.ts +12 -181
  336. package/dist/studio-react/avatar-composer.d.ts +8 -0
  337. package/dist/studio-react/composer-hero.d.ts +12 -0
  338. package/dist/studio-react/composer-shell.d.ts +18 -0
  339. package/dist/studio-react/generation-card.d.ts +9 -0
  340. package/dist/studio-react/generation-detail-modal.d.ts +11 -0
  341. package/dist/studio-react/generation-detail.d.ts +6 -0
  342. package/dist/studio-react/generation-grid.d.ts +15 -0
  343. package/dist/studio-react/image-composer.d.ts +8 -0
  344. package/dist/studio-react/index.d.ts +32 -245
  345. package/dist/studio-react/library-drawer.d.ts +12 -0
  346. package/dist/studio-react/library-panel.d.ts +15 -0
  347. package/dist/studio-react/publish-package-composer.d.ts +18 -0
  348. package/dist/studio-react/result-canvas.d.ts +6 -0
  349. package/dist/studio-react/speech-composer.d.ts +4 -0
  350. package/dist/studio-react/studio-header.d.ts +5 -0
  351. package/dist/studio-react/studio-sheet.d.ts +12 -0
  352. package/dist/studio-react/studio-workspace.d.ts +23 -0
  353. package/dist/studio-react/transcription-composer.d.ts +12 -0
  354. package/dist/studio-react/type-config.d.ts +11 -0
  355. package/dist/studio-react/use-studio-generations.d.ts +20 -0
  356. package/dist/studio-react/video-composer.d.ts +10 -0
  357. package/dist/tangle/index.d.ts +7 -9
  358. package/dist/teams/drizzle/access.d.ts +82 -0
  359. package/dist/{invitations-schema-_fI7HkJP.d.ts → teams/drizzle/invitations-schema.d.ts} +39 -27
  360. package/dist/teams/drizzle/personal-organization.d.ts +41 -0
  361. package/dist/{access-490O6aOU.d.ts → teams/drizzle/schema.d.ts} +57 -122
  362. package/dist/teams/drizzle.d.ts +12 -44
  363. package/dist/teams/index.d.ts +20 -44
  364. package/dist/teams/invitations-api.d.ts +17 -21
  365. package/dist/{invitations-DoYMvXea.d.ts → teams/invitations.d.ts} +14 -18
  366. package/dist/teams/invite.d.ts +42 -0
  367. package/dist/teams/members-api.d.ts +12 -16
  368. package/dist/teams/resend.d.ts +3 -13
  369. package/dist/{roles-B4nU3jDi.d.ts → teams/roles.d.ts} +18 -20
  370. package/dist/teams-react/components/BrandMark.d.ts +10 -0
  371. package/dist/teams-react/components/InvitationsPanel.d.ts +13 -0
  372. package/dist/teams-react/components/InviteAcceptPage.d.ts +10 -0
  373. package/dist/teams-react/components/MembersPanel.d.ts +14 -0
  374. package/dist/teams-react/components/RoleSelect.d.ts +17 -0
  375. package/dist/teams-react/components/index.d.ts +3 -0
  376. package/dist/teams-react/contracts.d.ts +134 -0
  377. package/dist/teams-react/index.d.ts +12 -143
  378. package/dist/teams-react/lazy.d.ts +11 -11
  379. package/dist/test-setup.d.ts +1 -0
  380. package/dist/theme/index.d.ts +6 -104
  381. package/dist/theme/tailwind-preset.d.ts +1 -2
  382. package/dist/theme/theme.d.ts +106 -0
  383. package/dist/theme-contract/cli.d.ts +21 -0
  384. package/dist/theme-contract/index.d.ts +4 -6
  385. package/dist/{auth-BYtiazA4.d.ts → tools/auth.d.ts} +8 -11
  386. package/dist/tools/capability.d.ts +54 -0
  387. package/dist/tools/dispatch.d.ts +37 -0
  388. package/dist/tools/errors.d.ts +8 -0
  389. package/dist/tools/gating.d.ts +62 -0
  390. package/dist/tools/http.d.ts +27 -0
  391. package/dist/tools/index.d.ts +12 -217
  392. package/dist/{mcp-rpc-DYwPlYbZ.d.ts → tools/mcp-rpc.d.ts} +7 -9
  393. package/dist/{mcp-xxoZZfor.d.ts → tools/mcp.d.ts} +14 -16
  394. package/dist/tools/openai.d.ts +28 -0
  395. package/dist/tools/registry.d.ts +39 -0
  396. package/dist/tools/runtime.d.ts +22 -0
  397. package/dist/{types-B25Mib1r.d.ts → tools/types.d.ts} +15 -83
  398. package/dist/{flow-types-CJxEmaRy.d.ts → trace/flow-types.d.ts} +2 -4
  399. package/dist/trace/index.d.ts +11 -148
  400. package/dist/trace/mission-flow.d.ts +82 -0
  401. package/dist/trace/mission-trace.d.ts +52 -0
  402. package/dist/turn-health/classify.d.ts +207 -0
  403. package/dist/turn-health/index.d.ts +29 -637
  404. package/dist/turn-health/lifecycle.d.ts +75 -0
  405. package/dist/turn-health/sink.d.ts +122 -0
  406. package/dist/turn-health/sweep.d.ts +245 -0
  407. package/dist/turn-stream/adapters.d.ts +257 -0
  408. package/dist/turn-stream/core.d.ts +293 -0
  409. package/dist/turn-stream/do.d.ts +144 -0
  410. package/dist/turn-stream/index.d.ts +62 -738
  411. package/dist/turn-stream/memory.d.ts +41 -0
  412. package/dist/vault/ConfirmDialog.d.ts +22 -0
  413. package/dist/vault/VaultPane.d.ts +15 -0
  414. package/dist/{VaultPane-BDP6SB_K.d.ts → vault/contracts.d.ts} +15 -22
  415. package/dist/vault/index.d.ts +15 -22
  416. package/dist/vault/lazy.d.ts +9 -7
  417. package/dist/vault/server.d.ts +8 -10
  418. package/dist/web/free-route-limit.d.ts +187 -0
  419. package/dist/web/index.d.ts +15 -207
  420. package/dist/{rate-limit-BOVmJRXZ.d.ts → web/rate-limit.d.ts} +3 -5
  421. package/dist/web-react/agent-session-controls.d.ts +105 -0
  422. package/dist/web-react/async/async-view.d.ts +69 -0
  423. package/dist/web-react/async/index.d.ts +13 -305
  424. package/dist/web-react/async/state.d.ts +107 -0
  425. package/dist/web-react/async/use-async-resource.d.ts +41 -0
  426. package/dist/web-react/async/use-confirmed-mutation.d.ts +90 -0
  427. package/dist/web-react/brand-mark.d.ts +11 -0
  428. package/dist/web-react/chat-attachments.d.ts +21 -0
  429. package/dist/web-react/chat-composer.d.ts +174 -0
  430. package/dist/web-react/chat-interactions.d.ts +1 -0
  431. package/dist/web-react/chat-mentions.d.ts +48 -0
  432. package/dist/web-react/chat-stream.d.ts +106 -0
  433. package/dist/web-react/class-names.d.ts +10 -0
  434. package/dist/web-react/controls.d.ts +265 -0
  435. package/dist/web-react/durable-chat-cards.d.ts +40 -0
  436. package/dist/web-react/durable-interaction-submit.d.ts +22 -0
  437. package/dist/web-react/durable-plan-card.d.ts +13 -0
  438. package/dist/web-react/durable-plan-flow.d.ts +77 -0
  439. package/dist/web-react/harness-glyphs.d.ts +28 -0
  440. package/dist/web-react/index.d.ts +80 -2347
  441. package/dist/web-react/inert.d.ts +39 -0
  442. package/dist/web-react/insight-card.d.ts +203 -0
  443. package/dist/web-react/interaction-card-support.d.ts +115 -0
  444. package/dist/web-react/interaction-plan-card.d.ts +39 -0
  445. package/dist/web-react/interaction-question-card.d.ts +100 -0
  446. package/dist/web-react/message-attachments.d.ts +56 -0
  447. package/dist/web-react/mission-activity.d.ts +96 -0
  448. package/dist/web-react/motion.d.ts +43 -0
  449. package/dist/web-react/provenance-model.d.ts +195 -0
  450. package/dist/web-react/provenance.d.ts +82 -0
  451. package/dist/web-react/provider-logo.d.ts +14 -0
  452. package/dist/web-react/record-grid-model.d.ts +257 -0
  453. package/dist/web-react/record-grid.d.ts +108 -0
  454. package/dist/web-react/sandbox-terminal.d.ts +90 -0
  455. package/dist/web-react/seat-paywall.d.ts +47 -0
  456. package/dist/web-react/session-history.d.ts +196 -0
  457. package/dist/web-react/smooth-text.d.ts +29 -0
  458. package/dist/web-react/sparkline.d.ts +150 -0
  459. package/dist/web-react/terminal.d.ts +1 -92
  460. package/dist/web-react/use-chat-interactions.d.ts +78 -0
  461. package/dist/web-react/use-composer-attachments.d.ts +111 -0
  462. package/dist/web-react/use-file-mentions.d.ts +94 -0
  463. package/dist/web-react/work-product.d.ts +105 -0
  464. package/dist/work-product/claim-support.d.ts +288 -0
  465. package/dist/work-product/index.d.ts +16 -849
  466. package/dist/work-product/provenance.d.ts +61 -0
  467. package/dist/{queue-VTBA5ONX.d.ts → work-product/queue.d.ts} +10 -12
  468. package/dist/work-product/quote.d.ts +139 -0
  469. package/dist/work-product/route.d.ts +88 -0
  470. package/dist/work-product/service.d.ts +123 -0
  471. package/dist/work-product/tools.d.ts +144 -0
  472. package/dist/{types-CCeYywdS.d.ts → work-product/types.d.ts} +29 -31
  473. package/dist/work-product-react/index.d.ts +19 -8
  474. package/dist/workspace-react/index.d.ts +8 -11
  475. package/package.json +5 -4
  476. package/dist/agent-session-controls-CmlXwp_H.d.ts +0 -384
  477. package/dist/apply-6wlMOLf8.d.ts +0 -280
  478. package/dist/attachment-validation-BfJDBU1g.d.ts +0 -261
  479. package/dist/budget-BOucfcb_.d.ts +0 -142
  480. package/dist/values-C7RidJuI.d.ts +0 -156
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Provenance stamping — the backtest spine. Every version of every work
3
+ * product carries `profileHash + runId + servingModels`, stamped at the two
4
+ * honest moments:
5
+ *
6
+ * 1. At dispatch, the product route composes the turn's profile and computes
7
+ * agent-eval's `agentProfileHash(profile)` — the SAME hash that keys the
8
+ * app's scorecard cells — and closes it (plus runId/sessionId) into the
9
+ * `provenance` seam `buildWorkProductTools` receives, so the model can
10
+ * neither omit nor forge it.
11
+ * 2. At turn completion, the route's existing lifecycle seam calls
12
+ * {@link finalizeWorkProductProvenance}: serving model and cost come from
13
+ * the usage receipt, because only the completed turn knows what actually
14
+ * served. `servingModels` is honestly EMPTY until then.
15
+ *
16
+ * The trust bridge ({@link workProductTrustInputs}) maps judge-sourced
17
+ * quality verdicts into `/eval-campaign`'s `trustVerdicts()` input with
18
+ * type-only imports — products call `trustVerdicts` from
19
+ * `@tangle-network/agent-app/eval-campaign` (which they already import for
20
+ * their ensemble loop). Deliberately NOT a value re-export here: it would put
21
+ * agent-eval's runtime on `/work-product`'s import path and drag the eval
22
+ * engine into every product worker bundle.
23
+ */
24
+ import type { JudgeVerdict } from '@tangle-network/agent-eval';
25
+ import type { TrustItem } from '../eval-campaign/trust-gate';
26
+ import type { WorkProductProvenance, WorkProductRecord, WorkProductStorePort } from './types';
27
+ export type { TrustItem };
28
+ /** The dispatch-time provenance closure's output: everything the route knows
29
+ * before the turn completes. */
30
+ export type WorkProductProvenanceBase = Omit<WorkProductProvenance, 'servingModels' | 'producedAt'>;
31
+ /** Stamp a full provenance from the dispatch-time base. `servingModels` starts
32
+ * empty (honestly absent — never guessed) until the completion back-fill. */
33
+ export declare function stampProvenance(base: WorkProductProvenanceBase, now?: () => number): WorkProductProvenance;
34
+ /** Completion receipt for one run, from the turn's usage/lifecycle seam. */
35
+ export interface FinalizeWorkProductProvenanceInput {
36
+ workspaceId: string;
37
+ /** The chat turnId / mission-step run id the records were stamped with. */
38
+ runId: string;
39
+ /** What actually served, from the usage receipt / serving-model header. */
40
+ servingModels: readonly string[];
41
+ costUsd?: number;
42
+ logger?: Pick<Console, 'warn'>;
43
+ }
44
+ /**
45
+ * Back-fill `servingModels`/`costUsd` onto every record (and its history
46
+ * entries) stamped with `runId` — wire it into the chat route's existing
47
+ * `lifecycle.onTurnComplete` seam; no new hook. Returns the updated records.
48
+ * A CAS miss on one record is logged and skipped (the next completion or a
49
+ * re-read re-applies); it never throws mid-fleet.
50
+ */
51
+ export declare function finalizeWorkProductProvenance(store: WorkProductStorePort, input: FinalizeWorkProductProvenanceInput): Promise<WorkProductRecord[]>;
52
+ /**
53
+ * Trust-gate bridge: one `TrustItem` per work product whose production
54
+ * quality was scored by the product's eval-campaign ensemble. `verdictsFor`
55
+ * returns the per-judge raw verdicts the product retained for a record (the
56
+ * same verdicts `aggregateJudgeVerdicts` reduces); records without verdicts
57
+ * are omitted. Feed the result to `/eval-campaign`'s `trustVerdicts()` —
58
+ * an untrusted verdict renders as "quality: unverified", never a naked
59
+ * number. Zero statistics code here: pure mapping.
60
+ */
61
+ export declare function workProductTrustInputs<D extends string = string>(records: readonly WorkProductRecord[], verdictsFor: (record: WorkProductRecord) => readonly JudgeVerdict<D>[] | undefined): TrustItem<D>[];
@@ -1,5 +1,3 @@
1
- import { a as WorkProductRef, b as WorkProductProvenance, c as WorkProductRecord } from './types-CCeYywdS.js';
2
-
3
1
  /**
4
2
  * The review queue is a PROJECTION, not a store — a client-safe pure fold of
5
3
  * existing sources into queue items (the `/missions` events.ts pattern: pure
@@ -15,10 +13,10 @@ import { a as WorkProductRef, b as WorkProductProvenance, c as WorkProductRecord
15
13
  * - ready_for_review / changes_requested / approved / blocked: read directly
16
14
  * off `WorkProductRecord.status` (blocked surfaces its unresolved count)
17
15
  */
18
-
19
- type ReviewQueueState = 'intake' | 'missing_info' | 'working' | 'ready_for_review' | 'changes_requested' | 'approved' | 'blocked';
16
+ import { isWorkProductStatus, type WorkProductProvenance, type WorkProductRecord, type WorkProductRef } from './types';
17
+ export type ReviewQueueState = 'intake' | 'missing_info' | 'working' | 'ready_for_review' | 'changes_requested' | 'approved' | 'blocked';
20
18
  /** One row of the review queue projection for an engagement scope */
21
- interface ReviewQueueItem {
19
+ export interface ReviewQueueItem {
22
20
  scopeKey: string;
23
21
  state: ReviewQueueState;
24
22
  threadId: string | null;
@@ -38,20 +36,20 @@ interface ReviewQueueItem {
38
36
  }
39
37
  /** An engagement-scoped chat thread — the intake candidate source. Products
40
38
  * that scope threads already carry a scopeKey-style column. */
41
- interface ReviewQueueThread {
39
+ export interface ReviewQueueThread {
42
40
  scopeKey: string;
43
41
  threadId: string;
44
42
  updatedAt: number;
45
43
  }
46
44
  /** A pending `/interactions` ask on a thread (from the existing list
47
45
  * endpoint) — the missing_info source. */
48
- interface ReviewQueuePendingAsk {
46
+ export interface ReviewQueuePendingAsk {
49
47
  threadId: string;
50
48
  interactionId: string;
51
49
  title: string;
52
50
  }
53
51
  /** Existing-source inputs the projection folds — no new stores */
54
- interface ReviewQueueInputs {
52
+ export interface ReviewQueueInputs {
55
53
  workProducts: readonly WorkProductRecord[];
56
54
  /** Engagement threads with no work product yet → intake items. */
57
55
  threads?: readonly ReviewQueueThread[];
@@ -59,10 +57,10 @@ interface ReviewQueueInputs {
59
57
  pendingAsks?: readonly ReviewQueuePendingAsk[];
60
58
  }
61
59
  /** Fold the existing sources into queue items, newest first. */
62
- declare function projectReviewQueue(inputs: ReviewQueueInputs): ReviewQueueItem[];
60
+ export declare function projectReviewQueue(inputs: ReviewQueueInputs): ReviewQueueItem[];
63
61
  /** Re-validate one JSON-boundary row into a queue item; null for junk. The
64
62
  * client-side twin of the server projection, for payloads that cross a
65
63
  * fetch boundary. */
66
- declare function parseReviewQueueItem(raw: unknown): ReviewQueueItem | null;
67
-
68
- export { type ReviewQueueInputs as R, type ReviewQueueItem as a, type ReviewQueuePendingAsk as b, type ReviewQueueState as c, type ReviewQueueThread as d, projectReviewQueue as e, parseReviewQueueItem as p };
64
+ export declare function parseReviewQueueItem(raw: unknown): ReviewQueueItem | null;
65
+ /** Convenience guard used when a status string crosses a JSON boundary. */
66
+ export { isWorkProductStatus };
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Verbatim quote verification — the lineage gate.
3
+ *
4
+ * An evidence `locator.quote` is the reviewer's click target: it must land on
5
+ * text that is actually in the document the entry names. Nothing here is
6
+ * fuzzy. The only latitude is representational — the same characters written
7
+ * differently by a PDF extractor, a text transcription, or a model repeating
8
+ * what it read: Unicode compatibility forms, curly quotes, the several dash
9
+ * codepoints, non-breaking spaces, and run-length whitespace. A quote that
10
+ * still does not occur after that is not a formatting difference; it is text
11
+ * the document does not contain.
12
+ *
13
+ * Deliberately NOT tolerated, because each one re-opens the hole this closes:
14
+ * case (a quote is a quote), token subsets, edit distance, word-overlap
15
+ * scoring, and "the numbers match" heuristics. A fabricated quote and a real
16
+ * one differ by exactly the thing a fuzzy matcher forgives.
17
+ */
18
+ /**
19
+ * Fold a string to the form both sides of a quote comparison are measured in.
20
+ * Composition and presentation only: NFKC, one dash, one apostrophe, one
21
+ * double quote, runs of any whitespace to a single space, trimmed. Case is
22
+ * PRESERVED — lowercasing would let "Box 1" match "box 1", and a citation
23
+ * that cannot reproduce capitalization did not read the document.
24
+ */
25
+ export declare function normalizeQuoteText(value: string): string;
26
+ /**
27
+ * Does `quote` occur in `sourceText`? Exact substring first (the common case,
28
+ * and free); the normalized comparison second, for the representational
29
+ * differences above. Nothing else.
30
+ *
31
+ * An empty or whitespace-only quote is NOT a match — it would otherwise be a
32
+ * substring of every document and pass the gate vacuously.
33
+ */
34
+ export declare function sourceContainsQuote(sourceText: string, quote: string): boolean;
35
+ /**
36
+ * Slice a citation out of the source text by character offset — the reason
37
+ * this module exists in its stronger form.
38
+ *
39
+ * Verification above is a REJECTION gate: the model retypes a quote and the
40
+ * shell refuses it when the characters do not occur. That gate is correct and
41
+ * it works, but a model that reproduces a line character-for-character only
42
+ * some of the time cannot USE it — every miss is a refusal, and the package
43
+ * ends up with no lineage at all rather than false lineage. A measured 9 of 59
44
+ * on the live tax surface is what "some of the time" meant in practice.
45
+ *
46
+ * A span inverts it. The model names two integers into text it just read; the
47
+ * PLATFORM produces the quote from the bytes it already holds. There is no
48
+ * retyping step to get wrong, so a fabricated quote is not rejected — it is
49
+ * unrepresentable. `sourceContainsQuote(text, sliceSourceSpan(text, span))` is
50
+ * true for every span this function returns, by construction.
51
+ *
52
+ * Offsets index the SAME string the product's document-reading tool pages
53
+ * with an offset, which is the same string its `readSourceText` seam returns.
54
+ * That is the one contract a product must keep; violate it and spans point at
55
+ * the wrong characters (still real characters of that document — never
56
+ * invented text, but the wrong line).
57
+ *
58
+ * Half-open `[start, end)`, matching `String.prototype.slice` and the
59
+ * `offset`/`offset + text.length` window a paged read already reports.
60
+ */
61
+ export type SourceSpanFailure = {
62
+ reason: 'not_integer';
63
+ field: 'start' | 'end';
64
+ } | {
65
+ reason: 'negative';
66
+ field: 'start' | 'end';
67
+ } | {
68
+ reason: 'inverted';
69
+ } | {
70
+ reason: 'out_of_range';
71
+ totalChars: number;
72
+ } | {
73
+ reason: 'blank';
74
+ };
75
+ export type SourceSpanResult = {
76
+ ok: true;
77
+ quote: string;
78
+ } | {
79
+ ok: false;
80
+ failure: SourceSpanFailure;
81
+ };
82
+ /**
83
+ * Locate the line containing `value` and return it as a span — the citation
84
+ * form for a model that cannot count characters.
85
+ *
86
+ * Measured on production (tax session 135b7cc3, gpt-4.1-mini): given the
87
+ * document text and told exactly which line to cite, the model produced
88
+ * offsets that landed on the WRONG line four times out of four, then missed
89
+ * again on a second attempt after being shown the text its offsets had
90
+ * selected. Character arithmetic is not something this model class does.
91
+ *
92
+ * What it DOES do reliably is read the value: all four `claim` fields in that
93
+ * same run were correct to the cent. So the model names the value it read and
94
+ * the PLATFORM finds it. Both failure modes close at once —
95
+ *
96
+ * - the quote cannot be invented, because the platform slices it;
97
+ * - the span cannot be mis-addressed, because the platform computed it from
98
+ * a needle it PROVED occurs in the text.
99
+ *
100
+ * A needle that is not in the document is refused, which is the same fail-loud
101
+ * posture as a quote that does not occur — and correctly so: the model is
102
+ * asserting the document says something it does not.
103
+ *
104
+ * The cited span is the whole LINE, not the needle: "128,450.00" alone is not
105
+ * a click target a reviewer can judge, whereas the line it sits on says what
106
+ * the number IS. Number-only needles are common and deliberately supported.
107
+ */
108
+ export type SourceFindFailure = {
109
+ reason: 'blank_needle';
110
+ } | {
111
+ reason: 'not_found';
112
+ } | {
113
+ reason: 'occurrence_out_of_range';
114
+ found: number;
115
+ } | {
116
+ reason: 'not_distinctive';
117
+ needle: string;
118
+ found: number;
119
+ };
120
+ export type SourceFindResult = {
121
+ ok: true;
122
+ span: {
123
+ start: number;
124
+ end: number;
125
+ };
126
+ quote: string;
127
+ occurrences: number;
128
+ } | {
129
+ ok: false;
130
+ failure: SourceFindFailure;
131
+ };
132
+ export declare function findSourceLine(sourceText: string, needle: string, occurrence?: number): SourceFindResult;
133
+ /** Resolve `[start, end)` against `sourceText`. Every rejection is a caller
134
+ * mistake the model can correct from the paged read it already has, so each
135
+ * carries the discriminator a tool layer turns into a specific message. */
136
+ export declare function sliceSourceSpan(sourceText: string, span: {
137
+ start: number;
138
+ end: number;
139
+ }): SourceSpanResult;
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Framework-neutral work-product review endpoints — the
3
+ * `createInteractionAnswerRoute` factory pattern: web-standard
4
+ * `Request`/`Response`, ONE product-supplied `authorize` seam (session auth,
5
+ * workspace access, reviewer identity, rate limits), everything behind it
6
+ * mechanism. Server-only and subpath-only: never reachable from a client
7
+ * bundle (enforced by the browser-safety test).
8
+ *
9
+ * The verdict endpoint is deliberately NOT a second approval broker: agent
10
+ * asks stay on `/interactions`; this is the REVIEWER's plain authorized
11
+ * verdict on a ready package — one human-in-the-loop channel per direction.
12
+ * A `request_changes` note re-enters chat as the correction turn via the
13
+ * `onVerdict` seam; chat remains the driver surface.
14
+ */
15
+ import { type WorkProductPersistedPart, type WorkProductRecord, type WorkProductStorePort } from './types';
16
+ /** Reviewer verdict wire body for the POST endpoint. */
17
+ export type WorkProductVerdictBody = {
18
+ ok: true;
19
+ id: string;
20
+ verdict: 'approve';
21
+ note?: string;
22
+ } | {
23
+ ok: true;
24
+ id: string;
25
+ verdict: 'request_changes';
26
+ note: string;
27
+ } | {
28
+ ok: false;
29
+ error: string;
30
+ };
31
+ /** Validate the verdict POST body: `{ id, verdict, note? }`; a
32
+ * `request_changes` verdict REQUIRES a non-empty note — the note IS the
33
+ * correction turn the agent works from. */
34
+ export declare function validateWorkProductVerdictBody(body: Record<string, unknown>): WorkProductVerdictBody;
35
+ /** The product seam's verdict for one request: authenticated reviewer +
36
+ * workspace, or a product-authored short-circuit Response (401/403/429…). */
37
+ export type WorkProductRouteAuthorization = {
38
+ ok: true;
39
+ workspaceId: string;
40
+ reviewedBy: string;
41
+ } | {
42
+ ok: false;
43
+ response: Response;
44
+ };
45
+ /** Auth seam arguments carrying the request, the endpoint intent, and the parsed verdict body */
46
+ export interface WorkProductAuthorizeArgs {
47
+ request: Request;
48
+ intent: 'list' | 'detail' | 'verdict';
49
+ /** The parsed, validated POST body (verdict intent only). */
50
+ body?: Record<string, unknown>;
51
+ }
52
+ /** Configuration options assembling the review endpoints from the store and product seams */
53
+ export interface WorkProductRoutesOptions {
54
+ store: WorkProductStorePort;
55
+ /** Authenticate + authorize the caller; the ONLY product access step. */
56
+ authorize: (args: WorkProductAuthorizeArgs) => Promise<WorkProductRouteAuthorization>;
57
+ /** Post-verdict product seam: post the `request_changes` note into the
58
+ * driving chat thread as the correction turn, notify, etc. Runs after the
59
+ * transition commits; a throw is logged, never unwinds the verdict. */
60
+ onVerdict?: (args: {
61
+ record: WorkProductRecord;
62
+ verdict: 'approve' | 'request_changes';
63
+ note?: string;
64
+ reviewedBy: string;
65
+ }) => void | Promise<void>;
66
+ /** Persist/update the transcript anchor part reflecting the new status, so
67
+ * the chat card flips with the verdict. */
68
+ persistAnchorPart?: (part: WorkProductPersistedPart, record: WorkProductRecord) => void | Promise<void>;
69
+ /** Future integration point fired on approval (push to a DMS/CRM/export
70
+ * pipeline). A stub seam by design — export itself stays the product's
71
+ * signed object-store download. */
72
+ onExport?: (record: WorkProductRecord) => void | Promise<void>;
73
+ logger?: Pick<Console, 'warn' | 'error'>;
74
+ now?: () => number;
75
+ }
76
+ /** Assembled review endpoints returning web-standard Responses */
77
+ export interface WorkProductRoutes {
78
+ /** GET — the workspace's records for the queue projection. Optional
79
+ * `?status=a,b` filter. */
80
+ list: (request: Request) => Promise<Response>;
81
+ /** GET — one record by id (404 when absent or outside the workspace). */
82
+ detail: (request: Request, id: string) => Promise<Response>;
83
+ /** POST `{ id, verdict, note? }` — the reviewer verdict: CAS transition +
84
+ * history entry + product seams. 409 when the record is no longer ready. */
85
+ verdict: (request: Request) => Promise<Response>;
86
+ }
87
+ /** Create the work-product review endpoints over the store port and product seams */
88
+ export declare function createWorkProductRoutes(options: WorkProductRoutesOptions): WorkProductRoutes;
@@ -0,0 +1,123 @@
1
+ /**
2
+ * The guarded work-product status machine — the `/missions` service PATTERN
3
+ * (load → validate against a transition table → CAS-write guarded on what was
4
+ * read → audit event) over {@link WorkProductStorePort}. Deliberately NOT a
5
+ * reuse of the mission service: missions' cursor/plan/budget machinery does
6
+ * not apply here, and the six-status review machine is a different contract.
7
+ *
8
+ * Concurrency contract: a scope's draft is driven by a single serialized turn
9
+ * owner, so real contention is rare. The service is the typed guard layer,
10
+ * not a serializer — every mutation re-reads the record and CAS-writes
11
+ * guarded on the `{status, version}` it read. A guard miss surfaces as
12
+ * `{ succeeded: false, conflict: true }` (retryable: re-read and re-apply),
13
+ * never a silent clobber.
14
+ */
15
+ import { type EvidenceEntry, type ExceptionEntry, type QualityCheck, type WorkProductArtifact, type WorkProductAuditEvent, type WorkProductProvenance, type WorkProductRecord, type WorkProductStatus, type WorkProductStorePort } from './types';
16
+ /** Discriminated outcome for guarded operations — `conflict` distinguishes a
17
+ * lost guarded race (retryable) from a logic rejection (illegal edge,
18
+ * missing row — deterministic, never retried). */
19
+ export type WorkProductOutcome<T> = {
20
+ succeeded: true;
21
+ value: T;
22
+ } | {
23
+ succeeded: false;
24
+ error: string;
25
+ conflict: boolean;
26
+ };
27
+ /** Whether a legal edge exists from `from` to `to` in the review machine. */
28
+ export declare function canTransitionWorkProduct(from: WorkProductStatus, to: WorkProductStatus): boolean;
29
+ /** Statuses a work product can never leave. */
30
+ export declare function isWorkProductTerminal(status: WorkProductStatus): boolean;
31
+ /** Define the input required to create a new draft work product row */
32
+ export interface CreateWorkProductInput {
33
+ /** Explicit row id — omit to use the service's generator. The MODEL never
34
+ * supplies ids; this is for deterministic server-side creation. */
35
+ id?: string;
36
+ workspaceId: string;
37
+ threadId: string | null;
38
+ scopeKey: string;
39
+ /** Version this draft will become; default 1. The tool layer passes
40
+ * `last reviewed version + 1` when a scope is re-engaged after approval. */
41
+ version?: number;
42
+ provenance: WorkProductProvenance;
43
+ /** Opaque product-column values handed VERBATIM to the store's insert. */
44
+ extras?: Record<string, unknown>;
45
+ }
46
+ /** Payload for the draft→ready submit transition */
47
+ export interface SubmitWorkProductInput {
48
+ artifact: WorkProductArtifact;
49
+ checks: QualityCheck[];
50
+ provenance: WorkProductProvenance;
51
+ /** Frozen snapshot ref of this version's body for the history entry;
52
+ * defaults to `artifact.path`. */
53
+ artifactPath?: string;
54
+ }
55
+ /** Reviewer verdict payload for the ready→approved / ready→changes_requested transition */
56
+ export interface WorkProductVerdictInput {
57
+ verdict: 'approve' | 'request_changes';
58
+ reviewedBy: string;
59
+ note?: string;
60
+ }
61
+ /** Guarded mutation surface over the work-product store */
62
+ export interface WorkProductService {
63
+ create(input: CreateWorkProductInput): Promise<WorkProductRecord>;
64
+ get(id: string): Promise<WorkProductRecord | null>;
65
+ /** The scope's open accumulator row (`draft`/`blocked`), or null. */
66
+ openDraft(workspaceId: string, scopeKey: string): Promise<WorkProductRecord | null>;
67
+ /** The scope's `changes_requested` row awaiting its correction turn, or null. */
68
+ awaitingCorrection(workspaceId: string, scopeKey: string): Promise<WorkProductRecord | null>;
69
+ /** The scope's `ready` row awaiting review, or null. */
70
+ awaitingReview(workspaceId: string, scopeKey: string): Promise<WorkProductRecord | null>;
71
+ /** `max(version over the scope's approved/superseded rows) + 1` — the
72
+ * version a fresh draft for the scope should carry. */
73
+ nextVersion(workspaceId: string, scopeKey: string): Promise<number>;
74
+ /** Re-open a `changes_requested` row as the next draft: version bumps +1
75
+ * and the correction turn accumulates into the same scope row. */
76
+ reopen(id: string): Promise<WorkProductOutcome<WorkProductRecord>>;
77
+ /** Merge evidence entries by id AND by what they assert (target + source +
78
+ * claim), so re-stating a fact already recorded replaces it under whatever
79
+ * id this batch minted rather than appending a near-copy. Legal only while
80
+ * `draft`/`blocked`. */
81
+ upsertEvidence(id: string, entries: readonly EvidenceEntry[]): Promise<WorkProductOutcome<WorkProductRecord>>;
82
+ /** Merge exception entries by id, then reconcile the blocked flag: any
83
+ * unresolved blocking entry parks `draft`→`blocked`; resolving the last
84
+ * one releases `blocked`→`draft`. */
85
+ upsertExceptions(id: string, entries: readonly ExceptionEntry[]): Promise<WorkProductOutcome<WorkProductRecord>>;
86
+ /** Persist a checks array without transitioning — how a failed platform
87
+ * gate (e.g. evidence_coverage) stays visible on the still-draft row. */
88
+ recordChecks(id: string, checks: readonly QualityCheck[]): Promise<WorkProductOutcome<WorkProductRecord>>;
89
+ /** The terminal agent call: CAS `draft`→`ready` with artifact + checks +
90
+ * provenance, appending the version-history entry. Refuses while an
91
+ * unresolved blocking exception exists. */
92
+ submit(id: string, input: SubmitWorkProductInput): Promise<WorkProductOutcome<WorkProductRecord>>;
93
+ /** Reviewer verdict: CAS `ready`→`approved`/`changes_requested` + history
94
+ * entry. Approval also supersedes the scope's prior approved versions so
95
+ * exactly one approved version is current per scope. */
96
+ applyVerdict(id: string, input: WorkProductVerdictInput): Promise<WorkProductOutcome<WorkProductRecord>>;
97
+ /** Explicit replacement: CAS to `superseded` (legal from ready /
98
+ * changes_requested / approved). */
99
+ supersede(id: string): Promise<WorkProductOutcome<WorkProductRecord>>;
100
+ }
101
+ /** Configuration options for creating a work product service */
102
+ export interface WorkProductServiceOptions {
103
+ store: WorkProductStorePort;
104
+ /** Injectable clock (epoch ms). Default `Date.now`. */
105
+ now?: () => number;
106
+ /** Row-id generator. Default `crypto.randomUUID()`. */
107
+ generateId?: () => string;
108
+ }
109
+ /** Create the guarded work-product service over a store port */
110
+ export declare function createWorkProductService(options: WorkProductServiceOptions): WorkProductService;
111
+ /** In-memory store surface with audit trail access and unguarded direct writes for tests */
112
+ export interface InMemoryWorkProductStore extends WorkProductStorePort {
113
+ /** The full audit trail, append order. */
114
+ events(): WorkProductAuditEvent[];
115
+ /** Unguarded direct write — simulates a concurrent owner in tests. */
116
+ put(record: WorkProductRecord): void;
117
+ }
118
+ /**
119
+ * In-memory {@link WorkProductStorePort} — the portable backend for tests and
120
+ * reference assemblies. Records are deep-copied on every boundary so callers
121
+ * can never mutate stored state around the guards.
122
+ */
123
+ export declare function createInMemoryWorkProductStore(): InMemoryWorkProductStore;
@@ -0,0 +1,144 @@
1
+ /**
2
+ * The agent-facing work-product side channel — three registry `customTools`
3
+ * built on `/tools`' `defineAppTool`, dispatched through `dispatchAppTool`'s
4
+ * single validation/outcome path (a thrown `ToolInputError` → correctable 4xx
5
+ * back to the model; any other throw → internal error; a call never silently
6
+ * succeeds without its effect). Deliberately NOT new `/tools` built-ins:
7
+ * extending `AppToolHandlers` would break every existing consumer, and the
8
+ * registry seam exists precisely for a product tool family like this.
9
+ *
10
+ * Partial-emission contract across a long turn: the draft ROW is the
11
+ * accumulator. Evidence and exceptions stream in as found via small batched
12
+ * calls; the artifact arrives once at the end. The agent addresses everything
13
+ * by `scopeKey` — the server mints row ids, the model never invents them, and
14
+ * identity (userId/workspaceId/threadId) rides the trusted `AppToolContext`
15
+ * from headers, never model args. A turn that dies mid-emission leaves a
16
+ * consistent draft the next turn resumes by the same scopeKey.
17
+ */
18
+ import { type AppToolDefinition } from '../tools/registry';
19
+ import type { AppToolContext } from '../tools/types';
20
+ import { type WorkProductProvenanceBase } from './provenance';
21
+ import { type ConfusableTargetGroup } from './claim-support';
22
+ import { type WorkProductArtifact, type WorkProductRecord, type WorkProductStorePort } from './types';
23
+ /** Max entries per `upsert_evidence`/`flag_exception` call — keeps each call a
24
+ * small batch the model can correct precisely on a named-index failure. */
25
+ export declare const MAX_WORK_PRODUCT_BATCH = 50;
26
+ /** Platform check: every material target has ≥1 evidence row. Recorded as
27
+ * `QualityCheck{source:'platform'}`. */
28
+ export declare const EVIDENCE_COVERAGE_CHECK = "evidence_coverage";
29
+ /** Platform check: how many evidence entries carry a quote the shell PROVED
30
+ * occurs in the source it names. Recorded when `readSourceText` is wired, so
31
+ * a reviewer reads the strength of the lineage off the row itself rather than
32
+ * trusting that a quote was checked. */
33
+ export declare const QUOTE_VERIFICATION_CHECK = "quote_verification";
34
+ /** Platform check: how many quoted evidence entries anchor to text that
35
+ * actually CARRIES the figure the entry claims. Distinct from
36
+ * `quote_verification`, which only proves the text came from the document —
37
+ * production row `7256ef49` passed that one on all four entries while
38
+ * supporting none of them. */
39
+ export declare const CLAIM_SUPPORT_CHECK = "claim_support";
40
+ /** Platform check: how many citations anchor to a line that belongs to the
41
+ * TARGET they are attached to, rather than to a sibling target's line.
42
+ * Recorded when the product declares `confusableTargets`; `claim_support`
43
+ * passes a crossed pair by construction, because the figure really is on the
44
+ * line — the wrong one. */
45
+ export declare const TARGET_CORRECTNESS_CHECK = "target_correctness";
46
+ /** Platform check: how many evidence claims agree with the artifact field they
47
+ * decorate. A package whose evidence reports one figure on a line and whose
48
+ * artifact reports another contradicts itself; every other gate on this row
49
+ * reads only one of the two halves. */
50
+ export declare const ARTIFACT_AGREEMENT_CHECK = "artifact_agreement";
51
+ /** Domain seams for the three work-product tools — every domain word is a
52
+ * parameter; the shell bakes none. */
53
+ export interface WorkProductToolConfig {
54
+ store: WorkProductStorePort;
55
+ /** PARAMETER — accepted `artifact.kind` values, validated on submit. */
56
+ artifactKinds: readonly string[];
57
+ /** PARAMETER — accepted exception `kind` values. */
58
+ exceptionKinds: readonly string[];
59
+ /** Fail-loud source check: resolve an evidence `sourceRef` to existence
60
+ * (vault stat / attachment lookup). A dangling ref is a `ToolInputError`
61
+ * naming the entry index — lineage can never point at nothing. */
62
+ resolveSourceRef: (ref: string, ctx: AppToolContext) => Promise<boolean>;
63
+ /** Fail-loud QUOTE verification: return the source document's TEXT for a
64
+ * ref so the shell can prove each `locator.quote` occurs in it verbatim.
65
+ * Wiring this turns the gate ON — a quote that does not occur is a
66
+ * `ToolInputError` naming the entry index, so the model re-extracts from
67
+ * the document instead of persisting invented lineage.
68
+ *
69
+ * Return `null` ONLY when the ref genuinely has no extractable text (an
70
+ * image scan, an opaque blob). The gate is fail-CLOSED on `null`: a quote
71
+ * that cannot be checked is refused, because "unverifiable" and "verified"
72
+ * must never look the same to a reviewer. Such an entry is still recordable
73
+ * without `locator.quote` — `claim` carries the assertion.
74
+ *
75
+ * Omit the seam entirely and no quote is checked. */
76
+ readSourceText?: (ref: string, ctx: AppToolContext) => Promise<string | null>;
77
+ /** The material targets the platform coverage check requires evidence for.
78
+ * Product-owned vocabulary; omit to skip the coverage gate.
79
+ *
80
+ * Return ONLY targets a source document can actually evidence. A gate that
81
+ * demands document lineage for a value the session COMPUTED is not
82
+ * satisfiable by any honest answer, and an unsatisfiable gate does not stop
83
+ * a submit — it selects for an invented one. Computed values belong to a
84
+ * product's own computation check, where "matches what we already
85
+ * calculated" is satisfiable by construction. */
86
+ materialTargets?: (artifact: WorkProductArtifact) => string[];
87
+ /** Require every material target to carry a SOURCE ANCHOR — a span-sliced or
88
+ * verified quote — not merely an evidence row. Off by default (a bare
89
+ * `claim` is legitimate lineage for products with no readable sources);
90
+ * turn it ON once `readSourceText` is wired and `materialTargets` names only
91
+ * document-derived targets, and coverage stops being satisfiable by
92
+ * assertion. */
93
+ requireAnchoredEvidence?: boolean;
94
+ /** Verify that each anchored quote CARRIES the figure its entry claims.
95
+ * ON by default — an anchor that does not support its claim is the one
96
+ * failure mode every other gate here passes, and it reads to a reviewer as
97
+ * the most authoritative citation on the row.
98
+ *
99
+ * Only claims that assert a figure are checked, so a filing status, a name
100
+ * or a date is unaffected; see `./claim-support` for exactly where the line
101
+ * is drawn and why it is drawn to stay satisfiable. Set `false` only for a
102
+ * product whose claims are figures the source states in a form no numeric
103
+ * comparison can reach. */
104
+ verifyClaimSupport?: boolean;
105
+ /** Fold an evidence `target` (and every `materialTargets` name) to the
106
+ * product's ONE canonical spelling.
107
+ *
108
+ * Without it a target namespace forks and every check that joins evidence
109
+ * to the artifact by name silently half-works. Measured on production row
110
+ * `95105c8a`: the same seven form lines arrived as `line_3a` and
111
+ * `f1040.line_3a` in one turn, so coverage, deduplication and artifact
112
+ * agreement each saw two unrelated targets where the return has one line.
113
+ *
114
+ * Pure and total — it runs on every ingested entry and on the coverage
115
+ * target list, so a target it does not recognize must come back unchanged
116
+ * rather than throw. */
117
+ normalizeTarget?: (target: string) => string;
118
+ /** Targets whose SOURCE LINES are mistakable for each other, with the
119
+ * phrases that tell them apart — the product's vocabulary, compared by the
120
+ * shell. Omit and no target-correctness check runs.
121
+ *
122
+ * Read negatively: an entry is refused only when the line it cites carries
123
+ * a sibling target's label and none of its own, so an unusually-labelled
124
+ * document never costs an honest citation. See `./claim-support` for why
125
+ * the positive form ("the line must say X") is the wrong shape. */
126
+ confusableTargets?: readonly ConfusableTargetGroup[];
127
+ /** Refuse an evidence claim that asserts a figure the artifact reports on a
128
+ * DIFFERENT target. ON by default and domain-free — it compares the package
129
+ * to itself. Set `false` only for a product whose evidence claims are not
130
+ * the artifact's own figures. */
131
+ verifyArtifactAgreement?: boolean;
132
+ /** Per-turn provenance closure the ROUTE supplies (profileHash + runId are
133
+ * known at dispatch; trusted, never read from model args). */
134
+ provenance: (ctx: AppToolContext) => WorkProductProvenanceBase;
135
+ /** Called on the draft→ready commit so the route persists the transcript
136
+ * anchor part and the queue projection updates. */
137
+ onReady?: (record: WorkProductRecord, ctx: AppToolContext) => void | Promise<void>;
138
+ /** Injectable clock / id generator (tests, deterministic ids). */
139
+ now?: () => number;
140
+ generateId?: () => string;
141
+ }
142
+ /** Build the three work-product tools for `customTools` registration on the
143
+ * MCP server / HTTP handler / runtime executor. */
144
+ export declare function buildWorkProductTools(config: WorkProductToolConfig): AppToolDefinition[];