@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,170 @@
1
+ /**
2
+ * Nav destinations, and the guard that proves every href the rail renders
3
+ * resolves to a route the product's router actually registered.
4
+ *
5
+ * A rail row's href is assembled from a base plus a relative path, and nothing
6
+ * downstream re-checks it: the sidebar renders a link, the click navigates, and
7
+ * the router answers 404. A unit test written against the nav builder alone
8
+ * cannot catch that — it asserts the href the builder produced, which is the
9
+ * same wrong string the user clicks.
10
+ *
11
+ * Two mechanisms, meant to be used together:
12
+ *
13
+ * 1. `NavDestination` makes the base a REQUIRED discriminant (`scope`). An
14
+ * optional `absolute?: boolean`-style flag has the opposite property:
15
+ * omitting it type-checks, and the destination silently resolves under the
16
+ * workspace prefix instead of the app-level one. A required literal union
17
+ * turns that omission into a compile error, and widening `TScope` demands a
18
+ * base for the new scope rather than defaulting to a wrong one.
19
+ * 2. `assertNavHrefsRegistered` matches every resolved href against the route
20
+ * table, so a destination the router never registered fails a test instead
21
+ * of a user's click. It reads the product's real route table, so it cannot
22
+ * agree with the builder's mistake the way a hand-maintained expected-href
23
+ * list does.
24
+ */
25
+ /** The bases a product routes rail rows under. `workspace` is the per-workspace
26
+ * prefix (`/app/ws_123`); `app` is the account-level one (`/app`), where
27
+ * singleton surfaces such as a shared terminal or billing live. */
28
+ export type NavScope = 'workspace' | 'app';
29
+ /** A base path per scope. Widening `TScope` widens this record, so a product
30
+ * that adds a scope cannot compile until it supplies that scope's base. */
31
+ export type NavScopeBases<TScope extends string = NavScope> = Readonly<Record<TScope, string>>;
32
+ /** One rail destination as the product declares it, before a base is applied. */
33
+ export interface NavDestination<TScope extends string = NavScope> {
34
+ id: string;
35
+ /** Path relative to the base named by `scope`. `''` is the base itself.
36
+ * Must be empty or start with `/` — a bare `'vault'` would concatenate into
37
+ * `/app/ws_123vault`, so it is rejected rather than silently repaired. */
38
+ path: string;
39
+ /** Which base `path` resolves against. Required on purpose. */
40
+ scope: TScope;
41
+ }
42
+ /** A destination with its base applied. */
43
+ export interface ResolvedNavDestination<TScope extends string = NavScope> {
44
+ id: string;
45
+ href: string;
46
+ scope: TScope;
47
+ }
48
+ /** Apply a destination's scope base to its path.
49
+ *
50
+ * Throws when the scope has no base configured — a product that assembles
51
+ * `bases` dynamically can defeat the type-level guarantee, and a missing base
52
+ * would otherwise produce `undefined/vault`. */
53
+ export declare function resolveNavHref<TScope extends string>(destination: NavDestination<TScope>, bases: NavScopeBases<TScope>): string;
54
+ /** Apply the bases to every destination, preserving declaration order. */
55
+ export declare function resolveNavDestinations<TScope extends string>(destinations: readonly NavDestination<TScope>[], bases: NavScopeBases<TScope>): ResolvedNavDestination<TScope>[];
56
+ export interface ResolveScopedActiveNavIdOptions<TScope extends string = NavScope> {
57
+ pathname: string;
58
+ destinations: readonly NavDestination<TScope>[];
59
+ bases: NavScopeBases<TScope>;
60
+ /** Extra ABSOLUTE prefixes that light an existing row, e.g.
61
+ * `{ '/app/ws_1/agents': 'integrations' }`. Same longest-prefix contest. */
62
+ aliases?: Readonly<Record<string, string>>;
63
+ /** ABSOLUTE prefixes that deliberately highlight nothing, beating any shorter
64
+ * match. */
65
+ claimsNothing?: readonly string[];
66
+ }
67
+ /**
68
+ * The rail row to highlight, across scopes.
69
+ *
70
+ * `resolveActiveNavId` resolves rows against ONE base, so an app-level row can
71
+ * only be highlighted by a second, hand-rolled scan — the same split that lets
72
+ * an app-level destination render under the workspace base. This resolves the
73
+ * hrefs first and runs a single longest-prefix contest over absolute paths, so
74
+ * declaration order cannot change the answer and no scope needs its own pass.
75
+ *
76
+ * Prefixes in `aliases` / `claimsNothing` are absolute here, unlike
77
+ * `resolveActiveNavId`'s base-relative ones, because the contest itself is
78
+ * absolute.
79
+ */
80
+ export declare function resolveScopedActiveNavId<TScope extends string>({ pathname, destinations, bases, aliases, claimsNothing, }: ResolveScopedActiveNavIdOptions<TScope>): string | undefined;
81
+ /**
82
+ * One entry of a registered route table. Structurally compatible with
83
+ * react-router's `RouteConfigEntry`, so a product passes its real `routes.ts`
84
+ * default export straight in — the point of the guard is that it reads the
85
+ * router's own truth rather than a second list that can agree with the bug.
86
+ */
87
+ export interface RegisteredRoute {
88
+ /** Absent on a pathless layout route: its children inherit the parent path. */
89
+ path?: string;
90
+ index?: boolean;
91
+ children?: readonly RegisteredRoute[];
92
+ }
93
+ /** A route table entry is either a bare pattern string or a router config node. */
94
+ export type NavRouteTable = readonly (string | RegisteredRoute)[];
95
+ /**
96
+ * Every path pattern the table registers, rooted and de-duplicated.
97
+ *
98
+ * Parent nodes contribute their own cumulative path as well as their children's:
99
+ * a router matches a parent route with an index child at the parent path, and a
100
+ * parent without one still matches with an empty outlet, so treating parents as
101
+ * unregistered would flag working hrefs.
102
+ */
103
+ export declare function flattenRouteTable(table: NavRouteTable): string[];
104
+ /**
105
+ * A nav row as the guard needs to see it. Structurally satisfied by
106
+ * `SessionRailNavItem` / `SessionRailSubItem` and by sandbox-ui's
107
+ * `SidebarLayoutNavItem`, so the guard runs over the builder's real output
108
+ * rather than a re-declaration of it.
109
+ */
110
+ export interface NavHrefItem {
111
+ id: string;
112
+ href: string;
113
+ subItems?: readonly NavHrefItem[];
114
+ }
115
+ export type NavHrefProblemReason =
116
+ /** No registered pattern matches the resolved href. */
117
+ 'unregistered'
118
+ /** Empty, fragment-only, or not rooted at `/` — the row navigates nowhere
119
+ * predictable regardless of the route table. */
120
+ | 'not-a-path'
121
+ /** Leaves the router (scheme or protocol-relative) while `allowExternal` is
122
+ * off. */
123
+ | 'external';
124
+ export interface NavHrefProblem {
125
+ id: string;
126
+ href: string;
127
+ reason: NavHrefProblemReason;
128
+ /** Registered patterns ending in the same segment. A destination resolved
129
+ * under the wrong base lands here as its correctly-based twin, which is what
130
+ * names the missing scope in the failure message. */
131
+ nearest: string[];
132
+ message: string;
133
+ }
134
+ export interface NavHrefReport {
135
+ /** Hrefs examined, including nested sub-items. */
136
+ checked: number;
137
+ problems: NavHrefProblem[];
138
+ /** Off-router destinations accepted because `allowExternal` is on. */
139
+ external: string[];
140
+ /** The flattened route table the check ran against. */
141
+ patterns: string[];
142
+ }
143
+ export interface NavHrefCheckOptions {
144
+ /** Hrefs to skip, compared after query/fragment removal. For a destination
145
+ * served outside this route table (a static asset, another worker). */
146
+ ignore?: readonly string[];
147
+ /** Absolute URLs / `mailto:` / `tel:` are reported under `external` instead
148
+ * of failing. Default true. */
149
+ allowExternal?: boolean;
150
+ /** Compare literal segments case-sensitively. Default true — a router that
151
+ * matches case-insensitively still renders a link the deploy's CDN or a
152
+ * case-sensitive origin may not. */
153
+ caseSensitive?: boolean;
154
+ }
155
+ /**
156
+ * Check every nav href against the product's route table.
157
+ *
158
+ * Pure — returns the full report so a caller can assert on parts of it. Use
159
+ * {@link assertNavHrefsRegistered} in tests; it turns the report into a failure
160
+ * that names the offending row, its resolved href, and the near-miss pattern.
161
+ */
162
+ export declare function checkNavHrefs(items: readonly NavHrefItem[], routes: NavRouteTable, options?: NavHrefCheckOptions): NavHrefReport;
163
+ /**
164
+ * Fail unless every nav href resolves to a registered route.
165
+ *
166
+ * Throws on an empty item list or an empty route table as well: a guard that
167
+ * examined nothing reports safety it does not provide, and both are what a
168
+ * mis-wired import looks like.
169
+ */
170
+ export declare function assertNavHrefsRegistered(items: readonly NavHrefItem[], routes: NavRouteTable, options?: NavHrefCheckOptions): void;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Path normalisation shared by the shell's routing helpers. Segment-aligned
3
+ * comparison is the invariant: `/vault` must never claim `/vault-archive`, so
4
+ * every prefix test here works on whole segments rather than string prefixes.
5
+ */
6
+ export declare function stripTrailingSlashes(value: string): string;
7
+ /** Bare segment name, so a caller may pass `'/settings'` or `'settings'`. */
8
+ export declare function stripSlashes(value: string): string;
9
+ /** Path with query + fragment removed and trailing slashes trimmed. A caller
10
+ * passing a full href instead of a pathname would otherwise match nothing. */
11
+ export declare function normalizePath(pathname: string): string;
12
+ /** True when `path` is `prefix` or a segment-aligned descendant of it, so
13
+ * `/vault` never claims `/vault-archive`. */
14
+ export declare function isUnderPrefix(path: string, prefix: string): boolean;
15
+ /** Non-empty segments of a path or route pattern. Leading/trailing/duplicate
16
+ * slashes collapse, so `/app//x/` and `app/x` compare equal. */
17
+ export declare function toSegments(value: string): string[];
18
+ /** Canonical display form: rooted, no trailing slash, no empty segments. */
19
+ export declare function toRootedPath(value: string): string;
@@ -1,12 +1,9 @@
1
1
  #!/usr/bin/env node
