volute 0.3.1 → 0.5.0

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 (82) hide show
  1. package/README.md +29 -29
  2. package/dist/agent-Z2B6EFEQ.js +75 -0
  3. package/dist/{agent-manager-AUCKMGPR.js → agent-manager-PXBKA2GK.js} +4 -4
  4. package/dist/channel-MK5OK2SI.js +113 -0
  5. package/dist/chunk-5X7HGB6L.js +107 -0
  6. package/dist/{chunk-YGFIWIOF.js → chunk-7L4AN5D4.js} +1 -1
  7. package/dist/{chunk-VRVVQIYY.js → chunk-AZEL2IEK.js} +1 -1
  8. package/dist/chunk-B3R6L2GW.js +24 -0
  9. package/dist/{chunk-DNOXHLE5.js → chunk-HE67X4T6.js} +1 -1
  10. package/dist/{chunk-I6OHXCMV.js → chunk-MW2KFO3B.js} +47 -9
  11. package/dist/chunk-MXUCNIBG.js +168 -0
  12. package/dist/chunk-SMISE4SV.js +226 -0
  13. package/dist/{chunk-SOZA2TLP.js → chunk-UAVD2AHX.js} +1 -1
  14. package/dist/{chunk-3C2XR4IY.js → chunk-UX25Z2ND.js} +113 -107
  15. package/dist/{chunk-GSPKUPKU.js → chunk-XUA3JUFK.js} +2 -1
  16. package/dist/chunk-ZYGKG6VC.js +22 -0
  17. package/dist/cli.js +98 -75
  18. package/dist/connector-LYEMXQEV.js +157 -0
  19. package/dist/connectors/discord.js +104 -161
  20. package/dist/connectors/slack.js +179 -0
  21. package/dist/connectors/telegram.js +175 -0
  22. package/dist/conversation-ERXEQZTY.js +163 -0
  23. package/dist/create-RVCZN6HE.js +91 -0
  24. package/dist/{daemon-client-XR24PUJF.js → daemon-client-ZY6UUN2M.js} +2 -2
  25. package/dist/daemon.js +824 -252
  26. package/dist/{delete-GQ7JEK2S.js → delete-3QH7VYIN.js} +8 -9
  27. package/dist/{down-3OB6UVAJ.js → down-O7IFZLVJ.js} +1 -1
  28. package/dist/{env-JB27UAC3.js → env-4D4REPJF.js} +8 -5
  29. package/dist/{history-3VRUBGGV.js → history-OEONB53Z.js} +5 -5
  30. package/dist/{import-K4MP2GX7.js → import-MXJB2EII.js} +23 -8
  31. package/dist/{logs-NXFFGUKY.js → logs-DF342W4M.js} +2 -2
  32. package/dist/message-ADHWFHSI.js +32 -0
  33. package/dist/package-VQOE7JNH.js +89 -0
  34. package/dist/{schedule-4I5TYHFH.js → schedule-NAG6F463.js} +12 -7
  35. package/dist/send-66QMKRUH.js +75 -0
  36. package/dist/{setup-SRS7AUAA.js → setup-RPRRGG2F.js} +6 -6
  37. package/dist/{start-LDPMCMYT.js → start-TUOXDSFL.js} +3 -3
  38. package/dist/{status-MVSQG54T.js → status-A36EHRO4.js} +3 -3
  39. package/dist/{stop-5PZTZCLL.js → stop-AOJZLQ5X.js} +6 -7
  40. package/dist/{up-UT3IMKCA.js → up-7ILD7GU7.js} +2 -2
  41. package/dist/update-LPSIAWQ2.js +140 -0
  42. package/dist/update-check-Y33QDCFL.js +17 -0
  43. package/dist/{upgrade-CDKECCGN.js → upgrade-FX2TKJ2S.js} +16 -15
  44. package/dist/{variant-CVYM3EQG.js → variant-LAB67OC2.js} +17 -12
  45. package/dist/web-assets/assets/index-BbRmoxoA.js +308 -0
  46. package/dist/web-assets/index.html +2 -2
  47. package/drizzle/0003_clean_ego.sql +12 -0
  48. package/drizzle/meta/0003_snapshot.json +417 -0
  49. package/drizzle/meta/_journal.json +7 -0
  50. package/package.json +3 -1
  51. package/templates/_base/.init/.config/hooks/startup-context.sh +19 -1
  52. package/templates/_base/_skills/volute-agent/SKILL.md +112 -16
  53. package/templates/_base/home/.config/routes.json +10 -0
  54. package/templates/_base/home/VOLUTE.md +19 -28
  55. package/templates/_base/src/lib/file-handler.ts +46 -0
  56. package/templates/_base/src/lib/format-prefix.ts +1 -1
  57. package/templates/_base/src/lib/router.ts +327 -0
  58. package/templates/_base/src/lib/routing.ts +137 -0
  59. package/templates/_base/src/lib/types.ts +16 -3
  60. package/templates/_base/src/lib/volute-server.ts +20 -48
  61. package/templates/agent-sdk/.init/.config/routes.json +5 -0
  62. package/templates/agent-sdk/.init/CLAUDE.md +2 -2
  63. package/templates/agent-sdk/src/agent.ts +269 -82
  64. package/templates/agent-sdk/src/server.ts +19 -4
  65. package/templates/agent-sdk/volute-template.json +1 -1
  66. package/templates/pi/.init/.config/routes.json +5 -0
  67. package/templates/pi/.init/AGENTS.md +1 -1
  68. package/templates/pi/src/agent.ts +279 -58
  69. package/templates/pi/src/server.ts +15 -4
  70. package/templates/pi/volute-template.json +1 -1
  71. package/dist/channel-7FZ6D25H.js +0 -90
  72. package/dist/chunk-N4YNKR3Q.js +0 -90
  73. package/dist/connector-TVJULIRT.js +0 -96
  74. package/dist/create-BRG2DBWI.js +0 -79
  75. package/dist/send-UK3JBZIB.js +0 -53
  76. package/dist/web-assets/assets/index-BC5eSqbY.js +0 -296
  77. package/templates/_base/src/lib/sessions.ts +0 -71
  78. package/templates/agent-sdk/.init/.config/sessions.json +0 -4
  79. package/templates/agent-sdk/src/lib/agent-sessions.ts +0 -204
  80. package/templates/pi/.init/.config/sessions.json +0 -1
  81. package/templates/pi/src/lib/agent-sessions.ts +0 -210
  82. package/dist/{service-SA4TTMDU.js → service-HZNIDNJF.js} +3 -3
