react-native-ai-debugger 1.1.6 → 1.4.21

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 (144) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +371 -42
  3. package/build/__tests__/helpers/tap-test-helpers.d.ts +36 -0
  4. package/build/__tests__/helpers/tap-test-helpers.d.ts.map +1 -0
  5. package/build/__tests__/helpers/tap-test-helpers.js +130 -0
  6. package/build/__tests__/helpers/tap-test-helpers.js.map +1 -0
  7. package/build/__tests__/integration/connection-health.test.js +12 -6
  8. package/build/__tests__/integration/connection-health.test.js.map +1 -1
  9. package/build/__tests__/integration/execute-in-app.test.js +2 -1
  10. package/build/__tests__/integration/execute-in-app.test.js.map +1 -1
  11. package/build/__tests__/integration/tap-strategies.test.d.ts +2 -0
  12. package/build/__tests__/integration/tap-strategies.test.d.ts.map +1 -0
  13. package/build/__tests__/integration/tap-strategies.test.js +329 -0
  14. package/build/__tests__/integration/tap-strategies.test.js.map +1 -0
  15. package/build/__tests__/integration/tools.test.js +9 -10
  16. package/build/__tests__/integration/tools.test.js.map +1 -1
  17. package/build/__tests__/unit/burst.test.d.ts +2 -0
  18. package/build/__tests__/unit/burst.test.d.ts.map +1 -0
  19. package/build/__tests__/unit/burst.test.js +50 -0
  20. package/build/__tests__/unit/burst.test.js.map +1 -0
  21. package/build/__tests__/unit/connection-health.test.js +26 -16
  22. package/build/__tests__/unit/connection-health.test.js.map +1 -1
  23. package/build/__tests__/unit/fingerprint.test.d.ts +2 -0
  24. package/build/__tests__/unit/fingerprint.test.d.ts.map +1 -0
  25. package/build/__tests__/unit/fingerprint.test.js +89 -0
  26. package/build/__tests__/unit/fingerprint.test.js.map +1 -0
  27. package/build/__tests__/unit/imageBuffer.test.d.ts +2 -0
  28. package/build/__tests__/unit/imageBuffer.test.d.ts.map +1 -0
  29. package/build/__tests__/unit/imageBuffer.test.js +128 -0
  30. package/build/__tests__/unit/imageBuffer.test.js.map +1 -0
  31. package/build/__tests__/unit/logs.test.js +9 -0
  32. package/build/__tests__/unit/logs.test.js.map +1 -1
  33. package/build/__tests__/unit/networkInterceptor.test.d.ts +2 -0
  34. package/build/__tests__/unit/networkInterceptor.test.d.ts.map +1 -0
  35. package/build/__tests__/unit/networkInterceptor.test.js +104 -0
  36. package/build/__tests__/unit/networkInterceptor.test.js.map +1 -0
  37. package/build/__tests__/unit/screenshot-diff.test.d.ts +2 -0
  38. package/build/__tests__/unit/screenshot-diff.test.d.ts.map +1 -0
  39. package/build/__tests__/unit/screenshot-diff.test.js +97 -0
  40. package/build/__tests__/unit/screenshot-diff.test.js.map +1 -0
  41. package/build/__tests__/unit/tap.test.js +430 -25
  42. package/build/__tests__/unit/tap.test.js.map +1 -1
  43. package/build/core/android.d.ts.map +1 -1
  44. package/build/core/android.js +64 -29
  45. package/build/core/android.js.map +1 -1
  46. package/build/core/appDetection.d.ts +8 -0
  47. package/build/core/appDetection.d.ts.map +1 -0
  48. package/build/core/appDetection.js +91 -0
  49. package/build/core/appDetection.js.map +1 -0
  50. package/build/core/bundle.d.ts.map +1 -1
  51. package/build/core/bundle.js +15 -23
  52. package/build/core/bundle.js.map +1 -1
  53. package/build/core/config.d.ts +8 -0
  54. package/build/core/config.d.ts.map +1 -0
  55. package/build/core/config.js +27 -0
  56. package/build/core/config.js.map +1 -0
  57. package/build/core/connection.d.ts +47 -3
  58. package/build/core/connection.d.ts.map +1 -1
  59. package/build/core/connection.js +519 -124
  60. package/build/core/connection.js.map +1 -1
  61. package/build/core/executor.d.ts +57 -14
  62. package/build/core/executor.d.ts.map +1 -1
  63. package/build/core/executor.js +936 -208
  64. package/build/core/executor.js.map +1 -1
  65. package/build/core/fingerprint.d.ts +4 -0
  66. package/build/core/fingerprint.d.ts.map +1 -0
  67. package/build/core/fingerprint.js +47 -0
  68. package/build/core/fingerprint.js.map +1 -0
  69. package/build/core/guides.d.ts.map +1 -1
  70. package/build/core/guides.js +27 -3
  71. package/build/core/guides.js.map +1 -1
  72. package/build/core/httpServer.js.map +1 -1
  73. package/build/core/imageBuffer.d.ts +37 -0
  74. package/build/core/imageBuffer.d.ts.map +1 -0
  75. package/build/core/imageBuffer.js +58 -0
  76. package/build/core/imageBuffer.js.map +1 -0
  77. package/build/core/index.d.ts +21 -17
  78. package/build/core/index.d.ts.map +1 -1
  79. package/build/core/index.js +21 -19
  80. package/build/core/index.js.map +1 -1
  81. package/build/core/ios.d.ts +36 -7
  82. package/build/core/ios.d.ts.map +1 -1
  83. package/build/core/ios.js +553 -323
  84. package/build/core/ios.js.map +1 -1
  85. package/build/core/license.d.ts +38 -0
  86. package/build/core/license.d.ts.map +1 -0
  87. package/build/core/license.js +265 -0
  88. package/build/core/license.js.map +1 -0
  89. package/build/core/logbox.d.ts +51 -0
  90. package/build/core/logbox.d.ts.map +1 -0
  91. package/build/core/logbox.js +258 -0
  92. package/build/core/logbox.js.map +1 -0
  93. package/build/core/logs.d.ts +1 -0
  94. package/build/core/logs.d.ts.map +1 -1
  95. package/build/core/logs.js +5 -0
  96. package/build/core/logs.js.map +1 -1
  97. package/build/core/metro.d.ts +8 -0
  98. package/build/core/metro.d.ts.map +1 -1
  99. package/build/core/metro.js +28 -0
  100. package/build/core/metro.js.map +1 -1
  101. package/build/core/networkInterceptor.d.ts +29 -2
  102. package/build/core/networkInterceptor.d.ts.map +1 -1
  103. package/build/core/networkInterceptor.js +195 -191
  104. package/build/core/networkInterceptor.js.map +1 -1
  105. package/build/core/ocr.d.ts +8 -3
  106. package/build/core/ocr.d.ts.map +1 -1
  107. package/build/core/ocr.js +116 -15
  108. package/build/core/ocr.js.map +1 -1
  109. package/build/core/posthog.d.ts +5 -0
  110. package/build/core/posthog.d.ts.map +1 -0
  111. package/build/core/posthog.js +46 -0
  112. package/build/core/posthog.js.map +1 -0
  113. package/build/core/sdkBridge.d.ts +67 -0
  114. package/build/core/sdkBridge.d.ts.map +1 -0
  115. package/build/core/sdkBridge.js +148 -0
  116. package/build/core/sdkBridge.js.map +1 -0
  117. package/build/core/state.d.ts +25 -5
  118. package/build/core/state.d.ts.map +1 -1
  119. package/build/core/state.js +79 -10
  120. package/build/core/state.js.map +1 -1
  121. package/build/core/telemetry.d.ts +19 -1
  122. package/build/core/telemetry.d.ts.map +1 -1
  123. package/build/core/telemetry.js +163 -8
  124. package/build/core/telemetry.js.map +1 -1
  125. package/build/core/types.d.ts +11 -0
  126. package/build/core/types.d.ts.map +1 -1
  127. package/build/index.js +1302 -302
  128. package/build/index.js.map +1 -1
  129. package/build/pro/screenshot-diff.d.ts +10 -0
  130. package/build/pro/screenshot-diff.d.ts.map +1 -0
  131. package/build/pro/screenshot-diff.js +38 -0
  132. package/build/pro/screenshot-diff.js.map +1 -0
  133. package/build/pro/tap.d.ts +71 -2
  134. package/build/pro/tap.d.ts.map +1 -1
  135. package/build/pro/tap.js +797 -124
  136. package/build/pro/tap.js.map +1 -1
  137. package/build/tools/accountTools.d.ts +44 -0
  138. package/build/tools/accountTools.d.ts.map +1 -0
  139. package/build/tools/accountTools.js +217 -0
  140. package/build/tools/accountTools.js.map +1 -0
  141. package/package.json +9 -7
  142. package/build/core/httpServer.js +0 -2459
  143. package/build/core/httpServerProcess.js +0 -153
  144. package/build/httpServerStandalone.js +0 -31
