@tangle-network/braid 0.2.2 → 0.3.0

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 (703) hide show
  1. package/README.md +210 -153
  2. package/THIRD_PARTY_LICENSES.json +8 -0
  3. package/THIRD_PARTY_NOTICES.md +5 -3
  4. package/dist/adapters/analysis/eval-analyst.d.ts.map +1 -1
  5. package/dist/adapters/analysis/eval-analyst.js +27 -7
  6. package/dist/adapters/analysis/eval-analyst.js.map +1 -1
  7. package/dist/adapters/analysis/managed-analysis-runtime.d.ts +3 -1
  8. package/dist/adapters/analysis/managed-analysis-runtime.d.ts.map +1 -1
  9. package/dist/adapters/analysis/managed-analysis-runtime.js +10 -2
  10. package/dist/adapters/analysis/managed-analysis-runtime.js.map +1 -1
  11. package/dist/adapters/analysis/python-runner.js +3 -3
  12. package/dist/adapters/analysis/python-runner.js.map +1 -1
  13. package/dist/adapters/analysis/question-analyst.d.ts +4 -4
  14. package/dist/adapters/analysis/question-analyst.d.ts.map +1 -1
  15. package/dist/adapters/analysis/question-analyst.js +192 -10
  16. package/dist/adapters/analysis/question-analyst.js.map +1 -1
  17. package/dist/adapters/analysis/runtime-model-owner.d.ts.map +1 -1
  18. package/dist/adapters/analysis/runtime-model-owner.js +19 -15
  19. package/dist/adapters/analysis/runtime-model-owner.js.map +1 -1
  20. package/dist/adapters/analysis/runtime-retained-model-call.d.ts.map +1 -1
  21. package/dist/adapters/analysis/runtime-retained-model-call.js +20 -8
  22. package/dist/adapters/analysis/runtime-retained-model-call.js.map +1 -1
  23. package/dist/adapters/analysis/trace-analysis-adapter.d.ts.map +1 -1
  24. package/dist/adapters/analysis/trace-analysis-adapter.js +17 -8
  25. package/dist/adapters/analysis/trace-analysis-adapter.js.map +1 -1
  26. package/dist/adapters/connections/aws-nitro-root-g1.d.ts +11 -0
  27. package/dist/adapters/connections/aws-nitro-root-g1.d.ts.map +1 -0
  28. package/dist/adapters/connections/aws-nitro-root-g1.js +24 -0
  29. package/dist/adapters/connections/aws-nitro-root-g1.js.map +1 -0
  30. package/dist/adapters/connections/cli-bridge-model-validation.d.ts +3 -1
  31. package/dist/adapters/connections/cli-bridge-model-validation.d.ts.map +1 -1
  32. package/dist/adapters/connections/cli-bridge-model-validation.js +11 -4
  33. package/dist/adapters/connections/cli-bridge-model-validation.js.map +1 -1
  34. package/dist/adapters/connections/nitro-confidential-attestation.d.ts +36 -0
  35. package/dist/adapters/connections/nitro-confidential-attestation.d.ts.map +1 -0
  36. package/dist/adapters/connections/nitro-confidential-attestation.js +255 -0
  37. package/dist/adapters/connections/nitro-confidential-attestation.js.map +1 -0
  38. package/dist/adapters/connections/production-connection-health.d.ts.map +1 -1
  39. package/dist/adapters/connections/production-connection-health.js +5 -2
  40. package/dist/adapters/connections/production-connection-health.js.map +1 -1
  41. package/dist/adapters/connections/production-connection-providers.d.ts +13 -0
  42. package/dist/adapters/connections/production-connection-providers.d.ts.map +1 -1
  43. package/dist/adapters/connections/production-connection-providers.js +59 -3
  44. package/dist/adapters/connections/production-connection-providers.js.map +1 -1
  45. package/dist/adapters/connections/production-connection-types.d.ts +10 -3
  46. package/dist/adapters/connections/production-connection-types.d.ts.map +1 -1
  47. package/dist/adapters/connections/production-connection-types.js.map +1 -1
  48. package/dist/adapters/connections/production-connections.d.ts +4 -2
  49. package/dist/adapters/connections/production-connections.d.ts.map +1 -1
  50. package/dist/adapters/connections/production-connections.js +2 -1
  51. package/dist/adapters/connections/production-connections.js.map +1 -1
  52. package/dist/adapters/connections/tangle-router-client.d.ts +20 -0
  53. package/dist/adapters/connections/tangle-router-client.d.ts.map +1 -0
  54. package/dist/adapters/connections/tangle-router-client.js +33 -0
  55. package/dist/adapters/connections/tangle-router-client.js.map +1 -0
  56. package/dist/adapters/runtime/abortable.d.ts +3 -0
  57. package/dist/adapters/runtime/abortable.d.ts.map +1 -0
  58. package/dist/adapters/runtime/abortable.js +12 -0
  59. package/dist/adapters/runtime/abortable.js.map +1 -0
  60. package/dist/adapters/runtime/agent-runtime-execution.d.ts +5 -0
  61. package/dist/adapters/runtime/agent-runtime-execution.d.ts.map +1 -1
  62. package/dist/adapters/runtime/agent-runtime-execution.js +75 -23
  63. package/dist/adapters/runtime/agent-runtime-execution.js.map +1 -1
  64. package/dist/adapters/runtime/cli-bridge-context-transfer.d.ts +13 -0
  65. package/dist/adapters/runtime/cli-bridge-context-transfer.d.ts.map +1 -0
  66. package/dist/adapters/runtime/cli-bridge-context-transfer.js +39 -0
  67. package/dist/adapters/runtime/cli-bridge-context-transfer.js.map +1 -0
  68. package/dist/adapters/runtime/cli-bridge-retained-execution.d.ts +3 -1
  69. package/dist/adapters/runtime/cli-bridge-retained-execution.d.ts.map +1 -1
  70. package/dist/adapters/runtime/cli-bridge-retained-execution.js +4 -0
  71. package/dist/adapters/runtime/cli-bridge-retained-execution.js.map +1 -1
  72. package/dist/adapters/runtime/cli-bridge-retained-run.d.ts.map +1 -1
  73. package/dist/adapters/runtime/cli-bridge-retained-run.js +28 -6
  74. package/dist/adapters/runtime/cli-bridge-retained-run.js.map +1 -1
  75. package/dist/adapters/runtime/lazy-execution.d.ts +49 -0
  76. package/dist/adapters/runtime/lazy-execution.d.ts.map +1 -0
  77. package/dist/adapters/runtime/lazy-execution.js +111 -0
  78. package/dist/adapters/runtime/lazy-execution.js.map +1 -0
  79. package/dist/adapters/runtime/mode-routing-execution.d.ts +27 -3
  80. package/dist/adapters/runtime/mode-routing-execution.d.ts.map +1 -1
  81. package/dist/adapters/runtime/mode-routing-execution.js +25 -0
  82. package/dist/adapters/runtime/mode-routing-execution.js.map +1 -1
  83. package/dist/adapters/runtime/native-interactive-run-broker.d.ts.map +1 -1
  84. package/dist/adapters/runtime/native-interactive-run-broker.js +1 -10
  85. package/dist/adapters/runtime/native-interactive-run-broker.js.map +1 -1
  86. package/dist/adapters/runtime/prepared-execution.d.ts +2 -2
  87. package/dist/adapters/runtime/prepared-execution.d.ts.map +1 -1
  88. package/dist/adapters/runtime/production-backend-common.d.ts +3 -1
  89. package/dist/adapters/runtime/production-backend-common.d.ts.map +1 -1
  90. package/dist/adapters/runtime/production-backend-common.js +7 -0
  91. package/dist/adapters/runtime/production-backend-common.js.map +1 -1
  92. package/dist/adapters/runtime/production-cli-bridge-backend.d.ts +9 -0
  93. package/dist/adapters/runtime/production-cli-bridge-backend.d.ts.map +1 -1
  94. package/dist/adapters/runtime/production-cli-bridge-backend.js +61 -27
  95. package/dist/adapters/runtime/production-cli-bridge-backend.js.map +1 -1
  96. package/dist/adapters/runtime/production-tangle-inference-backend.d.ts.map +1 -1
  97. package/dist/adapters/runtime/production-tangle-inference-backend.js +3 -2
  98. package/dist/adapters/runtime/production-tangle-inference-backend.js.map +1 -1
  99. package/dist/adapters/runtime/production-tangle-sandbox-backend.d.ts +8 -2
  100. package/dist/adapters/runtime/production-tangle-sandbox-backend.d.ts.map +1 -1
  101. package/dist/adapters/runtime/production-tangle-sandbox-backend.js +78 -12
  102. package/dist/adapters/runtime/production-tangle-sandbox-backend.js.map +1 -1
  103. package/dist/adapters/runtime/retained-execution-contract.d.ts +8 -4
  104. package/dist/adapters/runtime/retained-execution-contract.d.ts.map +1 -1
  105. package/dist/adapters/runtime/retained-execution-projection.d.ts +5 -5
  106. package/dist/adapters/runtime/retained-execution-projection.d.ts.map +1 -1
  107. package/dist/adapters/runtime/retained-execution-projection.js +8 -3
  108. package/dist/adapters/runtime/retained-execution-projection.js.map +1 -1
  109. package/dist/adapters/runtime/retained-execution-state.d.ts.map +1 -1
  110. package/dist/adapters/runtime/retained-execution-state.js +5 -0
  111. package/dist/adapters/runtime/retained-execution-state.js.map +1 -1
  112. package/dist/adapters/runtime/retained-execution-stream.d.ts +6 -1
  113. package/dist/adapters/runtime/retained-execution-stream.d.ts.map +1 -1
  114. package/dist/adapters/runtime/retained-execution-stream.js +47 -10
  115. package/dist/adapters/runtime/retained-execution-stream.js.map +1 -1
  116. package/dist/adapters/runtime/retained-execution.d.ts +24 -0
  117. package/dist/adapters/runtime/retained-execution.d.ts.map +1 -1
  118. package/dist/adapters/runtime/retained-execution.js +102 -20
  119. package/dist/adapters/runtime/retained-execution.js.map +1 -1
  120. package/dist/adapters/runtime/retained-native-continuation.d.ts +14 -0
  121. package/dist/adapters/runtime/retained-native-continuation.d.ts.map +1 -0
  122. package/dist/adapters/runtime/retained-native-continuation.js +110 -0
  123. package/dist/adapters/runtime/retained-native-continuation.js.map +1 -0
  124. package/dist/adapters/runtime/supervisor-control.d.ts +39 -11
  125. package/dist/adapters/runtime/supervisor-control.d.ts.map +1 -1
  126. package/dist/adapters/runtime/supervisor-control.js +115 -25
  127. package/dist/adapters/runtime/supervisor-control.js.map +1 -1
  128. package/dist/adapters/runtime/tangle-retained-execution.d.ts +5 -1
  129. package/dist/adapters/runtime/tangle-retained-execution.d.ts.map +1 -1
  130. package/dist/adapters/runtime/tangle-retained-execution.js +8 -1
  131. package/dist/adapters/runtime/tangle-retained-execution.js.map +1 -1
  132. package/dist/adapters/runtime/tangle-retained-interactive-contract.d.ts +2 -0
  133. package/dist/adapters/runtime/tangle-retained-interactive-contract.d.ts.map +1 -1
  134. package/dist/adapters/runtime/tangle-retained-interactive-contract.js +9 -0
  135. package/dist/adapters/runtime/tangle-retained-interactive-contract.js.map +1 -1
  136. package/dist/adapters/runtime/tangle-retained-interactive-execution.d.ts +5 -1
  137. package/dist/adapters/runtime/tangle-retained-interactive-execution.d.ts.map +1 -1
  138. package/dist/adapters/runtime/tangle-retained-interactive-execution.js +20 -3
  139. package/dist/adapters/runtime/tangle-retained-interactive-execution.js.map +1 -1
  140. package/dist/adapters/runtime/tangle-retained-run.d.ts +4 -2
  141. package/dist/adapters/runtime/tangle-retained-run.d.ts.map +1 -1
  142. package/dist/adapters/runtime/tangle-retained-run.js +110 -13
  143. package/dist/adapters/runtime/tangle-retained-run.js.map +1 -1
  144. package/dist/adapters/storage/sqlite-crypto.d.ts.map +1 -1
  145. package/dist/adapters/storage/sqlite-crypto.js +9 -1
  146. package/dist/adapters/storage/sqlite-crypto.js.map +1 -1
  147. package/dist/adapters/storage/storage-validation.d.ts +1 -1
  148. package/dist/adapters/storage/storage-validation.d.ts.map +1 -1
  149. package/dist/adapters/storage/storage-validation.js +2 -1
  150. package/dist/adapters/storage/storage-validation.js.map +1 -1
  151. package/dist/adapters/tui/application-ui-controller.d.ts.map +1 -1
  152. package/dist/adapters/tui/application-ui-controller.js +38 -5
  153. package/dist/adapters/tui/application-ui-controller.js.map +1 -1
  154. package/dist/adapters/tui/ui-capabilities.d.ts +2 -1
  155. package/dist/adapters/tui/ui-capabilities.d.ts.map +1 -1
  156. package/dist/adapters/tui/ui-capabilities.js +79 -31
  157. package/dist/adapters/tui/ui-capabilities.js.map +1 -1
  158. package/dist/adapters/tui/ui-command-dispatch.d.ts.map +1 -1
  159. package/dist/adapters/tui/ui-command-dispatch.js +15 -5
  160. package/dist/adapters/tui/ui-command-dispatch.js.map +1 -1
  161. package/dist/adapters/tui/ui-conversation-dispatch.d.ts +1 -1
  162. package/dist/adapters/tui/ui-conversation-dispatch.d.ts.map +1 -1
  163. package/dist/adapters/tui/ui-conversation-dispatch.js +83 -7
  164. package/dist/adapters/tui/ui-conversation-dispatch.js.map +1 -1
  165. package/dist/adapters/tui/ui-core-dispatch.d.ts.map +1 -1
  166. package/dist/adapters/tui/ui-core-dispatch.js +28 -4
  167. package/dist/adapters/tui/ui-core-dispatch.js.map +1 -1
  168. package/dist/adapters/tui/ui-entity-details.d.ts.map +1 -1
  169. package/dist/adapters/tui/ui-entity-details.js +26 -4
  170. package/dist/adapters/tui/ui-entity-details.js.map +1 -1
  171. package/dist/adapters/tui/ui-fixtures.d.ts +1 -1
  172. package/dist/adapters/tui/ui-fixtures.d.ts.map +1 -1
  173. package/dist/adapters/tui/ui-fixtures.js +41 -11
  174. package/dist/adapters/tui/ui-fixtures.js.map +1 -1
  175. package/dist/adapters/tui/ui-headless-dispatch.d.ts.map +1 -1
  176. package/dist/adapters/tui/ui-headless-dispatch.js +25 -7
  177. package/dist/adapters/tui/ui-headless-dispatch.js.map +1 -1
  178. package/dist/adapters/tui/ui-intelligence-dispatch.d.ts +2 -0
  179. package/dist/adapters/tui/ui-intelligence-dispatch.d.ts.map +1 -1
  180. package/dist/adapters/tui/ui-intelligence-dispatch.js +124 -26
  181. package/dist/adapters/tui/ui-intelligence-dispatch.js.map +1 -1
  182. package/dist/adapters/tui/ui-projection.d.ts +4 -2
  183. package/dist/adapters/tui/ui-projection.d.ts.map +1 -1
  184. package/dist/adapters/tui/ui-projection.js +94 -26
  185. package/dist/adapters/tui/ui-projection.js.map +1 -1
  186. package/dist/adapters/tui/ui-semantic-state.d.ts.map +1 -1
  187. package/dist/adapters/tui/ui-semantic-state.js +78 -21
  188. package/dist/adapters/tui/ui-semantic-state.js.map +1 -1
  189. package/dist/adapters/tui/ui-view-model.d.ts +1 -1
  190. package/dist/adapters/tui/ui-view-model.d.ts.map +1 -1
  191. package/dist/adapters/tui/ui-view-model.js +48 -6
  192. package/dist/adapters/tui/ui-view-model.js.map +1 -1
  193. package/dist/app/analysis-lifecycle.d.ts +3 -1
  194. package/dist/app/analysis-lifecycle.d.ts.map +1 -1
  195. package/dist/app/analysis-lifecycle.js +64 -2
  196. package/dist/app/analysis-lifecycle.js.map +1 -1
  197. package/dist/app/analysis-service.d.ts.map +1 -1
  198. package/dist/app/analysis-service.js +3 -2
  199. package/dist/app/analysis-service.js.map +1 -1
  200. package/dist/app/analysis-types.d.ts +2 -1
  201. package/dist/app/analysis-types.d.ts.map +1 -1
  202. package/dist/app/analysis-types.js.map +1 -1
  203. package/dist/app/application-interaction-actions.d.ts +6 -1
  204. package/dist/app/application-interaction-actions.d.ts.map +1 -1
  205. package/dist/app/application-interaction-actions.js +23 -9
  206. package/dist/app/application-interaction-actions.js.map +1 -1
  207. package/dist/app/application-lifecycle.d.ts +1 -0
  208. package/dist/app/application-lifecycle.d.ts.map +1 -1
  209. package/dist/app/application-lifecycle.js +2 -1
  210. package/dist/app/application-lifecycle.js.map +1 -1
  211. package/dist/app/application-options.d.ts +3 -1
  212. package/dist/app/application-options.d.ts.map +1 -1
  213. package/dist/app/application-port-builder.d.ts +1 -0
  214. package/dist/app/application-port-builder.d.ts.map +1 -1
  215. package/dist/app/application-port-builder.js +10 -1
  216. package/dist/app/application-port-builder.js.map +1 -1
  217. package/dist/app/application-port-runtime.d.ts +1 -0
  218. package/dist/app/application-port-runtime.d.ts.map +1 -1
  219. package/dist/app/application-port-runtime.js +1 -0
  220. package/dist/app/application-port-runtime.js.map +1 -1
  221. package/dist/app/application-ports.d.ts +18 -4
  222. package/dist/app/application-ports.d.ts.map +1 -1
  223. package/dist/app/application-runtime-wiring.d.ts.map +1 -1
  224. package/dist/app/application-runtime-wiring.js +23 -1
  225. package/dist/app/application-runtime-wiring.js.map +1 -1
  226. package/dist/app/application-support.d.ts +2 -1
  227. package/dist/app/application-support.d.ts.map +1 -1
  228. package/dist/app/application-support.js +29 -8
  229. package/dist/app/application-support.js.map +1 -1
  230. package/dist/app/application-transition.d.ts.map +1 -1
  231. package/dist/app/application-transition.js +9 -6
  232. package/dist/app/application-transition.js.map +1 -1
  233. package/dist/app/application-types.d.ts +6 -0
  234. package/dist/app/application-types.d.ts.map +1 -1
  235. package/dist/app/application.d.ts +7 -2
  236. package/dist/app/application.d.ts.map +1 -1
  237. package/dist/app/application.js +121 -12
  238. package/dist/app/application.js.map +1 -1
  239. package/dist/app/automation-actions.d.ts +7 -2
  240. package/dist/app/automation-actions.d.ts.map +1 -1
  241. package/dist/app/automation-actions.js +24 -19
  242. package/dist/app/automation-actions.js.map +1 -1
  243. package/dist/app/composition-options.d.ts +27 -0
  244. package/dist/app/composition-options.d.ts.map +1 -0
  245. package/dist/app/composition-options.js +2 -0
  246. package/dist/app/composition-options.js.map +1 -0
  247. package/dist/app/composition.d.ts +4 -58
  248. package/dist/app/composition.d.ts.map +1 -1
  249. package/dist/app/composition.js +14 -108
  250. package/dist/app/composition.js.map +1 -1
  251. package/dist/app/confidential-workspace-fork.d.ts +7 -0
  252. package/dist/app/confidential-workspace-fork.d.ts.map +1 -0
  253. package/dist/app/confidential-workspace-fork.js +26 -0
  254. package/dist/app/confidential-workspace-fork.js.map +1 -0
  255. package/dist/app/configuration-session.d.ts +9 -3
  256. package/dist/app/configuration-session.d.ts.map +1 -1
  257. package/dist/app/configuration-session.js +44 -2
  258. package/dist/app/configuration-session.js.map +1 -1
  259. package/dist/app/connections.d.ts.map +1 -1
  260. package/dist/app/connections.js +21 -0
  261. package/dist/app/connections.js.map +1 -1
  262. package/dist/app/conversation-branch-effects.d.ts +12 -0
  263. package/dist/app/conversation-branch-effects.d.ts.map +1 -0
  264. package/dist/app/conversation-branch-effects.js +820 -0
  265. package/dist/app/conversation-branch-effects.js.map +1 -0
  266. package/dist/app/conversation-branches.d.ts +1 -0
  267. package/dist/app/conversation-branches.d.ts.map +1 -1
  268. package/dist/app/conversation-branches.js +171 -26
  269. package/dist/app/conversation-branches.js.map +1 -1
  270. package/dist/app/conversation-composition.d.ts +4 -0
  271. package/dist/app/conversation-composition.d.ts.map +1 -1
  272. package/dist/app/conversation-composition.js +3 -0
  273. package/dist/app/conversation-composition.js.map +1 -1
  274. package/dist/app/conversation-context.d.ts +17 -0
  275. package/dist/app/conversation-context.d.ts.map +1 -1
  276. package/dist/app/conversation-context.js +299 -0
  277. package/dist/app/conversation-context.js.map +1 -1
  278. package/dist/app/conversation-import-builder.d.ts.map +1 -1
  279. package/dist/app/conversation-import-builder.js +1 -2
  280. package/dist/app/conversation-import-builder.js.map +1 -1
  281. package/dist/app/conversation-lifecycle.d.ts.map +1 -1
  282. package/dist/app/conversation-lifecycle.js +1 -3
  283. package/dist/app/conversation-lifecycle.js.map +1 -1
  284. package/dist/app/conversation-support.d.ts +0 -1
  285. package/dist/app/conversation-support.d.ts.map +1 -1
  286. package/dist/app/conversation-support.js +0 -5
  287. package/dist/app/conversation-support.js.map +1 -1
  288. package/dist/app/conversation-types.d.ts +36 -3
  289. package/dist/app/conversation-types.d.ts.map +1 -1
  290. package/dist/app/conversations.d.ts +1 -1
  291. package/dist/app/conversations.d.ts.map +1 -1
  292. package/dist/app/default-profiles.d.ts +4 -0
  293. package/dist/app/default-profiles.d.ts.map +1 -0
  294. package/dist/app/default-profiles.js +16 -0
  295. package/dist/app/default-profiles.js.map +1 -0
  296. package/dist/app/durable-send.d.ts +1 -1
  297. package/dist/app/durable-send.d.ts.map +1 -1
  298. package/dist/app/durable-send.js +18 -11
  299. package/dist/app/durable-send.js.map +1 -1
  300. package/dist/app/interaction-controller.d.ts.map +1 -1
  301. package/dist/app/interaction-controller.js +78 -39
  302. package/dist/app/interaction-controller.js.map +1 -1
  303. package/dist/app/interaction-response-replay.d.ts +9 -2
  304. package/dist/app/interaction-response-replay.d.ts.map +1 -1
  305. package/dist/app/interaction-response-replay.js +11 -4
  306. package/dist/app/interaction-response-replay.js.map +1 -1
  307. package/dist/app/legacy-cancel.js +1 -1
  308. package/dist/app/legacy-cancel.js.map +1 -1
  309. package/dist/app/production-composition.d.ts +6 -1
  310. package/dist/app/production-composition.d.ts.map +1 -1
  311. package/dist/app/production-composition.js +77 -4
  312. package/dist/app/production-composition.js.map +1 -1
  313. package/dist/app/profile-selection.d.ts.map +1 -1
  314. package/dist/app/profile-selection.js +12 -2
  315. package/dist/app/profile-selection.js.map +1 -1
  316. package/dist/app/provider-values.d.ts.map +1 -1
  317. package/dist/app/provider-values.js +16 -3
  318. package/dist/app/provider-values.js.map +1 -1
  319. package/dist/app/run-admission-context.d.ts +3 -0
  320. package/dist/app/run-admission-context.d.ts.map +1 -0
  321. package/dist/app/run-admission-context.js +74 -0
  322. package/dist/app/run-admission-context.js.map +1 -0
  323. package/dist/app/run-admission-continuation.d.ts +1 -0
  324. package/dist/app/run-admission-continuation.d.ts.map +1 -1
  325. package/dist/app/run-admission-continuation.js +26 -14
  326. package/dist/app/run-admission-continuation.js.map +1 -1
  327. package/dist/app/run-admission-dispatch.d.ts.map +1 -1
  328. package/dist/app/run-admission-dispatch.js +60 -16
  329. package/dist/app/run-admission-dispatch.js.map +1 -1
  330. package/dist/app/run-admission-receipt.d.ts.map +1 -1
  331. package/dist/app/run-admission-receipt.js +8 -2
  332. package/dist/app/run-admission-receipt.js.map +1 -1
  333. package/dist/app/run-admission-request.d.ts.map +1 -1
  334. package/dist/app/run-admission-request.js +19 -0
  335. package/dist/app/run-admission-request.js.map +1 -1
  336. package/dist/app/run-admission-validation.d.ts +3 -3
  337. package/dist/app/run-admission-validation.d.ts.map +1 -1
  338. package/dist/app/run-admission-validation.js +33 -30
  339. package/dist/app/run-admission-validation.js.map +1 -1
  340. package/dist/app/run-continuation.d.ts +10 -7
  341. package/dist/app/run-continuation.d.ts.map +1 -1
  342. package/dist/app/run-continuation.js +31 -17
  343. package/dist/app/run-continuation.js.map +1 -1
  344. package/dist/app/run-controls.d.ts.map +1 -1
  345. package/dist/app/run-controls.js +21 -13
  346. package/dist/app/run-controls.js.map +1 -1
  347. package/dist/app/run-event-mapper.d.ts +7 -1
  348. package/dist/app/run-event-mapper.d.ts.map +1 -1
  349. package/dist/app/run-event-mapper.js +31 -15
  350. package/dist/app/run-event-mapper.js.map +1 -1
  351. package/dist/app/run-execution-snapshot.d.ts +8 -2
  352. package/dist/app/run-execution-snapshot.d.ts.map +1 -1
  353. package/dist/app/run-execution-snapshot.js +13 -1
  354. package/dist/app/run-execution-snapshot.js.map +1 -1
  355. package/dist/app/run-execution.d.ts.map +1 -1
  356. package/dist/app/run-execution.js +78 -12
  357. package/dist/app/run-execution.js.map +1 -1
  358. package/dist/app/run-final-recovery.d.ts +34 -0
  359. package/dist/app/run-final-recovery.d.ts.map +1 -0
  360. package/dist/app/run-final-recovery.js +132 -0
  361. package/dist/app/run-final-recovery.js.map +1 -0
  362. package/dist/app/run-ingestion.js +26 -7
  363. package/dist/app/run-ingestion.js.map +1 -1
  364. package/dist/app/run-ledger.d.ts +1 -1
  365. package/dist/app/run-ledger.d.ts.map +1 -1
  366. package/dist/app/run-ledger.js +2 -4
  367. package/dist/app/run-ledger.js.map +1 -1
  368. package/dist/app/run-recovery-context.d.ts.map +1 -1
  369. package/dist/app/run-recovery-context.js +8 -1
  370. package/dist/app/run-recovery-context.js.map +1 -1
  371. package/dist/app/run-replay.d.ts +5 -2
  372. package/dist/app/run-replay.d.ts.map +1 -1
  373. package/dist/app/run-replay.js +23 -7
  374. package/dist/app/run-replay.js.map +1 -1
  375. package/dist/app/run-status.d.ts +9 -1
  376. package/dist/app/run-status.d.ts.map +1 -1
  377. package/dist/app/run-status.js +61 -10
  378. package/dist/app/run-status.js.map +1 -1
  379. package/dist/app/run-stream-sanitizer.d.ts +21 -0
  380. package/dist/app/run-stream-sanitizer.d.ts.map +1 -0
  381. package/dist/app/run-stream-sanitizer.js +73 -0
  382. package/dist/app/run-stream-sanitizer.js.map +1 -0
  383. package/dist/app/shutdown-controller.d.ts +1 -1
  384. package/dist/app/shutdown-controller.d.ts.map +1 -1
  385. package/dist/app/shutdown-controller.js +25 -15
  386. package/dist/app/shutdown-controller.js.map +1 -1
  387. package/dist/app/storage-journal-support.d.ts +1 -1
  388. package/dist/app/storage-journal-support.d.ts.map +1 -1
  389. package/dist/app/storage-journal-support.js +8 -2
  390. package/dist/app/storage-journal-support.js.map +1 -1
  391. package/dist/app/supervisor-projection.d.ts +8 -0
  392. package/dist/app/supervisor-projection.d.ts.map +1 -1
  393. package/dist/app/supervisor-projection.js +14 -0
  394. package/dist/app/supervisor-projection.js.map +1 -1
  395. package/dist/app/supervisor-service.d.ts +6 -5
  396. package/dist/app/supervisor-service.d.ts.map +1 -1
  397. package/dist/app/supervisor-service.js +10 -6
  398. package/dist/app/supervisor-service.js.map +1 -1
  399. package/dist/app/workspace-request.d.ts +3 -0
  400. package/dist/app/workspace-request.d.ts.map +1 -0
  401. package/dist/app/workspace-request.js +2 -0
  402. package/dist/app/workspace-request.js.map +1 -0
  403. package/dist/bin/args.d.ts +1 -1
  404. package/dist/bin/args.d.ts.map +1 -1
  405. package/dist/bin/args.js +4 -2
  406. package/dist/bin/args.js.map +1 -1
  407. package/dist/bin/braid-runtime.d.ts.map +1 -1
  408. package/dist/bin/braid-runtime.js +3 -17
  409. package/dist/bin/braid-runtime.js.map +1 -1
  410. package/dist/bin/fixture-application.d.ts +9 -0
  411. package/dist/bin/fixture-application.d.ts.map +1 -0
  412. package/dist/bin/fixture-application.js +36 -0
  413. package/dist/bin/fixture-application.js.map +1 -0
  414. package/dist/bin/interface-runner.d.ts.map +1 -1
  415. package/dist/bin/interface-runner.js +3 -0
  416. package/dist/bin/interface-runner.js.map +1 -1
  417. package/dist/bin/interface-state-recorder.d.ts.map +1 -1
  418. package/dist/bin/interface-state-recorder.js +6 -2
  419. package/dist/bin/interface-state-recorder.js.map +1 -1
  420. package/dist/bin/native-interactive-actions.d.ts +1 -1
  421. package/dist/bin/native-interactive-actions.d.ts.map +1 -1
  422. package/dist/bin/native-interactive-actions.js +123 -24
  423. package/dist/bin/native-interactive-actions.js.map +1 -1
  424. package/dist/bin/production-application.d.ts.map +1 -1
  425. package/dist/bin/production-application.js +3 -0
  426. package/dist/bin/production-application.js.map +1 -1
  427. package/dist/bin/production-setup-discovery.d.ts.map +1 -1
  428. package/dist/bin/production-setup-discovery.js +3 -0
  429. package/dist/bin/production-setup-discovery.js.map +1 -1
  430. package/dist/bin/production-setup-persistence.d.ts.map +1 -1
  431. package/dist/bin/production-setup-persistence.js +4 -0
  432. package/dist/bin/production-setup-persistence.js.map +1 -1
  433. package/dist/bin/production-setup-types.d.ts +5 -0
  434. package/dist/bin/production-setup-types.d.ts.map +1 -1
  435. package/dist/bin/production-setup-validation.d.ts.map +1 -1
  436. package/dist/bin/production-setup-validation.js +19 -1
  437. package/dist/bin/production-setup-validation.js.map +1 -1
  438. package/dist/bin/production-startup.d.ts +2 -0
  439. package/dist/bin/production-startup.d.ts.map +1 -1
  440. package/dist/bin/production-startup.js +19 -0
  441. package/dist/bin/production-startup.js.map +1 -1
  442. package/dist/domain/bounded-structured.d.ts.map +1 -1
  443. package/dist/domain/bounded-structured.js +19 -0
  444. package/dist/domain/bounded-structured.js.map +1 -1
  445. package/dist/domain/connection-removal.d.ts +1 -1
  446. package/dist/domain/connection-removal.d.ts.map +1 -1
  447. package/dist/domain/connection-removal.js +3 -2
  448. package/dist/domain/connection-removal.js.map +1 -1
  449. package/dist/domain/entities-core.d.ts +19 -1
  450. package/dist/domain/entities-core.d.ts.map +1 -1
  451. package/dist/domain/entities-core.js +2 -0
  452. package/dist/domain/entities-core.js.map +1 -1
  453. package/dist/domain/entities-interactions.d.ts +9 -0
  454. package/dist/domain/entities-interactions.d.ts.map +1 -1
  455. package/dist/domain/events-legacy.d.ts +5 -0
  456. package/dist/domain/events-legacy.d.ts.map +1 -1
  457. package/dist/domain/events.d.ts +15 -0
  458. package/dist/domain/events.d.ts.map +1 -1
  459. package/dist/domain/events.js +13 -2
  460. package/dist/domain/events.js.map +1 -1
  461. package/dist/domain/interaction-identity.d.ts +4 -0
  462. package/dist/domain/interaction-identity.d.ts.map +1 -0
  463. package/dist/domain/interaction-identity.js +7 -0
  464. package/dist/domain/interaction-identity.js.map +1 -0
  465. package/dist/domain/invariants-base.d.ts +7 -0
  466. package/dist/domain/invariants-base.d.ts.map +1 -1
  467. package/dist/domain/invariants-base.js +106 -0
  468. package/dist/domain/invariants-base.js.map +1 -1
  469. package/dist/domain/invariants-profile.d.ts.map +1 -1
  470. package/dist/domain/invariants-profile.js +73 -1
  471. package/dist/domain/invariants-profile.js.map +1 -1
  472. package/dist/domain/invariants-retained-admission.d.ts +1 -0
  473. package/dist/domain/invariants-retained-admission.d.ts.map +1 -1
  474. package/dist/domain/invariants-retained-admission.js +12 -1
  475. package/dist/domain/invariants-retained-admission.js.map +1 -1
  476. package/dist/domain/invariants-run.d.ts.map +1 -1
  477. package/dist/domain/invariants-run.js +32 -4
  478. package/dist/domain/invariants-run.js.map +1 -1
  479. package/dist/domain/invariants-state.d.ts +1 -1
  480. package/dist/domain/invariants-state.d.ts.map +1 -1
  481. package/dist/domain/invariants-state.js +26 -0
  482. package/dist/domain/invariants-state.js.map +1 -1
  483. package/dist/domain/legacy-interaction-snapshot.d.ts.map +1 -1
  484. package/dist/domain/legacy-interaction-snapshot.js +95 -29
  485. package/dist/domain/legacy-interaction-snapshot.js.map +1 -1
  486. package/dist/domain/materialized-state-snapshot.d.ts.map +1 -1
  487. package/dist/domain/materialized-state-snapshot.js +33 -4
  488. package/dist/domain/materialized-state-snapshot.js.map +1 -1
  489. package/dist/domain/materialized-state.d.ts +5 -0
  490. package/dist/domain/materialized-state.d.ts.map +1 -1
  491. package/dist/domain/receipts.d.ts +3 -0
  492. package/dist/domain/receipts.d.ts.map +1 -1
  493. package/dist/domain/receipts.js +6 -0
  494. package/dist/domain/receipts.js.map +1 -1
  495. package/dist/domain/redaction.d.ts +1 -0
  496. package/dist/domain/redaction.d.ts.map +1 -1
  497. package/dist/domain/redaction.js +43 -2
  498. package/dist/domain/redaction.js.map +1 -1
  499. package/dist/domain/reducer-conversation-events.d.ts +1 -1
  500. package/dist/domain/reducer-conversation-events.d.ts.map +1 -1
  501. package/dist/domain/reducer-conversation-events.js +9 -6
  502. package/dist/domain/reducer-conversation-events.js.map +1 -1
  503. package/dist/domain/reducer-domain-events.d.ts +1 -1
  504. package/dist/domain/reducer-domain-events.d.ts.map +1 -1
  505. package/dist/domain/reducer-domain-events.js +30 -0
  506. package/dist/domain/reducer-domain-events.js.map +1 -1
  507. package/dist/domain/reducer-helpers.d.ts +6 -3
  508. package/dist/domain/reducer-helpers.d.ts.map +1 -1
  509. package/dist/domain/reducer-helpers.js +9 -9
  510. package/dist/domain/reducer-helpers.js.map +1 -1
  511. package/dist/domain/reducer-interactions.d.ts.map +1 -1
  512. package/dist/domain/reducer-interactions.js +31 -16
  513. package/dist/domain/reducer-interactions.js.map +1 -1
  514. package/dist/domain/reducer-legacy.d.ts +1 -1
  515. package/dist/domain/reducer-legacy.d.ts.map +1 -1
  516. package/dist/domain/reducer-legacy.js +8 -4
  517. package/dist/domain/reducer-legacy.js.map +1 -1
  518. package/dist/domain/reducer-lifecycle.d.ts +1 -1
  519. package/dist/domain/reducer-lifecycle.d.ts.map +1 -1
  520. package/dist/domain/reducer-lifecycle.js +35 -30
  521. package/dist/domain/reducer-lifecycle.js.map +1 -1
  522. package/dist/domain/reducer-replay.d.ts.map +1 -1
  523. package/dist/domain/reducer-replay.js +4 -4
  524. package/dist/domain/reducer-replay.js.map +1 -1
  525. package/dist/domain/reducer-run-graph.d.ts.map +1 -1
  526. package/dist/domain/reducer-run-graph.js +2 -1
  527. package/dist/domain/reducer-run-graph.js.map +1 -1
  528. package/dist/domain/reducer-runtime.d.ts.map +1 -1
  529. package/dist/domain/reducer-runtime.js +22 -11
  530. package/dist/domain/reducer-runtime.js.map +1 -1
  531. package/dist/domain/reducer-support.js +1 -1
  532. package/dist/domain/reducer-support.js.map +1 -1
  533. package/dist/domain/run-contracts.d.ts +5 -9
  534. package/dist/domain/run-contracts.d.ts.map +1 -1
  535. package/dist/domain/runtime-projection.d.ts +5 -0
  536. package/dist/domain/runtime-projection.d.ts.map +1 -1
  537. package/dist/domain/runtime-projection.js.map +1 -1
  538. package/dist/domain/secret-sanitizer.d.ts +7 -0
  539. package/dist/domain/secret-sanitizer.d.ts.map +1 -1
  540. package/dist/domain/secret-sanitizer.js +505 -9
  541. package/dist/domain/secret-sanitizer.js.map +1 -1
  542. package/dist/domain/state.d.ts +23 -1
  543. package/dist/domain/state.d.ts.map +1 -1
  544. package/dist/domain/state.js +60 -0
  545. package/dist/domain/state.js.map +1 -1
  546. package/dist/domain/terminal-sanitizer.d.ts +1 -0
  547. package/dist/domain/terminal-sanitizer.d.ts.map +1 -1
  548. package/dist/domain/terminal-sanitizer.js +35 -10
  549. package/dist/domain/terminal-sanitizer.js.map +1 -1
  550. package/dist/domain/workspace-request.d.ts +11 -0
  551. package/dist/domain/workspace-request.d.ts.map +1 -0
  552. package/dist/domain/workspace-request.js +86 -0
  553. package/dist/domain/workspace-request.js.map +1 -0
  554. package/dist/eval/execution.d.ts +1 -1
  555. package/dist/eval/execution.d.ts.map +1 -1
  556. package/dist/eval/execution.js +6 -2
  557. package/dist/eval/execution.js.map +1 -1
  558. package/dist/eval/product-path.d.ts.map +1 -1
  559. package/dist/eval/product-path.js +4 -2
  560. package/dist/eval/product-path.js.map +1 -1
  561. package/dist/index.d.ts +6 -2
  562. package/dist/index.d.ts.map +1 -1
  563. package/dist/index.js +2 -0
  564. package/dist/index.js.map +1 -1
  565. package/dist/ports/execution.d.ts +44 -6
  566. package/dist/ports/execution.d.ts.map +1 -1
  567. package/dist/ports/execution.js +10 -0
  568. package/dist/ports/execution.js.map +1 -1
  569. package/dist/startup/durable-runtime.d.ts +36 -1
  570. package/dist/startup/durable-runtime.d.ts.map +1 -1
  571. package/dist/startup/durable-runtime.js +135 -1
  572. package/dist/startup/durable-runtime.js.map +1 -1
  573. package/dist/testing/supervision-fixture.d.ts +32 -0
  574. package/dist/testing/supervision-fixture.d.ts.map +1 -0
  575. package/dist/testing/supervision-fixture.js +115 -0
  576. package/dist/testing/supervision-fixture.js.map +1 -0
  577. package/dist/testing/supervision-ui-fixture.d.ts +4 -0
  578. package/dist/testing/supervision-ui-fixture.d.ts.map +1 -0
  579. package/dist/testing/supervision-ui-fixture.js +74 -0
  580. package/dist/testing/supervision-ui-fixture.js.map +1 -0
  581. package/dist/version.d.ts.map +1 -1
  582. package/dist/version.js +3 -1
  583. package/dist/version.js.map +1 -1
  584. package/dist/views/headless/protocol.d.ts +1 -1
  585. package/dist/views/headless/protocol.d.ts.map +1 -1
  586. package/dist/views/headless/rpc-parser.d.ts.map +1 -1
  587. package/dist/views/headless/rpc-parser.js +57 -5
  588. package/dist/views/headless/rpc-parser.js.map +1 -1
  589. package/dist/views/headless/rpc.d.ts.map +1 -1
  590. package/dist/views/headless/rpc.js +28 -14
  591. package/dist/views/headless/rpc.js.map +1 -1
  592. package/dist/views/shared/analysis-presentation.d.ts.map +1 -1
  593. package/dist/views/shared/analysis-presentation.js +42 -4
  594. package/dist/views/shared/analysis-presentation.js.map +1 -1
  595. package/dist/views/shared/command-registry.js +5 -5
  596. package/dist/views/shared/command-registry.js.map +1 -1
  597. package/dist/views/shared/duration.d.ts.map +1 -1
  598. package/dist/views/shared/duration.js +3 -1
  599. package/dist/views/shared/duration.js.map +1 -1
  600. package/dist/views/shared/headless-commands.d.ts +1 -1
  601. package/dist/views/shared/headless-commands.d.ts.map +1 -1
  602. package/dist/views/shared/headless-commands.js +13 -2
  603. package/dist/views/shared/headless-commands.js.map +1 -1
  604. package/dist/views/shared/intents.d.ts +6 -0
  605. package/dist/views/shared/intents.d.ts.map +1 -1
  606. package/dist/views/shared/models.d.ts +54 -0
  607. package/dist/views/shared/models.d.ts.map +1 -1
  608. package/dist/views/shared/models.js.map +1 -1
  609. package/dist/views/shared/native-interactive-actions.d.ts +19 -0
  610. package/dist/views/shared/native-interactive-actions.d.ts.map +1 -1
  611. package/dist/views/shared/run-selection.d.ts +11 -0
  612. package/dist/views/shared/run-selection.d.ts.map +1 -0
  613. package/dist/views/shared/run-selection.js +26 -0
  614. package/dist/views/shared/run-selection.js.map +1 -0
  615. package/dist/views/shared/semantic-activity.d.ts.map +1 -1
  616. package/dist/views/shared/semantic-activity.js +4 -1
  617. package/dist/views/shared/semantic-activity.js.map +1 -1
  618. package/dist/views/shared/semantic-projection.d.ts.map +1 -1
  619. package/dist/views/shared/semantic-projection.js +146 -1
  620. package/dist/views/shared/semantic-projection.js.map +1 -1
  621. package/dist/views/tui/activity-browser.d.ts +6 -2
  622. package/dist/views/tui/activity-browser.d.ts.map +1 -1
  623. package/dist/views/tui/activity-browser.js +50 -5
  624. package/dist/views/tui/activity-browser.js.map +1 -1
  625. package/dist/views/tui/command-palette.d.ts.map +1 -1
  626. package/dist/views/tui/command-palette.js +1 -0
  627. package/dist/views/tui/command-palette.js.map +1 -1
  628. package/dist/views/tui/configuration-wizard-presentation.d.ts +2 -1
  629. package/dist/views/tui/configuration-wizard-presentation.d.ts.map +1 -1
  630. package/dist/views/tui/configuration-wizard-presentation.js +45 -4
  631. package/dist/views/tui/configuration-wizard-presentation.js.map +1 -1
  632. package/dist/views/tui/configuration-wizard.d.ts.map +1 -1
  633. package/dist/views/tui/configuration-wizard.js +60 -65
  634. package/dist/views/tui/configuration-wizard.js.map +1 -1
  635. package/dist/views/tui/conversation-overlay-actions.d.ts.map +1 -1
  636. package/dist/views/tui/conversation-overlay-actions.js +8 -0
  637. package/dist/views/tui/conversation-overlay-actions.js.map +1 -1
  638. package/dist/views/tui/conversation-overlay-helpers.d.ts +0 -1
  639. package/dist/views/tui/conversation-overlay-helpers.d.ts.map +1 -1
  640. package/dist/views/tui/conversation-overlay-helpers.js +2 -5
  641. package/dist/views/tui/conversation-overlay-helpers.js.map +1 -1
  642. package/dist/views/tui/entity-browser-layout.js +9 -4
  643. package/dist/views/tui/entity-browser-layout.js.map +1 -1
  644. package/dist/views/tui/entity-browser.d.ts +2 -0
  645. package/dist/views/tui/entity-browser.d.ts.map +1 -1
  646. package/dist/views/tui/entity-browser.js +5 -0
  647. package/dist/views/tui/entity-browser.js.map +1 -1
  648. package/dist/views/tui/execution-target.d.ts.map +1 -1
  649. package/dist/views/tui/execution-target.js +6 -3
  650. package/dist/views/tui/execution-target.js.map +1 -1
  651. package/dist/views/tui/fork-preview.d.ts.map +1 -1
  652. package/dist/views/tui/fork-preview.js +10 -0
  653. package/dist/views/tui/fork-preview.js.map +1 -1
  654. package/dist/views/tui/profile-compatibility.js +2 -2
  655. package/dist/views/tui/profile-compatibility.js.map +1 -1
  656. package/dist/views/tui/selector.d.ts +10 -0
  657. package/dist/views/tui/selector.d.ts.map +1 -1
  658. package/dist/views/tui/selector.js +61 -2
  659. package/dist/views/tui/selector.js.map +1 -1
  660. package/dist/views/tui/setup-stage-rendering.d.ts +23 -0
  661. package/dist/views/tui/setup-stage-rendering.d.ts.map +1 -0
  662. package/dist/views/tui/setup-stage-rendering.js +60 -0
  663. package/dist/views/tui/setup-stage-rendering.js.map +1 -0
  664. package/dist/views/tui/supervisor-actions.d.ts +19 -0
  665. package/dist/views/tui/supervisor-actions.d.ts.map +1 -0
  666. package/dist/views/tui/supervisor-actions.js +59 -0
  667. package/dist/views/tui/supervisor-actions.js.map +1 -0
  668. package/dist/views/tui/terminal-app.d.ts.map +1 -1
  669. package/dist/views/tui/terminal-app.js +3 -0
  670. package/dist/views/tui/terminal-app.js.map +1 -1
  671. package/dist/views/tui/terminal-chrome.d.ts +1 -1
  672. package/dist/views/tui/terminal-chrome.d.ts.map +1 -1
  673. package/dist/views/tui/terminal-chrome.js +54 -4
  674. package/dist/views/tui/terminal-chrome.js.map +1 -1
  675. package/dist/views/tui/terminal-command-controller.d.ts.map +1 -1
  676. package/dist/views/tui/terminal-command-controller.js +10 -5
  677. package/dist/views/tui/terminal-command-controller.js.map +1 -1
  678. package/dist/views/tui/terminal-identity.js +1 -1
  679. package/dist/views/tui/terminal-identity.js.map +1 -1
  680. package/dist/views/tui/terminal-input-controller.d.ts.map +1 -1
  681. package/dist/views/tui/terminal-input-controller.js +26 -4
  682. package/dist/views/tui/terminal-input-controller.js.map +1 -1
  683. package/dist/views/tui/terminal-overlays.d.ts +2 -0
  684. package/dist/views/tui/terminal-overlays.d.ts.map +1 -1
  685. package/dist/views/tui/terminal-overlays.js +15 -0
  686. package/dist/views/tui/terminal-overlays.js.map +1 -1
  687. package/dist/views/tui/terminal-surface-overlays.d.ts +4 -0
  688. package/dist/views/tui/terminal-surface-overlays.d.ts.map +1 -1
  689. package/dist/views/tui/terminal-surface-overlays.js +243 -1
  690. package/dist/views/tui/terminal-surface-overlays.js.map +1 -1
  691. package/dist/views/tui/workspace-request-form.d.ts +19 -0
  692. package/dist/views/tui/workspace-request-form.d.ts.map +1 -0
  693. package/dist/views/tui/workspace-request-form.js +204 -0
  694. package/dist/views/tui/workspace-request-form.js.map +1 -0
  695. package/dist/views/tui/workspace-request-presentation.d.ts +4 -0
  696. package/dist/views/tui/workspace-request-presentation.d.ts.map +1 -0
  697. package/dist/views/tui/workspace-request-presentation.js +39 -0
  698. package/dist/views/tui/workspace-request-presentation.js.map +1 -0
  699. package/dist/views/tui/workspace-request-workflow.d.ts +17 -0
  700. package/dist/views/tui/workspace-request-workflow.d.ts.map +1 -0
  701. package/dist/views/tui/workspace-request-workflow.js +27 -0
  702. package/dist/views/tui/workspace-request-workflow.js.map +1 -0
  703. package/package.json +20 -13