@@ -1,16 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
- deleteAgentUser
4
- } from "./chunk-SOZA2TLP.js";
3
+ resolveAgentName
4
+ } from "./chunk-AZEL2IEK.js";
5
5
  import {
6
6
  parseArgs
7
7
  } from "./chunk-D424ZQGI.js";
8
+ import {
9
+ deleteAgentUser
10
+ } from "./chunk-UAVD2AHX.js";
8
11
  import {
9
12
  agentDir,
10
13
  findAgent,
11
14
  removeAgent,
12
15
  removeAllVariants
13
- } from "./chunk-3C2XR4IY.js";
16
+ } from "./chunk-UX25Z2ND.js";
14
17
  import "./chunk-K3NQKI34.js";
15
18
 
16
19
  // src/commands/delete.ts
@@ -19,18 +22,14 @@ async function run(args) {
19
22
  const { positional, flags } = parseArgs(args, {
20
23
  force: { type: "boolean" }
21
24
  });
22
- const name = positional[0];
23
- if (!name) {
24
- console.error("Usage: volute delete <name> [--force]");
25
- process.exit(1);
26
- }
25
+ const name = resolveAgentName({ agent: positional[0] });
27
26
  const entry = findAgent(name);
28
27
  if (!entry) {
29
28
  console.error(`Unknown agent: ${name}`);
30
29
  process.exit(1);
31
30
  }
32
31
  try {
33
- const { daemonFetch } = await import("./daemon-client-XR24PUJF.js");
32
+ const { daemonFetch } = await import("./daemon-client-ZY6UUN2M.js");
34
33
  const res = await daemonFetch(`/api/agents/${encodeURIComponent(name)}/stop`, {
35
34
  method: "POST"
36
35
  });
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  voluteHome
4
- } from "./chunk-3C2XR4IY.js";
4
+ } from "./chunk-UX25Z2ND.js";
5
5
  import "./chunk-K3NQKI34.js";
