mcp-baepsae 5.1.0 → 6.2.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 (62) hide show
  1. package/README-KR.md +98 -33
  2. package/README.md +101 -35
  3. package/bundled/baepsae-native +0 -0
  4. package/dist/backend.d.ts +26 -0
  5. package/dist/backend.d.ts.map +1 -0
  6. package/dist/backend.js +79 -0
  7. package/dist/backend.js.map +1 -0
  8. package/dist/index.js +3 -1
  9. package/dist/index.js.map +1 -1
  10. package/dist/tool-manifest.d.ts +12 -0
  11. package/dist/tool-manifest.d.ts.map +1 -0
  12. package/dist/tool-manifest.js +79 -0
  13. package/dist/tool-manifest.js.map +1 -0
  14. package/dist/tools/info.d.ts.map +1 -1
  15. package/dist/tools/info.js +104 -5
  16. package/dist/tools/info.js.map +1 -1
  17. package/dist/tools/input.js +7 -6
  18. package/dist/tools/input.js.map +1 -1
  19. package/dist/tools/media.d.ts.map +1 -1
  20. package/dist/tools/media.js +137 -11
  21. package/dist/tools/media.js.map +1 -1
  22. package/dist/tools/simulator.js +7 -7
  23. package/dist/tools/simulator.js.map +1 -1
  24. package/dist/tools/system.d.ts.map +1 -1
  25. package/dist/tools/system.js +2 -2
  26. package/dist/tools/system.js.map +1 -1
  27. package/dist/tools/ui.d.ts.map +1 -1
  28. package/dist/tools/ui.js +126 -8
  29. package/dist/tools/ui.js.map +1 -1
  30. package/dist/tools/workflow.d.ts +3 -0
  31. package/dist/tools/workflow.d.ts.map +1 -0
  32. package/dist/tools/workflow.js +434 -0
  33. package/dist/tools/workflow.js.map +1 -0
  34. package/dist/types.d.ts +15 -0
  35. package/dist/types.d.ts.map +1 -1
  36. package/dist/utils.d.ts +19 -3
  37. package/dist/utils.d.ts.map +1 -1
  38. package/dist/utils.js +110 -5
  39. package/dist/utils.js.map +1 -1
  40. package/dist/version.d.ts +1 -1
  41. package/dist/version.js +1 -1
  42. package/native/Sources/Commands/InputCommands.swift +53 -33
  43. package/native/Sources/Commands/SystemCommands.swift +86 -0
  44. package/native/Sources/Commands/UICommands.swift +254 -35
  45. package/native/Sources/Commands/WindowCommands.swift +11 -4
  46. package/native/Sources/IndigoHID/IndigoHIDClient.swift +222 -0
  47. package/native/Sources/IndigoHID/IndigoHIDCoordinates.swift +74 -0
  48. package/native/Sources/IndigoHID/IndigoHIDEvents.swift +63 -0
  49. package/native/Sources/IndigoHID/IndigoHIDLoader.swift +102 -0
  50. package/native/Sources/IndigoHID/IndigoHIDTypes.swift +41 -0
  51. package/native/Sources/Types.swift +26 -0
  52. package/native/Sources/Utils.swift +653 -13
  53. package/native/Sources/Version.swift +1 -1
  54. package/native/Sources/main.swift +55 -8
  55. package/native/Tests/BaepsaeNativeTests/BinaryInvocationTests.swift +54 -6
  56. package/package.json +12 -3
  57. package/scripts/dump-tabbar-actions.mjs +312 -0
  58. package/scripts/generate-tool-manifest.mjs +75 -0
  59. package/scripts/research-coordinate-calibration.mjs +276 -0
  60. package/scripts/research-input-channels.mjs +327 -0
  61. package/scripts/research-tap-tab-grid.mjs +271 -0
  62. package/scripts/verify-media-capture.mjs +99 -0
package/dist/utils.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.unifiedTargetSchema = exports.keycodeSchema = exports.BAEPSAE_SUBCOMMANDS = exports.GESTURE_PRESETS = exports.BUTTON_TYPES = exports.NATIVE_BINARY_NAME = exports.NATIVE_BINARY_ENV = exports.DEFAULT_TIMEOUT_MS = exports.SERVER_VERSION = exports.SERVER_NAME = exports.PACKAGE_ROOT = void 0;
4
+ exports.makeToolError = makeToolError;
4
5
  exports.isExecutable = isExecutable;
