volute 0.8.3 → 0.10.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 (45) hide show
  1. package/dist/{agent-YORVRB6I.js → agent-ECRX44DB.js} +10 -10
  2. package/dist/{agent-manager-CMMH5KQQ.js → agent-manager-MRHHKAB6.js} +2 -2
  3. package/dist/api-client-YPKOZP2O.js +10 -0
  4. package/dist/{channel-RDGHBFSI.js → channel-2WHBRDTD.js} +66 -81
  5. package/dist/chunk-4RQBJWQX.js +17 -0
  6. package/dist/{chunk-YNNK4QN2.js → chunk-FYQGANL6.js} +40 -2
  7. package/dist/chunk-R3VB7NF5.js +205 -0
  8. package/dist/{chunk-23L3MKEV.js → chunk-STOEJOJO.js} +18 -4
  9. package/dist/cli.js +14 -14
  10. package/dist/{connector-ZP6MEFF4.js → connector-L2HBLZBW.js} +37 -20
  11. package/dist/create-VBZZNJOG.js +38 -0
  12. package/dist/{daemon-client-54J3EIZD.js → daemon-client-P44NU3KU.js} +1 -1
  13. package/dist/daemon-restart-QCLR6ZZV.js +61 -0
  14. package/dist/daemon.js +1732 -214
  15. package/dist/delete-BOTVU4YO.js +35 -0
  16. package/dist/{down-4DGRZRJU.js → down-4LIQG3CE.js} +3 -1
  17. package/dist/{env-KMNYGVZ2.js → env-CGORIKVF.js} +86 -37
  18. package/dist/{history-PXJVYLVY.js → history-NI5QP27M.js} +11 -8
  19. package/dist/import-2BZUWT23.js +21 -0
  20. package/dist/logs-APWVWGNX.js +77 -0
  21. package/dist/{package-2S7APQBC.js → package-ERGXEDAF.js} +1 -1
  22. package/dist/{restart-KVH3TK5N.js → restart-CCYM3MEC.js} +10 -4
  23. package/dist/{schedule-HCUCBNQI.js → schedule-E4MFGYSA.js} +24 -8
  24. package/dist/{send-BNC2S5BY.js → send-X6OQGSD6.js} +36 -28
  25. package/dist/{start-QU73YTJW.js → start-6YRS6FF6.js} +7 -2
  26. package/dist/{status-Q6ZQJXNI.js → status-SIMKH3ZE.js} +8 -3
  27. package/dist/{stop-N7U5N6A7.js → stop-UQSNF4CG.js} +7 -2
  28. package/dist/{up-RZJMSVQS.js → up-MNNPCMFF.js} +1 -1
  29. package/dist/upgrade-RSE4CZNE.js +55 -0
  30. package/dist/variant-7IZF6OWO.js +215 -0
  31. package/package.json +1 -1
  32. package/dist/chunk-ECPQXRLB.js +0 -264
  33. package/dist/chunk-NETNFBA5.js +0 -28
  34. package/dist/chunk-XUA3JUFK.js +0 -121
  35. package/dist/create-HGJHLABX.js +0 -96
  36. package/dist/daemon-restart-IMNCBWFV.js +0 -28
  37. package/dist/delete-45TGQC4N.js +0 -67
  38. package/dist/import-CNEDF3TD.js +0 -532
  39. package/dist/logs-TZB3MTLZ.js +0 -37
  40. package/dist/upgrade-CZF6PN7Y.js +0 -224
  41. package/dist/variant-RKXPN5DH.js +0 -476
  42. package/dist/{chunk-6RDCTVQK.js → chunk-4NAGJV3I.js} +0 -0
  43. package/dist/{chunk-W6TMWYU3.js → chunk-WV4W7BAT.js} +3 -3
  44. package/dist/{service-56CY4S6Z.js → service-OW35VZ5G.js} +3 -3
  45. package/dist/{setup-7SPMWF2O.js → setup-ABMZK6LS.js} +3 -3
@@ -2,20 +2,17 @@
2
2
  import {
3
3
  resolveAgentName
4
4
  } from "./chunk-AZEL2IEK.js";