6
6
 
7
7
  // src/commands/down.ts
@@ -5,13 +5,13 @@ import {
5
5
  readEnv,
6
6
  sharedEnvPath,
7
7
  writeEnv
8
- } from "./chunk-DNOXHLE5.js";
8
+ } from "./chunk-HE67X4T6.js";
9
9
  import {
10
10
  parseArgs
11
11
  } from "./chunk-D424ZQGI.js";
12
12
  import {
13
13
  resolveAgent
14
- } from "./chunk-3C2XR4IY.js";
14
+ } from "./chunk-UX25Z2ND.js";
15
15
  import "./chunk-K3NQKI34.js";
16
16
 
17
17
  // src/commands/env.ts
@@ -153,12 +153,15 @@ async function run(args) {
153
153
  console.log(`Removed ${key} [${scope}]`);
154
154
  break;
155
155
  }
156
+ case "--help":
157
+ case "-h":
158
+ case void 0:
159
+ console.log(`Usage: volute env <set|get|list|remove> [--agent <name>]`);
160
+ break;
156
161
  default:
157
162
  console.error(`Usage: volute env <set|get|list|remove> [--agent <name>]`);
158
- if (subcommand) {
159
- console.error(`
163
+ console.error(`
160
164
  Unknown subcommand: ${subcommand}`);
161
- }
162
165
  process.exit(1);
163
166
  }
164
167
  }
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- daemonFetch
4
- } from "./chunk-YGFIWIOF.js";
5
2
  import {
6
3
  resolveAgentName
7
- } from "./chunk-VRVVQIYY.js";
4
+ } from "./chunk-AZEL2IEK.js";
8
5
  import {
9
6
  parseArgs
10
7
  } from "./chunk-D424ZQGI.js";
11
- import "./chunk-3C2XR4IY.js";
8
+ import {
9
+ daemonFetch
10
+ } from "./chunk-7L4AN5D4.js";
11
+ import "./chunk-UX25Z2ND.js";
12
12
  import "./chunk-K3NQKI34.js";
13
13
 
14
14
  // src/commands/history.ts
@@ -7,25 +7,25 @@ import {
7
7
  agentEnvPath,
8
8
  readEnv,
9
9
  writeEnv
10
- } from "./chunk-DNOXHLE5.js";
10
+ } from "./chunk-HE67X4T6.js";
11
11
  import {
12
12
  composeTemplate,
13
13
  copyTemplateToDir,
14
14
  findTemplatesRoot
15
- } from "./chunk-GSPKUPKU.js";
15
+ } from "./chunk-XUA3JUFK.js";
16
+ import {
17
+ parseArgs
18
+ } from "./chunk-D424ZQGI.js";
16
19
  import {
17
20
  exec,
18
21
  execInherit
19
22
  } from "./chunk-5SKQ6J7T.js";
20
- import {
21
- parseArgs
22
- } from "./chunk-D424ZQGI.js";
23
23
  import {
24
24
  addAgent,
25
25
  agentDir,
26
26
  ensureVoluteHome,
27
27
  nextPort
28
- } from "./chunk-3C2XR4IY.js";
28
+ } from "./chunk-UX25Z2ND.js";
29
29
  import "./chunk-K3NQKI34.js";
30
30
 
31
31
  // src/commands/import.ts
@@ -394,7 +394,7 @@ ${user.trimEnd()}
394
394
  console.log(`
395
395
  Imported agent: ${name} (port ${port})`);
396
396
  console.log(`
397
- volute start ${name}`);
397
+ volute agent start ${name}`);
398
398
  }
