svamp-cli 0.2.279 → 0.2.281

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-Dc-nM2T4.mjs +100 -0
  2. package/dist/{agentCommands-CZjZsqJC.mjs → agentCommands-i-qaq_2s.mjs} +5 -5
  3. package/dist/{auth-CFWhaPVg.mjs → auth-DDr5dyj0.mjs} +1 -1
  4. package/dist/{cli-E1osBiyj.mjs → cli-Bp0pUO_8.mjs} +81 -65
  5. package/dist/cli.mjs +2 -2
  6. package/dist/{commands-Chlqo2DT.mjs → commands-BFLKkIyS.mjs} +1 -1
  7. package/dist/{commands-1FkeAcQD.mjs → commands-BnI1mRkf.mjs} +2 -2
  8. package/dist/{commands-GYPd_Ddj.mjs → commands-CKM28jKj.mjs} +7 -7
  9. package/dist/{commands-ux1fl1qK.mjs → commands-CdjKMUGJ.mjs} +1 -1
  10. package/dist/{commands-TFNC2BuR.mjs → commands-Cz4cl4Th.mjs} +2 -2
  11. package/dist/{commands-DW0HvMa8.mjs → commands-D8OeSTxb.mjs} +1 -1
  12. package/dist/{commands-C_XFxrjC.mjs → commands-DmdJbFhU.mjs} +2 -2
  13. package/dist/{fleet-cu0bUH3v.mjs → fleet-DCwX4RTF.mjs} +1 -1
  14. package/dist/{frpc-B1-dyz8z.mjs → frpc-Dst1Xkue.mjs} +1 -1
  15. package/dist/{headlessCli-BvoiOGxZ.mjs → headlessCli-CyCQlRjV.mjs} +2 -2
  16. package/dist/index.mjs +1 -1
  17. package/dist/{notifyCommands-BrD5qNdF.mjs → notifyCommands-CfvUfjfP.mjs} +1 -1
  18. package/dist/{package-BVdnXBp4.mjs → package-DoBwyCNL.mjs} +1 -1
  19. package/dist/{rpc-2I8SlTrz.mjs → rpc-DXZSyYAh.mjs} +1 -1
  20. package/dist/{rpc-DKY7-oh-.mjs → rpc-Dt3gekac.mjs} +1 -1
  21. package/dist/{run-B10NKlSF.mjs → run-C75iKIIt.mjs} +1 -1
  22. package/dist/{run-BtIiSNjM.mjs → run-DSlJ62Xb.mjs} +25 -26
  23. package/dist/{scheduler-BOnAtzax.mjs → scheduler-CTndQ5_D.mjs} +1 -1
  24. package/dist/{serveCommands-DdZcK0Q9.mjs → serveCommands-CC32Vh-8.mjs} +5 -5
  25. package/dist/{sideband-BjUyyMW7.mjs → sideband-DAZlMFIi.mjs} +1 -1
  26. package/package.json +1 -1
