volute 0.13.2 → 0.14.1
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/{channel-JZJJRRWT.js → channel-SLURLIRV.js} +28 -28
- package/dist/{chunk-KRJ6KCBI.js → chunk-2Y77MCFG.js} +3 -3
- package/dist/{chunk-AA5TDLXB.js → chunk-3FC42ZBM.js} +24 -24
- package/dist/{chunk-YYUSXARD.js → chunk-6BDNWYKG.js} +2 -2
- package/dist/{chunk-KN4WBLH2.js → chunk-BEFIBW5B.js} +2 -2
- package/dist/{chunk-FE5O5RSL.js → chunk-GSPWIM5E.js} +25 -25
- package/dist/{chunk-QRRXD2V7.js → chunk-J52CJCVI.js} +71 -69
- package/dist/{chunk-LGSW7T7K.js → chunk-M77QBTEH.js} +60 -57
- package/dist/{chunk-KXOFPDO6.js → chunk-MVSXRMJJ.js} +1 -1
- package/dist/chunk-NAOW2CLO.js +15 -0
- package/dist/{chunk-VQIJUR43.js → chunk-OJQ47SCA.js} +1 -1
- package/dist/{chunk-O4BN3ZIY.js → chunk-OYSZNX5I.js} +7 -7
- package/dist/{chunk-AOSGW3MX.js → chunk-PDLAZJGC.js} +28 -28
- package/dist/{chunk-XUA3JUFK.js → chunk-PO5Q2AYN.js} +2 -2
- package/dist/{chunk-6BQHEIDO.js → chunk-QJIIHU32.js} +2 -2
- package/dist/{chunk-NXT67PPK.js → chunk-ZCEYUUID.js} +19 -19
- package/dist/cli.js +42 -42
- package/dist/{connector-WFT5KK67.js → connector-JFAHYFQX.js} +21 -21
- package/dist/connectors/discord.js +7 -7
- package/dist/connectors/slack.js +7 -7
- package/dist/connectors/telegram.js +9 -9
- package/dist/{create-HT47ZH5T.js → create-ZWHCRT5F.js} +7 -7
- package/dist/{daemon-client-DEF7IFEJ.js → daemon-client-ODKDUYDE.js} +2 -2
- package/dist/{daemon-restart-P3FEE3QJ.js → daemon-restart-IZGEF4NA.js} +6 -6
- package/dist/daemon.js +2313 -1997
- package/dist/{delete-YG3RVURA.js → delete-6G6WEX4F.js} +8 -8
- package/dist/down-A56B5JLK.js +14 -0
- package/dist/{env-BQYYF4YL.js → env-6LXDUZDA.js} +25 -25
- package/dist/{history-I4KIKIUX.js → history-LKCJJMUV.js} +7 -7
- package/dist/{import-UHCK6PRC.js → import-EDGRLIGO.js} +3 -3
- package/dist/{logs-2DWFES6A.js → logs-GYOR3L2L.js} +8 -8
- package/dist/mind-OJN6RBZW.js +79 -0
- package/dist/mind-manager-PN5SUDJ4.js +15 -0
- package/dist/{package-MMTPOMUN.js → package-I7Z6G44Y.js} +4 -4
- package/dist/{restart-6PE3GWYZ.js → restart-YFAWFS5T.js} +9 -9
- package/dist/{schedule-5AYTQM3N.js → schedule-AGYLDMNS.js} +17 -17
- package/dist/{seed-3QQVFMBU.js → seed-AP4Q7RZ7.js} +9 -9
- package/dist/{send-FPFW7J5Q.js → send-SV4K2TDE.js} +32 -24
- package/dist/{service-5X5EKPVM.js → service-U7MZ2H7F.js} +4 -4
- package/dist/{setup-5NXV25ZS.js → setup-DJKIZKGW.js} +21 -16
- package/dist/{sprout-VOUJ4Y3I.js → sprout-TJ3BHVOG.js} +25 -18
- package/dist/{start-ICPSQ2ZK.js → start-3YYRXBKP.js} +7 -7
- package/dist/{status-JBT7ENQN.js → status-VSFZYX7S.js} +14 -14
- package/dist/{stop-IXJGAG4T.js → stop-AA5K5LYG.js} +9 -9
- package/dist/{up-ROC7LJ7G.js → up-C4MV6EXV.js} +5 -5
- package/dist/{update-GU6JYDSN.js → update-YAGN5ODG.js} +5 -5
- package/dist/{update-check-MUPZYTW4.js → update-check-APLTH4IN.js} +2 -2
- package/dist/{upgrade-275LKIEG.js → upgrade-KXZCQSZN.js} +8 -10
- package/dist/{variant-RE45F2IY.js → variant-X5QFG6KK.js} +30 -30
- package/dist/web-assets/assets/index-CeFLp8DZ.js +307 -0
- package/dist/web-assets/index.html +1 -1
- package/drizzle/0005_rename_agents_to_minds.sql +11 -0
- package/drizzle/meta/0005_snapshot.json +410 -0
- package/drizzle/meta/_journal.json +7 -0
- package/package.json +4 -4
- package/templates/_base/.init/.config/scripts/session-reader.ts +1 -1
- package/templates/_base/.init/SOUL.md +1 -1
- package/templates/_base/_skills/memory/SKILL.md +1 -1
- package/templates/_base/_skills/orientation/SKILL.md +6 -6
- package/templates/_base/_skills/sessions/SKILL.md +1 -1
- package/templates/_base/_skills/{volute-agent → volute-mind}/SKILL.md +21 -21
- package/templates/_base/home/VOLUTE.md +7 -7
- package/templates/_base/src/lib/auto-commit.ts +1 -1
- package/templates/_base/src/lib/auto-reply.ts +1 -1
- package/templates/_base/src/lib/daemon-client.ts +8 -8
- package/templates/_base/src/lib/router.ts +6 -6
- package/templates/_base/src/lib/routing.ts +9 -6
- package/templates/_base/src/lib/startup.ts +1 -1
- package/templates/_base/src/lib/volute-server.ts +1 -1
- package/templates/{agent-sdk → claude}/.init/CLAUDE.md +3 -3
- package/templates/{agent-sdk → claude}/src/agent.ts +10 -10
- package/templates/{agent-sdk → claude}/src/lib/hooks/pre-compact.ts +2 -2
- package/templates/{agent-sdk → claude}/src/lib/session-store.ts +2 -2
- package/templates/{agent-sdk → claude}/src/lib/stream-consumer.ts +1 -1
- package/templates/{agent-sdk → claude}/src/server.ts +4 -4
- package/templates/pi/.init/{AGENTS.md → MINDS.md} +3 -3
- package/templates/pi/home/.config/config.json.tmpl +1 -1
- package/templates/pi/src/agent.ts +12 -12
- package/templates/pi/src/lib/event-handler.ts +39 -4
- package/templates/pi/src/server.ts +3 -3
- package/dist/agent-IUSETOXJ.js +0 -79
- package/dist/agent-manager-4O4AC2S6.js +0 -15
- package/dist/chunk-AZEL2IEK.js +0 -15
- package/dist/down-36YCOZ7V.js +0 -14
- package/dist/web-assets/assets/index-TqXd1QOX.js +0 -307
- /package/templates/{agent-sdk → claude}/.init/.claude/settings.json +0 -0
- /package/templates/{agent-sdk → claude}/.init/.config/routes.json +0 -0
- /package/templates/{agent-sdk → claude}/package.json.tmpl +0 -0
- /package/templates/{agent-sdk → claude}/src/lib/content.ts +0 -0
- /package/templates/{agent-sdk → claude}/src/lib/hooks/auto-commit.ts +0 -0
- /package/templates/{agent-sdk → claude}/src/lib/hooks/identity-reload.ts +0 -0
- /package/templates/{agent-sdk → claude}/src/lib/hooks/session-context.ts +0 -0
- /package/templates/{agent-sdk → claude}/src/lib/message-channel.ts +0 -0
- /package/templates/{agent-sdk → claude}/volute-template.json +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
} from "./chunk-
|
|
3
|
+
resolveMindName
|
|
4
|
+
} from "./chunk-NAOW2CLO.js";
|
|
5
5
|
import {
|
|
6
6
|
parseArgs
|
|
7
7
|
} from "./chunk-D424ZQGI.js";
|
|
@@ -12,22 +12,22 @@ async function run(args) {
|
|
|
12
12
|
const { positional, flags } = parseArgs(args, {
|
|
13
13
|
force: { type: "boolean" }
|
|
14
14
|
});
|
|
15
|
-
const name =
|
|
16
|
-
const { daemonFetch } = await import("./daemon-client-
|
|
15
|
+
const name = resolveMindName({ mind: positional[0] });
|
|
16
|
+
const { daemonFetch } = await import("./daemon-client-ODKDUYDE.js");
|
|
17
17
|
const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
|
|
18
18
|
const client = getClient();
|
|
19
|
-
const url = urlOf(client.api.
|
|
19
|
+
const url = urlOf(client.api.minds[":name"].$url({ param: { name } })) + (flags.force ? "?force=true" : "");
|
|
20
20
|
const res = await daemonFetch(url, { method: "DELETE" });
|
|
21
21
|
const data = await res.json();
|
|
22
22
|
if (!res.ok) {
|
|
23
|
-
console.error(data.error ?? "Failed to delete
|
|
23
|
+
console.error(data.error ?? "Failed to delete mind");
|
|
24
24
|
process.exit(1);
|
|
25
25
|
}
|
|
26
26
|
console.log(`Removed ${name}.`);
|
|
27
27
|
if (flags.force) {
|
|
28
|
-
console.log("Deleted
|
|
28
|
+
console.log("Deleted mind directory.");
|
|
29
29
|
} else {
|
|
30
|
-
console.log("Use --force to also delete the
|
|
30
|
+
console.log("Use --force to also delete the mind directory.");
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
export {
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
run,
|
|
4
|
+
stopDaemon
|
|
5
|
+
} from "./chunk-QJIIHU32.js";
|
|
6
|
+
import "./chunk-6BDNWYKG.js";
|
|
7
|
+
import "./chunk-2Y77MCFG.js";
|
|
8
|
+
import "./chunk-ZCEYUUID.js";
|
|
9
|
+
import "./chunk-M77QBTEH.js";
|
|
10
|
+
import "./chunk-K3NQKI34.js";
|
|
11
|
+
export {
|
|
12
|
+
run,
|
|
13
|
+
stopDaemon
|
|
14
|
+
};
|
|
@@ -4,8 +4,8 @@ import {
|
|
|
4
4
|
} from "./chunk-D424ZQGI.js";
|
|
5
5
|
import {
|
|
6
6
|
daemonFetch
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-OJQ47SCA.js";
|
|
8
|
+
import "./chunk-M77QBTEH.js";
|
|
9
9
|
import {
|
|
10
10
|
getClient,
|
|
11
11
|
urlOf
|
|
@@ -49,7 +49,7 @@ function maskValue(value) {
|
|
|
49
49
|
}
|
|
50
50
|
async function run(args) {
|
|
51
51
|
const { positional, flags } = parseArgs(args, {
|
|
52
|
-
|
|
52
|
+
mind: { type: "string" },
|
|
53
53
|
reveal: { type: "boolean" }
|
|
54
54
|
});
|
|
55
55
|
const subcommand = positional[0];
|
|
@@ -58,16 +58,16 @@ async function run(args) {
|
|
|
58
58
|
case "set": {
|
|
59
59
|
const key = positional[1];
|
|
60
60
|
if (!key) {
|
|
61
|
-
console.error("Usage: volute env set <KEY> [<VALUE>] [--
|
|
61
|
+
console.error("Usage: volute env set <KEY> [<VALUE>] [--mind <name>]");
|
|
62
62
|
process.exit(1);
|
|
63
63
|
}
|
|
64
64
|
const value = positional[2] ?? await promptValue(key);
|
|
65
65
|
let res;
|
|
66
|
-
if (flags.
|
|
66
|
+
if (flags.mind) {
|
|
67
67
|
res = await daemonFetch(
|
|
68
68
|
urlOf(
|
|
69
|
-
client.api.
|
|
70
|
-
param: { name: flags.
|
|
69
|
+
client.api.minds[":name"].env[":key"].$url({
|
|
70
|
+
param: { name: flags.mind, key }
|
|
71
71
|
})
|
|
72
72
|
),
|
|
73
73
|
{
|
|
@@ -88,21 +88,21 @@ async function run(args) {
|
|
|
88
88
|
console.error(body.error ?? `Failed to set ${key}`);
|
|
89
89
|
process.exit(1);
|
|
90
90
|
}
|
|
91
|
-
const scope = flags.
|
|
91
|
+
const scope = flags.mind ? `mind:${flags.mind}` : "shared";
|
|
92
92
|
console.log(`Set ${key} [${scope}]`);
|
|
93
93
|
break;
|
|
94
94
|
}
|
|
95
95
|
case "get": {
|
|
96
96
|
const key = positional[1];
|
|
97
97
|
if (!key) {
|
|
98
|
-
console.error("Usage: volute env get <KEY> [--
|
|
98
|
+
console.error("Usage: volute env get <KEY> [--mind <name>]");
|
|
99
99
|
process.exit(1);
|
|
100
100
|
}
|
|
101
|
-
if (flags.
|
|
101
|
+
if (flags.mind) {
|
|
102
102
|
const res = await daemonFetch(
|
|
103
103
|
urlOf(
|
|
104
|
-
client.api.
|
|
105
|
-
param: { name: flags.
|
|
104
|
+
client.api.minds[":name"].env[":key"].$url({
|
|
105
|
+
param: { name: flags.mind, key }
|
|
106
106
|
})
|
|
107
107
|
)
|
|
108
108
|
);
|
|
@@ -130,9 +130,9 @@ async function run(args) {
|
|
|
130
130
|
break;
|
|
131
131
|
}
|
|
132
132
|
case "list": {
|
|
133
|
-
if (flags.
|
|
133
|
+
if (flags.mind) {
|
|
134
134
|
const res = await daemonFetch(
|
|
135
|
-
urlOf(client.api.
|
|
135
|
+
urlOf(client.api.minds[":name"].env.$url({ param: { name: flags.mind } }))
|
|
136
136
|
);
|
|
137
137
|
if (!res.ok) {
|
|
138
138
|
const body = await res.json().catch(() => ({}));
|
|
@@ -140,14 +140,14 @@ async function run(args) {
|
|
|
140
140
|
process.exit(1);
|
|
141
141
|
}
|
|
142
142
|
const data = await res.json();
|
|
143
|
-
const allKeys = /* @__PURE__ */ new Set([...Object.keys(data.shared), ...Object.keys(data.
|
|
143
|
+
const allKeys = /* @__PURE__ */ new Set([...Object.keys(data.shared), ...Object.keys(data.mind)]);
|
|
144
144
|
if (allKeys.size === 0) {
|
|
145
145
|
console.log("No environment variables set.");
|
|
146
146
|
return;
|
|
147
147
|
}
|
|
148
148
|
for (const key of [...allKeys].sort()) {
|
|
149
|
-
const scope = key in data.
|
|
150
|
-
const raw = key in data.
|
|
149
|
+
const scope = key in data.mind ? "mind" : "shared";
|
|
150
|
+
const raw = key in data.mind ? data.mind[key] : data.shared[key];
|
|
151
151
|
const value = flags.reveal ? raw : maskValue(raw);
|
|
152
152
|
console.log(`${key}=${value} [${scope}]`);
|
|
153
153
|
}
|
|
@@ -173,15 +173,15 @@ async function run(args) {
|
|
|
173
173
|
case "remove": {
|
|
174
174
|
const key = positional[1];
|
|
175
175
|
if (!key) {
|
|
176
|
-
console.error("Usage: volute env remove <KEY> [--
|
|
176
|
+
console.error("Usage: volute env remove <KEY> [--mind <name>]");
|
|
177
177
|
process.exit(1);
|
|
178
178
|
}
|
|
179
179
|
let res;
|
|
180
|
-
if (flags.
|
|
180
|
+
if (flags.mind) {
|
|
181
181
|
res = await daemonFetch(
|
|
182
182
|
urlOf(
|
|
183
|
-
client.api.
|
|
184
|
-
param: { name: flags.
|
|
183
|
+
client.api.minds[":name"].env[":key"].$url({
|
|
184
|
+
param: { name: flags.mind, key }
|
|
185
185
|
})
|
|
186
186
|
),
|
|
187
187
|
{ method: "DELETE" }
|
|
@@ -192,21 +192,21 @@ async function run(args) {
|
|
|
192
192
|
});
|
|
193
193
|
}
|
|
194
194
|
if (!res.ok) {
|
|
195
|
-
const scope2 = flags.
|
|
195
|
+
const scope2 = flags.mind ? `mind:${flags.mind}` : "shared";
|
|
196
196
|
console.error(`${key} not set in ${scope2} scope`);
|
|
197
197
|
process.exit(1);
|
|
198
198
|
}
|
|
199
|
-
const scope = flags.
|
|
199
|
+
const scope = flags.mind ? `mind:${flags.mind}` : "shared";
|
|
200
200
|
console.log(`Removed ${key} [${scope}]`);
|
|
201
201
|
break;
|
|
202
202
|
}
|
|
203
203
|
case "--help":
|
|
204
204
|
case "-h":
|
|
205
205
|
case void 0:
|
|
206
|
-
console.log(`Usage: volute env <set|get|list|remove> [--
|
|
206
|
+
console.log(`Usage: volute env <set|get|list|remove> [--mind <name>]`);
|
|
207
207
|
break;
|
|
208
208
|
default:
|
|
209
|
-
console.error(`Usage: volute env <set|get|list|remove> [--
|
|
209
|
+
console.error(`Usage: volute env <set|get|list|remove> [--mind <name>]`);
|
|
210
210
|
console.error(`
|
|
211
211
|
Unknown subcommand: ${subcommand}`);
|
|
212
212
|
process.exit(1);
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
} from "./chunk-
|
|
3
|
+
resolveMindName
|
|
4
|
+
} from "./chunk-NAOW2CLO.js";
|
|
5
5
|
import {
|
|
6
6
|
parseArgs
|
|
7
7
|
} from "./chunk-D424ZQGI.js";
|
|
8
8
|
import {
|
|
9
9
|
daemonFetch
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
} from "./chunk-OJQ47SCA.js";
|
|
11
|
+
import "./chunk-M77QBTEH.js";
|
|
12
12
|
import {
|
|
13
13
|
getClient,
|
|
14
14
|
urlOf
|
|
@@ -18,13 +18,13 @@ import "./chunk-K3NQKI34.js";
|
|
|
18
18
|
// src/commands/history.ts
|
|
19
19
|
async function run(args) {
|
|
20
20
|
const { flags } = parseArgs(args, {
|
|
21
|
-
|
|
21
|
+
mind: { type: "string" },
|
|
22
22
|
channel: { type: "string" },
|
|
23
23
|
limit: { type: "string" }
|
|
24
24
|
});
|
|
25
|
-
const name =
|
|
25
|
+
const name = resolveMindName(flags);
|
|
26
26
|
const client = getClient();
|
|
27
|
-
const url = client.api.
|
|
27
|
+
const url = client.api.minds[":name"].history.$url({ param: { name } });
|
|
28
28
|
if (flags.channel) url.searchParams.set("channel", flags.channel);
|
|
29
29
|
if (flags.limit) url.searchParams.set("limit", flags.limit);
|
|
30
30
|
const res = await daemonFetch(urlOf(url));
|
|
@@ -6,10 +6,10 @@ import {
|
|
|
6
6
|
parseNameFromIdentity,
|
|
7
7
|
run,
|
|
8
8
|
sessionMatchesWorkspace
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-GSPWIM5E.js";
|
|
10
|
+
import "./chunk-OYSZNX5I.js";
|
|
11
11
|
import "./chunk-D424ZQGI.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-M77QBTEH.js";
|
|
13
13
|
import "./chunk-K3NQKI34.js";
|
|
14
14
|
export {
|
|
15
15
|
findOpenClawSession,
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
} from "./chunk-
|
|
3
|
+
resolveMindName
|
|
4
|
+
} from "./chunk-NAOW2CLO.js";
|
|
5
5
|
import {
|
|
6
6
|
parseArgs
|
|
7
7
|
} from "./chunk-D424ZQGI.js";
|
|
8
8
|
import {
|
|
9
9
|
daemonFetch
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
} from "./chunk-OJQ47SCA.js";
|
|
11
|
+
import "./chunk-M77QBTEH.js";
|
|
12
12
|
import {
|
|
13
13
|
getClient,
|
|
14
14
|
urlOf
|
|
@@ -18,14 +18,14 @@ import "./chunk-K3NQKI34.js";
|
|
|
18
18
|
// src/commands/logs.ts
|
|
19
19
|
async function run(args) {
|
|
20
20
|
const { flags } = parseArgs(args, {
|
|
21
|
-
|
|
21
|
+
mind: { type: "string" },
|
|
22
22
|
follow: { type: "boolean" },
|
|
23
23
|
n: { type: "number" }
|
|
24
24
|
});
|
|
25
|
-
const name =
|
|
25
|
+
const name = resolveMindName(flags);
|
|
26
26
|
const client = getClient();
|
|
27
27
|
if (flags.follow) {
|
|
28
|
-
const res = await daemonFetch(urlOf(client.api.
|
|
28
|
+
const res = await daemonFetch(urlOf(client.api.minds[":name"].logs.$url({ param: { name } })));
|
|
29
29
|
if (!res.ok) {
|
|
30
30
|
const body = await res.json().catch(() => ({}));
|
|
31
31
|
console.error(body.error ?? `Server responded with ${res.status}`);
|
|
@@ -61,7 +61,7 @@ async function run(args) {
|
|
|
61
61
|
}
|
|
62
62
|
} else {
|
|
63
63
|
const n = flags.n ?? 50;
|
|
64
|
-
const url = client.api.
|
|
64
|
+
const url = client.api.minds[":name"].logs.tail.$url({ param: { name } });
|
|
65
65
|
url.searchParams.set("n", String(n));
|
|
66
66
|
const res = await daemonFetch(urlOf(url));
|
|
67
67
|
if (!res.ok) {
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import "./chunk-K3NQKI34.js";
|
|
3
|
+
|
|
4
|
+
// src/commands/mind.ts
|
|
5
|
+
async function run(args) {
|
|
6
|
+
const subcommand = args[0];
|
|
7
|
+
switch (subcommand) {
|
|
8
|
+
case "create":
|
|
9
|
+
await import("./create-ZWHCRT5F.js").then((m) => m.run(args.slice(1)));
|
|
10
|
+
break;
|
|
11
|
+
case "start":
|
|
12
|
+
await import("./start-3YYRXBKP.js").then((m) => m.run(args.slice(1)));
|
|
13
|
+
break;
|
|
14
|
+
case "stop":
|
|
15
|
+
await import("./stop-AA5K5LYG.js").then((m) => m.run(args.slice(1)));
|
|
16
|
+
break;
|
|
17
|
+
case "restart":
|
|
18
|
+
await import("./restart-YFAWFS5T.js").then((m) => m.run(args.slice(1)));
|
|
19
|
+
break;
|
|
20
|
+
case "delete":
|
|
21
|
+
await import("./delete-6G6WEX4F.js").then((m) => m.run(args.slice(1)));
|
|
22
|
+
break;
|
|
23
|
+
case "list":
|
|
24
|
+
await import("./status-VSFZYX7S.js").then((m) => m.run(args.slice(1)));
|
|
25
|
+
break;
|
|
26
|
+
case "status": {
|
|
27
|
+
const rest = args.slice(1);
|
|
28
|
+
if (!rest[0] && process.env.VOLUTE_MIND) {
|
|
29
|
+
rest.unshift(process.env.VOLUTE_MIND);
|
|
30
|
+
}
|
|
31
|
+
await import("./status-VSFZYX7S.js").then((m) => m.run(rest));
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
case "logs": {
|
|
35
|
+
const rest = args.slice(1);
|
|
36
|
+
const logsArgs = transformMindFlag(rest);
|
|
37
|
+
await import("./logs-GYOR3L2L.js").then((m) => m.run(logsArgs));
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
case "upgrade":
|
|
41
|
+
await import("./upgrade-KXZCQSZN.js").then((m) => m.run(args.slice(1)));
|
|
42
|
+
break;
|
|
43
|
+
case "import":
|
|
44
|
+
await import("./import-EDGRLIGO.js").then((m) => m.run(args.slice(1)));
|
|
45
|
+
break;
|
|
46
|
+
case "--help":
|
|
47
|
+
case "-h":
|
|
48
|
+
case void 0:
|
|
49
|
+
printUsage();
|
|
50
|
+
break;
|
|
51
|
+
default:
|
|
52
|
+
printUsage();
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function transformMindFlag(args) {
|
|
57
|
+
if (args.length > 0 && args[0] && !args[0].startsWith("-")) {
|
|
58
|
+
return ["--mind", args[0], ...args.slice(1)];
|
|
59
|
+
}
|
|
60
|
+
return args;
|
|
61
|
+
}
|
|
62
|
+
function printUsage() {
|
|
63
|
+
console.log(`Usage:
|
|
64
|
+
volute mind create <name> [--template <name>]
|
|
65
|
+
volute mind start <name>
|
|
66
|
+
volute mind stop [name]
|
|
67
|
+
volute mind restart [name]
|
|
68
|
+
volute mind delete [name] [--force]
|
|
69
|
+
volute mind list
|
|
70
|
+
volute mind status [name]
|
|
71
|
+
volute mind logs [name] [--follow] [-n N]
|
|
72
|
+
volute mind upgrade [name] [--template <name>] [--continue]
|
|
73
|
+
volute mind import <path> [--name <name>] [--session <path>] [--template <name>]
|
|
74
|
+
|
|
75
|
+
Mind name can be omitted (where shown as [name]) if VOLUTE_MIND is set.`);
|
|
76
|
+
}
|
|
77
|
+
export {
|
|
78
|
+
run
|
|
79
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
MindManager,
|
|
4
|
+
getMindManager,
|
|
5
|
+
initMindManager
|
|
6
|
+
} from "./chunk-J52CJCVI.js";
|
|
7
|
+
import "./chunk-OYSZNX5I.js";
|
|
8
|
+
import "./chunk-ZCEYUUID.js";
|
|
9
|
+
import "./chunk-M77QBTEH.js";
|
|
10
|
+
import "./chunk-K3NQKI34.js";
|
|
11
|
+
export {
|
|
12
|
+
MindManager,
|
|
13
|
+
getMindManager,
|
|
14
|
+
initMindManager
|
|
15
|
+
};
|
|
@@ -4,8 +4,8 @@ import "./chunk-K3NQKI34.js";
|
|
|
4
4
|
// package.json
|
|
5
5
|
var package_default = {
|
|
6
6
|
name: "volute",
|
|
7
|
-
version: "0.
|
|
8
|
-
description: "CLI for creating and managing self-modifying AI
|
|
7
|
+
version: "0.14.1",
|
|
8
|
+
description: "CLI for creating and managing self-modifying AI minds powered by the Claude Agent SDK",
|
|
9
9
|
type: "module",
|
|
10
10
|
license: "MIT",
|
|
11
11
|
repository: {
|
|
@@ -15,7 +15,7 @@ var package_default = {
|
|
|
15
15
|
keywords: [
|
|
16
16
|
"cli",
|
|
17
17
|
"ai",
|
|
18
|
-
"
|
|
18
|
+
"minds",
|
|
19
19
|
"claude",
|
|
20
20
|
"anthropic"
|
|
21
21
|
],
|
|
@@ -40,7 +40,7 @@ var package_default = {
|
|
|
40
40
|
"lint:fix": "biome check --write src/ test/",
|
|
41
41
|
format: "biome format --write src/ test/",
|
|
42
42
|
typecheck: "tsc --noEmit",
|
|
43
|
-
"typecheck:templates": "tsc --noEmit -p templates/
|
|
43
|
+
"typecheck:templates": "tsc --noEmit -p templates/claude/tsconfig.json && tsc --noEmit -p templates/pi/tsconfig.json",
|
|
44
44
|
"lint:templates": "biome check templates/",
|
|
45
45
|
"typecheck:web": "tsc --noEmit -p src/web/frontend/tsconfig.json",
|
|
46
46
|
prepare: "lefthook install",
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
} from "./chunk-
|
|
3
|
+
resolveMindName
|
|
4
|
+
} from "./chunk-NAOW2CLO.js";
|
|
5
5
|
import {
|
|
6
6
|
daemonFetch
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-OJQ47SCA.js";
|
|
8
8
|
import {
|
|
9
|
-
|
|
10
|
-
} from "./chunk-
|
|
9
|
+
resolveMind
|
|
10
|
+
} from "./chunk-M77QBTEH.js";
|
|
11
11
|
import {
|
|
12
12
|
getClient,
|
|
13
13
|
urlOf
|
|
@@ -16,16 +16,16 @@ import "./chunk-K3NQKI34.js";
|
|
|
16
16
|
|
|
17
17
|
// src/commands/restart.ts
|
|
18
18
|
async function run(args) {
|
|
19
|
-
const name =
|
|
20
|
-
const { entry } =
|
|
19
|
+
const name = resolveMindName({ mind: args[0] });
|
|
20
|
+
const { entry } = resolveMind(name);
|
|
21
21
|
const client = getClient();
|
|
22
22
|
const res = await daemonFetch(
|
|
23
|
-
urlOf(client.api.
|
|
23
|
+
urlOf(client.api.minds[":name"].restart.$url({ param: { name } })),
|
|
24
24
|
{ method: "POST" }
|
|
25
25
|
);
|
|
26
26
|
const data = await res.json();
|
|
27
27
|
if (!res.ok) {
|
|
28
|
-
console.error(data.error || "Failed to restart
|
|
28
|
+
console.error(data.error || "Failed to restart mind");
|
|
29
29
|
process.exit(1);
|
|
30
30
|
}
|
|
31
31
|
console.log(`${name} restarted on port ${entry.port}`);
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
} from "./chunk-
|
|
3
|
+
resolveMindName
|
|
4
|
+
} from "./chunk-NAOW2CLO.js";
|
|
5
5
|
import {
|
|
6
6
|
parseArgs
|
|
7
7
|
} from "./chunk-D424ZQGI.js";
|
|
8
8
|
import {
|
|
9
9
|
daemonFetch
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
} from "./chunk-OJQ47SCA.js";
|
|
11
|
+
import "./chunk-M77QBTEH.js";
|
|
12
12
|
import {
|
|
13
13
|
getClient,
|
|
14
14
|
urlOf
|
|
@@ -40,18 +40,18 @@ async function run(args) {
|
|
|
40
40
|
}
|
|
41
41
|
function printUsage() {
|
|
42
42
|
console.log(`Usage:
|
|
43
|
-
volute schedule list [--
|
|
44
|
-
volute schedule add [--
|
|
45
|
-
volute schedule remove [--
|
|
43
|
+
volute schedule list [--mind <name>]
|
|
44
|
+
volute schedule add [--mind <name>] --cron "..." --message "..." [--id name]
|
|
45
|
+
volute schedule remove [--mind <name>] --id <id>`);
|
|
46
46
|
}
|
|
47
47
|
async function listSchedules(args) {
|
|
48
48
|
const { flags } = parseArgs(args, {
|
|
49
|
-
|
|
49
|
+
mind: { type: "string" }
|
|
50
50
|
});
|
|
51
|
-
const
|
|
51
|
+
const mind = resolveMindName(flags);
|
|
52
52
|
const client = getClient();
|
|
53
53
|
const res = await daemonFetch(
|
|
54
|
-
urlOf(client.api.
|
|
54
|
+
urlOf(client.api.minds[":name"].schedules.$url({ param: { name: mind } }))
|
|
55
55
|
);
|
|
56
56
|
if (!res.ok) {
|
|
57
57
|
const data = await res.json();
|
|
@@ -74,12 +74,12 @@ async function listSchedules(args) {
|
|
|
74
74
|
}
|
|
75
75
|
async function addSchedule(args) {
|
|
76
76
|
const { flags } = parseArgs(args, {
|
|
77
|
-
|
|
77
|
+
mind: { type: "string" },
|
|
78
78
|
cron: { type: "string" },
|
|
79
79
|
message: { type: "string" },
|
|
80
80
|
id: { type: "string" }
|
|
81
81
|
});
|
|
82
|
-
const
|
|
82
|
+
const mind = resolveMindName(flags);
|
|
83
83
|
if (!flags.cron || !flags.message) {
|
|
84
84
|
console.error("--cron and --message are required");
|
|
85
85
|
process.exit(1);
|
|
@@ -88,7 +88,7 @@ async function addSchedule(args) {
|
|
|
88
88
|
if (flags.id) body.id = flags.id;
|
|
89
89
|
const client = getClient();
|
|
90
90
|
const res = await daemonFetch(
|
|
91
|
-
urlOf(client.api.
|
|
91
|
+
urlOf(client.api.minds[":name"].schedules.$url({ param: { name: mind } })),
|
|
92
92
|
{
|
|
93
93
|
method: "POST",
|
|
94
94
|
headers: { "Content-Type": "application/json" },
|
|
@@ -105,10 +105,10 @@ async function addSchedule(args) {
|
|
|
105
105
|
}
|
|
106
106
|
async function removeSchedule(args) {
|
|
107
107
|
const { flags } = parseArgs(args, {
|
|
108
|
-
|
|
108
|
+
mind: { type: "string" },
|
|
109
109
|
id: { type: "string" }
|
|
110
110
|
});
|
|
111
|
-
const
|
|
111
|
+
const mind = resolveMindName(flags);
|
|
112
112
|
if (!flags.id) {
|
|
113
113
|
console.error("--id is required");
|
|
114
114
|
process.exit(1);
|
|
@@ -116,8 +116,8 @@ async function removeSchedule(args) {
|
|
|
116
116
|
const client = getClient();
|
|
117
117
|
const res = await daemonFetch(
|
|
118
118
|
urlOf(
|
|
119
|
-
client.api.
|
|
120
|
-
param: { name:
|
|
119
|
+
client.api.minds[":name"].schedules[":id"].$url({
|
|
120
|
+
param: { name: mind, id: flags.id }
|
|
121
121
|
})
|
|
122
122
|
),
|
|
123
123
|
{ method: "DELETE" }
|
|
@@ -18,11 +18,11 @@ async function run(args) {
|
|
|
18
18
|
);
|
|
19
19
|
process.exit(1);
|
|
20
20
|
}
|
|
21
|
-
const template = flags.template ?? "
|
|
22
|
-
const { daemonFetch } = await import("./daemon-client-
|
|
21
|
+
const template = flags.template ?? "claude";
|
|
22
|
+
const { daemonFetch } = await import("./daemon-client-ODKDUYDE.js");
|
|
23
23
|
const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
|
|
24
24
|
const client = getClient();
|
|
25
|
-
const createRes = await daemonFetch(urlOf(client.api.
|
|
25
|
+
const createRes = await daemonFetch(urlOf(client.api.minds.$url()), {
|
|
26
26
|
method: "POST",
|
|
27
27
|
headers: { "Content-Type": "application/json" },
|
|
28
28
|
body: JSON.stringify({
|
|
@@ -35,20 +35,20 @@ async function run(args) {
|
|
|
35
35
|
});
|
|
36
36
|
const createData = await createRes.json();
|
|
37
37
|
if (!createRes.ok) {
|
|
38
|
-
console.error(createData.error ?? "Failed to create
|
|
38
|
+
console.error(createData.error ?? "Failed to create mind");
|
|
39
39
|
process.exit(1);
|
|
40
40
|
}
|
|
41
41
|
const startRes = await daemonFetch(
|
|
42
|
-
urlOf(client.api.
|
|
42
|
+
urlOf(client.api.minds[":name"].start.$url({ param: { name } })),
|
|
43
43
|
{ method: "POST" }
|
|
44
44
|
);
|
|
45
45
|
if (!startRes.ok) {
|
|
46
46
|
const startData = await startRes.json();
|
|
47
|
-
console.error(startData.error ?? "Failed to start
|
|
47
|
+
console.error(startData.error ?? "Failed to start mind");
|
|
48
48
|
process.exit(1);
|
|
49
49
|
}
|
|
50
50
|
const initialMessage = "You've just been created. A human planted you as a seed. Start a conversation with them \u2014 introduce yourself, ask questions, and begin exploring who you want to be.";
|
|
51
|
-
await daemonFetch(urlOf(client.api.
|
|
51
|
+
await daemonFetch(urlOf(client.api.minds[":name"].message.$url({ param: { name } })), {
|
|
52
52
|
method: "POST",
|
|
53
53
|
headers: { "Content-Type": "application/json" },
|
|
54
54
|
body: JSON.stringify({
|
|
@@ -58,9 +58,9 @@ async function run(args) {
|
|
|
58
58
|
})
|
|
59
59
|
});
|
|
60
60
|
console.log(`
|
|
61
|
-
Seeded
|
|
61
|
+
Seeded mind: ${name} (port ${createData.port})`);
|
|
62
62
|
console.log(`
|
|
63
|
-
Talk to your new
|
|
63
|
+
Talk to your new mind:`);
|
|
64
64
|
console.log(` volute send @${name} "hello"`);
|
|
65
65
|
}
|
|
66
66
|
export {
|