399
399
  function resolveWorkspace(explicitPath) {
400
400
  if (explicitPath) {
@@ -416,7 +416,7 @@ function resolveWorkspace(explicitPath) {
416
416
  return openclawWs;
417
417
  }
418
418
  console.error(
419
- "Usage: volute import [<workspace-path>] [--name <name>] [--session <path>] [--template <name>]\n\nNo OpenClaw workspace found. Provide a path, run from a workspace, or ensure ~/.openclaw/workspace exists."
419
+ "Usage: volute agent import [<workspace-path>] [--name <name>] [--session <path>] [--template <name>]\n\nNo OpenClaw workspace found. Provide a path, run from a workspace, or ensure ~/.openclaw/workspace exists."
420
420
  );
421
421
  process.exit(1);
422
422
  }
@@ -491,12 +491,27 @@ function importOpenClawConnectors(agentDirPath) {
491
491
  const env = readEnv(envPath);
492
492
  env.DISCORD_TOKEN = discord.token;
493
493
  writeEnv(envPath, env);
494
+ const channelNames = /* @__PURE__ */ new Set();
495
+ if (discord.guilds) {
496
+ for (const guild of Object.values(discord.guilds)) {
497
+ if (!guild.channels) continue;
498
+ for (const [name, ch] of Object.entries(guild.channels)) {
499
+ if (ch.allow) channelNames.add(name);
500
+ }
501
+ }
502
+ }
494
503
  const voluteConfig = readVoluteConfig(agentDirPath) ?? {};
495
504
  const connectors = new Set(voluteConfig.connectors ?? []);
496
505
  connectors.add("discord");
497
506
  voluteConfig.connectors = [...connectors];
507
+ if (channelNames.size > 0) {
508
+ voluteConfig.discord = { channels: [...channelNames] };
509
+ }
498
510
  writeVoluteConfig(agentDirPath, voluteConfig);
499
511
  console.log("Imported Discord connector config");
512
+ if (channelNames.size > 0) {
513
+ console.log(`Imported followed channels: ${[...channelNames].join(", ")}`);
514
+ }
500
515
  }
501
516
  function parseNameFromIdentity(identity) {
502
517
  const match = identity.match(/\*\*Name:\*\*\s*(.+)/);
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  resolveAgentName
4
- } from "./chunk-VRVVQIYY.js";
4
+ } from "./chunk-AZEL2IEK.js";
5
5
  import {
6
6
  parseArgs
7
7
  } from "./chunk-D424ZQGI.js";
8
8
  import {
9
9
  resolveAgent
10
- } from "./chunk-3C2XR4IY.js";
10
+ } from "./chunk-UX25Z2ND.js";
11
11
  import "./chunk-K3NQKI34.js";
12
12
 