@@ -0,0 +1,5 @@
1
+ import { PostHog } from "posthog-node";
2
+ export declare function getPostHogClient(): PostHog | null;
3
+ export declare function identifyIfDevMode(distinctId: string): void;
4
+ export declare function shutdownPostHog(): Promise<void>;
5
+ //# sourceMappingURL=posthog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"posthog.d.ts","sourceRoot":"","sources":["../../src/core/posthog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAWvC,wBAAgB,gBAAgB,IAAI,OAAO,GAAG,IAAI,CAQjD;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAmB1D;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAKrD"}
@@ -0,0 +1,46 @@
1
+ import { PostHog } from "posthog-node";
2
+ import { existsSync, readFileSync } from "fs";
3
+ import { homedir } from "os";
4
+ import { join } from "path";
5
+ const apiKey = "phc_snUX9TpjAwNhosPMxAY7D89ijESyrQzucAi9qbPJptPY";
6
+ const host = "https://us.i.posthog.com";
7
+ let _client = null;
8
+ let _identified = false;
9
+ export function getPostHogClient() {
10
+ if (!_client) {
11
+ _client = new PostHog(apiKey, {
12
+ host,
13
+ enableExceptionAutocapture: true,
14
+ });
15
+ }
16
+ return _client;
17
+ }
18
+ export function identifyIfDevMode(distinctId) {
19
+ if (_identified)
20
+ return;
21
+ _identified = true;
22
+ try {
23
+ const configPath = join(homedir(), ".rn-ai-debugger", "telemetry.json");
24
+ if (existsSync(configPath)) {
25
+ const data = JSON.parse(readFileSync(configPath, "utf-8"));
26
+ if (data.internal) {
27
+ getPostHogClient()?.identify({
28
+ distinctId,
29
+ properties: {
30
+ $set: { $internal_or_test_user: true },
31
+ },
32
+ });
33
+ }
34
+ }
35
+ }
36
+ catch {
37
+ // Config unreadable — skip
38
+ }
39
+ }
40
+ export async function shutdownPostHog() {
41
+ if (_client) {
42
+ await _client.shutdown();
43
+ _client = null;
44
+ }
45
+ }
46
+ //# sourceMappingURL=posthog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"posthog.js","sourceRoot":"","sources":["../../src/core/posthog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,MAAM,GAAG,kDAAkD,CAAC;AAClE,MAAM,IAAI,GAAG,0BAA0B,CAAC;AAExC,IAAI,OAAO,GAAmB,IAAI,CAAC;AACnC,IAAI,WAAW,GAAG,KAAK,CAAC;AAExB,MAAM,UAAU,gBAAgB;IAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE;YAC1B,IAAI;YACJ,0BAA0B,EAAE,IAAI;SACnC,CAAC,CAAC;IACP,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,UAAkB;IAChD,IAAI,WAAW;QAAE,OAAO;IACxB,WAAW,GAAG,IAAI,CAAC;IACnB,IAAI,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;QACxE,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;YAC3D,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChB,gBAAgB,EAAE,EAAE,QAAQ,CAAC;oBACzB,UAAU;oBACV,UAAU,EAAE;wBACR,IAAI,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE;qBACzC;iBACJ,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,2BAA2B;IAC/B,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACjC,IAAI,OAAO,EAAE,CAAC;QACV,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;QACzB,OAAO,GAAG,IAAI,CAAC;IACnB,CAAC;AACL,CAAC"}
@@ -0,0 +1,67 @@
1
+ interface SDKNetworkEntry {
2
+ id: string;
3
+ timestamp: number;
4
+ method: string;
5
+ url: string;
6
+ status?: number;
7
+ statusText?: string;
8
+ duration?: number;
9
+ requestHeaders: Record<string, string>;
10
+ requestBody?: string;
11
+ responseHeaders: Record<string, string>;
12
+ responseBody?: string;
13
+ mimeType?: string;
14
+ error?: string;
15
+ completed: boolean;
16
+ }
17
+ interface SDKConsoleEntry {
18
+ id: string;
19
+ timestamp: number;
20
+ level: string;
21
+ message: string;
22
+ }
23
+ type SDKResult<T> = {
24
+ success: true;
25
+ data: T;
26
+ } | {
27
+ success: false;
28
+ error: string;
29
+ };
30
+ export declare function isSDKInstalled(): Promise<boolean>;
31
+ export declare function querySDKNetwork(options?: {
32
+ count?: number;
33
+ method?: string;
34
+ urlPattern?: string;
35
+ status?: number;
36
+ }): Promise<SDKResult<SDKNetworkEntry[]>>;
37
+ export declare function getSDKNetworkEntry(id: string): Promise<SDKResult<SDKNetworkEntry | null>>;
38
+ export declare function getSDKNetworkStats(): Promise<SDKResult<{
39
+ total: number;
40
+ completed: number;
41
+ errors: number;
42
+ avgDuration: number | null;
43
+ byMethod: Record<string, number>;
44
+ byStatus: Record<string, number>;
45
+ byDomain: Record<string, number>;
46
+ }>>;
47
+ export declare function querySDKConsole(options?: {
48
+ count?: number;
49
+ level?: string;
50
+ text?: string;
51
+ }): Promise<SDKResult<SDKConsoleEntry[]>>;
52
+ export declare function getSDKConsoleStats(): Promise<SDKResult<{
53
+ total: number;
54
+ byLevel: Record<string, number>;
55
+ }>>;
56
+ export declare function clearSDKNetwork(): Promise<{
57
+ success: boolean;
58
+ count?: number;
59
+ error?: string;
60
+ }>;
61
+ export declare function clearSDKConsole(): Promise<{
62
+ success: boolean;
63
+ count?: number;
64
+ error?: string;
65
+ }>;
66
+ export {};
67
+ //# sourceMappingURL=sdkBridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdkBridge.d.ts","sourceRoot":"","sources":["../../src/core/sdkBridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ import { executeInApp } from "./executor.js";
2
+ import { connectedApps } from "./state.js";
3
+ // ── Detection ──
4
+ export async function isSDKInstalled() {
5
+ if (connectedApps.size === 0)
6
+ return false;
7
+ const result = await executeInApp('typeof globalThis.__RN_AI_DEVTOOLS__?.getNetworkEntries === "function"', false, { timeoutMs: 3000 });
8
+ return result.success && result.result === "true";
9
+ }
10
+ // ── Raw readers ──
11
+ async function readRawNetwork() {
12
+ const result = await executeInApp("JSON.stringify(globalThis.__RN_AI_DEVTOOLS__.getNetworkEntries())", false, { timeoutMs: 5000 });
13
+ if (!result.success)
14
+ return { success: false, error: result.error || "executeInApp failed" };
15
+ try {
16
+ return { success: true, data: JSON.parse(result.result) };
17
+ }
18
+ catch {
19
+ return { success: false, error: "Failed to parse SDK response" };
20
+ }
21
+ }
22
+ async function readRawConsole() {
23
+ const result = await executeInApp("JSON.stringify(globalThis.__RN_AI_DEVTOOLS__.getConsoleEntries())", false, { timeoutMs: 5000 });
24
+ if (!result.success)
25
+ return { success: false, error: result.error || "executeInApp failed" };
26
+ try {
27
+ return { success: true, data: JSON.parse(result.result) };
28
+ }
29
+ catch {
30
+ return { success: false, error: "Failed to parse SDK response" };
31
+ }
32
+ }
33
+ // ── Server-side network queries ──
34
+ export async function querySDKNetwork(options = {}) {
35
+ const raw = await readRawNetwork();
36
+ if (!raw.success)
37
+ return raw;
38
+ let entries = raw.data;
39
+ if (options.method) {
40
+ const m = options.method.toUpperCase();
41
+ entries = entries.filter(e => e.method === m);
42
+ }
43
+ if (options.urlPattern) {
44
+ const p = options.urlPattern.toLowerCase();
45
+ entries = entries.filter(e => e.url.toLowerCase().includes(p));
46
+ }
47
+ if (options.status != null) {
48
+ entries = entries.filter(e => e.status === options.status);
49
+ }
50
+ // newest first
51
+ entries = entries.reverse();
52
+ if (options.count != null && options.count > 0) {
53
+ entries = entries.slice(0, options.count);
54
+ }
55
+ return { success: true, data: entries };
56
+ }
57
+ export async function getSDKNetworkEntry(id) {
58
+ const raw = await readRawNetwork();
59
+ if (!raw.success)
60
+ return raw;
61
+ const entry = raw.data.find(e => e.id === id) ?? null;
62
+ return { success: true, data: entry };
63
+ }
64
+ export async function getSDKNetworkStats() {
65
+ const raw = await readRawNetwork();
66
+ if (!raw.success)
67
+ return raw;
68
+ const all = raw.data;
69
+ const completed = all.filter(e => e.completed && !e.error);
70
+ const errors = all.filter(e => !!e.error);
71
+ const durations = completed
72
+ .map(e => e.duration)
73
+ .filter((d) => d != null);
74
+ const avgDuration = durations.length > 0
75
+ ? durations.reduce((sum, d) => sum + d, 0) / durations.length
76
+ : null;
77
+ const byMethod = {};
78
+ for (const e of all) {
79
+ byMethod[e.method] = (byMethod[e.method] || 0) + 1;
80
+ }
81
+ const byStatus = {};
82
+ for (const e of all) {
83
+ if (e.status != null) {
84
+ const group = `${Math.floor(e.status / 100)}xx`;
85
+ byStatus[group] = (byStatus[group] || 0) + 1;
86
+ }
87
+ }
88
+ const byDomain = {};
89
+ for (const e of all) {
90
+ try {
91
+ const domain = new URL(e.url).hostname;
92
+ byDomain[domain] = (byDomain[domain] || 0) + 1;
93
+ }
94
+ catch {
95
+ // skip malformed URLs
96
+ }
97
+ }
98
+ return {
99
+ success: true,
100
+ data: { total: all.length, completed: completed.length, errors: errors.length, avgDuration, byMethod, byStatus, byDomain }
101
+ };
102
+ }
103
+ // ── Server-side console queries ──
104
+ export async function querySDKConsole(options = {}) {
105
+ const raw = await readRawConsole();
106
+ if (!raw.success)
107
+ return raw;
108
+ let entries = raw.data;
109
+ if (options.level) {
110
+ entries = entries.filter(e => e.level === options.level);
111
+ }
112
+ if (options.text) {
113
+ const t = options.text.toLowerCase();
114
+ entries = entries.filter(e => e.message.toLowerCase().includes(t));
115
+ }
116
+ // newest first
117
+ entries = entries.reverse();
118
+ if (options.count != null && options.count > 0) {
119
+ entries = entries.slice(0, options.count);
120
+ }
121
+ return { success: true, data: entries };
122
+ }
123
+ export async function getSDKConsoleStats() {
124
+ const raw = await readRawConsole();
125
+ if (!raw.success)
126
+ return raw;
127
+ const byLevel = {};
128
+ for (const e of raw.data) {
129
+ byLevel[e.level] = (byLevel[e.level] || 0) + 1;
130
+ }
131
+ return { success: true, data: { total: raw.data.length, byLevel } };
132
+ }
133
+ // ── Mutations ──
134
+ export async function clearSDKNetwork() {
135
+ const result = await executeInApp("globalThis.__RN_AI_DEVTOOLS__.clearNetwork()", false, { timeoutMs: 3000 });
136
+ if (!result.success)
137
+ return { success: false, error: result.error };
138
+ const count = parseInt(result.result || "0", 10);
139
+ return { success: true, count: isNaN(count) ? 0 : count };
140
+ }
141
+ export async function clearSDKConsole() {
142
+ const result = await executeInApp("globalThis.__RN_AI_DEVTOOLS__.clearConsole()", false, { timeoutMs: 3000 });
143
+ if (!result.success)
144
+ return { success: false, error: result.error };
145
+ const count = parseInt(result.result || "0", 10);
146
+ return { success: true, count: isNaN(count) ? 0 : count };
147
+ }
148
+ //# sourceMappingURL=sdkBridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdkBridge.js","sourceRoot":"","sources":["../../src/core/sdkBridge.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,16 @@
1
- import { ConnectedApp, PendingExecution } from "./types.js";
1
+ import { ConnectedApp, PendingExecution, LogEntry } from "./types.js";
2
2
  import { LogBuffer } from "./logs.js";
