crosspad-mcp-server 6.0.0 → 8.1.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.
- package/README.md +109 -44
- package/dist/config.d.ts +2 -2
- package/dist/config.js +42 -8
- package/dist/config.js.map +1 -1
- package/dist/index.js +946 -308
- package/dist/index.js.map +1 -1
- package/dist/tools/app-manager.d.ts +13 -5
- package/dist/tools/app-manager.js +69 -46
- package/dist/tools/app-manager.js.map +1 -1
- package/dist/tools/architecture.js +13 -4
- package/dist/tools/architecture.js.map +1 -1
- package/dist/tools/build-check.d.ts +1 -1
- package/dist/tools/build-check.js +19 -9
- package/dist/tools/build-check.js.map +1 -1
- package/dist/tools/build.d.ts +43 -4
- package/dist/tools/build.js +147 -15
- package/dist/tools/build.js.map +1 -1
- package/dist/tools/diff-core.d.ts +5 -1
- package/dist/tools/diff-core.js +11 -6
- package/dist/tools/diff-core.js.map +1 -1
- package/dist/tools/idf-build.d.ts +1 -1
- package/dist/tools/idf-build.js +5 -5
- package/dist/tools/idf-build.js.map +1 -1
- package/dist/tools/idf-flash.d.ts +2 -2
- package/dist/tools/idf-flash.js +12 -11
- package/dist/tools/idf-flash.js.map +1 -1
- package/dist/tools/idf-monitor.d.ts +1 -1
- package/dist/tools/idf-monitor.js +57 -3
- package/dist/tools/idf-monitor.js.map +1 -1
- package/dist/tools/log.d.ts +2 -2
- package/dist/tools/log.js +6 -5
- package/dist/tools/log.js.map +1 -1
- package/dist/tools/repo-actions.js +88 -75
- package/dist/tools/repo-actions.js.map +1 -1
- package/dist/tools/repos.js +14 -10
- package/dist/tools/repos.js.map +1 -1
- package/dist/tools/screenshot.js +42 -7
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/settings.js +11 -1
- package/dist/tools/settings.js.map +1 -1
- package/dist/tools/symbols.js +13 -8
- package/dist/tools/symbols.js.map +1 -1
- package/dist/tools/test.d.ts +1 -9
- package/dist/tools/test.js +11 -92
- package/dist/tools/test.js.map +1 -1
- package/dist/utils/exec.d.ts +17 -5
- package/dist/utils/exec.js +73 -27
- package/dist/utils/exec.js.map +1 -1
- package/dist/utils/git.d.ts +9 -0
- package/dist/utils/git.js +61 -1
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/remote-client.js +32 -14
- package/dist/utils/remote-client.js.map +1 -1
- package/package.json +4 -1
- package/dist/tools/scaffold.d.ts +0 -15
- package/dist/tools/scaffold.js +0 -192
- package/dist/tools/scaffold.js.map +0 -1
package/dist/tools/build.d.ts
CHANGED
|
@@ -6,13 +6,52 @@ export interface BuildResult {
|
|
|
6
6
|
warnings_count: number;
|
|
7
7
|
output_path: string;
|
|
8
8
|
}
|
|
9
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* Match real compiler / linker / build-system errors only. Keyword-only
|
|
11
|
+
* matching ("any line containing 'error'") is too greedy — it picks up
|
|
12
|
+
* comments like `// error handling` from cmake output and inflates the
|
|
13
|
+
* error list.
|
|
14
|
+
*
|
|
15
|
+
* Patterns: GCC/Clang/MSVC compiler diagnostics, linker errors, CMake
|
|
16
|
+
* Errors, Ninja FAILED markers.
|
|
17
|
+
*
|
|
18
|
+
* @internal exported for testing
|
|
19
|
+
*/
|
|
10
20
|
export declare function parseErrors(output: string): string[];
|
|
11
|
-
/**
|
|
21
|
+
/**
|
|
22
|
+
* Count compiler warnings only — same tightening logic as parseErrors.
|
|
23
|
+
* @internal exported for testing
|
|
24
|
+
*/
|
|
12
25
|
export declare function countWarnings(output: string): number;
|
|
13
|
-
export
|
|
26
|
+
export type BuildType = "Debug" | "Release" | "RelWithDebInfo";
|
|
27
|
+
export declare function crosspadBuild(mode: "incremental" | "clean" | "reconfigure", onLine?: OnLine, buildType?: BuildType, signal?: AbortSignal): Promise<BuildResult>;
|
|
14
28
|
export interface RunResult {
|
|
15
29
|
pid: number | null;
|
|
16
30
|
exe_path: string;
|
|
31
|
+
already_running?: boolean;
|
|
32
|
+
responsive?: boolean;
|
|
33
|
+
error?: string;
|
|
17
34
|
}
|
|
18
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Launch the simulator binary in the background.
|
|
37
|
+
*
|
|
38
|
+
* Refuses to spawn a second instance if one is already responding on the
|
|
39
|
+
* remote-control port — multiple instances clobber each other's window
|
|
40
|
+
* state and the TCP listener binds to the same port.
|
|
41
|
+
*
|
|
42
|
+
* After spawn we poll the TCP control port for up to ~3s — this distinguishes
|
|
43
|
+
* "process started, ready to accept commands" from "process started but
|
|
44
|
+
* crashed before binding" so callers don't fire screenshot/stats too early.
|
|
45
|
+
*/
|
|
46
|
+
export declare function crosspadRun(force?: boolean): Promise<RunResult>;
|
|
47
|
+
export interface KillResult {
|
|
48
|
+
success: boolean;
|
|
49
|
+
killed_pids: number[];
|
|
50
|
+
was_running: boolean;
|
|
51
|
+
error?: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Kill the running PC simulator. Tries the TCP control port first (clean
|
|
55
|
+
* shutdown via "quit" command), falls back to SIGTERM by exe path match.
|
|
56
|
+
*/
|
|
57
|
+
export declare function crosspadKill(): Promise<KillResult>;
|
package/dist/tools/build.js
CHANGED
|
@@ -1,27 +1,82 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
2
|
import { CROSSPAD_PC_ROOT, BUILD_DIR, BIN_EXE, VCPKG_TOOLCHAIN } from "../config.js";
|
|
3
3
|
import { runBuild, runBuildStream, spawnDetached } from "../utils/exec.js";
|
|
4
|
-
|
|
4
|
+
import { isSimulatorRunning } from "../utils/remote-client.js";
|
|
5
|
+
/**
|
|
6
|
+
* Match real compiler / linker / build-system errors only. Keyword-only
|
|
7
|
+
* matching ("any line containing 'error'") is too greedy — it picks up
|
|
8
|
+
* comments like `// error handling` from cmake output and inflates the
|
|
9
|
+
* error list.
|
|
10
|
+
*
|
|
11
|
+
* Patterns: GCC/Clang/MSVC compiler diagnostics, linker errors, CMake
|
|
12
|
+
* Errors, Ninja FAILED markers.
|
|
13
|
+
*
|
|
14
|
+
* @internal exported for testing
|
|
15
|
+
*/
|
|
5
16
|
export function parseErrors(output) {
|
|
6
17
|
const errors = [];
|
|
7
|
-
for (const
|
|
8
|
-
|
|
9
|
-
|
|
18
|
+
for (const raw of output.split("\n")) {
|
|
19
|
+
const line = raw.trim();
|
|
20
|
+
if (!line)
|
|
21
|
+
continue;
|
|
22
|
+
// GCC/Clang: foo.cpp:10:5: error: ... (also "fatal error:")
|
|
23
|
+
if (/:\d+:\d+:\s*(?:fatal\s+)?error\s*:/i.test(line)) {
|
|
24
|
+
errors.push(line);
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
// MSVC: foo.cpp(10,5): error C1234: ...
|
|
28
|
+
if (/\(\d+(?:,\d+)?\):\s*(?:fatal\s+)?error\s+[A-Z]\d+\s*:/i.test(line)) {
|
|
29
|
+
errors.push(line);
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
// Linker
|
|
33
|
+
if (/undefined reference to /.test(line)) {
|
|
34
|
+
errors.push(line);
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
if (/^.*ld(?:\.exe)?\s*:\s*error\s*:/i.test(line)) {
|
|
38
|
+
errors.push(line);
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
if (/LNK\d+:\s*error\b/i.test(line)) {
|
|
42
|
+
errors.push(line);
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
// CMake
|
|
46
|
+
if (/^CMake Error\b/i.test(line)) {
|
|
47
|
+
errors.push(line);
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
// Ninja
|
|
51
|
+
if (/^FAILED:\s/.test(line)) {
|
|
52
|
+
errors.push(line);
|
|
53
|
+
continue;
|
|
10
54
|
}
|
|
11
55
|
}
|
|
12
|
-
return errors.slice(0, 20);
|
|
56
|
+
return errors.slice(0, 20);
|
|
13
57
|
}
|
|
14
|
-
/**
|
|
58
|
+
/**
|
|
59
|
+
* Count compiler warnings only — same tightening logic as parseErrors.
|
|
60
|
+
* @internal exported for testing
|
|
61
|
+
*/
|
|
15
62
|
export function countWarnings(output) {
|
|
16
63
|
let count = 0;
|
|
17
|
-
for (const
|
|
18
|
-
|
|
64
|
+
for (const raw of output.split("\n")) {
|
|
65
|
+
const line = raw.trim();
|
|
66
|
+
if (!line)
|
|
67
|
+
continue;
|
|
68
|
+
if (/:\d+:\d+:\s*warning\s*:/i.test(line)) {
|
|
69
|
+
count++;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (/\(\d+(?:,\d+)?\):\s*warning\s+[A-Z]\d+\s*:/i.test(line)) {
|
|
19
73
|
count++;
|
|
74
|
+
continue;
|
|
20
75
|
}
|
|
21
76
|
}
|
|
22
77
|
return count;
|
|
23
78
|
}
|
|
24
|
-
export async function crosspadBuild(mode, onLine) {
|
|
79
|
+
export async function crosspadBuild(mode, onLine, buildType = "Debug", signal) {
|
|
25
80
|
const startTime = Date.now();
|
|
26
81
|
// Clean: remove build dir
|
|
27
82
|
if (mode === "clean" && fs.existsSync(BUILD_DIR)) {
|
|
@@ -33,11 +88,11 @@ export async function crosspadBuild(mode, onLine) {
|
|
|
33
88
|
const configCmd = [
|
|
34
89
|
"cmake -B build -G Ninja",
|
|
35
90
|
`-DCMAKE_TOOLCHAIN_FILE=${VCPKG_TOOLCHAIN}`,
|
|
36
|
-
|
|
91
|
+
`-DCMAKE_BUILD_TYPE=${buildType}`,
|
|
37
92
|
].join(" ");
|
|
38
|
-
onLine?.("stdout", `[crosspad] Configuring: ${mode}...`);
|
|
93
|
+
onLine?.("stdout", `[crosspad] Configuring: ${mode} (${buildType})...`);
|
|
39
94
|
if (onLine) {
|
|
40
|
-
const configResult = await runBuildStream(configCmd, CROSSPAD_PC_ROOT, onLine, 600_000);
|
|
95
|
+
const configResult = await runBuildStream(configCmd, CROSSPAD_PC_ROOT, onLine, 600_000, signal);
|
|
41
96
|
if (!configResult.success) {
|
|
42
97
|
const combined = configResult.stdout + "\n" + configResult.stderr;
|
|
43
98
|
return {
|
|
@@ -69,7 +124,7 @@ export async function crosspadBuild(mode, onLine) {
|
|
|
69
124
|
let buildStderr;
|
|
70
125
|
let buildSuccess;
|
|
71
126
|
if (onLine) {
|
|
72
|
-
const buildResult = await runBuildStream("cmake --build build", CROSSPAD_PC_ROOT, onLine, 600_000);
|
|
127
|
+
const buildResult = await runBuildStream("cmake --build build", CROSSPAD_PC_ROOT, onLine, 600_000, signal);
|
|
73
128
|
buildStdout = buildResult.stdout;
|
|
74
129
|
buildStderr = buildResult.stderr;
|
|
75
130
|
buildSuccess = buildResult.success;
|
|
@@ -91,11 +146,88 @@ export async function crosspadBuild(mode, onLine) {
|
|
|
91
146
|
onLine?.("stdout", `[crosspad] Build ${result.success ? "succeeded" : "FAILED"} in ${result.duration_seconds.toFixed(1)}s`);
|
|
92
147
|
return result;
|
|
93
148
|
}
|
|
94
|
-
|
|
149
|
+
function delay(ms) {
|
|
150
|
+
return new Promise((r) => setTimeout(r, ms));
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Launch the simulator binary in the background.
|
|
154
|
+
*
|
|
155
|
+
* Refuses to spawn a second instance if one is already responding on the
|
|
156
|
+
* remote-control port — multiple instances clobber each other's window
|
|
157
|
+
* state and the TCP listener binds to the same port.
|
|
158
|
+
*
|
|
159
|
+
* After spawn we poll the TCP control port for up to ~3s — this distinguishes
|
|
160
|
+
* "process started, ready to accept commands" from "process started but
|
|
161
|
+
* crashed before binding" so callers don't fire screenshot/stats too early.
|
|
162
|
+
*/
|
|
163
|
+
export async function crosspadRun(force = false) {
|
|
95
164
|
if (!fs.existsSync(BIN_EXE)) {
|
|
96
165
|
return { pid: null, exe_path: BIN_EXE };
|
|
97
166
|
}
|
|
167
|
+
if (!force && (await isSimulatorRunning())) {
|
|
168
|
+
return {
|
|
169
|
+
pid: null,
|
|
170
|
+
exe_path: BIN_EXE,
|
|
171
|
+
already_running: true,
|
|
172
|
+
error: "Simulator already running on port 19840. Pass force=true to spawn another instance anyway.",
|
|
173
|
+
};
|
|
174
|
+
}
|
|
98
175
|
const pid = spawnDetached(BIN_EXE, [], CROSSPAD_PC_ROOT);
|
|
99
|
-
|
|
176
|
+
if (pid === null)
|
|
177
|
+
return { pid, exe_path: BIN_EXE };
|
|
178
|
+
// Poll for TCP readiness so callers know if the sim actually came up.
|
|
179
|
+
let responsive = false;
|
|
180
|
+
for (let i = 0; i < 6; i++) {
|
|
181
|
+
await delay(500);
|
|
182
|
+
if (await isSimulatorRunning()) {
|
|
183
|
+
responsive = true;
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return { pid, exe_path: BIN_EXE, responsive };
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Kill the running PC simulator. Tries the TCP control port first (clean
|
|
191
|
+
* shutdown via "quit" command), falls back to SIGTERM by exe path match.
|
|
192
|
+
*/
|
|
193
|
+
export async function crosspadKill() {
|
|
194
|
+
const wasRunning = await isSimulatorRunning();
|
|
195
|
+
const killedPids = [];
|
|
196
|
+
if (!wasRunning) {
|
|
197
|
+
return { success: true, killed_pids: [], was_running: false };
|
|
198
|
+
}
|
|
199
|
+
// Find PIDs by exe path. Avoid pgrep -f matching arbitrary substrings.
|
|
200
|
+
// pgrep -x matches the basename only, which is fine for our binary.
|
|
201
|
+
let stdout = "";
|
|
202
|
+
try {
|
|
203
|
+
const r = require("child_process").spawnSync("pgrep", ["-x", "CrossPad"], {
|
|
204
|
+
encoding: "utf-8", timeout: 5000,
|
|
205
|
+
});
|
|
206
|
+
stdout = r.stdout || "";
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
// pgrep not available
|
|
210
|
+
}
|
|
211
|
+
for (const line of stdout.split("\n")) {
|
|
212
|
+
const pid = parseInt(line.trim(), 10);
|
|
213
|
+
if (!Number.isFinite(pid))
|
|
214
|
+
continue;
|
|
215
|
+
try {
|
|
216
|
+
process.kill(pid, "SIGTERM");
|
|
217
|
+
killedPids.push(pid);
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
// Already dead or no perms — ignore
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
// Give the sim a moment to exit, then verify
|
|
224
|
+
await delay(800);
|
|
225
|
+
const stillRunning = await isSimulatorRunning();
|
|
226
|
+
return {
|
|
227
|
+
success: !stillRunning,
|
|
228
|
+
killed_pids: killedPids,
|
|
229
|
+
was_running: true,
|
|
230
|
+
error: stillRunning ? "Simulator still responding after SIGTERM. May need manual kill -9." : undefined,
|
|
231
|
+
};
|
|
100
232
|
}
|
|
101
233
|
//# sourceMappingURL=build.js.map
|
package/dist/tools/build.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/tools/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAU,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/tools/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAU,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAU/D;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,8DAA8D;QAC9D,IAAI,qCAAqC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACtF,wCAAwC;QACxC,IAAI,wDAAwD,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACzG,SAAS;QACT,IAAI,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QAC1E,IAAI,kCAAkC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACnF,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACrE,QAAQ;QACR,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QAClE,QAAQ;QACR,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;IAC/D,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,IAAI,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,KAAK,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QACjE,IAAI,6CAA6C,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,KAAK,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;IACtF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAID,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAA6C,EAC7C,MAAe,EACf,YAAuB,OAAO,EAC9B,MAAoB;IAEpB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,0BAA0B;IAC1B,IAAI,IAAI,KAAK,OAAO,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACjD,MAAM,EAAE,CAAC,QAAQ,EAAE,wCAAwC,CAAC,CAAC;QAC7D,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,oCAAoC;IACpC,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QAC/C,MAAM,SAAS,GAAG;YAChB,yBAAyB;YACzB,0BAA0B,eAAe,EAAE;YAC3C,sBAAsB,SAAS,EAAE;SAClC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEZ,MAAM,EAAE,CAAC,QAAQ,EAAE,2BAA2B,IAAI,KAAK,SAAS,MAAM,CAAC,CAAC;QAExE,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAChG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;gBAC1B,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,GAAG,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC;gBAClE,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,gBAAgB,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI;oBACjD,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC;oBAC7B,cAAc,EAAE,aAAa,CAAC,QAAQ,CAAC;oBACvC,WAAW,EAAE,OAAO;iBACrB,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;YACpE,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;gBAC1B,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,GAAG,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC;gBAClE,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,gBAAgB,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI;oBACjD,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC;oBAC7B,cAAc,EAAE,aAAa,CAAC,QAAQ,CAAC;oBACvC,WAAW,EAAE,OAAO;iBACrB,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,QAAQ;IACR,MAAM,EAAE,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC;IAE7C,IAAI,WAAmB,CAAC;IACxB,IAAI,WAAmB,CAAC;IACxB,IAAI,YAAqB,CAAC;IAE1B,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3G,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC;QACjC,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC;QACjC,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,MAAM,WAAW,GAAG,QAAQ,CAAC,qBAAqB,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAC/E,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC;QACjC,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC;QACjC,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC;IACrC,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,GAAG,IAAI,GAAG,WAAW,CAAC;IAClD,MAAM,MAAM,GAAgB;QAC1B,OAAO,EAAE,YAAY;QACrB,gBAAgB,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI;QACjD,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC;QAC7B,cAAc,EAAE,aAAa,CAAC,QAAQ,CAAC;QACvC,WAAW,EAAE,OAAO;KACrB,CAAC;IAEF,MAAM,EAAE,CAAC,QAAQ,EAAE,oBAAoB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,OAAO,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAE5H,OAAO,MAAM,CAAC;AAChB,CAAC;AAUD,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAiB,KAAK;IACtD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,kBAAkB,EAAE,CAAC,EAAE,CAAC;QAC3C,OAAO;YACL,GAAG,EAAE,IAAI;YACT,QAAQ,EAAE,OAAO;YACjB,eAAe,EAAE,IAAI;YACrB,KAAK,EAAE,4FAA4F;SACpG,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACzD,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAEpD,sEAAsE;IACtE,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QACjB,IAAI,MAAM,kBAAkB,EAAE,EAAE,CAAC;YAAC,UAAU,GAAG,IAAI,CAAC;YAAC,MAAM;QAAC,CAAC;IAC/D,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AAChD,CAAC;AASD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,UAAU,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAC9C,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAChE,CAAC;IAED,uEAAuE;IACvE,oEAAoE;IACpE,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE;YACxE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI;SACjC,CAAC,CAAC;QACH,MAAM,GAAI,CAAC,CAAC,MAAiB,IAAI,EAAE,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,sBAAsB;IACxB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,SAAS;QACpC,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAC7B,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,oCAAoC;QACtC,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACjB,MAAM,YAAY,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAEhD,OAAO;QACL,OAAO,EAAE,CAAC,YAAY;QACtB,WAAW,EAAE,UAAU;QACvB,WAAW,EAAE,IAAI;QACjB,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,oEAAoE,CAAC,CAAC,CAAC,SAAS;KACvG,CAAC;AACJ,CAAC"}
|
|
@@ -14,11 +14,15 @@ export interface SubmoduleDiff {
|
|
|
14
14
|
commit_log: string[];
|
|
15
15
|
}
|
|
16
16
|
export interface DiffCoreResult {
|
|
17
|
+
parent_repo: string;
|
|
17
18
|
submodules: SubmoduleDiff[];
|
|
18
19
|
}
|
|
19
20
|
/**
|
|
20
21
|
* Show what changed in crosspad-core and/or crosspad-gui relative to the
|
|
21
22
|
* pinned submodule commit. Essential for dev-mode workflows where you're
|
|
22
23
|
* editing shared repos but haven't committed/pinned yet.
|
|
24
|
+
*
|
|
25
|
+
* Submodule paths are resolved dynamically from .gitmodules (handles both
|
|
26
|
+
* `crosspad-core` and `lib/crosspad-core` layouts).
|
|
23
27
|
*/
|
|
24
|
-
export declare function crosspadDiffCore(submodule?: "crosspad-core" | "crosspad-gui" | "both"): DiffCoreResult;
|
|
28
|
+
export declare function crosspadDiffCore(submodule?: "crosspad-core" | "crosspad-gui" | "both", parent?: "crosspad-pc" | "platform-idf"): DiffCoreResult;
|
package/dist/tools/diff-core.js
CHANGED
|
@@ -1,22 +1,27 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
2
|
import path from "path";
|
|
3
|
-
import { CROSSPAD_PC_ROOT } from "../config.js";
|
|
3
|
+
import { CROSSPAD_PC_ROOT, CROSSPAD_IDF_ROOT } from "../config.js";
|
|
4
4
|
import { runCommand } from "../utils/exec.js";
|
|
5
|
-
import { getSubmodulePin } from "../utils/git.js";
|
|
5
|
+
import { getSubmodulePin, findSubmodulePath } from "../utils/git.js";
|
|
6
6
|
/**
|
|
7
7
|
* Show what changed in crosspad-core and/or crosspad-gui relative to the
|
|
8
8
|
* pinned submodule commit. Essential for dev-mode workflows where you're
|
|
9
9
|
* editing shared repos but haven't committed/pinned yet.
|
|
10
|
+
*
|
|
11
|
+
* Submodule paths are resolved dynamically from .gitmodules (handles both
|
|
12
|
+
* `crosspad-core` and `lib/crosspad-core` layouts).
|
|
10
13
|
*/
|
|
11
|
-
export function crosspadDiffCore(submodule = "both") {
|
|
14
|
+
export function crosspadDiffCore(submodule = "both", parent = "crosspad-pc") {
|
|
15
|
+
const parentRoot = parent === "platform-idf" ? CROSSPAD_IDF_ROOT : CROSSPAD_PC_ROOT;
|
|
12
16
|
const targets = submodule === "both"
|
|
13
17
|
? ["crosspad-core", "crosspad-gui"]
|
|
14
18
|
: [submodule];
|
|
15
19
|
const submodules = [];
|
|
16
20
|
for (const sub of targets) {
|
|
17
|
-
const
|
|
21
|
+
const relPath = findSubmodulePath(parentRoot, sub);
|
|
22
|
+
const subPath = relPath ? path.join(parentRoot, relPath) : path.join(parentRoot, sub);
|
|
18
23
|
const isDevMode = isJunction(subPath);
|
|
19
|
-
const pinnedCommit = getSubmodulePin(
|
|
24
|
+
const pinnedCommit = getSubmodulePin(parentRoot, sub);
|
|
20
25
|
// Get current HEAD
|
|
21
26
|
const headResult = runCommand("git rev-parse HEAD", subPath);
|
|
22
27
|
const currentCommit = headResult.success ? headResult.stdout.trim() : null;
|
|
@@ -74,7 +79,7 @@ export function crosspadDiffCore(submodule = "both") {
|
|
|
74
79
|
commit_log: commitLog,
|
|
75
80
|
});
|
|
76
81
|
}
|
|
77
|
-
return { submodules };
|
|
82
|
+
return { parent_repo: parent, submodules };
|
|
78
83
|
}
|
|
79
84
|
function isJunction(p) {
|
|
80
85
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff-core.js","sourceRoot":"","sources":["../../src/tools/diff-core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"diff-core.js","sourceRoot":"","sources":["../../src/tools/diff-core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAwBrE;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,YAAuD,MAAM,EAC7D,SAAyC,aAAa;IAEtD,MAAM,UAAU,GAAG,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAEpF,MAAM,OAAO,GAAG,SAAS,KAAK,MAAM;QAClC,CAAC,CAAC,CAAC,eAAe,EAAE,cAAc,CAAC;QACnC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAEhB,MAAM,UAAU,GAAoB,EAAE,CAAC;IAEvC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,iBAAiB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACtF,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,YAAY,GAAG,eAAe,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAEtD,mBAAmB;QACnB,MAAM,UAAU,GAAG,UAAU,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;QAC7D,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAE3E,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,YAAY,GAAgB,EAAE,CAAC;QACnC,IAAI,SAAS,GAAa,EAAE,CAAC;QAE7B,IAAI,YAAY,IAAI,aAAa,IAAI,YAAY,KAAK,aAAa,EAAE,CAAC;YACpE,6BAA6B;YAC7B,MAAM,WAAW,GAAG,UAAU,CAC5B,qCAAqC,YAAY,SAAS,EAC1D,OAAO,CACR,CAAC;YACF,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;gBACxB,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACrD,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC5C,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;YAC7C,CAAC;YAED,wDAAwD;YACxD,MAAM,UAAU,GAAG,UAAU,CAC3B,0BAA0B,YAAY,SAAS,EAC/C,OAAO,CACR,CAAC;YACF,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;gBACvB,YAAY,GAAG,UAAU,CAAC,MAAM;qBAC7B,IAAI,EAAE;qBACN,KAAK,CAAC,IAAI,CAAC;qBACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;qBAC3B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBACZ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC/B,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/D,CAAC,CAAC,CAAC;YACP,CAAC;YAED,yCAAyC;YACzC,MAAM,SAAS,GAAG,UAAU,CAC1B,qBAAqB,YAAY,QAAQ,EACzC,OAAO,CACR,CAAC;YACF,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;gBACtB,SAAS,GAAG,SAAS,CAAC,MAAM;qBACzB,IAAI,EAAE;qBACN,KAAK,CAAC,IAAI,CAAC;qBACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;qBAC3B,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY;YAC/B,CAAC;QACH,CAAC;QAED,qCAAqC;QACrC,MAAM,YAAY,GAAG,UAAU,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;QACnE,MAAM,kBAAkB,GAAG,YAAY,CAAC,OAAO;YAC7C,CAAC,CAAC,YAAY,CAAC,MAAM;iBAChB,IAAI,EAAE;iBACN,KAAK,CAAC,IAAI,CAAC;iBACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAChC,CAAC,CAAC,EAAE,CAAC;QAEP,UAAU,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,YAAY;YAC3B,cAAc,EAAE,aAAa;YAC7B,WAAW,EAAE,SAAS;YACtB,WAAW,EAAE,UAAU;YACvB,YAAY,EAAE,WAAW;YACzB,aAAa,EAAE,YAAY;YAC3B,mBAAmB,EAAE,kBAAkB;YACvC,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAC7C,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -20,4 +20,4 @@ export declare function parseErrors(output: string): string[];
|
|
|
20
20
|
export declare function parseWarnings(output: string): string[];
|
|
21
21
|
/** @internal exported for testing */
|
|
22
22
|
export declare function getTail(output: string, n: number): string[];
|
|
23
|
-
export declare function crosspadIdfBuild(mode: "build" | "fullclean" | "clean", onLine?: OnLine): Promise<IdfBuildResult>;
|
|
23
|
+
export declare function crosspadIdfBuild(mode: "build" | "fullclean" | "clean", onLine?: OnLine, signal?: AbortSignal): Promise<IdfBuildResult>;
|
package/dist/tools/idf-build.js
CHANGED
|
@@ -97,14 +97,14 @@ export function parseWarnings(output) {
|
|
|
97
97
|
export function getTail(output, n) {
|
|
98
98
|
return output.split("\n").filter(l => l.trim()).slice(-n);
|
|
99
99
|
}
|
|
100
|
-
async function runIdfCmd(cmd, onLine, timeoutMs) {
|
|
100
|
+
async function runIdfCmd(cmd, onLine, timeoutMs, signal) {
|
|
101
101
|
if (onLine) {
|
|
102
|
-
const r = await runIdfStream(cmd, CROSSPAD_IDF_ROOT, onLine, timeoutMs);
|
|
102
|
+
const r = await runIdfStream(cmd, CROSSPAD_IDF_ROOT, onLine, timeoutMs, signal);
|
|
103
103
|
return r;
|
|
104
104
|
}
|
|
105
105
|
return runIdf(cmd, CROSSPAD_IDF_ROOT, timeoutMs);
|
|
106
106
|
}
|
|
107
|
-
export async function crosspadIdfBuild(mode, onLine) {
|
|
107
|
+
export async function crosspadIdfBuild(mode, onLine, signal) {
|
|
108
108
|
const startTime = Date.now();
|
|
109
109
|
let autoReconfigured = false;
|
|
110
110
|
// Auto-detect unregistered apps — if found, escalate to fullclean
|
|
@@ -118,7 +118,7 @@ export async function crosspadIdfBuild(mode, onLine) {
|
|
|
118
118
|
}
|
|
119
119
|
if (mode === "fullclean") {
|
|
120
120
|
onLine?.("stdout", "[idf] Running idf.py fullclean...");
|
|
121
|
-
const r = await runIdfCmd("idf.py fullclean", onLine, 60_000);
|
|
121
|
+
const r = await runIdfCmd("idf.py fullclean", onLine, 60_000, signal);
|
|
122
122
|
if (!r.success) {
|
|
123
123
|
const combined = r.stdout + "\n" + r.stderr;
|
|
124
124
|
return {
|
|
@@ -139,7 +139,7 @@ export async function crosspadIdfBuild(mode, onLine) {
|
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
141
|
onLine?.("stdout", "[idf] Building...");
|
|
142
|
-
const r = await runIdfCmd("idf.py build", onLine, 600_000);
|
|
142
|
+
const r = await runIdfCmd("idf.py build", onLine, 600_000, signal);
|
|
143
143
|
const combined = r.stdout + "\n" + r.stderr;
|
|
144
144
|
const errors = parseErrors(combined);
|
|
145
145
|
const warnings = parseWarnings(combined);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idf-build.js","sourceRoot":"","sources":["../../src/tools/idf-build.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"idf-build.js","sourceRoot":"","sources":["../../src/tools/idf-build.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,5 +16,5 @@ export interface FlashResult {
|
|
|
16
16
|
output_tail: string[];
|
|
17
17
|
error?: string;
|
|
18
18
|
}
|
|
19
|
-
export declare function crosspadIdfFlash(port: string | undefined, onLine?: OnLine): Promise<FlashResult>;
|
|
20
|
-
export declare function crosspadIdfOta(port: string | undefined, firmwarePath: string | undefined, onLine?: OnLine): Promise<FlashResult>;
|
|
19
|
+
export declare function crosspadIdfFlash(port: string | undefined, onLine?: OnLine, signal?: AbortSignal): Promise<FlashResult>;
|
|
20
|
+
export declare function crosspadIdfOta(port: string | undefined, firmwarePath: string | undefined, onLine?: OnLine, signal?: AbortSignal): Promise<FlashResult>;
|
package/dist/tools/idf-flash.js
CHANGED
|
@@ -10,12 +10,12 @@
|
|
|
10
10
|
import fs from "fs";
|
|
11
11
|
import path from "path";
|
|
12
12
|
import { CROSSPAD_IDF_ROOT } from "../config.js";
|
|
13
|
-
import {
|
|
13
|
+
import { runIdfArgvStream } from "../utils/exec.js";
|
|
14
14
|
import { findCrosspadPort } from "../utils/device.js";
|
|
15
15
|
// ═══════════════════════════════════════════════════════════════════════
|
|
16
16
|
// UART FLASH — idf.py -p PORT flash
|
|
17
17
|
// ═══════════════════════════════════════════════════════════════════════
|
|
18
|
-
export async function crosspadIdfFlash(port, onLine) {
|
|
18
|
+
export async function crosspadIdfFlash(port, onLine, signal) {
|
|
19
19
|
const startTime = Date.now();
|
|
20
20
|
// Validate IDF project
|
|
21
21
|
if (!fs.existsSync(CROSSPAD_IDF_ROOT)) {
|
|
@@ -54,8 +54,9 @@ export async function crosspadIdfFlash(port, onLine) {
|
|
|
54
54
|
}
|
|
55
55
|
const targetPort = resolved.port;
|
|
56
56
|
onLine?.("stdout", `[idf-flash] Flashing via UART to ${targetPort}...`);
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
// argv mode (shell:false) — port is allow-list-validated upstream but
|
|
58
|
+
// defense-in-depth means we never let it touch a shell.
|
|
59
|
+
const result = await runIdfArgvStream("idf.py", ["-p", targetPort, "flash"], CROSSPAD_IDF_ROOT, onLine ?? (() => { }), 300_000, signal);
|
|
59
60
|
const combined = result.stdout + "\n" + result.stderr;
|
|
60
61
|
const tail = combined
|
|
61
62
|
.split("\n")
|
|
@@ -75,7 +76,7 @@ export async function crosspadIdfFlash(port, onLine) {
|
|
|
75
76
|
// ═══════════════════════════════════════════════════════════════════════
|
|
76
77
|
// OTA FLASH — python tools/ota_flash.py
|
|
77
78
|
// ═══════════════════════════════════════════════════════════════════════
|
|
78
|
-
export async function crosspadIdfOta(port, firmwarePath, onLine) {
|
|
79
|
+
export async function crosspadIdfOta(port, firmwarePath, onLine, signal) {
|
|
79
80
|
const startTime = Date.now();
|
|
80
81
|
// Validate IDF project
|
|
81
82
|
if (!fs.existsSync(CROSSPAD_IDF_ROOT)) {
|
|
@@ -112,15 +113,15 @@ export async function crosspadIdfOta(port, firmwarePath, onLine) {
|
|
|
112
113
|
error: `Firmware not found at ${fwPath}. Run crosspad_build action=idf first.`,
|
|
113
114
|
};
|
|
114
115
|
}
|
|
115
|
-
//
|
|
116
|
-
//
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
116
|
+
// argv mode — firmware_path is user input, port is validated. Never let
|
|
117
|
+
// either touch a shell.
|
|
118
|
+
const argv = [otaScript, fwPath];
|
|
119
|
+
if (port)
|
|
120
|
+
argv.push("--port", port);
|
|
120
121
|
const resolvedPort = port ?? "(auto-detect)";
|
|
121
122
|
onLine?.("stdout", `[idf-ota] OTA flash to ${resolvedPort}...`);
|
|
122
123
|
onLine?.("stdout", `[idf-ota] Firmware: ${fwPath} (${formatFileSize(fwPath)})`);
|
|
123
|
-
const result = await
|
|
124
|
+
const result = await runIdfArgvStream("python3", argv, CROSSPAD_IDF_ROOT, onLine ?? (() => { }), 120_000, signal);
|
|
124
125
|
const combined = result.stdout + "\n" + result.stderr;
|
|
125
126
|
const tail = combined
|
|
126
127
|
.split("\n")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idf-flash.js","sourceRoot":"","sources":["../../src/tools/idf-flash.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,
|
|
1
|
+
{"version":3,"file":"idf-flash.js","sourceRoot":"","sources":["../../src/tools/idf-flash.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,4 +26,4 @@ export interface MonitorResult {
|
|
|
26
26
|
* @param filter - Optional string filter — only return lines containing this
|
|
27
27
|
* @param onLine - Streaming callback for real-time output
|
|
28
28
|
*/
|
|
29
|
-
export declare function crosspadIdfMonitor(port: string | undefined, timeoutSeconds: number | undefined, maxLines: number | undefined, filter: string | undefined, onLine?: OnLine): Promise<MonitorResult>;
|
|
29
|
+
export declare function crosspadIdfMonitor(port: string | undefined, timeoutSeconds: number | undefined, maxLines: number | undefined, filter: string | undefined, onLine?: OnLine, signal?: AbortSignal): Promise<MonitorResult>;
|