svamp-cli 0.2.284 → 0.2.289

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 (26) hide show
  1. package/dist/{adminCommands-DPZaByla.mjs → adminCommands-C7-LgldE.mjs} +22 -3
  2. package/dist/{agentCommands-B23M4vER.mjs → agentCommands-B7HQJo3X.mjs} +5 -5
  3. package/dist/{auth-DPZSnISj.mjs → auth-BB_4_6P7.mjs} +1 -1
  4. package/dist/{cli-D8tJd71c.mjs → cli-BH5LIMPI.mjs} +72 -69
  5. package/dist/cli.mjs +2 -2
  6. package/dist/{commands-Cp8G-iuw.mjs → commands-BNxsrqSl.mjs} +2 -2
  7. package/dist/{commands-BABblJRp.mjs → commands-BaVcBOKA.mjs} +1 -1
  8. package/dist/{commands-DqsoW-S0.mjs → commands-Bb-RzoKB.mjs} +1 -1
  9. package/dist/{commands-DDf0W30g.mjs → commands-BsiQdwUs.mjs} +2 -2
  10. package/dist/{commands-BHO7rzSh.mjs → commands-CZSPOqtd.mjs} +1 -1
  11. package/dist/{commands-CDFhSKgn.mjs → commands-Cf9KT-Ob.mjs} +2 -2
  12. package/dist/{commands-BqaOHWym.mjs → commands-DFSD7jBH.mjs} +8 -8
  13. package/dist/{fleet-BxhHefua.mjs → fleet-2c-iNucb.mjs} +1 -1
  14. package/dist/{frpc-BsR6aGNJ.mjs → frpc-CuvdlU0g.mjs} +1 -1
  15. package/dist/{headlessCli-B-aMhdKx.mjs → headlessCli-CftEZbxm.mjs} +2 -2
  16. package/dist/index.mjs +1 -1
  17. package/dist/{notifyCommands-CfnthGpX.mjs → notifyCommands-1q8COUDd.mjs} +1 -1
  18. package/dist/{package-Br4fCS7J.mjs → package-DrTlgNWY.mjs} +1 -1
  19. package/dist/{rpc-BjrKqEib.mjs → rpc-C9U0Ho27.mjs} +1 -1
  20. package/dist/{rpc-B5BRaVsS.mjs → rpc-DMpJef5v.mjs} +1 -1
  21. package/dist/{run-CRTzyKbn.mjs → run-BNeZiySO.mjs} +61 -19
  22. package/dist/{run-DWJenrBe.mjs → run-CCENV09o.mjs} +1 -1
  23. package/dist/{scheduler-QYMtbUDe.mjs → scheduler-CAUwniWA.mjs} +1 -1
  24. package/dist/{serveCommands-Cj3MLbZb.mjs → serveCommands-XJVDS4zB.mjs} +5 -5
  25. package/dist/{sideband-CKmZxwY6.mjs → sideband-DB4Uipz9.mjs} +1 -1
  26. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { c as connectToHypha, K as computeCollectionConfigUpdate, L as SYSTEM_COLLECTION_CONFIG } from './run-CRTzyKbn.mjs';
1
+ import { c as connectToHypha, K as computeCollectionConfigUpdate, L as SYSTEM_COLLECTION_CONFIG } from './run-BNeZiySO.mjs';
2
2
  import { existsSync, readFileSync } from 'node:fs';
3
3
  import { join } from 'node:path';
4
4
  import os from 'node:os';
@@ -157,14 +157,33 @@ async function createSystemCollections() {
157
157
  }
158
158
  }
159
159
  }
