@cuna_labs/cli 0.1.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 (624) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +9 -0
  3. package/README.md +169 -0
  4. package/THIRD_PARTY_NOTICES.md +29 -0
  5. package/dist/api/capability-evidence.d.ts +19 -0
  6. package/dist/api/capability-evidence.d.ts.map +1 -0
  7. package/dist/api/capability-evidence.js +38 -0
  8. package/dist/api/capability-evidence.js.map +1 -0
  9. package/dist/api/client.d.ts +167 -0
  10. package/dist/api/client.d.ts.map +1 -0
  11. package/dist/api/client.js +937 -0
  12. package/dist/api/client.js.map +1 -0
  13. package/dist/api/contracts.d.ts +345 -0
  14. package/dist/api/contracts.d.ts.map +1 -0
  15. package/dist/api/contracts.js +976 -0
  16. package/dist/api/contracts.js.map +1 -0
  17. package/dist/api/execution-workspaces.d.ts +17 -0
  18. package/dist/api/execution-workspaces.d.ts.map +1 -0
  19. package/dist/api/execution-workspaces.js +46 -0
  20. package/dist/api/execution-workspaces.js.map +1 -0
  21. package/dist/api/http.d.ts +76 -0
  22. package/dist/api/http.d.ts.map +1 -0
  23. package/dist/api/http.js +838 -0
  24. package/dist/api/http.js.map +1 -0
  25. package/dist/api/managed-executions.d.ts +37 -0
  26. package/dist/api/managed-executions.d.ts.map +1 -0
  27. package/dist/api/managed-executions.js +80 -0
  28. package/dist/api/managed-executions.js.map +1 -0
  29. package/dist/api/observer-v2-schema.d.ts +206 -0
  30. package/dist/api/observer-v2-schema.d.ts.map +1 -0
  31. package/dist/api/observer-v2-schema.js +264 -0
  32. package/dist/api/observer-v2-schema.js.map +1 -0
  33. package/dist/api/observer-v2.d.ts +33 -0
  34. package/dist/api/observer-v2.d.ts.map +1 -0
  35. package/dist/api/observer-v2.js +60 -0
  36. package/dist/api/observer-v2.js.map +1 -0
  37. package/dist/api/owner-observe-grants-v2-schema.d.ts +678 -0
  38. package/dist/api/owner-observe-grants-v2-schema.d.ts.map +1 -0
  39. package/dist/api/owner-observe-grants-v2-schema.js +887 -0
  40. package/dist/api/owner-observe-grants-v2-schema.js.map +1 -0
  41. package/dist/api/owner-observe-grants-v2.d.ts +268 -0
  42. package/dist/api/owner-observe-grants-v2.d.ts.map +1 -0
  43. package/dist/api/owner-observe-grants-v2.js +604 -0
  44. package/dist/api/owner-observe-grants-v2.js.map +1 -0
  45. package/dist/api/provider-v2-schema.d.ts +293 -0
  46. package/dist/api/provider-v2-schema.d.ts.map +1 -0
  47. package/dist/api/provider-v2-schema.js +381 -0
  48. package/dist/api/provider-v2-schema.js.map +1 -0
  49. package/dist/api/provider-v2.d.ts +55 -0
  50. package/dist/api/provider-v2.d.ts.map +1 -0
  51. package/dist/api/provider-v2.js +54 -0
  52. package/dist/api/provider-v2.js.map +1 -0
  53. package/dist/api/remote-workspace.d.ts +29 -0
  54. package/dist/api/remote-workspace.d.ts.map +1 -0
  55. package/dist/api/remote-workspace.js +62 -0
  56. package/dist/api/remote-workspace.js.map +1 -0
  57. package/dist/api/supervisor-live-update.d.ts +248 -0
  58. package/dist/api/supervisor-live-update.d.ts.map +1 -0
  59. package/dist/api/supervisor-live-update.js +434 -0
  60. package/dist/api/supervisor-live-update.js.map +1 -0
  61. package/dist/api/terminal-reason.d.ts +5 -0
  62. package/dist/api/terminal-reason.d.ts.map +1 -0
  63. package/dist/api/terminal-reason.js +12 -0
  64. package/dist/api/terminal-reason.js.map +1 -0
  65. package/dist/auth/browser-handoff.d.ts +59 -0
  66. package/dist/auth/browser-handoff.d.ts.map +1 -0
  67. package/dist/auth/browser-handoff.js +33 -0
  68. package/dist/auth/browser-handoff.js.map +1 -0
  69. package/dist/auth/browser.d.ts +11 -0
  70. package/dist/auth/browser.d.ts.map +1 -0
  71. package/dist/auth/browser.js +47 -0
  72. package/dist/auth/browser.js.map +1 -0
  73. package/dist/auth/human-client.d.ts +39 -0
  74. package/dist/auth/human-client.d.ts.map +1 -0
  75. package/dist/auth/human-client.js +66 -0
  76. package/dist/auth/human-client.js.map +1 -0
  77. package/dist/auth/human-contracts.d.ts +52 -0
  78. package/dist/auth/human-contracts.d.ts.map +1 -0
  79. package/dist/auth/human-contracts.js +229 -0
  80. package/dist/auth/human-contracts.js.map +1 -0
  81. package/dist/auth/human-session.d.ts +48 -0
  82. package/dist/auth/human-session.d.ts.map +1 -0
  83. package/dist/auth/human-session.js +902 -0
  84. package/dist/auth/human-session.js.map +1 -0
  85. package/dist/auth/onboarding-state.d.ts +31 -0
  86. package/dist/auth/onboarding-state.d.ts.map +1 -0
  87. package/dist/auth/onboarding-state.js +52 -0
  88. package/dist/auth/onboarding-state.js.map +1 -0
  89. package/dist/auth/pkce.d.ts +15 -0
  90. package/dist/auth/pkce.d.ts.map +1 -0
  91. package/dist/auth/pkce.js +19 -0
  92. package/dist/auth/pkce.js.map +1 -0
  93. package/dist/bin/cuna.d.ts +3 -0
  94. package/dist/bin/cuna.d.ts.map +1 -0
  95. package/dist/bin/cuna.js +4 -0
  96. package/dist/bin/cuna.js.map +1 -0
  97. package/dist/build-identity.d.ts +20 -0
  98. package/dist/build-identity.d.ts.map +1 -0
  99. package/dist/build-identity.js +77 -0
  100. package/dist/build-identity.js.map +1 -0
  101. package/dist/cli/command-help.d.ts +9 -0
  102. package/dist/cli/command-help.d.ts.map +1 -0
  103. package/dist/cli/command-help.js +324 -0
  104. package/dist/cli/command-help.js.map +1 -0
  105. package/dist/cli/help.d.ts +40 -0
  106. package/dist/cli/help.d.ts.map +1 -0
  107. package/dist/cli/help.js +256 -0
  108. package/dist/cli/help.js.map +1 -0
  109. package/dist/cli/output.d.ts +28 -0
  110. package/dist/cli/output.d.ts.map +1 -0
  111. package/dist/cli/output.js +95 -0
  112. package/dist/cli/output.js.map +1 -0
  113. package/dist/cli/parser.d.ts +65 -0
  114. package/dist/cli/parser.d.ts.map +1 -0
  115. package/dist/cli/parser.js +294 -0
  116. package/dist/cli/parser.js.map +1 -0
  117. package/dist/cli/process-entrypoint.d.ts +18 -0
  118. package/dist/cli/process-entrypoint.d.ts.map +1 -0
  119. package/dist/cli/process-entrypoint.js +26 -0
  120. package/dist/cli/process-entrypoint.js.map +1 -0
  121. package/dist/cli/run.d.ts +114 -0
  122. package/dist/cli/run.d.ts.map +1 -0
  123. package/dist/cli/run.js +1969 -0
  124. package/dist/cli/run.js.map +1 -0
  125. package/dist/commands/commands.d.ts +74 -0
  126. package/dist/commands/commands.d.ts.map +1 -0
  127. package/dist/commands/commands.js +2814 -0
  128. package/dist/commands/commands.js.map +1 -0
  129. package/dist/config/config.d.ts +86 -0
  130. package/dist/config/config.d.ts.map +1 -0
  131. package/dist/config/config.js +323 -0
  132. package/dist/config/config.js.map +1 -0
  133. package/dist/config/infra-contract-witness.d.ts +29 -0
  134. package/dist/config/infra-contract-witness.d.ts.map +1 -0
  135. package/dist/config/infra-contract-witness.js +30 -0
  136. package/dist/config/infra-contract-witness.js.map +1 -0
  137. package/dist/core/browser-url.d.ts +2 -0
  138. package/dist/core/browser-url.d.ts.map +1 -0
  139. package/dist/core/browser-url.js +20 -0
  140. package/dist/core/browser-url.js.map +1 -0
  141. package/dist/core/deployed-wire-compatibility.d.ts +15 -0
  142. package/dist/core/deployed-wire-compatibility.d.ts.map +1 -0
  143. package/dist/core/deployed-wire-compatibility.js +15 -0
  144. package/dist/core/deployed-wire-compatibility.js.map +1 -0
  145. package/dist/core/errors.d.ts +59 -0
  146. package/dist/core/errors.d.ts.map +1 -0
  147. package/dist/core/errors.js +82 -0
  148. package/dist/core/errors.js.map +1 -0
  149. package/dist/core/exit-codes.d.ts +68 -0
  150. package/dist/core/exit-codes.d.ts.map +1 -0
  151. package/dist/core/exit-codes.js +84 -0
  152. package/dist/core/exit-codes.js.map +1 -0
  153. package/dist/core/instant.d.ts +60 -0
  154. package/dist/core/instant.d.ts.map +1 -0
  155. package/dist/core/instant.js +90 -0
  156. package/dist/core/instant.js.map +1 -0
  157. package/dist/core/namespace.d.ts +171 -0
  158. package/dist/core/namespace.d.ts.map +1 -0
  159. package/dist/core/namespace.js +227 -0
  160. package/dist/core/namespace.js.map +1 -0
  161. package/dist/core/observation-budget.d.ts +185 -0
  162. package/dist/core/observation-budget.d.ts.map +1 -0
  163. package/dist/core/observation-budget.js +209 -0
  164. package/dist/core/observation-budget.js.map +1 -0
  165. package/dist/core/product-web.d.ts +81 -0
  166. package/dist/core/product-web.d.ts.map +1 -0
  167. package/dist/core/product-web.js +87 -0
  168. package/dist/core/product-web.js.map +1 -0
  169. package/dist/core/validation.d.ts +90 -0
  170. package/dist/core/validation.d.ts.map +1 -0
  171. package/dist/core/validation.js +199 -0
  172. package/dist/core/validation.js.map +1 -0
  173. package/dist/credentials/contracts.d.ts +82 -0
  174. package/dist/credentials/contracts.d.ts.map +1 -0
  175. package/dist/credentials/contracts.js +2 -0
  176. package/dist/credentials/contracts.js.map +1 -0
  177. package/dist/credentials/errors.d.ts +19 -0
  178. package/dist/credentials/errors.d.ts.map +1 -0
  179. package/dist/credentials/errors.js +16 -0
  180. package/dist/credentials/errors.js.map +1 -0
  181. package/dist/credentials/index.d.ts +6 -0
  182. package/dist/credentials/index.d.ts.map +1 -0
  183. package/dist/credentials/index.js +6 -0
  184. package/dist/credentials/index.js.map +1 -0
  185. package/dist/credentials/local-session.d.ts +101 -0
  186. package/dist/credentials/local-session.d.ts.map +1 -0
  187. package/dist/credentials/local-session.js +839 -0
  188. package/dist/credentials/local-session.js.map +1 -0
  189. package/dist/credentials/secret-material.d.ts +17 -0
  190. package/dist/credentials/secret-material.d.ts.map +1 -0
  191. package/dist/credentials/secret-material.js +49 -0
  192. package/dist/credentials/secret-material.js.map +1 -0
  193. package/dist/credentials/vault.d.ts +41 -0
  194. package/dist/credentials/vault.d.ts.map +1 -0
  195. package/dist/credentials/vault.js +719 -0
  196. package/dist/credentials/vault.js.map +1 -0
  197. package/dist/daemon/endpoint.d.ts +29 -0
  198. package/dist/daemon/endpoint.d.ts.map +1 -0
  199. package/dist/daemon/endpoint.js +66 -0
  200. package/dist/daemon/endpoint.js.map +1 -0
  201. package/dist/daemon/journal.d.ts +62 -0
  202. package/dist/daemon/journal.d.ts.map +1 -0
  203. package/dist/daemon/journal.js +299 -0
  204. package/dist/daemon/journal.js.map +1 -0
  205. package/dist/daemon/lease.d.ts +25 -0
  206. package/dist/daemon/lease.d.ts.map +1 -0
  207. package/dist/daemon/lease.js +94 -0
  208. package/dist/daemon/lease.js.map +1 -0
  209. package/dist/daemon/lifecycle.d.ts +14 -0
  210. package/dist/daemon/lifecycle.d.ts.map +1 -0
  211. package/dist/daemon/lifecycle.js +29 -0
  212. package/dist/daemon/lifecycle.js.map +1 -0
  213. package/dist/daemon/protocol.d.ts +65 -0
  214. package/dist/daemon/protocol.d.ts.map +1 -0
  215. package/dist/daemon/protocol.js +194 -0
  216. package/dist/daemon/protocol.js.map +1 -0
  217. package/dist/daemon/supervisor.d.ts +29 -0
  218. package/dist/daemon/supervisor.d.ts.map +1 -0
  219. package/dist/daemon/supervisor.js +87 -0
  220. package/dist/daemon/supervisor.js.map +1 -0
  221. package/dist/daemon/views.d.ts +31 -0
  222. package/dist/daemon/views.d.ts.map +1 -0
  223. package/dist/daemon/views.js +86 -0
  224. package/dist/daemon/views.js.map +1 -0
  225. package/dist/index.d.ts +38 -0
  226. package/dist/index.d.ts.map +1 -0
  227. package/dist/index.js +38 -0
  228. package/dist/index.js.map +1 -0
  229. package/dist/journey/api-effects.d.ts +59 -0
  230. package/dist/journey/api-effects.d.ts.map +1 -0
  231. package/dist/journey/api-effects.js +386 -0
  232. package/dist/journey/api-effects.js.map +1 -0
  233. package/dist/journey/derived-identity.d.ts +91 -0
  234. package/dist/journey/derived-identity.d.ts.map +1 -0
  235. package/dist/journey/derived-identity.js +123 -0
  236. package/dist/journey/derived-identity.js.map +1 -0
  237. package/dist/journey/index.d.ts +6 -0
  238. package/dist/journey/index.d.ts.map +1 -0
  239. package/dist/journey/index.js +6 -0
  240. package/dist/journey/index.js.map +1 -0
  241. package/dist/journey/intent.d.ts +36 -0
  242. package/dist/journey/intent.d.ts.map +1 -0
  243. package/dist/journey/intent.js +191 -0
  244. package/dist/journey/intent.js.map +1 -0
  245. package/dist/journey/orchestrator.d.ts +140 -0
  246. package/dist/journey/orchestrator.d.ts.map +1 -0
  247. package/dist/journey/orchestrator.js +415 -0
  248. package/dist/journey/orchestrator.js.map +1 -0
  249. package/dist/journey/provider-launch-intent.d.ts +12 -0
  250. package/dist/journey/provider-launch-intent.d.ts.map +1 -0
  251. package/dist/journey/provider-launch-intent.js +40 -0
  252. package/dist/journey/provider-launch-intent.js.map +1 -0
  253. package/dist/journey/remote-workspace.d.ts +34 -0
  254. package/dist/journey/remote-workspace.d.ts.map +1 -0
  255. package/dist/journey/remote-workspace.js +91 -0
  256. package/dist/journey/remote-workspace.js.map +1 -0
  257. package/dist/journey/root-entry.d.ts +56 -0
  258. package/dist/journey/root-entry.d.ts.map +1 -0
  259. package/dist/journey/root-entry.js +19 -0
  260. package/dist/journey/root-entry.js.map +1 -0
  261. package/dist/journey/selection.d.ts +165 -0
  262. package/dist/journey/selection.d.ts.map +1 -0
  263. package/dist/journey/selection.js +565 -0
  264. package/dist/journey/selection.js.map +1 -0
  265. package/dist/journey/session-failure.d.ts +4 -0
  266. package/dist/journey/session-failure.d.ts.map +1 -0
  267. package/dist/journey/session-failure.js +28 -0
  268. package/dist/journey/session-failure.js.map +1 -0
  269. package/dist/journey/workspace-effects.d.ts +30 -0
  270. package/dist/journey/workspace-effects.d.ts.map +1 -0
  271. package/dist/journey/workspace-effects.js +348 -0
  272. package/dist/journey/workspace-effects.js.map +1 -0
  273. package/dist/local-actions/broker.d.ts +32 -0
  274. package/dist/local-actions/broker.d.ts.map +1 -0
  275. package/dist/local-actions/broker.js +400 -0
  276. package/dist/local-actions/broker.js.map +1 -0
  277. package/dist/local-actions/browser-action.d.ts +78 -0
  278. package/dist/local-actions/browser-action.d.ts.map +1 -0
  279. package/dist/local-actions/browser-action.js +307 -0
  280. package/dist/local-actions/browser-action.js.map +1 -0
  281. package/dist/local-actions/callback-relay.d.ts +45 -0
  282. package/dist/local-actions/callback-relay.d.ts.map +1 -0
  283. package/dist/local-actions/callback-relay.js +265 -0
  284. package/dist/local-actions/callback-relay.js.map +1 -0
  285. package/dist/local-actions/clipboard.d.ts +3 -0
  286. package/dist/local-actions/clipboard.d.ts.map +1 -0
  287. package/dist/local-actions/clipboard.js +18 -0
  288. package/dist/local-actions/clipboard.js.map +1 -0
  289. package/dist/local-actions/contracts.d.ts +63 -0
  290. package/dist/local-actions/contracts.d.ts.map +1 -0
  291. package/dist/local-actions/contracts.js +18 -0
  292. package/dist/local-actions/contracts.js.map +1 -0
  293. package/dist/local-actions/desktop-presentation.d.ts +141 -0
  294. package/dist/local-actions/desktop-presentation.d.ts.map +1 -0
  295. package/dist/local-actions/desktop-presentation.js +253 -0
  296. package/dist/local-actions/desktop-presentation.js.map +1 -0
  297. package/dist/local-actions/device-selection.d.ts +43 -0
  298. package/dist/local-actions/device-selection.d.ts.map +1 -0
  299. package/dist/local-actions/device-selection.js +154 -0
  300. package/dist/local-actions/device-selection.js.map +1 -0
  301. package/dist/local-actions/executor.d.ts +49 -0
  302. package/dist/local-actions/executor.d.ts.map +1 -0
  303. package/dist/local-actions/executor.js +329 -0
  304. package/dist/local-actions/executor.js.map +1 -0
  305. package/dist/local-actions/file-transfers.d.ts +141 -0
  306. package/dist/local-actions/file-transfers.d.ts.map +1 -0
  307. package/dist/local-actions/file-transfers.js +446 -0
  308. package/dist/local-actions/file-transfers.js.map +1 -0
  309. package/dist/local-actions/foreground-notifications.d.ts +45 -0
  310. package/dist/local-actions/foreground-notifications.d.ts.map +1 -0
  311. package/dist/local-actions/foreground-notifications.js +163 -0
  312. package/dist/local-actions/foreground-notifications.js.map +1 -0
  313. package/dist/local-actions/git-signing.d.ts +39 -0
  314. package/dist/local-actions/git-signing.d.ts.map +1 -0
  315. package/dist/local-actions/git-signing.js +135 -0
  316. package/dist/local-actions/git-signing.js.map +1 -0
  317. package/dist/local-actions/index.d.ts +19 -0
  318. package/dist/local-actions/index.d.ts.map +1 -0
  319. package/dist/local-actions/index.js +19 -0
  320. package/dist/local-actions/index.js.map +1 -0
  321. package/dist/local-actions/local-service-actions.d.ts +87 -0
  322. package/dist/local-actions/local-service-actions.d.ts.map +1 -0
  323. package/dist/local-actions/local-service-actions.js +347 -0
  324. package/dist/local-actions/local-service-actions.js.map +1 -0
  325. package/dist/local-actions/loopback.d.ts +5 -0
  326. package/dist/local-actions/loopback.d.ts.map +1 -0
  327. package/dist/local-actions/loopback.js +15 -0
  328. package/dist/local-actions/loopback.js.map +1 -0
  329. package/dist/local-actions/policy-store.d.ts +7 -0
  330. package/dist/local-actions/policy-store.d.ts.map +1 -0
  331. package/dist/local-actions/policy-store.js +70 -0
  332. package/dist/local-actions/policy-store.js.map +1 -0
  333. package/dist/local-actions/policy.d.ts +21 -0
  334. package/dist/local-actions/policy.d.ts.map +1 -0
  335. package/dist/local-actions/policy.js +43 -0
  336. package/dist/local-actions/policy.js.map +1 -0
  337. package/dist/local-actions/private-port-forward.d.ts +36 -0
  338. package/dist/local-actions/private-port-forward.d.ts.map +1 -0
  339. package/dist/local-actions/private-port-forward.js +154 -0
  340. package/dist/local-actions/private-port-forward.js.map +1 -0
  341. package/dist/local-actions/provider-mcp-config.d.ts +101 -0
  342. package/dist/local-actions/provider-mcp-config.d.ts.map +1 -0
  343. package/dist/local-actions/provider-mcp-config.js +166 -0
  344. package/dist/local-actions/provider-mcp-config.js.map +1 -0
  345. package/dist/local-actions/providers.d.ts +12 -0
  346. package/dist/local-actions/providers.d.ts.map +1 -0
  347. package/dist/local-actions/providers.js +42 -0
  348. package/dist/local-actions/providers.js.map +1 -0
  349. package/dist/local-actions/schemas.d.ts +4 -0
  350. package/dist/local-actions/schemas.d.ts.map +1 -0
  351. package/dist/local-actions/schemas.js +314 -0
  352. package/dist/local-actions/schemas.js.map +1 -0
  353. package/dist/local-actions/sensitive-consent.d.ts +32 -0
  354. package/dist/local-actions/sensitive-consent.d.ts.map +1 -0
  355. package/dist/local-actions/sensitive-consent.js +47 -0
  356. package/dist/local-actions/sensitive-consent.js.map +1 -0
  357. package/dist/machines/command-launch.d.ts +17 -0
  358. package/dist/machines/command-launch.d.ts.map +1 -0
  359. package/dist/machines/command-launch.js +52 -0
  360. package/dist/machines/command-launch.js.map +1 -0
  361. package/dist/machines/execution-receipt.d.ts +18 -0
  362. package/dist/machines/execution-receipt.d.ts.map +1 -0
  363. package/dist/machines/execution-receipt.js +87 -0
  364. package/dist/machines/execution-receipt.js.map +1 -0
  365. package/dist/machines/executions-screen.d.ts +6 -0
  366. package/dist/machines/executions-screen.d.ts.map +1 -0
  367. package/dist/machines/executions-screen.js +410 -0
  368. package/dist/machines/executions-screen.js.map +1 -0
  369. package/dist/machines/explorer.d.ts +75 -0
  370. package/dist/machines/explorer.d.ts.map +1 -0
  371. package/dist/machines/explorer.js +1726 -0
  372. package/dist/machines/explorer.js.map +1 -0
  373. package/dist/machines/live-supervisor-update.d.ts +325 -0
  374. package/dist/machines/live-supervisor-update.d.ts.map +1 -0
  375. package/dist/machines/live-supervisor-update.js +513 -0
  376. package/dist/machines/live-supervisor-update.js.map +1 -0
  377. package/dist/machines/machine-first.d.ts +123 -0
  378. package/dist/machines/machine-first.d.ts.map +1 -0
  379. package/dist/machines/machine-first.js +119 -0
  380. package/dist/machines/machine-first.js.map +1 -0
  381. package/dist/machines/opencode-supervisor.d.ts +51 -0
  382. package/dist/machines/opencode-supervisor.d.ts.map +1 -0
  383. package/dist/machines/opencode-supervisor.js +124 -0
  384. package/dist/machines/opencode-supervisor.js.map +1 -0
  385. package/dist/machines/pagination.d.ts +4 -0
  386. package/dist/machines/pagination.d.ts.map +1 -0
  387. package/dist/machines/pagination.js +7 -0
  388. package/dist/machines/pagination.js.map +1 -0
  389. package/dist/machines/provider-availability.d.ts +42 -0
  390. package/dist/machines/provider-availability.d.ts.map +1 -0
  391. package/dist/machines/provider-availability.js +82 -0
  392. package/dist/machines/provider-availability.js.map +1 -0
  393. package/dist/machines/provider-screen.d.ts +12 -0
  394. package/dist/machines/provider-screen.d.ts.map +1 -0
  395. package/dist/machines/provider-screen.js +129 -0
  396. package/dist/machines/provider-screen.js.map +1 -0
  397. package/dist/machines/session-actionability.d.ts +86 -0
  398. package/dist/machines/session-actionability.d.ts.map +1 -0
  399. package/dist/machines/session-actionability.js +125 -0
  400. package/dist/machines/session-actionability.js.map +1 -0
  401. package/dist/machines/session-visibility.d.ts +139 -0
  402. package/dist/machines/session-visibility.d.ts.map +1 -0
  403. package/dist/machines/session-visibility.js +109 -0
  404. package/dist/machines/session-visibility.js.map +1 -0
  405. package/dist/platform/adapter.d.ts +62 -0
  406. package/dist/platform/adapter.d.ts.map +1 -0
  407. package/dist/platform/adapter.js +240 -0
  408. package/dist/platform/adapter.js.map +1 -0
  409. package/dist/platform/support.d.ts +12 -0
  410. package/dist/platform/support.d.ts.map +1 -0
  411. package/dist/platform/support.js +25 -0
  412. package/dist/platform/support.js.map +1 -0
  413. package/dist/pty/contracts.d.ts +45 -0
  414. package/dist/pty/contracts.d.ts.map +1 -0
  415. package/dist/pty/contracts.js +2 -0
  416. package/dist/pty/contracts.js.map +1 -0
  417. package/dist/pty/evidence-gate.d.ts +14 -0
  418. package/dist/pty/evidence-gate.d.ts.map +1 -0
  419. package/dist/pty/evidence-gate.js +35 -0
  420. package/dist/pty/evidence-gate.js.map +1 -0
  421. package/dist/pty/index.d.ts +5 -0
  422. package/dist/pty/index.d.ts.map +1 -0
  423. package/dist/pty/index.js +5 -0
  424. package/dist/pty/index.js.map +1 -0
  425. package/dist/pty/node-host-terminal.d.ts +14 -0
  426. package/dist/pty/node-host-terminal.d.ts.map +1 -0
  427. package/dist/pty/node-host-terminal.js +173 -0
  428. package/dist/pty/node-host-terminal.js.map +1 -0
  429. package/dist/pty/node-process.d.ts +26 -0
  430. package/dist/pty/node-process.d.ts.map +1 -0
  431. package/dist/pty/node-process.js +102 -0
  432. package/dist/pty/node-process.js.map +1 -0
  433. package/dist/runtime/api-terminal-control-plane.d.ts +7 -0
  434. package/dist/runtime/api-terminal-control-plane.d.ts.map +1 -0
  435. package/dist/runtime/api-terminal-control-plane.js +95 -0
  436. package/dist/runtime/api-terminal-control-plane.js.map +1 -0
  437. package/dist/runtime/backoff.d.ts +17 -0
  438. package/dist/runtime/backoff.d.ts.map +1 -0
  439. package/dist/runtime/backoff.js +61 -0
  440. package/dist/runtime/backoff.js.map +1 -0
  441. package/dist/runtime/boundary.d.ts +171 -0
  442. package/dist/runtime/boundary.d.ts.map +1 -0
  443. package/dist/runtime/boundary.js +1858 -0
  444. package/dist/runtime/boundary.js.map +1 -0
  445. package/dist/runtime/capability-gate.d.ts +25 -0
  446. package/dist/runtime/capability-gate.d.ts.map +1 -0
  447. package/dist/runtime/capability-gate.js +77 -0
  448. package/dist/runtime/capability-gate.js.map +1 -0
  449. package/dist/runtime/contracts.d.ts +25 -0
  450. package/dist/runtime/contracts.d.ts.map +1 -0
  451. package/dist/runtime/contracts.js +66 -0
  452. package/dist/runtime/contracts.js.map +1 -0
  453. package/dist/runtime/errors.d.ts +20 -0
  454. package/dist/runtime/errors.d.ts.map +1 -0
  455. package/dist/runtime/errors.js +22 -0
  456. package/dist/runtime/errors.js.map +1 -0
  457. package/dist/runtime/index.d.ts +9 -0
  458. package/dist/runtime/index.d.ts.map +1 -0
  459. package/dist/runtime/index.js +9 -0
  460. package/dist/runtime/index.js.map +1 -0
  461. package/dist/runtime/node-foreground-session.d.ts +50 -0
  462. package/dist/runtime/node-foreground-session.d.ts.map +1 -0
  463. package/dist/runtime/node-foreground-session.js +431 -0
  464. package/dist/runtime/node-foreground-session.js.map +1 -0
  465. package/dist/runtime/node-websocket-connector.d.ts +6 -0
  466. package/dist/runtime/node-websocket-connector.d.ts.map +1 -0
  467. package/dist/runtime/node-websocket-connector.js +344 -0
  468. package/dist/runtime/node-websocket-connector.js.map +1 -0
  469. package/dist/runtime/observer-screen.d.ts +6 -0
  470. package/dist/runtime/observer-screen.d.ts.map +1 -0
  471. package/dist/runtime/observer-screen.js +144 -0
  472. package/dist/runtime/observer-screen.js.map +1 -0
  473. package/dist/runtime/owner-grant-operations.d.ts +136 -0
  474. package/dist/runtime/owner-grant-operations.d.ts.map +1 -0
  475. package/dist/runtime/owner-grant-operations.js +216 -0
  476. package/dist/runtime/owner-grant-operations.js.map +1 -0
  477. package/dist/runtime/owner-grants-screen.d.ts +40 -0
  478. package/dist/runtime/owner-grants-screen.d.ts.map +1 -0
  479. package/dist/runtime/owner-grants-screen.js +987 -0
  480. package/dist/runtime/owner-grants-screen.js.map +1 -0
  481. package/dist/runtime/terminal-transport.d.ts +85 -0
  482. package/dist/runtime/terminal-transport.d.ts.map +1 -0
  483. package/dist/runtime/terminal-transport.js +152 -0
  484. package/dist/runtime/terminal-transport.js.map +1 -0
  485. package/dist/sync/continuous-sync-supervisor.d.ts +107 -0
  486. package/dist/sync/continuous-sync-supervisor.d.ts.map +1 -0
  487. package/dist/sync/continuous-sync-supervisor.js +1117 -0
  488. package/dist/sync/continuous-sync-supervisor.js.map +1 -0
  489. package/dist/sync/index.d.ts +9 -0
  490. package/dist/sync/index.d.ts.map +1 -0
  491. package/dist/sync/index.js +9 -0
  492. package/dist/sync/index.js.map +1 -0
  493. package/dist/sync/journal.d.ts +57 -0
  494. package/dist/sync/journal.d.ts.map +1 -0
  495. package/dist/sync/journal.js +685 -0
  496. package/dist/sync/journal.js.map +1 -0
  497. package/dist/sync/revisions.d.ts +118 -0
  498. package/dist/sync/revisions.d.ts.map +1 -0
  499. package/dist/sync/revisions.js +364 -0
  500. package/dist/sync/revisions.js.map +1 -0
  501. package/dist/sync/supervisor.d.ts +107 -0
  502. package/dist/sync/supervisor.d.ts.map +1 -0
  503. package/dist/sync/supervisor.js +246 -0
  504. package/dist/sync/supervisor.js.map +1 -0
  505. package/dist/sync/workspace-sync-client.d.ts +18 -0
  506. package/dist/sync/workspace-sync-client.d.ts.map +1 -0
  507. package/dist/sync/workspace-sync-client.js +150 -0
  508. package/dist/sync/workspace-sync-client.js.map +1 -0
  509. package/dist/sync/workspace-sync-coordinator.d.ts +76 -0
  510. package/dist/sync/workspace-sync-coordinator.d.ts.map +1 -0
  511. package/dist/sync/workspace-sync-coordinator.js +621 -0
  512. package/dist/sync/workspace-sync-coordinator.js.map +1 -0
  513. package/dist/sync/workspace-sync-product-service.d.ts +79 -0
  514. package/dist/sync/workspace-sync-product-service.d.ts.map +1 -0
  515. package/dist/sync/workspace-sync-product-service.js +398 -0
  516. package/dist/sync/workspace-sync-product-service.js.map +1 -0
  517. package/dist/sync/workspace-sync-protocol.d.ts +145 -0
  518. package/dist/sync/workspace-sync-protocol.d.ts.map +1 -0
  519. package/dist/sync/workspace-sync-protocol.js +347 -0
  520. package/dist/sync/workspace-sync-protocol.js.map +1 -0
  521. package/dist/terminal/appbar.d.ts +40 -0
  522. package/dist/terminal/appbar.d.ts.map +1 -0
  523. package/dist/terminal/appbar.js +55 -0
  524. package/dist/terminal/appbar.js.map +1 -0
  525. package/dist/terminal/cell-width.d.ts +3 -0
  526. package/dist/terminal/cell-width.d.ts.map +1 -0
  527. package/dist/terminal/cell-width.js +53 -0
  528. package/dist/terminal/cell-width.js.map +1 -0
  529. package/dist/terminal/codec.d.ts +107 -0
  530. package/dist/terminal/codec.d.ts.map +1 -0
  531. package/dist/terminal/codec.js +538 -0
  532. package/dist/terminal/codec.js.map +1 -0
  533. package/dist/terminal/foreground.d.ts +135 -0
  534. package/dist/terminal/foreground.d.ts.map +1 -0
  535. package/dist/terminal/foreground.js +2097 -0
  536. package/dist/terminal/foreground.js.map +1 -0
  537. package/dist/terminal/generated/terminal-wire-v1.d.ts +26 -0
  538. package/dist/terminal/generated/terminal-wire-v1.d.ts.map +1 -0
  539. package/dist/terminal/generated/terminal-wire-v1.js +27 -0
  540. package/dist/terminal/generated/terminal-wire-v1.js.map +1 -0
  541. package/dist/terminal/mode.d.ts +33 -0
  542. package/dist/terminal/mode.d.ts.map +1 -0
  543. package/dist/terminal/mode.js +99 -0
  544. package/dist/terminal/mode.js.map +1 -0
  545. package/dist/terminal/passthrough.d.ts +47 -0
  546. package/dist/terminal/passthrough.d.ts.map +1 -0
  547. package/dist/terminal/passthrough.js +666 -0
  548. package/dist/terminal/passthrough.js.map +1 -0
  549. package/dist/terminal/resume.d.ts +58 -0
  550. package/dist/terminal/resume.d.ts.map +1 -0
  551. package/dist/terminal/resume.js +185 -0
  552. package/dist/terminal/resume.js.map +1 -0
  553. package/dist/terminal/viewport.d.ts +93 -0
  554. package/dist/terminal/viewport.d.ts.map +1 -0
  555. package/dist/terminal/viewport.js +266 -0
  556. package/dist/terminal/viewport.js.map +1 -0
  557. package/dist/terminal/workbench.d.ts +32 -0
  558. package/dist/terminal/workbench.d.ts.map +1 -0
  559. package/dist/terminal/workbench.js +316 -0
  560. package/dist/terminal/workbench.js.map +1 -0
  561. package/dist/terminal/xterm-vte.d.ts +49 -0
  562. package/dist/terminal/xterm-vte.d.ts.map +1 -0
  563. package/dist/terminal/xterm-vte.js +602 -0
  564. package/dist/terminal/xterm-vte.js.map +1 -0
  565. package/dist/version.d.ts +3 -0
  566. package/dist/version.d.ts.map +1 -0
  567. package/dist/version.js +3 -0
  568. package/dist/version.js.map +1 -0
  569. package/dist/workspace/binding-path.d.ts +17 -0
  570. package/dist/workspace/binding-path.d.ts.map +1 -0
  571. package/dist/workspace/binding-path.js +91 -0
  572. package/dist/workspace/binding-path.js.map +1 -0
  573. package/dist/workspace/binding-store.d.ts +107 -0
  574. package/dist/workspace/binding-store.d.ts.map +1 -0
  575. package/dist/workspace/binding-store.js +783 -0
  576. package/dist/workspace/binding-store.js.map +1 -0
  577. package/dist/workspace/binding.d.ts +35 -0
  578. package/dist/workspace/binding.d.ts.map +1 -0
  579. package/dist/workspace/binding.js +70 -0
  580. package/dist/workspace/binding.js.map +1 -0
  581. package/dist/workspace/errors.d.ts +4 -0
  582. package/dist/workspace/errors.d.ts.map +1 -0
  583. package/dist/workspace/errors.js +19 -0
  584. package/dist/workspace/errors.js.map +1 -0
  585. package/dist/workspace/exclusion.d.ts +21 -0
  586. package/dist/workspace/exclusion.d.ts.map +1 -0
  587. package/dist/workspace/exclusion.js +243 -0
  588. package/dist/workspace/exclusion.js.map +1 -0
  589. package/dist/workspace/index.d.ts +8 -0
  590. package/dist/workspace/index.d.ts.map +1 -0
  591. package/dist/workspace/index.js +8 -0
  592. package/dist/workspace/index.js.map +1 -0
  593. package/dist/workspace/lifecycle.d.ts +56 -0
  594. package/dist/workspace/lifecycle.d.ts.map +1 -0
  595. package/dist/workspace/lifecycle.js +94 -0
  596. package/dist/workspace/lifecycle.js.map +1 -0
  597. package/dist/workspace/manifest.d.ts +47 -0
  598. package/dist/workspace/manifest.d.ts.map +1 -0
  599. package/dist/workspace/manifest.js +243 -0
  600. package/dist/workspace/manifest.js.map +1 -0
  601. package/dist/workspace/paths.d.ts +14 -0
  602. package/dist/workspace/paths.d.ts.map +1 -0
  603. package/dist/workspace/paths.js +67 -0
  604. package/dist/workspace/paths.js.map +1 -0
  605. package/dist/workspace/schema.d.ts +15 -0
  606. package/dist/workspace/schema.d.ts.map +1 -0
  607. package/dist/workspace/schema.js +33 -0
  608. package/dist/workspace/schema.js.map +1 -0
  609. package/dist/workspace/selection-screen.d.ts +4 -0
  610. package/dist/workspace/selection-screen.d.ts.map +1 -0
  611. package/dist/workspace/selection-screen.js +216 -0
  612. package/dist/workspace/selection-screen.js.map +1 -0
  613. package/dist/workspace/selection-service.d.ts +16 -0
  614. package/dist/workspace/selection-service.d.ts.map +1 -0
  615. package/dist/workspace/selection-service.js +65 -0
  616. package/dist/workspace/selection-service.js.map +1 -0
  617. package/node_modules/@xterm/headless/README.md +31 -0
  618. package/node_modules/@xterm/headless/lib-headless/xterm-headless.js +2 -0
  619. package/node_modules/@xterm/headless/lib-headless/xterm-headless.js.map +1 -0
  620. package/node_modules/@xterm/headless/lib-headless/xterm-headless.mjs +46 -0
  621. package/node_modules/@xterm/headless/lib-headless/xterm-headless.mjs.map +7 -0
  622. package/node_modules/@xterm/headless/package.json +29 -0
  623. package/node_modules/@xterm/headless/typings/xterm-headless.d.ts +1385 -0
  624. package/package.json +75 -0
