@terreno/mcp 58.0.1 → 58.0.3

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 (68) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +6 -4
  3. package/dist/docs/templates/bootstrap/frontend/app/_layout.template.tsx +2 -0
  4. package/dist/docs/upgrades/58.0.3.md +28 -0
  5. package/dist/docs/versioned/next/explanation/ai-development-loop.md +10 -7
  6. package/dist/docs/versioned/next/explanation/dependency-management.md +2 -9
  7. package/dist/docs/versioned/next/explanation/roadmap-seed-issues.md +13 -0
  8. package/dist/docs/versioned/next/explanation/test-isolation.md +2 -1
  9. package/dist/docs/versioned/next/explanation/test-sharding.md +111 -0
  10. package/dist/docs/versioned/next/how-to/README.md +1 -0
  11. package/dist/docs/versioned/next/how-to/circleci.md +12 -4
  12. package/dist/docs/versioned/next/how-to/debug-with-mcp.md +10 -1
  13. package/dist/docs/versioned/next/how-to/fix-code-scanning-alerts.md +43 -0
  14. package/dist/docs/versioned/next/how-to/run-tests-locally.md +5 -0
  15. package/dist/docs/versioned/next/how-to/set-up-terreno-mcp.md +3 -1
  16. package/dist/docs/versioned/next/how-to/update-dependencies.md +1 -1
  17. package/dist/docs/versioned/next/implementationPlans/mcp-agent-debugger-gaps.md +257 -0
  18. package/dist/docs/versioned/next/implementationPlans/syncdb-high-churn-fields.md +266 -0
  19. package/dist/docs/versioned/next/reference/environment-variables.md +2 -0
  20. package/dist/docs/versioned/next/reference/mcp-server.md +12 -0
  21. package/dist/docs/versioned/next/reference/test.md +4 -1
  22. package/dist/docs/versioned/next/tasks/mcp-agent-debugger-gaps.md +151 -0
  23. package/dist/local/localTools.d.ts.map +1 -1
  24. package/dist/local/localTools.js +94 -1
  25. package/dist/local/localTools.js.map +1 -1
  26. package/dist/local/metro/metroDevSession.d.ts +1 -0
  27. package/dist/local/metro/metroDevSession.d.ts.map +1 -1
  28. package/dist/local/metro/metroDevSession.js +104 -1
  29. package/dist/local/metro/metroDevSession.js.map +1 -1
  30. package/dist/local/native/nativeLogs.d.ts +12 -0
  31. package/dist/local/native/nativeLogs.d.ts.map +1 -0
  32. package/dist/local/native/nativeLogs.js +103 -0
  33. package/dist/local/native/nativeLogs.js.map +1 -0
  34. package/dist/local/tools/clientDev.d.ts +22 -0
  35. package/dist/local/tools/clientDev.d.ts.map +1 -0
  36. package/dist/local/tools/clientDev.isolated.d.ts +2 -0
  37. package/dist/local/tools/clientDev.isolated.d.ts.map +1 -0
  38. package/dist/local/tools/clientDev.isolated.js +55 -0
  39. package/dist/local/tools/clientDev.isolated.js.map +1 -0
  40. package/dist/local/tools/clientDev.js +224 -0
  41. package/dist/local/tools/clientDev.js.map +1 -0
  42. package/dist/local/tools/readLogs.d.ts.map +1 -1
  43. package/dist/local/tools/readLogs.js +22 -3
  44. package/dist/local/tools/readLogs.js.map +1 -1
  45. package/dist/tools.d.ts.map +1 -1
  46. package/dist/tools.js +3 -1
  47. package/dist/tools.js.map +1 -1
  48. package/package.json +7 -7
  49. package/src/docs/templates/bootstrap/frontend/app/_layout.template.tsx +2 -0
  50. package/src/docs/upgrades/58.0.3.md +28 -0
  51. package/src/docs/versioned/next/explanation/ai-development-loop.md +10 -7
  52. package/src/docs/versioned/next/explanation/dependency-management.md +2 -9
  53. package/src/docs/versioned/next/explanation/roadmap-seed-issues.md +13 -0
  54. package/src/docs/versioned/next/explanation/test-isolation.md +2 -1
  55. package/src/docs/versioned/next/explanation/test-sharding.md +111 -0
  56. package/src/docs/versioned/next/how-to/README.md +1 -0
  57. package/src/docs/versioned/next/how-to/circleci.md +12 -4
  58. package/src/docs/versioned/next/how-to/debug-with-mcp.md +10 -1
  59. package/src/docs/versioned/next/how-to/fix-code-scanning-alerts.md +43 -0
  60. package/src/docs/versioned/next/how-to/run-tests-locally.md +5 -0
  61. package/src/docs/versioned/next/how-to/set-up-terreno-mcp.md +3 -1
  62. package/src/docs/versioned/next/how-to/update-dependencies.md +1 -1
  63. package/src/docs/versioned/next/implementationPlans/mcp-agent-debugger-gaps.md +257 -0
  64. package/src/docs/versioned/next/implementationPlans/syncdb-high-churn-fields.md +266 -0
  65. package/src/docs/versioned/next/reference/environment-variables.md +2 -0
  66. package/src/docs/versioned/next/reference/mcp-server.md +12 -0
  67. package/src/docs/versioned/next/reference/test.md +4 -1
  68. package/src/docs/versioned/next/tasks/mcp-agent-debugger-gaps.md +151 -0
