@sailorbridge/client 0.2.3 → 0.2.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.
- package/README.md +12 -5
- package/dist/src/cli.js +135 -107
- package/dist/src/cli.js.map +8 -8
- package/package.json +1 -1
package/dist/src/cli.js
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import { createRequire } from "node:module";
|
|
3
3
|
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
4
4
|
|
|
5
|
-
// .dist-releases/
|
|
5
|
+
// .dist-releases/1784894032002-2676534/src/cli.js
|
|
6
6
|
import { hostname as hostname3 } from "node:os";
|
|
7
7
|
import { writeSync } from "node:fs";
|
|
8
|
-
// .dist-releases/
|
|
8
|
+
// .dist-releases/1784894032002-2676534/src/auth/host-pairing.js
|
|
9
9
|
import { chmod, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
10
10
|
import { homedir, hostname, platform } from "node:os";
|
|
11
11
|
import path from "node:path";
|
|
@@ -220,7 +220,7 @@ function _assertObject(value) {
|
|
|
220
220
|
throw new Error("host pairing response must be an object");
|
|
221
221
|
return value;
|
|
222
222
|
}
|
|
223
|
-
// .dist-releases/
|
|
223
|
+
// .dist-releases/1784894032002-2676534/src/host/repo-tip-reporter.js
|
|
224
224
|
import { createHash } from "node:crypto";
|
|
225
225
|
import { existsSync, mkdirSync } from "node:fs";
|
|
226
226
|
import { homedir as homedir2 } from "node:os";
|
|
@@ -402,10 +402,10 @@ ${error.message}`));
|
|
|
402
402
|
proc.on("close", (code) => finish(code ?? 1));
|
|
403
403
|
});
|
|
404
404
|
}
|
|
405
|
-
// .dist-releases/
|
|
405
|
+
// .dist-releases/1784894032002-2676534/src/host/request-consumer.js
|
|
406
406
|
import { hostname as hostname2 } from "node:os";
|
|
407
407
|
|
|
408
|
-
// .dist-releases/
|
|
408
|
+
// .dist-releases/1784894032002-2676534/src/driver/secrets.js
|
|
409
409
|
function redactSensitiveText(text, env = {}, explicitSecrets = []) {
|
|
410
410
|
let redacted = text;
|
|
411
411
|
for (const [key, value] of Object.entries(env)) {
|
|
@@ -424,16 +424,16 @@ function isSensitiveEnvKey(key) {
|
|
|
424
424
|
return /(TOKEN|KEY|SECRET|AUTHORIZATION|PASSWORD)/i.test(key);
|
|
425
425
|
}
|
|
426
426
|
|
|
427
|
-
// .dist-releases/
|
|
428
|
-
var CLIENT_VERSION = "0.2.
|
|
429
|
-
var CLIENT_GIT_SHA = "
|
|
430
|
-
var CLIENT_BUILD_DIRTY =
|
|
427
|
+
// .dist-releases/1784894032002-2676534/src/version.js
|
|
428
|
+
var CLIENT_VERSION = "0.2.4";
|
|
429
|
+
var CLIENT_GIT_SHA = "22d3b8376a97";
|
|
430
|
+
var CLIENT_BUILD_DIRTY = false;
|
|
431
431
|
var CLIENT_VERSION_LABEL = formatClientVersion(CLIENT_VERSION, CLIENT_GIT_SHA);
|
|
432
432
|
function formatClientVersion(version, gitSha) {
|
|
433
433
|
return `${version}+git.${gitSha}`;
|
|
434
434
|
}
|
|
435
435
|
|
|
436
|
-
// .dist-releases/
|
|
436
|
+
// .dist-releases/1784894032002-2676534/src/host/request-consumer.js
|
|
437
437
|
var MAX_ERROR_LENGTH = 500;
|
|
438
438
|
function defaultHostIdentity(config) {
|
|
439
439
|
const captainId = config.captainId?.trim();
|
|
@@ -489,7 +489,7 @@ function limitErrorMessage(error, explicitSecrets) {
|
|
|
489
489
|
const trimmed = redactSensitiveText(message, process.env, explicitSecrets).trim() || "host request starter failed";
|
|
490
490
|
return trimmed.length <= MAX_ERROR_LENGTH ? trimmed : `${trimmed.slice(0, MAX_ERROR_LENGTH - 3)}...`;
|
|
491
491
|
}
|
|
492
|
-
// .dist-releases/
|
|
492
|
+
// .dist-releases/1784894032002-2676534/src/product/start-request.js
|
|
493
493
|
async function createAgentStartRequest(options) {
|
|
494
494
|
const apiUrl = _required(options.apiUrl, "product API URL").replace(/\/+$/u, "");
|
|
495
495
|
const accessToken = _required(options.accessToken, "product API bearer token");
|
|
@@ -549,7 +549,7 @@ function _string(value, label) {
|
|
|
549
549
|
throw new Error(`${label} must be a non-empty string`);
|
|
550
550
|
return value;
|
|
551
551
|
}
|
|
552
|
-
// .dist-releases/
|
|
552
|
+
// .dist-releases/1784894032002-2676534/src/product/pair.js
|
|
553
553
|
async function createPair(options) {
|
|
554
554
|
const apiUrl = _required2(options.apiUrl, "product API URL").replace(/\/+$/u, "");
|
|
555
555
|
const accessToken = _required2(options.accessToken, "product API bearer token");
|
|
@@ -626,7 +626,7 @@ function _string2(value, label) {
|
|
|
626
626
|
throw new Error(`${label} must be a non-empty string`);
|
|
627
627
|
return value;
|
|
628
628
|
}
|
|
629
|
-
// .dist-releases/
|
|
629
|
+
// .dist-releases/1784894032002-2676534/src/product/worker.js
|
|
630
630
|
async function createWorker(options) {
|
|
631
631
|
const apiUrl = _required3(options.apiUrl, "product API URL").replace(/\/+$/u, "");
|
|
632
632
|
const accessToken = _required3(options.accessToken, "product API bearer token");
|
|
@@ -690,7 +690,7 @@ function _string3(value, label) {
|
|
|
690
690
|
throw new Error(`${label} must be a non-empty string`);
|
|
691
691
|
return value;
|
|
692
692
|
}
|
|
693
|
-
// .dist-releases/
|
|
693
|
+
// .dist-releases/1784894032002-2676534/src/driver/events.js
|
|
694
694
|
class DriverEventEmitter {
|
|
695
695
|
callbacks = new Map;
|
|
696
696
|
on(type, callback) {
|
|
@@ -705,7 +705,7 @@ class DriverEventEmitter {
|
|
|
705
705
|
}
|
|
706
706
|
}
|
|
707
707
|
}
|
|
708
|
-
// .dist-releases/
|
|
708
|
+
// .dist-releases/1784894032002-2676534/src/driver/async-queue.js
|
|
709
709
|
class AsyncQueue {
|
|
710
710
|
values = [];
|
|
711
711
|
waiters = [];
|
|
@@ -744,7 +744,7 @@ class AsyncQueue {
|
|
|
744
744
|
}
|
|
745
745
|
}
|
|
746
746
|
|
|
747
|
-
// .dist-releases/
|
|
747
|
+
// .dist-releases/1784894032002-2676534/src/driver/types.js
|
|
748
748
|
class DriverUnsupportedError extends Error {
|
|
749
749
|
constructor(message) {
|
|
750
750
|
super(message);
|
|
@@ -759,7 +759,7 @@ class DriverTargetNotReadyError extends Error {
|
|
|
759
759
|
}
|
|
760
760
|
}
|
|
761
761
|
|
|
762
|
-
// .dist-releases/
|
|
762
|
+
// .dist-releases/1784894032002-2676534/src/driver/sdk-loader.js
|
|
763
763
|
async function loadSdk(loader, packageName, env = {}, installHint = `Install the optional SDK dependency ${packageName} and its peers for this transport.`) {
|
|
764
764
|
try {
|
|
765
765
|
return await loader();
|
|
@@ -769,7 +769,7 @@ async function loadSdk(loader, packageName, env = {}, installHint = `Install the
|
|
|
769
769
|
}
|
|
770
770
|
}
|
|
771
771
|
|
|
772
|
-
// .dist-releases/
|
|
772
|
+
// .dist-releases/1784894032002-2676534/src/driver/claude/driver.js
|
|
773
773
|
class ClaudeAgentSdkDriver {
|
|
774
774
|
options;
|
|
775
775
|
capabilities = { structured: true, resume: true, attach: false };
|
|
@@ -945,7 +945,7 @@ function asRecord(value) {
|
|
|
945
945
|
function stringValue(value) {
|
|
946
946
|
return typeof value === "string" ? value : undefined;
|
|
947
947
|
}
|
|
948
|
-
// .dist-releases/
|
|
948
|
+
// .dist-releases/1784894032002-2676534/src/driver/codex/driver.js
|
|
949
949
|
class CodexSdkDriver {
|
|
950
950
|
options;
|
|
951
951
|
capabilities = { structured: true, resume: true, attach: false };
|
|
@@ -1126,7 +1126,7 @@ function asRecord2(value) {
|
|
|
1126
1126
|
function stringValue2(value) {
|
|
1127
1127
|
return typeof value === "string" ? value : undefined;
|
|
1128
1128
|
}
|
|
1129
|
-
// .dist-releases/
|
|
1129
|
+
// .dist-releases/1784894032002-2676534/src/driver/liveness-heuristics.js
|
|
1130
1130
|
var BUSY_MARKERS = ["Working (", "Waiting for background", "Pasted Content", "tab to queue"];
|
|
1131
1131
|
var ANSI_PATTERN = /\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~]|\][^\x07]*(?:\x07|\x1B\\)|[PX^_][\s\S]*?\x1B\\)/g;
|
|
1132
1132
|
function stripAnsi(text) {
|
|
@@ -1153,7 +1153,7 @@ function classifyInteractiveOutput(input) {
|
|
|
1153
1153
|
function isOutputStable(now, lastOutputAt, idleStableMs) {
|
|
1154
1154
|
return Boolean(lastOutputAt && now.getTime() - lastOutputAt.getTime() >= idleStableMs);
|
|
1155
1155
|
}
|
|
1156
|
-
// .dist-releases/
|
|
1156
|
+
// .dist-releases/1784894032002-2676534/src/driver/pty/loader.js
|
|
1157
1157
|
async function loadNodePty(loader = defaultNodePtyLoader) {
|
|
1158
1158
|
try {
|
|
1159
1159
|
return await loader();
|
|
@@ -1179,7 +1179,7 @@ async function defaultNodePtyLoader() {
|
|
|
1179
1179
|
return loaded;
|
|
1180
1180
|
}
|
|
1181
1181
|
|
|
1182
|
-
// .dist-releases/
|
|
1182
|
+
// .dist-releases/1784894032002-2676534/src/driver/pty/driver.js
|
|
1183
1183
|
class PtyDriver {
|
|
1184
1184
|
options;
|
|
1185
1185
|
capabilities = { structured: false, resume: false, attach: false };
|
|
@@ -1331,12 +1331,12 @@ function tail(text, lines) {
|
|
|
1331
1331
|
function sleep(ms) {
|
|
1332
1332
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
1333
1333
|
}
|
|
1334
|
-
// .dist-releases/
|
|
1334
|
+
// .dist-releases/1784894032002-2676534/src/driver/tmux/driver.js
|
|
1335
1335
|
import { mkdtemp, rm, writeFile as writeFile2 } from "node:fs/promises";
|
|
1336
1336
|
import { tmpdir } from "node:os";
|
|
1337
1337
|
import { join } from "node:path";
|
|
1338
1338
|
|
|
1339
|
-
// .dist-releases/
|
|
1339
|
+
// .dist-releases/1784894032002-2676534/src/driver/tmux/launch.js
|
|
1340
1340
|
var ENV_KEY_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
1341
1341
|
var PANE_BOOTSTRAP_COMMAND = 'tmux set-option -t "$TMUX_PANE" remain-on-exit on >/dev/null 2>&1 || true; tmux wait-for -S "$1"; shift; exec "$@"';
|
|
1342
1342
|
function buildTmuxNewSessionArgs(input) {
|
|
@@ -1359,7 +1359,7 @@ function validateEnv(env) {
|
|
|
1359
1359
|
}
|
|
1360
1360
|
}
|
|
1361
1361
|
|
|
1362
|
-
// .dist-releases/
|
|
1362
|
+
// .dist-releases/1784894032002-2676534/src/driver/tmux/paste.js
|
|
1363
1363
|
function buildDispatchPlan(text, useTyping) {
|
|
1364
1364
|
return {
|
|
1365
1365
|
mode: useTyping ? "type-literal" : "paste-buffer",
|
|
@@ -1383,7 +1383,7 @@ function arraysEqual(left, right) {
|
|
|
1383
1383
|
return left.length === right.length && left.every((item, index) => item === right[index]);
|
|
1384
1384
|
}
|
|
1385
1385
|
|
|
1386
|
-
// .dist-releases/
|
|
1386
|
+
// .dist-releases/1784894032002-2676534/src/driver/tmux/liveness.js
|
|
1387
1387
|
var SHELL_COMMANDS = new Set(["", "bash", "zsh", "sh", "fish", "pwsh", "powershell"]);
|
|
1388
1388
|
function classifyTmuxLiveness(input) {
|
|
1389
1389
|
if (!input.hasSession) {
|
|
@@ -1403,7 +1403,7 @@ function isTmuxProcessAlive(command, runningCommands) {
|
|
|
1403
1403
|
return !SHELL_COMMANDS.has(command);
|
|
1404
1404
|
}
|
|
1405
1405
|
|
|
1406
|
-
// .dist-releases/
|
|
1406
|
+
// .dist-releases/1784894032002-2676534/src/driver/tmux/runner.js
|
|
1407
1407
|
import { spawn as spawn2 } from "node:child_process";
|
|
1408
1408
|
var DEFAULT_TIMEOUT_MS = 15000;
|
|
1409
1409
|
|
|
@@ -1528,7 +1528,7 @@ class TmuxClient {
|
|
|
1528
1528
|
}
|
|
1529
1529
|
}
|
|
1530
1530
|
|
|
1531
|
-
// .dist-releases/
|
|
1531
|
+
// .dist-releases/1784894032002-2676534/src/driver/tmux/driver.js
|
|
1532
1532
|
var ATTACHED_STOP_GRACE_MS = 1e4;
|
|
1533
1533
|
var DEFAULT_STOP_TIMEOUT_MS = 15000;
|
|
1534
1534
|
var DEFAULT_READY_TIMEOUT_MS = 90000;
|
|
@@ -1923,12 +1923,12 @@ function isMissingTmuxSessionError(error) {
|
|
|
1923
1923
|
${error.result.stderr}`.toLowerCase();
|
|
1924
1924
|
return text.includes("can't find session") || text.includes("cannot find session") || text.includes("no such session") || text.includes("session not found");
|
|
1925
1925
|
}
|
|
1926
|
-
// .dist-releases/
|
|
1926
|
+
// .dist-releases/1784894032002-2676534/src/relay/client.js
|
|
1927
1927
|
import { Buffer as Buffer2 } from "node:buffer";
|
|
1928
1928
|
import http from "node:http";
|
|
1929
1929
|
import https from "node:https";
|
|
1930
1930
|
|
|
1931
|
-
// .dist-releases/
|
|
1931
|
+
// .dist-releases/1784894032002-2676534/src/relay/errors.js
|
|
1932
1932
|
class RelayError extends Error {
|
|
1933
1933
|
method;
|
|
1934
1934
|
path;
|
|
@@ -1965,7 +1965,7 @@ class RelayProtocolError extends RelayError {
|
|
|
1965
1965
|
}
|
|
1966
1966
|
}
|
|
1967
1967
|
|
|
1968
|
-
// .dist-releases/
|
|
1968
|
+
// .dist-releases/1784894032002-2676534/src/worker/protocol.js
|
|
1969
1969
|
var DEFAULT_RELAY_URL = DEFAULT_PRODUCT_API_URL;
|
|
1970
1970
|
var DEFAULT_WORKER = "host";
|
|
1971
1971
|
var DEFAULT_WORKDIR = "~/sailorbridge-workdir";
|
|
@@ -1995,7 +1995,7 @@ function effectiveJobKind(kind, spec) {
|
|
|
1995
1995
|
return kind === "stream" || spec.stream === true ? "stream" : kind;
|
|
1996
1996
|
}
|
|
1997
1997
|
|
|
1998
|
-
// .dist-releases/
|
|
1998
|
+
// .dist-releases/1784894032002-2676534/src/relay/client.js
|
|
1999
1999
|
var JSON_CONTENT_TYPE = "application/json";
|
|
2000
2000
|
var MAX_MAILBOX_LIMIT = 16;
|
|
2001
2001
|
var MAX_WAIT_TIMEOUT_SEC = 120;
|
|
@@ -4061,7 +4061,7 @@ function redact(value, token) {
|
|
|
4061
4061
|
function bytesToBase64(bytes) {
|
|
4062
4062
|
return Buffer2.from(bytes).toString("base64");
|
|
4063
4063
|
}
|
|
4064
|
-
// .dist-releases/
|
|
4064
|
+
// .dist-releases/1784894032002-2676534/src/relay/config.js
|
|
4065
4065
|
import { existsSync as existsSync2, readFileSync } from "node:fs";
|
|
4066
4066
|
import { homedir as homedir3 } from "node:os";
|
|
4067
4067
|
import path3 from "node:path";
|
|
@@ -4079,6 +4079,7 @@ function loadRelayConfig(env = process.env) {
|
|
|
4079
4079
|
const captainId = optionalCaptainId(env.SAILORBRIDGE_CAPTAIN_ID) ?? stored?.captain_id;
|
|
4080
4080
|
const hostId = nonEmpty(env.SAILORBRIDGE_HOST_ID) ?? stored?.host_id;
|
|
4081
4081
|
const hostDisplayName = nonEmpty(env.SAILORBRIDGE_HOST_DISPLAY_NAME);
|
|
4082
|
+
const keyScope = !envBearerToken && stored ? "host" : undefined;
|
|
4082
4083
|
return {
|
|
4083
4084
|
relayUrl,
|
|
4084
4085
|
bearerToken,
|
|
@@ -4086,7 +4087,8 @@ function loadRelayConfig(env = process.env) {
|
|
|
4086
4087
|
...session ? { session } : {},
|
|
4087
4088
|
...captainId ? { captainId } : {},
|
|
4088
4089
|
...hostId ? { hostId } : {},
|
|
4089
|
-
...hostDisplayName ? { hostDisplayName } : {}
|
|
4090
|
+
...hostDisplayName ? { hostDisplayName } : {},
|
|
4091
|
+
...keyScope ? { keyScope } : {}
|
|
4090
4092
|
};
|
|
4091
4093
|
}
|
|
4092
4094
|
function loadStoredHostCredential(env, options = {}) {
|
|
@@ -4136,7 +4138,7 @@ function storedCaptainId(value) {
|
|
|
4136
4138
|
}
|
|
4137
4139
|
return;
|
|
4138
4140
|
}
|
|
4139
|
-
// .dist-releases/
|
|
4141
|
+
// .dist-releases/1784894032002-2676534/src/supervisor/retirement.js
|
|
4140
4142
|
var DEFAULT_THRESHOLD = 3;
|
|
4141
4143
|
var DEFAULT_WINDOW_MS = 30000;
|
|
4142
4144
|
var DEFAULT_COOLDOWN_MS = 1000;
|
|
@@ -4211,7 +4213,7 @@ function isAuthoritativeRetirementReason(reason) {
|
|
|
4211
4213
|
return reason === "monitor_fetch" || reason === "agent_session_patch";
|
|
4212
4214
|
}
|
|
4213
4215
|
|
|
4214
|
-
// .dist-releases/
|
|
4216
|
+
// .dist-releases/1784894032002-2676534/src/supervisor/wait.js
|
|
4215
4217
|
async function waitForWakeableTimeout(ms, setWake, sleep3) {
|
|
4216
4218
|
if (sleep3) {
|
|
4217
4219
|
await Promise.race([
|
|
@@ -4242,7 +4244,7 @@ async function waitForWakeableTimeout(ms, setWake, sleep3) {
|
|
|
4242
4244
|
setWake(null);
|
|
4243
4245
|
}
|
|
4244
4246
|
|
|
4245
|
-
// .dist-releases/
|
|
4247
|
+
// .dist-releases/1784894032002-2676534/src/supervisor/mailbox.js
|
|
4246
4248
|
var CLEAR_TAG = "CLEAR";
|
|
4247
4249
|
var REFRESH_TAG = "WORKFLOW-REFRESH";
|
|
4248
4250
|
var SYNC_TAG = "SYNC";
|
|
@@ -4425,7 +4427,7 @@ class MailboxSupervisor {
|
|
|
4425
4427
|
if (this.stopped && !deliver)
|
|
4426
4428
|
return 0;
|
|
4427
4429
|
try {
|
|
4428
|
-
await this.deliverRefreshCue();
|
|
4430
|
+
await this.deliverRefreshCue(refreshNotices(pending));
|
|
4429
4431
|
} catch (error) {
|
|
4430
4432
|
await this.recordSurfaceBatch(pending, { status: "failed", error: this.redact(errorMessage2(error)) });
|
|
4431
4433
|
return 0;
|
|
@@ -4437,8 +4439,8 @@ class MailboxSupervisor {
|
|
|
4437
4439
|
await this.claimDeliveredControls(messages);
|
|
4438
4440
|
return pending.length;
|
|
4439
4441
|
}
|
|
4440
|
-
async deliverRefreshCue() {
|
|
4441
|
-
const text = refreshCue(this.options.cli);
|
|
4442
|
+
async deliverRefreshCue(notices = []) {
|
|
4443
|
+
const text = refreshCue(this.options.cli, notices);
|
|
4442
4444
|
await this.options.driver.send(text, { verifyText: REFRESH_TAG });
|
|
4443
4445
|
}
|
|
4444
4446
|
async handleSyncMessages(messages, deliver = false) {
|
|
@@ -4722,7 +4724,7 @@ function formatWorkDoorbell(input, toDisplay) {
|
|
|
4722
4724
|
throw new Error("cannot format an empty work doorbell");
|
|
4723
4725
|
const sender = message.sender_agent_name ?? message.sender_role ?? "unknown";
|
|
4724
4726
|
const tag = canonicalDoorbellTag(tagOf(message));
|
|
4725
|
-
return `[${sender}->${toDisplay}] ${tag} ${doorbellToken(message.id)} \uD83D\uDCEC ${messages.length} new message(s). Read
|
|
4727
|
+
return `[${sender}->${toDisplay}] ${tag} ${doorbellToken(message.id)} \uD83D\uDCEC ${messages.length} new message(s). Read: sail mailbox claim. Conversational tags: answer with one sail reply — no ack owed. Obligation tags: complete them; their claim output prints the ack line.`;
|
|
4726
4728
|
}
|
|
4727
4729
|
function canonicalDoorbellTag(tag) {
|
|
4728
4730
|
const printable = Array.from(tag, (char) => char >= " " && char <= "~" ? char : " ").join("");
|
|
@@ -4735,10 +4737,27 @@ function unsurfaced(messages) {
|
|
|
4735
4737
|
function doorbellToken(messageId) {
|
|
4736
4738
|
return `#${messageId}#`;
|
|
4737
4739
|
}
|
|
4738
|
-
function refreshCue(_cli) {
|
|
4739
|
-
return
|
|
4740
|
+
function refreshCue(_cli, notices = []) {
|
|
4741
|
+
return [
|
|
4742
|
+
REFRESH_TAG,
|
|
4743
|
+
...notices,
|
|
4744
|
+
"Run `sail refresh` now to reload your role and instructions, then continue."
|
|
4745
|
+
].join(`
|
|
4740
4746
|
|
|
4741
|
-
|
|
4747
|
+
`);
|
|
4748
|
+
}
|
|
4749
|
+
function refreshNotices(messages) {
|
|
4750
|
+
const notices = [];
|
|
4751
|
+
for (const message of messages) {
|
|
4752
|
+
const payload = message.payload_json;
|
|
4753
|
+
if (!payload || typeof payload !== "object" || Array.isArray(payload))
|
|
4754
|
+
continue;
|
|
4755
|
+
const notice = payload.notice;
|
|
4756
|
+
if (typeof notice === "string" && notice.trim() && !notices.includes(notice.trim())) {
|
|
4757
|
+
notices.push(notice.trim());
|
|
4758
|
+
}
|
|
4759
|
+
}
|
|
4760
|
+
return notices;
|
|
4742
4761
|
}
|
|
4743
4762
|
function saveContextCue(agentName, checkpointId) {
|
|
4744
4763
|
return [
|
|
@@ -4780,19 +4799,19 @@ function ordinaryDeliveryAttempt(error) {
|
|
|
4780
4799
|
function _isMissingModerator(error) {
|
|
4781
4800
|
return error instanceof RelayHttpError && error.status === 400 && error.body.includes("no agents match");
|
|
4782
4801
|
}
|
|
4783
|
-
// .dist-releases/
|
|
4802
|
+
// .dist-releases/1784894032002-2676534/src/supervisor/runtime.js
|
|
4784
4803
|
import path9 from "node:path";
|
|
4785
4804
|
import { execFile } from "node:child_process";
|
|
4786
4805
|
import { promisify } from "node:util";
|
|
4787
4806
|
|
|
4788
|
-
// .dist-releases/
|
|
4807
|
+
// .dist-releases/1784894032002-2676534/src/host/managed-materialization.js
|
|
4789
4808
|
import { createHash as createHash2, randomBytes } from "node:crypto";
|
|
4790
4809
|
import { constants as fsConstants } from "node:fs";
|
|
4791
4810
|
import { lstat, mkdir as mkdir3, open, readdir, rename, rm as rm2 } from "node:fs/promises";
|
|
4792
4811
|
import { homedir as homedir5 } from "node:os";
|
|
4793
4812
|
import path5 from "node:path";
|
|
4794
4813
|
|
|
4795
|
-
// .dist-releases/
|
|
4814
|
+
// .dist-releases/1784894032002-2676534/src/host/memory-stub.js
|
|
4796
4815
|
import { mkdir as mkdir2, readFile as readFile2, writeFile as writeFile3 } from "node:fs/promises";
|
|
4797
4816
|
import { homedir as homedir4 } from "node:os";
|
|
4798
4817
|
import path4 from "node:path";
|
|
@@ -4939,7 +4958,7 @@ function _safePathLabel(value, field) {
|
|
|
4939
4958
|
return trimmed;
|
|
4940
4959
|
}
|
|
4941
4960
|
|
|
4942
|
-
// .dist-releases/
|
|
4961
|
+
// .dist-releases/1784894032002-2676534/src/host/managed-materialization.js
|
|
4943
4962
|
var MANIFEST_FILE = ".sailorbridge-managed-manifest.json";
|
|
4944
4963
|
var BANNER_PREFIX = "# SailorBridge managed file";
|
|
4945
4964
|
var HASH_RE = /^sha256:[a-f0-9]{64}$/u;
|
|
@@ -5465,7 +5484,7 @@ function _expandHome2(value) {
|
|
|
5465
5484
|
return value;
|
|
5466
5485
|
}
|
|
5467
5486
|
|
|
5468
|
-
// .dist-releases/
|
|
5487
|
+
// .dist-releases/1784894032002-2676534/src/host/credential-guardian.js
|
|
5469
5488
|
import { lstat as lstat2, readFile as readFile3, rename as rename2, symlink, unlink, writeFile as writeFile4 } from "node:fs/promises";
|
|
5470
5489
|
import path6 from "node:path";
|
|
5471
5490
|
var DEFAULT_CREDENTIAL_SWEEP_INTERVAL_MS = 60000;
|
|
@@ -5611,7 +5630,7 @@ function _tmpSibling(filePath) {
|
|
|
5611
5630
|
return path6.join(path6.dirname(filePath), `.${path6.basename(filePath)}.sb-guardian.${process.pid}.${tmpSequence}.tmp`);
|
|
5612
5631
|
}
|
|
5613
5632
|
|
|
5614
|
-
// .dist-releases/
|
|
5633
|
+
// .dist-releases/1784894032002-2676534/src/supervisor/resolve.js
|
|
5615
5634
|
var DEFAULT_CAPTURE_LINES = 200;
|
|
5616
5635
|
var MAX_CAPTURE_LINES = 1000;
|
|
5617
5636
|
|
|
@@ -5817,7 +5836,7 @@ function defaultSleep(ms) {
|
|
|
5817
5836
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
5818
5837
|
}
|
|
5819
5838
|
|
|
5820
|
-
// .dist-releases/
|
|
5839
|
+
// .dist-releases/1784894032002-2676534/src/supervisor/transcript-backfill.js
|
|
5821
5840
|
import { createHash as createHash3 } from "node:crypto";
|
|
5822
5841
|
import {
|
|
5823
5842
|
closeSync,
|
|
@@ -6486,7 +6505,7 @@ function errorMessage4(error) {
|
|
|
6486
6505
|
return error instanceof Error ? error.message : String(error);
|
|
6487
6506
|
}
|
|
6488
6507
|
|
|
6489
|
-
// .dist-releases/
|
|
6508
|
+
// .dist-releases/1784894032002-2676534/src/supervisor/usage-collector.js
|
|
6490
6509
|
import { statSync as statSync2 } from "node:fs";
|
|
6491
6510
|
import path8 from "node:path";
|
|
6492
6511
|
var SUPPORTED_USAGE_ENGINES = new Set(["claude", "codex"]);
|
|
@@ -6895,7 +6914,7 @@ function sourceUnreadableReason(source) {
|
|
|
6895
6914
|
}
|
|
6896
6915
|
}
|
|
6897
6916
|
|
|
6898
|
-
// .dist-releases/
|
|
6917
|
+
// .dist-releases/1784894032002-2676534/src/supervisor/runtime.js
|
|
6899
6918
|
var RESOLVE_CAPTURE_LINES = 200;
|
|
6900
6919
|
var SHORT_LIVED_EXIT_MS = 5000;
|
|
6901
6920
|
var STARTUP_OBSERVATION_MS = 1e4;
|
|
@@ -7565,7 +7584,7 @@ function errorMessage5(error) {
|
|
|
7565
7584
|
function formatRestartCommand(command) {
|
|
7566
7585
|
return command.map((part) => /^[A-Za-z0-9_./:=@%+-]+$/.test(part) ? part : `'${part.replaceAll("'", "'\\''")}'`).join(" ");
|
|
7567
7586
|
}
|
|
7568
|
-
// .dist-releases/
|
|
7587
|
+
// .dist-releases/1784894032002-2676534/src/supervisor/transport.js
|
|
7569
7588
|
var SUPPORTED_PHASE1_CLI_KINDS = ["claude", "codex"];
|
|
7570
7589
|
var PHASE1_ENGINE_GATE_MESSAGE = "Only claude and codex engines are available in this release; opencode and custom CLI engines will open in the next release.";
|
|
7571
7590
|
var PHASE1_TRANSPORT_GATE_MESSAGE = "Only tmux transport is available in this release; sdk, headless, and pty transports will open in the next release.";
|
|
@@ -7773,7 +7792,7 @@ function hasCodexSafetyDriverOptions(options) {
|
|
|
7773
7792
|
return options?.codex?.sandboxMode !== undefined || options?.codex?.approvalPolicy !== undefined || options?.codex?.yolo !== undefined;
|
|
7774
7793
|
}
|
|
7775
7794
|
|
|
7776
|
-
// .dist-releases/
|
|
7795
|
+
// .dist-releases/1784894032002-2676534/src/supervisor/cli-options.js
|
|
7777
7796
|
function parseSuperviseArgs(argv) {
|
|
7778
7797
|
const split = argv.indexOf("--");
|
|
7779
7798
|
const flagArgs = split >= 0 ? argv.slice(0, split) : argv;
|
|
@@ -7925,7 +7944,7 @@ function optionalBoolean(value, label) {
|
|
|
7925
7944
|
return false;
|
|
7926
7945
|
throw new Error(`${label} must be true or false`);
|
|
7927
7946
|
}
|
|
7928
|
-
// .dist-releases/
|
|
7947
|
+
// .dist-releases/1784894032002-2676534/src/supervisor/tmux-availability.js
|
|
7929
7948
|
import { spawn as spawn3 } from "node:child_process";
|
|
7930
7949
|
import { createInterface } from "node:readline";
|
|
7931
7950
|
function isTmuxAvailable(spawnFn = spawn3) {
|
|
@@ -8042,7 +8061,7 @@ function _tmuxMissingMessage(platform2) {
|
|
|
8042
8061
|
const how = platform2 === "darwin" ? "brew install tmux" : platform2 === "linux" ? "install tmux via your package manager (e.g. sudo apt-get install -y tmux)" : "install tmux";
|
|
8043
8062
|
return `tmux is required in this release but was not found. Install tmux (${how}) and re-run.`;
|
|
8044
8063
|
}
|
|
8045
|
-
// .dist-releases/
|
|
8064
|
+
// .dist-releases/1784894032002-2676534/src/output-format.js
|
|
8046
8065
|
function parseOutputArgs(argv) {
|
|
8047
8066
|
const separator = argv.indexOf("--");
|
|
8048
8067
|
const localArgv = separator < 0 ? argv : argv.slice(0, separator);
|
|
@@ -8135,7 +8154,7 @@ ${normalized.split(`
|
|
|
8135
8154
|
`)}`;
|
|
8136
8155
|
}
|
|
8137
8156
|
|
|
8138
|
-
// .dist-releases/
|
|
8157
|
+
// .dist-releases/1784894032002-2676534/src/plain-output-fields.js
|
|
8139
8158
|
var PREVIEW_LIMIT = 20;
|
|
8140
8159
|
var UNSAFE_DISPLAY_CODE_POINT = /[\u007f-\u009f\u2028-\u202e\u2066-\u2069]/gu;
|
|
8141
8160
|
function renderTaskPlain(command, value) {
|
|
@@ -8543,7 +8562,7 @@ function _omissionLine(total) {
|
|
|
8543
8562
|
return total > PREVIEW_LIMIT ? `Omitted ${total - PREVIEW_LIMIT}; rerun with --format json for the complete response.` : undefined;
|
|
8544
8563
|
}
|
|
8545
8564
|
|
|
8546
|
-
// .dist-releases/
|
|
8565
|
+
// .dist-releases/1784894032002-2676534/src/host/cli.js
|
|
8547
8566
|
var HOST_RELAY_SUBCOMMANDS = new Set(["consume", "heartbeat", "list", "register"]);
|
|
8548
8567
|
async function runHostCommandFromCli(client, argv, config, io) {
|
|
8549
8568
|
const sub = argv[0] ?? "list";
|
|
@@ -8781,7 +8800,7 @@ function optionalDisplayName(value) {
|
|
|
8781
8800
|
const trimmed = value?.trim();
|
|
8782
8801
|
return trimmed || undefined;
|
|
8783
8802
|
}
|
|
8784
|
-
// .dist-releases/
|
|
8803
|
+
// .dist-releases/1784894032002-2676534/src/host/service.js
|
|
8785
8804
|
import { execFile as execFileCb } from "node:child_process";
|
|
8786
8805
|
import { createHash as createHash4 } from "node:crypto";
|
|
8787
8806
|
import { constants as fsConstants2 } from "node:fs";
|
|
@@ -9302,7 +9321,7 @@ function writeServiceLog(io, event, fields) {
|
|
|
9302
9321
|
io.stderr.write(`${JSON.stringify({ ts: new Date().toISOString(), event, ...fields ?? {} })}
|
|
9303
9322
|
`);
|
|
9304
9323
|
}
|
|
9305
|
-
// .dist-releases/
|
|
9324
|
+
// .dist-releases/1784894032002-2676534/src/host/git-remote.js
|
|
9306
9325
|
var GIT_SECRET_PATH_MARKERS = [
|
|
9307
9326
|
"token",
|
|
9308
9327
|
"credential",
|
|
@@ -9394,7 +9413,7 @@ function looksLikeCredential(segment2) {
|
|
|
9394
9413
|
return value.length >= 32 && /^[A-Za-z0-9_-]+$/u.test(value);
|
|
9395
9414
|
}
|
|
9396
9415
|
|
|
9397
|
-
// .dist-releases/
|
|
9416
|
+
// .dist-releases/1784894032002-2676534/src/host/start-spec.js
|
|
9398
9417
|
var TRANSPORTS = ["auto", "sdk", "pty", "tmux", "headless"];
|
|
9399
9418
|
var SUPPORTED_PHASE1_ENGINES = ["claude", "codex"];
|
|
9400
9419
|
var ENGINE_PATTERN = /^[a-z][a-z0-9._-]{0,63}$/u;
|
|
@@ -9644,7 +9663,7 @@ function _trimmed(value, label) {
|
|
|
9644
9663
|
throw new Error(`${label} must not be empty`);
|
|
9645
9664
|
return trimmed;
|
|
9646
9665
|
}
|
|
9647
|
-
// .dist-releases/
|
|
9666
|
+
// .dist-releases/1784894032002-2676534/src/host/workspace.js
|
|
9648
9667
|
import { spawn as spawn4 } from "node:child_process";
|
|
9649
9668
|
import { existsSync as existsSync4 } from "node:fs";
|
|
9650
9669
|
import { mkdir as mkdir5, readdir as readdir2, rename as rename4, stat } from "node:fs/promises";
|
|
@@ -9875,7 +9894,7 @@ function _safeSegment(value) {
|
|
|
9875
9894
|
throw new Error("workspace path segment is empty after sanitizing");
|
|
9876
9895
|
return segment2;
|
|
9877
9896
|
}
|
|
9878
|
-
// .dist-releases/
|
|
9897
|
+
// .dist-releases/1784894032002-2676534/src/host/workspace-inventory.js
|
|
9879
9898
|
import { access as access2 } from "node:fs/promises";
|
|
9880
9899
|
import { constants } from "node:fs";
|
|
9881
9900
|
import { execFile as execFile2 } from "node:child_process";
|
|
@@ -9967,7 +9986,7 @@ async function canAccess(path12, mode, deps) {
|
|
|
9967
9986
|
return false;
|
|
9968
9987
|
}
|
|
9969
9988
|
}
|
|
9970
|
-
// .dist-releases/
|
|
9989
|
+
// .dist-releases/1784894032002-2676534/src/upgrade.js
|
|
9971
9990
|
import { spawn as spawn5 } from "node:child_process";
|
|
9972
9991
|
import { execFile as execFileCb2 } from "node:child_process";
|
|
9973
9992
|
import { readFile as readFile5 } from "node:fs/promises";
|
|
@@ -10025,7 +10044,7 @@ function _writeUpgradeResult(output, before, after, service) {
|
|
|
10025
10044
|
`);
|
|
10026
10045
|
}
|
|
10027
10046
|
|
|
10028
|
-
// .dist-releases/
|
|
10047
|
+
// .dist-releases/1784894032002-2676534/src/host/auto-update.js
|
|
10029
10048
|
var AUTO_UPDATE_HARD_DEADLINE_MS = 24 * 60 * 60 * 1000;
|
|
10030
10049
|
var AUTO_UPDATE_ATTEMPT_COOLDOWN_MS = 60 * 1000;
|
|
10031
10050
|
var MAX_UPDATE_ERROR_LENGTH = 500;
|
|
@@ -10121,7 +10140,7 @@ function _releaseTuple(value) {
|
|
|
10121
10140
|
return null;
|
|
10122
10141
|
return [Number(match[1]), Number(match[2]), Number(match[3])];
|
|
10123
10142
|
}
|
|
10124
|
-
// .dist-releases/
|
|
10143
|
+
// .dist-releases/1784894032002-2676534/src/host/host-config.js
|
|
10125
10144
|
import { chmod as chmod3, mkdir as mkdir6, readFile as readFile6, writeFile as writeFile6 } from "node:fs/promises";
|
|
10126
10145
|
import { homedir as homedir10 } from "node:os";
|
|
10127
10146
|
import path13 from "node:path";
|
|
@@ -10213,7 +10232,7 @@ function _parseHostConfig(text, configPath) {
|
|
|
10213
10232
|
...record.auto_update === undefined ? {} : { auto_update: record.auto_update }
|
|
10214
10233
|
};
|
|
10215
10234
|
}
|
|
10216
|
-
// .dist-releases/
|
|
10235
|
+
// .dist-releases/1784894032002-2676534/src/host/host-workspace-cli.js
|
|
10217
10236
|
async function runHostWorkspaceCommandFromCli(argv, io, deps = {}) {
|
|
10218
10237
|
const configPath = deps.configPath ?? defaultHostConfigPath();
|
|
10219
10238
|
const sub = argv[0] ?? "list";
|
|
@@ -10257,7 +10276,7 @@ function _renderAddPlain(result) {
|
|
|
10257
10276
|
return result.note ? `${status} ${result.path}
|
|
10258
10277
|
${result.note}` : `${status} ${result.path}`;
|
|
10259
10278
|
}
|
|
10260
|
-
// .dist-releases/
|
|
10279
|
+
// .dist-releases/1784894032002-2676534/src/host/agent-env.js
|
|
10261
10280
|
var RUNTIME_NATIVE_HOME_ENV = new Set(["CLAUDE_CONFIG_DIR", "CODEX_HOME"]);
|
|
10262
10281
|
function buildAgentEnv(options) {
|
|
10263
10282
|
const env = {};
|
|
@@ -10286,15 +10305,15 @@ function buildAgentEnv(options) {
|
|
|
10286
10305
|
}
|
|
10287
10306
|
return env;
|
|
10288
10307
|
}
|
|
10289
|
-
// .dist-releases/
|
|
10308
|
+
// .dist-releases/1784894032002-2676534/src/host/runtime-env.js
|
|
10290
10309
|
import path17 from "node:path";
|
|
10291
10310
|
|
|
10292
|
-
// .dist-releases/
|
|
10311
|
+
// .dist-releases/1784894032002-2676534/src/host/agent-defaults.js
|
|
10293
10312
|
import { chmod as chmod4, mkdir as mkdir7, readFile as readFile8, stat as stat2, writeFile as writeFile7 } from "node:fs/promises";
|
|
10294
10313
|
import { homedir as homedir11 } from "node:os";
|
|
10295
10314
|
import path15 from "node:path";
|
|
10296
10315
|
|
|
10297
|
-
// .dist-releases/
|
|
10316
|
+
// .dist-releases/1784894032002-2676534/src/host/claude-settings.js
|
|
10298
10317
|
import { readFile as readFile7 } from "node:fs/promises";
|
|
10299
10318
|
import path14 from "node:path";
|
|
10300
10319
|
async function readHostClaudeSettings(claudeConfigDir) {
|
|
@@ -10335,7 +10354,7 @@ function _nonEmptyString(value) {
|
|
|
10335
10354
|
return typeof value === "string" && value.trim() ? value : null;
|
|
10336
10355
|
}
|
|
10337
10356
|
|
|
10338
|
-
// .dist-releases/
|
|
10357
|
+
// .dist-releases/1784894032002-2676534/src/host/agent-defaults.js
|
|
10339
10358
|
var CODEX_BLOCK_BEGIN = "# sailorbridge-terse-defaults:begin";
|
|
10340
10359
|
var CODEX_BLOCK_END = "# sailorbridge-terse-defaults:end";
|
|
10341
10360
|
var CODEX_MODEL_BLOCK_BEGIN = "# sailorbridge-host-model-settings:begin";
|
|
@@ -11465,7 +11484,7 @@ function _escapeRegExp(value) {
|
|
|
11465
11484
|
return value.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&");
|
|
11466
11485
|
}
|
|
11467
11486
|
|
|
11468
|
-
// .dist-releases/
|
|
11487
|
+
// .dist-releases/1784894032002-2676534/src/host/engine-auth.js
|
|
11469
11488
|
import { lstat as lstat4, mkdir as mkdir8, readlink, realpath, stat as stat3, symlink as symlink2, unlink as unlink2 } from "node:fs/promises";
|
|
11470
11489
|
import { homedir as homedir12 } from "node:os";
|
|
11471
11490
|
import path16 from "node:path";
|
|
@@ -11555,7 +11574,7 @@ async function _ensureSymlink(linkPath, targetPath, sharedTargetPath) {
|
|
|
11555
11574
|
await symlink2(targetPath, linkPath);
|
|
11556
11575
|
}
|
|
11557
11576
|
|
|
11558
|
-
// .dist-releases/
|
|
11577
|
+
// .dist-releases/1784894032002-2676534/src/host/runtime-env.js
|
|
11559
11578
|
async function materializeAgentRuntimeEnv(options) {
|
|
11560
11579
|
const env = buildAgentEnv({
|
|
11561
11580
|
hostEnv: options.hostEnv,
|
|
@@ -11595,7 +11614,7 @@ function _ensureRootSandboxEscape(env, engine, uid) {
|
|
|
11595
11614
|
function _currentUid() {
|
|
11596
11615
|
return typeof process.getuid === "function" ? process.getuid() : null;
|
|
11597
11616
|
}
|
|
11598
|
-
// .dist-releases/
|
|
11617
|
+
// .dist-releases/1784894032002-2676534/src/host/context-statusline.js
|
|
11599
11618
|
function renderClaudeContextStatusLine(payload) {
|
|
11600
11619
|
const percent = _usedPercentage(payload);
|
|
11601
11620
|
if (percent === null)
|
|
@@ -11633,7 +11652,7 @@ function _bar(percent) {
|
|
|
11633
11652
|
const filled = Math.min(10, Math.max(0, Math.trunc(percent / 10)));
|
|
11634
11653
|
return "█".repeat(filled) + "░".repeat(10 - filled);
|
|
11635
11654
|
}
|
|
11636
|
-
// .dist-releases/
|
|
11655
|
+
// .dist-releases/1784894032002-2676534/src/host/scratch-sweeper.js
|
|
11637
11656
|
import { execFile as execFile3 } from "node:child_process";
|
|
11638
11657
|
import { lstat as lstat5, readdir as readdir3, realpath as realpath2, unlink as unlink3 } from "node:fs/promises";
|
|
11639
11658
|
import path18 from "node:path";
|
|
@@ -11776,7 +11795,7 @@ function _errno(error) {
|
|
|
11776
11795
|
return String(error.code);
|
|
11777
11796
|
return error instanceof Error ? error.message : String(error);
|
|
11778
11797
|
}
|
|
11779
|
-
// .dist-releases/
|
|
11798
|
+
// .dist-releases/1784894032002-2676534/src/host/launcher.js
|
|
11780
11799
|
var MAX_TMUX_SESSION_SUFFIX = 100;
|
|
11781
11800
|
async function launchSupervisedAgent(input, deps = {}) {
|
|
11782
11801
|
const spec = parseAgentStartSpec(input.spec);
|
|
@@ -11927,7 +11946,7 @@ async function _tmuxSessionExists(session) {
|
|
|
11927
11946
|
throw error;
|
|
11928
11947
|
}
|
|
11929
11948
|
}
|
|
11930
|
-
// .dist-releases/
|
|
11949
|
+
// .dist-releases/1784894032002-2676534/src/worker/capability.js
|
|
11931
11950
|
import { accessSync, constants as constants2, mkdirSync as mkdirSync3, mkdtempSync, readFileSync as readFileSync3, rmSync, writeFileSync as writeFileSync2 } from "node:fs";
|
|
11932
11951
|
import os from "node:os";
|
|
11933
11952
|
import path19 from "node:path";
|
|
@@ -12070,7 +12089,7 @@ function commandPath(command) {
|
|
|
12070
12089
|
return null;
|
|
12071
12090
|
}
|
|
12072
12091
|
|
|
12073
|
-
// .dist-releases/
|
|
12092
|
+
// .dist-releases/1784894032002-2676534/src/host/worker-start-spec.js
|
|
12074
12093
|
var MAX_TAGS = 32;
|
|
12075
12094
|
var TAG_PATTERN = /^[a-z0-9][a-z0-9=._:/-]{0,63}$/iu;
|
|
12076
12095
|
var RESERVED_TAG_KEYS = new Set(["os", "kernel", "arch", "gpu", "mode", "role", "tool"]);
|
|
@@ -12130,16 +12149,16 @@ function _trimmed2(value, label) {
|
|
|
12130
12149
|
return trimmed;
|
|
12131
12150
|
}
|
|
12132
12151
|
|
|
12133
|
-
// .dist-releases/
|
|
12152
|
+
// .dist-releases/1784894032002-2676534/src/host/worker-launcher.js
|
|
12134
12153
|
import { statSync as statSync3 } from "node:fs";
|
|
12135
12154
|
import os4 from "node:os";
|
|
12136
12155
|
import path22 from "node:path";
|
|
12137
|
-
// .dist-releases/
|
|
12156
|
+
// .dist-releases/1784894032002-2676534/src/worker/client.js
|
|
12138
12157
|
import { readFileSync as readFileSync5 } from "node:fs";
|
|
12139
12158
|
import os3 from "node:os";
|
|
12140
12159
|
import path21 from "node:path";
|
|
12141
12160
|
|
|
12142
|
-
// .dist-releases/
|
|
12161
|
+
// .dist-releases/1784894032002-2676534/src/worker/errors.js
|
|
12143
12162
|
class LeaseFencingRejected extends Error {
|
|
12144
12163
|
status;
|
|
12145
12164
|
constructor(status, message) {
|
|
@@ -12203,7 +12222,7 @@ function countsTowardWorkerSessionRebuild(path20) {
|
|
|
12203
12222
|
return true;
|
|
12204
12223
|
}
|
|
12205
12224
|
|
|
12206
|
-
// .dist-releases/
|
|
12225
|
+
// .dist-releases/1784894032002-2676534/src/worker/executor.js
|
|
12207
12226
|
import { spawn as spawn6 } from "node:child_process";
|
|
12208
12227
|
import { mkdirSync as mkdirSync4, mkdtempSync as mkdtempSync2, readFileSync as readFileSync4, realpathSync, rmSync as rmSync2, statfsSync, writeFileSync as writeFileSync3 } from "node:fs";
|
|
12209
12228
|
import { tmpdir as tmpdir2, loadavg } from "node:os";
|
|
@@ -12211,7 +12230,7 @@ import os2 from "node:os";
|
|
|
12211
12230
|
import path20 from "node:path";
|
|
12212
12231
|
import { TextDecoder } from "node:util";
|
|
12213
12232
|
|
|
12214
|
-
// .dist-releases/
|
|
12233
|
+
// .dist-releases/1784894032002-2676534/src/worker/async-queue.js
|
|
12215
12234
|
class AsyncByteQueue {
|
|
12216
12235
|
maxSize;
|
|
12217
12236
|
values = [];
|
|
@@ -12271,7 +12290,7 @@ class AsyncByteQueue {
|
|
|
12271
12290
|
}
|
|
12272
12291
|
}
|
|
12273
12292
|
|
|
12274
|
-
// .dist-releases/
|
|
12293
|
+
// .dist-releases/1784894032002-2676534/src/worker/http.js
|
|
12275
12294
|
import { request as httpRequest } from "node:http";
|
|
12276
12295
|
import { request as httpsRequest } from "node:https";
|
|
12277
12296
|
import { URLSearchParams as URLSearchParams2 } from "node:url";
|
|
@@ -12465,7 +12484,7 @@ function pathOnly(path20) {
|
|
|
12465
12484
|
return path20.split("?", 1)[0] || path20;
|
|
12466
12485
|
}
|
|
12467
12486
|
|
|
12468
|
-
// .dist-releases/
|
|
12487
|
+
// .dist-releases/1784894032002-2676534/src/worker/stream-upload.js
|
|
12469
12488
|
async function uploadStream(session, jobId, stream, leaseToken, chunks, workerId) {
|
|
12470
12489
|
if (!leaseToken.trim())
|
|
12471
12490
|
throw new Error("lease_token is required");
|
|
@@ -12475,7 +12494,7 @@ async function uploadStream(session, jobId, stream, leaseToken, chunks, workerId
|
|
|
12475
12494
|
await session.http.postBytes(`/api/v1/jobs/${encodeURIComponent(jobId)}/stream-upload?${query.toString()}`, chunks, { "X-Lease-Token": leaseToken }, UPLOAD_TIMEOUTS);
|
|
12476
12495
|
}
|
|
12477
12496
|
|
|
12478
|
-
// .dist-releases/
|
|
12497
|
+
// .dist-releases/1784894032002-2676534/src/worker/executor.js
|
|
12479
12498
|
class StreamingProcessFailure extends Error {
|
|
12480
12499
|
exitCode;
|
|
12481
12500
|
stdout;
|
|
@@ -13007,7 +13026,7 @@ function errorMessage6(error) {
|
|
|
13007
13026
|
return error instanceof Error ? error.message : String(error);
|
|
13008
13027
|
}
|
|
13009
13028
|
|
|
13010
|
-
// .dist-releases/
|
|
13029
|
+
// .dist-releases/1784894032002-2676534/src/worker/client.js
|
|
13011
13030
|
var TOKEN_FILES = [
|
|
13012
13031
|
"~/.config/sailorbridge/token",
|
|
13013
13032
|
"/etc/sailorbridge/token"
|
|
@@ -13404,7 +13423,7 @@ function errorName2(error) {
|
|
|
13404
13423
|
function errorMessage7(error) {
|
|
13405
13424
|
return error instanceof Error ? error.message : String(error);
|
|
13406
13425
|
}
|
|
13407
|
-
// .dist-releases/
|
|
13426
|
+
// .dist-releases/1784894032002-2676534/src/host/worker-launcher.js
|
|
13408
13427
|
var DEFAULT_WORKER_READY_TIMEOUT_MS = 60000;
|
|
13409
13428
|
async function launchSupervisedWorker(input, deps = {}) {
|
|
13410
13429
|
const logger = input.logger ?? (() => {});
|
|
@@ -13501,7 +13520,7 @@ function _assertWorkdir(workdir) {
|
|
|
13501
13520
|
return workdir;
|
|
13502
13521
|
}
|
|
13503
13522
|
|
|
13504
|
-
// .dist-releases/
|
|
13523
|
+
// .dist-releases/1784894032002-2676534/src/host/daemon.js
|
|
13505
13524
|
async function runHostDaemon(options) {
|
|
13506
13525
|
const logger = options.logger ?? (() => {});
|
|
13507
13526
|
const sleep3 = options.sleep ?? ((ms) => new Promise((resolve2) => setTimeout(resolve2, ms)));
|
|
@@ -13865,7 +13884,7 @@ async function _drainOnce(options, identity, starter, logger, redactSecrets, aut
|
|
|
13865
13884
|
return false;
|
|
13866
13885
|
}
|
|
13867
13886
|
}
|
|
13868
|
-
// .dist-releases/
|
|
13887
|
+
// .dist-releases/1784894032002-2676534/src/host/enrollment-redeem.js
|
|
13869
13888
|
var DEFAULT_NOT_FOUND_RETRIES = 3;
|
|
13870
13889
|
var NOT_FOUND_RETRY_DELAY_MS = 500;
|
|
13871
13890
|
function createEnrollmentRedeemer(options) {
|
|
@@ -14002,7 +14021,7 @@ function _role2(enrollment) {
|
|
|
14002
14021
|
}
|
|
14003
14022
|
return _string4(enrollment.roles[0], "roles[0]").trim();
|
|
14004
14023
|
}
|
|
14005
|
-
// .dist-releases/
|
|
14024
|
+
// .dist-releases/1784894032002-2676534/src/host/tutorial.js
|
|
14006
14025
|
function buildTutorialSteps(state) {
|
|
14007
14026
|
const paired = state.hasCredential;
|
|
14008
14027
|
return [
|
|
@@ -14073,7 +14092,7 @@ async function runTutorial(options) {
|
|
|
14073
14092
|
}
|
|
14074
14093
|
return steps;
|
|
14075
14094
|
}
|
|
14076
|
-
// .dist-releases/
|
|
14095
|
+
// .dist-releases/1784894032002-2676534/src/events.js
|
|
14077
14096
|
var EVENT_COMMANDS = new Set(["add", "list", "enable", "disable", "rm"]);
|
|
14078
14097
|
var EVENT_FLAGS = new Set(["at", "days", "message", "run-date", "session", "tag", "tz"]);
|
|
14079
14098
|
var PRODUCT_DAYS_MODES = new Set(["once", "daily", "weekday"]);
|
|
@@ -14163,7 +14182,7 @@ function _assertListArgs(args) {
|
|
|
14163
14182
|
}
|
|
14164
14183
|
}
|
|
14165
14184
|
|
|
14166
|
-
// .dist-releases/
|
|
14185
|
+
// .dist-releases/1784894032002-2676534/src/text-input.js
|
|
14167
14186
|
import { readFile as readFile9 } from "node:fs/promises";
|
|
14168
14187
|
var _readUtf8File = async (file) => await readFile9(file, "utf8");
|
|
14169
14188
|
async function readTextInput(input) {
|
|
@@ -14207,7 +14226,7 @@ async function readTextFileOrStdin(path23, input, unusedInputMessage, readUtf8Fi
|
|
|
14207
14226
|
return await readTextFile(path23, readUtf8File2);
|
|
14208
14227
|
}
|
|
14209
14228
|
|
|
14210
|
-
// .dist-releases/
|
|
14229
|
+
// .dist-releases/1784894032002-2676534/src/ask.js
|
|
14211
14230
|
var ASK_FLAGS = new Set(["body-file", "option", "reason", "recommend", "session", "title"]);
|
|
14212
14231
|
async function runAskFromCli(client2, argv, config, input) {
|
|
14213
14232
|
const args = _parseAskArgs(argv);
|
|
@@ -14322,7 +14341,7 @@ function _singleAskValue(values, name) {
|
|
|
14322
14341
|
return entries[0];
|
|
14323
14342
|
}
|
|
14324
14343
|
|
|
14325
|
-
// .dist-releases/
|
|
14344
|
+
// .dist-releases/1784894032002-2676534/src/task.js
|
|
14326
14345
|
import { readFile as readFile10 } from "node:fs/promises";
|
|
14327
14346
|
import { basename } from "node:path";
|
|
14328
14347
|
var TASK_FLAGS = new Set(["after", "all", "artifact-id", "before", "body-file", "commit", "depends", "description", "description-file", "draft", "findings", "image", "level", "limit", "owner-of-resume", "pair", "priority", "query", "reason", "resume-condition", "resume-dependency", "session", "status", "type", "version"]);
|
|
@@ -14812,7 +14831,7 @@ function _taskListFooter(shown, returned, total, hasMore, cursor) {
|
|
|
14812
14831
|
return `Shown ${shown} of ${total}${local}${next}`;
|
|
14813
14832
|
}
|
|
14814
14833
|
|
|
14815
|
-
// .dist-releases/
|
|
14834
|
+
// .dist-releases/1784894032002-2676534/src/team.js
|
|
14816
14835
|
var TEAM_BOOTSTRAP_ENGINES = new Set(["claude", "codex"]);
|
|
14817
14836
|
var SLOT_SPEC_RE = /^([^=\s]+)=([^:@\s]+):([^:@\s]+)$/;
|
|
14818
14837
|
var TEAM_PLAIN_LIMIT = 20;
|
|
@@ -14967,7 +14986,7 @@ function _slotTable(slots) {
|
|
|
14967
14986
|
Shown ${shown.length} of ${slots.length}${omitted ? `; ${omitted} omitted (use --format json)` : ""}`;
|
|
14968
14987
|
}
|
|
14969
14988
|
|
|
14970
|
-
// .dist-releases/
|
|
14989
|
+
// .dist-releases/1784894032002-2676534/src/memory.js
|
|
14971
14990
|
var VALUE_FLAGS = new Set(["file", "source"]);
|
|
14972
14991
|
var MEMORY_SEARCH_PLAIN_LIMIT = 20;
|
|
14973
14992
|
async function runMemoryFromCli(client2, argv, config, input, format) {
|
|
@@ -15102,7 +15121,7 @@ function _summary(value) {
|
|
|
15102
15121
|
return value.replace(/\s+/gu, " ").trim().slice(0, 180);
|
|
15103
15122
|
}
|
|
15104
15123
|
|
|
15105
|
-
// .dist-releases/
|
|
15124
|
+
// .dist-releases/1784894032002-2676534/src/mailbox-send.js
|
|
15106
15125
|
var SEND_FLAGS = new Set(["body-file", "commit", "session", "tag", "task-id", "task-version", "to-agents", "to-roles", "to-host"]);
|
|
15107
15126
|
function parseMailboxSendArgs(argv) {
|
|
15108
15127
|
const parsed = argsFromValues(parseFlagValues(argv));
|
|
@@ -15201,7 +15220,7 @@ function splitList(value) {
|
|
|
15201
15220
|
return list?.length ? list : undefined;
|
|
15202
15221
|
}
|
|
15203
15222
|
|
|
15204
|
-
// .dist-releases/
|
|
15223
|
+
// .dist-releases/1784894032002-2676534/src/reply.js
|
|
15205
15224
|
var REPLY_FLAGS = new Set(["agent", "body-file", "in-reply-to", "session"]);
|
|
15206
15225
|
async function sendReplyFromCli(client2, argv, config, io) {
|
|
15207
15226
|
const args = _parseReplyArgs(argv);
|
|
@@ -15258,12 +15277,13 @@ function _requiredReplyValue(values, name) {
|
|
|
15258
15277
|
return value;
|
|
15259
15278
|
}
|
|
15260
15279
|
|
|
15261
|
-
// .dist-releases/
|
|
15280
|
+
// .dist-releases/1784894032002-2676534/src/worker-command.js
|
|
15262
15281
|
async function runWorkerCommandFromCli(client2, argv, config, io, format = "plain") {
|
|
15282
|
+
const command = argv[0];
|
|
15283
|
+
_requireWorkerCredential(config.keyScope, command);
|
|
15263
15284
|
const captainId = config.captainId;
|
|
15264
15285
|
if (!captainId)
|
|
15265
15286
|
throw new Error("SAILORBRIDGE_CAPTAIN_ID is required for worker commands");
|
|
15266
|
-
const command = argv[0];
|
|
15267
15287
|
switch (command) {
|
|
15268
15288
|
case "list":
|
|
15269
15289
|
return _listWorkers(client2, captainId, _requireSession(config.session), argv.slice(1), io, format);
|
|
@@ -15275,6 +15295,14 @@ async function runWorkerCommandFromCli(client2, argv, config, io, format = "plai
|
|
|
15275
15295
|
throw new Error("worker command must be job, list, run, or serve");
|
|
15276
15296
|
}
|
|
15277
15297
|
}
|
|
15298
|
+
function _requireWorkerCredential(keyScope, command) {
|
|
15299
|
+
if (keyScope !== "host")
|
|
15300
|
+
return;
|
|
15301
|
+
if (command === "list") {
|
|
15302
|
+
throw new Error("worker list cannot use a paired host credential. " + "Open this team's Workers page in the SailorBridge console.");
|
|
15303
|
+
}
|
|
15304
|
+
throw new Error("worker run/job requires a member-runtime credential; this command loaded a paired host credential. " + "Retry from a member workspace where SAILORBRIDGE_TOKEN is already set.");
|
|
15305
|
+
}
|
|
15278
15306
|
function _requireSession(session) {
|
|
15279
15307
|
if (!session)
|
|
15280
15308
|
throw new Error("SAILORBRIDGE_SESSION is required for worker list and run");
|
|
@@ -15439,7 +15467,7 @@ function _writeSignalStatus(remoteCode, localStatus, remoteStderr, io) {
|
|
|
15439
15467
|
`);
|
|
15440
15468
|
}
|
|
15441
15469
|
|
|
15442
|
-
// .dist-releases/
|
|
15470
|
+
// .dist-releases/1784894032002-2676534/src/create.js
|
|
15443
15471
|
var CREATE_ENGINES = new Set(["claude", "codex"]);
|
|
15444
15472
|
var DEFAULT_ENGINE = "claude";
|
|
15445
15473
|
var WORKSPACE_PLAIN_LIMIT = 20;
|
|
@@ -15829,7 +15857,7 @@ function _workerPlain(hostId, workdir, result) {
|
|
|
15829
15857
|
`);
|
|
15830
15858
|
}
|
|
15831
15859
|
|
|
15832
|
-
// .dist-releases/
|
|
15860
|
+
// .dist-releases/1784894032002-2676534/src/cli.js
|
|
15833
15861
|
var FORMATTED_COMMANDS = new Set([
|
|
15834
15862
|
"ask",
|
|
15835
15863
|
"create",
|
|
@@ -16509,7 +16537,7 @@ function _usageText() {
|
|
|
16509
16537
|
sailorbridge event add --at HH:MM --tz IANA --days once|daily|weekday --message TEXT [--run-date YYYY-MM-DD] [--tag T] [--disabled] [--session S]
|
|
16510
16538
|
sailorbridge event list [--session S]
|
|
16511
16539
|
sailorbridge event enable|disable|rm EVENT_ID [--session S]
|
|
16512
|
-
sailorbridge ask --title TITLE --option LABEL::DESCRIPTION --option LABEL::DESCRIPTION --recommend A --reason TEXT [--reason TEXT]
|
|
16540
|
+
sailorbridge ask --title TITLE --option LABEL::DESCRIPTION --option LABEL::DESCRIPTION --recommend A --reason TEXT [--reason TEXT] --body-file - [--session S]
|
|
16513
16541
|
sailorbridge ask list [--session S]
|
|
16514
16542
|
sailorbridge ask get|status DECISION_ID [--session S]
|
|
16515
16543
|
sailorbridge task create [--description TEXT|-|--body-file PATH|-|--description-file PATH|-] [--pair PAIR] [--draft|--status draft|new] [--type feature|bug|docs|chore] [--priority high|normal|low] [--level d1|d2|d3|d4] [--depends TASK[,TASK]] [--artifact-id ID] [--image PATH] [--session S]
|
|
@@ -16599,5 +16627,5 @@ function _looksLikeNetworkFailure(message) {
|
|
|
16599
16627
|
return /fetch failed|network|ECONN(?:REFUSED|RESET)|ENOTFOUND|ETIMEDOUT/iu.test(message);
|
|
16600
16628
|
}
|
|
16601
16629
|
|
|
16602
|
-
//# debugId=
|
|
16630
|
+
//# debugId=F9747B92FC45FFDB64756E2164756E21
|
|
16603
16631
|
//# sourceMappingURL=cli.js.map
|