5
- import {
6
- agentEnvPath,
7
- readEnv,
8
- writeEnv
9
- } from "./chunk-QF22MYDJ.js";
10
5
  import {
11
6
  parseArgs
12
7
  } from "./chunk-D424ZQGI.js";
13
8
  import {
14
9
  daemonFetch
15
- } from "./chunk-23L3MKEV.js";
10
+ } from "./chunk-STOEJOJO.js";
11
+ import "./chunk-DP2DX4WV.js";
16
12
  import {
17
- agentDir
18
- } from "./chunk-DP2DX4WV.js";
13
+ getClient,
14
+ urlOf
15
+ } from "./chunk-4RQBJWQX.js";
19
16
  import "./chunk-K3NQKI34.js";
20
17
 
21
18
  // src/commands/connector.ts
@@ -84,8 +81,13 @@ async function connectConnector(args) {
84
81
  console.error("Usage: volute connector connect <type> [--agent <name>]");
85
82
  process.exit(1);
86
83
  }
87
- const url = `/api/agents/${encodeURIComponent(agentName)}/connectors/${encodeURIComponent(type)}`;
88
- let res = await daemonFetch(url, { method: "POST" });
84
+ const client = getClient();
85
+ const connectorUrl = urlOf(
86
+ client.api.agents[":name"].connectors[":type"].$url({
87
+ param: { name: agentName, type }
88
+ })
89
+ );
90
+ let res = await daemonFetch(connectorUrl, { method: "POST" });
89
91
  if (!res.ok) {
90
92
  const body = await res.json().catch(() => ({ error: "Unknown error" }));
91
93
  if (body.error === "missing_env" && "missing" in body) {
@@ -101,20 +103,32 @@ Set them with: volute env set <KEY> --agent ${agentName}`);
101
103
  }
102
104
  console.error(`${connectorName} connector requires some environment variables.
103
105
  `);
104
- const dir = agentDir(agentName);
105
- const envPath = agentEnvPath(dir);
106
- const env = readEnv(envPath);
107
106
  for (const v of missing) {
108
107
  const value = await promptValue(v.name, v.description);
109
108
  if (!value) {
110
109
  console.error(`No value provided for ${v.name}. Aborting.`);
111
110
  process.exit(1);
112
111
  }
113
- env[v.name] = value;
112
+ const envRes = await daemonFetch(
113
+ urlOf(
114
+ client.api.agents[":name"].env[":key"].$url({
115
+ param: { name: agentName, key: v.name }
116
+ })
117
+ ),
118
+ {
119
+ method: "PUT",
120
+ headers: { "Content-Type": "application/json" },
121
+ body: JSON.stringify({ value })
122
+ }
123
+ );
124
+ if (!envRes.ok) {
125
+ const errBody = await envRes.json().catch(() => ({}));
126
+ console.error(`Failed to set ${v.name}: ${errBody.error ?? `HTTP ${envRes.status}`}`);
127
+ process.exit(1);
128
+ }
114
129
  }
115
- writeEnv(envPath, env);
116
130
  console.log("Environment variables saved.\n");
117
- res = await daemonFetch(url, { method: "POST" });
131
+ res = await daemonFetch(connectorUrl, { method: "POST" });
118
132
  if (!res.ok) {
119
133
  const retryBody = await res.json().catch(() => ({ error: "Unknown error" }));
120
134
  console.error(
@@ -139,11 +153,14 @@ async function disconnectConnector(args) {
139
153
  console.error("Usage: volute connector disconnect <type> [--agent <name>]");
140
154
  process.exit(1);
141
155
  }
156
+ const client = getClient();
142
157
  const res = await daemonFetch(
143
- `/api/agents/${encodeURIComponent(agentName)}/connectors/${encodeURIComponent(type)}`,
144
- {
145
- method: "DELETE"
146
- }
158
+ urlOf(
159
+ client.api.agents[":name"].connectors[":type"].$url({
160
+ param: { name: agentName, type }
161
+ })
162
+ ),
163
+ { method: "DELETE" }
147
164
  );
148
165
  if (!res.ok) {
149
166
  const body = await res.json().catch(() => ({ error: "Unknown error" }));
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ parseArgs
4
+ } from "./chunk-D424ZQGI.js";
5
+ import "./chunk-K3NQKI34.js";
6
+
7
+ // src/commands/create.ts
8
+ async function run(args) {
9
+ const { positional, flags } = parseArgs(args, {
10
+ template: { type: "string" }
11
+ });
12
+ const name = positional[0];
13
+ const template = flags.template ?? "agent-sdk";
14
+ if (!name) {
15
+ console.error("Usage: volute agent create <name> [--template <name>]");
16
+ process.exit(1);
17
+ }
18
+ const { daemonFetch } = await import("./daemon-client-P44NU3KU.js");
19
+ const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
20
+ const client = getClient();
21
+ const res = await daemonFetch(urlOf(client.api.agents.$url()), {
22
+ method: "POST",
23
+ headers: { "Content-Type": "application/json" },
24
+ body: JSON.stringify({ name, template })
25
+ });
26
+ const data = await res.json();
27
+ if (!res.ok) {
28
+ console.error(data.error ?? "Failed to create agent");
29
+ process.exit(1);
30
+ }
31
+ console.log(`
32
+ ${data.message ?? `Created agent: ${data.name} (port ${data.port})`}`);
33
+ console.log(`
34
+ volute agent start ${data.name ?? name}`);
35
+ }
36
+ export {
37
+ run
38
+ };
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  daemonFetch
4
- } from "./chunk-23L3MKEV.js";
4
+ } from "./chunk-STOEJOJO.js";
5
5
  import "./chunk-DP2DX4WV.js";
6
6
  import "./chunk-K3NQKI34.js";
7
7
  export {
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ run
4
+ } from "./chunk-4NAGJV3I.js";
5
+ import {
6
+ stopDaemon
7
+ } from "./chunk-FYQGANL6.js";
8
+ import "./chunk-D424ZQGI.js";
9
+ import {
10
+ daemonFetch
11
+ } from "./chunk-STOEJOJO.js";
12
+ import {
13
+ voluteHome
14
+ } from "./chunk-DP2DX4WV.js";
15
+ import {
16
+ getClient,
17
+ urlOf
18
+ } from "./chunk-4RQBJWQX.js";
19
+ import "./chunk-K3NQKI34.js";
20
+
21
+ // src/commands/daemon-restart.ts
22
+ import { readFileSync } from "fs";
23
+ import { resolve } from "path";
24
+ async function run2(args) {
25
+ const result = await stopDaemon();
26
+ if (!result.stopped && result.reason === "systemd") {
27
+ const client = getClient();
28
+ await daemonFetch(urlOf(client.api.system.restart.$url()), { method: "POST" });
29
+ const config = JSON.parse(readFileSync(resolve(voluteHome(), "daemon.json"), "utf-8"));
30
+ let hostname = config.hostname || "localhost";
31
+ if (hostname === "0.0.0.0") hostname = "127.0.0.1";
32
+ if (hostname === "::") hostname = "[::1]";
33
+ const url = new URL("http://localhost");
34
+ url.hostname = hostname;
35
+ url.port = String(config.port ?? 4200);
36
+ const healthUrl = `${url.origin}/api/health`;
37
+ const maxWait = 15e3;
38
+ const start = Date.now();
39
+ while (Date.now() - start < maxWait) {
40
+ try {
41
+ const res = await fetch(healthUrl);
42
+ if (res.ok) {
43
+ console.log("Daemon restarted.");
44
+ return;
45
+ }
46
+ } catch {
47
+ }
48
+ await new Promise((r) => setTimeout(r, 500));
49
+ }
50
+ console.error("Daemon did not restart within 15s. Check logs.");
51
+ process.exit(1);
52
+ }
53
+ if (!result.stopped && result.reason === "kill-failed") {
54
+ console.error("Cannot restart: failed to stop the running daemon.");
55
+ process.exit(1);
56
+ }
57
+ await run(args);
58
+ }
59
+ export {
60
+ run2 as run
61
+ };