@@ -0,0 +1,100 @@
1
+ import { c as connectToHypha, K as computeCollectionConfigUpdate } from './run-DSlJ62Xb.mjs';
2
+ import { existsSync, readFileSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import os from 'node:os';
5
+ import 'os';
6
+ import 'fs/promises';
7
+ import 'fs';
8
+ import 'path';
9
+ import 'url';
10
+ import 'child_process';
11
+ import 'crypto';
12
+ import 'node:crypto';
13
+ import 'node:child_process';
14
+ import 'util';
15
+ import 'http';
16
+ import 'net';
17
+ import 'node:events';
18
+ import '@agentclientprotocol/sdk';
19
+ import 'node:readline';
20
+ import 'node:fs/promises';
21
+ import 'node:util';
22
+ import 'yaml';
23
+
24
+ function loadEnv() {
25
+ const SVAMP_HOME = process.env.SVAMP_HOME || join(os.homedir(), ".svamp");
26
+ for (const f of [join(SVAMP_HOME, ".env"), join(os.homedir(), ".hypha", ".env")]) {
27
+ if (!existsSync(f)) continue;
28
+ try {
29
+ for (const line of readFileSync(f, "utf-8").split("\n")) {
30
+ const m = line.match(/^\s*([A-Za-z0-9_]+)\s*=\s*(.*)\s*$/);
31
+ if (m && process.env[m[1]] === void 0) process.env[m[1]] = m[2].replace(/^["']|["']$/g, "");
32
+ }
33
+ } catch {
34
+ }
35
+ }
36
+ }
37
+ async function setCollectionConfig(alias, configJson) {
38
+ if (!alias || !configJson) {
39
+ console.error("Usage: svamp admin set-collection-config <alias> --config '<json>'");
40
+ console.error(` e.g. svamp admin set-collection-config svamp-user-events --config '{"private_children":true,"recipient_field":"recipientEmail"}'`);
41
+ process.exit(1);
42
+ }
43
+ let extra;
44
+ try {
45
+ extra = JSON.parse(configJson);
46
+ if (!extra || typeof extra !== "object" || Array.isArray(extra)) throw new Error("config must be a JSON object");
47
+ } catch (e) {
48
+ console.error(`--config must be a JSON object: ${e.message}`);
49
+ process.exit(1);
50
+ }
51
+ loadEnv();
52
+ const serverUrl = process.env.HYPHA_SERVER_URL;
53
+ const token = process.env.HYPHA_TOKEN;
54
+ if (!serverUrl || !token) {
55
+ console.error('Not logged in. Run "svamp login <url>" first.');
56
+ process.exit(1);
57
+ }
58
+ let server;
59
+ try {
60
+ server = await connectToHypha({ serverUrl, token, name: "svamp-admin-cli" });
61
+ } catch (e) {
62
+ console.error(`Failed to connect to Hypha: ${e.message}`);
63
+ process.exit(1);
64
+ }
65
+ try {
66
+ const am = await server.getService("public/artifact-manager");
67
+ if (!am) {
68
+ console.error("Artifact manager not available.");
69
+ process.exit(1);
70
+ }
71
+ let col;
72
+ try {
73
+ col = await am.read({ artifact_id: alias, _rkwargs: true });
74
+ } catch (e) {
75
+ console.error(`Collection "${alias}" not found (or not readable): ${e.message}`);
76
+ process.exit(1);
77
+ }
78
+ const { changed, merged } = computeCollectionConfigUpdate(col.config, extra);
79
+ if (!changed) {
80
+ console.log(`${alias}: config already up to date (no change).`);
81
+ return;
82
+ }
83
+ try {
84
+ await am.edit({ artifact_id: col.id, config: merged, _rkwargs: true });
85
+ await am.commit({ artifact_id: col.id, _rkwargs: true }).catch(() => {
86
+ });
87
+ } catch (e) {
88
+ console.error(`Failed to set config on "${alias}" (need owner/admin/root rights): ${e.message}`);
89
+ process.exit(1);
90
+ }
91
+ console.log(`\u2713 ${alias}: merged {${Object.keys(extra).join(", ")}} into config (existing keys preserved).`);
92
+ } finally {
93
+ try {
94
+ await server.disconnect?.();
95
+ } catch {
96
+ }
97
+ }
98
+ }
99
+
100
+ export { setCollectionConfig };
@@ -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-BtIiSNjM.mjs';
5
+ import { i as shortId } from './run-DSlJ62Xb.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-BtIiSNjM.mjs').then(function (n) { return n.an; });
99
+ const { projectName, writeProjectInfo, sanitizeDescription, projectInfoPath } = await import('./run-DSlJ62Xb.mjs').then(function (n) { return n.ao; });
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-ux1fl1qK.mjs');
346
+ const { connectAndGetMachine } = await import('./commands-CdjKMUGJ.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-ux1fl1qK.mjs');
424
+ const { connectAndResolveSession } = await import('./commands-CdjKMUGJ.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-ux1fl1qK.mjs');
478
+ const { connectAndResolveSession } = await import('./commands-CdjKMUGJ.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 { _ as resolveModel } from './run-BtIiSNjM.mjs';
1
+ import { $ as resolveModel } from './run-DSlJ62Xb.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -1,4 +1,4 @@
1
- import { $ as clearStopMarker, a0 as stopMarkerExists, s as startDaemon, b as stopDaemon, d as daemonStatus } from './run-BtIiSNjM.mjs';
1
+ import { a0 as clearStopMarker, a1 as stopMarkerExists, s as startDaemon, b as stopDaemon, d as daemonStatus } from './run-DSlJ62Xb.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-BtIiSNjM.mjs').then(function (n) { return n.ak; });
36
+ const { getLoadedConfig } = await import('./run-DSlJ62Xb.mjs').then(function (n) { return n.al; });
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-BtIiSNjM.mjs').then(function (n) { return n.au; });
55
+ const mod = await import('./run-DSlJ62Xb.mjs').then(function (n) { return n.av; });
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-GYPd_Ddj.mjs');
359
+ const { handleServiceCommand } = await import('./commands-CKM28jKj.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-DdZcK0Q9.mjs');
367
+ const { handleServeCommand } = await import('./serveCommands-CC32Vh-8.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-TFNC2BuR.mjs');
376
+ const { processCommand } = await import('./commands-Cz4cl4Th.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-1FkeAcQD.mjs');
390
+ const { issueCommand } = await import('./commands-BnI1mRkf.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-Chlqo2DT.mjs');
394
+ const { workflowCommand } = await import('./commands-BFLKkIyS.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-C_XFxrjC.mjs');
401
+ const { crewCommand } = await import('./commands-DmdJbFhU.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-BrD5qNdF.mjs');
405
+ const { notifyUser } = await import('./notifyCommands-CfvUfjfP.mjs');
406
406
  const rest = args.slice(1);
407
407
  let email;
408
408
  const o = {};
@@ -416,8 +416,24 @@ async function main() {
416
416
  }
417
417
  await notifyUser(email, o);
418
418
  process.exit(0);
419
+ } else if (subcommand === "admin") {
420
+ const adminSub = args[1];
421
+ if (adminSub === "set-collection-config") {
422
+ const { setCollectionConfig } = await import('./adminCommands-Dc-nM2T4.mjs');
423
+ const rest = args.slice(2);
424
+ let alias;
425
+ let configJson;
426
+ for (let i = 0; i < rest.length; i++) {
427
+ if (rest[i] === "--config" && i + 1 < rest.length) configJson = rest[++i];
428
+ else if (!rest[i].startsWith("-") && !alias) alias = rest[i];
429
+ }
430
+ await setCollectionConfig(alias, configJson);
431
+ } else {
432
+ console.error("Usage: svamp admin set-collection-config <alias> --config '<json>'");
433
+ }
434
+ process.exit(0);
419
435
  } else if (subcommand === "events") {
420
- const { listEvents, ackEvent } = await import('./notifyCommands-BrD5qNdF.mjs');
436
+ const { listEvents, ackEvent } = await import('./notifyCommands-CfvUfjfP.mjs');
421
437
  const sub = args[1];
422
438
  const rest = args.slice(2);
423
439
  let email;
@@ -438,7 +454,7 @@ async function main() {
438
454
  } else if (!subcommand || subcommand === "start") {
439
455
  await handleInteractiveCommand();
440
456
  } else if (subcommand === "--version" || subcommand === "-v") {
441
- const pkg = await import('./package-BVdnXBp4.mjs').catch(() => ({ default: { version: "unknown" } }));
457
+ const pkg = await import('./package-DoBwyCNL.mjs').catch(() => ({ default: { version: "unknown" } }));
442
458
  console.log(`svamp version: ${pkg.default.version}`);
443
459
  } else {
444
460
  console.error(`Unknown command: ${subcommand}`);
@@ -447,7 +463,7 @@ async function main() {
447
463
  }
448
464
  }
449
465
  async function handleInteractiveCommand() {
450
- const { runInteractive } = await import('./run-B10NKlSF.mjs');
466
+ const { runInteractive } = await import('./run-C75iKIIt.mjs');
451
467
  const interactiveArgs = subcommand === "start" ? args.slice(1) : args;
452
468
  let directory = process.cwd();
453
469
  let resumeSessionId;
@@ -492,7 +508,7 @@ async function handleAgentCommand() {
492
508
  return;
493
509
  }
494
510
  if (agentArgs[0] === "list") {
495
- const { KNOWN_ACP_AGENTS, KNOWN_CODEX_AGENTS: KNOWN_CODEX_AGENTS2 } = await import('./run-BtIiSNjM.mjs').then(function (n) { return n.aq; });
511
+ const { KNOWN_ACP_AGENTS, KNOWN_CODEX_AGENTS: KNOWN_CODEX_AGENTS2 } = await import('./run-DSlJ62Xb.mjs').then(function (n) { return n.ar; });
496
512
  console.log("Known agents:");
497
513
  for (const [name, config2] of Object.entries(KNOWN_ACP_AGENTS)) {
498
514
  console.log(` ${name.padEnd(12)} ${config2.command} ${config2.args.join(" ")} (ACP)`);
@@ -504,7 +520,7 @@ async function handleAgentCommand() {
504
520
  console.log('Use "svamp agent -- <command> [args]" for a custom ACP agent.');
505
521
  return;
506
522
  }
507
- const { resolveAcpAgentConfig, KNOWN_CODEX_AGENTS } = await import('./run-BtIiSNjM.mjs').then(function (n) { return n.aq; });
523
+ const { resolveAcpAgentConfig, KNOWN_CODEX_AGENTS } = await import('./run-DSlJ62Xb.mjs').then(function (n) { return n.ar; });
508
524
  let cwd = process.cwd();
509
525
  const filteredArgs = [];
510
526
  for (let i = 0; i < agentArgs.length; i++) {
@@ -528,12 +544,12 @@ async function handleAgentCommand() {
528
544
  console.log(`Starting ${config.agentName} agent in ${cwd}...`);
529
545
  let backend;
530
546
  if (KNOWN_CODEX_AGENTS[config.agentName]) {
531
- const { CodexAppServerBackend } = await import('./run-BtIiSNjM.mjs').then(function (n) { return n.ar; });
547
+ const { CodexAppServerBackend } = await import('./run-DSlJ62Xb.mjs').then(function (n) { return n.as; });
532
548
  backend = new CodexAppServerBackend({ cwd, log: logFn });
533
549
  } else {
534
- const { AcpBackend } = await import('./run-BtIiSNjM.mjs').then(function (n) { return n.ap; });
535
- const { GeminiTransport } = await import('./run-BtIiSNjM.mjs').then(function (n) { return n.as; });
536
- const { DefaultTransport } = await import('./run-BtIiSNjM.mjs').then(function (n) { return n.ao; });
550
+ const { AcpBackend } = await import('./run-DSlJ62Xb.mjs').then(function (n) { return n.aq; });
551
+ const { GeminiTransport } = await import('./run-DSlJ62Xb.mjs').then(function (n) { return n.at; });
552
+ const { DefaultTransport } = await import('./run-DSlJ62Xb.mjs').then(function (n) { return n.ap; });
537
553
  const transportHandler = config.agentName === "gemini" ? new GeminiTransport() : new DefaultTransport(config.agentName);
538
554
  backend = new AcpBackend({
539
555
  agentName: config.agentName,
@@ -660,7 +676,7 @@ async function handleSessionCommand() {
660
676
  process.exit(1);
661
677
  }
662
678
  }
663
- 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-ux1fl1qK.mjs');
679
+ 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-CdjKMUGJ.mjs');
664
680
  const parseFlagStr = (flag, shortFlag) => {
665
681
  for (let i = 1; i < sessionArgs.length; i++) {
666
682
  if ((sessionArgs[i] === flag || shortFlag) && i + 1 < sessionArgs.length) {
@@ -728,7 +744,7 @@ async function handleSessionCommand() {
728
744
  allowDomain.push(sessionArgs[++i]);
729
745
  }
730
746
  }
731
- const { parseShareArg } = await import('./commands-ux1fl1qK.mjs');
747
+ const { parseShareArg } = await import('./commands-CdjKMUGJ.mjs');
732
748
  const shareEntries = share.map((s) => parseShareArg(s));
733
749
  await sessionSpawn(agent, dir, targetMachineId, {
734
750
  message,
@@ -818,7 +834,7 @@ async function handleSessionCommand() {
818
834
  console.error(" Rewinds history: rewrites the message + drops everything after it, then restarts Claude.");
819
835
  process.exit(1);
820
836
  }
821
- const { sessionEditMessage } = await import('./commands-ux1fl1qK.mjs');
837
+ const { sessionEditMessage } = await import('./commands-CdjKMUGJ.mjs');
822
838
  await sessionEditMessage(sessionArgs[1], sessionArgs[2], sessionArgs[3], targetMachineId);
823
839
  } else if (sessionSubcommand === "refine") {
824
840
  if (!sessionArgs[1] || !sessionArgs[2]) {
@@ -826,7 +842,7 @@ async function handleSessionCommand() {
826
842
  console.error(" Asks the agent to revise its latest reply in place (no extra round).");
827
843
  process.exit(1);
828
844
  }
829
- const { sessionRefineLastReply } = await import('./commands-ux1fl1qK.mjs');
845
+ const { sessionRefineLastReply } = await import('./commands-CdjKMUGJ.mjs');
830
846
  await sessionRefineLastReply(sessionArgs[1], sessionArgs[2], targetMachineId);
831
847
  } else if (sessionSubcommand === "undo-edit" || sessionSubcommand === "undo") {
832
848
  if (!sessionArgs[1]) {
@@ -834,7 +850,7 @@ async function handleSessionCommand() {
834
850
  console.error(" Reverts the most recent edit/refine, restoring the pre-edit history.");
835
851
  process.exit(1);
836
852
  }
837
- const { sessionUndoEdit } = await import('./commands-ux1fl1qK.mjs');
853
+ const { sessionUndoEdit } = await import('./commands-CdjKMUGJ.mjs');
838
854
  await sessionUndoEdit(sessionArgs[1], targetMachineId);
839
855
  } else if (sessionSubcommand === "query") {
840
856
  const dir = sessionArgs[1];
@@ -844,7 +860,7 @@ async function handleSessionCommand() {
844
860
  console.error(" Spawns a stateless Claude session in <directory>, sends <prompt>, prints the answer, then deletes the session.");
845
861
  process.exit(1);
846
862
  }
847
- const { sessionQuery } = await import('./commands-ux1fl1qK.mjs');
863
+ const { sessionQuery } = await import('./commands-CdjKMUGJ.mjs');
848
864
  await sessionQuery(dir, prompt, targetMachineId, {
849
865
  timeout: parseFlagInt("--timeout"),
850
866
  json: hasFlag("--json"),
@@ -877,7 +893,7 @@ async function handleSessionCommand() {
877
893
  console.error("Usage: svamp session approve <session-id> [request-id] [--json]");
878
894
  process.exit(1);
879
895
  }
880
- const { sessionApprove } = await import('./commands-ux1fl1qK.mjs');
896
+ const { sessionApprove } = await import('./commands-CdjKMUGJ.mjs');
881
897
  const approveReqId = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
882
898
  await sessionApprove(sessionArgs[1], approveReqId, targetMachineId, {
883
899
  json: hasFlag("--json")
@@ -887,7 +903,7 @@ async function handleSessionCommand() {
887
903
  console.error("Usage: svamp session deny <session-id> [request-id] [--json]");
888
904
  process.exit(1);
889
905
  }
890
- const { sessionDeny } = await import('./commands-ux1fl1qK.mjs');
906
+ const { sessionDeny } = await import('./commands-CdjKMUGJ.mjs');
891
907
  const denyReqId = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
892
908
  await sessionDeny(sessionArgs[1], denyReqId, targetMachineId, {
893
909
  json: hasFlag("--json")
@@ -939,7 +955,7 @@ async function handleSessionCommand() {
939
955
  console.error("Usage: svamp session set-title <title>");
940
956
  process.exit(1);
941
957
  }
942
- const { sessionSetTitle } = await import('./agentCommands-CZjZsqJC.mjs');
958
+ const { sessionSetTitle } = await import('./agentCommands-i-qaq_2s.mjs');
943
959
  await sessionSetTitle(title);
944
960
  } else if (sessionSubcommand === "set-project-description" || sessionSubcommand === "set-project") {
945
961
  const desc = sessionArgs.slice(1).filter((a) => !a.startsWith("--")).join(" ");
@@ -947,7 +963,7 @@ async function handleSessionCommand() {
947
963
  console.error("Usage: svamp session set-project-description <text>");
948
964
  process.exit(1);
949
965
  }
950
- const { sessionSetProjectDescription } = await import('./agentCommands-CZjZsqJC.mjs');
966
+ const { sessionSetProjectDescription } = await import('./agentCommands-i-qaq_2s.mjs');
951
967
  await sessionSetProjectDescription(desc);
952
968
  } else if (sessionSubcommand === "set-link") {
953
969
  const url = sessionArgs[1];
@@ -956,11 +972,11 @@ async function handleSessionCommand() {
956
972
  process.exit(1);
957
973
  }
958
974
  const label = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
959
- const { sessionSetLink } = await import('./agentCommands-CZjZsqJC.mjs');
975
+ const { sessionSetLink } = await import('./agentCommands-i-qaq_2s.mjs');
960
976
  await sessionSetLink(url, label);
961
977
  } else if (sessionSubcommand === "link") {
962
978
  const op = sessionArgs[1];
963
- const lm = await import('./agentCommands-CZjZsqJC.mjs');
979
+ const lm = await import('./agentCommands-i-qaq_2s.mjs');
964
980
  if (op === "add") {
965
981
  const url = sessionArgs[2];
966
982
  if (!url || url.startsWith("--")) {
@@ -995,7 +1011,7 @@ async function handleSessionCommand() {
995
1011
  process.exit(1);
996
1012
  }
997
1013
  const level = parseFlagStr("--level") || "info";
998
- const { sessionNotify } = await import('./agentCommands-CZjZsqJC.mjs');
1014
+ const { sessionNotify } = await import('./agentCommands-i-qaq_2s.mjs');
999
1015
  await sessionNotify(message, level);
1000
1016
  } else if (sessionSubcommand === "broadcast") {
1001
1017
  const action = sessionArgs[1];
@@ -1003,7 +1019,7 @@ async function handleSessionCommand() {
1003
1019
  console.error("Usage: svamp session broadcast <action> [args...]\nActions: open-canvas <url> [label], close-canvas, toast <message>");
1004
1020
  process.exit(1);
1005
1021
  }
1006
- const { sessionBroadcast } = await import('./agentCommands-CZjZsqJC.mjs');
1022
+ const { sessionBroadcast } = await import('./agentCommands-i-qaq_2s.mjs');
1007
1023
  await sessionBroadcast(action, sessionArgs.slice(2).filter((a) => !a.startsWith("--")));
1008
1024
  } else if (sessionSubcommand === "inbox") {
1009
1025
  const inboxSubcmd = sessionArgs[1];
@@ -1014,7 +1030,7 @@ async function handleSessionCommand() {
1014
1030
  process.exit(1);
1015
1031
  }
1016
1032
  if (agentSessionId) {
1017
- const { inboxSend } = await import('./agentCommands-CZjZsqJC.mjs');
1033
+ const { inboxSend } = await import('./agentCommands-i-qaq_2s.mjs');
1018
1034
  await inboxSend(sessionArgs[2], {
1019
1035
  body: sessionArgs[3],
1020
1036
  subject: parseFlagStr("--subject"),
@@ -1029,7 +1045,7 @@ async function handleSessionCommand() {
1029
1045
  }
1030
1046
  } else if (inboxSubcmd === "list" || inboxSubcmd === "ls") {
1031
1047
  if (agentSessionId && !sessionArgs[2]) {
1032
- const { inboxList } = await import('./agentCommands-CZjZsqJC.mjs');
1048
+ const { inboxList } = await import('./agentCommands-i-qaq_2s.mjs');
1033
1049
  await inboxList({
1034
1050
  unread: hasFlag("--unread"),
1035
1051
  limit: parseFlagInt("--limit"),
@@ -1051,7 +1067,7 @@ async function handleSessionCommand() {
1051
1067
  process.exit(1);
1052
1068
  }
1053
1069
  if (agentSessionId && !sessionArgs[3]) {
1054
- const { inboxList } = await import('./agentCommands-CZjZsqJC.mjs');
1070
+ const { inboxList } = await import('./agentCommands-i-qaq_2s.mjs');
1055
1071
  await sessionInboxRead(agentSessionId, sessionArgs[2], targetMachineId);
1056
1072
  } else if (sessionArgs[3]) {
1057
1073
  await sessionInboxRead(sessionArgs[2], sessionArgs[3], targetMachineId);
@@ -1061,7 +1077,7 @@ async function handleSessionCommand() {
1061
1077
  }
1062
1078
  } else if (inboxSubcmd === "reply") {
1063
1079
  if (agentSessionId && sessionArgs[2] && sessionArgs[3] && !sessionArgs[4]) {
1064
- const { inboxReply } = await import('./agentCommands-CZjZsqJC.mjs');
1080
+ const { inboxReply } = await import('./agentCommands-i-qaq_2s.mjs');
1065
1081
  await inboxReply(sessionArgs[2], sessionArgs[3]);
1066
1082
  } else if (sessionArgs[2] && sessionArgs[3] && sessionArgs[4]) {
1067
1083
  await sessionInboxReply(sessionArgs[2], sessionArgs[3], sessionArgs[4], targetMachineId);
@@ -1099,7 +1115,7 @@ async function handleMachineCommand() {
1099
1115
  return;
1100
1116
  }
1101
1117
  if (machineSubcommand === "share") {
1102
- const { machineShare } = await import('./commands-ux1fl1qK.mjs');
1118
+ const { machineShare } = await import('./commands-CdjKMUGJ.mjs');
1103
1119
  let machineId;
1104
1120
  const shareArgs = [];
1105
1121
  for (let i = 1; i < machineArgs.length; i++) {
@@ -1150,14 +1166,14 @@ async function handleMachineCommand() {
1150
1166
  process.exit(1);
1151
1167
  }
1152
1168
  if (all) {
1153
- const { fleetExec } = await import('./fleet-cu0bUH3v.mjs');
1169
+ const { fleetExec } = await import('./fleet-DCwX4RTF.mjs');
1154
1170
  await fleetExec(command, { cwd });
1155
1171
  } else {
1156
- const { machineExec } = await import('./commands-ux1fl1qK.mjs');
1172
+ const { machineExec } = await import('./commands-CdjKMUGJ.mjs');
1157
1173
  await machineExec(machineId, command, cwd);
1158
1174
  }
1159
1175
  } else if (machineSubcommand === "info") {
1160
- const { machineInfo } = await import('./commands-ux1fl1qK.mjs');
1176
+ const { machineInfo } = await import('./commands-CdjKMUGJ.mjs');
1161
1177
  let machineId;
1162
1178
  for (let i = 1; i < machineArgs.length; i++) {
1163
1179
  if ((machineArgs[i] === "--machine" || machineArgs[i] === "-m") && i + 1 < machineArgs.length) {
@@ -1177,10 +1193,10 @@ async function handleMachineCommand() {
1177
1193
  level = machineArgs[++i];
1178
1194
  }
1179
1195
  }
1180
- const { machineNotify } = await import('./agentCommands-CZjZsqJC.mjs');
1196
+ const { machineNotify } = await import('./agentCommands-i-qaq_2s.mjs');
1181
1197
  await machineNotify(message, level);
1182
1198
  } else if (machineSubcommand === "ls") {
1183
- const { machineLs } = await import('./commands-ux1fl1qK.mjs');
1199
+ const { machineLs } = await import('./commands-CdjKMUGJ.mjs');
1184
1200
  let machineId;
1185
1201
  let showHidden = false;
1186
1202
  let path;
@@ -1239,20 +1255,20 @@ Examples:
1239
1255
  };
1240
1256
  const hasFlag = (name) => fleetArgs.includes(`--${name}`);
1241
1257
  if (sub === "status") {
1242
- const { fleetStatus } = await import('./fleet-cu0bUH3v.mjs');
1258
+ const { fleetStatus } = await import('./fleet-DCwX4RTF.mjs');
1243
1259
  await fleetStatus();
1244
1260
  } else if (sub === "upgrade-claude") {
1245
- const { fleetUpgradeClaude } = await import('./fleet-cu0bUH3v.mjs');
1261
+ const { fleetUpgradeClaude } = await import('./fleet-DCwX4RTF.mjs');
1246
1262
  await fleetUpgradeClaude({ version: flag("version", "-v") });
1247
1263
  } else if (sub === "upgrade-svamp") {
1248
- const { fleetUpgradeSvamp } = await import('./fleet-cu0bUH3v.mjs');
1264
+ const { fleetUpgradeSvamp } = await import('./fleet-DCwX4RTF.mjs');
1249
1265
  await fleetUpgradeSvamp({ version: flag("version", "-v"), excludeSelf: hasFlag("exclude-self"), force: hasFlag("force") });
1250
1266
  } else if (sub === "daemon-restart") {
1251
- const { fleetDaemonRestart } = await import('./fleet-cu0bUH3v.mjs');
1267
+ const { fleetDaemonRestart } = await import('./fleet-DCwX4RTF.mjs');
1252
1268
  await fleetDaemonRestart({ graceful: !hasFlag("cleanup") });
1253
1269
  } else if (sub === "push-skill") {
1254
1270
  const name = fleetArgs[1];
1255
- const { fleetPushSkill } = await import('./fleet-cu0bUH3v.mjs');
1271
+ const { fleetPushSkill } = await import('./fleet-DCwX4RTF.mjs');
1256
1272
  await fleetPushSkill(name);
1257
1273
  } else {
1258
1274
  console.error(`Unknown fleet subcommand: ${sub}`);
@@ -1268,7 +1284,7 @@ async function handleSkillsCommand() {
1268
1284
  await printSkillsHelp();
1269
1285
  return;
1270
1286
  }
1271
- const { skillsFind, skillsInstall, skillsList, skillsRemove, skillsPublish } = await import('./commands-DW0HvMa8.mjs');
1287
+ const { skillsFind, skillsInstall, skillsList, skillsRemove, skillsPublish } = await import('./commands-D8OeSTxb.mjs');
1272
1288
  if (skillsSubcommand === "find" || skillsSubcommand === "search") {
1273
1289
  const query = skillsArgs.slice(1).filter((a) => !a.startsWith("--")).join(" ");
1274
1290
  if (!query) {
@@ -1315,7 +1331,7 @@ async function loginToHypha() {
1315
1331
  process.exit(1);
1316
1332
  }
1317
1333
  const anchor = anchorArg.replace(/\/+$/, "");
1318
- const { loadInstanceConfig } = await import('./run-BtIiSNjM.mjs').then(function (n) { return n.ak; });
1334
+ const { loadInstanceConfig } = await import('./run-DSlJ62Xb.mjs').then(function (n) { return n.al; });
1319
1335
  let cfg = null;
1320
1336
  try {
1321
1337
  cfg = await loadInstanceConfig({ anchor, force: true });
@@ -1426,7 +1442,7 @@ async function logoutFromHypha() {
1426
1442
  } catch {
1427
1443
  }
1428
1444
  try {
1429
- const { clearInstanceConfigCache } = await import('./run-BtIiSNjM.mjs').then(function (n) { return n.ak; });
1445
+ const { clearInstanceConfigCache } = await import('./run-DSlJ62Xb.mjs').then(function (n) { return n.al; });
1430
1446
  clearInstanceConfigCache();
1431
1447
  } catch {
1432
1448
  }
@@ -1765,7 +1781,7 @@ async function applyClaudeAuthFlags(argv) {
1765
1781
  "--use-hypha-proxy, --use-claude-login, and --anthropic-base-url/--anthropic-api-key are mutually exclusive"
1766
1782
  );
1767
1783
  }
1768
- const mod = await import('./run-BtIiSNjM.mjs').then(function (n) { return n.al; });
1784
+ const mod = await import('./run-DSlJ62Xb.mjs').then(function (n) { return n.am; });
1769
1785
  if (hasHypha) {
1770
1786
  let url;
1771
1787
  const hyphaIdx = argv.indexOf("--use-hypha-proxy");
@@ -1819,7 +1835,7 @@ async function applyDaemonShareFlag(argv) {
1819
1835
  }
1820
1836
  }
1821
1837
  if (collected.length === 0) return;
1822
- const { updateEnvFile } = await import('./run-BtIiSNjM.mjs').then(function (n) { return n.al; });
1838
+ const { updateEnvFile } = await import('./run-DSlJ62Xb.mjs').then(function (n) { return n.am; });
1823
1839
  const seen = /* @__PURE__ */ new Set();
1824
1840
  const deduped = collected.filter((e) => {
1825
1841
  const k = e.toLowerCase();
@@ -1852,7 +1868,7 @@ async function handleWiseAgentCommand(rest) {
1852
1868
  }
1853
1869
  });
1854
1870
  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(" ");
1855
- const { wiseAskCli } = await import('./commands-ux1fl1qK.mjs');
1871
+ const { wiseAskCli } = await import('./commands-CdjKMUGJ.mjs');
1856
1872
  await wiseAskCli(machineId, message, sessionId, { json });
1857
1873
  return;
1858
1874
  }
@@ -1864,7 +1880,7 @@ async function handleWiseAgentCommand(rest) {
1864
1880
  }
1865
1881
  return void 0;
1866
1882
  };
1867
- const { runWiseVoiceCli } = await import('./headlessCli-BvoiOGxZ.mjs');
1883
+ const { runWiseVoiceCli } = await import('./headlessCli-CyCQlRjV.mjs');
1868
1884
  await runWiseVoiceCli({ voice: valueOf(["--voice"]), wakeKeywordPath: valueOf(["--wake"]), model: valueOf(["--model"]) });
1869
1885
  return;
1870
1886
  }
@@ -1882,7 +1898,7 @@ async function handleWiseAgentCommand(rest) {
1882
1898
  const mode = valueOf(["--mode"]);
1883
1899
  const mission = valueOf(["--mission"]);
1884
1900
  const url = rest.slice(1).find((a) => /^https?:\/\//.test(a)) || "";
1885
- const { wiseJoinMeetingCli } = await import('./commands-ux1fl1qK.mjs');
1901
+ const { wiseJoinMeetingCli } = await import('./commands-CdjKMUGJ.mjs');
1886
1902
  await wiseJoinMeetingCli(machineId, url, sessionId, { json, mode, mission });
1887
1903
  return;
1888
1904
  }
@@ -1894,7 +1910,7 @@ async function handleWiseAgentCommand(rest) {
1894
1910
  }
1895
1911
  return void 0;
1896
1912
  };
1897
- const { wiseLeaveMeetingCli } = await import('./commands-ux1fl1qK.mjs');
1913
+ const { wiseLeaveMeetingCli } = await import('./commands-CdjKMUGJ.mjs');
1898
1914
  await wiseLeaveMeetingCli(valueOf(["--machine", "-m"]), valueOf(["--session", "-s"]), { json: rest.includes("--json") });
1899
1915
  return;
1900
1916
  }
@@ -1918,7 +1934,7 @@ async function handleWiseAgentCommand(rest) {
1918
1934
  }
1919
1935
  });
1920
1936
  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(" ");
1921
- const { wiseAnnounceCli } = await import('./commands-ux1fl1qK.mjs');
1937
+ const { wiseAnnounceCli } = await import('./commands-CdjKMUGJ.mjs');
1922
1938
  await wiseAnnounceCli(machineId, text, sessionId, { json });
1923
1939
  return;
1924
1940
  }
@@ -1930,7 +1946,7 @@ async function handleWiseAgentCommand(rest) {
1930
1946
  }
1931
1947
  return void 0;
1932
1948
  };
1933
- const { wiseMeetingsCli } = await import('./commands-ux1fl1qK.mjs');
1949
+ const { wiseMeetingsCli } = await import('./commands-CdjKMUGJ.mjs');
1934
1950
  await wiseMeetingsCli(valueOf(["--machine", "-m"]), { json: rest.includes("--json") });
1935
1951
  return;
1936
1952
  }
@@ -1980,7 +1996,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
1980
1996
  return;
1981
1997
  }
1982
1998
  const authArgs = rest.slice(1);
1983
- const mod = await import('./auth-CFWhaPVg.mjs');
1999
+ const mod = await import('./auth-DDr5dyj0.mjs');
1984
2000
  let action;
1985
2001
  try {
1986
2002
  action = mod.parseWiseAgentAuthArgs(authArgs);
@@ -1990,7 +2006,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
1990
2006
  return;
1991
2007
  }
1992
2008
  if (action) {
1993
- const { updateEnvFile } = await import('./run-BtIiSNjM.mjs').then(function (n) { return n.al; });
2009
+ const { updateEnvFile } = await import('./run-DSlJ62Xb.mjs').then(function (n) { return n.am; });
1994
2010
  const updates = mod.buildWiseAgentEnvUpdates(action);
1995
2011
  updateEnvFile(updates);
1996
2012
  for (const [k, v] of Object.entries(updates)) {
@@ -2004,7 +2020,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
2004
2020
  }
2005
2021
  async function handleDaemonAuthCommand(argv) {
2006
2022
  const sub = (argv[0] || "status").toLowerCase();
2007
- const mod = await import('./run-BtIiSNjM.mjs').then(function (n) { return n.al; });
2023
+ const mod = await import('./run-DSlJ62Xb.mjs').then(function (n) { return n.am; });
2008
2024
  if (sub === "--help" || sub === "-h" || sub === "help") {
2009
2025
  console.log(`
2010
2026
  svamp daemon auth \u2014 Configure how Claude subprocesses authenticate
@@ -2078,8 +2094,8 @@ one step: --use-hypha-proxy / --use-claude-login / --anthropic-base-url URL --an
2078
2094
  }
2079
2095
  async function handleDaemonCodexAuthCommand(argv) {
2080
2096
  const sub = (argv[0] || "status").toLowerCase();
2081
- const { updateEnvFile } = await import('./run-BtIiSNjM.mjs').then(function (n) { return n.al; });
2082
- const { resolveCodexProvider } = await import('./run-BtIiSNjM.mjs').then(function (n) { return n.am; });
2097
+ const { updateEnvFile } = await import('./run-DSlJ62Xb.mjs').then(function (n) { return n.am; });
2098
+ const { resolveCodexProvider } = await import('./run-DSlJ62Xb.mjs').then(function (n) { return n.an; });
2083
2099
  const redact = (k) => k && k.length > 10 ? `${k.slice(0, 6)}\u2026${k.slice(-4)}` : k ? "***" : "(unset)";
2084
2100
  if (sub === "--help" || sub === "-h" || sub === "help") {
2085
2101
  console.log(`
@@ -2411,7 +2427,7 @@ Examples:
2411
2427
  async function printSkillsHelp() {
2412
2428
  let browseUrl = "<HYPHA_SERVER_URL>/<workspace>/artifacts/marketplace (set HYPHA_SERVER_URL)";
2413
2429
  try {
2414
- const { getArtifactBaseUrl, getSkillsCollectionName } = await import('./run-BtIiSNjM.mjs').then(function (n) { return n.at; });
2430
+ const { getArtifactBaseUrl, getSkillsCollectionName } = await import('./run-DSlJ62Xb.mjs').then(function (n) { return n.au; });
2415
2431
  browseUrl = `${getArtifactBaseUrl()}/${getSkillsCollectionName()}`;
2416
2432
  } catch {
2417
2433
  }
package/dist/cli.mjs CHANGED
@@ -1,6 +1,6 @@
1
- import './run-BtIiSNjM.mjs';
1
+ import './run-DSlJ62Xb.mjs';
2
2
  import './serviceManager-hlOVxkhW.mjs';
3
- import './cli-E1osBiyj.mjs';
3
+ import './cli-Bp0pUO_8.mjs';
4
4
  import 'os';
5
5
  import 'fs/promises';
6
6
  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-BtIiSNjM.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-DSlJ62Xb.mjs';
3
3
  import 'os';
4
4
  import 'fs/promises';
5
5
  import 'fs';
@@ -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-E1osBiyj.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-BtIiSNjM.mjs';
4
+ import { f as flushAndExit } from './cli-Bp0pUO_8.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-DSlJ62Xb.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-B1-dyz8z.mjs');
63
+ const { runFrpcTunnel } = await import('./frpc-Dst1Xkue.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-ux1fl1qK.mjs');
73
+ const { connectAndGetMachine } = await import('./commands-CdjKMUGJ.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-CZjZsqJC.mjs');
95
+ const { autoAddSessionLink } = await import('./agentCommands-i-qaq_2s.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-BtIiSNjM.mjs').then(function (n) { return n.aj; });
132
+ const { serveStaticMount } = await import('./run-DSlJ62Xb.mjs').then(function (n) { return n.ak; });
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-B1-dyz8z.mjs');
143
+ const { runFrpcTunnel } = await import('./frpc-Dst1Xkue.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-ux1fl1qK.mjs');
153
+ const { connectAndGetMachine } = await import('./commands-CdjKMUGJ.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-ux1fl1qK.mjs');
193
+ const { connectAndGetMachine } = await import('./commands-CdjKMUGJ.mjs');
194
194
  const { server, machine } = await connectAndGetMachine();
195
195
  try {
196
196
  await machine.tunnelStop({ name });
@@ -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 { a1 as formatHandle, a2 as normalizeAllowedUser, a3 as loadSecurityContextConfig, a4 as resolveSecurityContext, a5 as buildSecurityContextFromFlags, a6 as mergeSecurityContexts, c as connectToHypha, a7 as buildSessionShareUrl, a8 as computeOutboundHop, i as shortId, a9 as registerAwaitingReply, aa as buildMachineShareUrl, ab as parseHandle, ac as handleMatchesMetadata } from './run-BtIiSNjM.mjs';
5
+ import { a2 as formatHandle, a3 as normalizeAllowedUser, a4 as loadSecurityContextConfig, a5 as resolveSecurityContext, a6 as buildSecurityContextFromFlags, a7 as mergeSecurityContexts, c as connectToHypha, a8 as buildSessionShareUrl, a9 as computeOutboundHop, i as shortId, aa as registerAwaitingReply, ab as buildMachineShareUrl, ac as parseHandle, ad as handleMatchesMetadata } from './run-DSlJ62Xb.mjs';
6
6
  import 'os';
7
7
  import 'fs/promises';
8
8
  import 'fs';
@@ -1,11 +1,11 @@
1
1
  import { writeFileSync, readFileSync } from 'fs';
2
2
  import { resolve } from 'path';
3
- import { connectAndGetMachine } from './commands-ux1fl1qK.mjs';
3
+ import { connectAndGetMachine } from './commands-CdjKMUGJ.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-BtIiSNjM.mjs';
8
+ import './run-DSlJ62Xb.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 { O as parseFrontmatter, P as getSkillsServer, Q as getSkillsWorkspaceName, T as getSkillsCollectionName, U as fetchWithTimeout, V as searchSkills, W as SKILLS_DIR, X as getSkillInfo, Y as downloadSkillFile, Z as listSkillFiles } from './run-BtIiSNjM.mjs';
4
+ import { P as parseFrontmatter, Q as getSkillsServer, T as getSkillsWorkspaceName, U as getSkillsCollectionName, V as fetchWithTimeout, W as searchSkills, X as SKILLS_DIR, Y as getSkillInfo, Z as downloadSkillFile, _ as listSkillFiles } from './run-DSlJ62Xb.mjs';
5
5
  import 'fs/promises';
6
6
  import 'url';
7
7
  import 'child_process';
@@ -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-ux1fl1qK.mjs';
3
+ import { connectAndGetMachine, resolveSessionId, createWorktree, connectAndResolveSession } from './commands-CdjKMUGJ.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-BtIiSNjM.mjs';
5
+ import { u as updateIssue, m as addComment, n as addIssue, i as shortId } from './run-DSlJ62Xb.mjs';
6
6
  import 'node:os';
7
7
  import 'os';
8
8
  import 'fs/promises';
@@ -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-BtIiSNjM.mjs';
4
+ import { c as connectToHypha } from './run-DSlJ62Xb.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-BtIiSNjM.mjs';
7
+ import { e as getFrpsSubdomainHost, f as getFrpsServerPort, h as getFrpsServerAddr } from './run-DSlJ62Xb.mjs';
8
8
  import 'fs/promises';
9
9
  import 'url';
10
10
  import 'node:crypto';
@@ -1,5 +1,5 @@
1
- import { _ as resolveModel, ad as describeMisconfiguration, ae as buildMachineDeps } from './run-BtIiSNjM.mjs';
2
- import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-BjUyyMW7.mjs';
1
+ import { $ as resolveModel, ae as describeMisconfiguration, af as buildMachineDeps } from './run-DSlJ62Xb.mjs';
2
+ import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-DAZlMFIi.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-BtIiSNjM.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-DSlJ62Xb.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-BtIiSNjM.mjs';
1
+ import { c as connectToHypha, S as SharingNotificationSync, J as parseJwtEmail } from './run-DSlJ62Xb.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.279";
2
+ var version = "0.2.281";
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, 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-BtIiSNjM.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-DSlJ62Xb.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -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-BtIiSNjM.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-DSlJ62Xb.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -1,4 +1,4 @@
1
- import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import { af as applyClaudeProxyEnv, ag as composeSessionId, ah as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, ai as generateHookSettings } from './run-BtIiSNjM.mjs';
1
+ import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import { ag as applyClaudeProxyEnv, ah as composeSessionId, ai as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, aj as generateHookSettings } from './run-DSlJ62Xb.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';
@@ -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-B1-dyz8z.mjs');
2976
+ const { FrpcTunnel } = await import('./frpc-Dst1Xkue.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-B1-dyz8z.mjs');
5819
+ const { FrpcTunnel } = await import('./frpc-Dst1Xkue.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-BjUyyMW7.mjs');
6295
+ const { toolsForRole } = await import('./sideband-DAZlMFIi.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-ux1fl1qK.mjs');
6394
+ const { queryCore } = await import('./commands-CdjKMUGJ.mjs');
6395
6395
  const timeout = c.reply?.timeout_sec || 120;
6396
6396
  let result;
6397
6397
  try {
@@ -9449,6 +9449,11 @@ class SessionArtifactSync {
9449
9449
  const SHARE_COLLECTION_ALIAS = "svamp-shared-sessions";
9450
9450
  const EVENT_COLLECTION_ALIAS = "svamp-user-events";
9451
9451
  const RECIPIENT_SCOPING_CONFIG = { recipient_field: "recipientEmail", private_children: true };
9452
+ function computeCollectionConfigUpdate(existingConfig, extra) {
9453
+ const cfg = existingConfig || {};
9454
+ const changed = Object.entries(extra).some(([k, v]) => JSON.stringify(cfg[k]) !== JSON.stringify(v));
9455
+ return { changed, merged: { ...cfg, ...extra } };
9456
+ }
9452
9457
  function emailHash(email) {
9453
9458
  return createHash("sha256").update(email.toLowerCase()).digest("hex").slice(0, 12);
9454
9459
  }
@@ -9496,9 +9501,7 @@ class SharingNotificationSync {
9496
9501
  artifact_id: alias,
9497
9502
  _rkwargs: true
9498
9503
  });
9499
- if (extraConfig) {
9500
- await this.reconcileCollectionConfig(alias, existing, extraConfig);
9501
- }
9504
+ if (extraConfig) await this.reconcileCollectionConfig(alias, existing, extraConfig);
9502
9505
  return existing.id;
9503
9506
  } catch {
9504
9507
  const collection = await this.artifactManager.create({
@@ -9518,24 +9521,20 @@ class SharingNotificationSync {
9518
9521
  }
9519
9522
  }
9520
9523
  /**
9521
- * Add `extraConfig` keys to an EXISTING collection's config if any are missing, preserving the
9522
- * current config (permissions etc.). One-time + best-effort see ensureCollection for rationale.
9524
+ * Best-effort: add `extraConfig` keys to an EXISTING collection's config if missing (merged with
9525
+ * existing config/permissions). No-throw a perms error on a non-owner daemon is expected and
9526
+ * harmless. See ensureCollection for the ownership rationale.
9523
9527
  */
9524
9528
  async reconcileCollectionConfig(alias, existing, extraConfig) {
9525
9529
  try {
9526
- const cfg = existing?.config || {};
9527
- const missing = Object.entries(extraConfig).some(([k, v]) => cfg[k] !== v);
9528
- if (!missing) return;
9529
- await this.artifactManager.edit({
9530
- artifact_id: existing.id,
9531
- config: { ...cfg, ...extraConfig },
9532
- _rkwargs: true
9533
- });
9530
+ const { changed, merged } = computeCollectionConfigUpdate(existing?.config, extraConfig);
9531
+ if (!changed) return;
9532
+ await this.artifactManager.edit({ artifact_id: existing.id, config: merged, _rkwargs: true });
9534
9533
  await this.artifactManager.commit({ artifact_id: existing.id, _rkwargs: true }).catch(() => {
9535
9534
  });
9536
9535
  this.log(`[SHARING NOTIFY] Reconciled config on ${alias} \u2014 added recipient-scoping flag`);
9537
9536
  } catch (err) {
9538
- this.log(`[SHARING NOTIFY] Config reconcile on ${alias} skipped: ${err?.message || err}`);
9537
+ this.log(`[SHARING NOTIFY] Config reconcile on ${alias} skipped (need owner/admin rights): ${err?.message || err}`);
9539
9538
  }
9540
9539
  }
9541
9540
  // ── Share bookmark artifacts (svamp-shared-sessions) ──────────────
@@ -16209,7 +16208,7 @@ async function startDaemon(options) {
16209
16208
  try {
16210
16209
  const dir = loadSessionIndex()[sessionId]?.directory;
16211
16210
  if (!dir) return;
16212
- const { reconcileServiceLinks } = await import('./agentCommands-CZjZsqJC.mjs');
16211
+ const { reconcileServiceLinks } = await import('./agentCommands-i-qaq_2s.mjs');
16213
16212
  const configPath = getSvampConfigPath(dir, sessionId);
16214
16213
  const config = readSvampConfig(configPath);
16215
16214
  const entries = Array.from(urls.entries());
@@ -16227,7 +16226,7 @@ async function startDaemon(options) {
16227
16226
  }
16228
16227
  }
16229
16228
  async function createExposedTunnel(spec) {
16230
- const { FrpcTunnel } = await import('./frpc-B1-dyz8z.mjs');
16229
+ const { FrpcTunnel } = await import('./frpc-Dst1Xkue.mjs');
16231
16230
  const tunnel = new FrpcTunnel({
16232
16231
  name: spec.name,
16233
16232
  ports: spec.ports,
@@ -18443,11 +18442,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
18443
18442
  });
18444
18443
  },
18445
18444
  onIssue: async (params) => {
18446
- const { issueRpc } = await import('./rpc-2I8SlTrz.mjs');
18445
+ const { issueRpc } = await import('./rpc-DXZSyYAh.mjs');
18447
18446
  return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
18448
18447
  },
18449
18448
  onWorkflow: async (params) => {
18450
- const { workflowRpc } = await import('./rpc-DKY7-oh-.mjs');
18449
+ const { workflowRpc } = await import('./rpc-Dt3gekac.mjs');
18451
18450
  return workflowRpc(params?.cwd || directory, params || {});
18452
18451
  },
18453
18452
  onRipgrep: async (args, cwd) => {
@@ -19059,11 +19058,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
19059
19058
  });
19060
19059
  },
19061
19060
  onIssue: async (params) => {
19062
- const { issueRpc } = await import('./rpc-2I8SlTrz.mjs');
19061
+ const { issueRpc } = await import('./rpc-DXZSyYAh.mjs');
19063
19062
  return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
19064
19063
  },
19065
19064
  onWorkflow: async (params) => {
19066
- const { workflowRpc } = await import('./rpc-DKY7-oh-.mjs');
19065
+ const { workflowRpc } = await import('./rpc-Dt3gekac.mjs');
19067
19066
  return workflowRpc(params?.cwd || directory, params || {});
19068
19067
  },
19069
19068
  onRipgrep: async (args, cwd) => {
@@ -20178,7 +20177,7 @@ ${oracle.output.trim().slice(0, 500)}`, "\u{1F501} Continuing loop");
20178
20177
  const PING_TIMEOUT_MS = 15e3;
20179
20178
  const POST_RECONNECT_GRACE_MS = 2e4;
20180
20179
  const RECONNECT_JITTER_MS = 2500;
20181
- const { WorkflowScheduler } = await import('./scheduler-BOnAtzax.mjs');
20180
+ const { WorkflowScheduler } = await import('./scheduler-CTndQ5_D.mjs');
20182
20181
  const workflowScheduler = new WorkflowScheduler({
20183
20182
  projectRoots: () => {
20184
20183
  const dirs = /* @__PURE__ */ new Set();
@@ -20801,4 +20800,4 @@ var run = /*#__PURE__*/Object.freeze({
20801
20800
  writeStopMarker: writeStopMarker
20802
20801
  });
20803
20802
 
20804
- export { clearStopMarker as $, removeWorkflow as A, saveWorkflow as B, rawWorkflow as C, listWorkflows as D, isWorkflowEnabled as E, workflowCrons as F, cronMatches as G, summarize as H, workflowSteps as I, parseJwtEmail as J, loadMachineContext as K, buildMachineInstructions as L, machineToolsForRole as M, buildMachineTools as N, parseFrontmatter as O, getSkillsServer as P, getSkillsWorkspaceName as Q, READ_ONLY_TOOLS as R, SharingNotificationSync as S, getSkillsCollectionName as T, fetchWithTimeout as U, searchSkills as V, SKILLS_DIR as W, getSkillInfo as X, downloadSkillFile as Y, listSkillFiles as Z, resolveModel as _, createSessionStore as a, stopMarkerExists as a0, formatHandle as a1, normalizeAllowedUser as a2, loadSecurityContextConfig as a3, resolveSecurityContext as a4, buildSecurityContextFromFlags as a5, mergeSecurityContexts as a6, buildSessionShareUrl as a7, computeOutboundHop as a8, registerAwaitingReply as a9, buildMachineShareUrl as aa, parseHandle as ab, handleMatchesMetadata as ac, describeMisconfiguration as ad, buildMachineDeps as ae, applyClaudeProxyEnv as af, composeSessionId as ag, generateFriendlyName as ah, generateHookSettings as ai, staticFileServer as aj, instanceConfig as ak, claudeAuth as al, codexProvider as am, projectInfo as an, DefaultTransport$1 as ao, acpBackend as ap, acpAgentConfig as aq, codexAppServerBackend as ar, GeminiTransport$1 as as, api as at, run as au, stopDaemon as b, connectToHypha as c, daemonStatus as d, getFrpsSubdomainHost as e, getFrpsServerPort as f, getHyphaServerUrl$1 as g, getFrpsServerAddr as h, shortId as i, resolveProjectRoot as j, getIssue as k, resumeIssue as l, addComment as m, addIssue as n, listIssues as o, pauseIssue as p, searchIssues as q, registerMachineService as r, startDaemon as s, isVisibleTo as t, updateIssue as u, getRun as v, listRuns as w, getWorkflow as x, runWorkflow as y, setWorkflowEnabled as z };
20803
+ export { resolveModel as $, removeWorkflow as A, saveWorkflow as B, rawWorkflow as C, listWorkflows as D, isWorkflowEnabled as E, workflowCrons as F, cronMatches as G, summarize as H, workflowSteps as I, parseJwtEmail as J, computeCollectionConfigUpdate as K, loadMachineContext as L, buildMachineInstructions as M, machineToolsForRole as N, buildMachineTools as O, parseFrontmatter as P, getSkillsServer as Q, READ_ONLY_TOOLS as R, SharingNotificationSync as S, getSkillsWorkspaceName as T, getSkillsCollectionName as U, fetchWithTimeout as V, searchSkills as W, SKILLS_DIR as X, getSkillInfo as Y, downloadSkillFile as Z, listSkillFiles as _, createSessionStore as a, clearStopMarker as a0, stopMarkerExists as a1, formatHandle as a2, normalizeAllowedUser as a3, loadSecurityContextConfig as a4, resolveSecurityContext as a5, buildSecurityContextFromFlags as a6, mergeSecurityContexts as a7, buildSessionShareUrl as a8, computeOutboundHop as a9, registerAwaitingReply as aa, buildMachineShareUrl as ab, parseHandle as ac, handleMatchesMetadata as ad, describeMisconfiguration as ae, buildMachineDeps as af, applyClaudeProxyEnv as ag, composeSessionId as ah, generateFriendlyName as ai, generateHookSettings as aj, staticFileServer as ak, instanceConfig as al, claudeAuth as am, codexProvider as an, projectInfo as ao, DefaultTransport$1 as ap, acpBackend as aq, acpAgentConfig as ar, codexAppServerBackend as as, GeminiTransport$1 as at, api as au, run as av, stopDaemon as b, connectToHypha as c, daemonStatus as d, getFrpsSubdomainHost as e, getFrpsServerPort as f, getHyphaServerUrl$1 as g, getFrpsServerAddr as h, shortId as i, resolveProjectRoot as j, getIssue as k, resumeIssue as l, addComment as m, addIssue as n, listIssues as o, pauseIssue as p, searchIssues as q, registerMachineService as r, startDaemon as s, isVisibleTo as t, updateIssue as u, getRun as v, listRuns as w, getWorkflow as x, runWorkflow as y, setWorkflowEnabled as z };
@@ -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-BtIiSNjM.mjs';
1
+ import { j as resolveProjectRoot, D as listWorkflows, E as isWorkflowEnabled, F as workflowCrons, y as runWorkflow, G as cronMatches } from './run-DSlJ62Xb.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-ux1fl1qK.mjs');
57
+ const { connectAndGetMachine } = await import('./commands-CdjKMUGJ.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-ux1fl1qK.mjs');
96
+ const { connectAndGetMachine } = await import('./commands-CdjKMUGJ.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-ux1fl1qK.mjs');
185
+ const { connectAndGetMachine } = await import('./commands-CdjKMUGJ.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-ux1fl1qK.mjs');
205
+ const { connectAndGetMachine } = await import('./commands-CdjKMUGJ.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-ux1fl1qK.mjs');
238
+ const { connectAndGetMachine } = await import('./commands-CdjKMUGJ.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, K as loadMachineContext, L as buildMachineInstructions, M as machineToolsForRole, N as buildMachineTools } from './run-BtIiSNjM.mjs';
1
+ import { R as READ_ONLY_TOOLS, L as loadMachineContext, M as buildMachineInstructions, N as machineToolsForRole, O as buildMachineTools } from './run-DSlJ62Xb.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.279",
3
+ "version": "0.2.281",
4
4
  "description": "Svamp CLI — AI workspace daemon on Hypha Cloud",
5
5
  "author": "Amun AI AB",
6
6
  "license": "SEE LICENSE IN LICENSE",