3
3
  import { NetworkBuffer } from "./network.js";
4
4
  import { BundleErrorBuffer } from "./bundle.js";
5
- export declare const logBuffer: LogBuffer;
6
- export declare const networkBuffer: NetworkBuffer;
5
+ import { ImageBuffer } from "./imageBuffer.js";
6
+ export declare const logBuffers: Map<string, LogBuffer>;
7
+ export declare const networkBuffers: Map<string, NetworkBuffer>;
8
+ export declare function getLogBuffer(deviceName: string): LogBuffer;
9
+ export declare function getNetworkBuffer(deviceName: string): NetworkBuffer;
10
+ export declare function getAllLogs(count?: number, level?: string): LogEntry[];
11
+ export declare function getTotalLogCount(): number;
7
12
  export declare const bundleErrorBuffer: BundleErrorBuffer;
13
+ export declare const imageBuffer: ImageBuffer;
8
14
  export declare const connectedApps: Map<string, ConnectedApp>;
9
15
  export declare function getTargetPlatform(): string | undefined;
10
16
  export declare const pendingExecutions: Map<number, PendingExecution>;
@@ -12,6 +18,20 @@ export declare function getNextMessageId(): number;
12
18
  export declare function getActiveSimulatorUdid(): string | null;
13
19
  export declare function setActiveSimulatorUdid(udid: string | null, sourceAppKey?: string): void;