@@ -0,0 +1,386 @@
1
+ import { withProviderLaunchIntent } from "./provider-launch-intent.js";
2
+ import { createPublishedProviderSessionV2, requireMatchingPreset } from "./remote-workspace.js";
3
+ import { sessionFailure } from "./session-failure.js";
4
+ import { decideCapability, requireCapability } from "../api/client.js";
5
+ import { EXIT_CODES, CunaError } from "../core/errors.js";
6
+ import { isOpenCodeRuntimeUnverifiedCapabilityRejection, isOpenCodeSupervisorUpgradeReason, isOpenCodeSupervisorUpgradeCapabilityRejection, openCodeRuntimeUnverified, openCodeSupervisorUpgradeRequired, } from "../machines/opencode-supervisor.js";
7
+ import { machineProviderAvailability } from "../machines/provider-availability.js";
8
+ const MACHINE_POLL_LIMIT = 60;
9
+ const CHILD_POLL_LIMIT = 90;
10
+ function fail(code, message, exitCode = EXIT_CODES.remote, details) {
11
+ return new CunaError({ code, message, exitCode, ...(details === undefined ? {} : { details }) });
12
+ }
13
+ function recency(machine, now) {
14
+ const timestamp = machine.updatedAt ?? machine.createdAt;
15
+ if (timestamp === undefined)
16
+ return "unknown";
17
+ const observed = Date.parse(timestamp);
18
+ if (!Number.isFinite(observed) || observed > now + 5_000)
19
+ return "unknown";
20
+ return now - observed <= 30 * 24 * 60 * 60 * 1_000 ? "recent" : "not_recent";
21
+ }
22
+ function machineState(value) {
23
+ const states = new Set(["creating", "running", "paused", "suspended", "stopped", "deleted", "error"]);
24
+ return states.has(value) ? value : "unknown";
25
+ }
26
+ function relativeCwd(cwd) {
27
+ return cwd.replace(/^\/workspace\/?/u, "") || ".";
28
+ }
29
+ /**
30
+ * Map the durable writer seat onto the selection's attachment fact.
31
+ *
32
+ * available ∧ writer = null → detached (nobody types; reuse)
33
+ * available ∧ writer = this client → detached (our own seat; the
34
+ * reconnect path reissues with the
35
+ * resume handle)
36
+ * available ∧ writer = other client → attached (name the holder)
37
+ * owner_unrecoverable | none → unknown (no attestable PTY)
38
+ *
39
+ * Without our own client instance id every held seat is another client's:
40
+ * claiming a seat as ours on no evidence would race a terminal that has a
41
+ * writer.
42
+ */
43
+ export function attachmentFromSeat(seat, ownClientInstanceId) {
44
+ if (seat.state !== "available")
45
+ return { attachment: "unknown" };
46
+ if (seat.writerClientInstanceId === null)
47
+ return { attachment: "detached" };
48
+ // The row names the last writer forever; only its connection says whether
49
+ // that client is there now. A writer that has detached leaves the terminal
50
+ // reusable, which is the whole point of a durable session.
51
+ if (!seat.writerAttached)
52
+ return { attachment: "detached" };
53
+ if (ownClientInstanceId !== undefined && seat.writerClientInstanceId === ownClientInstanceId) {
54
+ return { attachment: "detached" };
55
+ }
56
+ return { attachment: "attached", attachmentHolder: seat.writerClientInstanceId };
57
+ }
58
+ /**
59
+ * An edge that does not serve the seat route answers 404. Both spellings the
60
+ * transport gives a 404 map to "the fact is not published here": a plain
61
+ * 404 is `operation_not_served`, a Problem-shaped `resource_not_found` is
62
+ * `not_found`. Every other error is a real failure and propagates.
63
+ */
64
+ function isSeatUnserved(error) {
65
+ return error instanceof CunaError &&
66
+ (error.code === "cuna.remote.operation_not_served" || error.code === "cuna.remote.not_found");
67
+ }
68
+ function sessionObservation(session, seat) {
69
+ return Object.freeze({
70
+ id: session.id,
71
+ machineId: session.machineId,
72
+ name: session.name,
73
+ agent: session.agent,
74
+ workspaceIdentity: session.workspaceBindingId ?? "unknown",
75
+ workspaceGeneration: session.workspaceGeneration ?? 0,
76
+ cwd: relativeCwd(session.cwd),
77
+ authMode: session.authMode,
78
+ processState: session.processState,
79
+ ...seat,
80
+ freshness: "fresh",
81
+ createdAt: session.createdAt,
82
+ });
83
+ }
84
+ async function defaultSleep(milliseconds, signal) {
85
+ if (signal.aborted)
86
+ throw signal.reason;
87
+ await new Promise((resolve, reject) => {
88
+ const timer = setTimeout(resolve, milliseconds);
89
+ signal.addEventListener("abort", () => { clearTimeout(timer); reject(signal.reason); }, { once: true });
90
+ });
91
+ }
92
+ export function createApiAgentJourneyEffects(input) {
93
+ const now = input.now ?? Date.now;
94
+ const sleep = input.sleep ?? defaultSleep;
95
+ const effects = {
96
+ inspectWorkspace: input.inspectWorkspace,
97
+ async observeMachines({ signal }) {
98
+ const page = await input.client.listMachines(signal);
99
+ if (page.nextCursor !== undefined) {
100
+ throw fail("cuna.journey.machine_page_incomplete", "Machine selection requires a complete bounded collection.", EXIT_CODES.policy);
101
+ }
102
+ return Promise.all(page.items.map(async (machine) => {
103
+ let support = "unknown";
104
+ let supportReason;
105
+ const provider = machineProviderAvailability(machine);
106
+ if (!provider.actionable || provider.agent !== input.requestedAgent) {
107
+ return Object.freeze({
108
+ id: machine.id,
109
+ name: machine.name,
110
+ agent: provider.agent ?? "unknown",
111
+ requestedAgentSupport: "unsupported",
112
+ state: machineState(machine.state),
113
+ ownership: "owned",
114
+ freshness: "fresh",
115
+ recency: recency(machine, now()),
116
+ resources: Object.freeze({
117
+ ...(machine.vcpus === undefined ? {} : { vcpus: machine.vcpus }),
118
+ ...(machine.memoryMiB === undefined ? {} : { memoryMiB: machine.memoryMiB }),
119
+ }),
120
+ costStatus: "unknown",
121
+ });
122
+ }
123
+ try {
124
+ const snapshot = await input.client.discoverCapabilities("machine", machine.id, signal);
125
+ if (snapshot.subjectScope !== "machine" || snapshot.subjectId !== machine.id) {
126
+ return Object.freeze({
127
+ id: machine.id,
128
+ name: machine.name,
129
+ agent: "unknown",
130
+ requestedAgentSupport: "unknown",
131
+ state: machineState(machine.state),
132
+ ownership: "owned",
133
+ freshness: "fresh",
134
+ recency: recency(machine, now()),
135
+ resources: Object.freeze({}),
136
+ costStatus: "unknown",
137
+ });
138
+ }
139
+ const decision = decideCapability(snapshot, "agent_sessions.create", now());
140
+ support = decision.status === "supported"
141
+ ? "supported"
142
+ : decision.status === "unsupported"
143
+ ? "unsupported"
144
+ : "unknown";
145
+ supportReason = decision.status === "supported" ? undefined : decision.reason;
146
+ }
147
+ catch {
148
+ support = "unknown";
149
+ }
150
+ const requestedAgentBlocker = input.requestedAgent === "opencode" &&
151
+ support === "unsupported" &&
152
+ isOpenCodeSupervisorUpgradeReason(supportReason)
153
+ ? "opencode-supervisor-update-required"
154
+ : undefined;
155
+ return Object.freeze({
156
+ id: machine.id,
157
+ name: machine.name,
158
+ agent: provider.agent ?? "unknown",
159
+ requestedAgentSupport: support,
160
+ ...(requestedAgentBlocker === undefined ? {} : { requestedAgentBlocker }),
161
+ state: machineState(machine.state),
162
+ ownership: "owned",
163
+ freshness: "fresh",
164
+ recency: recency(machine, now()),
165
+ resources: Object.freeze({
166
+ ...(machine.vcpus === undefined ? {} : { vcpus: machine.vcpus }),
167
+ ...(machine.memoryMiB === undefined ? {} : { memoryMiB: machine.memoryMiB }),
168
+ }),
169
+ costStatus: "unknown",
170
+ });
171
+ }));
172
+ },
173
+ async createMachine({ requestedAgent, idempotencyKey, requestId, onDispatch, signal }) {
174
+ await requireCapability({ client: input.client, scope: "account", capabilityId: "machines.create", now, signal });
175
+ if (!await input.authorizeMachineCreate({ requestedAgent, signal })) {
176
+ throw fail("cuna.journey.machine_create_not_authorized", "Machine creation was not authorized.", EXIT_CODES.policy);
177
+ }
178
+ // Everything above this line fails before anything is sent: the
179
+ // capability check and the person's own confirmation.
180
+ onDispatch();
181
+ const machine = await input.client.createMachine({
182
+ name: `cuna-${requestedAgent}-${requestId.slice(0, 8)}`,
183
+ agent: requestedAgent,
184
+ background: true,
185
+ }, idempotencyKey, requestId, signal);
186
+ return Object.freeze({ id: machine.id, state: machineState(machine.state) });
187
+ },
188
+ async reconcileMachineCreate({ requestId, signal }) {
189
+ for (let attempt = 0; attempt < MACHINE_POLL_LIMIT; attempt += 1) {
190
+ let request = await input.client.getMachineCreateRequest(requestId, signal);
191
+ if (request.state === "unknown" || request.action === "reconcile") {
192
+ request = await input.client.reconcileMachineCreateRequest(requestId, signal);
193
+ }
194
+ if (request.state === "settled" || request.state === "provider_succeeded") {
195
+ const machine = await input.client.getMachine(request.machineId, signal);
196
+ return Object.freeze({ id: machine.id, state: machineState(machine.state) });
197
+ }
198
+ if (request.state === "terminal_failed" || request.action === "none") {
199
+ throw fail("cuna.journey.machine_create_failed", "Machine creation reached an authoritative failure.");
200
+ }
201
+ await sleep(Math.min(2_000, 100 * 2 ** Math.min(attempt, 4)), signal);
202
+ }
203
+ return "unreconcilable";
204
+ },
205
+ async ensureMachineReady({ machineId, observedState, signal }) {
206
+ let state = observedState;
207
+ if (state === "paused" || state === "suspended") {
208
+ state = machineState((await input.client.transitionMachine(machineId, "resume", signal)).state);
209
+ }
210
+ else if (state === "stopped") {
211
+ state = machineState((await input.client.transitionMachine(machineId, "start", signal)).state);
212
+ }
213
+ else if (state === "deleted" || state === "error" || state === "unknown") {
214
+ throw fail("cuna.journey.machine_not_reusable", "The selected machine is not safely reusable.", EXIT_CODES.policy);
215
+ }
216
+ for (let attempt = 0; attempt < MACHINE_POLL_LIMIT; attempt += 1) {
217
+ if (state === "running")
218
+ return Object.freeze({ id: machineId, state });
219
+ const observed = await input.client.getMachine(machineId, signal);
220
+ state = machineState(observed.state);
221
+ if (state === "deleted" || state === "error" || state === "unknown") {
222
+ throw fail("cuna.journey.machine_not_ready", "The machine did not reach running state.");
223
+ }
224
+ await sleep(Math.min(2_000, 100 * 2 ** Math.min(attempt, 4)), signal);
225
+ }
226
+ throw fail("cuna.journey.machine_ready_timeout", "Machine readiness remained unproven.", EXIT_CODES.network);
227
+ },
228
+ synchronizeWorkspace: input.synchronizeWorkspace,
229
+ async observeAgentSessions({ machineId, signal }) {
230
+ const page = await input.client.listAgentSessions(machineId, { limit: 100 }, signal);
231
+ if (page.nextCursor !== undefined) {
232
+ throw fail("cuna.journey.agent_session_page_incomplete", "AgentSession selection requires a complete bounded collection.", EXIT_CODES.policy);
233
+ }
234
+ return Object.freeze(await Promise.all(page.items.map(async (session) => {
235
+ // Only a session that could be reused is asked for its seat. A
236
+ // terminal or starting one is refused on its process state before the
237
+ // seat would matter, and reading it would only spend a request.
238
+ if (session.processState !== "ready" && session.processState !== "running") {
239
+ return sessionObservation(session, { attachment: "unknown" });
240
+ }
241
+ let seat;
242
+ try {
243
+ await requireCapability({ client: input.client, scope: "agent_session", resourceId: session.id, capabilityId: "terminal_seats.read", allowedInteractions: ["read_only"], now, signal });
244
+ seat = await input.client.getAgentSessionTerminalSeat(session.id, signal);
245
+ }
246
+ catch (error) {
247
+ if (isSeatUnserved(error))
248
+ return sessionObservation(session, { attachment: "unknown" });
249
+ throw error;
250
+ }
251
+ return sessionObservation(session, attachmentFromSeat(seat, input.clientInstanceId));
252
+ })));
253
+ },
254
+ async createAgentSession({ machineId, agent, authMode, credentialBindingId, workspace, signal }) {
255
+ try {
256
+ await requireCapability({
257
+ client: input.client,
258
+ scope: "machine",
259
+ resourceId: machineId,
260
+ capabilityId: "agent_sessions.create",
261
+ now,
262
+ signal,
263
+ });
264
+ }
265
+ catch (error) {
266
+ if (agent === "opencode" && isOpenCodeSupervisorUpgradeCapabilityRejection(error)) {
267
+ throw openCodeSupervisorUpgradeRequired({
268
+ ...(error.details === undefined ? {} : { details: error.details }),
269
+ machineId,
270
+ cause: error,
271
+ });
272
+ }
273
+ if (agent === "opencode" && isOpenCodeRuntimeUnverifiedCapabilityRejection(error)) {
274
+ throw openCodeRuntimeUnverified({
275
+ ...(error.details === undefined ? {} : { details: error.details }),
276
+ machineId,
277
+ cause: error,
278
+ });
279
+ }
280
+ throw error;
281
+ }
282
+ if (agent === 'opencode' || agent === 'codex' || agent === 'claude-code') {
283
+ if (authMode !== 'interactive_login' || credentialBindingId !== undefined || !workspace.executionWorkspaceId || workspace.generation < 1 || !input.selectProviderPreset)
284
+ throw fail('cuna.provider.v2_unavailable', 'The agent requires a selected V2 profile and a published execution Workspace.');
285
+ const preset = await input.selectProviderPreset(signal);
286
+ requireMatchingPreset(agent, preset);
287
+ if (!input.providerLaunchState)
288
+ throw fail('cuna.provider.v2_unavailable', 'Durable provider launch state is unavailable.');
289
+ const executionWorkspaceId = workspace.executionWorkspaceId;
290
+ const session = await withProviderLaunchIntent({ ...input.providerLaunchState, machineId, executionWorkspaceId, confirmNew: async () => await input.confirmNewProviderLaunch?.(signal) ?? false, intent: { executionWorkspaceId, generation: workspace.generation, cwd: workspace.remoteCwd, profileId: preset.profile_id, profileRevision: preset.profile_revision, agent, authMode }, create: operationId => createPublishedProviderSessionV2({ client: input.client, machineId, agent, preset, operationId, executionWorkspaceId, generation: workspace.generation, cwd: workspace.remoteCwd, signal }) });
291
+ return Object.freeze({ id: session.id, machineId: session.machineId });
292
+ }
293
+ throw fail('cuna.provider.v2_unavailable', 'This agent has no supported canonical V2 launch profile.');
294
+ },
295
+ async ensureAgentSessionReady({ agentSessionId, signal }) {
296
+ for (let attempt = 0; attempt < CHILD_POLL_LIMIT; attempt += 1) {
297
+ if (signal?.aborted)
298
+ throw signal.reason;
299
+ const session = await input.client.getAgentSession(agentSessionId, signal);
300
+ if (session.requestState === "failed") {
301
+ if (session.workspaceFailureCode !== undefined) {
302
+ const messages = {
303
+ "workspace.remote_edits": "Remote edits prevent synchronization. Preserve and reconcile those edits before retrying.",
304
+ "workspace.in_use": "This workspace is still in use or waiting for a previous session to finish. Inspect its sessions before retrying.",
305
+ "workspace.replacement_requires_fence": "This Workspace cannot replace its files while writer exclusion is unverified. Its existing files were preserved.",
306
+ "workspace.materialization_manifest_limit": "This Workspace exceeds the runtime file manifest limit. Reduce the synchronized file set before retrying.",
307
+ };
308
+ throw fail("cuna.journey.workspace_materialization_failed", messages[session.workspaceFailureCode] ?? "The runtime could not prepare this Workspace. Its failure code identifies the refused operation.", EXIT_CODES.remote, { reason: session.workspaceFailureCode });
309
+ }
310
+ throw sessionFailure(session, "The AgentSession request failed before attach.");
311
+ }
312
+ if (signal?.aborted)
313
+ throw signal.reason;
314
+ if (session.id !== agentSessionId) {
315
+ throw fail("cuna.journey.session_identity_mismatch", "The readiness observation describes a different AgentSession.");
316
+ }
317
+ if (session.processState === "ready" || session.processState === "running") {
318
+ // A durable process acknowledgement can precede the registry's exact
319
+ // PTY attachment. Wait for that authority without dispatching again.
320
+ try {
321
+ await requireCapability({ client: input.client, scope: "agent_session", resourceId: agentSessionId,
322
+ capabilityId: "terminal_connections.create", allowedInteractions: ["native"], now, signal });
323
+ if (signal?.aborted)
324
+ throw signal.reason;
325
+ return Object.freeze({ id: session.id, machineId: session.machineId });
326
+ }
327
+ catch (error) {
328
+ if (signal?.aborted)
329
+ throw signal.reason;
330
+ if (!(error instanceof CunaError
331
+ && ["cuna.capability.unknown", "cuna.capability.temporarily_unavailable"].includes(error.code)
332
+ && error.details?.capability_id === "terminal_connections.create"
333
+ && ["supervisor_registry_unavailable", "agent_session_not_ready", "runtime_lease_expired"].includes(String(error.details?.reason))))
334
+ throw error;
335
+ }
336
+ }
337
+ if (["exited", "failed", "terminated"].includes(session.processState)) {
338
+ throw sessionFailure(session, "The AgentSession reached a terminal state before attach.");
339
+ }
340
+ await sleep(Math.min(2_000, 100 * 2 ** Math.min(attempt, 4)), signal);
341
+ }
342
+ throw new CunaError({
343
+ code: "cuna.journey.agent_session_ready_timeout",
344
+ message: "Cuna stopped waiting for AgentSession readiness. The remote request may still be pending.",
345
+ exitCode: EXIT_CODES.network,
346
+ hint: `Inspect the existing request before starting another session: cuna agent-sessions get ${agentSessionId}`,
347
+ details: { agent_session_id: agentSessionId },
348
+ });
349
+ },
350
+ attach: input.attach,
351
+ async reconcileCancellation({ ledger, signal }) {
352
+ if (input.reconcileCancellation !== undefined) {
353
+ await input.reconcileCancellation({ ledger, signal });
354
+ return;
355
+ }
356
+ if (ledger.createdAgentSessionId !== undefined) {
357
+ await input.client.getAgentSession(ledger.createdAgentSessionId, signal).catch(() => undefined);
358
+ }
359
+ // An absent request identity proves no create was dispatched, so there is
360
+ // nothing to reconcile. It used to be present unconditionally, which made
361
+ // every cancelled journey that merely SELECTED a machine query a request
362
+ // identity the producer had never been told about.
363
+ if (ledger.createdMachineId === undefined && ledger.machineCreateRequestId !== undefined) {
364
+ const requestId = ledger.machineCreateRequestId;
365
+ try {
366
+ let request = await input.client.getMachineCreateRequest(requestId, signal);
367
+ if (request.state === "unknown" || request.action === "reconcile") {
368
+ request = await input.client.reconcileMachineCreateRequest(requestId, signal);
369
+ }
370
+ if (request.state === "settled" || request.state === "provider_succeeded") {
371
+ await input.client.getMachine(request.machineId, signal);
372
+ }
373
+ }
374
+ catch {
375
+ // A missing request proves no cleanup target; a transport failure
376
+ // remains unproven and is reported by the cancellation result.
377
+ }
378
+ }
379
+ if (ledger.createdMachineId !== undefined) {
380
+ await input.client.getMachine(ledger.createdMachineId, signal).catch(() => undefined);
381
+ }
382
+ },
383
+ };
384
+ return Object.freeze(effects);
385
+ }
386
+ //# sourceMappingURL=api-effects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-effects.js","sourceRoot":"","sources":["../../src/journey/api-effects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ import type { AgentKind } from "../api/contracts.js";
2
+ import type { MachineJourneySelection } from "./intent.js";
3
+ /**
4
+ * A deterministic RFC 4122 version-5-shaped identifier for `domain` and `value`.
5
+ *
6
+ * Two call sites now need the same primitive — the workspace binding's
7
+ * `projectId`/`localInstanceId` and the machine-create request identity — so it
8
+ * is defined once. Two private copies of one derivation is the shape that lets
9
+ * one copy be "improved" and silently start minting different identifiers for
10
+ * records already written to a user's disk.
11
+ */
12
+ export declare function stableUuid(domain: string, value: string): string;
13
+ /** Everything that decides WHICH machine a journey create is asking for. */
14
+ export interface MachineCreateIdentityInput {
15
+ /** The authenticated principal the create is billed and scoped to. */
16
+ readonly userId: string;
17
+ /** The workspace the machine is created inside. */
18
+ readonly workspaceId: string;
19
+ /** The project root, canonicalized by the same authority the binding uses. */
20
+ readonly canonicalLocalRoot: string;
21
+ /** The agent the machine is created to run. */
22
+ readonly agent: AgentKind;
23
+ /** The machine the invocation asked for. */
24
+ readonly machine: MachineJourneySelection;
25
+ }
26
+ export interface MachineCreateIdentity {
27
+ /** The producer-side create-request identity, and the reconciliation key. */
28
+ readonly requestId: string;
29
+ /** The transport idempotency key carried by the same create. */
30
+ readonly idempotencyKey: string;
31
+ /** The intent digest both identities project from. Diagnostics only. */
32
+ readonly intentDigest: string;
33
+ }
34
+ /**
35
+ * Derive the durable identity of one machine-create request from the intent
36
+ * that asked for it.
37
+ *
38
+ * WHY THIS IS NOT `randomUUID()`. The identity below is the key
39
+ * `reconcileMachineCreate` looks the create up by. Minted from randomness it is
40
+ * lost with the process that minted it: a CLI interrupted between the provider
41
+ * accepting the create and the CLI recording it comes back with a different id,
42
+ * cannot find its own attempt, and creates a SECOND machine while the first
43
+ * bills forever with nothing able to name it. Derived from the intent, the
44
+ * re-run of an interrupted command re-derives the same id and reconciles.
45
+ * `journey/workspace-effects.ts` already derives the workspace binding's
46
+ * identities this way and for this reason; this is that discipline, not a
47
+ * second mechanism.
48
+ *
49
+ * EVERY INPUT IS NECESSARY:
50
+ *
51
+ * `userId` — two principals on one host, in one directory, running one
52
+ * command must not derive one create identity. The id is a client-chosen
53
+ * key into a producer-side table; scoping it to the principal makes a
54
+ * cross-principal collision impossible under any producer keying, including
55
+ * keyings this repository cannot read.
56
+ *
57
+ * `workspaceId` — one principal may hold more than one workspace and a
58
+ * machine belongs to exactly one. A create in workspace B must never
59
+ * reconcile onto a machine created in workspace A.
60
+ *
61
+ * `canonicalLocalRoot` — two projects are two machines. This is the same
62
+ * canonical root `workspace-effects.ts` keys the binding on, taken from the
63
+ * same authority rather than recomputed here, so the create identity and
64
+ * the binding identity can never disagree about which project this is. A
65
+ * lexical path would disagree the moment the user retried through a
66
+ * symlink, a different case, or a relative spelling.
67
+ *
68
+ * `agent` — `cuna claude` and `cuna codex` send different create bodies and
69
+ * different machine names. Sharing an identity would reconcile the second
70
+ * command onto a machine running the other agent.
71
+ *
72
+ * `machine` — `--new` is a deliberately different request from the default
73
+ * reconciling one, and the full selection is serialized rather than only
74
+ * its kind so that a later change letting `--machine NAME` reach creation
75
+ * cannot silently alias two names onto one identity.
76
+ *
77
+ * DELIBERATELY EXCLUDED: `syncMode`, `newSession`, `authMode` and
78
+ * `credentialBindingId` describe the AgentSession and the file transfer, not
79
+ * the machine. Admitting them would split one machine into several for
80
+ * invocations that are asking for the same machine.
81
+ *
82
+ * THE COST, stated because it is real. A derived identity is durable in both
83
+ * directions: once a create has settled, that identity keeps resolving to its
84
+ * outcome. If the machine is later deleted AND the local binding removed, the
85
+ * same invocation re-derives a spent identity and cannot create a replacement;
86
+ * `--new` derives a different one and is the way out. That is the price of
87
+ * being able to find an orphan at all, and it is bounded, whereas an orphan
88
+ * that nothing can name is not.
89
+ */
90
+ export declare function deriveMachineCreateIdentity(input: MachineCreateIdentityInput): MachineCreateIdentity;
91
+ //# sourceMappingURL=derived-identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derived-identity.d.ts","sourceRoot":"","sources":["../../src/journey/derived-identity.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAE3D;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAMhE;AAED,4EAA4E;AAC5E,MAAM,WAAW,0BAA0B;IACzC,sEAAsE;IACtE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,mDAAmD;IACnD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,8EAA8E;IAC9E,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,+CAA+C;IAC/C,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;CAC3C;AAED,MAAM,WAAW,qBAAqB;IACpC,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,gEAAgE;IAChE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,wEAAwE;IACxE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AA8BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,0BAA0B,GAAG,qBAAqB,CAmBpG"}
@@ -0,0 +1,123 @@
1
+ import { createHash } from "node:crypto";
2
+ import { EXIT_CODES, CunaError } from "../core/errors.js";
3
+ /**
4
+ * A deterministic RFC 4122 version-5-shaped identifier for `domain` and `value`.
5
+ *
6
+ * Two call sites now need the same primitive — the workspace binding's
7
+ * `projectId`/`localInstanceId` and the machine-create request identity — so it
8
+ * is defined once. Two private copies of one derivation is the shape that lets
9
+ * one copy be "improved" and silently start minting different identifiers for
10
+ * records already written to a user's disk.
11
+ */
12
+ export function stableUuid(domain, value) {
13
+ const bytes = createHash("sha256").update(`${domain}\0${value}`, "utf8").digest().subarray(0, 16);
14
+ bytes[6] = (bytes[6] & 0x0f) | 0x50;
15
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
16
+ const hex = bytes.toString("hex");
17
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
18
+ }
19
+ function invalidComponent(component) {
20
+ return new CunaError({
21
+ code: "cuna.journey.machine_create_identity_unavailable",
22
+ message: "Cuna cannot derive a durable identity for this machine-create request.",
23
+ exitCode: EXIT_CODES.policy,
24
+ hint: "Report this with `cuna version --json`; the journey refuses to create a machine it could not later find.",
25
+ details: { component },
26
+ });
27
+ }
28
+ function component(value, name) {
29
+ // NUL is the field separator below. A value carrying one would let two
30
+ // different inputs serialize to the same string, which is the one way a
31
+ // derived identity can collide across genuinely different creates.
32
+ if (typeof value !== "string" || value.length === 0 || value.includes("\0")) {
33
+ throw invalidComponent(name);
34
+ }
35
+ return value;
36
+ }
37
+ /** The selection, serialized so that no two distinct selections share a string. */
38
+ function selectionComponent(machine) {
39
+ if (machine === null || typeof machine !== "object")
40
+ throw invalidComponent("machine_selection");
41
+ if (machine.kind === "exact-name")
42
+ return `exact-name${component(machine.name, "machine_selection")}`;
43
+ if (machine.kind === "new" || machine.kind === "automatic")
44
+ return machine.kind;
45
+ throw invalidComponent("machine_selection");
46
+ }
47
+ /**
48
+ * Derive the durable identity of one machine-create request from the intent
49
+ * that asked for it.
50
+ *
51
+ * WHY THIS IS NOT `randomUUID()`. The identity below is the key
52
+ * `reconcileMachineCreate` looks the create up by. Minted from randomness it is
53
+ * lost with the process that minted it: a CLI interrupted between the provider
54
+ * accepting the create and the CLI recording it comes back with a different id,
55
+ * cannot find its own attempt, and creates a SECOND machine while the first
56
+ * bills forever with nothing able to name it. Derived from the intent, the
57
+ * re-run of an interrupted command re-derives the same id and reconciles.
58
+ * `journey/workspace-effects.ts` already derives the workspace binding's
59
+ * identities this way and for this reason; this is that discipline, not a
60
+ * second mechanism.
61
+ *
62
+ * EVERY INPUT IS NECESSARY:
63
+ *
64
+ * `userId` — two principals on one host, in one directory, running one
65
+ * command must not derive one create identity. The id is a client-chosen
66
+ * key into a producer-side table; scoping it to the principal makes a
67
+ * cross-principal collision impossible under any producer keying, including
68
+ * keyings this repository cannot read.
69
+ *
70
+ * `workspaceId` — one principal may hold more than one workspace and a
71
+ * machine belongs to exactly one. A create in workspace B must never
72
+ * reconcile onto a machine created in workspace A.
73
+ *
74
+ * `canonicalLocalRoot` — two projects are two machines. This is the same
75
+ * canonical root `workspace-effects.ts` keys the binding on, taken from the
76
+ * same authority rather than recomputed here, so the create identity and
77
+ * the binding identity can never disagree about which project this is. A
78
+ * lexical path would disagree the moment the user retried through a
79
+ * symlink, a different case, or a relative spelling.
80
+ *
81
+ * `agent` — `cuna claude` and `cuna codex` send different create bodies and
82
+ * different machine names. Sharing an identity would reconcile the second
83
+ * command onto a machine running the other agent.
84
+ *
85
+ * `machine` — `--new` is a deliberately different request from the default
86
+ * reconciling one, and the full selection is serialized rather than only
87
+ * its kind so that a later change letting `--machine NAME` reach creation
88
+ * cannot silently alias two names onto one identity.
89
+ *
90
+ * DELIBERATELY EXCLUDED: `syncMode`, `newSession`, `authMode` and
91
+ * `credentialBindingId` describe the AgentSession and the file transfer, not
92
+ * the machine. Admitting them would split one machine into several for
93
+ * invocations that are asking for the same machine.
94
+ *
95
+ * THE COST, stated because it is real. A derived identity is durable in both
96
+ * directions: once a create has settled, that identity keeps resolving to its
97
+ * outcome. If the machine is later deleted AND the local binding removed, the
98
+ * same invocation re-derives a spent identity and cannot create a replacement;
99
+ * `--new` derives a different one and is the way out. That is the price of
100
+ * being able to find an orphan at all, and it is bounded, whereas an orphan
101
+ * that nothing can name is not.
102
+ */
103
+ export function deriveMachineCreateIdentity(input) {
104
+ const serialized = [
105
+ component(input.userId, "user_id"),
106
+ component(input.workspaceId, "workspace_id"),
107
+ component(input.canonicalLocalRoot, "canonical_local_root"),
108
+ component(input.agent, "agent"),
109
+ selectionComponent(input.machine),
110
+ ].join("\0");
111
+ const intentDigest = createHash("sha256").update(serialized, "utf8").digest("hex");
112
+ return Object.freeze({
113
+ requestId: stableUuid("cuna.machine-create-request.v1", intentDigest),
114
+ // The producer accepts both a create-request identity and a transport
115
+ // idempotency key. Deriving only the first would leave a cross-process
116
+ // replay carrying a fresh key, which is a duplicate create under any
117
+ // producer that deduplicates on the key alone. Both are derived, so the
118
+ // replay is identical in every dimension the request carries.
119
+ idempotencyKey: `cuna-machine-create-${intentDigest}`,
120
+ intentDigest,
121
+ });
122
+ }
123
+ //# sourceMappingURL=derived-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derived-identity.js","sourceRoot":"","sources":["../../src/journey/derived-identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG1D;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,KAAa;IACtD,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,KAAK,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAClG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACrC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACrC,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClC,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;AAC7G,CAAC;AAyBD,SAAS,gBAAgB,CAAC,SAAiB;IACzC,OAAO,IAAI,SAAS,CAAC;QACnB,IAAI,EAAE,kDAAkD;QACxD,OAAO,EAAE,wEAAwE;QACjF,QAAQ,EAAE,UAAU,CAAC,MAAM;QAC3B,IAAI,EAAE,0GAA0G;QAChH,OAAO,EAAE,EAAE,SAAS,EAAE;KACvB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,KAAa,EAAE,IAAY;IAC5C,uEAAuE;IACvE,wEAAwE;IACxE,mEAAmE;IACnE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5E,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,mFAAmF;AACnF,SAAS,kBAAkB,CAAC,OAAgC;IAC1D,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,MAAM,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;IACjG,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,cAAc,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,mBAAmB,CAAC,EAAE,CAAC;IACvG,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC;IAChF,MAAM,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAAiC;IAC3E,MAAM,UAAU,GAAG;QACjB,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC;QAClC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,cAAc,CAAC;QAC5C,SAAS,CAAC,KAAK,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;QAC3D,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;QAC/B,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC;KAClC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnF,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,SAAS,EAAE,UAAU,CAAC,gCAAgC,EAAE,YAAY,CAAC;QACrE,sEAAsE;QACtE,uEAAuE;QACvE,qEAAqE;QACrE,wEAAwE;QACxE,8DAA8D;QAC9D,cAAc,EAAE,uBAAuB,YAAY,EAAE;QACrD,YAAY;KACb,CAAC,CAAC;AACL,CAAC"}