@zenalexa/unicli 0.216.3 → 0.217.3

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 (379) hide show
  1. package/AGENTS.md +7 -6
  2. package/README.md +67 -19
  3. package/README.zh-CN.md +44 -16
  4. package/crates/unicli-atspi/Cargo.toml +47 -0
  5. package/crates/unicli-atspi/README.md +6 -0
  6. package/crates/unicli-atspi/src/errors.rs +213 -0
  7. package/crates/unicli-atspi/src/input.rs +1004 -0
  8. package/crates/unicli-atspi/src/invoke.rs +1132 -0
  9. package/crates/unicli-atspi/src/main.rs +130 -0
  10. package/crates/unicli-atspi/src/refs.rs +24 -0
  11. package/crates/unicli-atspi/src/screenshot.rs +756 -0
  12. package/crates/unicli-atspi/src/tree.rs +2319 -0
  13. package/crates/unicli-shared/Cargo.toml +13 -0
  14. package/crates/unicli-shared/src/lib.rs +77 -0
  15. package/crates/unicli-uia/Cargo.toml +29 -0
  16. package/crates/unicli-uia/README.md +6 -0
  17. package/crates/unicli-uia/src/errors.rs +179 -0
  18. package/crates/unicli-uia/src/input.rs +790 -0
  19. package/crates/unicli-uia/src/invoke.rs +977 -0
  20. package/crates/unicli-uia/src/main.rs +130 -0
  21. package/crates/unicli-uia/src/refs.rs +24 -0
  22. package/crates/unicli-uia/src/screenshot.rs +685 -0
  23. package/crates/unicli-uia/src/tree.rs +2135 -0
  24. package/dist/adapters/_electron/desktop-shared.d.ts.map +1 -1
  25. package/dist/adapters/_electron/desktop-shared.js +13 -0
  26. package/dist/adapters/_electron/desktop-shared.js.map +1 -1
  27. package/dist/adapters/_electron/shared.d.ts +1 -0
  28. package/dist/adapters/_electron/shared.d.ts.map +1 -1
  29. package/dist/adapters/_electron/shared.js +49 -2
  30. package/dist/adapters/_electron/shared.js.map +1 -1
  31. package/dist/adapters/macos/actions.d.ts +9 -0
  32. package/dist/adapters/macos/actions.d.ts.map +1 -0
  33. package/dist/adapters/macos/actions.js +55 -0
  34. package/dist/adapters/macos/actions.js.map +1 -0
  35. package/dist/browser/bridge.d.ts +5 -1
  36. package/dist/browser/bridge.d.ts.map +1 -1
  37. package/dist/browser/bridge.js +86 -23
  38. package/dist/browser/bridge.js.map +1 -1
  39. package/dist/browser/cdp-client.d.ts +2 -0
  40. package/dist/browser/cdp-client.d.ts.map +1 -1
  41. package/dist/browser/cdp-client.js +7 -0
  42. package/dist/browser/cdp-client.js.map +1 -1
  43. package/dist/browser/page.d.ts +2 -0
  44. package/dist/browser/page.d.ts.map +1 -1
  45. package/dist/browser/page.js +35 -0
  46. package/dist/browser/page.js.map +1 -1
  47. package/dist/cli.d.ts.map +1 -1
  48. package/dist/cli.js +17 -2
  49. package/dist/cli.js.map +1 -1
  50. package/dist/commands/approvals.d.ts +3 -0
  51. package/dist/commands/approvals.d.ts.map +1 -0
  52. package/dist/commands/approvals.js +123 -0
  53. package/dist/commands/approvals.js.map +1 -0
  54. package/dist/commands/browser-operator-runtime.d.ts.map +1 -1
  55. package/dist/commands/browser-operator-runtime.js +5 -2
  56. package/dist/commands/browser-operator-runtime.js.map +1 -1
  57. package/dist/commands/browser-operator.d.ts.map +1 -1
  58. package/dist/commands/browser-operator.js +182 -38
  59. package/dist/commands/browser-operator.js.map +1 -1
  60. package/dist/commands/compute.d.ts +3 -0
  61. package/dist/commands/compute.d.ts.map +1 -0
  62. package/dist/commands/compute.js +324 -0
  63. package/dist/commands/compute.js.map +1 -0
  64. package/dist/commands/describe.d.ts.map +1 -1
  65. package/dist/commands/describe.js +20 -1
  66. package/dist/commands/describe.js.map +1 -1
  67. package/dist/commands/dispatch.d.ts +3 -0
  68. package/dist/commands/dispatch.d.ts.map +1 -1
  69. package/dist/commands/dispatch.js +76 -4
  70. package/dist/commands/dispatch.js.map +1 -1
  71. package/dist/commands/doctor-compute.d.ts +38 -0
  72. package/dist/commands/doctor-compute.d.ts.map +1 -0
  73. package/dist/commands/doctor-compute.js +376 -0
  74. package/dist/commands/doctor-compute.js.map +1 -0
  75. package/dist/commands/lint.d.ts.map +1 -1
  76. package/dist/commands/lint.js +69 -1
  77. package/dist/commands/lint.js.map +1 -1
  78. package/dist/commands/mcp.d.ts.map +1 -1
  79. package/dist/commands/mcp.js +4 -0
  80. package/dist/commands/mcp.js.map +1 -1
  81. package/dist/commands/runs.d.ts +3 -0
  82. package/dist/commands/runs.d.ts.map +1 -0
  83. package/dist/commands/runs.js +367 -0
  84. package/dist/commands/runs.js.map +1 -0
  85. package/dist/core/envelope.d.ts +8 -0
  86. package/dist/core/envelope.d.ts.map +1 -1
  87. package/dist/core/envelope.js +1 -0
  88. package/dist/core/envelope.js.map +1 -1
  89. package/dist/core/schema-v2.d.ts +2 -2
  90. package/dist/discovery/aliases.d.ts.map +1 -1
  91. package/dist/discovery/aliases.js +15 -0
  92. package/dist/discovery/aliases.js.map +1 -1
  93. package/dist/discovery/loader.d.ts.map +1 -1
  94. package/dist/discovery/loader.js +11 -0
  95. package/dist/discovery/loader.js.map +1 -1
  96. package/dist/discovery/macos-dynamic.d.ts +58 -0
  97. package/dist/discovery/macos-dynamic.d.ts.map +1 -0
  98. package/dist/discovery/macos-dynamic.js +429 -0
  99. package/dist/discovery/macos-dynamic.js.map +1 -0
  100. package/dist/discovery/search.d.ts.map +1 -1
  101. package/dist/discovery/search.js +152 -3
  102. package/dist/discovery/search.js.map +1 -1
  103. package/dist/electron-apps.d.ts +1 -0
  104. package/dist/electron-apps.d.ts.map +1 -1
  105. package/dist/electron-apps.js +1 -0
  106. package/dist/electron-apps.js.map +1 -1
  107. package/dist/engine/approval-store.d.ts +43 -0
  108. package/dist/engine/approval-store.d.ts.map +1 -0
  109. package/dist/engine/approval-store.js +193 -0
  110. package/dist/engine/approval-store.js.map +1 -0
  111. package/dist/engine/browser/action-evidence.d.ts +30 -0
  112. package/dist/engine/browser/action-evidence.d.ts.map +1 -0
  113. package/dist/engine/browser/action-evidence.js +354 -0
  114. package/dist/engine/browser/action-evidence.js.map +1 -0
  115. package/dist/engine/browser/evidence.d.ts +85 -0
  116. package/dist/engine/browser/evidence.d.ts.map +1 -0
  117. package/dist/engine/browser/evidence.js +373 -0
  118. package/dist/engine/browser/evidence.js.map +1 -0
  119. package/dist/engine/browser/session-lease.d.ts +53 -0
  120. package/dist/engine/browser/session-lease.d.ts.map +1 -0
  121. package/dist/engine/browser/session-lease.js +100 -0
  122. package/dist/engine/browser/session-lease.js.map +1 -0
  123. package/dist/engine/browser/session-lock.d.ts +17 -0
  124. package/dist/engine/browser/session-lock.d.ts.map +1 -0
  125. package/dist/engine/browser/session-lock.js +114 -0
  126. package/dist/engine/browser/session-lock.js.map +1 -0
  127. package/dist/engine/browser/session-runtime.d.ts +10 -0
  128. package/dist/engine/browser/session-runtime.d.ts.map +1 -0
  129. package/dist/engine/browser/session-runtime.js +87 -0
  130. package/dist/engine/browser/session-runtime.js.map +1 -0
  131. package/dist/engine/capability-policy.d.ts +50 -0
  132. package/dist/engine/capability-policy.d.ts.map +1 -0
  133. package/dist/engine/capability-policy.js +305 -0
  134. package/dist/engine/capability-policy.js.map +1 -0
  135. package/dist/engine/executor.d.ts +8 -3
  136. package/dist/engine/executor.d.ts.map +1 -1
  137. package/dist/engine/executor.js +9 -2
  138. package/dist/engine/executor.js.map +1 -1
  139. package/dist/engine/kernel/execute.d.ts +5 -1
  140. package/dist/engine/kernel/execute.d.ts.map +1 -1
  141. package/dist/engine/kernel/execute.js +215 -11
  142. package/dist/engine/kernel/execute.js.map +1 -1
  143. package/dist/engine/kernel/types.d.ts +15 -0
  144. package/dist/engine/kernel/types.d.ts.map +1 -1
  145. package/dist/engine/operation-policy.d.ts +60 -0
  146. package/dist/engine/operation-policy.d.ts.map +1 -0
  147. package/dist/engine/operation-policy.js +364 -0
  148. package/dist/engine/operation-policy.js.map +1 -0
  149. package/dist/engine/permission-rules.d.ts +43 -0
  150. package/dist/engine/permission-rules.d.ts.map +1 -0
  151. package/dist/engine/permission-rules.js +401 -0
  152. package/dist/engine/permission-rules.js.map +1 -0
  153. package/dist/engine/permission-runtime.d.ts +11 -0
  154. package/dist/engine/permission-runtime.d.ts.map +1 -0
  155. package/dist/engine/permission-runtime.js +21 -0
  156. package/dist/engine/permission-runtime.js.map +1 -0
  157. package/dist/engine/repair/remedies.d.ts +4 -0
  158. package/dist/engine/repair/remedies.d.ts.map +1 -0
  159. package/dist/engine/repair/remedies.js +169 -0
  160. package/dist/engine/repair/remedies.js.map +1 -0
  161. package/dist/engine/runtime-resource-guard.d.ts +23 -0
  162. package/dist/engine/runtime-resource-guard.d.ts.map +1 -0
  163. package/dist/engine/runtime-resource-guard.js +85 -0
  164. package/dist/engine/runtime-resource-guard.js.map +1 -0
  165. package/dist/engine/session/args.d.ts +3 -0
  166. package/dist/engine/session/args.d.ts.map +1 -0
  167. package/dist/engine/session/args.js +17 -0
  168. package/dist/engine/session/args.js.map +1 -0
  169. package/dist/engine/session/compare.d.ts +92 -0
  170. package/dist/engine/session/compare.d.ts.map +1 -0
  171. package/dist/engine/session/compare.js +324 -0
  172. package/dist/engine/session/compare.js.map +1 -0
  173. package/dist/engine/session/environment.d.ts +4 -0
  174. package/dist/engine/session/environment.d.ts.map +1 -0
  175. package/dist/engine/session/environment.js +25 -0
  176. package/dist/engine/session/environment.js.map +1 -0
  177. package/dist/engine/session/events.d.ts +24 -0
  178. package/dist/engine/session/events.d.ts.map +1 -0
  179. package/dist/engine/session/events.js +78 -0
  180. package/dist/engine/session/events.js.map +1 -0
  181. package/dist/engine/session/query.d.ts +47 -0
  182. package/dist/engine/session/query.d.ts.map +1 -0
  183. package/dist/engine/session/query.js +299 -0
  184. package/dist/engine/session/query.js.map +1 -0
  185. package/dist/engine/session/replay.d.ts +35 -0
  186. package/dist/engine/session/replay.d.ts.map +1 -0
  187. package/dist/engine/session/replay.js +144 -0
  188. package/dist/engine/session/replay.js.map +1 -0
  189. package/dist/engine/session/run-loop.d.ts +11 -0
  190. package/dist/engine/session/run-loop.d.ts.map +1 -0
  191. package/dist/engine/session/run-loop.js +212 -0
  192. package/dist/engine/session/run-loop.js.map +1 -0
  193. package/dist/engine/session/store.d.ts +26 -0
  194. package/dist/engine/session/store.d.ts.map +1 -0
  195. package/dist/engine/session/store.js +214 -0
  196. package/dist/engine/session/store.js.map +1 -0
  197. package/dist/engine/session/types.d.ts +39 -0
  198. package/dist/engine/session/types.d.ts.map +1 -0
  199. package/dist/engine/session/types.js +2 -0
  200. package/dist/engine/session/types.js.map +1 -0
  201. package/dist/engine/steps/compute.d.ts +41 -0
  202. package/dist/engine/steps/compute.d.ts.map +1 -0
  203. package/dist/engine/steps/compute.js +55 -0
  204. package/dist/engine/steps/compute.js.map +1 -0
  205. package/dist/engine/steps/desktop-ax.d.ts +8 -0
  206. package/dist/engine/steps/desktop-ax.d.ts.map +1 -1
  207. package/dist/engine/steps/desktop-ax.js +16 -0
  208. package/dist/engine/steps/desktop-ax.js.map +1 -1
  209. package/dist/engine/steps/desktop-sidecar.d.ts +49 -0
  210. package/dist/engine/steps/desktop-sidecar.d.ts.map +1 -0
  211. package/dist/engine/steps/desktop-sidecar.js +50 -0
  212. package/dist/engine/steps/desktop-sidecar.js.map +1 -0
  213. package/dist/engine/steps/download.d.ts +1 -1
  214. package/dist/engine/steps/download.d.ts.map +1 -1
  215. package/dist/engine/steps/download.js +24 -2
  216. package/dist/engine/steps/download.js.map +1 -1
  217. package/dist/engine/steps/exec.d.ts +1 -1
  218. package/dist/engine/steps/exec.d.ts.map +1 -1
  219. package/dist/engine/steps/exec.js +23 -7
  220. package/dist/engine/steps/exec.js.map +1 -1
  221. package/dist/engine/steps/fetch-text.d.ts +2 -2
  222. package/dist/engine/steps/fetch-text.d.ts.map +1 -1
  223. package/dist/engine/steps/fetch-text.js +61 -19
  224. package/dist/engine/steps/fetch-text.js.map +1 -1
  225. package/dist/engine/steps/fetch.d.ts +3 -1
  226. package/dist/engine/steps/fetch.d.ts.map +1 -1
  227. package/dist/engine/steps/fetch.js +36 -7
  228. package/dist/engine/steps/fetch.js.map +1 -1
  229. package/dist/engine/steps/index.d.ts +2 -0
  230. package/dist/engine/steps/index.d.ts.map +1 -1
  231. package/dist/engine/steps/index.js +2 -0
  232. package/dist/engine/steps/index.js.map +1 -1
  233. package/dist/engine/steps/navigate.d.ts +1 -1
  234. package/dist/engine/steps/navigate.d.ts.map +1 -1
  235. package/dist/engine/steps/navigate.js +29 -2
  236. package/dist/engine/steps/navigate.js.map +1 -1
  237. package/dist/engine/steps/parse-rss.d.ts.map +1 -1
  238. package/dist/engine/steps/parse-rss.js +9 -4
  239. package/dist/engine/steps/parse-rss.js.map +1 -1
  240. package/dist/engine/template.d.ts.map +1 -1
  241. package/dist/engine/template.js +2 -1
  242. package/dist/engine/template.js.map +1 -1
  243. package/dist/engine/text-normalize.d.ts +6 -0
  244. package/dist/engine/text-normalize.d.ts.map +1 -0
  245. package/dist/engine/text-normalize.js +63 -0
  246. package/dist/engine/text-normalize.js.map +1 -0
  247. package/dist/fast-path.d.ts.map +1 -1
  248. package/dist/fast-path.js +291 -8
  249. package/dist/fast-path.js.map +1 -1
  250. package/dist/main.d.ts +1 -1
  251. package/dist/main.js +1 -1
  252. package/dist/manifest-compact.txt +2 -2
  253. package/dist/manifest-search.json +1 -1
  254. package/dist/manifest.json +4313 -533
  255. package/dist/mcp/dispatch.d.ts +3 -3
  256. package/dist/mcp/dispatch.d.ts.map +1 -1
  257. package/dist/mcp/dispatch.js +6 -5
  258. package/dist/mcp/dispatch.js.map +1 -1
  259. package/dist/mcp/handler.d.ts +2 -2
  260. package/dist/mcp/handler.d.ts.map +1 -1
  261. package/dist/mcp/handler.js +59 -5
  262. package/dist/mcp/handler.js.map +1 -1
  263. package/dist/mcp/profiles/computer-use.d.ts +4 -0
  264. package/dist/mcp/profiles/computer-use.d.ts.map +1 -0
  265. package/dist/mcp/profiles/computer-use.js +305 -0
  266. package/dist/mcp/profiles/computer-use.js.map +1 -0
  267. package/dist/mcp/server.d.ts.map +1 -1
  268. package/dist/mcp/server.js +30 -6
  269. package/dist/mcp/server.js.map +1 -1
  270. package/dist/mcp/tools.d.ts +9 -0
  271. package/dist/mcp/tools.d.ts.map +1 -1
  272. package/dist/mcp/tools.js +20 -0
  273. package/dist/mcp/tools.js.map +1 -1
  274. package/dist/output/envelope.d.ts +6 -0
  275. package/dist/output/envelope.d.ts.map +1 -1
  276. package/dist/output/envelope.js.map +1 -1
  277. package/dist/output/error-map.d.ts.map +1 -1
  278. package/dist/output/error-map.js +25 -0
  279. package/dist/output/error-map.js.map +1 -1
  280. package/dist/protocol/acp-helpers.d.ts +2 -2
  281. package/dist/protocol/acp-helpers.d.ts.map +1 -1
  282. package/dist/protocol/acp-helpers.js +5 -4
  283. package/dist/protocol/acp-helpers.js.map +1 -1
  284. package/dist/registry.d.ts +4 -1
  285. package/dist/registry.d.ts.map +1 -1
  286. package/dist/registry.js +7 -0
  287. package/dist/registry.js.map +1 -1
  288. package/dist/transport/adapters/cdp-browser.d.ts +38 -2
  289. package/dist/transport/adapters/cdp-browser.d.ts.map +1 -1
  290. package/dist/transport/adapters/cdp-browser.js +349 -22
  291. package/dist/transport/adapters/cdp-browser.js.map +1 -1
  292. package/dist/transport/adapters/desktop-atspi.d.ts +23 -17
  293. package/dist/transport/adapters/desktop-atspi.d.ts.map +1 -1
  294. package/dist/transport/adapters/desktop-atspi.js +143 -32
  295. package/dist/transport/adapters/desktop-atspi.js.map +1 -1
  296. package/dist/transport/adapters/desktop-ax-helpers.d.ts +24 -0
  297. package/dist/transport/adapters/desktop-ax-helpers.d.ts.map +1 -0
  298. package/dist/transport/adapters/desktop-ax-helpers.js +190 -0
  299. package/dist/transport/adapters/desktop-ax-helpers.js.map +1 -0
  300. package/dist/transport/adapters/desktop-ax-swift.d.ts +13 -0
  301. package/dist/transport/adapters/desktop-ax-swift.d.ts.map +1 -1
  302. package/dist/transport/adapters/desktop-ax-swift.js +176 -2
  303. package/dist/transport/adapters/desktop-ax-swift.js.map +1 -1
  304. package/dist/transport/adapters/desktop-ax.d.ts +11 -2
  305. package/dist/transport/adapters/desktop-ax.d.ts.map +1 -1
  306. package/dist/transport/adapters/desktop-ax.js +131 -16
  307. package/dist/transport/adapters/desktop-ax.js.map +1 -1
  308. package/dist/transport/adapters/desktop-sidecar-errors.d.ts +3 -0
  309. package/dist/transport/adapters/desktop-sidecar-errors.d.ts.map +1 -0
  310. package/dist/transport/adapters/desktop-sidecar-errors.js +34 -0
  311. package/dist/transport/adapters/desktop-sidecar-errors.js.map +1 -0
  312. package/dist/transport/adapters/desktop-sidecar-snapshot.d.ts +10 -0
  313. package/dist/transport/adapters/desktop-sidecar-snapshot.d.ts.map +1 -0
  314. package/dist/transport/adapters/desktop-sidecar-snapshot.js +89 -0
  315. package/dist/transport/adapters/desktop-sidecar-snapshot.js.map +1 -0
  316. package/dist/transport/adapters/desktop-uia.d.ts +23 -17
  317. package/dist/transport/adapters/desktop-uia.d.ts.map +1 -1
  318. package/dist/transport/adapters/desktop-uia.js +142 -32
  319. package/dist/transport/adapters/desktop-uia.js.map +1 -1
  320. package/dist/transport/adapters/subprocess.d.ts +7 -0
  321. package/dist/transport/adapters/subprocess.d.ts.map +1 -1
  322. package/dist/transport/adapters/subprocess.js +64 -0
  323. package/dist/transport/adapters/subprocess.js.map +1 -1
  324. package/dist/transport/bus.d.ts +2 -0
  325. package/dist/transport/bus.d.ts.map +1 -1
  326. package/dist/transport/bus.js +7 -11
  327. package/dist/transport/bus.js.map +1 -1
  328. package/dist/transport/capability.d.ts.map +1 -1
  329. package/dist/transport/capability.js +123 -98
  330. package/dist/transport/capability.js.map +1 -1
  331. package/dist/transport/cascade.d.ts +5 -0
  332. package/dist/transport/cascade.d.ts.map +1 -0
  333. package/dist/transport/cascade.js +550 -0
  334. package/dist/transport/cascade.js.map +1 -0
  335. package/dist/transport/cdp-session.d.ts +11 -0
  336. package/dist/transport/cdp-session.d.ts.map +1 -0
  337. package/dist/transport/cdp-session.js +52 -0
  338. package/dist/transport/cdp-session.js.map +1 -0
  339. package/dist/transport/refs.d.ts +51 -0
  340. package/dist/transport/refs.d.ts.map +1 -0
  341. package/dist/transport/refs.js +135 -0
  342. package/dist/transport/refs.js.map +1 -0
  343. package/dist/transport/sidecar-binary.d.ts +18 -0
  344. package/dist/transport/sidecar-binary.d.ts.map +1 -0
  345. package/dist/transport/sidecar-binary.js +55 -0
  346. package/dist/transport/sidecar-binary.js.map +1 -0
  347. package/dist/transport/sidecar.d.ts +35 -0
  348. package/dist/transport/sidecar.d.ts.map +1 -0
  349. package/dist/transport/sidecar.js +134 -0
  350. package/dist/transport/sidecar.js.map +1 -0
  351. package/dist/transport/snapshot-encoder.d.ts +34 -0
  352. package/dist/transport/snapshot-encoder.d.ts.map +1 -0
  353. package/dist/transport/snapshot-encoder.js +139 -0
  354. package/dist/transport/snapshot-encoder.js.map +1 -0
  355. package/dist/transport/types.d.ts +6 -1
  356. package/dist/transport/types.d.ts.map +1 -1
  357. package/dist/types.d.ts +11 -1
  358. package/dist/types.d.ts.map +1 -1
  359. package/dist/types.js.map +1 -1
  360. package/docs/mcp/clients/claude-code.md +29 -0
  361. package/docs/mcp/clients/claude-desktop.md +47 -0
  362. package/docs/mcp/clients/codex.md +29 -0
  363. package/docs/mcp/clients/cursor.md +38 -0
  364. package/docs/mcp/clients/gemini-cli.md +38 -0
  365. package/docs/operate/compute.md +172 -0
  366. package/docs/operate/electron.md +87 -0
  367. package/docs/operate/focus-behavior.md +40 -0
  368. package/docs/operate/troubleshooting.md +379 -0
  369. package/package.json +44 -19
  370. package/src/adapters/36kr/news.yaml +4 -1
  371. package/src/adapters/_electron/desktop-shared.ts +14 -0
  372. package/src/adapters/_electron/shared.ts +54 -2
  373. package/src/adapters/juejin/hot.test.ts +25 -0
  374. package/src/adapters/juejin/hot.yaml +52 -0
  375. package/src/adapters/juejin/search.test.ts +27 -0
  376. package/src/adapters/juejin/search.yaml +58 -0
  377. package/src/adapters/leetcode/discuss-search.test.ts +29 -0
  378. package/src/adapters/leetcode/discuss-search.yaml +56 -0
  379. package/src/adapters/macos/actions.ts +63 -0