14
20
  export declare function clearActiveSimulatorIfSource(appKey: string): void;
15
- export declare function getLastCDPMessageTime(): Date | null;
16
- export declare function updateLastCDPMessageTime(time: Date | null): void;
21
+ /**
22
+ * Get last CDP message time for a specific device, or the most recent across all devices.
23
+ */
24
+ export declare function getLastCDPMessageTime(appKey?: string): Date | null;
25
+ /**
26
+ * Update last CDP message time for a specific device.
27
+ */
28
+ export declare function updateLastCDPMessageTime(appKey: string, time: Date): void;
29
+ /**
30
+ * Clear last CDP message time for a specific device.
31
+ */
32
+ export declare function clearLastCDPMessageTime(appKey: string): void;
33
+ /**
34
+ * Clear all CDP message times (for cleanup/testing).
35
+ */
36
+ export declare function clearAllCDPMessageTimes(): void;
17
37
  //# sourceMappingURL=state.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAyB,MAAM,aAAa,CAAC;AAGvE,eAAO,MAAM,SAAS,WAAqB,CAAC;AAG5C,eAAO,MAAM,aAAa,eAAyB,CAAC;AAGpD,eAAO,MAAM,iBAAiB,mBAA6B,CAAC;AAM5D,eAAO,MAAM,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAa,CAAC;AAElE,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAGtD;AAGD,eAAO,MAAM,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAa,CAAC;AAK1E,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAOD,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAEtD;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAGvF;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAKjE;AAKD,wBAAgB,qBAAqB,IAAI,IAAI,GAAG,IAAI,CAEnD;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAEhE"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAyB,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,eAAO,MAAM,UAAU,wBAA+B,CAAC;AACvD,eAAO,MAAM,cAAc,4BAAmC,CAAC;AAG/D,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAO1D;AAGD,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,CAOlE;AAGD,wBAAgB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE,CAWrE;AAGD,wBAAgB,gBAAgB,IAAI,MAAM,CAMzC;AAGD,eAAO,MAAM,iBAAiB,mBAA6B,CAAC;AAG5D,eAAO,MAAM,WAAW,aAAsB,CAAC;AAM/C,eAAO,MAAM,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAa,CAAC;AAElE,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAGtD;AAGD,eAAO,MAAM,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAa,CAAC;AAK1E,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAOD,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAEtD;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAGvF;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAKjE;AAKD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAYlE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAEzE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE5D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C"}
