execbro 1.11.1 → 2.0.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 (250) hide show
  1. package/README.md +4 -4
  2. package/build/__tests__/unit/appContext.test.d.ts +2 -0
  3. package/build/__tests__/unit/appContext.test.d.ts.map +1 -0
  4. package/build/__tests__/unit/appContext.test.js +70 -0
  5. package/build/__tests__/unit/appContext.test.js.map +1 -0
  6. package/build/__tests__/unit/appRequest.test.d.ts +2 -0
  7. package/build/__tests__/unit/appRequest.test.d.ts.map +1 -0
  8. package/build/__tests__/unit/appRequest.test.js +179 -0
  9. package/build/__tests__/unit/appRequest.test.js.map +1 -0
  10. package/build/__tests__/unit/contextWiring.test.d.ts +2 -0
  11. package/build/__tests__/unit/contextWiring.test.d.ts.map +1 -0
  12. package/build/__tests__/unit/contextWiring.test.js +28 -0
  13. package/build/__tests__/unit/contextWiring.test.js.map +1 -0
  14. package/build/__tests__/unit/epochRender.test.d.ts +2 -0
  15. package/build/__tests__/unit/epochRender.test.d.ts.map +1 -0
  16. package/build/__tests__/unit/epochRender.test.js +60 -0
  17. package/build/__tests__/unit/epochRender.test.js.map +1 -0
  18. package/build/__tests__/unit/executeBudget.test.d.ts +2 -0
  19. package/build/__tests__/unit/executeBudget.test.d.ts.map +1 -0
  20. package/build/__tests__/unit/executeBudget.test.js +27 -0
  21. package/build/__tests__/unit/executeBudget.test.js.map +1 -0
  22. package/build/__tests__/unit/executor.test.js +48 -6
  23. package/build/__tests__/unit/executor.test.js.map +1 -1
  24. package/build/__tests__/unit/getLogsEmptyContract.test.js +4 -3
  25. package/build/__tests__/unit/getLogsEmptyContract.test.js.map +1 -1
  26. package/build/__tests__/unit/getLogsNativeSource.test.js +7 -8
  27. package/build/__tests__/unit/getLogsNativeSource.test.js.map +1 -1
  28. package/build/__tests__/unit/inspectorHarvest.test.js +1 -21
  29. package/build/__tests__/unit/inspectorHarvest.test.js.map +1 -1
  30. package/build/__tests__/unit/inspectorSource.test.js +1 -38
  31. package/build/__tests__/unit/inspectorSource.test.js.map +1 -1
  32. package/build/__tests__/unit/jsLogEvents.test.js +1 -0
  33. package/build/__tests__/unit/jsLogEvents.test.js.map +1 -1
  34. package/build/__tests__/unit/logBufferEpoch.test.d.ts +2 -0
  35. package/build/__tests__/unit/logBufferEpoch.test.d.ts.map +1 -0
  36. package/build/__tests__/unit/logBufferEpoch.test.js +63 -0
  37. package/build/__tests__/unit/logBufferEpoch.test.js.map +1 -0
  38. package/build/__tests__/unit/metro.test.js +18 -1
  39. package/build/__tests__/unit/metro.test.js.map +1 -1
  40. package/build/__tests__/unit/moduleRegistry.test.d.ts +2 -0
  41. package/build/__tests__/unit/moduleRegistry.test.d.ts.map +1 -0
  42. package/build/__tests__/unit/moduleRegistry.test.js +62 -0
  43. package/build/__tests__/unit/moduleRegistry.test.js.map +1 -0
  44. package/build/__tests__/unit/navigateVerify.test.d.ts +2 -0
  45. package/build/__tests__/unit/navigateVerify.test.d.ts.map +1 -0
  46. package/build/__tests__/unit/navigateVerify.test.js +30 -0
  47. package/build/__tests__/unit/navigateVerify.test.js.map +1 -0
  48. package/build/__tests__/unit/navigation.test.d.ts +2 -0
  49. package/build/__tests__/unit/navigation.test.d.ts.map +1 -0
  50. package/build/__tests__/unit/navigation.test.js +254 -0
  51. package/build/__tests__/unit/navigation.test.js.map +1 -0
  52. package/build/__tests__/unit/network.test.js +1 -0
  53. package/build/__tests__/unit/network.test.js.map +1 -1
  54. package/build/__tests__/unit/networkBufferEpoch.test.d.ts +2 -0
  55. package/build/__tests__/unit/networkBufferEpoch.test.d.ts.map +1 -0
  56. package/build/__tests__/unit/networkBufferEpoch.test.js +52 -0
  57. package/build/__tests__/unit/networkBufferEpoch.test.js.map +1 -0
  58. package/build/__tests__/unit/networkInterceptor.test.js +7 -7
  59. package/build/__tests__/unit/networkInterceptor.test.js.map +1 -1
  60. package/build/__tests__/unit/promiseHandles.test.d.ts +2 -0
  61. package/build/__tests__/unit/promiseHandles.test.d.ts.map +1 -0
  62. package/build/__tests__/unit/promiseHandles.test.js +61 -0
  63. package/build/__tests__/unit/promiseHandles.test.js.map +1 -0
  64. package/build/__tests__/unit/resolveBufferOffline.test.d.ts +2 -0
  65. package/build/__tests__/unit/resolveBufferOffline.test.d.ts.map +1 -0
  66. package/build/__tests__/unit/resolveBufferOffline.test.js +25 -0
  67. package/build/__tests__/unit/resolveBufferOffline.test.js.map +1 -0
  68. package/build/__tests__/unit/sdkMirrorPoller.test.d.ts +2 -0
  69. package/build/__tests__/unit/sdkMirrorPoller.test.d.ts.map +1 -0
  70. package/build/__tests__/unit/sdkMirrorPoller.test.js +118 -0
  71. package/build/__tests__/unit/sdkMirrorPoller.test.js.map +1 -0
  72. package/build/__tests__/unit/sessionEpoch.test.d.ts +2 -0
  73. package/build/__tests__/unit/sessionEpoch.test.d.ts.map +1 -0
  74. package/build/__tests__/unit/sessionEpoch.test.js +41 -0
  75. package/build/__tests__/unit/sessionEpoch.test.js.map +1 -0
  76. package/build/__tests__/unit/truncate.test.d.ts +2 -0
  77. package/build/__tests__/unit/truncate.test.d.ts.map +1 -0
  78. package/build/__tests__/unit/truncate.test.js +58 -0
  79. package/build/__tests__/unit/truncate.test.js.map +1 -0
  80. package/build/core/appContext.d.ts +53 -0
  81. package/build/core/appContext.d.ts.map +1 -0
  82. package/build/core/appContext.js +172 -0
  83. package/build/core/appContext.js.map +1 -0
  84. package/build/core/appRequest.d.ts +21 -0
  85. package/build/core/appRequest.d.ts.map +1 -0
  86. package/build/core/appRequest.js +95 -0
  87. package/build/core/appRequest.js.map +1 -0
  88. package/build/core/bufferConfig.d.ts +5 -0
  89. package/build/core/bufferConfig.d.ts.map +1 -0
  90. package/build/core/bufferConfig.js +20 -0
  91. package/build/core/bufferConfig.js.map +1 -0
  92. package/build/core/connection.d.ts.map +1 -1
  93. package/build/core/connection.js +29 -9
  94. package/build/core/connection.js.map +1 -1
  95. package/build/core/debugGlobals.d.ts.map +1 -1
  96. package/build/core/debugGlobals.js +13 -0
  97. package/build/core/debugGlobals.js.map +1 -1
  98. package/build/core/epochRender.d.ts +19 -0
  99. package/build/core/epochRender.d.ts.map +1 -0
  100. package/build/core/epochRender.js +38 -0
  101. package/build/core/epochRender.js.map +1 -0
  102. package/build/core/guides.d.ts.map +1 -1
  103. package/build/core/guides.js +36 -91
  104. package/build/core/guides.js.map +1 -1
  105. package/build/core/index.d.ts +2 -3
  106. package/build/core/index.d.ts.map +1 -1
  107. package/build/core/index.js +4 -4
  108. package/build/core/index.js.map +1 -1
  109. package/build/core/inspector.d.ts +0 -39
  110. package/build/core/inspector.d.ts.map +1 -1
  111. package/build/core/inspector.js +1 -358
  112. package/build/core/inspector.js.map +1 -1
  113. package/build/core/ios.js +2 -2
  114. package/build/core/ios.js.map +1 -1
  115. package/build/core/jsExecute.d.ts +15 -0
  116. package/build/core/jsExecute.d.ts.map +1 -1
  117. package/build/core/jsExecute.js +136 -29
  118. package/build/core/jsExecute.js.map +1 -1
  119. package/build/core/logs.d.ts +12 -3
  120. package/build/core/logs.d.ts.map +1 -1
  121. package/build/core/logs.js +28 -5
  122. package/build/core/logs.js.map +1 -1
  123. package/build/core/metro.d.ts +2 -0
  124. package/build/core/metro.d.ts.map +1 -1
  125. package/build/core/metro.js +16 -8
  126. package/build/core/metro.js.map +1 -1
  127. package/build/core/moduleRegistry.d.ts +19 -0
  128. package/build/core/moduleRegistry.d.ts.map +1 -0
  129. package/build/core/moduleRegistry.js +67 -0
  130. package/build/core/moduleRegistry.js.map +1 -0
  131. package/build/core/nativeOnlyHints.d.ts.map +1 -1
  132. package/build/core/nativeOnlyHints.js +0 -2
  133. package/build/core/nativeOnlyHints.js.map +1 -1
  134. package/build/core/navigate.d.ts +46 -0
  135. package/build/core/navigate.d.ts.map +1 -0
  136. package/build/core/navigate.js +119 -0
  137. package/build/core/navigate.js.map +1 -0
  138. package/build/core/navigation.d.ts +66 -0
  139. package/build/core/navigation.d.ts.map +1 -0
  140. package/build/core/navigation.js +269 -0
  141. package/build/core/navigation.js.map +1 -0
  142. package/build/core/network.d.ts +12 -2
  143. package/build/core/network.d.ts.map +1 -1
  144. package/build/core/network.js +52 -12
  145. package/build/core/network.js.map +1 -1
  146. package/build/core/networkInterceptor.d.ts +1 -1
  147. package/build/core/networkInterceptor.d.ts.map +1 -1
  148. package/build/core/networkInterceptor.js +3 -2
  149. package/build/core/networkInterceptor.js.map +1 -1
  150. package/build/core/promiseHandles.d.ts +19 -0
  151. package/build/core/promiseHandles.d.ts.map +1 -0
  152. package/build/core/promiseHandles.js +58 -0
  153. package/build/core/promiseHandles.js.map +1 -0
  154. package/build/core/register.d.ts.map +1 -1
  155. package/build/core/register.js +1 -4
  156. package/build/core/register.js.map +1 -1
  157. package/build/core/sdkMirrorPoller.d.ts +31 -0
  158. package/build/core/sdkMirrorPoller.d.ts.map +1 -0
  159. package/build/core/sdkMirrorPoller.js +210 -0
  160. package/build/core/sdkMirrorPoller.js.map +1 -0
  161. package/build/core/state.d.ts +14 -0
  162. package/build/core/state.d.ts.map +1 -1
  163. package/build/core/state.js +48 -2
  164. package/build/core/state.js.map +1 -1
  165. package/build/core/toolHelpers.d.ts.map +1 -1
  166. package/build/core/toolHelpers.js +42 -10
  167. package/build/core/toolHelpers.js.map +1 -1
  168. package/build/core/truncate.d.ts +42 -0
  169. package/build/core/truncate.d.ts.map +1 -0
  170. package/build/core/truncate.js +169 -0
  171. package/build/core/truncate.js.map +1 -0
  172. package/build/core/types.d.ts +3 -0
  173. package/build/core/types.d.ts.map +1 -1
  174. package/build/index.d.ts.map +1 -1
  175. package/build/index.js +4 -2
  176. package/build/index.js.map +1 -1
  177. package/build/tools/_deviceArg.d.ts +17 -1
  178. package/build/tools/_deviceArg.d.ts.map +1 -1
  179. package/build/tools/_deviceArg.js +17 -1
  180. package/build/tools/_deviceArg.js.map +1 -1
  181. package/build/tools/bundleTools.d.ts.map +1 -1
  182. package/build/tools/bundleTools.js +20 -33
  183. package/build/tools/bundleTools.js.map +1 -1
  184. package/build/tools/componentTools.d.ts.map +1 -1
  185. package/build/tools/componentTools.js +41 -219
  186. package/build/tools/componentTools.js.map +1 -1
  187. package/build/tools/connectionTools.d.ts.map +1 -1
  188. package/build/tools/connectionTools.js +17 -22
  189. package/build/tools/connectionTools.js.map +1 -1
  190. package/build/tools/deviceTools.d.ts.map +1 -1
  191. package/build/tools/deviceTools.js +13 -167
  192. package/build/tools/deviceTools.js.map +1 -1
  193. package/build/tools/executionTools.d.ts.map +1 -1
  194. package/build/tools/executionTools.js +63 -18
  195. package/build/tools/executionTools.js.map +1 -1
  196. package/build/tools/interactionTools.d.ts.map +1 -1
  197. package/build/tools/interactionTools.js +13 -45
  198. package/build/tools/interactionTools.js.map +1 -1
  199. package/build/tools/logTools.d.ts.map +1 -1
  200. package/build/tools/logTools.js +61 -80
  201. package/build/tools/logTools.js.map +1 -1
  202. package/build/tools/metaTools.js +1 -1
  203. package/build/tools/metaTools.js.map +1 -1
  204. package/build/tools/navigationTools.d.ts +3 -0
  205. package/build/tools/navigationTools.d.ts.map +1 -0
  206. package/build/tools/navigationTools.js +60 -0
  207. package/build/tools/navigationTools.js.map +1 -0
  208. package/build/tools/networkTools.d.ts.map +1 -1
  209. package/build/tools/networkTools.js +44 -202
  210. package/build/tools/networkTools.js.map +1 -1
  211. package/build/tools/reduxTools.d.ts.map +1 -1
  212. package/build/tools/reduxTools.js +3 -2
  213. package/build/tools/reduxTools.js.map +1 -1
  214. package/build/tools/requestTools.d.ts +3 -0
  215. package/build/tools/requestTools.d.ts.map +1 -0
  216. package/build/tools/requestTools.js +79 -0
  217. package/build/tools/requestTools.js.map +1 -0
  218. package/build/tools/screenshotTools.d.ts.map +1 -1
  219. package/build/tools/screenshotTools.js +9 -13
  220. package/build/tools/screenshotTools.js.map +1 -1
  221. package/package.json +1 -1
  222. package/tools.json +22 -78
  223. package/build/__tests__/unit/flowpoints.test.d.ts +0 -2
  224. package/build/__tests__/unit/flowpoints.test.d.ts.map +0 -1
  225. package/build/__tests__/unit/flowpoints.test.js +0 -126
  226. package/build/__tests__/unit/flowpoints.test.js.map +0 -1
  227. package/build/__tests__/unit/flowpointsQuery.test.d.ts +0 -2
  228. package/build/__tests__/unit/flowpointsQuery.test.d.ts.map +0 -1
  229. package/build/__tests__/unit/flowpointsQuery.test.js +0 -91
  230. package/build/__tests__/unit/flowpointsQuery.test.js.map +0 -1
  231. package/build/__tests__/unit/selectionPoller.test.d.ts +0 -2
  232. package/build/__tests__/unit/selectionPoller.test.d.ts.map +0 -1
  233. package/build/__tests__/unit/selectionPoller.test.js +0 -109
  234. package/build/__tests__/unit/selectionPoller.test.js.map +0 -1
  235. package/build/__tests__/unit/verifyFlow.test.d.ts +0 -2
  236. package/build/__tests__/unit/verifyFlow.test.d.ts.map +0 -1
  237. package/build/__tests__/unit/verifyFlow.test.js +0 -45
  238. package/build/__tests__/unit/verifyFlow.test.js.map +0 -1
  239. package/build/core/selectionPoller.d.ts +0 -13
  240. package/build/core/selectionPoller.d.ts.map +0 -1
  241. package/build/core/selectionPoller.js +0 -102
  242. package/build/core/selectionPoller.js.map +0 -1
  243. package/build/pro/flowpointTools.d.ts +0 -4
  244. package/build/pro/flowpointTools.d.ts.map +0 -1
  245. package/build/pro/flowpointTools.js +0 -266
  246. package/build/pro/flowpointTools.js.map +0 -1
  247. package/build/pro/flowpoints.d.ts +0 -86
  248. package/build/pro/flowpoints.d.ts.map +0 -1
  249. package/build/pro/flowpoints.js +0 -283
  250. package/build/pro/flowpoints.js.map +0 -1
