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
@@ -0,0 +1,140 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ checkForUpdate
4
+ } from "./chunk-5X7HGB6L.js";
5
+ import {
6
+ execInherit,
7
+ resolveVoluteBin
8
+ } from "./chunk-5SKQ6J7T.js";
9
+ import {
10
+ voluteHome
11
+ } from "./chunk-UX25Z2ND.js";
12
+ import "./chunk-K3NQKI34.js";
13
+
14
+ // src/commands/update.ts
15
+ import { existsSync, readFileSync, unlinkSync } from "fs";
16
+ import { resolve } from "path";
17
+ async function run(_args) {
18
+ const result = await checkForUpdate();
19
+ if (result.checkFailed) {
20
+ console.error("Could not reach npm registry. Check your network connection and try again.");
21
+ process.exit(1);
22
+ }
23
+ console.log(`Current version: ${result.current}`);
24
+ console.log(`Latest version: ${result.latest}`);
25
+ if (!result.updateAvailable) {
26
+ console.log("\nAlready up to date.");
27
+ return;
28
+ }
29
+ console.log(`
30
+ Updating volute ${result.current} \u2192 ${result.latest}...`);
31
+ const home = voluteHome();
32
+ const pidPath = resolve(home, "daemon.pid");
33
+ const configPath = resolve(home, "daemon.json");
34
+ let daemonWasRunning = false;
35
+ let daemonPort = 4200;
36
+ let daemonHost = "127.0.0.1";
37
+ if (existsSync(pidPath)) {
38
+ const pid = parseInt(readFileSync(pidPath, "utf-8").trim(), 10);
39
+ try {
40
+ process.kill(pid, 0);
41
+ daemonWasRunning = true;
42
+ } catch {
43
+ try {
44
+ unlinkSync(pidPath);
45
+ } catch {
46
+ }
47
+ }
48
+ }
49
+ if (daemonWasRunning && existsSync(configPath)) {
50
+ try {
51
+ const config = JSON.parse(readFileSync(configPath, "utf-8"));
52
+ daemonPort = config.port ?? 4200;
53
+ daemonHost = config.hostname || "127.0.0.1";
54
+ } catch {
55
+ console.error("Warning: could not read daemon config, using default port/host");
56
+ }
57
+ }
58
+ if (daemonWasRunning) {
59
+ console.log("Stopping daemon...");
60
+ const pid = parseInt(readFileSync(pidPath, "utf-8").trim(), 10);
61
+ try {
62
+ process.kill(-pid, "SIGTERM");
63
+ } catch {
64
+ try {
65
+ process.kill(pid, "SIGTERM");
66
+ } catch {
67
+ }
68
+ }
69
+ const maxWait = 1e4;
70
+ const start = Date.now();
71
+ while (Date.now() - start < maxWait) {
72
+ if (!existsSync(pidPath)) break;
73
+ await new Promise((r) => setTimeout(r, 200));
74
+ }
75
+ if (existsSync(pidPath)) {
76
+ try {
77
+ process.kill(-pid, "SIGKILL");
78
+ } catch {
79
+ try {
80
+ process.kill(pid, "SIGKILL");
81
+ } catch {
82
+ }
83
+ }
84
+ }
85
+ if (existsSync(pidPath)) {
86
+ try {
87
+ const stalePid = parseInt(readFileSync(pidPath, "utf-8").trim(), 10);
88
+ process.kill(stalePid, 0);
89
+ console.error("Warning: daemon process may still be running. Aborting update.");
90
+ process.exit(1);
91
+ } catch {
92
+ try {
93
+ unlinkSync(pidPath);
94
+ } catch {
95
+ }
96
+ }
97
+ }
98
+ console.log("Daemon stopped.");
99
+ }
100
+ try {
101
+ await execInherit("npm", ["install", "-g", "volute@latest"]);
102
+ } catch (err) {
103
+ console.error(`
104
+ Update failed: ${err.message}`);
105
+ if (daemonWasRunning) {
106
+ console.log("Restarting daemon with current version...");
107
+ try {
108
+ await execInherit(resolveVoluteBin(), [
109
+ "up",
110
+ "--port",
111
+ String(daemonPort),
112
+ "--host",
113
+ daemonHost
114
+ ]);
115
+ } catch {
116
+ console.error("Failed to restart daemon. Run `volute up` manually.");
117
+ }
118
+ }
119
+ process.exit(1);
120
+ }
121
+ if (daemonWasRunning) {
122
+ console.log("Restarting daemon...");
123
+ try {
124
+ await execInherit(resolveVoluteBin(), [
125
+ "up",
126
+ "--port",
127
+ String(daemonPort),
128
+ "--host",
129
+ daemonHost
130
+ ]);
131
+ } catch {
132
+ console.error("Failed to restart daemon. Run `volute up` manually.");
133
+ }
134
+ }
135
+ console.log(`
136
+ Updated to volute v${result.latest}`);
137
+ }
138
+ export {
139
+ run
140
+ };
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ checkForUpdate,
4
+ checkForUpdateCached,
5
+ fetchLatestVersion,
6
+ getCurrentVersion,
7
+ isNewer
8
+ } from "./chunk-5X7HGB6L.js";
9
+ import "./chunk-UX25Z2ND.js";
10
+ import "./chunk-K3NQKI34.js";
11
+ export {
12
+ checkForUpdate,
13
+ checkForUpdateCached,
14
+ fetchLatestVersion,
15
+ getCurrentVersion,
16
+ isNewer
17
+ };
@@ -1,24 +1,27 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ resolveAgentName
4
+ } from "./chunk-AZEL2IEK.js";
2
5
  import {
3
6
  composeTemplate,
4
7
  copyTemplateToDir,
5
8
  findTemplatesRoot
6
- } from "./chunk-GSPKUPKU.js";
9
+ } from "./chunk-XUA3JUFK.js";
10
+ import {
11
+ parseArgs
12
+ } from "./chunk-D424ZQGI.js";
7
13
  import {
8
14
  exec,
9
15
  execInherit
10
16
  } from "./chunk-5SKQ6J7T.js";
