@kvell007/embed-labs-local-bridge 0.1.0-alpha.21 → 0.1.0-alpha.22

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 (50) hide show
  1. package/README.md +16 -11
  2. package/dist/index.d.ts +2 -1
  3. package/dist/index.js +125 -4
  4. package/package.json +8 -4
  5. package/dist/adapters/debug.d.ts +0 -2
  6. package/dist/adapters/debug.js +0 -124
  7. package/dist/adapters/debug.js.map +0 -1
  8. package/dist/adapters/deploy.d.ts +0 -5
  9. package/dist/adapters/deploy.js +0 -132
  10. package/dist/adapters/deploy.js.map +0 -1
  11. package/dist/adapters/flash.d.ts +0 -3
  12. package/dist/adapters/flash.js +0 -169
  13. package/dist/adapters/flash.js.map +0 -1
  14. package/dist/adapters/logo.d.ts +0 -2
  15. package/dist/adapters/logo.js +0 -108
  16. package/dist/adapters/logo.js.map +0 -1
  17. package/dist/adapters/network.d.ts +0 -22
  18. package/dist/adapters/network.js +0 -64
  19. package/dist/adapters/network.js.map +0 -1
  20. package/dist/adapters/rp2350-monitor.d.ts +0 -121
  21. package/dist/adapters/rp2350-monitor.js +0 -404
  22. package/dist/adapters/rp2350-monitor.js.map +0 -1
  23. package/dist/adapters/serial.d.ts +0 -3
  24. package/dist/adapters/serial.js +0 -133
  25. package/dist/adapters/serial.js.map +0 -1
  26. package/dist/adapters/taishanpi-live.d.ts +0 -163
  27. package/dist/adapters/taishanpi-live.js +0 -349
  28. package/dist/adapters/taishanpi-live.js.map +0 -1
  29. package/dist/adapters/uf2.d.ts +0 -1
  30. package/dist/adapters/uf2.js +0 -53
  31. package/dist/adapters/uf2.js.map +0 -1
  32. package/dist/adapters/usb.d.ts +0 -3
  33. package/dist/adapters/usb.js +0 -102
  34. package/dist/adapters/usb.js.map +0 -1
  35. package/dist/hardware.d.ts +0 -19
  36. package/dist/hardware.js +0 -417
  37. package/dist/hardware.js.map +0 -1
  38. package/dist/index.js.map +0 -1
  39. package/dist/jobs.d.ts +0 -4
  40. package/dist/jobs.js +0 -125
  41. package/dist/jobs.js.map +0 -1
  42. package/dist/process.d.ts +0 -13
  43. package/dist/process.js +0 -128
  44. package/dist/process.js.map +0 -1
  45. package/dist/server.d.ts +0 -7
  46. package/dist/server.js +0 -399
  47. package/dist/server.js.map +0 -1
  48. package/dist/tools.d.ts +0 -3
  49. package/dist/tools.js +0 -1254
  50. package/dist/tools.js.map +0 -1
