@zenalexa/unicli 0.217.0 → 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 (341) hide show
  1. package/AGENTS.md +7 -6
  2. package/README.md +59 -19
  3. package/README.zh-CN.md +36 -15
  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/macos/actions.d.ts +9 -0
  25. package/dist/adapters/macos/actions.d.ts.map +1 -0
  26. package/dist/adapters/macos/actions.js +55 -0
  27. package/dist/adapters/macos/actions.js.map +1 -0
  28. package/dist/browser/bridge.d.ts +2 -0
  29. package/dist/browser/bridge.d.ts.map +1 -1
  30. package/dist/browser/bridge.js +39 -0
  31. package/dist/browser/bridge.js.map +1 -1
  32. package/dist/browser/cdp-client.d.ts +2 -0
  33. package/dist/browser/cdp-client.d.ts.map +1 -1
  34. package/dist/browser/cdp-client.js +7 -0
  35. package/dist/browser/cdp-client.js.map +1 -1
  36. package/dist/browser/page.d.ts +2 -0
  37. package/dist/browser/page.d.ts.map +1 -1
  38. package/dist/browser/page.js +35 -0
  39. package/dist/browser/page.js.map +1 -1
  40. package/dist/cli.d.ts.map +1 -1
  41. package/dist/cli.js +13 -1
  42. package/dist/cli.js.map +1 -1
  43. package/dist/commands/approvals.d.ts +3 -0
  44. package/dist/commands/approvals.d.ts.map +1 -0
  45. package/dist/commands/approvals.js +123 -0
  46. package/dist/commands/approvals.js.map +1 -0
  47. package/dist/commands/browser-operator-runtime.d.ts.map +1 -1
  48. package/dist/commands/browser-operator-runtime.js +1 -0
  49. package/dist/commands/browser-operator-runtime.js.map +1 -1
  50. package/dist/commands/browser-operator.d.ts.map +1 -1
  51. package/dist/commands/browser-operator.js +84 -12
  52. package/dist/commands/browser-operator.js.map +1 -1
  53. package/dist/commands/compute.d.ts +3 -0
  54. package/dist/commands/compute.d.ts.map +1 -0
  55. package/dist/commands/compute.js +324 -0
  56. package/dist/commands/compute.js.map +1 -0
  57. package/dist/commands/dispatch.d.ts.map +1 -1
  58. package/dist/commands/dispatch.js +10 -4
  59. package/dist/commands/dispatch.js.map +1 -1
  60. package/dist/commands/doctor-compute.d.ts +38 -0
  61. package/dist/commands/doctor-compute.d.ts.map +1 -0
  62. package/dist/commands/doctor-compute.js +376 -0
  63. package/dist/commands/doctor-compute.js.map +1 -0
  64. package/dist/commands/lint.d.ts.map +1 -1
  65. package/dist/commands/lint.js +69 -1
  66. package/dist/commands/lint.js.map +1 -1
  67. package/dist/commands/mcp.d.ts.map +1 -1
  68. package/dist/commands/mcp.js +4 -0
  69. package/dist/commands/mcp.js.map +1 -1
  70. package/dist/commands/runs.d.ts +3 -0
  71. package/dist/commands/runs.d.ts.map +1 -0
  72. package/dist/commands/runs.js +367 -0
  73. package/dist/commands/runs.js.map +1 -0
  74. package/dist/core/envelope.d.ts +8 -0
  75. package/dist/core/envelope.d.ts.map +1 -1
  76. package/dist/core/envelope.js +1 -0
  77. package/dist/core/envelope.js.map +1 -1
  78. package/dist/discovery/aliases.d.ts.map +1 -1
  79. package/dist/discovery/aliases.js +15 -0
  80. package/dist/discovery/aliases.js.map +1 -1
  81. package/dist/discovery/loader.d.ts.map +1 -1
  82. package/dist/discovery/loader.js +9 -0
  83. package/dist/discovery/loader.js.map +1 -1
  84. package/dist/discovery/macos-dynamic.d.ts +58 -0
  85. package/dist/discovery/macos-dynamic.d.ts.map +1 -0
  86. package/dist/discovery/macos-dynamic.js +429 -0
  87. package/dist/discovery/macos-dynamic.js.map +1 -0
  88. package/dist/discovery/search.d.ts.map +1 -1
  89. package/dist/discovery/search.js +152 -3
  90. package/dist/discovery/search.js.map +1 -1
  91. package/dist/electron-apps.d.ts +1 -0
  92. package/dist/electron-apps.d.ts.map +1 -1
  93. package/dist/electron-apps.js +1 -0
  94. package/dist/electron-apps.js.map +1 -1
  95. package/dist/engine/approval-store.d.ts +43 -0
  96. package/dist/engine/approval-store.d.ts.map +1 -0
  97. package/dist/engine/approval-store.js +193 -0
  98. package/dist/engine/approval-store.js.map +1 -0
  99. package/dist/engine/browser/action-evidence.d.ts +2 -0
  100. package/dist/engine/browser/action-evidence.d.ts.map +1 -1
  101. package/dist/engine/browser/action-evidence.js +35 -1
  102. package/dist/engine/browser/action-evidence.js.map +1 -1
  103. package/dist/engine/browser/evidence.d.ts +22 -0
  104. package/dist/engine/browser/evidence.d.ts.map +1 -1
  105. package/dist/engine/browser/evidence.js +72 -0
  106. package/dist/engine/browser/evidence.js.map +1 -1
  107. package/dist/engine/browser/session-lease.d.ts +53 -0
  108. package/dist/engine/browser/session-lease.d.ts.map +1 -0
  109. package/dist/engine/browser/session-lease.js +100 -0
  110. package/dist/engine/browser/session-lease.js.map +1 -0
  111. package/dist/engine/browser/session-lock.d.ts +17 -0
  112. package/dist/engine/browser/session-lock.d.ts.map +1 -0
  113. package/dist/engine/browser/session-lock.js +114 -0
  114. package/dist/engine/browser/session-lock.js.map +1 -0
  115. package/dist/engine/browser/session-runtime.d.ts +10 -0
  116. package/dist/engine/browser/session-runtime.d.ts.map +1 -0
  117. package/dist/engine/browser/session-runtime.js +87 -0
  118. package/dist/engine/browser/session-runtime.js.map +1 -0
  119. package/dist/engine/capability-policy.d.ts +13 -2
  120. package/dist/engine/capability-policy.d.ts.map +1 -1
  121. package/dist/engine/capability-policy.js +113 -3
  122. package/dist/engine/capability-policy.js.map +1 -1
  123. package/dist/engine/executor.d.ts +8 -3
  124. package/dist/engine/executor.d.ts.map +1 -1
  125. package/dist/engine/executor.js +9 -2
  126. package/dist/engine/executor.js.map +1 -1
  127. package/dist/engine/kernel/execute.d.ts +1 -0
  128. package/dist/engine/kernel/execute.d.ts.map +1 -1
  129. package/dist/engine/kernel/execute.js +125 -3
  130. package/dist/engine/kernel/execute.js.map +1 -1
  131. package/dist/engine/kernel/types.d.ts +13 -0
  132. package/dist/engine/kernel/types.d.ts.map +1 -1
  133. package/dist/engine/operation-policy.d.ts +9 -1
  134. package/dist/engine/operation-policy.d.ts.map +1 -1
  135. package/dist/engine/operation-policy.js +6 -2
  136. package/dist/engine/operation-policy.js.map +1 -1
  137. package/dist/engine/permission-rules.d.ts +43 -0
  138. package/dist/engine/permission-rules.d.ts.map +1 -0
  139. package/dist/engine/permission-rules.js +401 -0
  140. package/dist/engine/permission-rules.js.map +1 -0
  141. package/dist/engine/permission-runtime.d.ts +11 -0
  142. package/dist/engine/permission-runtime.d.ts.map +1 -0
  143. package/dist/engine/permission-runtime.js +21 -0
  144. package/dist/engine/permission-runtime.js.map +1 -0
  145. package/dist/engine/repair/remedies.d.ts +4 -0
  146. package/dist/engine/repair/remedies.d.ts.map +1 -0
  147. package/dist/engine/repair/remedies.js +169 -0
  148. package/dist/engine/repair/remedies.js.map +1 -0
  149. package/dist/engine/runtime-resource-guard.d.ts +23 -0
  150. package/dist/engine/runtime-resource-guard.d.ts.map +1 -0
  151. package/dist/engine/runtime-resource-guard.js +85 -0
  152. package/dist/engine/runtime-resource-guard.js.map +1 -0
  153. package/dist/engine/session/args.d.ts +3 -0
  154. package/dist/engine/session/args.d.ts.map +1 -0
  155. package/dist/engine/session/args.js +17 -0
  156. package/dist/engine/session/args.js.map +1 -0
  157. package/dist/engine/session/compare.d.ts +92 -0
  158. package/dist/engine/session/compare.d.ts.map +1 -0
  159. package/dist/engine/session/compare.js +324 -0
  160. package/dist/engine/session/compare.js.map +1 -0
  161. package/dist/engine/session/environment.d.ts +4 -0
  162. package/dist/engine/session/environment.d.ts.map +1 -0
  163. package/dist/engine/session/environment.js +25 -0
  164. package/dist/engine/session/environment.js.map +1 -0
  165. package/dist/engine/session/events.d.ts +2 -0
  166. package/dist/engine/session/events.d.ts.map +1 -1
  167. package/dist/engine/session/events.js +12 -0
  168. package/dist/engine/session/events.js.map +1 -1
  169. package/dist/engine/session/query.d.ts +47 -0
  170. package/dist/engine/session/query.d.ts.map +1 -0
  171. package/dist/engine/session/query.js +299 -0
  172. package/dist/engine/session/query.js.map +1 -0
  173. package/dist/engine/session/replay.d.ts +35 -0
  174. package/dist/engine/session/replay.d.ts.map +1 -0
  175. package/dist/engine/session/replay.js +144 -0
  176. package/dist/engine/session/replay.js.map +1 -0
  177. package/dist/engine/session/run-loop.d.ts.map +1 -1
  178. package/dist/engine/session/run-loop.js +62 -23
  179. package/dist/engine/session/run-loop.js.map +1 -1
  180. package/dist/engine/session/store.d.ts +7 -0
  181. package/dist/engine/session/store.d.ts.map +1 -1
  182. package/dist/engine/session/store.js +131 -1
  183. package/dist/engine/session/store.js.map +1 -1
  184. package/dist/engine/session/types.d.ts +3 -1
  185. package/dist/engine/session/types.d.ts.map +1 -1
  186. package/dist/engine/steps/compute.d.ts +41 -0
  187. package/dist/engine/steps/compute.d.ts.map +1 -0
  188. package/dist/engine/steps/compute.js +55 -0
  189. package/dist/engine/steps/compute.js.map +1 -0
  190. package/dist/engine/steps/desktop-ax.d.ts +8 -0
  191. package/dist/engine/steps/desktop-ax.d.ts.map +1 -1
  192. package/dist/engine/steps/desktop-ax.js +16 -0
  193. package/dist/engine/steps/desktop-ax.js.map +1 -1
  194. package/dist/engine/steps/desktop-sidecar.d.ts +49 -0
  195. package/dist/engine/steps/desktop-sidecar.d.ts.map +1 -0
  196. package/dist/engine/steps/desktop-sidecar.js +50 -0
  197. package/dist/engine/steps/desktop-sidecar.js.map +1 -0
  198. package/dist/engine/steps/download.d.ts +1 -1
  199. package/dist/engine/steps/download.d.ts.map +1 -1
  200. package/dist/engine/steps/download.js +24 -2
  201. package/dist/engine/steps/download.js.map +1 -1
  202. package/dist/engine/steps/exec.d.ts +1 -1
  203. package/dist/engine/steps/exec.d.ts.map +1 -1
  204. package/dist/engine/steps/exec.js +23 -7
  205. package/dist/engine/steps/exec.js.map +1 -1
  206. package/dist/engine/steps/fetch-text.d.ts +1 -1
  207. package/dist/engine/steps/fetch-text.d.ts.map +1 -1
  208. package/dist/engine/steps/fetch-text.js +12 -4
  209. package/dist/engine/steps/fetch-text.js.map +1 -1
  210. package/dist/engine/steps/fetch.d.ts +2 -1
  211. package/dist/engine/steps/fetch.d.ts.map +1 -1
  212. package/dist/engine/steps/fetch.js +29 -6
  213. package/dist/engine/steps/fetch.js.map +1 -1
  214. package/dist/engine/steps/index.d.ts +2 -0
  215. package/dist/engine/steps/index.d.ts.map +1 -1
  216. package/dist/engine/steps/index.js +2 -0
  217. package/dist/engine/steps/index.js.map +1 -1
  218. package/dist/engine/steps/navigate.d.ts +1 -1
  219. package/dist/engine/steps/navigate.d.ts.map +1 -1
  220. package/dist/engine/steps/navigate.js +29 -2
  221. package/dist/engine/steps/navigate.js.map +1 -1
  222. package/dist/fast-path.d.ts.map +1 -1
  223. package/dist/fast-path.js +96 -12
  224. package/dist/fast-path.js.map +1 -1
  225. package/dist/manifest-compact.txt +2 -2
  226. package/dist/manifest-search.json +1 -1
  227. package/dist/manifest.json +1024 -1
  228. package/dist/mcp/handler.d.ts +2 -2
  229. package/dist/mcp/handler.d.ts.map +1 -1
  230. package/dist/mcp/handler.js +59 -5
  231. package/dist/mcp/handler.js.map +1 -1
  232. package/dist/mcp/profiles/computer-use.d.ts +4 -0
  233. package/dist/mcp/profiles/computer-use.d.ts.map +1 -0
  234. package/dist/mcp/profiles/computer-use.js +305 -0
  235. package/dist/mcp/profiles/computer-use.js.map +1 -0
  236. package/dist/mcp/server.d.ts.map +1 -1
  237. package/dist/mcp/server.js +30 -6
  238. package/dist/mcp/server.js.map +1 -1
  239. package/dist/mcp/tools.d.ts +9 -0
  240. package/dist/mcp/tools.d.ts.map +1 -1
  241. package/dist/mcp/tools.js +20 -0
  242. package/dist/mcp/tools.js.map +1 -1
  243. package/dist/output/envelope.d.ts +6 -0
  244. package/dist/output/envelope.d.ts.map +1 -1
  245. package/dist/output/envelope.js.map +1 -1
  246. package/dist/output/error-map.d.ts.map +1 -1
  247. package/dist/output/error-map.js +4 -0
  248. package/dist/output/error-map.js.map +1 -1
  249. package/dist/registry.d.ts +1 -0
  250. package/dist/registry.d.ts.map +1 -1
  251. package/dist/registry.js +5 -0
  252. package/dist/registry.js.map +1 -1
  253. package/dist/transport/adapters/cdp-browser.d.ts +38 -2
  254. package/dist/transport/adapters/cdp-browser.d.ts.map +1 -1
  255. package/dist/transport/adapters/cdp-browser.js +349 -22
  256. package/dist/transport/adapters/cdp-browser.js.map +1 -1
  257. package/dist/transport/adapters/desktop-atspi.d.ts +23 -17
  258. package/dist/transport/adapters/desktop-atspi.d.ts.map +1 -1
  259. package/dist/transport/adapters/desktop-atspi.js +143 -32
  260. package/dist/transport/adapters/desktop-atspi.js.map +1 -1
  261. package/dist/transport/adapters/desktop-ax-helpers.d.ts +24 -0
  262. package/dist/transport/adapters/desktop-ax-helpers.d.ts.map +1 -0
  263. package/dist/transport/adapters/desktop-ax-helpers.js +190 -0
  264. package/dist/transport/adapters/desktop-ax-helpers.js.map +1 -0
  265. package/dist/transport/adapters/desktop-ax-swift.d.ts +13 -0
  266. package/dist/transport/adapters/desktop-ax-swift.d.ts.map +1 -1
  267. package/dist/transport/adapters/desktop-ax-swift.js +176 -2
  268. package/dist/transport/adapters/desktop-ax-swift.js.map +1 -1
  269. package/dist/transport/adapters/desktop-ax.d.ts +11 -2
  270. package/dist/transport/adapters/desktop-ax.d.ts.map +1 -1
  271. package/dist/transport/adapters/desktop-ax.js +131 -16
  272. package/dist/transport/adapters/desktop-ax.js.map +1 -1
  273. package/dist/transport/adapters/desktop-sidecar-errors.d.ts +3 -0
  274. package/dist/transport/adapters/desktop-sidecar-errors.d.ts.map +1 -0
  275. package/dist/transport/adapters/desktop-sidecar-errors.js +34 -0
  276. package/dist/transport/adapters/desktop-sidecar-errors.js.map +1 -0
  277. package/dist/transport/adapters/desktop-sidecar-snapshot.d.ts +10 -0
  278. package/dist/transport/adapters/desktop-sidecar-snapshot.d.ts.map +1 -0
  279. package/dist/transport/adapters/desktop-sidecar-snapshot.js +89 -0
  280. package/dist/transport/adapters/desktop-sidecar-snapshot.js.map +1 -0
  281. package/dist/transport/adapters/desktop-uia.d.ts +23 -17
  282. package/dist/transport/adapters/desktop-uia.d.ts.map +1 -1
  283. package/dist/transport/adapters/desktop-uia.js +142 -32
  284. package/dist/transport/adapters/desktop-uia.js.map +1 -1
  285. package/dist/transport/adapters/subprocess.d.ts +7 -0
  286. package/dist/transport/adapters/subprocess.d.ts.map +1 -1
  287. package/dist/transport/adapters/subprocess.js +64 -0
  288. package/dist/transport/adapters/subprocess.js.map +1 -1
  289. package/dist/transport/bus.d.ts +2 -0
  290. package/dist/transport/bus.d.ts.map +1 -1
  291. package/dist/transport/bus.js +7 -11
  292. package/dist/transport/bus.js.map +1 -1
  293. package/dist/transport/capability.d.ts.map +1 -1
  294. package/dist/transport/capability.js +123 -98
  295. package/dist/transport/capability.js.map +1 -1
  296. package/dist/transport/cascade.d.ts +5 -0
  297. package/dist/transport/cascade.d.ts.map +1 -0
  298. package/dist/transport/cascade.js +550 -0
  299. package/dist/transport/cascade.js.map +1 -0
  300. package/dist/transport/cdp-session.d.ts +11 -0
  301. package/dist/transport/cdp-session.d.ts.map +1 -0
  302. package/dist/transport/cdp-session.js +52 -0
  303. package/dist/transport/cdp-session.js.map +1 -0
  304. package/dist/transport/refs.d.ts +51 -0
  305. package/dist/transport/refs.d.ts.map +1 -0
  306. package/dist/transport/refs.js +135 -0
  307. package/dist/transport/refs.js.map +1 -0
  308. package/dist/transport/sidecar-binary.d.ts +18 -0
  309. package/dist/transport/sidecar-binary.d.ts.map +1 -0
  310. package/dist/transport/sidecar-binary.js +55 -0
  311. package/dist/transport/sidecar-binary.js.map +1 -0
  312. package/dist/transport/sidecar.d.ts +35 -0
  313. package/dist/transport/sidecar.d.ts.map +1 -0
  314. package/dist/transport/sidecar.js +134 -0
  315. package/dist/transport/sidecar.js.map +1 -0
  316. package/dist/transport/snapshot-encoder.d.ts +34 -0
  317. package/dist/transport/snapshot-encoder.d.ts.map +1 -0
  318. package/dist/transport/snapshot-encoder.js +139 -0
  319. package/dist/transport/snapshot-encoder.js.map +1 -0
  320. package/dist/transport/types.d.ts +6 -1
  321. package/dist/transport/types.d.ts.map +1 -1
  322. package/dist/types.d.ts +2 -0
  323. package/dist/types.d.ts.map +1 -1
  324. package/dist/types.js.map +1 -1
  325. package/docs/mcp/clients/claude-code.md +29 -0
  326. package/docs/mcp/clients/claude-desktop.md +47 -0
  327. package/docs/mcp/clients/codex.md +29 -0
  328. package/docs/mcp/clients/cursor.md +38 -0
  329. package/docs/mcp/clients/gemini-cli.md +38 -0
  330. package/docs/operate/compute.md +172 -0
  331. package/docs/operate/electron.md +87 -0
  332. package/docs/operate/focus-behavior.md +40 -0
  333. package/docs/operate/troubleshooting.md +379 -0
  334. package/package.json +29 -4
  335. package/src/adapters/juejin/hot.test.ts +25 -0
  336. package/src/adapters/juejin/hot.yaml +52 -0
  337. package/src/adapters/juejin/search.test.ts +27 -0
  338. package/src/adapters/juejin/search.yaml +58 -0
  339. package/src/adapters/leetcode/discuss-search.test.ts +29 -0
  340. package/src/adapters/leetcode/discuss-search.yaml +56 -0
  341. package/src/adapters/macos/actions.ts +63 -0