13
13
  // src/commands/logs.ts
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env node
2
+ import "./chunk-K3NQKI34.js";
3
+
4
+ // src/commands/message.ts
5
+ async function run(args) {
6
+ const subcommand = args[0];
7
+ switch (subcommand) {
8
+ case "send":
9
+ await import("./send-66QMKRUH.js").then((m) => m.run(args.slice(1)));
10
+ break;
11
+ case "history":
12
+ await import("./history-OEONB53Z.js").then((m) => m.run(args.slice(1)));
13
+ break;
14
+ case "--help":
15
+ case "-h":
16
+ case void 0:
17
+ printUsage();
18
+ break;
19
+ default:
20
+ printUsage();
21
+ process.exit(1);
22
+ }
23
+ }
24
+ function printUsage() {
25
+ console.log(`Usage:
26
+ volute message send <name> "<msg>"
27
+ echo "msg" | volute message send <name>
28
+ volute message history [--agent <name>] [--channel <ch>] [--limit N]`);
29
+ }
30
+ export {
31
+ run
32
+ };
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env node
2
+ import "./chunk-K3NQKI34.js";
3
+
4
+ // package.json
5
+ var package_default = {
6
+ name: "volute",
7
+ version: "0.5.0",
8
+ description: "CLI for creating and managing self-modifying AI agents powered by the Claude Agent SDK",
9
+ type: "module",
10
+ license: "MIT",
11
+ repository: {
12
+ type: "git",
13
+ url: "https://github.com/mimsy/volute.git"
14
+ },
15
+ keywords: [
16
+ "cli",
17
+ "ai",
18
+ "agents",
19
+ "claude",
20
+ "anthropic"
21
+ ],
22
+ engines: {
23
+ node: ">=22"
24
+ },
25
+ bin: {
26
+ volute: "dist/cli.js"
27
+ },
28
+ files: [
29
+ "dist/",
30
+ "drizzle/",
31
+ "templates/"
32
+ ],
33
+ scripts: {
34
+ dev: "tsx src/cli.ts",
35
+ build: "tsup && npm run build:web",
36
+ "build:web": "vite build --config src/web/frontend/vite.config.ts",
37
+ "dev:web": "vite --config src/web/frontend/vite.config.ts",
38
+ test: "node --import tsx --import ./test/setup.ts --test --test-force-exit --test-concurrency=1 test/*.test.ts",
39
+ lint: "biome check src/ test/",
40
+ "lint:fix": "biome check --write src/ test/",
41
+ format: "biome format --write src/ test/",
42
+ typecheck: "tsc --noEmit",
43
+ "typecheck:templates": "tsc --noEmit -p templates/agent-sdk/tsconfig.json && tsc --noEmit -p templates/pi/tsconfig.json",
44
+ "lint:templates": "biome check templates/",
45
+ "typecheck:web": "tsc --noEmit -p src/web/frontend/tsconfig.json",
46
+ prepare: "lefthook install",
47
+ prepublishOnly: "npm run build",
48
+ "db:generate": "drizzle-kit generate",
49
+ "db:migrate": "drizzle-kit migrate"
50
+ },
51
+ dependencies: {
52
+ "@hono/node-server": "^1.19.9",
53
+ "@hono/zod-validator": "^0.7.6",
54
+ "@libsql/client": "^0.17.0",
55
+ "@slack/bolt": "^4.6.0",
56
+ bcryptjs: "^3.0.3",
57
+ "cron-parser": "^5.5.0",
58
+ "discord.js": "^14.25.1",
59
+ "drizzle-orm": "^0.45.1",
60
+ hono: "^4.11.7",
61
+ telegraf: "^4.16.3",
62
+ zod: "^4.3.6"
63
+ },
64
+ devDependencies: {
65
+ "@anthropic-ai/claude-agent-sdk": "^0.2.34",
66
+ "@biomejs/biome": "2.3.14",
67
+ "@mariozechner/pi-ai": "^0.52.7",
68
+ "@mariozechner/pi-coding-agent": "^0.52.7",
69
+ "@types/bcryptjs": "^2.4.6",
70
+ "@types/dompurify": "^3.0.5",
71
+ "@types/node": "^25.2.0",
72
+ "@types/react": "^19.2.11",
73
+ "@types/react-dom": "^19.2.3",
74
+ "@vitejs/plugin-react": "^5.1.3",
75
+ dompurify: "^3.3.1",
76
+ "drizzle-kit": "^0.31.8",
77
+ lefthook: "^2.1.0",
78
+ marked: "^17.0.1",
79
+ react: "^19.2.4",
80
+ "react-dom": "^19.2.4",
81
+ tsup: "^8.0.0",
82
+ tsx: "^4.0.0",
83
+ typescript: "^5.7.0",
84
+ vite: "^7.3.1"
85
+ }
86
+ };
87
+ export {
88
+ package_default as default
89
+ };
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- daemonFetch
4
- } from "./chunk-YGFIWIOF.js";
5
2
  import {
6
3
  resolveAgentName
7
- } from "./chunk-VRVVQIYY.js";
4
+ } from "./chunk-AZEL2IEK.js";
8
5
  import {
9
6
  parseArgs
10
7
  } from "./chunk-D424ZQGI.js";
