@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,240 @@
1
+ import { randomBytes } from "node:crypto";
2
+ import { constants as fileConstants } from "node:fs";
3
+ import { chmod, lstat, mkdir, open, rename, unlink } from "node:fs/promises";
4
+ import { homedir } from "node:os";
5
+ import { dirname, posix, win32 } from "node:path";
6
+ import { EXIT_CODES, CunaError } from "../core/errors.js";
7
+ export function resolvePlatformKind(platform) {
8
+ if (platform === "win32")
9
+ return "windows";
10
+ if (platform === "darwin")
11
+ return "macos";
12
+ if (platform === "linux")
13
+ return "linux";
14
+ throw new CunaError({
15
+ code: "cuna.platform.unsupported",
16
+ hint: "Run `cuna doctor` to see which runtime features this platform provides.",
17
+ message: `The ${platform} operating system is not supported.`,
18
+ exitCode: EXIT_CODES.unsupported,
19
+ details: { platform },
20
+ });
21
+ }
22
+ export function resolvePlatformPaths(input) {
23
+ const kind = resolvePlatformKind(input.platform);
24
+ if (kind === "windows") {
25
+ const appData = input.env.APPDATA ?? win32.join(input.homeDirectory, "AppData", "Roaming");
26
+ const localAppData = input.env.LOCALAPPDATA ?? win32.join(input.homeDirectory, "AppData", "Local");
27
+ return Object.freeze({
28
+ configDirectory: win32.join(appData, "Cuna"),
29
+ stateDirectory: win32.join(localAppData, "Cuna", "State"),
30
+ runtimeDirectory: win32.join(localAppData, "Cuna", "Runtime"),
31
+ });
32
+ }
33
+ if (kind === "macos") {
34
+ return Object.freeze({
35
+ configDirectory: posix.join(input.homeDirectory, "Library", "Application Support", "Cuna"),
36
+ stateDirectory: posix.join(input.homeDirectory, "Library", "Application Support", "Cuna", "State"),
37
+ runtimeDirectory: posix.join(input.env.TMPDIR ?? "/tmp", `cuna-${input.userId ?? "user"}`),
38
+ });
39
+ }
40
+ const configRoot = input.env.XDG_CONFIG_HOME ?? posix.join(input.homeDirectory, ".config");
41
+ const stateRoot = input.env.XDG_STATE_HOME ?? posix.join(input.homeDirectory, ".local", "state");
42
+ const runtimeRoot = input.env.XDG_RUNTIME_DIR ?? posix.join(input.homeDirectory, ".local", "run");
43
+ return Object.freeze({
44
+ configDirectory: posix.join(configRoot, "cuna"),
45
+ stateDirectory: posix.join(stateRoot, "cuna"),
46
+ runtimeDirectory: posix.join(runtimeRoot, "cuna"),
47
+ });
48
+ }
49
+ async function readSafeConfig(kind, expectedUserId, path, maximumBytes) {
50
+ let handle;
51
+ try {
52
+ handle = await open(path, fileConstants.O_RDONLY | fileConstants.O_NOFOLLOW);
53
+ }
54
+ catch (error) {
55
+ if (error.code === "ENOENT")
56
+ return Object.freeze({ exists: false });
57
+ throw configFileError("unreadable", error);
58
+ }
59
+ try {
60
+ const metadata = await handle.stat();
61
+ if (!metadata.isFile())
62
+ throw configFileError("unsafe_type");
63
+ if (metadata.size > maximumBytes)
64
+ throw configFileError("oversized");
65
+ if (kind !== "windows") {
66
+ if (expectedUserId !== undefined && metadata.uid !== expectedUserId) {
67
+ throw configFileError("wrong_owner");
68
+ }
69
+ if ((metadata.mode & 0o022) !== 0)
70
+ throw configFileError("unsafe_permissions");
71
+ }
72
+ const text = await handle.readFile({ encoding: "utf8" });
73
+ if (Buffer.byteLength(text, "utf8") > maximumBytes)
74
+ throw configFileError("oversized");
75
+ return Object.freeze({ exists: true, text });
76
+ }
77
+ catch (error) {
78
+ if (error instanceof CunaError)
79
+ throw error;
80
+ throw configFileError("unreadable", error);
81
+ }
82
+ finally {
83
+ await handle.close();
84
+ }
85
+ }
86
+ /**
87
+ * The predicates `readSafeConfig` enforces, applied to a file that is about to
88
+ * be replaced rather than read. Written once so the two sides cannot drift:
89
+ * a file the CLI would refuse to read must never be a file it silently
90
+ * overwrites. Windows is excluded from the ownership and mode checks here for
91
+ * the same reason it is excluded there — `st_uid` and the POSIX mode bits carry
92
+ * no ACL meaning on that platform, and the encrypted session store owns the
93
+ * only ACL authority in this codebase.
94
+ */
95
+ async function assertReplaceableConfigFile(kind, expectedUserId, path) {
96
+ let metadata;
97
+ try {
98
+ metadata = await lstat(path);
99
+ }
100
+ catch (error) {
101
+ if (error.code === "ENOENT")
102
+ return;
103
+ throw configFileError("unwritable", error);
104
+ }
105
+ if (metadata.isSymbolicLink() || !metadata.isFile())
106
+ throw configFileError("unsafe_type");
107
+ if (kind !== "windows") {
108
+ if (expectedUserId !== undefined && metadata.uid !== expectedUserId)
109
+ throw configFileError("wrong_owner");
110
+ if ((metadata.mode & 0o022) !== 0)
111
+ throw configFileError("unsafe_permissions");
112
+ }
113
+ }
114
+ async function writeSafeConfig(kind, expectedUserId, path, text, maximumBytes) {
115
+ if (Buffer.byteLength(text, "utf8") > maximumBytes)
116
+ throw configFileError("oversized");
117
+ const directory = dirname(path);
118
+ try {
119
+ await mkdir(directory, { recursive: true, mode: 0o700 });
120
+ }
121
+ catch (error) {
122
+ throw configFileError("unwritable", error);
123
+ }
124
+ await assertReplaceableConfigFile(kind, expectedUserId, path);
125
+ // A sibling in the same directory, so the rename is a same-filesystem atomic
126
+ // replacement rather than a copy. `O_EXCL` means this process never writes
127
+ // through a name another process or a symlink already claimed.
128
+ const temporary = `${path}.${process.pid}.${randomBytes(8).toString("hex")}.tmp`;
129
+ let handle;
130
+ try {
131
+ handle = await open(temporary, fileConstants.O_WRONLY | fileConstants.O_CREAT | fileConstants.O_EXCL, 0o600);
132
+ await handle.writeFile(text, { encoding: "utf8" });
133
+ await handle.sync();
134
+ await handle.close();
135
+ handle = undefined;
136
+ await chmod(temporary, 0o600);
137
+ await rename(temporary, path);
138
+ await chmod(path, 0o600);
139
+ }
140
+ catch (error) {
141
+ try {
142
+ await handle?.close();
143
+ }
144
+ catch { /* the replacement already failed */ }
145
+ try {
146
+ await unlink(temporary);
147
+ }
148
+ catch { /* the temporary may never have been created */ }
149
+ if (error instanceof CunaError)
150
+ throw error;
151
+ throw configFileError("unwritable", error);
152
+ }
153
+ }
154
+ /**
155
+ * The exclusive-create half of the pair above.
156
+ *
157
+ * Deliberately NOT built on `writeSafeConfig`: there is no sequence of replace
158
+ * plus check that is atomic, and adding a pre-read here would reintroduce the
159
+ * exact race this exists to close. The single `open` is the whole mechanism.
160
+ *
161
+ * `assertReplaceableConfigFile` is not called either, and its absence is the
162
+ * point — it returns quietly when the path does not exist, which is the only
163
+ * case that reaches the `open` at all, and it would otherwise leave a window
164
+ * between its own `lstat` and the create.
165
+ */
166
+ async function createExclusiveConfig(path, text, maximumBytes) {
167
+ if (Buffer.byteLength(text, "utf8") > maximumBytes)
168
+ throw configFileError("oversized");
169
+ try {
170
+ await mkdir(dirname(path), { recursive: true, mode: 0o700 });
171
+ }
172
+ catch (error) {
173
+ throw configFileError("unwritable", error);
174
+ }
175
+ let handle;
176
+ try {
177
+ handle = await open(path, fileConstants.O_WRONLY | fileConstants.O_CREAT | fileConstants.O_EXCL | fileConstants.O_NOFOLLOW, 0o600);
178
+ }
179
+ catch (error) {
180
+ // The name was taken between this caller deciding to take it and trying to.
181
+ // That is the answer, not a failure.
182
+ if (error.code === "EEXIST")
183
+ return false;
184
+ throw configFileError("unwritable", error);
185
+ }
186
+ try {
187
+ await handle.writeFile(text, { encoding: "utf8" });
188
+ await handle.sync();
189
+ await handle.close();
190
+ handle = undefined;
191
+ await chmod(path, 0o600);
192
+ return true;
193
+ }
194
+ catch (error) {
195
+ try {
196
+ await handle?.close();
197
+ }
198
+ catch { /* the create already failed */ }
199
+ // A half-written slot would block this Machine forever with bytes nobody
200
+ // can read, so the failed create takes its own file with it.
201
+ try {
202
+ await unlink(path);
203
+ }
204
+ catch { /* it may never have been created */ }
205
+ throw configFileError("unwritable", error);
206
+ }
207
+ }
208
+ function configFileError(reason, cause) {
209
+ return new CunaError({
210
+ code: "cuna.config.unsafe_file",
211
+ message: "The Cuna configuration file is unavailable or unsafe.",
212
+ exitCode: EXIT_CODES.policy,
213
+ hint: "Fix the user-owned configuration file permissions or select a safe file explicitly.",
214
+ details: { reason },
215
+ ...(cause === undefined ? {} : { cause }),
216
+ });
217
+ }
218
+ export function createPlatformAdapter(input) {
219
+ const environment = {
220
+ platform: input?.platform ?? process.platform,
221
+ env: input?.env ?? process.env,
222
+ homeDirectory: input?.homeDirectory ?? homedir(),
223
+ ...(input?.userId === undefined
224
+ ? typeof process.getuid === "function"
225
+ ? { userId: process.getuid() }
226
+ : {}
227
+ : { userId: input.userId }),
228
+ };
229
+ const kind = resolvePlatformKind(environment.platform);
230
+ const paths = resolvePlatformPaths(environment);
231
+ const adapter = {
232
+ kind,
233
+ paths,
234
+ readSafeConfig: (path, maximumBytes) => readSafeConfig(kind, environment.userId, path, maximumBytes),
235
+ writeSafeConfig: (path, text, maximumBytes) => writeSafeConfig(kind, environment.userId, path, text, maximumBytes),
236
+ createExclusiveConfig: (path, text, maximumBytes) => createExclusiveConfig(path, text, maximumBytes),
237
+ };
238
+ return Object.freeze(adapter);
239
+ }
240
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/platform/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAElD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAiE1D,MAAM,UAAU,mBAAmB,CAAC,QAAyB;IAC3D,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAC1C,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IACzC,MAAM,IAAI,SAAS,CAAC;QAClB,IAAI,EAAE,2BAA2B;QACjC,IAAI,EAAE,yEAAyE;QAC/E,OAAO,EAAE,OAAO,QAAQ,qCAAqC;QAC7D,QAAQ,EAAE,UAAU,CAAC,WAAW;QAChC,OAAO,EAAE,EAAE,QAAQ,EAAE;KACtB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAA0B;IAC7D,MAAM,IAAI,GAAG,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAC3F,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACnG,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;YAC5C,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC;YACzD,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,CAAC;YAC1F,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,EAAE,OAAO,CAAC;YAClG,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,EAAE,QAAQ,KAAK,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;SAC3F,CAAC,CAAC;IACL,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAC3F,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,cAAc,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjG,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAClG,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC;QAC/C,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC;QAC7C,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC;KAClD,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,IAAkB,EAClB,cAAkC,EAClC,IAAY,EACZ,YAAoB;IAEpB,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAC/E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAChG,MAAM,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAAE,MAAM,eAAe,CAAC,aAAa,CAAC,CAAC;QAC7D,IAAI,QAAQ,CAAC,IAAI,GAAG,YAAY;YAAE,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;QACrE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,cAAc,KAAK,SAAS,IAAI,QAAQ,CAAC,GAAG,KAAK,cAAc,EAAE,CAAC;gBACpE,MAAM,eAAe,CAAC,aAAa,CAAC,CAAC;YACvC,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;gBAAE,MAAM,eAAe,CAAC,oBAAoB,CAAC,CAAC;QACjF,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,YAAY;YAAE,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;QACvF,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,SAAS;YAAE,MAAM,KAAK,CAAC;QAC5C,MAAM,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,2BAA2B,CACxC,IAAkB,EAClB,cAAkC,EAClC,IAAY;IAEZ,IAAI,QAAQ,CAAC;IACb,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO;QAC/D,MAAM,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;QAAE,MAAM,eAAe,CAAC,aAAa,CAAC,CAAC;IAC1F,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,IAAI,cAAc,KAAK,SAAS,IAAI,QAAQ,CAAC,GAAG,KAAK,cAAc;YAAE,MAAM,eAAe,CAAC,aAAa,CAAC,CAAC;QAC1G,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;YAAE,MAAM,eAAe,CAAC,oBAAoB,CAAC,CAAC;IACjF,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,IAAkB,EAClB,cAAkC,EAClC,IAAY,EACZ,IAAY,EACZ,YAAoB;IAEpB,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,YAAY;QAAE,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;IACvF,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,2BAA2B,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;IAC9D,6EAA6E;IAC7E,2EAA2E;IAC3E,+DAA+D;IAC/D,MAAM,SAAS,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;IACjF,IAAI,MAAoD,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,QAAQ,GAAG,aAAa,CAAC,OAAO,GAAG,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC7G,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACnD,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,GAAG,SAAS,CAAC;QACnB,MAAM,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC9B,MAAM,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC9B,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC;YAAC,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,oCAAoC,CAAC,CAAC;QAC7E,IAAI,CAAC;YAAC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,+CAA+C,CAAC,CAAC;QAC1F,IAAI,KAAK,YAAY,SAAS;YAAE,MAAM,KAAK,CAAC;QAC5C,MAAM,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,qBAAqB,CAClC,IAAY,EACZ,IAAY,EACZ,YAAoB;IAEpB,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,YAAY;QAAE,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;IACvF,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,MAAoD,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CACjB,IAAI,EACJ,aAAa,CAAC,QAAQ,GAAG,aAAa,CAAC,OAAO,GAAG,aAAa,CAAC,MAAM,GAAG,aAAa,CAAC,UAAU,EAChG,KAAK,CACN,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,4EAA4E;QAC5E,qCAAqC;QACrC,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACrE,MAAM,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACnD,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,GAAG,SAAS,CAAC;QACnB,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC;YAAC,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,+BAA+B,CAAC,CAAC;QACxE,yEAAyE;QACzE,6DAA6D;QAC7D,IAAI,CAAC;YAAC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,oCAAoC,CAAC,CAAC;QAC1E,MAAM,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,MAAc,EAAE,KAAe;IACtD,OAAO,IAAI,SAAS,CAAC;QACnB,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,uDAAuD;QAChE,QAAQ,EAAE,UAAU,CAAC,MAAM;QAC3B,IAAI,EAAE,qFAAqF;QAC3F,OAAO,EAAE,EAAE,MAAM,EAAE;QACnB,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;KAC1C,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAoC;IACxE,MAAM,WAAW,GAAwB;QACvC,QAAQ,EAAE,KAAK,EAAE,QAAQ,IAAI,OAAO,CAAC,QAAQ;QAC7C,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG;QAC9B,aAAa,EAAE,KAAK,EAAE,aAAa,IAAI,OAAO,EAAE;QAChD,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS;YAC7B,CAAC,CAAC,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU;gBACpC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE;gBAC9B,CAAC,CAAC,EAAE;YACN,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;KAC9B,CAAC;IACF,MAAM,IAAI,GAAG,mBAAmB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,OAAO,GAAoB;QAC/B,IAAI;QACJ,KAAK;QACL,cAAc,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,CACrC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC;QAC9D,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,CAC5C,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC;QACrE,qBAAqB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,CAClD,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC;KAClD,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface RuntimeSupport {
2
+ readonly nodeRuntime: boolean;
3
+ readonly platform: boolean;
4
+ readonly architecture: boolean;
5
+ }
6
+ export declare function evaluateRuntimeSupport(input: {
7
+ readonly nodeVersion: string;
8
+ readonly platform: NodeJS.Platform;
9
+ readonly architecture: NodeJS.Architecture;
10
+ }): RuntimeSupport;
11
+ export declare function isSupportedNodeVersion(version: string): boolean;
12
+ //# sourceMappingURL=support.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"support.d.ts","sourceRoot":"","sources":["../../src/platform/support.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAKD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC;CAC5C,GAAG,cAAc,CAMjB;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAU/D"}
@@ -0,0 +1,25 @@
1
+ const SUPPORTED_PLATFORMS = new Set(["win32", "darwin", "linux"]);
2
+ const SUPPORTED_ARCHITECTURES = new Set(["x64", "arm64"]);
3
+ export function evaluateRuntimeSupport(input) {
4
+ return Object.freeze({
5
+ nodeRuntime: isSupportedNodeVersion(input.nodeVersion),
6
+ platform: SUPPORTED_PLATFORMS.has(input.platform),
7
+ architecture: SUPPORTED_ARCHITECTURES.has(input.architecture),
8
+ });
9
+ }
10
+ export function isSupportedNodeVersion(version) {
11
+ const match = /^(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/u.exec(version);
12
+ if (match === null)
13
+ return false;
14
+ const major = Number(match[1]);
15
+ const minor = Number(match[2]);
16
+ const patch = Number(match[3]);
17
+ if (![major, minor, patch].every(Number.isSafeInteger))
18
+ return false;
19
+ if (major === 22)
20
+ return minor > 17 || (minor === 17 && patch >= 1);
21
+ if (major === 24)
22
+ return minor > 4 || (minor === 4 && patch >= 1);
23
+ return false;
24
+ }
25
+ //# sourceMappingURL=support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"support.js","sourceRoot":"","sources":["../../src/platform/support.ts"],"names":[],"mappings":"AAMA,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAkB,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AACnF,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AAE/E,MAAM,UAAU,sBAAsB,CAAC,KAItC;IACC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC;QACtD,QAAQ,EAAE,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QACjD,YAAY,EAAE,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC;KAC9D,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,MAAM,KAAK,GAAG,mCAAmC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChE,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACjC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC;QAAE,OAAO,KAAK,CAAC;IACrE,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,KAAK,GAAG,EAAE,IAAI,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;IACpE,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;IAClE,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,45 @@
1
+ export declare const LOCAL_PTY_PROTOCOL: "cuna.local-pty.v1";
2
+ export type PtyEvidenceStatus = "verified" | "unverified" | "unavailable";
3
+ export interface PtyCapabilities {
4
+ readonly rawInput: boolean;
5
+ readonly resize: boolean;
6
+ readonly signals: boolean;
7
+ readonly utf8: boolean;
8
+ }
9
+ export interface PtyAdapterEvidence {
10
+ readonly status: PtyEvidenceStatus;
11
+ readonly adapterId: string;
12
+ readonly protocol: typeof LOCAL_PTY_PROTOCOL;
13
+ readonly platform: NodeJS.Platform;
14
+ readonly observedAt: number;
15
+ readonly expiresAt: number;
16
+ readonly artifactDigest: string;
17
+ readonly capabilities: PtyCapabilities;
18
+ readonly reason?: string;
19
+ }
20
+ export interface PtySpawnRequest {
21
+ readonly executable: string;
22
+ readonly args: readonly string[];
23
+ readonly cwd?: string;
24
+ readonly environment?: Readonly<Record<string, string>>;
25
+ readonly columns: number;
26
+ readonly rows: number;
27
+ }
28
+ export interface PtyExit {
29
+ readonly exitCode: number | null;
30
+ readonly signal: string | null;
31
+ }
32
+ export interface PtyHandle {
33
+ readonly pid: number;
34
+ readonly output: AsyncIterable<string>;
35
+ write(data: string): void;
36
+ resize(columns: number, rows: number): void;
37
+ signal(signal: "interrupt" | "terminate"): void;
38
+ wait(): Promise<PtyExit>;
39
+ close(): void;
40
+ }
41
+ export interface PtyAdapter {
42
+ probe(signal?: AbortSignal): Promise<PtyAdapterEvidence>;
43
+ spawn(request: PtySpawnRequest): PtyHandle;
44
+ }
45
+ //# sourceMappingURL=contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/pty/contracts.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,EAAG,mBAA4B,CAAC;AAE/D,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,YAAY,GAAG,aAAa,CAAC;AAE1E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,kBAAkB,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACxD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC;IAChD,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACzB,KAAK,IAAI,IAAI,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACzD,KAAK,CAAC,OAAO,EAAE,eAAe,GAAG,SAAS,CAAC;CAC5C"}
@@ -0,0 +1,2 @@
1
+ export const LOCAL_PTY_PROTOCOL = "cuna.local-pty.v1";
2
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/pty/contracts.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAA4B,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { type PtyAdapter, type PtyAdapterEvidence } from "./contracts.js";
2
+ export interface VerifiedPtyAdapter {
3
+ readonly adapter: PtyAdapter;
4
+ readonly evidence: PtyAdapterEvidence & {
5
+ readonly status: "verified";
6
+ };
7
+ }
8
+ export declare function requireVerifiedPtyAdapter(input: {
9
+ readonly adapter: PtyAdapter | undefined;
10
+ readonly platform?: NodeJS.Platform;
11
+ readonly now?: number;
12
+ readonly signal?: AbortSignal;
13
+ }): Promise<VerifiedPtyAdapter>;
14
+ //# sourceMappingURL=evidence-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence-gate.d.ts","sourceRoot":"","sources":["../../src/pty/evidence-gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,UAAU,EAAE,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAG9F,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,GAAG;QAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;KAAE,CAAC;CACzE;AAED,wBAAsB,yBAAyB,CAAC,KAAK,EAAE;IACrD,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IACpC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA8B9B"}
@@ -0,0 +1,35 @@
1
+ import { LOCAL_PTY_PROTOCOL } from "./contracts.js";
2
+ import { runtimeFailure } from "../runtime/errors.js";
3
+ export async function requireVerifiedPtyAdapter(input) {
4
+ if (input.adapter === undefined) {
5
+ throw runtimeFailure("pty_unavailable", "No PTY adapter is installed for this runtime.");
6
+ }
7
+ const evidence = await input.adapter.probe(input.signal);
8
+ const now = input.now ?? Date.now();
9
+ const platform = input.platform ?? process.platform;
10
+ if (evidence.status !== "verified" ||
11
+ evidence.protocol !== LOCAL_PTY_PROTOCOL ||
12
+ evidence.platform !== platform ||
13
+ !Number.isFinite(evidence.observedAt) ||
14
+ !Number.isFinite(evidence.expiresAt) ||
15
+ evidence.expiresAt <= now ||
16
+ evidence.expiresAt < evidence.observedAt ||
17
+ !/^sha256:[a-f0-9]{64}$/u.test(evidence.artifactDigest) ||
18
+ !evidence.capabilities.rawInput ||
19
+ !evidence.capabilities.resize ||
20
+ !evidence.capabilities.signals ||
21
+ !evidence.capabilities.utf8) {
22
+ throw runtimeFailure("pty_evidence_invalid", "The installed PTY adapter lacks current conformance evidence.", {
23
+ safeDetails: {
24
+ adapter_id: boundedIdentifier(evidence.adapterId),
25
+ evidence_status: evidence.status,
26
+ platform: evidence.platform,
27
+ },
28
+ });
29
+ }
30
+ return Object.freeze({ adapter: input.adapter, evidence: evidence });
31
+ }
32
+ function boundedIdentifier(value) {
33
+ return /^[A-Za-z0-9._-]{1,64}$/u.test(value) ? value : "invalid_adapter";
34
+ }
35
+ //# sourceMappingURL=evidence-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence-gate.js","sourceRoot":"","sources":["../../src/pty/evidence-gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAA4C,MAAM,gBAAgB,CAAC;AAC9F,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAOtD,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,KAK/C;IACC,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,cAAc,CAAC,iBAAiB,EAAE,+CAA+C,CAAC,CAAC;IAC3F,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IACpD,IACE,QAAQ,CAAC,MAAM,KAAK,UAAU;QAC9B,QAAQ,CAAC,QAAQ,KAAK,kBAAkB;QACxC,QAAQ,CAAC,QAAQ,KAAK,QAAQ;QAC9B,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;QACrC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;QACpC,QAAQ,CAAC,SAAS,IAAI,GAAG;QACzB,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,UAAU;QACxC,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;QACvD,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ;QAC/B,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM;QAC7B,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO;QAC9B,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAC3B,CAAC;QACD,MAAM,cAAc,CAAC,sBAAsB,EAAE,+DAA+D,EAAE;YAC5G,WAAW,EAAE;gBACX,UAAU,EAAE,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC;gBACjD,eAAe,EAAE,QAAQ,CAAC,MAAM;gBAChC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;aAC5B;SACF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAgE,EAAE,CAAC,CAAC;AAC/H,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,OAAO,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC;AAC3E,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from "./contracts.js";
2
+ export * from "./evidence-gate.js";
3
+ export * from "./node-host-terminal.js";
4
+ export * from "./node-process.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pty/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from "./contracts.js";
2
+ export * from "./evidence-gate.js";
3
+ export * from "./node-host-terminal.js";
4
+ export * from "./node-process.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pty/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { ReadStream, WriteStream } from "node:tty";
2
+ import type { HostTerminalAdapter } from "../terminal/mode.js";
3
+ import type { ForegroundTerminalHost } from "../terminal/foreground.js";
4
+ export declare function createNodeHostTerminalAdapter(input?: {
5
+ readonly stdin?: ReadStream;
6
+ readonly stdout?: WriteStream;
7
+ readonly writeTimeoutMs?: number;
8
+ }): HostTerminalAdapter;
9
+ export declare function createNodeForegroundTerminalHost(input?: {
10
+ readonly stdin?: ReadStream;
11
+ readonly stdout?: WriteStream;
12
+ readonly writeTimeoutMs?: number;
13
+ }): ForegroundTerminalHost;
14
+ //# sourceMappingURL=node-host-terminal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-host-terminal.d.ts","sourceRoot":"","sources":["../../src/pty/node-host-terminal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAExD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAmBxE,wBAAgB,6BAA6B,CAAC,KAAK,GAAE;IACnD,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAC7B,GAAG,mBAAmB,CAiD3B;AAED,wBAAgB,gCAAgC,CAAC,KAAK,GAAE;IACtD,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAC7B,GAAG,sBAAsB,CA6C9B"}
@@ -0,0 +1,173 @@
1
+ import { HostTerminalLease } from "../terminal/mode.js";
2
+ import { runtimeFailure } from "../runtime/errors.js";
3
+ const ENABLE_LOCAL_BRACKETED_PASTE = "\u001b[?2004h";
4
+ // Rich mode renders cells locally: inherited mouse reporting must not steal
5
+ // the host terminal's text selection and clipboard gestures.
6
+ const DISABLE_MOUSE_REPORTING = "\u001b[?1000l\u001b[?1002l\u001b[?1003l\u001b[?1006l";
7
+ const ENTER_ALTERNATE_SCREEN = `\u001b[?1049h${DISABLE_MOUSE_REPORTING}${ENABLE_LOCAL_BRACKETED_PASTE}\u001b[H`;
8
+ const LEAVE_ALTERNATE_SCREEN = "\u001b[?1049l";
9
+ const RESET_REMOTE_MODES = [
10
+ "\u001b[?1000l\u001b[?1002l\u001b[?1003l\u001b[?1004l\u001b[?1006l",
11
+ "\u001b[?2004l\u001b[?2026l",
12
+ "\u001b[?1l\u001b[?6l\u001b[4l\u001b[20l\u001b>",
13
+ "\u001b[?1049l\u001b[?1047l\u001b[?47l",
14
+ "\u001b[r\u001b[0m\u001b[?25h",
15
+ ].join("");
16
+ const HOST_WRITE_TIMEOUT_MS = 5_000;
17
+ const ACTIVE_HOST_INPUTS = new WeakSet();
18
+ export function createNodeHostTerminalAdapter(input = {}) {
19
+ const stdin = input.stdin ?? process.stdin;
20
+ const stdout = input.stdout ?? process.stdout;
21
+ const writeTimeoutMs = input.writeTimeoutMs ?? HOST_WRITE_TIMEOUT_MS;
22
+ if (!Number.isSafeInteger(writeTimeoutMs) || writeTimeoutMs < 1 || writeTimeoutMs > 60_000) {
23
+ throw new RangeError("Host terminal write timeout must be between 1 and 60000 milliseconds.");
24
+ }
25
+ let shouldPauseAfterRawMode = false;
26
+ let ownsRawMode = false;
27
+ return Object.freeze({
28
+ enterRawMode() {
29
+ assertInteractive(stdin, stdout);
30
+ if (ACTIVE_HOST_INPUTS.has(stdin)) {
31
+ throw runtimeFailure("session_conflict", "This host terminal is already owned by another foreground session.");
32
+ }
33
+ ACTIVE_HOST_INPUTS.add(stdin);
34
+ ownsRawMode = true;
35
+ // `readableFlowing === null` is Node's initial no-consumer state. Calling
36
+ // resume() changes it to `true` and keeps the process alive, so restoration
37
+ // must pause both the initial and explicitly-paused states.
38
+ shouldPauseAfterRawMode = stdin.readableFlowing !== true;
39
+ stdin.setRawMode(true);
40
+ stdin.resume();
41
+ },
42
+ async enterAlternateScreen() {
43
+ assertInteractive(stdin, stdout);
44
+ await writeWithBackpressure(stdout, new TextEncoder().encode(ENTER_ALTERNATE_SCREEN), writeTimeoutMs);
45
+ },
46
+ async disableRemoteModes() {
47
+ if (stdout.isTTY)
48
+ await writeWithBackpressure(stdout, new TextEncoder().encode(RESET_REMOTE_MODES), writeTimeoutMs);
49
+ },
50
+ async leaveAlternateScreen() {
51
+ if (stdout.isTTY)
52
+ await writeWithBackpressure(stdout, new TextEncoder().encode(LEAVE_ALTERNATE_SCREEN), writeTimeoutMs);
53
+ },
54
+ async leaveRawMode() {
55
+ if (!ownsRawMode)
56
+ return;
57
+ if (shouldPauseAfterRawMode) {
58
+ stdin.pause();
59
+ // Node stops the native stdin read on the next tick after pause().
60
+ // Let Node issue that stop before changing Windows console input mode;
61
+ // changing mode during an active read also restarts the native read.
62
+ await new Promise((resolve) => process.nextTick(resolve));
63
+ }
64
+ if (stdin.isTTY && typeof stdin.setRawMode === "function")
65
+ stdin.setRawMode(false);
66
+ shouldPauseAfterRawMode = false;
67
+ ownsRawMode = false;
68
+ ACTIVE_HOST_INPUTS.delete(stdin);
69
+ },
70
+ });
71
+ }
72
+ export function createNodeForegroundTerminalHost(input = {}) {
73
+ const stdin = input.stdin ?? process.stdin;
74
+ const stdout = input.stdout ?? process.stdout;
75
+ const writeTimeoutMs = input.writeTimeoutMs ?? HOST_WRITE_TIMEOUT_MS;
76
+ if (!Number.isSafeInteger(writeTimeoutMs) || writeTimeoutMs < 1 || writeTimeoutMs > 60_000) {
77
+ throw new RangeError("Host terminal write timeout must be between 1 and 60000 milliseconds.");
78
+ }
79
+ return Object.freeze({
80
+ dimensions() {
81
+ assertInteractive(stdin, stdout);
82
+ return Object.freeze({ columns: stdout.columns, rows: stdout.rows });
83
+ },
84
+ async acquire(mode = "rich") {
85
+ const adapter = createNodeHostTerminalAdapter({ stdin, stdout, writeTimeoutMs });
86
+ if (mode === "rich")
87
+ return await HostTerminalLease.acquire(adapter);
88
+ if (mode !== "plain")
89
+ throw new RangeError("Host terminal mode must be rich or plain.");
90
+ return await HostTerminalLease.acquire({
91
+ enterRawMode: () => adapter.enterRawMode(),
92
+ // Passthrough yields the current screen to the remote program. It must
93
+ // not claim alternate-screen ownership or paint trusted chrome.
94
+ enterAlternateScreen: async () => {
95
+ assertInteractive(stdin, stdout);
96
+ await writeWithBackpressure(stdout, new TextEncoder().encode(ENABLE_LOCAL_BRACKETED_PASTE), writeTimeoutMs);
97
+ },
98
+ disableRemoteModes: () => adapter.disableRemoteModes(),
99
+ leaveAlternateScreen: () => undefined,
100
+ leaveRawMode: () => adapter.leaveRawMode(),
101
+ });
102
+ },
103
+ async write(bytes) {
104
+ assertInteractive(stdin, stdout);
105
+ await writeWithBackpressure(stdout, bytes, writeTimeoutMs);
106
+ },
107
+ onInput(listener) {
108
+ const receive = (chunk) => listener(typeof chunk === "string" ? new TextEncoder().encode(chunk) : new Uint8Array(chunk));
109
+ stdin.on("data", receive);
110
+ return () => stdin.removeListener("data", receive);
111
+ },
112
+ onResize(listener) {
113
+ stdout.on("resize", listener);
114
+ return () => stdout.removeListener("resize", listener);
115
+ },
116
+ });
117
+ }
118
+ function assertInteractive(stdin, stdout) {
119
+ if (!stdin.isTTY || !stdout.isTTY || typeof stdin.setRawMode !== "function") {
120
+ throw runtimeFailure("pty_unavailable", "The current streams do not provide an interactive host terminal.");
121
+ }
122
+ }
123
+ async function writeWithBackpressure(stdout, bytes, timeoutMs) {
124
+ await new Promise((resolve, reject) => {
125
+ let callbackComplete = false;
126
+ let drainComplete = false;
127
+ let settled = false;
128
+ const timeout = setTimeout(() => finish(new Error("The host terminal output sink exceeded its bounded deadline.")), timeoutMs);
129
+ timeout.unref();
130
+ const cleanup = () => {
131
+ clearTimeout(timeout);
132
+ stdout.removeListener("error", onError);
133
+ stdout.removeListener("drain", onDrain);
134
+ };
135
+ const finish = (error) => {
136
+ if (settled)
137
+ return;
138
+ if (error === undefined || error === null) {
139
+ if (!callbackComplete || !drainComplete)
140
+ return;
141
+ settled = true;
142
+ cleanup();
143
+ resolve();
144
+ return;
145
+ }
146
+ settled = true;
147
+ cleanup();
148
+ reject(error);
149
+ };
150
+ const onError = (error) => finish(error);
151
+ const onDrain = () => {
152
+ drainComplete = true;
153
+ finish();
154
+ };
155
+ stdout.once("error", onError);
156
+ let accepted;
157
+ try {
158
+ accepted = stdout.write(Buffer.from(bytes), (error) => {
159
+ callbackComplete = true;
160
+ finish(error);
161
+ });
162
+ }
163
+ catch (error) {
164
+ finish(error instanceof Error ? error : new Error("The host terminal output sink failed."));
165
+ return;
166
+ }
167
+ drainComplete = accepted;
168
+ if (!accepted)
169
+ stdout.once("drain", onDrain);
170
+ finish();
171
+ });
172
+ }
173
+ //# sourceMappingURL=node-host-terminal.js.map