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.
- package/README.md +29 -29
- package/dist/agent-Z2B6EFEQ.js +75 -0
- package/dist/{agent-manager-AUCKMGPR.js → agent-manager-PXBKA2GK.js} +4 -4
- package/dist/channel-MK5OK2SI.js +113 -0
- package/dist/chunk-5X7HGB6L.js +107 -0
- package/dist/{chunk-YGFIWIOF.js → chunk-7L4AN5D4.js} +1 -1
- package/dist/{chunk-VRVVQIYY.js → chunk-AZEL2IEK.js} +1 -1
- package/dist/chunk-B3R6L2GW.js +24 -0
- package/dist/{chunk-DNOXHLE5.js → chunk-HE67X4T6.js} +1 -1
- package/dist/{chunk-I6OHXCMV.js → chunk-MW2KFO3B.js} +47 -9
- package/dist/chunk-MXUCNIBG.js +168 -0
- package/dist/chunk-SMISE4SV.js +226 -0
- package/dist/{chunk-SOZA2TLP.js → chunk-UAVD2AHX.js} +1 -1
- package/dist/{chunk-3C2XR4IY.js → chunk-UX25Z2ND.js} +113 -107
- package/dist/{chunk-GSPKUPKU.js → chunk-XUA3JUFK.js} +2 -1
- package/dist/chunk-ZYGKG6VC.js +22 -0
- package/dist/cli.js +98 -75
- package/dist/connector-LYEMXQEV.js +157 -0
- package/dist/connectors/discord.js +104 -161
- package/dist/connectors/slack.js +179 -0
- package/dist/connectors/telegram.js +175 -0
- package/dist/conversation-ERXEQZTY.js +163 -0
- package/dist/create-RVCZN6HE.js +91 -0
- package/dist/{daemon-client-XR24PUJF.js → daemon-client-ZY6UUN2M.js} +2 -2
- package/dist/daemon.js +824 -252
- package/dist/{delete-GQ7JEK2S.js → delete-3QH7VYIN.js} +8 -9
- package/dist/{down-3OB6UVAJ.js → down-O7IFZLVJ.js} +1 -1
- package/dist/{env-JB27UAC3.js → env-4D4REPJF.js} +8 -5
- package/dist/{history-3VRUBGGV.js → history-OEONB53Z.js} +5 -5
- package/dist/{import-K4MP2GX7.js → import-MXJB2EII.js} +23 -8
- package/dist/{logs-NXFFGUKY.js → logs-DF342W4M.js} +2 -2
- package/dist/message-ADHWFHSI.js +32 -0
- package/dist/package-VQOE7JNH.js +89 -0
- package/dist/{schedule-4I5TYHFH.js → schedule-NAG6F463.js} +12 -7
- package/dist/send-66QMKRUH.js +75 -0
- package/dist/{setup-SRS7AUAA.js → setup-RPRRGG2F.js} +6 -6
- package/dist/{start-LDPMCMYT.js → start-TUOXDSFL.js} +3 -3
- package/dist/{status-MVSQG54T.js → status-A36EHRO4.js} +3 -3
- package/dist/{stop-5PZTZCLL.js → stop-AOJZLQ5X.js} +6 -7
- package/dist/{up-UT3IMKCA.js → up-7ILD7GU7.js} +2 -2
- package/dist/update-LPSIAWQ2.js +140 -0
- package/dist/update-check-Y33QDCFL.js +17 -0
- package/dist/{upgrade-CDKECCGN.js → upgrade-FX2TKJ2S.js} +16 -15
- package/dist/{variant-CVYM3EQG.js → variant-LAB67OC2.js} +17 -12
- package/dist/web-assets/assets/index-BbRmoxoA.js +308 -0
- package/dist/web-assets/index.html +2 -2
- package/drizzle/0003_clean_ego.sql +12 -0
- package/drizzle/meta/0003_snapshot.json +417 -0
- package/drizzle/meta/_journal.json +7 -0
- package/package.json +3 -1
- package/templates/_base/.init/.config/hooks/startup-context.sh +19 -1
- package/templates/_base/_skills/volute-agent/SKILL.md +112 -16
- package/templates/_base/home/.config/routes.json +10 -0
- package/templates/_base/home/VOLUTE.md +19 -28
- package/templates/_base/src/lib/file-handler.ts +46 -0
- package/templates/_base/src/lib/format-prefix.ts +1 -1
- package/templates/_base/src/lib/router.ts +327 -0
- package/templates/_base/src/lib/routing.ts +137 -0
- package/templates/_base/src/lib/types.ts +16 -3
- package/templates/_base/src/lib/volute-server.ts +20 -48
- package/templates/agent-sdk/.init/.config/routes.json +5 -0
- package/templates/agent-sdk/.init/CLAUDE.md +2 -2
- package/templates/agent-sdk/src/agent.ts +269 -82
- package/templates/agent-sdk/src/server.ts +19 -4
- package/templates/agent-sdk/volute-template.json +1 -1
- package/templates/pi/.init/.config/routes.json +5 -0
- package/templates/pi/.init/AGENTS.md +1 -1
- package/templates/pi/src/agent.ts +279 -58
- package/templates/pi/src/server.ts +15 -4
- package/templates/pi/volute-template.json +1 -1
- package/dist/channel-7FZ6D25H.js +0 -90
- package/dist/chunk-N4YNKR3Q.js +0 -90
- package/dist/connector-TVJULIRT.js +0 -96
- package/dist/create-BRG2DBWI.js +0 -79
- package/dist/send-UK3JBZIB.js +0 -53
- package/dist/web-assets/assets/index-BC5eSqbY.js +0 -296
- package/templates/_base/src/lib/sessions.ts +0 -71
- package/templates/agent-sdk/.init/.config/sessions.json +0 -4
- package/templates/agent-sdk/src/lib/agent-sessions.ts +0 -204
- package/templates/pi/.init/.config/sessions.json +0 -1
- package/templates/pi/src/lib/agent-sessions.ts +0 -210
- package/dist/{service-SA4TTMDU.js → service-HZNIDNJF.js} +3 -3
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
} from "./chunk-
|
|
3
|
+
resolveAgentName
|
|
4
|
+
} from "./chunk-AZEL2IEK.js";
|
|
5
5
|
import {
|
|
6
6
|
parseArgs
|
|
7
7
|
} from "./chunk-D424ZQGI.js";
|
|
8
|
+
import {
|
|
9
|
+
deleteAgentUser
|
|
10
|
+
} from "./chunk-UAVD2AHX.js";
|
|
8
11
|
import {
|
|
9
12
|
agentDir,
|
|
10
13
|
findAgent,
|
|
11
14
|
removeAgent,
|
|
12
15
|
removeAllVariants
|
|
13
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-UX25Z2ND.js";
|
|
14
17
|
import "./chunk-K3NQKI34.js";
|
|
15
18
|
|
|
16
19
|
// src/commands/delete.ts
|
|
@@ -19,18 +22,14 @@ async function run(args) {
|
|
|
19
22
|
const { positional, flags } = parseArgs(args, {
|
|
20
23
|
force: { type: "boolean" }
|
|
21
24
|
});
|
|
22
|
-
const name = positional[0];
|
|
23
|
-
if (!name) {
|
|
24
|
-
console.error("Usage: volute delete <name> [--force]");
|
|
25
|
-
process.exit(1);
|
|
26
|
-
}
|
|
25
|
+
const name = resolveAgentName({ agent: positional[0] });
|
|
27
26
|
const entry = findAgent(name);
|
|
28
27
|
if (!entry) {
|
|
29
28
|
console.error(`Unknown agent: ${name}`);
|
|
30
29
|
process.exit(1);
|
|
31
30
|
}
|
|
32
31
|
try {
|
|
33
|
-
const { daemonFetch } = await import("./daemon-client-
|
|
32
|
+
const { daemonFetch } = await import("./daemon-client-ZY6UUN2M.js");
|
|
34
33
|
const res = await daemonFetch(`/api/agents/${encodeURIComponent(name)}/stop`, {
|
|
35
34
|
method: "POST"
|
|
36
35
|
});
|
|
@@ -5,13 +5,13 @@ import {
|
|
|
5
5
|
readEnv,
|
|
6
6
|
sharedEnvPath,
|
|
7
7
|
writeEnv
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-HE67X4T6.js";
|
|
9
9
|
import {
|
|
10
10
|
parseArgs
|
|
11
11
|
} from "./chunk-D424ZQGI.js";
|
|
12
12
|
import {
|
|
13
13
|
resolveAgent
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-UX25Z2ND.js";
|
|
15
15
|
import "./chunk-K3NQKI34.js";
|
|
16
16
|
|
|
17
17
|
// src/commands/env.ts
|
|
@@ -153,12 +153,15 @@ async function run(args) {
|
|
|
153
153
|
console.log(`Removed ${key} [${scope}]`);
|
|
154
154
|
break;
|
|
155
155
|
}
|
|
156
|
+
case "--help":
|
|
157
|
+
case "-h":
|
|
158
|
+
case void 0:
|
|
159
|
+
console.log(`Usage: volute env <set|get|list|remove> [--agent <name>]`);
|
|
160
|
+
break;
|
|
156
161
|
default:
|
|
157
162
|
console.error(`Usage: volute env <set|get|list|remove> [--agent <name>]`);
|
|
158
|
-
|
|
159
|
-
console.error(`
|
|
163
|
+
console.error(`
|
|
160
164
|
Unknown subcommand: ${subcommand}`);
|
|
161
|
-
}
|
|
162
165
|
process.exit(1);
|
|
163
166
|
}
|
|
164
167
|
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
daemonFetch
|
|
4
|
-
} from "./chunk-YGFIWIOF.js";
|
|
5
2
|
import {
|
|
6
3
|
resolveAgentName
|
|
7
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-AZEL2IEK.js";
|
|
8
5
|
import {
|
|
9
6
|
parseArgs
|
|
10
7
|
} from "./chunk-D424ZQGI.js";
|
|
11
|
-
import
|
|
8
|
+
import {
|
|
9
|
+
daemonFetch
|
|
10
|
+
} from "./chunk-7L4AN5D4.js";
|
|
11
|
+
import "./chunk-UX25Z2ND.js";
|
|
12
12
|
import "./chunk-K3NQKI34.js";
|
|
13
13
|
|
|
14
14
|
// src/commands/history.ts
|
|
@@ -7,25 +7,25 @@ import {
|
|
|
7
7
|
agentEnvPath,
|
|
8
8
|
readEnv,
|
|
9
9
|
writeEnv
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-HE67X4T6.js";
|
|
11
11
|
import {
|
|
12
12
|
composeTemplate,
|
|
13
13
|
copyTemplateToDir,
|
|
14
14
|
findTemplatesRoot
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-XUA3JUFK.js";
|
|
16
|
+
import {
|
|
17
|
+
parseArgs
|
|
18
|
+
} from "./chunk-D424ZQGI.js";
|
|
16
19
|
import {
|
|
17
20
|
exec,
|
|
18
21
|
execInherit
|
|
19
22
|
} from "./chunk-5SKQ6J7T.js";
|
|
20
|
-
import {
|
|
21
|
-
parseArgs
|
|
22
|
-
} from "./chunk-D424ZQGI.js";
|
|
23
23
|
import {
|
|
24
24
|
addAgent,
|
|
25
25
|
agentDir,
|
|
26
26
|
ensureVoluteHome,
|
|
27
27
|
nextPort
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-UX25Z2ND.js";
|
|
29
29
|
import "./chunk-K3NQKI34.js";
|
|
30
30
|
|
|
31
31
|
// src/commands/import.ts
|
|
@@ -394,7 +394,7 @@ ${user.trimEnd()}
|
|
|
394
394
|
console.log(`
|
|
395
395
|
Imported agent: ${name} (port ${port})`);
|
|
396
396
|
console.log(`
|
|
397
|
-
volute start ${name}`);
|
|
397
|
+
volute agent start ${name}`);
|
|
398
398
|
}
|
|
399
399
|
function resolveWorkspace(explicitPath) {
|
|
400
400
|
if (explicitPath) {
|
|
@@ -416,7 +416,7 @@ function resolveWorkspace(explicitPath) {
|
|
|
416
416
|
return openclawWs;
|
|
417
417
|
}
|
|
418
418
|
console.error(
|
|
419
|
-
"Usage: volute import [<workspace-path>] [--name <name>] [--session <path>] [--template <name>]\n\nNo OpenClaw workspace found. Provide a path, run from a workspace, or ensure ~/.openclaw/workspace exists."
|
|
419
|
+
"Usage: volute agent import [<workspace-path>] [--name <name>] [--session <path>] [--template <name>]\n\nNo OpenClaw workspace found. Provide a path, run from a workspace, or ensure ~/.openclaw/workspace exists."
|
|
420
420
|
);
|
|
421
421
|
process.exit(1);
|
|
422
422
|
}
|
|
@@ -491,12 +491,27 @@ function importOpenClawConnectors(agentDirPath) {
|
|
|
491
491
|
const env = readEnv(envPath);
|
|
492
492
|
env.DISCORD_TOKEN = discord.token;
|
|
493
493
|
writeEnv(envPath, env);
|
|
494
|
+
const channelNames = /* @__PURE__ */ new Set();
|
|
495
|
+
if (discord.guilds) {
|
|
496
|
+
for (const guild of Object.values(discord.guilds)) {
|
|
497
|
+
if (!guild.channels) continue;
|
|
498
|
+
for (const [name, ch] of Object.entries(guild.channels)) {
|
|
499
|
+
if (ch.allow) channelNames.add(name);
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
}
|
|
494
503
|
const voluteConfig = readVoluteConfig(agentDirPath) ?? {};
|
|
495
504
|
const connectors = new Set(voluteConfig.connectors ?? []);
|
|
496
505
|
connectors.add("discord");
|
|
497
506
|
voluteConfig.connectors = [...connectors];
|
|
507
|
+
if (channelNames.size > 0) {
|
|
508
|
+
voluteConfig.discord = { channels: [...channelNames] };
|
|
509
|
+
}
|
|
498
510
|
writeVoluteConfig(agentDirPath, voluteConfig);
|
|
499
511
|
console.log("Imported Discord connector config");
|
|
512
|
+
if (channelNames.size > 0) {
|
|
513
|
+
console.log(`Imported followed channels: ${[...channelNames].join(", ")}`);
|
|
514
|
+
}
|
|
500
515
|
}
|
|
501
516
|
function parseNameFromIdentity(identity) {
|
|
502
517
|
const match = identity.match(/\*\*Name:\*\*\s*(.+)/);
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
resolveAgentName
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-AZEL2IEK.js";
|
|
5
5
|
import {
|
|
6
6
|
parseArgs
|
|
7
7
|
} from "./chunk-D424ZQGI.js";
|
|
8
8
|
import {
|
|
9
9
|
resolveAgent
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-UX25Z2ND.js";
|
|
11
11
|
import "./chunk-K3NQKI34.js";
|
|
12
12
|
|
|
13
13
|
// src/commands/logs.ts
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import "./chunk-K3NQKI34.js";
|
|
3
|
+
|
|
4
|
+
// src/commands/message.ts
|
|
5
|
+
async function run(args) {
|
|
6
|
+
const subcommand = args[0];
|
|
7
|
+
switch (subcommand) {
|
|
8
|
+
case "send":
|
|
9
|
+
await import("./send-66QMKRUH.js").then((m) => m.run(args.slice(1)));
|
|
10
|
+
break;
|
|
11
|
+
case "history":
|
|
12
|
+
await import("./history-OEONB53Z.js").then((m) => m.run(args.slice(1)));
|
|
13
|
+
break;
|
|
14
|
+
case "--help":
|
|
15
|
+
case "-h":
|
|
16
|
+
case void 0:
|
|
17
|
+
printUsage();
|
|
18
|
+
break;
|
|
19
|
+
default:
|
|
20
|
+
printUsage();
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function printUsage() {
|
|
25
|
+
console.log(`Usage:
|
|
26
|
+
volute message send <name> "<msg>"
|
|
27
|
+
echo "msg" | volute message send <name>
|
|
28
|
+
volute message history [--agent <name>] [--channel <ch>] [--limit N]`);
|
|
29
|
+
}
|
|
30
|
+
export {
|
|
31
|
+
run
|
|
32
|
+
};
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import "./chunk-K3NQKI34.js";
|
|
3
|
+
|
|
4
|
+
// package.json
|
|
5
|
+
var package_default = {
|
|
6
|
+
name: "volute",
|
|
7
|
+
version: "0.5.0",
|
|
8
|
+
description: "CLI for creating and managing self-modifying AI agents powered by the Claude Agent SDK",
|
|
9
|
+
type: "module",
|
|
10
|
+
license: "MIT",
|
|
11
|
+
repository: {
|
|
12
|
+
type: "git",
|
|
13
|
+
url: "https://github.com/mimsy/volute.git"
|
|
14
|
+
},
|
|
15
|
+
keywords: [
|
|
16
|
+
"cli",
|
|
17
|
+
"ai",
|
|
18
|
+
"agents",
|
|
19
|
+
"claude",
|
|
20
|
+
"anthropic"
|
|
21
|
+
],
|
|
22
|
+
engines: {
|
|
23
|
+
node: ">=22"
|
|
24
|
+
},
|
|
25
|
+
bin: {
|
|
26
|
+
volute: "dist/cli.js"
|
|
27
|
+
},
|
|
28
|
+
files: [
|
|
29
|
+
"dist/",
|
|
30
|
+
"drizzle/",
|
|
31
|
+
"templates/"
|
|
32
|
+
],
|
|
33
|
+
scripts: {
|
|
34
|
+
dev: "tsx src/cli.ts",
|
|
35
|
+
build: "tsup && npm run build:web",
|
|
36
|
+
"build:web": "vite build --config src/web/frontend/vite.config.ts",
|
|
37
|
+
"dev:web": "vite --config src/web/frontend/vite.config.ts",
|
|
38
|
+
test: "node --import tsx --import ./test/setup.ts --test --test-force-exit --test-concurrency=1 test/*.test.ts",
|
|
39
|
+
lint: "biome check src/ test/",
|
|
40
|
+
"lint:fix": "biome check --write src/ test/",
|
|
41
|
+
format: "biome format --write src/ test/",
|
|
42
|
+
typecheck: "tsc --noEmit",
|
|
43
|
+
"typecheck:templates": "tsc --noEmit -p templates/agent-sdk/tsconfig.json && tsc --noEmit -p templates/pi/tsconfig.json",
|
|
44
|
+
"lint:templates": "biome check templates/",
|
|
45
|
+
"typecheck:web": "tsc --noEmit -p src/web/frontend/tsconfig.json",
|
|
46
|
+
prepare: "lefthook install",
|
|
47
|
+
prepublishOnly: "npm run build",
|
|
48
|
+
"db:generate": "drizzle-kit generate",
|
|
49
|
+
"db:migrate": "drizzle-kit migrate"
|
|
50
|
+
},
|
|
51
|
+
dependencies: {
|
|
52
|
+
"@hono/node-server": "^1.19.9",
|
|
53
|
+
"@hono/zod-validator": "^0.7.6",
|
|
54
|
+
"@libsql/client": "^0.17.0",
|
|
55
|
+
"@slack/bolt": "^4.6.0",
|
|
56
|
+
bcryptjs: "^3.0.3",
|
|
57
|
+
"cron-parser": "^5.5.0",
|
|
58
|
+
"discord.js": "^14.25.1",
|
|
59
|
+
"drizzle-orm": "^0.45.1",
|
|
60
|
+
hono: "^4.11.7",
|
|
61
|
+
telegraf: "^4.16.3",
|
|
62
|
+
zod: "^4.3.6"
|
|
63
|
+
},
|
|
64
|
+
devDependencies: {
|
|
65
|
+
"@anthropic-ai/claude-agent-sdk": "^0.2.34",
|
|
66
|
+
"@biomejs/biome": "2.3.14",
|
|
67
|
+
"@mariozechner/pi-ai": "^0.52.7",
|
|
68
|
+
"@mariozechner/pi-coding-agent": "^0.52.7",
|
|
69
|
+
"@types/bcryptjs": "^2.4.6",
|
|
70
|
+
"@types/dompurify": "^3.0.5",
|
|
71
|
+
"@types/node": "^25.2.0",
|
|
72
|
+
"@types/react": "^19.2.11",
|
|
73
|
+
"@types/react-dom": "^19.2.3",
|
|
74
|
+
"@vitejs/plugin-react": "^5.1.3",
|
|
75
|
+
dompurify: "^3.3.1",
|
|
76
|
+
"drizzle-kit": "^0.31.8",
|
|
77
|
+
lefthook: "^2.1.0",
|
|
78
|
+
marked: "^17.0.1",
|
|
79
|
+
react: "^19.2.4",
|
|
80
|
+
"react-dom": "^19.2.4",
|
|
81
|
+
tsup: "^8.0.0",
|
|
82
|
+
tsx: "^4.0.0",
|
|
83
|
+
typescript: "^5.7.0",
|
|
84
|
+
vite: "^7.3.1"
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
export {
|
|
88
|
+
package_default as default
|
|
89
|
+
};
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
daemonFetch
|
|
4
|
-
} from "./chunk-YGFIWIOF.js";
|
|
5
2
|
import {
|
|
6
3
|
resolveAgentName
|
|
7
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-AZEL2IEK.js";
|
|
8
5
|
import {
|
|
9
6
|
parseArgs
|
|
10
7
|
} from "./chunk-D424ZQGI.js";
|
|
11
|
-
import
|
|
8
|
+
import {
|
|
9
|
+
daemonFetch
|
|
10
|
+
} from "./chunk-7L4AN5D4.js";
|
|
11
|
+
import "./chunk-UX25Z2ND.js";
|
|
12
12
|
import "./chunk-K3NQKI34.js";
|
|
13
13
|
|
|
14
14
|
// src/commands/schedule.ts
|
|
@@ -24,13 +24,18 @@ async function run(args) {
|
|
|
24
24
|
case "remove":
|
|
25
25
|
await removeSchedule(args.slice(1));
|
|
26
26
|
break;
|
|
27
|
+
case "--help":
|
|
28
|
+
case "-h":
|
|
29
|
+
case void 0:
|
|
30
|
+
printUsage();
|
|
31
|
+
break;
|
|
27
32
|
default:
|
|
28
33
|
printUsage();
|
|
29
|
-
process.exit(
|
|
34
|
+
process.exit(1);
|
|
30
35
|
}
|
|
31
36
|
}
|
|
32
37
|
function printUsage() {
|
|
33
|
-
console.
|
|
38
|
+
console.log(`Usage:
|
|
34
39
|
volute schedule list [--agent <name>]
|
|
35
40
|
volute schedule add [--agent <name>] --cron "..." --message "..." [--id name]
|
|
36
41
|
volute schedule remove [--agent <name>] --id <id>`);
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
readStdin
|
|
4
|
+
} from "./chunk-ZYGKG6VC.js";
|
|
5
|
+
import {
|
|
6
|
+
summarizeTool
|
|
7
|
+
} from "./chunk-B3R6L2GW.js";
|
|
8
|
+
import {
|
|
9
|
+
daemonFetch
|
|
10
|
+
} from "./chunk-7L4AN5D4.js";
|
|
11
|
+
import "./chunk-UX25Z2ND.js";
|
|
12
|
+
import "./chunk-K3NQKI34.js";
|
|
13
|
+
|
|
14
|
+
// src/commands/send.ts
|
|
15
|
+
import { userInfo } from "os";
|
|
16
|
+
async function run(args) {
|
|
17
|
+
const name = args[0];
|
|
18
|
+
const message = args[1] ?? await readStdin();
|
|
19
|
+
if (!name || !message) {
|
|
20
|
+
console.error('Usage: volute message send <name> "<message>"');
|
|
21
|
+
console.error(' echo "message" | volute message send <name>');
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
const agentSelf = process.env.VOLUTE_AGENT;
|
|
25
|
+
const sender = agentSelf || userInfo().username;
|
|
26
|
+
const res = await daemonFetch(`/api/agents/${encodeURIComponent(name)}/chat`, {
|
|
27
|
+
method: "POST",
|
|
28
|
+
headers: { "Content-Type": "application/json" },
|
|
29
|
+
body: JSON.stringify({ message, sender })
|
|
30
|
+
});
|
|
31
|
+
if (!res.ok) {
|
|
32
|
+
const data = await res.json();
|
|
33
|
+
console.error(data.error ?? `Failed to send message: ${res.status}`);
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
if (!res.body) {
|
|
37
|
+
console.error("No response body");
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
const reader = res.body.getReader();
|
|
41
|
+
const decoder = new TextDecoder();
|
|
42
|
+
let buffer = "";
|
|
43
|
+
while (true) {
|
|
44
|
+
const { done, value } = await reader.read();
|
|
45
|
+
if (done) break;
|
|
46
|
+
buffer += decoder.decode(value, { stream: true });
|
|
47
|
+
const lines = buffer.split("\n");
|
|
48
|
+
buffer = lines.pop() ?? "";
|
|
49
|
+
for (const line of lines) {
|
|
50
|
+
if (!line.startsWith("data:")) continue;
|
|
51
|
+
const data = line.slice(5).trim();
|
|
52
|
+
if (!data) continue;
|
|
53
|
+
let event;
|
|
54
|
+
try {
|
|
55
|
+
event = JSON.parse(data);
|
|
56
|
+
} catch {
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (event.type === "text") {
|
|
60
|
+
process.stdout.write(event.content);
|
|
61
|
+
} else if (event.type === "tool_use") {
|
|
62
|
+
process.stderr.write(`${summarizeTool(event.name, event.input)}
|
|
63
|
+
`);
|
|
64
|
+
}
|
|
65
|
+
if (event.type === "done") {
|
|
66
|
+
process.stdout.write("\n");
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
process.stdout.write("\n");
|
|
72
|
+
}
|
|
73
|
+
export {
|
|
74
|
+
run
|
|
75
|
+
};
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
} from "./chunk-
|
|
3
|
+
parseArgs
|
|
4
|
+
} from "./chunk-D424ZQGI.js";
|
|
5
5
|
import {
|
|
6
6
|
ensureVoluteGroup
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-UAVD2AHX.js";
|
|
8
8
|
import {
|
|
9
|
-
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
9
|
+
resolveVoluteBin
|
|
10
|
+
} from "./chunk-5SKQ6J7T.js";
|
|
11
|
+
import "./chunk-UX25Z2ND.js";
|
|
12
12
|
import "./chunk-K3NQKI34.js";
|
|
13
13
|
|
|
14
14
|
// src/commands/setup.ts
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
daemonFetch
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-7L4AN5D4.js";
|
|
5
5
|
import {
|
|
6
6
|
resolveAgent
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-UX25Z2ND.js";
|
|
8
8
|
import "./chunk-K3NQKI34.js";
|
|
9
9
|
|
|
10
10
|
// src/commands/start.ts
|
|
11
11
|
async function run(args) {
|
|
12
12
|
const name = args[0];
|
|
13
13
|
if (!name) {
|
|
14
|
-
console.error("Usage: volute start <name>");
|
|
14
|
+
console.error("Usage: volute agent start <name>");
|
|
15
15
|
process.exit(1);
|
|
16
16
|
}
|
|
17
17
|
const { entry } = resolveAgent(name);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
daemonFetch
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-7L4AN5D4.js";
|
|
5
|
+
import "./chunk-UX25Z2ND.js";
|
|
6
6
|
import "./chunk-K3NQKI34.js";
|
|
7
7
|
|
|
8
8
|
// src/commands/status.ts
|
|
@@ -17,7 +17,7 @@ async function run(args) {
|
|
|
17
17
|
}
|
|
18
18
|
const agents = await res2.json();
|
|
19
19
|
if (agents.length === 0) {
|
|
20
|
-
console.log("No agents registered. Create one with: volute create <name>");
|
|
20
|
+
console.log("No agents registered. Create one with: volute agent create <name>");
|
|
21
21
|
return;
|
|
22
22
|
}
|
|
23
23
|
const nameW = Math.max(4, ...agents.map((a) => a.name.length));
|
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
resolveAgentName
|
|
4
|
+
} from "./chunk-AZEL2IEK.js";
|
|
2
5
|
import {
|
|
3
6
|
daemonFetch
|
|
4
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-7L4AN5D4.js";
|
|
5
8
|
import {
|
|
6
9
|
resolveAgent
|
|
7
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-UX25Z2ND.js";
|
|
8
11
|
import "./chunk-K3NQKI34.js";
|
|
9
12
|
|
|
10
13
|
// src/commands/stop.ts
|
|
11
14
|
async function run(args) {
|
|
12
|
-
const name = args[0];
|
|
13
|
-
if (!name) {
|
|
14
|
-
console.error("Usage: volute stop <name>");
|
|
15
|
-
process.exit(1);
|
|
16
|
-
}
|
|
15
|
+
const name = resolveAgentName({ agent: args[0] });
|
|
17
16
|
resolveAgent(name);
|
|
18
17
|
const res = await daemonFetch(`/api/agents/${encodeURIComponent(name)}/stop`, {
|
|
19
18
|
method: "POST"
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-D424ZQGI.js";
|
|
5
5
|
import {
|
|
6
6
|
voluteHome
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-UX25Z2ND.js";
|
|
8
8
|
import "./chunk-K3NQKI34.js";
|
|
9
9
|
|
|
10
10
|
// src/commands/up.ts
|
|
@@ -58,7 +58,7 @@ async function run(args) {
|
|
|
58
58
|
process.execPath,
|
|
59
59
|
[daemonModule, "--port", String(port), "--host", hostname],
|
|
60
60
|
{
|
|
61
|
-
stdio: ["ignore",
|
|
61
|
+
stdio: ["ignore", "ignore", logFd],
|
|
62
62
|
detached: true
|
|
63
63
|
}
|
|
64
64
|
);
|