@@ -0,0 +1,103 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { DateTime } from "luxon";
3
+ const isNativeLogsDisabled = () => {
4
+ const flag = process.env.TERRENO_NATIVE_LOGS?.trim().toLowerCase();
5
+ return flag === "0" || flag === "false" || flag === "no";
6
+ };
7
+ const inferLevel = (line) => {
8
+ const logcatTag = /\s([VDIWEF])\s+\S+:/.exec(line);
9
+ if (logcatTag?.[1] === "E" || logcatTag?.[1] === "F") {
10
+ return "error";
11
+ }
12
+ if (logcatTag?.[1] === "W") {
13
+ return "warn";
14
+ }
15
+ const lower = line.toLowerCase();
16
+ if (lower.includes(" error ") || lower.includes("fatal")) {
17
+ return "error";
18
+ }
19
+ if (lower.includes(" warn ")) {
20
+ return "warn";
21
+ }
22
+ return "info";
23
+ };
24
+ const linesToEntries = (lines, source) => {
25
+ const now = DateTime.utc().toISO();
26
+ return lines.map((line) => ({
27
+ level: inferLevel(line),
28
+ raw: JSON.stringify({ level: inferLevel(line), message: line, source, timestamp: now }),
29
+ source,
30
+ timestamp: now,
31
+ }));
32
+ };
33
+ const readAndroidLogcat = (maxLines) => {
34
+ const serial = process.env.TERRENO_ADB_SERIAL?.trim();
35
+ const args = ["logcat", "-d", "-t", String(maxLines)];
36
+ if (serial) {
37
+ args.unshift("-s", serial);
38
+ }
39
+ const result = spawnSync("adb", args, { encoding: "utf-8", timeout: 5000 });
40
+ if (result.error) {
41
+ return { entries: [], status: `native android: adb failed (${result.error.message})` };
42
+ }
43
+ if (result.status !== 0) {
44
+ return {
45
+ entries: [],
46
+ status: `native android: adb exit ${result.status} (${(result.stderr ?? "").slice(0, 200)})`,
47
+ };
48
+ }
49
+ const lines = (result.stdout ?? "")
50
+ .split("\n")
51
+ .map((l) => l.trim())
52
+ .filter(Boolean)
53
+ .slice(-maxLines);
54
+ return {
55
+ entries: linesToEntries(lines, "native"),
56
+ status: `native android: ${lines.length} lines`,
57
+ };
58
+ };
59
+ const readIosSimulatorLogs = (maxLines) => {
60
+ const result = spawnSync("xcrun", ["simctl", "spawn", "booted", "log", "stream", "--style", "compact", "--timeout", "1"], { encoding: "utf-8", timeout: 3000 });
61
+ if (result.error) {
62
+ return { entries: [], status: `native ios: simctl failed (${result.error.message})` };
63
+ }
64
+ const lines = (result.stdout ?? "")
65
+ .split("\n")
66
+ .map((l) => l.trim())
67
+ .filter(Boolean)
68
+ .slice(-maxLines);
69
+ if (lines.length === 0) {
70
+ const detail = (result.stderr ?? "").trim().slice(0, 200);
71
+ if (result.status !== 0) {
72
+ return {
73
+ entries: [],
74
+ status: `native ios: log stream failed (exit ${result.status}${detail ? `: ${detail}` : ""})`,
75
+ };
76
+ }
77
+ return {
78
+ entries: [],
79
+ status: "native ios: no log lines in stream window",
80
+ };
81
+ }
82
+ return {
83
+ entries: linesToEntries(lines, "native"),
84
+ status: `native ios: ${lines.length} lines`,
85
+ };
86
+ };
87
+ export const snapshotNativeLogs = async (maxLines) => {
88
+ if (isNativeLogsDisabled()) {
89
+ return { entries: [], status: "native: disabled (TERRENO_NATIVE_LOGS=0)" };
90
+ }
91
+ const cap = Math.min(Math.max(maxLines, 1), 500);
92
+ const android = readAndroidLogcat(cap);
93
+ if (android.entries.length > 0) {
94
+ return android;
95
+ }
96
+ const ios = readIosSimulatorLogs(cap);
97
+ if (ios.entries.length > 0) {
98
+ return ios;
99
+ }
100
+ const notes = [android.status, ios.status].filter(Boolean).join("; ");
101
+ return { entries: [], status: notes || "native: no platform logs captured" };
102
+ };
103
+ //# sourceMappingURL=nativeLogs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeLogs.js","sourceRoot":"","sources":["../../../src/local/native/nativeLogs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export interface DispatchClientActionArgs {
2
+ payload?: unknown;
3
+ type: string;
4
+ }
5
+ export declare const dispatchClientAction: (args: DispatchClientActionArgs) => Promise<string>;
6
+ export interface ReadLocalStorageArgs {
7
+ keys?: string[];
8
+ prefix?: string;
9
+ }
10
+ export declare const readLocalStorage: (args: ReadLocalStorageArgs) => Promise<string>;
11
+ export interface WriteLocalStorageArgs {
12
+ key: string;
13
+ value: string;
14
+ }
15
+ export declare const writeLocalStorage: (args: WriteLocalStorageArgs) => Promise<string>;
16
+ export declare const listDevCommands: () => Promise<string>;
17
+ export interface InvokeDevCommandArgs {
18
+ arguments?: Record<string, unknown>;
19
+ name: string;
20
+ }
21
+ export declare const invokeDevCommand: (args: InvokeDevCommandArgs) => Promise<string>;
22
+ //# sourceMappingURL=clientDev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientDev.d.ts","sourceRoot":"","sources":["../../../src/local/tools/clientDev.ts"],"names":[],"mappings":"AA4FA,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,oBAAoB,GAAU,MAAM,wBAAwB,KAAG,OAAO,CAAC,MAAM,CAiCzF,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAuBD,eAAO,MAAM,gBAAgB,GAAU,MAAM,oBAAoB,KAAG,OAAO,CAAC,MAAM,CAqCjF,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,iBAAiB,GAAU,MAAM,qBAAqB,KAAG,OAAO,CAAC,MAAM,CAmCnF,CAAC;AAEF,eAAO,MAAM,eAAe,QAAa,OAAO,CAAC,MAAM,CAqBtD,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,gBAAgB,GAAU,MAAM,oBAAoB,KAAG,OAAO,CAAC,MAAM,CA+BjF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=clientDev.isolated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientDev.isolated.d.ts","sourceRoot":"","sources":["../../../src/local/tools/clientDev.isolated.ts"],"names":[],"mappings":""}
@@ -0,0 +1,55 @@
1
+ import { afterEach, describe, expect, it, mock } from "bun:test";
2
+ describe("clientDev CDP fallbacks", () => {
3
+ afterEach(() => {
4
+ Reflect.deleteProperty(process.env, "TERRENO_MCP_EVAL");
5
+ });
6
+ it("readLocalStorage uses Runtime.evaluate when storage is only on device", async () => {
7
+ mock.module("../metro/metroDevSession.js", () => ({
8
+ cdpRuntimeEvaluate: mock(async () => ({
9
+ value: { count: 1, entries: { k: "from-device" } },
10
+ })),
11
+ ensureCdpConnected: mock(async () => ({ detail: "cdp ok", ok: true })),
12
+ getCdpConnectionStatus: () => "CDP: ok",
13
+ }));
14
+ const { readLocalStorage } = await import(`./clientDev.js?t=cdpread-${Date.now()}`);
15
+ const text = await readLocalStorage({ keys: ["k"] });
16
+ expect(text).toContain("from-device");
17
+ });
18
+ it("readLocalStorage CDP path returns error when evaluate fails", async () => {
19
+ mock.module("../metro/metroDevSession.js", () => ({
20
+ cdpRuntimeEvaluate: mock(async () => ({ error: "read err" })),
21
+ ensureCdpConnected: mock(async () => ({ detail: "cdp ok", ok: true })),
22
+ getCdpConnectionStatus: () => "CDP: read-down",
23
+ }));
24
+ const { readLocalStorage } = await import(`./clientDev.js?t=cdpreaderr-${Date.now()}`);
25
+ const text = await readLocalStorage({ keys: ["a"] });
26
+ expect(text).toContain("read err");
27
+ expect(text).toContain("CDP: read-down");
28
+ });
29
+ it("writeLocalStorage uses Runtime.evaluate when storage is only on device", async () => {
30
+ process.env.TERRENO_MCP_EVAL = "1";
31
+ mock.module("../metro/metroDevSession.js", () => ({
32
+ cdpRuntimeEvaluate: mock(async () => ({
33
+ value: { key: "x", ok: true },
34
+ })),
35
+ ensureCdpConnected: mock(async () => ({ detail: "cdp ok", ok: true })),
36
+ getCdpConnectionStatus: () => "CDP: ok",
37
+ }));
38
+ const { writeLocalStorage } = await import(`./clientDev.js?t=cdpwrite-${Date.now()}`);
39
+ const text = await writeLocalStorage({ key: "x", value: "y" });
40
+ expect(text).toContain("x");
41
+ });
42
+ it("writeLocalStorage CDP path returns error when evaluate fails", async () => {
43
+ process.env.TERRENO_MCP_EVAL = "1";
44
+ mock.module("../metro/metroDevSession.js", () => ({
45
+ cdpRuntimeEvaluate: mock(async () => ({ error: "write err" })),
46
+ ensureCdpConnected: mock(async () => ({ detail: "cdp ok", ok: true })),
47
+ getCdpConnectionStatus: () => "CDP: write-down",
48
+ }));
49
+ const { writeLocalStorage } = await import(`./clientDev.js?t=cdpwriteerr-${Date.now()}`);
50
+ const text = await writeLocalStorage({ key: "k", value: "v" });
51
+ expect(text).toContain("write err");
52
+ expect(text).toContain("CDP: write-down");
53
+ });
54
+ });
55
+ //# sourceMappingURL=clientDev.isolated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientDev.isolated.js","sourceRoot":"","sources":["../../../src/local/tools/clientDev.isolated.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,224 @@
1
+ import { cdpRuntimeEvaluate, ensureCdpConnected, getCdpConnectionStatus, } from "../metro/metroDevSession.js";
2
+ const MAX_STORAGE_KEYS = 200;
3
+ const MAX_STORAGE_VALUE_CHARS = 8192;
4
+ const SENSITIVE_STORAGE_KEY = /(?:^|\/)(?:auth|token|session|password|credential|cookie|secret)/i;
5
+ const formatStorageValue = (key, value) => {
6
+ if (value === null) {
7
+ return null;
8
+ }
9
+ if (SENSITIVE_STORAGE_KEY.test(key)) {
10
+ return `[REDACTED len=${value.length}]`;
11
+ }
12
+ if (value.length > MAX_STORAGE_VALUE_CHARS) {
13
+ return `${value.slice(0, MAX_STORAGE_VALUE_CHARS)}…`;
14
+ }
15
+ return value;
16
+ };
17
+ const isTerrenoMcpEvalEnabled = () => {
18
+ return process.env.TERRENO_MCP_EVAL === "1" || process.env.TERRENO_MCP_EVAL === "true";
19
+ };
20
+ const refuseEval = (tool) => {
21
+ return `Refused: set \`TERRENO_MCP_EVAL=1\` to opt in to \`${tool}\`.`;
22
+ };
23
+ const getDevClientDispatch = () => {
24
+ return globalThis.__TERRENO_DEV_CLIENT_DISPATCH__;
25
+ };
26
+ const getDevStorage = () => {
27
+ return globalThis.__TERRENO_DEV_STORAGE__;
28
+ };
29
+ const listDevCommandsInProcess = () => {
30
+ const map = globalThis.__TERRENO_DEV_COMMANDS__ ?? {};
31
+ return Object.entries(map)
32
+ .map(([name, cmd]) => ({
33
+ description: cmd.description,
34
+ inputSchema: cmd.inputSchema,
35
+ name,
36
+ }))
37
+ .sort((a, b) => a.name.localeCompare(b.name));
38
+ };
39
+ const runDevCommandInProcess = async (name, args) => {
40
+ const cmd = globalThis.__TERRENO_DEV_COMMANDS__?.[name];
41
+ if (!cmd) {
42
+ throw new Error(`Unknown dev command: ${name}`);
43
+ }
44
+ return cmd.handler(args);
45
+ };
46
+ export const dispatchClientAction = async (args) => {
47
+ if (!isTerrenoMcpEvalEnabled()) {
48
+ return refuseEval("dispatch_client_action");
49
+ }
50
+ const type = args.type.trim();
51
+ if (!type) {
52
+ return "No action type provided.";
53
+ }
54
+ const bus = getDevClientDispatch();
55
+ if (bus) {
56
+ try {
57
+ const result = bus.dispatch({ payload: args.payload, type });
58
+ return JSON.stringify({ ok: true, result, status: "in-process dispatch" }, null, 2);
59
+ }
60
+ catch (e) {
61
+ return JSON.stringify({ error: String(e), ok: false }, null, 2);
62
+ }
63
+ }
64
+ const typeJson = JSON.stringify(type);
65
+ const payloadJson = JSON.stringify(args.payload ?? null);
66
+ const expression = `(() => {
67
+ const bus = globalThis.__TERRENO_DEV_CLIENT_DISPATCH__;
68
+ if (!bus || typeof bus.dispatch !== "function") {
69
+ return { ok: false, error: "no __TERRENO_DEV_CLIENT_DISPATCH__ (call registerTerrenoDevClientDispatch from @terreno/syncdb)" };
70
+ }
71
+ bus.dispatch({ type: ${typeJson}, payload: ${payloadJson} });
72
+ return { ok: true };
73
+ })()`;
74
+ await ensureCdpConnected();
75
+ const ev = await cdpRuntimeEvaluate(expression, false);
76
+ if (ev.error) {
77
+ return JSON.stringify({ error: ev.error, status: getCdpConnectionStatus() }, null, 2);
78
+ }
79
+ return JSON.stringify({ result: ev.value, status: getCdpConnectionStatus() }, null, 2);
80
+ };
81
+ const readStorageInProcess = async (adapter, args) => {
82
+ let keys = args.keys ?? [];
83
+ if (keys.length === 0) {
84
+ keys = await adapter.listKeys();
85
+ const prefix = args.prefix?.trim();
86
+ if (prefix) {
87
+ keys = keys.filter((k) => k.startsWith(prefix));
88
+ }
89
+ }
90
+ keys = keys.slice(0, MAX_STORAGE_KEYS);
91
+ const entries = {};
92
+ for (const key of keys) {
93
+ const value = await adapter.get(key);
94
+ entries[key] = formatStorageValue(key, value);
95
+ }
96
+ return JSON.stringify({ count: keys.length, entries, status: "in-process adapter" }, null, 2);
97
+ };
98
+ export const readLocalStorage = async (args) => {
99
+ const adapter = getDevStorage();
100
+ if (adapter) {
101
+ return readStorageInProcess(adapter, args);
102
+ }
103
+ const keysJson = JSON.stringify(args.keys ?? null);
104
+ const prefixJson = JSON.stringify(args.prefix ?? null);
105
+ const expression = `(async () => {
106
+ const storage = globalThis.__TERRENO_DEV_STORAGE__;
107
+ if (!storage) return { error: "no __TERRENO_DEV_STORAGE__" };
108
+ let keys = ${keysJson};
109
+ if (!keys || keys.length === 0) {
110
+ keys = await storage.listKeys();
111
+ const prefix = ${prefixJson};
112
+ if (prefix) keys = keys.filter((k) => k.startsWith(prefix));
113
+ }
114
+ keys = keys.slice(0, ${MAX_STORAGE_KEYS});
115
+ const entries = {};
116
+ const sensitive = new RegExp(${JSON.stringify(SENSITIVE_STORAGE_KEY.source)}, "i");
117
+ const redact = (key, value) => {
118
+ if (value === null) return null;
119
+ if (sensitive.test(key)) return "[REDACTED len=" + value.length + "]";
120
+ if (value.length > ${MAX_STORAGE_VALUE_CHARS}) return value.slice(0, ${MAX_STORAGE_VALUE_CHARS}) + "…";
121
+ return value;
122
+ };
123
+ for (const key of keys) {
124
+ const value = await storage.get(key);
125
+ entries[key] = redact(key, value);
126
+ }
127
+ return { count: keys.length, entries };
128
+ })()`;
129
+ await ensureCdpConnected();
130
+ const ev = await cdpRuntimeEvaluate(expression, true);
131
+ if (ev.error) {
132
+ return JSON.stringify({ error: ev.error, status: getCdpConnectionStatus() }, null, 2);
133
+ }
134
+ return JSON.stringify({ result: ev.value, status: getCdpConnectionStatus() }, null, 2);
135
+ };
136
+ export const writeLocalStorage = async (args) => {
137
+ if (!isTerrenoMcpEvalEnabled()) {
138
+ return refuseEval("write_local_storage");
139
+ }
140
+ const key = args.key.trim();
141
+ if (!key) {
142
+ return "No key provided.";
143
+ }
144
+ const adapter = getDevStorage();
145
+ if (adapter) {
146
+ try {
147
+ if (!adapter.canWriteKey(key)) {
148
+ return JSON.stringify({ error: `Key not writable: ${key}`, ok: false }, null, 2);
149
+ }
150
+ await adapter.set(key, args.value);
151
+ return JSON.stringify({ key, ok: true, status: "in-process adapter" }, null, 2);
152
+ }
153
+ catch (e) {
154
+ return JSON.stringify({ error: String(e), ok: false }, null, 2);
155
+ }
156
+ }
157
+ const keyJson = JSON.stringify(key);
158
+ const valueJson = JSON.stringify(args.value);
159
+ const expression = `(async () => {
160
+ const storage = globalThis.__TERRENO_DEV_STORAGE__;
161
+ if (!storage) return { ok: false, error: "no __TERRENO_DEV_STORAGE__" };
162
+ if (!storage.canWriteKey(${keyJson})) return { ok: false, error: "key not writable" };
163
+ await storage.set(${keyJson}, ${valueJson});
164
+ return { ok: true, key: ${keyJson} };
165
+ })()`;
166
+ await ensureCdpConnected();
167
+ const ev = await cdpRuntimeEvaluate(expression, true);
168
+ if (ev.error) {
169
+ return JSON.stringify({ error: ev.error, status: getCdpConnectionStatus() }, null, 2);
170
+ }
171
+ return JSON.stringify({ result: ev.value, status: getCdpConnectionStatus() }, null, 2);
172
+ };
173
+ export const listDevCommands = async () => {
174
+ const inProcess = listDevCommandsInProcess();
175
+ if (inProcess.length > 0) {
176
+ return JSON.stringify({ commands: inProcess, status: "in-process registry" }, null, 2);
177
+ }
178
+ const expression = `JSON.stringify(Object.entries(globalThis.__TERRENO_DEV_COMMANDS__ ?? {}).map(([name, cmd]) => ({
179
+ name,
180
+ description: cmd.description,
181
+ inputSchema: cmd.inputSchema,
182
+ })))`;
183
+ await ensureCdpConnected();
184
+ const ev = await cdpRuntimeEvaluate(expression, false);
185
+ if (ev.error) {
186
+ return JSON.stringify({ commands: [], error: ev.error, status: getCdpConnectionStatus() }, null, 2);
187
+ }
188
+ const parsed = typeof ev.value === "string" ? JSON.parse(ev.value) : ev.value;
189
+ return JSON.stringify({ commands: parsed ?? [], status: getCdpConnectionStatus() }, null, 2);
190
+ };
191
+ export const invokeDevCommand = async (args) => {
192
+ if (!isTerrenoMcpEvalEnabled()) {
193
+ return refuseEval("invoke_dev_command");
194
+ }
195
+ const name = args.name.trim();
196
+ if (!name) {
197
+ return "No command name provided.";
198
+ }
199
+ const payload = args.arguments ?? {};
200
+ const commands = globalThis.__TERRENO_DEV_COMMANDS__;
201
+ if (commands && Object.keys(commands).length > 0) {
202
+ try {
203
+ const result = await runDevCommandInProcess(name, payload);
204
+ return JSON.stringify({ ok: true, result, status: "in-process registry" }, null, 2);
205
+ }
206
+ catch (e) {
207
+ return JSON.stringify({ error: String(e), ok: false }, null, 2);
208
+ }
209
+ }
210
+ const nameJson = JSON.stringify(name);
211
+ const argsJson = JSON.stringify(payload);
212
+ const expression = `(async () => {
213
+ const cmd = globalThis.__TERRENO_DEV_COMMANDS__?.[${nameJson}];
214
+ if (!cmd) return { ok: false, error: "unknown command" };
215
+ return { ok: true, result: await cmd.handler(${argsJson}) };
216
+ })()`;
217
+ await ensureCdpConnected();
218
+ const ev = await cdpRuntimeEvaluate(expression, true);
219
+ if (ev.error) {
220
+ return JSON.stringify({ error: ev.error, status: getCdpConnectionStatus() }, null, 2);
221
+ }
222
+ return JSON.stringify({ result: ev.value, status: getCdpConnectionStatus() }, null, 2);
223
+ };
224
+ //# sourceMappingURL=clientDev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientDev.js","sourceRoot":"","sources":["../../../src/local/tools/clientDev.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"readLogs.d.ts","sourceRoot":"","sources":["../../../src/local/tools/readLogs.ts"],"names":[],"mappings":"AAuFA,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,QAAQ,GAAU,MAAM,YAAY,KAAG,OAAO,CAAC,MAAM,CA6DjE,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,eAAO,MAAM,SAAS,GAAU,MAAM,aAAa,KAAG,OAAO,CAAC,MAAM,CA2CnE,CAAC"}
1
+ {"version":3,"file":"readLogs.d.ts","sourceRoot":"","sources":["../../../src/local/tools/readLogs.ts"],"names":[],"mappings":"AAyFA,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,QAAQ,GAAU,MAAM,YAAY,KAAG,OAAO,CAAC,MAAM,CA2EjE,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,eAAO,MAAM,SAAS,GAAU,MAAM,aAAa,KAAG,OAAO,CAAC,MAAM,CAqDnE,CAAC"}
@@ -1,7 +1,8 @@
1
1
  import { existsSync, readFileSync } from "node:fs";
