@zenalexa/unicli 0.221.1 → 0.222.1

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 (177) hide show
  1. package/AGENTS.md +2 -2
  2. package/README.md +128 -23
  3. package/README.zh-CN.md +115 -35
  4. package/crates/unicli-atspi/src/errors.rs +2 -2
  5. package/crates/unicli-uia/src/errors.rs +1 -1
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +3 -0
  8. package/dist/cli.js.map +1 -1
  9. package/dist/commands/compute.d.ts.map +1 -1
  10. package/dist/commands/compute.js +1 -1
  11. package/dist/commands/compute.js.map +1 -1
  12. package/dist/commands/delivery.d.ts +17 -0
  13. package/dist/commands/delivery.d.ts.map +1 -0
  14. package/dist/commands/delivery.js +577 -0
  15. package/dist/commands/delivery.js.map +1 -0
  16. package/dist/commands/do.d.ts.map +1 -1
  17. package/dist/commands/do.js +3 -4
  18. package/dist/commands/do.js.map +1 -1
  19. package/dist/commands/doctor-compute.js +11 -7
  20. package/dist/commands/doctor-compute.js.map +1 -1
  21. package/dist/commands/extract.d.ts.map +1 -1
  22. package/dist/commands/extract.js +6 -2
  23. package/dist/commands/extract.js.map +1 -1
  24. package/dist/commands/lint.js +3 -3
  25. package/dist/commands/lint.js.map +1 -1
  26. package/dist/commands/migrate-schema.d.ts.map +1 -1
  27. package/dist/commands/migrate-schema.js +26 -22
  28. package/dist/commands/migrate-schema.js.map +1 -1
  29. package/dist/commands/runs.d.ts.map +1 -1
  30. package/dist/commands/runs.js +9 -5
  31. package/dist/commands/runs.js.map +1 -1
  32. package/dist/discovery/aliases.d.ts.map +1 -1
  33. package/dist/discovery/aliases.js +1 -0
  34. package/dist/discovery/aliases.js.map +1 -1
  35. package/dist/discovery/loader.d.ts.map +1 -1
  36. package/dist/discovery/loader.js +47 -2
  37. package/dist/discovery/loader.js.map +1 -1
  38. package/dist/discovery/search.d.ts.map +1 -1
  39. package/dist/discovery/search.js +20 -0
  40. package/dist/discovery/search.js.map +1 -1
  41. package/dist/electron-apps.d.ts +1 -1
  42. package/dist/electron-apps.d.ts.map +1 -1
  43. package/dist/electron-apps.js +2 -2
  44. package/dist/electron-apps.js.map +1 -1
  45. package/dist/engine/delivery/index.d.ts +20 -0
  46. package/dist/engine/delivery/index.d.ts.map +1 -0
  47. package/dist/engine/delivery/index.js +20 -0
  48. package/dist/engine/delivery/index.js.map +1 -0
  49. package/dist/engine/delivery/planner.d.ts +19 -0
  50. package/dist/engine/delivery/planner.d.ts.map +1 -0
  51. package/dist/engine/delivery/planner.js +322 -0
  52. package/dist/engine/delivery/planner.js.map +1 -0
  53. package/dist/engine/delivery/repair.d.ts +17 -0
  54. package/dist/engine/delivery/repair.d.ts.map +1 -0
  55. package/dist/engine/delivery/repair.js +86 -0
  56. package/dist/engine/delivery/repair.js.map +1 -0
  57. package/dist/engine/delivery/session.d.ts +17 -0
  58. package/dist/engine/delivery/session.d.ts.map +1 -0
  59. package/dist/engine/delivery/session.js +78 -0
  60. package/dist/engine/delivery/session.js.map +1 -0
  61. package/dist/engine/delivery/trajectory.d.ts +17 -0
  62. package/dist/engine/delivery/trajectory.d.ts.map +1 -0
  63. package/dist/engine/delivery/trajectory.js +166 -0
  64. package/dist/engine/delivery/trajectory.js.map +1 -0
  65. package/dist/engine/delivery/types.d.ts +157 -0
  66. package/dist/engine/delivery/types.d.ts.map +1 -0
  67. package/dist/engine/delivery/types.js +16 -0
  68. package/dist/engine/delivery/types.js.map +1 -0
  69. package/dist/engine/executor.d.ts +1 -1
  70. package/dist/engine/executor.js +7 -7
  71. package/dist/engine/executor.js.map +1 -1
  72. package/dist/engine/repair/remedies.js +3 -3
  73. package/dist/engine/repair/remedies.js.map +1 -1
  74. package/dist/engine/steps/desktop-ax.d.ts +4 -0
  75. package/dist/engine/steps/desktop-ax.d.ts.map +1 -1
  76. package/dist/engine/steps/desktop-ax.js +8 -0
  77. package/dist/engine/steps/desktop-ax.js.map +1 -1
  78. package/dist/engine/steps/desktop-sidecar.d.ts +1 -1
  79. package/dist/engine/steps/desktop-sidecar.js +1 -1
  80. package/dist/engine/steps/index.d.ts +1 -1
  81. package/dist/engine/steps/index.d.ts.map +1 -1
  82. package/dist/engine/steps/index.js +1 -1
  83. package/dist/engine/steps/index.js.map +1 -1
  84. package/dist/engine/steps/visual.d.ts +47 -0
  85. package/dist/engine/steps/visual.d.ts.map +1 -0
  86. package/dist/engine/steps/visual.js +66 -0
  87. package/dist/engine/steps/visual.js.map +1 -0
  88. package/dist/engine/transport/mcp-browser.d.ts +1 -1
  89. package/dist/engine/transport/mcp-browser.js +1 -1
  90. package/dist/manifest-compact.txt +2 -2
  91. package/dist/manifest-search.json +1 -1
  92. package/dist/manifest.json +69 -55
  93. package/dist/output/error-writer.d.ts +23 -0
  94. package/dist/output/error-writer.d.ts.map +1 -0
  95. package/dist/output/error-writer.js +20 -0
  96. package/dist/output/error-writer.js.map +1 -0
  97. package/dist/transport/adapters/desktop-atspi.js +1 -1
  98. package/dist/transport/adapters/desktop-atspi.js.map +1 -1
  99. package/dist/transport/adapters/desktop-ax-background-activation-swift.d.ts +9 -0
  100. package/dist/transport/adapters/desktop-ax-background-activation-swift.d.ts.map +1 -0
  101. package/dist/transport/adapters/desktop-ax-background-activation-swift.js +99 -0
  102. package/dist/transport/adapters/desktop-ax-background-activation-swift.js.map +1 -0
  103. package/dist/transport/adapters/desktop-ax-background-click-swift.d.ts.map +1 -1
  104. package/dist/transport/adapters/desktop-ax-background-click-swift.js +10 -133
  105. package/dist/transport/adapters/desktop-ax-background-click-swift.js.map +1 -1
  106. package/dist/transport/adapters/desktop-ax-background-click.d.ts +1 -3
  107. package/dist/transport/adapters/desktop-ax-background-click.d.ts.map +1 -1
  108. package/dist/transport/adapters/desktop-ax-background-click.js +1 -69
  109. package/dist/transport/adapters/desktop-ax-background-click.js.map +1 -1
  110. package/dist/transport/adapters/desktop-ax-background-dispatch-swift.d.ts +9 -0
  111. package/dist/transport/adapters/desktop-ax-background-dispatch-swift.d.ts.map +1 -0
  112. package/dist/transport/adapters/desktop-ax-background-dispatch-swift.js +169 -0
  113. package/dist/transport/adapters/desktop-ax-background-dispatch-swift.js.map +1 -0
  114. package/dist/transport/adapters/desktop-ax-background-input-swift.d.ts +23 -0
  115. package/dist/transport/adapters/desktop-ax-background-input-swift.d.ts.map +1 -0
  116. package/dist/transport/adapters/desktop-ax-background-input-swift.js +157 -0
  117. package/dist/transport/adapters/desktop-ax-background-input-swift.js.map +1 -0
  118. package/dist/transport/adapters/desktop-ax-background-input.d.ts +13 -0
  119. package/dist/transport/adapters/desktop-ax-background-input.d.ts.map +1 -0
  120. package/dist/transport/adapters/desktop-ax-background-input.js +124 -0
  121. package/dist/transport/adapters/desktop-ax-background-input.js.map +1 -0
  122. package/dist/transport/adapters/desktop-ax-background-window-swift.d.ts +9 -0
  123. package/dist/transport/adapters/desktop-ax-background-window-swift.d.ts.map +1 -0
  124. package/dist/transport/adapters/desktop-ax-background-window-swift.js +110 -0
  125. package/dist/transport/adapters/desktop-ax-background-window-swift.js.map +1 -0
  126. package/dist/transport/adapters/desktop-ax-swift.d.ts +1 -0
  127. package/dist/transport/adapters/desktop-ax-swift.d.ts.map +1 -1
  128. package/dist/transport/adapters/desktop-ax-swift.js +1 -0
  129. package/dist/transport/adapters/desktop-ax-swift.js.map +1 -1
  130. package/dist/transport/adapters/desktop-ax.d.ts +4 -1
  131. package/dist/transport/adapters/desktop-ax.d.ts.map +1 -1
  132. package/dist/transport/adapters/desktop-ax.js +57 -6
  133. package/dist/transport/adapters/desktop-ax.js.map +1 -1
  134. package/dist/transport/adapters/desktop-uia.js +1 -1
  135. package/dist/transport/adapters/desktop-uia.js.map +1 -1
  136. package/dist/transport/adapters/visual.d.ts +114 -0
  137. package/dist/transport/adapters/visual.d.ts.map +1 -0
  138. package/dist/transport/adapters/visual.js +473 -0
  139. package/dist/transport/adapters/visual.js.map +1 -0
  140. package/dist/transport/bus.d.ts +1 -1
  141. package/dist/transport/bus.js +3 -3
  142. package/dist/transport/bus.js.map +1 -1
  143. package/dist/transport/capability.d.ts.map +1 -1
  144. package/dist/transport/capability.js +32 -30
  145. package/dist/transport/capability.js.map +1 -1
  146. package/dist/transport/cascade.js +27 -27
  147. package/dist/transport/cascade.js.map +1 -1
  148. package/dist/transport/types.d.ts +5 -5
  149. package/dist/transport/types.d.ts.map +1 -1
  150. package/dist/transport/types.js +1 -1
  151. package/docs/operate/compute.md +20 -7
  152. package/docs/operate/focus-behavior.md +21 -12
  153. package/docs/operate/troubleshooting.md +17 -12
  154. package/package.json +6 -12
  155. package/server.json +2 -2
  156. package/skills/unicli/SKILL.md +1 -1
  157. package/skills/unicli-claude-code/SKILL.md +1 -1
  158. package/skills/unicli-hermes/SKILL.md +1 -1
  159. package/skills/unicli-repair/references/error-codes.md +7 -7
  160. package/src/adapters/_archived/README.md +6 -6
  161. package/src/adapters/_archived/apple-music/rate-album.yaml +15 -15
  162. package/src/adapters/_archived/archive.json +2 -2
  163. package/src/adapters/figma/export-selected.yaml +16 -16
  164. package/src/adapters/instagram/reels.yaml +5 -7
  165. package/src/adapters/openalex/works.test.ts +40 -32
  166. package/src/adapters/weread/shelf.yaml +1 -1
  167. package/src/adapters/zoom/toggle-mute.yaml +1 -1
  168. package/dist/engine/steps/cua.d.ts +0 -41
  169. package/dist/engine/steps/cua.d.ts.map +0 -1
  170. package/dist/engine/steps/cua.js +0 -59
  171. package/dist/engine/steps/cua.js.map +0 -1
  172. package/dist/transport/adapters/cua.d.ts +0 -239
  173. package/dist/transport/adapters/cua.d.ts.map +0 -1
  174. package/dist/transport/adapters/cua.js +0 -661
  175. package/dist/transport/adapters/cua.js.map +0 -1
  176. package/src/adapters/cua/bench-list.yaml +0 -28
  177. package/src/adapters/cua/bench-run.yaml +0 -40