11
17
  import {
12
18
  daemonFetch
13
- } from "./chunk-YGFIWIOF.js";
14
- import {
15
- parseArgs
16
- } from "./chunk-D424ZQGI.js";
19
+ } from "./chunk-7L4AN5D4.js";
17
20
  import {
18
21
  addVariant,
19
22
  nextPort,
20
23
  resolveAgent
21
- } from "./chunk-3C2XR4IY.js";
24
+ } from "./chunk-UX25Z2ND.js";
22
25
  import "./chunk-K3NQKI34.js";
23
26
 
24
27
  // src/commands/upgrade.ts
@@ -31,11 +34,7 @@ async function run(args) {
31
34
  template: { type: "string" },
32
35
  continue: { type: "boolean" }
33
36
  });
34
- const agentName = positional[0];
35
- if (!agentName) {
36
- console.error("Usage: volute upgrade <name> [--template <name>] [--continue]");
37
- process.exit(1);
38
- }
37
+ const agentName = resolveAgentName({ agent: positional[0] });
39
38
  const { dir: projectRoot } = resolveAgent(agentName);
40
39
  const template = flags.template ?? "agent-sdk";
41
40
  if (flags.continue) {
@@ -73,7 +72,7 @@ Otherwise, remove it with: volute variant delete ${VARIANT_NAME} --agent ${agent
73
72
  console.log(` ${worktreeDir}`);
74
73
  console.log(`
75
74
  Then run:`);
76
- console.log(` volute upgrade ${agentName} --continue`);
75
+ console.log(` volute agent upgrade ${agentName} --continue`);
77
76
  return;
78
77
  }
79
78
  await installAndVerify(agentName, worktreeDir);
@@ -164,7 +163,7 @@ async function mergeTemplateBranch(worktreeDir) {
164
163
  async function continueUpgrade(agentName, projectRoot) {
165
164
  const worktreeDir = resolve(projectRoot, ".variants", VARIANT_NAME);
166
165
  if (!existsSync(worktreeDir)) {
167
- console.error("No upgrade in progress. Run `volute upgrade` first.");
166
+ console.error("No upgrade in progress. Run `volute agent upgrade` first.");
168
167
  process.exit(1);
169
168
  }
170
169
  const status = await exec("git", ["status", "--porcelain"], {
@@ -207,7 +206,7 @@ async function installAndVerify(agentName, worktreeDir) {
207
206
  } catch {
208
207
  console.error("Failed to start variant. Is the daemon running? (volute up)");
209
208
  console.error(
210
- `The variant was created but not started. Use: volute start ${agentName}@${VARIANT_NAME}`
209
+ `The variant was created but not started. Use: volute agent start ${agentName}@${VARIANT_NAME}`
211
210
  );
212
211
  process.exit(1);
213
212
  }
@@ -215,7 +214,9 @@ async function installAndVerify(agentName, worktreeDir) {
215
214
  Upgrade variant running on port ${variantPort}`);
216
215
  console.log(`
217
216
  Next steps:`);
218
- console.log(` volute send ${agentName}@${VARIANT_NAME} "hello" # chat with upgraded variant`);
217
+ console.log(
218
+ ` volute message send ${agentName}@${VARIANT_NAME} "hello" # chat with upgraded variant`
219
+ );
219
220
  console.log(` volute variant merge ${VARIANT_NAME} # merge back when satisfied`);
220
221
  }
221
222
  export {
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ resolveAgentName
4
+ } from "./chunk-AZEL2IEK.js";
5
+ import {
6
+ parseArgs
7
+ } from "./chunk-D424ZQGI.js";
2
8
  import {
3
9
  exec,
4
10
  execInherit
5
11
  } from "./chunk-5SKQ6J7T.js";
6
12
  import {
7
13
  daemonFetch
8
- } from "./chunk-YGFIWIOF.js";
9
- import {
10
- resolveAgentName
11
- } from "./chunk-VRVVQIYY.js";
12
- import {
13
- parseArgs
14
- } from "./chunk-D424ZQGI.js";
14
+ } from "./chunk-7L4AN5D4.js";
15
15
  import {
16
16
  addVariant,
17
17
  checkHealth,
@@ -22,7 +22,7 @@ import {
22
22
  resolveAgent,
23
23
  validateBranchName,
24
24
  writeVariants
25
- } from "./chunk-3C2XR4IY.js";
25
+ } from "./chunk-UX25Z2ND.js";
26
26
  import "./chunk-K3NQKI34.js";
27
27
 
28
28
  // src/commands/variant.ts
@@ -182,13 +182,18 @@ async function run(args) {
182
182
  case "delete":
183
183
  await deleteVariant(args.slice(1));
184
184
  break;
185
+ case "--help":
186
+ case "-h":
187
+ case void 0:
188
+ printUsage();
189
+ break;
185
190
  default:
186
191
  printUsage();
187
- process.exit(subcommand ? 1 : 0);
192
+ process.exit(1);
188
193
  }
189
194
  }
190
195
  function printUsage() {
191
- console.error(`Usage:
196
+ console.log(`Usage:
192
197
  volute variant create <variant> [--agent <name>] [--soul "..."] [--port N] [--no-start] [--json]
193
198
  volute variant list [--agent <name>] [--json]
194
199
  volute variant merge <variant> [--agent <name>] [--summary "..." --memory "..."] [--skip-verify]
@@ -272,7 +277,7 @@ async function createVariant(args) {
272
277
  } catch {
273
278
  console.error("Failed to start variant. Is the daemon running? (volute up)");
274
279
  console.error(
275
- `The variant was created but not started. Use: volute start ${agentName}@${variantName}`
280
+ `The variant was created but not started. Use: volute agent start ${agentName}@${variantName}`
276
281
  );
277
282
  process.exit(1);
278
283
  }
@@ -454,7 +459,7 @@ async function mergeVariant(args) {
454
459
  console.error(`Failed to restart: ${data.error ?? "unknown error"}`);
455
460
  }
456
461
  } catch {
457
- console.log(`Daemon not running. Start the agent manually: volute start ${agentName}`);
462
+ console.log(`Daemon not running. Start the agent manually: volute agent start ${agentName}`);
458
463
  }
459
464
  }
460
465
  async function deleteVariant(args) {