@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,364 @@
1
+ /**
2
+ * User-selectable operation policy.
3
+ *
4
+ * Adapter metadata stays open by default. This layer classifies likely side
5
+ * effects from the command contract and lets users opt into stricter approval
6
+ * profiles without forcing every adapter author to pre-label privacy.
7
+ */
8
+ import { AdapterType } from "../types.js";
9
+ import { buildCapabilityApprovalMemory, deriveCapabilityScope, } from "./capability-policy.js";
10
+ export class InvalidPermissionProfileError extends Error {
11
+ constructor(profile) {
12
+ super(`invalid permission profile "${profile}"; expected one of: open, confirm, locked`);
13
+ this.name = "InvalidPermissionProfileError";
14
+ }
15
+ }
16
+ const OPEN_PROFILES = new Set(["open", "confirm", "locked"]);
17
+ const MESSAGE_TOKENS = new Set([
18
+ "ask",
19
+ "dm",
20
+ "greet",
21
+ "mail-send",
22
+ "messages-send",
23
+ "reply",
24
+ "reply-dm",
25
+ "send",
26
+ ]);
27
+ const PUBLISH_TOKENS = new Set([
28
+ "comment",
29
+ "create-draft",
30
+ "draft",
31
+ "post",
32
+ "publish",
33
+ "reel",
34
+ "repost",
35
+ "story",
36
+ "tweet",
37
+ ]);
38
+ const ACCOUNT_STATE_TOKENS = new Set([
39
+ "accept",
40
+ "add-friend",
41
+ "block",
42
+ "bookmark",
43
+ "coin",
44
+ "follow",
45
+ "hide-reply",
46
+ "like",
47
+ "list-add",
48
+ "list-remove",
49
+ "mute",
50
+ "pin",
51
+ "rate",
52
+ "save",
53
+ "subscribe",
54
+ "unblock",
55
+ "unbookmark",
56
+ "unfollow",
57
+ "unlike",
58
+ "unmute",
59
+ "unsave",
60
+ "upvote",
61
+ "vote",
62
+ ]);
63
+ const DESTRUCTIVE_EXACT_COMMANDS = new Set([
64
+ "delete",
65
+ "delete-stub",
66
+ "destroy",
67
+ "empty-trash",
68
+ "rm",
69
+ "reset",
70
+ "trash",
71
+ ]);
72
+ const DESTRUCTIVE_PIECES = new Set(["delete", "destroy", "reset", "trash"]);
73
+ const REMOTE_TRANSFORM_TOKENS = new Set([
74
+ "background",
75
+ "face-swap",
76
+ "object-remover",
77
+ "remove-bg",
78
+ "restore",
79
+ "try-on",
80
+ "upscale",
81
+ ]);
82
+ const SERVICE_STATE_TOKENS = new Set([
83
+ "add",
84
+ "create",
85
+ "create-stub",
86
+ "set",
87
+ "update",
88
+ ]);
89
+ const REMOTE_RESOURCE_TOKENS = new Set([
90
+ "copy",
91
+ "create",
92
+ "issue-create",
93
+ "mkdir",
94
+ "move",
95
+ "mv",
96
+ "rename",
97
+ ]);
98
+ const REMOTE_WEB_STRATEGIES = new Set([
99
+ "public",
100
+ "cookie",
101
+ "header",
102
+ "intercept",
103
+ "ui",
104
+ ]);
105
+ const LOCAL_APP_TOKENS = new Set([
106
+ "calendar-create",
107
+ "click-text",
108
+ "do-not-disturb",
109
+ "lock-screen",
110
+ "model",
111
+ "new",
112
+ "notify",
113
+ "open",
114
+ "open-app",
115
+ "press",
116
+ "reminder-create",
117
+ "reminders-complete",
118
+ "screen-lock",
119
+ "shortcuts-run",
120
+ "sleep",
121
+ "type-text",
122
+ "wallpaper",
123
+ ]);
124
+ const LOCAL_FILE_TOKENS = new Set([
125
+ "clipboard",
126
+ "convert",
127
+ "export",
128
+ "extract-audio",
129
+ "finder-copy",
130
+ "finder-move",
131
+ "finder-new-folder",
132
+ "gif",
133
+ "import",
134
+ "normalize",
135
+ "print",
136
+ "resize",
137
+ "render",
138
+ "screen-recording",
139
+ "screenshot",
140
+ "thumbnail",
141
+ "trim",
142
+ "upload",
143
+ ]);
144
+ const CONTENT_ARG_NAMES = new Set([
145
+ "body",
146
+ "content",
147
+ "message",
148
+ "notes",
149
+ "prompt",
150
+ "subject",
151
+ "text",
152
+ "title",
153
+ "draft",
154
+ ]);
155
+ function commandTokens(site, command) {
156
+ const raw = `${site}-${command}`.toLowerCase();
157
+ const pieces = raw.split(/[^a-z0-9]+/).filter(Boolean);
158
+ return new Set([raw, command.toLowerCase(), ...pieces]);
159
+ }
160
+ function hasAny(tokens, candidates) {
161
+ for (const candidate of candidates) {
162
+ if (tokens.has(candidate))
163
+ return true;
164
+ }
165
+ return false;
166
+ }
167
+ function hasContentArg(args = []) {
168
+ return args.some((arg) => CONTENT_ARG_NAMES.has(arg.name.toLowerCase()));
169
+ }
170
+ function normalizedDescription(input) {
171
+ return (input.description ?? "").trim().toLowerCase();
172
+ }
173
+ function looksReadOnlyCommand(input) {
174
+ const description = normalizedDescription(input);
175
+ if (!/^(dump|fetch|get|inspect|list|read|search|show)\b/.test(description)) {
176
+ return false;
177
+ }
178
+ return !hasContentArg(input.args);
179
+ }
180
+ function isExplicitLocalSurface(surface) {
181
+ return surface === "desktop" || surface === "system";
182
+ }
183
+ function isRemoteWebSurface(input) {
184
+ if (input.adapterType === AdapterType.BRIDGE ||
185
+ input.adapterType === AdapterType.DESKTOP ||
186
+ input.adapterType === AdapterType.SERVICE ||
187
+ isExplicitLocalSurface(input.targetSurface)) {
188
+ return false;
189
+ }
190
+ return ((input.targetSurface === undefined && input.adapterType === undefined) ||
191
+ input.targetSurface === "web" ||
192
+ input.targetSurface === "mobile" ||
193
+ input.adapterType === AdapterType.WEB_API ||
194
+ input.adapterType === AdapterType.BROWSER ||
195
+ input.browser === true ||
196
+ (input.strategy !== undefined && REMOTE_WEB_STRATEGIES.has(input.strategy)));
197
+ }
198
+ function hasDestructiveIntent(input, tokens) {
199
+ const command = input.command.toLowerCase();
200
+ const description = normalizedDescription(input);
201
+ return (DESTRUCTIVE_EXACT_COMMANDS.has(command) ||
202
+ hasAny(tokens, DESTRUCTIVE_EXACT_COMMANDS) ||
203
+ hasAny(tokens, DESTRUCTIVE_PIECES) ||
204
+ /^(delete|remove|clear)\b/.test(description));
205
+ }
206
+ function looksMessageCommand(input, tokens) {
207
+ const description = normalizedDescription(input);
208
+ return ((hasAny(tokens, MESSAGE_TOKENS) && hasContentArg(input.args)) ||
209
+ /^(send|greet|batch greet)\b/.test(description));
210
+ }
211
+ function looksPublishCommand(input, tokens) {
212
+ const description = normalizedDescription(input);
213
+ return ((hasAny(tokens, PUBLISH_TOKENS) && hasContentArg(input.args)) ||
214
+ /^(post|publish|repost)\b/.test(description) ||
215
+ /^create\b.*\b(post|article draft|draft)\b/.test(description) ||
216
+ /^upload\b.*\bdraft\b/.test(description) ||
217
+ /^submit\b.*\bvenue\b/.test(description));
218
+ }
219
+ function looksRemoteTransformCommand(input, tokens) {
220
+ const description = normalizedDescription(input);
221
+ return (isRemoteWebSurface(input) &&
222
+ (hasAny(tokens, REMOTE_TRANSFORM_TOKENS) ||
223
+ /^generate\b.*\bimage\b/.test(description) ||
224
+ /^submit\b.*\b(ai review|feedback)\b/.test(description)));
225
+ }
226
+ function looksServiceStateMutation(input, tokens) {
227
+ const description = normalizedDescription(input);
228
+ return (input.adapterType === AdapterType.SERVICE &&
229
+ (hasDestructiveIntent(input, tokens) ||
230
+ hasAny(tokens, SERVICE_STATE_TOKENS) ||
231
+ /^(add|create|set|update)\b/.test(description)));
232
+ }
233
+ function looksRemoteResourceCommand(input, tokens) {
234
+ const description = normalizedDescription(input);
235
+ return (isRemoteWebSurface(input) &&
236
+ (hasAny(tokens, REMOTE_RESOURCE_TOKENS) ||
237
+ /^(copy|create|move|rename|save|submit)\b/.test(description)));
238
+ }
239
+ function isTargetSurface(value) {
240
+ return (value === "web" ||
241
+ value === "desktop" ||
242
+ value === "system" ||
243
+ value === "mobile");
244
+ }
245
+ export function resolvePermissionProfile(value) {
246
+ const configured = value ?? process.env.UNICLI_PERMISSION_PROFILE;
247
+ if (configured === undefined || configured.trim() === "")
248
+ return "open";
249
+ const raw = configured.trim().toLowerCase();
250
+ if (OPEN_PROFILES.has(raw)) {
251
+ return raw;
252
+ }
253
+ throw new InvalidPermissionProfileError(configured);
254
+ }
255
+ export function resolveOperationTargetSurface(input) {
256
+ if (isTargetSurface(input.targetSurface))
257
+ return input.targetSurface;
258
+ switch (input.adapterType) {
259
+ case AdapterType.DESKTOP:
260
+ return "desktop";
261
+ case AdapterType.BRIDGE:
262
+ case AdapterType.SERVICE:
263
+ return "system";
264
+ default:
265
+ return "web";
266
+ }
267
+ }
268
+ export function resolveOperationAdapterPath(site, command, adapterPath) {
269
+ return adapterPath ?? `src/adapters/${site}/${command}.yaml`;
270
+ }
271
+ export function inferOperationEffect(input) {
272
+ const tokens = commandTokens(input.site, input.command);
273
+ if (looksReadOnlyCommand(input))
274
+ return "read";
275
+ if (hasAny(tokens, ACCOUNT_STATE_TOKENS))
276
+ return "account_state";
277
+ if (looksMessageCommand(input, tokens))
278
+ return "send_message";
279
+ if (looksPublishCommand(input, tokens))
280
+ return "publish_content";
281
+ if (looksRemoteTransformCommand(input, tokens))
282
+ return "remote_transform";
283
+ if (looksServiceStateMutation(input, tokens))
284
+ return "service_state";
285
+ if (hasDestructiveIntent(input, tokens))
286
+ return "destructive";
287
+ if (looksRemoteResourceCommand(input, tokens))
288
+ return "remote_resource";
289
+ if (hasAny(tokens, LOCAL_APP_TOKENS))
290
+ return "local_app";
291
+ if (input.adapterType === AdapterType.DESKTOP ||
292
+ hasAny(tokens, LOCAL_FILE_TOKENS)) {
293
+ return "local_file";
294
+ }
295
+ return "read";
296
+ }
297
+ export function riskForEffect(effect) {
298
+ switch (effect) {
299
+ case "read":
300
+ return "low";
301
+ case "account_state":
302
+ case "remote_transform":
303
+ case "remote_resource":
304
+ case "local_app":
305
+ case "local_file":
306
+ case "unknown_write":
307
+ return "medium";
308
+ case "destructive":
309
+ case "service_state":
310
+ case "publish_content":
311
+ case "send_message":
312
+ return "high";
313
+ default:
314
+ return "none";
315
+ }
316
+ }
317
+ function approvalRequired(profile, risk) {
318
+ if (profile === "open")
319
+ return false;
320
+ if (profile === "confirm")
321
+ return risk === "high";
322
+ return risk === "medium" || risk === "high";
323
+ }
324
+ export function evaluateOperationPolicy(input) {
325
+ const profile = resolvePermissionProfile(input.profile);
326
+ const effect = inferOperationEffect(input);
327
+ const risk = riskForEffect(effect);
328
+ const envApproved = process.env.UNICLI_APPROVE === "1";
329
+ const approvalSource = input.approvalSource ??
330
+ (input.approved === true ? "invocation" : envApproved ? "env" : "none");
331
+ const approved = input.approved === true || envApproved || approvalSource === "memory";
332
+ const approval_required = approvalRequired(profile, risk);
333
+ const enforcement = approval_required && !approved ? "needs_approval" : "allow";
334
+ const capability_scope = deriveCapabilityScope(input, effect);
335
+ const approval_memory = buildCapabilityApprovalMemory({
336
+ site: input.site,
337
+ command: input.command,
338
+ profile,
339
+ effect,
340
+ approved,
341
+ approvalSource,
342
+ scope: capability_scope,
343
+ });
344
+ const reason = effect === "read"
345
+ ? "classified as read-only by command contract"
346
+ : `classified as ${effect.replaceAll("_", " ")} with ${risk} risk`;
347
+ return {
348
+ profile,
349
+ effect,
350
+ risk,
351
+ capability_scope,
352
+ approval_memory,
353
+ approval_required,
354
+ approved,
355
+ enforcement,
356
+ reason,
357
+ ...(enforcement === "needs_approval"
358
+ ? {
359
+ approval_hint: "rerun with --yes, add --remember-approval to persist this command scope, set UNICLI_APPROVE=1, or use --permission-profile open",
360
+ }
361
+ : {}),
362
+ };
363
+ }
364
+ //# sourceMappingURL=operation-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-policy.js","sourceRoot":"","sources":["../../src/engine/operation-policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { CapabilityAccess, CapabilityDimensionName, CapabilityResourceScope } from "./capability-policy.js";
2
+ import type { OperationEffect, OperationPolicy } from "./operation-policy.js";
3
+ export interface PermissionRuleMatchResult {
4
+ decision: "deny";
5
+ id: string;
6
+ reason: string;
7
+ }
8
+ export declare class PermissionRulesConfigError extends Error {
9
+ readonly code = "invalid_input";
10
+ readonly suggestion = "fix or remove the permission rules file";
11
+ constructor(message: string);
12
+ }
13
+ interface PermissionRulesStore {
14
+ path: string;
15
+ }
16
+ type ResourceBucketName = keyof CapabilityResourceScope;
17
+ export interface RuntimeResourceCheckInput {
18
+ site?: string;
19
+ command?: string;
20
+ effect?: OperationEffect;
21
+ dimensions?: Partial<Record<CapabilityDimensionName, CapabilityAccess>>;
22
+ resources?: Partial<Record<ResourceBucketName, string[]>>;
23
+ resource_summary?: string[];
24
+ }
25
+ export declare function createPermissionRulesStore(options?: {
26
+ path?: string;
27
+ homeDir?: string;
28
+ }): PermissionRulesStore;
29
+ export declare function findDenyRuleForPolicy(policy: OperationPolicy, options?: {
30
+ path?: string;
31
+ homeDir?: string;
32
+ }): Promise<PermissionRuleMatchResult | undefined>;
33
+ export declare function applyDenyRuleToPolicy(policy: OperationPolicy, rule: PermissionRuleMatchResult): OperationPolicy;
34
+ export declare function findDenyRuleForPolicySync(policy: OperationPolicy, options?: {
35
+ path?: string;
36
+ homeDir?: string;
37
+ }): PermissionRuleMatchResult | undefined;
38
+ export declare function findDenyRuleForRuntimeResourceSync(input: RuntimeResourceCheckInput, options?: {
39
+ path?: string;
40
+ homeDir?: string;
41
+ }): PermissionRuleMatchResult | undefined;
42
+ export {};
43
+ //# sourceMappingURL=permission-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-rules.d.ts","sourceRoot":"","sources":["../../src/engine/permission-rules.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG9E,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,QAAQ,CAAC,IAAI,mBAAmB;IAChC,QAAQ,CAAC,UAAU,6CAA6C;gBAEpD,OAAO,EAAE,MAAM;CAI5B;AAED,UAAU,oBAAoB;IAC5B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,KAAK,kBAAkB,GAAG,MAAM,uBAAuB,CAAC;AAExD,MAAM,WAAW,yBAAyB;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,uBAAuB,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACxE,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC1D,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AA+DD,wBAAgB,0BAA0B,CAAC,OAAO,CAAC,EAAE;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,oBAAoB,CAavB;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,eAAe,EACvB,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC,CAEhD;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,yBAAyB,GAC9B,eAAe,CAcjB;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,eAAe,EACvB,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C,yBAAyB,GAAG,SAAS,CAUvC;AAED,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,yBAAyB,EAChC,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C,yBAAyB,GAAG,SAAS,CAUvC"}