svamp-cli 0.2.313 → 0.2.314

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 (27) hide show
  1. package/dist/{adminCommands-DINkkchF.mjs → adminCommands-DCttALYO.mjs} +1 -1
  2. package/dist/{agentCommands-CqHUKyRM.mjs → agentCommands-BUsSOz5M.mjs} +5 -5
  3. package/dist/{auth-fmYi12gU.mjs → auth-D5yTcsy2.mjs} +1 -1
  4. package/dist/{cli-C0K7bTFQ.mjs → cli-ahWO_ULm.mjs} +207 -73
  5. package/dist/cli.mjs +2 -2
  6. package/dist/{commands-BlSsMfW6.mjs → commands-BSHZGcCC.mjs} +8 -8
  7. package/dist/{commands-DxwqcKtb.mjs → commands-CJmKY6Qo.mjs} +2 -2
  8. package/dist/{commands-c57jjMV-.mjs → commands-Ce7MP6Ut.mjs} +2 -2
  9. package/dist/{commands-B2KHp8-n.mjs → commands-Cl-TIip1.mjs} +2 -2
  10. package/dist/{commands-DMG7VDBo.mjs → commands-CuinsdU0.mjs} +1 -1
  11. package/dist/{commands-CE9x3OVJ.mjs → commands-ZML4FIzg.mjs} +1 -1
  12. package/dist/{commands-lt3_KA5S.mjs → commands-bS4ErsEr.mjs} +2 -2
  13. package/dist/{commands-BspIWEyi.mjs → commands-r4QVEq12.mjs} +1 -1
  14. package/dist/{fleet-DX-cpu52.mjs → fleet-CSwFR8B0.mjs} +41 -2
  15. package/dist/{frpc-B5LHRKTD.mjs → frpc-CpuE7d3Y.mjs} +1 -1
  16. package/dist/{headlessCli-BE4CanO7.mjs → headlessCli-Dg-awx4h.mjs} +2 -2
  17. package/dist/index.mjs +1 -1
  18. package/dist/{notifyCommands-Deh2F41t.mjs → notifyCommands-Dlm4RafU.mjs} +1 -1
  19. package/dist/{package-C9HRV5XP.mjs → package-DO2e6EnU.mjs} +2 -2
  20. package/dist/{rpc-BxOm5nyE.mjs → rpc-BN7kFhGk.mjs} +1 -1
  21. package/dist/{rpc-DOl276lO.mjs → rpc-CLTPF1K6.mjs} +1 -1
  22. package/dist/{run-CDZ1g-Fa.mjs → run-B6-6GYde.mjs} +1 -1
  23. package/dist/{run-DI8N2DhV.mjs → run-Y3YLx8x7.mjs} +265 -18
  24. package/dist/{scheduler-C0WXBdL_.mjs → scheduler-CWlkmpMz.mjs} +1 -1
  25. package/dist/{serveCommands-DChM4ubY.mjs → serveCommands-mnocpHcO.mjs} +5 -5
  26. package/dist/{sideband-BdHdwflN.mjs → sideband-c4lkIKWJ.mjs} +1 -1
  27. package/package.json +2 -2
@@ -1,4 +1,4 @@
1
- import { a4 as clearStopMarker, a5 as stopMarkerExists, s as startDaemon, b as stopDaemon, d as daemonStatus } from './run-DI8N2DhV.mjs';
1
+ import { a3 as clearStopMarker, a4 as stopMarkerExists, s as startDaemon, b as stopDaemon, d as daemonStatus } from './run-Y3YLx8x7.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-DI8N2DhV.mjs').then(function (n) { return n.aq; });
36
+ const { getLoadedConfig } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.aq; });
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-DI8N2DhV.mjs').then(function (n) { return n.aA; });
55
+ const mod = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.aD; });
56
56
  if (whenIdle && !force) {
57
57
  if (mod.isDaemonAlive()) {
58
58
  mod.writePendingRestart({ reason: "svamp daemon restart --when-idle" });
@@ -322,6 +322,9 @@ async function main() {
322
322
  } else if (daemonSubcommand === "codex-auth") {
323
323
  await handleDaemonCodexAuthCommand(args.slice(2));
324
324
  process.exit(0);
325
+ } else if (daemonSubcommand === "kimi-auth") {
326
+ await handleDaemonKimiAuthCommand(args.slice(2));
327
+ process.exit(0);
325
328
  } else {
326
329
  printDaemonHelp();
327
330
  }
@@ -356,7 +359,7 @@ async function main() {
356
359
  console.error("svamp service: Service commands are not available in sandboxed sessions.");
357
360
  process.exit(1);
358
361
  }
359
- const { handleServiceCommand } = await import('./commands-BlSsMfW6.mjs');
362
+ const { handleServiceCommand } = await import('./commands-BSHZGcCC.mjs');
360
363
  await handleServiceCommand();
361
364
  } else if (subcommand === "serve") {
362
365
  const { isSandboxed: isSandboxedServe } = await import('./sandboxDetect-DNTcbgWD.mjs');
@@ -364,7 +367,7 @@ async function main() {
364
367
  console.error("svamp serve: Serve commands are not available in sandboxed sessions.");
365
368
  process.exit(1);
366
369
  }
367
- const { handleServeCommand } = await import('./serveCommands-DChM4ubY.mjs');
370
+ const { handleServeCommand } = await import('./serveCommands-mnocpHcO.mjs');
368
371
  await handleServeCommand();
369
372
  process.exit(0);
370
373
  } else if (subcommand === "process" || subcommand === "proc") {
@@ -373,7 +376,7 @@ async function main() {
373
376
  console.error("svamp process: Process commands are not available in sandboxed sessions.");
374
377
  process.exit(1);
375
378
  }
376
- const { processCommand } = await import('./commands-B2KHp8-n.mjs');
379
+ const { processCommand } = await import('./commands-Cl-TIip1.mjs');
377
380
  let machineId;
378
381
  const processArgs = args.slice(1);
379
382
  const mIdx = processArgs.findIndex((a) => a === "--machine" || a === "-m");
@@ -387,26 +390,26 @@ async function main() {
387
390
  }), machineId);
388
391
  process.exit(0);