11
- import "./chunk-3C2XR4IY.js";
8
+ import {
9
+ daemonFetch
10
+ } from "./chunk-7L4AN5D4.js";
11
+ import "./chunk-UX25Z2ND.js";
12
12
  import "./chunk-K3NQKI34.js";
13
13
 
14
14
  // src/commands/schedule.ts
@@ -24,13 +24,18 @@ async function run(args) {
24
24
  case "remove":
25
25
  await removeSchedule(args.slice(1));
26
26
  break;
27
+ case "--help":
28
+ case "-h":
29
+ case void 0:
30
+ printUsage();
31
+ break;
27
32
  default:
28
33
  printUsage();
29
- process.exit(subcommand ? 1 : 0);
34
+ process.exit(1);
30
35
  }
31
36
  }
32
37
  function printUsage() {
33
- console.error(`Usage:
38
+ console.log(`Usage:
34
39
  volute schedule list [--agent <name>]
35
40
  volute schedule add [--agent <name>] --cron "..." --message "..." [--id name]
36
41
  volute schedule remove [--agent <name>] --id <id>`);
@@ -0,0 +1,75 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ readStdin
4
+ } from "./chunk-ZYGKG6VC.js";
5
+ import {
6
+ summarizeTool
7
+ } from "./chunk-B3R6L2GW.js";
8
+ import {
9
+ daemonFetch
10
+ } from "./chunk-7L4AN5D4.js";
11
+ import "./chunk-UX25Z2ND.js";
12
+ import "./chunk-K3NQKI34.js";
13
+
14
+ // src/commands/send.ts
15
+ import { userInfo } from "os";
16
+ async function run(args) {
17
+ const name = args[0];
18
+ const message = args[1] ?? await readStdin();
19
+ if (!name || !message) {
20
+ console.error('Usage: volute message send <name> "<message>"');
21
+ console.error(' echo "message" | volute message send <name>');
22
+ process.exit(1);
23
+ }
24
+ const agentSelf = process.env.VOLUTE_AGENT;
25
+ const sender = agentSelf || userInfo().username;
26
+ const res = await daemonFetch(`/api/agents/${encodeURIComponent(name)}/chat`, {
27
+ method: "POST",
28
+ headers: { "Content-Type": "application/json" },
29
+ body: JSON.stringify({ message, sender })
30
+ });
31
+ if (!res.ok) {
32
+ const data = await res.json();
33
+ console.error(data.error ?? `Failed to send message: ${res.status}`);
34
+ process.exit(1);
35
+ }
36
+ if (!res.body) {
37
+ console.error("No response body");
38
+ process.exit(1);
39
+ }
40
+ const reader = res.body.getReader();
41
+ const decoder = new TextDecoder();
42
+ let buffer = "";
43
+ while (true) {
44
+ const { done, value } = await reader.read();
45
+ if (done) break;
46
+ buffer += decoder.decode(value, { stream: true });
47
+ const lines = buffer.split("\n");
48
+ buffer = lines.pop() ?? "";
49
+ for (const line of lines) {
50
+ if (!line.startsWith("data:")) continue;
51
+ const data = line.slice(5).trim();
52
+ if (!data) continue;
53
+ let event;
54
+ try {
55
+ event = JSON.parse(data);
56
+ } catch {
57
+ continue;
58
+ }
59
+ if (event.type === "text") {
60
+ process.stdout.write(event.content);
61
+ } else if (event.type === "tool_use") {
62
+ process.stderr.write(`${summarizeTool(event.name, event.input)}
63
+ `);
64
+ }
65
+ if (event.type === "done") {
66
+ process.stdout.write("\n");
67
+ return;
68
+ }
69
+ }
70
+ }
71
+ process.stdout.write("\n");
72
+ }
73
+ export {
74
+ run
75
+ };
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
- resolveVoluteBin
4
- } from "./chunk-5SKQ6J7T.js";
3
+ parseArgs
4
+ } from "./chunk-D424ZQGI.js";
5
5
  import {
6
6
  ensureVoluteGroup
7
- } from "./chunk-SOZA2TLP.js";
7
+ } from "./chunk-UAVD2AHX.js";
8
8
  import {
9
- parseArgs
10
- } from "./chunk-D424ZQGI.js";
11
- import "./chunk-3C2XR4IY.js";
9
+ resolveVoluteBin
10
+ } from "./chunk-5SKQ6J7T.js";
11
+ import "./chunk-UX25Z2ND.js";
12
12
  import "./chunk-K3NQKI34.js";
13
13
 
14
14
  // src/commands/setup.ts
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  daemonFetch
4
- } from "./chunk-YGFIWIOF.js";
4
+ } from "./chunk-7L4AN5D4.js";
5
5
  import {
6
6
  resolveAgent
7
- } from "./chunk-3C2XR4IY.js";
7
+ } from "./chunk-UX25Z2ND.js";
8
8
  import "./chunk-K3NQKI34.js";
9
9
 
10
10
  // src/commands/start.ts
11
11
  async function run(args) {
12
12
  const name = args[0];
13
13
  if (!name) {
14
- console.error("Usage: volute start <name>");
14
+ console.error("Usage: volute agent start <name>");
15
15
  process.exit(1);
16
16
  }
17
17
  const { entry } = resolveAgent(name);
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  daemonFetch
4
- } from "./chunk-YGFIWIOF.js";
5
- import "./chunk-3C2XR4IY.js";
4
+ } from "./chunk-7L4AN5D4.js";
5
+ import "./chunk-UX25Z2ND.js";
6
6
  import "./chunk-K3NQKI34.js";
7
7
 
8
8
  // src/commands/status.ts
@@ -17,7 +17,7 @@ async function run(args) {
17
17
  }
18
18
  const agents = await res2.json();
19
19
  if (agents.length === 0) {
20
- console.log("No agents registered. Create one with: volute create <name>");
20
+ console.log("No agents registered. Create one with: volute agent create <name>");
21
21
  return;
22
22
  }
23
23
  const nameW = Math.max(4, ...agents.map((a) => a.name.length));
@@ -1,19 +1,18 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ resolveAgentName
4
+ } from "./chunk-AZEL2IEK.js";
2
5
  import {
3
6
  daemonFetch
4
- } from "./chunk-YGFIWIOF.js";
7
+ } from "./chunk-7L4AN5D4.js";
5
8
  import {
6
9
  resolveAgent
7
- } from "./chunk-3C2XR4IY.js";
10
+ } from "./chunk-UX25Z2ND.js";
8
11
  import "./chunk-K3NQKI34.js";
9
12
 
10
13
  // src/commands/stop.ts
11
14
  async function run(args) {
12
- const name = args[0];
13
- if (!name) {
14
- console.error("Usage: volute stop <name>");
15
- process.exit(1);
16
- }
15
+ const name = resolveAgentName({ agent: args[0] });
17
16
  resolveAgent(name);
18
17
  const res = await daemonFetch(`/api/agents/${encodeURIComponent(name)}/stop`, {
19
18
  method: "POST"
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-D424ZQGI.js";
5
5
  import {
6
6
  voluteHome
7
- } from "./chunk-3C2XR4IY.js";
7
+ } from "./chunk-UX25Z2ND.js";
8
8
  import "./chunk-K3NQKI34.js";
9
9
 
10
10
  // src/commands/up.ts
@@ -58,7 +58,7 @@ async function run(args) {
58
58
  process.execPath,
59
59
  [daemonModule, "--port", String(port), "--host", hostname],
60
60
  {
61
- stdio: ["ignore", logFd, logFd],
61
+ stdio: ["ignore", "ignore", logFd],
62
62
  detached: true
63
63
  }
64
64
  );