5
6
  exports.resolveNativeBinary = resolveNativeBinary;
6
7
  exports.resolveUnifiedTargetArgs = resolveUnifiedTargetArgs;
@@ -11,6 +12,7 @@ exports.executeCommand = executeCommand;
11
12
  exports.toToolResult = toToolResult;
12
13
  exports.runSimctl = runSimctl;
13
14
  exports.runNative = runNative;
15
+ exports.tryResolveNativeBinaryPath = tryResolveNativeBinaryPath;
14
16
  const node_child_process_1 = require("node:child_process");
15
17
  const node_fs_1 = require("node:fs");
16
18
  const promises_1 = require("node:fs/promises");
@@ -39,7 +41,9 @@ exports.BAEPSAE_SUBCOMMANDS = [
39
41
  "search-ui",
40
42
  "list-simulators",
41
43
  "list-apps",
44
+ "doctor",
42
45
  "tap",
46
+ "tap-tab",
43
47
  "type",
44
48
  "swipe",
45
49
  "button",
@@ -62,6 +66,17 @@ exports.BAEPSAE_SUBCOMMANDS = [
62
66
  "clipboard",
63
67
  ];
64
68
  exports.keycodeSchema = zod_1.z.number().int().min(0).max(255);
69
+ function makeToolError(params) {
70
+ return {
71
+ code: params.code,
72
+ category: params.category,
73
+ retryable: params.retryable ?? false,
74
+ source: params.source ?? "mcp",
75
+ message: params.message,
76
+ nativeCode: params.nativeCode,
77
+ details: params.details,
78
+ };
79
+ }
65
80
  function isExecutable(filePath) {
66
81
  try {
67
82
  (0, node_fs_1.accessSync)(filePath, node_fs_1.constants.X_OK);
@@ -131,12 +146,22 @@ function resolveUnifiedTargetArgs(params) {
131
146
  return {
132
147
  content: [{ type: "text", text: "No target specified. Provide exactly one: udid (simulator), bundleId, or appName (macOS)." }],
133
148
  isError: true,
149
+ error: makeToolError({
150
+ code: "validation.target.required",
151
+ category: "validation",
152
+ message: "No target specified. Provide exactly one: udid (simulator), bundleId, or appName (macOS).",
153
+ }),
134
154
  };
135
155
  }
136
156
  if (modes > 1) {
137
157
  return {
138
158
  content: [{ type: "text", text: "Multiple targets specified. Provide exactly one: udid (simulator), bundleId, or appName (macOS)." }],
139
159
  isError: true,
160
+ error: makeToolError({
161
+ code: "validation.target.multiple",
162
+ category: "validation",
163
+ message: "Multiple targets specified. Provide exactly one: udid (simulator), bundleId, or appName (macOS).",
164
+ }),
140
165
  };
141
166
  }
142
167
  if (params.udid)
@@ -266,29 +291,84 @@ function toToolResult(result, options = {}) {
266
291
  if (result.stdout.length > 0) {
267
292
  lines.push("", "STDOUT:", result.stdout);
268
293
  }
269
- if (result.stderr.length > 0) {
270
- lines.push("", "STDERR:", result.stderr);
294
+ const parsedStructured = parseNativeStructuredError(result.stderr);
295
+ const humanReadableStderr = parsedStructured ? stripNativeStructuredErrorLine(result.stderr) : result.stderr;
296
+ if (humanReadableStderr.length > 0) {
297
+ lines.push("", "STDERR:", humanReadableStderr);
271
298
  }
299
+ const structuredError = isError
300
+ ? makeToolError({
301
+ code: expectedTimeoutSignal || result.timedOut ? "execution.timeout" : result.exitCode === 0 ? "unknown" : "execution.command_failed",
302
+ category: result.timedOut ? "timeout" : "execution",
303
+ message: humanReadableStderr || result.stdout || "Command failed.",
304
+ retryable: result.timedOut || (result.signal !== null && !expectedTimeoutSignal),
305
+ source: options.source ?? "native",
306
+ })
307
+ : undefined;
272
308
  return {
273
309
  content: [{ type: "text", text: lines.join("\n") }],
274
310
  isError,
311
+ error: structuredError,
312
+ metadata: options.metadata,
275
313
  };
276
314
  }
277
315
  async function runCommand(executable, args, options, responseOptions) {
278
316
  try {
279
317
  const result = await executeCommand(executable, args, options);
280
- return toToolResult(result, responseOptions);
318
+ const toolResult = toToolResult(result, responseOptions);
319
+ const structured = parseNativeStructuredError(result.stderr);
320
+ if (structured) {
321
+ toolResult.error = structured;
322
+ }
323
+ return toolResult;
281
324
  }
282
325
  catch (error) {
283
326
  const message = error instanceof Error ? error.message : String(error);
284
327
  return {
285
328
  content: [{ type: "text", text: `Error executing ${commandToString(executable, args)}\n${message}` }],
286
329
  isError: true,
330
+ error: makeToolError({
331
+ code: "execution.spawn_failed",
332
+ category: "execution",
333
+ message,
334
+ retryable: true,
335
+ source: "runtime",
336
+ }),
287
337
  };
288
338
  }
289
339
  }
340
+ function parseNativeStructuredError(stderr) {
341
+ const firstLine = stderr.split(/\r?\n/, 1)[0] ?? "";
342
+ if (!firstLine.startsWith("BAEPSAE_ERROR ")) {
343
+ return undefined;
344
+ }
345
+ try {
346
+ const payload = JSON.parse(firstLine.slice("BAEPSAE_ERROR ".length));
347
+ if (!payload.code || !payload.category || !payload.message)
348
+ return undefined;
349
+ return makeToolError({
350
+ code: payload.code,
351
+ category: payload.category,
352
+ message: payload.message,
353
+ retryable: payload.retryable,
354
+ source: payload.source ?? "native",
355
+ nativeCode: payload.nativeCode,
356
+ details: payload.details,
357
+ });
358
+ }
359
+ catch {
360
+ return undefined;
361
+ }
362
+ }
363
+ function stripNativeStructuredErrorLine(stderr) {
364
+ const lines = stderr.split(/\r?\n/);
365
+ if (lines[0]?.startsWith("BAEPSAE_ERROR ")) {
366
+ return lines.slice(1).join("\n").trim();
367
+ }
368
+ return stderr;
369
+ }
290
370
  async function runSimctl(args, options, responseOptions) {
291
- return await runCommand("xcrun", ["simctl", ...args], options, responseOptions);
371
+ return await runCommand("xcrun", ["simctl", ...args], options, { ...responseOptions, source: "simctl" });
292
372
  }
293
373
  async function runNative(args, options, responseOptions) {
294
374
  let binary;
@@ -296,11 +376,36 @@ async function runNative(args, options, responseOptions) {
296
376
  binary = resolveNativeBinary();
297
377
  }
298
378
  catch (error) {
379
+ const message = error instanceof Error ? error.message : String(error);
299
380
  return {
300
381
  content: [{ type: "text", text: error instanceof Error ? error.message : String(error) }],
301
382
  isError: true,
383
+ error: makeToolError({
384
+ code: "environment.native_binary_missing",
385
+ category: "environment",
386
+ message,
387
+ retryable: true,
388
+ source: "runtime",
389
+ }),
302
390
  };
303
391
  }
304
- return await runCommand(binary, args, options, responseOptions);
392
+ const result = await runCommand(binary, args, options, { ...responseOptions, source: "native" });
393
+ if (result.isError && !result.error) {
394
+ const text = result.content.map((item) => item.text).join("\n");
395
+ const stderr = text.includes("STDERR:") ? text.split("STDERR:").slice(1).join("STDERR:").trim() : text;
396
+ const structured = parseNativeStructuredError(stderr);
397
+ if (structured) {
398
+ result.error = structured;
399
+ }
400
+ }
401
+ return result;
402
+ }
403
+ function tryResolveNativeBinaryPath() {
404
+ try {
405
+ return { ok: true, path: resolveNativeBinary() };
406
+ }
407
+ catch (error) {
408
+ return { ok: false, error: error instanceof Error ? error.message : String(error) };
409
+ }
305
410
  }
306
411
  //# sourceMappingURL=utils.js.map
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export declare const PACKAGE_NAME = "mcp-baepsae";
2
- export declare const PACKAGE_VERSION = "5.1.0";
2
+ export declare const PACKAGE_VERSION = "6.2.0";
3
3
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -2,5 +2,5 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PACKAGE_VERSION = exports.PACKAGE_NAME = void 0;
4
4
  exports.PACKAGE_NAME = "mcp-baepsae";
5
- exports.PACKAGE_VERSION = "5.1.0";
5
+ exports.PACKAGE_VERSION = "6.2.0";
6
6
  //# sourceMappingURL=version.js.map
@@ -83,24 +83,43 @@ func handleTouch(_ parsed: ParsedOptions) throws -> Int32 {
83
83
  }
84
84
  let delay = try optionalDoubleOption("--delay", from: parsed) ?? 0
85
85
  try activateTarget(target)
86
- let point = try pointInWindow(x: x, y: y, for: target)
87
86
  let downRequested = parsed.flags.contains("--down")
88
87
  let upRequested = parsed.flags.contains("--up")
89
- if !downRequested && !upRequested {
90
- postMouseEvent(type: .leftMouseDown, point: point)
91
- if delay > 0 {
92
- Thread.sleep(forTimeInterval: delay)
88
+ let backend = resolveInputBackend(for: target)
89
+ switch backend {
90
+ case .indigoHID(let client):
91
+ let (nx, ny) = client.coords.normalize(x: x, y: y)
92
+ if !downRequested && !upRequested {
93
+ if let msg = client.loader.createTouchMessage(phase: .began, x: nx, y: ny) {
94
+ _ = sendIndigoHIDMessage(msg, to: client.port)
95
+ }
96
+ if delay > 0 { Thread.sleep(forTimeInterval: delay) }
97
+ if let msg = client.loader.createTouchMessage(phase: .ended, x: nx, y: ny) {
98
+ _ = sendIndigoHIDMessage(msg, to: client.port)
99
+ }
100
+ } else {
101
+ if downRequested {
102
+ if let msg = client.loader.createTouchMessage(phase: .began, x: nx, y: ny) {
103
+ _ = sendIndigoHIDMessage(msg, to: client.port)
104
+ }
105
+ }
106
+ if delay > 0 { Thread.sleep(forTimeInterval: delay) }
107
+ if upRequested {
108
+ if let msg = client.loader.createTouchMessage(phase: .ended, x: nx, y: ny) {
109
+ _ = sendIndigoHIDMessage(msg, to: client.port)
110
+ }
111
+ }
93
112
  }
94
- postMouseEvent(type: .leftMouseUp, point: point)
95
- } else {
96
- if downRequested {
113
+ case .cgevent:
114
+ let point = try pointInWindow(x: x, y: y, for: target)
115
+ if !downRequested && !upRequested {
97
116
  postMouseEvent(type: .leftMouseDown, point: point)
98
- }
99
- if delay > 0 {
100
- Thread.sleep(forTimeInterval: delay)
101
- }
102
- if upRequested {
117
+ if delay > 0 { Thread.sleep(forTimeInterval: delay) }
103
118
  postMouseEvent(type: .leftMouseUp, point: point)
119
+ } else {
120
+ if downRequested { postMouseEvent(type: .leftMouseDown, point: point) }
121
+ if delay > 0 { Thread.sleep(forTimeInterval: delay) }
122
+ if upRequested { postMouseEvent(type: .leftMouseUp, point: point) }
104
123
  }
105
124
  }
106
125
  return 0
@@ -119,39 +138,40 @@ func handleGesture(_ parsed: ParsedOptions) throws -> Int32 {
119
138
  let screenHeight = try optionalDoubleOption("--screen-height", from: parsed)
120
139
  try ensureAccessibilityTrusted()
121
140
  try activateTarget(target)
122
- let bounds = simulatorWindowBounds()
123
- let width = screenWidth ?? Double(bounds?.width ?? 0)
124
- let height = screenHeight ?? Double(bounds?.height ?? 0)
141
+ let targetUdid = simulatorUdid(from: target)
142
+ let preferredBounds = simulatorContentBounds(udid: targetUdid)
143
+ let width = screenWidth ?? Double(preferredBounds?.width ?? 0)
144
+ let height = screenHeight ?? Double(preferredBounds?.height ?? 0)
125
145
  if width <= 0 || height <= 0 {
126
- throw NativeError.commandFailed("Unable to determine simulator window size; provide screenWidth/screenHeight.")
146
+ throw NativeError.commandFailed("Unable to determine simulator content size; provide screenWidth/screenHeight.")
127
147
  }
128
148
  let start: CGPoint
129
149
  let end: CGPoint
130
150
  switch preset {
131
151
  case "scroll-up":
132
- start = try pointInSimulatorWindow(x: width * 0.5, y: height * 0.7)
133
- end = try pointInSimulatorWindow(x: width * 0.5, y: height * 0.3)
152
+ start = try pointInSimulatorContent(x: width * 0.5, y: height * 0.7, udid: targetUdid)
153
+ end = try pointInSimulatorContent(x: width * 0.5, y: height * 0.3, udid: targetUdid)
134
154
  case "scroll-down":
135
- start = try pointInSimulatorWindow(x: width * 0.5, y: height * 0.3)
136
- end = try pointInSimulatorWindow(x: width * 0.5, y: height * 0.7)
155
+ start = try pointInSimulatorContent(x: width * 0.5, y: height * 0.3, udid: targetUdid)
156
+ end = try pointInSimulatorContent(x: width * 0.5, y: height * 0.7, udid: targetUdid)
137
157
  case "scroll-left":
138
- start = try pointInSimulatorWindow(x: width * 0.7, y: height * 0.5)
139
- end = try pointInSimulatorWindow(x: width * 0.3, y: height * 0.5)
158
+ start = try pointInSimulatorContent(x: width * 0.7, y: height * 0.5, udid: targetUdid)
159
+ end = try pointInSimulatorContent(x: width * 0.3, y: height * 0.5, udid: targetUdid)
140
160
  case "scroll-right":
141
- start = try pointInSimulatorWindow(x: width * 0.3, y: height * 0.5)
142
- end = try pointInSimulatorWindow(x: width * 0.7, y: height * 0.5)
161
+ start = try pointInSimulatorContent(x: width * 0.3, y: height * 0.5, udid: targetUdid)
162
+ end = try pointInSimulatorContent(x: width * 0.7, y: height * 0.5, udid: targetUdid)
143
163
  case "swipe-from-left-edge":
144
- start = try pointInSimulatorWindow(x: width * 0.05, y: height * 0.5)
145
- end = try pointInSimulatorWindow(x: width * 0.6, y: height * 0.5)
164
+ start = try pointInSimulatorContent(x: width * 0.05, y: height * 0.5, udid: targetUdid)
165
+ end = try pointInSimulatorContent(x: width * 0.6, y: height * 0.5, udid: targetUdid)
146
166
  case "swipe-from-right-edge":
147
- start = try pointInSimulatorWindow(x: width * 0.95, y: height * 0.5)
148
- end = try pointInSimulatorWindow(x: width * 0.4, y: height * 0.5)
167
+ start = try pointInSimulatorContent(x: width * 0.95, y: height * 0.5, udid: targetUdid)
168
+ end = try pointInSimulatorContent(x: width * 0.4, y: height * 0.5, udid: targetUdid)
149
169
  case "swipe-from-top-edge":
150
- start = try pointInSimulatorWindow(x: width * 0.5, y: height * 0.05)
151
- end = try pointInSimulatorWindow(x: width * 0.5, y: height * 0.6)
170
+ start = try pointInSimulatorContent(x: width * 0.5, y: height * 0.05, udid: targetUdid)
171
+ end = try pointInSimulatorContent(x: width * 0.5, y: height * 0.6, udid: targetUdid)
152
172
  case "swipe-from-bottom-edge":
153
- start = try pointInSimulatorWindow(x: width * 0.5, y: height * 0.95)
154
- end = try pointInSimulatorWindow(x: width * 0.5, y: height * 0.4)
173
+ start = try pointInSimulatorContent(x: width * 0.5, y: height * 0.95, udid: targetUdid)
174
+ end = try pointInSimulatorContent(x: width * 0.5, y: height * 0.4, udid: targetUdid)
155
175
  default:
156
176
  throw NativeError.invalidArguments("Unsupported gesture preset: \(preset)")
157
177
  }
@@ -2,6 +2,37 @@ import AppKit
2
2
  import CoreGraphics
3
3
  import Foundation
4
4
 
5
+ private struct DoctorReport: Codable {
6
+ struct Check: Codable {
7
+ let ok: Bool
8
+ let detail: String
9
+ }
10
+
11
+ let host: Check
12
+ let parent: Check
13
+ let nativeBinary: Check
14
+ let simulator: Check
15
+ let accessibility: Check
16
+ }
17
+
18
+ private func shellCapture(_ command: String, _ arguments: [String]) -> String? {
19
+ let process = Process()
20
+ process.executableURL = URL(fileURLWithPath: command)
21
+ process.arguments = arguments
22
+ let pipe = Pipe()
23
+ process.standardOutput = pipe
24
+ process.standardError = FileHandle.nullDevice
25
+ do {
26
+ try process.run()
27
+ process.waitUntilExit()
28
+ guard process.terminationStatus == 0 else { return nil }
29
+ let data = pipe.fileHandleForReading.readDataToEndOfFile()
30
+ return String(data: data, encoding: .utf8)?.trimmingCharacters(in: .whitespacesAndNewlines)
31
+ } catch {
32
+ return nil
33
+ }
34
+ }
35
+
5
36
  func handleListApps(_ parsed: ParsedOptions) throws -> Int32 {
6
37
  let apps = NSWorkspace.shared.runningApplications.filter { $0.activationPolicy == .regular }
7
38
  for app in apps {
@@ -13,6 +44,61 @@ func handleListApps(_ parsed: ParsedOptions) throws -> Int32 {
13
44
  return 0
14
45
  }
15
46
 
47
+ func handleDoctor(_ parsed: ParsedOptions) throws -> Int32 {
48
+ var systemInfo = utsname()
49
+ uname(&systemInfo)
50
+ let machine = withUnsafePointer(to: &systemInfo.machine) {
51
+ $0.withMemoryRebound(to: CChar.self, capacity: 1) { String(cString: $0) }
52
+ }
53
+ let hostDetail = "\(ProcessInfo.processInfo.operatingSystemVersionString); arch=\(machine)"
54
+ let parentPid = getppid()
55
+ let parentDetail = shellCapture("/bin/ps", ["-p", String(parentPid), "-o", "pid=,ppid=,comm="]) ?? "unknown"
56
+
57
+ let nativeBinaryDetail = CommandLine.arguments.first ?? "baepsae-native"
58
+ let nativeBinaryOk = !nativeBinaryDetail.isEmpty
59
+
60
+ let simulatorAppRunning = NSRunningApplication.runningApplications(withBundleIdentifier: "com.apple.iphonesimulator").first != nil
61
+ let bootedDevicesOutput = shellCapture("/usr/bin/xcrun", ["simctl", "list", "devices", "booted"])
62
+ let bootedSimulatorAvailable = bootedDevicesOutput?.contains("(Booted)") ?? false
63
+ let simulatorDetail: String
64
+ if bootedSimulatorAvailable {
65
+ simulatorDetail = simulatorAppRunning
66
+ ? "Booted simulator available and Simulator app is running"
67
+ : "Booted simulator available"
68
+ } else if simulatorAppRunning {
69
+ simulatorDetail = "Simulator app is running, but no booted simulator was detected"
70
+ } else if bootedDevicesOutput == nil {
71
+ simulatorDetail = "Could not query booted simulators via simctl"
72
+ } else {
73
+ simulatorDetail = "Simulator app is not running and no booted simulator was detected"
74
+ }
75
+
76
+ let accessibilityTrusted = AXIsProcessTrusted()
77
+ let accessibilityDetail = accessibilityTrusted
78
+ ? "Accessibility permission granted"
79
+ : "Accessibility permission missing"
80
+
81
+ let report = DoctorReport(
82
+ host: .init(ok: true, detail: hostDetail),
83
+ parent: .init(ok: !parentDetail.isEmpty, detail: parentDetail),
84
+ nativeBinary: .init(ok: nativeBinaryOk, detail: nativeBinaryDetail),
85
+ simulator: .init(ok: bootedSimulatorAvailable, detail: simulatorDetail),
86
+ accessibility: .init(ok: accessibilityTrusted, detail: accessibilityDetail)
87
+ )
88
+
89
+ let encoder = JSONEncoder()
90
+ encoder.outputFormatting = [.prettyPrinted, .sortedKeys]
91
+ guard let data = try? encoder.encode(report), let json = String(data: data, encoding: .utf8) else {
92
+ throw NativeError.commandFailed("Failed to encode doctor report.")
93
+ }
94
+
95
+ print("Doctor check completed.")
96
+ print("host=\(report.host.ok ? "ok" : "warn") parent=\(report.parent.ok ? "ok" : "warn") native=\(report.nativeBinary.ok ? "ok" : "warn") simulator=\(report.simulator.ok ? "ok" : "warn") accessibility=\(report.accessibility.ok ? "ok" : "warn")")
97
+ print("")
98
+ print(json)
99
+ return 0
100
+ }
101
+
16
102
  func handleListWindows(_ parsed: ParsedOptions) throws -> Int32 {
17
103
  let target = try resolveTarget(from: parsed)
18
104
  guard let windowInfo = CGWindowListCopyWindowInfo([.optionOnScreenOnly, .excludeDesktopElements], kCGNullWindowID)