389
392
  } else if (subcommand === "outpost") {
390
- const { outpostCommand } = await import('./commands-DxwqcKtb.mjs');
393
+ const { outpostCommand } = await import('./commands-CJmKY6Qo.mjs');
391
394
  await outpostCommand(args.slice(1));
392
395
  process.exit(0);
393
396
  } else if (subcommand === "issue" || subcommand === "issues") {
394
- const { issueCommand } = await import('./commands-c57jjMV-.mjs');
397
+ const { issueCommand } = await import('./commands-Ce7MP6Ut.mjs');
395
398
  await issueCommand(args.slice(1));
396
399
  await flushAndExit(0);
397
400
  } else if (subcommand === "workflow" || subcommand === "workflows") {
398
- const { workflowCommand } = await import('./commands-DMG7VDBo.mjs');
401
+ const { workflowCommand } = await import('./commands-CuinsdU0.mjs');
399
402
  await workflowCommand(args.slice(1));
400
403
  await flushAndExit(0);
401
404
  } else if (subcommand === "wise-agent" || subcommand === "wise") {
402
405
  await handleWiseAgentCommand(args.slice(1));
403
406
  process.exit(0);
404
407
  } else if (subcommand === "feature" || subcommand === "crew") {
405
- const { crewCommand } = await import('./commands-lt3_KA5S.mjs');
408
+ const { crewCommand } = await import('./commands-bS4ErsEr.mjs');
406
409
  await crewCommand(args.slice(1));
407
410
  process.exit(0);
408
411
  } else if (subcommand === "notify") {
409
- const { notifyUser } = await import('./notifyCommands-Deh2F41t.mjs');
412
+ const { notifyUser } = await import('./notifyCommands-Dlm4RafU.mjs');
410
413
  const rest = args.slice(1);
411
414
  let email;
412
415
  const o = {};
@@ -423,7 +426,7 @@ async function main() {
423
426
  } else if (subcommand === "admin") {
424
427
  const adminSub = args[1];
425
428
  if (adminSub === "set-collection-config") {
426
- const { setCollectionConfig } = await import('./adminCommands-DINkkchF.mjs');
429
+ const { setCollectionConfig } = await import('./adminCommands-DCttALYO.mjs');
427
430
  const rest = args.slice(2);
428
431
  let alias;
429
432
  let configJson;
@@ -433,10 +436,10 @@ async function main() {
433
436
  }
434
437
  await setCollectionConfig(alias, configJson);
435
438
  } else if (adminSub === "create-system-collections") {
436
- const { createSystemCollections } = await import('./adminCommands-DINkkchF.mjs');
439
+ const { createSystemCollections } = await import('./adminCommands-DCttALYO.mjs');
437
440
  await createSystemCollections();
438
441
  } else if (adminSub === "migrate-collection-children") {
439
- const { migrateCollectionChildren } = await import('./adminCommands-DINkkchF.mjs');
442
+ const { migrateCollectionChildren } = await import('./adminCommands-DCttALYO.mjs');
440
443
  const rest = args.slice(2).filter((a) => !a.startsWith("-"));
441
444
  await migrateCollectionChildren(rest[0], rest[1]);
442
445
  } else {
@@ -444,7 +447,7 @@ async function main() {
444
447
  }
445
448
  process.exit(0);
446
449
  } else if (subcommand === "events") {
447
- const { listEvents, ackEvent } = await import('./notifyCommands-Deh2F41t.mjs');
450
+ const { listEvents, ackEvent } = await import('./notifyCommands-Dlm4RafU.mjs');
448
451
  const sub = args[1];
449
452
  const rest = args.slice(2);
450
453
  let email;
@@ -465,7 +468,7 @@ async function main() {
465
468
  } else if (!subcommand || subcommand === "start") {
466
469
  await handleInteractiveCommand();
467
470
  } else if (subcommand === "--version" || subcommand === "-v") {
468
- const pkg = await import('./package-C9HRV5XP.mjs').catch(() => ({ default: { version: "unknown" } }));
471
+ const pkg = await import('./package-DO2e6EnU.mjs').catch(() => ({ default: { version: "unknown" } }));
469
472
  console.log(`svamp version: ${pkg.default.version}`);
470
473
  } else {
471
474
  console.error(`Unknown command: ${subcommand}`);
@@ -474,7 +477,7 @@ async function main() {
474
477
  }
475
478
  }
476
479
  async function handleInteractiveCommand() {
477
- const { runInteractive } = await import('./run-CDZ1g-Fa.mjs');
480
+ const { runInteractive } = await import('./run-B6-6GYde.mjs');
478
481
  const interactiveArgs = subcommand === "start" ? args.slice(1) : args;
479
482
  let directory = process.cwd();
480
483
  let resumeSessionId;
@@ -519,7 +522,7 @@ async function handleAgentCommand() {
519
522
  return;
520
523
  }
521
524
  if (agentArgs[0] === "list") {
522
- const { KNOWN_ACP_AGENTS, KNOWN_CODEX_AGENTS: KNOWN_CODEX_AGENTS2 } = await import('./run-DI8N2DhV.mjs').then(function (n) { return n.aw; });
525
+ const { KNOWN_ACP_AGENTS, KNOWN_CODEX_AGENTS: KNOWN_CODEX_AGENTS2 } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.aw; });
523
526
  console.log("Known agents:");
524
527
  for (const [name, config2] of Object.entries(KNOWN_ACP_AGENTS)) {
525
528
  console.log(` ${name.padEnd(12)} ${config2.command} ${config2.args.join(" ")} (ACP)`);
@@ -531,7 +534,7 @@ async function handleAgentCommand() {
531
534
  console.log('Use "svamp agent -- <command> [args]" for a custom ACP agent.');
532
535
  return;
533
536
  }
534
- const { resolveAcpAgentConfig, KNOWN_CODEX_AGENTS } = await import('./run-DI8N2DhV.mjs').then(function (n) { return n.aw; });
537
+ const { resolveAcpAgentConfig, KNOWN_CODEX_AGENTS } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.aw; });
535
538
  let cwd = process.cwd();
536
539
  const filteredArgs = [];
537
540
  for (let i = 0; i < agentArgs.length; i++) {
@@ -555,19 +558,28 @@ async function handleAgentCommand() {
555
558
  console.log(`Starting ${config.agentName} agent in ${cwd}...`);
556
559
  let backend;
557
560
  if (KNOWN_CODEX_AGENTS[config.agentName]) {
558
- const { CodexAppServerBackend } = await import('./run-DI8N2DhV.mjs').then(function (n) { return n.ax; });
561
+ const { CodexAppServerBackend } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.ax; });
559
562
  backend = new CodexAppServerBackend({ cwd, log: logFn });
560
563
  } else {
561
- const { AcpBackend } = await import('./run-DI8N2DhV.mjs').then(function (n) { return n.av; });
562
- const { GeminiTransport } = await import('./run-DI8N2DhV.mjs').then(function (n) { return n.ay; });
563
- const { DefaultTransport } = await import('./run-DI8N2DhV.mjs').then(function (n) { return n.au; });
564
- const transportHandler = config.agentName === "gemini" ? new GeminiTransport() : new DefaultTransport(config.agentName);
564
+ const { AcpBackend } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.av; });
565
+ const { GeminiTransport } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.ay; });
566
+ const { KimiTransport } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.az; });
567
+ const { DefaultTransport } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.au; });
568
+ const transportHandler = config.agentName === "gemini" ? new GeminiTransport() : config.agentName === "kimi" ? new KimiTransport() : new DefaultTransport(config.agentName);
569
+ let acpEnv;
570
+ if (config.agentName === "kimi") {
571
+ const { ensureKimiProviderConfigured } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.aB; });
572
+ const { kimiSpawnEnv } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.aA; });
573
+ ensureKimiProviderConfigured(process.env, config.command, logFn);
574
+ acpEnv = kimiSpawnEnv(process.env);
575
+ }
565
576
  backend = new AcpBackend({
566
577
  agentName: config.agentName,
567
578
  cwd,
568
579
  command: config.command,
569
580
  args: config.args,
570
581
  transportHandler,
582
+ env: acpEnv,
571
583
  log: logFn
572
584
  });
