@zenalexa/unicli 0.213.3 → 0.215.0

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 (188) hide show
  1. package/AGENTS.md +10 -10
  2. package/README.md +40 -27
  3. package/README.zh-CN.md +36 -36
  4. package/dist/adapters/_electron/desktop-shared.d.ts +12 -0
  5. package/dist/adapters/_electron/desktop-shared.d.ts.map +1 -0
  6. package/dist/adapters/_electron/desktop-shared.js +312 -0
  7. package/dist/adapters/_electron/desktop-shared.js.map +1 -0
  8. package/dist/adapters/electron-desktop/electron-desktop.d.ts +9 -0
  9. package/dist/adapters/electron-desktop/electron-desktop.d.ts.map +1 -0
  10. package/dist/adapters/electron-desktop/electron-desktop.js +56 -0
  11. package/dist/adapters/electron-desktop/electron-desktop.js.map +1 -0
  12. package/dist/browser/adapter-authoring.d.ts +20 -0
  13. package/dist/browser/adapter-authoring.d.ts.map +1 -0
  14. package/dist/browser/adapter-authoring.js +68 -0
  15. package/dist/browser/adapter-authoring.js.map +1 -0
  16. package/dist/browser/analyze.d.ts +54 -0
  17. package/dist/browser/analyze.d.ts.map +1 -0
  18. package/dist/browser/analyze.js +205 -0
  19. package/dist/browser/analyze.js.map +1 -0
  20. package/dist/browser/bridge.d.ts +1 -1
  21. package/dist/browser/bridge.d.ts.map +1 -1
  22. package/dist/browser/bridge.js +2 -0
  23. package/dist/browser/bridge.js.map +1 -1
  24. package/dist/browser/daemon-client.d.ts.map +1 -1
  25. package/dist/browser/daemon-client.js +12 -1
  26. package/dist/browser/daemon-client.js.map +1 -1
  27. package/dist/browser/network-cache.d.ts +58 -0
  28. package/dist/browser/network-cache.d.ts.map +1 -0
  29. package/dist/browser/network-cache.js +146 -0
  30. package/dist/browser/network-cache.js.map +1 -0
  31. package/dist/browser/page.d.ts +1 -1
  32. package/dist/browser/page.d.ts.map +1 -1
  33. package/dist/browser/page.js +2 -1
  34. package/dist/browser/page.js.map +1 -1
  35. package/dist/browser/protocol.d.ts +6 -2
  36. package/dist/browser/protocol.d.ts.map +1 -1
  37. package/dist/browser/site-memory.d.ts +57 -0
  38. package/dist/browser/site-memory.d.ts.map +1 -0
  39. package/dist/browser/site-memory.js +127 -0
  40. package/dist/browser/site-memory.js.map +1 -0
  41. package/dist/browser/verify-fixture.d.ts +30 -0
  42. package/dist/browser/verify-fixture.d.ts.map +1 -0
  43. package/dist/browser/verify-fixture.js +168 -0
  44. package/dist/browser/verify-fixture.js.map +1 -0
  45. package/dist/browser/workspace.d.ts +8 -0
  46. package/dist/browser/workspace.d.ts.map +1 -0
  47. package/dist/browser/workspace.js +15 -0
  48. package/dist/browser/workspace.js.map +1 -0
  49. package/dist/commands/browser-adapter-authoring.d.ts +3 -0
  50. package/dist/commands/browser-adapter-authoring.d.ts.map +1 -0
  51. package/dist/commands/browser-adapter-authoring.js +206 -0
  52. package/dist/commands/browser-adapter-authoring.js.map +1 -0
  53. package/dist/commands/browser-authoring-operator.d.ts +3 -0
  54. package/dist/commands/browser-authoring-operator.d.ts.map +1 -0
  55. package/dist/commands/browser-authoring-operator.js +110 -0
  56. package/dist/commands/browser-authoring-operator.js.map +1 -0
  57. package/dist/commands/browser-operator-runtime.d.ts +38 -0
  58. package/dist/commands/browser-operator-runtime.d.ts.map +1 -0
  59. package/dist/commands/browser-operator-runtime.js +281 -0
  60. package/dist/commands/browser-operator-runtime.js.map +1 -0
  61. package/dist/commands/browser-operator.d.ts +6 -0
  62. package/dist/commands/browser-operator.d.ts.map +1 -0
  63. package/dist/commands/browser-operator.js +374 -0
  64. package/dist/commands/browser-operator.js.map +1 -0
  65. package/dist/commands/browser.d.ts.map +1 -1
  66. package/dist/commands/browser.js +72 -1
  67. package/dist/commands/browser.js.map +1 -1
  68. package/dist/commands/daemon.d.ts.map +1 -1
  69. package/dist/commands/daemon.js +40 -4
  70. package/dist/commands/daemon.js.map +1 -1
  71. package/dist/commands/explore.d.ts.map +1 -1
  72. package/dist/commands/explore.js +4 -1
  73. package/dist/commands/explore.js.map +1 -1
  74. package/dist/commands/generate.d.ts.map +1 -1
  75. package/dist/commands/generate.js +4 -1
  76. package/dist/commands/generate.js.map +1 -1
  77. package/dist/commands/mcp.d.ts.map +1 -1
  78. package/dist/commands/mcp.js +14 -14
  79. package/dist/commands/mcp.js.map +1 -1
  80. package/dist/commands/migrate-schema.d.ts.map +1 -1
  81. package/dist/commands/migrate-schema.js +10 -0
  82. package/dist/commands/migrate-schema.js.map +1 -1
  83. package/dist/commands/operate.d.ts +4 -3
  84. package/dist/commands/operate.d.ts.map +1 -1
  85. package/dist/commands/operate.js +8 -483
  86. package/dist/commands/operate.js.map +1 -1
  87. package/dist/commands/record.d.ts.map +1 -1
  88. package/dist/commands/record.js +2 -1
  89. package/dist/commands/record.js.map +1 -1
  90. package/dist/commands/search.js +1 -1
  91. package/dist/commands/search.js.map +1 -1
  92. package/dist/commands/skills.js +1 -1
  93. package/dist/commands/skills.js.map +1 -1
  94. package/dist/commands/synthesize.d.ts.map +1 -1
  95. package/dist/commands/synthesize.js +33 -3
  96. package/dist/commands/synthesize.js.map +1 -1
  97. package/dist/discovery/aliases.d.ts.map +1 -1
  98. package/dist/discovery/aliases.js +76 -1
  99. package/dist/discovery/aliases.js.map +1 -1
  100. package/dist/discovery/loader.d.ts.map +1 -1
  101. package/dist/discovery/loader.js +3 -1
  102. package/dist/discovery/loader.js.map +1 -1
  103. package/dist/electron-apps.d.ts +22 -0
  104. package/dist/electron-apps.d.ts.map +1 -1
  105. package/dist/electron-apps.js +324 -0
  106. package/dist/electron-apps.js.map +1 -1
  107. package/dist/engine/download.d.ts.map +1 -1
  108. package/dist/engine/download.js +12 -5
  109. package/dist/engine/download.js.map +1 -1
  110. package/dist/engine/repair/engine.js +2 -2
  111. package/dist/engine/repair/engine.js.map +1 -1
  112. package/dist/engine/steps/desktop-ax.d.ts +10 -0
  113. package/dist/engine/steps/desktop-ax.d.ts.map +1 -1
  114. package/dist/engine/steps/desktop-ax.js +20 -0
  115. package/dist/engine/steps/desktop-ax.js.map +1 -1
  116. package/dist/engine/steps/exec.d.ts +1 -1
  117. package/dist/engine/steps/exec.d.ts.map +1 -1
  118. package/dist/engine/steps/exec.js +20 -1
  119. package/dist/engine/steps/exec.js.map +1 -1
  120. package/dist/engine/steps/write-temp.js +1 -1
  121. package/dist/engine/steps/write-temp.js.map +1 -1
  122. package/dist/engine/template.d.ts.map +1 -1
  123. package/dist/engine/template.js +10 -2
  124. package/dist/engine/template.js.map +1 -1
  125. package/dist/manifest-compact.txt +8 -7
  126. package/dist/manifest-search.json +1 -1
  127. package/dist/manifest.json +2161 -171
  128. package/dist/mcp/http-transport.d.ts.map +1 -1
  129. package/dist/mcp/http-transport.js +3 -6
  130. package/dist/mcp/http-transport.js.map +1 -1
  131. package/dist/mcp/streamable-http/handle-post.js +1 -1
  132. package/dist/mcp/tools.d.ts +2 -1
  133. package/dist/mcp/tools.d.ts.map +1 -1
  134. package/dist/mcp/tools.js +8 -4
  135. package/dist/mcp/tools.js.map +1 -1
  136. package/dist/output/envelope.d.ts +1 -5
  137. package/dist/output/envelope.d.ts.map +1 -1
  138. package/dist/output/envelope.js +1 -5
  139. package/dist/output/envelope.js.map +1 -1
  140. package/dist/output/formatter.d.ts +2 -2
  141. package/dist/output/formatter.js +3 -3
  142. package/dist/output/formatter.js.map +1 -1
  143. package/dist/transport/adapters/cua.d.ts +9 -10
  144. package/dist/transport/adapters/cua.d.ts.map +1 -1
  145. package/dist/transport/adapters/cua.js +22 -24
  146. package/dist/transport/adapters/cua.js.map +1 -1
  147. package/dist/transport/adapters/desktop-atspi.d.ts +1 -1
  148. package/dist/transport/adapters/desktop-atspi.js +2 -2
  149. package/dist/transport/adapters/desktop-atspi.js.map +1 -1
  150. package/dist/transport/adapters/desktop-ax-background-click-swift.d.ts +11 -0
  151. package/dist/transport/adapters/desktop-ax-background-click-swift.d.ts.map +1 -0
  152. package/dist/transport/adapters/desktop-ax-background-click-swift.js +136 -0
  153. package/dist/transport/adapters/desktop-ax-background-click-swift.js.map +1 -0
  154. package/dist/transport/adapters/desktop-ax-background-click.d.ts +4 -0
  155. package/dist/transport/adapters/desktop-ax-background-click.d.ts.map +1 -0
  156. package/dist/transport/adapters/desktop-ax-background-click.js +70 -0
  157. package/dist/transport/adapters/desktop-ax-background-click.js.map +1 -0
  158. package/dist/transport/adapters/desktop-ax-swift.d.ts +56 -0
  159. package/dist/transport/adapters/desktop-ax-swift.d.ts.map +1 -0
  160. package/dist/transport/adapters/desktop-ax-swift.js +458 -0
  161. package/dist/transport/adapters/desktop-ax-swift.js.map +1 -0
  162. package/dist/transport/adapters/desktop-ax.d.ts +14 -0
  163. package/dist/transport/adapters/desktop-ax.d.ts.map +1 -1
  164. package/dist/transport/adapters/desktop-ax.js +262 -32
  165. package/dist/transport/adapters/desktop-ax.js.map +1 -1
  166. package/dist/transport/adapters/desktop-uia.d.ts +1 -1
  167. package/dist/transport/adapters/desktop-uia.js +2 -2
  168. package/dist/transport/adapters/desktop-uia.js.map +1 -1
  169. package/dist/transport/adapters/http.js +1 -1
  170. package/dist/transport/adapters/http.js.map +1 -1
  171. package/dist/transport/capability.d.ts +1 -1
  172. package/dist/transport/capability.d.ts.map +1 -1
  173. package/dist/transport/capability.js +6 -1
  174. package/dist/transport/capability.js.map +1 -1
  175. package/package.json +2 -2
  176. package/src/adapters/_electron/desktop-shared.ts +383 -0
  177. package/src/adapters/docker/build.yaml +1 -1
  178. package/src/adapters/docker/images.yaml +1 -1
  179. package/src/adapters/docker/logs.yaml +1 -1
  180. package/src/adapters/docker/networks.yaml +1 -1
  181. package/src/adapters/docker/ps.yaml +1 -1
  182. package/src/adapters/docker/run.yaml +1 -1
  183. package/src/adapters/docker/volumes.yaml +1 -1
  184. package/src/adapters/electron-desktop/electron-desktop.ts +57 -0
  185. package/src/adapters/macos/caffeinate.yaml +2 -2
  186. package/src/adapters/macos/processes.yaml +3 -3
  187. package/src/adapters/macos/screen-recording.yaml +2 -2
  188. package/src/adapters/substack/trending.yaml +2 -1
