volute 0.19.0 → 0.21.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 +68 -68
- package/dist/activity-events-3WHHCOBB.js +15 -0
- package/dist/{archive-ZCFOSTKB.js → archive-4ZQYK5MN.js} +4 -2
- package/dist/auth-HM2RSPY7.js +37 -0
- package/dist/{channel-PUQKGSQM.js → channel-BOOMFULW.js} +2 -2
- package/dist/{chunk-OTWLI7F4.js → chunk-5462YKWP.js} +12 -9
- package/dist/{chunk-2TJGRJ4O.js → chunk-7LPTHFIL.js} +64 -59
- package/dist/chunk-A4S7H6G6.js +56 -0
- package/dist/chunk-AKPFNL7L.js +148 -0
- package/dist/{chunk-EBGCNDMM.js → chunk-B2CPS4QU.js} +128 -114
- package/dist/{chunk-FCDU5BFX.js → chunk-HFCBO2GL.js} +2 -2
- package/dist/chunk-HGCDWKSP.js +97 -0
- package/dist/{chunk-DYZGP3EW.js → chunk-IPJXU366.js} +1 -1
- package/dist/{chunk-VE4D3GOP.js → chunk-J5A3DF2U.js} +2 -2
- package/dist/{chunk-WC6ZHVRL.js → chunk-KFI7TQJ6.js} +2 -2
- package/dist/{chunk-AW7P4EVV.js → chunk-KTJGZ7M7.js} +55 -7
- package/dist/{chunk-4KPUF5JD.js → chunk-L3LHXZD7.js} +18 -5
- package/dist/{chunk-OGXOMR65.js → chunk-NWPT4ASZ.js} +1 -1
- package/dist/{chunk-FGV2H4TX.js → chunk-OGZYB5GL.js} +312 -268
- package/dist/{chunk-SCUDS4US.js → chunk-ON3FF5JA.js} +1 -1
- package/dist/{chunk-EMQSAY3B.js → chunk-PC6R6UUW.js} +6 -5
- package/dist/{chunk-VDWCHYTS.js → chunk-PHU4DEAJ.js} +1 -1
- package/dist/{chunk-7NO7EV5Z.js → chunk-Q7AITQ44.js} +2 -2
- package/dist/{chunk-32VR2EOH.js → chunk-QUJUKM4U.js} +2 -2
- package/dist/{chunk-VQWDC6UK.js → chunk-SGPEZ32F.js} +46 -1
- package/dist/{chunk-RHEGSQFJ.js → chunk-WSLPZF72.js} +1 -1
- package/dist/cli.js +59 -111
- package/dist/{connector-JBVNZ7VK.js → connector-PYT5UOTZ.js} +6 -6
- package/dist/connectors/discord.js +2 -2
- package/dist/connectors/slack.js +2 -2
- package/dist/connectors/telegram.js +2 -2
- package/dist/{create-HP4OVVHF.js → create-WIDA3M4C.js} +1 -1
- package/dist/{daemon-client-ITWUCNFO.js → daemon-client-ZHCDL4RS.js} +2 -2
- package/dist/{daemon-restart-JMZM3QY4.js → daemon-restart-BH67ZOTE.js} +8 -8
- package/dist/daemon.js +2872 -1301
- package/dist/{delete-BSU7K3RY.js → delete-LOIANQGD.js} +1 -1
- package/dist/down-LIOQ5JDH.js +14 -0
- package/dist/{env-A3LMO777.js → env-4PHIHTF4.js} +2 -2
- package/dist/{export-GCDNQCF3.js → export-XD6PJBQP.js} +19 -8
- package/dist/file-X4L5TTOL.js +204 -0
- package/dist/{history-WNK3DFUM.js → history-HTEKRNID.js} +2 -2
- package/dist/{import-M63VIUJ5.js → import-E433B4KG.js} +3 -3
- package/dist/{log-PPPZDVEF.js → log-SRO5Q6AD.js} +2 -2
- package/dist/{login-HNH3EUQV.js → login-UO6AOVEA.js} +4 -4
- package/dist/{logout-I5CB5UZS.js → logout-UKD5LA37.js} +2 -2
- package/dist/{logs-SF2IMJN4.js → logs-HNTNNBDW.js} +2 -2
- package/dist/{merge-33C237A4.js → merge-B6SYTGI7.js} +2 -2
- package/dist/{mind-PQ5NCPSU.js → mind-BIDOF65R.js} +27 -11
- package/dist/mind-activity-tracker-PGC3DBJ7.js +18 -0
- package/dist/{mind-manager-RVCFROAY.js → mind-manager-3V2NXX4I.js} +5 -6
- package/dist/{package-MYE2ZJLV.js → package-HQR52XSG.js} +1 -1
- package/dist/{pages-AXCOSY3P.js → pages-KQBR5TAZ.js} +6 -6
- package/dist/{publish-YB377JB7.js → publish-OJ4QMXVZ.js} +12 -9
- package/dist/{pull-XAEWQJ47.js → pull-GRQAXM2E.js} +2 -2
- package/dist/{register-VSPCMHKX.js → register-U2UO6TC4.js} +5 -5
- package/dist/registry-D2BSQ2X5.js +42 -0
- package/dist/{restart-IQKMCK5M.js → restart-CIDAKGG2.js} +3 -6
- package/dist/{schedule-LMX7GAQZ.js → schedule-NLR3LZLY.js} +27 -7
- package/dist/{seed-J43YDKXG.js → seed-3H2MRREW.js} +2 -2
- package/dist/{send-KVIZIGCE.js → send-RP2TA7SG.js} +132 -36
- package/dist/{service-LUR7WDO7.js → service-TVNEORO7.js} +31 -13
- package/dist/{setup-OH3PJUJO.js → setup-OZDYCKDI.js} +25 -34
- package/dist/{shared-KO35ZM44.js → shared-DCQ2UXOM.js} +4 -4
- package/dist/{skill-BCVNI6TV.js → skill-Q2Y6PQ3L.js} +2 -2
- package/dist/skills/orientation/SKILL.md +2 -2
- package/dist/skills/volute-mind/SKILL.md +38 -8
- package/dist/{sprout-VBEX63LX.js → sprout-6Z6C42YM.js} +34 -30
- package/dist/{start-I5JYB65M.js → start-JR6CUUWF.js} +3 -6
- package/dist/{status-D7E5HHBV.js → status-5XDGYHKP.js} +2 -2
- package/dist/{status-JCJAOXTW.js → status-LV34BG6G.js} +6 -5
- package/dist/{status-4ESFLGH4.js → status-Z7NAFMBI.js} +5 -5
- package/dist/{stop-NBVKEFQQ.js → stop-VKPGK25U.js} +2 -5
- package/dist/template-hash-BIMA4ILT.js +8 -0
- package/dist/{up-WG65SWJU.js → up-7BGDMFRT.js} +5 -5
- package/dist/{update-FJIHDJKM.js → update-4WT7VWHW.js} +5 -5
- package/dist/{update-check-MWE5AH4U.js → update-check-F5Z3ALXX.js} +2 -2
- package/dist/{upgrade-AIT24B5I.js → upgrade-ZEC2GGFO.js} +1 -1
- package/dist/{variant-63ZWO2W7.js → variant-A4I7PHXS.js} +16 -24
- package/dist/version-notify-TFS2U5CF.js +173 -0
- package/dist/web-assets/assets/index-BR3gtK3E.css +1 -0
- package/dist/web-assets/assets/index-CWmrZRQd.js +64 -0
- package/dist/web-assets/index.html +2 -2
- package/drizzle/0012_activity.sql +11 -0
- package/drizzle/meta/0012_snapshot.json +7 -0
- package/drizzle/meta/_journal.json +7 -0
- package/package.json +1 -1
- package/templates/_base/home/.config/routes.json +2 -2
- package/templates/_base/home/VOLUTE.md +1 -1
- package/templates/_base/src/lib/daemon-client.ts +22 -0
- package/templates/_base/src/lib/transparency.ts +1 -1
- package/templates/claude/.init/.config/routes.json +7 -1
- package/templates/pi/.init/.config/routes.json +7 -1
- package/templates/pi/src/agent.ts +11 -5
- package/templates/pi/src/lib/session-context-extension.ts +6 -4
- package/templates/pi/src/server.ts +2 -0
- package/dist/chunk-UJ6GHNR7.js +0 -675
- package/dist/chunk-Z524RFCJ.js +0 -36
- package/dist/db-5ZVC6MQF.js +0 -10
- package/dist/delivery-manager-ISTJMZDW.js +0 -16
- package/dist/down-ZY35KMHR.js +0 -14
- package/dist/schema-5BW7DFZI.js +0 -24
- package/dist/variants-JAGWGBXG.js +0 -26
- package/dist/web-assets/assets/index-BAbuRsVF.css +0 -1
- package/dist/web-assets/assets/index-CiQhSKi_.js +0 -63
|
@@ -13,7 +13,7 @@ async function run(args) {
|
|
|
13
13
|
force: { type: "boolean" }
|
|
14
14
|
});
|
|
15
15
|
const name = resolveMindName({ mind: positional[0] });
|
|
16
|
-
const { daemonFetch } = await import("./daemon-client-
|
|
16
|
+
const { daemonFetch } = await import("./daemon-client-ZHCDL4RS.js");
|
|
17
17
|
const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
|
|
18
18
|
const client = getClient();
|
|
19
19
|
const url = urlOf(client.api.minds[":name"].$url({ param: { name } })) + (flags.force ? "?force=true" : "");
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
run,
|
|
4
|
+
stopDaemon
|
|
5
|
+
} from "./chunk-Q7AITQ44.js";
|
|
6
|
+
import "./chunk-QUJUKM4U.js";
|
|
7
|
+
import "./chunk-IPJXU366.js";
|
|
8
|
+
import "./chunk-NWPT4ASZ.js";
|
|
9
|
+
import "./chunk-B2CPS4QU.js";
|
|
10
|
+
import "./chunk-K3NQKI34.js";
|
|
11
|
+
export {
|
|
12
|
+
run,
|
|
13
|
+
stopDaemon
|
|
14
|
+
};
|
|
@@ -11,8 +11,8 @@ import {
|
|
|
11
11
|
} from "./chunk-D424ZQGI.js";
|
|
12
12
|
import {
|
|
13
13
|
daemonFetch
|
|
14
|
-
} from "./chunk-
|
|
15
|
-
import "./chunk-
|
|
14
|
+
} from "./chunk-KFI7TQJ6.js";
|
|
15
|
+
import "./chunk-B2CPS4QU.js";
|
|
16
16
|
import "./chunk-K3NQKI34.js";
|
|
17
17
|
|
|
18
18
|
// src/commands/env.ts
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
import {
|
|
3
3
|
addHistoryToArchive,
|
|
4
4
|
createExportArchive
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-KTJGZ7M7.js";
|
|
6
6
|
import {
|
|
7
7
|
parseArgs
|
|
8
8
|
} from "./chunk-D424ZQGI.js";
|
|
9
9
|
import {
|
|
10
10
|
findMind,
|
|
11
11
|
mindDir
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-B2CPS4QU.js";
|
|
13
13
|
import "./chunk-K3NQKI34.js";
|
|
14
14
|
|
|
15
15
|
// src/commands/export.ts
|
|
@@ -22,13 +22,14 @@ async function run(args) {
|
|
|
22
22
|
"include-connectors": { type: "boolean" },
|
|
23
23
|
"include-history": { type: "boolean" },
|
|
24
24
|
"include-sessions": { type: "boolean" },
|
|
25
|
+
"include-src": { type: "boolean" },
|
|
25
26
|
all: { type: "boolean" },
|
|
26
27
|
output: { type: "string" }
|
|
27
28
|
});
|
|
28
29
|
const name = positional[0];
|
|
29
30
|
if (!name) {
|
|
30
31
|
console.error(
|
|
31
|
-
"Usage: volute mind export <name> [--include-env] [--include-identity] [--include-connectors] [--include-history] [--include-sessions] [--all] [--output <path>]"
|
|
32
|
+
"Usage: volute mind export <name> [--include-env] [--include-identity] [--include-connectors] [--include-history] [--include-sessions] [--include-src] [--all] [--output <path>]"
|
|
32
33
|
);
|
|
33
34
|
process.exit(1);
|
|
34
35
|
}
|
|
@@ -48,9 +49,12 @@ async function run(args) {
|
|
|
48
49
|
const includeConnectors = includeAll || flags["include-connectors"];
|
|
49
50
|
const includeHistory = includeAll || flags["include-history"];
|
|
50
51
|
const includeSessions = includeAll || flags["include-sessions"];
|
|
52
|
+
const includeSrc = includeAll || flags["include-src"];
|
|
51
53
|
const zip = createExportArchive({
|
|
52
54
|
name,
|
|
53
55
|
template: entry.template ?? "claude",
|
|
56
|
+
stage: entry.stage,
|
|
57
|
+
includeSrc,
|
|
54
58
|
includeEnv,
|
|
55
59
|
includeIdentity,
|
|
56
60
|
includeConnectors,
|
|
@@ -59,11 +63,17 @@ async function run(args) {
|
|
|
59
63
|
});
|
|
60
64
|
if (includeHistory) {
|
|
61
65
|
try {
|
|
62
|
-
const {
|
|
63
|
-
const {
|
|
64
|
-
const
|
|
65
|
-
const
|
|
66
|
-
|
|
66
|
+
const { daemonFetch } = await import("./daemon-client-ZHCDL4RS.js");
|
|
67
|
+
const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
|
|
68
|
+
const client = getClient();
|
|
69
|
+
const res = await daemonFetch(
|
|
70
|
+
urlOf(client.api.minds[":name"].history.export.$url({ param: { name } }))
|
|
71
|
+
);
|
|
72
|
+
if (!res.ok) {
|
|
73
|
+
const text = await res.text().catch(() => "");
|
|
74
|
+
throw new Error(`Failed to fetch history: HTTP ${res.status}${text ? ` - ${text}` : ""}`);
|
|
75
|
+
}
|
|
76
|
+
const rows = await res.json();
|
|
67
77
|
addHistoryToArchive(zip, rows);
|
|
68
78
|
} catch (err) {
|
|
69
79
|
console.error(`Error: could not export history: ${err.message}`);
|
|
@@ -84,6 +94,7 @@ Exported ${name} \u2192 ${outputPath} (${sizeMB} MB)`);
|
|
|
84
94
|
const included = [];
|
|
85
95
|
const excluded = [];
|
|
86
96
|
for (const [key, val] of [
|
|
97
|
+
["src", includeSrc],
|
|
87
98
|
["env", includeEnv],
|
|
88
99
|
["identity", includeIdentity],
|
|
89
100
|
["connectors", includeConnectors],
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
resolveMindName
|
|
4
|
+
} from "./chunk-NAOW2CLO.js";
|
|
5
|
+
import {
|
|
6
|
+
parseArgs
|
|
7
|
+
} from "./chunk-D424ZQGI.js";
|
|
8
|
+
import {
|
|
9
|
+
daemonFetch
|
|
10
|
+
} from "./chunk-KFI7TQJ6.js";
|
|
11
|
+
import "./chunk-B2CPS4QU.js";
|
|
12
|
+
import "./chunk-K3NQKI34.js";
|
|
13
|
+
|
|
14
|
+
// src/commands/file.ts
|
|
15
|
+
async function run(args) {
|
|
16
|
+
const subcommand = args[0];
|
|
17
|
+
switch (subcommand) {
|
|
18
|
+
case "send":
|
|
19
|
+
await sendFile(args.slice(1));
|
|
20
|
+
break;
|
|
21
|
+
case "list":
|
|
22
|
+
await listPending(args.slice(1));
|
|
23
|
+
break;
|
|
24
|
+
case "accept":
|
|
25
|
+
await acceptFile(args.slice(1));
|
|
26
|
+
break;
|
|
27
|
+
case "reject":
|
|
28
|
+
await rejectFile(args.slice(1));
|
|
29
|
+
break;
|
|
30
|
+
case "trust":
|
|
31
|
+
await trustSender(args.slice(1));
|
|
32
|
+
break;
|
|
33
|
+
case "untrust":
|
|
34
|
+
await untrustSender(args.slice(1));
|
|
35
|
+
break;
|
|
36
|
+
case "--help":
|
|
37
|
+
case "-h":
|
|
38
|
+
case void 0:
|
|
39
|
+
printUsage();
|
|
40
|
+
break;
|
|
41
|
+
default:
|
|
42
|
+
printUsage();
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function printUsage() {
|
|
47
|
+
console.log(`Usage:
|
|
48
|
+
volute file send <path> <target-mind> [--mind <name>] Send a file to another mind
|
|
49
|
+
volute file list [--mind <name>] List pending incoming files
|
|
50
|
+
volute file accept <id> [--mind <name>] Accept a pending file
|
|
51
|
+
volute file reject <id> [--mind <name>] Reject a pending file
|
|
52
|
+
volute file trust <sender> [--mind <name>] Trust a sender (auto-deliver)
|
|
53
|
+
volute file untrust <sender> [--mind <name>] Remove sender trust`);
|
|
54
|
+
}
|
|
55
|
+
async function sendFile(args) {
|
|
56
|
+
const { positional, flags } = parseArgs(args, {
|
|
57
|
+
mind: { type: "string" }
|
|
58
|
+
});
|
|
59
|
+
const mind = resolveMindName(flags);
|
|
60
|
+
const filePath = positional[0];
|
|
61
|
+
const targetMind = positional[1];
|
|
62
|
+
if (!filePath || !targetMind) {
|
|
63
|
+
console.error("Usage: volute file send <path> <target-mind> [--mind <name>]");
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
const res = await daemonFetch(`/api/minds/${encodeURIComponent(mind)}/files/send`, {
|
|
67
|
+
method: "POST",
|
|
68
|
+
headers: { "Content-Type": "application/json" },
|
|
69
|
+
body: JSON.stringify({ targetMind, filePath })
|
|
70
|
+
});
|
|
71
|
+
if (!res.ok) {
|
|
72
|
+
const data2 = await res.json();
|
|
73
|
+
console.error(data2.error ?? `Failed to send file: ${res.status}`);
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
const data = await res.json();
|
|
77
|
+
if (data.status === "delivered") {
|
|
78
|
+
console.log(`File delivered to ${targetMind}: ${data.destPath}`);
|
|
79
|
+
} else {
|
|
80
|
+
console.log(`File pending approval from ${targetMind} (id: ${data.id})`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async function listPending(args) {
|
|
84
|
+
const { flags } = parseArgs(args, {
|
|
85
|
+
mind: { type: "string" }
|
|
86
|
+
});
|
|
87
|
+
const mind = resolveMindName(flags);
|
|
88
|
+
const res = await daemonFetch(`/api/minds/${encodeURIComponent(mind)}/files/pending`);
|
|
89
|
+
if (!res.ok) {
|
|
90
|
+
const data = await res.json();
|
|
91
|
+
console.error(data.error ?? `Failed to list pending files: ${res.status}`);
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
const pending = await res.json();
|
|
95
|
+
if (pending.length === 0) {
|
|
96
|
+
console.log("No pending files.");
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const idW = Math.max(2, ...pending.map((p) => p.id.length));
|
|
100
|
+
const senderW = Math.max(6, ...pending.map((p) => p.sender.length));
|
|
101
|
+
const fileW = Math.max(4, ...pending.map((p) => p.filename.length));
|
|
102
|
+
console.log(`${"ID".padEnd(idW)} ${"SENDER".padEnd(senderW)} ${"FILE".padEnd(fileW)} SIZE`);
|
|
103
|
+
for (const p of pending) {
|
|
104
|
+
console.log(
|
|
105
|
+
`${p.id.padEnd(idW)} ${p.sender.padEnd(senderW)} ${p.filename.padEnd(fileW)} ${formatSize(p.size)}`
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
async function acceptFile(args) {
|
|
110
|
+
const { positional, flags } = parseArgs(args, {
|
|
111
|
+
mind: { type: "string" }
|
|
112
|
+
});
|
|
113
|
+
const mind = resolveMindName(flags);
|
|
114
|
+
const id = positional[0];
|
|
115
|
+
if (!id) {
|
|
116
|
+
console.error("Usage: volute file accept <id> [--mind <name>]");
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
const res = await daemonFetch(`/api/minds/${encodeURIComponent(mind)}/files/accept`, {
|
|
120
|
+
method: "POST",
|
|
121
|
+
headers: { "Content-Type": "application/json" },
|
|
122
|
+
body: JSON.stringify({ id })
|
|
123
|
+
});
|
|
124
|
+
if (!res.ok) {
|
|
125
|
+
const data2 = await res.json();
|
|
126
|
+
console.error(data2.error ?? `Failed to accept file: ${res.status}`);
|
|
127
|
+
process.exit(1);
|
|
128
|
+
}
|
|
129
|
+
const data = await res.json();
|
|
130
|
+
console.log(`File accepted: ${data.destPath}`);
|
|
131
|
+
}
|
|
132
|
+
async function rejectFile(args) {
|
|
133
|
+
const { positional, flags } = parseArgs(args, {
|
|
134
|
+
mind: { type: "string" }
|
|
135
|
+
});
|
|
136
|
+
const mind = resolveMindName(flags);
|
|
137
|
+
const id = positional[0];
|
|
138
|
+
if (!id) {
|
|
139
|
+
console.error("Usage: volute file reject <id> [--mind <name>]");
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
const res = await daemonFetch(`/api/minds/${encodeURIComponent(mind)}/files/reject`, {
|
|
143
|
+
method: "POST",
|
|
144
|
+
headers: { "Content-Type": "application/json" },
|
|
145
|
+
body: JSON.stringify({ id })
|
|
146
|
+
});
|
|
147
|
+
if (!res.ok) {
|
|
148
|
+
const data = await res.json();
|
|
149
|
+
console.error(data.error ?? `Failed to reject file: ${res.status}`);
|
|
150
|
+
process.exit(1);
|
|
151
|
+
}
|
|
152
|
+
console.log(`File rejected: ${id}`);
|
|
153
|
+
}
|
|
154
|
+
async function trustSender(args) {
|
|
155
|
+
const { positional, flags } = parseArgs(args, {
|
|
156
|
+
mind: { type: "string" }
|
|
157
|
+
});
|
|
158
|
+
const mind = resolveMindName(flags);
|
|
159
|
+
const sender = positional[0];
|
|
160
|
+
if (!sender) {
|
|
161
|
+
console.error("Usage: volute file trust <sender> [--mind <name>]");
|
|
162
|
+
process.exit(1);
|
|
163
|
+
}
|
|
164
|
+
const res = await daemonFetch(`/api/minds/${encodeURIComponent(mind)}/files/trust`, {
|
|
165
|
+
method: "POST",
|
|
166
|
+
headers: { "Content-Type": "application/json" },
|
|
167
|
+
body: JSON.stringify({ sender })
|
|
168
|
+
});
|
|
169
|
+
if (!res.ok) {
|
|
170
|
+
const data = await res.json();
|
|
171
|
+
console.error(data.error ?? `Failed to trust sender: ${res.status}`);
|
|
172
|
+
process.exit(1);
|
|
173
|
+
}
|
|
174
|
+
console.log(`Trusted sender: ${sender}`);
|
|
175
|
+
}
|
|
176
|
+
async function untrustSender(args) {
|
|
177
|
+
const { positional, flags } = parseArgs(args, {
|
|
178
|
+
mind: { type: "string" }
|
|
179
|
+
});
|
|
180
|
+
const mind = resolveMindName(flags);
|
|
181
|
+
const sender = positional[0];
|
|
182
|
+
if (!sender) {
|
|
183
|
+
console.error("Usage: volute file untrust <sender> [--mind <name>]");
|
|
184
|
+
process.exit(1);
|
|
185
|
+
}
|
|
186
|
+
const res = await daemonFetch(
|
|
187
|
+
`/api/minds/${encodeURIComponent(mind)}/files/trust/${encodeURIComponent(sender)}`,
|
|
188
|
+
{ method: "DELETE" }
|
|
189
|
+
);
|
|
190
|
+
if (!res.ok) {
|
|
191
|
+
const data = await res.json();
|
|
192
|
+
console.error(data.error ?? `Failed to untrust sender: ${res.status}`);
|
|
193
|
+
process.exit(1);
|
|
194
|
+
}
|
|
195
|
+
console.log(`Untrusted sender: ${sender}`);
|
|
196
|
+
}
|
|
197
|
+
function formatSize(bytes) {
|
|
198
|
+
if (bytes < 1024) return `${bytes} B`;
|
|
199
|
+
if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
|
|
200
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
201
|
+
}
|
|
202
|
+
export {
|
|
203
|
+
run
|
|
204
|
+
};
|
|
@@ -11,8 +11,8 @@ import {
|
|
|
11
11
|
} from "./chunk-D424ZQGI.js";
|
|
12
12
|
import {
|
|
13
13
|
daemonFetch
|
|
14
|
-
} from "./chunk-
|
|
15
|
-
import "./chunk-
|
|
14
|
+
} from "./chunk-KFI7TQJ6.js";
|
|
15
|
+
import "./chunk-B2CPS4QU.js";
|
|
16
16
|
import "./chunk-K3NQKI34.js";
|
|
17
17
|
|
|
18
18
|
// src/commands/history.ts
|
|
@@ -6,10 +6,10 @@ import {
|
|
|
6
6
|
parseNameFromIdentity,
|
|
7
7
|
run,
|
|
8
8
|
sessionMatchesWorkspace
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-PC6R6UUW.js";
|
|
10
|
+
import "./chunk-PHU4DEAJ.js";
|
|
11
11
|
import "./chunk-D424ZQGI.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-B2CPS4QU.js";
|
|
13
13
|
import "./chunk-K3NQKI34.js";
|
|
14
14
|
export {
|
|
15
15
|
findOpenClawSession,
|
|
@@ -7,8 +7,8 @@ import {
|
|
|
7
7
|
} from "./chunk-D424ZQGI.js";
|
|
8
8
|
import {
|
|
9
9
|
daemonFetch
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
} from "./chunk-KFI7TQJ6.js";
|
|
11
|
+
import "./chunk-B2CPS4QU.js";
|
|
12
12
|
import "./chunk-K3NQKI34.js";
|
|
13
13
|
|
|
14
14
|
// src/commands/shared/log.ts
|
|
@@ -8,11 +8,11 @@ import {
|
|
|
8
8
|
import {
|
|
9
9
|
readSystemsConfig,
|
|
10
10
|
writeSystemsConfig
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-HFCBO2GL.js";
|
|
12
12
|
import {
|
|
13
13
|
parseArgs
|
|
14
14
|
} from "./chunk-D424ZQGI.js";
|
|
15
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-B2CPS4QU.js";
|
|
16
16
|
import "./chunk-K3NQKI34.js";
|
|
17
17
|
|
|
18
18
|
// src/commands/pages/login.ts
|
|
@@ -23,13 +23,13 @@ async function run(args) {
|
|
|
23
23
|
});
|
|
24
24
|
const existing = readSystemsConfig();
|
|
25
25
|
if (existing) {
|
|
26
|
-
console.error(`Already logged in as "${existing.system}". Run "volute logout" first.`);
|
|
26
|
+
console.error(`Already logged in as "${existing.system}". Run "volute auth logout" first.`);
|
|
27
27
|
process.exit(1);
|
|
28
28
|
}
|
|
29
29
|
let key = flags.key;
|
|
30
30
|
if (!key) {
|
|
31
31
|
if (!process.stdin.isTTY) {
|
|
32
|
-
console.error("Usage: volute
|
|
32
|
+
console.error("Usage: volute auth login --key <api-key>");
|
|
33
33
|
process.exit(1);
|
|
34
34
|
}
|
|
35
35
|
key = await promptLine("API key: ");
|
|
@@ -11,8 +11,8 @@ import {
|
|
|
11
11
|
} from "./chunk-D424ZQGI.js";
|
|
12
12
|
import {
|
|
13
13
|
daemonFetch
|
|
14
|
-
} from "./chunk-
|
|
15
|
-
import "./chunk-
|
|
14
|
+
} from "./chunk-KFI7TQJ6.js";
|
|
15
|
+
import "./chunk-B2CPS4QU.js";
|
|
16
16
|
import "./chunk-K3NQKI34.js";
|
|
17
17
|
|
|
18
18
|
// src/commands/logs.ts
|
|
@@ -7,8 +7,8 @@ import {
|
|
|
7
7
|
} from "./chunk-D424ZQGI.js";
|
|
8
8
|
import {
|
|
9
9
|
daemonFetch
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
} from "./chunk-KFI7TQJ6.js";
|
|
11
|
+
import "./chunk-B2CPS4QU.js";
|
|
12
12
|
import "./chunk-K3NQKI34.js";
|
|
13
13
|
|
|
14
14
|
// src/commands/shared/merge.ts
|
|
@@ -6,45 +6,57 @@ async function run(args) {
|
|
|
6
6
|
const subcommand = args[0];
|
|
7
7
|
switch (subcommand) {
|
|
8
8
|
case "create":
|
|
9
|
-
await import("./create-
|
|
9
|
+
await import("./create-WIDA3M4C.js").then((m) => m.run(args.slice(1)));
|
|
10
10
|
break;
|
|
11
11
|
case "start":
|
|
12
|
-
await import("./start-
|
|
12
|
+
await import("./start-JR6CUUWF.js").then((m) => m.run(args.slice(1)));
|
|
13
13
|
break;
|
|
14
14
|
case "stop":
|
|
15
|
-
await import("./stop-
|
|
15
|
+
await import("./stop-VKPGK25U.js").then((m) => m.run(args.slice(1)));
|
|
16
16
|
break;
|
|
17
17
|
case "restart":
|
|
18
|
-
await import("./restart-
|
|
18
|
+
await import("./restart-CIDAKGG2.js").then((m) => m.run(args.slice(1)));
|
|
19
19
|
break;
|
|
20
20
|
case "delete":
|
|
21
|
-
await import("./delete-
|
|
21
|
+
await import("./delete-LOIANQGD.js").then((m) => m.run(args.slice(1)));
|
|
22
22
|
break;
|
|
23
23
|
case "list":
|
|
24
|
-
await import("./status-
|
|
24
|
+
await import("./status-Z7NAFMBI.js").then((m) => m.run(args.slice(1)));
|
|
25
25
|
break;
|
|
26
26
|
case "status": {
|
|
27
27
|
const rest = args.slice(1);
|
|
28
28
|
if (!rest[0] && process.env.VOLUTE_MIND) {
|
|
29
29
|
rest.unshift(process.env.VOLUTE_MIND);
|
|
30
30
|
}
|
|
31
|
-
await import("./status-
|
|
31
|
+
await import("./status-Z7NAFMBI.js").then((m) => m.run(rest));
|
|
32
32
|
break;
|
|
33
33
|
}
|
|
34
34
|
case "logs": {
|
|
35
35
|
const rest = args.slice(1);
|
|
36
36
|
const logsArgs = transformMindFlag(rest);
|
|
37
|
-
await import("./logs-
|
|
37
|
+
await import("./logs-HNTNNBDW.js").then((m) => m.run(logsArgs));
|
|
38
38
|
break;
|
|
39
39
|
}
|
|
40
40
|
case "upgrade":
|
|
41
|
-
await import("./upgrade-
|
|
41
|
+
await import("./upgrade-ZEC2GGFO.js").then((m) => m.run(args.slice(1)));
|
|
42
42
|
break;
|
|
43
43
|
case "import":
|
|
44
|
-
await import("./import-
|
|
44
|
+
await import("./import-E433B4KG.js").then((m) => m.run(args.slice(1)));
|
|
45
45
|
break;
|
|
46
46
|
case "export":
|
|
47
|
-
await import("./export-
|
|
47
|
+
await import("./export-XD6PJBQP.js").then((m) => m.run(args.slice(1)));
|
|
48
|
+
break;
|
|
49
|
+
case "connect":
|
|
50
|
+
await import("./connector-PYT5UOTZ.js").then((m) => m.run(["connect", ...args.slice(1)]));
|
|
51
|
+
break;
|
|
52
|
+
case "disconnect":
|
|
53
|
+
await import("./connector-PYT5UOTZ.js").then((m) => m.run(["disconnect", ...args.slice(1)]));
|
|
54
|
+
break;
|
|
55
|
+
case "seed":
|
|
56
|
+
await import("./seed-3H2MRREW.js").then((m) => m.run(args.slice(1)));
|
|
57
|
+
break;
|
|
58
|
+
case "sprout":
|
|
59
|
+
await import("./sprout-6Z6C42YM.js").then((m) => m.run(args.slice(1)));
|
|
48
60
|
break;
|
|
49
61
|
case "--help":
|
|
50
62
|
case "-h":
|
|
@@ -65,6 +77,7 @@ function transformMindFlag(args) {
|
|
|
65
77
|
function printUsage() {
|
|
66
78
|
console.log(`Usage:
|
|
67
79
|
volute mind create <name> [--template <name>]
|
|
80
|
+
volute mind seed <name> [--template <name>]
|
|
68
81
|
volute mind start <name>
|
|
69
82
|
volute mind stop [name]
|
|
70
83
|
volute mind restart [name]
|
|
@@ -72,6 +85,9 @@ function printUsage() {
|
|
|
72
85
|
volute mind list
|
|
73
86
|
volute mind status [name]
|
|
74
87
|
volute mind logs [name] [--follow] [-n N]
|
|
88
|
+
volute mind connect <type> [--mind <name>]
|
|
89
|
+
volute mind disconnect <type> [--mind <name>]
|
|
90
|
+
volute mind sprout
|
|
75
91
|
volute mind upgrade [name] [--template <name>] [--continue]
|
|
76
92
|
volute mind import <path> [--name <name>] [--session <path>] [--template <name>]
|
|
77
93
|
volute mind export <name> [--include-env] [--include-identity] [--include-connectors] [--include-history] [--include-sessions] [--all] [--output <path>]
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
getActiveMinds,
|
|
4
|
+
markIdle,
|
|
5
|
+
onMindEvent,
|
|
6
|
+
stopAll
|
|
7
|
+
} from "./chunk-HGCDWKSP.js";
|
|
8
|
+
import "./chunk-A4S7H6G6.js";
|
|
9
|
+
import "./chunk-SGPEZ32F.js";
|
|
10
|
+
import "./chunk-YUIHSKR6.js";
|
|
11
|
+
import "./chunk-B2CPS4QU.js";
|
|
12
|
+
import "./chunk-K3NQKI34.js";
|
|
13
|
+
export {
|
|
14
|
+
getActiveMinds,
|
|
15
|
+
markIdle,
|
|
16
|
+
onMindEvent,
|
|
17
|
+
stopAll
|
|
18
|
+
};
|
|
@@ -3,13 +3,12 @@ import {
|
|
|
3
3
|
MindManager,
|
|
4
4
|
getMindManager,
|
|
5
5
|
initMindManager
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-7LPTHFIL.js";
|
|
7
|
+
import "./chunk-PHU4DEAJ.js";
|
|
8
|
+
import "./chunk-SGPEZ32F.js";
|
|
7
9
|
import "./chunk-YUIHSKR6.js";
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-VQWDC6UK.js";
|
|
11
|
-
import "./chunk-OGXOMR65.js";
|
|
12
|
-
import "./chunk-EBGCNDMM.js";
|
|
10
|
+
import "./chunk-NWPT4ASZ.js";
|
|
11
|
+
import "./chunk-B2CPS4QU.js";
|
|
13
12
|
import "./chunk-K3NQKI34.js";
|
|
14
13
|
export {
|
|
15
14
|
MindManager,
|
|
@@ -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.21.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-OJ4QMXVZ.js").then((m) => m.run(args.slice(1)));
|
|
10
10
|
break;
|
|
11
11
|
case "status":
|
|
12
|
-
await import("./status-
|
|
12
|
+
await import("./status-LV34BG6G.js").then((m) => m.run(args.slice(1)));
|
|
13
13
|
break;
|
|
14
14
|
case "--help":
|
|
15
15
|
case "-h":
|
|
@@ -26,10 +26,10 @@ function printUsage() {
|
|
|
26
26
|
volute pages publish [--mind <name>] Publish mind's pages/ directory
|
|
27
27
|
volute pages status [--mind <name>] Show publish status
|
|
28
28
|
|
|
29
|
-
Account commands
|
|
30
|
-
volute register [--name <name>]
|
|
31
|
-
volute login [--key <key>]
|
|
32
|
-
volute logout`);
|
|
29
|
+
Account commands:
|
|
30
|
+
volute auth register [--name <name>]
|
|
31
|
+
volute auth login [--key <key>]
|
|
32
|
+
volute auth logout`);
|
|
33
33
|
}
|
|
34
34
|
export {
|
|
35
35
|
run
|
|
@@ -7,19 +7,19 @@ import {
|
|
|
7
7
|
} from "./chunk-NAOW2CLO.js";
|
|
8
8
|
import {
|
|
9
9
|
sharedDir
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-L3LHXZD7.js";
|
|
11
11
|
import {
|
|
12
12
|
readSystemsConfig
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-HFCBO2GL.js";
|
|
14
14
|
import "./chunk-YUIHSKR6.js";
|
|
15
15
|
import {
|
|
16
16
|
parseArgs
|
|
17
17
|
} from "./chunk-D424ZQGI.js";
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-IPJXU366.js";
|
|
19
|
+
import "./chunk-NWPT4ASZ.js";
|
|
20
20
|
import {
|
|
21
21
|
mindDir
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-B2CPS4QU.js";
|
|
23
23
|
import "./chunk-K3NQKI34.js";
|
|
24
24
|
|
|
25
25
|
// src/commands/pages/publish.ts
|
|
@@ -27,17 +27,20 @@ import { existsSync, lstatSync, readdirSync, readFileSync } from "fs";
|
|
|
27
27
|
import { relative, resolve } from "path";
|
|
28
28
|
async function run(args) {
|
|
29
29
|
const { flags } = parseArgs(args, {
|
|
30
|
-
mind: { type: "string" }
|
|
30
|
+
mind: { type: "string" },
|
|
31
|
+
system: { type: "boolean" }
|
|
31
32
|
});
|
|
32
33
|
const config = readSystemsConfig();
|
|
33
34
|
if (!config) {
|
|
34
|
-
console.error('Not logged in. Run "volute
|
|
35
|
+
console.error('Not logged in. Run "volute auth register" or "volute auth login" first.');
|
|
35
36
|
process.exit(1);
|
|
36
37
|
}
|
|
37
|
-
const hasMind = flags.mind || process.env.VOLUTE_MIND;
|
|
38
38
|
let mindName;
|
|
39
39
|
let pagesDir;
|
|
40
|
-
if (
|
|
40
|
+
if (flags.system) {
|
|
41
|
+
mindName = "system";
|
|
42
|
+
pagesDir = resolve(sharedDir(), "pages");
|
|
43
|
+
} else if (flags.mind || process.env.VOLUTE_MIND) {
|
|
41
44
|
mindName = resolveMindName(flags);
|
|
42
45
|
pagesDir = resolve(mindDir(mindName), "home", "pages");
|
|
43
46
|
} else {
|
|
@@ -7,8 +7,8 @@ import {
|
|
|
7
7
|
} from "./chunk-D424ZQGI.js";
|
|
8
8
|
import {
|
|
9
9
|
daemonFetch
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
} from "./chunk-KFI7TQJ6.js";
|
|
11
|
+
import "./chunk-B2CPS4QU.js";
|
|
12
12
|
import "./chunk-K3NQKI34.js";
|
|
13
13
|
|
|
14
14
|
// src/commands/shared/pull.ts
|