@@ -0,0 +1,114 @@
1
+ /**
2
+ * @owner src/transport/adapters/visual.ts
3
+ * @does Provide Uni-CLI's screenshot-plus-model visual fallback transport behind the transport bus.
4
+ * @needs core/envelope, transport/types
5
+ * @feeds src/transport/bus.ts, src/engine/steps/visual.ts, compute cascade visual fallback
6
+ * @breaks Throws no public errors; backend failures become structured envelopes.
7
+ * @invariants Backend selection is deterministic from env; action() never throws.
8
+ * @side-effects May click, type, scroll, drag, or launch through a configured backend.
9
+ * @perf Screenshot payload size dominates memory use.
10
+ * @concurrency Backend implementations own their own synchronization.
11
+ * @test tests/unit/transport/adapters/visual.test.ts
12
+ * @stability beta
13
+ * @since 0.222.0
14
+ */
15
+ import type { ActionRequest, ActionResult, Capability, Snapshot, SnapshotFormat, TransportAdapter, TransportContext, TransportKind } from "../types.js";
16
+ export interface VisualBackend {
17
+ readonly name: VisualBackendName;
18
+ snapshot(): Promise<{
19
+ base64: string;
20
+ width: number;
21
+ height: number;
22
+ mime?: string;
23
+ }>;
24
+ click(x: number, y: number, button?: "left" | "right"): Promise<void>;
25
+ type(text: string): Promise<void>;
26
+ key(key: string): Promise<void>;
27
+ scroll(dx: number, dy: number): Promise<void>;
28
+ drag(fromX: number, fromY: number, toX: number, toY: number): Promise<void>;
29
+ wait(ms: number): Promise<void>;
30
+ ask?(question: string): Promise<string>;
31
+ launch?(app: string): Promise<void>;
32
+ }
33
+ export type VisualBackendName = "mock" | "remote";
34
+ export declare const VISUAL_STEPS: readonly ["visual_snapshot", "visual_click", "visual_type", "visual_key", "visual_scroll", "visual_drag", "visual_wait", "visual_assert", "visual_ask", "visual_backend", "visual_launch"];
35
+ export declare class MockBackend implements VisualBackend {
36
+ readonly name: VisualBackendName;
37
+ readonly history: Array<{
38
+ verb: string;
39
+ args: unknown[];
40
+ }>;
41
+ private record;
42
+ snapshot(): Promise<{
43
+ base64: string;
44
+ width: number;
45
+ height: number;
46
+ mime: string;
47
+ }>;
48
+ click(x: number, y: number, button?: "left" | "right"): Promise<void>;
49
+ type(text: string): Promise<void>;
50
+ key(key: string): Promise<void>;
51
+ scroll(dx: number, dy: number): Promise<void>;
52
+ drag(fromX: number, fromY: number, toX: number, toY: number): Promise<void>;
53
+ wait(ms: number): Promise<void>;
54
+ ask(question: string): Promise<string>;
55
+ launch(app: string): Promise<void>;
56
+ }
57
+ export declare class RemoteVisualBackend implements VisualBackend {
58
+ readonly endpoint: string;
59
+ readonly apiKey?: string | undefined;
60
+ readonly name: VisualBackendName;
61
+ constructor(endpoint: string, apiKey?: string | undefined);
62
+ private notReady;
63
+ snapshot(): Promise<{
64
+ base64: string;
65
+ width: number;
66
+ height: number;
67
+ }>;
68
+ click(): Promise<void>;
69
+ type(): Promise<void>;
70
+ key(): Promise<void>;
71
+ scroll(): Promise<void>;
72
+ drag(): Promise<void>;
73
+ wait(ms: number): Promise<void>;
74
+ ask(): Promise<string>;
75
+ }
76
+ export interface VisualEnv {
77
+ VISUAL_BACKEND?: string;
78
+ VISUAL_BACKEND_ENDPOINT?: string;
79
+ VISUAL_BACKEND_API_KEY?: string;
80
+ }
81
+ export declare function selectVisualBackend(env?: VisualEnv): VisualBackend;
82
+ export interface VisualTransportOptions {
83
+ backend?: VisualBackend;
84
+ env?: VisualEnv;
85
+ }
86
+ export declare class VisualTransport implements TransportAdapter {
87
+ readonly kind: TransportKind;
88
+ readonly capability: Capability;
89
+ private backend;
90
+ private lastSnapshot;
91
+ constructor(opts?: VisualTransportOptions);
92
+ get activeBackendName(): VisualBackendName;
93
+ setBackend(backend: VisualBackend): void;
94
+ open(_ctx: TransportContext): Promise<void>;
95
+ snapshot(opts?: {
96
+ format?: SnapshotFormat;
97
+ }): Promise<Snapshot>;
98
+ action<T = unknown>(req: ActionRequest): Promise<ActionResult<T>>;
99
+ close(): Promise<void>;
100
+ private dispatch;
101
+ private envelopeFromBackendError;
102
+ private doSnapshot;
103
+ private doClick;
104
+ private doType;
105
+ private doKey;
106
+ private doScroll;
107
+ private doDrag;
108
+ private doWait;
109
+ private doAssert;
110
+ private doAsk;
111
+ private doBackendInfo;
112
+ private doLaunch;
113
+ }
114
+ //# sourceMappingURL=visual.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visual.d.ts","sourceRoot":"","sources":["../../../src/transport/adapters/visual.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,473 @@
1
+ /**
2
+ * @owner src/transport/adapters/visual.ts
3
+ * @does Provide Uni-CLI's screenshot-plus-model visual fallback transport behind the transport bus.
4
+ * @needs core/envelope, transport/types
5
+ * @feeds src/transport/bus.ts, src/engine/steps/visual.ts, compute cascade visual fallback
6
+ * @breaks Throws no public errors; backend failures become structured envelopes.
7
+ * @invariants Backend selection is deterministic from env; action() never throws.
8
+ * @side-effects May click, type, scroll, drag, or launch through a configured backend.
9
+ * @perf Screenshot payload size dominates memory use.
10
+ * @concurrency Backend implementations own their own synchronization.
11
+ * @test tests/unit/transport/adapters/visual.test.ts
12
+ * @stability beta
13
+ * @since 0.222.0
14
+ */
15
+ import { err, exitCodeFor, ok } from "../../core/envelope.js";
16
+ export const VISUAL_STEPS = [
17
+ "visual_snapshot",
18
+ "visual_click",
19
+ "visual_type",
20
+ "visual_key",
21
+ "visual_scroll",
22
+ "visual_drag",
23
+ "visual_wait",
24
+ "visual_assert",
25
+ "visual_ask",
26
+ "visual_backend",
27
+ "visual_launch",
28
+ ];
29
+ const VISUAL_CAPABILITY = {
30
+ steps: VISUAL_STEPS,
31
+ snapshotFormats: ["screenshot"],
32
+ mutatesHost: true,
33
+ };
34
+ const MOCK_PNG_BASE64 = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkAAIAAAoAAv/lxKUAAAAASUVORK5CYII=";
35
+ export class MockBackend {
36
+ name = "mock";
37
+ history = [];
38
+ record(verb, ...args) {
39
+ this.history.push({ verb, args });
40
+ }
41
+ async snapshot() {
42
+ this.record("snapshot");
43
+ return { base64: MOCK_PNG_BASE64, width: 1, height: 1, mime: "image/png" };
44
+ }
45
+ async click(x, y, button = "left") {
46
+ this.record("click", x, y, button);
47
+ }
48
+ async type(text) {
49
+ this.record("type", text);
50
+ }
51
+ async key(key) {
52
+ this.record("key", key);
53
+ }
54
+ async scroll(dx, dy) {
55
+ this.record("scroll", dx, dy);
56
+ }
57
+ async drag(fromX, fromY, toX, toY) {
58
+ this.record("drag", fromX, fromY, toX, toY);
59
+ }
60
+ async wait(ms) {
61
+ this.record("wait", ms);
62
+ }
63
+ async ask(question) {
64
+ this.record("ask", question);
65
+ return "yes";
66
+ }
67
+ async launch(app) {
68
+ this.record("launch", app);
69
+ }
70
+ }
71
+ class BackendNotReadyError extends Error {
72
+ backend;
73
+ verb;
74
+ hint;
75
+ constructor(backend, verb, hint) {
76
+ super(`visual backend "${backend}" is not ready for ${verb}: ${hint}`);
77
+ this.backend = backend;
78
+ this.verb = verb;
79
+ this.hint = hint;
80
+ this.name = "BackendNotReadyError";
81
+ }
82
+ }
83
+ export class RemoteVisualBackend {
84
+ endpoint;
85
+ apiKey;
86
+ name = "remote";
87
+ constructor(endpoint, apiKey) {
88
+ this.endpoint = endpoint;
89
+ this.apiKey = apiKey;
90
+ }
91
+ notReady(verb) {
92
+ throw new BackendNotReadyError(this.name, verb, `configure a production remote visual backend at ${this.endpoint}`);
93
+ }
94
+ async snapshot() {
95
+ this.notReady("snapshot");
96
+ }
97
+ async click() {
98
+ this.notReady("click");
99
+ }
100
+ async type() {
101
+ this.notReady("type");
102
+ }
103
+ async key() {
104
+ this.notReady("key");
105
+ }
106
+ async scroll() {
107
+ this.notReady("scroll");
108
+ }
109
+ async drag() {
110
+ this.notReady("drag");
111
+ }
112
+ async wait(ms) {
113
+ await new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
114
+ }
115
+ async ask() {
116
+ this.notReady("ask");
117
+ }
118
+ }
119
+ export function selectVisualBackend(env = process.env) {
120
+ const requested = (env.VISUAL_BACKEND ?? "").toLowerCase();
121
+ if (requested === "remote" && env.VISUAL_BACKEND_ENDPOINT) {
122
+ return new RemoteVisualBackend(env.VISUAL_BACKEND_ENDPOINT, env.VISUAL_BACKEND_API_KEY);
123
+ }
124
+ return new MockBackend();
125
+ }
126
+ export class VisualTransport {
127
+ kind = "visual";
128
+ capability = VISUAL_CAPABILITY;
129
+ backend;
130
+ lastSnapshot = undefined;
131
+ constructor(opts = {}) {
132
+ this.backend = opts.backend ?? selectVisualBackend(opts.env);
133
+ }
134
+ get activeBackendName() {
135
+ return this.backend.name;
136
+ }
137
+ setBackend(backend) {
138
+ this.backend = backend;
139
+ }
140
+ async open(_ctx) { }
141
+ async snapshot(opts) {
142
+ const format = opts?.format ?? "screenshot";
143
+ if (this.lastSnapshot && format === this.lastSnapshot.format) {
144
+ return this.lastSnapshot;
145
+ }
146
+ try {
147
+ const raw = await this.backend.snapshot();
148
+ const snap = {
149
+ format: "screenshot",
150
+ data: Buffer.from(raw.base64, "base64"),
151
+ width: raw.width,
152
+ height: raw.height,
153
+ };
154
+ this.lastSnapshot = snap;
155
+ return snap;
156
+ }
157
+ catch {
158
+ return { format: "json", data: JSON.stringify({ ok: false }) };
159
+ }
160
+ }
161
+ async action(req) {
162
+ const start = Date.now();
163
+ try {
164
+ const envelope = await this.dispatch(req);
165
+ envelope.elapsedMs = Date.now() - start;
166
+ return envelope;
167
+ }
168
+ catch (e) {
169
+ const msg = e instanceof Error ? e.message : String(e);
170
+ return err({
171
+ transport: "visual",
172
+ step: 0,
173
+ action: req.kind,
174
+ reason: `unexpected error in visual.${req.kind}: ${msg}`,
175
+ suggestion: "check visual backend configuration",
176
+ retryable: false,
177
+ });
178
+ }
179
+ }
180
+ async close() {
181
+ this.lastSnapshot = undefined;
182
+ }
183
+ async dispatch(req) {
184
+ switch (req.kind) {
185
+ case "visual_snapshot":
186
+ return this.doSnapshot();
187
+ case "visual_click":
188
+ return this.doClick(req.params);
189
+ case "visual_type":
190
+ return this.doType(req.params);
191
+ case "visual_key":
192
+ return this.doKey(req.params);
193
+ case "visual_scroll":
194
+ return this.doScroll(req.params);
195
+ case "visual_drag":
196
+ return this.doDrag(req.params);
197
+ case "visual_wait":
198
+ return this.doWait(req.params);
199
+ case "visual_assert":
200
+ return this.doAssert(req.params);
201
+ case "visual_ask":
202
+ return this.doAsk(req.params);
203
+ case "visual_backend":
204
+ return this.doBackendInfo();
205
+ case "visual_launch":
206
+ return this.doLaunch(req.params);
207
+ default:
208
+ return err({
209
+ transport: "visual",
210
+ step: 0,
211
+ action: req.kind,
212
+ reason: `unsupported action "${req.kind}" for visual transport`,
213
+ suggestion: `visual transport supports: ${VISUAL_STEPS.join(", ")}`,
214
+ minimum_capability: `visual.${req.kind}`,
215
+ exit_code: exitCodeFor("usage_error"),
216
+ });
217
+ }
218
+ }
219
+ envelopeFromBackendError(verb, e) {
220
+ const msg = e instanceof Error ? e.message : String(e);
221
+ const notReady = e instanceof BackendNotReadyError;
222
+ return err({
223
+ transport: "visual",
224
+ step: 0,
225
+ action: verb,
226
+ reason: msg,
227
+ suggestion: notReady
228
+ ? `configure the \`${this.backend.name}\` visual backend before calling visual.${verb}`
229
+ : "inspect backend error and retry",
230
+ minimum_capability: `visual.${verb}`,
231
+ retryable: !notReady,
232
+ exit_code: notReady
233
+ ? exitCodeFor("config_error")
234
+ : exitCodeFor("service_unavailable"),
235
+ });
236
+ }
237
+ async doSnapshot() {
238
+ try {
239
+ const raw = await this.backend.snapshot();
240
+ this.lastSnapshot = {
241
+ format: "screenshot",
242
+ data: Buffer.from(raw.base64, "base64"),
243
+ width: raw.width,
244
+ height: raw.height,
245
+ };
246
+ return ok({
247
+ backend: this.backend.name,
248
+ width: raw.width,
249
+ height: raw.height,
250
+ base64: raw.base64,
251
+ });
252
+ }
253
+ catch (e) {
254
+ return this.envelopeFromBackendError("snapshot", e);
255
+ }
256
+ }
257
+ async doClick(params) {
258
+ const x = typeof params.x === "number" ? params.x : undefined;
259
+ const y = typeof params.y === "number" ? params.y : undefined;
260
+ if (x === undefined || y === undefined) {
261
+ return err({
262
+ transport: "visual",
263
+ step: 0,
264
+ action: "visual_click",
265
+ reason: "visual_click requires numeric params.x and params.y",
266
+ suggestion: "pass { x, y } coordinates in pixel space",
267
+ exit_code: exitCodeFor("usage_error"),
268
+ });
269
+ }
270
+ const button = params.button === "right" ? "right" : "left";
271
+ try {
272
+ await this.backend.click(x, y, button);
273
+ return ok({ x, y, button });
274
+ }
275
+ catch (e) {
276
+ return this.envelopeFromBackendError("click", e);
277
+ }
278
+ }
279
+ async doType(params) {
280
+ const text = typeof params.text === "string" ? params.text : undefined;
281
+ if (text === undefined) {
282
+ return err({
283
+ transport: "visual",
284
+ step: 0,
285
+ action: "visual_type",
286
+ reason: "visual_type requires params.text (string)",
287
+ suggestion: "pass the literal text to type",
288
+ exit_code: exitCodeFor("usage_error"),
289
+ });
290
+ }
291
+ try {
292
+ await this.backend.type(text);
293
+ return ok({ text });
294
+ }
295
+ catch (e) {
296
+ return this.envelopeFromBackendError("type", e);
297
+ }
298
+ }
299
+ async doKey(params) {
300
+ const key = typeof params.key === "string"
301
+ ? params.key
302
+ : typeof params.combo === "string"
303
+ ? params.combo
304
+ : undefined;
305
+ if (!key) {
306
+ return err({
307
+ transport: "visual",
308
+ step: 0,
309
+ action: "visual_key",
310
+ reason: "visual_key requires params.key or params.combo (string)",
311
+ suggestion: 'pass a named key, e.g. "Return", "cmd+a"',
312
+ exit_code: exitCodeFor("usage_error"),
313
+ });
314
+ }
315
+ try {
316
+ await this.backend.key(key);
317
+ return ok({ key });
318
+ }
319
+ catch (e) {
320
+ return this.envelopeFromBackendError("key", e);
321
+ }
322
+ }
323
+ async doScroll(params) {
324
+ const dx = typeof params.dx === "number" ? params.dx : 0;
325
+ const dy = typeof params.dy === "number" ? params.dy : 0;
326
+ try {
327
+ await this.backend.scroll(dx, dy);
328
+ return ok({ dx, dy });
329
+ }
330
+ catch (e) {
331
+ return this.envelopeFromBackendError("scroll", e);
332
+ }
333
+ }
334
+ async doDrag(params) {
335
+ const fromX = typeof params.fromX === "number" ? params.fromX : undefined;
336
+ const fromY = typeof params.fromY === "number" ? params.fromY : undefined;
337
+ const toX = typeof params.toX === "number" ? params.toX : undefined;
338
+ const toY = typeof params.toY === "number" ? params.toY : undefined;
339
+ if (fromX === undefined ||
340
+ fromY === undefined ||
341
+ toX === undefined ||
342
+ toY === undefined) {
343
+ return err({
344
+ transport: "visual",
345
+ step: 0,
346
+ action: "visual_drag",
347
+ reason: "visual_drag requires params.fromX/fromY/toX/toY numbers",
348
+ suggestion: "pass all four drag endpoints as numeric pixel coords",
349
+ exit_code: exitCodeFor("usage_error"),
350
+ });
351
+ }
352
+ try {
353
+ await this.backend.drag(fromX, fromY, toX, toY);
354
+ return ok({ fromX, fromY, toX, toY });
355
+ }
356
+ catch (e) {
357
+ return this.envelopeFromBackendError("drag", e);
358
+ }
359
+ }
360
+ async doWait(params) {
361
+ const ms = typeof params.ms === "number"
362
+ ? params.ms
363
+ : typeof params.seconds === "number"
364
+ ? params.seconds * 1000
365
+ : 0;
366
+ try {
367
+ await this.backend.wait(Math.max(0, ms));
368
+ return ok({ ms });
369
+ }
370
+ catch (e) {
371
+ return this.envelopeFromBackendError("wait", e);
372
+ }
373
+ }
374
+ async doAssert(params) {
375
+ const predicate = typeof params.predicate === "string" ? params.predicate : undefined;
376
+ if (!predicate) {
377
+ return err({
378
+ transport: "visual",
379
+ step: 0,
380
+ action: "visual_assert",
381
+ reason: "visual_assert requires params.predicate (string)",
382
+ suggestion: "pass a natural-language predicate for the visual backend",
383
+ exit_code: exitCodeFor("usage_error"),
384
+ });
385
+ }
386
+ try {
387
+ const answer = this.backend.ask
388
+ ? await this.backend.ask(`Does the screen satisfy: ${predicate}?`)
389
+ : "yes";
390
+ const truthy = /^(y|yes|true|1)$/i.test(answer.trim());
391
+ if (!truthy) {
392
+ return err({
393
+ transport: "visual",
394
+ step: 0,
395
+ action: "visual_assert",
396
+ reason: `visual backend did not confirm predicate "${predicate}" (got ${answer})`,
397
+ suggestion: "inspect the latest snapshot or refine the predicate",
398
+ retryable: true,
399
+ });
400
+ }
401
+ return ok({ predicate, answer });
402
+ }
403
+ catch (e) {
404
+ return this.envelopeFromBackendError("assert", e);
405
+ }
406
+ }
407
+ async doAsk(params) {
408
+ const question = typeof params.question === "string" ? params.question : undefined;
409
+ if (!question) {
410
+ return err({
411
+ transport: "visual",
412
+ step: 0,
413
+ action: "visual_ask",
414
+ reason: "visual_ask requires params.question (string)",
415
+ suggestion: "pass a natural-language question for the visual backend",
416
+ exit_code: exitCodeFor("usage_error"),
417
+ });
418
+ }
419
+ if (!this.backend.ask) {
420
+ return err({
421
+ transport: "visual",
422
+ step: 0,
423
+ action: "visual_ask",
424
+ reason: `backend ${this.backend.name} does not implement ask()`,
425
+ suggestion: "configure a backend with ask() support",
426
+ minimum_capability: "visual.ask",
427
+ exit_code: exitCodeFor("service_unavailable"),
428
+ });
429
+ }
430
+ try {
431
+ const answer = await this.backend.ask(question);
432
+ return ok({ question, answer });
433
+ }
434
+ catch (e) {
435
+ return this.envelopeFromBackendError("ask", e);
436
+ }
437
+ }
438
+ async doBackendInfo() {
439
+ return ok({ backend: this.backend.name });
440
+ }
441
+ async doLaunch(params) {
442
+ const app = typeof params.app === "string" ? params.app : undefined;
443
+ if (!app) {
444
+ return err({
445
+ transport: "visual",
446
+ step: 0,
447
+ action: "visual_launch",
448
+ reason: "visual_launch requires params.app (string)",
449
+ suggestion: "pass the app name to launch",
450
+ exit_code: exitCodeFor("usage_error"),
451
+ });
452
+ }
453
+ if (!this.backend.launch) {
454
+ return err({
455
+ transport: "visual",
456
+ step: 0,
457
+ action: "visual_launch",
458
+ reason: `backend ${this.backend.name} does not support launch()`,
459
+ suggestion: "use a native desktop transport for local app launch",
460
+ minimum_capability: "visual.launch",
461
+ exit_code: exitCodeFor("service_unavailable"),
462
+ });
463
+ }
464
+ try {
465
+ await this.backend.launch(app);
466
+ return ok({ app });
467
+ }
468
+ catch (e) {
469
+ return this.envelopeFromBackendError("launch", e);
470
+ }
471
+ }
472
+ }
473
+ //# sourceMappingURL=visual.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visual.js","sourceRoot":"","sources":["../../../src/transport/adapters/visual.ts"],"names":[],"mappings":"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"}
@@ -46,7 +46,7 @@ export { stepPlatform, stepSupportedBy };
46
46
  * plugins for registering additional {@link TransportAdapter}s.
