@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 @@
1
+ {"version":3,"file":"desktop-ax-background-click-swift.d.ts","sourceRoot":"","sources":["../../../src/transport/adapters/desktop-ax-background-click-swift.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,WAAW,8BAA8B;IAC7C,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,eAAe,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,8BAA8B,GACnC,MAAM,CAgGR"}
@@ -0,0 +1,136 @@
1
+ export function buildAxBackgroundClickScript(target, opts) {
2
+ const x = normalizeNumber(opts.x, 0);
3
+ const y = normalizeNumber(opts.y, 0);
4
+ const coordinateSpace = opts.coordinateSpace === "screen" ? "screen" : "window";
5
+ const button = Math.max(0, Math.trunc(opts.button));
6
+ const clickCount = Math.max(1, Math.trunc(opts.clickCount));
7
+ const windowNumber = opts.windowNumber
8
+ ? Math.max(0, Math.trunc(opts.windowNumber))
9
+ : 0;
10
+ return [
11
+ `import AppKit`,
12
+ `import ApplicationServices`,
13
+ `import CoreGraphics`,
14
+ `import CoreFoundation`,
15
+ `import Darwin`,
16
+ `import Foundation`,
17
+ ``,
18
+ ...buildRunningAppPrelude(target),
19
+ swiftEmitHelper(),
20
+ `let commandMode = "background_click"`,
21
+ `let inputX = CGFloat(${x})`,
22
+ `let inputY = CGFloat(${y})`,
23
+ `let coordinateSpace = ${swiftStringLiteral(coordinateSpace)}`,
24
+ `let buttonIndex = ${button}`,
25
+ `let requestedClickCount = ${clickCount}`,
26
+ `let requestedWindowNumber = ${windowNumber}`,
27
+ ``,
28
+ `typealias CGEventSetWindowLocationFn = @convention(c) (CGEvent, CGPoint) -> Void`,
29
+ `func loadSetWindowLocation() -> CGEventSetWindowLocationFn? {`,
30
+ ` guard let symbol = dlsym(dlopen(nil, RTLD_NOW), "CGEventSetWindowLocation") else { return nil }`,
31
+ ` return unsafeBitCast(symbol, to: CGEventSetWindowLocationFn.self)`,
32
+ `}`,
33
+ ``,
34
+ `func number(_ dict: NSDictionary, _ key: CFString) -> NSNumber? { dict[key as String] as? NSNumber }`,
35
+ ``,
36
+ `func rect(_ dict: NSDictionary) -> CGRect? {`,
37
+ ` guard let raw = dict[kCGWindowBounds as String] as? NSDictionary else { return nil }`,
38
+ ` var rect = CGRect.zero`,
39
+ ` return CGRectMakeWithDictionaryRepresentation(raw, &rect) ? rect : nil`,
40
+ `}`,
41
+ ``,
42
+ `func targetWindow(pid: pid_t) -> (id: CGWindowID, frame: CGRect)? {`,
43
+ ` guard let list = CGWindowListCopyWindowInfo(.optionOnScreenOnly, kCGNullWindowID) as? [NSDictionary] else { return nil }`,
44
+ ` for item in list {`,
45
+ ` guard number(item, kCGWindowOwnerPID)?.int32Value == pid else { continue }`,
46
+ ` guard let idNumber = number(item, kCGWindowNumber), let frame = rect(item), !frame.isEmpty else { continue }`,
47
+ ` let windowId = CGWindowID(idNumber.uint32Value)`,
48
+ ` if requestedWindowNumber == 0 || requestedWindowNumber == Int(windowId) { return (windowId, frame) }`,
49
+ ` }`,
50
+ ` return nil`,
51
+ `}`,
52
+ ``,
53
+ `func eventType(down: Bool) -> NSEvent.EventType {`,
54
+ ` if buttonIndex == 1 { return down ? .rightMouseDown : .rightMouseUp }`,
55
+ ` if buttonIndex == 2 { return down ? .otherMouseDown : .otherMouseUp }`,
56
+ ` return down ? .leftMouseDown : .leftMouseUp`,
57
+ `}`,
58
+ ``,
59
+ `func makeEvent(down: Bool, screenPoint: CGPoint, windowPoint: CGPoint, windowNumber: CGWindowID, eventNumber: Int, isBackground: Bool, setWindowLocation: CGEventSetWindowLocationFn?) -> CGEvent? {`,
60
+ ` guard let event = NSEvent.mouseEvent(with: eventType(down: down), location: screenPoint, modifierFlags: isBackground ? [.command] : [], timestamp: ProcessInfo.processInfo.systemUptime, windowNumber: Int(windowNumber), context: nil, eventNumber: eventNumber, clickCount: requestedClickCount, pressure: down ? 1.0 : 0.0) else { return nil }`,
61
+ ` guard let cg = event.cgEvent else { return nil }`,
62
+ ` cg.location = screenPoint`,
63
+ ` if isBackground { cg.flags = CGEventFlags.maskCommand }`,
64
+ ` cg.setIntegerValueField(CGEventField(rawValue: 3)!, value: Int64(buttonIndex))`,
65
+ ` cg.setIntegerValueField(CGEventField(rawValue: 7)!, value: 3)`,
66
+ ` cg.setIntegerValueField(CGEventField(rawValue: 91)!, value: Int64(windowNumber))`,
67
+ ` cg.setIntegerValueField(CGEventField(rawValue: 92)!, value: Int64(windowNumber))`,
68
+ ` setWindowLocation?(cg, windowPoint)`,
69
+ ` return cg`,
70
+ `}`,
71
+ ``,
72
+ `guard let running else {`,
73
+ ` emit(["found": false, "mode": commandMode, "bundleId": bundleId, "localizedName": processName])`,
74
+ ` exit(0)`,
75
+ `}`,
76
+ ``,
77
+ `guard let window = targetWindow(pid: running.processIdentifier) else {`,
78
+ ` emit(["found": true, "posted": false, "mode": commandMode, "pid": Int(running.processIdentifier), "reason": "window_not_found"])`,
79
+ ` exit(0)`,
80
+ `}`,
81
+ ``,
82
+ `let screenPoint = coordinateSpace == "screen" ? CGPoint(x: inputX, y: inputY) : CGPoint(x: window.frame.origin.x + inputX, y: window.frame.origin.y + inputY)`,
83
+ `let windowPoint = screenPoint.applying(CGAffineTransform(translationX: -window.frame.origin.x, y: -window.frame.origin.y))`,
84
+ `let setWindowLocation = loadSetWindowLocation()`,
85
+ `let isBackground = !running.isActive`,
86
+ `let eventNumber = Int((ProcessInfo.processInfo.systemUptime * 1_000_000).truncatingRemainder(dividingBy: 2_147_483_647))`,
87
+ `guard let down = makeEvent(down: true, screenPoint: screenPoint, windowPoint: windowPoint, windowNumber: window.id, eventNumber: eventNumber, isBackground: isBackground, setWindowLocation: setWindowLocation), let up = makeEvent(down: false, screenPoint: screenPoint, windowPoint: windowPoint, windowNumber: window.id, eventNumber: eventNumber + 1, isBackground: isBackground, setWindowLocation: setWindowLocation) else {`,
88
+ ` emit(["found": true, "posted": false, "mode": commandMode, "pid": Int(running.processIdentifier), "windowNumber": Int(window.id), "reason": "event_create_failed"])`,
89
+ ` exit(0)`,
90
+ `}`,
91
+ `down.postToPid(running.processIdentifier)`,
92
+ `up.postToPid(running.processIdentifier)`,
93
+ `emit(["found": true, "posted": true, "mode": commandMode, "pid": Int(running.processIdentifier), "windowNumber": Int(window.id), "screenX": Double(screenPoint.x), "screenY": Double(screenPoint.y), "windowX": Double(windowPoint.x), "windowY": Double(windowPoint.y), "commandFlagApplied": isBackground, "setWindowLocationAvailable": setWindowLocation != nil])`,
94
+ ].join("\n");
95
+ }
96
+ function buildRunningAppPrelude(target) {
97
+ return [
98
+ `let bundleId: String? = ${swiftStringLiteral(target.bundleId ?? "")}.isEmpty ? nil : ${swiftStringLiteral(target.bundleId ?? "")}`,
99
+ `let processName: String? = ${swiftStringLiteral(target.processName)}.isEmpty ? nil : ${swiftStringLiteral(target.processName)}`,
100
+ `let executableNames: [String] = ${swiftStringArray(target.executableNames)}`,
101
+ `func matches(_ app: NSRunningApplication) -> Bool {`,
102
+ ` if let bundleId, app.bundleIdentifier == bundleId { return true }`,
103
+ ` if let processName, app.localizedName == processName { return true }`,
104
+ ` if let executable = app.executableURL?.lastPathComponent, executableNames.contains(executable) { return true }`,
105
+ ` return false`,
106
+ `}`,
107
+ `let running = NSWorkspace.shared.runningApplications.first(where: matches)`,
108
+ ``,
109
+ ];
110
+ }
111
+ function swiftEmitHelper() {
112
+ return [
113
+ `func emit(_ object: [String: Any?]) {`,
114
+ ` let flat = object.reduce(into: [String: Any]()) { acc, item in`,
115
+ ` if let value = item.value { acc[item.key] = value }`,
116
+ ` }`,
117
+ ` let data = try! JSONSerialization.data(withJSONObject: flat, options: [])`,
118
+ ` FileHandle.standardOutput.write(data)`,
119
+ `}`,
120
+ ].join("\n");
121
+ }
122
+ function swiftStringLiteral(value) {
123
+ return `"${value
124
+ .replace(/\\/g, "\\\\")
125
+ .replace(/"/g, '\\"')
126
+ .replace(/\r/g, "\\r")
127
+ .replace(/\n/g, "\\n")
128
+ .replaceAll("\0", "")}"`;
129
+ }
130
+ function swiftStringArray(values) {
131
+ return `[${values.map(swiftStringLiteral).join(", ")}]`;
132
+ }
133
+ function normalizeNumber(value, fallback) {
134
+ return String(Number.isFinite(value) ? value : fallback);
135
+ }
136
+ //# sourceMappingURL=desktop-ax-background-click-swift.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktop-ax-background-click-swift.js","sourceRoot":"","sources":["../../../src/transport/adapters/desktop-ax-background-click-swift.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Envelope } from "../../core/envelope.js";
2
+ import type { AxShell } from "./desktop-ax.js";
3
+ export declare function runAxBackgroundClick<T>(shell: AxShell, params: Record<string, unknown>): Promise<Envelope<T>>;
4
+ //# sourceMappingURL=desktop-ax-background-click.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktop-ax-background-click.d.ts","sourceRoot":"","sources":["../../../src/transport/adapters/desktop-ax-background-click.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAMvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAQ/C,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CA4EtB"}
@@ -0,0 +1,70 @@
1
+ import { err, exitCodeFor, ok } from "../../core/envelope.js";
2
+ import { buildAxBackgroundClickScript, readPositiveInt, resolveAxTarget, } from "./desktop-ax-swift.js";
3
+ export async function runAxBackgroundClick(shell, params) {
4
+ const target = resolveAxTarget(params);
5
+ if (!target) {
6
+ return err({
7
+ transport: "desktop-ax",
8
+ step: 0,
9
+ action: "ax_background_click",
10
+ reason: "missing target app (`app`, `bundleId`, or `processName`)",
11
+ suggestion: "pass params.app, or supply params.bundleId / params.processName for localized Electron apps",
12
+ exit_code: exitCodeFor("usage_error"),
13
+ });
14
+ }
15
+ const x = typeof params.x === "number" ? params.x : undefined;
16
+ const y = typeof params.y === "number" ? params.y : undefined;
17
+ if (x === undefined || y === undefined) {
18
+ return err({
19
+ transport: "desktop-ax",
20
+ step: 0,
21
+ action: "ax_background_click",
22
+ reason: `missing required param \`${x === undefined ? "x" : "y"}\``,
23
+ suggestion: "pass window-local x/y coordinates to ax_background_click",
24
+ exit_code: exitCodeFor("usage_error"),
25
+ });
26
+ }
27
+ try {
28
+ const { stdout } = await shell.run("swift", [
29
+ "-e",
30
+ buildAxBackgroundClickScript(target, {
31
+ x,
32
+ y,
33
+ coordinateSpace: params.coordinateSpace === "screen" ? "screen" : "window",
34
+ button: readPositiveInt(params.button, 0),
35
+ clickCount: readPositiveInt(params.clickCount, 1) || 1,
36
+ windowNumber: typeof params.windowNumber === "number"
37
+ ? readPositiveInt(params.windowNumber, 0)
38
+ : undefined,
39
+ }),
40
+ ], { timeoutMs: 10_000 });
41
+ const result = JSON.parse(stdout.trim());
42
+ if (!result.found || result.posted === false) {
43
+ return err({
44
+ transport: "desktop-ax",
45
+ step: 0,
46
+ action: "ax_background_click",
47
+ reason: `background click failed in ${target.appName}: ${result.reason ?? "target app/window not found"}`,
48
+ suggestion: "verify the target window is on screen and grant Input Monitoring / Accessibility to the host terminal",
49
+ exit_code: exitCodeFor("service_unavailable"),
50
+ });
51
+ }
52
+ return ok(result);
53
+ }
54
+ catch (e) {
55
+ const msg = e instanceof Error ? e.message : String(e);
56
+ const timeout = /timeout|timed out|ETIMEDOUT/i.test(msg);
57
+ return err({
58
+ transport: "desktop-ax",
59
+ step: 0,
60
+ action: "ax_background_click",
61
+ reason: msg,
62
+ suggestion: "check app name, Input Monitoring / Accessibility permissions, and that the app is installed",
63
+ retryable: timeout,
64
+ exit_code: timeout
65
+ ? exitCodeFor("temp_failure")
66
+ : exitCodeFor("service_unavailable"),
67
+ });
68
+ }
69
+ }
70
+ //# sourceMappingURL=desktop-ax-background-click.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktop-ax-background-click.js","sourceRoot":"","sources":["../../../src/transport/adapters/desktop-ax-background-click.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ export { buildAxBackgroundClickScript, type AxBackgroundClickScriptOptions, } from "./desktop-ax-background-click-swift.js";
2
+ export interface ResolvedAxTarget {
3
+ appName: string;
4
+ openArgs: readonly string[];
5
+ activationRef: string;
6
+ uiProcessName: string;
7
+ bundleId?: string;
8
+ processName: string;
9
+ executableNames: readonly string[];
10
+ ensureElectronAx: boolean;
11
+ }
12
+ export interface AxWarmupResult {
13
+ trusted: boolean;
14
+ found: boolean;
15
+ pid?: number;
16
+ bundleId?: string | null;
17
+ localizedName?: string | null;
18
+ setResults?: Record<string, number>;
19
+ observerCreated?: boolean;
20
+ observerResults?: Record<string, number>;
21
+ pumpMs?: number;
22
+ }
23
+ export interface AxSnapshotScriptOptions {
24
+ maxDepth: number;
25
+ scope: "focusedWindow" | "focusedElement";
26
+ }
27
+ export interface AxElementQuery {
28
+ focused: boolean;
29
+ maxDepth: number;
30
+ roles: readonly string[];
31
+ subroles: readonly string[];
32
+ titles: readonly string[];
33
+ descriptions: readonly string[];
34
+ identifiers: readonly string[];
35
+ titlePrefix: boolean;
36
+ descriptionPrefix: boolean;
37
+ }
38
+ export interface AxSetValueScriptOptions extends AxElementQuery {
39
+ attribute: string;
40
+ value: string;
41
+ }
42
+ export interface AxPressScriptOptions extends AxElementQuery {
43
+ actionName: string;
44
+ }
45
+ export declare function buildElectronAxWarmupScript(target: ResolvedAxTarget, waitMs: number): string;
46
+ export declare function buildAxSnapshotScript(target: ResolvedAxTarget, opts: AxSnapshotScriptOptions): string;
47
+ export declare function buildAxFocusedReadScript(target: ResolvedAxTarget, query: AxElementQuery): string;
48
+ export declare function buildAxSetValueScript(target: ResolvedAxTarget, opts: AxSetValueScriptOptions): string;
49
+ export declare function buildAxPressScript(target: ResolvedAxTarget, opts: AxPressScriptOptions): string;
50
+ export declare function swiftStringLiteral(value: string): string;
51
+ export declare function swiftStringArray(values: readonly string[]): string;
52
+ export declare function resolveAxTarget(params: Record<string, unknown>): ResolvedAxTarget | null;
53
+ export declare function readAxElementQuery(params: Record<string, unknown>, defaultFocused: boolean): AxElementQuery;
54
+ export declare function hasAxElementMatcher(params: Record<string, unknown>): boolean;
55
+ export declare function readPositiveInt(value: unknown, fallback: number): number;
56
+ //# sourceMappingURL=desktop-ax-swift.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktop-ax-swift.d.ts","sourceRoot":"","sources":["../../../src/transport/adapters/desktop-ax-swift.ts"],"names":[],"mappings":"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"}