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.
- package/dist/{agent-YORVRB6I.js → agent-ECRX44DB.js} +10 -10
- package/dist/{agent-manager-CMMH5KQQ.js → agent-manager-MRHHKAB6.js} +2 -2
- package/dist/api-client-YPKOZP2O.js +10 -0
- package/dist/{channel-RDGHBFSI.js → channel-2WHBRDTD.js} +66 -81
- package/dist/chunk-4RQBJWQX.js +17 -0
- package/dist/{chunk-YNNK4QN2.js → chunk-FYQGANL6.js} +40 -2
- package/dist/chunk-R3VB7NF5.js +205 -0
- package/dist/{chunk-23L3MKEV.js → chunk-STOEJOJO.js} +18 -4
- package/dist/cli.js +14 -14
- package/dist/{connector-ZP6MEFF4.js → connector-L2HBLZBW.js} +37 -20
- package/dist/create-VBZZNJOG.js +38 -0
- package/dist/{daemon-client-54J3EIZD.js → daemon-client-P44NU3KU.js} +1 -1
- package/dist/daemon-restart-QCLR6ZZV.js +61 -0
- package/dist/daemon.js +1732 -214
- package/dist/delete-BOTVU4YO.js +35 -0
- package/dist/{down-4DGRZRJU.js → down-4LIQG3CE.js} +3 -1
- package/dist/{env-KMNYGVZ2.js → env-CGORIKVF.js} +86 -37
- package/dist/{history-PXJVYLVY.js → history-NI5QP27M.js} +11 -8
- package/dist/import-2BZUWT23.js +21 -0
- package/dist/logs-APWVWGNX.js +77 -0
- package/dist/{package-2S7APQBC.js → package-ERGXEDAF.js} +1 -1
- package/dist/{restart-KVH3TK5N.js → restart-CCYM3MEC.js} +10 -4
- package/dist/{schedule-HCUCBNQI.js → schedule-E4MFGYSA.js} +24 -8
- package/dist/{send-BNC2S5BY.js → send-X6OQGSD6.js} +36 -28
- package/dist/{start-QU73YTJW.js → start-6YRS6FF6.js} +7 -2
- package/dist/{status-Q6ZQJXNI.js → status-SIMKH3ZE.js} +8 -3
- package/dist/{stop-N7U5N6A7.js → stop-UQSNF4CG.js} +7 -2
- package/dist/{up-RZJMSVQS.js → up-MNNPCMFF.js} +1 -1
- package/dist/upgrade-RSE4CZNE.js +55 -0
- package/dist/variant-7IZF6OWO.js +215 -0
- package/package.json +1 -1
- package/dist/chunk-ECPQXRLB.js +0 -264
- package/dist/chunk-NETNFBA5.js +0 -28
- package/dist/chunk-XUA3JUFK.js +0 -121
- package/dist/create-HGJHLABX.js +0 -96
- package/dist/daemon-restart-IMNCBWFV.js +0 -28
- package/dist/delete-45TGQC4N.js +0 -67
- package/dist/import-CNEDF3TD.js +0 -532
- package/dist/logs-TZB3MTLZ.js +0 -37
- package/dist/upgrade-CZF6PN7Y.js +0 -224
- package/dist/variant-RKXPN5DH.js +0 -476
- package/dist/{chunk-6RDCTVQK.js → chunk-4NAGJV3I.js} +0 -0
- package/dist/{chunk-W6TMWYU3.js → chunk-WV4W7BAT.js} +3 -3
- package/dist/{service-56CY4S6Z.js → service-OW35VZ5G.js} +3 -3
- 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-
|
|
10
|
+
} from "./chunk-STOEJOJO.js";
|
|
11
|
+
import "./chunk-DP2DX4WV.js";
|
|
16
12
|
import {
|
|
17
|
-
|
|
18
|
-
|
|
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
|
|
88
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
144
|
-
|
|
145
|
-
|
|
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
|
+
};
|
|
@@ -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
|
+
};
|