@kvell007/embed-labs-cli 0.1.0-alpha.2 → 0.1.0-alpha.4

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.
@@ -0,0 +1,576 @@
1
+ import { createHash } from "node:crypto";
2
+ import { spawn } from "node:child_process";
3
+ import { constants } from "node:fs";
4
+ import { access, cp, mkdir, mkdtemp, readdir, readFile, rm, stat, writeFile } from "node:fs/promises";
5
+ import { arch, homedir, platform, tmpdir } from "node:os";
6
+ import { basename, dirname, extname, join, resolve } from "node:path";
7
+ const DEFAULT_RELEASE_ROOT = "/Volumes/LLVM-TSPI/tspi-rk3566-llvm-release-minimal";
8
+ const DEFAULT_QT_SMOKE_SOURCE = "/Users/kvell/kk-project/DBT-Agent-Project/llvm-build-tspi/qt-smoke";
9
+ const DEFAULT_METADATA_ROOT = "/Users/kvell/kk-project/DBT-Agent-Project/llvm-build-tspi/embedlabs-release";
10
+ const DEFAULT_BOARD_ID = "taishanpi-1m-rk3566";
11
+ const DEFAULT_CHANNEL = "stable";
12
+ const BUILT_IN_CHANNEL = {
13
+ schema: "embedlabs.channel.v1",
14
+ channel: DEFAULT_CHANNEL,
15
+ packages: [
16
+ { id: "embedlabs.tools.vendor.rockchip", version: "1.0.0", manifest: "" },
17
+ { id: "embedlabs.tools.common.llvm", version: "22.1.3", manifest: "" },
18
+ { id: "embedlabs.tools.common.e2fsprogs", version: "1.0.0", manifest: "" },
19
+ { id: "embedlabs.family.rk356x", version: "1.0.0", manifest: "" },
20
+ { id: "embedlabs.board.taishanpi.1m-rk3566", version: "1.0.31", manifest: "" }
21
+ ]
22
+ };
23
+ const BUILT_IN_MANIFESTS = {
24
+ "embedlabs.tools.vendor.rockchip": {
25
+ schema: "embedlabs.package.v1",
26
+ id: "embedlabs.tools.vendor.rockchip",
27
+ version: "1.0.0",
28
+ kind: "tools",
29
+ hosts: ["darwin-arm64", "linux-x86_64"],
30
+ provides: ["rockchip.mkimage", "rockchip.dumpimage", "rockchip.resource_tool", "rockchip.rkdeveloptool"]
31
+ },
32
+ "embedlabs.tools.common.llvm": {
33
+ schema: "embedlabs.package.v1",
34
+ id: "embedlabs.tools.common.llvm",
35
+ version: "22.1.3",
36
+ kind: "tools",
37
+ hosts: ["darwin-arm64", "linux-x86_64"],
38
+ provides: ["llvm.clang", "llvm.clangxx", "llvm.ld_lld", "llvm.ar", "llvm.objcopy", "llvm.readelf"]
39
+ },
40
+ "embedlabs.tools.common.e2fsprogs": {
41
+ schema: "embedlabs.package.v1",
42
+ id: "embedlabs.tools.common.e2fsprogs",
43
+ version: "1.0.0",
44
+ kind: "tools",
45
+ hosts: ["darwin-arm64", "linux-x86_64"],
46
+ provides: ["ext4.mke2fs", "ext4.resize2fs", "fakeroot"]
47
+ },
48
+ "embedlabs.family.rk356x": {
49
+ schema: "embedlabs.package.v1",
50
+ id: "embedlabs.family.rk356x",
51
+ version: "1.0.0",
52
+ kind: "family",
53
+ family: "rk356x",
54
+ requires: [
55
+ { id: "embedlabs.tools.vendor.rockchip", version: "^1.0.0" },
56
+ { id: "embedlabs.tools.common.llvm", version: "22.x" },
57
+ { id: "embedlabs.tools.common.e2fsprogs", version: "^1.0.0" }
58
+ ]
59
+ },
60
+ "embedlabs.board.taishanpi.1m-rk3566": {
61
+ schema: "embedlabs.package.v1",
62
+ id: "embedlabs.board.taishanpi.1m-rk3566",
63
+ version: "1.0.31",
64
+ kind: "board",
65
+ family: "rk356x",
66
+ board: "TaishanPi",
67
+ variant: "1M-RK3566",
68
+ requires: [
69
+ { id: "embedlabs.family.rk356x", version: "^1.0.0" },
70
+ { id: "embedlabs.tools.vendor.rockchip", version: "^1.0.0", roles: ["flash", "resource-image"] },
71
+ { id: "embedlabs.tools.common.llvm", version: "22.x", roles: ["compile"] },
72
+ { id: "embedlabs.tools.common.e2fsprogs", version: "^1.0.0", roles: ["userdata-image"] }
73
+ ],
74
+ build_modes: ["local-llvm"]
75
+ }
76
+ };
77
+ const INSTALL_COPY_PATHS = [
78
+ "toolchain/llvm-cross",
79
+ "toolchain/host/aarch64-buildroot-linux-gnu/sysroot",
80
+ "qt-target/qt6-rk3566-llvm-6.8.3",
81
+ "tools/mac",
82
+ "images/current",
83
+ "userdata/rootfs",
84
+ "boot-workspace/kernel-tree"
85
+ ];
86
+ export function defaultLocalReleaseRoot() {
87
+ return process.env.EMBEDLABS_LOCAL_RELEASE_ROOT?.trim()
88
+ || process.env.EMBEDLABS_RELEASE_ROOT?.trim()
89
+ || DEFAULT_RELEASE_ROOT;
90
+ }
91
+ export async function latestLocalToolchain(options = {}) {
92
+ const boardId = options.boardId ?? DEFAULT_BOARD_ID;
93
+ const channelName = options.channel ?? DEFAULT_CHANNEL;
94
+ const { channel, manifests, metadataRoot } = await loadLocalToolchainMetadata(options.metadataRoot, channelName);
95
+ const boardPackageId = boardPackageIdFor(boardId);
96
+ const board = manifests.get(boardPackageId);
97
+ if (!board) {
98
+ throw new Error(`No local toolchain board package found for ${boardId}.`);
99
+ }
100
+ const packages = resolvePackageRefs(boardPackageId, channel, manifests);
101
+ return {
102
+ board_id: boardId,
103
+ channel: channel.channel,
104
+ host: hostId(),
105
+ version: board.version,
106
+ metadata_root: metadataRoot,
107
+ packages
108
+ };
109
+ }
110
+ export async function currentLocalToolchain(installRoot, boardId = DEFAULT_BOARD_ID) {
111
+ const root = resolveInstallRoot(installRoot);
112
+ const registryPath = localToolchainRegistryPath(root);
113
+ try {
114
+ const registry = JSON.parse(await readFile(registryPath, "utf8"));
115
+ const releaseRoot = typeof registry.release_root === "string" ? registry.release_root : undefined;
116
+ return {
117
+ installed: !!releaseRoot,
118
+ board_id: typeof registry.board_id === "string" ? registry.board_id : boardId,
119
+ version: typeof registry.version === "string" ? registry.version : undefined,
120
+ release_root: releaseRoot,
121
+ registry_path: registryPath,
122
+ install_root: root,
123
+ channel: typeof registry.channel === "string" ? registry.channel : undefined,
124
+ packages: Array.isArray(registry.packages) ? registry.packages : undefined
125
+ };
126
+ }
127
+ catch {
128
+ return {
129
+ installed: false,
130
+ board_id: boardId,
131
+ registry_path: registryPath,
132
+ install_root: root
133
+ };
134
+ }
135
+ }
136
+ export async function installLocalToolchain(options = {}) {
137
+ const latest = await latestLocalToolchain(options);
138
+ const installRoot = resolveInstallRoot(options.installRoot);
139
+ const releaseRoot = resolve(installRoot, "toolchains", latest.board_id, latest.version);
140
+ if (await pathExists(releaseRoot) && !options.force) {
141
+ const validation = await validateLocalToolchain(releaseRoot);
142
+ if (!validation.ok) {
143
+ throw new Error(`Existing local toolchain is incomplete at ${releaseRoot}; rerun with --force.`);
144
+ }
145
+ await writeCurrentRegistry(installRoot, latest, releaseRoot);
146
+ return {
147
+ board_id: latest.board_id,
148
+ version: latest.version,
149
+ channel: latest.channel,
150
+ host: latest.host,
151
+ install_root: installRoot,
152
+ release_root: releaseRoot,
153
+ registry_path: localToolchainRegistryPath(installRoot),
154
+ source: { kind: "directory", value: releaseRoot },
155
+ installed_paths: [],
156
+ packages: latest.packages,
157
+ validation
158
+ };
159
+ }
160
+ const tempDir = await mkdtemp(join(tmpdir(), "embedlabs-local-toolchain-install-"));
161
+ try {
162
+ const sourceRoot = await sourceReleaseRootForInstall(options, installRoot, tempDir);
163
+ await rm(releaseRoot, { recursive: true, force: true });
164
+ await mkdir(releaseRoot, { recursive: true });
165
+ const installedPaths = [];
166
+ for (const relativePath of INSTALL_COPY_PATHS) {
167
+ const sourcePath = resolve(sourceRoot.path, relativePath);
168
+ if (!await pathExists(sourcePath)) {
169
+ continue;
170
+ }
171
+ const targetPath = resolve(releaseRoot, relativePath);
172
+ await mkdir(dirname(targetPath), { recursive: true });
173
+ await cp(sourcePath, targetPath, { recursive: true, force: true, preserveTimestamps: true });
174
+ installedPaths.push(relativePath);
175
+ }
176
+ await writeCurrentRegistry(installRoot, latest, releaseRoot);
177
+ const validation = await validateLocalToolchain(releaseRoot);
178
+ if (!validation.ok) {
179
+ throw new Error(`Installed local toolchain is incomplete: ${validation.missing_paths.join(", ")}`);
180
+ }
181
+ return {
182
+ board_id: latest.board_id,
183
+ version: latest.version,
184
+ channel: latest.channel,
185
+ host: latest.host,
186
+ install_root: installRoot,
187
+ release_root: releaseRoot,
188
+ registry_path: localToolchainRegistryPath(installRoot),
189
+ source: sourceRoot.source,
190
+ installed_paths: installedPaths,
191
+ packages: latest.packages,
192
+ validation
193
+ };
194
+ }
195
+ finally {
196
+ await rm(tempDir, { recursive: true, force: true });
197
+ }
198
+ }
199
+ export async function validateLocalToolchain(releaseRoot) {
200
+ const resolvedRoot = await resolveLocalReleaseRoot(releaseRoot);
201
+ const required = [
202
+ ["release root", "."],
203
+ ["C compiler", "toolchain/llvm-cross/bin/aarch64-linux-gnu-gcc"],
204
+ ["C++ compiler", "toolchain/llvm-cross/bin/aarch64-linux-gnu-g++"],
205
+ ["readelf", "toolchain/llvm-cross/bin/aarch64-linux-gnu-readelf"],
206
+ ["Qt CMake", "qt-target/qt6-rk3566-llvm-6.8.3/bin/qt-cmake"],
207
+ ["target sysroot", "toolchain/host/aarch64-buildroot-linux-gnu/sysroot"],
208
+ ["Qt target libraries", "qt-target/qt6-rk3566-llvm-6.8.3/lib"],
209
+ ["Rockchip mkimage", "tools/mac/mkimage"],
210
+ ["Rockchip resource_tool", "tools/mac/resource_tool"]
211
+ ];
212
+ const checked_paths = [];
213
+ for (const [label, relativePath] of required) {
214
+ const absolutePath = resolve(resolvedRoot, relativePath);
215
+ checked_paths.push({
216
+ label,
217
+ path: absolutePath,
218
+ exists: await pathExists(absolutePath)
219
+ });
220
+ }
221
+ const missing_paths = checked_paths.filter((item) => !item.exists).map((item) => item.path);
222
+ return {
223
+ ok: missing_paths.length === 0,
224
+ host: {
225
+ platform: platform(),
226
+ arch: arch()
227
+ },
228
+ board_id: DEFAULT_BOARD_ID,
229
+ release_root: resolvedRoot,
230
+ checked_paths,
231
+ missing_paths,
232
+ notes: [
233
+ "Local build commands require an Embed Labs auth token so local resource use remains account attributable.",
234
+ "This validator checks the Mac-first TaishanPi LLVM release layout; package install/update registry work is tracked separately."
235
+ ]
236
+ };
237
+ }
238
+ export async function compileTaishanPiSingleFile(options) {
239
+ assertAuthenticated(options.auth);
240
+ const releaseRoot = await resolveLocalReleaseRoot(options.releaseRoot);
241
+ const sourcePath = resolve(options.sourcePath);
242
+ const outputPath = resolve(options.outputPath);
243
+ await access(sourcePath, constants.R_OK);
244
+ await mkdir(dirname(outputPath), { recursive: true });
245
+ const compiler = compilerForSource(releaseRoot, sourcePath);
246
+ await access(compiler, constants.X_OK);
247
+ const sysroot = join(releaseRoot, "toolchain", "host", "aarch64-buildroot-linux-gnu", "sysroot");
248
+ await access(sysroot, constants.R_OK);
249
+ const command = [compiler, `--sysroot=${sysroot}`, "-O2", sourcePath, "-o", outputPath];
250
+ const buildResult = await runCommand(command, dirname(sourcePath));
251
+ if (buildResult.exit_code !== 0) {
252
+ throw new Error(`Local compile failed with exit code ${buildResult.exit_code}: ${buildResult.stderr_tail.join("\n")}`);
253
+ }
254
+ return await localCompileResult({
255
+ boardId: options.boardId,
256
+ operation: "local.compile.single_file",
257
+ releaseRoot,
258
+ accountId: options.accountId,
259
+ auth: options.auth,
260
+ sourcePath,
261
+ artifactPath: outputPath,
262
+ commands: [buildResult]
263
+ });
264
+ }
265
+ export async function buildTaishanPiQtSmoke(options) {
266
+ assertAuthenticated(options.auth);
267
+ const releaseRoot = await resolveLocalReleaseRoot(options.releaseRoot);
268
+ const sourceDir = resolve(options.sourceDir ?? DEFAULT_QT_SMOKE_SOURCE);
269
+ const buildDir = resolve(options.buildDir);
270
+ const targetName = options.targetName ?? "qt_llvm_smoke";
271
+ const qtCmake = join(releaseRoot, "qt-target", "qt6-rk3566-llvm-6.8.3", "bin", "qt-cmake");
272
+ await access(join(sourceDir, "CMakeLists.txt"), constants.R_OK);
273
+ await access(qtCmake, constants.X_OK);
274
+ await mkdir(buildDir, { recursive: true });
275
+ const configure = await runCommand([
276
+ qtCmake,
277
+ "-S",
278
+ sourceDir,
279
+ "-B",
280
+ buildDir,
281
+ "-G",
282
+ "Ninja",
283
+ "-DCMAKE_BUILD_TYPE=Release"
284
+ ], sourceDir);
285
+ if (configure.exit_code !== 0) {
286
+ throw new Error(`Qt smoke configure failed with exit code ${configure.exit_code}: ${configure.stderr_tail.join("\n")}`);
287
+ }
288
+ const build = await runCommand(["cmake", "--build", buildDir, "--parallel"], sourceDir);
289
+ if (build.exit_code !== 0) {
290
+ throw new Error(`Qt smoke build failed with exit code ${build.exit_code}: ${build.stderr_tail.join("\n")}`);
291
+ }
292
+ const artifactPath = join(buildDir, targetName);
293
+ return await localCompileResult({
294
+ boardId: DEFAULT_BOARD_ID,
295
+ operation: "local.build.qt_smoke",
296
+ releaseRoot,
297
+ accountId: options.accountId,
298
+ auth: options.auth,
299
+ sourcePath: sourceDir,
300
+ buildDir,
301
+ artifactPath,
302
+ commands: [configure, build]
303
+ });
304
+ }
305
+ async function loadLocalToolchainMetadata(metadataRoot, channelName) {
306
+ const explicitRoot = metadataRoot || process.env.EMBEDLABS_METADATA_ROOT?.trim();
307
+ const candidateRoot = explicitRoot || (await pathExists(DEFAULT_METADATA_ROOT) ? DEFAULT_METADATA_ROOT : undefined);
308
+ if (!candidateRoot) {
309
+ return {
310
+ channel: BUILT_IN_CHANNEL,
311
+ manifests: new Map(Object.entries(BUILT_IN_MANIFESTS)),
312
+ metadataRoot: undefined
313
+ };
314
+ }
315
+ const root = resolve(candidateRoot);
316
+ const channelPath = join(root, "channels", channelName, "index.json");
317
+ const channel = JSON.parse(await readFile(channelPath, "utf8"));
318
+ if (channel.schema !== "embedlabs.channel.v1") {
319
+ throw new Error(`Unexpected local toolchain channel schema ${channel.schema}.`);
320
+ }
321
+ const manifests = new Map();
322
+ for (const entry of channel.packages) {
323
+ const manifestPath = entry.manifest
324
+ ? resolve(dirname(channelPath), entry.manifest)
325
+ : join(root, "manifests", entry.id, entry.version, "manifest.json");
326
+ const manifest = JSON.parse(await readFile(manifestPath, "utf8"));
327
+ if (manifest.schema !== "embedlabs.package.v1") {
328
+ throw new Error(`Unexpected local toolchain manifest schema for ${entry.id}: ${manifest.schema}.`);
329
+ }
330
+ if (manifest.id !== entry.id || manifest.version !== entry.version) {
331
+ throw new Error(`Local toolchain manifest mismatch for ${entry.id}@${entry.version}.`);
332
+ }
333
+ manifests.set(manifest.id, manifest);
334
+ }
335
+ return { channel, manifests, metadataRoot: root };
336
+ }
337
+ function resolvePackageRefs(packageId, channel, manifests, seen = new Set()) {
338
+ if (seen.has(packageId)) {
339
+ return [];
340
+ }
341
+ seen.add(packageId);
342
+ const manifest = manifests.get(packageId);
343
+ if (!manifest) {
344
+ throw new Error(`Local toolchain package ${packageId} is not present in the channel.`);
345
+ }
346
+ const refs = [];
347
+ for (const requirement of manifest.requires ?? []) {
348
+ refs.push(...resolvePackageRefs(requirement.id, channel, manifests, seen));
349
+ }
350
+ const channelEntry = channel.packages.find((item) => item.id === packageId);
351
+ refs.push({
352
+ id: packageId,
353
+ version: manifest.version,
354
+ manifest: channelEntry?.manifest
355
+ });
356
+ return refs;
357
+ }
358
+ function boardPackageIdFor(boardId) {
359
+ if (boardId === DEFAULT_BOARD_ID || boardId === "taishanpi" || boardId === "taishanpi-1m-rk3566") {
360
+ return "embedlabs.board.taishanpi.1m-rk3566";
361
+ }
362
+ if (boardId.startsWith("embedlabs.board.")) {
363
+ return boardId;
364
+ }
365
+ throw new Error(`Unsupported local toolchain board ${boardId}.`);
366
+ }
367
+ function hostId() {
368
+ if (platform() === "darwin" && arch() === "arm64") {
369
+ return "darwin-arm64";
370
+ }
371
+ if (platform() === "linux" && arch() === "x64") {
372
+ return "linux-x86_64";
373
+ }
374
+ return `${platform()}-${arch()}`;
375
+ }
376
+ function resolveInstallRoot(installRoot) {
377
+ return resolve(installRoot
378
+ || process.env.EMBEDLABS_HOME?.trim()
379
+ || join(homedir(), ".embedlabs"));
380
+ }
381
+ function localToolchainRegistryPath(installRoot) {
382
+ return join(installRoot, "registry", "local-toolchains.json");
383
+ }
384
+ async function writeCurrentRegistry(installRoot, latest, releaseRoot) {
385
+ const registryPath = localToolchainRegistryPath(installRoot);
386
+ await mkdir(dirname(registryPath), { recursive: true });
387
+ await writeFile(registryPath, `${JSON.stringify({
388
+ installed: true,
389
+ board_id: latest.board_id,
390
+ version: latest.version,
391
+ channel: latest.channel,
392
+ host: latest.host,
393
+ release_root: releaseRoot,
394
+ packages: latest.packages,
395
+ updated_at: new Date().toISOString()
396
+ }, null, 2)}\n`, "utf8");
397
+ }
398
+ async function resolveLocalReleaseRoot(releaseRoot) {
399
+ if (releaseRoot?.trim()) {
400
+ return resolve(releaseRoot);
401
+ }
402
+ const envRoot = process.env.EMBEDLABS_LOCAL_RELEASE_ROOT?.trim() || process.env.EMBEDLABS_RELEASE_ROOT?.trim();
403
+ if (envRoot) {
404
+ return resolve(envRoot);
405
+ }
406
+ const current = await currentLocalToolchain(undefined, DEFAULT_BOARD_ID);
407
+ if (current.release_root) {
408
+ return resolve(current.release_root);
409
+ }
410
+ return resolve(DEFAULT_RELEASE_ROOT);
411
+ }
412
+ async function sourceReleaseRootForInstall(options, installRoot, tempDir) {
413
+ if (options.sourceReleaseRoot) {
414
+ return {
415
+ path: resolve(options.sourceReleaseRoot),
416
+ source: { kind: "directory", value: resolve(options.sourceReleaseRoot) }
417
+ };
418
+ }
419
+ if (options.sourceUrl) {
420
+ const downloadedPath = await downloadToolchainArchive(options.sourceUrl, installRoot);
421
+ const extractRoot = join(tempDir, "extract");
422
+ await mkdir(extractRoot, { recursive: true });
423
+ const extracted = await runCommand(["tar", "-xzf", downloadedPath, "-C", extractRoot], tempDir);
424
+ if (extracted.exit_code !== 0) {
425
+ throw new Error(`Could not extract local toolchain archive: ${extracted.stderr_tail.join("\n")}`);
426
+ }
427
+ return {
428
+ path: await findReleaseRoot(extractRoot),
429
+ source: { kind: "url", value: options.sourceUrl, downloaded_path: downloadedPath }
430
+ };
431
+ }
432
+ if (await pathExists(DEFAULT_RELEASE_ROOT)) {
433
+ return {
434
+ path: resolve(DEFAULT_RELEASE_ROOT),
435
+ source: { kind: "directory", value: resolve(DEFAULT_RELEASE_ROOT) }
436
+ };
437
+ }
438
+ throw new Error("Local toolchain install needs --source-url <tar.gz> or --source-release-root <path> until the public download service is configured.");
439
+ }
440
+ async function downloadToolchainArchive(sourceUrl, installRoot) {
441
+ const downloadsDir = join(installRoot, "cache", "downloads");
442
+ await mkdir(downloadsDir, { recursive: true });
443
+ const parsed = new URL(sourceUrl);
444
+ const filename = basename(parsed.pathname) || `local-toolchain-${Date.now()}.tar.gz`;
445
+ const outputPath = join(downloadsDir, filename);
446
+ if (parsed.protocol === "file:") {
447
+ await cp(parsed.pathname, outputPath, { force: true });
448
+ return outputPath;
449
+ }
450
+ const response = await fetch(sourceUrl);
451
+ if (!response.ok) {
452
+ throw new Error(`Local toolchain download failed with HTTP ${response.status}: ${sourceUrl}`);
453
+ }
454
+ const bytes = Buffer.from(await response.arrayBuffer());
455
+ await writeFile(outputPath, bytes);
456
+ return outputPath;
457
+ }
458
+ async function findReleaseRoot(extractRoot) {
459
+ if (await pathExists(join(extractRoot, "toolchain"))) {
460
+ return extractRoot;
461
+ }
462
+ const entries = await readdir(extractRoot);
463
+ for (const entry of entries) {
464
+ const candidate = join(extractRoot, entry);
465
+ try {
466
+ const info = await stat(candidate);
467
+ if (info.isDirectory() && await pathExists(join(candidate, "toolchain"))) {
468
+ return candidate;
469
+ }
470
+ }
471
+ catch {
472
+ // Ignore entries that disappear during extraction cleanup.
473
+ }
474
+ }
475
+ throw new Error("Downloaded local toolchain archive did not contain a release root with toolchain/.");
476
+ }
477
+ function compilerForSource(releaseRoot, sourcePath) {
478
+ const extension = extname(sourcePath).toLowerCase();
479
+ const binDir = join(releaseRoot, "toolchain", "llvm-cross", "bin");
480
+ if (extension === ".c") {
481
+ return join(binDir, "aarch64-linux-gnu-gcc");
482
+ }
483
+ if ([".cc", ".cpp", ".cxx"].includes(extension)) {
484
+ return join(binDir, "aarch64-linux-gnu-g++");
485
+ }
486
+ throw new Error(`Unsupported source extension ${extension || "<none>"}; use .c, .cc, .cpp, or .cxx.`);
487
+ }
488
+ async function localCompileResult(input) {
489
+ await access(input.artifactPath, constants.R_OK);
490
+ const artifactInfo = await stat(input.artifactPath);
491
+ const artifactSha256 = await sha256(input.artifactPath);
492
+ const fileInfo = await fileInfoFor(input.artifactPath);
493
+ const manifestPath = `${input.artifactPath}.embedlabs-local-build.json`;
494
+ const result = {
495
+ board_id: input.boardId,
496
+ operation: input.operation,
497
+ release_root: input.releaseRoot,
498
+ account_id: input.accountId,
499
+ auth: input.auth,
500
+ source_path: input.sourcePath,
501
+ build_dir: input.buildDir,
502
+ artifact_path: input.artifactPath,
503
+ artifact_name: basename(input.artifactPath),
504
+ artifact_size_bytes: artifactInfo.size,
505
+ artifact_sha256: artifactSha256,
506
+ file_info: fileInfo,
507
+ commands: input.commands,
508
+ manifest_path: manifestPath
509
+ };
510
+ await writeFile(manifestPath, `${JSON.stringify(result, null, 2)}\n`, "utf8");
511
+ return result;
512
+ }
513
+ function assertAuthenticated(auth) {
514
+ if (!auth.authenticated) {
515
+ throw new Error("Embed Labs auth is required for local toolchain builds. Run: embedlabs auth login --token <user-api-key>");
516
+ }
517
+ }
518
+ async function runCommand(command, cwd) {
519
+ return await new Promise((resolve) => {
520
+ const child = spawn(command[0], command.slice(1), {
521
+ cwd,
522
+ env: process.env,
523
+ stdio: ["ignore", "pipe", "pipe"]
524
+ });
525
+ let stdout = "";
526
+ let stderr = "";
527
+ child.stdout.setEncoding("utf8");
528
+ child.stderr.setEncoding("utf8");
529
+ child.stdout.on("data", (chunk) => {
530
+ stdout += chunk;
531
+ });
532
+ child.stderr.on("data", (chunk) => {
533
+ stderr += chunk;
534
+ });
535
+ child.on("error", (error) => {
536
+ stderr += `${error.message}\n`;
537
+ resolve({
538
+ command,
539
+ cwd,
540
+ exit_code: 127,
541
+ stdout_tail: [],
542
+ stderr_tail: tailLines(stderr)
543
+ });
544
+ });
545
+ child.on("close", (code) => {
546
+ resolve({
547
+ command,
548
+ cwd,
549
+ exit_code: code ?? 1,
550
+ stdout_tail: tailLines(stdout),
551
+ stderr_tail: tailLines(stderr)
552
+ });
553
+ });
554
+ });
555
+ }
556
+ async function fileInfoFor(filePath) {
557
+ const result = await runCommand(["file", filePath], dirname(filePath));
558
+ return result.exit_code === 0 ? result.stdout_tail.join("\n") : undefined;
559
+ }
560
+ async function sha256(filePath) {
561
+ const content = await readFile(filePath);
562
+ return createHash("sha256").update(content).digest("hex");
563
+ }
564
+ async function pathExists(filePath) {
565
+ try {
566
+ await access(filePath);
567
+ return true;
568
+ }
569
+ catch {
570
+ return false;
571
+ }
572
+ }
573
+ function tailLines(text, maxLines = 80) {
574
+ return text.trim().split(/\r?\n/).filter(Boolean).slice(-maxLines);
575
+ }
576
+ //# sourceMappingURL=local-toolchain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-toolchain.js","sourceRoot":"","sources":["../src/local-toolchain.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kvell007/embed-labs-cli",
3
- "version": "0.1.0-alpha.2",
3
+ "version": "0.1.0-alpha.4",
4
4
  "description": "Command-line interface for Embed Labs Cloud. Experimental npm publish.",
5
5
  "private": false,
6
6
  "type": "module",
@@ -14,11 +14,12 @@
14
14
  "node": ">=20"
15
15
  },
16
16
  "bin": {
17
- "embed": "dist/index.js"
17
+ "embed": "dist/index.js",
18
+ "embedlabs": "dist/index.js"
18
19
  },
19
20
  "dependencies": {
20
- "@embed-labs/local-bridge": "npm:@kvell007/embed-labs-local-bridge@0.1.0-alpha.2",
21
- "@embed-labs/protocol": "npm:@kvell007/embed-labs-protocol@0.1.0-alpha.2",
21
+ "@embed-labs/local-bridge": "npm:@kvell007/embed-labs-local-bridge@0.1.0-alpha.4",
22
+ "@embed-labs/protocol": "npm:@kvell007/embed-labs-protocol@0.1.0-alpha.4",
22
23
  "qrcode-terminal": "^0.12.0"
23
24
  },
24
25
  "publishConfig": {