@@ -1,12 +1,53 @@
1
1
  import { LogBuffer } from "./logs.js";
2
2
  import { NetworkBuffer } from "./network.js";
3
3
  import { BundleErrorBuffer, initBundleErrorBuffer } from "./bundle.js";
4
- // Global log buffer
5
- export const logBuffer = new LogBuffer(500);
6
- // Global network buffer
7
- export const networkBuffer = new NetworkBuffer(200);
4
+ import { ImageBuffer } from "./imageBuffer.js";
5
+ // Per-device log buffers (keyed by deviceName)
6
+ export const logBuffers = new Map();
7
+ export const networkBuffers = new Map();
8
+ // Helper: get or create a log buffer for a device
9
+ export function getLogBuffer(deviceName) {
10
+ let buffer = logBuffers.get(deviceName);
11
+ if (!buffer) {
12
+ buffer = new LogBuffer(500);
13
+ logBuffers.set(deviceName, buffer);
14
+ }
15
+ return buffer;
16
+ }
17
+ // Helper: get or create a network buffer for a device
18
+ export function getNetworkBuffer(deviceName) {
19
+ let buffer = networkBuffers.get(deviceName);
20
+ if (!buffer) {
21
+ buffer = new NetworkBuffer(200);
22
+ networkBuffers.set(deviceName, buffer);
23
+ }
24
+ return buffer;
25
+ }
26
+ // Helper: get merged logs from all devices
27
+ export function getAllLogs(count, level) {
28
+ const allEntries = [];
29
+ for (const buffer of logBuffers.values()) {
30
+ allEntries.push(...buffer.getAll());
31
+ }
32
+ allEntries.sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
33
+ if (level) {
34
+ const filtered = allEntries.filter(e => e.level === level);
35
+ return count ? filtered.slice(-count) : filtered;
36
+ }
37
+ return count ? allEntries.slice(-count) : allEntries;
38
+ }
39
+ // Helper: total log count across all devices
40
+ export function getTotalLogCount() {
41
+ let total = 0;
42
+ for (const buffer of logBuffers.values()) {
43
+ total += buffer.size;
44
+ }
45
+ return total;
46
+ }
8
47
  // Global bundle error buffer