573
585
  }
@@ -687,7 +699,7 @@ async function handleSessionCommand() {
687
699
  process.exit(1);
688
700
  }
689
701
  }
690
- 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-BspIWEyi.mjs');
702
+ 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-r4QVEq12.mjs');
691
703
  const parseFlagStr = (flag, shortFlag) => {
692
704
  for (let i = 1; i < sessionArgs.length; i++) {
693
705
  if ((sessionArgs[i] === flag || shortFlag) && i + 1 < sessionArgs.length) {
@@ -755,7 +767,7 @@ async function handleSessionCommand() {
755
767
  allowDomain.push(sessionArgs[++i]);
756
768
  }
757
769
  }
758
- const { parseShareArg } = await import('./commands-BspIWEyi.mjs');
770
+ const { parseShareArg } = await import('./commands-r4QVEq12.mjs');
759
771
  const shareEntries = share.map((s) => parseShareArg(s));
760
772
  await sessionSpawn(agent, dir, targetMachineId, {
761
773
  message,
@@ -846,7 +858,7 @@ async function handleSessionCommand() {
846
858
  console.error(" Rewinds history: rewrites the message + drops everything after it, then restarts Claude.");
847
859
  process.exit(1);
848
860
  }
849
- const { sessionEditMessage } = await import('./commands-BspIWEyi.mjs');
861
+ const { sessionEditMessage } = await import('./commands-r4QVEq12.mjs');
850
862
  await sessionEditMessage(sessionArgs[1], sessionArgs[2], sessionArgs[3], targetMachineId);
851
863
  } else if (sessionSubcommand === "refine") {
852
864
  if (!sessionArgs[1] || !sessionArgs[2]) {
@@ -854,7 +866,7 @@ async function handleSessionCommand() {
854
866
  console.error(" Asks the agent to revise its latest reply in place (no extra round).");
855
867
  process.exit(1);
856
868
  }
857
- const { sessionRefineLastReply } = await import('./commands-BspIWEyi.mjs');
869
+ const { sessionRefineLastReply } = await import('./commands-r4QVEq12.mjs');
858
870
  await sessionRefineLastReply(sessionArgs[1], sessionArgs[2], targetMachineId);
859
871
  } else if (sessionSubcommand === "undo-edit" || sessionSubcommand === "undo") {
860
872
  if (!sessionArgs[1]) {
@@ -862,7 +874,7 @@ async function handleSessionCommand() {
862
874
  console.error(" Reverts the most recent edit/refine, restoring the pre-edit history.");
863
875
  process.exit(1);
864
876
  }
865
- const { sessionUndoEdit } = await import('./commands-BspIWEyi.mjs');
877
+ const { sessionUndoEdit } = await import('./commands-r4QVEq12.mjs');
866
878
  await sessionUndoEdit(sessionArgs[1], targetMachineId);
867
879
  } else if (sessionSubcommand === "query") {
868
880
  const dir = sessionArgs[1];
@@ -872,7 +884,7 @@ async function handleSessionCommand() {
872
884
  console.error(" Spawns a stateless Claude session in <directory>, sends <prompt>, prints the answer, then deletes the session.");
873
885
  process.exit(1);
874
886
  }
875
- const { sessionQuery } = await import('./commands-BspIWEyi.mjs');
887
+ const { sessionQuery } = await import('./commands-r4QVEq12.mjs');
876
888
  await sessionQuery(dir, prompt, targetMachineId, {
877
889
  timeout: parseFlagInt("--timeout"),
878
890
  json: hasFlag("--json"),
@@ -905,7 +917,7 @@ async function handleSessionCommand() {
905
917
  console.error("Usage: svamp session approve <session-id> [request-id] [--json]");
906
918
  process.exit(1);
907
919
  }
908
- const { sessionApprove } = await import('./commands-BspIWEyi.mjs');
920
+ const { sessionApprove } = await import('./commands-r4QVEq12.mjs');
909
921
  const approveReqId = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
910
922
  await sessionApprove(sessionArgs[1], approveReqId, targetMachineId, {
911
923
  json: hasFlag("--json")
@@ -915,7 +927,7 @@ async function handleSessionCommand() {
915
927
  console.error("Usage: svamp session deny <session-id> [request-id] [--json]");
916
928
  process.exit(1);
917
929
  }
918
- const { sessionDeny } = await import('./commands-BspIWEyi.mjs');
930
+ const { sessionDeny } = await import('./commands-r4QVEq12.mjs');
919
931
  const denyReqId = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
920
932
  await sessionDeny(sessionArgs[1], denyReqId, targetMachineId, {
921
933
  json: hasFlag("--json")
@@ -967,7 +979,7 @@ async function handleSessionCommand() {
967
979
  console.error("Usage: svamp session set-title <title>");
968
980
  process.exit(1);
969
981
  }
970
- const { sessionSetTitle } = await import('./agentCommands-CqHUKyRM.mjs');
982
+ const { sessionSetTitle } = await import('./agentCommands-BUsSOz5M.mjs');
971
983
  await sessionSetTitle(title);
972
984
  } else if (sessionSubcommand === "set-project-description" || sessionSubcommand === "set-project") {
973
985
  const desc = sessionArgs.slice(1).filter((a) => !a.startsWith("--")).join(" ");
@@ -975,7 +987,7 @@ async function handleSessionCommand() {
975
987
  console.error("Usage: svamp session set-project-description <text>");
976
988
  process.exit(1);
977
989
  }
978
- const { sessionSetProjectDescription } = await import('./agentCommands-CqHUKyRM.mjs');
990
+ const { sessionSetProjectDescription } = await import('./agentCommands-BUsSOz5M.mjs');
979
991
  await sessionSetProjectDescription(desc);
980
992
  } else if (sessionSubcommand === "set-link") {
981
993
  const url = sessionArgs[1];
@@ -984,11 +996,11 @@ async function handleSessionCommand() {
984
996
  process.exit(1);
985
997
  }
986
998
  const label = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
987
- const { sessionSetLink } = await import('./agentCommands-CqHUKyRM.mjs');
999
+ const { sessionSetLink } = await import('./agentCommands-BUsSOz5M.mjs');
988
1000
  await sessionSetLink(url, label);
989
1001
  } else if (sessionSubcommand === "link") {
990
1002
  const op = sessionArgs[1];
991
- const lm = await import('./agentCommands-CqHUKyRM.mjs');
1003
+ const lm = await import('./agentCommands-BUsSOz5M.mjs');
992
1004
  if (op === "add") {
993
1005
  const url = sessionArgs[2];
994
1006
  if (!url || url.startsWith("--")) {
@@ -1023,7 +1035,7 @@ async function handleSessionCommand() {
1023
1035
  process.exit(1);
1024
1036
  }
1025
1037
  const level = parseFlagStr("--level") || "info";
1026
- const { sessionNotify } = await import('./agentCommands-CqHUKyRM.mjs');
1038
+ const { sessionNotify } = await import('./agentCommands-BUsSOz5M.mjs');
1027
1039
  await sessionNotify(message, level);
1028
1040
  } else if (sessionSubcommand === "broadcast") {
1029
1041
  const action = sessionArgs[1];
@@ -1031,7 +1043,7 @@ async function handleSessionCommand() {
1031
1043
  console.error("Usage: svamp session broadcast <action> [args...]\nActions: open-canvas <url> [label], close-canvas, toast <message>");
1032
1044
  process.exit(1);
1033
1045
  }
1034
- const { sessionBroadcast } = await import('./agentCommands-CqHUKyRM.mjs');
1046
+ const { sessionBroadcast } = await import('./agentCommands-BUsSOz5M.mjs');
1035
1047
  await sessionBroadcast(action, sessionArgs.slice(2).filter((a) => !a.startsWith("--")));
1036
1048
  } else if (sessionSubcommand === "inbox") {
1037
1049
  const inboxSubcmd = sessionArgs[1];
@@ -1042,7 +1054,7 @@ async function handleSessionCommand() {
1042
1054
  process.exit(1);
1043
1055
  }
1044
1056
  if (agentSessionId) {
1045
- const { inboxSend } = await import('./agentCommands-CqHUKyRM.mjs');
1057
+ const { inboxSend } = await import('./agentCommands-BUsSOz5M.mjs');
1046
1058
  await inboxSend(sessionArgs[2], {
1047
1059
  body: sessionArgs[3],
1048
1060
  subject: parseFlagStr("--subject"),
@@ -1059,7 +1071,7 @@ async function handleSessionCommand() {
1059
1071
  }
1060
1072
  } else if (inboxSubcmd === "list" || inboxSubcmd === "ls") {
1061
1073
  if (agentSessionId && !sessionArgs[2]) {
1062
- const { inboxList } = await import('./agentCommands-CqHUKyRM.mjs');
1074
+ const { inboxList } = await import('./agentCommands-BUsSOz5M.mjs');
1063
1075
  await inboxList({
1064
1076
  unread: hasFlag("--unread"),
1065
1077
  limit: parseFlagInt("--limit"),
@@ -1081,7 +1093,7 @@ async function handleSessionCommand() {
1081
1093
  process.exit(1);
1082
1094
  }
1083
1095
  if (agentSessionId && !sessionArgs[3]) {
1084
- const { inboxList } = await import('./agentCommands-CqHUKyRM.mjs');
1096
+ const { inboxList } = await import('./agentCommands-BUsSOz5M.mjs');
1085
1097
  await sessionInboxRead(agentSessionId, sessionArgs[2], targetMachineId);
1086
1098
  } else if (sessionArgs[3]) {
1087
1099
  await sessionInboxRead(sessionArgs[2], sessionArgs[3], targetMachineId);
@@ -1091,7 +1103,7 @@ async function handleSessionCommand() {
1091
1103
  }
1092
1104
  } else if (inboxSubcmd === "reply") {
1093
1105
  if (agentSessionId && sessionArgs[2] && sessionArgs[3] && !sessionArgs[4]) {
1094
- const { inboxReply } = await import('./agentCommands-CqHUKyRM.mjs');
1106
+ const { inboxReply } = await import('./agentCommands-BUsSOz5M.mjs');
1095
1107
  await inboxReply(sessionArgs[2], sessionArgs[3]);
1096
1108
  } else if (sessionArgs[2] && sessionArgs[3] && sessionArgs[4]) {
1097
1109
  await sessionInboxReply(sessionArgs[2], sessionArgs[3], sessionArgs[4], targetMachineId);
@@ -1129,7 +1141,7 @@ async function handleMachineCommand() {
1129
1141
  return;
1130
1142
  }
1131
1143
  if (machineSubcommand === "share") {
1132
- const { machineShare } = await import('./commands-BspIWEyi.mjs');
1144
+ const { machineShare } = await import('./commands-r4QVEq12.mjs');
1133
1145
  let machineId;
1134
1146
  const shareArgs = [];
1135
1147
  for (let i = 1; i < machineArgs.length; i++) {
@@ -1180,14 +1192,14 @@ async function handleMachineCommand() {
1180
1192
  process.exit(1);
1181
1193
  }
1182
1194
  if (all) {
1183
- const { fleetExec } = await import('./fleet-DX-cpu52.mjs');
1195
+ const { fleetExec } = await import('./fleet-CSwFR8B0.mjs');
1184
1196
  await fleetExec(command, { cwd });
1185
1197
  } else {
1186
- const { machineExec } = await import('./commands-BspIWEyi.mjs');
1198
+ const { machineExec } = await import('./commands-r4QVEq12.mjs');
1187
1199
  await machineExec(machineId, command, cwd);
1188
1200
  }
1189
1201
  } else if (machineSubcommand === "info") {
1190
- const { machineInfo } = await import('./commands-BspIWEyi.mjs');
1202
+ const { machineInfo } = await import('./commands-r4QVEq12.mjs');
1191
1203
  let machineId;
1192
1204
  for (let i = 1; i < machineArgs.length; i++) {
1193
1205
  if ((machineArgs[i] === "--machine" || machineArgs[i] === "-m") && i + 1 < machineArgs.length) {
@@ -1207,10 +1219,10 @@ async function handleMachineCommand() {
1207
1219
  level = machineArgs[++i];
1208
1220
  }
1209
1221
  }
1210
- const { machineNotify } = await import('./agentCommands-CqHUKyRM.mjs');
1222
+ const { machineNotify } = await import('./agentCommands-BUsSOz5M.mjs');
1211
1223
  await machineNotify(message, level);
1212
1224
  } else if (machineSubcommand === "ls") {
1213
- const { machineLs } = await import('./commands-BspIWEyi.mjs');
1225
+ const { machineLs } = await import('./commands-r4QVEq12.mjs');
1214
1226
  let machineId;
1215
1227
  let showHidden = false;
1216
1228
  let path;
@@ -1242,6 +1254,9 @@ Subcommands (fan out across every machine in your workspace):
1242
1254
  upgrade-claude [-v X] Install Claude Code (defaults to svamp-cli's pinned version)
1243
1255
  upgrade-codex [-v X] Install Codex (defaults to svamp-cli's pinned version;
1244
1256
  the build tested for mid-turn steering, turn/steer >= 0.129)
1257
+ upgrade-kimi [-v X] Install Kimi Code (@moonshot-ai/kimi-code; defaults to
1258
+ svamp-cli's pinned version \u2014 the build tested for kimi acp).
1259
+ Opt-in per machine: not auto-installed, reconciles on demand.
1245
1260
  upgrade-svamp [-v X] [--exclude-self] [--force]
1246
1261
  npm install -g svamp-cli@X, then restart each daemon.
1247
1262
  DEFAULT is graceful: each daemon restarts itself only
@@ -1259,6 +1274,7 @@ Examples:
1259
1274
  svamp fleet status
1260
1275
  svamp fleet upgrade-claude
1261
1276
  svamp fleet upgrade-codex
1277
+ svamp fleet upgrade-kimi
1262
1278
  svamp fleet upgrade-svamp -v 0.2.73
1263
1279
  svamp fleet upgrade-svamp --exclude-self
1264
1280
  svamp fleet push-skill hypha`);
@@ -1272,23 +1288,26 @@ Examples:
1272
1288
  };
1273
1289
  const hasFlag = (name) => fleetArgs.includes(`--${name}`);
1274
1290
  if (sub === "status") {
1275
- const { fleetStatus } = await import('./fleet-DX-cpu52.mjs');
1291
+ const { fleetStatus } = await import('./fleet-CSwFR8B0.mjs');
1276
1292
  await fleetStatus();
1277
1293
  } else if (sub === "upgrade-claude") {
1278
- const { fleetUpgradeClaude } = await import('./fleet-DX-cpu52.mjs');
1294
+ const { fleetUpgradeClaude } = await import('./fleet-CSwFR8B0.mjs');
1279
1295
  await fleetUpgradeClaude({ version: flag("version", "-v") });
1280
1296
  } else if (sub === "upgrade-codex") {
1281
- const { fleetUpgradeCodex } = await import('./fleet-DX-cpu52.mjs');
1297
+ const { fleetUpgradeCodex } = await import('./fleet-CSwFR8B0.mjs');
1282
1298
  await fleetUpgradeCodex({ version: flag("version", "-v") });
1299
+ } else if (sub === "upgrade-kimi") {
1300
+ const { fleetUpgradeKimi } = await import('./fleet-CSwFR8B0.mjs');
1301
+ await fleetUpgradeKimi({ version: flag("version", "-v") });
1283
1302
  } else if (sub === "upgrade-svamp") {
1284
- const { fleetUpgradeSvamp } = await import('./fleet-DX-cpu52.mjs');
1303
+ const { fleetUpgradeSvamp } = await import('./fleet-CSwFR8B0.mjs');
1285
1304
  await fleetUpgradeSvamp({ version: flag("version", "-v"), excludeSelf: hasFlag("exclude-self"), force: hasFlag("force") });
1286
1305
  } else if (sub === "daemon-restart") {
1287
- const { fleetDaemonRestart } = await import('./fleet-DX-cpu52.mjs');
1306
+ const { fleetDaemonRestart } = await import('./fleet-CSwFR8B0.mjs');
1288
1307
  await fleetDaemonRestart({ graceful: !hasFlag("cleanup") });
1289
1308
  } else if (sub === "push-skill") {
1290
1309
  const name = fleetArgs[1];
1291
- const { fleetPushSkill } = await import('./fleet-DX-cpu52.mjs');
1310
+ const { fleetPushSkill } = await import('./fleet-CSwFR8B0.mjs');
1292
1311
  await fleetPushSkill(name);
1293
1312
  } else {
1294
1313
  console.error(`Unknown fleet subcommand: ${sub}`);
@@ -1304,7 +1323,7 @@ async function handleSkillsCommand() {
1304
1323
  await printSkillsHelp();
1305
1324
  return;
1306
1325
  }
1307
- const { skillsFind, skillsInstall, skillsList, skillsRemove, skillsPublish } = await import('./commands-CE9x3OVJ.mjs');
1326
+ const { skillsFind, skillsInstall, skillsList, skillsRemove, skillsPublish } = await import('./commands-ZML4FIzg.mjs');
1308
1327
  if (skillsSubcommand === "find" || skillsSubcommand === "search") {
1309
1328
  const query = skillsArgs.slice(1).filter((a) => !a.startsWith("--")).join(" ");
1310
1329
  if (!query) {
@@ -1351,7 +1370,7 @@ async function loginToHypha() {
1351
1370
  process.exit(1);
1352
1371
  }
1353
1372
  const anchor = anchorArg.replace(/\/+$/, "");
1354
- const { loadInstanceConfig } = await import('./run-DI8N2DhV.mjs').then(function (n) { return n.aq; });
1373
+ const { loadInstanceConfig } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.aq; });
1355
1374
  let cfg = null;
1356
1375
  try {
1357
1376
  cfg = await loadInstanceConfig({ anchor, force: true });
@@ -1462,7 +1481,7 @@ async function logoutFromHypha() {
1462
1481
  } catch {
1463
1482
  }
1464
1483
  try {
1465
- const { clearInstanceConfigCache } = await import('./run-DI8N2DhV.mjs').then(function (n) { return n.aq; });
1484
+ const { clearInstanceConfigCache } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.aq; });
1466
1485
  clearInstanceConfigCache();
1467
1486
  } catch {
1468
1487
  }
@@ -1741,7 +1760,7 @@ Commands:
1741
1760
  svamp workflow --help Automation workflows (schedule / event / idle triggers)
1742
1761
  svamp process --help Process supervisor (apply, list, start, stop, logs)
1743
1762
  svamp machine --help Machine sharing & security contexts
1744
- svamp fleet --help Fan-out commands across all your machines (status, upgrade-claude, upgrade-codex, upgrade-svamp, daemon-restart, push-skill)
1763
+ svamp fleet --help Fan-out commands across all your machines (status, upgrade-claude, upgrade-codex, upgrade-kimi, upgrade-svamp, daemon-restart, push-skill)
1745
1764
  svamp skills --help Skills marketplace (find, install, publish)
1746
1765
  svamp service --help Service exposure (HTTP services from sandboxes)
1747
1766
  svamp outpost --help Connect a remote machine (FDE outpost): up, exec, list, install
@@ -1808,7 +1827,7 @@ async function applyClaudeAuthFlags(argv) {
1808
1827
  "--use-hypha-proxy, --use-claude-login, and --anthropic-base-url/--anthropic-api-key are mutually exclusive"
1809
1828
  );
1810
1829
  }
1811
- const mod = await import('./run-DI8N2DhV.mjs').then(function (n) { return n.ar; });
1830
+ const mod = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.ar; });
1812
1831
  if (hasHypha) {
1813
1832
  let url;
1814
1833
  const hyphaIdx = argv.indexOf("--use-hypha-proxy");
@@ -1862,7 +1881,7 @@ async function applyDaemonShareFlag(argv) {
1862
1881
  }
1863
1882
  }
1864
1883
  if (collected.length === 0) return;
1865
- const { updateEnvFile } = await import('./run-DI8N2DhV.mjs').then(function (n) { return n.ar; });
1884
+ const { updateEnvFile } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.ar; });
1866
1885
  const seen = /* @__PURE__ */ new Set();
1867
1886
  const deduped = collected.filter((e) => {
1868
1887
  const k = e.toLowerCase();
@@ -1895,7 +1914,7 @@ async function handleWiseAgentCommand(rest) {
1895
1914
  }
1896
1915
  });
1897
1916
  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(" ");
1898
- const { wiseAskCli } = await import('./commands-BspIWEyi.mjs');
1917
+ const { wiseAskCli } = await import('./commands-r4QVEq12.mjs');
1899
1918
  await wiseAskCli(machineId, message, sessionId, { json });
1900
1919
  return;
1901
1920
  }
@@ -1907,7 +1926,7 @@ async function handleWiseAgentCommand(rest) {
1907
1926
  }
1908
1927
  return void 0;
1909
1928
  };
1910
- const { runWiseVoiceCli } = await import('./headlessCli-BE4CanO7.mjs');
1929
+ const { runWiseVoiceCli } = await import('./headlessCli-Dg-awx4h.mjs');
1911
1930
  await runWiseVoiceCli({ voice: valueOf(["--voice"]), wakeKeywordPath: valueOf(["--wake"]), model: valueOf(["--model"]) });
1912
1931
  return;
1913
1932
  }
@@ -1925,7 +1944,7 @@ async function handleWiseAgentCommand(rest) {
1925
1944
  const mode = valueOf(["--mode"]);
1926
1945
  const mission = valueOf(["--mission"]);
1927
1946
  const url = rest.slice(1).find((a) => /^https?:\/\//.test(a)) || "";
1928
- const { wiseJoinMeetingCli } = await import('./commands-BspIWEyi.mjs');
1947
+ const { wiseJoinMeetingCli } = await import('./commands-r4QVEq12.mjs');
1929
1948
  await wiseJoinMeetingCli(machineId, url, sessionId, { json, mode, mission });
1930
1949
  return;
1931
1950
  }
@@ -1937,7 +1956,7 @@ async function handleWiseAgentCommand(rest) {
1937
1956
  }
1938
1957
  return void 0;
1939
1958
  };
1940
- const { wiseLeaveMeetingCli } = await import('./commands-BspIWEyi.mjs');
1959
+ const { wiseLeaveMeetingCli } = await import('./commands-r4QVEq12.mjs');
1941
1960
  await wiseLeaveMeetingCli(valueOf(["--machine", "-m"]), valueOf(["--session", "-s"]), { json: rest.includes("--json") });
1942
1961
  return;
1943
1962
  }
@@ -1961,7 +1980,7 @@ async function handleWiseAgentCommand(rest) {
1961
1980
  }
1962
1981
  });
1963
1982
  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(" ");
1964
- const { wiseAnnounceCli } = await import('./commands-BspIWEyi.mjs');
1983
+ const { wiseAnnounceCli } = await import('./commands-r4QVEq12.mjs');
1965
1984
  await wiseAnnounceCli(machineId, text, sessionId, { json });
1966
1985
  return;
1967
1986
  }
@@ -1973,7 +1992,7 @@ async function handleWiseAgentCommand(rest) {
1973
1992
  }
1974
1993
  return void 0;
1975
1994
  };
1976
- const { wiseMeetingsCli } = await import('./commands-BspIWEyi.mjs');
1995
+ const { wiseMeetingsCli } = await import('./commands-r4QVEq12.mjs');
1977
1996
  await wiseMeetingsCli(valueOf(["--machine", "-m"]), { json: rest.includes("--json") });
1978
1997
  return;
1979
1998
  }
@@ -2023,7 +2042,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
2023
2042
  return;
2024
2043
  }
2025
2044
  const authArgs = rest.slice(1);
2026
- const mod = await import('./auth-fmYi12gU.mjs');
2045
+ const mod = await import('./auth-D5yTcsy2.mjs');
2027
2046
  let action;
2028
2047
  try {
2029
2048
  action = mod.parseWiseAgentAuthArgs(authArgs);
@@ -2033,7 +2052,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
2033
2052
  return;
2034
2053
  }
2035
2054
  if (action) {
2036
- const { updateEnvFile } = await import('./run-DI8N2DhV.mjs').then(function (n) { return n.ar; });
2055
+ const { updateEnvFile } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.ar; });
2037
2056
  const updates = mod.buildWiseAgentEnvUpdates(action);
2038
2057
  updateEnvFile(updates);
2039
2058
  for (const [k, v] of Object.entries(updates)) {
@@ -2047,7 +2066,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
2047
2066
  }
2048
2067
  async function handleDaemonAuthCommand(argv) {
2049
2068
  const sub = (argv[0] || "status").toLowerCase();
2050
- const mod = await import('./run-DI8N2DhV.mjs').then(function (n) { return n.ar; });
2069
+ const mod = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.ar; });
2051
2070
  if (sub === "--help" || sub === "-h" || sub === "help") {
2052
2071
  console.log(`
2053
2072
  svamp daemon auth \u2014 Configure how Claude subprocesses authenticate
@@ -2121,8 +2140,8 @@ one step: --use-hypha-proxy / --use-claude-login / --anthropic-base-url URL --an
2121
2140
  }
2122
2141
  async function handleDaemonCodexAuthCommand(argv) {
2123
2142
  const sub = (argv[0] || "status").toLowerCase();
2124
- const { updateEnvFile } = await import('./run-DI8N2DhV.mjs').then(function (n) { return n.ar; });
2125
- const { resolveCodexProvider } = await import('./run-DI8N2DhV.mjs').then(function (n) { return n.as; });
2143
+ const { updateEnvFile } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.ar; });
2144
+ const { resolveCodexProvider } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.as; });
2126
2145
  const redact = (k) => k && k.length > 10 ? `${k.slice(0, 6)}\u2026${k.slice(-4)}` : k ? "***" : "(unset)";
2127
2146
  if (sub === "--help" || sub === "-h" || sub === "help") {
2128
2147
  console.log(`
@@ -2206,6 +2225,120 @@ The generic LLM_API_BASE / LLM_API_KEY / LLM_MODEL env vars are also honored if
2206
2225
  console.error("Available: status, set <URL> <KEY> [MODEL], use-openai [KEY], use-chatgpt, clear");
2207
2226
  process.exit(1);
2208
2227
  }
2228
+ async function handleDaemonKimiAuthCommand(argv) {
2229
+ const sub = (argv[0] || "status").toLowerCase();
2230
+ const { updateEnvFile } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.ar; });
2231
+ const { resolveKimiProvider, buildKimiCatalogAddArgs, DEFAULT_KIMI_PROVIDER } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.aA; });
2232
+ const redact = (k) => k && k.length > 10 ? `${k.slice(0, 6)}\u2026${k.slice(-4)}` : k ? "***" : "(unset)";
2233
+ const PRESETS = {
2234
+ "use-moonshot": { provider: "moonshotai", base: "https://api.moonshot.ai/v1", label: "Moonshot AI (moonshotai)" },
2235
+ "use-moonshot-cn": { provider: "moonshotai-cn", base: "https://api.moonshot.cn/v1", label: "Moonshot AI China (moonshotai-cn)" },
2236
+ "use-coding": { provider: "kimi-for-coding", base: "https://api.kimi.com/coding", label: "Kimi for Coding (kimi-for-coding)" }
2237
+ };
2238
+ if (sub === "--help" || sub === "-h" || sub === "help") {
2239
+ console.log(`
2240
+ svamp daemon kimi-auth \u2014 Configure how Kimi (MoonshotAI) authenticates (parallels \`svamp daemon codex-auth\`)
2241
+
2242
+ svamp daemon kimi-auth Show current Kimi provider / key (redacted)
2243
+ svamp daemon kimi-auth set <API_KEY> [--provider <id>] [--base-url <url>] [--model <alias>]
2244
+ Configure an explicit provider (default id: ${DEFAULT_KIMI_PROVIDER}).
2245
+ svamp daemon kimi-auth use-moonshot <API_KEY> Preset: Moonshot AI (provider=moonshotai, api.moonshot.ai/v1)
2246
+ svamp daemon kimi-auth use-moonshot-cn <API_KEY> Preset: Moonshot AI China (provider=moonshotai-cn)
2247
+ svamp daemon kimi-auth use-coding <API_KEY> Preset: Kimi for Coding (provider=kimi-for-coding, api.kimi.com/coding)
2248
+ svamp daemon kimi-auth clear Remove svamp's stored Kimi credentials.
2249
+
2250
+ Persisted to ~/.svamp/.env (SVAMP_KIMI_API_KEY / _PROVIDER / _API_BASE / _MODEL) AND written to
2251
+ ~/.kimi-code/config.toml via \`kimi provider catalog add\`. Run \`svamp daemon restart\` afterwards to apply.
2252
+ The generic LLM_API_KEY / LLM_API_BASE / LLM_MODEL env vars are also honored as a fallback.
2253
+ `);
2254
+ return;
2255
+ }
2256
+ if (sub === "status" || sub === "show") {
2257
+ const p = resolveKimiProvider(process.env);
2258
+ const { existsSync } = await import('node:fs');
2259
+ const nativeAuth = existsSync(`${process.env.HOME}/.kimi-code/config.toml`);
2260
+ if (p.apiKey) {
2261
+ console.log("Kimi auth: svamp-configured provider");
2262
+ console.log(` provider : ${p.provider}`);
2263
+ console.log(` api_key : ${redact(p.apiKey)}`);
2264
+ console.log(` base_url : ${p.apiBase ?? "(catalog default)"}`);
2265
+ console.log(` model : ${p.model ?? "(provider default)"}`);
2266
+ } else {
2267
+ console.log(`Kimi auth: not configured by svamp (${nativeAuth ? "~/.kimi-code/config.toml present \u2014 using your own `kimi login` / `kimi provider`" : "no ~/.kimi-code/config.toml \u2014 run kimi-auth use-moonshot <key> or `kimi login`"})`);
2268
+ }
2269
+ return;
2270
+ }
2271
+ const applyProvider = async (provider, apiKey, base, model, label) => {
2272
+ updateEnvFile({
2273
+ SVAMP_KIMI_API_KEY: apiKey,
2274
+ SVAMP_KIMI_PROVIDER: provider,
2275
+ SVAMP_KIMI_API_BASE: base || "",
2276
+ SVAMP_KIMI_MODEL: model || ""
2277
+ });
2278
+ const args2 = buildKimiCatalogAddArgs({ provider, apiKey, apiBase: base, model });
2279
+ let localOk = false;
2280
+ if (args2) {
2281
+ const { spawnSync } = await import('node:child_process');
2282
+ const r = spawnSync("kimi", args2, {
2283
+ stdio: ["ignore", "inherit", "inherit"],
2284
+ env: { ...process.env, KIMI_CLI_NO_AUTO_UPDATE: "1" },
2285
+ timeout: 3e4
2286
+ });
2287
+ localOk = r.status === 0;
2288
+ if (!localOk) {
2289
+ console.warn(" (note: `kimi provider catalog add` did not succeed locally \u2014 is kimi installed? `npm i -g @moonshot-ai/kimi-code`.");
2290
+ console.warn(" The daemon will retry the config at session spawn from the stored env.)");
2291
+ }
2292
+ }
2293
+ console.log(`Kimi auth set: ${label} (provider=${provider}${base ? `, base=${base}` : ""}${model ? `, model=${model}` : ""}).`);
2294
+ console.log(` api_key: ${redact(apiKey)}${localOk ? " \u2014 written to ~/.kimi-code/config.toml." : ""}`);
2295
+ console.log('Run "svamp daemon restart" to apply to the daemon.');
2296
+ };
2297
+ if (sub === "set") {
2298
+ const rest = argv.slice(1);
2299
+ let key = "";
2300
+ let provider = DEFAULT_KIMI_PROVIDER;
2301
+ let base;
2302
+ let model;
2303
+ for (let i = 0; i < rest.length; i++) {
2304
+ const a = rest[i];
2305
+ if (a === "--provider") {
2306
+ provider = rest[++i];
2307
+ } else if (a === "--base-url" || a === "--base") {
2308
+ base = rest[++i];
2309
+ } else if (a === "--model") {
2310
+ model = rest[++i];
2311
+ } else if (!a.startsWith("--") && !key) {
2312
+ key = a;
2313
+ }
2314
+ }
2315
+ if (!key) {
2316
+ console.error("Usage: svamp daemon kimi-auth set <api-key> [--provider <id>] [--base-url <url>] [--model <alias>]");
2317
+ console.error(" e.g. svamp daemon kimi-auth set sk-... --provider moonshotai --model moonshotai/kimi-k2.5");
2318
+ process.exit(1);
2319
+ }
2320
+ await applyProvider(provider, key, base, model, `custom provider '${provider}'`);
2321
+ return;
2322
+ }
2323
+ if (PRESETS[sub]) {
2324
+ const key = argv[1];
2325
+ if (!key) {
2326
+ console.error(`Usage: svamp daemon kimi-auth ${sub} <api-key>`);
2327
+ process.exit(1);
2328
+ }
2329
+ const preset = PRESETS[sub];
2330
+ await applyProvider(preset.provider, key, preset.base, void 0, preset.label);
2331
+ return;
2332
+ }
2333
+ if (sub === "clear") {
2334
+ updateEnvFile({ SVAMP_KIMI_API_KEY: "", SVAMP_KIMI_PROVIDER: "", SVAMP_KIMI_API_BASE: "", SVAMP_KIMI_MODEL: "" });
2335
+ console.log(`Cleared svamp's stored Kimi credentials (~/.kimi-code/config.toml left as-is). Run "svamp daemon restart".`);
2336
+ return;
2337
+ }
2338
+ console.error(`Unknown subcommand: svamp daemon kimi-auth ${sub}`);
2339
+ console.error("Available: status, set <KEY> [--provider p] [--base-url u] [--model m], use-moonshot <KEY>, use-moonshot-cn <KEY>, use-coding <KEY>, clear");
2340
+ process.exit(1);
2341
+ }
2209
2342
  function printSessionHelp() {
2210
2343
  console.log(`
2211
2344
  svamp session \u2014 Spawn and manage AI agent sessions
@@ -2455,7 +2588,7 @@ Examples:
2455
2588
  async function printSkillsHelp() {
2456
2589
  let browseUrl = "<HYPHA_SERVER_URL>/<workspace>/artifacts/marketplace (set HYPHA_SERVER_URL)";
2457
2590
  try {
2458
- const { getArtifactBaseUrl, getSkillsCollectionName } = await import('./run-DI8N2DhV.mjs').then(function (n) { return n.az; });
2591
+ const { getArtifactBaseUrl, getSkillsCollectionName } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.aC; });
2459
2592
  browseUrl = `${getArtifactBaseUrl()}/${getSkillsCollectionName()}`;
2460
2593
  } catch {
2461
2594
  }
@@ -2522,10 +2655,11 @@ Usage:
2522
2655
  Examples:
2523
2656
  svamp agent gemini Start Gemini agent in current directory
2524
2657
  svamp agent gemini -d /tmp/proj Start Gemini agent in /tmp/proj
2658
+ svamp agent kimi Start Kimi (MoonshotAI) agent
2525
2659
  svamp agent codex Start Codex agent
2526
2660
  svamp agent -- mycli --acp Start custom ACP-compatible agent
2527
2661
 
2528
- Known agents: gemini (ACP), codex (MCP)
2662
+ Known agents: gemini (ACP), kimi (ACP), codex (MCP)
2529
2663
  `);
2530
2664
  }
2531
2665
  main().catch((err) => {