volute 0.26.0 → 0.27.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 +13 -13
- package/dist/{activity-events-ZMBAKLUF.js → activity-events-BBIEA2F4.js} +2 -3
- package/dist/api.d.ts +363 -168
- package/dist/{archive-4ZQYK5MN.js → archive-UA4BDFXQ.js} +2 -2
- package/dist/{auth-4TV573WE.js → auth-D3OT2ARB.js} +3 -3
- package/dist/bridge-FQHZL3MC.js +206 -0
- package/dist/chat-MHJ3L6JQ.js +58 -0
- package/dist/{chunk-PHU4DEAJ.js → chunk-2WPW7OT6.js} +3 -3
- package/dist/{chunk-5Y3PBKW6.js → chunk-2YP2TVDT.js} +138 -56
- package/dist/{chunk-USNBKHYG.js → chunk-4WXYUOAK.js} +4 -6
- package/dist/{chunk-YJA7P64S.js → chunk-AW7PFDVN.js} +5 -5
- package/dist/{chunk-OZFKBXD6.js → chunk-EHYDTZTF.js} +6 -6
- package/dist/{chunk-LX22GRG7.js → chunk-GIE6CSN5.js} +11 -8
- package/dist/{chunk-WBHMQ5OZ.js → chunk-H7OZRFJB.js} +192 -12
- package/dist/{chunk-ON3FF5JA.js → chunk-HDN7MNGD.js} +3 -3
- package/dist/chunk-IAYBDWVG.js +477 -0
- package/dist/{chunk-TZKJLDQN.js → chunk-IKRVFPWU.js} +14 -9
- package/dist/{chunk-WGOGUMPO.js → chunk-JGFVMROS.js} +13 -6
- package/dist/{chunk-3TV4GLFO.js → chunk-JKOWNZ4P.js} +3 -3
- package/dist/{chunk-NWI2425I.js → chunk-K5NAC55T.js} +1 -1
- package/dist/{chunk-HFCBO2GL.js → chunk-KDGS53OS.js} +4 -4
- package/dist/chunk-KTLFDYPT.js +61 -0
- package/dist/{chunk-V63B7DX3.js → chunk-LAC664WU.js} +7 -4
- package/dist/{chunk-3CFRE2VC.js → chunk-OQZH4PBB.js} +337 -1061
- package/dist/{chunk-2VO7453N.js → chunk-PHSAT7YL.js} +30 -54
- package/dist/{chunk-XOXLRRR2.js → chunk-RKQEHRBB.js} +4 -3
- package/dist/chunk-T6HKBWXZ.js +23 -0
- package/dist/{chunk-UTL75LP6.js → chunk-USUXRNVD.js} +22 -22
- package/dist/{chunk-J2CO4WEV.js → chunk-VIVMW2H2.js} +4 -4
- package/dist/{chunk-KTJGZ7M7.js → chunk-XBLSAVJF.js} +1 -1
- package/dist/cli.js +31 -36
- package/dist/{cloud-sync-NI2K3C7G.js → cloud-sync-T7M3ESC3.js} +15 -14
- package/dist/connectors/discord-bridge.js +158 -0
- package/dist/connectors/slack-bridge.js +119 -0
- package/dist/connectors/telegram-bridge.js +133 -0
- package/dist/conversations-M2K4253F.js +55 -0
- package/dist/create-D7J73A6H.js +45 -0
- package/dist/{create-4YBRTTJS.js → create-QWV73WXD.js} +1 -1
- package/dist/{daemon-client-Z7FAJ6JW.js → daemon-client-I42FK2BF.js} +2 -2
- package/dist/{daemon-restart-BJZ3O4U4.js → daemon-restart-M2QTYMEG.js} +7 -7
- package/dist/daemon.js +1758 -1024
- package/dist/db-IC4J52XQ.js +8 -0
- package/dist/{delete-27OYNK25.js → delete-4JYGD4VN.js} +1 -1
- package/dist/down-LVBXEULC.js +14 -0
- package/dist/{env-M336ONDP.js → env-YJMUMFIY.js} +2 -2
- package/dist/{export-HP4G5DQC.js → export-BOJQWBMA.js} +4 -4
- package/dist/{file-HUDKTRAS.js → file-CR36YUPD.js} +4 -4
- package/dist/{history-B64GTFTD.js → history-XKRTAFS2.js} +5 -5
- package/dist/{import-XIB7UV4S.js → import-SRTQXBGH.js} +4 -4
- package/dist/join-J4QU42DL.js +66 -0
- package/dist/list-R73GENNL.js +40 -0
- package/dist/{log-PBFNILJ4.js → log-ABYNVYJ3.js} +4 -4
- package/dist/{login-B5E7N7MY.js → login-3QZNR2DF.js} +4 -4
- package/dist/{login-6U7U6BNG.js → login-XX37I52P.js} +2 -2
- package/dist/{logout-XSJRYS3U.js → logout-T53VKCPU.js} +4 -4
- package/dist/{logout-UKD5LA37.js → logout-W4KOOBIT.js} +2 -2
- package/dist/{logs-3CART7O7.js → logs-U35JR2KE.js} +5 -5
- package/dist/{merge-VK2HSKMA.js → merge-LNSMSAOF.js} +4 -4
- package/dist/message-delivery-LDXLGERA.js +25 -0
- package/dist/migrate-registry-to-db-XC7T5B7P.js +110 -0
- package/dist/{mind-HZ3QSDDJ.js → mind-DI33C74K.js} +25 -25
- package/dist/{mind-activity-tracker-4G6FURY2.js → mind-activity-tracker-EN6XNXPF.js} +3 -4
- package/dist/mind-manager-M6EMUW5I.js +18 -0
- package/dist/{mind-sleep-DTV7L44D.js → mind-sleep-BTSWQNAC.js} +4 -4
- package/dist/{mind-wake-PFN4FN3T.js → mind-wake-SBAKIDVP.js} +4 -4
- package/dist/{notes-37FW2UR2.js → notes-XCER3I7M.js} +11 -21
- package/dist/{package-VZWLXPHV.js → package-7WY6VKU3.js} +1 -1
- package/dist/{pages-DIIT5HMQ.js → pages-6EBS6CBR.js} +2 -2
- package/dist/{publish-HQV7YREB.js → publish-66UB2ZFY.js} +5 -5
- package/dist/{pull-2MB4SK3C.js → pull-XCHJTM5M.js} +4 -4
- package/dist/read-36UFXN3G.js +46 -0
- package/dist/{register-EFND67FQ.js → register-6B2CXTYM.js} +2 -2
- package/dist/{registry-D2BSQ2X5.js → registry-NDNOOYG4.js} +15 -9
- package/dist/{restart-CCK7D6TV.js → restart-6ESL3NBO.js} +5 -5
- package/dist/{sandbox-EHGFF52K.js → sandbox-TGBX22DS.js} +3 -3
- package/dist/{schedule-6F7ELB2M.js → schedule-QTJMFATP.js} +5 -5
- package/dist/{seed-E5OQGWX3.js → seed-SSUCYYDF.js} +2 -2
- package/dist/{send-IH6XZKPC.js → send-ZNCJDSRP.js} +25 -19
- package/dist/{service-LLBV3R7M.js → service-6LIN3F3K.js} +4 -4
- package/dist/{setup-F6TWFYGQ.js → setup-JG4QAEBV.js} +12 -12
- package/dist/{setup-YGAAIKKZ.js → setup-JHL5ZEST.js} +2 -2
- package/dist/{shared-UMO4S7CC.js → shared-ML5I4Q2A.js} +4 -4
- package/dist/{skill-42LGFBQC.js → skill-AUAQTSP5.js} +5 -5
- package/dist/skills/dreaming/references/INSTALL.md +2 -2
- package/dist/skills/orientation/SKILL.md +3 -3
- package/dist/skills/volute-mind/SKILL.md +32 -30
- package/dist/sleep-manager-MWYHM5HV.js +29 -0
- package/dist/split-TKJ5OT3P.js +63 -0
- package/dist/{sprout-QL74KR2X.js → sprout-IJVVKSJ2.js} +6 -7
- package/dist/{start-O5JQASRC.js → start-EUJSS5R4.js} +2 -2
- package/dist/{status-FZBEBM7Q.js → status-77YEPHMW.js} +5 -5
- package/dist/{status-WXD4HXRL.js → status-7GA4SM4Y.js} +4 -4
- package/dist/{status-LV34BG6G.js → status-THLOBLWG.js} +2 -2
- package/dist/{stop-2SOG5NYF.js → stop-3XAITBBF.js} +5 -5
- package/dist/{tailscale-AJ4VL5XK.js → tailscale-NY5MUMY3.js} +1 -1
- package/dist/up-NKSMXBWR.js +17 -0
- package/dist/{update-5VUDAI3D.js → update-PTSH22AZ.js} +9 -9
- package/dist/{update-check-F5Z3ALXX.js → update-check-64FWC4Y2.js} +2 -2
- package/dist/{upgrade-QCCO33BK.js → upgrade-HA47CS4C.js} +12 -5
- package/dist/variant-7TGZHOU3.js +41 -0
- package/dist/{version-notify-USFZBWMG.js → version-notify-5Z4MNR6M.js} +26 -30
- package/dist/web-assets/assets/index-CI5wgghI.css +1 -0
- package/dist/web-assets/assets/index-is5CvJWH.js +75 -0
- package/dist/web-assets/favicon.png +0 -0
- package/dist/web-assets/index.html +2 -2
- package/drizzle/0017_minds.sql +16 -0
- package/drizzle/meta/_journal.json +7 -0
- package/package.json +1 -1
- package/templates/_base/.init/.config/prompts.json +2 -2
- package/templates/_base/home/VOLUTE.md +5 -5
- package/templates/_base/src/lib/startup.ts +2 -2
- package/dist/channel-ZVZV42UD.js +0 -260
- package/dist/chunk-B2CPS4QU.js +0 -283
- package/dist/chunk-SIAG3QMM.js +0 -42
- package/dist/chunk-WSLPZF72.js +0 -173
- package/dist/connector-G722WXAU.js +0 -147
- package/dist/connectors/discord.js +0 -177
- package/dist/connectors/slack.js +0 -181
- package/dist/connectors/telegram.js +0 -187
- package/dist/down-7UKFMJJZ.js +0 -14
- package/dist/message-delivery-MS5JYPZX.js +0 -25
- package/dist/mind-manager-VVK67AY3.js +0 -19
- package/dist/sleep-manager-EE4NRN2Q.js +0 -29
- package/dist/up-SDMCSVI3.js +0 -17
- package/dist/variant-WWLDY6D5.js +0 -207
- package/dist/web-assets/assets/index-CUQ31ieL.js +0 -69
- package/dist/web-assets/assets/index-CW8NSl1o.css +0 -1
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
daemonFetch
|
|
4
|
-
} from "./chunk-WGOGUMPO.js";
|
|
5
2
|
import {
|
|
6
3
|
resolveMindName
|
|
7
4
|
} from "./chunk-NAOW2CLO.js";
|
|
5
|
+
import {
|
|
6
|
+
daemonFetch
|
|
7
|
+
} from "./chunk-JGFVMROS.js";
|
|
8
8
|
import {
|
|
9
9
|
parseArgs
|
|
10
10
|
} from "./chunk-D424ZQGI.js";
|
|
11
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-H7OZRFJB.js";
|
|
12
12
|
import "./chunk-K3NQKI34.js";
|
|
13
13
|
|
|
14
14
|
// src/commands/mind-sleep.ts
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
daemonFetch
|
|
4
|
-
} from "./chunk-WGOGUMPO.js";
|
|
5
2
|
import {
|
|
6
3
|
resolveMindName
|
|
7
4
|
} from "./chunk-NAOW2CLO.js";
|
|
5
|
+
import {
|
|
6
|
+
daemonFetch
|
|
7
|
+
} from "./chunk-JGFVMROS.js";
|
|
8
8
|
import {
|
|
9
9
|
parseArgs
|
|
10
10
|
} from "./chunk-D424ZQGI.js";
|
|
11
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-H7OZRFJB.js";
|
|
12
12
|
import "./chunk-K3NQKI34.js";
|
|
13
13
|
|
|
14
14
|
// src/commands/mind-wake.ts
|
|
@@ -4,11 +4,11 @@ import {
|
|
|
4
4
|
} from "./chunk-ZYGKG6VC.js";
|
|
5
5
|
import {
|
|
6
6
|
daemonFetch
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-JGFVMROS.js";
|
|
8
8
|
import {
|
|
9
9
|
parseArgs
|
|
10
10
|
} from "./chunk-D424ZQGI.js";
|
|
11
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-H7OZRFJB.js";
|
|
12
12
|
import "./chunk-K3NQKI34.js";
|
|
13
13
|
|
|
14
14
|
// src/commands/notes.ts
|
|
@@ -18,8 +18,7 @@ function apiUrl(path) {
|
|
|
18
18
|
async function list(args) {
|
|
19
19
|
const { flags } = parseArgs(args, {
|
|
20
20
|
author: { type: "string" },
|
|
21
|
-
limit: { type: "number" }
|
|
22
|
-
mind: { type: "string" }
|
|
21
|
+
limit: { type: "number" }
|
|
23
22
|
});
|
|
24
23
|
const params = new URLSearchParams();
|
|
25
24
|
if (flags.author) params.set("author", flags.author);
|
|
@@ -49,7 +48,6 @@ async function write(args) {
|
|
|
49
48
|
const { flags } = parseArgs(args, {
|
|
50
49
|
title: { type: "string" },
|
|
51
50
|
content: { type: "string" },
|
|
52
|
-
mind: { type: "string" },
|
|
53
51
|
"reply-to": { type: "string" }
|
|
54
52
|
});
|
|
55
53
|
if (!flags.title) {
|
|
@@ -63,11 +61,9 @@ async function write(args) {
|
|
|
63
61
|
console.error("Content required via --content or stdin");
|
|
64
62
|
process.exit(1);
|
|
65
63
|
}
|
|
66
|
-
const asUser = process.env.VOLUTE_MIND ?? flags.mind;
|
|
67
|
-
const params = asUser ? `?as=${encodeURIComponent(asUser)}` : "";
|
|
68
64
|
const body = { title: flags.title, content };
|
|
69
65
|
if (flags["reply-to"]) body.reply_to = flags["reply-to"];
|
|
70
|
-
const res = await daemonFetch(
|
|
66
|
+
const res = await daemonFetch(apiUrl(""), {
|
|
71
67
|
method: "POST",
|
|
72
68
|
headers: { "Content-Type": "application/json" },
|
|
73
69
|
body: JSON.stringify(body)
|
|
@@ -81,7 +77,7 @@ async function write(args) {
|
|
|
81
77
|
console.log(`Published: ${note.author_username}/${note.slug}`);
|
|
82
78
|
}
|
|
83
79
|
async function read(args) {
|
|
84
|
-
const { positional } = parseArgs(args, {
|
|
80
|
+
const { positional } = parseArgs(args, {});
|
|
85
81
|
const ref = positional[0];
|
|
86
82
|
if (!ref || !ref.includes("/")) {
|
|
87
83
|
console.error("Usage: volute notes read <author>/<slug>");
|
|
@@ -131,7 +127,7 @@ async function read(args) {
|
|
|
131
127
|
}
|
|
132
128
|
}
|
|
133
129
|
async function react(args) {
|
|
134
|
-
const { positional
|
|
130
|
+
const { positional } = parseArgs(args, {});
|
|
135
131
|
const ref = positional[0];
|
|
136
132
|
const emoji = positional[1];
|
|
137
133
|
if (!ref || !ref.includes("/") || !emoji) {
|
|
@@ -139,9 +135,7 @@ async function react(args) {
|
|
|
139
135
|
process.exit(1);
|
|
140
136
|
}
|
|
141
137
|
const [author, slug] = ref.split("/", 2);
|
|
142
|
-
const
|
|
143
|
-
const params = asUser ? `?as=${encodeURIComponent(asUser)}` : "";
|
|
144
|
-
const res = await daemonFetch(`${apiUrl(`/${author}/${slug}/reactions`)}${params}`, {
|
|
138
|
+
const res = await daemonFetch(apiUrl(`/${author}/${slug}/reactions`), {
|
|
145
139
|
method: "POST",
|
|
146
140
|
headers: { "Content-Type": "application/json" },
|
|
147
141
|
body: JSON.stringify({ emoji })
|
|
@@ -155,7 +149,7 @@ async function react(args) {
|
|
|
155
149
|
console.log(result.added ? `Reacted with ${emoji}` : `Removed ${emoji} reaction`);
|
|
156
150
|
}
|
|
157
151
|
async function comment(args) {
|
|
158
|
-
const { positional
|
|
152
|
+
const { positional } = parseArgs(args, {});
|
|
159
153
|
const ref = positional[0];
|
|
160
154
|
const text = positional[1] ?? await readStdin();
|
|
161
155
|
if (!ref || !ref.includes("/") || !text) {
|
|
@@ -163,9 +157,7 @@ async function comment(args) {
|
|
|
163
157
|
process.exit(1);
|
|
164
158
|
}
|
|
165
159
|
const [author, slug] = ref.split("/", 2);
|
|
166
|
-
const
|
|
167
|
-
const params = asUser ? `?as=${encodeURIComponent(asUser)}` : "";
|
|
168
|
-
const res = await daemonFetch(`${apiUrl(`/${author}/${slug}/comments`)}${params}`, {
|
|
160
|
+
const res = await daemonFetch(apiUrl(`/${author}/${slug}/comments`), {
|
|
169
161
|
method: "POST",
|
|
170
162
|
headers: { "Content-Type": "application/json" },
|
|
171
163
|
body: JSON.stringify({ content: text })
|
|
@@ -178,16 +170,14 @@ async function comment(args) {
|
|
|
178
170
|
console.log("Comment added.");
|
|
179
171
|
}
|
|
180
172
|
async function del(args) {
|
|
181
|
-
const { positional
|
|
173
|
+
const { positional } = parseArgs(args, {});
|
|
182
174
|
const ref = positional[0];
|
|
183
175
|
if (!ref || !ref.includes("/")) {
|
|
184
176
|
console.error("Usage: volute notes delete <author>/<slug>");
|
|
185
177
|
process.exit(1);
|
|
186
178
|
}
|
|
187
179
|
const [author, slug] = ref.split("/", 2);
|
|
188
|
-
const
|
|
189
|
-
const params = asUser ? `?as=${encodeURIComponent(asUser)}` : "";
|
|
190
|
-
const res = await daemonFetch(`${apiUrl(`/${author}/${slug}`)}${params}`, {
|
|
180
|
+
const res = await daemonFetch(apiUrl(`/${author}/${slug}`), {
|
|
191
181
|
method: "DELETE"
|
|
192
182
|
});
|
|
193
183
|
if (!res.ok) {
|
|
@@ -4,7 +4,7 @@ import "./chunk-K3NQKI34.js";
|
|
|
4
4
|
// package.json
|
|
5
5
|
var package_default = {
|
|
6
6
|
name: "volute",
|
|
7
|
-
version: "0.
|
|
7
|
+
version: "0.27.0",
|
|
8
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",
|
|
@@ -6,10 +6,10 @@ async function run(args) {
|
|
|
6
6
|
const subcommand = args[0];
|
|
7
7
|
switch (subcommand) {
|
|
8
8
|
case "publish":
|
|
9
|
-
await import("./publish-
|
|
9
|
+
await import("./publish-66UB2ZFY.js").then((m) => m.run(args.slice(1)));
|
|
10
10
|
break;
|
|
11
11
|
case "status":
|
|
12
|
-
await import("./status-
|
|
12
|
+
await import("./status-THLOBLWG.js").then((m) => m.run(args.slice(1)));
|
|
13
13
|
break;
|
|
14
14
|
case "--help":
|
|
15
15
|
case "-h":
|
|
@@ -7,19 +7,19 @@ import {
|
|
|
7
7
|
} from "./chunk-NAOW2CLO.js";
|
|
8
8
|
import {
|
|
9
9
|
sharedDir
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-JKOWNZ4P.js";
|
|
11
11
|
import {
|
|
12
12
|
readSystemsConfig
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-KDGS53OS.js";
|
|
14
14
|
import "./chunk-YUIHSKR6.js";
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-AW7PFDVN.js";
|
|
16
|
+
import "./chunk-RKQEHRBB.js";
|
|
17
17
|
import {
|
|
18
18
|
parseArgs
|
|
19
19
|
} from "./chunk-D424ZQGI.js";
|
|
20
20
|
import {
|
|
21
21
|
mindDir
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-H7OZRFJB.js";
|
|
23
23
|
import "./chunk-K3NQKI34.js";
|
|
24
24
|
|
|
25
25
|
// src/commands/pages/publish.ts
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
daemonFetch
|
|
4
|
-
} from "./chunk-WGOGUMPO.js";
|
|
5
2
|
import {
|
|
6
3
|
resolveMindName
|
|
7
4
|
} from "./chunk-NAOW2CLO.js";
|
|
5
|
+
import {
|
|
6
|
+
daemonFetch
|
|
7
|
+
} from "./chunk-JGFVMROS.js";
|
|
8
8
|
import {
|
|
9
9
|
parseArgs
|
|
10
10
|
} from "./chunk-D424ZQGI.js";
|
|
11
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-H7OZRFJB.js";
|
|
12
12
|
import "./chunk-K3NQKI34.js";
|
|
13
13
|
|
|
14
14
|
// src/commands/shared/pull.ts
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
resolveMindName
|
|
4
|
+
} from "./chunk-NAOW2CLO.js";
|
|
5
|
+
import {
|
|
6
|
+
daemonFetch
|
|
7
|
+
} from "./chunk-JGFVMROS.js";
|
|
8
|
+
import {
|
|
9
|
+
parseArgs
|
|
10
|
+
} from "./chunk-D424ZQGI.js";
|
|
11
|
+
import "./chunk-H7OZRFJB.js";
|
|
12
|
+
import "./chunk-K3NQKI34.js";
|
|
13
|
+
|
|
14
|
+
// src/commands/chat/read.ts
|
|
15
|
+
async function run(args) {
|
|
16
|
+
const { positional, flags } = parseArgs(args, {
|
|
17
|
+
mind: { type: "string" },
|
|
18
|
+
limit: { type: "number" }
|
|
19
|
+
});
|
|
20
|
+
const conversationId = positional[0];
|
|
21
|
+
if (!conversationId) {
|
|
22
|
+
console.error("Usage: volute chat read <conversation-id> [--limit N] [--mind <name>]");
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
const mindName = resolveMindName(flags);
|
|
26
|
+
const limit = String(flags.limit ?? 50);
|
|
27
|
+
const res = await daemonFetch(
|
|
28
|
+
`/api/minds/${encodeURIComponent(mindName)}/conversations/${encodeURIComponent(conversationId)}/messages?limit=${limit}`
|
|
29
|
+
);
|
|
30
|
+
if (!res.ok) {
|
|
31
|
+
console.error(`Failed to read conversation: ${res.status}`);
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
const data = await res.json();
|
|
35
|
+
for (const msg of data.messages) {
|
|
36
|
+
const sender = msg.sender_name ?? msg.role;
|
|
37
|
+
const text = Array.isArray(msg.content) ? msg.content.filter((b) => b.type === "text").map((b) => b.text).join("") : msg.content;
|
|
38
|
+
const time = new Date(
|
|
39
|
+
msg.created_at.endsWith("Z") ? msg.created_at : `${msg.created_at}Z`
|
|
40
|
+
).toLocaleString();
|
|
41
|
+
console.log(`[${time}] ${sender}: ${text}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export {
|
|
45
|
+
run
|
|
46
|
+
};
|
|
@@ -8,11 +8,11 @@ import {
|
|
|
8
8
|
import {
|
|
9
9
|
readSystemsConfig,
|
|
10
10
|
writeSystemsConfig
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-KDGS53OS.js";
|
|
12
12
|
import {
|
|
13
13
|
parseArgs
|
|
14
14
|
} from "./chunk-D424ZQGI.js";
|
|
15
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-H7OZRFJB.js";
|
|
16
16
|
import "./chunk-K3NQKI34.js";
|
|
17
17
|
|
|
18
18
|
// src/commands/pages/register.ts
|
|
@@ -1,42 +1,48 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
addMind,
|
|
4
|
+
addVariant,
|
|
4
5
|
daemonLoopback,
|
|
6
|
+
ensureSystemDir,
|
|
5
7
|
ensureVoluteHome,
|
|
6
8
|
findMind,
|
|
7
|
-
|
|
8
|
-
|
|
9
|
+
findVariants,
|
|
10
|
+
getBaseName,
|
|
9
11
|
mindDir,
|
|
10
12
|
nextPort,
|
|
13
|
+
readAllMinds,
|
|
11
14
|
readRegistry,
|
|
12
15
|
removeMind,
|
|
13
|
-
resolveMind,
|
|
14
16
|
setMindRunning,
|
|
15
17
|
setMindStage,
|
|
16
18
|
setMindTemplateHash,
|
|
17
19
|
stateDir,
|
|
18
20
|
validateMindName,
|
|
19
21
|
voluteHome,
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
voluteSystemDir,
|
|
23
|
+
voluteUserHome
|
|
24
|
+
} from "./chunk-H7OZRFJB.js";
|
|
22
25
|
import "./chunk-K3NQKI34.js";
|
|
23
26
|
export {
|
|
24
27
|
addMind,
|
|
28
|
+
addVariant,
|
|
25
29
|
daemonLoopback,
|
|
30
|
+
ensureSystemDir,
|
|
26
31
|
ensureVoluteHome,
|
|
27
32
|
findMind,
|
|
28
|
-
|
|
29
|
-
|
|
33
|
+
findVariants,
|
|
34
|
+
getBaseName,
|
|
30
35
|
mindDir,
|
|
31
36
|
nextPort,
|
|
37
|
+
readAllMinds,
|
|
32
38
|
readRegistry,
|
|
33
39
|
removeMind,
|
|
34
|
-
resolveMind,
|
|
35
40
|
setMindRunning,
|
|
36
41
|
setMindStage,
|
|
37
42
|
setMindTemplateHash,
|
|
38
43
|
stateDir,
|
|
39
44
|
validateMindName,
|
|
40
45
|
voluteHome,
|
|
41
|
-
|
|
46
|
+
voluteSystemDir,
|
|
47
|
+
voluteUserHome
|
|
42
48
|
};
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
resolveMindName
|
|
4
|
+
} from "./chunk-NAOW2CLO.js";
|
|
2
5
|
import {
|
|
3
6
|
daemonFetch
|
|
4
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-JGFVMROS.js";
|
|
5
8
|
import {
|
|
6
9
|
getClient,
|
|
7
10
|
urlOf
|
|
8
11
|
} from "./chunk-4RQBJWQX.js";
|
|
9
|
-
import
|
|
10
|
-
resolveMindName
|
|
11
|
-
} from "./chunk-NAOW2CLO.js";
|
|
12
|
-
import "./chunk-B2CPS4QU.js";
|
|
12
|
+
import "./chunk-H7OZRFJB.js";
|
|
13
13
|
import "./chunk-K3NQKI34.js";
|
|
14
14
|
|
|
15
15
|
// src/commands/restart.ts
|
|
@@ -5,10 +5,10 @@ import {
|
|
|
5
5
|
isSandboxEnabled,
|
|
6
6
|
shellEscape,
|
|
7
7
|
wrapForSandbox
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-USUXRNVD.js";
|
|
9
9
|
import "./chunk-YUIHSKR6.js";
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-IKRVFPWU.js";
|
|
11
|
+
import "./chunk-H7OZRFJB.js";
|
|
12
12
|
import "./chunk-K3NQKI34.js";
|
|
13
13
|
export {
|
|
14
14
|
buildDenyRead,
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
resolveMindName
|
|
4
|
+
} from "./chunk-NAOW2CLO.js";
|
|
2
5
|
import {
|
|
3
6
|
daemonFetch
|
|
4
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-JGFVMROS.js";
|
|
5
8
|
import {
|
|
6
9
|
getClient,
|
|
7
10
|
urlOf
|
|
8
11
|
} from "./chunk-4RQBJWQX.js";
|
|
9
|
-
import {
|
|
10
|
-
resolveMindName
|
|
11
|
-
} from "./chunk-NAOW2CLO.js";
|
|
12
12
|
import {
|
|
13
13
|
parseArgs
|
|
14
14
|
} from "./chunk-D424ZQGI.js";
|
|
15
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-H7OZRFJB.js";
|
|
16
16
|
import "./chunk-K3NQKI34.js";
|
|
17
17
|
|
|
18
18
|
// src/commands/schedule.ts
|
|
@@ -21,7 +21,7 @@ async function run(args) {
|
|
|
21
21
|
}
|
|
22
22
|
const template = flags.template ?? "claude";
|
|
23
23
|
const skills = flags.skills === "none" ? [] : flags.skills ? flags.skills.split(",") : void 0;
|
|
24
|
-
const { daemonFetch } = await import("./daemon-client-
|
|
24
|
+
const { daemonFetch } = await import("./daemon-client-I42FK2BF.js");
|
|
25
25
|
const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
|
|
26
26
|
const client = getClient();
|
|
27
27
|
const createRes = await daemonFetch(urlOf(client.api.minds.$url()), {
|
|
@@ -64,7 +64,7 @@ async function run(args) {
|
|
|
64
64
|
Seeded mind: ${name} (port ${createData.port})`);
|
|
65
65
|
console.log(`
|
|
66
66
|
Talk to your new mind:`);
|
|
67
|
-
console.log(` volute send @${name} "hello"`);
|
|
67
|
+
console.log(` volute chat send @${name} "hello"`);
|
|
68
68
|
}
|
|
69
69
|
export {
|
|
70
70
|
run
|
|
@@ -2,22 +2,20 @@
|
|
|
2
2
|
import {
|
|
3
3
|
readStdin
|
|
4
4
|
} from "./chunk-ZYGKG6VC.js";
|
|
5
|
+
import {
|
|
6
|
+
resolveMindName
|
|
7
|
+
} from "./chunk-NAOW2CLO.js";
|
|
5
8
|
import {
|
|
6
9
|
daemonFetch
|
|
7
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-JGFVMROS.js";
|
|
8
11
|
import {
|
|
9
12
|
getClient,
|
|
10
13
|
urlOf
|
|
11
14
|
} from "./chunk-4RQBJWQX.js";
|
|
12
|
-
import {
|
|
13
|
-
resolveMindName
|
|
14
|
-
} from "./chunk-NAOW2CLO.js";
|
|
15
15
|
import {
|
|
16
16
|
parseArgs
|
|
17
17
|
} from "./chunk-D424ZQGI.js";
|
|
18
|
-
import
|
|
19
|
-
findMind
|
|
20
|
-
} from "./chunk-B2CPS4QU.js";
|
|
18
|
+
import "./chunk-H7OZRFJB.js";
|
|
21
19
|
import "./chunk-K3NQKI34.js";
|
|
22
20
|
|
|
23
21
|
// src/commands/send.ts
|
|
@@ -55,6 +53,14 @@ function parseTarget(target) {
|
|
|
55
53
|
}
|
|
56
54
|
|
|
57
55
|
// src/commands/send.ts
|
|
56
|
+
async function isMind(name) {
|
|
57
|
+
try {
|
|
58
|
+
const res = await daemonFetch(`/api/minds/${encodeURIComponent(name)}`);
|
|
59
|
+
return res.ok;
|
|
60
|
+
} catch {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
58
64
|
var IMAGE_MEDIA_TYPES = {
|
|
59
65
|
".png": "image/png",
|
|
60
66
|
".jpg": "image/jpeg",
|
|
@@ -156,28 +162,28 @@ async function run(args) {
|
|
|
156
162
|
const images = flags.image ? [loadImage(flags.image)] : void 0;
|
|
157
163
|
if (!target || !message && !images) {
|
|
158
164
|
console.error(
|
|
159
|
-
'Usage: volute send <target> "<message>" [--mind <name>] [--image <path>] [--wait]'
|
|
165
|
+
'Usage: volute chat send <target> "<message>" [--mind <name>] [--image <path>] [--wait]'
|
|
160
166
|
);
|
|
161
|
-
console.error(' echo "message" | volute send <target> [--mind <name>]');
|
|
167
|
+
console.error(' echo "message" | volute chat send <target> [--mind <name>]');
|
|
162
168
|
console.error("");
|
|
163
169
|
console.error("Examples:");
|
|
164
|
-
console.error(' volute send @other-mind "hello"');
|
|
165
|
-
console.error(' volute send animal-chat "hello everyone"');
|
|
166
|
-
console.error(' volute send discord:server/channel "hello"');
|
|
167
|
-
console.error(' volute send @mind "check this out" --image photo.png');
|
|
168
|
-
console.error(" volute send @mind --image photo.png");
|
|
169
|
-
console.error(' volute send @mind "hello" --wait');
|
|
170
|
+
console.error(' volute chat send @other-mind "hello"');
|
|
171
|
+
console.error(' volute chat send animal-chat "hello everyone"');
|
|
172
|
+
console.error(' volute chat send discord:server/channel "hello"');
|
|
173
|
+
console.error(' volute chat send @mind "check this out" --image photo.png');
|
|
174
|
+
console.error(" volute chat send @mind --image photo.png");
|
|
175
|
+
console.error(' volute chat send @mind "hello" --wait');
|
|
170
176
|
process.exit(1);
|
|
171
177
|
}
|
|
172
178
|
if (target === "system" || target === "@system") {
|
|
173
179
|
console.error(
|
|
174
180
|
`Can't send to system \u2014 system messages are automated.
|
|
175
|
-
To reply to a person, use their username from the message prefix (e.g. volute send @username "msg").`
|
|
181
|
+
To reply to a person, use their username from the message prefix (e.g. volute chat send @username "msg").`
|
|
176
182
|
);
|
|
177
183
|
process.exit(1);
|
|
178
184
|
}
|
|
179
185
|
let parsed = parseTarget(target);
|
|
180
|
-
if (!parsed.isDM && parsed.platform === "volute" &&
|
|
186
|
+
if (!parsed.isDM && parsed.platform === "volute" && await isMind(parsed.identifier)) {
|
|
181
187
|
parsed = {
|
|
182
188
|
platform: "volute",
|
|
183
189
|
identifier: `@${parsed.identifier}`,
|
|
@@ -192,8 +198,8 @@ To reply to a person, use their username from the message prefix (e.g. volute se
|
|
|
192
198
|
const targetName = parsed.identifier.slice(1);
|
|
193
199
|
const mindSelf = process.env.VOLUTE_MIND;
|
|
194
200
|
const sender = flags.sender || mindSelf || userInfo().username;
|
|
195
|
-
|
|
196
|
-
|
|
201
|
+
const targetIsMind = await isMind(targetName);
|
|
202
|
+
waitMindName = targetIsMind ? targetName : void 0;
|
|
197
203
|
const contextMind = mindSelf && !targetIsMind ? mindSelf : targetName;
|
|
198
204
|
const participants = mindSelf && !targetIsMind ? [targetName] : [sender];
|
|
199
205
|
const createRes = await daemonFetch(
|
|
@@ -5,13 +5,13 @@ import {
|
|
|
5
5
|
SYSTEM_LAUNCHD_PLIST_PATH,
|
|
6
6
|
SYSTEM_SERVICE_PATH,
|
|
7
7
|
USER_SYSTEMD_UNIT
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-LAC664WU.js";
|
|
9
|
+
import "./chunk-AW7PFDVN.js";
|
|
10
|
+
import "./chunk-RKQEHRBB.js";
|
|
11
11
|
import {
|
|
12
12
|
parseArgs
|
|
13
13
|
} from "./chunk-D424ZQGI.js";
|
|
14
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-H7OZRFJB.js";
|
|
15
15
|
import "./chunk-K3NQKI34.js";
|
|
16
16
|
|
|
17
17
|
// src/commands/service.ts
|
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
promptLine
|
|
4
|
+
} from "./chunk-SSI47XP2.js";
|
|
2
5
|
import {
|
|
3
6
|
LAUNCHD_PLIST_LABEL,
|
|
4
7
|
LAUNCHD_PLIST_PATH,
|
|
5
8
|
SYSTEM_LAUNCHD_PLIST_PATH,
|
|
6
9
|
SYSTEM_SERVICE_PATH,
|
|
7
10
|
USER_SYSTEMD_UNIT
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import {
|
|
10
|
-
promptLine
|
|
11
|
-
} from "./chunk-SSI47XP2.js";
|
|
11
|
+
} from "./chunk-LAC664WU.js";
|
|
12
12
|
import {
|
|
13
13
|
resolveVoluteBin
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-AW7PFDVN.js";
|
|
15
15
|
import {
|
|
16
16
|
ensureVoluteGroup
|
|
17
|
-
} from "./chunk-
|
|
18
|
-
import {
|
|
19
|
-
parseArgs
|
|
20
|
-
} from "./chunk-D424ZQGI.js";
|
|
17
|
+
} from "./chunk-RKQEHRBB.js";
|
|
21
18
|
import {
|
|
22
19
|
readGlobalConfig,
|
|
23
20
|
writeGlobalConfig
|
|
24
|
-
} from "./chunk-
|
|
25
|
-
import
|
|
21
|
+
} from "./chunk-IKRVFPWU.js";
|
|
22
|
+
import {
|
|
23
|
+
parseArgs
|
|
24
|
+
} from "./chunk-D424ZQGI.js";
|
|
25
|
+
import "./chunk-H7OZRFJB.js";
|
|
26
26
|
import "./chunk-K3NQKI34.js";
|
|
27
27
|
|
|
28
28
|
// src/commands/setup.ts
|
|
@@ -45,7 +45,7 @@ function generatePlist(voluteBin, opts) {
|
|
|
45
45
|
const args = ["up", "--foreground"];
|
|
46
46
|
if (opts.port != null) args.push("--port", String(opts.port));
|
|
47
47
|
if (opts.host) args.push("--host", opts.host);
|
|
48
|
-
const logPath = opts.system ? "/var/lib/volute/daemon.log" : resolve(homedir(), ".volute", "daemon.log");
|
|
48
|
+
const logPath = opts.system ? "/var/lib/volute/system/daemon.log" : resolve(homedir(), ".volute", "system", "daemon.log");
|
|
49
49
|
const envEntries = [];
|
|
50
50
|
if (opts.system) {
|
|
51
51
|
envEntries.push(
|
|
@@ -6,16 +6,16 @@ async function run(args) {
|
|
|
6
6
|
const subcommand = args[0];
|
|
7
7
|
switch (subcommand) {
|
|
8
8
|
case "merge":
|
|
9
|
-
await import("./merge-
|
|
9
|
+
await import("./merge-LNSMSAOF.js").then((m) => m.run(args.slice(1)));
|
|
10
10
|
break;
|
|
11
11
|
case "pull":
|
|
12
|
-
await import("./pull-
|
|
12
|
+
await import("./pull-XCHJTM5M.js").then((m) => m.run(args.slice(1)));
|
|
13
13
|
break;
|
|
14
14
|
case "log":
|
|
15
|
-
await import("./log-
|
|
15
|
+
await import("./log-ABYNVYJ3.js").then((m) => m.run(args.slice(1)));
|
|
16
16
|
break;
|
|
17
17
|
case "status":
|
|
18
|
-
await import("./status-
|
|
18
|
+
await import("./status-7GA4SM4Y.js").then((m) => m.run(args.slice(1)));
|
|
19
19
|
break;
|
|
20
20
|
case "--help":
|
|
21
21
|
case "-h":
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
resolveMindName
|
|
4
|
+
} from "./chunk-NAOW2CLO.js";
|
|
2
5
|
import {
|
|
3
6
|
daemonFetch
|
|
4
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-JGFVMROS.js";
|
|
5
8
|
import {
|
|
6
9
|
getClient,
|
|
7
10
|
urlOf
|
|
8
11
|
} from "./chunk-4RQBJWQX.js";
|
|
9
|
-
import {
|
|
10
|
-
resolveMindName
|
|
11
|
-
} from "./chunk-NAOW2CLO.js";
|
|
12
12
|
import {
|
|
13
13
|
parseArgs
|
|
14
14
|
} from "./chunk-D424ZQGI.js";
|
|
15
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-H7OZRFJB.js";
|
|
16
16
|
import "./chunk-K3NQKI34.js";
|
|
17
17
|
|
|
18
18
|
// src/commands/skill.ts
|
|
@@ -19,7 +19,7 @@ Restart your mind after running this so the subagent is loaded.
|
|
|
19
19
|
|
|
20
20
|
## 2. Add a dream schedule
|
|
21
21
|
|
|
22
|
-
Add to
|
|
22
|
+
Add to `.config/volute.json` under `schedules`:
|
|
23
23
|
|
|
24
24
|
```json
|
|
25
25
|
{
|
|
@@ -41,7 +41,7 @@ volute schedule add --mind <name> --id dream --cron "0 3 * * *" --message "it's
|
|
|
41
41
|
|
|
42
42
|
If your mind uses the sleep system, add `system:dream` to wake triggers so the dream schedule wakes the mind briefly:
|
|
43
43
|
|
|
44
|
-
In
|
|
44
|
+
In `.config/volute.json`, add to the `sleep` section:
|
|
45
45
|
|
|
46
46
|
```json
|
|
47
47
|
{
|