47
47
  *
48
48
  * First call constructs a bus pre-populated with the seven built-in
49
- * transports (HTTP, CDP, subprocess, desktop AX/UIA/AT-SPI, CUA).
49
+ * transports (HTTP, CDP, subprocess, desktop AX/UIA/AT-SPI, Visual).
50
50
  * Subsequent calls return the same instance. Calling `register()` on
51
51
  * the returned bus is the supported plugin extension point:
52
52
  *
@@ -24,7 +24,7 @@
24
24
  */
25
25
  import { err } from "../core/envelope.js";
26
26
  import { CAPABILITY_MATRIX, stepPlatform, stepSupportedBy, } from "./capability.js";
27
- import { CuaTransport } from "./adapters/cua.js";
27
+ import { VisualTransport } from "./adapters/visual.js";
28
28
  import { DesktopAxTransport } from "./adapters/desktop-ax.js";
29
29
  import { DesktopUiaTransport } from "./adapters/desktop-uia.js";
30
30
  import { DesktopAtspiTransport } from "./adapters/desktop-atspi.js";
@@ -130,7 +130,7 @@ let sharedBus;
130
130
  * plugins for registering additional {@link TransportAdapter}s.
131
131
  *
132
132
  * First call constructs a bus pre-populated with the seven built-in
133
- * transports (HTTP, CDP, subprocess, desktop AX/UIA/AT-SPI, CUA).
133
+ * transports (HTTP, CDP, subprocess, desktop AX/UIA/AT-SPI, Visual).
134
134
  * Subsequent calls return the same instance. Calling `register()` on
135
135
  * the returned bus is the supported plugin extension point:
136
136
  *
@@ -149,7 +149,7 @@ export function getBus() {
149
149
  bus.register(new DesktopAxTransport());
150
150
  bus.register(new DesktopUiaTransport());
151
151
  bus.register(new DesktopAtspiTransport());
152
- bus.register(new CuaTransport());
152
+ bus.register(new VisualTransport());
153
153
  sharedBus = bus;
154
154
  return bus;
155
155
  }