@@ -0,0 +1,458 @@
1
+ import { findElectronApp } from "../../electron-apps.js";
2
+ export { buildAxBackgroundClickScript, } from "./desktop-ax-background-click-swift.js";
3
+ export function buildElectronAxWarmupScript(target, waitMs) {
4
+ return [
5
+ `import AppKit`,
6
+ `import ApplicationServices`,
7
+ `import CoreFoundation`,
8
+ `import Foundation`,
9
+ ``,
10
+ ...buildRunningAppPrelude(target, waitMs),
11
+ `let pumpMs = 500`,
12
+ `let trusted = AXIsProcessTrusted()`,
13
+ ``,
14
+ swiftEmitHelper(),
15
+ ``,
16
+ `guard let running else {`,
17
+ ` emit([`,
18
+ ` "trusted": trusted,`,
19
+ ` "found": false,`,
20
+ ` "bundleId": bundleId,`,
21
+ ` "localizedName": processName,`,
22
+ ` ])`,
23
+ ` exit(0)`,
24
+ `}`,
25
+ ``,
26
+ `guard trusted else {`,
27
+ ` emit([`,
28
+ ` "trusted": false,`,
29
+ ` "found": true,`,
30
+ ` "pid": Int(running.processIdentifier),`,
31
+ ` "bundleId": running.bundleIdentifier ?? bundleId,`,
32
+ ` "localizedName": running.localizedName ?? processName,`,
33
+ ` ])`,
34
+ ` exit(0)`,
35
+ `}`,
36
+ ``,
37
+ `let root = AXUIElementCreateApplication(running.processIdentifier)`,
38
+ `let attributes = ["AXManualAccessibility", "AXEnhancedUserInterface"]`,
39
+ `var setResults: [String: Int] = [:]`,
40
+ `for attr in attributes {`,
41
+ ` let result = AXUIElementSetAttributeValue(root, attr as CFString, kCFBooleanTrue)`,
42
+ ` setResults[attr] = Int(result.rawValue)`,
43
+ `}`,
44
+ ``,
45
+ `var observerCreated = false`,
46
+ `var observerResults: [String: Int] = [:]`,
47
+ `var observer: AXObserver?`,
48
+ `let createResult = AXObserverCreate(running.processIdentifier, { _, _, _, _ in }, &observer)`,
49
+ `observerResults["__create__"] = Int(createResult.rawValue)`,
50
+ `if createResult == .success, let observer {`,
51
+ ` observerCreated = true`,
52
+ ` if let source = AXObserverGetRunLoopSource(observer) as CFRunLoopSource? {`,
53
+ ` CFRunLoopAddSource(CFRunLoopGetCurrent(), source, CFRunLoopMode.defaultMode)`,
54
+ ` }`,
55
+ ` let notifications = ["AXFocusedUIElementChanged", "AXWindowCreated", "AXValueChanged"]`,
56
+ ` for note in notifications {`,
57
+ ` let result = AXObserverAddNotification(observer, root, note as CFString, nil)`,
58
+ ` observerResults[note] = Int(result.rawValue)`,
59
+ ` }`,
60
+ ` let end = CFAbsoluteTimeGetCurrent() + Double(pumpMs) / 1000.0`,
61
+ ` while CFAbsoluteTimeGetCurrent() < end {`,
62
+ ` _ = CFRunLoopRunInMode(CFRunLoopMode.defaultMode, end - CFAbsoluteTimeGetCurrent(), false)`,
63
+ ` }`,
64
+ `}`,
65
+ ``,
66
+ `emit([`,
67
+ ` "trusted": true,`,
68
+ ` "found": true,`,
69
+ ` "pid": Int(running.processIdentifier),`,
70
+ ` "bundleId": running.bundleIdentifier ?? bundleId,`,
71
+ ` "localizedName": running.localizedName ?? processName,`,
72
+ ` "setResults": setResults,`,
73
+ ` "observerCreated": observerCreated,`,
74
+ ` "observerResults": observerResults,`,
75
+ ` "pumpMs": pumpMs,`,
76
+ `])`,
77
+ ].join("\n");
78
+ }
79
+ export function buildAxSnapshotScript(target, opts) {
80
+ return [
81
+ `import AppKit`,
82
+ `import ApplicationServices`,
83
+ `import CoreFoundation`,
84
+ `import Foundation`,
85
+ ``,
86
+ ...buildRunningAppPrelude(target, 0),
87
+ swiftEmitHelper(),
88
+ swiftAxHelpers(),
89
+ `let commandMode = "snapshot"`,
90
+ `let snapshotScope = ${swiftStringLiteral(opts.scope)}`,
91
+ `let snapshotMaxDepth = ${normalizeInt(opts.maxDepth, 3)}`,
92
+ ``,
93
+ `guard let running else {`,
94
+ ` emit([`,
95
+ ` "found": false,`,
96
+ ` "scope": snapshotScope,`,
97
+ ` "bundleId": bundleId,`,
98
+ ` "localizedName": processName,`,
99
+ ` ])`,
100
+ ` exit(0)`,
101
+ `}`,
102
+ ``,
103
+ `let axApp = AXUIElementCreateApplication(running.processIdentifier)`,
104
+ `let root = snapshotScope == "focusedElement"`,
105
+ ` ? focusedElement(in: axApp) ?? focusedWindow(in: axApp) ?? axApp`,
106
+ ` : focusedWindow(in: axApp) ?? focusedElement(in: axApp) ?? axApp`,
107
+ `emit([`,
108
+ ` "found": true,`,
109
+ ` "matched": true,`,
110
+ ` "mode": commandMode,`,
111
+ ` "scope": snapshotScope,`,
112
+ ` "bundleId": running.bundleIdentifier ?? bundleId,`,
113
+ ` "localizedName": running.localizedName ?? processName,`,
114
+ ` "element": describe(root, depth: 0, maxDepth: snapshotMaxDepth),`,
115
+ `])`,
116
+ ].join("\n");
117
+ }
118
+ export function buildAxFocusedReadScript(target, query) {
119
+ return buildAxElementCommandScript(target, "focused_read", query);
120
+ }
121
+ export function buildAxSetValueScript(target, opts) {
122
+ return buildAxElementCommandScript(target, "set_value", opts);
123
+ }
124
+ export function buildAxPressScript(target, opts) {
125
+ return buildAxElementCommandScript(target, "press", opts);
126
+ }
127
+ export function swiftStringLiteral(value) {
128
+ return `"${value
129
+ .replace(/\\/g, "\\\\")
130
+ .replace(/"/g, '\\"')
131
+ .replace(/\r/g, "\\r")
132
+ .replace(/\n/g, "\\n")
133
+ .replaceAll("\0", "")}"`;
134
+ }
135
+ export function swiftStringArray(values) {
136
+ return `[${values.map(swiftStringLiteral).join(", ")}]`;
137
+ }
138
+ function swiftStringSet(values) {
139
+ return `Set<String>(${swiftStringArray(values)})`;
140
+ }
141
+ export function resolveAxTarget(params) {
142
+ const appParam = typeof params.app === "string" ? params.app.trim() : "";
143
+ const bundleIdParam = typeof params.bundleId === "string" ? params.bundleId.trim() : "";
144
+ const processNameParam = typeof params.processName === "string" ? params.processName.trim() : "";
145
+ const ensureElectronAx = typeof params.ensureElectronAx === "boolean"
146
+ ? params.ensureElectronAx
147
+ : undefined;
148
+ const electron = findElectronApp(bundleIdParam) ??
149
+ findElectronApp(appParam) ??
150
+ findElectronApp(processNameParam);
151
+ const bundleId = bundleIdParam || electron?.bundleId || undefined;
152
+ const processName = processNameParam || electron?.processName || appParam || undefined;
153
+ const appName = electron?.displayName || processName || appParam || bundleId || undefined;
154
+ if (!appName || !processName)
155
+ return null;
156
+ return {
157
+ appName,
158
+ openArgs: bundleId ? ["-b", bundleId] : ["-a", appName],
159
+ activationRef: bundleId
160
+ ? `application id "${escapeAs(bundleId)}"`
161
+ : `application "${escapeAs(appName)}"`,
162
+ uiProcessName: processName,
163
+ bundleId,
164
+ processName,
165
+ executableNames: electron?.executableNames ?? [processName],
166
+ ensureElectronAx: ensureElectronAx ?? Boolean(electron),
167
+ };
168
+ }
169
+ export function readAxElementQuery(params, defaultFocused) {
170
+ return {
171
+ focused: typeof params.focused === "boolean" ? params.focused : defaultFocused,
172
+ maxDepth: readPositiveInt(params.maxDepth, 8),
173
+ roles: readStringList(params.role),
174
+ subroles: readStringList(params.subrole),
175
+ titles: readStringList(params.title),
176
+ descriptions: readStringList(params.description),
177
+ identifiers: readStringList(params.identifier),
178
+ titlePrefix: typeof params.titlePrefix === "boolean" ? params.titlePrefix : false,
179
+ descriptionPrefix: typeof params.descriptionPrefix === "boolean"
180
+ ? params.descriptionPrefix
181
+ : false,
182
+ };
183
+ }
184
+ export function hasAxElementMatcher(params) {
185
+ return (readStringList(params.role).length > 0 ||
186
+ readStringList(params.subrole).length > 0 ||
187
+ readStringList(params.title).length > 0 ||
188
+ readStringList(params.description).length > 0 ||
189
+ readStringList(params.identifier).length > 0);
190
+ }
191
+ export function readPositiveInt(value, fallback) {
192
+ return typeof value === "number" && Number.isFinite(value) && value >= 0
193
+ ? Math.trunc(value)
194
+ : fallback;
195
+ }
196
+ function buildRunningAppPrelude(target, waitMs) {
197
+ return [
198
+ `let bundleId: String? = ${swiftStringLiteral(target.bundleId ?? "")}.isEmpty ? nil : ${swiftStringLiteral(target.bundleId ?? "")}`,
199
+ `let processName: String? = ${swiftStringLiteral(target.processName)}.isEmpty ? nil : ${swiftStringLiteral(target.processName)}`,
200
+ `let executableNames: [String] = ${swiftStringArray(target.executableNames)}`,
201
+ `let waitMs = ${normalizeInt(waitMs, 0)}`,
202
+ ``,
203
+ `func matches(_ app: NSRunningApplication) -> Bool {`,
204
+ ` if let bundleId, app.bundleIdentifier == bundleId { return true }`,
205
+ ` if let processName, app.localizedName == processName { return true }`,
206
+ ` if let executable = app.executableURL?.lastPathComponent, executableNames.contains(executable) { return true }`,
207
+ ` return false`,
208
+ `}`,
209
+ ``,
210
+ `let deadline = Date().addingTimeInterval(Double(waitMs) / 1000.0)`,
211
+ `var running = NSWorkspace.shared.runningApplications.first(where: matches)`,
212
+ `while running == nil && waitMs > 0 && Date() < deadline {`,
213
+ ` Thread.sleep(forTimeInterval: 0.1)`,
214
+ ` running = NSWorkspace.shared.runningApplications.first(where: matches)`,
215
+ `}`,
216
+ ``,
217
+ ];
218
+ }
219
+ function buildAxElementCommandScript(target, mode, opts) {
220
+ const setValue = "value" in opts ? opts.value : "";
221
+ const attribute = "attribute" in opts ? opts.attribute : "AXValue";
222
+ const actionName = "actionName" in opts ? opts.actionName : "AXPress";
223
+ return [
224
+ `import AppKit`,
225
+ `import ApplicationServices`,
226
+ `import CoreFoundation`,
227
+ `import Foundation`,
228
+ ``,
229
+ ...buildRunningAppPrelude(target, 0),
230
+ swiftEmitHelper(),
231
+ swiftAxHelpers(),
232
+ `let commandMode = ${swiftStringLiteral(mode)}`,
233
+ `let queryFocused = ${opts.focused ? "true" : "false"}`,
234
+ `let queryMaxDepth = ${normalizeInt(opts.maxDepth, 8)}`,
235
+ `let queryRoles = ${swiftStringSet(opts.roles)}`,
236
+ `let querySubroles = ${swiftStringSet(opts.subroles)}`,
237
+ `let queryTitles = ${swiftStringSet(opts.titles)}`,
238
+ `let queryDescriptions = ${swiftStringSet(opts.descriptions)}`,
239
+ `let queryIdentifiers = ${swiftStringSet(opts.identifiers)}`,
240
+ `let queryTitlePrefix = ${opts.titlePrefix ? "true" : "false"}`,
241
+ `let queryDescriptionPrefix = ${opts.descriptionPrefix ? "true" : "false"}`,
242
+ `let writeAttribute = ${swiftStringLiteral(attribute)}`,
243
+ `let writeValue = ${swiftStringLiteral(setValue)}`,
244
+ `let performActionName = ${swiftStringLiteral(actionName)}`,
245
+ ``,
246
+ `func matchesValue(_ value: String?, _ candidates: Set<String>, prefix: Bool = false) -> Bool {`,
247
+ ` if candidates.isEmpty { return true }`,
248
+ ` guard let value else { return false }`,
249
+ ` if prefix { return candidates.contains(where: { value.hasPrefix($0) }) }`,
250
+ ` return candidates.contains(value)`,
251
+ `}`,
252
+ ``,
253
+ `func matchesQuery(_ element: AXUIElement) -> Bool {`,
254
+ ` let role = stringAttr(element, kAXRoleAttribute as String)`,
255
+ ` let subrole = stringAttr(element, kAXSubroleAttribute as String)`,
256
+ ` let title = stringAttr(element, kAXTitleAttribute as String)`,
257
+ ` let description = stringAttr(element, kAXDescriptionAttribute as String)`,
258
+ ` let identifier = stringAttr(element, "AXIdentifier")`,
259
+ ` return matchesValue(role, queryRoles)`,
260
+ ` && matchesValue(subrole, querySubroles)`,
261
+ ` && matchesValue(title, queryTitles, prefix: queryTitlePrefix)`,
262
+ ` && matchesValue(description, queryDescriptions, prefix: queryDescriptionPrefix)`,
263
+ ` && matchesValue(identifier, queryIdentifiers)`,
264
+ `}`,
265
+ ``,
266
+ `func findMatching(_ root: AXUIElement, depth: Int = 0) -> AXUIElement? {`,
267
+ ` guard depth <= queryMaxDepth else { return nil }`,
268
+ ` if matchesQuery(root) { return root }`,
269
+ ` for child in children(root) {`,
270
+ ` if let found = findMatching(child, depth: depth + 1) { return found }`,
271
+ ` }`,
272
+ ` return nil`,
273
+ `}`,
274
+ ``,
275
+ `func selectElement(in app: AXUIElement) -> AXUIElement? {`,
276
+ ` let focused = focusedElement(in: app)`,
277
+ ` let hasQuery = !queryRoles.isEmpty || !querySubroles.isEmpty || !queryTitles.isEmpty || !queryDescriptions.isEmpty || !queryIdentifiers.isEmpty`,
278
+ ` if !hasQuery {`,
279
+ ` return focused ?? focusedWindow(in: app)`,
280
+ ` }`,
281
+ ` if queryFocused, let focused, matchesQuery(focused) {`,
282
+ ` return focused`,
283
+ ` }`,
284
+ ` if queryFocused { return nil }`,
285
+ ` if let window = focusedWindow(in: app), let found = findMatching(window) {`,
286
+ ` return found`,
287
+ ` }`,
288
+ ` return findMatching(app)`,
289
+ `}`,
290
+ ``,
291
+ `guard let running else {`,
292
+ ` emit([`,
293
+ ` "found": false,`,
294
+ ` "mode": commandMode,`,
295
+ ` "bundleId": bundleId,`,
296
+ ` "localizedName": processName,`,
297
+ ` ])`,
298
+ ` exit(0)`,
299
+ `}`,
300
+ ``,
301
+ `let axApp = AXUIElementCreateApplication(running.processIdentifier)`,
302
+ `guard let element = selectElement(in: axApp) else {`,
303
+ ` emit([`,
304
+ ` "found": true,`,
305
+ ` "matched": false,`,
306
+ ` "mode": commandMode,`,
307
+ ` "bundleId": running.bundleIdentifier ?? bundleId,`,
308
+ ` "localizedName": running.localizedName ?? processName,`,
309
+ ` ])`,
310
+ ` exit(0)`,
311
+ `}`,
312
+ ``,
313
+ `switch commandMode {`,
314
+ `case "set_value":`,
315
+ ` let result = AXUIElementSetAttributeValue(element, writeAttribute as CFString, writeValue as CFTypeRef)`,
316
+ ` Thread.sleep(forTimeInterval: 0.15)`,
317
+ ` emit([`,
318
+ ` "found": true,`,
319
+ ` "matched": true,`,
320
+ ` "mode": commandMode,`,
321
+ ` "bundleId": running.bundleIdentifier ?? bundleId,`,
322
+ ` "localizedName": running.localizedName ?? processName,`,
323
+ ` "attribute": writeAttribute,`,
324
+ ` "result": Int(result.rawValue),`,
325
+ ` "element": describe(element, depth: 0, maxDepth: 1),`,
326
+ ` ])`,
327
+ `case "press":`,
328
+ ` let result = AXUIElementPerformAction(element, performActionName as CFString)`,
329
+ ` emit([`,
330
+ ` "found": true,`,
331
+ ` "matched": true,`,
332
+ ` "mode": commandMode,`,
333
+ ` "bundleId": running.bundleIdentifier ?? bundleId,`,
334
+ ` "localizedName": running.localizedName ?? processName,`,
335
+ ` "action": performActionName,`,
336
+ ` "result": Int(result.rawValue),`,
337
+ ` "element": describe(element, depth: 0, maxDepth: 1),`,
338
+ ` ])`,
339
+ `default:`,
340
+ ` emit([`,
341
+ ` "found": true,`,
342
+ ` "matched": true,`,
343
+ ` "mode": commandMode,`,
344
+ ` "bundleId": running.bundleIdentifier ?? bundleId,`,
345
+ ` "localizedName": running.localizedName ?? processName,`,
346
+ ` "element": describe(element, depth: 0, maxDepth: 1),`,
347
+ ` ])`,
348
+ `}`,
349
+ ].join("\n");
350
+ }
351
+ function swiftEmitHelper() {
352
+ return [
353
+ `func emit(_ object: [String: Any?]) {`,
354
+ ` let flat = object.reduce(into: [String: Any]()) { acc, item in`,
355
+ ` if let value = item.value { acc[item.key] = value }`,
356
+ ` }`,
357
+ ` let data = try! JSONSerialization.data(withJSONObject: flat, options: [])`,
358
+ ` FileHandle.standardOutput.write(data)`,
359
+ `}`,
360
+ ].join("\n");
361
+ }
362
+ function swiftAxHelpers() {
363
+ return [
364
+ ``,
365
+ `func attr(_ el: AXUIElement, _ name: String) -> AnyObject? {`,
366
+ ` var value: CFTypeRef?`,
367
+ ` guard AXUIElementCopyAttributeValue(el, name as CFString, &value) == .success else { return nil }`,
368
+ ` return value as AnyObject?`,
369
+ `}`,
370
+ ``,
371
+ `func stringAttr(_ el: AXUIElement, _ name: String) -> String? {`,
372
+ ` if let value = attr(el, name) as? String, !value.isEmpty { return value }`,
373
+ ` return nil`,
374
+ `}`,
375
+ ``,
376
+ `func boolAttr(_ el: AXUIElement, _ name: String) -> Bool? {`,
377
+ ` if let value = attr(el, name) as? NSNumber { return value.boolValue }`,
378
+ ` return nil`,
379
+ `}`,
380
+ ``,
381
+ `func valueAttr(_ el: AXUIElement) -> Any? {`,
382
+ ` guard let raw = attr(el, kAXValueAttribute as String) else { return nil }`,
383
+ ` if let value = raw as? String { return value }`,
384
+ ` if let value = raw as? NSNumber { return value }`,
385
+ ` return String(describing: raw)`,
386
+ `}`,
387
+ ``,
388
+ `func children(_ el: AXUIElement) -> [AXUIElement] {`,
389
+ ` (attr(el, kAXChildrenAttribute as String) as? [AnyObject] ?? []).compactMap { axElement($0) }`,
390
+ `}`,
391
+ ``,
392
+ `func axElement(_ raw: AnyObject?) -> AXUIElement? {`,
393
+ ` guard let raw else { return nil }`,
394
+ ` let value = raw as CFTypeRef`,
395
+ ` guard CFGetTypeID(value) == AXUIElementGetTypeID() else { return nil }`,
396
+ ` return (raw as! AXUIElement)`,
397
+ `}`,
398
+ ``,
399
+ `func actionNames(_ el: AXUIElement) -> [String] {`,
400
+ ` var raw: CFArray?`,
401
+ ` guard AXUIElementCopyActionNames(el, &raw) == .success else { return [] }`,
402
+ ` return raw as? [String] ?? []`,
403
+ `}`,
404
+ ``,
405
+ `func focusedWindow(in app: AXUIElement) -> AXUIElement? {`,
406
+ ` return axElement(attr(app, kAXFocusedWindowAttribute as String))`,
407
+ `}`,
408
+ ``,
409
+ `func focusedElement(in app: AXUIElement) -> AXUIElement? {`,
410
+ ` if let focused = axElement(attr(app, kAXFocusedUIElementAttribute as String)) { return focused }`,
411
+ ` if let window = focusedWindow(in: app), let focused = axElement(attr(window, kAXFocusedUIElementAttribute as String)) {`,
412
+ ` return focused`,
413
+ ` }`,
414
+ ` return nil`,
415
+ `}`,
416
+ ``,
417
+ `func describe(_ el: AXUIElement, depth: Int, maxDepth: Int) -> [String: Any] {`,
418
+ ` var out: [String: Any] = [:]`,
419
+ ` if let role = stringAttr(el, kAXRoleAttribute as String) { out["role"] = role }`,
420
+ ` if let subrole = stringAttr(el, kAXSubroleAttribute as String) { out["subrole"] = subrole }`,
421
+ ` if let title = stringAttr(el, kAXTitleAttribute as String) { out["title"] = title }`,
422
+ ` if let description = stringAttr(el, kAXDescriptionAttribute as String) { out["description"] = description }`,
423
+ ` if let identifier = stringAttr(el, "AXIdentifier") { out["identifier"] = identifier }`,
424
+ ` if let value = valueAttr(el) { out["value"] = value }`,
425
+ ` if let enabled = boolAttr(el, kAXEnabledAttribute as String) { out["enabled"] = enabled }`,
426
+ ` let actions = actionNames(el)`,
427
+ ` if !actions.isEmpty { out["actions"] = actions }`,
428
+ ` let kids = children(el)`,
429
+ ` out["childCount"] = kids.count`,
430
+ ` if depth < maxDepth {`,
431
+ ` out["children"] = Array(kids.prefix(50)).map { describe($0, depth: depth + 1, maxDepth: maxDepth) }`,
432
+ ` }`,
433
+ ` return out`,
434
+ `}`,
435
+ ].join("\n");
436
+ }
437
+ function normalizeInt(value, fallback) {
438
+ return String(readPositiveInt(value, fallback));
439
+ }
440
+ function readStringList(value) {
441
+ if (typeof value === "string") {
442
+ const trimmed = value.trim();
443
+ return trimmed ? [trimmed] : [];
444
+ }
445
+ if (!Array.isArray(value))
446
+ return [];
447
+ return value
448
+ .map((item) => (typeof item === "string" ? item.trim() : ""))
449
+ .filter(Boolean);
450
+ }
451
+ function escapeAs(s) {
452
+ return s
453
+ .replace(/\\/g, "\\\\")
454
+ .replace(/"/g, '\\"')
455
+ .replace(/[\r\n]/g, " ")
456
+ .replaceAll("\0", "");
457
+ }
458
+ //# sourceMappingURL=desktop-ax-swift.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktop-ax-swift.js","sourceRoot":"","sources":["../../../src/transport/adapters/desktop-ax-swift.ts"],"names":[],"mappings":"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"}
@@ -38,6 +38,8 @@ export declare class DesktopAxTransport implements TransportAdapter {
38
38
  private readonly shell;
39
39
  private readonly platform;
40
40
  private lastClip;
41
+ private lastAxSnapshot;
42
+ private readonly warmSessions;
41
43
  constructor(opts?: DesktopAxTransportOptions);
42
44
  open(_ctx: TransportContext): Promise<void>;
43
45
  snapshot(opts?: {
@@ -46,14 +48,26 @@ export declare class DesktopAxTransport implements TransportAdapter {
46
48
  action<T = unknown>(req: ActionRequest): Promise<ActionResult<T>>;
47
49
  close(): Promise<void>;
48
50
  private isDarwin;
51
+ private missingTargetParam;
52
+ private warmSessionKey;
53
+ private getWarmSession;
54
+ private rememberWarmSession;
55
+ private maybeWarmupElectronAx;
56
+ private runElectronAxWarmup;
49
57
  private dispatch;
50
58
  private missingParam;
51
59
  private doAxFocus;
52
60
  private doMenuSelect;
53
61
  private doApplescript;
62
+ private doAxSnapshot;
63
+ private doAxFocusedRead;
64
+ private doAxSetValue;
65
+ private doAxPress;
66
+ private doAxBackgroundClick;
54
67
  private doClipboardRead;
55
68
  private doClipboardWrite;
56
69
  private doLaunchApp;
70
+ private runSwiftAxAction;
57
71
  private envelopeFromShellError;
58
72
  }
59
73
  //# sourceMappingURL=desktop-ax.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"desktop-ax.d.ts","sourceRoot":"","sources":["../../../src/transport/adapters/desktop-ax.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACd,MAAM,aAAa,CAAC;AAmBrB,+EAA+E;AAC/E,MAAM,WAAW,OAAO;IACtB,GAAG,CACD,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAuCD,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;CAC5B;AAED,qBAAa,kBAAmB,YAAW,gBAAgB;IACzD,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAgB;IAC5C,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAiB;IAEhD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAqB;gBAEzB,IAAI,GAAE,yBAA8B;IAK1C,IAAI,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3C,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,cAAc,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;IAgB/D,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAmCjE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B,OAAO,CAAC,QAAQ;YAIF,QAAQ;IA6BtB,OAAO,CAAC,YAAY;YAWN,SAAS;YAcT,YAAY;YAsCZ,aAAa;YAkBb,eAAe;YAUf,gBAAgB;YAchB,WAAW;IAazB,OAAO,CAAC,sBAAsB;CAgB/B"}
1
+ {"version":3,"file":"desktop-ax.d.ts","sourceRoot":"","sources":["../../../src/transport/adapters/desktop-ax.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAuBH,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACd,MAAM,aAAa,CAAC;AAwBrB,+EAA+E;AAC/E,MAAM,WAAW,OAAO;IACtB,GAAG,CACD,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAuCD,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;CAC5B;AAsBD,qBAAa,kBAAmB,YAAW,gBAAgB;IACzD,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAgB;IAC5C,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAiB;IAEhD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,cAAc,CAAsC;IAC5D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsC;gBAEvD,IAAI,GAAE,yBAA8B;IAK1C,IAAI,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3C,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,cAAc,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;IAoB/D,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAmCjE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,mBAAmB;YAUb,qBAAqB;YAgDrB,mBAAmB;YAgBnB,QAAQ;IAuCtB,OAAO,CAAC,YAAY;YAWN,SAAS;YAkBT,YAAY;YAyDZ,aAAa;YA2Bb,YAAY;YAeZ,eAAe;YAYf,YAAY;YA2BZ,SAAS;YAoBT,mBAAmB;YAMnB,eAAe;YAUf,gBAAgB;YAchB,WAAW;YAiBX,gBAAgB;IAoE9B,OAAO,CAAC,sBAAsB;CAgB/B"}