9
48
  export const bundleErrorBuffer = new BundleErrorBuffer(100);
49
+ // Global image buffer (shared across all screenshot-producing tools)
50
+ export const imageBuffer = new ImageBuffer(50);
10
51
  // Initialize bundle error buffer reference in bundle.ts
11
52
  initBundleErrorBuffer(bundleErrorBuffer);
12
53
  // Connected apps
@@ -39,12 +80,40 @@ export function clearActiveSimulatorIfSource(appKey) {
39
80
  _activeSimulatorSourceAppKey = null;
40
81
  }
41
82
  }
42
- // Last CDP message received timestamp (for connection liveness detection)
43
- let _lastCDPMessageAt = null;
44
- export function getLastCDPMessageTime() {
45
- return _lastCDPMessageAt;
83
+ // Per-device last CDP message timestamps (for connection liveness detection)
84
+ const _lastCDPMessageTimes = new Map();
85
+ /**
86
+ * Get last CDP message time for a specific device, or the most recent across all devices.
87
+ */
88
+ export function getLastCDPMessageTime(appKey) {
89
+ if (appKey) {
90
+ return _lastCDPMessageTimes.get(appKey) ?? null;
91
+ }
92
+ // Global fallback: return the most recent time across all devices
93
+ let latest = null;
94
+ for (const time of _lastCDPMessageTimes.values()) {
95
+ if (!latest || time.getTime() > latest.getTime()) {
96
+ latest = time;
97
+ }
98
+ }
99
+ return latest;
100
+ }
101
+ /**
102
+ * Update last CDP message time for a specific device.
103
+ */
104
+ export function updateLastCDPMessageTime(appKey, time) {
105
+ _lastCDPMessageTimes.set(appKey, time);
106
+ }
107
+ /**
108
+ * Clear last CDP message time for a specific device.
109
+ */
110
+ export function clearLastCDPMessageTime(appKey) {
111
+ _lastCDPMessageTimes.delete(appKey);
46
112
  }
47
- export function updateLastCDPMessageTime(time) {
48
- _lastCDPMessageAt = time;
113
+ /**
114
+ * Clear all CDP message times (for cleanup/testing).
115
+ */
116
+ export function clearAllCDPMessageTimes() {
117
+ _lastCDPMessageTimes.clear();
49
118
  }
50
119
  //# sourceMappingURL=state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEvE,oBAAoB;AACpB,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;AAE5C,wBAAwB;AACxB,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;AAEpD,6BAA6B;AAC7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAE5D,wDAAwD;AACxD,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;AAEzC,iBAAiB;AACjB,MAAM,CAAC,MAAM,aAAa,GAA8B,IAAI,GAAG,EAAE,CAAC;AAElE,MAAM,UAAU,iBAAiB;IAC7B,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;IACrD,OAAO,QAAQ,EAAE,QAAQ,CAAC;AAC9B,CAAC;AAED,6CAA6C;AAC7C,MAAM,CAAC,MAAM,iBAAiB,GAAkC,IAAI,GAAG,EAAE,CAAC;AAE1E,yBAAyB;AACzB,IAAI,UAAU,GAAG,CAAC,CAAC;AAEnB,MAAM,UAAU,gBAAgB;IAC5B,OAAO,UAAU,EAAE,CAAC;AACxB,CAAC;AAED,6DAA6D;AAC7D,6DAA6D;AAC7D,IAAI,oBAAoB,GAAkB,IAAI,CAAC;AAC/C,IAAI,4BAA4B,GAAkB,IAAI,CAAC;AAEvD,MAAM,UAAU,sBAAsB;IAClC,OAAO,oBAAoB,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAmB,EAAE,YAAqB;IAC7E,oBAAoB,GAAG,IAAI,CAAC;IAC5B,4BAA4B,GAAG,YAAY,IAAI,IAAI,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,MAAc;IACvD,IAAI,4BAA4B,KAAK,MAAM,EAAE,CAAC;QAC1C,oBAAoB,GAAG,IAAI,CAAC;QAC5B,4BAA4B,GAAG,IAAI,CAAC;IACxC,CAAC;AACL,CAAC;AAED,0EAA0E;AAC1E,IAAI,iBAAiB,GAAgB,IAAI,CAAC;AAE1C,MAAM,UAAU,qBAAqB;IACjC,OAAO,iBAAiB,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAAiB;IACtD,iBAAiB,GAAG,IAAI,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,+CAA+C;AAC/C,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAqB,CAAC;AACvD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAyB,CAAC;AAE/D,kDAAkD;AAClD,MAAM,UAAU,YAAY,CAAC,UAAkB;IAC3C,IAAI,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,MAAM,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;QAC5B,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IAC/C,IAAI,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,MAAM,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;QAChC,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,UAAU,CAAC,KAAc,EAAE,KAAc;IACrD,MAAM,UAAU,GAAe,EAAE,CAAC;IAClC,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QACvC,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IACzE,IAAI,KAAK,EAAE,CAAC;QACR,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;QAC3D,OAAO,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACrD,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AACzD,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,gBAAgB;IAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QACvC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC;IACzB,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,6BAA6B;AAC7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAE5D,qEAAqE;AACrE,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;AAE/C,wDAAwD;AACxD,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;AAEzC,iBAAiB;AACjB,MAAM,CAAC,MAAM,aAAa,GAA8B,IAAI,GAAG,EAAE,CAAC;AAElE,MAAM,UAAU,iBAAiB;IAC7B,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;IACrD,OAAO,QAAQ,EAAE,QAAQ,CAAC;AAC9B,CAAC;AAED,6CAA6C;AAC7C,MAAM,CAAC,MAAM,iBAAiB,GAAkC,IAAI,GAAG,EAAE,CAAC;AAE1E,yBAAyB;AACzB,IAAI,UAAU,GAAG,CAAC,CAAC;AAEnB,MAAM,UAAU,gBAAgB;IAC5B,OAAO,UAAU,EAAE,CAAC;AACxB,CAAC;AAED,6DAA6D;AAC7D,6DAA6D;AAC7D,IAAI,oBAAoB,GAAkB,IAAI,CAAC;AAC/C,IAAI,4BAA4B,GAAkB,IAAI,CAAC;AAEvD,MAAM,UAAU,sBAAsB;IAClC,OAAO,oBAAoB,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAmB,EAAE,YAAqB;IAC7E,oBAAoB,GAAG,IAAI,CAAC;IAC5B,4BAA4B,GAAG,YAAY,IAAI,IAAI,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,MAAc;IACvD,IAAI,4BAA4B,KAAK,MAAM,EAAE,CAAC;QAC1C,oBAAoB,GAAG,IAAI,CAAC;QAC5B,4BAA4B,GAAG,IAAI,CAAC;IACxC,CAAC;AACL,CAAC;AAED,6EAA6E;AAC7E,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAgB,CAAC;AAErD;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAe;IACjD,IAAI,MAAM,EAAE,CAAC;QACT,OAAO,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IACpD,CAAC;IACD,kEAAkE;IAClE,IAAI,MAAM,GAAgB,IAAI,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC;QAC/C,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YAC/C,MAAM,GAAG,IAAI,CAAC;QAClB,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAc,EAAE,IAAU;IAC/D,oBAAoB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAc;IAClD,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACnC,oBAAoB,CAAC,KAAK,EAAE,CAAC;AACjC,CAAC"}
@@ -1,4 +1,22 @@
1
+ export declare const TELEMETRY_JSONL_PATH = "/tmp/rn-devtools-telemetry.jsonl";
2
+ export declare function getServerVersion(): string;
3
+ export declare function getPackageName(): string;
4
+ export declare function getInstallationId(): string;
1
5
  export declare function initTelemetry(): void;
2
6
  export declare function isTelemetryEnabled(): boolean;
3
- export declare function trackToolInvocation(toolName: string, success: boolean, durationMs: number, errorMessage?: string, errorContext?: string, inputTokens?: number, outputTokens?: number, targetPlatform?: string): void;
7
+ /** Check if the MCP server is running in dev mode (config-based). */
8
+ export declare function isDevMode(): boolean;
9
+ export declare function trackToolInvocation(toolName: string, success: boolean, durationMs: number, errorMessage?: string, errorContext?: string, inputTokens?: number, outputTokens?: number, targetPlatform?: string, emptyResult?: boolean, meaningful?: boolean, changeRate?: number, tapStrategy?: string, iosDriver?: string, responsePreview?: string, emptyReason?: string): void;
10
+ /**
11
+ * Records app detection result as an app_detected event.
12
+ * Called from appDetection.ts after successful detection.
13
+ */
14
+ export declare function trackAppDetection(detection: {
15
+ reactNativeVersion: string;
16
+ architecture: string;
17
+ jsEngine: string;
18
+ appPlatform: string;
19
+ osVersion: string;
20
+ expoSdkVersion?: string;
21
+ }): void;
4
22
  //# sourceMappingURL=telemetry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/core/telemetry.ts"],"names":[],"mappings":"AA2LA,wBAAgB,aAAa,IAAI,IAAI,CA+CpC;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAwBD,wBAAgB,mBAAmB,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,EACrB,cAAc,CAAC,EAAE,MAAM,GACxB,IAAI,CA8BN"}
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/core/telemetry.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,oBAAoB,qCAAqC,CAAC;AAGvE,wBAAgB,gBAAgB,IAAI,MAAM,CASzC;AAGD,wBAAgB,cAAc,IAAI,MAAM,CASvC;AA4JD,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAWD,wBAAgB,aAAa,IAAI,IAAI,CAqDpC;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED,qEAAqE;AACrE,wBAAgB,SAAS,IAAI,OAAO,CAOnC;AAwBD,wBAAgB,mBAAmB,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,EACrB,cAAc,CAAC,EAAE,MAAM,EACvB,WAAW,CAAC,EAAE,OAAO,EACrB,UAAU,CAAC,EAAE,OAAO,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,EAClB,eAAe,CAAC,EAAE,MAAM,EACxB,WAAW,CAAC,EAAE,MAAM,GACrB,IAAI,CA8FN;AA0BD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE;IACzC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B,GAAG,IAAI,CAuBP"}