@@ -1,126 +0,0 @@
1
- import { describe, expect, it } from "@jest/globals";
2
- import { FLOWPOINT_STORE_CAP, createFlowpointStore, applyDrain, buildDrainExpression, buildClearExpression, parseDrainResult, clearFlowpointStores, getFlowpointStore, } from "../../pro/flowpoints.js";
3
- function makeEntry(seq, overrides = {}) {
4
- return { seq, t: 1000 + seq, name: "add-to-cart", step: `step-${seq}`, run: "r1", level: "info", ...overrides };
5
- }
6
- describe("applyDrain", () => {
7
- it("appends everything on first drain and sets cursor/contextId", () => {
8
- const store = createFlowpointStore();
9
- const added = applyDrain(store, { contextId: "ctx-a", entries: [makeEntry(1), makeEntry(2)] });
10
- expect(added).toBe(2);
11
- expect(store.entries).toHaveLength(2);
12
- expect(store.cursor).toBe(2);
13
- expect(store.contextId).toBe("ctx-a");
14
- });
15
- it("is idempotent for the same snapshot and incremental for grown snapshots", () => {
16
- const store = createFlowpointStore();
17
- applyDrain(store, { contextId: "ctx-a", entries: [makeEntry(1)] });
18
- expect(applyDrain(store, { contextId: "ctx-a", entries: [makeEntry(1)] })).toBe(0);
19
- expect(applyDrain(store, { contextId: "ctx-a", entries: [makeEntry(1), makeEntry(2)] })).toBe(1);
20
- expect(store.entries.map((e) => e.seq)).toEqual([1, 2]);
21
- });
22
- it("treats a changed contextId as a reload: all snapshot entries are fresh", () => {
23
- const store = createFlowpointStore();
24
- applyDrain(store, { contextId: "ctx-a", entries: [makeEntry(1), makeEntry(2), makeEntry(3)] });
25
- // reload: seq restarts, MORE entries than the old cursor — heuristics would miss this
26
- const added = applyDrain(store, {
27
- contextId: "ctx-b",
28
- entries: [makeEntry(1), makeEntry(2), makeEntry(3), makeEntry(4)],
29
- });
30
- expect(added).toBe(4);
31
- expect(store.entries).toHaveLength(7);
32
- expect(store.cursor).toBe(4);
33
- expect(store.contextId).toBe("ctx-b");
34
- });
35
- it("caps the store at FLOWPOINT_STORE_CAP, dropping oldest", () => {
36
- const store = createFlowpointStore();
37
- const entries = Array.from({ length: FLOWPOINT_STORE_CAP + 10 }, (_, i) => makeEntry(i + 1));
38
- applyDrain(store, { contextId: "ctx-a", entries });
39
- expect(store.entries).toHaveLength(FLOWPOINT_STORE_CAP);
40
- expect(store.entries[0].seq).toBe(11);
41
- });
42
- });
43
- describe("expression builders", () => {
44
- it("drain expression is an IIFE reading getFlowpointSnapshot with dual-global fallback", () => {
45
- const expr = buildDrainExpression();
46
- expect(expr).toContain("__EXECBRO__");
47
- expect(expr).toContain("__RN_AI_DEVTOOLS__");
48
- expect(expr).toContain("getFlowpointSnapshot");
49
- expect(expr).toContain("__missing");
50
- expect(expr).toContain("meta not JSON-serializable");
51
- expect(expr).toContain("__EXECBRO_FLOWPOINT_WARNED__");
52
- expect(expr).toContain("console.warn");
53
- expect(expr).toContain("outdated");
54
- expect(expr).toContain("execbro-sdk@latest");
55
- });
56
- it("clear expression calls clearFlowpoints", () => {
57
- expect(buildClearExpression()).toContain("clearFlowpoints");
58
- });
59
- });
60
- describe("parseDrainResult", () => {
61
- it("parses a snapshot", () => {
62
- const parsed = parseDrainResult(JSON.stringify({ contextId: "c", entries: [makeEntry(1)] }));
63
- expect(parsed).toEqual({ contextId: "c", entries: [makeEntry(1)] });
64
- });
65
- it("detects the SDK-missing marker, defaulting to uninitialized when no reason is given", () => {
66
- expect(parseDrainResult(JSON.stringify({ __missing: true }))).toEqual({
67
- missing: true,
68
- reason: "uninitialized",
69
- });
70
- });
71
- it("detects the outdated-SDK marker", () => {
72
- expect(parseDrainResult(JSON.stringify({ __missing: true, __reason: "outdated" }))).toEqual({
73
- missing: true,
74
- reason: "outdated",
75
- });
76
- });
77
- it("returns null on garbage", () => {
78
- expect(parseDrainResult("not json")).toBeNull();
79
- });
80
- });
81
- describe("clearFlowpointStores", () => {
82
- it("device-scoped clear touches only that device's store", () => {
83
- const deviceA = getFlowpointStore("clear-test-device-a");
84
- const deviceB = getFlowpointStore("clear-test-device-b");
85
- applyDrain(deviceA, { contextId: "ctx-a", entries: [makeEntry(1), makeEntry(2)] });
86
- applyDrain(deviceB, { contextId: "ctx-b", entries: [makeEntry(1), makeEntry(2), makeEntry(3)] });
87
- const removed = clearFlowpointStores(undefined, "clear-test-device-a");
88
- expect(removed).toBe(2);
89
- expect(deviceA.entries).toHaveLength(0);
90
- expect(deviceB.entries).toHaveLength(3);
91
- // cursor/contextId retained so cleared entries never re-drain
92
- expect(deviceA.cursor).toBe(2);
93
- expect(deviceA.contextId).toBe("ctx-a");
94
- });
95
- it("undefined deviceName clears all stores", () => {
96
- // Reset any state left by other stores/tests sharing the module-level map.
97
- clearFlowpointStores(undefined, undefined);
98
- const deviceC = getFlowpointStore("clear-test-device-c");
99
- const deviceD = getFlowpointStore("clear-test-device-d");
100
- applyDrain(deviceC, { contextId: "ctx-c", entries: [makeEntry(1)] });
101
- applyDrain(deviceD, { contextId: "ctx-d", entries: [makeEntry(1), makeEntry(2)] });
102
- const removed = clearFlowpointStores(undefined, undefined);
103
- expect(removed).toBe(3);
104
- expect(deviceC.entries).toHaveLength(0);
105
- expect(deviceD.entries).toHaveLength(0);
106
- });
107
- it("combines name filter with device scoping", () => {
108
- const deviceE = getFlowpointStore("clear-test-device-e");
109
- applyDrain(deviceE, {
110
- contextId: "ctx-e",
111
- entries: [
112
- makeEntry(1, { name: "checkout" }),
113
- makeEntry(2, { name: "onboarding" }),
114
- makeEntry(3, { name: "checkout" }),
115
- ],
116
- });
117
- const deviceF = getFlowpointStore("clear-test-device-f");
118
- applyDrain(deviceF, { contextId: "ctx-f", entries: [makeEntry(1, { name: "checkout" })] });
119
- const removed = clearFlowpointStores("checkout", "clear-test-device-e");
120
- expect(removed).toBe(2);
121
- expect(deviceE.entries.map((e) => e.name)).toEqual(["onboarding"]);
122
- // other device's "checkout" entries untouched since deviceName scoped the clear
123
- expect(deviceF.entries).toHaveLength(1);
124
- });
125
- });
126
- //# sourceMappingURL=flowpoints.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flowpoints.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/flowpoints.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=flowpointsQuery.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flowpointsQuery.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/flowpointsQuery.test.ts"],"names":[],"mappings":""}
@@ -1,91 +0,0 @@
1
- import { describe, expect, it } from "@jest/globals";
2
- import { formatMeta, matchesPoint, resolveLastRuns, filterFlowpoints, formatFlowpoints, } from "../../pro/flowpoints.js";
3
- function e(seq, overrides = {}) {
4
- return { seq, t: 1000 + seq, name: "add-to-cart", step: `s${seq}`, run: "r1", level: "info", ...overrides };
5
- }
6
- describe("formatMeta", () => {
7
- it("passes strings through and stringifies objects", () => {
8
- expect(formatMeta("start")).toBe("start");
9
- expect(formatMeta({ removed: 3 })).toBe('{"removed":3}');
10
- expect(formatMeta(undefined)).toBe("");
11
- });
12
- });
13
- describe("matchesPoint", () => {
14
- it("matches on step equality, level, and case-insensitive metaIncludes", () => {
15
- const entry = e(1, { step: "failed", level: "error", meta: { reason: "Timeout" } });
16
- expect(matchesPoint(entry, { step: "failed" })).toBe(true);
17
- expect(matchesPoint(entry, { step: "other" })).toBe(false);
18
- expect(matchesPoint(entry, { level: "error" })).toBe(true);
19
- expect(matchesPoint(entry, { metaIncludes: "timeout" })).toBe(true);
20
- expect(matchesPoint(entry, { step: "failed", level: "info" })).toBe(false);
21
- });
22
- });
23
- describe("resolveLastRuns", () => {
24
- it("returns the run of the chronologically last entry per flow", () => {
25
- const entries = [
26
- e(1, { run: "aaaa" }),
27
- e(2, { run: "aaaa" }),
28
- e(3, { run: "bbbb" }),
29
- e(4, { name: "other", run: "cccc" }),
30
- ];
31
- const last = resolveLastRuns(entries);
32
- expect(last.get("add-to-cart")).toBe("bbbb");
33
- expect(last.get("other")).toBe("cccc");
34
- });
35
- });
36
- describe("filterFlowpoints", () => {
37
- const entries = [
38
- e(1, { run: "aaaa", step: "start" }),
39
- e(2, { run: "aaaa", step: "failed", level: "error", meta: { reason: "timeout" } }),
40
- e(3, { run: "bbbb", step: "start" }),
41
- e(4, { run: "bbbb", step: "done" }),
42
- e(5, { name: "checkout", run: "cccc", step: "start" }),
43
- ];
44
- it("filters by name, step, and level", () => {
45
- expect(filterFlowpoints(entries, { name: "checkout" })).toHaveLength(1);
46
- expect(filterFlowpoints(entries, { step: "start" })).toHaveLength(3);
47
- expect(filterFlowpoints(entries, { level: "error" })).toHaveLength(1);
48
- });
49
- it("filters by metaIncludes and since", () => {
50
- expect(filterFlowpoints(entries, { metaIncludes: "TIMEOUT" })).toHaveLength(1);
51
- expect(filterFlowpoints(entries, { since: 1003 })).toHaveLength(2);
52
- });
53
- it("resolves run: 'last' per flow and explicit run ids", () => {
54
- const last = filterFlowpoints(entries, { run: "last" });
55
- expect(last.map((x) => x.seq)).toEqual([3, 4, 5]);
56
- expect(filterFlowpoints(entries, { run: "aaaa" })).toHaveLength(2);
57
- });
58
- it("applies limit keeping the newest entries", () => {
59
- expect(filterFlowpoints(entries, { limit: 2 }).map((x) => x.seq)).toEqual([4, 5]);
60
- });
61
- });
62
- describe("formatFlowpoints", () => {
63
- it("formats a single-run flow with deltas, span, level prefix, and meta", () => {
64
- const out = formatFlowpoints([
65
- e(1, { step: "start", t: 1000 }),
66
- e(2, { step: "cleared", t: 1006, meta: { removed: 3 } }),
67
- e(3, { step: "failed", t: 1312, level: "error", meta: { reason: "timeout" } }),
68
- ]);
69
- expect(out).toContain('Flow "add-to-cart" run r1 — 3 points (312ms span):');
70
- expect(out).toContain("+0ms");
71
- expect(out).toContain("+6ms");
72
- expect(out).toContain('cleared {"removed":3}');
73
- expect(out).toContain("[error] failed");
74
- });
75
- it("groups multiple runs and labels the latest", () => {
76
- const out = formatFlowpoints([e(1, { run: "aaaa", t: 1000 }), e(2, { run: "bbbb", t: 2000 })]);
77
- expect(out).toContain('Flow "add-to-cart" — 2 runs');
78
- expect(out).toContain("run aaaa — 1 points");
79
- expect(out).toContain("run bbbb (latest) — 1 points");
80
- });
81
- it("labels (latest) by last activity, not first appearance, under interleaved runs", () => {
82
- const out = formatFlowpoints([
83
- e(1, { run: "aaaa", t: 1000 }),
84
- e(2, { run: "bbbb", t: 1500 }),
85
- e(3, { run: "aaaa", t: 2000 }),
86
- ]);
87
- expect(out).toContain("run aaaa (latest)");
88
- expect(out).not.toContain("bbbb (latest)");
89
- });
90
- });
91
- //# sourceMappingURL=flowpointsQuery.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flowpointsQuery.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/flowpointsQuery.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=selectionPoller.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"selectionPoller.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/selectionPoller.test.ts"],"names":[],"mappings":""}
@@ -1,109 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach, jest } from "@jest/globals";
2
- const executeInApp = jest.fn();
3
- jest.unstable_mockModule("../../core/jsExecute.js", () => ({ executeInApp }));
4
- const { pollOnce, startSelectionPoller, stopSelectionPoller, isSelectionPollerRunning } = await import("../../core/selectionPoller.js");
5
- const { selectionBuffer } = await import("../../core/selectionBuffer.js");
6
- function probeResult(overrides = {}) {
7
- return {
8
- success: true,
9
- result: JSON.stringify({
10
- active: true,
11
- selected: true,
12
- changed: true,
13
- element: "Text",
14
- path: "App > HomeScreen > Text",
15
- hierarchy: ["App", "HomeScreen", "Text"],
16
- frame: { left: 100, top: 200, width: 50, height: 20 },
17
- style: { fontSize: 17 },
18
- ...overrides,
19
- }),
20
- };
21
- }
22
- function harvestResult() {
23
- return {
24
- success: true,
25
- result: JSON.stringify({
26
- stacks: [{ component: "Text", stack: "Error\n at anonymous (http://h:8081/b:1:1)" }],
27
- }),
28
- };
29
- }
30
- describe("selectionPoller", () => {
31
- beforeEach(() => {
32
- executeInApp.mockReset();
33
- selectionBuffer.clear();
34
- delete process.env.EXECBRO_DISABLE_SELECTION_POLL;
35
- });
36
- afterEach(() => {
37
- stopSelectionPoller("iPhone Air");
38
- });
39
- it("buffers an entry when the probe reports a change", async () => {
40
- executeInApp.mockResolvedValueOnce(probeResult()).mockResolvedValueOnce(harvestResult());
41
- const buffered = await pollOnce("iPhone Air");
42
- expect(buffered).toBe(true);
43
- expect(selectionBuffer.size).toBe(1);
44
- const entry = selectionBuffer.latest();
45
- expect(entry.element).toBe("Text");
46
- expect(entry.device).toBe("iPhone Air");
47
- expect(entry.stacks.length).toBe(1);
48
- });
49
- it("harvests at the centre of the inspected frame", async () => {
50
- executeInApp.mockResolvedValueOnce(probeResult()).mockResolvedValueOnce(harvestResult());
51
- await pollOnce("iPhone Air");
52
- // frame {left:100, top:200, width:50, height:20} -> centre (125, 210)
53
- const harvestExpr = executeInApp.mock.calls[1][0];
54
- expect(harvestExpr).toContain("125");
55
- expect(harvestExpr).toContain("210");
56
- });
57
- it("does not harvest when nothing changed", async () => {
58
- executeInApp.mockResolvedValueOnce({
59
- success: true,
60
- result: JSON.stringify({ active: true, selected: true, changed: false }),
61
- });
62
- const buffered = await pollOnce("iPhone Air");
63
- expect(buffered).toBe(false);
64
- expect(executeInApp.mock.calls.length).toBe(1);
65
- expect(selectionBuffer.size).toBe(0);
66
- });
67
- it("does not harvest when the inspector is not mounted", async () => {
68
- executeInApp.mockResolvedValueOnce({
69
- success: true,
70
- result: JSON.stringify({ active: false, selected: false, changed: false }),
71
- });
72
- expect(await pollOnce("iPhone Air")).toBe(false);
73
- expect(executeInApp.mock.calls.length).toBe(1);
74
- });
75
- it("still buffers when the harvest fails, with empty stacks", async () => {
76
- executeInApp
77
- .mockResolvedValueOnce(probeResult())
78
- .mockResolvedValueOnce({ success: false, error: "timeout" });
79
- expect(await pollOnce("iPhone Air")).toBe(true);
80
- expect(selectionBuffer.latest().stacks).toEqual([]);
81
- });
82
- it("buffers without harvesting when the frame is null", async () => {
83
- executeInApp.mockResolvedValueOnce(probeResult({ frame: null }));
84
- expect(await pollOnce("iPhone Air")).toBe(true);
85
- expect(executeInApp.mock.calls.length).toBe(1);
86
- expect(selectionBuffer.latest().stacks).toEqual([]);
87
- });
88
- it("swallows a failed probe without throwing", async () => {
89
- executeInApp.mockResolvedValueOnce({ success: false, error: "disconnected" });
90
- await expect(pollOnce("iPhone Air")).resolves.toBe(false);
91
- });
92
- it("swallows unparseable probe output", async () => {
93
- executeInApp.mockResolvedValueOnce({ success: true, result: "not json" });
94
- await expect(pollOnce("iPhone Air")).resolves.toBe(false);
95
- });
96
- it("does not start when disabled by env var", () => {
97
- process.env.EXECBRO_DISABLE_SELECTION_POLL = "1";
98
- startSelectionPoller("iPhone Air");
99
- expect(isSelectionPollerRunning("iPhone Air")).toBe(false);
100
- });
101
- it("start is idempotent and stop halts it", () => {
102
- startSelectionPoller("iPhone Air");
103
- startSelectionPoller("iPhone Air");
104
- expect(isSelectionPollerRunning("iPhone Air")).toBe(true);
105
- stopSelectionPoller("iPhone Air");
106
- expect(isSelectionPollerRunning("iPhone Air")).toBe(false);
107
- });
108
- });
109
- //# sourceMappingURL=selectionPoller.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"selectionPoller.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/selectionPoller.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=verifyFlow.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verifyFlow.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/verifyFlow.test.ts"],"names":[],"mappings":""}
@@ -1,45 +0,0 @@
1
- import { describe, expect, it } from "@jest/globals";
2
- import { verifyFlow } from "../../pro/flowpoints.js";
3
- function e(seq, step, overrides = {}) {
4
- return { seq, t: 1000 + seq * 10, name: "add-to-cart", step, run: "r1", level: "info", ...overrides };
5
- }
6
- const happy = [e(1, "start"), e(2, "cleared"), e(3, "item-added"), e(4, "done")];
7
- describe("verifyFlow", () => {
8
- it("passes when expected steps appear in order (subsequence: extras allowed)", () => {
9
- const result = verifyFlow("add-to-cart", "r1", happy, ["start", "item-added", "done"], false);
10
- expect(result.pass).toBe(true);
11
- expect(result.text).toContain('PASS — flow "add-to-cart" run r1:');
12
- expect(result.text).toContain("✓ start (+0ms)");
13
- expect(result.text).toContain("✓ done (+30ms)");
14
- });
15
- it("fails and diffs a missing step", () => {
16
- const result = verifyFlow("add-to-cart", "r1", [e(1, "start"), e(2, "cleared")], ["start", "item-added"], false);
17
- expect(result.pass).toBe(false);
18
- expect(result.text).toContain("✗ item-added — not seen");
19
- });
20
- it("fails on out-of-order steps", () => {
21
- const result = verifyFlow("add-to-cart", "r1", happy, ["done", "start"], false);
22
- expect(result.pass).toBe(false);
23
- });
24
- it("fails on an unexpected error point, with a ! line", () => {
25
- const entries = [e(1, "start"), e(2, "failed", { level: "error", meta: { reason: "timeout" } })];
26
- const result = verifyFlow("add-to-cart", "r1", entries, ["start"], false);
27
- expect(result.pass).toBe(false);
28
- expect(result.text).toContain('! failed [error] (+10ms) {"reason":"timeout"} — unexpected error point');
29
- });
30
- it("allowErrors tolerates unexpected error points", () => {
31
- const entries = [e(1, "start"), e(2, "failed", { level: "error" })];
32
- expect(verifyFlow("add-to-cart", "r1", entries, ["start"], true).pass).toBe(true);
33
- });
34
- it("an explicitly expected error step passes", () => {
35
- const entries = [e(1, "start"), e(2, "failed", { level: "error" })];
36
- const result = verifyFlow("add-to-cart", "r1", entries, ["start", { step: "failed", level: "error" }], false);
37
- expect(result.pass).toBe(true);
38
- });
39
- it("object matchers can constrain meta", () => {
40
- const entries = [e(1, "done", { meta: { count: 5 } })];
41
- expect(verifyFlow("f", "r1", entries, [{ step: "done", metaIncludes: '"count":5' }], false).pass).toBe(true);
42
- expect(verifyFlow("f", "r1", entries, [{ step: "done", metaIncludes: 'count":9' }], false).pass).toBe(false);
43
- });
44
- });
45
- //# sourceMappingURL=verifyFlow.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verifyFlow.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/verifyFlow.test.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- export declare const IDLE_INTERVAL_MS = 2000;
2
- export declare const ACTIVE_INTERVAL_MS = 500;
3
- /**
4
- * One poll cycle. The probe is cheap and runs every tick; the harvest measures
5
- * host fibers and runs only when the probe reports a change - once per tap.
6
- * Returns whether an entry was buffered.
7
- */
8
- export declare function pollOnce(device: string): Promise<boolean>;
9
- export declare function isSelectionPollerRunning(device: string): boolean;
10
- export declare function startSelectionPoller(device: string): void;
11
- export declare function stopSelectionPoller(device: string): void;
12
- export declare function stopAllSelectionPollers(): void;
13
- //# sourceMappingURL=selectionPoller.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"selectionPoller.d.ts","sourceRoot":"","sources":["../../src/core/selectionPoller.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAStC;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA2D/D;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAoBzD;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAIxD;AAED,wBAAgB,uBAAuB,IAAI,IAAI,CAI9C"}
@@ -1,102 +0,0 @@
1
- import { executeInApp } from "./jsExecute.js";
2
- import { buildSelectionProbeExpression, buildDebugStackHarvestExpression, } from "./componentSource.js";
3
- import { selectionBuffer } from "./selectionBuffer.js";
4
- export const IDLE_INTERVAL_MS = 2000;
5
- export const ACTIVE_INTERVAL_MS = 500;
6
- const timers = new Map();
7
- let entryCounter = 0;
8
- function pollingDisabled() {
9
- return process.env.EXECBRO_DISABLE_SELECTION_POLL === "1";
10
- }
11
- /**
12
- * One poll cycle. The probe is cheap and runs every tick; the harvest measures
13
- * host fibers and runs only when the probe reports a change - once per tap.
14
- * Returns whether an entry was buffered.
15
- */
16
- export async function pollOnce(device) {
17
- let probe;
18
- try {
19
- const raw = await executeInApp(buildSelectionProbeExpression(), false, {
20
- maxRetries: 0,
21
- autoReconnect: false,
22
- timeoutMs: 3000,
23
- originatingToolName: "selection_poll",
24
- }, device);
25
- if (!raw.success || !raw.result)
26
- return false;
27
- probe = JSON.parse(raw.result);
28
- }
29
- catch {
30
- return false;
31
- }
32
- if (!probe.changed || !probe.selected)
33
- return false;
34
- let stacks = [];
35
- if (probe.frame) {
36
- const centreX = probe.frame.left + probe.frame.width / 2;
37
- const centreY = probe.frame.top + probe.frame.height / 2;
38
- try {
39
- const harvest = await executeInApp(buildDebugStackHarvestExpression(centreX, centreY), true, {
40
- maxRetries: 0,
41
- autoReconnect: false,
42
- timeoutMs: 3000,
43
- originatingToolName: "selection_poll",
44
- }, device);
45
- if (harvest.success && harvest.result) {
46
- const parsed = JSON.parse(harvest.result);
47
- stacks = parsed.stacks ?? [];
48
- }
49
- }
50
- catch {
51
- stacks = [];
52
- }
53
- }
54
- entryCounter += 1;
55
- return selectionBuffer.add({
56
- id: `sel-${Date.now()}-${entryCounter}`,
57
- device,
58
- timestamp: Date.now(),
59
- element: probe.element ?? "Unknown",
60
- path: probe.path ?? "",
61
- hierarchy: probe.hierarchy ?? [],
62
- frame: probe.frame ?? null,
63
- style: probe.style ?? null,
64
- stacks,
65
- });
66
- }
67
- export function isSelectionPollerRunning(device) {
68
- return timers.has(device);
69
- }
70
- export function startSelectionPoller(device) {
71
- if (pollingDisabled() || timers.has(device))
72
- return;
73
- const schedule = (delay) => {
74
- const timer = setTimeout(async () => {
75
- let active = false;
76
- try {
77
- active = await pollOnce(device);
78
- }
79
- catch {
80
- active = false;
81
- }
82
- if (timers.has(device)) {
83
- schedule(active ? ACTIVE_INTERVAL_MS : IDLE_INTERVAL_MS);
84
- }
85
- }, delay);
86
- timer.unref?.();
87
- timers.set(device, timer);
88
- };
89
- schedule(IDLE_INTERVAL_MS);
90
- }
91
- export function stopSelectionPoller(device) {
92
- const timer = timers.get(device);
93
- if (timer)
94
- clearTimeout(timer);
95
- timers.delete(device);
96
- }
97
- export function stopAllSelectionPollers() {
98
- for (const device of [...timers.keys()]) {
99
- stopSelectionPoller(device);
100
- }
101
- }
102
- //# sourceMappingURL=selectionPoller.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"selectionPoller.js","sourceRoot":"","sources":["../../src/core/selectionPoller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EACH,6BAA6B,EAC7B,gCAAgC,GACnC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AACrC,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAEtC,MAAM,MAAM,GAAG,IAAI,GAAG,EAA0B,CAAC;AACjD,IAAI,YAAY,GAAG,CAAC,CAAC;AAErB,SAAS,eAAe;IACpB,OAAO,OAAO,CAAC,GAAG,CAAC,8BAA8B,KAAK,GAAG,CAAC;AAC9D,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAc;IACzC,IAAI,KAAkB,CAAC;IACvB,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,YAAY,CAC1B,6BAA6B,EAAE,EAC/B,KAAK,EACL;YACI,UAAU,EAAE,CAAC;YACb,aAAa,EAAE,KAAK;YACpB,SAAS,EAAE,IAAI;YACf,mBAAmB,EAAE,gBAAgB;SACxC,EACD,MAAM,CACT,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC9C,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAgB,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAEpD,IAAI,MAAM,GAAwB,EAAE,CAAC;IACrC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACzD,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,YAAY,CAC9B,gCAAgC,CAAC,OAAO,EAAE,OAAO,CAAC,EAClD,IAAI,EACJ;gBACI,UAAU,EAAE,CAAC;gBACb,aAAa,EAAE,KAAK;gBACpB,SAAS,EAAE,IAAI;gBACf,mBAAmB,EAAE,gBAAgB;aACxC,EACD,MAAM,CACT,CAAC;YACF,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAqC,CAAC;gBAC9E,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;YACjC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,MAAM,GAAG,EAAE,CAAC;QAChB,CAAC;IACL,CAAC;IAED,YAAY,IAAI,CAAC,CAAC;IAClB,OAAO,eAAe,CAAC,GAAG,CAAC;QACvB,EAAE,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,YAAY,EAAE;QACvC,MAAM;QACN,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,SAAS;QACnC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;QACtB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE;QAChC,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI;QAC1B,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI;QAC1B,MAAM;KACT,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAc;IACnD,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAc;IAC/C,IAAI,eAAe,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO;IAEpD,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAQ,EAAE;QACrC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;YAChC,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC;gBACD,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC;gBACL,MAAM,GAAG,KAAK,CAAC;YACnB,CAAC;YACD,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;YAC7D,CAAC;QACL,CAAC,EAAE,KAAK,CAAC,CAAC;QACV,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QAChB,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,KAAK;QAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,uBAAuB;IACnC,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QACtC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;AACL,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- export declare function resolveTargetDeviceName(device?: string): string;
3
- export declare function registerFlowpointTools(server: McpServer): void;
4
- //# sourceMappingURL=flowpointTools.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flowpointTools.d.ts","sourceRoot":"","sources":["../../src/pro/flowpointTools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA0BzE,wBAAgB,uBAAuB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAS/D;AAOD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkR9D"}