@@ -1,169 +0,0 @@
1
- import { createHash } from "node:crypto";
2
- import { createReadStream } from "node:fs";
3
- import { copyFile, stat } from "node:fs/promises";
4
- import { basename, join } from "node:path";
5
- import { commandExists } from "../process.js";
6
- import { findUf2Volumes } from "./uf2.js";
7
- export async function buildFlashPlan(request) {
8
- if (request.board_id === "rp2350") {
9
- return buildRp2350FlashPlan(request);
10
- }
11
- if (request.board_id === "taishanpi") {
12
- return buildTaishanPiFlashPlan(request);
13
- }
14
- return {
15
- plan_id: `plan_${Date.now()}`,
16
- board_id: request.board_id,
17
- profile_id: request.profile_id ?? "unknown",
18
- destructive: true,
19
- approval_required: true,
20
- ready: false,
21
- summary: `No flash planner is available for board_id=${request.board_id}.`,
22
- warnings: [{
23
- code: "board_not_supported",
24
- message: `No local bridge flash planner is available for ${request.board_id}.`
25
- }]
26
- };
27
- }
28
- export async function executeRp2350Uf2Flash(plan) {
29
- if (!plan.artifact_path || !plan.target_volume_path) {
30
- throw new Error("RP2350 UF2 flash requires artifact_path and target_volume_path.");
31
- }
32
- const target = join(plan.target_volume_path, basename(plan.artifact_path));
33
- await copyFile(plan.artifact_path, target);
34
- return {
35
- copied_to: target,
36
- summary_for_user: `Copied UF2 artifact to ${plan.target_volume_path}. The board should reboot automatically if the UF2 volume accepted the file.`
37
- };
38
- }
39
- async function buildRp2350FlashPlan(request) {
40
- const missingFiles = [];
41
- const artifactPath = request.artifact_path;
42
- if (!artifactPath) {
43
- missingFiles.push("artifact_path");
44
- }
45
- else if (!artifactPath.endsWith(".uf2")) {
46
- missingFiles.push(`${artifactPath} must be a .uf2 artifact`);
47
- }
48
- else {
49
- try {
50
- await stat(artifactPath);
51
- }
52
- catch {
53
- missingFiles.push(artifactPath);
54
- }
55
- }
56
- const volumes = request.target_volume_path ? [request.target_volume_path] : await findUf2Volumes();
57
- const targetVolumePath = volumes[0];
58
- if (!targetVolumePath) {
59
- missingFiles.push("RP2350 UF2 boot volume");
60
- }
61
- return {
62
- plan_id: `plan_${Date.now()}_rp2350`,
63
- board_id: "rp2350",
64
- variant_id: request.variant_id,
65
- profile_id: request.profile_id ?? "uf2-flash-local",
66
- destructive: true,
67
- approval_required: true,
68
- ready: missingFiles.length === 0,
69
- summary: missingFiles.length === 0
70
- ? `Ready to copy ${artifactPath} to RP2350 UF2 volume ${targetVolumePath}.`
71
- : "RP2350 UF2 flash is not ready.",
72
- artifact_path: artifactPath,
73
- target_volume_path: targetVolumePath,
74
- missing_files: missingFiles,
75
- warnings: missingFiles.length > 0 ? [{
76
- code: "flash_plan_not_ready",
77
- message: "RP2350 UF2 flash requires a .uf2 artifact and a mounted BOOTSEL/UF2 volume."
78
- }] : undefined
79
- };
80
- }
81
- async function buildTaishanPiFlashPlan(request) {
82
- const imageDir = request.image_dir;
83
- const missingFiles = [];
84
- const required = [
85
- "MiniLoaderAll.bin",
86
- "parameter.txt",
87
- "uboot.img",
88
- "boot.img",
89
- "rootfs.img",
90
- "userdata.img"
91
- ];
92
- const optional = ["misc.img", "recovery.img", "oem.img"];
93
- const partitions = [];
94
- if (!imageDir) {
95
- missingFiles.push("image_dir");
96
- }
97
- else {
98
- for (const name of required) {
99
- const path = join(imageDir, name);
100
- try {
101
- const fileStat = await stat(path);
102
- partitions.push({
103
- partition: partitionName(name),
104
- image_path: path,
105
- required: true,
106
- size_bytes: fileStat.size,
107
- sha256: await sha256(path)
108
- });
109
- }
110
- catch {
111
- missingFiles.push(path);
112
- }
113
- }
114
- for (const name of optional) {
115
- const path = join(imageDir, name);
116
- try {
117
- const fileStat = await stat(path);
118
- partitions.push({
119
- partition: partitionName(name),
120
- image_path: path,
121
- required: false,
122
- size_bytes: fileStat.size,
123
- sha256: await sha256(path)
124
- });
125
- }
126
- catch {
127
- // Optional image.
128
- }
129
- }
130
- }
131
- const missingTools = [];
132
- if (!await commandExists("rkdeveloptool")) {
133
- missingTools.push("rkdeveloptool");
134
- }
135
- return {
136
- plan_id: `plan_${Date.now()}_taishanpi`,
137
- board_id: "taishanpi",
138
- variant_id: request.variant_id,
139
- hardware_profile_id: request.hardware_profile_id,
140
- profile_id: request.profile_id ?? "rk356x-full-image-local",
141
- destructive: true,
142
- approval_required: true,
143
- ready: missingFiles.length === 0 && missingTools.length === 0,
144
- summary: missingFiles.length === 0 && missingTools.length === 0
145
- ? `TaishanPi image set is complete. Destructive flash still requires explicit approval.`
146
- : "TaishanPi flash plan is not ready; missing images or local tools.",
147
- partitions,
148
- required_tools: ["rkdeveloptool"],
149
- missing_tools: missingTools,
150
- missing_files: missingFiles,
151
- warnings: [{
152
- code: "taishanpi_flash_guardrail",
153
- message: "TaishanPi real flashing is intentionally blocked until exact hardware_profile and Board Pack command templates are accepted.",
154
- remediation: "Use this plan as validation evidence. Enable real TaishanPi flash only after EL-010 profile commands are reviewed."
155
- }]
156
- };
157
- }
158
- function partitionName(fileName) {
159
- return fileName.replace(/\.img$|\.bin$|\.txt$/g, "").replace("MiniLoaderAll", "loader");
160
- }
161
- async function sha256(path) {
162
- const hash = createHash("sha256");
163
- const stream = createReadStream(path);
164
- for await (const chunk of stream) {
165
- hash.update(chunk);
166
- }
167
- return hash.digest("hex");
168
- }
169
- //# sourceMappingURL=flash.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flash.js","sourceRoot":"","sources":["../../src/adapters/flash.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import type { BootLogoModifyRequest, BootLogoModifyResult } from "@embed-labs/protocol";
2
- export declare function prepareBootLogoModification(request: BootLogoModifyRequest): Promise<BootLogoModifyResult>;
@@ -1,108 +0,0 @@
1
- import { createHash, randomUUID } from "node:crypto";
2
- import { createReadStream } from "node:fs";
3
- import { copyFile, mkdir, mkdtemp, stat, writeFile } from "node:fs/promises";
4
- import { tmpdir } from "node:os";
5
- import { basename, extname, join, parse, resolve } from "node:path";
6
- export async function prepareBootLogoModification(request) {
7
- const observedAt = new Date().toISOString();
8
- const logoPath = resolve(request.logo_path);
9
- const logoStat = await requireRegularFile(logoPath, "logo_path");
10
- const kernelLogoPath = request.kernel_logo_path ? resolve(request.kernel_logo_path) : undefined;
11
- const kernelLogoStat = kernelLogoPath ? await requireRegularFile(kernelLogoPath, "kernel_logo_path") : undefined;
12
- const inputImagePath = request.image_path ? resolve(request.image_path) : undefined;
13
- const inputImageStat = inputImagePath ? await requireRegularFile(inputImagePath, "image_path") : undefined;
14
- const outputDir = request.output_dir
15
- ? resolve(request.output_dir)
16
- : await mkdtemp(join(tmpdir(), "embed-boot-logo-"));
17
- await mkdir(outputDir, { recursive: true });
18
- const unique = `${Date.now()}-${randomUUID().slice(0, 8)}`;
19
- const sourceName = inputImagePath ? basename(inputImagePath) : "boot-logo-manifest.json";
20
- const requestedStem = request.output_name ? parse(request.output_name).name : parse(sourceName).name;
21
- const safeStem = safeFileStem(requestedStem || "boot-logo");
22
- const imageExtension = inputImagePath ? extname(inputImagePath) || ".img" : undefined;
23
- const modifiedImagePath = inputImagePath ? join(outputDir, `${safeStem}-${unique}${imageExtension}`) : undefined;
24
- const manifestPath = join(outputDir, `${safeStem}-${unique}.boot-logo.json`);
25
- const logoSha256 = await sha256(logoPath);
26
- const kernelLogoSha256 = kernelLogoPath ? await sha256(kernelLogoPath) : undefined;
27
- const inputImageSha256 = inputImagePath ? await sha256(inputImagePath) : undefined;
28
- if (inputImagePath && modifiedImagePath) {
29
- await copyFile(inputImagePath, modifiedImagePath);
30
- }
31
- const manifest = {
32
- schema_version: "0.1",
33
- kind: "boot-logo-modification",
34
- mode: "local_manifest_mvp",
35
- replacement_applied: false,
36
- board_id: request.board_id,
37
- variant_id: request.variant_id,
38
- input_image_path: inputImagePath,
39
- modified_image_path: modifiedImagePath,
40
- logo_path: logoPath,
41
- kernel_logo_path: kernelLogoPath,
42
- rotate: request.rotate,
43
- scale: request.scale,
44
- input_image_sha256: inputImageSha256,
45
- input_image_size_bytes: inputImageStat?.size,
46
- logo_sha256: logoSha256,
47
- logo_size_bytes: logoStat.size,
48
- kernel_logo_sha256: kernelLogoSha256,
49
- kernel_logo_size_bytes: kernelLogoStat?.size,
50
- free_for_registered_users: true,
51
- requires_server_workspace: false,
52
- observed_at: observedAt,
53
- notes: [
54
- "This local free operation validates inputs and creates an isolated artifact bundle for boot-logo replacement.",
55
- "It does not allocate a server workspace and does not flash a board.",
56
- "Board-profile repack/flash workers must consume this manifest before writing a boot partition."
57
- ]
58
- };
59
- await writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`, "utf8");
60
- return {
61
- board_id: request.board_id,
62
- variant_id: request.variant_id,
63
- modified_image_path: modifiedImagePath,
64
- manifest_path: manifestPath,
65
- input_image_path: inputImagePath,
66
- logo_path: logoPath,
67
- kernel_logo_path: kernelLogoPath,
68
- output_dir: outputDir,
69
- input_image_sha256: inputImageSha256,
70
- logo_sha256: logoSha256,
71
- kernel_logo_sha256: kernelLogoSha256,
72
- bytes: inputImageStat?.size,
73
- destructive: false,
74
- approval_required: false,
75
- requires_server_workspace: false,
76
- free_for_registered_users: true,
77
- observed_at: observedAt,
78
- summary_for_user: inputImagePath
79
- ? `Prepared an isolated boot-logo replacement bundle for ${request.board_id}; copied the input image and wrote a manifest without allocating server resources.`
80
- : `Prepared a boot-logo replacement manifest for ${request.board_id} without allocating server resources.`
81
- };
82
- }
83
- async function requireRegularFile(path, fieldName) {
84
- let fileStat;
85
- try {
86
- fileStat = await stat(path);
87
- }
88
- catch {
89
- throw new Error(`${fieldName} does not exist: ${path}`);
90
- }
91
- if (!fileStat.isFile()) {
92
- throw new Error(`${fieldName} must point to a regular file: ${path}`);
93
- }
94
- return { size: fileStat.size };
95
- }
96
- function safeFileStem(value) {
97
- const cleaned = value.trim().replace(/[^A-Za-z0-9._-]+/g, "-").replace(/^-+|-+$/g, "");
98
- return cleaned.slice(0, 80) || "boot-logo";
99
- }
100
- async function sha256(path) {
101
- const hash = createHash("sha256");
102
- const stream = createReadStream(path);
103
- for await (const chunk of stream) {
104
- hash.update(chunk);
105
- }
106
- return hash.digest("hex");
107
- }
108
- //# sourceMappingURL=logo.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logo.js","sourceRoot":"","sources":["../../src/adapters/logo.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- import type { TcpProbeEvidence } from "@embed-labs/protocol";
2
- export declare function probeTcp(host: string, port: number, timeoutMs: number): Promise<boolean>;
3
- export declare function probeTcpWithEvidence(host: string, port: number, timeoutMs: number, observedAt: string): Promise<TcpProbeEvidence>;
4
- export declare function runBoundedSsh(host: string, user: string, command: string, timeoutSeconds?: number): Promise<{
5
- readonly ok: false;
6
- readonly error: {
7
- readonly code: "ssh_not_found";
8
- readonly message: "ssh binary was not found on PATH.";
9
- readonly remediation: "Install OpenSSH client or add ssh to PATH.";
10
- };
11
- exit_code?: undefined;
12
- stdout?: undefined;
13
- stderr?: undefined;
14
- output_tail?: undefined;
15
- } | {
16
- ok: boolean;
17
- exit_code: number | null;
18
- stdout: string;
19
- stderr: string;
20
- output_tail: string[];
21
- readonly error?: undefined;
22
- }>;
@@ -1,64 +0,0 @@
1
- import net from "node:net";
2
- import { commandExists, runCommand, tailLines } from "../process.js";
3
- export async function probeTcp(host, port, timeoutMs) {
4
- const evidence = await probeTcpWithEvidence(host, port, timeoutMs, new Date().toISOString());
5
- return evidence.reachable;
6
- }
7
- export async function probeTcpWithEvidence(host, port, timeoutMs, observedAt) {
8
- return new Promise((resolve) => {
9
- const startedAt = Date.now();
10
- const socket = new net.Socket();
11
- let settled = false;
12
- const done = (value, error) => {
13
- if (settled) {
14
- return;
15
- }
16
- settled = true;
17
- socket.destroy();
18
- resolve({
19
- transport: "tcp",
20
- host,
21
- port,
22
- reachable: value,
23
- duration_ms: Date.now() - startedAt,
24
- observed_at: observedAt,
25
- error_code: error?.code,
26
- error_message: error?.message
27
- });
28
- };
29
- socket.setTimeout(timeoutMs);
30
- socket.once("connect", () => done(true));
31
- socket.once("timeout", () => done(false, Object.assign(new Error(`Timed out after ${timeoutMs}ms.`), { code: "timeout" })));
32
- socket.once("error", (error) => done(false, error));
33
- socket.connect(port, host);
34
- });
35
- }
36
- export async function runBoundedSsh(host, user, command, timeoutSeconds = 15) {
37
- const sshExists = await commandExists("ssh");
38
- if (!sshExists) {
39
- return {
40
- ok: false,
41
- error: {
42
- code: "ssh_not_found",
43
- message: "ssh binary was not found on PATH.",
44
- remediation: "Install OpenSSH client or add ssh to PATH."
45
- }
46
- };
47
- }
48
- const result = await runCommand("ssh", [
49
- "-o", "BatchMode=yes",
50
- "-o", "UserKnownHostsFile=/dev/null",
51
- "-o", "StrictHostKeyChecking=no",
52
- "-o", `ConnectTimeout=${Math.max(1, Math.min(timeoutSeconds, 30))}`,
53
- `${user}@${host}`,
54
- command
55
- ], timeoutSeconds * 1000 + 1000);
56
- return {
57
- ok: result.exit_code === 0,
58
- exit_code: result.exit_code,
59
- stdout: result.stdout,
60
- stderr: result.stderr,
61
- output_tail: tailLines(`${result.stdout}\n${result.stderr}`)
62
- };
63
- }
64
- //# sourceMappingURL=network.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/adapters/network.ts"],"names":[],"mappings":"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"}
@@ -1,121 +0,0 @@
1
- import type { DeviceSummary, ErrorEnvelope, SerialPortInfo } from "@embed-labs/protocol";
2
- export declare const RP2350_MONITOR_READ_ONLY_COMMANDS: Set<string>;
3
- export declare const RP2350_MONITOR_CONTROL_COMMANDS: Set<string>;
4
- export declare const RP2350_MONITOR_ALLOWED_COMMANDS: Set<string>;
5
- export interface Rp2350MonitorBaseRequest {
6
- transport?: "auto" | "serial" | "tcp";
7
- serial_path?: string;
8
- host?: string;
9
- port?: number;
10
- baud?: number;
11
- timeout_ms?: number;
12
- monitor_root?: string;
13
- }
14
- export interface Rp2350MonitorStatusRequest extends Rp2350MonitorBaseRequest {
15
- include_caps?: boolean;
16
- }
17
- export interface Rp2350MonitorCommandRequest extends Rp2350MonitorBaseRequest {
18
- command: string;
19
- args?: string[];
20
- }
21
- export interface Rp2350MonitorLogicCaptureRequest extends Rp2350MonitorBaseRequest {
22
- pin_base: number;
23
- pin_count: number;
24
- sample_rate?: number;
25
- samples?: number;
26
- output_path?: string;
27
- pull?: "none" | "up" | "down";
28
- release?: boolean;
29
- wait_timeout_ms?: number;
30
- read_timeout_ms?: number;
31
- pre_samples?: number;
32
- post_samples?: number;
33
- search_samples?: number;
34
- burst_count?: number;
35
- trigger_pin?: number;
36
- trigger_mode?: "level" | "rising" | "falling" | "pattern";
37
- trigger_level?: boolean;
38
- trigger_mask?: number;
39
- trigger_value?: number;
40
- channel_names?: Record<string, string>;
41
- pin_pulls?: Record<string, "none" | "up" | "down">;
42
- }
43
- export interface Rp2350MonitorLogicDecodeRequest {
44
- input_path: string;
45
- decoder?: "summary" | "bursts" | "edges" | "uart" | "spi" | "i2c";
46
- output_path?: string;
47
- capture_id?: number;
48
- start_sample?: number;
49
- end_sample?: number;
50
- pins?: number[];
51
- rx_pin?: number;
52
- baud?: number;
53
- data_bits?: number;
54
- parity?: "none" | "even" | "odd";
55
- stop_bits?: number;
56
- invert?: boolean;
57
- sck_pin?: number;
58
- mosi_pin?: number;
59
- miso_pin?: number;
60
- cs_pin?: number;
61
- mode?: 0 | 1 | 2 | 3;
62
- cs_active_high?: boolean;
63
- word_bits?: number;
64
- bit_order?: "msb" | "lsb";
65
- sda_pin?: number;
66
- scl_pin?: number;
67
- monitor_root?: string;
68
- }
69
- interface ResolvedTransport {
70
- transport: "serial" | "tcp";
71
- serial_path?: string;
72
- host?: string;
73
- port?: number;
74
- baud?: number;
75
- discovery?: Record<string, unknown>;
76
- }
77
- interface RpmonRunResult {
78
- ok: boolean;
79
- exit_code: number | null;
80
- timed_out: boolean;
81
- command: string[];
82
- stdout_json: Record<string, unknown>[];
83
- stderr_json: Record<string, unknown>[];
84
- stdout_tail: string[];
85
- stderr_tail: string[];
86
- transport?: ResolvedTransport;
87
- output_path?: string;
88
- summary_for_user: string;
89
- }
90
- export declare function rp2350MonitorCommandNeedsApproval(command: string): boolean;
91
- export declare function discoverRp2350Monitors(serialPorts?: SerialPortInfo[]): Promise<{
92
- devices: DeviceSummary[];
93
- warnings: ErrorEnvelope[];
94
- }>;
95
- export declare function getRp2350MonitorStatus(request: Rp2350MonitorStatusRequest): Promise<{
96
- ok: boolean;
97
- transport: ResolvedTransport;
98
- commands: RpmonRunResult[];
99
- summary_for_user: string;
100
- observed_at: string;
101
- }>;
102
- export declare function runRp2350MonitorCommand(request: Rp2350MonitorCommandRequest): Promise<RpmonRunResult | {
103
- ok: boolean;
104
- error_code: string;
105
- message: string;
106
- }>;
107
- export declare function captureRp2350MonitorLogic(request: Rp2350MonitorLogicCaptureRequest): Promise<{
108
- output_path: string;
109
- summary_for_user: string;
110
- ok: boolean;
111
- exit_code: number | null;
112
- timed_out: boolean;
113
- command: string[];
114
- stdout_json: Record<string, unknown>[];
115
- stderr_json: Record<string, unknown>[];
116
- stdout_tail: string[];
117
- stderr_tail: string[];
118
- transport?: ResolvedTransport;
119
- }>;
120
- export declare function decodeRp2350MonitorLogic(request: Rp2350MonitorLogicDecodeRequest): Promise<RpmonRunResult>;
121
- export {};