execbro 1.10.25 → 1.11.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 (135) hide show
  1. package/README.md +1 -1
  2. package/build/__tests__/integration/native-logs.test.d.ts +2 -0
  3. package/build/__tests__/integration/native-logs.test.d.ts.map +1 -0
  4. package/build/__tests__/integration/native-logs.test.js +39 -0
  5. package/build/__tests__/integration/native-logs.test.js.map +1 -0
  6. package/build/__tests__/unit/clearLogsNative.test.d.ts +2 -0
  7. package/build/__tests__/unit/clearLogsNative.test.d.ts.map +1 -0
  8. package/build/__tests__/unit/clearLogsNative.test.js +43 -0
  9. package/build/__tests__/unit/clearLogsNative.test.js.map +1 -0
  10. package/build/__tests__/unit/componentFormatNaming.test.d.ts +2 -0
  11. package/build/__tests__/unit/componentFormatNaming.test.d.ts.map +1 -0
  12. package/build/__tests__/unit/componentFormatNaming.test.js +32 -0
  13. package/build/__tests__/unit/componentFormatNaming.test.js.map +1 -0
  14. package/build/__tests__/unit/getLogsEmptyContract.test.js +20 -7
  15. package/build/__tests__/unit/getLogsEmptyContract.test.js.map +1 -1
  16. package/build/__tests__/unit/getLogsNativeSource.test.d.ts +2 -0
  17. package/build/__tests__/unit/getLogsNativeSource.test.d.ts.map +1 -0
  18. package/build/__tests__/unit/getLogsNativeSource.test.js +138 -0
  19. package/build/__tests__/unit/getLogsNativeSource.test.js.map +1 -0
  20. package/build/__tests__/unit/jsLogEvents.test.d.ts +2 -0
  21. package/build/__tests__/unit/jsLogEvents.test.d.ts.map +1 -0
  22. package/build/__tests__/unit/jsLogEvents.test.js +58 -0
  23. package/build/__tests__/unit/jsLogEvents.test.js.map +1 -0
  24. package/build/__tests__/unit/logEventFormat.test.d.ts +2 -0
  25. package/build/__tests__/unit/logEventFormat.test.d.ts.map +1 -0
  26. package/build/__tests__/unit/logEventFormat.test.js +210 -0
  27. package/build/__tests__/unit/logEventFormat.test.js.map +1 -0
  28. package/build/__tests__/unit/logEvents.test.d.ts +2 -0
  29. package/build/__tests__/unit/logEvents.test.d.ts.map +1 -0
  30. package/build/__tests__/unit/logEvents.test.js +118 -0
  31. package/build/__tests__/unit/logEvents.test.js.map +1 -0
  32. package/build/__tests__/unit/logGrouping.test.d.ts +2 -0
  33. package/build/__tests__/unit/logGrouping.test.d.ts.map +1 -0
  34. package/build/__tests__/unit/logGrouping.test.js +104 -0
  35. package/build/__tests__/unit/logGrouping.test.js.map +1 -0
  36. package/build/__tests__/unit/logOwnership.test.d.ts +2 -0
  37. package/build/__tests__/unit/logOwnership.test.d.ts.map +1 -0
  38. package/build/__tests__/unit/logOwnership.test.js +118 -0
  39. package/build/__tests__/unit/logOwnership.test.js.map +1 -0
  40. package/build/__tests__/unit/logRelevance.test.d.ts +2 -0
  41. package/build/__tests__/unit/logRelevance.test.d.ts.map +1 -0
  42. package/build/__tests__/unit/logRelevance.test.js +30 -0
  43. package/build/__tests__/unit/logRelevance.test.js.map +1 -0
  44. package/build/__tests__/unit/logSourceAndroid.test.d.ts +2 -0
  45. package/build/__tests__/unit/logSourceAndroid.test.d.ts.map +1 -0
  46. package/build/__tests__/unit/logSourceAndroid.test.js +61 -0
  47. package/build/__tests__/unit/logSourceAndroid.test.js.map +1 -0
  48. package/build/__tests__/unit/logSourceIos.test.d.ts +2 -0
  49. package/build/__tests__/unit/logSourceIos.test.d.ts.map +1 -0
  50. package/build/__tests__/unit/logSourceIos.test.js +64 -0
  51. package/build/__tests__/unit/logSourceIos.test.js.map +1 -0
  52. package/build/__tests__/unit/logs.test.js +23 -0
  53. package/build/__tests__/unit/logs.test.js.map +1 -1
  54. package/build/__tests__/unit/nativeLogs.test.d.ts +2 -0
  55. package/build/__tests__/unit/nativeLogs.test.d.ts.map +1 -0
  56. package/build/__tests__/unit/nativeLogs.test.js +230 -0
  57. package/build/__tests__/unit/nativeLogs.test.js.map +1 -0
  58. package/build/__tests__/unit/toolsJson.test.js +11 -0
  59. package/build/__tests__/unit/toolsJson.test.js.map +1 -1
  60. package/build/core/componentSearch.d.ts +1 -1
  61. package/build/core/componentSearch.d.ts.map +1 -1
  62. package/build/core/componentSearch.js +8 -8
  63. package/build/core/componentSearch.js.map +1 -1
  64. package/build/core/componentTree.d.ts +1 -1
  65. package/build/core/componentTree.d.ts.map +1 -1
  66. package/build/core/componentTree.js +8 -8
  67. package/build/core/componentTree.js.map +1 -1
  68. package/build/core/guides.d.ts.map +1 -1
  69. package/build/core/guides.js +25 -0
  70. package/build/core/guides.js.map +1 -1
  71. package/build/core/index.d.ts +0 -2
  72. package/build/core/index.d.ts.map +1 -1
  73. package/build/core/index.js +0 -2
  74. package/build/core/index.js.map +1 -1
  75. package/build/core/jsLogEvents.d.ts +13 -0
  76. package/build/core/jsLogEvents.d.ts.map +1 -0
  77. package/build/core/jsLogEvents.js +65 -0
  78. package/build/core/jsLogEvents.js.map +1 -0
  79. package/build/core/logEventFormat.d.ts +14 -0
  80. package/build/core/logEventFormat.d.ts.map +1 -0
  81. package/build/core/logEventFormat.js +85 -0
  82. package/build/core/logEventFormat.js.map +1 -0
  83. package/build/core/logEvents.d.ts +115 -0
  84. package/build/core/logEvents.d.ts.map +1 -0
  85. package/build/core/logEvents.js +146 -0
  86. package/build/core/logEvents.js.map +1 -0
  87. package/build/core/logGrouping.d.ts +17 -0
  88. package/build/core/logGrouping.d.ts.map +1 -0
  89. package/build/core/logGrouping.js +134 -0
  90. package/build/core/logGrouping.js.map +1 -0
  91. package/build/core/logOwnership.d.ts +29 -0
  92. package/build/core/logOwnership.d.ts.map +1 -0
  93. package/build/core/logOwnership.js +83 -0
  94. package/build/core/logOwnership.js.map +1 -0
  95. package/build/core/logRelevance.d.ts +13 -0
  96. package/build/core/logRelevance.d.ts.map +1 -0
  97. package/build/core/logRelevance.js +23 -0
  98. package/build/core/logRelevance.js.map +1 -0
  99. package/build/core/logSourceAndroid.d.ts +27 -0
  100. package/build/core/logSourceAndroid.d.ts.map +1 -0
  101. package/build/core/logSourceAndroid.js +89 -0
  102. package/build/core/logSourceAndroid.js.map +1 -0
  103. package/build/core/logSourceIos.d.ts +26 -0
  104. package/build/core/logSourceIos.d.ts.map +1 -0
  105. package/build/core/logSourceIos.js +119 -0
  106. package/build/core/logSourceIos.js.map +1 -0
  107. package/build/core/logs.d.ts +5 -1
  108. package/build/core/logs.d.ts.map +1 -1
  109. package/build/core/logs.js +8 -1
  110. package/build/core/logs.js.map +1 -1
  111. package/build/core/nativeLogs.d.ts +75 -0
  112. package/build/core/nativeLogs.d.ts.map +1 -0
  113. package/build/core/nativeLogs.js +260 -0
  114. package/build/core/nativeLogs.js.map +1 -0
  115. package/build/core/screenLayout.d.ts +1 -1
  116. package/build/core/screenLayout.d.ts.map +1 -1
  117. package/build/core/screenLayout.js +3 -3
  118. package/build/core/screenLayout.js.map +1 -1
  119. package/build/core/types.d.ts +3 -2
  120. package/build/core/types.d.ts.map +1 -1
  121. package/build/tools/componentTools.js +6 -6
  122. package/build/tools/componentTools.js.map +1 -1
  123. package/build/tools/logTools.d.ts +25 -0
  124. package/build/tools/logTools.d.ts.map +1 -1
  125. package/build/tools/logTools.js +246 -70
  126. package/build/tools/logTools.js.map +1 -1
  127. package/build/tools/networkTools.d.ts.map +1 -1
  128. package/build/tools/networkTools.js +5 -44
  129. package/build/tools/networkTools.js.map +1 -1
  130. package/package.json +6 -4
  131. package/tools.json +447 -0
  132. package/build/core/format.d.ts +0 -8
  133. package/build/core/format.d.ts.map +0 -1
  134. package/build/core/format.js +0 -34
  135. package/build/core/format.js.map +0 -1