160
+ async function listAllChildren(am, parentId) {
161
+ const PAGE = 100;
162
+ const all = [];
163
+ const seen = /* @__PURE__ */ new Set();
164
+ for (let offset = 0; ; offset += PAGE) {
165
+ const page = await am.list({ parent_id: parentId, offset, limit: PAGE, _rkwargs: true });
166
+ if (!Array.isArray(page) || page.length === 0) break;
167
+ let fresh = 0;
168
+ for (const c of page) {
169
+ const k = String(c?.id ?? c?.manifest?.id ?? c?.alias ?? `${offset}:${fresh}`);
170
+ if (seen.has(k)) continue;
171
+ seen.add(k);
172
+ all.push(c);
173
+ fresh++;
174
+ }
175
+ if (page.length < PAGE || fresh === 0) break;
176
+ }
177
+ return all;
178
+ }
160
179
  async function migrateChildren(am, fromId, toId) {
161
- const children = await am.list({ parent_id: fromId, _rkwargs: true });
180
+ const children = await listAllChildren(am, fromId);
162
181
  if (!Array.isArray(children) || children.length === 0) {
163
182
  return { total: 0, copied: 0, alreadyPresent: 0, failed: 0, errors: [] };
164
183
  }
165
184
  let existing = [];
166
185
  try {
167
- existing = await am.list({ parent_id: toId, _rkwargs: true });
186
+ existing = await listAllChildren(am, toId);
168
187
  } catch {
169
188
  }
170
189
  const keyOf = (c) => String(c?.manifest?.id ?? c?.alias ?? "");
@@ -2,7 +2,7 @@ import { existsSync, readFileSync, mkdirSync, writeFileSync, renameSync } from '
2
2
  import { join, dirname } from 'node:path';
3
3
  import os from 'node:os';
4
4
  import { requireNotSandboxed } from './sandboxDetect-DNTcbgWD.mjs';
5
- import { i as shortId } from './run-CRTzyKbn.mjs';
5
+ import { i as shortId } from './run-BNeZiySO.mjs';
6
6
  import 'os';
7
7
  import 'fs/promises';
8
8
  import 'fs';
@@ -96,7 +96,7 @@ async function sessionSetTitle(title) {
96
96
  }
97
97
  async function sessionSetProjectDescription(description) {
98
98
  const dir = process.cwd();
99
- const { projectName, writeProjectInfo, sanitizeDescription, projectInfoPath } = await import('./run-CRTzyKbn.mjs').then(function (n) { return n.ap; });
99
+ const { projectName, writeProjectInfo, sanitizeDescription, projectInfoPath } = await import('./run-BNeZiySO.mjs').then(function (n) { return n.ap; });
100
100
  const desc = sanitizeDescription(description, 240);
101
101
  if (!desc) {
102
102
  console.error("Project description is empty.");
@@ -343,7 +343,7 @@ async function sessionBroadcast(action, args) {
343
343
  console.log(`Broadcast sent: ${action}`);
344
344
  }
345
345
  async function connectToMachineService() {
346
- const { connectAndGetMachine } = await import('./commands-BABblJRp.mjs');
346
+ const { connectAndGetMachine } = await import('./commands-BaVcBOKA.mjs');
347
347
  return connectAndGetMachine();
348
348
  }
349
349
  function buildInboxMessage(args) {
@@ -421,7 +421,7 @@ async function inboxSend(targetSessionId, opts) {
421
421
  console.error("Message body is required.");
422
422
  process.exit(1);
423
423
  }
424
- const { connectAndResolveSession } = await import('./commands-BABblJRp.mjs');
424
+ const { connectAndResolveSession } = await import('./commands-BaVcBOKA.mjs');
425
425
  let server;
426
426
  try {
427
427
  const { targetId, messageId } = await inboxSendCore(
@@ -475,7 +475,7 @@ async function inboxReply(messageId, body) {
475
475
  console.error("SVAMP_SESSION_ID not set. This command must be run inside a Svamp session.");
476
476
  process.exit(1);
477
477
  }
478
- const { connectAndResolveSession } = await import('./commands-BABblJRp.mjs');
478
+ const { connectAndResolveSession } = await import('./commands-BaVcBOKA.mjs');
479
479
  const { server: localServer, machine: localMachine } = await connectToMachineService();
480
480
  let localDisconnected = false;
481
481
  const disconnectLocal = async () => {
@@ -1,4 +1,4 @@
1
- import { a0 as resolveModel } from './run-CRTzyKbn.mjs';
1
+ import { a0 as resolveModel } from './run-BNeZiySO.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -1,4 +1,4 @@
1
- import { a1 as clearStopMarker, a2 as stopMarkerExists, s as startDaemon, b as stopDaemon, d as daemonStatus } from './run-CRTzyKbn.mjs';
1
+ import { a1 as clearStopMarker, a2 as stopMarkerExists, s as startDaemon, b as stopDaemon, d as daemonStatus } from './run-BNeZiySO.mjs';
2
2
  import { ensureSupervisorViaServiceManager, LAUNCHD_LABEL } from './serviceManager-hlOVxkhW.mjs';
3
3
 
4
4
  function flushAndExit(code) {
@@ -33,7 +33,7 @@ const subcommand = args[0];
33
33
  let daemonSubcommand = args[1];
34
34
  async function main() {
35
35
  try {
36
- const { getLoadedConfig } = await import('./run-CRTzyKbn.mjs').then(function (n) { return n.am; });
36
+ const { getLoadedConfig } = await import('./run-BNeZiySO.mjs').then(function (n) { return n.am; });
37
37
  getLoadedConfig();
38
38
  } catch {
39
39
  }
@@ -52,7 +52,7 @@ async function main() {
52
52
  }
53
53
  const whenIdle = args.includes("--when-idle");
54
54
  const force = args.includes("--force");
55
- const mod = await import('./run-CRTzyKbn.mjs').then(function (n) { return n.aw; });
55
+ const mod = await import('./run-BNeZiySO.mjs').then(function (n) { return n.aw; });
56
56
  if (whenIdle && !force) {
57
57
  if (mod.isDaemonAlive()) {
58
58
  mod.writePendingRestart({ reason: "svamp daemon restart --when-idle" });
@@ -356,7 +356,7 @@ async function main() {
356
356
  console.error("svamp service: Service commands are not available in sandboxed sessions.");
357
357
  process.exit(1);
358
358
  }
359
- const { handleServiceCommand } = await import('./commands-BqaOHWym.mjs');
359
+ const { handleServiceCommand } = await import('./commands-DFSD7jBH.mjs');
360
360
  await handleServiceCommand();
361
361
  } else if (subcommand === "serve") {
362
362
  const { isSandboxed: isSandboxedServe } = await import('./sandboxDetect-DNTcbgWD.mjs');
@@ -364,7 +364,7 @@ async function main() {
364
364
  console.error("svamp serve: Serve commands are not available in sandboxed sessions.");
365
365
  process.exit(1);
366
366
  }
367
- const { handleServeCommand } = await import('./serveCommands-Cj3MLbZb.mjs');
367
+ const { handleServeCommand } = await import('./serveCommands-XJVDS4zB.mjs');
368
368
  await handleServeCommand();
369
369
  process.exit(0);
370
370
  } else if (subcommand === "process" || subcommand === "proc") {
@@ -373,7 +373,7 @@ async function main() {
373
373
  console.error("svamp process: Process commands are not available in sandboxed sessions.");
374
374
  process.exit(1);
375
375
  }
376
- const { processCommand } = await import('./commands-DDf0W30g.mjs');
376
+ const { processCommand } = await import('./commands-BsiQdwUs.mjs');
377
377
  let machineId;
378
378
  const processArgs = args.slice(1);
379
379
  const mIdx = processArgs.findIndex((a) => a === "--machine" || a === "-m");
@@ -387,22 +387,22 @@ async function main() {
387
387
  }), machineId);
388
388
  process.exit(0);
389
389
  } else if (subcommand === "issue" || subcommand === "issues") {
390
- const { issueCommand } = await import('./commands-CDFhSKgn.mjs');
390
+ const { issueCommand } = await import('./commands-Cf9KT-Ob.mjs');
391
391
  await issueCommand(args.slice(1));
392
392
  await flushAndExit(0);
393
393
  } else if (subcommand === "workflow" || subcommand === "workflows") {
394
- const { workflowCommand } = await import('./commands-DqsoW-S0.mjs');
394
+ const { workflowCommand } = await import('./commands-Bb-RzoKB.mjs');
395
395
  await workflowCommand(args.slice(1));
396
396
  await flushAndExit(0);
397
397
  } else if (subcommand === "wise-agent" || subcommand === "wise") {
398
398
  await handleWiseAgentCommand(args.slice(1));
399
399
  process.exit(0);
400
400
  } else if (subcommand === "feature" || subcommand === "crew") {
401
- const { crewCommand } = await import('./commands-Cp8G-iuw.mjs');
401
+ const { crewCommand } = await import('./commands-BNxsrqSl.mjs');
402
402
  await crewCommand(args.slice(1));
403
403
  process.exit(0);
404
404
  } else if (subcommand === "notify") {
405
- const { notifyUser } = await import('./notifyCommands-CfnthGpX.mjs');
405
+ const { notifyUser } = await import('./notifyCommands-1q8COUDd.mjs');
406
406
  const rest = args.slice(1);
407
407
  let email;
408
408
  const o = {};
@@ -419,7 +419,7 @@ async function main() {
419
419
  } else if (subcommand === "admin") {
420
420
  const adminSub = args[1];
421
421
  if (adminSub === "set-collection-config") {
422
- const { setCollectionConfig } = await import('./adminCommands-DPZaByla.mjs');
422
+ const { setCollectionConfig } = await import('./adminCommands-C7-LgldE.mjs');
423
423
  const rest = args.slice(2);
424
424
  let alias;
425
425
  let configJson;
@@ -429,10 +429,10 @@ async function main() {
429
429
  }
430
430
  await setCollectionConfig(alias, configJson);
431
431
  } else if (adminSub === "create-system-collections") {
432
- const { createSystemCollections } = await import('./adminCommands-DPZaByla.mjs');
432
+ const { createSystemCollections } = await import('./adminCommands-C7-LgldE.mjs');
433
433
  await createSystemCollections();
434
434
  } else if (adminSub === "migrate-collection-children") {
435
- const { migrateCollectionChildren } = await import('./adminCommands-DPZaByla.mjs');
435
+ const { migrateCollectionChildren } = await import('./adminCommands-C7-LgldE.mjs');
436
436
  const rest = args.slice(2).filter((a) => !a.startsWith("-"));
437
437
  await migrateCollectionChildren(rest[0], rest[1]);
438
438
  } else {
@@ -440,7 +440,7 @@ async function main() {
440
440
  }
441
441
  process.exit(0);
442
442
  } else if (subcommand === "events") {
443
- const { listEvents, ackEvent } = await import('./notifyCommands-CfnthGpX.mjs');
443
+ const { listEvents, ackEvent } = await import('./notifyCommands-1q8COUDd.mjs');
444
444
  const sub = args[1];
445
445
  const rest = args.slice(2);
446
446
  let email;
@@ -461,7 +461,7 @@ async function main() {
461
461
  } else if (!subcommand || subcommand === "start") {
462
462
  await handleInteractiveCommand();
463
463
  } else if (subcommand === "--version" || subcommand === "-v") {
464
- const pkg = await import('./package-Br4fCS7J.mjs').catch(() => ({ default: { version: "unknown" } }));
464
+ const pkg = await import('./package-DrTlgNWY.mjs').catch(() => ({ default: { version: "unknown" } }));
465
465
  console.log(`svamp version: ${pkg.default.version}`);
466
466
  } else {
467
467
  console.error(`Unknown command: ${subcommand}`);
@@ -470,7 +470,7 @@ async function main() {
470
470
  }
471
471
  }
472
472
  async function handleInteractiveCommand() {
473
- const { runInteractive } = await import('./run-DWJenrBe.mjs');
473
+ const { runInteractive } = await import('./run-CCENV09o.mjs');
474
474
  const interactiveArgs = subcommand === "start" ? args.slice(1) : args;
475
475
  let directory = process.cwd();
476
476
  let resumeSessionId;
@@ -515,7 +515,7 @@ async function handleAgentCommand() {
515
515
  return;
516
516
  }
517
517
  if (agentArgs[0] === "list") {
518
- const { KNOWN_ACP_AGENTS, KNOWN_CODEX_AGENTS: KNOWN_CODEX_AGENTS2 } = await import('./run-CRTzyKbn.mjs').then(function (n) { return n.as; });
518
+ const { KNOWN_ACP_AGENTS, KNOWN_CODEX_AGENTS: KNOWN_CODEX_AGENTS2 } = await import('./run-BNeZiySO.mjs').then(function (n) { return n.as; });
519
519
  console.log("Known agents:");
520
520
  for (const [name, config2] of Object.entries(KNOWN_ACP_AGENTS)) {
521
521
  console.log(` ${name.padEnd(12)} ${config2.command} ${config2.args.join(" ")} (ACP)`);
@@ -527,7 +527,7 @@ async function handleAgentCommand() {
527
527
  console.log('Use "svamp agent -- <command> [args]" for a custom ACP agent.');
528
528
  return;
529
529
  }
530
- const { resolveAcpAgentConfig, KNOWN_CODEX_AGENTS } = await import('./run-CRTzyKbn.mjs').then(function (n) { return n.as; });
530
+ const { resolveAcpAgentConfig, KNOWN_CODEX_AGENTS } = await import('./run-BNeZiySO.mjs').then(function (n) { return n.as; });
531
531
  let cwd = process.cwd();
532
532
  const filteredArgs = [];
533
533
  for (let i = 0; i < agentArgs.length; i++) {
@@ -551,12 +551,12 @@ async function handleAgentCommand() {
551
551
  console.log(`Starting ${config.agentName} agent in ${cwd}...`);
552
552
  let backend;
553
553
  if (KNOWN_CODEX_AGENTS[config.agentName]) {
554
- const { CodexAppServerBackend } = await import('./run-CRTzyKbn.mjs').then(function (n) { return n.at; });
554
+ const { CodexAppServerBackend } = await import('./run-BNeZiySO.mjs').then(function (n) { return n.at; });
555
555
  backend = new CodexAppServerBackend({ cwd, log: logFn });
556
556
  } else {
557
- const { AcpBackend } = await import('./run-CRTzyKbn.mjs').then(function (n) { return n.ar; });
558
- const { GeminiTransport } = await import('./run-CRTzyKbn.mjs').then(function (n) { return n.au; });
559
- const { DefaultTransport } = await import('./run-CRTzyKbn.mjs').then(function (n) { return n.aq; });
557
+ const { AcpBackend } = await import('./run-BNeZiySO.mjs').then(function (n) { return n.ar; });
558
+ const { GeminiTransport } = await import('./run-BNeZiySO.mjs').then(function (n) { return n.au; });
559
+ const { DefaultTransport } = await import('./run-BNeZiySO.mjs').then(function (n) { return n.aq; });
560
560
  const transportHandler = config.agentName === "gemini" ? new GeminiTransport() : new DefaultTransport(config.agentName);
561
561
  backend = new AcpBackend({
562
562
  agentName: config.agentName,
@@ -683,7 +683,7 @@ async function handleSessionCommand() {
683
683
  process.exit(1);
684
684
  }
685
685
  }
686
- const { sessionList, sessionWhoami, sessionSpawn, sessionArchive, sessionResume, sessionDelete, sessionInfo, sessionMessages, sessionAttach, sessionMachines, sessionSend, sessionWait, sessionShare, sessionLoopStart, sessionLoopCancel, sessionLoopStatus, sessionLoopExtend, sessionInboxSend, sessionInboxList, sessionInboxRead, sessionInboxReply, sessionInboxClear } = await import('./commands-BABblJRp.mjs');
686
+ const { sessionList, sessionWhoami, sessionSpawn, sessionArchive, sessionResume, sessionDelete, sessionInfo, sessionMessages, sessionAttach, sessionMachines, sessionSend, sessionWait, sessionShare, sessionLoopStart, sessionLoopCancel, sessionLoopStatus, sessionLoopExtend, sessionInboxSend, sessionInboxList, sessionInboxRead, sessionInboxReply, sessionInboxClear } = await import('./commands-BaVcBOKA.mjs');
687
687
  const parseFlagStr = (flag, shortFlag) => {
688
688
  for (let i = 1; i < sessionArgs.length; i++) {
689
689
  if ((sessionArgs[i] === flag || shortFlag) && i + 1 < sessionArgs.length) {
@@ -751,7 +751,7 @@ async function handleSessionCommand() {
751
751
  allowDomain.push(sessionArgs[++i]);
752
752
  }
753
753
  }
754
- const { parseShareArg } = await import('./commands-BABblJRp.mjs');
754
+ const { parseShareArg } = await import('./commands-BaVcBOKA.mjs');
755
755
  const shareEntries = share.map((s) => parseShareArg(s));
756
756
  await sessionSpawn(agent, dir, targetMachineId, {
757
757
  message,
@@ -841,7 +841,7 @@ async function handleSessionCommand() {
841
841
  console.error(" Rewinds history: rewrites the message + drops everything after it, then restarts Claude.");
842
842
  process.exit(1);
843
843
  }
844
- const { sessionEditMessage } = await import('./commands-BABblJRp.mjs');
844
+ const { sessionEditMessage } = await import('./commands-BaVcBOKA.mjs');
845
845
  await sessionEditMessage(sessionArgs[1], sessionArgs[2], sessionArgs[3], targetMachineId);
846
846
  } else if (sessionSubcommand === "refine") {
847
847
  if (!sessionArgs[1] || !sessionArgs[2]) {
@@ -849,7 +849,7 @@ async function handleSessionCommand() {
849
849
  console.error(" Asks the agent to revise its latest reply in place (no extra round).");
850
850
  process.exit(1);
851
851
  }
852
- const { sessionRefineLastReply } = await import('./commands-BABblJRp.mjs');
852
+ const { sessionRefineLastReply } = await import('./commands-BaVcBOKA.mjs');
853
853
  await sessionRefineLastReply(sessionArgs[1], sessionArgs[2], targetMachineId);
854
854
  } else if (sessionSubcommand === "undo-edit" || sessionSubcommand === "undo") {
855
855
  if (!sessionArgs[1]) {
@@ -857,7 +857,7 @@ async function handleSessionCommand() {
857
857
  console.error(" Reverts the most recent edit/refine, restoring the pre-edit history.");
858
858
  process.exit(1);
859
859
  }
860
- const { sessionUndoEdit } = await import('./commands-BABblJRp.mjs');
860
+ const { sessionUndoEdit } = await import('./commands-BaVcBOKA.mjs');
861
861
  await sessionUndoEdit(sessionArgs[1], targetMachineId);
862
862
  } else if (sessionSubcommand === "query") {
863
863
  const dir = sessionArgs[1];
@@ -867,7 +867,7 @@ async function handleSessionCommand() {
867
867
  console.error(" Spawns a stateless Claude session in <directory>, sends <prompt>, prints the answer, then deletes the session.");
868
868
  process.exit(1);
869
869
  }
870
- const { sessionQuery } = await import('./commands-BABblJRp.mjs');
870
+ const { sessionQuery } = await import('./commands-BaVcBOKA.mjs');
871
871
  await sessionQuery(dir, prompt, targetMachineId, {
872
872
  timeout: parseFlagInt("--timeout"),
873
873
  json: hasFlag("--json"),
@@ -900,7 +900,7 @@ async function handleSessionCommand() {
900
900
  console.error("Usage: svamp session approve <session-id> [request-id] [--json]");
901
901
  process.exit(1);
902
902
  }
903
- const { sessionApprove } = await import('./commands-BABblJRp.mjs');
903
+ const { sessionApprove } = await import('./commands-BaVcBOKA.mjs');
904
904
  const approveReqId = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
905
905
  await sessionApprove(sessionArgs[1], approveReqId, targetMachineId, {
906
906
  json: hasFlag("--json")
@@ -910,7 +910,7 @@ async function handleSessionCommand() {
910
910
  console.error("Usage: svamp session deny <session-id> [request-id] [--json]");
911
911
  process.exit(1);
912
912
  }
913
- const { sessionDeny } = await import('./commands-BABblJRp.mjs');
913
+ const { sessionDeny } = await import('./commands-BaVcBOKA.mjs');
914
914
  const denyReqId = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
915
915
  await sessionDeny(sessionArgs[1], denyReqId, targetMachineId, {
916
916
  json: hasFlag("--json")
@@ -962,7 +962,7 @@ async function handleSessionCommand() {
962
962
  console.error("Usage: svamp session set-title <title>");
963
963
  process.exit(1);
964
964
  }
965
- const { sessionSetTitle } = await import('./agentCommands-B23M4vER.mjs');
965
+ const { sessionSetTitle } = await import('./agentCommands-B7HQJo3X.mjs');
966
966
  await sessionSetTitle(title);
967
967
  } else if (sessionSubcommand === "set-project-description" || sessionSubcommand === "set-project") {
968
968
  const desc = sessionArgs.slice(1).filter((a) => !a.startsWith("--")).join(" ");
@@ -970,7 +970,7 @@ async function handleSessionCommand() {
970
970
  console.error("Usage: svamp session set-project-description <text>");
971
971
  process.exit(1);
972
972
  }
973
- const { sessionSetProjectDescription } = await import('./agentCommands-B23M4vER.mjs');
973
+ const { sessionSetProjectDescription } = await import('./agentCommands-B7HQJo3X.mjs');
974
974
  await sessionSetProjectDescription(desc);
975
975
  } else if (sessionSubcommand === "set-link") {
976
976
  const url = sessionArgs[1];
@@ -979,11 +979,11 @@ async function handleSessionCommand() {
979
979
  process.exit(1);
980
980
  }
981
981
  const label = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
982
- const { sessionSetLink } = await import('./agentCommands-B23M4vER.mjs');
982
+ const { sessionSetLink } = await import('./agentCommands-B7HQJo3X.mjs');
983
983
  await sessionSetLink(url, label);
984
984
  } else if (sessionSubcommand === "link") {
985
985
  const op = sessionArgs[1];
986
- const lm = await import('./agentCommands-B23M4vER.mjs');
986
+ const lm = await import('./agentCommands-B7HQJo3X.mjs');
987
987
  if (op === "add") {
988
988
  const url = sessionArgs[2];
989
989
  if (!url || url.startsWith("--")) {
@@ -1018,7 +1018,7 @@ async function handleSessionCommand() {
1018
1018
  process.exit(1);
1019
1019
  }
1020
1020
  const level = parseFlagStr("--level") || "info";
1021
- const { sessionNotify } = await import('./agentCommands-B23M4vER.mjs');
1021
+ const { sessionNotify } = await import('./agentCommands-B7HQJo3X.mjs');
1022
1022
  await sessionNotify(message, level);
1023
1023
  } else if (sessionSubcommand === "broadcast") {
1024
1024
  const action = sessionArgs[1];
@@ -1026,7 +1026,7 @@ async function handleSessionCommand() {
1026
1026
  console.error("Usage: svamp session broadcast <action> [args...]\nActions: open-canvas <url> [label], close-canvas, toast <message>");
1027
1027
  process.exit(1);
1028
1028
  }
1029
- const { sessionBroadcast } = await import('./agentCommands-B23M4vER.mjs');
1029
+ const { sessionBroadcast } = await import('./agentCommands-B7HQJo3X.mjs');
1030
1030
  await sessionBroadcast(action, sessionArgs.slice(2).filter((a) => !a.startsWith("--")));
1031
1031
  } else if (sessionSubcommand === "inbox") {
1032
1032
  const inboxSubcmd = sessionArgs[1];
@@ -1037,7 +1037,7 @@ async function handleSessionCommand() {
1037
1037
  process.exit(1);
1038
1038
  }
1039
1039
  if (agentSessionId) {
1040
- const { inboxSend } = await import('./agentCommands-B23M4vER.mjs');
1040
+ const { inboxSend } = await import('./agentCommands-B7HQJo3X.mjs');
1041
1041
  await inboxSend(sessionArgs[2], {
1042
1042
  body: sessionArgs[3],
1043
1043
  subject: parseFlagStr("--subject"),
@@ -1052,7 +1052,7 @@ async function handleSessionCommand() {
1052
1052
  }
1053
1053
  } else if (inboxSubcmd === "list" || inboxSubcmd === "ls") {
1054
1054
  if (agentSessionId && !sessionArgs[2]) {
1055
- const { inboxList } = await import('./agentCommands-B23M4vER.mjs');
1055
+ const { inboxList } = await import('./agentCommands-B7HQJo3X.mjs');
1056
1056
  await inboxList({
1057
1057
  unread: hasFlag("--unread"),
1058
1058
  limit: parseFlagInt("--limit"),
@@ -1074,7 +1074,7 @@ async function handleSessionCommand() {
1074
1074
  process.exit(1);
1075
1075
  }
1076
1076
  if (agentSessionId && !sessionArgs[3]) {
1077
- const { inboxList } = await import('./agentCommands-B23M4vER.mjs');
1077
+ const { inboxList } = await import('./agentCommands-B7HQJo3X.mjs');
1078
1078
  await sessionInboxRead(agentSessionId, sessionArgs[2], targetMachineId);
1079
1079
  } else if (sessionArgs[3]) {
1080
1080
  await sessionInboxRead(sessionArgs[2], sessionArgs[3], targetMachineId);
@@ -1084,7 +1084,7 @@ async function handleSessionCommand() {
1084
1084
  }
1085
1085
  } else if (inboxSubcmd === "reply") {
1086
1086
  if (agentSessionId && sessionArgs[2] && sessionArgs[3] && !sessionArgs[4]) {
1087
- const { inboxReply } = await import('./agentCommands-B23M4vER.mjs');
1087
+ const { inboxReply } = await import('./agentCommands-B7HQJo3X.mjs');
1088
1088
  await inboxReply(sessionArgs[2], sessionArgs[3]);
1089
1089
  } else if (sessionArgs[2] && sessionArgs[3] && sessionArgs[4]) {
1090
1090
  await sessionInboxReply(sessionArgs[2], sessionArgs[3], sessionArgs[4], targetMachineId);
@@ -1122,7 +1122,7 @@ async function handleMachineCommand() {
1122
1122
  return;
1123
1123
  }
1124
1124
  if (machineSubcommand === "share") {
1125
- const { machineShare } = await import('./commands-BABblJRp.mjs');
1125
+ const { machineShare } = await import('./commands-BaVcBOKA.mjs');
1126
1126
  let machineId;
1127
1127
  const shareArgs = [];
1128
1128
  for (let i = 1; i < machineArgs.length; i++) {
@@ -1173,14 +1173,14 @@ async function handleMachineCommand() {
1173
1173
  process.exit(1);
1174
1174
  }
1175
1175
  if (all) {
1176
- const { fleetExec } = await import('./fleet-BxhHefua.mjs');
1176
+ const { fleetExec } = await import('./fleet-2c-iNucb.mjs');
1177
1177
  await fleetExec(command, { cwd });
1178
1178
  } else {
1179
- const { machineExec } = await import('./commands-BABblJRp.mjs');
1179
+ const { machineExec } = await import('./commands-BaVcBOKA.mjs');
1180
1180
  await machineExec(machineId, command, cwd);
1181
1181
  }
1182
1182
  } else if (machineSubcommand === "info") {
1183
- const { machineInfo } = await import('./commands-BABblJRp.mjs');
1183
+ const { machineInfo } = await import('./commands-BaVcBOKA.mjs');
1184
1184
  let machineId;
1185
1185
  for (let i = 1; i < machineArgs.length; i++) {
1186
1186
  if ((machineArgs[i] === "--machine" || machineArgs[i] === "-m") && i + 1 < machineArgs.length) {
@@ -1200,10 +1200,10 @@ async function handleMachineCommand() {
1200
1200
  level = machineArgs[++i];
1201
1201
  }
1202
1202
  }
1203
- const { machineNotify } = await import('./agentCommands-B23M4vER.mjs');
1203
+ const { machineNotify } = await import('./agentCommands-B7HQJo3X.mjs');
1204
1204
  await machineNotify(message, level);
1205
1205
  } else if (machineSubcommand === "ls") {
1206
- const { machineLs } = await import('./commands-BABblJRp.mjs');
1206
+ const { machineLs } = await import('./commands-BaVcBOKA.mjs');
1207
1207
  let machineId;
1208
1208
  let showHidden = false;
1209
1209
  let path;
@@ -1262,20 +1262,20 @@ Examples:
1262
1262
  };
1263
1263
  const hasFlag = (name) => fleetArgs.includes(`--${name}`);
1264
1264
  if (sub === "status") {
1265
- const { fleetStatus } = await import('./fleet-BxhHefua.mjs');
1265
+ const { fleetStatus } = await import('./fleet-2c-iNucb.mjs');
1266
1266
  await fleetStatus();
1267
1267
  } else if (sub === "upgrade-claude") {
1268
- const { fleetUpgradeClaude } = await import('./fleet-BxhHefua.mjs');
1268
+ const { fleetUpgradeClaude } = await import('./fleet-2c-iNucb.mjs');
1269
1269
  await fleetUpgradeClaude({ version: flag("version", "-v") });
1270
1270
  } else if (sub === "upgrade-svamp") {
1271
- const { fleetUpgradeSvamp } = await import('./fleet-BxhHefua.mjs');
1271
+ const { fleetUpgradeSvamp } = await import('./fleet-2c-iNucb.mjs');
1272
1272
  await fleetUpgradeSvamp({ version: flag("version", "-v"), excludeSelf: hasFlag("exclude-self"), force: hasFlag("force") });
1273
1273
  } else if (sub === "daemon-restart") {
1274
- const { fleetDaemonRestart } = await import('./fleet-BxhHefua.mjs');
1274
+ const { fleetDaemonRestart } = await import('./fleet-2c-iNucb.mjs');
1275
1275
  await fleetDaemonRestart({ graceful: !hasFlag("cleanup") });
1276
1276
  } else if (sub === "push-skill") {
1277
1277
  const name = fleetArgs[1];
1278
- const { fleetPushSkill } = await import('./fleet-BxhHefua.mjs');
1278
+ const { fleetPushSkill } = await import('./fleet-2c-iNucb.mjs');
1279
1279
  await fleetPushSkill(name);
1280
1280
  } else {
1281
1281
  console.error(`Unknown fleet subcommand: ${sub}`);
@@ -1291,7 +1291,7 @@ async function handleSkillsCommand() {
1291
1291
  await printSkillsHelp();
1292
1292
  return;
1293
1293
  }
1294
- const { skillsFind, skillsInstall, skillsList, skillsRemove, skillsPublish } = await import('./commands-BHO7rzSh.mjs');
1294
+ const { skillsFind, skillsInstall, skillsList, skillsRemove, skillsPublish } = await import('./commands-CZSPOqtd.mjs');
1295
1295
  if (skillsSubcommand === "find" || skillsSubcommand === "search") {
1296
1296
  const query = skillsArgs.slice(1).filter((a) => !a.startsWith("--")).join(" ");
1297
1297
  if (!query) {
@@ -1338,7 +1338,7 @@ async function loginToHypha() {
1338
1338
  process.exit(1);
1339
1339
  }
1340
1340
  const anchor = anchorArg.replace(/\/+$/, "");
1341
- const { loadInstanceConfig } = await import('./run-CRTzyKbn.mjs').then(function (n) { return n.am; });
1341
+ const { loadInstanceConfig } = await import('./run-BNeZiySO.mjs').then(function (n) { return n.am; });
1342
1342
  let cfg = null;
1343
1343
  try {
1344
1344
  cfg = await loadInstanceConfig({ anchor, force: true });
@@ -1449,7 +1449,7 @@ async function logoutFromHypha() {
1449
1449
  } catch {
1450
1450
  }
1451
1451
  try {
1452
- const { clearInstanceConfigCache } = await import('./run-CRTzyKbn.mjs').then(function (n) { return n.am; });
1452
+ const { clearInstanceConfigCache } = await import('./run-BNeZiySO.mjs').then(function (n) { return n.am; });
1453
1453
  clearInstanceConfigCache();
1454
1454
  } catch {
1455
1455
  }
@@ -1725,9 +1725,12 @@ Commands:
1725
1725
 
1726
1726
  Other:
1727
1727
  svamp machine --help Machine sharing & security contexts
1728
- svamp fleet --help Fan-out commands across all your machines (status, upgrade, exec, push-skill)
1728
+ svamp fleet --help Fan-out commands across all your machines (status, upgrade-claude, upgrade-svamp, daemon-restart, push-skill)
1729
1729
  svamp skills --help Skills marketplace (find, install, publish)
1730
1730
  svamp service --help Service exposure (HTTP services from sandboxes)
1731
+ svamp notify <email> \u2026 Send a cross-user notification (bell inbox); --title/--body/--action/--level
1732
+ svamp events list|ack Read / dismiss your notification bell inbox
1733
+ svamp admin \u2026 System-collection ops (create-system-collections, set-collection-config, migrate-collection-children)
1731
1734
  svamp agent <name> Start local agent session (no daemon needed)
1732
1735
  svamp --version Show version
1733
1736
 
@@ -1788,7 +1791,7 @@ async function applyClaudeAuthFlags(argv) {
1788
1791
  "--use-hypha-proxy, --use-claude-login, and --anthropic-base-url/--anthropic-api-key are mutually exclusive"
1789
1792
  );
1790
1793
  }
1791
- const mod = await import('./run-CRTzyKbn.mjs').then(function (n) { return n.an; });
1794
+ const mod = await import('./run-BNeZiySO.mjs').then(function (n) { return n.an; });
1792
1795
  if (hasHypha) {
1793
1796
  let url;
1794
1797
  const hyphaIdx = argv.indexOf("--use-hypha-proxy");
@@ -1842,7 +1845,7 @@ async function applyDaemonShareFlag(argv) {
1842
1845
  }
1843
1846
  }
1844
1847
  if (collected.length === 0) return;
1845
- const { updateEnvFile } = await import('./run-CRTzyKbn.mjs').then(function (n) { return n.an; });
1848
+ const { updateEnvFile } = await import('./run-BNeZiySO.mjs').then(function (n) { return n.an; });
1846
1849
  const seen = /* @__PURE__ */ new Set();
1847
1850
  const deduped = collected.filter((e) => {
1848
1851
  const k = e.toLowerCase();
@@ -1875,7 +1878,7 @@ async function handleWiseAgentCommand(rest) {
1875
1878
  }
1876
1879
  });
1877
1880
  const message = rest.slice(1).map((a, idx) => ({ a, idx: idx + 1 })).filter(({ a, idx }) => !a.startsWith("-") && !consumed.has(String(idx))).map(({ a }) => a).join(" ");
1878
- const { wiseAskCli } = await import('./commands-BABblJRp.mjs');
1881
+ const { wiseAskCli } = await import('./commands-BaVcBOKA.mjs');
1879
1882
  await wiseAskCli(machineId, message, sessionId, { json });
1880
1883
  return;
1881
1884
  }
@@ -1887,7 +1890,7 @@ async function handleWiseAgentCommand(rest) {
1887
1890
  }
1888
1891
  return void 0;
1889
1892
  };
1890
- const { runWiseVoiceCli } = await import('./headlessCli-B-aMhdKx.mjs');
1893
+ const { runWiseVoiceCli } = await import('./headlessCli-CftEZbxm.mjs');
1891
1894
  await runWiseVoiceCli({ voice: valueOf(["--voice"]), wakeKeywordPath: valueOf(["--wake"]), model: valueOf(["--model"]) });
1892
1895
  return;
1893
1896
  }
@@ -1905,7 +1908,7 @@ async function handleWiseAgentCommand(rest) {
1905
1908
  const mode = valueOf(["--mode"]);
1906
1909
  const mission = valueOf(["--mission"]);
1907
1910
  const url = rest.slice(1).find((a) => /^https?:\/\//.test(a)) || "";
1908
- const { wiseJoinMeetingCli } = await import('./commands-BABblJRp.mjs');
1911
+ const { wiseJoinMeetingCli } = await import('./commands-BaVcBOKA.mjs');
1909
1912
  await wiseJoinMeetingCli(machineId, url, sessionId, { json, mode, mission });
1910
1913
  return;
1911
1914
  }
@@ -1917,7 +1920,7 @@ async function handleWiseAgentCommand(rest) {
1917
1920
  }
1918
1921
  return void 0;
1919
1922
  };
1920
- const { wiseLeaveMeetingCli } = await import('./commands-BABblJRp.mjs');
1923
+ const { wiseLeaveMeetingCli } = await import('./commands-BaVcBOKA.mjs');
1921
1924
  await wiseLeaveMeetingCli(valueOf(["--machine", "-m"]), valueOf(["--session", "-s"]), { json: rest.includes("--json") });
1922
1925
  return;
1923
1926
  }
@@ -1941,7 +1944,7 @@ async function handleWiseAgentCommand(rest) {
1941
1944
  }
1942
1945
  });
1943
1946
  const text = rest.slice(1).map((a, idx) => ({ a, idx: idx + 1 })).filter(({ a, idx }) => !a.startsWith("-") && !consumed.has(String(idx))).map(({ a }) => a).join(" ");
1944
- const { wiseAnnounceCli } = await import('./commands-BABblJRp.mjs');
1947
+ const { wiseAnnounceCli } = await import('./commands-BaVcBOKA.mjs');
1945
1948
  await wiseAnnounceCli(machineId, text, sessionId, { json });
1946
1949
  return;
1947
1950
  }
@@ -1953,7 +1956,7 @@ async function handleWiseAgentCommand(rest) {
1953
1956
  }
1954
1957
  return void 0;
1955
1958
  };
1956
- const { wiseMeetingsCli } = await import('./commands-BABblJRp.mjs');
1959
+ const { wiseMeetingsCli } = await import('./commands-BaVcBOKA.mjs');
1957
1960
  await wiseMeetingsCli(valueOf(["--machine", "-m"]), { json: rest.includes("--json") });
1958
1961
  return;
1959
1962
  }
@@ -2003,7 +2006,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
2003
2006
  return;
2004
2007
  }
2005
2008
  const authArgs = rest.slice(1);
2006
- const mod = await import('./auth-DPZSnISj.mjs');
2009
+ const mod = await import('./auth-BB_4_6P7.mjs');
2007
2010
  let action;
2008
2011
  try {
2009
2012
  action = mod.parseWiseAgentAuthArgs(authArgs);
@@ -2013,7 +2016,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
2013
2016
  return;
2014
2017
  }
2015
2018
  if (action) {
2016
- const { updateEnvFile } = await import('./run-CRTzyKbn.mjs').then(function (n) { return n.an; });
2019
+ const { updateEnvFile } = await import('./run-BNeZiySO.mjs').then(function (n) { return n.an; });
2017
2020
  const updates = mod.buildWiseAgentEnvUpdates(action);
2018
2021
  updateEnvFile(updates);
2019
2022
  for (const [k, v] of Object.entries(updates)) {
@@ -2027,7 +2030,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
2027
2030
  }
2028
2031
  async function handleDaemonAuthCommand(argv) {
2029
2032
  const sub = (argv[0] || "status").toLowerCase();
2030
- const mod = await import('./run-CRTzyKbn.mjs').then(function (n) { return n.an; });
2033
+ const mod = await import('./run-BNeZiySO.mjs').then(function (n) { return n.an; });
2031
2034
  if (sub === "--help" || sub === "-h" || sub === "help") {
2032
2035
  console.log(`
2033
2036
  svamp daemon auth \u2014 Configure how Claude subprocesses authenticate
@@ -2101,8 +2104,8 @@ one step: --use-hypha-proxy / --use-claude-login / --anthropic-base-url URL --an
2101
2104
  }
2102
2105
  async function handleDaemonCodexAuthCommand(argv) {
2103
2106
  const sub = (argv[0] || "status").toLowerCase();
2104
- const { updateEnvFile } = await import('./run-CRTzyKbn.mjs').then(function (n) { return n.an; });
2105
- const { resolveCodexProvider } = await import('./run-CRTzyKbn.mjs').then(function (n) { return n.ao; });
2107
+ const { updateEnvFile } = await import('./run-BNeZiySO.mjs').then(function (n) { return n.an; });
2108
+ const { resolveCodexProvider } = await import('./run-BNeZiySO.mjs').then(function (n) { return n.ao; });
2106
2109
  const redact = (k) => k && k.length > 10 ? `${k.slice(0, 6)}\u2026${k.slice(-4)}` : k ? "***" : "(unset)";
2107
2110
  if (sub === "--help" || sub === "-h" || sub === "help") {
2108
2111
  console.log(`
@@ -2434,7 +2437,7 @@ Examples:
2434
2437
  async function printSkillsHelp() {
2435
2438
  let browseUrl = "<HYPHA_SERVER_URL>/<workspace>/artifacts/marketplace (set HYPHA_SERVER_URL)";
2436
2439
  try {
2437
- const { getArtifactBaseUrl, getSkillsCollectionName } = await import('./run-CRTzyKbn.mjs').then(function (n) { return n.av; });
2440
+ const { getArtifactBaseUrl, getSkillsCollectionName } = await import('./run-BNeZiySO.mjs').then(function (n) { return n.av; });
2438
2441
  browseUrl = `${getArtifactBaseUrl()}/${getSkillsCollectionName()}`;
2439
2442
  } catch {
2440
2443
  }
package/dist/cli.mjs CHANGED
@@ -1,6 +1,6 @@
1
- import './run-CRTzyKbn.mjs';
1
+ import './run-BNeZiySO.mjs';
2
2
  import './serviceManager-hlOVxkhW.mjs';
3
- import './cli-D8tJd71c.mjs';
3
+ import './cli-BH5LIMPI.mjs';
4
4
  import 'os';
5
5
  import 'fs/promises';
6
6
  import 'fs';
@@ -1,8 +1,8 @@
1
1
  import { existsSync } from 'node:fs';
2
2
  import { resolve } from 'node:path';
3
- import { connectAndGetMachine, resolveSessionId, createWorktree, connectAndResolveSession } from './commands-BABblJRp.mjs';
3
+ import { connectAndGetMachine, resolveSessionId, createWorktree, connectAndResolveSession } from './commands-BaVcBOKA.mjs';
4
4
  import { execFileSync } from 'node:child_process';
5
- import { u as updateIssue, m as addComment, n as addIssue, i as shortId } from './run-CRTzyKbn.mjs';
5
+ import { u as updateIssue, m as addComment, n as addIssue, i as shortId } from './run-BNeZiySO.mjs';
6
6
  import 'node:os';
7
7
  import 'os';
8
8
  import 'fs/promises';
@@ -2,7 +2,7 @@ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
2
2
  import { execSync, execFileSync } from 'node:child_process';
3
3
  import { basename, resolve, join, isAbsolute } from 'node:path';
4
4
  import os from 'node:os';
5
- import { a3 as formatHandle, a4 as normalizeAllowedUser, a5 as loadSecurityContextConfig, a6 as resolveSecurityContext, a7 as buildSecurityContextFromFlags, a8 as mergeSecurityContexts, c as connectToHypha, a9 as buildSessionShareUrl, aa as computeOutboundHop, i as shortId, ab as registerAwaitingReply, ac as buildMachineShareUrl, ad as parseHandle, ae as handleMatchesMetadata } from './run-CRTzyKbn.mjs';
5
+ import { a3 as formatHandle, a4 as normalizeAllowedUser, a5 as loadSecurityContextConfig, a6 as resolveSecurityContext, a7 as buildSecurityContextFromFlags, a8 as mergeSecurityContexts, c as connectToHypha, a9 as buildSessionShareUrl, aa as computeOutboundHop, i as shortId, ab as registerAwaitingReply, ac as buildMachineShareUrl, ad as parseHandle, ae as handleMatchesMetadata } from './run-BNeZiySO.mjs';
6
6
  import 'os';
7
7
  import 'fs/promises';
8
8
  import 'fs';
@@ -1,5 +1,5 @@
1
1
  import { spawnSync } from 'node:child_process';
2
- import { j as resolveProjectRoot, I as workflowSteps, z as setWorkflowEnabled, E as isWorkflowEnabled, A as removeWorkflow, x as getWorkflow, D as listWorkflows, B as saveWorkflow, C as rawWorkflow } from './run-CRTzyKbn.mjs';
2
+ import { j as resolveProjectRoot, I as workflowSteps, z as setWorkflowEnabled, E as isWorkflowEnabled, A as removeWorkflow, x as getWorkflow, D as listWorkflows, B as saveWorkflow, C as rawWorkflow } from './run-BNeZiySO.mjs';
3
3
  import 'os';
4
4
  import 'fs/promises';
5
5
  import 'fs';
@@ -1,11 +1,11 @@
1
1
  import { writeFileSync, readFileSync } from 'fs';
2
2
  import { resolve } from 'path';
3
- import { connectAndGetMachine } from './commands-BABblJRp.mjs';
3
+ import { connectAndGetMachine } from './commands-BaVcBOKA.mjs';
4
4
  import 'node:fs';
5
5
  import 'node:child_process';
6
6
  import 'node:path';
7
7
  import 'node:os';
8
- import './run-CRTzyKbn.mjs';
8
+ import './run-BNeZiySO.mjs';
9
9
  import 'os';
10
10
  import 'fs/promises';
11
11
  import 'url';
@@ -1,7 +1,7 @@
1
1
  import os from 'os';
2
2
  import fs__default from 'fs';
3
3
  import { resolve, join, relative } from 'path';
4
- import { Q as parseFrontmatter, T as getSkillsServer, U as getSkillsWorkspaceName, V as getSkillsCollectionName, W as fetchWithTimeout, X as searchSkills, Y as SKILLS_DIR, Z as getSkillInfo, _ as downloadSkillFile, $ as listSkillFiles } from './run-CRTzyKbn.mjs';
4
+ import { Q as parseFrontmatter, T as getSkillsServer, U as getSkillsWorkspaceName, V as getSkillsCollectionName, W as fetchWithTimeout, X as searchSkills, Y as SKILLS_DIR, Z as getSkillInfo, _ as downloadSkillFile, $ as listSkillFiles } from './run-BNeZiySO.mjs';
5
5
  import 'fs/promises';
6
6
  import 'url';
7
7
  import 'child_process';
@@ -1,8 +1,8 @@
1
1
  import { execSync } from 'node:child_process';
2
2
  import { existsSync, readFileSync } from 'node:fs';
3
3
  import { join } from 'node:path';
4
- import { f as flushAndExit } from './cli-D8tJd71c.mjs';
5
- import { j as resolveProjectRoot, q as searchIssues, o as listIssues, l as resumeIssue, p as pauseIssue, m as addComment, u as updateIssue, k as getIssue, t as isVisibleTo, H as summarize, n as addIssue } from './run-CRTzyKbn.mjs';
4
+ import { f as flushAndExit } from './cli-BH5LIMPI.mjs';
5
+ import { j as resolveProjectRoot, q as searchIssues, o as listIssues, l as resumeIssue, p as pauseIssue, m as addComment, u as updateIssue, k as getIssue, t as isVisibleTo, H as summarize, n as addIssue } from './run-BNeZiySO.mjs';
6
6
  import './serviceManager-hlOVxkhW.mjs';
7
7
  import 'os';
8
8
  import 'fs/promises';
@@ -60,7 +60,7 @@ async function serviceExpose(args) {
60
60
  process.exit(1);
61
61
  }
62
62
  if (foreground) {
63
- const { runFrpcTunnel } = await import('./frpc-BsR6aGNJ.mjs');
63
+ const { runFrpcTunnel } = await import('./frpc-CuvdlU0g.mjs');
64
64
  await runFrpcTunnel(name, ports, void 0, {
65
65
  group,
66
66
  groupKey,
@@ -70,7 +70,7 @@ async function serviceExpose(args) {
70
70
  });
71
71
  return;
72
72
  }
73
- const { connectAndGetMachine } = await import('./commands-BABblJRp.mjs');
73
+ const { connectAndGetMachine } = await import('./commands-BaVcBOKA.mjs');
74
74
  const { server, machine } = await connectAndGetMachine();
75
75
  try {
76
76
  const status = await machine.tunnelStart({
@@ -92,7 +92,7 @@ async function serviceExpose(args) {
92
92
  console.log(` port ${port}: ${url}`);
93
93
  }
94
94
  if (process.env.SVAMP_SESSION_ID) {
95
- const { autoAddSessionLink } = await import('./agentCommands-B23M4vER.mjs');
95
+ const { autoAddSessionLink } = await import('./agentCommands-B7HQJo3X.mjs');
96
96
  let added = 0;
97
97
  for (const [port, url] of urlEntries) {
98
98
  const label = urlEntries.length > 1 ? `${name}:${port}` : name;
@@ -129,7 +129,7 @@ async function serviceServe(args) {
129
129
  console.log(`Serving ${resolvedDir}`);
130
130
  const servePort = 18080;
131
131
  const http = await import('http');
132
- const { serveStaticMount } = await import('./run-CRTzyKbn.mjs').then(function (n) { return n.al; });
132
+ const { serveStaticMount } = await import('./run-BNeZiySO.mjs').then(function (n) { return n.al; });
133
133
  const server = http.createServer((req, res) => {
134
134
  const u = new URL(req.url || "/", "http://127.0.0.1");
135
135
  let rel = u.pathname;
@@ -140,7 +140,7 @@ async function serviceServe(args) {
140
140
  server.once("error", reject);
141
141
  server.listen(servePort, "127.0.0.1", () => resolve());
142
142
  });
143
- const { runFrpcTunnel } = await import('./frpc-BsR6aGNJ.mjs');
143
+ const { runFrpcTunnel } = await import('./frpc-CuvdlU0g.mjs');
144
144
  void server;
145
145
  await runFrpcTunnel(name, [servePort]);
146
146
  } catch (err) {
@@ -150,7 +150,7 @@ async function serviceServe(args) {
150
150
  }
151
151
  async function serviceList(_args) {
152
152
  try {
153
- const { connectAndGetMachine } = await import('./commands-BABblJRp.mjs');
153
+ const { connectAndGetMachine } = await import('./commands-BaVcBOKA.mjs');
154
154
  const { server, machine } = await connectAndGetMachine();
155
155
  try {
156
156
  const tunnels = await machine.tunnelList({});
@@ -190,7 +190,7 @@ async function serviceDelete(args) {
190
190
  process.exit(1);
191
191
  }
192
192
  try {
193
- const { connectAndGetMachine } = await import('./commands-BABblJRp.mjs');
193
+ const { connectAndGetMachine } = await import('./commands-BaVcBOKA.mjs');
194
194
  const { server, machine } = await connectAndGetMachine();
195
195
  try {
196
196
  await machine.tunnelStop({ name });
@@ -221,7 +221,7 @@ async function handleServiceCommand() {
221
221
  return;
222
222
  }
223
223
  const commandArgs = serviceArgs.slice(1);
224
- if (sub === "expose" || sub === "tunnel") {
224
+ if (sub === "expose") {
225
225
  await serviceExpose(commandArgs);
226
226
  } else if (sub === "serve") {
227
227
  await serviceServe(commandArgs);
@@ -1,7 +1,7 @@
1
1
  import { existsSync, readFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
3
  import os from 'node:os';
4
- import { c as connectToHypha } from './run-CRTzyKbn.mjs';
4
+ import { c as connectToHypha } from './run-BNeZiySO.mjs';
5
5
  import { PINNED_CLAUDE_CODE_VERSION } from './pinnedClaudeCode-BaMR97BE.mjs';
6
6
  import 'os';
7
7
  import 'fs/promises';
@@ -4,7 +4,7 @@ import { mkdirSync, chmodSync, writeFileSync, unlinkSync, existsSync, readFileSy
4
4
  import { join } from 'path';
5
5
  import { homedir, platform, arch } from 'os';
6
6
  import { randomUUID, createHash } from 'crypto';
7
- import { e as getFrpsSubdomainHost, f as getFrpsServerPort, h as getFrpsServerAddr } from './run-CRTzyKbn.mjs';
7
+ import { e as getFrpsSubdomainHost, f as getFrpsServerPort, h as getFrpsServerAddr } from './run-BNeZiySO.mjs';
8
8
  import 'fs/promises';
9
9
  import 'url';
10
10
  import 'node:crypto';
@@ -1,5 +1,5 @@
1
- import { a0 as resolveModel, af as describeMisconfiguration, ag as buildMachineDeps } from './run-CRTzyKbn.mjs';
2
- import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-CKmZxwY6.mjs';
1
+ import { a0 as resolveModel, af as describeMisconfiguration, ag as buildMachineDeps } from './run-BNeZiySO.mjs';
2
+ import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-DB4Uipz9.mjs';
3
3
  import { WebSocket } from 'ws';
4
4
  import { execSync, spawn } from 'child_process';
5
5
  import 'os';
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- export { c as connectToHypha, a as createSessionStore, d as daemonStatus, g as getHyphaServerUrl, r as registerMachineService, s as startDaemon, b as stopDaemon } from './run-CRTzyKbn.mjs';
1
+ export { c as connectToHypha, a as createSessionStore, d as daemonStatus, g as getHyphaServerUrl, r as registerMachineService, s as startDaemon, b as stopDaemon } from './run-BNeZiySO.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -1,4 +1,4 @@
1
- import { c as connectToHypha, S as SharingNotificationSync, J as parseJwtEmail } from './run-CRTzyKbn.mjs';
1
+ import { c as connectToHypha, S as SharingNotificationSync, J as parseJwtEmail } from './run-BNeZiySO.mjs';
2
2
  import { randomUUID } from 'node:crypto';
3
3
  import { existsSync, readFileSync } from 'node:fs';
4
4
  import { join } from 'node:path';
@@ -1,5 +1,5 @@
1
1
  var name = "svamp-cli";
2
- var version = "0.2.284";
2
+ var version = "0.2.289";
3
3
  var description = "Svamp CLI — AI workspace daemon on Hypha Cloud";
4
4
  var author = "Amun AI AB";
5
5
  var license = "SEE LICENSE IN LICENSE";
@@ -1,4 +1,4 @@
1
- import { j as resolveProjectRoot, v as getRun, w as listRuns, x as getWorkflow, y as runWorkflow, z as setWorkflowEnabled, A as removeWorkflow, B as saveWorkflow, C as rawWorkflow, D as listWorkflows } from './run-CRTzyKbn.mjs';
1
+ import { j as resolveProjectRoot, v as getRun, w as listRuns, x as getWorkflow, y as runWorkflow, z as setWorkflowEnabled, A as removeWorkflow, B as saveWorkflow, C as rawWorkflow, D as listWorkflows } from './run-BNeZiySO.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -1,4 +1,4 @@
1
- import { j as resolveProjectRoot, u as updateIssue, k as getIssue, l as resumeIssue, p as pauseIssue, m as addComment, n as addIssue, o as listIssues, q as searchIssues, t as isVisibleTo } from './run-CRTzyKbn.mjs';
1
+ import { j as resolveProjectRoot, u as updateIssue, k as getIssue, l as resumeIssue, p as pauseIssue, m as addComment, n as addIssue, o as listIssues, q as searchIssues, t as isVisibleTo } from './run-BNeZiySO.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -2973,7 +2973,7 @@ Connection: close\r
2973
2973
  const mount = this.mounts.get(mountName);
2974
2974
  const subdomainOverride = mount?.access === "link" && mount.linkToken ? /* @__PURE__ */ new Map([[this.port, buildLinkSubdomain(subdomainSafe, mount.linkToken)]]) : void 0;
2975
2975
  try {
2976
- const { FrpcTunnel } = await import('./frpc-BsR6aGNJ.mjs');
2976
+ const { FrpcTunnel } = await import('./frpc-CuvdlU0g.mjs');
2977
2977
  let tunnel;
2978
2978
  tunnel = new FrpcTunnel({
2979
2979
  name: tunnelName,
@@ -5816,7 +5816,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
5816
5816
  const tunnels = handlers.tunnels;
5817
5817
  if (!tunnels) throw new Error("Tunnel management not available");
5818
5818
  if (tunnels.has(params.name)) throw new Error(`Tunnel '${params.name}' already running`);
5819
- const { FrpcTunnel } = await import('./frpc-BsR6aGNJ.mjs');
5819
+ const { FrpcTunnel } = await import('./frpc-CuvdlU0g.mjs');
5820
5820
  const tunnel = new FrpcTunnel({
5821
5821
  name: params.name,
5822
5822
  ports: params.ports,
@@ -6292,7 +6292,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
6292
6292
  }
6293
6293
  const deps = buildSessionDeps(rpc, { cwd, ownerEmail: owner });
6294
6294
  const sender = { name: context?.user?.email || context?.user?.id || "user", kind: "user", verified: true };
6295
- const { toolsForRole } = await import('./sideband-CKmZxwY6.mjs');
6295
+ const { toolsForRole } = await import('./sideband-DB4Uipz9.mjs');
6296
6296
  const r2 = await runWiseAgent({ message: params.message, sender, config: { tools: toolsForRole(role2) }, deps, transport, model: resolved.model });
6297
6297
  return fmt(r2);
6298
6298
  }
@@ -6391,7 +6391,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
6391
6391
  if (r.error || !r.sender) return { error: r.error || "unauthorized" };
6392
6392
  const callId = "call_" + Math.random().toString(16).slice(2, 12);
6393
6393
  const rendered = renderMessage(c, { sender: r.sender, body: { message: kwargs.message }, callId });
6394
- const { queryCore } = await import('./commands-BABblJRp.mjs');
6394
+ const { queryCore } = await import('./commands-BaVcBOKA.mjs');
6395
6395
  const timeout = c.reply?.timeout_sec || 120;
6396
6396
  let result;
6397
6397
  try {
@@ -9624,22 +9624,63 @@ class SharingNotificationSync {
9624
9624
  this.log(`[USER EVENT] Failed to publish ${event.type} for ${event.recipientEmail}: ${err.message}`);
9625
9625
  }
9626
9626
  }
9627
+ /**
9628
+ * List ALL children of a collection, paginating past hypha's default page cap (`limit=100`,
9629
+ * server hypha/artifact.py list_children). The svamp-user-events / svamp-shared-sessions
9630
+ * collections are GLOBAL across every deployment user, so a single unpaginated list() would
9631
+ * return only the newest ~100 rows across ALL recipients — silently hiding a given user's
9632
+ * events past that page. We page offset+=100 until a short/empty/duplicate page.
9633
+ */
9634
+ async listAllChildren(parentId) {
9635
+ const PAGE = 100;
9636
+ const all = [];
9637
+ const seen = /* @__PURE__ */ new Set();
9638
+ for (let offset = 0; ; offset += PAGE) {
9639
+ const page = await this.artifactManager.list({ parent_id: parentId, offset, limit: PAGE, _rkwargs: true });
9640
+ if (!Array.isArray(page) || page.length === 0) break;
9641
+ let fresh = 0;
9642
+ for (const c of page) {
9643
+ const k = String(c?.id ?? c?.manifest?.id ?? c?.alias ?? `${offset}:${fresh}`);
9644
+ if (seen.has(k)) continue;
9645
+ seen.add(k);
9646
+ all.push(c);
9647
+ fresh++;
9648
+ }
9649
+ if (page.length < PAGE || fresh === 0) break;
9650
+ }
9651
+ return all;
9652
+ }
9627
9653
  /**
9628
9654
  * List user events addressed to `recipientEmail` (the bell inbox), newest first, excluding
9629
9655
  * expired ones. Reuses the global svamp-user-events collection — cross-workspace by design.
9630
- * Mirrors the webapp's fetchUserEvents so the CLI reads the same source of truth.
9656
+ * Mirrors the webapp's fetchUserEvents so the CLI reads the same source of truth. Paginated
9657
+ * so a recipient's events past the first 100 global rows are not silently dropped; expired
9658
+ * events the caller owns are best-effort pruned (a no-op until the collection's
9659
+ * recipient_can_delete is active — swallowed on PermissionError).
9631
9660
  */
9632
9661
  async listUserEvents(recipientEmail) {
9633
9662
  if (!this.initialized || !this.eventCollectionId) return [];
9634
9663
  const normalized = recipientEmail.toLowerCase();
9635
9664
  try {
9636
- const children = await this.artifactManager.list({
9637
- parent_id: this.eventCollectionId,
9638
- _rkwargs: true
9639
- });
9665
+ const children = await this.listAllChildren(this.eventCollectionId);
9640
9666
  if (!Array.isArray(children)) return [];
9641
9667
  const now = Date.now();
9642
- return children.map((c) => c?.manifest).filter((m) => !!m && typeof m.recipientEmail === "string" && m.recipientEmail.toLowerCase() === normalized && (!m.expiresAt || m.expiresAt > now)).sort((a, b) => (b.createdAt || 0) - (a.createdAt || 0));
9668
+ const live = [];
9669
+ const expiredOwnedIds = [];
9670
+ for (const c of children) {
9671
+ const m = c?.manifest;
9672
+ if (!m || typeof m.recipientEmail !== "string" || m.recipientEmail.toLowerCase() !== normalized) continue;
9673
+ if (m.expiresAt && m.expiresAt <= now) {
9674
+ if (c?.id) expiredOwnedIds.push(c.id);
9675
+ continue;
9676
+ }
9677
+ live.push(m);
9678
+ }
9679
+ for (const id of expiredOwnedIds) {
9680
+ this.artifactManager.delete({ artifact_id: id, _rkwargs: true }).catch(() => {
9681
+ });
9682
+ }
9683
+ return live.sort((a, b) => (b.createdAt || 0) - (a.createdAt || 0));
9643
9684
  } catch (err) {
9644
9685
  this.log(`[USER EVENT] listUserEvents failed for ${recipientEmail}: ${err.message}`);
9645
9686
  return [];
@@ -9654,7 +9695,7 @@ class SharingNotificationSync {
9654
9695
  if (!this.initialized || !this.eventCollectionId) return false;
9655
9696
  const normalized = recipientEmail.toLowerCase();
9656
9697
  try {
9657
- const children = await this.artifactManager.list({ parent_id: this.eventCollectionId, _rkwargs: true });
9698
+ const children = await this.listAllChildren(this.eventCollectionId);
9658
9699
  if (!Array.isArray(children)) return false;
9659
9700
  const short = eventId.slice(0, 8);
9660
9701
  const match = children.find((c) => {
@@ -9944,6 +9985,7 @@ function startToolCall(toolCallId, toolKind, update, ctx, source) {
9944
9985
  ctx.activeToolCalls.delete(toolCallId);
9945
9986
  ctx.toolCallStartTimes.delete(toolCallId);
9946
9987
  ctx.toolCallTimeouts.delete(toolCallId);
9988
+ ctx.toolCallIdToNameMap.delete(toolCallId);
9947
9989
  ctx.log(`Tool call TIMEOUT: ${toolCallId} (${toolKind}) after ${(timeoutMs / 1e3).toFixed(0)}s`);
9948
9990
  if (ctx.activeToolCalls.size === 0) {
9949
9991
  ctx.emitIdleStatus();
@@ -14409,7 +14451,7 @@ You are running inside a Svamp session (id: ${sessionId}${handle ? `, handle: ${
14409
14451
  - \`svamp session link add "<url>" --label "<label>" [--icon "\u{1F517}"]\` \u2014 surface viewable artifacts (dashboards, reports, apps) as buttons in the composer "Launch Pad". Manage many: \`link list\` \xB7 \`link update <id> [--url|--label|--icon]\` \xB7 \`link remove <id>\`. Adding the same URL again UPDATES that entry (URL is the dedup key \u2014 no duplicates). Tunnel/exposed URLs from \`svamp service expose\` are added to the Launch Pad AUTOMATICALLY, so do NOT \`session link add\` a URL you just exposed. A session can have MANY links (the Launch Pad); \`session set-link "<url>" "<label>"\` also appends + dedupes by URL (alias of \`link add\`).
14410
14452
  - \`svamp session notify "<msg>" [--level info|warning|error]\` \u2014 send a user notification
14411
14453
 
14412
- **Artifacts (rich inline output):** Write HTML to a file (\`.svamp/<sessionId>/outputs/\` for disposable, \`./outputs/\` for persistent) and emit \`<artifact src="./outputs/viz.html" title="..." />\` \u2014 the Svamp client renders it inline as a sandboxed iframe with theme CSS vars, auto-resize, file inlining, and a header with Reload/Fullscreen/\u22EE menu. Modes: \`default\`, \`bare\` (controls on hover), \`immersive\` (no chrome), \`card\` (click-to-open preview with \`description\`+\`poster\`). Use \`<artifact src="https://..." height="540" />\` to embed a live server. Run \`svamp serve <name> <dir>\` to share. Use a real backend server (\`svamp service expose\`) when you need persistence/auth. **Inline artifacts (\`<artifact>\u2026HTML\u2026</artifact>\` with a body) are for SMALL self-contained HTML only \u2014 anything large (images, datasets, big reports, base64) MUST be written to a file and referenced via \`<artifact src="./outputs/<file>" />\`, never pasted inline. An inline body over 512 KB is rejected (error card + stripped) because it bloats stored history.** See the \`artifact\` skill.
14454
+ **Artifacts (rich inline output):** Write HTML to a file (\`.svamp/<sessionId>/outputs/\` for disposable, \`./outputs/\` for persistent) and emit \`<artifact src="./outputs/viz.html" title="..." />\` \u2014 the Svamp client renders it inline as a sandboxed iframe with theme CSS vars, auto-resize, file inlining, and a header with Reload/Fullscreen/\u22EE menu. Modes: \`default\`, \`bare\` (controls on hover), \`immersive\` (no chrome), \`card\` (click-to-open preview with \`description\`+\`poster\`). Use \`<artifact src="https://..." height="540" />\` to embed a live server. To share it as a link, DEFAULT to a persistent, lazy mount \u2014 \`svamp serve apply <yaml>\` (a static dir, or a \`process:\` block with \`wake_on_request: true\` + \`idle_timeout_sec\` for a dynamic server): it survives daemon restarts, idles to near-zero memory, and wakes on the next visit (the serverless pattern users expect). Reserve ad-hoc \`svamp serve <name> <dir>\` / \`svamp service expose\` for genuinely throwaway demos ONLY \u2014 those vanish on restart, which confuses users who revisit. **Inline artifacts (\`<artifact>\u2026HTML\u2026</artifact>\` with a body) are for SMALL self-contained HTML only \u2014 anything large (images, datasets, big reports, base64) MUST be written to a file and referenced via \`<artifact src="./outputs/<file>" />\`, never pasted inline. An inline body over 512 KB is rejected (error card + stripped) because it bloats stored history.** See the \`artifact\` skill.
14413
14455
 
14414
14456
  ## Shared environment
14415
14457
 
@@ -16145,7 +16187,7 @@ async function startDaemon(options) {
16145
16187
  try {
16146
16188
  const dir = loadSessionIndex()[sessionId]?.directory;
16147
16189
  if (!dir) return;
16148
- const { reconcileServiceLinks } = await import('./agentCommands-B23M4vER.mjs');
16190
+ const { reconcileServiceLinks } = await import('./agentCommands-B7HQJo3X.mjs');
16149
16191
  const configPath = getSvampConfigPath(dir, sessionId);
16150
16192
  const config = readSvampConfig(configPath);
16151
16193
  const entries = Array.from(urls.entries());
@@ -16163,7 +16205,7 @@ async function startDaemon(options) {
16163
16205
  }
16164
16206
  }
16165
16207
  async function createExposedTunnel(spec) {
16166
- const { FrpcTunnel } = await import('./frpc-BsR6aGNJ.mjs');
16208
+ const { FrpcTunnel } = await import('./frpc-CuvdlU0g.mjs');
16167
16209
  const tunnel = new FrpcTunnel({
16168
16210
  name: spec.name,
16169
16211
  ports: spec.ports,
@@ -18379,11 +18421,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
18379
18421
  });
18380
18422
  },
18381
18423
  onIssue: async (params) => {
18382
- const { issueRpc } = await import('./rpc-B5BRaVsS.mjs');
18424
+ const { issueRpc } = await import('./rpc-DMpJef5v.mjs');
18383
18425
  return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
18384
18426
  },
18385
18427
  onWorkflow: async (params) => {
18386
- const { workflowRpc } = await import('./rpc-BjrKqEib.mjs');
18428
+ const { workflowRpc } = await import('./rpc-C9U0Ho27.mjs');
18387
18429
  return workflowRpc(params?.cwd || directory, params || {});
18388
18430
  },
18389
18431
  onRipgrep: async (args, cwd) => {
@@ -18995,11 +19037,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
18995
19037
  });
18996
19038
  },
18997
19039
  onIssue: async (params) => {
18998
- const { issueRpc } = await import('./rpc-B5BRaVsS.mjs');
19040
+ const { issueRpc } = await import('./rpc-DMpJef5v.mjs');
18999
19041
  return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
19000
19042
  },
19001
19043
  onWorkflow: async (params) => {
19002
- const { workflowRpc } = await import('./rpc-BjrKqEib.mjs');
19044
+ const { workflowRpc } = await import('./rpc-C9U0Ho27.mjs');
19003
19045
  return workflowRpc(params?.cwd || directory, params || {});
19004
19046
  },
19005
19047
  onRipgrep: async (args, cwd) => {
@@ -20114,7 +20156,7 @@ ${oracle.output.trim().slice(0, 500)}`, "\u{1F501} Continuing loop");
20114
20156
  const PING_TIMEOUT_MS = 15e3;
20115
20157
  const POST_RECONNECT_GRACE_MS = 2e4;
20116
20158
  const RECONNECT_JITTER_MS = 2500;
20117
- const { WorkflowScheduler } = await import('./scheduler-QYMtbUDe.mjs');
20159
+ const { WorkflowScheduler } = await import('./scheduler-CAUwniWA.mjs');
20118
20160
  const workflowScheduler = new WorkflowScheduler({
20119
20161
  projectRoots: () => {
20120
20162
  const dirs = /* @__PURE__ */ new Set();
@@ -1,4 +1,4 @@
1
- import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import { ah as applyClaudeProxyEnv, ai as composeSessionId, aj as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, ak as generateHookSettings } from './run-CRTzyKbn.mjs';
1
+ import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import { ah as applyClaudeProxyEnv, ai as composeSessionId, aj as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, ak as generateHookSettings } from './run-BNeZiySO.mjs';
2
2
  import os from 'node:os';
3
3
  import { resolve, join } from 'node:path';
4
4
  import { existsSync, readFileSync, watch } from 'node:fs';
@@ -1,4 +1,4 @@
1
- import { j as resolveProjectRoot, D as listWorkflows, E as isWorkflowEnabled, F as workflowCrons, y as runWorkflow, G as cronMatches } from './run-CRTzyKbn.mjs';
1
+ import { j as resolveProjectRoot, D as listWorkflows, E as isWorkflowEnabled, F as workflowCrons, y as runWorkflow, G as cronMatches } from './run-BNeZiySO.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -54,7 +54,7 @@ async function handleServeCommand() {
54
54
  }
55
55
  }
56
56
  async function serveAdd(args, machineId) {
57
- const { connectAndGetMachine } = await import('./commands-BABblJRp.mjs');
57
+ const { connectAndGetMachine } = await import('./commands-BaVcBOKA.mjs');
58
58
  const pos = positionalArgs(args);
59
59
  const name = pos[0];
60
60
  if (!name) {
@@ -93,7 +93,7 @@ async function serveAdd(args, machineId) {
93
93
  }
94
94
  }
95
95
  async function serveApply(args, machineId) {
96
- const { connectAndGetMachine } = await import('./commands-BABblJRp.mjs');
96
+ const { connectAndGetMachine } = await import('./commands-BaVcBOKA.mjs');
97
97
  const fs = await import('fs');
98
98
  const yaml = await import('yaml');
99
99
  const file = positionalArgs(args)[0];
@@ -182,7 +182,7 @@ async function serveApply(args, machineId) {
182
182
  }
183
183
  }
184
184
  async function serveRemove(args, machineId) {
185
- const { connectAndGetMachine } = await import('./commands-BABblJRp.mjs');
185
+ const { connectAndGetMachine } = await import('./commands-BaVcBOKA.mjs');
186
186
  const pos = positionalArgs(args);
187
187
  const name = pos[0];
188
188
  if (!name) {
@@ -202,7 +202,7 @@ async function serveRemove(args, machineId) {
202
202
  }
203
203
  }
204
204
  async function serveList(args, machineId) {
205
- const { connectAndGetMachine } = await import('./commands-BABblJRp.mjs');
205
+ const { connectAndGetMachine } = await import('./commands-BaVcBOKA.mjs');
206
206
  const all = hasFlag(args, "--all", "-a");
207
207
  const json = hasFlag(args, "--json");
208
208
  const sessionId = getFlag(args, "--session");
@@ -235,7 +235,7 @@ async function serveList(args, machineId) {
235
235
  }
236
236
  }
237
237
  async function serveInfo(machineId) {
238
- const { connectAndGetMachine } = await import('./commands-BABblJRp.mjs');
238
+ const { connectAndGetMachine } = await import('./commands-BaVcBOKA.mjs');
239
239
  const { machine, server } = await connectAndGetMachine(machineId);
240
240
  try {
241
241
  const info = await machine.serveInfo();
@@ -1,4 +1,4 @@
1
- import { R as READ_ONLY_TOOLS, M as loadMachineContext, N as buildMachineInstructions, O as machineToolsForRole, P as buildMachineTools } from './run-CRTzyKbn.mjs';
1
+ import { R as READ_ONLY_TOOLS, M as loadMachineContext, N as buildMachineInstructions, O as machineToolsForRole, P as buildMachineTools } from './run-BNeZiySO.mjs';
2
2
  import 'node:child_process';
3
3
  import 'os';
4
4
  import 'fs/promises';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svamp-cli",
3
- "version": "0.2.284",
3
+ "version": "0.2.289",
4
4
  "description": "Svamp CLI — AI workspace daemon on Hypha Cloud",
5
5
  "author": "Amun AI AB",
6
6
  "license": "SEE LICENSE IN LICENSE",