svamp-cli 0.2.342 → 0.2.346
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/bin/skills/artifact/SKILL.md +1 -1
- package/bin/skills/crew/SKILL.md +21 -3
- package/dist/DefaultTransport-vfp78fug.mjs +47 -0
- package/dist/GeminiTransport-3OkhtFRO.mjs +130 -0
- package/dist/KimiTransport-D8n009Tr.mjs +141 -0
- package/dist/acpAgentConfig-CObOPlA8.mjs +48 -0
- package/dist/acpBackend-BZ1MJhQV.mjs +922 -0
- package/dist/{adminCommands-CRTBDZan.mjs → adminCommands-BvsYnRDA.mjs} +2 -18
- package/dist/{agentCommands-BuO988tJ.mjs → agentCommands-B2Nl7Fof.mjs} +6 -23
- package/dist/api-BHjyC0Ph.mjs +157 -0
- package/dist/{auth--WS0wezs.mjs → auth-CRz8TsEl.mjs} +1 -22
- package/dist/bootStatus-DqtNgJch.mjs +143 -0
- package/dist/claudeAuth-iAerdaMr.mjs +247 -0
- package/dist/cli.mjs +2939 -5
- package/dist/codexAppServerBackend-VGsYtbqg.mjs +786 -0
- package/dist/codexProvider-BtxYc5Rj.mjs +68 -0
- package/dist/{commands-DXM17M6n.mjs → commands-BB1Kcyt-.mjs} +13 -19
- package/dist/{commands-DU4B-4Gh.mjs → commands-BOpoVBOM.mjs} +55 -25
- package/dist/{commands-C0HQiu-S.mjs → commands-C2aODeVc.mjs} +58 -33
- package/dist/{commands-Cwxy-C5N.mjs → commands-CiRCwjkJ.mjs} +10 -32
- package/dist/{commands-DDuGBSsz.mjs → commands-D1pZq3d4.mjs} +103 -41
- package/dist/{commands-BKb1g8Gq.mjs → commands-D69mnkYu.mjs} +20 -30
- package/dist/{commands-BsKgZ5sQ.mjs → commands-DW5RnHZw.mjs} +2 -19
- package/dist/{commands-DXLOKJOj.mjs → commands-H4PsTGn8.mjs} +58 -26
- package/dist/cron-hHGdb5kU.mjs +132 -0
- package/dist/detectIsolation-CzoDCEnh.mjs +319 -0
- package/dist/envFlag-COOuJ3AH.mjs +11 -0
- package/dist/fileLock-BMPwCrB6.mjs +80 -0
- package/dist/{fleet-BHzlAvnu.mjs → fleet-DM_Q7w69.mjs} +85 -24
- package/dist/flushExit-C-i6SGjj.mjs +37 -0
- package/dist/friendlyName-1UZcyDhu.mjs +586 -0
- package/dist/{headlessCli-C2gvOpOt.mjs → headlessCli-C8HzQvis.mjs} +3 -21
- package/dist/hookSettings-DYMTUgVA.mjs +10399 -0
- package/dist/{httpServer-Be1Hcddr.mjs → httpServer-BzEDbOGn.mjs} +14 -5
- package/dist/hyphaClient-ybivOjZo.mjs +49 -0
- package/dist/index.mjs +40 -8
- package/dist/instance-CeHz5C8v.mjs +203 -0
- package/dist/kimiProvider-DbxODebR.mjs +69 -0
- package/dist/kimiSetup-NGsoYB5h.mjs +48 -0
- package/dist/loopVerify-B47sSjxe.mjs +444 -0
- package/dist/machineTools-DygM1jXW.mjs +580 -0
- package/dist/model-CUHojegn.mjs +66 -0
- package/dist/{notifyCommands-0aZUwKQK.mjs → notifyCommands-D-IKIxiq.mjs} +3 -18
- package/dist/package-DtuINqf5.mjs +64 -0
- package/dist/pinnedCodex-XW4qvOAe.mjs +11 -0
- package/dist/pinnedNono-5ZHb6328.mjs +15 -0
- package/dist/{rpc-rAQQ1q8t.mjs → rpc-BB6RF4-F.mjs} +38 -6
- package/dist/{rpc-B2Lc2BAB.mjs → rpc-Cf0grcru.mjs} +28 -20
- package/dist/{run-C7QVfyw4.mjs → run-ChdsgaSD.mjs} +17 -9
- package/dist/run-DkjwF-zA.mjs +9695 -0
- package/dist/sandboxDetect-Cdzsj5TC.mjs +19 -0
- package/dist/{scheduler-CzF4lOe_.mjs → scheduler-BY30ZrB9.mjs} +38 -6
- package/dist/securityContext-Cm5UTCuD.mjs +218 -0
- package/dist/serveAuth-DbVLRCRR.mjs +418 -0
- package/dist/{serveCommands-EIEqdaVu.mjs → serveCommands-CUHUiYnZ.mjs} +13 -34
- package/dist/sharingNotificationSync-qGIQ-3yf.mjs +359 -0
- package/dist/{sideband-BoutiRJi.mjs → sideband-68HhGT0i.mjs} +1 -21
- package/dist/store-Bn0ByYev.mjs +347 -0
- package/dist/store-fi0f-ff1.mjs +184 -0
- package/dist/types-57J3Re0n.mjs +17 -0
- package/dist/wantsHelp-6bMOeNUz.mjs +5 -0
- package/dist/wrapCommand-CdNawSaa.mjs +117 -0
- package/package.json +3 -3
- package/dist/cli-B24CmIli.mjs +0 -2780
- package/dist/package-CTbGYaJG.mjs +0 -64
- package/dist/run-CF4kAVPW.mjs +0 -26508
- package/dist/sandboxDetect-DNTcbgWD.mjs +0 -12
|
@@ -1,26 +1,12 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import os from 'node:os';
|
|
4
|
-
import {
|
|
4
|
+
import { c as connectToHypha } from './hyphaClient-ybivOjZo.mjs';
|
|
5
5
|
import { PINNED_CLAUDE_CODE_VERSION } from './pinnedClaudeCode-LCVY4Otm.mjs';
|
|
6
|
-
import '
|
|
7
|
-
import '
|
|
8
|
-
import 'fs';
|
|
9
|
-
import 'path';
|
|
10
|
-
import 'url';
|
|
11
|
-
import 'child_process';
|
|
12
|
-
import 'crypto';
|
|
13
|
-
import 'node:crypto';
|
|
6
|
+
import { P as PINNED_CODEX_VERSION } from './pinnedCodex-XW4qvOAe.mjs';
|
|
7
|
+
import { P as PINNED_NONO_VERSION } from './pinnedNono-5ZHb6328.mjs';
|
|
14
8
|
import 'node:child_process';
|
|
15
|
-
import 'util';
|
|
16
|
-
import 'http';
|
|
17
|
-
import 'net';
|
|
18
|
-
import 'node:events';
|
|
19
|
-
import '@agentclientprotocol/sdk';
|
|
20
9
|
import 'node:util';
|
|
21
|
-
import 'node:readline';
|
|
22
|
-
import 'node:fs/promises';
|
|
23
|
-
import 'yaml';
|
|
24
10
|
|
|
25
11
|
const KIMI_NPM_PACKAGE = "@moonshot-ai/kimi-code";
|
|
26
12
|
const PINNED_KIMI_VERSION = "0.38.0";
|
|
@@ -155,28 +141,44 @@ async function fleetStatus() {
|
|
|
155
141
|
return;
|
|
156
142
|
}
|
|
157
143
|
try {
|
|
158
|
-
printHeader(["MACHINE ID", "LABEL", "CLAUDE", "SVAMP", "STATUS"], [20, 24, 12, 10, 12]);
|
|
144
|
+
printHeader(["MACHINE ID", "LABEL", "CLAUDE", "SVAMP", "NONO", "STATUS"], [20, 24, 12, 10, 14, 12]);
|
|
159
145
|
const rows = await fanOut(machines, async (m) => {
|
|
160
|
-
const [claudeRes, svampRes] = await Promise.all([
|
|
146
|
+
const [claudeRes, svampRes, nonoRes] = await Promise.all([
|
|
161
147
|
m.rpc.bash("claude --version 2>/dev/null || echo unknown").catch(() => null),
|
|
162
|
-
m.rpc.bash("svamp --version 2>/dev/null || echo unknown").catch(() => null)
|
|
148
|
+
m.rpc.bash("svamp --version 2>/dev/null || echo unknown").catch(() => null),
|
|
149
|
+
// Check PATH and the svamp-managed location — installNono writes to the latter,
|
|
150
|
+
// which is not necessarily on the daemon's PATH (see #0-series PATH notes).
|
|
151
|
+
m.rpc.bash("nono --version 2>/dev/null || ~/.svamp/tools/bin/nono --version 2>/dev/null || echo none").catch(() => null)
|
|
163
152
|
]);
|
|
164
153
|
const claude = parseVersionOutput(claudeRes?.stdout);
|
|
165
154
|
const svamp = parseVersionOutput(svampRes?.stdout);
|
|
155
|
+
const nono = parseVersionOutput(nonoRes?.stdout);
|
|
166
156
|
const info = await m.rpc.getMachineInfo();
|
|
167
|
-
return { claude, svamp, status: info.daemonState?.status || "unknown" };
|
|
157
|
+
return { claude, svamp, nono, status: info.daemonState?.status || "unknown" };
|
|
168
158
|
});
|
|
159
|
+
let driftingNono = 0;
|
|
169
160
|
for (const r of rows) {
|
|
170
161
|
const id = truncate(r.machine.machineId, 18).padEnd(20);
|
|
171
162
|
const label = truncate(r.machine.label, 22).padEnd(24);
|
|
172
163
|
const claude = (r.ok ? r.result.claude : "-").padEnd(12);
|
|
173
164
|
const svamp = (r.ok ? r.result.svamp : "-").padEnd(10);
|
|
165
|
+
const nonoRaw = r.ok ? r.result.nono : "-";
|
|
166
|
+
const nonoDrift = r.ok && nonoRaw !== PINNED_NONO_VERSION;
|
|
167
|
+
const nono = (nonoDrift ? `${nonoRaw} !` : nonoRaw).padEnd(14);
|
|
174
168
|
const status = r.ok ? r.result.status : r.error || "fail";
|
|
175
169
|
const color = r.ok && r.result.status === "running" ? "\x1B[32m" : "\x1B[31m";
|
|
176
|
-
console.log(`${id} ${label} ${claude} ${svamp} ${color}${status}\x1B[0m`);
|
|
170
|
+
console.log(`${id} ${label} ${claude} ${svamp} ${nono}${color}${status}\x1B[0m`);
|
|
171
|
+
if (nonoDrift) driftingNono += 1;
|
|
177
172
|
}
|
|
178
173
|
console.log(`
|
|
179
174
|
${machines.length} machine(s).`);
|
|
175
|
+
if (driftingNono > 0) {
|
|
176
|
+
console.log(
|
|
177
|
+
`
|
|
178
|
+
\x1B[33m! ${driftingNono} machine(s) are not on the pinned nono ${PINNED_NONO_VERSION}\x1B[0m \u2014 nono IS the sandbox boundary, and installNono() only runs when the binary is ABSENT, so an
|
|
179
|
+
existing machine never picks up the pin. Reconcile deliberately with: svamp fleet upgrade-nono`
|
|
180
|
+
);
|
|
181
|
+
}
|
|
180
182
|
} finally {
|
|
181
183
|
await server.disconnect();
|
|
182
184
|
}
|
|
@@ -290,6 +292,53 @@ ${rows.length - failures}/${rows.length} machines on codex ${version}.`);
|
|
|
290
292
|
await server.disconnect();
|
|
291
293
|
}
|
|
292
294
|
}
|
|
295
|
+
async function fleetUpgradeNono(opts) {
|
|
296
|
+
if (opts?.version && opts.version !== PINNED_NONO_VERSION) {
|
|
297
|
+
console.error(`Refusing to install nono ${opts.version}: this command reconciles the PIN, and the pin is ${PINNED_NONO_VERSION}.`);
|
|
298
|
+
console.error("");
|
|
299
|
+
console.error("nono is the sandbox boundary, so the version that reaches the fleet must be the one");
|
|
300
|
+
console.error("reviewed in a commit \u2014 not one typed at the prompt. To roll a different nono:");
|
|
301
|
+
console.error(` 1. bump PINNED_NONO_VERSION to ${opts.version} in packages/svamp-cli/src/daemon/pinnedNono.ts`);
|
|
302
|
+
console.error(" (this also updates the checksum the installer verifies against)");
|
|
303
|
+
console.error(" 2. land + publish it, then re-run `svamp fleet upgrade-nono` with no -v");
|
|
304
|
+
process.exitCode = 1;
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
const version = PINNED_NONO_VERSION;
|
|
308
|
+
const { server, machines } = await discoverMachines();
|
|
309
|
+
if (machines.length === 0) {
|
|
310
|
+
console.log("No machines found.");
|
|
311
|
+
await server.disconnect();
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
console.log(`Reconciling nono to ${version} on ${machines.length} machine(s)...
|
|
315
|
+
`);
|
|
316
|
+
console.log("nono IS the sandbox boundary \u2014 roll it deliberately, and canary one machine first.");
|
|
317
|
+
console.log("No daemon restart needed: the new binary applies to sessions started after this.\n");
|
|
318
|
+
try {
|
|
319
|
+
printHeader(["MACHINE ID", "LABEL", "STATE", "DETAIL"], [20, 24, 6, 60]);
|
|
320
|
+
const cmd = `svamp daemon install-nono 2>&1 | tail -5`;
|
|
321
|
+
const rows = await fanOut(machines, async (m) => await m.rpc.bash(cmd, void 0));
|
|
322
|
+
let failures = 0;
|
|
323
|
+
for (const r of rows) {
|
|
324
|
+
if (!r.ok) {
|
|
325
|
+
printResultRow(r.machine, "FAIL", r.error || "");
|
|
326
|
+
failures += 1;
|
|
327
|
+
continue;
|
|
328
|
+
}
|
|
329
|
+
const ok = r.result.exitCode === 0;
|
|
330
|
+
const detail = (r.result.stdout?.trim().split("\n").slice(-1)[0] || r.result.stderr?.trim().slice(-200) || "").replace(/\s+/g, " ");
|
|
331
|
+
printResultRow(r.machine, ok ? "OK" : "FAIL", detail);
|
|
332
|
+
if (!ok) failures += 1;
|
|
333
|
+
}
|
|
334
|
+
console.log(`
|
|
335
|
+
${rows.length - failures}/${rows.length} machines reconciled to nono ${version}.`);
|
|
336
|
+
console.log("Confirm with: svamp fleet status (the NONO column flags anything off the pin)");
|
|
337
|
+
if (failures > 0) process.exitCode = 1;
|
|
338
|
+
} finally {
|
|
339
|
+
await server.disconnect();
|
|
340
|
+
}
|
|
341
|
+
}
|
|
293
342
|
async function fleetUpgradeKimi(opts) {
|
|
294
343
|
const version = opts?.version || PINNED_KIMI_VERSION;
|
|
295
344
|
const { server, machines } = await discoverMachines();
|
|
@@ -374,6 +423,15 @@ ${rows.length - failures}/${rows.length} machines updated (new binary installed)
|
|
|
374
423
|
await server.disconnect();
|
|
375
424
|
}
|
|
376
425
|
}
|
|
426
|
+
function fleetDaemonRestartCommand(opts) {
|
|
427
|
+
if (opts?.graceful === false) {
|
|
428
|
+
return `svamp daemon stop --cleanup 2>&1 && svamp daemon start 2>&1`;
|
|
429
|
+
}
|
|
430
|
+
if (opts?.force) {
|
|
431
|
+
return `svamp daemon restart 2>&1`;
|
|
432
|
+
}
|
|
433
|
+
return `svamp daemon restart --when-idle 2>&1`;
|
|
434
|
+
}
|
|
377
435
|
async function fleetDaemonRestart(opts) {
|
|
378
436
|
const { server, machines } = await discoverMachines();
|
|
379
437
|
if (machines.length === 0) {
|
|
@@ -382,8 +440,11 @@ async function fleetDaemonRestart(opts) {
|
|
|
382
440
|
return;
|
|
383
441
|
}
|
|
384
442
|
try {
|
|
443
|
+
const cmd = fleetDaemonRestartCommand(opts);
|
|
444
|
+
const mode = opts?.graceful === false ? "cleanup (hard stop+start)" : opts?.force ? "force (immediate)" : "graceful (restart when idle)";
|
|
445
|
+
console.log(`Restarting daemons on ${machines.length} machine(s) \u2014 ${mode}...
|
|
446
|
+
`);
|
|
385
447
|
printHeader(["MACHINE ID", "LABEL", "STATE", "DETAIL"], [20, 24, 6, 60]);
|
|
386
|
-
const cmd = opts?.graceful === false ? `svamp daemon stop --cleanup 2>&1 && svamp daemon start 2>&1` : `svamp daemon restart 2>&1`;
|
|
387
448
|
const rows = await fanOut(machines, async (m) => await m.rpc.bash(cmd, void 0));
|
|
388
449
|
let failures = 0;
|
|
389
450
|
for (const r of rows) {
|
|
@@ -441,4 +502,4 @@ ${rows.length - failures}/${rows.length} updated.`);
|
|
|
441
502
|
}
|
|
442
503
|
}
|
|
443
504
|
|
|
444
|
-
export { fleetDaemonRestart, fleetExec, fleetPushSkill, fleetStatus, fleetUpgradeClaude, fleetUpgradeCodex, fleetUpgradeKimi, fleetUpgradeSvamp, parseVersionOutput, partitionSelf };
|
|
505
|
+
export { fleetDaemonRestart, fleetDaemonRestartCommand, fleetExec, fleetPushSkill, fleetStatus, fleetUpgradeClaude, fleetUpgradeCodex, fleetUpgradeKimi, fleetUpgradeNono, fleetUpgradeSvamp, parseVersionOutput, partitionSelf };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
function flushAndExit(code) {
|
|
2
|
+
return new Promise((resolve) => {
|
|
3
|
+
const streams = [process.stdout, process.stderr];
|
|
4
|
+
let remaining = streams.length;
|
|
5
|
+
const tryExit = () => {
|
|
6
|
+
if (--remaining <= 0) {
|
|
7
|
+
process.exit(code);
|
|
8
|
+
resolve(void 0);
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
for (const s of streams) {
|
|
12
|
+
if (s.writableLength) {
|
|
13
|
+
s.write("", () => tryExit());
|
|
14
|
+
} else {
|
|
15
|
+
tryExit();
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
function flushStdout() {
|
|
21
|
+
return new Promise((resolve) => {
|
|
22
|
+
const streams = [process.stdout, process.stderr];
|
|
23
|
+
let remaining = streams.length;
|
|
24
|
+
const done = () => {
|
|
25
|
+
if (--remaining <= 0) resolve();
|
|
26
|
+
};
|
|
27
|
+
for (const s of streams) {
|
|
28
|
+
if (s.writableLength) {
|
|
29
|
+
s.write("", () => done());
|
|
30
|
+
} else {
|
|
31
|
+
done();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export { flushAndExit as a, flushStdout as f };
|