volute 0.13.2 → 0.14.1

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 (94) hide show
  1. package/dist/{channel-JZJJRRWT.js → channel-SLURLIRV.js} +28 -28
  2. package/dist/{chunk-KRJ6KCBI.js → chunk-2Y77MCFG.js} +3 -3
  3. package/dist/{chunk-AA5TDLXB.js → chunk-3FC42ZBM.js} +24 -24
  4. package/dist/{chunk-YYUSXARD.js → chunk-6BDNWYKG.js} +2 -2
  5. package/dist/{chunk-KN4WBLH2.js → chunk-BEFIBW5B.js} +2 -2
  6. package/dist/{chunk-FE5O5RSL.js → chunk-GSPWIM5E.js} +25 -25
  7. package/dist/{chunk-QRRXD2V7.js → chunk-J52CJCVI.js} +71 -69
  8. package/dist/{chunk-LGSW7T7K.js → chunk-M77QBTEH.js} +60 -57
  9. package/dist/{chunk-KXOFPDO6.js → chunk-MVSXRMJJ.js} +1 -1
  10. package/dist/chunk-NAOW2CLO.js +15 -0
  11. package/dist/{chunk-VQIJUR43.js → chunk-OJQ47SCA.js} +1 -1
  12. package/dist/{chunk-O4BN3ZIY.js → chunk-OYSZNX5I.js} +7 -7
  13. package/dist/{chunk-AOSGW3MX.js → chunk-PDLAZJGC.js} +28 -28
  14. package/dist/{chunk-XUA3JUFK.js → chunk-PO5Q2AYN.js} +2 -2
  15. package/dist/{chunk-6BQHEIDO.js → chunk-QJIIHU32.js} +2 -2
  16. package/dist/{chunk-NXT67PPK.js → chunk-ZCEYUUID.js} +19 -19
  17. package/dist/cli.js +42 -42
  18. package/dist/{connector-WFT5KK67.js → connector-JFAHYFQX.js} +21 -21
  19. package/dist/connectors/discord.js +7 -7
  20. package/dist/connectors/slack.js +7 -7
  21. package/dist/connectors/telegram.js +9 -9
  22. package/dist/{create-HT47ZH5T.js → create-ZWHCRT5F.js} +7 -7
  23. package/dist/{daemon-client-DEF7IFEJ.js → daemon-client-ODKDUYDE.js} +2 -2
  24. package/dist/{daemon-restart-P3FEE3QJ.js → daemon-restart-IZGEF4NA.js} +6 -6
  25. package/dist/daemon.js +2313 -1997
  26. package/dist/{delete-YG3RVURA.js → delete-6G6WEX4F.js} +8 -8
  27. package/dist/down-A56B5JLK.js +14 -0
  28. package/dist/{env-BQYYF4YL.js → env-6LXDUZDA.js} +25 -25
  29. package/dist/{history-I4KIKIUX.js → history-LKCJJMUV.js} +7 -7
  30. package/dist/{import-UHCK6PRC.js → import-EDGRLIGO.js} +3 -3
  31. package/dist/{logs-2DWFES6A.js → logs-GYOR3L2L.js} +8 -8
  32. package/dist/mind-OJN6RBZW.js +79 -0
  33. package/dist/mind-manager-PN5SUDJ4.js +15 -0
  34. package/dist/{package-MMTPOMUN.js → package-I7Z6G44Y.js} +4 -4
  35. package/dist/{restart-6PE3GWYZ.js → restart-YFAWFS5T.js} +9 -9
  36. package/dist/{schedule-5AYTQM3N.js → schedule-AGYLDMNS.js} +17 -17
  37. package/dist/{seed-3QQVFMBU.js → seed-AP4Q7RZ7.js} +9 -9
  38. package/dist/{send-FPFW7J5Q.js → send-SV4K2TDE.js} +32 -24
  39. package/dist/{service-5X5EKPVM.js → service-U7MZ2H7F.js} +4 -4
  40. package/dist/{setup-5NXV25ZS.js → setup-DJKIZKGW.js} +21 -16
  41. package/dist/{sprout-VOUJ4Y3I.js → sprout-TJ3BHVOG.js} +25 -18
  42. package/dist/{start-ICPSQ2ZK.js → start-3YYRXBKP.js} +7 -7
  43. package/dist/{status-JBT7ENQN.js → status-VSFZYX7S.js} +14 -14
  44. package/dist/{stop-IXJGAG4T.js → stop-AA5K5LYG.js} +9 -9
  45. package/dist/{up-ROC7LJ7G.js → up-C4MV6EXV.js} +5 -5
  46. package/dist/{update-GU6JYDSN.js → update-YAGN5ODG.js} +5 -5
  47. package/dist/{update-check-MUPZYTW4.js → update-check-APLTH4IN.js} +2 -2
  48. package/dist/{upgrade-275LKIEG.js → upgrade-KXZCQSZN.js} +8 -10
  49. package/dist/{variant-RE45F2IY.js → variant-X5QFG6KK.js} +30 -30
  50. package/dist/web-assets/assets/index-CeFLp8DZ.js +307 -0
  51. package/dist/web-assets/index.html +1 -1
  52. package/drizzle/0005_rename_agents_to_minds.sql +11 -0
  53. package/drizzle/meta/0005_snapshot.json +410 -0
  54. package/drizzle/meta/_journal.json +7 -0
  55. package/package.json +4 -4
  56. package/templates/_base/.init/.config/scripts/session-reader.ts +1 -1
  57. package/templates/_base/.init/SOUL.md +1 -1
  58. package/templates/_base/_skills/memory/SKILL.md +1 -1
  59. package/templates/_base/_skills/orientation/SKILL.md +6 -6
  60. package/templates/_base/_skills/sessions/SKILL.md +1 -1
  61. package/templates/_base/_skills/{volute-agent → volute-mind}/SKILL.md +21 -21
  62. package/templates/_base/home/VOLUTE.md +7 -7
  63. package/templates/_base/src/lib/auto-commit.ts +1 -1
  64. package/templates/_base/src/lib/auto-reply.ts +1 -1
  65. package/templates/_base/src/lib/daemon-client.ts +8 -8
  66. package/templates/_base/src/lib/router.ts +6 -6
  67. package/templates/_base/src/lib/routing.ts +9 -6
  68. package/templates/_base/src/lib/startup.ts +1 -1
  69. package/templates/_base/src/lib/volute-server.ts +1 -1
  70. package/templates/{agent-sdk → claude}/.init/CLAUDE.md +3 -3
  71. package/templates/{agent-sdk → claude}/src/agent.ts +10 -10
  72. package/templates/{agent-sdk → claude}/src/lib/hooks/pre-compact.ts +2 -2
  73. package/templates/{agent-sdk → claude}/src/lib/session-store.ts +2 -2
  74. package/templates/{agent-sdk → claude}/src/lib/stream-consumer.ts +1 -1
  75. package/templates/{agent-sdk → claude}/src/server.ts +4 -4
  76. package/templates/pi/.init/{AGENTS.md → MINDS.md} +3 -3
  77. package/templates/pi/home/.config/config.json.tmpl +1 -1
  78. package/templates/pi/src/agent.ts +12 -12
  79. package/templates/pi/src/lib/event-handler.ts +39 -4
  80. package/templates/pi/src/server.ts +3 -3
  81. package/dist/agent-IUSETOXJ.js +0 -79
  82. package/dist/agent-manager-4O4AC2S6.js +0 -15
  83. package/dist/chunk-AZEL2IEK.js +0 -15
  84. package/dist/down-36YCOZ7V.js +0 -14
  85. package/dist/web-assets/assets/index-TqXd1QOX.js +0 -307
  86. /package/templates/{agent-sdk → claude}/.init/.claude/settings.json +0 -0
  87. /package/templates/{agent-sdk → claude}/.init/.config/routes.json +0 -0
  88. /package/templates/{agent-sdk → claude}/package.json.tmpl +0 -0
  89. /package/templates/{agent-sdk → claude}/src/lib/content.ts +0 -0
  90. /package/templates/{agent-sdk → claude}/src/lib/hooks/auto-commit.ts +0 -0
  91. /package/templates/{agent-sdk → claude}/src/lib/hooks/identity-reload.ts +0 -0
  92. /package/templates/{agent-sdk → claude}/src/lib/hooks/session-context.ts +0 -0
  93. /package/templates/{agent-sdk → claude}/src/lib/message-channel.ts +0 -0
  94. /package/templates/{agent-sdk → claude}/volute-template.json +0 -0
