volute 0.9.0 → 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-MB3OTRRK.js → agent-ECRX44DB.js} +5 -5
- package/dist/{agent-manager-CMMH5KQQ.js → agent-manager-MRHHKAB6.js} +2 -2
- package/dist/{chunk-YNNK4QN2.js → chunk-FYQGANL6.js} +40 -2
- package/dist/chunk-R3VB7NF5.js +205 -0
- package/dist/cli.js +14 -14
- package/dist/create-VBZZNJOG.js +38 -0
- package/dist/daemon-restart-QCLR6ZZV.js +61 -0
- package/dist/daemon.js +1492 -170
- package/dist/delete-BOTVU4YO.js +35 -0
- package/dist/{down-4DGRZRJU.js → down-4LIQG3CE.js} +3 -1
- package/dist/import-2BZUWT23.js +21 -0
- package/dist/{package-WPX6LCYE.js → package-ERGXEDAF.js} +1 -1
- package/dist/{up-J7AHQHIM.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-EKDXXHKH.js +0 -28
- package/dist/delete-WKQKE3FT.js +0 -70
- package/dist/import-CNEDF3TD.js +0 -532
- package/dist/upgrade-BRNMSQBX.js +0 -233
- package/dist/variant-AQRAN6FR.js +0 -493
- package/dist/{channel-G5D4VBXY.js → channel-2WHBRDTD.js} +3 -3
- package/dist/{chunk-AWHQZDB4.js → chunk-4NAGJV3I.js} +0 -0
- package/dist/{chunk-W6TMWYU3.js → chunk-WV4W7BAT.js} +3 -3
- package/dist/{connector-PK7D5GTN.js → connector-L2HBLZBW.js} +3 -3
- package/dist/{env-HZMZSWWD.js → env-CGORIKVF.js} +3 -3
- package/dist/{history-SH25BAA5.js → history-NI5QP27M.js} +3 -3
- package/dist/{logs-V54B6QSG.js → logs-APWVWGNX.js} +3 -3
- package/dist/{schedule-XGBUF7NU.js → schedule-E4MFGYSA.js} +3 -3
- package/dist/{send-TFZ62XPZ.js → send-X6OQGSD6.js} +4 -4
- package/dist/{service-56CY4S6Z.js → service-OW35VZ5G.js} +3 -3
- package/dist/{setup-7SPMWF2O.js → setup-ABMZK6LS.js} +3 -3
package/dist/chunk-XUA3JUFK.js
DELETED
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
// src/lib/template.ts
|
|
4
|
-
import {
|
|
5
|
-
cpSync,
|
|
6
|
-
existsSync,
|
|
7
|
-
mkdirSync,
|
|
8
|
-
readdirSync,
|
|
9
|
-
readFileSync,
|
|
10
|
-
renameSync,
|
|
11
|
-
rmSync,
|
|
12
|
-
statSync,
|
|
13
|
-
writeFileSync
|
|
14
|
-
} from "fs";
|
|
15
|
-
import { tmpdir } from "os";
|
|
16
|
-
import { dirname, join, relative, resolve } from "path";
|
|
17
|
-
function findTemplatesRoot() {
|
|
18
|
-
let dir = dirname(new URL(import.meta.url).pathname);
|
|
19
|
-
for (let i = 0; i < 5; i++) {
|
|
20
|
-
const candidate = resolve(dir, "templates");
|
|
21
|
-
if (existsSync(resolve(candidate, "_base"))) return candidate;
|
|
22
|
-
dir = dirname(dir);
|
|
23
|
-
}
|
|
24
|
-
console.error(
|
|
25
|
-
"Templates directory not found. Searched up from:",
|
|
26
|
-
dirname(new URL(import.meta.url).pathname)
|
|
27
|
-
);
|
|
28
|
-
process.exit(1);
|
|
29
|
-
}
|
|
30
|
-
function composeTemplate(templatesRoot, templateName) {
|
|
31
|
-
const baseDir = resolve(templatesRoot, "_base");
|
|
32
|
-
const templateDir = resolve(templatesRoot, templateName);
|
|
33
|
-
if (!existsSync(baseDir)) {
|
|
34
|
-
console.error("Base template not found:", baseDir);
|
|
35
|
-
process.exit(1);
|
|
36
|
-
}
|
|
37
|
-
if (!existsSync(templateDir)) {
|
|
38
|
-
console.error(`Template not found: ${templateName}`);
|
|
39
|
-
process.exit(1);
|
|
40
|
-
}
|
|
41
|
-
const composedDir = resolve(tmpdir(), `volute-template-${Date.now()}`);
|
|
42
|
-
mkdirSync(composedDir, { recursive: true });
|
|
43
|
-
cpSync(baseDir, composedDir, { recursive: true });
|
|
44
|
-
for (const file of listFiles(templateDir)) {
|
|
45
|
-
const src = resolve(templateDir, file);
|
|
46
|
-
const dest = resolve(composedDir, file);
|
|
47
|
-
mkdirSync(dirname(dest), { recursive: true });
|
|
48
|
-
cpSync(src, dest);
|
|
49
|
-
}
|
|
50
|
-
const manifestPath = resolve(composedDir, "volute-template.json");
|
|
51
|
-
if (!existsSync(manifestPath)) {
|
|
52
|
-
rmSync(composedDir, { recursive: true, force: true });
|
|
53
|
-
console.error(`Template manifest not found: ${templateName}/volute-template.json`);
|
|
54
|
-
process.exit(1);
|
|
55
|
-
}
|
|
56
|
-
const manifest = JSON.parse(readFileSync(manifestPath, "utf-8"));
|
|
57
|
-
const skillsSrc = resolve(composedDir, "_skills");
|
|
58
|
-
if (existsSync(skillsSrc)) {
|
|
59
|
-
const skillsDest = resolve(composedDir, manifest.skillsDir);
|
|
60
|
-
mkdirSync(skillsDest, { recursive: true });
|
|
61
|
-
cpSync(skillsSrc, skillsDest, { recursive: true });
|
|
62
|
-
rmSync(skillsSrc, { recursive: true, force: true });
|
|
63
|
-
}
|
|
64
|
-
rmSync(manifestPath);
|
|
65
|
-
return { composedDir, manifest };
|
|
66
|
-
}
|
|
67
|
-
function copyTemplateToDir(composedDir, destDir, agentName, manifest) {
|
|
68
|
-
cpSync(composedDir, destDir, { recursive: true });
|
|
69
|
-
for (const [from, to] of Object.entries(manifest.rename)) {
|
|
70
|
-
const fromPath = resolve(destDir, from);
|
|
71
|
-
if (existsSync(fromPath)) {
|
|
72
|
-
renameSync(fromPath, resolve(destDir, to));
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
for (const file of manifest.substitute) {
|
|
76
|
-
const path = resolve(destDir, file);
|
|
77
|
-
if (existsSync(path)) {
|
|
78
|
-
const content = readFileSync(path, "utf-8");
|
|
79
|
-
writeFileSync(path, content.replaceAll("{{name}}", agentName));
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
function applyInitFiles(destDir) {
|
|
84
|
-
const initDir = resolve(destDir, ".init");
|
|
85
|
-
if (!existsSync(initDir)) return;
|
|
86
|
-
const homeDir = resolve(destDir, "home");
|
|
87
|
-
for (const file of listFiles(initDir)) {
|
|
88
|
-
const src = resolve(initDir, file);
|
|
89
|
-
const dest = resolve(homeDir, file);
|
|
90
|
-
const parent = dirname(dest);
|
|
91
|
-
if (!existsSync(parent)) {
|
|
92
|
-
mkdirSync(parent, { recursive: true });
|
|
93
|
-
}
|
|
94
|
-
cpSync(src, dest);
|
|
95
|
-
}
|
|
96
|
-
rmSync(initDir, { recursive: true, force: true });
|
|
97
|
-
}
|
|
98
|
-
function listFiles(dir) {
|
|
99
|
-
const results = [];
|
|
100
|
-
function walk(current) {
|
|
101
|
-
for (const entry of readdirSync(current)) {
|
|
102
|
-
const full = join(current, entry);
|
|
103
|
-
if (statSync(full).isDirectory()) {
|
|
104
|
-
if (entry === ".git") continue;
|
|
105
|
-
walk(full);
|
|
106
|
-
} else {
|
|
107
|
-
results.push(relative(dir, full));
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
walk(dir);
|
|
112
|
-
return results;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
export {
|
|
116
|
-
findTemplatesRoot,
|
|
117
|
-
composeTemplate,
|
|
118
|
-
copyTemplateToDir,
|
|
119
|
-
applyInitFiles,
|
|
120
|
-
listFiles
|
|
121
|
-
};
|
package/dist/create-HGJHLABX.js
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
applyInitFiles,
|
|
4
|
-
composeTemplate,
|
|
5
|
-
copyTemplateToDir,
|
|
6
|
-
findTemplatesRoot,
|
|
7
|
-
listFiles
|
|
8
|
-
} from "./chunk-XUA3JUFK.js";
|
|
9
|
-
import {
|
|
10
|
-
parseArgs
|
|
11
|
-
} from "./chunk-D424ZQGI.js";
|
|
12
|
-
import {
|
|
13
|
-
chownAgentDir,
|
|
14
|
-
createAgentUser,
|
|
15
|
-
ensureVoluteGroup,
|
|
16
|
-
getAgentUserIds,
|
|
17
|
-
isIsolationEnabled
|
|
18
|
-
} from "./chunk-IQXBMFZG.js";
|
|
19
|
-
import {
|
|
20
|
-
exec,
|
|
21
|
-
execInherit
|
|
22
|
-
} from "./chunk-5C5JWR2L.js";
|
|
23
|
-
import {
|
|
24
|
-
addAgent,
|
|
25
|
-
agentDir,
|
|
26
|
-
ensureVoluteHome,
|
|
27
|
-
nextPort
|
|
28
|
-
} from "./chunk-DP2DX4WV.js";
|
|
29
|
-
import "./chunk-K3NQKI34.js";
|
|
30
|
-
|
|
31
|
-
// src/commands/create.ts
|
|
32
|
-
import { existsSync, rmSync } from "fs";
|
|
33
|
-
import { resolve } from "path";
|
|
34
|
-
var TEMPLATE_BRANCH = "volute/template";
|
|
35
|
-
async function run(args) {
|
|
36
|
-
const { positional, flags } = parseArgs(args, {
|
|
37
|
-
template: { type: "string" }
|
|
38
|
-
});
|
|
39
|
-
const name = positional[0];
|
|
40
|
-
const template = flags.template ?? "agent-sdk";
|
|
41
|
-
if (!name) {
|
|
42
|
-
console.error("Usage: volute agent create <name> [--template <name>]");
|
|
43
|
-
process.exit(1);
|
|
44
|
-
}
|
|
45
|
-
ensureVoluteHome();
|
|
46
|
-
const dest = agentDir(name);
|
|
47
|
-
if (existsSync(dest)) {
|
|
48
|
-
console.error(`Agent already exists: ${name}`);
|
|
49
|
-
process.exit(1);
|
|
50
|
-
}
|
|
51
|
-
const templatesRoot = findTemplatesRoot();
|
|
52
|
-
const { composedDir, manifest } = composeTemplate(templatesRoot, template);
|
|
53
|
-
try {
|
|
54
|
-
copyTemplateToDir(composedDir, dest, name, manifest);
|
|
55
|
-
applyInitFiles(dest);
|
|
56
|
-
const port = nextPort();
|
|
57
|
-
addAgent(name, port);
|
|
58
|
-
ensureVoluteGroup();
|
|
59
|
-
createAgentUser(name);
|
|
60
|
-
chownAgentDir(dest, name);
|
|
61
|
-
const ids = isIsolationEnabled() ? await getAgentUserIds(name) : void 0;
|
|
62
|
-
const env = ids ? { ...process.env, HOME: dest } : void 0;
|
|
63
|
-
console.log("Installing dependencies...");
|
|
64
|
-
await execInherit("npm", ["install"], { cwd: dest, uid: ids?.uid, gid: ids?.gid, env });
|
|
65
|
-
try {
|
|
66
|
-
await exec("git", ["init"], { cwd: dest, uid: ids?.uid, gid: ids?.gid, env });
|
|
67
|
-
await initTemplateBranch(dest, composedDir, manifest, ids, env);
|
|
68
|
-
} catch (err) {
|
|
69
|
-
rmSync(resolve(dest, ".git"), { recursive: true, force: true });
|
|
70
|
-
console.warn(
|
|
71
|
-
"\nWarning: git setup failed \u2014 variants and upgrades won't be available.",
|
|
72
|
-
"\nTo fix: ensure git is installed with user.name/user.email configured."
|
|
73
|
-
);
|
|
74
|
-
console.warn("Details:", err.message ?? err);
|
|
75
|
-
}
|
|
76
|
-
console.log(`
|
|
77
|
-
Created agent: ${name} (port ${port})`);
|
|
78
|
-
console.log(`
|
|
79
|
-
volute agent start ${name}`);
|
|
80
|
-
} finally {
|
|
81
|
-
rmSync(composedDir, { recursive: true, force: true });
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
async function initTemplateBranch(projectRoot, composedDir, manifest, ids, env) {
|
|
85
|
-
const templateFiles = listFiles(composedDir).filter((f) => !f.startsWith(".init/") && !f.startsWith(".init\\")).map((f) => manifest.rename[f] ?? f);
|
|
86
|
-
const opts = { cwd: projectRoot, uid: ids?.uid, gid: ids?.gid, env };
|
|
87
|
-
await exec("git", ["checkout", "--orphan", TEMPLATE_BRANCH], opts);
|
|
88
|
-
await exec("git", ["add", "--", ...templateFiles], opts);
|
|
89
|
-
await exec("git", ["commit", "-m", "template update"], opts);
|
|
90
|
-
await exec("git", ["checkout", "-b", "main"], opts);
|
|
91
|
-
await exec("git", ["add", "-A"], opts);
|
|
92
|
-
await exec("git", ["commit", "-m", "initial commit"], opts);
|
|
93
|
-
}
|
|
94
|
-
export {
|
|
95
|
-
run
|
|
96
|
-
};
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
run
|
|
4
|
-
} from "./chunk-AWHQZDB4.js";
|
|
5
|
-
import {
|
|
6
|
-
stopDaemon
|
|
7
|
-
} from "./chunk-YNNK4QN2.js";
|
|
8
|
-
import "./chunk-D424ZQGI.js";
|
|
9
|
-
import "./chunk-DP2DX4WV.js";
|
|
10
|
-
import "./chunk-K3NQKI34.js";
|
|
11
|
-
|
|
12
|
-
// src/commands/daemon-restart.ts
|
|
13
|
-
async function run2(args) {
|
|
14
|
-
const result = await stopDaemon();
|
|
15
|
-
if (!result.stopped && result.reason === "systemd") {
|
|
16
|
-
console.error("Volute is managed by a systemd service.");
|
|
17
|
-
console.error("Use: sudo systemctl restart volute");
|
|
18
|
-
process.exit(1);
|
|
19
|
-
}
|
|
20
|
-
if (!result.stopped && result.reason === "kill-failed") {
|
|
21
|
-
console.error("Cannot restart: failed to stop the running daemon.");
|
|
22
|
-
process.exit(1);
|
|
23
|
-
}
|
|
24
|
-
await run(args);
|
|
25
|
-
}
|
|
26
|
-
export {
|
|
27
|
-
run2 as run
|
|
28
|
-
};
|
package/dist/delete-WKQKE3FT.js
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
resolveAgentName
|
|
4
|
-
} from "./chunk-AZEL2IEK.js";
|
|
5
|
-
import {
|
|
6
|
-
deleteAgentUser as deleteAgentUser2
|
|
7
|
-
} from "./chunk-ECPQXRLB.js";
|
|
8
|
-
import {
|
|
9
|
-
parseArgs
|
|
10
|
-
} from "./chunk-D424ZQGI.js";
|
|
11
|
-
import {
|
|
12
|
-
deleteAgentUser
|
|
13
|
-
} from "./chunk-IQXBMFZG.js";
|
|
14
|
-
import {
|
|
15
|
-
agentDir,
|
|
16
|
-
findAgent,
|
|
17
|
-
removeAgent,
|
|
18
|
-
removeAllVariants,
|
|
19
|
-
stateDir
|
|
20
|
-
} from "./chunk-DP2DX4WV.js";
|
|
21
|
-
import "./chunk-K3NQKI34.js";
|
|
22
|
-
|
|
23
|
-
// src/commands/delete.ts
|
|
24
|
-
import { existsSync, rmSync } from "fs";
|
|
25
|
-
async function run(args) {
|
|
26
|
-
const { positional, flags } = parseArgs(args, {
|
|
27
|
-
force: { type: "boolean" }
|
|
28
|
-
});
|
|
29
|
-
const name = resolveAgentName({ agent: positional[0] });
|
|
30
|
-
const entry = findAgent(name);
|
|
31
|
-
if (!entry) {
|
|
32
|
-
console.error(`Unknown agent: ${name}`);
|
|
33
|
-
process.exit(1);
|
|
34
|
-
}
|
|
35
|
-
try {
|
|
36
|
-
const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
|
|
37
|
-
const { daemonFetch } = await import("./daemon-client-P44NU3KU.js");
|
|
38
|
-
const client = getClient();
|
|
39
|
-
const res = await daemonFetch(
|
|
40
|
-
urlOf(client.api.agents[":name"].stop.$url({ param: { name } })),
|
|
41
|
-
{ method: "POST" }
|
|
42
|
-
);
|
|
43
|
-
if (res.ok) {
|
|
44
|
-
console.log(`Stopped ${name}.`);
|
|
45
|
-
}
|
|
46
|
-
} catch {
|
|
47
|
-
}
|
|
48
|
-
const dir = agentDir(name);
|
|
49
|
-
removeAllVariants(name);
|
|
50
|
-
removeAgent(name);
|
|
51
|
-
await deleteAgentUser2(name);
|
|
52
|
-
console.log(`Removed ${name} from registry.`);
|
|
53
|
-
const state = stateDir(name);
|
|
54
|
-
if (existsSync(state)) {
|
|
55
|
-
rmSync(state, { recursive: true, force: true });
|
|
56
|
-
}
|
|
57
|
-
if (existsSync(dir)) {
|
|
58
|
-
if (!flags.force) {
|
|
59
|
-
console.log(`Directory: ${dir}`);
|
|
60
|
-
console.log("Use --force to also delete the agent directory.");
|
|
61
|
-
} else {
|
|
62
|
-
rmSync(dir, { recursive: true, force: true });
|
|
63
|
-
deleteAgentUser(name);
|
|
64
|
-
console.log(`Deleted ${dir}`);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
export {
|
|
69
|
-
run
|
|
70
|
-
};
|