2
- import { R as RunSignoffOptions } from '../run-D80hoLKh.js';
3
- import '../types-Bd6uW9vQ.js';
4
-
2
+ import { type RunSignoffOptions } from './run';
5
3
  interface ParsedArgs extends RunSignoffOptions {
6
4
  readonly jsonPath?: string;
7
5
  readonly quiet?: boolean;
8
6
  }
9
- declare function parseArgs(argv: readonly string[]): ParsedArgs;
10
- declare function runSignoffCli(argv: readonly string[]): Promise<number>;
11
-
12
- export { parseArgs, runSignoffCli };
7
+ export declare function parseArgs(argv: readonly string[]): ParsedArgs;
8
+ export declare function runSignoffCli(argv: readonly string[]): Promise<number>;
9
+ export {};
@@ -0,0 +1,12 @@
1
+ import type { LoadedSignoffConfig, SignoffConfig } from './types';
2
+ export declare function parseSignoffConfig(value: unknown, where: string): SignoffConfig;
3
+ export declare function deriveSignoffConfig(scripts: Readonly<Record<string, string>>): {
4
+ readonly config: SignoffConfig;
5
+ readonly used: readonly string[];
6
+ };
7
+ export interface LoadSignoffConfigOptions {
8
+ readonly repoRoot: string;
9
+ /** Explicit config path. Missing file is an error, never a silent fallback. */
10
+ readonly configPath?: string;
11
+ }
12
+ export declare function loadSignoffConfig(options: LoadSignoffConfigOptions): Promise<LoadedSignoffConfig>;
@@ -0,0 +1,44 @@
1
+ /**
2
+ * The subprocess primitive every sign-off step runs through.
3
+ *
4
+ * Three properties the gate depends on, none of which `execSync` gives:
5
+ *
6
+ * 1. **Cancellable.** Under fail-fast, a build still running when typecheck
7
+ * fails is killed rather than waited out — otherwise the "faster than CI"
8
+ * claim is spent waiting for work whose verdict no longer matters.
9
+ * 2. **Process-group kill.** Steps run through `sh -c`, so killing the shell
10
+ * leaves `vitest`'s forks and `tsup`'s dts worker orphaned and holding CPU.
11
+ * The child is spawned as a group leader and the whole group is signalled.
12
+ * 3. **Bounded, non-silent capture.** Output is capped, and when the cap is hit
13
+ * the elision is stated in the captured text. A gate that quietly drops the
14
+ * middle of a failure log is a gate that hides the failure.
15
+ */
16
+ export interface CommandResult {
17
+ readonly command: string;
18
+ readonly cwd: string;
19
+ readonly exitCode: number;
20
+ readonly signal: string | null;
21
+ readonly durationMs: number;
22
+ readonly output: string;
23
+ readonly truncated: boolean;
24
+ readonly timedOut: boolean;
25
+ }
26
+ export interface RunCommandOptions {
27
+ readonly command: string;
28
+ readonly cwd: string;
29
+ readonly env?: Readonly<Record<string, string | undefined>>;
30
+ readonly timeoutMs?: number;
31
+ readonly signal?: AbortSignal;
32
+ /** Retained bytes before elision. Default 2 MiB. */
33
+ readonly maxOutputBytes?: number;
34
+ /** Grace between SIGTERM and SIGKILL. Default 5 s. */
35
+ readonly killGraceMs?: number;
36
+ readonly onData?: (chunk: string) => void;
37
+ }
38
+ /**
39
+ * Run one shell command to completion and report what happened.
40
+ *
41
+ * Never throws on a non-zero exit — a failing step is data, not an exception.
42
+ * It throws only when the process could not be started at all.
43
+ */
44
+ export declare function runCommand(options: RunCommandOptions): Promise<CommandResult>;
@@ -1,14 +1,56 @@
1
- export { R as RunSignoffOptions, r as runSignoff } from '../run-D80hoLKh.js';
2
- import { L as LoadedSignoffConfig, b as SignoffReport } from '../types-Bd6uW9vQ.js';
3
- export { c as SignoffAttempt, d as SignoffConfig, e as SignoffConfigOrigin, a as SignoffEvent, f as SignoffHostFacts, g as SignoffInstallResult, h as SignoffInstallSpec, i as SignoffRepoFacts, j as SignoffShuffleSpec, S as SignoffSource, k as SignoffStepResult, l as SignoffStepSpec, m as SignoffStepStatus } from '../types-Bd6uW9vQ.js';
4
-
5
- interface LoadSignoffConfigOptions {
6
- readonly repoRoot: string;
7
- /** Explicit config path. Missing file is an error, never a silent fallback. */
8
- readonly configPath?: string;
9
- }
10
- declare function loadSignoffConfig(options: LoadSignoffConfigOptions): Promise<LoadedSignoffConfig>;
11
-
12
- declare function formatSignoffReport(report: SignoffReport): string;
13
-
14
- export { type LoadSignoffConfigOptions, LoadedSignoffConfig, SignoffReport, formatSignoffReport, loadSignoffConfig };
1
+ /**
2
+ * `@tangle-network/agent-app/signoff` the local sign-off gate.
3
+ *
4
+ * A node-only checker a PRODUCT runs against ITSELF, the shape `/peer-floors`
5
+ * and `/theme-contract` already established here. The difference is scope:
6
+ * those check one property, this runs the repo's whole verification in
7
+ * conditions that reproduce a clean CI environment, and then does what CI does
8
+ * not.
9
+ *
10
+ * **Why this exists.** CI is slow enough to stop being a merge gate, and two
11
+ * failures credited to CI in one day needed nothing CI has:
12
+ *
13
+ * - Two legal-agent test files failed only in CI with "Cannot bundle Node.js
14
+ * built-in node:sqlite". Local passed three separate ways — cleared Vite
15
+ * cache, its own `node_modules`, even `--maxWorkers=1`. CI was not smarter;
16
+ * it was a clean install with different file scheduling.
17
+ * - legal-agent `main` went red because a sibling PR called a function an
18
+ * older agent-app did not export — invisible to a clean install, a clean
19
+ * typecheck and a green suite, and caught only by `/peer-floors` at the
20
+ * wire call.
21
+ *
22
+ * Neither is a reason to keep CI as the gate. Both are reasons the local run
23
+ * must be hermetic. That is what this is:
24
+ *
25
+ * | | CI | this gate |
26
+ * |---|---|---|
27
+ * | dependency tree | clean, isolated store | clean `git worktree`, store keyed on the lockfile |
28
+ * | suite order | one arbitrary order | randomized file order, ≥2 seeds, every seed recorded |
29
+ * | step order | serial, as written in YAML | dependency graph, run as wide as the DECLARED edges allow |
30
+ * | failure output | one red line in a long log | named step, exit code, seed, captured output |
31
+ * | reproducibility | re-run the job and hope | one command, printed with the verdict |
32
+ *
33
+ * ```ts
34
+ * import { runSignoff, formatSignoffReport } from '@tangle-network/agent-app/signoff'
35
+ *
36
+ * const report = await runSignoff({ repoDir: process.cwd() })
37
+ * console.log(formatSignoffReport(report))
38
+ * process.exit(report.ok ? 0 : 1)
39
+ * ```
40
+ *
41
+ * The CLI form is the `agent-app-signoff` bin.
42
+ *
43
+ * **Surface is deliberately narrow.** The steps this runs — dependency-graph
44
+ * scheduling, seed planning, workflow-YAML pin scanning, the pnpm-store cache,
45
+ * the hermetic `git worktree`, the command runner — are this gate's OWN
46
+ * implementation, not things a consumer plausibly calls directly; the `agent-
47
+ * app-signoff` bin imports them from the sibling files (`./run`, `./report`),
48
+ * never through this barrel. What a consumer embeds is: run the gate, load its
49
+ * config, print the result. Everything else stays module-internal, where
50
+ * `knip` can see it unused rather than reading as committed public API with
51
+ * zero callers.
52
+ */
53
+ export { runSignoff, type RunSignoffOptions } from './run';
54
+ export { loadSignoffConfig, type LoadSignoffConfigOptions } from './config';
55
+ export { formatSignoffReport } from './report';
56
+ export type { LoadedSignoffConfig, SignoffAttempt, SignoffConfig, SignoffConfigOrigin, SignoffEvent, SignoffHostFacts, SignoffInstallResult, SignoffInstallSpec, SignoffRepoFacts, SignoffReport, SignoffShuffleSpec, SignoffSource, SignoffStepResult, SignoffStepSpec, SignoffStepStatus, } from './types';
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Is this module the script the process was started with?
3
+ *
4
+ * The obvious spelling — `import.meta.url === pathToFileURL(process.argv[1]).href`
5
+ * — is wrong for every packaged bin, and wrong in the silent direction: the
6
+ * module decides it was imported rather than executed, so the CLI does nothing
7
+ * and exits 0.
8
+ *
9
+ * The two sides are not the same kind of path. `import.meta.url` is the module
10
+ * URL Node resolved, and Node resolves a module's realpath unless started with
11
+ * `--preserve-symlinks`. `process.argv[1]` is the path as SPELLED on the
12
+ * command line. A package manager's bin shim spells it through symlinked
13
+ * directories:
14
+ *
15
+ * argv[1] …/node_modules/.bin/../@scope/pkg/dist/cli.js
16
+ * import.meta.url …/node_modules/.pnpm/pkg@1.2.3/node_modules/@scope/pkg/dist/cli.js
17
+ *
18
+ * Same file, two strings, and a `===` between them is false.
19
+ *
20
+ * So the entry path is resolved the same way Node resolved the module before
21
+ * the comparison. A missing or unresolvable entry is not this function's
22
+ * business to explain — it is simply not this module, which is the honest
23
+ * answer and keeps an importer from executing a CLI.
24
+ */
25
+ export declare function invokedAsScript(moduleUrl: string, entry: string | undefined): boolean;
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Refuse to sign off on a runtime the product does not ship.
3
+ *
4
+ * CI pins its Node version (`actions/setup-node` with `node-version: 22` in all
5
+ * three fleet workflows). A developer's shell does not — this host runs 24. A
6
+ * local gate that inherits whatever is on `PATH` therefore verifies a runtime
7
+ * nobody deploys, and reports it as the runtime that ships. That is the same
8
+ * failure shape as a number measured in a narrower context than it is
9
+ * presented in, and it is not acceptable in the thing that replaces the merge
10
+ * gate.
11
+ *
12
+ * So the pin is read from the repo and enforced, or it is absent and the report
13
+ * says so. Three sources, in order:
14
+ *
15
+ * - `signoff.config.mjs`'s `nodeVersion` — the explicit declaration.
16
+ * - `.nvmrc` — the pin a repo already keeps for humans.
17
+ * - the `pull_request` workflows' `node-version` (`./workflow-pin`) — the pin
18
+ * CI itself runs on.
19
+ *
20
+ * **The third source was added because the first two were empty on the entire
21
+ * fleet, and that produced a false PASS.** legal-agent `4c0d688` failed CI on
22
+ * `Cannot bundle Node.js built-in "node:sqlite"` and this gate signed it off.
23
+ * Reproduced in one installed tree, same bytes: Node 22 fails both files, Node
24
+ * 24 passes both, every time. No `.nvmrc` exists in tax-agent, legal-agent or
25
+ * agent-app; all three pin `node-version: 22` in the workflow being replaced.
26
+ * A gate that replaces a workflow has to read the runtime that workflow pins.
27
+ *
28
+ * A `.nvmrc` and a workflow that disagree is not resolved by preference — it is
29
+ * a refusal, because it means the local gate and CI verify different runtimes,
30
+ * which is the exact defect this module exists to prevent.
31
+ *
32
+ * **`engines.node` is deliberately NOT read.** It is a floor (`">=18"`), not a
33
+ * pin, so treating it as one manufactures refusals on every version above the
34
+ * floor — and an unsatisfiable gate does not stop bad work, it gets waived.
35
+ */
36
+ export interface NodeVersionRequirement {
37
+ /** The declared major, e.g. `22`. */
38
+ readonly major: number;
39
+ readonly declared: string;
40
+ /** Where it came from, for the proof. */
41
+ readonly source: string;
42
+ }
43
+ export declare function resolveNodeRequirement(repoRoot: string, configured?: string): NodeVersionRequirement | null;
44
+ /**
45
+ * Throw when the running Node cannot stand in for the declared one.
46
+ *
47
+ * Major-only: a patch difference is not a different runtime, and demanding an
48
+ * exact patch would refuse every host that has not just re-installed.
49
+ */
50
+ export declare function assertNodeVersion(requirement: NodeVersionRequirement | null, running?: string): void;
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Attaching a proof to the commit it verified.
3
+ *
4
+ * ## Why `git notes`, and what the two rejected carriers cost
5
+ *
6
+ * **A commit-message trailer** cannot work for the field that matters. The
7
+ * trailer is part of the commit object, so writing it changes the SHA the proof
8
+ * claims to cover — the proof would have to be produced before the commit it
9
+ * names exists. Amending re-writes the SHA again, and GitHub's squash-merge
10
+ * rebuilds the message from the PR body, so the trailer does not survive the one
11
+ * transition it would need to.
12
+ *
13
+ * **A committed artifact directory** (`.signoff/<sha>.json`) changes the tree,
14
+ * so the tree hash inside the proof can never cover the file carrying it. It
15
+ * also lands in every diff, and it is exactly the "file someone can forget"
16
+ * shape the requirement rules out — deleting it is a normal-looking change.
17
+ *
18
+ * **`git notes` wins because it is the only carrier that is addressed BY the
19
+ * SHA without being part of it.** The note is written after the commit exists,
20
+ * it changes neither the SHA nor the tree, and `git notes show <sha>` is a
21
+ * definite yes/no for any commit anyone can name.
22
+ *
23
+ * ## The tradeoff `git notes` really carries, and how this module answers it
24
+ *
25
+ * Notes are attached to a commit id, and a rebase or a squash-merge produces a
26
+ * NEW commit id, so the note does not follow by itself. Two mechanisms close
27
+ * that gap, and both are needed:
28
+ *
29
+ * 1. `notes.rewriteRef` (see `SIGNOFF_NOTES_GIT_CONFIG`) makes local rebase and
30
+ * amend copy the note forward automatically.
31
+ * 2. `resolveSignoffProof` falls back to a **tree scan**: it reads every proof
32
+ * under the notes ref and matches on the TREE the commit carries. A rebase
33
+ * or a squash of one branch onto an unchanged base preserves the tree, so
34
+ * the content that was verified is still provably the content that merged,
35
+ * even though the SHA changed. The verifier reports which binding it used —
36
+ * `exact` or `tree-equivalent` — and never conflates them.
37
+ *
38
+ * Notes are neither pushed nor fetched by default; `SIGNOFF_NOTES_GIT_CONFIG`
39
+ * carries the refspecs that fix that, and a missing note is reported as
40
+ * `not-found`, never as a pass.
41
+ */
42
+ import { type SignoffProof } from './proof-record';
43
+ export declare const SIGNOFF_NOTES_REF = "refs/notes/signoff";
44
+ /**
45
+ * The git configuration a repo needs for notes to travel. Emitted by the CLI
46
+ * when a proof cannot be found, because the usual cause is an unconfigured repo
47
+ * rather than an unsigned commit.
48
+ */
49
+ export declare const SIGNOFF_NOTES_GIT_CONFIG: readonly string[];
50
+ export interface AttachSignoffProofInput {
51
+ readonly repoDir: string;
52
+ readonly proof: SignoffProof;
53
+ /** Revision to annotate; defaults to the commit the proof names. */
54
+ readonly rev?: string;
55
+ /** Replace an existing note. Off by default so a second sign-off cannot quietly overwrite the first. */
56
+ readonly overwrite?: boolean;
57
+ }
58
+ export interface AttachedSignoffProof {
59
+ readonly commit: string;
60
+ readonly ref: string;
61
+ }
62
+ export declare function attachSignoffProof(input: AttachSignoffProofInput): AttachedSignoffProof;
63
+ export type SignoffProofLookup = {
64
+ readonly found: true;
65
+ readonly proof: SignoffProof;
66
+ readonly commit: string;
67
+ readonly binding: 'exact' | 'tree-equivalent';
68
+ } | {
69
+ readonly found: false;
70
+ readonly commit: string;
71
+ };
72
+ /** The note attached to exactly this commit, or `found: false`. Never searches. */
73
+ export declare function readSignoffProofNote(repoDir: string, rev: string): SignoffProofLookup;
74
+ /** Every proof stored under the notes ref, paired with the commit it annotates. */
75
+ export declare function listSignoffProofs(repoDir: string): readonly {
76
+ readonly commit: string;
77
+ readonly proof: SignoffProof;
78
+ }[];
79
+ /**
80
+ * Answer "was this SHA signed off" for any commit, including one produced by a
81
+ * rebase or a squash-merge of the branch that was actually verified.
82
+ *
83
+ * Exact note first. Then the tree scan — a proof whose `commitTree` equals this
84
+ * commit's tree verified byte-identical content, which is the strongest claim
85
+ * available once the SHA has been rewritten. The binding is returned so a caller
86
+ * can tell the two apart; nothing here treats them as the same thing.
87
+ */
88
+ export declare function resolveSignoffProof(repoDir: string, rev: string): SignoffProofLookup;
@@ -1 +1,2 @@
1
1
  #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,13 @@