@@ -0,0 +1,30 @@
1
+ import { describe, it, expect } from "@jest/globals";
2
+ import { isRelevant } from "../../core/logRelevance.js";
3
+ describe("isRelevant", () => {
4
+ it("drops owned-but-noisy debug messages", () => {
5
+ // nativeloader / jni_lib_merge / SoLoader: 152 of the app's own 266
6
+ // lines on a live device. Owned, and still pure noise.
7
+ expect(isRelevant({ level: "debug", kind: "message" }, { minLevel: "warn" })).toBe(false);
8
+ });
9
+ it("keeps warnings at the default floor", () => {
10
+ expect(isRelevant({ level: "warn", kind: "message" }, { minLevel: "warn" })).toBe(true);
11
+ });
12
+ it("keeps a crash even below the floor", () => {
13
+ // The whole point of the feature: a level threshold must never be able
14
+ // to suppress a crash.
15
+ expect(isRelevant({ level: "debug", kind: "crash" }, { minLevel: "fatal" })).toBe(true);
16
+ });
17
+ it("keeps an ANR even below the floor", () => {
18
+ expect(isRelevant({ level: "info", kind: "anr" }, { minLevel: "error" })).toBe(true);
19
+ });
20
+ it("opens the floodgates at minLevel debug", () => {
21
+ expect(isRelevant({ level: "debug", kind: "message" }, { minLevel: "debug" })).toBe(true);
22
+ });
23
+ it("does not exempt other kinds from the floor", () => {
24
+ // ALWAYS is the only thing separating "exempt" from "filtered", so pin
25
+ // the kinds that must NOT be exempt.
26
+ expect(isRelevant({ level: "debug", kind: "exception" }, { minLevel: "warn" })).toBe(false);
27
+ expect(isRelevant({ level: "debug", kind: "lifecycle" }, { minLevel: "warn" })).toBe(false);
28
+ });
29
+ });
30
+ //# sourceMappingURL=logRelevance.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logRelevance.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/logRelevance.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC5C,oEAAoE;QACpE,uDAAuD;QACvD,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC1C,uEAAuE;QACvE,uBAAuB;QACvB,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QAClD,uEAAuE;QACvE,qCAAqC;QACrC,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5F,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=logSourceAndroid.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logSourceAndroid.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/logSourceAndroid.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,61 @@
1
+ import { describe, it, expect } from "@jest/globals";
2
+ import { buildLogcatArgs, parseLogcatEpoch } from "../../core/logSourceAndroid.js";
3
+ describe("buildLogcatArgs", () => {
4
+ it("always reads the crash buffer alongside main", () => {
5
+ // -b crash is tiny (121 lines) and near-100% signal; it is also the
6
+ // only place a tombstone lands.
7
+ expect(buildLogcatArgs({ serial: "emulator-5554" })).toContain("-b crash,main");
8
+ });
9
+ it("uses epoch, not year, for timestamps", () => {
10
+ // -v year prints device-local wall time with NO utc offset, so a device
11
+ // in another timezone silently shifts every entry.
12
+ const args = buildLogcatArgs({ serial: "emulator-5554" });
13
+ expect(args).toContain("-v epoch");
14
+ expect(args).not.toContain("-v year");
15
+ });
16
+ it("passes the device serial", () => {
17
+ expect(buildLogcatArgs({ serial: "emulator-5554" })).toContain("-s emulator-5554");
18
+ });
19
+ it("windows on the watermark when given", () => {
20
+ const args = buildLogcatArgs({ sinceTs: new Date("2026-07-29T22:12:00.000Z") });
21
+ expect(args).toMatch(/-T ['"]?1785[0-9]{6}\.000/);
22
+ });
23
+ it("omits --pid when the app is dead", () => {
24
+ expect(buildLogcatArgs({})).not.toContain("--pid");
25
+ });
26
+ });
27
+ describe("parseLogcatEpoch", () => {
28
+ const SAMPLE = [
29
+ "--------- beginning of main",
30
+ " 1785352265.203 1210 13886 I NearbyMediums: Wifi changed new SSID",
31
+ " 1785352265.015 22617 22617 F DEBUG : Cmdline: com.rndebuggertestapp",
32
+ " 1785352265.015 22617 22617 F DEBUG : pid: 17782, tid: 17832, name: x >>> com.rndebuggertestapp <<<",
33
+ " 1785352266.100 660 813 E ActivityManager: ANR in com.rndebuggertestapp",
34
+ ].join("\n");
35
+ it("skips banner lines", () => {
36
+ expect(parseLogcatEpoch(SAMPLE).some((l) => l.message.includes("beginning of"))).toBe(false);
37
+ });
38
+ it("parses pid, tid, level, tag and message", () => {
39
+ const first = parseLogcatEpoch(SAMPLE)[0];
40
+ expect(first.pid).toBe(1210);
41
+ expect(first.tid).toBe(13886);
42
+ expect(first.level).toBe("info");
43
+ expect(first.tag).toBe("NearbyMediums");
44
+ expect(first.message).toBe("Wifi changed new SSID");
45
+ });
46
+ it("maps F to fatal and E to error", () => {
47
+ const lines = parseLogcatEpoch(SAMPLE);
48
+ expect(lines[1].level).toBe("fatal");
49
+ expect(lines[3].level).toBe("error");
50
+ });
51
+ it("extracts the declared subject from Cmdline:", () => {
52
+ expect(parseLogcatEpoch(SAMPLE)[1].subject).toBe("com.rndebuggertestapp");
53
+ });
54
+ it("extracts the declared subject from >>> pkg <<<", () => {
55
+ expect(parseLogcatEpoch(SAMPLE)[2].subject).toBe("com.rndebuggertestapp");
56
+ });
57
+ it("converts epoch seconds to an absolute Date", () => {
58
+ expect(parseLogcatEpoch(SAMPLE)[0].ts.getTime()).toBe(1785352265203);
59
+ });
60
+ });
61
+ //# sourceMappingURL=logSourceAndroid.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logSourceAndroid.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/logSourceAndroid.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=logSourceIos.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logSourceIos.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/logSourceIos.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,64 @@
1
+ import { describe, it, expect } from "@jest/globals";
2
+ import { buildLogShowCommand, parseLogShowNdjson } from "../../core/logSourceIos.js";
3
+ const UDID = "F93612A3-0042-4BDC-855F-8CAB1BDD76C6";
4
+ describe("buildLogShowCommand", () => {
5
+ it("spawns against the given simulator", () => {
6
+ expect(buildLogShowCommand({ udid: UDID })).toContain(`simctl spawn ${UDID}`);
7
+ });
8
+ it("requests ndjson", () => {
9
+ expect(buildLogShowCommand({ udid: UDID })).toContain("--style ndjson");
10
+ });
11
+ it("pushes the process filter into the predicate", () => {
12
+ // 30m app-scoped is 42KB; unfiltered is orders of magnitude more.
13
+ const cmd = buildLogShowCommand({ udid: UDID, processName: "RnDebuggerTestApp" });
14
+ expect(cmd).toContain(`process == "RnDebuggerTestApp"`);
15
+ });
16
+ it("emits --start in device-local time, not UTC", () => {
17
+ // log show parses a bare --start as LOCAL and rejects an explicit
18
+ // offset, so a UTC stamp shifts the window by the host's offset —
19
+ // over-fetching east of UTC, silently missing crashes west of it.
20
+ const when = new Date(2026, 6, 29, 22, 15, 30);
21
+ expect(buildLogShowCommand({ udid: "U", sinceTs: when }))
22
+ .toContain("--start '2026-07-29 22:15:30'");
23
+ });
24
+ });
25
+ describe("parseLogShowNdjson", () => {
26
+ const SAMPLE = [
27
+ JSON.stringify({
28
+ timestamp: "2026-07-29 21:34:54.667179+0300",
29
+ messageType: "Error",
30
+ processID: 19743,
31
+ threadID: 1234,
32
+ subsystem: "com.apple.network",
33
+ category: "connection",
34
+ eventMessage: "nw_socket_handle_socket_event [C1.1.1:2] Socket SO_ERROR [61: Connection refused]",
35
+ }),
36
+ JSON.stringify({
37
+ timestamp: "2026-07-29 21:34:47.594000+0300",
38
+ messageType: "Default",
39
+ processID: 19743,
40
+ subsystem: "",
41
+ category: "",
42
+ eventMessage: "_setUpFeatureFlags called with release level 2",
43
+ }),
44
+ JSON.stringify({ count: 888, finished: 1 }),
45
+ ].join("\n");
46
+ it("skips the trailing summary object", () => {
47
+ expect(parseLogShowNdjson(SAMPLE)).toHaveLength(2);
48
+ });
49
+ it("maps messageType onto levels", () => {
50
+ expect(parseLogShowNdjson(SAMPLE)[0].level).toBe("error");
51
+ expect(parseLogShowNdjson(SAMPLE)[1].level).toBe("log");
52
+ });
53
+ it("builds the tag from subsystem and category", () => {
54
+ expect(parseLogShowNdjson(SAMPLE)[0].tag).toBe("com.apple.network:connection");
55
+ });
56
+ it("parses the offset-aware timestamp", () => {
57
+ // 21:34:54.667 +0300 == 18:34:54.667 UTC
58
+ expect(parseLogShowNdjson(SAMPLE)[0].ts.toISOString()).toBe("2026-07-29T18:34:54.667Z");
59
+ });
60
+ it("tolerates malformed lines rather than throwing", () => {
61
+ expect(parseLogShowNdjson("not json\n" + SAMPLE)).toHaveLength(2);
62
+ });
63
+ });
64
+ //# sourceMappingURL=logSourceIos.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logSourceIos.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/logSourceIos.test.ts"],"names":[],"mappings":"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"}
@@ -87,4 +87,27 @@ describe("mapConsoleType", () => {
87
87
  it("maps debug to debug", () => expect(mapConsoleType("debug")).toBe("debug"));
88
88
  it("maps unknown to log", () => expect(mapConsoleType("trace")).toBe("log"));
89
89
  });
90
+ describe("LogBuffer seq assignment", () => {
91
+ it("assigns a monotonic seq to every entry", () => {
92
+ const buffer = new LogBuffer(10);
93
+ buffer.add(makeLog("first"));
94
+ buffer.add(makeLog("second"));
95
+ const [a, b] = buffer.getAll();
96
+ expect(typeof a.seq).toBe("number");
97
+ expect(b.seq).toBeGreaterThan(a.seq);
98
+ });
99
+ it("keeps seq unique across separate buffers", () => {
100
+ // Two devices, two buffers, one id space — ids must never collide.
101
+ const one = new LogBuffer(10);
102
+ const two = new LogBuffer(10);
103
+ one.add(makeLog("device-a"));
104
+ two.add(makeLog("device-b"));
105
+ expect(one.getAll()[0].seq).not.toBe(two.getAll()[0].seq);
106
+ });
107
+ it("accepts the fatal level", () => {
108
+ const buffer = new LogBuffer(10);
109
+ buffer.add(makeLog("native crash", "fatal"));
110
+ expect(buffer.getAll()[0].level).toBe("fatal");
111
+ });
112
+ });
90
113
  //# sourceMappingURL=logs.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logs.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/logs.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logs.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/logs.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=nativeLogs.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeLogs.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/nativeLogs.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,230 @@
1
+ import { describe, it, expect, jest, beforeEach } from "@jest/globals";
2
+ const listDevicesMock = jest.fn();
3
+ const recordDeviceMock = jest.fn();
4
+ jest.unstable_mockModule("../../core/projectMemory.js", () => ({
5
+ listDevices: listDevicesMock,
6
+ recordDevice: recordDeviceMock,
7
+ recordScreenMetrics: jest.fn(),
8
+ }));
9
+ const connectedAppsMock = new Map();
10
+ jest.unstable_mockModule("../../core/state.js", () => ({
11
+ connectedApps: connectedAppsMock,
12
+ }));
13
+ const listAllDevicesMock = jest.fn();
14
+ jest.unstable_mockModule("../../core/deviceDiscovery.js", () => ({
15
+ listAllDevices: listAllDevicesMock,
16
+ }));
17
+ const execAsyncMock = jest.fn();
18
+ jest.unstable_mockModule("../../core/exec.js", () => ({
19
+ execAsync: execAsyncMock,
20
+ // logSourceAndroid.js / logSourceIos.js import this too — unused by these
21
+ // tests (fetchForTarget is never exercised here) but must exist so the
22
+ // module graph resolves.
23
+ withCancelableTimeout: jest.fn(),
24
+ }));
25
+ const { runNativePipeline, identityFromMemory, resolveLogTargets } = await import("../../core/nativeLogs.js");
26
+ const { __resetNativeLogBuffers } = await import("../../core/logEvents.js");
27
+ function emptyDiscovery() {
28
+ return {
29
+ ios: { available: true, simulators: [] },
30
+ android: { available: true, emulators: [], physical: [] },
31
+ summary: { booted: 0, total: 0 },
32
+ };
33
+ }
34
+ const APP = {
35
+ deviceKey: "emulator-5554",
36
+ platform: "android",
37
+ appId: "com.rndebuggertestapp",
38
+ pid: 23325,
39
+ };
40
+ let clock = 0;
41
+ function line(over) {
42
+ clock += 1;
43
+ return {
44
+ ts: new Date(Date.UTC(2026, 6, 29, 22, 11, 5, clock)),
45
+ level: "info", pid: 23325, tid: 23325, tag: "X", message: "", raw: "x",
46
+ ...over,
47
+ };
48
+ }
49
+ /** Minimal DeviceMemoryEntry builder — only the fields the lookup reads matter. */
50
+ function memoryRow(over) {
51
+ return {
52
+ identifier: "emulator-5554",
53
+ name: "Pixel",
54
+ platform: "android",
55
+ firstSeenAt: 0,
56
+ lastUsedAt: 0,
57
+ useCount: 1,
58
+ ...over,
59
+ };
60
+ }
61
+ describe("runNativePipeline", () => {
62
+ beforeEach(() => {
63
+ __resetNativeLogBuffers();
64
+ listDevicesMock.mockReset();
65
+ listDevicesMock.mockReturnValue([]);
66
+ });
67
+ it("drops foreign lines, noise, and keeps the crash", () => {
68
+ const lines = [
69
+ line({ pid: 998, tag: "MMKV", message: "open /data/data/com.rndebuggertestapp/files/mmkv" }),
70
+ line({ pid: 23325, tag: "nativeloader", level: "debug", message: "Load librnscreens.so: ok" }),
71
+ line({ pid: 22617, tid: 22617, tag: "DEBUG", level: "fatal", subject: "com.rndebuggertestapp", message: "Cmdline: com.rndebuggertestapp" }),
72
+ line({ pid: 22617, tid: 22617, tag: "DEBUG", level: "fatal", message: "signal 6 (SIGABRT), code -1" }),
73
+ ];
74
+ const { events } = runNativePipeline(lines, APP, "Pixel", { minLevel: "warn" });
75
+ expect(events).toHaveLength(1);
76
+ expect(events[0].kind).toBe("crash");
77
+ expect(events[0].id).toMatch(/^n\d+$/);
78
+ });
79
+ it("is idempotent across an inclusive refetch", () => {
80
+ const lines = [
81
+ line({ pid: 22617, tid: 22617, tag: "DEBUG", level: "fatal", subject: "com.rndebuggertestapp", message: "Cmdline: com.rndebuggertestapp" }),
82
+ ];
83
+ expect(runNativePipeline(lines, APP, "Pixel", { minLevel: "warn" }).events).toHaveLength(1);
84
+ expect(runNativePipeline(lines, APP, "Pixel", { minLevel: "warn" }).events).toHaveLength(0);
85
+ });
86
+ it("keeps two devices sharing one appId separate", () => {
87
+ const other = { ...APP, deviceKey: "emulator-5556" };
88
+ const mk = () => [line({ pid: 22617, tid: 22617, tag: "DEBUG", level: "fatal", subject: "com.rndebuggertestapp", message: "Cmdline: com.rndebuggertestapp" })];
89
+ const a = runNativePipeline(mk(), APP, "Pixel A", { minLevel: "warn" });
90
+ const b = runNativePipeline(mk(), other, "Pixel B", { minLevel: "warn" });
91
+ expect(a.events).toHaveLength(1);
92
+ expect(b.events).toHaveLength(1); // NOT deduped against device A
93
+ expect(a.events[0].id).not.toBe(b.events[0].id);
94
+ });
95
+ });
96
+ describe("identityFromMemory", () => {
97
+ beforeEach(() => {
98
+ listDevicesMock.mockReset();
99
+ });
100
+ it("finds a remembered appId keyed by device NAME, not just serial", () => {
101
+ // projectMemory can hold two rows for one physical device: one keyed by
102
+ // the adb serial (from one call path) with no appId, and one keyed by
103
+ // the RN deviceName (from another) that carries it. Looking up by
104
+ // serial alone made this fallback dead on Android.
105
+ listDevicesMock.mockReturnValue([
106
+ memoryRow({ identifier: "emulator-5554", appId: undefined }),
107
+ memoryRow({
108
+ identifier: "sdk_gphone16k_arm64 - 16 - API 36",
109
+ name: "sdk_gphone16k_arm64 - 16 - API 36",
110
+ appId: "com.gifted.production",
111
+ }),
112
+ ]);
113
+ const identity = identityFromMemory("emulator-5554", "android", "sdk_gphone16k_arm64 - 16 - API 36");
114
+ expect(identity).toEqual({
115
+ deviceKey: "emulator-5554",
116
+ platform: "android",
117
+ appId: "com.gifted.production",
118
+ });
119
+ });
120
+ it("ignores a matching row whose appId is undefined", () => {
121
+ // The serial-keyed row exists but has no appId, and no deviceName is
122
+ // supplied to fall back to — the empty row must not produce a false
123
+ // "found" result.
124
+ listDevicesMock.mockReturnValue([
125
+ memoryRow({ identifier: "emulator-5554", appId: undefined }),
126
+ ]);
127
+ expect(identityFromMemory("emulator-5554", "android")).toBeUndefined();
128
+ });
129
+ });
130
+ describe("resolveLogTargets", () => {
131
+ beforeEach(() => {
132
+ connectedAppsMock.clear();
133
+ listAllDevicesMock.mockReset();
134
+ recordDeviceMock.mockReset();
135
+ listDevicesMock.mockReset();
136
+ listDevicesMock.mockReturnValue([]);
137
+ execAsyncMock.mockReset();
138
+ });
139
+ it("records live identity under the device key so it survives a later crash", async () => {
140
+ // projectMemory's appId row is keyed by the RN deviceName on Android,
141
+ // which nothing links back to the adb serial — so identity must be
142
+ // written under the buffer key (the serial) while the app is still
143
+ // alive, or the post-crash lookup in identityFromMemory has nothing
144
+ // to find.
145
+ const app = {
146
+ deviceInfo: {
147
+ deviceName: "sdk_gphone16k_arm64 - 16 - API 36",
148
+ appId: "com.gifted.production",
149
+ },
150
+ platform: "android",
151
+ adbSerial: "emulator-5554",
152
+ };
153
+ connectedAppsMock.set("emulator-5554", app);
154
+ listAllDevicesMock.mockResolvedValue({
155
+ ...emptyDiscovery(),
156
+ android: {
157
+ available: true,
158
+ // Discovery's own name for the row is the AVD name — a third,
159
+ // unrelated value that also cannot bridge serial -> RN name.
160
+ emulators: [{ name: "Pixel_9_-_16kb", serial: "emulator-5554", state: "running" }],
161
+ physical: [],
162
+ },
163
+ });
164
+ await resolveLogTargets();
165
+ expect(recordDeviceMock).toHaveBeenCalledWith({
166
+ identifier: "emulator-5554",
167
+ name: "sdk_gphone16k_arm64 - 16 - API 36",
168
+ platform: "android",
169
+ appId: "com.gifted.production",
170
+ });
171
+ });
172
+ it("matches an Android app with a null adbSerial via the model prefix", async () => {
173
+ // ConnectedApp.adbSerial is frequently null (only set when
174
+ // getAdbIdForAvd happens to match at connect time), so the
175
+ // serial-keyed lookup in `connected` misses this app entirely. The
176
+ // model-prefix fallback is what recovers live identity here.
177
+ const app = {
178
+ deviceInfo: {
179
+ deviceName: "sdk_gphone16k_arm64 - 16 - API 36",
180
+ appId: "com.rndebuggertestapp",
181
+ },
182
+ platform: "android",
183
+ adbSerial: null,
184
+ };
185
+ connectedAppsMock.set("some-registry-key", app);
186
+ execAsyncMock.mockResolvedValue({ stdout: "sdk_gphone16k_arm64\n", stderr: "" });
187
+ listAllDevicesMock.mockResolvedValue({
188
+ ...emptyDiscovery(),
189
+ android: {
190
+ available: true,
191
+ emulators: [{ name: "Pixel_9_-_16kb", serial: "emulator-5554", state: "running" }],
192
+ physical: [],
193
+ },
194
+ });
195
+ const targets = await resolveLogTargets();
196
+ expect(execAsyncMock).toHaveBeenCalledWith("adb -s emulator-5554 shell getprop ro.product.model");
197
+ expect(targets).toHaveLength(1);
198
+ expect(targets[0].identitySource).toBe("live");
199
+ expect(targets[0].identity).toEqual({
200
+ deviceKey: "emulator-5554",
201
+ platform: "android",
202
+ appId: "com.rndebuggertestapp",
203
+ });
204
+ });
205
+ it("yields no live identity when the model does not match any connected app", async () => {
206
+ const app = {
207
+ deviceInfo: {
208
+ deviceName: "some_other_device - 14 - API 34",
209
+ appId: "com.someother.app",
210
+ },
211
+ platform: "android",
212
+ adbSerial: null,
213
+ };
214
+ connectedAppsMock.set("some-registry-key", app);
215
+ execAsyncMock.mockResolvedValue({ stdout: "sdk_gphone16k_arm64\n", stderr: "" });
216
+ listAllDevicesMock.mockResolvedValue({
217
+ ...emptyDiscovery(),
218
+ android: {
219
+ available: true,
220
+ emulators: [{ name: "Pixel_9_-_16kb", serial: "emulator-5554", state: "running" }],
221
+ physical: [],
222
+ },
223
+ });
224
+ const targets = await resolveLogTargets();
225
+ expect(targets).toHaveLength(1);
226
+ expect(targets[0].identitySource).not.toBe("live");
227
+ expect(targets[0].identity).toBeUndefined();
228
+ });
229
+ });
230
+ //# sourceMappingURL=nativeLogs.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeLogs.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/nativeLogs.test.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,17 @@ describe("tools.json", () => {
17
17
  it("records a count matching its own list", () => {
18
18
  expect(payload.count).toBe(payload.tools.length);
19
19
  });
20
+ it("records each tool's parameter names", () => {
21
+ // Consumers assert their prose does not reference a parameter that no
22
+ // longer exists. Tool add/remove was already guarded; PARAMETER changes
23
+ // drifted silently — four website entries advertised a removed `format`
24
+ // parameter for months with every test green.
25
+ const live = {};
26
+ for (const [name, entry] of toolRegistry.entries()) {
27
+ live[name] = Object.keys(entry.config.inputSchema).sort();
28
+ }
29
+ expect(payload.params).toEqual(live);
30
+ });
20
31
  it("is not empty", () => {
21
32
  expect(payload.tools.length).toBeGreaterThan(0);
22
33
  });
@@ -1 +1 @@
1
- {"version":3,"file":"toolsJson.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/toolsJson.test.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,8EAA8E;AAC9E,8EAA8E;AAC9E,oCAAoC;AAEpC,8EAA8E;AAC9E,sEAAsE;AACtE,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,GAAG,CAAC;AAE3C,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IACxB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAGjF,CAAC;IAEF,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;QACpB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"toolsJson.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/toolsJson.test.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,8EAA8E;AAC9E,8EAA8E;AAC9E,oCAAoC;AAEpC,8EAA8E;AAC9E,sEAAsE;AACtE,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,GAAG,CAAC;AAE3C,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IACxB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAIjF,CAAC;IAEF,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC3C,sEAAsE;QACtE,wEAAwE;QACxE,wEAAwE;QACxE,8CAA8C;QAC9C,MAAM,IAAI,GAA6B,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAE,KAAK,CAAC,MAAkC,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3F,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;QACpB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -34,7 +34,7 @@ export declare function findComponents(pattern: string, options?: {
34
34
  includeLayout?: boolean;
35
35
  shortPath?: boolean;
36
36
  summary?: boolean;
37
- format?: "json" | "tonl";
37
+ format?: "json" | "compact";
38
38
  device?: string;
39
39
  timeoutMs?: number;
40
40
  visibleOnly?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"componentSearch.d.ts","sourceRoot":"","sources":["../../src/core/componentSearch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAgClD;;;GAGG;AAEH;;;;;;;;GAQG;AAIH;;GAEG;AACH,wBAAsB,gBAAgB,CAClC,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE;IACL,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACjB,GACP,OAAO,CAAC,eAAe,CAAC,CA2Z1B;AAED;;GAEG;AACH,wBAAsB,cAAc,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACL,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACpB,GACP,OAAO,CAAC,eAAe,CAAC,CA6J1B"}
1
+ {"version":3,"file":"componentSearch.d.ts","sourceRoot":"","sources":["../../src/core/componentSearch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAgClD;;;GAGG;AAEH;;;;;;;;GAQG;AAIH;;GAEG;AACH,wBAAsB,gBAAgB,CAClC,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE;IACL,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACjB,GACP,OAAO,CAAC,eAAe,CAAC,CA2Z1B;AAED;;GAEG;AACH,wBAAsB,cAAc,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACL,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACpB,GACP,OAAO,CAAC,eAAe,CAAC,CA6J1B"}
@@ -1,7 +1,7 @@
1
1
  import { executeInApp, delay } from "./jsExecute.js";
2
- import { formatSummaryToTonl } from "./screenLayout.js";
2
+ import { formatSummaryCompact } from "./screenLayout.js";
3
3
  import { VISIBILITY_HELPERS_JS } from "./injected/visibility.js";
4
- function formatFoundComponentsToTonl(components) {
4
+ function formatFoundComponentsCompact(components) {
5
5
  const lines = ["#found{component,path,depth,key,layout}"];
6
6
  for (const c of components) {
7
7
  const layout = c.layout
@@ -434,7 +434,7 @@ export async function inspectComponent(componentName, options = {}) {
434
434
  * Find all components matching a name pattern and return summary info.
435
435
  */
436
436
  export async function findComponents(pattern, options = {}) {
437
- const { maxResults = 20, includeLayout = false, shortPath = true, summary = false, format = "tonl", device, timeoutMs, visibleOnly = false } = options;
437
+ const { maxResults = 20, includeLayout = false, shortPath = true, summary = false, format = "compact", device, timeoutMs, visibleOnly = false } = options;
438
438
  const escapedPattern = pattern.replace(/'/g, "\\'").replace(/\\/g, "\\\\");
439
439
  const expression = `
440
440
  (function() {
@@ -569,17 +569,17 @@ export async function findComponents(pattern, options = {}) {
569
569
  })()
570
570
  `;
571
571
  const result = await executeInApp(expression, false, { timeoutMs: timeoutMs ?? 5000, originatingToolName: "find_components" }, device);
572
- if (format === "tonl" && result.success && result.result) {
572
+ if (format === "compact" && result.success && result.result) {
573
573
  try {
574
574
  const parsed = JSON.parse(result.result);
575
575
  if (parsed.components) {
576
576
  if (parsed.totalMatches !== undefined) {
577
- const tonl = formatSummaryToTonl(parsed.components, parsed.totalMatches);
578
- return { success: true, result: `pattern: ${parsed.pattern}\n${tonl}` };
577
+ const compact = formatSummaryCompact(parsed.components, parsed.totalMatches);
578
+ return { success: true, result: `pattern: ${parsed.pattern}\n${compact}` };
579
579
  }
580
580
  else {
581
- const tonl = formatFoundComponentsToTonl(parsed.components);
582
- return { success: true, result: `pattern: ${parsed.pattern}\nfound: ${parsed.found}\n${tonl}` };
581
+ const compact = formatFoundComponentsCompact(parsed.components);
582
+ return { success: true, result: `pattern: ${parsed.pattern}\nfound: ${parsed.found}\n${compact}` };
583
583
  }
584
584
  }
585
585
  }
@@ -1 +1 @@
1
- {"version":3,"file":"componentSearch.js","sourceRoot":"","sources":["../../src/core/componentSearch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"componentSearch.js","sourceRoot":"","sources":["../../src/core/componentSearch.ts"],"names":[],"mappings":"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"}