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.
Files changed (67) hide show
  1. package/bin/skills/artifact/SKILL.md +1 -1
  2. package/bin/skills/crew/SKILL.md +21 -3
  3. package/dist/DefaultTransport-vfp78fug.mjs +47 -0
  4. package/dist/GeminiTransport-3OkhtFRO.mjs +130 -0
  5. package/dist/KimiTransport-D8n009Tr.mjs +141 -0
  6. package/dist/acpAgentConfig-CObOPlA8.mjs +48 -0
  7. package/dist/acpBackend-BZ1MJhQV.mjs +922 -0
  8. package/dist/{adminCommands-CRTBDZan.mjs → adminCommands-BvsYnRDA.mjs} +2 -18
  9. package/dist/{agentCommands-BuO988tJ.mjs → agentCommands-B2Nl7Fof.mjs} +6 -23
  10. package/dist/api-BHjyC0Ph.mjs +157 -0
  11. package/dist/{auth--WS0wezs.mjs → auth-CRz8TsEl.mjs} +1 -22
  12. package/dist/bootStatus-DqtNgJch.mjs +143 -0
  13. package/dist/claudeAuth-iAerdaMr.mjs +247 -0
  14. package/dist/cli.mjs +2939 -5
  15. package/dist/codexAppServerBackend-VGsYtbqg.mjs +786 -0
  16. package/dist/codexProvider-BtxYc5Rj.mjs +68 -0
  17. package/dist/{commands-DXM17M6n.mjs → commands-BB1Kcyt-.mjs} +13 -19
  18. package/dist/{commands-DU4B-4Gh.mjs → commands-BOpoVBOM.mjs} +55 -25
  19. package/dist/{commands-C0HQiu-S.mjs → commands-C2aODeVc.mjs} +58 -33
  20. package/dist/{commands-Cwxy-C5N.mjs → commands-CiRCwjkJ.mjs} +10 -32
  21. package/dist/{commands-DDuGBSsz.mjs → commands-D1pZq3d4.mjs} +103 -41
  22. package/dist/{commands-BKb1g8Gq.mjs → commands-D69mnkYu.mjs} +20 -30
  23. package/dist/{commands-BsKgZ5sQ.mjs → commands-DW5RnHZw.mjs} +2 -19
  24. package/dist/{commands-DXLOKJOj.mjs → commands-H4PsTGn8.mjs} +58 -26
  25. package/dist/cron-hHGdb5kU.mjs +132 -0
  26. package/dist/detectIsolation-CzoDCEnh.mjs +319 -0
  27. package/dist/envFlag-COOuJ3AH.mjs +11 -0
  28. package/dist/fileLock-BMPwCrB6.mjs +80 -0
  29. package/dist/{fleet-BHzlAvnu.mjs → fleet-DM_Q7w69.mjs} +85 -24
  30. package/dist/flushExit-C-i6SGjj.mjs +37 -0
  31. package/dist/friendlyName-1UZcyDhu.mjs +586 -0
  32. package/dist/{headlessCli-C2gvOpOt.mjs → headlessCli-C8HzQvis.mjs} +3 -21
  33. package/dist/hookSettings-DYMTUgVA.mjs +10399 -0
  34. package/dist/{httpServer-Be1Hcddr.mjs → httpServer-BzEDbOGn.mjs} +14 -5
  35. package/dist/hyphaClient-ybivOjZo.mjs +49 -0
  36. package/dist/index.mjs +40 -8
  37. package/dist/instance-CeHz5C8v.mjs +203 -0
  38. package/dist/kimiProvider-DbxODebR.mjs +69 -0
  39. package/dist/kimiSetup-NGsoYB5h.mjs +48 -0
  40. package/dist/loopVerify-B47sSjxe.mjs +444 -0
  41. package/dist/machineTools-DygM1jXW.mjs +580 -0
  42. package/dist/model-CUHojegn.mjs +66 -0
  43. package/dist/{notifyCommands-0aZUwKQK.mjs → notifyCommands-D-IKIxiq.mjs} +3 -18
  44. package/dist/package-DtuINqf5.mjs +64 -0
  45. package/dist/pinnedCodex-XW4qvOAe.mjs +11 -0
  46. package/dist/pinnedNono-5ZHb6328.mjs +15 -0
  47. package/dist/{rpc-rAQQ1q8t.mjs → rpc-BB6RF4-F.mjs} +38 -6
  48. package/dist/{rpc-B2Lc2BAB.mjs → rpc-Cf0grcru.mjs} +28 -20
  49. package/dist/{run-C7QVfyw4.mjs → run-ChdsgaSD.mjs} +17 -9
  50. package/dist/run-DkjwF-zA.mjs +9695 -0
  51. package/dist/sandboxDetect-Cdzsj5TC.mjs +19 -0
  52. package/dist/{scheduler-CzF4lOe_.mjs → scheduler-BY30ZrB9.mjs} +38 -6
  53. package/dist/securityContext-Cm5UTCuD.mjs +218 -0
  54. package/dist/serveAuth-DbVLRCRR.mjs +418 -0
  55. package/dist/{serveCommands-EIEqdaVu.mjs → serveCommands-CUHUiYnZ.mjs} +13 -34
  56. package/dist/sharingNotificationSync-qGIQ-3yf.mjs +359 -0
  57. package/dist/{sideband-BoutiRJi.mjs → sideband-68HhGT0i.mjs} +1 -21
  58. package/dist/store-Bn0ByYev.mjs +347 -0
  59. package/dist/store-fi0f-ff1.mjs +184 -0
  60. package/dist/types-57J3Re0n.mjs +17 -0
  61. package/dist/wantsHelp-6bMOeNUz.mjs +5 -0
  62. package/dist/wrapCommand-CdNawSaa.mjs +117 -0
  63. package/package.json +3 -3
  64. package/dist/cli-B24CmIli.mjs +0 -2780
  65. package/dist/package-CTbGYaJG.mjs +0 -64
  66. package/dist/run-CF4kAVPW.mjs +0 -26508
  67. 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 { ah as PINNED_CODEX_VERSION, c as connectToHypha } from './run-CF4kAVPW.mjs';
4
+ import { c as connectToHypha } from './hyphaClient-ybivOjZo.mjs';
5
5
  import { PINNED_CLAUDE_CODE_VERSION } from './pinnedClaudeCode-LCVY4Otm.mjs';
6
- import 'os';
7
- import 'fs/promises';
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 };