2
2
  import { DateTime } from "luxon";
3
3
  import { resolveExistingAppLogPaths, resolveExistingBrowserLogPaths } from "../logPaths.js";
4
- import { ensureCdpConnected, ensureMetroEventsConnected, getCdpConnectionStatus, snapshotCdpConsoleRing, snapshotMetroEventsRing, } from "../metro/metroDevSession.js";
4
+ import { ensureCdpConnected, ensureMetroEventsConnected, getCdpConnectionStatus, snapshotCdpConsoleRing, snapshotMetroEventsRing, snapshotNetworkRing, } from "../metro/metroDevSession.js";
5
+ import { snapshotNativeLogs } from "../native/nativeLogs.js";
5
6
  import { resolveTerrenoProjectRoot } from "../projectRoot.js";
6
7
  const parseJsonlFile = (path, source, maxLines) => {
7
8
  if (!existsSync(path)) {
@@ -67,7 +68,7 @@ const mergeByTimestamp = (entries) => {
67
68
  };
68
69
  export const readLogs = async (args) => {
69
70
  const maxEntries = Math.min(Math.max(args.entries ?? 200, 1), 2000);
70
- const want = (args.sources ?? ["backend", "browser", "metro", "app"]).map((s) => s.toLowerCase());
71
+ const want = (args.sources ?? ["backend", "browser", "metro", "app", "network"]).map((s) => s.toLowerCase());
71
72
  const levelFilter = args.level?.toLowerCase();
72
73
  const sinceDt = args.since ? DateTime.fromISO(args.since) : undefined;
73
74
  const sinceThreshold = sinceDt?.isValid ? sinceDt : undefined;
@@ -93,6 +94,16 @@ export const readLogs = async (args) => {
93
94
  status.push(cdp.detail);
94
95
  merged.push(...ringToEntries(snapshotCdpConsoleRing()));
95
96
  }
97
+ if (want.includes("network")) {
98
+ const cdp = await ensureCdpConnected();
99
+ status.push(cdp.detail);
100
+ merged.push(...ringToEntries(snapshotNetworkRing()));
101
+ }
102
+ if (want.includes("native")) {
103
+ const native = await snapshotNativeLogs(maxEntries);
104
+ status.push(native.status);
105
+ merged.push(...native.entries);
106
+ }
96
107
  let filtered = merged;
97
108
  if (sinceThreshold) {
98
109
  const ms = sinceThreshold.toMillis();
@@ -117,7 +128,7 @@ export const readLogs = async (args) => {
117
128
  }, null, 2);
118
129
  };
119
130
  export const lastError = async (args) => {
120
- const want = (args.sources ?? ["backend", "browser", "metro", "app"]).map((s) => s.toLowerCase());
131
+ const want = (args.sources ?? ["backend", "browser", "metro", "app", "network", "native"]).map((s) => s.toLowerCase());
121
132
  let last;
122
133
  const consider = (entries) => {
123
134
  for (let i = entries.length - 1; i >= 0; i -= 1) {
@@ -150,6 +161,14 @@ export const lastError = async (args) => {
150
161
  await ensureCdpConnected();
151
162
  pool.push(...ringToEntries(snapshotCdpConsoleRing()));
152
163
  }
164
+ if (want.includes("network")) {
165
+ await ensureCdpConnected();
166
+ pool.push(...ringToEntries(snapshotNetworkRing()));
167
+ }
168
+ if (want.includes("native")) {
169
+ const native = await snapshotNativeLogs(200);
170
+ pool.push(...ringToEntries(native.entries));
171
+ }
153
172
  consider(mergeByTimestamp(pool));
154
173
  if (!last) {
155
174
  return `No recent error-level entries in selected sources (${want.join(", ")}). ${getCdpConnectionStatus()}`;
@@ -1 +1 @@
1
- {"version":3,"file":"readLogs.js","sourceRoot":"","sources":["../../../src/local/tools/readLogs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,YAAY,EAAC,MAAM,SAAS,CAAC;AACjD,OAAO,EAAC,QAAQ,EAAC,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAC,0BAA0B,EAAE,8BAA8B,EAAC,MAAM,gBAAgB,CAAC;AAC1F,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAC,yBAAyB,EAAC,MAAM,mBAAmB,CAAC;AAU5D,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,MAAc,EAAE,QAAgB,EAAc,EAAE;IACpF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,GAAG,GAAe,EAAE,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;YACvD,GAAG,CAAC,IAAI,CAAC;gBACP,KAAK,EAAE,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;gBAC5D,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,GAAG;gBACH,MAAM;gBACN,SAAS,EAAE,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;aACzE,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,MAAM,EAAC,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CACpB,IAA8E,EAClE,EAAE;IACd,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAA4B,CAAC;YACzD,OAAO;gBACL,KAAK,EAAE,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;gBAC1D,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,GAAG,EAAE,CAAC,CAAC,GAAG;gBACV,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,SAAS,EAAE,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;aAC3E,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAC,CAAC;QAChE,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,CAAqB,EAAwB,EAAE;IAC/D,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,OAAmB,EAAc,EAAE;IAC3D,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAChC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAClD,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAClD,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACd,OAAO,EAAE,GAAG,EAAE,CAAC;QACjB,CAAC;QACD,OAAO,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AASF,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,IAAkB,EAAmB,EAAE;IACpE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAClG,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtE,MAAM,cAAc,GAAG,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAE9D,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,0BAA0B,EAAE,EAAE,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,8BAA8B,EAAE,EAAE,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,MAAM,0BAA0B,EAAE,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,MAAM,kBAAkB,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,QAAQ,GAAG,MAAM,CAAC;IACtB,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC;QACrC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YAC7B,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;YAC5C,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;gBACpB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,WAAW,EAAE,CAAC;QAChB,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC;IAEvC,OAAO,IAAI,CAAC,SAAS,CACnB;QACE,UAAU,EAAE,sBAAsB,EAAE;QACpC,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,SAAS;QAC1C,WAAW,EAAE,yBAAyB,EAAE;KACzC,EACD,IAAI,EACJ,CAAC,CACF,CAAC;AACJ,CAAC,CAAC;AAMF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAmB,EAAmB,EAAE;IACtE,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAClG,IAAI,IAA0B,CAAC;IAE/B,MAAM,QAAQ,GAAG,CAAC,OAAmB,EAAQ,EAAE;QAC7C,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,CAAC,EAAE,CAAC;gBACP,SAAS;YACX,CAAC;YACD,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;gBAC9C,IAAI,GAAG,CAAC,CAAC;gBACT,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,IAAI,GAAe,EAAE,CAAC;IAC5B,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,0BAA0B,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,8BAA8B,EAAE,EAAE,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,0BAA0B,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,kBAAkB,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;IAEjC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,sDAAsD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,sBAAsB,EAAE,EAAE,CAAC;IAC/G,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC;AAClB,CAAC,CAAC"}
1
+ {"version":3,"file":"readLogs.js","sourceRoot":"","sources":["../../../src/local/tools/readLogs.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/dist/tools.js CHANGED
@@ -796,7 +796,9 @@ export const validateUiBlocks = (args) => {
796
796
  }
797
797
  return `${validated.warnings.map(formatBlockIssue).join("\n")}\n`;
798
798
  };
799
- const NAMED_IMPORT_PATTERN = /import\s+(?:type\s+)?(?:\w+\s*,\s*)?\{([^}]*)\}\s*from\s*["']([^"']+)["']/g;
799
+ // `[^{}]` rather than `[^}]` stops a failed match at the next `{`, so sources with many
800
+ // unclosed `import {` runs no longer rescan to the end of the file from each one.
801
+ const NAMED_IMPORT_PATTERN = /import\s+(?:type\s+)?(?:\w+\s*,\s*)?\{([^{}]*)\}\s*from\s*["']([^"']+)["']/g;
800
802
  const MODEL_DOCUMENT_TYPE_PATTERN = /\b\w+Document\b/;
801
803
  // True when the source declares a `<Name>Document` type or imports one from the app's type files.
802
804
  // mongoose's own Document types (Document, HydratedDocument) do not count.