1
+ import { type SignoffProofStep } from './proof-record';
2
+ export interface TempRepo {
3
+ readonly dir: string;
4
+ write(relativePath: string, contents: string): void;
5
+ commit(message: string): string;
6
+ git(args: readonly string[]): string;
7
+ cleanup(): void;
8
+ }
9
+ export declare function createTempRepo(options?: {
10
+ readonly name?: string;
11
+ }): TempRepo;
12
+ /** Steps that all succeeded, one per id, with plausible timings. */
13
+ export declare function passingSteps(ids: readonly string[]): SignoffProofStep[];
@@ -0,0 +1,22 @@
1
+ /**
2
+ * The join between the runner and the proof: one sign-off run produces one
3
+ * report, and this turns that report into the signed, attachable record.
4
+ *
5
+ * Nothing here re-runs or re-judges anything. The runner owns what happened; the
6
+ * proof owns what is provable about it later. Keeping the two in one direction
7
+ * is what stops a second, drifting idea of "which steps ran" from appearing.
8
+ */
9
+ import { type SignoffProof } from './proof-record';
10
+ import type { SignoffReport } from './types';
11
+ export interface ProofFromReportInput {
12
+ readonly report: SignoffReport;
13
+ /** Repo identity the verifier's required-step table is keyed on. */
14
+ readonly repo: string;
15
+ /** Source repository. Defaults to the root the run recorded. */
16
+ readonly repoDir?: string;
17
+ /** Step ids the run treated as required. Defaults to every step the report carries. */
18
+ readonly declaredRequired?: readonly string[];
19
+ readonly key?: Uint8Array;
20
+ readonly now?: Date;
21
+ }
22
+ export declare function proofFromSignoffReport(input: ProofFromReportInput): SignoffProof;
@@ -0,0 +1,57 @@
1
+ /** A git invocation that exited non-zero, carrying stderr so the caller can act. */
2
+ export declare class SignoffGitError extends Error {
3
+ readonly args: readonly string[];
4
+ readonly status: number | null;
5
+ readonly stderr: string;
6
+ constructor(args: readonly string[], status: number | null, stderr: string);
7
+ }
8
+ export interface GitResult {
9
+ readonly status: number | null;
10
+ readonly stdout: string;
11
+ readonly stderr: string;
12
+ }
13
+ /**
14
+ * Run git and hand back the raw result. `GIT_OPTIONAL_LOCKS=0` keeps a read
15
+ * from touching the index while another agent works the same worktree — this
16
+ * repo is shared by concurrent sessions.
17
+ */
18
+ export declare function runGit(repoDir: string, args: readonly string[], options?: {
19
+ readonly input?: string;
20
+ readonly env?: Readonly<Record<string, string>>;
21
+ }): GitResult;
22
+ /** Run git, or throw. Trailing newline is stripped — every caller wants the value, not the line. */
23
+ export declare function gitText(repoDir: string, args: readonly string[], options?: {
24
+ readonly input?: string;
25
+ readonly env?: Readonly<Record<string, string>>;
26
+ }): string;
27
+ /**
28
+ * Is `ancestor` reachable from `descendant`? A port rather than a direct call so
29
+ * the verifier stays a pure function over facts a caller supplies.
30
+ */
31
+ export type IsAncestorFn = (ancestor: string, descendant: string) => boolean;
32
+ export declare function gitIsAncestor(repoDir: string): IsAncestorFn;
33
+ export interface CommitFacts {
34
+ /** 40-hex commit id. */
35
+ readonly commit: string;
36
+ /** 40-hex id of the tree the COMMIT points at. */
37
+ readonly commitTree: string;
38
+ readonly parents: readonly string[];
39
+ /** Committer date, UTC ISO-8601 with a `Z` suffix. */
40
+ readonly committedAt: string;
41
+ }
42
+ /** Resolve a revision to the commit it names, failing loud on an unknown rev. */
43
+ export declare function resolveCommit(repoDir: string, rev: string): string;
44
+ export declare function readCommitFacts(repoDir: string, rev: string): CommitFacts;
45
+ /**
46
+ * Hash the tree the checks actually ran against, including uncommitted and
47
+ * untracked (non-ignored) files.
48
+ *
49
+ * This is the field that makes drift detectable. A sign-off that ran over an
50
+ * edited worktree produces a tree id no commit carries, so it cannot verify
51
+ * against the commit it claims — which is the intended outcome, not a bug.
52
+ *
53
+ * Written through a throwaway index (`GIT_INDEX_FILE`) so a concurrent agent's
54
+ * staged work in the real index is neither read nor disturbed. `git add -A`
55
+ * honours `.gitignore`, so `node_modules` / `dist` stay out.
56
+ */
57
+ export declare function computeWorktreeTree(repoDir: string): string;