@@ -0,0 +1,550 @@
1
+ import { err, exitCodeFor, ok } from "../core/envelope.js";
2
+ import { enrichErrorWithRemedy } from "../engine/repair/remedies.js";
3
+ export const COMPUTE_PREFERENCE = {
4
+ compute_apps: ["desktop-ax", "desktop-uia", "desktop-atspi", "subprocess"],
5
+ compute_windows: [
6
+ "desktop-ax",
7
+ "desktop-uia",
8
+ "desktop-atspi",
9
+ "cdp-browser",
10
+ ],
11
+ compute_snapshot: [
12
+ "desktop-ax",
13
+ "desktop-uia",
14
+ "desktop-atspi",
15
+ "cdp-browser",
16
+ "cua",
17
+ ],
18
+ compute_find: [
19
+ "desktop-ax",
20
+ "desktop-uia",
21
+ "desktop-atspi",
22
+ "cdp-browser",
23
+ "cua",
24
+ ],
25
+ compute_screenshot: [
26
+ "cdp-browser",
27
+ "desktop-ax",
28
+ "desktop-uia",
29
+ "desktop-atspi",
30
+ "cua",
31
+ ],
32
+ compute_observe: [
33
+ "desktop-ax",
34
+ "desktop-uia",
35
+ "desktop-atspi",
36
+ "cdp-browser",
37
+ ],
38
+ compute_wait: [
39
+ "desktop-ax",
40
+ "cdp-browser",
41
+ "desktop-uia",
42
+ "desktop-atspi",
43
+ "cua",
44
+ "subprocess",
45
+ ],
46
+ compute_assert: [
47
+ "desktop-ax",
48
+ "cdp-browser",
49
+ "desktop-uia",
50
+ "desktop-atspi",
51
+ "cua",
52
+ "subprocess",
53
+ ],
54
+ compute_click: [
55
+ "desktop-ax",
56
+ "cdp-browser",
57
+ "desktop-uia",
58
+ "desktop-atspi",
59
+ "cua",
60
+ ],
61
+ compute_type: [
62
+ "desktop-ax",
63
+ "cdp-browser",
64
+ "desktop-uia",
65
+ "desktop-atspi",
66
+ "cua",
67
+ ],
68
+ compute_press: [
69
+ "desktop-ax",
70
+ "cdp-browser",
71
+ "desktop-uia",
72
+ "desktop-atspi",
73
+ "cua",
74
+ ],
75
+ compute_scroll: [
76
+ "desktop-ax",
77
+ "cdp-browser",
78
+ "desktop-uia",
79
+ "desktop-atspi",
80
+ "cua",
81
+ ],
82
+ compute_launch: ["subprocess", "desktop-ax", "desktop-uia", "desktop-atspi"],
83
+ compute_cdp_attach: ["cdp-browser"],
84
+ compute_evaluate: ["cdp-browser"],
85
+ };
86
+ const MUTATING_COMPUTE_STEPS = new Set([
87
+ "compute_click",
88
+ "compute_type",
89
+ "compute_press",
90
+ "compute_scroll",
91
+ ]);
92
+ const noStoreRefPassthrough = new WeakSet();
93
+ const DEFAULT_REF_TTL_MS = 60 * 60 * 1000;
94
+ export function preferenceFor(step, platform) {
95
+ const base = COMPUTE_PREFERENCE[step] ?? [];
96
+ return base.filter((transport) => transportSupportsPlatform(transport, platform));
97
+ }
98
+ function preferenceForRequest(bus, req, platform) {
99
+ const base = preferenceFor(req.kind, platform);
100
+ const ref = resolveParamRef(bus, req.params.ref);
101
+ const owner = transportForStableRef(ref?.stable ?? readStableRefParam(req.params.ref));
102
+ if (owner)
103
+ return preferTransport(base, owner);
104
+ if (hasCdpSessionParams(req.params)) {
105
+ return preferTransport(base, "cdp-browser");
106
+ }
107
+ return base;
108
+ }
109
+ function preferTransport(transports, preferred) {
110
+ if (!transports.includes(preferred))
111
+ return transports;
112
+ return [
113
+ preferred,
114
+ ...transports.filter((transport) => transport !== preferred),
115
+ ];
116
+ }
117
+ function hasCdpSessionParams(params) {
118
+ return ((typeof params.port === "number" && Number.isFinite(params.port)) ||
119
+ typeof params.webSocketDebuggerUrl === "string");
120
+ }
121
+ function transportForStableRef(stable) {
122
+ if (stable.startsWith("cdp-browser:") || stable.startsWith("cdp:")) {
123
+ return "cdp-browser";
124
+ }
125
+ if (stable.startsWith("desktop-uia:"))
126
+ return "desktop-uia";
127
+ if (stable.startsWith("desktop-atspi:"))
128
+ return "desktop-atspi";
129
+ if (stable.startsWith("desktop-ax:"))
130
+ return "desktop-ax";
131
+ return undefined;
132
+ }
133
+ function readStableRefParam(value) {
134
+ return typeof value === "string" ? value : "";
135
+ }
136
+ export async function tryCascade(bus, req, platform = process.platform, transportCtx = { vars: {}, bus, refs: bus.refs }) {
137
+ const normalizedReq = normalizeComputeRequest(req);
138
+ if (normalizedReq.kind === "compute_find") {
139
+ return findInRefStore(bus, normalizedReq.params);
140
+ }
141
+ const refError = validateRequestRef(bus, normalizedReq);
142
+ if (refError)
143
+ return refError;
144
+ const order = preferenceForRequest(bus, normalizedReq, platform);
145
+ if (order.length === 0) {
146
+ return withRemedy(err({
147
+ transport: "cua",
148
+ step: 0,
149
+ action: normalizedReq.kind,
150
+ reason: `no transport advertises step ${normalizedReq.kind}`,
151
+ suggestion: `add a row to COMPUTE_PREFERENCE for ${normalizedReq.kind}`,
152
+ minimum_capability: `unknown.${normalizedReq.kind}`,
153
+ exit_code: exitCodeFor("config"),
154
+ }));
155
+ }
156
+ const failures = [];
157
+ for (const kind of order) {
158
+ try {
159
+ const adapter = bus.get(kind);
160
+ const adapted = adaptStep(enrichFromRef(bus, normalizedReq), kind);
161
+ const dispatchReq = normalizeFocusForTransport(adapted, kind, normalizedReq.kind);
162
+ await adapter.open(transportCtx);
163
+ const result = await adapter.action(dispatchReq);
164
+ if (result.ok &&
165
+ normalizedReq.kind === "compute_snapshot" &&
166
+ (kind === "desktop-ax" ||
167
+ kind === "desktop-uia" ||
168
+ kind === "desktop-atspi" ||
169
+ kind === "cdp-browser")) {
170
+ const snapshot = await adapter.snapshot({
171
+ format: readSnapshotFormat(normalizedReq.params),
172
+ });
173
+ return ok(snapshot);
174
+ }
175
+ if (result.ok)
176
+ return result;
177
+ failures.push(`${kind}:${result.error.minimum_capability ?? result.error.reason}`);
178
+ }
179
+ catch (error) {
180
+ const message = error instanceof Error ? error.message : String(error);
181
+ failures.push(`${kind}:${message}`);
182
+ }
183
+ }
184
+ return withRemedy(err({
185
+ transport: order[0] ?? "cua",
186
+ step: 0,
187
+ action: normalizedReq.kind,
188
+ reason: `all transports failed: ${failures.join("; ")}`,
189
+ suggestion: "inspect each transport: unicli doctor compute",
190
+ minimum_capability: `compute.${normalizedReq.kind}.no-transport-available`,
191
+ exit_code: exitCodeFor("service_unavailable"),
192
+ }));
193
+ }
194
+ function normalizeComputeRequest(req) {
195
+ if (!MUTATING_COMPUTE_STEPS.has(req.kind))
196
+ return req;
197
+ if (req.params.focus === true)
198
+ return req;
199
+ return {
200
+ ...req,
201
+ params: {
202
+ ...req.params,
203
+ focus: false,
204
+ },
205
+ };
206
+ }
207
+ function normalizeFocusForTransport(req, transport, computeKind) {
208
+ if (transport !== "cua" || !MUTATING_COMPUTE_STEPS.has(computeKind)) {
209
+ return req;
210
+ }
211
+ if (req.params.focus === true)
212
+ return req;
213
+ return {
214
+ ...req,
215
+ params: {
216
+ ...req.params,
217
+ focus: true,
218
+ },
219
+ };
220
+ }
221
+ function validateRequestRef(bus, req) {
222
+ const refValue = req.params.ref;
223
+ if (typeof refValue !== "string" || refValue.length === 0)
224
+ return undefined;
225
+ const resolved = resolveParamRefWithBucket(bus, refValue);
226
+ if (!resolved) {
227
+ if (transportForStableRef(refValue))
228
+ return undefined;
229
+ if (bus.refs.buckets().length === 0) {
230
+ if (noStoreRefPassthrough.has(bus))
231
+ return undefined;
232
+ if (!isPersistedAliasRef(refValue)) {
233
+ noStoreRefPassthrough.add(bus);
234
+ return undefined;
235
+ }
236
+ }
237
+ return refExpired(req.kind, refValue, "no live ref matched the target");
238
+ }
239
+ if (isRefBucketExpired(resolved.bucket)) {
240
+ return refExpired(req.kind, refValue, `ref ${refValue} expired; bucket age ${Date.now() - resolved.bucket.createdAt}ms exceeds ${readRefTtlMs()}ms`);
241
+ }
242
+ if (isDisabledRef(resolved.ref)) {
243
+ return elementDisabled(req.kind, refValue, resolved.ref);
244
+ }
245
+ if (isOffScreenRef(resolved.ref)) {
246
+ return elementOffScreen(req.kind, refValue, resolved.ref);
247
+ }
248
+ if (isMinimizedRef(resolved.ref)) {
249
+ return windowMinimized(req.kind, refValue, resolved.ref);
250
+ }
251
+ return undefined;
252
+ }
253
+ function isPersistedAliasRef(ref) {
254
+ const match = /^@e(\d+)$/.exec(ref);
255
+ if (!match)
256
+ return false;
257
+ const aliasNumber = Number.parseInt(match[1] ?? "", 10);
258
+ return Number.isFinite(aliasNumber) && aliasNumber >= 50;
259
+ }
260
+ function refExpired(action, ref, reason) {
261
+ return withRemedy(err({
262
+ transport: "cua",
263
+ step: 0,
264
+ action,
265
+ reason: `${reason}: ${ref}`,
266
+ suggestion: "run `unicli compute snapshot` again, then retry",
267
+ minimum_capability: `compute.${action}.ref_expired`,
268
+ exit_code: exitCodeFor("empty_result"),
269
+ }));
270
+ }
271
+ function elementDisabled(action, ref, element) {
272
+ return withRemedy(err({
273
+ transport: "cua",
274
+ step: 0,
275
+ action,
276
+ reason: `target element is disabled: ${ref}${element.name ? ` (${element.name})` : ""}`,
277
+ suggestion: "wait for the element to become enabled, then retry",
278
+ minimum_capability: `compute.${action}.element_disabled`,
279
+ exit_code: exitCodeFor("empty_result"),
280
+ }));
281
+ }
282
+ function isDisabledRef(ref) {
283
+ const states = new Set((ref.states ?? []).map((state) => state.toLowerCase()));
284
+ return (states.has("disabled") ||
285
+ states.has("unavailable") ||
286
+ states.has("aria-disabled"));
287
+ }
288
+ function elementOffScreen(action, ref, element) {
289
+ return withRemedy(err({
290
+ transport: "cua",
291
+ step: 0,
292
+ action,
293
+ reason: `target element is off screen: ${ref}${element.name ? ` (${element.name})` : ""}`,
294
+ suggestion: "scroll the element into view or take a fresh snapshot",
295
+ minimum_capability: `compute.${action}.element_off_screen`,
296
+ exit_code: exitCodeFor("empty_result"),
297
+ }));
298
+ }
299
+ function isOffScreenRef(ref) {
300
+ const bounds = ref.bounds;
301
+ if (!bounds)
302
+ return false;
303
+ return (bounds.w <= 0 ||
304
+ bounds.h <= 0 ||
305
+ bounds.x + bounds.w <= 0 ||
306
+ bounds.y + bounds.h <= 0);
307
+ }
308
+ function windowMinimized(action, ref, element) {
309
+ return withRemedy(err({
310
+ transport: "cua",
311
+ step: 0,
312
+ action,
313
+ reason: `target window is minimized or hidden: ${ref}${element.name ? ` (${element.name})` : ""}`,
314
+ suggestion: "restore the target window or retry with explicit focus",
315
+ minimum_capability: `compute.${action}.window_minimized`,
316
+ exit_code: exitCodeFor("empty_result"),
317
+ }));
318
+ }
319
+ function isMinimizedRef(ref) {
320
+ const states = new Set((ref.states ?? []).map((state) => state.toLowerCase()));
321
+ return (states.has("minimized") || states.has("hidden") || states.has("collapsed"));
322
+ }
323
+ function isRefBucketExpired(bucket) {
324
+ return Date.now() - bucket.createdAt > readRefTtlMs();
325
+ }
326
+ function readRefTtlMs() {
327
+ const raw = process.env.UNICLI_COMPUTE_REF_TTL_MS;
328
+ if (!raw)
329
+ return DEFAULT_REF_TTL_MS;
330
+ const parsed = Number.parseInt(raw, 10);
331
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : DEFAULT_REF_TTL_MS;
332
+ }
333
+ function readSnapshotFormat(params) {
334
+ const format = params.format;
335
+ return format === "compact" || format === "tree" || format === "json"
336
+ ? format
337
+ : undefined;
338
+ }
339
+ function findInRefStore(bus, params) {
340
+ const role = typeof params.role === "string" ? simplifyRole(params.role) : "";
341
+ const name = typeof params.name === "string" ? params.name.toLowerCase() : "";
342
+ const text = typeof params.text === "string" ? params.text.toLowerCase() : "";
343
+ const matches = bus.refs.list().filter((ref) => {
344
+ const roleMatches = !role || simplifyRole(ref.role) === role;
345
+ const nameMatches = !name || (ref.name ?? "").toLowerCase().includes(name);
346
+ const textMatches = !text ||
347
+ (ref.value ?? "").toLowerCase().includes(text) ||
348
+ (ref.name ?? "").toLowerCase().includes(text);
349
+ return roleMatches && nameMatches && textMatches;
350
+ });
351
+ if (params.first === true) {
352
+ if (isAmbiguousFind(matches, params))
353
+ return findAmbiguous(matches, params);
354
+ const first = matches[0];
355
+ return first ? ok(first) : findEmpty(params);
356
+ }
357
+ return ok(matches);
358
+ }
359
+ function isAmbiguousFind(matches, params) {
360
+ if (matches.length < 2)
361
+ return false;
362
+ if (typeof params.pid === "number" || typeof params.windowId === "string") {
363
+ return false;
364
+ }
365
+ const scopes = new Set(matches.map((ref) => `${ref.app ?? ""}:${ref.pid ?? ""}:${scopeOf(ref)}`));
366
+ return scopes.size > 1;
367
+ }
368
+ function scopeOf(ref) {
369
+ const stableParts = ref.stable.split(":");
370
+ return stableParts.length >= 3 ? (stableParts[1] ?? "") : "";
371
+ }
372
+ function findAmbiguous(matches, params) {
373
+ return withRemedy(err({
374
+ transport: "cua",
375
+ step: 0,
376
+ action: "compute_find",
377
+ reason: `multiple refs matched ${JSON.stringify(params)} across ${matches.length} targets`,
378
+ suggestion: "disambiguate with app, pid, window id, or inspect `unicli compute windows --app <name>`",
379
+ minimum_capability: "compute.compute_find.app_ambiguous",
380
+ exit_code: exitCodeFor("empty_result"),
381
+ }));
382
+ }
383
+ function findEmpty(params) {
384
+ return withRemedy(err({
385
+ transport: "cua",
386
+ step: 0,
387
+ action: "compute_find",
388
+ reason: `no refs matched ${JSON.stringify(params)}`,
389
+ suggestion: "run `unicli compute snapshot` again, then retry find",
390
+ minimum_capability: "compute.compute_find.ref-store",
391
+ exit_code: exitCodeFor("empty_result"),
392
+ }));
393
+ }
394
+ function withRemedy(result) {
395
+ if (result.ok)
396
+ return result;
397
+ return { ...result, error: enrichErrorWithRemedy(result.error) };
398
+ }
399
+ function simplifyRole(role) {
400
+ return ROLE_SIMPLIFY[role] ?? role.toLowerCase();
401
+ }
402
+ const ROLE_SIMPLIFY = {
403
+ AXButton: "button",
404
+ AXTextField: "input",
405
+ AXTextArea: "textarea",
406
+ AXStaticText: "text",
407
+ AXMenuItem: "menuitem",
408
+ AXCheckBox: "checkbox",
409
+ AXRadioButton: "radio",
410
+ AXLink: "link",
411
+ AXWindow: "window",
412
+ Button: "button",
413
+ Edit: "input",
414
+ Text: "text",
415
+ MenuItem: "menuitem",
416
+ CheckBox: "checkbox",
417
+ RadioButton: "radio",
418
+ Hyperlink: "link",
419
+ Window: "window",
420
+ push_button: "button",
421
+ text: "input",
422
+ menu_item: "menuitem",
423
+ check_box: "checkbox",
424
+ radio_button: "radio",
425
+ link: "link",
426
+ frame: "window",
427
+ };
428
+ function transportSupportsPlatform(transport, platform) {
429
+ if (transport === "desktop-ax")
430
+ return platform === "darwin";
431
+ if (transport === "desktop-uia")
432
+ return platform === "win32";
433
+ if (transport === "desktop-atspi")
434
+ return platform === "linux";
435
+ return true;
436
+ }
437
+ function adaptStep(req, transport) {
438
+ const kind = STEP_ADAPTERS[transport]?.[req.kind] ?? req.kind;
439
+ return { ...req, kind };
440
+ }
441
+ function resolveParamRef(bus, refValue) {
442
+ return resolveParamRefWithBucket(bus, refValue)?.ref;
443
+ }
444
+ function resolveParamRefWithBucket(bus, refValue) {
445
+ if (typeof refValue !== "string")
446
+ return undefined;
447
+ for (const bucket of bus.refs.buckets()) {
448
+ const ref = bucket.byAlias.get(refValue) ?? bucket.byStable.get(refValue);
449
+ if (ref)
450
+ return { ref, bucket };
451
+ }
452
+ return undefined;
453
+ }
454
+ function enrichFromRef(bus, req) {
455
+ const refValue = req.params.ref;
456
+ const ref = resolveParamRef(bus, refValue);
457
+ if (!ref)
458
+ return req;
459
+ const boundsCenter = ref.bounds === undefined
460
+ ? {}
461
+ : {
462
+ x: ref.bounds.x + ref.bounds.w / 2,
463
+ y: ref.bounds.y + ref.bounds.h / 2,
464
+ coordinateSpace: "screen",
465
+ ...(typeof ref.screenIndex === "number" &&
466
+ Number.isFinite(ref.screenIndex)
467
+ ? { screenIndex: Math.trunc(ref.screenIndex) }
468
+ : {}),
469
+ };
470
+ return {
471
+ ...req,
472
+ params: {
473
+ ...boundsCenter,
474
+ ...(ref.app ? { app: ref.app } : {}),
475
+ role: ref.role,
476
+ ...(ref.name ? { title: ref.name, name: ref.name } : {}),
477
+ stable: ref.stable,
478
+ ...req.params,
479
+ },
480
+ };
481
+ }
482
+ const STEP_ADAPTERS = {
483
+ "desktop-ax": {
484
+ compute_apps: "ax_apps",
485
+ compute_windows: "ax_windows",
486
+ compute_snapshot: "ax_snapshot",
487
+ compute_click: "ax_press",
488
+ compute_type: "ax_set_value",
489
+ compute_press: "ax_press",
490
+ compute_scroll: "ax_scroll",
491
+ compute_screenshot: "ax_screenshot",
492
+ compute_launch: "launch_app",
493
+ },
494
+ "desktop-uia": {
495
+ compute_apps: "uia_apps",
496
+ compute_windows: "uia_windows",
497
+ compute_snapshot: "uia_snapshot",
498
+ compute_find: "uia_find",
499
+ compute_click: "uia_invoke",
500
+ compute_type: "uia_set_value",
501
+ compute_press: "uia_press",
502
+ compute_scroll: "uia_scroll",
503
+ compute_screenshot: "uia_screenshot",
504
+ compute_wait: "uia_wait",
505
+ compute_observe: "uia_observe",
506
+ compute_assert: "uia_assert",
507
+ compute_launch: "launch_app",
508
+ },
509
+ "desktop-atspi": {
510
+ compute_apps: "atspi_apps",
511
+ compute_windows: "atspi_windows",
512
+ compute_snapshot: "atspi_snapshot",
513
+ compute_find: "atspi_find",
514
+ compute_click: "atspi_invoke",
515
+ compute_type: "atspi_set_value",
516
+ compute_press: "atspi_press",
517
+ compute_scroll: "atspi_scroll",
518
+ compute_screenshot: "atspi_screenshot",
519
+ compute_wait: "atspi_wait",
520
+ compute_observe: "atspi_observe",
521
+ compute_assert: "atspi_assert",
522
+ compute_launch: "launch_app",
523
+ },
524
+ "cdp-browser": {
525
+ compute_snapshot: "snapshot",
526
+ compute_click: "click",
527
+ compute_type: "type",
528
+ compute_press: "press",
529
+ compute_scroll: "scroll",
530
+ compute_screenshot: "screenshot",
531
+ compute_cdp_attach: "cdp_attach",
532
+ compute_evaluate: "evaluate",
533
+ compute_wait: "wait",
534
+ },
535
+ cua: {
536
+ compute_snapshot: "cua_snapshot",
537
+ compute_click: "cua_click",
538
+ compute_type: "cua_type",
539
+ compute_press: "cua_key",
540
+ compute_scroll: "cua_scroll",
541
+ compute_screenshot: "cua_snapshot",
542
+ compute_wait: "cua_wait",
543
+ },
544
+ subprocess: {
545
+ compute_apps: "exec",
546
+ compute_launch: "launch_app",
547
+ compute_wait: "wait",
548
+ },
549
+ };
550
+ //# sourceMappingURL=cascade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cascade.js","sourceRoot":"","sources":["../../src/transport/cascade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export interface CdpSession {
2
+ schema_version: 1;
3
+ port: number;
4
+ webSocketDebuggerUrl: string;
5
+ app?: string;
6
+ savedAt: number;
7
+ }
8
+ export declare function computeCdpSessionPath(): string;
9
+ export declare function saveCdpSession(session: Omit<CdpSession, "schema_version" | "savedAt">, file?: string): void;
10
+ export declare function loadCdpSession(file?: string): CdpSession | undefined;
11
+ //# sourceMappingURL=cdp-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdp-session.d.ts","sourceRoot":"","sources":["../../src/transport/cdp-session.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,cAAc,EAAE,CAAC,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB,EAAE,MAAM,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,gBAAgB,GAAG,SAAS,CAAC,EACvD,IAAI,SAA0B,GAC7B,IAAI,CAUN;AAED,wBAAgB,cAAc,CAC5B,IAAI,SAA0B,GAC7B,UAAU,GAAG,SAAS,CAOxB"}
@@ -0,0 +1,52 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { dirname, join } from "node:path";
4
+ export function computeCdpSessionPath() {
5
+ return process.env.UNICLI_COMPUTE_CDP_SESSION_PATH ?? defaultCdpSessionPath();
6
+ }
7
+ export function saveCdpSession(session, file = computeCdpSessionPath()) {
8
+ if (isDefaultSessionStateDisabled(file))
9
+ return;
10
+ const payload = {
11
+ schema_version: 1,
12
+ ...session,
13
+ port: Math.trunc(session.port),
14
+ savedAt: Date.now(),
15
+ };
16
+ mkdirSync(dirname(file), { recursive: true });
17
+ writeFileSync(file, JSON.stringify(payload, null, 2) + "\n");
18
+ }
19
+ export function loadCdpSession(file = computeCdpSessionPath()) {
20
+ if (isDefaultSessionStateDisabled(file))
21
+ return undefined;
22
+ if (!existsSync(file))
23
+ return undefined;
24
+ const text = readFileSync(file, "utf8").trim();
25
+ if (!text)
26
+ return undefined;
27
+ const raw = JSON.parse(text);
28
+ return isCdpSession(raw) ? raw : undefined;
29
+ }
30
+ function defaultCdpSessionPath() {
31
+ return join(homedir(), ".unicli", "compute", "cdp-session.json");
32
+ }
33
+ function isDefaultSessionStateDisabled(file) {
34
+ return (process.env.UNICLI_COMPUTE_CDP_SESSION_PATH === undefined &&
35
+ file === defaultCdpSessionPath() &&
36
+ (process.env.VITEST !== undefined || process.env.NODE_ENV === "test"));
37
+ }
38
+ function isCdpSession(value) {
39
+ return (typeof value === "object" &&
40
+ value !== null &&
41
+ "schema_version" in value &&
42
+ value.schema_version === 1 &&
43
+ "port" in value &&
44
+ typeof value.port === "number" &&
45
+ Number.isFinite(value.port) &&
46
+ "webSocketDebuggerUrl" in value &&
47
+ typeof value.webSocketDebuggerUrl === "string" &&
48
+ "savedAt" in value &&
49
+ typeof value.savedAt === "number" &&
50
+ (!("app" in value) || typeof value.app === "string"));
51
+ }
52
+ //# sourceMappingURL=cdp-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdp-session.js","sourceRoot":"","sources":["../../src/transport/cdp-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAU1C,MAAM,UAAU,qBAAqB;IACnC,OAAO,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,qBAAqB,EAAE,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,OAAuD,EACvD,IAAI,GAAG,qBAAqB,EAAE;IAE9B,IAAI,6BAA6B,CAAC,IAAI,CAAC;QAAE,OAAO;IAChD,MAAM,OAAO,GAAe;QAC1B,cAAc,EAAE,CAAC;QACjB,GAAG,OAAO;QACV,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAC9B,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;KACpB,CAAC;IACF,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,IAAI,GAAG,qBAAqB,EAAE;IAE9B,IAAI,6BAA6B,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/C,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;IACxC,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7C,CAAC;AAED,SAAS,qBAAqB;IAC5B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,6BAA6B,CAAC,IAAY;IACjD,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,+BAA+B,KAAK,SAAS;QACzD,IAAI,KAAK,qBAAqB,EAAE;QAChC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,CACtE,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,gBAAgB,IAAI,KAAK;QACzB,KAAK,CAAC,cAAc,KAAK,CAAC;QAC1B,MAAM,IAAI,KAAK;QACf,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QAC3B,sBAAsB,IAAI,KAAK;QAC/B,OAAO,KAAK,CAAC,oBAAoB,KAAK,QAAQ;QAC9C,SAAS,IAAI,KAAK;QAClB,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QACjC,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CACrD,CAAC;AACJ,CAAC"}