@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.
- package/AGENTS.md +7 -6
- package/README.md +67 -19
- package/README.zh-CN.md +44 -16
- package/crates/unicli-atspi/Cargo.toml +47 -0
- package/crates/unicli-atspi/README.md +6 -0
- package/crates/unicli-atspi/src/errors.rs +213 -0
- package/crates/unicli-atspi/src/input.rs +1004 -0
- package/crates/unicli-atspi/src/invoke.rs +1132 -0
- package/crates/unicli-atspi/src/main.rs +130 -0
- package/crates/unicli-atspi/src/refs.rs +24 -0
- package/crates/unicli-atspi/src/screenshot.rs +756 -0
- package/crates/unicli-atspi/src/tree.rs +2319 -0
- package/crates/unicli-shared/Cargo.toml +13 -0
- package/crates/unicli-shared/src/lib.rs +77 -0
- package/crates/unicli-uia/Cargo.toml +29 -0
- package/crates/unicli-uia/README.md +6 -0
- package/crates/unicli-uia/src/errors.rs +179 -0
- package/crates/unicli-uia/src/input.rs +790 -0
- package/crates/unicli-uia/src/invoke.rs +977 -0
- package/crates/unicli-uia/src/main.rs +130 -0
- package/crates/unicli-uia/src/refs.rs +24 -0
- package/crates/unicli-uia/src/screenshot.rs +685 -0
- package/crates/unicli-uia/src/tree.rs +2135 -0
- package/dist/adapters/_electron/desktop-shared.d.ts.map +1 -1
- package/dist/adapters/_electron/desktop-shared.js +13 -0
- package/dist/adapters/_electron/desktop-shared.js.map +1 -1
- package/dist/adapters/_electron/shared.d.ts +1 -0
- package/dist/adapters/_electron/shared.d.ts.map +1 -1
- package/dist/adapters/_electron/shared.js +49 -2
- package/dist/adapters/_electron/shared.js.map +1 -1
- package/dist/adapters/macos/actions.d.ts +9 -0
- package/dist/adapters/macos/actions.d.ts.map +1 -0
- package/dist/adapters/macos/actions.js +55 -0
- package/dist/adapters/macos/actions.js.map +1 -0
- package/dist/browser/bridge.d.ts +5 -1
- package/dist/browser/bridge.d.ts.map +1 -1
- package/dist/browser/bridge.js +86 -23
- package/dist/browser/bridge.js.map +1 -1
- package/dist/browser/cdp-client.d.ts +2 -0
- package/dist/browser/cdp-client.d.ts.map +1 -1
- package/dist/browser/cdp-client.js +7 -0
- package/dist/browser/cdp-client.js.map +1 -1
- package/dist/browser/page.d.ts +2 -0
- package/dist/browser/page.d.ts.map +1 -1
- package/dist/browser/page.js +35 -0
- package/dist/browser/page.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +17 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/approvals.d.ts +3 -0
- package/dist/commands/approvals.d.ts.map +1 -0
- package/dist/commands/approvals.js +123 -0
- package/dist/commands/approvals.js.map +1 -0
- package/dist/commands/browser-operator-runtime.d.ts.map +1 -1
- package/dist/commands/browser-operator-runtime.js +5 -2
- package/dist/commands/browser-operator-runtime.js.map +1 -1
- package/dist/commands/browser-operator.d.ts.map +1 -1
- package/dist/commands/browser-operator.js +182 -38
- package/dist/commands/browser-operator.js.map +1 -1
- package/dist/commands/compute.d.ts +3 -0
- package/dist/commands/compute.d.ts.map +1 -0
- package/dist/commands/compute.js +324 -0
- package/dist/commands/compute.js.map +1 -0
- package/dist/commands/describe.d.ts.map +1 -1
- package/dist/commands/describe.js +20 -1
- package/dist/commands/describe.js.map +1 -1
- package/dist/commands/dispatch.d.ts +3 -0
- package/dist/commands/dispatch.d.ts.map +1 -1
- package/dist/commands/dispatch.js +76 -4
- package/dist/commands/dispatch.js.map +1 -1
- package/dist/commands/doctor-compute.d.ts +38 -0
- package/dist/commands/doctor-compute.d.ts.map +1 -0
- package/dist/commands/doctor-compute.js +376 -0
- package/dist/commands/doctor-compute.js.map +1 -0
- package/dist/commands/lint.d.ts.map +1 -1
- package/dist/commands/lint.js +69 -1
- package/dist/commands/lint.js.map +1 -1
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +4 -0
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/runs.d.ts +3 -0
- package/dist/commands/runs.d.ts.map +1 -0
- package/dist/commands/runs.js +367 -0
- package/dist/commands/runs.js.map +1 -0
- package/dist/core/envelope.d.ts +8 -0
- package/dist/core/envelope.d.ts.map +1 -1
- package/dist/core/envelope.js +1 -0
- package/dist/core/envelope.js.map +1 -1
- package/dist/core/schema-v2.d.ts +2 -2
- package/dist/discovery/aliases.d.ts.map +1 -1
- package/dist/discovery/aliases.js +15 -0
- package/dist/discovery/aliases.js.map +1 -1
- package/dist/discovery/loader.d.ts.map +1 -1
- package/dist/discovery/loader.js +11 -0
- package/dist/discovery/loader.js.map +1 -1
- package/dist/discovery/macos-dynamic.d.ts +58 -0
- package/dist/discovery/macos-dynamic.d.ts.map +1 -0
- package/dist/discovery/macos-dynamic.js +429 -0
- package/dist/discovery/macos-dynamic.js.map +1 -0
- package/dist/discovery/search.d.ts.map +1 -1
- package/dist/discovery/search.js +152 -3
- package/dist/discovery/search.js.map +1 -1
- package/dist/electron-apps.d.ts +1 -0
- package/dist/electron-apps.d.ts.map +1 -1
- package/dist/electron-apps.js +1 -0
- package/dist/electron-apps.js.map +1 -1
- package/dist/engine/approval-store.d.ts +43 -0
- package/dist/engine/approval-store.d.ts.map +1 -0
- package/dist/engine/approval-store.js +193 -0
- package/dist/engine/approval-store.js.map +1 -0
- package/dist/engine/browser/action-evidence.d.ts +30 -0
- package/dist/engine/browser/action-evidence.d.ts.map +1 -0
- package/dist/engine/browser/action-evidence.js +354 -0
- package/dist/engine/browser/action-evidence.js.map +1 -0
- package/dist/engine/browser/evidence.d.ts +85 -0
- package/dist/engine/browser/evidence.d.ts.map +1 -0
- package/dist/engine/browser/evidence.js +373 -0
- package/dist/engine/browser/evidence.js.map +1 -0
- package/dist/engine/browser/session-lease.d.ts +53 -0
- package/dist/engine/browser/session-lease.d.ts.map +1 -0
- package/dist/engine/browser/session-lease.js +100 -0
- package/dist/engine/browser/session-lease.js.map +1 -0
- package/dist/engine/browser/session-lock.d.ts +17 -0
- package/dist/engine/browser/session-lock.d.ts.map +1 -0
- package/dist/engine/browser/session-lock.js +114 -0
- package/dist/engine/browser/session-lock.js.map +1 -0
- package/dist/engine/browser/session-runtime.d.ts +10 -0
- package/dist/engine/browser/session-runtime.d.ts.map +1 -0
- package/dist/engine/browser/session-runtime.js +87 -0
- package/dist/engine/browser/session-runtime.js.map +1 -0
- package/dist/engine/capability-policy.d.ts +50 -0
- package/dist/engine/capability-policy.d.ts.map +1 -0
- package/dist/engine/capability-policy.js +305 -0
- package/dist/engine/capability-policy.js.map +1 -0
- package/dist/engine/executor.d.ts +8 -3
- package/dist/engine/executor.d.ts.map +1 -1
- package/dist/engine/executor.js +9 -2
- package/dist/engine/executor.js.map +1 -1
- package/dist/engine/kernel/execute.d.ts +5 -1
- package/dist/engine/kernel/execute.d.ts.map +1 -1
- package/dist/engine/kernel/execute.js +215 -11
- package/dist/engine/kernel/execute.js.map +1 -1
- package/dist/engine/kernel/types.d.ts +15 -0
- package/dist/engine/kernel/types.d.ts.map +1 -1
- package/dist/engine/operation-policy.d.ts +60 -0
- package/dist/engine/operation-policy.d.ts.map +1 -0
- package/dist/engine/operation-policy.js +364 -0
- package/dist/engine/operation-policy.js.map +1 -0
- package/dist/engine/permission-rules.d.ts +43 -0
- package/dist/engine/permission-rules.d.ts.map +1 -0
- package/dist/engine/permission-rules.js +401 -0
- package/dist/engine/permission-rules.js.map +1 -0
- package/dist/engine/permission-runtime.d.ts +11 -0
- package/dist/engine/permission-runtime.d.ts.map +1 -0
- package/dist/engine/permission-runtime.js +21 -0
- package/dist/engine/permission-runtime.js.map +1 -0
- package/dist/engine/repair/remedies.d.ts +4 -0
- package/dist/engine/repair/remedies.d.ts.map +1 -0
- package/dist/engine/repair/remedies.js +169 -0
- package/dist/engine/repair/remedies.js.map +1 -0
- package/dist/engine/runtime-resource-guard.d.ts +23 -0
- package/dist/engine/runtime-resource-guard.d.ts.map +1 -0
- package/dist/engine/runtime-resource-guard.js +85 -0
- package/dist/engine/runtime-resource-guard.js.map +1 -0
- package/dist/engine/session/args.d.ts +3 -0
- package/dist/engine/session/args.d.ts.map +1 -0
- package/dist/engine/session/args.js +17 -0
- package/dist/engine/session/args.js.map +1 -0
- package/dist/engine/session/compare.d.ts +92 -0
- package/dist/engine/session/compare.d.ts.map +1 -0
- package/dist/engine/session/compare.js +324 -0
- package/dist/engine/session/compare.js.map +1 -0
- package/dist/engine/session/environment.d.ts +4 -0
- package/dist/engine/session/environment.d.ts.map +1 -0
- package/dist/engine/session/environment.js +25 -0
- package/dist/engine/session/environment.js.map +1 -0
- package/dist/engine/session/events.d.ts +24 -0
- package/dist/engine/session/events.d.ts.map +1 -0
- package/dist/engine/session/events.js +78 -0
- package/dist/engine/session/events.js.map +1 -0
- package/dist/engine/session/query.d.ts +47 -0
- package/dist/engine/session/query.d.ts.map +1 -0
- package/dist/engine/session/query.js +299 -0
- package/dist/engine/session/query.js.map +1 -0
- package/dist/engine/session/replay.d.ts +35 -0
- package/dist/engine/session/replay.d.ts.map +1 -0
- package/dist/engine/session/replay.js +144 -0
- package/dist/engine/session/replay.js.map +1 -0
- package/dist/engine/session/run-loop.d.ts +11 -0
- package/dist/engine/session/run-loop.d.ts.map +1 -0
- package/dist/engine/session/run-loop.js +212 -0
- package/dist/engine/session/run-loop.js.map +1 -0
- package/dist/engine/session/store.d.ts +26 -0
- package/dist/engine/session/store.d.ts.map +1 -0
- package/dist/engine/session/store.js +214 -0
- package/dist/engine/session/store.js.map +1 -0
- package/dist/engine/session/types.d.ts +39 -0
- package/dist/engine/session/types.d.ts.map +1 -0
- package/dist/engine/session/types.js +2 -0
- package/dist/engine/session/types.js.map +1 -0
- package/dist/engine/steps/compute.d.ts +41 -0
- package/dist/engine/steps/compute.d.ts.map +1 -0
- package/dist/engine/steps/compute.js +55 -0
- package/dist/engine/steps/compute.js.map +1 -0
- package/dist/engine/steps/desktop-ax.d.ts +8 -0
- package/dist/engine/steps/desktop-ax.d.ts.map +1 -1
- package/dist/engine/steps/desktop-ax.js +16 -0
- package/dist/engine/steps/desktop-ax.js.map +1 -1
- package/dist/engine/steps/desktop-sidecar.d.ts +49 -0
- package/dist/engine/steps/desktop-sidecar.d.ts.map +1 -0
- package/dist/engine/steps/desktop-sidecar.js +50 -0
- package/dist/engine/steps/desktop-sidecar.js.map +1 -0
- package/dist/engine/steps/download.d.ts +1 -1
- package/dist/engine/steps/download.d.ts.map +1 -1
- package/dist/engine/steps/download.js +24 -2
- package/dist/engine/steps/download.js.map +1 -1
- package/dist/engine/steps/exec.d.ts +1 -1
- package/dist/engine/steps/exec.d.ts.map +1 -1
- package/dist/engine/steps/exec.js +23 -7
- package/dist/engine/steps/exec.js.map +1 -1
- package/dist/engine/steps/fetch-text.d.ts +2 -2
- package/dist/engine/steps/fetch-text.d.ts.map +1 -1
- package/dist/engine/steps/fetch-text.js +61 -19
- package/dist/engine/steps/fetch-text.js.map +1 -1
- package/dist/engine/steps/fetch.d.ts +3 -1
- package/dist/engine/steps/fetch.d.ts.map +1 -1
- package/dist/engine/steps/fetch.js +36 -7
- package/dist/engine/steps/fetch.js.map +1 -1
- package/dist/engine/steps/index.d.ts +2 -0
- package/dist/engine/steps/index.d.ts.map +1 -1
- package/dist/engine/steps/index.js +2 -0
- package/dist/engine/steps/index.js.map +1 -1
- package/dist/engine/steps/navigate.d.ts +1 -1
- package/dist/engine/steps/navigate.d.ts.map +1 -1
- package/dist/engine/steps/navigate.js +29 -2
- package/dist/engine/steps/navigate.js.map +1 -1
- package/dist/engine/steps/parse-rss.d.ts.map +1 -1
- package/dist/engine/steps/parse-rss.js +9 -4
- package/dist/engine/steps/parse-rss.js.map +1 -1
- package/dist/engine/template.d.ts.map +1 -1
- package/dist/engine/template.js +2 -1
- package/dist/engine/template.js.map +1 -1
- package/dist/engine/text-normalize.d.ts +6 -0
- package/dist/engine/text-normalize.d.ts.map +1 -0
- package/dist/engine/text-normalize.js +63 -0
- package/dist/engine/text-normalize.js.map +1 -0
- package/dist/fast-path.d.ts.map +1 -1
- package/dist/fast-path.js +291 -8
- package/dist/fast-path.js.map +1 -1
- package/dist/main.d.ts +1 -1
- package/dist/main.js +1 -1
- package/dist/manifest-compact.txt +2 -2
- package/dist/manifest-search.json +1 -1
- package/dist/manifest.json +4313 -533
- package/dist/mcp/dispatch.d.ts +3 -3
- package/dist/mcp/dispatch.d.ts.map +1 -1
- package/dist/mcp/dispatch.js +6 -5
- package/dist/mcp/dispatch.js.map +1 -1
- package/dist/mcp/handler.d.ts +2 -2
- package/dist/mcp/handler.d.ts.map +1 -1
- package/dist/mcp/handler.js +59 -5
- package/dist/mcp/handler.js.map +1 -1
- package/dist/mcp/profiles/computer-use.d.ts +4 -0
- package/dist/mcp/profiles/computer-use.d.ts.map +1 -0
- package/dist/mcp/profiles/computer-use.js +305 -0
- package/dist/mcp/profiles/computer-use.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +30 -6
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts +9 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +20 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/output/envelope.d.ts +6 -0
- package/dist/output/envelope.d.ts.map +1 -1
- package/dist/output/envelope.js.map +1 -1
- package/dist/output/error-map.d.ts.map +1 -1
- package/dist/output/error-map.js +25 -0
- package/dist/output/error-map.js.map +1 -1
- package/dist/protocol/acp-helpers.d.ts +2 -2
- package/dist/protocol/acp-helpers.d.ts.map +1 -1
- package/dist/protocol/acp-helpers.js +5 -4
- package/dist/protocol/acp-helpers.js.map +1 -1
- package/dist/registry.d.ts +4 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +7 -0
- package/dist/registry.js.map +1 -1
- package/dist/transport/adapters/cdp-browser.d.ts +38 -2
- package/dist/transport/adapters/cdp-browser.d.ts.map +1 -1
- package/dist/transport/adapters/cdp-browser.js +349 -22
- package/dist/transport/adapters/cdp-browser.js.map +1 -1
- package/dist/transport/adapters/desktop-atspi.d.ts +23 -17
- package/dist/transport/adapters/desktop-atspi.d.ts.map +1 -1
- package/dist/transport/adapters/desktop-atspi.js +143 -32
- package/dist/transport/adapters/desktop-atspi.js.map +1 -1
- package/dist/transport/adapters/desktop-ax-helpers.d.ts +24 -0
- package/dist/transport/adapters/desktop-ax-helpers.d.ts.map +1 -0
- package/dist/transport/adapters/desktop-ax-helpers.js +190 -0
- package/dist/transport/adapters/desktop-ax-helpers.js.map +1 -0
- package/dist/transport/adapters/desktop-ax-swift.d.ts +13 -0
- package/dist/transport/adapters/desktop-ax-swift.d.ts.map +1 -1
- package/dist/transport/adapters/desktop-ax-swift.js +176 -2
- package/dist/transport/adapters/desktop-ax-swift.js.map +1 -1
- package/dist/transport/adapters/desktop-ax.d.ts +11 -2
- package/dist/transport/adapters/desktop-ax.d.ts.map +1 -1
- package/dist/transport/adapters/desktop-ax.js +131 -16
- package/dist/transport/adapters/desktop-ax.js.map +1 -1
- package/dist/transport/adapters/desktop-sidecar-errors.d.ts +3 -0
- package/dist/transport/adapters/desktop-sidecar-errors.d.ts.map +1 -0
- package/dist/transport/adapters/desktop-sidecar-errors.js +34 -0
- package/dist/transport/adapters/desktop-sidecar-errors.js.map +1 -0
- package/dist/transport/adapters/desktop-sidecar-snapshot.d.ts +10 -0
- package/dist/transport/adapters/desktop-sidecar-snapshot.d.ts.map +1 -0
- package/dist/transport/adapters/desktop-sidecar-snapshot.js +89 -0
- package/dist/transport/adapters/desktop-sidecar-snapshot.js.map +1 -0
- package/dist/transport/adapters/desktop-uia.d.ts +23 -17
- package/dist/transport/adapters/desktop-uia.d.ts.map +1 -1
- package/dist/transport/adapters/desktop-uia.js +142 -32
- package/dist/transport/adapters/desktop-uia.js.map +1 -1
- package/dist/transport/adapters/subprocess.d.ts +7 -0
- package/dist/transport/adapters/subprocess.d.ts.map +1 -1
- package/dist/transport/adapters/subprocess.js +64 -0
- package/dist/transport/adapters/subprocess.js.map +1 -1
- package/dist/transport/bus.d.ts +2 -0
- package/dist/transport/bus.d.ts.map +1 -1
- package/dist/transport/bus.js +7 -11
- package/dist/transport/bus.js.map +1 -1
- package/dist/transport/capability.d.ts.map +1 -1
- package/dist/transport/capability.js +123 -98
- package/dist/transport/capability.js.map +1 -1
- package/dist/transport/cascade.d.ts +5 -0
- package/dist/transport/cascade.d.ts.map +1 -0
- package/dist/transport/cascade.js +550 -0
- package/dist/transport/cascade.js.map +1 -0
- package/dist/transport/cdp-session.d.ts +11 -0
- package/dist/transport/cdp-session.d.ts.map +1 -0
- package/dist/transport/cdp-session.js +52 -0
- package/dist/transport/cdp-session.js.map +1 -0
- package/dist/transport/refs.d.ts +51 -0
- package/dist/transport/refs.d.ts.map +1 -0
- package/dist/transport/refs.js +135 -0
- package/dist/transport/refs.js.map +1 -0
- package/dist/transport/sidecar-binary.d.ts +18 -0
- package/dist/transport/sidecar-binary.d.ts.map +1 -0
- package/dist/transport/sidecar-binary.js +55 -0
- package/dist/transport/sidecar-binary.js.map +1 -0
- package/dist/transport/sidecar.d.ts +35 -0
- package/dist/transport/sidecar.d.ts.map +1 -0
- package/dist/transport/sidecar.js +134 -0
- package/dist/transport/sidecar.js.map +1 -0
- package/dist/transport/snapshot-encoder.d.ts +34 -0
- package/dist/transport/snapshot-encoder.d.ts.map +1 -0
- package/dist/transport/snapshot-encoder.js +139 -0
- package/dist/transport/snapshot-encoder.js.map +1 -0
- package/dist/transport/types.d.ts +6 -1
- package/dist/transport/types.d.ts.map +1 -1
- package/dist/types.d.ts +11 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/docs/mcp/clients/claude-code.md +29 -0
- package/docs/mcp/clients/claude-desktop.md +47 -0
- package/docs/mcp/clients/codex.md +29 -0
- package/docs/mcp/clients/cursor.md +38 -0
- package/docs/mcp/clients/gemini-cli.md +38 -0
- package/docs/operate/compute.md +172 -0
- package/docs/operate/electron.md +87 -0
- package/docs/operate/focus-behavior.md +40 -0
- package/docs/operate/troubleshooting.md +379 -0
- package/package.json +44 -19
- package/src/adapters/36kr/news.yaml +4 -1
- package/src/adapters/_electron/desktop-shared.ts +14 -0
- package/src/adapters/_electron/shared.ts +54 -2
- package/src/adapters/juejin/hot.test.ts +25 -0
- package/src/adapters/juejin/hot.yaml +52 -0
- package/src/adapters/juejin/search.test.ts +27 -0
- package/src/adapters/juejin/search.yaml +58 -0
- package/src/adapters/leetcode/discuss-search.test.ts +29 -0
- package/src/adapters/leetcode/discuss-search.yaml +56 -0
- package/src/adapters/macos/actions.ts +63 -0
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
# Compute Troubleshooting
|
|
2
|
+
|
|
3
|
+
`unicli compute` failures include `minimum_capability` and, where known, a
|
|
4
|
+
structured `remedy`. Use this page when `unicli doctor compute` or a failed
|
|
5
|
+
compute command points at one of these keys.
|
|
6
|
+
|
|
7
|
+
## desktop-uia.binary_missing
|
|
8
|
+
|
|
9
|
+
Cause: the Windows UIA sidecar binary is not installed or is not on the expected
|
|
10
|
+
path.
|
|
11
|
+
|
|
12
|
+
Remedy: run `unicli doctor compute --install`, then retry the compute command.
|
|
13
|
+
|
|
14
|
+
Fallback: use CDP-backed Electron/browser control or CUA screenshot fallback if
|
|
15
|
+
configured.
|
|
16
|
+
|
|
17
|
+
## desktop-uia.startup_failed
|
|
18
|
+
|
|
19
|
+
Cause: the UIA sidecar started and exited before responding.
|
|
20
|
+
|
|
21
|
+
Remedy: run `UNICLI_TRACE=1 unicli doctor compute` and inspect antivirus,
|
|
22
|
+
Defender, or SmartScreen quarantine.
|
|
23
|
+
|
|
24
|
+
Fallback: retry after reinstalling the sidecar package.
|
|
25
|
+
|
|
26
|
+
## desktop-uia.permission
|
|
27
|
+
|
|
28
|
+
Cause: Windows denied the UIA operation.
|
|
29
|
+
|
|
30
|
+
Remedy: run from an elevated terminal or install the sidecar with UIAccess.
|
|
31
|
+
|
|
32
|
+
Fallback: use CDP for Electron/browser targets.
|
|
33
|
+
|
|
34
|
+
## desktop-uia.no_element
|
|
35
|
+
|
|
36
|
+
Cause: the saved ref no longer points at a live element.
|
|
37
|
+
|
|
38
|
+
Remedy: run `unicli compute snapshot` again, then retry with a fresh ref.
|
|
39
|
+
|
|
40
|
+
Fallback: target by app/window and take a new snapshot.
|
|
41
|
+
|
|
42
|
+
## desktop-uia.not_invokable
|
|
43
|
+
|
|
44
|
+
Cause: the target element does not expose the UIA Invoke pattern.
|
|
45
|
+
|
|
46
|
+
Remedy: use `unicli compute type`, `unicli compute press`, or focus the control
|
|
47
|
+
first and retry.
|
|
48
|
+
|
|
49
|
+
Fallback: use CUA when no structured pattern is exposed.
|
|
50
|
+
|
|
51
|
+
## desktop-uia.timeout
|
|
52
|
+
|
|
53
|
+
Cause: the UIA sidecar did not respond within the request timeout.
|
|
54
|
+
|
|
55
|
+
Remedy: retry the command; the sidecar boundary is designed to restart after
|
|
56
|
+
timeouts.
|
|
57
|
+
|
|
58
|
+
Fallback: run `UNICLI_TRACE=1 unicli doctor compute` if the timeout repeats.
|
|
59
|
+
|
|
60
|
+
## desktop-uia.sidecar_crashed
|
|
61
|
+
|
|
62
|
+
Cause: the UIA sidecar process exited or closed its pipe while a request was in
|
|
63
|
+
flight.
|
|
64
|
+
|
|
65
|
+
Remedy: retry once. If it repeats, run
|
|
66
|
+
`UNICLI_TRACE=1 unicli doctor compute`.
|
|
67
|
+
|
|
68
|
+
Fallback: use CDP for Electron/browser targets while inspecting sidecar logs.
|
|
69
|
+
|
|
70
|
+
## Windows UIA Native Scope
|
|
71
|
+
|
|
72
|
+
Current Windows UIA support has two layers:
|
|
73
|
+
|
|
74
|
+
- Top-level app/window inventory, snapshot, find, wait, observe, assert, focus,
|
|
75
|
+
invoke, type, scroll, screenshot, and direct launch helpers use native
|
|
76
|
+
Win32/UIA-adjacent calls such as `EnumWindows`, `SetForegroundWindow`,
|
|
77
|
+
`SendInput`, HWND/GDI capture, and PowerShell `Start-Process`.
|
|
78
|
+
- Live descendant UIA traversal populates refs where the OS exposes a control
|
|
79
|
+
tree. Descendant invoke, value, and focus actions prefer UIA patterns before
|
|
80
|
+
bounded fallback paths; descendant screenshot crops the owning window bitmap.
|
|
81
|
+
|
|
82
|
+
Stable top-level refs look like `desktop-uia:pid-1234:Window[0]`. When passed to
|
|
83
|
+
wait, Uni-CLI polls the native top-level window inventory for a matching
|
|
84
|
+
role/name/title/app/pid filter until timeout. Observe ranks the same top-level
|
|
85
|
+
window refs by goal/title token overlap. Assert checks the same inventory for
|
|
86
|
+
top-level title text and visible/appear/enabled state.
|
|
87
|
+
|
|
88
|
+
## desktop-atspi.binary_missing
|
|
89
|
+
|
|
90
|
+
Cause: the Linux AT-SPI sidecar binary is not installed or is not on the
|
|
91
|
+
expected path.
|
|
92
|
+
|
|
93
|
+
Remedy: run `unicli doctor compute --install`, then retry.
|
|
94
|
+
|
|
95
|
+
Fallback: use CDP-backed Electron/browser control or CUA screenshot fallback if
|
|
96
|
+
configured.
|
|
97
|
+
|
|
98
|
+
## desktop-atspi.dbus_blocked
|
|
99
|
+
|
|
100
|
+
Cause: the AT-SPI bus daemon is not reachable.
|
|
101
|
+
|
|
102
|
+
Remedy: run `systemctl --user start at-spi-dbus-bus`.
|
|
103
|
+
|
|
104
|
+
Fallback: restart the desktop session if the bus cannot be started.
|
|
105
|
+
|
|
106
|
+
## desktop-atspi.no_a11y_attr
|
|
107
|
+
|
|
108
|
+
Cause: the target app does not expose a usable AT-SPI tree.
|
|
109
|
+
|
|
110
|
+
Remedy: enable accessibility support for the app. Electron apps may need an
|
|
111
|
+
accessibility flag at launch.
|
|
112
|
+
|
|
113
|
+
Fallback: use CDP for Electron/browser targets or CUA screenshot fallback.
|
|
114
|
+
|
|
115
|
+
## desktop-atspi.atspi_apps
|
|
116
|
+
|
|
117
|
+
Cause: the Linux top-level app inventory helper is missing or failed.
|
|
118
|
+
|
|
119
|
+
Remedy: ensure the AT-SPI bus is running. Uni-CLI prefers `wmctrl -lG -p` for
|
|
120
|
+
real X11 window ids and geometry, but can fall back to AT-SPI-only registry
|
|
121
|
+
roots when `wmctrl` is missing or empty.
|
|
122
|
+
|
|
123
|
+
Fallback: target an Electron/browser app through CDP, or use CUA fallback.
|
|
124
|
+
|
|
125
|
+
## desktop-atspi.atspi_windows
|
|
126
|
+
|
|
127
|
+
Cause: the Linux top-level window inventory helper is missing or failed.
|
|
128
|
+
|
|
129
|
+
Remedy: install `wmctrl` when real X11 window ids are needed. On Wayland or
|
|
130
|
+
minimal environments, verify the AT-SPI bus is running so Uni-CLI can use
|
|
131
|
+
synthetic `atspi-root-N` windows from the accessibility registry.
|
|
132
|
+
|
|
133
|
+
Fallback: use `compute snapshot` on another transport or CUA fallback.
|
|
134
|
+
|
|
135
|
+
## desktop-atspi.wayland-input
|
|
136
|
+
|
|
137
|
+
Cause: Wayland input fallback tools are missing.
|
|
138
|
+
|
|
139
|
+
Remedy: install `wtype` for text and printable key dispatch. Install `ydotool`
|
|
140
|
+
for supported modifier combos and Wayland scroll fallback.
|
|
141
|
+
|
|
142
|
+
Fallback: use structured AT-SPI actions that do not need synthetic input.
|
|
143
|
+
|
|
144
|
+
## desktop-atspi.x11-input
|
|
145
|
+
|
|
146
|
+
Cause: X11 input fallback tools are missing.
|
|
147
|
+
|
|
148
|
+
Remedy: install `xdotool` for text, key, and scroll dispatch.
|
|
149
|
+
|
|
150
|
+
Fallback: use structured AT-SPI actions that do not need synthetic input.
|
|
151
|
+
|
|
152
|
+
## desktop-atspi.atspi_screenshot
|
|
153
|
+
|
|
154
|
+
Cause: no supported Linux screenshot helper is available, or the helper failed.
|
|
155
|
+
|
|
156
|
+
Remedy: install ImageMagick `import` for X11 top-level window capture, or
|
|
157
|
+
install `grim` for Wayland top-level bounds capture. Install
|
|
158
|
+
`gnome-screenshot` / `grim` for display-server fallback capture.
|
|
159
|
+
|
|
160
|
+
Fallback: use CDP for Electron/browser targets or CUA screenshot fallback.
|
|
161
|
+
|
|
162
|
+
## desktop-atspi.invalid_input
|
|
163
|
+
|
|
164
|
+
Cause: a Linux AT-SPI action received a `ref` or `stable` token that is not a
|
|
165
|
+
`desktop-atspi:pid-<pid>:Window[<n>]` top-level window token.
|
|
166
|
+
|
|
167
|
+
Remedy: run `unicli compute snapshot --format compact` or
|
|
168
|
+
`unicli compute find --first` on Linux, then retry with the fresh ref emitted by
|
|
169
|
+
the AT-SPI transport.
|
|
170
|
+
|
|
171
|
+
Fallback: omit the ref to use the global helper path for text, scroll, or
|
|
172
|
+
screenshot actions when targeting the active desktop surface is acceptable.
|
|
173
|
+
|
|
174
|
+
## desktop-atspi.no_element
|
|
175
|
+
|
|
176
|
+
Cause: the saved ref no longer points at a live element.
|
|
177
|
+
|
|
178
|
+
Remedy: run `unicli compute snapshot` again, then retry with a fresh ref.
|
|
179
|
+
|
|
180
|
+
Fallback: target by app/window and take a new snapshot.
|
|
181
|
+
|
|
182
|
+
## Linux AT-SPI Native Scope
|
|
183
|
+
|
|
184
|
+
Current Linux AT-SPI support has two layers:
|
|
185
|
+
|
|
186
|
+
- Top-level app/window inventory, snapshot, find, wait, observe, assert, focus,
|
|
187
|
+
invoke, type, scroll, screenshot, and direct launch helpers use `wmctrl` when
|
|
188
|
+
available, and AT-SPI-only synthetic windows when `wmctrl` is missing or
|
|
189
|
+
empty. Synthetic windows use native AT-SPI focus rather than `wmctrl`.
|
|
190
|
+
- Descendant AT-SPI traversal populates role/name/value/state/bounds refs where
|
|
191
|
+
the app exposes an accessibility tree. Descendant invoke, type, and focus
|
|
192
|
+
prefer native Action/Value/EditableText/Component proxies, then fall back to
|
|
193
|
+
bounded display-server helpers. Descendant scroll prefers native
|
|
194
|
+
`Component.scroll_to(...)`, then falls back to display-server wheel helpers.
|
|
195
|
+
- Screenshot uses `import -window <id>` for real X11 top-level window refs,
|
|
196
|
+
`grim -g` for known Wayland/top-level bounds, and region capture for bounded
|
|
197
|
+
descendant refs.
|
|
198
|
+
|
|
199
|
+
Stable top-level refs look like `desktop-atspi:pid-1234:Window[0]`. When passed
|
|
200
|
+
to type, scroll, or screenshot actions, Uni-CLI uses native operations when
|
|
201
|
+
available and activates the top-level window only for helper fallbacks. On X11
|
|
202
|
+
with ImageMagick `import`, screenshot uses the resolved top-level window id
|
|
203
|
+
directly. On Wayland with `grim` and known bounds, screenshot captures the
|
|
204
|
+
reported rectangle. Assert checks top-level and descendant text/value/state
|
|
205
|
+
where the tree exposes them. Observe reports `action: "scroll"` for scroll
|
|
206
|
+
roles or scrollable states.
|
|
207
|
+
|
|
208
|
+
## desktop-atspi.sidecar_crashed
|
|
209
|
+
|
|
210
|
+
Cause: the AT-SPI sidecar process exited or closed its pipe while a request was
|
|
211
|
+
in flight.
|
|
212
|
+
|
|
213
|
+
Remedy: retry once. If it repeats, run
|
|
214
|
+
`UNICLI_TRACE=1 unicli doctor compute`.
|
|
215
|
+
|
|
216
|
+
Fallback: use CDP for Electron/browser targets while inspecting sidecar logs.
|
|
217
|
+
|
|
218
|
+
## desktop-ax.permission
|
|
219
|
+
|
|
220
|
+
Cause: macOS Accessibility is not granted to the app or terminal that launches
|
|
221
|
+
Uni-CLI.
|
|
222
|
+
|
|
223
|
+
Remedy: grant Accessibility in System Settings, then retry. Deeplink:
|
|
224
|
+
`x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility`.
|
|
225
|
+
|
|
226
|
+
Fallback: CDP can still control browser/Electron renderers that expose a debug
|
|
227
|
+
port.
|
|
228
|
+
|
|
229
|
+
## desktop-ax.screen-recording
|
|
230
|
+
|
|
231
|
+
Cause: macOS Screen Recording is not granted. This is only needed for screenshot
|
|
232
|
+
fallback.
|
|
233
|
+
|
|
234
|
+
Remedy: grant Screen Recording in System Settings. Deeplink:
|
|
235
|
+
`x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture`.
|
|
236
|
+
|
|
237
|
+
Fallback: prefer AX snapshots when the target exposes a structured tree.
|
|
238
|
+
|
|
239
|
+
## desktop-ax.binary_missing
|
|
240
|
+
|
|
241
|
+
Cause: the Swift runtime required by the macOS AX helper is not available.
|
|
242
|
+
|
|
243
|
+
Remedy: run `xcode-select --install`.
|
|
244
|
+
|
|
245
|
+
Fallback: use CDP for browser/Electron targets.
|
|
246
|
+
|
|
247
|
+
## cdp-browser.attach_failed
|
|
248
|
+
|
|
249
|
+
Cause: the requested CDP port is not reachable.
|
|
250
|
+
|
|
251
|
+
Remedy: check the port, or start the browser transport with
|
|
252
|
+
`unicli browser start`.
|
|
253
|
+
|
|
254
|
+
Fallback: use native AX/UIA/AT-SPI snapshots for non-browser app control.
|
|
255
|
+
|
|
256
|
+
## cdp-browser.electron_running_without_debug_port
|
|
257
|
+
|
|
258
|
+
Cause: the Electron app is running, but no remote debugging port is available.
|
|
259
|
+
|
|
260
|
+
Remedy: relaunch the app with a debug port, for example
|
|
261
|
+
`unicli compute launch <app> --debug-port 9229`.
|
|
262
|
+
|
|
263
|
+
Fallback: use native AX/UIA/AT-SPI controls when the app exposes enough
|
|
264
|
+
accessibility structure.
|
|
265
|
+
|
|
266
|
+
## subprocess.launcher
|
|
267
|
+
|
|
268
|
+
Cause: the host launcher required by `compute launch` is unavailable. Uni-CLI
|
|
269
|
+
uses `/usr/bin/open` on macOS, PowerShell `Start-Process` on Windows, and
|
|
270
|
+
`gtk-launch` on Linux.
|
|
271
|
+
|
|
272
|
+
Remedy: restore the platform launcher. On Linux install GTK desktop utilities,
|
|
273
|
+
for example `sudo apt-get install libgtk-3-bin`.
|
|
274
|
+
|
|
275
|
+
Fallback: start the app manually, then use `compute attach`, `compute snapshot`,
|
|
276
|
+
or the native desktop transport for follow-up actions.
|
|
277
|
+
|
|
278
|
+
## cua.no_backend
|
|
279
|
+
|
|
280
|
+
Cause: screenshot/VLM fallback is enabled in the cascade, but no backend API key
|
|
281
|
+
is configured.
|
|
282
|
+
|
|
283
|
+
Remedy: set a supported backend environment variable such as
|
|
284
|
+
`ANTHROPIC_API_KEY`, `TRYCUA_API_KEY`, or `OPENAI_API_KEY`.
|
|
285
|
+
|
|
286
|
+
Fallback: use structured AX/UIA/AT-SPI/CDP control where possible.
|
|
287
|
+
|
|
288
|
+
## compute.compute_find.ref-store
|
|
289
|
+
|
|
290
|
+
Cause: `compute find --first` could not find a matching ref in the current ref
|
|
291
|
+
store.
|
|
292
|
+
|
|
293
|
+
Remedy: run `unicli compute snapshot`, then retry the find with the new refs.
|
|
294
|
+
|
|
295
|
+
Fallback: make the snapshot more specific with `--app`.
|
|
296
|
+
|
|
297
|
+
## compute.step.element_off_screen
|
|
298
|
+
|
|
299
|
+
Cause: the ref is valid, but the element bounds are outside the visible window
|
|
300
|
+
or screen.
|
|
301
|
+
|
|
302
|
+
Remedy: scroll the containing view into range, then take a fresh
|
|
303
|
+
`unicli compute snapshot`.
|
|
304
|
+
|
|
305
|
+
Fallback: use `--focus` only when the app cannot expose a scrollable structured
|
|
306
|
+
container.
|
|
307
|
+
|
|
308
|
+
## compute.step.window_minimized
|
|
309
|
+
|
|
310
|
+
Cause: the target window is minimized or hidden, so the transport cannot act in
|
|
311
|
+
background mode.
|
|
312
|
+
|
|
313
|
+
Remedy: restore the window or retry the action with explicit focus.
|
|
314
|
+
|
|
315
|
+
Fallback: use `unicli compute windows --app <name>` to choose a visible window.
|
|
316
|
+
|
|
317
|
+
## compute.step.element_disabled
|
|
318
|
+
|
|
319
|
+
Cause: the target element exists but is disabled.
|
|
320
|
+
|
|
321
|
+
Remedy: wait for it to become enabled with
|
|
322
|
+
`unicli compute wait --state enabled`.
|
|
323
|
+
|
|
324
|
+
Fallback: snapshot the surrounding UI and act on the prerequisite control.
|
|
325
|
+
|
|
326
|
+
## compute.step.ref_expired
|
|
327
|
+
|
|
328
|
+
Cause: the saved ref came from an older snapshot and no longer maps to a live
|
|
329
|
+
element.
|
|
330
|
+
|
|
331
|
+
Remedy: run `unicli compute snapshot`, then retry with the new ref.
|
|
332
|
+
|
|
333
|
+
Fallback: use `compute find --first` after the new snapshot to select the ref.
|
|
334
|
+
|
|
335
|
+
## compute.step.sidecar_crashed
|
|
336
|
+
|
|
337
|
+
Cause: the UIA or AT-SPI sidecar exited while a call was in flight.
|
|
338
|
+
|
|
339
|
+
Remedy: retry once. If it repeats, run
|
|
340
|
+
`UNICLI_TRACE=1 unicli doctor compute`.
|
|
341
|
+
|
|
342
|
+
Fallback: use CDP for Electron/browser targets while inspecting sidecar logs.
|
|
343
|
+
|
|
344
|
+
## compute.step.sidecar_busy
|
|
345
|
+
|
|
346
|
+
Cause: the sidecar is already processing a request.
|
|
347
|
+
|
|
348
|
+
Remedy: retry after the current call completes. Sidecar calls are serialized to
|
|
349
|
+
keep ref state stable.
|
|
350
|
+
|
|
351
|
+
Fallback: avoid concurrent writes to the same app/window.
|
|
352
|
+
|
|
353
|
+
## compute.step.app_ambiguous
|
|
354
|
+
|
|
355
|
+
Cause: multiple running apps or windows match the same app name.
|
|
356
|
+
|
|
357
|
+
Remedy: run `unicli compute windows --app <name>` and retry with a more
|
|
358
|
+
specific bundle id, process name, pid, or window id.
|
|
359
|
+
|
|
360
|
+
Fallback: target a CDP port or exact bundle id when controlling Electron apps.
|
|
361
|
+
|
|
362
|
+
## compute.step.focus_required
|
|
363
|
+
|
|
364
|
+
Cause: the transport cannot complete the action in background mode.
|
|
365
|
+
|
|
366
|
+
Remedy: retry with `--focus` only after confirming focus stealing is acceptable.
|
|
367
|
+
|
|
368
|
+
Fallback: prefer a structured value/action path such as `compute type` or
|
|
369
|
+
`compute press` before enabling focus.
|
|
370
|
+
|
|
371
|
+
## compute.step.no-transport-available
|
|
372
|
+
|
|
373
|
+
Cause: every transport in the compute cascade failed or was unavailable for the
|
|
374
|
+
requested step.
|
|
375
|
+
|
|
376
|
+
Remedy: run `unicli doctor compute` and fix the first failing host transport.
|
|
377
|
+
|
|
378
|
+
Fallback: choose a narrower transport directly when possible, such as CDP for a
|
|
379
|
+
debuggable Electron renderer.
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zenalexa/unicli",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.217.3",
|
|
4
|
+
"description": "Agent execution substrate for web, apps, local tools, and system capabilities",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/main.js",
|
|
7
7
|
"bin": {
|
|
@@ -9,6 +9,9 @@
|
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
"dist/",
|
|
12
|
+
"crates/",
|
|
13
|
+
"docs/operate/",
|
|
14
|
+
"docs/mcp/clients/",
|
|
12
15
|
"src/adapters/",
|
|
13
16
|
"src/hub/",
|
|
14
17
|
"AGENTS.md"
|
|
@@ -127,6 +130,9 @@
|
|
|
127
130
|
"build:agents": "tsx scripts/build-agents.ts",
|
|
128
131
|
"test": "vitest run --project unit",
|
|
129
132
|
"test:adapter": "vitest run --project adapter",
|
|
133
|
+
"test:perf": "vitest run --project perf",
|
|
134
|
+
"compute:smoke": "tsx scripts/compute-live-smoke.ts",
|
|
135
|
+
"coverage:compute-snapshot": "vitest run --project unit tests/unit/refs.test.ts tests/unit/snapshot-encoder.test.ts --coverage --coverage.enabled=true --coverage.provider=v8 --coverage.include=src/transport/refs.ts --coverage.include=src/transport/snapshot-encoder.ts --coverage.reporter=text --coverage.thresholds.lines=100 --coverage.thresholds.functions=100 --coverage.thresholds.branches=100 --coverage.thresholds.statements=100",
|
|
130
136
|
"coverage:adapter-test": "tsx scripts/check-adapter-test-coverage.ts --threshold 50",
|
|
131
137
|
"adapter:bootstrap": "tsx scripts/bootstrap-adapter-tests.ts",
|
|
132
138
|
"adapter:health": "tsx scripts/adapter-health-probe.ts",
|
|
@@ -137,30 +143,33 @@
|
|
|
137
143
|
"format:check": "prettier --check .",
|
|
138
144
|
"lint:context": "bash scripts/lint-context.sh",
|
|
139
145
|
"build:manifest": "tsx scripts/build-manifest.js",
|
|
146
|
+
"sidecars:build": "node scripts/build-sidecars.mjs",
|
|
147
|
+
"sidecars:publish": "node scripts/publish-sidecars.mjs",
|
|
140
148
|
"changeset": "changeset",
|
|
141
149
|
"changeset:version": "changeset version",
|
|
142
150
|
"changeset:status": "changeset status --since=origin/main",
|
|
143
151
|
"verify:changesets": "tsx scripts/verify-changesets.ts",
|
|
152
|
+
"verify:release-mainline": "tsx scripts/release-mainline-check.ts",
|
|
144
153
|
"conformance": "tsx scripts/conformance-report.ts",
|
|
145
154
|
"check:exports": "tsx scripts/check-exports-count.ts",
|
|
146
155
|
"lint:adapters": "tsx src/main.ts lint src/adapters",
|
|
147
156
|
"lint:schema-v2": "tsx scripts/lint-schema-v2.ts",
|
|
148
157
|
"clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
|
|
149
158
|
"validate:agents-size": "tsx scripts/validate-agents-size.ts",
|
|
150
|
-
"verify": "npm run format:check && npm run typecheck && npm run lint && npm run lint:context && npm run build:manifest && npm run lint:adapters && npm run lint:schema-v2 && npm run build && npm run test && npm run test:adapter && npm run coverage:adapter-test && npm run validate:agents-size && npm run stats:check && npm run conformance && npm run check:exports && npm run verify:changesets",
|
|
159
|
+
"verify": "npm run format:check && npm run typecheck && npm run lint && npm run lint:context && npm run build:manifest && npm run lint:adapters && npm run lint:schema-v2 && npm run build && npm run test && npm run test:adapter && npm run test:perf && npm run coverage:compute-snapshot && npm run coverage:adapter-test && npm run validate:agents-size && npm run stats:check && npm run conformance && npm run check:exports && npm run verify:changesets",
|
|
151
160
|
"verify:full": "npm run verify && npm run refs:verify && npm run adapter:health",
|
|
152
161
|
"verify:clean": "npm run clean && npm run verify",
|
|
153
|
-
"docs:prepare": "tsx scripts/generate-docs-agent-assets.ts",
|
|
162
|
+
"docs:prepare": "tsx scripts/generate-catalog.ts && tsx scripts/generate-docs-agent-assets.ts",
|
|
154
163
|
"docs:dev": "npm run docs:prepare && vitepress dev docs",
|
|
155
164
|
"docs:check-public": "tsx scripts/check-public-docs.ts",
|
|
156
165
|
"docs:build": "npm run docs:prepare && node -e \"require('node:fs').rmSync('docs/.vitepress/dist',{recursive:true,force:true})\" && vitepress build docs && npm run docs:check-public",
|
|
157
166
|
"docs:preview": "vitepress preview docs",
|
|
158
167
|
"doctor": "tsx src/doctor.ts",
|
|
159
168
|
"mcp": "tsx src/mcp/server.ts",
|
|
160
|
-
"release": "npm run build && tsx scripts/release.ts",
|
|
169
|
+
"release": "npm run verify:release-mainline && npm run build && tsx scripts/release.ts",
|
|
161
170
|
"release:check": "tsx scripts/release-check.ts",
|
|
162
171
|
"prepare": "lefthook install >/dev/null 2>&1 || true",
|
|
163
|
-
"preversion": "npm run verify",
|
|
172
|
+
"preversion": "npm run verify:release-mainline && npm run verify",
|
|
164
173
|
"postversion": "npm run build && tsx scripts/release.ts",
|
|
165
174
|
"bench": "tsx bench/report.ts",
|
|
166
175
|
"bench:self-discovery": "tsx bench/self-discovery.ts",
|
|
@@ -197,36 +206,52 @@
|
|
|
197
206
|
"node": ">=20.0.0"
|
|
198
207
|
},
|
|
199
208
|
"dependencies": {
|
|
200
|
-
"ajv": "^8.
|
|
209
|
+
"ajv": "^8.20.0",
|
|
201
210
|
"ajv-formats": "^3.0.1",
|
|
202
|
-
"chalk": "^5.
|
|
211
|
+
"chalk": "^5.6.2",
|
|
203
212
|
"cli-table3": "^0.6.5",
|
|
204
213
|
"commander": "^14.0.3",
|
|
205
|
-
"js-yaml": "^4.1.
|
|
214
|
+
"js-yaml": "^4.1.1",
|
|
206
215
|
"jsonpath-plus": "^10.4.0",
|
|
207
216
|
"turndown": "^7.2.4",
|
|
208
|
-
"undici": "^
|
|
209
|
-
"ws": "^8.
|
|
217
|
+
"undici": "^7.25.0",
|
|
218
|
+
"ws": "^8.20.0",
|
|
210
219
|
"zod": "^4.3.6"
|
|
211
220
|
},
|
|
221
|
+
"optionalDependencies": {
|
|
222
|
+
"@zenalexa/unicli-atspi-linux-arm64": "0.218.0",
|
|
223
|
+
"@zenalexa/unicli-atspi-linux-x64": "0.218.0",
|
|
224
|
+
"@zenalexa/unicli-uia-win32-arm64": "0.218.0",
|
|
225
|
+
"@zenalexa/unicli-uia-win32-x64": "0.218.0"
|
|
226
|
+
},
|
|
212
227
|
"devDependencies": {
|
|
213
228
|
"@ai-sdk/openai-compatible": "^2.0.41",
|
|
214
|
-
"@
|
|
229
|
+
"@base-ui/react": "^1.4.1",
|
|
230
|
+
"@changesets/cli": "^2.31.0",
|
|
215
231
|
"@chenglou/pretext": "^0.0.6",
|
|
232
|
+
"@hugeicons/core-free-icons": "^4.1.1",
|
|
233
|
+
"@hugeicons/react": "^1.1.6",
|
|
234
|
+
"@hugeicons/vue": "^1.0.5",
|
|
216
235
|
"@types/js-yaml": "^4.0.9",
|
|
217
236
|
"@types/node": "^25.6.0",
|
|
237
|
+
"@types/react": "^19.2.14",
|
|
238
|
+
"@types/react-dom": "^19.2.3",
|
|
218
239
|
"@types/shell-quote": "^1.7.5",
|
|
219
240
|
"@types/turndown": "^5.0.6",
|
|
220
|
-
"@types/ws": "^8.
|
|
241
|
+
"@types/ws": "^8.18.1",
|
|
242
|
+
"@vitejs/plugin-react": "^6.0.1",
|
|
243
|
+
"@vitest/coverage-v8": "^3.2.4",
|
|
221
244
|
"ai": "^6.0.168",
|
|
222
|
-
"lefthook": "^2.1.
|
|
245
|
+
"lefthook": "^2.1.6",
|
|
223
246
|
"markdown-it-mathjax3": "^4.3.2",
|
|
224
|
-
"oxlint": "^1.
|
|
225
|
-
"prettier": "^3.
|
|
247
|
+
"oxlint": "^1.61.0",
|
|
248
|
+
"prettier": "^3.8.3",
|
|
249
|
+
"react": "^19.2.5",
|
|
250
|
+
"react-dom": "^19.2.5",
|
|
226
251
|
"shell-quote": "^1.8.3",
|
|
227
|
-
"tsx": "^4.
|
|
228
|
-
"typescript": "^6.0.
|
|
229
|
-
"vitepress": "^1.6.
|
|
252
|
+
"tsx": "^4.21.0",
|
|
253
|
+
"typescript": "^6.0.3",
|
|
254
|
+
"vitepress": "^1.6.4",
|
|
230
255
|
"vitest": "^3.2.4",
|
|
231
256
|
"yaml": "^2.8.3"
|
|
232
257
|
}
|
|
@@ -14,6 +14,8 @@ args:
|
|
|
14
14
|
pipeline:
|
|
15
15
|
- fetch_text:
|
|
16
16
|
url: https://36kr.com/feed
|
|
17
|
+
retry: 2
|
|
18
|
+
backoff: 500
|
|
17
19
|
|
|
18
20
|
- parse_rss: ~
|
|
19
21
|
|
|
@@ -22,11 +24,12 @@ pipeline:
|
|
|
22
24
|
title: ${{ item.title }}
|
|
23
25
|
date: ${{ item.pubDate }}
|
|
24
26
|
summary: ${{ item.description | strip_html | truncate(150) }}
|
|
27
|
+
url: ${{ item.url || item.link }}
|
|
25
28
|
link: ${{ item.link }}
|
|
26
29
|
|
|
27
30
|
- limit: ${{ args.limit }}
|
|
28
31
|
|
|
29
|
-
columns: [rank, title, date, summary]
|
|
32
|
+
columns: [rank, title, date, summary, url]
|
|
30
33
|
|
|
31
34
|
# schema-v2 metadata — injected by `unicli migrate schema-v2`
|
|
32
35
|
capabilities: ["http.fetch"]
|
|
@@ -36,6 +36,11 @@ export const ELECTRON_DESKTOP_MEDIA_COMMANDS = [
|
|
|
36
36
|
"prev",
|
|
37
37
|
] as const;
|
|
38
38
|
|
|
39
|
+
const ELECTRON_DESKTOP_COMMAND_META = {
|
|
40
|
+
adapter_path: "src/adapters/electron-desktop/electron-desktop.ts",
|
|
41
|
+
target_surface: "desktop" as const,
|
|
42
|
+
};
|
|
43
|
+
|
|
39
44
|
export function registerElectronDesktopCommands(
|
|
40
45
|
site: string,
|
|
41
46
|
profile: ElectronDesktopCommandProfile = {},
|
|
@@ -48,6 +53,7 @@ export function registerElectronDesktopCommands(
|
|
|
48
53
|
name: "open-app",
|
|
49
54
|
description: `Open ${displayName} desktop Electron app with CDP enabled for AI control. 打开${displayName}桌面版并启用 CDP 控制。`,
|
|
50
55
|
strategy: Strategy.PUBLIC,
|
|
56
|
+
...ELECTRON_DESKTOP_COMMAND_META,
|
|
51
57
|
func: async () => {
|
|
52
58
|
const endpoint = await launchElectronApp(site);
|
|
53
59
|
return [
|
|
@@ -67,6 +73,7 @@ export function registerElectronDesktopCommands(
|
|
|
67
73
|
name: "status-app",
|
|
68
74
|
description: `Inspect current ${displayName} desktop app page, title, URL, visible controls, and text summary. 查看${displayName}桌面版当前状态和可见内容。`,
|
|
69
75
|
strategy: Strategy.PUBLIC,
|
|
76
|
+
...ELECTRON_DESKTOP_COMMAND_META,
|
|
70
77
|
func: async () => [await readDesktopStatus(site, displayName)],
|
|
71
78
|
});
|
|
72
79
|
|
|
@@ -75,6 +82,7 @@ export function registerElectronDesktopCommands(
|
|
|
75
82
|
name: "dump",
|
|
76
83
|
description: `Dump visible text from the ${displayName} desktop Electron app via CDP DOM. 读取${displayName}桌面版可见文本。`,
|
|
77
84
|
strategy: Strategy.PUBLIC,
|
|
85
|
+
...ELECTRON_DESKTOP_COMMAND_META,
|
|
78
86
|
args: [
|
|
79
87
|
{
|
|
80
88
|
name: "limit",
|
|
@@ -95,6 +103,7 @@ export function registerElectronDesktopCommands(
|
|
|
95
103
|
name: "snapshot-app",
|
|
96
104
|
description: `List visible clickable text, buttons, inputs, and regions in ${displayName}. 枚举${displayName}桌面版可交互内容。`,
|
|
97
105
|
strategy: Strategy.PUBLIC,
|
|
106
|
+
...ELECTRON_DESKTOP_COMMAND_META,
|
|
98
107
|
func: async () => {
|
|
99
108
|
const p = await connectElectronApp(site);
|
|
100
109
|
return (await p.evaluate(visibleInteractivesJs())) as unknown[];
|
|
@@ -106,6 +115,7 @@ export function registerElectronDesktopCommands(
|
|
|
106
115
|
name: "click-text",
|
|
107
116
|
description: `Click visible text, aria-label, title, or button content in ${displayName}. 按文本点击${displayName}桌面版控件。`,
|
|
108
117
|
strategy: Strategy.PUBLIC,
|
|
118
|
+
...ELECTRON_DESKTOP_COMMAND_META,
|
|
109
119
|
args: [
|
|
110
120
|
{
|
|
111
121
|
name: "text",
|
|
@@ -125,6 +135,7 @@ export function registerElectronDesktopCommands(
|
|
|
125
135
|
name: "type-text",
|
|
126
136
|
description: `Type text into the focused field or a text-matched target in ${displayName}. 向${displayName}桌面版输入文本。`,
|
|
127
137
|
strategy: Strategy.PUBLIC,
|
|
138
|
+
...ELECTRON_DESKTOP_COMMAND_META,
|
|
128
139
|
args: [
|
|
129
140
|
{
|
|
130
141
|
name: "text",
|
|
@@ -154,6 +165,7 @@ export function registerElectronDesktopCommands(
|
|
|
154
165
|
name: "press",
|
|
155
166
|
description: `Press a key in ${displayName}, with optional comma-separated modifiers. 在${displayName}桌面版发送按键。`,
|
|
156
167
|
strategy: Strategy.PUBLIC,
|
|
168
|
+
...ELECTRON_DESKTOP_COMMAND_META,
|
|
157
169
|
args: [
|
|
158
170
|
{
|
|
159
171
|
name: "key",
|
|
@@ -197,6 +209,7 @@ function registerMediaCommands(
|
|
|
197
209
|
name: "play-liked",
|
|
198
210
|
description: `Open ${displayName} liked songs and play the liked playlist. 打开${displayName}我喜欢的音乐/喜欢的歌曲并播放。`,
|
|
199
211
|
strategy: Strategy.PUBLIC,
|
|
212
|
+
...ELECTRON_DESKTOP_COMMAND_META,
|
|
200
213
|
func: async () => {
|
|
201
214
|
const p = await connectElectronApp(site);
|
|
202
215
|
const liked = await clickVisibleText(p, media.likedText, displayName);
|
|
@@ -213,6 +226,7 @@ function registerMediaCommands(
|
|
|
213
226
|
name: action,
|
|
214
227
|
description: `${action} playback in the ${displayName} desktop app. 控制${displayName}桌面版播放:${action}。`,
|
|
215
228
|
strategy: Strategy.PUBLIC,
|
|
229
|
+
...ELECTRON_DESKTOP_COMMAND_META,
|
|
216
230
|
func: async () => {
|
|
217
231
|
const p = await connectElectronApp(site);
|
|
218
232
|
const clicked = await clickMediaControl(p, action, displayName);
|