@@ -1,20 +1,20 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
- resolveAgentName
4
- } from "./chunk-AZEL2IEK.js";
3
+ resolveMindName
4
+ } from "./chunk-NAOW2CLO.js";
5
5
  import {
6
6
  getChannelDriver
7
- } from "./chunk-AOSGW3MX.js";
7
+ } from "./chunk-PDLAZJGC.js";
8
8
  import {
9
9
  parseArgs
10
10
  } from "./chunk-D424ZQGI.js";
11
- import "./chunk-AA5TDLXB.js";
11
+ import "./chunk-3FC42ZBM.js";
12
12
  import {
13
13
  daemonFetch
14
- } from "./chunk-VQIJUR43.js";
14
+ } from "./chunk-OJQ47SCA.js";
15
15
  import {
16
- findAgent
17
- } from "./chunk-LGSW7T7K.js";
16
+ findMind
17
+ } from "./chunk-M77QBTEH.js";
18
18
  import {
19
19
  getClient,
20
20
  urlOf
@@ -73,16 +73,16 @@ async function readStdin() {
73
73
  // src/commands/send.ts
74
74
  async function run(args) {
75
75
  const { positional, flags } = parseArgs(args, {
76
- agent: { type: "string" }
76
+ mind: { type: "string" }
77
77
  });
78
78
  const target = positional[0];
79
79
  const message = positional[1] ?? await readStdin();
80
80
  if (!target || !message) {
81
- console.error('Usage: volute send <target> "<message>" [--agent <name>]');
82
- console.error(' echo "message" | volute send <target> [--agent <name>]');
81
+ console.error('Usage: volute send <target> "<message>" [--mind <name>]');
82
+ console.error(' echo "message" | volute send <target> [--mind <name>]');
83
83
  console.error("");
84
84
  console.error("Examples:");
85
- console.error(' volute send @other-agent "hello"');
85
+ console.error(' volute send @other-mind "hello"');
86
86
  console.error(' volute send animal-chat "hello everyone"');
87
87
  console.error(' volute send discord:server/channel "hello"');
88
88
  process.exit(1);
@@ -94,7 +94,15 @@ To reply to a person, use their username from the message prefix (e.g. volute se
94
94
  );
95
95
  process.exit(1);
96
96
  }
97
- const parsed = parseTarget(target);
97
+ let parsed = parseTarget(target);
98
+ if (!parsed.isDM && parsed.platform === "volute" && findMind(parsed.identifier)) {
99
+ parsed = {
100
+ platform: "volute",
101
+ identifier: `@${parsed.identifier}`,
102
+ uri: `volute:@${parsed.identifier}`,
103
+ isDM: true
104
+ };
105
+ }
98
106
  const driver = getChannelDriver(parsed.platform);
99
107
  if (!driver) {
100
108
  console.error(`No driver for platform: ${parsed.platform}`);
@@ -103,17 +111,17 @@ To reply to a person, use their username from the message prefix (e.g. volute se
103
111
  let channelUri = parsed.uri;
104
112
  if (parsed.isDM && parsed.platform === "volute") {
105
113
  const targetName = parsed.identifier.slice(1);
106
- const agentSelf = process.env.VOLUTE_AGENT;
107
- const sender = agentSelf || userInfo().username;
114
+ const mindSelf = process.env.VOLUTE_MIND;
115
+ const sender = mindSelf || userInfo().username;
108
116
  if (!driver.createConversation) {
109
117
  console.error("Volute driver does not support creating conversations");
110
118
  process.exit(1);
111
119
  }
112
- const targetIsAgent = !!findAgent(targetName);
113
- const contextAgent = agentSelf && !targetIsAgent ? agentSelf : targetName;
114
- const participants = agentSelf && !targetIsAgent ? [targetName] : [sender];
120
+ const targetIsMind = !!findMind(targetName);
121
+ const contextMind = mindSelf && !targetIsMind ? mindSelf : targetName;
122
+ const participants = mindSelf && !targetIsMind ? [targetName] : [sender];
115
123
  const env = {
116
- VOLUTE_AGENT: contextAgent,
124
+ VOLUTE_MIND: contextMind,
117
125
  VOLUTE_SENDER: sender
118
126
  };
119
127
  try {
@@ -129,11 +137,11 @@ To reply to a person, use their username from the message prefix (e.g. volute se
129
137
  console.error(err instanceof Error ? err.message : String(err));
130
138
  process.exit(1);
131
139
  }
132
- if (agentSelf) {
140
+ if (mindSelf) {
133
141
  try {
134
142
  const client = getClient();
135
143
  await daemonFetch(
136
- urlOf(client.api.agents[":name"].history.$url({ param: { name: agentSelf } })),
144
+ urlOf(client.api.minds[":name"].history.$url({ param: { name: mindSelf } })),
137
145
  {
138
146
  method: "POST",
139
147
  headers: { "Content-Type": "application/json" },
@@ -145,10 +153,10 @@ To reply to a person, use their username from the message prefix (e.g. volute se
145
153
  }
146
154
  }
147
155
  } else {
148
- const agentName = resolveAgentName(flags);
156
+ const mindName = resolveMindName(flags);
149
157
  const client = getClient();
150
158
  const res = await daemonFetch(
151
- urlOf(client.api.agents[":name"].channels.send.$url({ param: { name: agentName } })),
159
+ urlOf(client.api.minds[":name"].channels.send.$url({ param: { name: mindName } })),
152
160
  {
153
161
  method: "POST",
154
162
  headers: { "Content-Type": "application/json" },
@@ -161,10 +169,10 @@ To reply to a person, use their username from the message prefix (e.g. volute se
161
169
  process.exit(1);
162
170
  }
163
171
  console.log("Message sent.");
164
- if (process.env.VOLUTE_AGENT) {
172
+ if (process.env.VOLUTE_MIND) {
165
173
  try {
166
174
  await daemonFetch(
167
- urlOf(client.api.agents[":name"].history.$url({ param: { name: agentName } })),
175
+ urlOf(client.api.minds[":name"].history.$url({ param: { name: mindName } })),
168
176
  {
169
177
  method: "POST",
170
178
  headers: { "Content-Type": "application/json" },
@@ -4,15 +4,15 @@ import {
4
4
  LAUNCHD_PLIST_PATH,
5
5
  SYSTEM_SERVICE_PATH,
6
6
  USER_SYSTEMD_UNIT
7
- } from "./chunk-YYUSXARD.js";
7
+ } from "./chunk-6BDNWYKG.js";
8
8
  import {
9
9
  resolveVoluteBin
10
- } from "./chunk-KRJ6KCBI.js";
11
- import "./chunk-NXT67PPK.js";
10
+ } from "./chunk-2Y77MCFG.js";
11
+ import "./chunk-ZCEYUUID.js";
12
12
  import {
13
13
  parseArgs
14
14
  } from "./chunk-D424ZQGI.js";
15
- import "./chunk-LGSW7T7K.js";
15
+ import "./chunk-M77QBTEH.js";
16
16
  import "./chunk-K3NQKI34.js";
17
17
 
18
18
  // src/commands/service.ts
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  SYSTEM_SERVICE_PATH
4
- } from "./chunk-YYUSXARD.js";
4
+ } from "./chunk-6BDNWYKG.js";
5
5
  import {
6
6
  resolveVoluteBin
7
- } from "./chunk-KRJ6KCBI.js";
7
+ } from "./chunk-2Y77MCFG.js";
8
8
  import {
9
9
  ensureVoluteGroup
10
- } from "./chunk-NXT67PPK.js";
10
+ } from "./chunk-ZCEYUUID.js";
11
11
  import {
12
12
  parseArgs
13
13
  } from "./chunk-D424ZQGI.js";
14
- import "./chunk-LGSW7T7K.js";
14
+ import "./chunk-M77QBTEH.js";
15
15
  import "./chunk-K3NQKI34.js";
16
16
 
17
17
  // src/commands/setup.ts
@@ -23,7 +23,8 @@ var SERVICE_NAME = "volute.service";
23
23
  var PROFILE_PATH = "/etc/profile.d/volute.sh";
24
24
  var WRAPPER_PATH = "/usr/local/bin/volute";
25
25
  var DATA_DIR = "/var/lib/volute";
26
- var AGENTS_DIR = "/agents";
26
+ var MINDS_DIR = "/minds";
27
+ var LEGACY_AGENTS_DIR = "/agents";
27
28
  var HOST_RE = /^[a-zA-Z0-9.:_-]+$/;
28
29
  function validateHost(host) {
29
30
  if (!HOST_RE.test(host)) {
@@ -51,7 +52,7 @@ function generateUnit(voluteBin, port, host) {
51
52
  const binUnderHome = voluteBin.startsWith(`${home}/`);
52
53
  const lines = [
53
54
  "[Unit]",
54
- "Description=Volute Agent Manager",
55
+ "Description=Volute Mind Manager",
55
56
  "After=network.target",
56
57
  "",
57
58
  "[Service]",
@@ -59,12 +60,12 @@ function generateUnit(voluteBin, port, host) {
59
60
  `ExecStart=${voluteBin} ${args.join(" ")}`,
60
61
  `Environment=PATH=${buildServicePath(voluteBin)}`,
61
62
  `Environment=VOLUTE_HOME=${DATA_DIR}`,
62
- `Environment=VOLUTE_AGENTS_DIR=${AGENTS_DIR}`,
63
+ `Environment=VOLUTE_MINDS_DIR=${MINDS_DIR}`,
63
64
  "Environment=VOLUTE_ISOLATION=user",
64
65
  "Restart=on-failure",
65
66
  "RestartSec=5",
66
67
  "ProtectSystem=true",
67
- `ReadWritePaths=${DATA_DIR} ${AGENTS_DIR}`,
68
+ `ReadWritePaths=${DATA_DIR} ${MINDS_DIR}`,
68
69
  "PrivateTmp=yes"
69
70
  ];
70
71
  if (!binUnderHome) {
@@ -90,17 +91,17 @@ function install(port, host) {
90
91
  const voluteBin = resolveVoluteBin();
91
92
  mkdirSync(DATA_DIR, { recursive: true });
92
93
  console.log(`Created ${DATA_DIR}`);
93
- mkdirSync(AGENTS_DIR, { recursive: true });
94
- console.log(`Created ${AGENTS_DIR}`);
94
+ mkdirSync(MINDS_DIR, { recursive: true });
95
+ console.log(`Created ${MINDS_DIR}`);
95
96
  ensureVoluteGroup({ force: true });
96
97
  console.log("Ensured volute group exists");
97
98
  execFileSync("chmod", ["755", DATA_DIR]);
98
- execFileSync("chmod", ["755", AGENTS_DIR]);
99
+ execFileSync("chmod", ["755", MINDS_DIR]);
99
100
  console.log("Set permissions on directories");
100
101
  writeFileSync(
101
102
  PROFILE_PATH,
102
103
  `export VOLUTE_HOME=${DATA_DIR}
103
- export VOLUTE_AGENTS_DIR=${AGENTS_DIR}
104
+ export VOLUTE_MINDS_DIR=${MINDS_DIR}
104
105
  `
105
106
  );
106
107
  console.log(`Wrote ${PROFILE_PATH}`);
@@ -109,7 +110,7 @@ export VOLUTE_AGENTS_DIR=${AGENTS_DIR}
109
110
  const wrapper = `#!/bin/sh
110
111
  export PATH="${binDir}:$PATH"
111
112
  export VOLUTE_HOME="${DATA_DIR}"
112
- export VOLUTE_AGENTS_DIR="${AGENTS_DIR}"
113
+ export VOLUTE_MINDS_DIR="${MINDS_DIR}"
113
114
  exec "${voluteBin}" "$@"
114
115
  `;
115
116
  writeFileSync(WRAPPER_PATH, wrapper, { mode: 493 });
@@ -192,9 +193,13 @@ function uninstall(force) {
192
193
  rmSync(DATA_DIR, { recursive: true, force: true });
193
194
  console.log(`Deleted ${DATA_DIR}`);
194
195
  }
195
- if (existsSync(AGENTS_DIR)) {
196
- rmSync(AGENTS_DIR, { recursive: true, force: true });
197
- console.log(`Deleted ${AGENTS_DIR}`);
196
+ if (existsSync(MINDS_DIR)) {
197
+ rmSync(MINDS_DIR, { recursive: true, force: true });
198
+ console.log(`Deleted ${MINDS_DIR}`);
199
+ }
200
+ if (existsSync(LEGACY_AGENTS_DIR)) {
201
+ rmSync(LEGACY_AGENTS_DIR, { recursive: true, force: true });
202
+ console.log(`Deleted ${LEGACY_AGENTS_DIR} (legacy)`);
198
203
  }
199
204
  try {
200
205
  execFileSync("groupdel", ["volute"], { stdio: "ignore" });
@@ -2,12 +2,11 @@
2
2
  import {
3
3
  composeTemplate,
4
4
  findTemplatesRoot
5
- } from "./chunk-XUA3JUFK.js";
5
+ } from "./chunk-PO5Q2AYN.js";
6
6
  import {
7
- agentDir,
8
- findAgent,
9
- setAgentStage
10
- } from "./chunk-LGSW7T7K.js";
7
+ findMind,
8
+ mindDir
9
+ } from "./chunk-M77QBTEH.js";
11
10
  import "./chunk-K3NQKI34.js";
12
11
 
13
12
  // src/commands/sprout.ts
@@ -15,21 +14,21 @@ import { cpSync, existsSync, readFileSync, rmSync } from "fs";
15
14
  import { resolve } from "path";
16
15
  var ORIENTATION_MARKER = "You don't have a soul yet";
17
16
  async function run(_args) {
18
- const agentName = process.env.VOLUTE_AGENT;
19
- if (!agentName) {
20
- console.error("volute sprout must be run by an agent (VOLUTE_AGENT not set)");
17
+ const mindName = process.env.VOLUTE_MIND;
18
+ if (!mindName) {
19
+ console.error("volute sprout must be run by a mind (VOLUTE_MIND not set)");
21
20
  process.exit(1);
22
21
  }
23
- const entry = findAgent(agentName);
22
+ const entry = findMind(mindName);
24
23
  if (!entry) {
25
- console.error(`Unknown agent: ${agentName}`);
24
+ console.error(`Unknown mind: ${mindName}`);
26
25
  process.exit(1);
27
26
  }
28
27
  if (entry.stage !== "seed") {
29
- console.error(`${agentName} is not a seed \u2014 already at stage "${entry.stage}"`);
28
+ console.error(`${mindName} is not a seed \u2014 already at stage "${entry.stage}"`);
30
29
  process.exit(1);
31
30
  }
32
- const dir = agentDir(agentName);
31
+ const dir = mindDir(mindName);
33
32
  const soulPath = resolve(dir, "home/SOUL.md");
34
33
  const memoryPath = resolve(dir, "home/MEMORY.md");
35
34
  if (!existsSync(soulPath)) {
@@ -48,11 +47,11 @@ async function run(_args) {
48
47
  process.exit(1);
49
48
  }
50
49
  const templatesRoot = findTemplatesRoot();
51
- const { composedDir, manifest } = composeTemplate(templatesRoot, "agent-sdk");
50
+ const { composedDir, manifest } = composeTemplate(templatesRoot, "claude");
52
51
  try {
53
52
  const skillsDir = resolve(dir, manifest.skillsDir);
54
53
  const composedSkillsDir = resolve(composedDir, manifest.skillsDir);
55
- for (const skill of ["volute-agent", "memory", "sessions"]) {
54
+ for (const skill of ["volute-mind", "memory", "sessions"]) {
56
55
  const src = resolve(composedSkillsDir, skill);
57
56
  if (existsSync(src)) {
58
57
  cpSync(src, resolve(skillsDir, skill), { recursive: true });
@@ -65,12 +64,20 @@ async function run(_args) {
65
64
  } finally {
66
65
  rmSync(composedDir, { recursive: true, force: true });
67
66
  }
68
- setAgentStage(agentName, "mind");
69
- const { daemonFetch } = await import("./daemon-client-DEF7IFEJ.js");
67
+ const { daemonFetch } = await import("./daemon-client-ODKDUYDE.js");
70
68
  const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
71
69
  const client = getClient();
70
+ const sproutRes = await daemonFetch(
71
+ urlOf(client.api.minds[":name"].sprout.$url({ param: { name: mindName } })),
72
+ { method: "POST" }
73
+ );
74
+ if (!sproutRes.ok) {
75
+ const data = await sproutRes.json();
76
+ console.error(data.error ?? "Failed to update stage");
77
+ process.exit(1);
78
+ }
72
79
  const res = await daemonFetch(
73
- urlOf(client.api.agents[":name"].restart.$url({ param: { name: agentName } })),
80
+ urlOf(client.api.minds[":name"].restart.$url({ param: { name: mindName } })),
74
81
  {
75
82
  method: "POST",
76
83
  headers: { "Content-Type": "application/json" },
@@ -82,7 +89,7 @@ async function run(_args) {
82
89
  console.error(data.error ?? "Failed to restart after sprouting");
83
90
  process.exit(1);
84
91
  }
85
- console.log("Sprouted! You now have full agent capabilities.");
92
+ console.log("Sprouted! You now have full mind capabilities.");
86
93
  }
87
94
  export {
88
95
  run
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  daemonFetch
4
- } from "./chunk-VQIJUR43.js";
4
+ } from "./chunk-OJQ47SCA.js";
5
5
  import {
6
- resolveAgent
7
- } from "./chunk-LGSW7T7K.js";
6
+ resolveMind
7
+ } from "./chunk-M77QBTEH.js";
8
8
  import {
9
9
  getClient,
10
10
  urlOf
@@ -15,17 +15,17 @@ import "./chunk-K3NQKI34.js";
15
15
  async function run(args) {
16
16
  const name = args[0];
17
17
  if (!name) {
18
- console.error("Usage: volute agent start <name>");
18
+ console.error("Usage: volute mind start <name>");
19
19
  process.exit(1);
20
20
  }
21
- const { entry } = resolveAgent(name);
21
+ const { entry } = resolveMind(name);
22
22
  const client = getClient();
23
- const res = await daemonFetch(urlOf(client.api.agents[":name"].start.$url({ param: { name } })), {
23
+ const res = await daemonFetch(urlOf(client.api.minds[":name"].start.$url({ param: { name } })), {
24
24
  method: "POST"
25
25
  });
26
26
  const data = await res.json();
27
27
  if (!res.ok) {
28
- console.error(data.error || "Failed to start agent");
28
+ console.error(data.error || "Failed to start mind");
29
29
  process.exit(1);
30
30
  }
31
31
  console.log(`${name} started on port ${entry.port}`);
@@ -4,13 +4,13 @@ import {
4
4
  getServiceMode,
5
5
  modeLabel,
6
6
  readDaemonConfig
7
- } from "./chunk-YYUSXARD.js";
8
- import "./chunk-KRJ6KCBI.js";
9
- import "./chunk-NXT67PPK.js";
7
+ } from "./chunk-6BDNWYKG.js";
8
+ import "./chunk-2Y77MCFG.js";
9
+ import "./chunk-ZCEYUUID.js";
10
10
  import {
11
11
  checkForUpdate
12
- } from "./chunk-KXOFPDO6.js";
13
- import "./chunk-LGSW7T7K.js";
12
+ } from "./chunk-MVSXRMJJ.js";
13
+ import "./chunk-M77QBTEH.js";
14
14
  import "./chunk-K3NQKI34.js";
15
15
 
16
16
  // src/commands/status.ts
@@ -46,19 +46,19 @@ async function run(_args) {
46
46
  if (token) headers.Authorization = `Bearer ${token}`;
47
47
  headers.Origin = baseUrl;
48
48
  try {
49
- const res = await fetch(`${baseUrl}/api/agents`, { headers });
49
+ const res = await fetch(`${baseUrl}/api/minds`, { headers });
50
50
  if (res.ok) {
51
- const agents = await res.json();
52
- if (agents.length > 0) {
51
+ const minds = await res.json();
52
+ if (minds.length > 0) {
53
53
  console.log(`
54
- Agents (${agents.length}):`);
55
- for (const agent of agents) {
56
- const status = agent.running ? "running" : "stopped";
57
- const label = agent.stage === "seed" ? " (seed)" : "";
58
- console.log(` ${agent.name}: ${status}${label}`);
54
+ Minds (${minds.length}):`);
55
+ for (const mind of minds) {
56
+ const status = mind.running ? "running" : "stopped";
57
+ const label = mind.stage === "seed" ? " (seed)" : "";
58
+ console.log(` ${mind.name}: ${status}${label}`);
59
59
  }
60
60
  } else {
61
- console.log("\nNo agents configured.");
61
+ console.log("\nNo minds configured.");
62
62
  }
63
63
  }
64
64
  } catch {
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
- resolveAgentName
4
- } from "./chunk-AZEL2IEK.js";
3
+ resolveMindName
4
+ } from "./chunk-NAOW2CLO.js";
5
5
  import {
6
6
  daemonFetch
7
- } from "./chunk-VQIJUR43.js";
7
+ } from "./chunk-OJQ47SCA.js";
8
8
  import {
9
- resolveAgent
10
- } from "./chunk-LGSW7T7K.js";
9
+ resolveMind
10
+ } from "./chunk-M77QBTEH.js";
11
11
  import {
12
12
  getClient,
13
13
  urlOf
@@ -16,15 +16,15 @@ import "./chunk-K3NQKI34.js";
16
16
 
17
17
  // src/commands/stop.ts
18
18
  async function run(args) {
19
- const name = resolveAgentName({ agent: args[0] });
20
- resolveAgent(name);
19
+ const name = resolveMindName({ mind: args[0] });
20
+ resolveMind(name);
21
21
  const client = getClient();
22
- const res = await daemonFetch(urlOf(client.api.agents[":name"].stop.$url({ param: { name } })), {
22
+ const res = await daemonFetch(urlOf(client.api.minds[":name"].stop.$url({ param: { name } })), {
23
23
  method: "POST"
24
24
  });
25
25
  const data = await res.json();
26
26
  if (!res.ok) {
27
- console.error(data.error || "Failed to stop agent");
27
+ console.error(data.error || "Failed to stop mind");
28
28
  process.exit(1);
29
29
  }
30
30
  console.log(`${name} stopped.`);
@@ -2,12 +2,12 @@
2
2
  import {
3
3
  readGlobalConfig,
4
4
  run
5
- } from "./chunk-KN4WBLH2.js";
6
- import "./chunk-YYUSXARD.js";
7
- import "./chunk-KRJ6KCBI.js";
8
- import "./chunk-NXT67PPK.js";
5
+ } from "./chunk-BEFIBW5B.js";
6
+ import "./chunk-6BDNWYKG.js";
7
+ import "./chunk-2Y77MCFG.js";
8
+ import "./chunk-ZCEYUUID.js";
9
9
  import "./chunk-D424ZQGI.js";
10
- import "./chunk-LGSW7T7K.js";
10
+ import "./chunk-M77QBTEH.js";
11
11
  import "./chunk-K3NQKI34.js";
12
12
  export {
13
13
  readGlobalConfig,
@@ -5,19 +5,19 @@ import {
5
5
  pollHealth,
6
6
  readDaemonConfig,
7
7
  restartService
8
- } from "./chunk-YYUSXARD.js";
8
+ } from "./chunk-6BDNWYKG.js";
9
9
  import {
10
10
  exec,
11
11
  execInherit,
12
12
  resolveVoluteBin
13
- } from "./chunk-KRJ6KCBI.js";
14
- import "./chunk-NXT67PPK.js";
13
+ } from "./chunk-2Y77MCFG.js";
14
+ import "./chunk-ZCEYUUID.js";
15
15
  import {
16
16
  checkForUpdate
17
- } from "./chunk-KXOFPDO6.js";
17
+ } from "./chunk-MVSXRMJJ.js";
18
18
  import {
19
19
  voluteHome
20
- } from "./chunk-LGSW7T7K.js";
20
+ } from "./chunk-M77QBTEH.js";
21
21
  import "./chunk-K3NQKI34.js";
22
22
 
23
23
  // src/commands/update.ts
@@ -5,8 +5,8 @@ import {
5
5
  fetchLatestVersion,
6
6
  getCurrentVersion,
7
7
  isNewer
8
- } from "./chunk-KXOFPDO6.js";
9
- import "./chunk-LGSW7T7K.js";
8
+ } from "./chunk-MVSXRMJJ.js";
9
+ import "./chunk-M77QBTEH.js";
10
10
  import "./chunk-K3NQKI34.js";
11
11
  export {
12
12
  checkForUpdate,
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
- resolveAgentName
4
- } from "./chunk-AZEL2IEK.js";
3
+ resolveMindName
4
+ } from "./chunk-NAOW2CLO.js";
5
5
  import {
6
6
  parseArgs
7
7
  } from "./chunk-D424ZQGI.js";
@@ -13,12 +13,12 @@ async function run(args) {
13
13
  template: { type: "string" },
14
14
  continue: { type: "boolean" }
15
15
  });
16
- const agentName = resolveAgentName({ agent: positional[0] });
17
- const { daemonFetch } = await import("./daemon-client-DEF7IFEJ.js");
16
+ const mindName = resolveMindName({ mind: positional[0] });
17
+ const { daemonFetch } = await import("./daemon-client-ODKDUYDE.js");
18
18
  const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
19
19
  const client = getClient();
20
20
  const res = await daemonFetch(
21
- urlOf(client.api.agents[":name"].upgrade.$url({ param: { name: agentName } })),
21
+ urlOf(client.api.minds[":name"].upgrade.$url({ param: { name: mindName } })),
22
22
  {
23
23
  method: "POST",
24
24
  headers: { "Content-Type": "application/json" },
@@ -30,7 +30,7 @@ async function run(args) {
30
30
  );
31
31
  const data = await res.json();
32
32
  if (!res.ok && !data.conflicts) {
33
- console.error(data.error ?? "Failed to upgrade agent");
33
+ console.error(data.error ?? "Failed to upgrade mind");
34
34
  process.exit(1);
35
35
  }
36
36
  if (data.conflicts) {
@@ -38,16 +38,14 @@ async function run(args) {
38
38
  console.log(` ${data.worktreeDir}`);
39
39
  console.log(`
40
40
  Then run:`);
41
- console.log(` volute agent upgrade ${agentName} --continue`);
41
+ console.log(` volute mind upgrade ${mindName} --continue`);
42
42
  return;
43
43
  }
44
44
  console.log(`
45
45
  Upgrade variant running on port ${data.port}`);
46
46
  console.log(`
47
47
  Next steps:`);
48
- console.log(
49
- ` volute send @${agentName}@${data.variant} "hello" # chat with upgraded variant`
50
- );
48
+ console.log(` volute send @${mindName}@${data.variant} "hello" # chat with upgraded variant`);
51
49
  console.log(` volute variant merge ${data.variant} # merge back when satisfied`);
52
50
  }
53
51
  export {