@@ -0,0 +1,820 @@
1
+ import { contextTransferRequestDigest, contextTransferResultMatchesRequest, forkedEnvironmentConfidentialityVerified, portableContextPlanRequestDigest, portableContextPlanResultMatchesRequest, workspaceCheckpointRequestDigest, workspaceCheckpointResultMatchesRequest, workspaceCleanupAcknowledgementMatches, workspaceCleanupRequestDigest, workspaceForkRequestDigest, workspaceForkResultMatchesRequest, } from '@tangle-network/agent-interface';
2
+ import { canonicalDigest } from '../domain/canonical.js';
3
+ import { graphEdge, graphNode } from '../domain/graph-records.js';
4
+ import { createCheckpointId, createEnvironmentId, parseBranchId, parseCheckpointId, parseEnvironmentId, parseMessageId, parseOperationId, parseRunId, } from '../domain/ids.js';
5
+ import { assertJsonValue, objectValue } from '../domain/invariants-base.js';
6
+ import { isActiveRunStatus } from '../domain/state.js';
7
+ import { parseConfidentialWorkspaceForkRequest } from './confidential-workspace-fork.js';
8
+ import { AppError } from './errors.js';
9
+ /** Execute provider-owned context transfer or workspace branching. */
10
+ export async function executeBranchEffect(host, input, plan, createBranch) {
11
+ const inputConfidential = parseConfidentialWorkspaceForkRequest(input.confidential);
12
+ const plannedConfidential = parseConfidentialWorkspaceForkRequest(plan.confidential);
13
+ if (canonicalDigest(inputConfidential ?? null) !== canonicalDigest(plannedConfidential ?? null))
14
+ throw new AppError('FORK_PLAN_CONFLICT', 'The confidential placement request no longer matches the accepted plan');
15
+ if (plannedConfidential?.requested === true && plan.kind !== 'workspace')
16
+ throw new AppError('FORK_PLAN_CONFLICT', 'Confidential placement requires a workspace fork');
17
+ if (plan.kind === 'cross-runner')
18
+ return executeCrossRunner(host, input, plan, createBranch);
19
+ if (plan.kind === 'workspace')
20
+ return executeWorkspace(host, input, plan, createBranch);
21
+ throw new AppError('FORK_PLAN_CONFLICT', 'The provider effect does not match this fork plan');
22
+ }
23
+ /** Explicitly release provider checkpoint and fork resources. */
24
+ export async function cleanupWorkspaceFork(host, input) {
25
+ const execution = host.execution;
26
+ const state = host.state();
27
+ const operationId = parseOperationId(input.operationId);
28
+ const checkpoint = input.checkpointId === undefined
29
+ ? undefined
30
+ : state.checkpoints.find((candidate) => candidate.id === parseCheckpointId(input.checkpointId));
31
+ const environment = input.environmentId === undefined
32
+ ? undefined
33
+ : state.environments.find((candidate) => candidate.id === parseEnvironmentId(input.environmentId));
34
+ if (input.checkpointId !== undefined && checkpoint === undefined)
35
+ throw new AppError('UNKNOWN_CHECKPOINT', `Checkpoint ${input.checkpointId} is unavailable`);
36
+ if (input.environmentId !== undefined && environment === undefined)
37
+ throw new AppError('UNKNOWN_ENVIRONMENT', `Environment ${input.environmentId} is unavailable`);
38
+ if (checkpoint === undefined && environment === undefined)
39
+ throw new AppError('INVALID_CLEANUP', 'Specify a checkpoint or destination environment');
40
+ if (environment !== undefined && checkpoint !== undefined) {
41
+ if (environment.id === checkpoint.sourceEnvironmentId)
42
+ throw new AppError('INVALID_CLEANUP', 'The source environment cannot be cleaned up');
43
+ const forked = state.graphEdges.some((edge) => {
44
+ const source = graphReference(state, edge.source);
45
+ const destination = graphReference(state, edge.destination);
46
+ return (edge.kind === 'forked_environment' &&
47
+ destination?.kind === 'environment' &&
48
+ destination.id === environment.id &&
49
+ source?.kind === 'checkpoint' &&
50
+ source.id === checkpoint.id);
51
+ });
52
+ if (!forked)
53
+ throw new AppError('INVALID_CLEANUP', 'The destination environment is not the fork created from this checkpoint');
54
+ }
55
+ if (environment !== undefined && checkpoint === undefined) {
56
+ const forked = state.graphEdges.some((edge) => {
57
+ const destination = graphReference(state, edge.destination);
58
+ return (edge.kind === 'forked_environment' &&
59
+ destination?.kind === 'environment' &&
60
+ destination.id === environment.id);
61
+ });
62
+ if (!forked)
63
+ throw new AppError('INVALID_CLEANUP', 'Only a recorded forked environment can be cleaned up');
64
+ }
65
+ const providerCheckpointId = checkpoint === undefined ? undefined : providerCheckpointIdFor(state, checkpoint);
66
+ if (checkpoint !== undefined && providerCheckpointId === undefined)
67
+ throw new AppError('UNKNOWN_CHECKPOINT', 'The checkpoint has no provider reference');
68
+ if (environment !== undefined && environment.providerEnvironmentId === undefined)
69
+ throw new AppError('UNKNOWN_ENVIRONMENT', 'The environment has no provider reference');
70
+ assertCleanupCapabilities(state, checkpoint, environment);
71
+ const sourceEnvironment = sourceEnvironmentForCleanup(state, checkpoint, environment);
72
+ const digest = canonicalDigest({
73
+ command: 'cleanup_workspace_fork',
74
+ operationId,
75
+ checkpointId: checkpoint?.id ?? null,
76
+ providerCheckpointId: providerCheckpointId ?? null,
77
+ environmentId: environment?.id ?? null,
78
+ providerEnvironmentId: environment?.providerEnvironmentId ?? null,
79
+ });
80
+ const reserved = await reserveOperation(host, operationId, digest);
81
+ const existing = reserved.operations.find((candidate) => candidate.id === operationId);
82
+ if (existing?.status === 'acknowledged') {
83
+ const result = cleanupResultFromOperation(existing);
84
+ if (result === undefined)
85
+ throw new AppError('OPERATION_INCOMPLETE', `Operation ${operationId} has no cleanup result`);
86
+ return result;
87
+ }
88
+ const previous = cleanupResultFromOperation(existing);
89
+ const branching = await workspaceBranchingForEnvironment(execution, sourceEnvironment?.providerEnvironmentId);
90
+ if (!hasWorkspaceBranching(branching))
91
+ throw new AppError('CAPABILITY_UNAVAILABLE', 'Workspace cleanup is unavailable');
92
+ // Destroy the dependent fork before its source checkpoint.
93
+ // Providers may refuse checkpoint deletion while any fork still references it.
94
+ const environmentOutcome = environment === undefined
95
+ ? 'not_requested'
96
+ : previous?.environment === 'deleted' || previous?.environment === 'already_absent'
97
+ ? previous.environment
98
+ : await cleanupEnvironment(host, branching, derivedOperationId(String(operationId), 'fork-cleanup'), environment);
99
+ await updateOperation(host, operationId, digest, {
100
+ status: 'pending',
101
+ result: {
102
+ checkpoint: previous?.checkpoint ?? 'not_requested',
103
+ environment: environmentOutcome,
104
+ },
105
+ });
106
+ const checkpointOutcome = checkpoint === undefined
107
+ ? 'not_requested'
108
+ : previous?.checkpoint === 'deleted' || previous?.checkpoint === 'already_absent'
109
+ ? previous.checkpoint
110
+ : await cleanupCheckpoint(host, branching, derivedOperationId(String(operationId), 'checkpoint-cleanup'), checkpoint);
111
+ const result = {
112
+ checkpoint: checkpointOutcome,
113
+ environment: environmentOutcome,
114
+ };
115
+ await acknowledgeCleanupOperation(host, operationId, digest, result);
116
+ return result;
117
+ }
118
+ async function executeCrossRunner(host, input, plan, createBranch) {
119
+ const portablePlan = plan.portableContextPlan;
120
+ const contextPort = contextTransferPort(host.execution);
121
+ if (portablePlan === undefined || contextPort?.transfer === undefined)
122
+ throw new AppError('CAPABILITY_UNAVAILABLE', 'Canonical fresh-session context transfer is unavailable');
123
+ const state = host.state();
124
+ const sourceEnvironment = plan.sourceEnvironmentId === undefined
125
+ ? undefined
126
+ : state.environments.find((environment) => environment.id === plan.sourceEnvironmentId);
127
+ if (sourceEnvironment === undefined || sourceEnvironment.providerEnvironmentId === undefined)
128
+ throw new AppError('CAPABILITY_UNAVAILABLE', 'Canonical context transfer requires a recorded source environment');
129
+ if (sourceEnvironment.placement.provider !== portablePlan.source.source.provider)
130
+ throw new AppError('FORK_PLAN_CONFLICT', 'The portable plan names a different source provider than the recorded environment');
131
+ if (sourceEnvironment.providerEnvironmentId !== portablePlan.source.source.environmentId)
132
+ throw new AppError('FORK_PLAN_CONFLICT', 'The portable plan names a different source environment');
133
+ if (portablePlan.requiresAcceptance && input.acceptedDigest !== portablePlan.digest)
134
+ throw new AppError('CONTEXT_PLAN_ACCEPTANCE_REQUIRED', 'The transformed portable context plan requires explicit acceptance');
135
+ const operationId = parseOperationId(input.operationId);
136
+ const digest = canonicalDigest({
137
+ command: 'execute_cross_runner_fork',
138
+ operationId,
139
+ planDigest: plan.digest,
140
+ acceptedDigest: input.acceptedDigest ?? null,
141
+ });
142
+ const reserved = await reserveOperation(host, operationId, digest);
143
+ const existing = reserved.operations.find((operation) => operation.id === operationId);
144
+ if (existing?.status === 'acknowledged')
145
+ return branchForOperation(state, existing);
146
+ const acceptedAt = existing?.createdAt ?? host.now();
147
+ const planRequestMaterial = {
148
+ requestId: `${input.operationId}:plan`,
149
+ source: portablePlan.source,
150
+ destination: portablePlan.destination,
151
+ };
152
+ const planRequest = {
153
+ ...planRequestMaterial,
154
+ requestDigest: portableContextPlanRequestDigest(planRequestMaterial),
155
+ };
156
+ if (contextPort.plan !== undefined) {
157
+ const planned = await contextPort.plan(planRequest);
158
+ if (!portableContextPlanResultMatchesRequest(planRequest, planned))
159
+ throw new AppError('CONTEXT_PLAN_CONFLICT', 'The provider context plan does not match its request');
160
+ assertReadyPlan(planned);
161
+ if (planned.plan.digest !== portablePlan.digest)
162
+ throw new AppError('CONTEXT_PLAN_CONFLICT', 'The provider changed the accepted context plan');
163
+ }
164
+ const transferMaterial = {
165
+ operationId: `${input.operationId}:context`,
166
+ plan: portablePlan,
167
+ acceptance: {
168
+ planDigest: portablePlan.digest,
169
+ acceptedAt,
170
+ acceptedBy: input.acceptedDigest === undefined ? 'policy' : 'user',
171
+ },
172
+ };
173
+ const transferRequest = {
174
+ ...transferMaterial,
175
+ requestDigest: contextTransferRequestDigest(transferMaterial),
176
+ };
177
+ const transfer = await lookupOrTransfer(contextPort, transferRequest);
178
+ if (!contextTransferResultMatchesRequest(transferRequest, transfer))
179
+ throw new AppError('CONTEXT_RECEIPT_CONFLICT', 'The context transfer result does not match its request');
180
+ const receipt = assertAcceptedTransfer(transfer);
181
+ const destinationEnvironment = await recordDestinationEnvironment(host, plan, receipt);
182
+ const branch = await createBranch({
183
+ ...input,
184
+ operationId: derivedOperationId(input.operationId, 'branch'),
185
+ destinationBranchId: plan.destinationBranchId,
186
+ ...(destinationEnvironment === undefined ? {} : { environmentId: destinationEnvironment.id }),
187
+ });
188
+ await recordHandedOffEdge(host, plan, branch, receipt.contextDigest, operationId);
189
+ if (input.text !== undefined && input.text.trim() !== '' && host.send !== undefined) {
190
+ const sent = host.send({
191
+ operationId: derivedOperationId(input.operationId, 'send'),
192
+ conversationId: branch.conversationId,
193
+ branchId: branch.id,
194
+ text: input.text,
195
+ sessionId: receipt.sessionId,
196
+ portableContextPlan: portablePlan,
197
+ portableContextTransferRequest: transferRequest,
198
+ portableContextTransferReceipt: receipt,
199
+ });
200
+ await sent.admissionReady;
201
+ }
202
+ await acknowledgeOperation(host, operationId, digest, branch, {
203
+ kind: 'handoff',
204
+ branchId: String(branch.id),
205
+ planDigest: plan.digest,
206
+ receipt,
207
+ });
208
+ return branch;
209
+ }
210
+ async function executeWorkspace(host, input, plan, createBranch) {
211
+ const state = host.state();
212
+ const operationId = parseOperationId(input.operationId);
213
+ const sourceRun = sourceRunForPlan(state, plan);
214
+ const source = sourceRun?.controlRef;
215
+ if (sourceRun === undefined || source === undefined)
216
+ throw new AppError('CAPABILITY_UNAVAILABLE', 'Workspace fork requires an exact source run reference');
217
+ const sourceEnvironment = plan.sourceEnvironmentId;
218
+ if (sourceEnvironment === undefined || sourceRun.environmentId === undefined)
219
+ throw new AppError('CAPABILITY_UNAVAILABLE', 'Workspace fork requires a recorded source environment');
220
+ if (sourceRun.environmentId !== parseEnvironmentId(sourceEnvironment))
221
+ throw new AppError('FORK_PLAN_CONFLICT', 'The source run and branch environment do not match');
222
+ const sourceEnvironmentRecord = state.environments.find((environment) => environment.id === parseEnvironmentId(sourceEnvironment));
223
+ if (sourceEnvironmentRecord === undefined ||
224
+ sourceEnvironmentRecord.providerEnvironmentId !== source.environmentId)
225
+ throw new AppError('CAPABILITY_UNAVAILABLE', 'Workspace fork requires an exact recorded source environment');
226
+ if (sourceEnvironmentRecord.placement.provider !== source.provider)
227
+ throw new AppError('FORK_PLAN_CONFLICT', 'The source run and environment belong to different providers');
228
+ if (!sourceRun.complete || isActiveRunStatus(sourceRun.status) || sourceRun.status === 'unknown')
229
+ throw new AppError('CAPABILITY_UNAVAILABLE', 'Workspace fork requires a completed source run boundary');
230
+ const environmentCapabilities = sourceRun.capabilities.environment;
231
+ const capabilities = environmentCapabilities?.branching;
232
+ if (capabilities?.checkpoint !== true ||
233
+ capabilities.fork !== true ||
234
+ capabilities.retrySafe !== true ||
235
+ capabilities.lookup !== true ||
236
+ capabilities.cleanup !== true)
237
+ throw new AppError('CAPABILITY_UNAVAILABLE', 'The selected run does not report retry-safe checkpoint and environment fork support');
238
+ if (plan.confidential?.requested === true &&
239
+ (capabilities.confidential !== true ||
240
+ environmentCapabilities?.confidential !== true ||
241
+ typeof host.execution?.confidentialAttestationVerifier !== 'function'))
242
+ throw new AppError('CAPABILITY_UNAVAILABLE', 'The selected run does not expose confidential placement and attestation verification');
243
+ const digest = canonicalDigest({
244
+ command: 'execute_workspace_fork',
245
+ operationId,
246
+ planDigest: plan.digest,
247
+ sourceRunId: sourceRun.id,
248
+ sourceEnvironment,
249
+ });
250
+ const reserved = await reserveOperation(host, operationId, digest);
251
+ const existing = reserved.operations.find((operation) => operation.id === operationId);
252
+ if (existing?.status === 'acknowledged')
253
+ return branchForOperation(reserved, existing);
254
+ const branching = await workspaceBranchingForEnvironment(host.execution, sourceEnvironmentRecord.providerEnvironmentId);
255
+ if (!hasWorkspaceBranching(branching))
256
+ throw new AppError('CAPABILITY_UNAVAILABLE', plan.reason ?? 'Workspace fork is unavailable');
257
+ const checkpointMaterial = {
258
+ source,
259
+ name: `braid checkpoint ${plan.sourceBranchId}`,
260
+ metadata: {
261
+ braidOperationId: input.operationId,
262
+ sourceBranchId: String(plan.sourceBranchId),
263
+ ...(plan.throughMessageId === undefined ? {} : { throughMessageId: plan.throughMessageId }),
264
+ },
265
+ };
266
+ const checkpointRequest = {
267
+ ...checkpointMaterial,
268
+ idempotencyKey: `${input.operationId}:checkpoint`,
269
+ requestDigest: workspaceCheckpointRequestDigest(checkpointMaterial),
270
+ };
271
+ const checkpointResult = await lookupOrCheckpoint(branching, checkpointRequest);
272
+ if (!workspaceCheckpointResultMatchesRequest(checkpointRequest, checkpointResult))
273
+ throw new AppError('CHECKPOINT_CONFLICT', 'The checkpoint result does not match its request');
274
+ const checkpoint = assertCheckpointResult(checkpointResult);
275
+ const checkpointRecord = toCheckpointRecord(plan, operationId, checkpointRequest, checkpoint);
276
+ if (!state.checkpoints.some((candidate) => candidate.id === checkpointRecord.id)) {
277
+ await host.commit({ kind: 'checkpoint.upserted', checkpoint: checkpointRecord });
278
+ await host.commit({
279
+ kind: 'graph.node.upserted',
280
+ node: graphNode({ kind: 'checkpoint', id: checkpointRecord.id }, checkpointRecord.createdAt, 'Workspace checkpoint'),
281
+ });
282
+ await host.commit({
283
+ kind: 'graph.edge.upserted',
284
+ edge: graphEdge({
285
+ kind: 'checkpointed',
286
+ source: { kind: 'environment', id: parseEnvironmentId(sourceEnvironment) },
287
+ destination: { kind: 'checkpoint', id: checkpointRecord.id },
288
+ at: checkpointRecord.createdAt,
289
+ provenance: { operationId, sourceDigest: stripSha(checkpointRequest.requestDigest) },
290
+ }),
291
+ });
292
+ }
293
+ const placement = input.placement ?? { kind: 'provider' };
294
+ const forkMaterial = {
295
+ checkpoint: checkpoint.checkpoint,
296
+ name: `braid fork ${plan.destinationBranchId}`,
297
+ placement,
298
+ ...(plan.confidential === undefined ? {} : { confidential: plan.confidential }),
299
+ metadata: {
300
+ braidOperationId: input.operationId,
301
+ destinationBranchId: String(plan.destinationBranchId),
302
+ },
303
+ };
304
+ const forkRequest = {
305
+ ...forkMaterial,
306
+ idempotencyKey: `${input.operationId}:fork`,
307
+ requestDigest: workspaceForkRequestDigest(forkMaterial),
308
+ };
309
+ const previousProviderEnvironmentId = existing?.result?.providerEnvironmentId;
310
+ const pendingForkResult = {
311
+ checkpointId: String(checkpointRecord.id),
312
+ providerCheckpointId: checkpoint.checkpoint.checkpointId,
313
+ forkRequestDigest: forkRequest.requestDigest,
314
+ ...(typeof previousProviderEnvironmentId === 'string'
315
+ ? { providerEnvironmentId: previousProviderEnvironmentId }
316
+ : {}),
317
+ };
318
+ await updateOperation(host, operationId, digest, {
319
+ status: 'pending',
320
+ result: pendingForkResult,
321
+ });
322
+ const forkResult = await lookupOrFork(branching, forkRequest);
323
+ if (!workspaceForkResultMatchesRequest(forkRequest, forkResult))
324
+ throw new AppError('FORK_CONFLICT', 'The environment fork result does not match its request');
325
+ const fork = assertForkResult(forkResult);
326
+ if (fork.environment.sourceEnvironmentId !== source.environmentId)
327
+ throw new AppError('FORK_PLAN_CONFLICT', 'The provider fork names a different source environment');
328
+ if (fork.environment.environmentId === source.environmentId)
329
+ throw new AppError('FORK_PLAN_CONFLICT', 'The provider fork reused the source environment');
330
+ await updateOperation(host, operationId, digest, {
331
+ status: 'pending',
332
+ result: {
333
+ ...pendingForkResult,
334
+ providerEnvironmentId: fork.environment.environmentId,
335
+ },
336
+ });
337
+ const destination = await recordForkedEnvironment(host, plan, fork.environment, forkRequest);
338
+ const branch = await createBranch({
339
+ ...input,
340
+ operationId: derivedOperationId(input.operationId, 'branch'),
341
+ destinationBranchId: plan.destinationBranchId,
342
+ environmentId: destination.id,
343
+ });
344
+ await host.commit({
345
+ kind: 'graph.edge.upserted',
346
+ edge: graphEdge({
347
+ kind: 'forked_environment',
348
+ source: { kind: 'checkpoint', id: checkpointRecord.id },
349
+ destination: { kind: 'environment', id: destination.id },
350
+ at: destination.createdAt,
351
+ provenance: { operationId, sourceDigest: stripSha(forkRequest.requestDigest) },
352
+ }),
353
+ });
354
+ await acknowledgeOperation(host, operationId, digest, branch, {
355
+ kind: 'workspace-fork',
356
+ branchId: String(branch.id),
357
+ planDigest: plan.digest,
358
+ checkpointId: String(checkpointRecord.id),
359
+ providerCheckpointId: checkpoint.checkpoint.checkpointId,
360
+ forkRequestDigest: forkRequest.requestDigest,
361
+ providerEnvironmentId: fork.environment.environmentId,
362
+ });
363
+ return branch;
364
+ }
365
+ async function lookupOrTransfer(port, request) {
366
+ const found = port.lookup === undefined ? undefined : await port.lookup(request);
367
+ if (found !== undefined)
368
+ return found;
369
+ return ((await port.transfer?.(request)) ?? {
370
+ status: 'unknown',
371
+ operationId: request.operationId,
372
+ requestDigest: request.requestDigest,
373
+ message: 'The provider did not expose context transfer',
374
+ retryable: false,
375
+ });
376
+ }
377
+ async function lookupOrCheckpoint(branching, request) {
378
+ const lookup = await branching.lookupCheckpoint({
379
+ idempotencyKey: request.idempotencyKey,
380
+ requestDigest: request.requestDigest,
381
+ });
382
+ if (lookup.status === 'found')
383
+ return { ...lookup, status: 'replayed' };
384
+ if (lookup.status === 'conflict')
385
+ throw new AppError('CHECKPOINT_CONFLICT', 'Checkpoint idempotency key has a different request');
386
+ if (lookup.status === 'unknown')
387
+ throw new AppError('CHECKPOINT_UNKNOWN', lookup.message);
388
+ const result = await branching.checkpoint(request);
389
+ if (result.status === 'unknown' || result.status === 'conflict')
390
+ assertCheckpointResult(result);
391
+ return result;
392
+ }
393
+ async function lookupOrFork(branching, request) {
394
+ const lookup = await branching.lookupFork({
395
+ idempotencyKey: request.idempotencyKey,
396
+ requestDigest: request.requestDigest,
397
+ });
398
+ if (lookup.status === 'found')
399
+ return { ...lookup, status: 'replayed' };
400
+ if (lookup.status === 'conflict')
401
+ throw new AppError('FORK_CONFLICT', 'Fork idempotency key has a different request');
402
+ if (lookup.status === 'unknown')
403
+ throw new AppError('FORK_UNKNOWN', lookup.message);
404
+ const result = await branching.fork(request);
405
+ if (result.status === 'unknown' || result.status === 'conflict')
406
+ assertForkResult(result);
407
+ return result;
408
+ }
409
+ async function cleanupCheckpoint(host, branching, operationId, checkpoint) {
410
+ const providerCheckpointId = providerCheckpointIdFor(host.state(), checkpoint);
411
+ if (providerCheckpointId === undefined)
412
+ throw new AppError('UNKNOWN_CHECKPOINT', 'The checkpoint has no provider reference');
413
+ const provider = providerForCheckpoint(host.state(), checkpoint);
414
+ const material = { kind: 'checkpoint', targetId: providerCheckpointId, provider };
415
+ const request = {
416
+ operationId,
417
+ ...material,
418
+ requestDigest: workspaceCleanupRequestDigest(material),
419
+ };
420
+ const ack = await branching.deleteCheckpoint({ ...request, kind: 'checkpoint' });
421
+ assertCleanupAcknowledgement(request, ack);
422
+ if (ack.status === 'deleted' || ack.status === 'already_absent') {
423
+ await host.commit({
424
+ kind: 'checkpoint.upserted',
425
+ checkpoint: { ...checkpoint, status: 'deleted' },
426
+ });
427
+ return ack.status;
428
+ }
429
+ throw new AppError('CLEANUP_UNKNOWN', ack.message ?? 'Checkpoint cleanup is unresolved');
430
+ }
431
+ async function cleanupEnvironment(host, branching, operationId, environment) {
432
+ const targetId = environment.providerEnvironmentId;
433
+ if (targetId === undefined)
434
+ throw new AppError('UNKNOWN_ENVIRONMENT', 'The environment has no provider reference');
435
+ const material = {
436
+ kind: 'fork',
437
+ targetId,
438
+ provider: environment.placement.provider,
439
+ };
440
+ const request = {
441
+ operationId,
442
+ ...material,
443
+ requestDigest: workspaceCleanupRequestDigest(material),
444
+ };
445
+ const ack = await branching.destroyFork({ ...request, kind: 'fork' });
446
+ assertCleanupAcknowledgement(request, ack);
447
+ if (ack.status === 'deleted' || ack.status === 'already_absent') {
448
+ await host.commit({
449
+ kind: 'environment.upserted',
450
+ environment: { ...environment, lifecycle: 'destroyed', updatedAt: host.now() },
451
+ });
452
+ return ack.status;
453
+ }
454
+ throw new AppError('CLEANUP_UNKNOWN', ack.message ?? 'Environment cleanup is unresolved');
455
+ }
456
+ function assertCleanupAcknowledgement(request, acknowledgement) {
457
+ if (!workspaceCleanupAcknowledgementMatches(request, acknowledgement))
458
+ throw new AppError('CLEANUP_CONFLICT', 'The cleanup acknowledgement does not match its request');
459
+ }
460
+ function assertCleanupCapabilities(state, checkpoint, environment) {
461
+ const sourceCheckpoint = checkpoint ??
462
+ (environment === undefined
463
+ ? undefined
464
+ : (() => {
465
+ const edge = state.graphEdges.find((candidate) => {
466
+ const source = graphReference(state, candidate.source);
467
+ const destination = graphReference(state, candidate.destination);
468
+ return (candidate.kind === 'forked_environment' &&
469
+ destination?.kind === 'environment' &&
470
+ destination.id === environment.id &&
471
+ source?.kind === 'checkpoint');
472
+ });
473
+ const source = edge === undefined ? undefined : graphReference(state, edge.source);
474
+ return source?.kind === 'checkpoint'
475
+ ? state.checkpoints.find((candidate) => candidate.id === source.id)
476
+ : undefined;
477
+ })());
478
+ const sourceRun = sourceCheckpoint?.sourceRunId === undefined
479
+ ? undefined
480
+ : state.runs.find((candidate) => candidate.id === sourceCheckpoint.sourceRunId);
481
+ const branching = sourceRun?.capabilities.environment?.branching;
482
+ if (sourceRun === undefined ||
483
+ branching?.checkpoint !== true ||
484
+ branching.fork !== true ||
485
+ branching.retrySafe !== true ||
486
+ branching.lookup !== true ||
487
+ branching.cleanup !== true)
488
+ throw new AppError('CAPABILITY_UNAVAILABLE', 'The selected run does not report retry-safe workspace cleanup support');
489
+ }
490
+ function sourceEnvironmentForCleanup(state, checkpoint, environment) {
491
+ const sourceCheckpoint = checkpoint ??
492
+ (environment === undefined
493
+ ? undefined
494
+ : (() => {
495
+ const edge = state.graphEdges.find((candidate) => {
496
+ const source = graphReference(state, candidate.source);
497
+ const destination = graphReference(state, candidate.destination);
498
+ return (candidate.kind === 'forked_environment' &&
499
+ destination?.kind === 'environment' &&
500
+ destination.id === environment.id &&
501
+ source?.kind === 'checkpoint');
502
+ });
503
+ const source = edge === undefined ? undefined : graphReference(state, edge.source);
504
+ return source?.kind === 'checkpoint'
505
+ ? state.checkpoints.find((candidate) => candidate.id === source.id)
506
+ : undefined;
507
+ })());
508
+ if (sourceCheckpoint === undefined)
509
+ return undefined;
510
+ return state.environments.find((candidate) => candidate.id === sourceCheckpoint.sourceEnvironmentId);
511
+ }
512
+ function cleanupResultFromOperation(operation) {
513
+ if (operation?.result === undefined)
514
+ return undefined;
515
+ const checkpoint = operation.result.checkpoint;
516
+ const environment = operation.result.environment;
517
+ if (!isCleanupStatus(checkpoint) || !isCleanupStatus(environment))
518
+ throw new AppError('OPERATION_INCOMPLETE', `Operation ${operation.id} has an invalid cleanup result`);
519
+ return { checkpoint, environment };
520
+ }
521
+ function isCleanupStatus(value) {
522
+ return value === 'deleted' || value === 'already_absent' || value === 'not_requested';
523
+ }
524
+ function assertReadyPlan(result) {
525
+ if (result.status !== 'ready')
526
+ throw new AppError('CONTEXT_PLAN_UNAVAILABLE', result.message);
527
+ }
528
+ function assertAcceptedTransfer(result) {
529
+ if (result.status === 'accepted' || result.status === 'replayed')
530
+ return result;
531
+ if (result.status === 'conflict')
532
+ throw new AppError('CONTEXT_RECEIPT_CONFLICT', 'The provider rejected a changed context transfer request');
533
+ if (result.status === 'unknown' || result.status === 'transport_failure')
534
+ throw new AppError('CONTEXT_TRANSFER_UNKNOWN', result.message);
535
+ throw new AppError('CONTEXT_TRANSFER_UNKNOWN', 'The provider did not accept context transfer');
536
+ }
537
+ function assertCheckpointResult(result) {
538
+ if (result.status === 'created' || result.status === 'replayed')
539
+ return result;
540
+ if (result.status === 'conflict')
541
+ throw new AppError('CHECKPOINT_CONFLICT', 'The provider rejected a changed checkpoint request');
542
+ if (result.status === 'unknown')
543
+ throw new AppError('CHECKPOINT_UNKNOWN', result.message);
544
+ throw new AppError('CHECKPOINT_UNKNOWN', 'The provider did not create the checkpoint');
545
+ }
546
+ function assertForkResult(result) {
547
+ if (result.status === 'created' || result.status === 'replayed')
548
+ return result;
549
+ if (result.status === 'conflict')
550
+ throw new AppError('FORK_CONFLICT', 'The provider rejected a changed fork request');
551
+ if (result.status === 'unknown')
552
+ throw new AppError('FORK_UNKNOWN', result.message);
553
+ throw new AppError('FORK_UNKNOWN', 'The provider did not create the environment fork');
554
+ }
555
+ function sourceRunForPlan(state, plan) {
556
+ if (plan.sourceRunId !== undefined) {
557
+ const run = state.runs.find((candidate) => candidate.id === plan.sourceRunId);
558
+ if (run !== undefined)
559
+ return run;
560
+ }
561
+ return state.runs
562
+ .filter((run) => run.branchId === plan.sourceBranchId && run.controlRef !== undefined)
563
+ .at(-1);
564
+ }
565
+ function toCheckpointRecord(plan, operationId, request, result) {
566
+ return {
567
+ id: createCheckpointId(`checkpoint-${canonicalDigest({ provider: result.checkpoint.provider, id: result.checkpoint.checkpointId }).slice(0, 32)}`),
568
+ sourceEnvironmentId: parseEnvironmentId(plan.sourceEnvironmentId ?? result.checkpoint.source.environmentId),
569
+ sourceBranchId: parseBranchId(plan.sourceBranchId),
570
+ ...(plan.sourceRunId === undefined ? {} : { sourceRunId: parseRunId(plan.sourceRunId) }),
571
+ ...(plan.throughMessageId === undefined
572
+ ? {}
573
+ : { throughMessageId: parseMessageId(plan.throughMessageId) }),
574
+ requestDigest: stripSha(request.requestDigest),
575
+ operationId,
576
+ createdAt: result.checkpoint.createdAt,
577
+ status: 'ready',
578
+ };
579
+ }
580
+ async function recordDestinationEnvironment(host, plan, receipt) {
581
+ const source = host
582
+ .state()
583
+ .environments.find((environment) => environment.id === plan.sourceEnvironmentId);
584
+ if (source === undefined)
585
+ return undefined;
586
+ const id = createEnvironmentId(`environment-handoff-${canonicalDigest({ provider: receipt.provider, environmentId: receipt.environmentId, operationId: receipt.operationId }).slice(0, 32)}`);
587
+ if (id === source.id)
588
+ throw new AppError('FORK_PLAN_CONFLICT', 'The destination environment matches the source');
589
+ const at = receipt.admittedAt;
590
+ const environment = {
591
+ id,
592
+ workspaceId: source.workspaceId,
593
+ connectionId: source.connectionId,
594
+ lifecycle: 'ready',
595
+ placement: {
596
+ provider: receipt.provider,
597
+ confidentialRequested: false,
598
+ confidentialVerified: false,
599
+ },
600
+ providerEnvironmentId: receipt.environmentId,
601
+ continuity: 'session',
602
+ location: 'remote',
603
+ secretNames: [],
604
+ createdAt: at,
605
+ startedAt: at,
606
+ lastActivityAt: at,
607
+ updatedAt: at,
608
+ };
609
+ const existing = host.state().environments.find((candidate) => candidate.id === id);
610
+ if (existing === undefined) {
611
+ await host.commit({ kind: 'environment.upserted', environment });
612
+ await host.commit({
613
+ kind: 'graph.node.upserted',
614
+ node: graphNode({ kind: 'environment', id }, at, 'Handoff environment'),
615
+ });
616
+ }
617
+ return existing ?? environment;
618
+ }
619
+ async function recordForkedEnvironment(host, plan, ref, request) {
620
+ const source = host
621
+ .state()
622
+ .environments.find((environment) => environment.id === plan.sourceEnvironmentId);
623
+ if (source === undefined)
624
+ throw new AppError('UNKNOWN_ENVIRONMENT', 'The source environment record is unavailable');
625
+ const id = createEnvironmentId(`environment-fork-${canonicalDigest({ provider: ref.provider, environmentId: ref.environmentId, operationId: ref.idempotencyKey }).slice(0, 32)}`);
626
+ const at = ref.createdAt;
627
+ const environment = {
628
+ id,
629
+ workspaceId: source.workspaceId,
630
+ connectionId: source.connectionId,
631
+ lifecycle: 'ready',
632
+ placement: {
633
+ provider: ref.provider,
634
+ ...(ref.placement.region === undefined ? {} : { region: ref.placement.region }),
635
+ confidentialRequested: ref.confidentialRequested,
636
+ confidentialVerified: ref.confidentialRequested && host.execution?.confidentialAttestationVerifier !== undefined
637
+ ? verifiedForkConfidentiality(request, ref, host.execution.confidentialAttestationVerifier)
638
+ : false,
639
+ },
640
+ providerEnvironmentId: ref.environmentId,
641
+ continuity: 'session',
642
+ location: 'remote',
643
+ secretNames: [],
644
+ createdAt: at,
645
+ startedAt: at,
646
+ lastActivityAt: at,
647
+ updatedAt: at,
648
+ };
649
+ const existing = host.state().environments.find((candidate) => candidate.id === id);
650
+ if (existing === undefined) {
651
+ await host.commit({ kind: 'environment.upserted', environment });
652
+ await host.commit({
653
+ kind: 'graph.node.upserted',
654
+ node: graphNode({ kind: 'environment', id }, at, 'Workspace fork environment'),
655
+ });
656
+ }
657
+ return existing ?? environment;
658
+ }
659
+ function verifiedForkConfidentiality(request, environment, verifier) {
660
+ try {
661
+ return forkedEnvironmentConfidentialityVerified(request, environment, (attestation, expected) => {
662
+ if (attestation.providerKeyId === 'unverified' ||
663
+ attestation.providerSignature === 'unverified' ||
664
+ attestation.providerSignature === attestation.quote)
665
+ return false;
666
+ try {
667
+ return verifier(attestation, expected) === true;
668
+ }
669
+ catch {
670
+ return false;
671
+ }
672
+ });
673
+ }
674
+ catch {
675
+ return false;
676
+ }
677
+ }
678
+ async function recordHandedOffEdge(host, plan, branch, sourceDigest, operationId) {
679
+ const edge = graphEdge({
680
+ kind: 'handed_off',
681
+ source: { kind: 'branch', id: parseBranchId(plan.sourceBranchId) },
682
+ destination: { kind: 'branch', id: branch.id },
683
+ at: host.now(),
684
+ provenance: { operationId, sourceDigest: stripSha(sourceDigest) },
685
+ });
686
+ if (!host.state().graphEdges.some((candidate) => candidate.id === edge.id))
687
+ await host.commit({ kind: 'graph.edge.upserted', edge });
688
+ }
689
+ async function reserveOperation(host, operationId, digest) {
690
+ const state = host.state();
691
+ const existing = state.operations.find((operation) => operation.id === operationId);
692
+ if (existing !== undefined && existing.kind !== 'conversation-fork')
693
+ throw new AppError('OPERATION_ID_CONFLICT', `Operation ${operationId} was already used by another command`);
694
+ if (existing !== undefined && existing.requestDigest !== digest)
695
+ throw new AppError('OPERATION_ID_CONFLICT', `Operation ${operationId} was already used with different input`);
696
+ if (existing !== undefined)
697
+ return state;
698
+ const at = host.now();
699
+ const operation = {
700
+ id: operationId,
701
+ kind: 'conversation-fork',
702
+ requestDigest: digest,
703
+ status: 'pending',
704
+ createdAt: at,
705
+ updatedAt: at,
706
+ };
707
+ await host.commit({ kind: 'operation.requested', operation });
708
+ return host.state();
709
+ }
710
+ async function updateOperation(host, operationId, digest, input) {
711
+ const current = host.state().operations.find((operation) => operation.id === operationId);
712
+ if (current === undefined)
713
+ throw new AppError('OPERATION_INCOMPLETE', `Operation ${operationId} is missing`);
714
+ const operation = input.result === undefined
715
+ ? {
716
+ ...current,
717
+ requestDigest: digest,
718
+ status: input.status,
719
+ updatedAt: host.now(),
720
+ }
721
+ : {
722
+ ...current,
723
+ requestDigest: digest,
724
+ status: input.status,
725
+ result: input.result,
726
+ updatedAt: host.now(),
727
+ };
728
+ await host.commit({
729
+ kind: 'operation.updated',
730
+ operation,
731
+ });
732
+ }
733
+ async function acknowledgeOperation(host, operationId, digest, branch, result) {
734
+ const current = host.state().operations.find((operation) => operation.id === operationId);
735
+ if (current === undefined)
736
+ throw new AppError('OPERATION_INCOMPLETE', `Operation ${operationId} is missing`);
737
+ await host.commit({
738
+ kind: 'operation.updated',
739
+ operation: {
740
+ ...current,
741
+ requestDigest: digest,
742
+ status: 'acknowledged',
743
+ target: { kind: 'branch', id: branch.id },
744
+ result: operationResult(result),
745
+ updatedAt: host.now(),
746
+ acknowledgedAt: host.now(),
747
+ },
748
+ });
749
+ }
750
+ async function acknowledgeCleanupOperation(host, operationId, digest, result) {
751
+ const current = host.state().operations.find((operation) => operation.id === operationId);
752
+ if (current === undefined)
753
+ throw new AppError('OPERATION_INCOMPLETE', `Operation ${operationId} is missing`);
754
+ await host.commit({
755
+ kind: 'operation.updated',
756
+ operation: {
757
+ ...current,
758
+ requestDigest: digest,
759
+ status: 'acknowledged',
760
+ result: operationResult(result),
761
+ updatedAt: host.now(),
762
+ acknowledgedAt: host.now(),
763
+ },
764
+ });
765
+ }
766
+ function operationResult(value) {
767
+ objectValue(value, 'operation.result');
768
+ assertJsonValue(value, 'operation.result');
769
+ return value;
770
+ }
771
+ function branchForOperation(state, operation) {
772
+ if (operation.target?.kind !== 'branch')
773
+ throw new AppError('OPERATION_INCOMPLETE', `Operation ${operation.id} has no branch result`);
774
+ const branch = state.branches.find((candidate) => candidate.id === operation.target?.id);
775
+ if (branch === undefined)
776
+ throw new AppError('OPERATION_INCOMPLETE', `Operation ${operation.id} has no durable branch result`);
777
+ return branch;
778
+ }
779
+ function derivedOperationId(operationId, label) {
780
+ return `operation-${canonicalDigest({ operationId, label }).slice(0, 48)}`;
781
+ }
782
+ function contextTransferPort(execution) {
783
+ return execution?.context ?? execution?.contextTransfer;
784
+ }
785
+ function hasWorkspaceBranching(branching) {
786
+ return (branching !== undefined &&
787
+ typeof branching.checkpoint === 'function' &&
788
+ typeof branching.lookupCheckpoint === 'function' &&
789
+ typeof branching.deleteCheckpoint === 'function' &&
790
+ typeof branching.fork === 'function' &&
791
+ typeof branching.lookupFork === 'function' &&
792
+ typeof branching.destroyFork === 'function');
793
+ }
794
+ /** Resolve a fresh source handle when the provider exposes restart-safe lookup. */
795
+ async function workspaceBranchingForEnvironment(execution, providerEnvironmentId) {
796
+ const provider = execution?.workspaceBranchingProvider;
797
+ if (provider !== undefined) {
798
+ if (providerEnvironmentId === undefined)
799
+ return undefined;
800
+ return (await provider.forEnvironment(providerEnvironmentId)) ?? undefined;
801
+ }
802
+ return execution?.workspaceBranching;
803
+ }
804
+ function graphReference(state, id) {
805
+ return state.graphNodes.find((node) => node.id === id)?.reference;
806
+ }
807
+ function providerCheckpointIdFor(state, checkpoint) {
808
+ const operation = state.operations.find((candidate) => candidate.id === checkpoint.operationId);
809
+ const value = operation?.result?.providerCheckpointId;
810
+ return typeof value === 'string' ? value : undefined;
811
+ }
812
+ function providerForCheckpoint(state, checkpoint) {
813
+ const environment = state.environments.find((candidate) => candidate.id === checkpoint.sourceEnvironmentId);
814
+ return environment?.placement.provider ?? 'unknown-provider';
815
+ }
816
+ function stripSha(value) {
817
+ const digest = value.startsWith('sha256:') ? value.slice('sha256:'.length) : value;
818
+ return digest;
819
+ }
820
+ //# sourceMappingURL=conversation-branch-effects.js.map