crewx-bridge 0.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.
Files changed (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +102 -0
  3. package/dist/api.d.ts +16 -0
  4. package/dist/api.d.ts.map +1 -0
  5. package/dist/api.js +157 -0
  6. package/dist/api.js.map +1 -0
  7. package/dist/config.d.ts +83 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +233 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/constants.d.ts +7 -0
  12. package/dist/constants.d.ts.map +1 -0
  13. package/dist/constants.js +13 -0
  14. package/dist/constants.js.map +1 -0
  15. package/dist/daemon.d.ts +36 -0
  16. package/dist/daemon.d.ts.map +1 -0
  17. package/dist/daemon.js +313 -0
  18. package/dist/daemon.js.map +1 -0
  19. package/dist/errors.d.ts +8 -0
  20. package/dist/errors.d.ts.map +1 -0
  21. package/dist/errors.js +32 -0
  22. package/dist/errors.js.map +1 -0
  23. package/dist/folders.d.ts +13 -0
  24. package/dist/folders.d.ts.map +1 -0
  25. package/dist/folders.js +63 -0
  26. package/dist/folders.js.map +1 -0
  27. package/dist/index.d.ts +15 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +322 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/journal.d.ts +76 -0
  32. package/dist/journal.d.ts.map +1 -0
  33. package/dist/journal.js +106 -0
  34. package/dist/journal.js.map +1 -0
  35. package/dist/policy.d.ts +4 -0
  36. package/dist/policy.d.ts.map +1 -0
  37. package/dist/policy.js +19 -0
  38. package/dist/policy.js.map +1 -0
  39. package/dist/service.d.ts +45 -0
  40. package/dist/service.d.ts.map +1 -0
  41. package/dist/service.js +221 -0
  42. package/dist/service.js.map +1 -0
  43. package/dist/supervisor.d.ts +23 -0
  44. package/dist/supervisor.d.ts.map +1 -0
  45. package/dist/supervisor.js +149 -0
  46. package/dist/supervisor.js.map +1 -0
  47. package/package.json +52 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,UAAU,CAAC;AACtC,eAAO,MAAM,kCAAkC,KAAK,CAAC;AACrD,eAAO,MAAM,wBAAwB,OAAQ,CAAC;AAC9C,eAAO,MAAM,kBAAkB,QAAS,CAAC;AACzC,eAAO,MAAM,cAAc,EAAG,CAAU,CAAC;AACzC,eAAO,MAAM,QAAQ,0DAMX,CAAC"}
@@ -0,0 +1,13 @@
1
+ export const BRIDGE_VERSION = "0.1.0";
2
+ export const DEFAULT_HEARTBEAT_INTERVAL_SECONDS = 15;
3
+ export const DEFAULT_POLL_INTERVAL_MS = 3_000;
4
+ export const REQUEST_TIMEOUT_MS = 15_000;
5
+ export const CONFIG_VERSION = 1;
6
+ export const ADAPTERS = [
7
+ "codex",
8
+ "claude",
9
+ "pi",
10
+ "hermes",
11
+ "openclaw",
12
+ ];
13
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AACtC,MAAM,CAAC,MAAM,kCAAkC,GAAG,EAAE,CAAC;AACrD,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAC9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AACzC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAU,CAAC;AACzC,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,OAAO;IACP,QAAQ;IACR,IAAI;IACJ,QAAQ;IACR,UAAU;CACF,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { type AgentAdapter, type BridgeCapabilities, type BridgeClaimedCommand, type BridgePolicySummary } from "crewx-agent-protocol";
2
+ import { BridgeApi } from "./api.js";
3
+ import { type BridgeConfig } from "./config.js";
4
+ import { BridgeJournal } from "./journal.js";
5
+ import { ProcessSupervisor } from "./supervisor.js";
6
+ export type BridgeLog = (message: string) => void;
7
+ export declare function probeCapabilities(): Promise<BridgeCapabilities>;
8
+ export declare function policySummary(config: BridgeConfig): BridgePolicySummary;
9
+ export declare class BridgeDaemon {
10
+ readonly config: BridgeConfig;
11
+ readonly api: BridgeApi;
12
+ readonly journal: BridgeJournal;
13
+ readonly supervisor: ProcessSupervisor;
14
+ readonly capabilities: BridgeCapabilities;
15
+ readonly log: BridgeLog;
16
+ private lastHeartbeat;
17
+ constructor(config: BridgeConfig, api: BridgeApi, journal: BridgeJournal, supervisor: ProcessSupervisor, capabilities: BridgeCapabilities, log?: BridgeLog);
18
+ initialize(): Promise<void>;
19
+ heartbeat(): Promise<void>;
20
+ tick(): Promise<number>;
21
+ execute(command: BridgeClaimedCommand): Promise<void>;
22
+ private start;
23
+ private stop;
24
+ }
25
+ export declare function runBridge(options: {
26
+ config: BridgeConfig;
27
+ once?: boolean;
28
+ signal?: AbortSignal;
29
+ api?: BridgeApi;
30
+ journal?: BridgeJournal;
31
+ supervisor?: ProcessSupervisor;
32
+ capabilities?: BridgeCapabilities;
33
+ log?: BridgeLog;
34
+ }): Promise<void>;
35
+ export declare function supportedAdapters(): readonly AgentAdapter[];
36
+ //# sourceMappingURL=daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EAGzB,KAAK,mBAAmB,EACzB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAwBlD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAYrE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,mBAAmB,CAOvE;AAYD,qBAAa,YAAY;IAIrB,QAAQ,CAAC,MAAM,EAAE,YAAY;IAC7B,QAAQ,CAAC,GAAG,EAAE,SAAS;IACvB,QAAQ,CAAC,OAAO,EAAE,aAAa;IAC/B,QAAQ,CAAC,UAAU,EAAE,iBAAiB;IACtC,QAAQ,CAAC,YAAY,EAAE,kBAAkB;IACzC,QAAQ,CAAC,GAAG,EAAE,SAAS;IARzB,OAAO,CAAC,aAAa,CAAK;gBAGf,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,iBAAiB,EAC7B,YAAY,EAAE,kBAAkB,EAChC,GAAG,GAAE,SAA2B;IAGrC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAuC1B,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAavB,OAAO,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;YA+C7C,KAAK;YAyEL,IAAI;CA6CnB;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE;IACvC,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,GAAG,CAAC,EAAE,SAAS,CAAC;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDhB;AAED,wBAAgB,iBAAiB,IAAI,SAAS,YAAY,EAAE,CAE3D"}
package/dist/daemon.js ADDED
@@ -0,0 +1,313 @@
1
+ import { execFile } from "node:child_process";
2
+ import { hostname } from "node:os";
3
+ import { promisify } from "node:util";
4
+ import { BridgeCommandPayloadSchema, } from "crewx-agent-protocol";
5
+ import { BridgeApi } from "./api.js";
6
+ import { BRIDGE_VERSION, ADAPTERS, DEFAULT_POLL_INTERVAL_MS } from "./constants.js";
7
+ import { BridgeError, errorMessage, redactSecrets } from "./errors.js";
8
+ import { folderDescriptors, verifyLaunchFolder } from "./folders.js";
9
+ import { BridgeJournal } from "./journal.js";
10
+ import { validateStartPolicy } from "./policy.js";
11
+ import { ProcessSupervisor } from "./supervisor.js";
12
+ const execFileAsync = promisify(execFile);
13
+ async function probeRuntime(adapter) {
14
+ try {
15
+ const result = await execFileAsync(adapter, ["--version"], {
16
+ encoding: "utf8",
17
+ timeout: 5_000,
18
+ maxBuffer: 64 * 1024,
19
+ });
20
+ const output = `${result.stdout}\n${result.stderr}`;
21
+ const version = output.match(/\b\d+(?:\.\d+){1,3}(?:[-+][0-9A-Za-z._-]+)?\b/)?.[0];
22
+ return { available: true, ...(version ? { version } : {}) };
23
+ }
24
+ catch {
25
+ return { available: false };
26
+ }
27
+ }
28
+ export async function probeCapabilities() {
29
+ const runtimes = await Promise.all(ADAPTERS.map(async (adapter) => {
30
+ const result = await probeRuntime(adapter);
31
+ return {
32
+ adapter,
33
+ available: result.available,
34
+ ...(result.version ? { version: result.version } : {}),
35
+ };
36
+ }));
37
+ return { runtimes };
38
+ }
39
+ export function policySummary(config) {
40
+ return {
41
+ allowed_adapters: config.policy.allowedAdapters,
42
+ allowed_permissions: config.policy.allowedPermissions,
43
+ allow_full_access: config.policy.allowFullAccess,
44
+ max_concurrent_runs: config.policy.maxConcurrentRuns,
45
+ };
46
+ }
47
+ function commandResult(runStatus, pid) {
48
+ return {
49
+ run_status: runStatus,
50
+ ...(pid !== undefined ? { pid } : {}),
51
+ };
52
+ }
53
+ export class BridgeDaemon {
54
+ config;
55
+ api;
56
+ journal;
57
+ supervisor;
58
+ capabilities;
59
+ log;
60
+ lastHeartbeat = 0;
61
+ constructor(config, api, journal, supervisor, capabilities, log = () => undefined) {
62
+ this.config = config;
63
+ this.api = api;
64
+ this.journal = journal;
65
+ this.supervisor = supervisor;
66
+ this.capabilities = capabilities;
67
+ this.log = log;
68
+ }
69
+ async initialize() {
70
+ await this.journal.load();
71
+ await this.api.syncFolders({ folders: folderDescriptors(this.config) });
72
+ await this.heartbeat();
73
+ }
74
+ async heartbeat() {
75
+ const runs = [];
76
+ for (const run of this.journal.activeRuns()) {
77
+ if (this.supervisor.isRunning(run.id, run.pid)) {
78
+ runs.push({
79
+ id: run.id,
80
+ status: run.status === "starting" ? "starting" : "running",
81
+ ...(run.pid ? { pid: run.pid } : {}),
82
+ ...(run.startedAt ? { started_at: run.startedAt } : {}),
83
+ });
84
+ }
85
+ else {
86
+ await this.journal.recordRun(run.id, {
87
+ status: "lost",
88
+ pid: run.pid,
89
+ adapter: run.adapter,
90
+ folderId: run.folderId,
91
+ startedAt: run.startedAt,
92
+ });
93
+ runs.push({
94
+ id: run.id,
95
+ status: "lost",
96
+ ...(run.pid ? { pid: run.pid } : {}),
97
+ ...(run.startedAt ? { started_at: run.startedAt } : {}),
98
+ });
99
+ }
100
+ }
101
+ await this.api.heartbeat({
102
+ protocol_version: 1,
103
+ client_version: BRIDGE_VERSION,
104
+ hostname: hostname(),
105
+ platform: process.platform === "darwin" ? "darwin" : "linux",
106
+ arch: process.arch,
107
+ capabilities: this.capabilities,
108
+ policy: policySummary(this.config),
109
+ runs,
110
+ });
111
+ this.lastHeartbeat = Date.now();
112
+ }
113
+ async tick() {
114
+ if (Date.now() - this.lastHeartbeat >=
115
+ this.config.heartbeatInterval * 1_000) {
116
+ await this.heartbeat();
117
+ }
118
+ const response = await this.api.claim();
119
+ if (!response.command)
120
+ return response.retry_after_ms;
121
+ await this.execute(response.command);
122
+ return 250;
123
+ }
124
+ async execute(command) {
125
+ const existing = this.journal.getCommand(command.id);
126
+ if (existing?.state === "succeeded" && existing.result) {
127
+ await this.api.complete(command.id, {
128
+ lease_token: command.lease_token,
129
+ result: existing.result,
130
+ });
131
+ return;
132
+ }
133
+ if (existing?.state === "failed") {
134
+ await this.api.fail(command.id, {
135
+ lease_token: command.lease_token,
136
+ code: existing.errorCode ?? "local_execution_failed",
137
+ message: "This command previously failed locally.",
138
+ });
139
+ return;
140
+ }
141
+ try {
142
+ const payload = BridgeCommandPayloadSchema.parse(command.payload);
143
+ if (payload.type === "start_agent") {
144
+ await this.start(command, payload);
145
+ }
146
+ else {
147
+ await this.stop(command, payload.run_id);
148
+ }
149
+ }
150
+ catch (error) {
151
+ const code = error instanceof BridgeError ? error.code : "invalid_or_failed_command";
152
+ const message = redactSecrets(errorMessage(error), [
153
+ command.lease_token,
154
+ command.secret?.agent_token ?? "",
155
+ ]).slice(0, 1000);
156
+ await this.journal.recordCommand(command.id, {
157
+ state: "failed",
158
+ runId: command.payload.run_id,
159
+ type: command.payload.type,
160
+ errorCode: code,
161
+ });
162
+ await this.api.fail(command.id, {
163
+ lease_token: command.lease_token,
164
+ code,
165
+ message,
166
+ });
167
+ this.log(`Command ${command.id} failed: ${code}.`);
168
+ }
169
+ }
170
+ async start(command, rawPayload) {
171
+ const payload = validateStartPolicy(this.config, rawPayload, this.supervisor.activeCount());
172
+ if (!command.secret) {
173
+ throw new BridgeError("missing_command_secret", "The start command does not include a run credential.");
174
+ }
175
+ const existingRun = this.journal.getRun(payload.run_id);
176
+ const existingCommand = this.journal.getCommand(command.id);
177
+ if (existingCommand?.state === "accepted") {
178
+ if (existingRun?.pid &&
179
+ this.supervisor.isRunning(payload.run_id, existingRun.pid)) {
180
+ const result = commandResult("running", existingRun.pid);
181
+ await this.journal.recordCommand(command.id, {
182
+ state: "succeeded",
183
+ runId: payload.run_id,
184
+ type: "start_agent",
185
+ result,
186
+ });
187
+ await this.api.complete(command.id, {
188
+ lease_token: command.lease_token,
189
+ result,
190
+ });
191
+ return;
192
+ }
193
+ throw new BridgeError("ambiguous_previous_start", "A prior start was accepted but its process cannot be verified; refusing to spawn a duplicate.");
194
+ }
195
+ const folder = await verifyLaunchFolder(this.config, payload.folder_id);
196
+ await this.journal.recordCommand(command.id, {
197
+ state: "accepted",
198
+ runId: payload.run_id,
199
+ type: "start_agent",
200
+ });
201
+ await this.api.acknowledge(command.id, {
202
+ lease_token: command.lease_token,
203
+ });
204
+ const pid = this.supervisor.start(payload, command.secret, folder);
205
+ const startedAt = new Date().toISOString();
206
+ await this.journal.recordRun(payload.run_id, {
207
+ status: "running",
208
+ pid,
209
+ adapter: payload.adapter,
210
+ folderId: payload.folder_id,
211
+ startedAt,
212
+ });
213
+ const result = commandResult("running", pid);
214
+ await this.journal.recordCommand(command.id, {
215
+ state: "succeeded",
216
+ runId: payload.run_id,
217
+ type: "start_agent",
218
+ result,
219
+ });
220
+ await this.api.complete(command.id, {
221
+ lease_token: command.lease_token,
222
+ result,
223
+ });
224
+ this.log(`Started ${payload.adapter} run ${payload.run_id}.`);
225
+ }
226
+ async stop(command, runId) {
227
+ const existing = this.journal.getCommand(command.id);
228
+ const run = this.journal.getRun(runId);
229
+ if (existing?.state === "accepted" && !this.supervisor.isRunning(runId, run?.pid)) {
230
+ const result = commandResult("stopped", run?.pid);
231
+ await this.journal.recordCommand(command.id, {
232
+ state: "succeeded",
233
+ runId,
234
+ type: "stop_agent",
235
+ result,
236
+ });
237
+ await this.api.complete(command.id, {
238
+ lease_token: command.lease_token,
239
+ result,
240
+ });
241
+ return;
242
+ }
243
+ await this.journal.recordCommand(command.id, {
244
+ state: "accepted",
245
+ runId,
246
+ type: "stop_agent",
247
+ });
248
+ await this.api.acknowledge(command.id, {
249
+ lease_token: command.lease_token,
250
+ });
251
+ await this.supervisor.stop(runId, run?.pid);
252
+ if (run) {
253
+ await this.journal.recordRun(runId, { ...run, status: "stopped" });
254
+ }
255
+ const result = commandResult("stopped", run?.pid);
256
+ await this.journal.recordCommand(command.id, {
257
+ state: "succeeded",
258
+ runId,
259
+ type: "stop_agent",
260
+ result,
261
+ });
262
+ await this.api.complete(command.id, {
263
+ lease_token: command.lease_token,
264
+ result,
265
+ });
266
+ this.log(`Stopped run ${runId}.`);
267
+ }
268
+ }
269
+ export async function runBridge(options) {
270
+ if (!["darwin", "linux"].includes(process.platform)) {
271
+ throw new BridgeError("unsupported_platform", "CrewX Bridge currently supports macOS and Linux.");
272
+ }
273
+ if (typeof process.getuid === "function" && process.getuid() === 0) {
274
+ throw new BridgeError("root_refused", "CrewX Bridge refuses to run as root.");
275
+ }
276
+ const api = options.api ?? new BridgeApi(options.config);
277
+ const journal = options.journal ?? new BridgeJournal();
278
+ const supervisor = options.supervisor ?? new ProcessSupervisor(options.config);
279
+ const capabilities = options.capabilities ?? (await probeCapabilities());
280
+ const daemon = new BridgeDaemon(options.config, api, journal, supervisor, capabilities, options.log);
281
+ await daemon.initialize();
282
+ if (options.once) {
283
+ await daemon.tick();
284
+ return;
285
+ }
286
+ try {
287
+ while (!options.signal?.aborted) {
288
+ let delay = DEFAULT_POLL_INTERVAL_MS;
289
+ try {
290
+ delay = await daemon.tick();
291
+ }
292
+ catch (error) {
293
+ options.log?.(`Control loop error: ${redactSecrets(errorMessage(error))}`);
294
+ delay = Math.min(30_000, DEFAULT_POLL_INTERVAL_MS * 2);
295
+ }
296
+ const jitter = Math.floor(Math.random() * Math.min(500, delay / 4));
297
+ await new Promise((resolve) => {
298
+ const timer = setTimeout(resolve, delay + jitter);
299
+ options.signal?.addEventListener("abort", () => {
300
+ clearTimeout(timer);
301
+ resolve();
302
+ }, { once: true });
303
+ });
304
+ }
305
+ }
306
+ finally {
307
+ await supervisor.stopAll();
308
+ }
309
+ }
310
+ export function supportedAdapters() {
311
+ return ADAPTERS;
312
+ }
313
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare class BridgeError extends Error {
2
+ readonly code: string;
3
+ readonly exitCode: number;
4
+ constructor(code: string, message: string, exitCode?: number, options?: ErrorOptions);
5
+ }
6
+ export declare function errorMessage(error: unknown): string;
7
+ export declare function redactSecrets(value: string, additional?: readonly string[]): string;
8
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAOA,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAGxB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,QAAQ,SAAI,EACZ,OAAO,CAAC,EAAE,YAAY;CAOzB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEnD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,GAAE,SAAS,MAAM,EAAO,GAAG,MAAM,CAavF"}
package/dist/errors.js ADDED
@@ -0,0 +1,32 @@
1
+ const SECRET_PATTERNS = [
2
+ /\bcrwb_enroll_[A-Za-z0-9_-]+\b/g,
3
+ /\bcrwb_[A-Za-z0-9_-]+\b/g,
4
+ /\bcrwl_[A-Za-z0-9_-]+\b/g,
5
+ /\bcrwx_[A-Za-z0-9_-]+\b/g,
6
+ ];
7
+ export class BridgeError extends Error {
8
+ code;
9
+ exitCode;
10
+ constructor(code, message, exitCode = 1, options) {
11
+ super(message, options);
12
+ this.name = "BridgeError";
13
+ this.code = code;
14
+ this.exitCode = exitCode;
15
+ }
16
+ }
17
+ export function errorMessage(error) {
18
+ return error instanceof Error ? error.message : String(error);
19
+ }
20
+ export function redactSecrets(value, additional = []) {
21
+ let redacted = value;
22
+ for (const secret of additional) {
23
+ if (secret)
24
+ redacted = redacted.split(secret).join("[REDACTED]");
25
+ }
26
+ for (const pattern of SECRET_PATTERNS) {
27
+ redacted = redacted.replace(pattern, "[REDACTED]");
28
+ }
29
+ redacted = redacted.replace(/(authorization\s*[:=]\s*(?:bearer\s+)?)[^\s,;]+/gi, "$1[REDACTED]");
30
+ return redacted;
31
+ }
32
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG;IACtB,iCAAiC;IACjC,0BAA0B;IAC1B,0BAA0B;IAC1B,0BAA0B;CAClB,CAAC;AAEX,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,IAAI,CAAS;IACb,QAAQ,CAAS;IAE1B,YACE,IAAY,EACZ,OAAe,EACf,QAAQ,GAAG,CAAC,EACZ,OAAsB;QAEtB,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,aAAgC,EAAE;IAC7E,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,IAAI,MAAM;YAAE,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACnE,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACrD,CAAC;IACD,QAAQ,GAAG,QAAQ,CAAC,OAAO,CACzB,mDAAmD,EACnD,cAAc,CACf,CAAC;IACF,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { type BridgeConfig, type BridgeFolderConfig } from "./config.js";
2
+ export declare function registerFolder(config: BridgeConfig, inputPath: string, requestedName?: string): Promise<{
3
+ config: BridgeConfig;
4
+ folder: BridgeFolderConfig;
5
+ }>;
6
+ export declare function removeFolder(config: BridgeConfig, folderId: string): BridgeConfig;
7
+ export declare function verifyLaunchFolder(config: BridgeConfig, folderId: string): Promise<BridgeFolderConfig>;
8
+ export declare function folderDescriptors(config: BridgeConfig): Array<{
9
+ id: string;
10
+ name: string;
11
+ fingerprint: string;
12
+ }>;
13
+ //# sourceMappingURL=folders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folders.d.ts","sourceRoot":"","sources":["../src/folders.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,kBAAkB,EAExB,MAAM,aAAa,CAAC;AAGrB,wBAAsB,cAAc,CAClC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,CAAC,CAyB/D;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,MAAM,GACf,YAAY,CAMd;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,kBAAkB,CAAC,CAkC7B;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,KAAK,CAAC;IAC7D,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CAMD"}
@@ -0,0 +1,63 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { realpath, stat } from "node:fs/promises";
3
+ import { canonicalFolder, } from "./config.js";
4
+ import { BridgeError } from "./errors.js";
5
+ export async function registerFolder(config, inputPath, requestedName) {
6
+ const canonical = await canonicalFolder(inputPath);
7
+ const existing = config.folders.find((folder) => folder.path === canonical.path || folder.fingerprint === canonical.fingerprint);
8
+ if (existing)
9
+ return { config, folder: existing };
10
+ const name = requestedName?.trim() ||
11
+ canonical.path.split("/").filter(Boolean).at(-1) ||
12
+ "Project";
13
+ if (name.length > 100) {
14
+ throw new BridgeError("folder_name_too_long", "Folder name must be at most 100 characters.");
15
+ }
16
+ const folder = {
17
+ id: randomUUID(),
18
+ name,
19
+ path: canonical.path,
20
+ fingerprint: canonical.fingerprint,
21
+ };
22
+ return {
23
+ config: { ...config, folders: [...config.folders, folder] },
24
+ folder,
25
+ };
26
+ }
27
+ export function removeFolder(config, folderId) {
28
+ const folders = config.folders.filter((folder) => folder.id !== folderId);
29
+ if (folders.length === config.folders.length) {
30
+ throw new BridgeError("folder_not_found", "No registered folder has that ID.");
31
+ }
32
+ return { ...config, folders };
33
+ }
34
+ export async function verifyLaunchFolder(config, folderId) {
35
+ const folder = config.folders.find((candidate) => candidate.id === folderId);
36
+ if (!folder) {
37
+ throw new BridgeError("folder_not_allowed", "The command references a folder that is not locally registered.");
38
+ }
39
+ let canonicalPath;
40
+ try {
41
+ canonicalPath = await realpath(folder.path);
42
+ }
43
+ catch (error) {
44
+ throw new BridgeError("folder_unavailable", "The registered folder is no longer available.", 1, { cause: error });
45
+ }
46
+ if (canonicalPath !== folder.path) {
47
+ throw new BridgeError("folder_symlink_changed", "The registered folder now resolves to a different location.");
48
+ }
49
+ const info = await stat(canonicalPath);
50
+ const fingerprint = `dev:${info.dev.toString(16)}:inode:${info.ino.toString(16)}`;
51
+ if (!info.isDirectory() || fingerprint !== folder.fingerprint) {
52
+ throw new BridgeError("folder_identity_changed", "The registered folder identity changed; remove and add it again.");
53
+ }
54
+ return folder;
55
+ }
56
+ export function folderDescriptors(config) {
57
+ return config.folders.map(({ id, name, fingerprint }) => ({
58
+ id,
59
+ name,
60
+ fingerprint,
61
+ }));
62
+ }
63
+ //# sourceMappingURL=folders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folders.js","sourceRoot":"","sources":["../src/folders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ export declare function createProgram(): Command;
4
+ export declare function main(argv?: string[]): Promise<void>;
5
+ export declare function isMainModule(moduleUrl: string, invokedPath?: string | undefined): boolean;
6
+ export { BridgeApi, enrollMachine } from "./api.js";
7
+ export { bridgeConfigPath, bridgeJournalPath, normalizeServerUrl, readBridgeConfig, saveBridgeConfig, } from "./config.js";
8
+ export { BridgeDaemon, runBridge } from "./daemon.js";
9
+ export { BridgeError, redactSecrets } from "./errors.js";
10
+ export { registerFolder, removeFolder, verifyLaunchFolder } from "./folders.js";
11
+ export { BridgeJournal } from "./journal.js";
12
+ export { validateStartPolicy } from "./policy.js";
13
+ export { installService, launchdDefinition, servicePath, serviceStatus, systemdDefinition, uninstallService, } from "./service.js";
14
+ export { minimalChildEnvironment, ProcessSupervisor, resolveAgentCliEntrypoint, } from "./supervisor.js";
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,OAAO,EAAwB,MAAM,WAAW,CAAC;AAmD1D,wBAAgB,aAAa,IAAI,OAAO,CA2RvC;AAED,wBAAsB,IAAI,CAAC,IAAI,WAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAO7D;AAED,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,WAAW,qBAAkB,GAC5B,OAAO,CAUT;AAMD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC"}