@@ -0,0 +1,401 @@
1
+ import { existsSync, readFileSync, realpathSync, statSync } from "node:fs";
2
+ import { basename, dirname, join, resolve as pathResolve } from "node:path";
3
+ import { userHome } from "./user-home.js";
4
+ export class PermissionRulesConfigError extends Error {
5
+ code = "invalid_input";
6
+ suggestion = "fix or remove the permission rules file";
7
+ constructor(message) {
8
+ super(message);
9
+ this.name = "PermissionRulesConfigError";
10
+ }
11
+ }
12
+ const ROOT_KEYS = new Set(["schema_version", "rules"]);
13
+ const RULE_KEYS = new Set(["id", "decision", "match", "reason"]);
14
+ const MATCH_KEYS = new Set([
15
+ "site",
16
+ "command",
17
+ "effect",
18
+ "dimensions",
19
+ "resources",
20
+ "resource_summary",
21
+ ]);
22
+ const DIMENSION_KEYS = new Set([
23
+ "network",
24
+ "browser",
25
+ "desktop",
26
+ "file",
27
+ "process",
28
+ "account",
29
+ ]);
30
+ const ACCESS_VALUES = new Set(["none", "read", "write"]);
31
+ const EFFECT_VALUES = new Set([
32
+ "read",
33
+ "send_message",
34
+ "publish_content",
35
+ "account_state",
36
+ "remote_transform",
37
+ "remote_resource",
38
+ "service_state",
39
+ "local_app",
40
+ "local_file",
41
+ "destructive",
42
+ "unknown_write",
43
+ ]);
44
+ const RESOURCE_KEYS = new Set([
45
+ "domains",
46
+ "paths",
47
+ "executables",
48
+ "apps",
49
+ "accounts",
50
+ ]);
51
+ const rulesCache = new Map();
52
+ export function createPermissionRulesStore(options) {
53
+ const envPath = process.env.UNICLI_PERMISSION_RULES_PATH?.trim();
54
+ return {
55
+ path: options?.path ??
56
+ (envPath && envPath.length > 0
57
+ ? envPath
58
+ : join(options?.homeDir ?? userHome(), ".unicli", "permission-rules.json")),
59
+ };
60
+ }
61
+ export async function findDenyRuleForPolicy(policy, options) {
62
+ return findDenyRuleForPolicySync(policy, options);
63
+ }
64
+ export function applyDenyRuleToPolicy(policy, rule) {
65
+ return {
66
+ ...policy,
67
+ approval_required: true,
68
+ approved: false,
69
+ enforcement: "deny",
70
+ reason: `blocked by permission rule "${rule.id}": ${rule.reason}`,
71
+ approval_hint: "edit or remove the matching permission rule",
72
+ deny_rule: {
73
+ id: rule.id,
74
+ reason: rule.reason,
75
+ },
76
+ deny_reason: rule.reason,
77
+ };
78
+ }
79
+ export function findDenyRuleForPolicySync(policy, options) {
80
+ const store = createPermissionRulesStore(options);
81
+ const rules = readRules(store.path);
82
+ const matched = rules.find((rule) => ruleMatchesPolicy(rule, policy));
83
+ if (!matched)
84
+ return undefined;
85
+ return {
86
+ decision: "deny",
87
+ id: matched.id,
88
+ reason: matched.reason,
89
+ };
90
+ }
91
+ export function findDenyRuleForRuntimeResourceSync(input, options) {
92
+ const store = createPermissionRulesStore(options);
93
+ const rules = readRules(store.path);
94
+ const matched = rules.find((rule) => ruleMatchesRuntimeResource(rule, input));
95
+ if (!matched)
96
+ return undefined;
97
+ return {
98
+ decision: "deny",
99
+ id: matched.id,
100
+ reason: matched.reason,
101
+ };
102
+ }
103
+ function readRules(path) {
104
+ let stats;
105
+ try {
106
+ stats = statSync(path);
107
+ }
108
+ catch (error) {
109
+ if (isNodeError(error) && error.code === "ENOENT")
110
+ return [];
111
+ throw new PermissionRulesConfigError(`failed to read permission rules file at ${path}: ${error instanceof Error ? error.message : String(error)}`);
112
+ }
113
+ const cached = rulesCache.get(path);
114
+ if (cached &&
115
+ cached.mtimeMs === stats.mtimeMs &&
116
+ cached.size === stats.size) {
117
+ return cached.rules;
118
+ }
119
+ let raw;
120
+ try {
121
+ raw = readFileSync(path, "utf-8");
122
+ }
123
+ catch (error) {
124
+ throw new PermissionRulesConfigError(`failed to read permission rules file at ${path}: ${error instanceof Error ? error.message : String(error)}`);
125
+ }
126
+ let parsed;
127
+ try {
128
+ parsed = JSON.parse(raw);
129
+ }
130
+ catch (error) {
131
+ throw new PermissionRulesConfigError(`invalid permission rules JSON at ${path}: ${error instanceof Error ? error.message : String(error)}`);
132
+ }
133
+ const rules = parseRulesDocument(parsed, path);
134
+ rulesCache.set(path, { mtimeMs: stats.mtimeMs, size: stats.size, rules });
135
+ return rules;
136
+ }
137
+ function parseRulesDocument(value, path) {
138
+ const root = expectRecord(value, path, "root");
139
+ rejectUnknownKeys(root, ROOT_KEYS, path, "root");
140
+ expectLiteral(root.schema_version, "1", path, "schema_version");
141
+ if (!Array.isArray(root.rules)) {
142
+ throw invalid(path, "rules must be an array");
143
+ }
144
+ return root.rules.map((rule, index) => parseRule(rule, path, index));
145
+ }
146
+ function parseRule(value, path, index) {
147
+ const label = `rules[${index}]`;
148
+ const rule = expectRecord(value, path, label);
149
+ rejectUnknownKeys(rule, RULE_KEYS, path, label);
150
+ const id = expectString(rule.id, path, `${label}.id`);
151
+ if (id.length === 0)
152
+ throw invalid(path, `${label}.id cannot be empty`);
153
+ expectLiteral(rule.decision, "deny", path, `${label}.decision`);
154
+ const match = parseMatch(rule.match, path, `${label}.match`);
155
+ const reason = rule.reason === undefined
156
+ ? `blocked by permission rule ${id}`
157
+ : expectString(rule.reason, path, `${label}.reason`);
158
+ return { id, decision: "deny", match, reason };
159
+ }
160
+ function parseMatch(value, path, label) {
161
+ const match = expectRecord(value, path, label);
162
+ rejectUnknownKeys(match, MATCH_KEYS, path, label);
163
+ const out = {};
164
+ if (match.site !== undefined)
165
+ out.site = expectString(match.site, path, `${label}.site`);
166
+ if (match.command !== undefined) {
167
+ out.command = expectString(match.command, path, `${label}.command`);
168
+ }
169
+ if (match.effect !== undefined) {
170
+ const effect = expectString(match.effect, path, `${label}.effect`);
171
+ if (!EFFECT_VALUES.has(effect)) {
172
+ throw invalid(path, `${label}.effect is not a known operation effect`);
173
+ }
174
+ out.effect = effect;
175
+ }
176
+ if (match.dimensions !== undefined) {
177
+ out.dimensions = parseDimensions(match.dimensions, path, `${label}.dimensions`);
178
+ }
179
+ if (match.resources !== undefined) {
180
+ out.resources = parseResources(match.resources, path, `${label}.resources`);
181
+ }
182
+ if (match.resource_summary !== undefined) {
183
+ out.resource_summary = expectStringArray(match.resource_summary, path, `${label}.resource_summary`);
184
+ }
185
+ return out;
186
+ }
187
+ function parseDimensions(value, path, label) {
188
+ const dimensions = expectRecord(value, path, label);
189
+ const out = {};
190
+ for (const [key, raw] of Object.entries(dimensions)) {
191
+ if (!DIMENSION_KEYS.has(key)) {
192
+ throw invalid(path, `${label}.${key} is not a known capability dimension`);
193
+ }
194
+ const access = expectString(raw, path, `${label}.${key}`);
195
+ if (!ACCESS_VALUES.has(access)) {
196
+ throw invalid(path, `${label}.${key} is not a known access value`);
197
+ }
198
+ out[key] = access;
199
+ }
200
+ return out;
201
+ }
202
+ function parseResources(value, path, label) {
203
+ const resources = expectRecord(value, path, label);
204
+ const out = {};
205
+ for (const [key, raw] of Object.entries(resources)) {
206
+ if (!RESOURCE_KEYS.has(key)) {
207
+ throw invalid(path, `${label}.${key} is not a known resource bucket`);
208
+ }
209
+ out[key] = expectStringArray(raw, path, `${label}.${key}`);
210
+ }
211
+ return out;
212
+ }
213
+ function ruleMatchesPolicy(rule, policy) {
214
+ const match = rule.match;
215
+ const commandRef = commandRefFromPolicy(policy);
216
+ if (match.site !== undefined && match.site !== commandRef.site)
217
+ return false;
218
+ const command = commandRef.command;
219
+ if (match.command !== undefined && match.command !== command)
220
+ return false;
221
+ if (match.effect !== undefined && match.effect !== policy.effect)
222
+ return false;
223
+ if (match.dimensions) {
224
+ for (const [name, access] of Object.entries(match.dimensions)) {
225
+ if (policy.capability_scope.dimensions[name]
226
+ ?.access !== access) {
227
+ return false;
228
+ }
229
+ }
230
+ }
231
+ if (match.resources) {
232
+ for (const [name, values] of Object.entries(match.resources)) {
233
+ const bucket = policy.capability_scope.resources[name] ?? [];
234
+ if (!values.some((value) => bucket.includes(normalizeComparable(value)))) {
235
+ return false;
236
+ }
237
+ }
238
+ }
239
+ if (match.resource_summary) {
240
+ const summary = policy.capability_scope.resource_summary;
241
+ if (!match.resource_summary.some((value) => summary.includes(normalizeComparable(value)))) {
242
+ return false;
243
+ }
244
+ }
245
+ return true;
246
+ }
247
+ function ruleMatchesRuntimeResource(rule, input) {
248
+ const match = rule.match;
249
+ if (match.site !== undefined && match.site !== input.site)
250
+ return false;
251
+ if (match.command !== undefined && match.command !== input.command) {
252
+ return false;
253
+ }
254
+ if (match.effect !== undefined && match.effect !== input.effect) {
255
+ return false;
256
+ }
257
+ if (match.dimensions) {
258
+ for (const [name, access] of Object.entries(match.dimensions)) {
259
+ if (input.dimensions?.[name] !== access) {
260
+ return false;
261
+ }
262
+ }
263
+ }
264
+ if (match.resources) {
265
+ for (const [name, values] of Object.entries(match.resources)) {
266
+ const bucket = input.resources?.[name] ?? [];
267
+ if (!values.some((value) => bucket.some((actual) => runtimeResourceValueMatches(name, value, actual)))) {
268
+ return false;
269
+ }
270
+ }
271
+ }
272
+ if (match.resource_summary) {
273
+ const summary = input.resource_summary ?? [];
274
+ if (!match.resource_summary.some((value) => summary.includes(normalizeComparable(value)))) {
275
+ return false;
276
+ }
277
+ }
278
+ return true;
279
+ }
280
+ function runtimeResourceValueMatches(bucket, ruleValue, actualValue) {
281
+ if (bucket === "domains") {
282
+ const ruleDomain = normalizeDomainComparable(ruleValue);
283
+ const actualDomain = normalizeDomainComparable(actualValue);
284
+ return (actualDomain === ruleDomain || actualDomain.endsWith(`.${ruleDomain}`));
285
+ }
286
+ if (bucket === "paths") {
287
+ const rulePath = normalizePathComparable(ruleValue);
288
+ const actualPath = normalizePathComparable(actualValue);
289
+ return actualPath === rulePath || actualPath.startsWith(`${rulePath}/`);
290
+ }
291
+ if (bucket === "executables") {
292
+ const ruleExecutable = normalizeComparable(ruleValue);
293
+ if (ruleValue.includes("/") || ruleValue.includes("\\")) {
294
+ return normalizeComparable(actualValue) === ruleExecutable;
295
+ }
296
+ return normalizeExecutableComparable(actualValue) === ruleExecutable;
297
+ }
298
+ return normalizeComparable(actualValue) === normalizeComparable(ruleValue);
299
+ }
300
+ function commandRefFromPolicy(policy) {
301
+ const commandRef = policy.approval_memory.key.split(":")[2] ?? "unknown.unknown";
302
+ const lastDot = commandRef.lastIndexOf(".");
303
+ if (lastDot <= 0 || lastDot === commandRef.length - 1) {
304
+ return { site: "unknown", command: "unknown" };
305
+ }
306
+ return {
307
+ site: commandRef.slice(0, lastDot),
308
+ command: commandRef.slice(lastDot + 1),
309
+ };
310
+ }
311
+ function expectRecord(value, path, label) {
312
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
313
+ throw invalid(path, `${label} must be an object`);
314
+ }
315
+ return value;
316
+ }
317
+ function rejectUnknownKeys(value, allowed, path, label) {
318
+ for (const key of Object.keys(value)) {
319
+ if (!allowed.has(key))
320
+ throw invalid(path, `${label}.${key} is not allowed`);
321
+ }
322
+ }
323
+ function expectLiteral(value, expected, path, label) {
324
+ if (value !== expected) {
325
+ throw invalid(path, `${label} must be ${JSON.stringify(expected)}`);
326
+ }
327
+ }
328
+ function expectString(value, path, label) {
329
+ if (typeof value !== "string")
330
+ throw invalid(path, `${label} must be a string`);
331
+ return value.trim();
332
+ }
333
+ function expectStringArray(value, path, label) {
334
+ if (!Array.isArray(value))
335
+ throw invalid(path, `${label} must be an array`);
336
+ const out = value.map((item, index) => expectString(item, path, `${label}[${index}]`));
337
+ if (out.length === 0)
338
+ throw invalid(path, `${label} cannot be empty`);
339
+ return out;
340
+ }
341
+ function normalizeComparable(value) {
342
+ return value.trim().toLowerCase();
343
+ }
344
+ function normalizeDomainComparable(value) {
345
+ const raw = normalizeComparable(value);
346
+ try {
347
+ return stripTrailingDomainDot(new URL(raw.includes("://") ? raw : `https://${raw}`).hostname);
348
+ }
349
+ catch {
350
+ return stripTrailingDomainDot(raw.replace(/^https?:\/\//, "").split("/")[0] ?? raw);
351
+ }
352
+ }
353
+ function stripTrailingDomainDot(value) {
354
+ return value.replace(/\.+$/, "");
355
+ }
356
+ function normalizePathComparable(value) {
357
+ const raw = value.trim().replace(/\\/g, "/");
358
+ if (raw === "/")
359
+ return raw;
360
+ const comparable = isWindowsDrivePath(raw) ? raw : realpathAwarePath(raw);
361
+ return normalizeComparable(comparable.replace(/\\/g, "/").replace(/\/+$/, ""));
362
+ }
363
+ function realpathAwarePath(path) {
364
+ if (!path.startsWith("/"))
365
+ return path;
366
+ const resolved = pathResolve(path);
367
+ const missing = [];
368
+ let current = resolved;
369
+ while (!existsSync(current)) {
370
+ const parent = dirname(current);
371
+ if (parent === current)
372
+ return resolved;
373
+ missing.unshift(basename(current));
374
+ current = parent;
375
+ }
376
+ try {
377
+ const real = realpathSync(current);
378
+ return missing.length > 0 ? join(real, ...missing) : real;
379
+ }
380
+ catch {
381
+ return resolved;
382
+ }
383
+ }
384
+ function isWindowsDrivePath(value) {
385
+ return /^[A-Za-z]:\//.test(value);
386
+ }
387
+ function normalizeExecutableComparable(value) {
388
+ const normalized = value.trim().replace(/\\/g, "/").replace(/\/+$/, "");
389
+ const parts = normalized.split("/").filter(Boolean);
390
+ return normalizeComparable(parts.at(-1) ?? normalized);
391
+ }
392
+ function invalid(path, message) {
393
+ return new PermissionRulesConfigError(`invalid permission rules at ${path}: ${message}`);
394
+ }
395
+ function isNodeError(error) {
396
+ return (typeof error === "object" &&
397
+ error !== null &&
398
+ "code" in error &&
399
+ typeof error.code === "string");
400
+ }
401
+ //# sourceMappingURL=permission-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-rules.js","sourceRoot":"","sources":["../../src/engine/permission-rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type ApprovalStore } from "./approval-store.js";
2
+ import { type OperationPolicy, type OperationPolicyInput } from "./operation-policy.js";
3
+ export interface PermissionRuntimeOptions {
4
+ store?: ApprovalStore;
5
+ rules?: {
6
+ path?: string;
7
+ homeDir?: string;
8
+ };
9
+ }
10
+ export declare function evaluateOperationPolicyWithApprovals(input: OperationPolicyInput, options?: PermissionRuntimeOptions): Promise<OperationPolicy>;
11
+ //# sourceMappingURL=permission-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-runtime.d.ts","sourceRoot":"","sources":["../../src/engine/permission-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAC;AAM/B,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE;QACN,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,wBAAsB,oCAAoC,CACxD,KAAK,EAAE,oBAAoB,EAC3B,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,eAAe,CAAC,CAkB1B"}
@@ -0,0 +1,21 @@
1
+ import { createApprovalStore, findStoredApproval, } from "./approval-store.js";
2
+ import { evaluateOperationPolicy, } from "./operation-policy.js";
3
+ import { applyDenyRuleToPolicy, findDenyRuleForPolicySync, } from "./permission-rules.js";
4
+ export async function evaluateOperationPolicyWithApprovals(input, options = {}) {
5
+ let policy = evaluateOperationPolicy(input);
6
+ const denyRule = findDenyRuleForPolicySync(policy, options.rules);
7
+ if (denyRule)
8
+ return applyDenyRuleToPolicy(policy, denyRule);
9
+ const store = options.store ?? createApprovalStore();
10
+ if (policy.enforcement === "needs_approval") {
11
+ const stored = await findStoredApproval(store, policy.approval_memory.key);
12
+ if (stored) {
13
+ policy = evaluateOperationPolicy({
14
+ ...input,
15
+ approvalSource: "memory",
16
+ });
17
+ }
18
+ }
19
+ return policy;
20
+ }
21
+ //# sourceMappingURL=permission-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-runtime.js","sourceRoot":"","sources":["../../src/engine/permission-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,kBAAkB,GAEnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,uBAAuB,GAGxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAU/B,MAAM,CAAC,KAAK,UAAU,oCAAoC,CACxD,KAA2B,EAC3B,UAAoC,EAAE;IAEtC,IAAI,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,yBAAyB,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAClE,IAAI,QAAQ;QAAE,OAAO,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAE7D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,mBAAmB,EAAE,CAAC;IAErD,IAAI,MAAM,CAAC,WAAW,KAAK,gBAAgB,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC3E,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,GAAG,uBAAuB,CAAC;gBAC/B,GAAG,KAAK;gBACR,cAAc,EAAE,QAAQ;aACzB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { EnvelopeError, EnvelopeRemedy } from "../../core/envelope.js";
2
+ export declare function lookupRemedy(minimumCapability: string | undefined): EnvelopeRemedy | undefined;
3
+ export declare function enrichErrorWithRemedy(error: EnvelopeError): EnvelopeError;
4
+ //# sourceMappingURL=remedies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remedies.d.ts","sourceRoot":"","sources":["../../../src/engine/repair/remedies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AA6J5E,wBAAgB,YAAY,CAC1B,iBAAiB,EAAE,MAAM,GAAG,SAAS,GACpC,cAAc,GAAG,SAAS,CAkB5B;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa,CAIzE"}
@@ -0,0 +1,169 @@
1
+ const REMEDIES = {
2
+ "desktop-uia.binary_missing": {
3
+ message: "Install the Windows UIA sidecar package for this platform.",
4
+ command: "unicli doctor compute --install",
5
+ doc: "docs/operate/troubleshooting.md#desktop-uiabinary_missing",
6
+ },
7
+ "desktop-uia.startup_failed": {
8
+ message: "Inspect the UIA sidecar startup logs and retry with tracing.",
9
+ command: "UNICLI_TRACE=1 unicli doctor compute",
10
+ doc: "docs/operate/troubleshooting.md#desktop-uiastartup_failed",
11
+ },
12
+ "desktop-uia.permission": {
13
+ message: "Run from an elevated terminal or install the sidecar with UIAccess.",
14
+ doc: "docs/operate/troubleshooting.md#desktop-uiapermission",
15
+ },
16
+ "desktop-uia.no_element": {
17
+ message: "The ref is stale; take a fresh compute snapshot and retry.",
18
+ command: "unicli compute snapshot",
19
+ doc: "docs/operate/troubleshooting.md#desktop-uiano_element",
20
+ },
21
+ "desktop-uia.not_invokable": {
22
+ message: "Use set-value or keyboard press for elements without Invoke.",
23
+ doc: "docs/operate/troubleshooting.md#desktop-uianot_invokable",
24
+ },
25
+ "desktop-uia.timeout": {
26
+ message: "Retry the call; the sidecar should restart after a timeout.",
27
+ doc: "docs/operate/troubleshooting.md#desktop-uiatimeout",
28
+ },
29
+ "desktop-uia.sidecar_crashed": {
30
+ message: "Retry once; inspect UIA sidecar startup logs if it repeats.",
31
+ command: "UNICLI_TRACE=1 unicli doctor compute",
32
+ doc: "docs/operate/troubleshooting.md#desktop-uiasidecar_crashed",
33
+ },
34
+ "desktop-atspi.binary_missing": {
35
+ message: "Install the Linux AT-SPI sidecar package for this platform.",
36
+ command: "unicli doctor compute --install",
37
+ doc: "docs/operate/troubleshooting.md#desktop-atspibinary_missing",
38
+ },
39
+ "desktop-atspi.dbus_blocked": {
40
+ message: "Start the user AT-SPI bus daemon.",
41
+ command: "systemctl --user start at-spi-dbus-bus",
42
+ doc: "docs/operate/troubleshooting.md#desktop-atspidbus_blocked",
43
+ },
44
+ "desktop-atspi.no_a11y_attr": {
45
+ message: "Enable accessibility support in the target app and retry.",
46
+ doc: "docs/operate/troubleshooting.md#desktop-atspino_a11y_attr",
47
+ },
48
+ "desktop-atspi.wayland-input": {
49
+ message: "Install a Wayland input helper for fallback key/mouse actions.",
50
+ command: "sudo apt install ydotool",
51
+ doc: "docs/operate/troubleshooting.md#desktop-atspiwayland-input",
52
+ },
53
+ "desktop-atspi.x11-input": {
54
+ message: "Install xdotool for X11 fallback key/mouse actions.",
55
+ command: "sudo apt install xdotool",
56
+ doc: "docs/operate/troubleshooting.md#desktop-atspix11-input",
57
+ },
58
+ "desktop-atspi.no_element": {
59
+ message: "The ref is stale; take a fresh compute snapshot and retry.",
60
+ command: "unicli compute snapshot",
61
+ doc: "docs/operate/troubleshooting.md#desktop-atspino_element",
62
+ },
63
+ "desktop-atspi.sidecar_crashed": {
64
+ message: "Retry once; inspect AT-SPI sidecar startup logs if it repeats.",
65
+ command: "UNICLI_TRACE=1 unicli doctor compute",
66
+ doc: "docs/operate/troubleshooting.md#desktop-atspisidecar_crashed",
67
+ },
68
+ "desktop-ax.permission": {
69
+ message: "Grant macOS Accessibility to the app or terminal launching Uni-CLI.",
70
+ deeplink: "x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility",
71
+ doc: "docs/operate/troubleshooting.md#desktop-axpermission",
72
+ },
73
+ "desktop-ax.screen-recording": {
74
+ message: "Grant macOS Screen Recording for screenshot fallback.",
75
+ deeplink: "x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture",
76
+ doc: "docs/operate/troubleshooting.md#desktop-axscreen-recording",
77
+ },
78
+ "desktop-ax.binary_missing": {
79
+ message: "Install Xcode command line tools so the AX Swift helper can run.",
80
+ command: "xcode-select --install",
81
+ doc: "docs/operate/troubleshooting.md#desktop-axbinary_missing",
82
+ },
83
+ "cdp-browser.attach_failed": {
84
+ message: "Check the CDP port or relaunch the app with remote debugging enabled.",
85
+ doc: "docs/operate/troubleshooting.md#cdp-browserattach_failed",
86
+ },
87
+ "cdp-browser.electron_running_without_debug_port": {
88
+ message: "Launch the Electron app with a remote debugging port.",
89
+ command: "unicli compute launch <app> --debug-port 9229",
90
+ doc: "docs/operate/troubleshooting.md#cdp-browserelectron_running_without_debug_port",
91
+ },
92
+ "cua.no_backend": {
93
+ message: "Configure a CUA backend key for screenshot/VLM fallback.",
94
+ doc: "docs/operate/troubleshooting.md#cuano_backend",
95
+ },
96
+ "compute.compute_find.ref-store": {
97
+ message: "Run a fresh snapshot so refs are available, then retry find.",
98
+ command: "unicli compute snapshot",
99
+ doc: "docs/operate/troubleshooting.md#computecompute_findref-store",
100
+ },
101
+ };
102
+ const COMPUTE_NO_TRANSPORT = {
103
+ message: "Run the compute doctor to identify the blocked transport.",
104
+ command: "unicli doctor compute",
105
+ doc: "docs/operate/troubleshooting.md#computestepno-transport-available",
106
+ };
107
+ const COMPUTE_EDGE_REMEDIES = {
108
+ element_off_screen: {
109
+ message: "Scroll the element into view or take a fresh snapshot.",
110
+ command: "unicli compute snapshot",
111
+ doc: "docs/operate/troubleshooting.md#computestepelement_off_screen",
112
+ },
113
+ window_minimized: {
114
+ message: "Restore or focus the target window before retrying.",
115
+ doc: "docs/operate/troubleshooting.md#computestepwindow_minimized",
116
+ },
117
+ element_disabled: {
118
+ message: "Wait for the element to become enabled, then retry.",
119
+ command: "unicli compute wait --state enabled",
120
+ doc: "docs/operate/troubleshooting.md#computestepelement_disabled",
121
+ },
122
+ ref_expired: {
123
+ message: "The ref expired; take a fresh snapshot and retry.",
124
+ command: "unicli compute snapshot",
125
+ doc: "docs/operate/troubleshooting.md#computestepref_expired",
126
+ },
127
+ sidecar_crashed: {
128
+ message: "Retry once; the sidecar should restart before the next call.",
129
+ command: "UNICLI_TRACE=1 unicli doctor compute",
130
+ doc: "docs/operate/troubleshooting.md#computestepsidecar_crashed",
131
+ },
132
+ sidecar_busy: {
133
+ message: "Retry after the current sidecar call completes.",
134
+ doc: "docs/operate/troubleshooting.md#computestepsidecar_busy",
135
+ },
136
+ app_ambiguous: {
137
+ message: "Disambiguate the target by bundle id, process name, pid, or window id.",
138
+ command: "unicli compute windows --app <name>",
139
+ doc: "docs/operate/troubleshooting.md#computestepapp_ambiguous",
140
+ },
141
+ focus_required: {
142
+ message: "Retry with explicit focus only if background control is impossible.",
143
+ doc: "docs/operate/troubleshooting.md#computestepfocus_required",
144
+ },
145
+ };
146
+ export function lookupRemedy(minimumCapability) {
147
+ if (!minimumCapability)
148
+ return undefined;
149
+ if (minimumCapability in REMEDIES)
150
+ return REMEDIES[minimumCapability];
151
+ if (minimumCapability.startsWith("compute.") &&
152
+ minimumCapability.endsWith(".no-transport-available")) {
153
+ return COMPUTE_NO_TRANSPORT;
154
+ }
155
+ const edgeKey = minimumCapability.split(".").at(-1);
156
+ if (minimumCapability.startsWith("compute.") &&
157
+ edgeKey &&
158
+ edgeKey in COMPUTE_EDGE_REMEDIES) {
159
+ return COMPUTE_EDGE_REMEDIES[edgeKey];
160
+ }
161
+ return undefined;
162
+ }
163
+ export function enrichErrorWithRemedy(error) {
164
+ if (error.remedy)
165
+ return error;
166
+ const remedy = lookupRemedy(error.minimum_capability);
167
+ return remedy ? { ...error, remedy } : error;
168
+ }
169
+ //# sourceMappingURL=remedies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remedies.js","sourceRoot":"","sources":["../../../src/engine/repair/remedies.ts"],"names":[],"mappings":"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"}