volute 0.34.0 → 0.36.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 +7 -6
- package/dist/accept-ZBDVVCEU.js +42 -0
- package/dist/{activity-events-BN7V6KCC.js → activity-events-PWOGSMRL.js} +4 -4
- package/dist/{ai-service-PSILB5WD.js → ai-service-GSZWIETO.js} +5 -5
- package/dist/{api-client-XUXOB7LI.js → api-client-3A77HMH7.js} +1 -1
- package/dist/api.d.ts +1 -5618
- package/dist/{archive-C2VEMQOR.js → archive-Y2YEOCGB.js} +3 -3
- package/dist/{auth-ZFZXJZDQ.js → auth-YTQME4EV.js} +5 -5
- package/dist/bridge-PXIO6PS2.js +206 -0
- package/dist/chat-ED7YOGKO.js +51 -0
- package/dist/{chunk-6LXAAQ43.js → chunk-33ODGMFZ.js} +1 -1
- package/dist/{chunk-G53F3JA4.js → chunk-46DYYHN6.js} +8 -3
- package/dist/{chunk-FYCALD4Q.js → chunk-5T5YMX6S.js} +1 -1
- package/dist/{chunk-B2BVAIZ4.js → chunk-6F3YNULE.js} +76 -24
- package/dist/{chunk-N7BLAHNE.js → chunk-75AJ54GM.js} +16 -5
- package/dist/{chunk-4JSR7YO7.js → chunk-7PTQGPJY.js} +29 -13
- package/dist/{chunk-XWXBJQBE.js → chunk-B35VNNSS.js} +4 -4
- package/dist/{chunk-V45JXOWY.js → chunk-BOLJUV77.js} +4 -4
- package/dist/{chunk-NAOW2CLO.js → chunk-BTY4WNFE.js} +1 -1
- package/dist/{chunk-OYAKCAVY.js → chunk-CU6OFXMM.js} +1 -1
- package/dist/{chunk-7F2SW2KD.js → chunk-DJT5Y4UF.js} +3 -3
- package/dist/{chunk-BM474GX6.js → chunk-DMV5P2LU.js} +4 -4
- package/dist/{chunk-TAHX36HZ.js → chunk-DQ7VBXAP.js} +2014 -436
- package/dist/{chunk-N3DNFPVA.js → chunk-GBDVNPN2.js} +15 -13
- package/dist/{chunk-E5C7OWZ2.js → chunk-IIWF2IPD.js} +150 -190
- package/dist/{chunk-PVY5W6QN.js → chunk-KAB6UGOL.js} +2 -2
- package/dist/{chunk-BDK73LK6.js → chunk-L72WYMF7.js} +2 -2
- package/dist/{chunk-G6BSYHPK.js → chunk-LGNUFVMR.js} +1 -1
- package/dist/{chunk-4RQBJWQX.js → chunk-LOPXTW6H.js} +1 -1
- package/dist/{chunk-BFWHBQK4.js → chunk-M5RYAA5I.js} +3 -3
- package/dist/{chunk-V6ZCNULL.js → chunk-N2AUHW4C.js} +37 -28
- package/dist/{chunk-6OWJXUAR.js → chunk-NUX47Y2V.js} +19 -4
- package/dist/{chunk-D424ZQGI.js → chunk-O7IGP7ZW.js} +11 -3
- package/dist/{chunk-U5BTYSAL.js → chunk-PJ4IPTIN.js} +2 -2
- package/dist/{chunk-BTWAGDV5.js → chunk-PY557GDR.js} +3 -3
- package/dist/{chunk-47ZPNLF4.js → chunk-PZYJBOQP.js} +8 -137
- package/dist/chunk-QHG4OMZL.js +145 -0
- package/dist/chunk-RG5TOL4O.js +18 -0
- package/dist/{chunk-6WAWMWR5.js → chunk-SWW6AUVW.js} +2 -2
- package/dist/{chunk-YUIHSKR6.js → chunk-T2TP6ZC6.js} +20 -8
- package/dist/chunk-TWAN7ZNO.js +164 -0
- package/dist/chunk-TXSA4Q3V.js +116 -0
- package/dist/{chunk-KTLFDYPT.js → chunk-UI7RPV2B.js} +1 -1
- package/dist/{chunk-SSI47XP2.js → chunk-VHWGEJ4V.js} +1 -1
- package/dist/{chunk-IS7WJ56Q.js → chunk-X2J7QUFH.js} +3 -3
- package/dist/{chunk-M3K5AARV.js → chunk-YDBAY3NA.js} +2 -2
- package/dist/{chunk-MLOQKQNB.js → chunk-YTWZORJN.js} +2 -2
- package/dist/{chunk-2IOP6PHB.js → chunk-ZTVKQOU7.js} +2 -2
- package/dist/{chunk-PLDWHR4D.js → chunk-ZX7EAV5J.js} +17 -7
- package/dist/cli.js +90 -29
- package/dist/clock-HSEKS5AR.js +289 -0
- package/dist/{cloud-sync-TG3TIX5H.js → cloud-sync-BOCZSDIA.js} +20 -22
- package/dist/config-UTS7QULS.js +76 -0
- package/dist/connectors/discord-bridge.js +3 -3
- package/dist/connectors/slack-bridge.js +3 -3
- package/dist/connectors/telegram-bridge.js +3 -3
- package/dist/{conversations-HL2JP5GI.js → conversations-HH3CJD4E.js} +15 -9
- package/dist/create-5BPOOJAN.js +75 -0
- package/dist/create-QBEPSD2Z.js +50 -0
- package/dist/daemon-client-RVIKXGFQ.js +12 -0
- package/dist/daemon-restart-SIR3UR4B.js +65 -0
- package/dist/daemon.js +1186 -1989
- package/dist/{db-PLEDCBHZ.js → db-BDMH4SZ2.js} +7 -3
- package/dist/{db-RYX3SS2W.js → db-URORGSXQ.js} +2 -2
- package/dist/delete-L5PAVDGQ.js +42 -0
- package/dist/delivery-manager-WTGIPBGY.js +30 -0
- package/dist/{delivery-router-D5ELDMS2.js → delivery-router-VSULHXNH.js} +4 -4
- package/dist/down-DGGLZ5TA.js +17 -0
- package/dist/env-E4XHO2BI.js +223 -0
- package/dist/{exec-DVLXKRIO.js → exec-X3C6ZZTQ.js} +4 -4
- package/dist/export-HTFOHOKL.js +113 -0
- package/dist/{extension-PM42QCID.js → extension-AKZ46YSL.js} +46 -35
- package/dist/extensions-OOSFVH7U.js +50 -0
- package/dist/files-H2YLRD37.js +53 -0
- package/dist/import-OL5BZX7S.js +143 -0
- package/dist/{isolation-62MKDZN3.js → isolation-N74RWOUX.js} +3 -3
- package/dist/join-DF5XSJAC.js +67 -0
- package/dist/list-GJ4RUQQT.js +59 -0
- package/dist/login-GOTAYLXP.js +51 -0
- package/dist/login-JXRVMBRB.js +60 -0
- package/dist/logout-6KIA74EV.js +29 -0
- package/dist/logout-FW243JBU.js +50 -0
- package/dist/message-delivery-YORUXKDQ.js +40 -0
- package/dist/mind-6VJJHF65.js +97 -0
- package/dist/{mind-activity-tracker-2ACNHA7B.js → mind-activity-tracker-66UVYIFW.js} +5 -5
- package/dist/mind-history-MII2SK7F.js +342 -0
- package/dist/mind-list-GEWHWAL4.js +38 -0
- package/dist/mind-manager-TJ2SUPRX.js +30 -0
- package/dist/mind-profile-DCBDVF5B.js +53 -0
- package/dist/mind-service-E7FM2WZF.js +36 -0
- package/dist/mind-sleep-ITCF6OQA.js +47 -0
- package/dist/mind-status-X4SX3YUG.js +65 -0
- package/dist/mind-wake-KXMKMGWX.js +42 -0
- package/dist/{package-V2WHWVG6.js → package-3W2MEXHB.js} +5 -5
- package/dist/read-ZUDG4JWU.js +91 -0
- package/dist/{read-stdin-PIRM6A2Y.js → read-stdin-3X5VYKNS.js} +1 -1
- package/dist/register-SB7NXCOE.js +51 -0
- package/dist/{registry-UYV5S6QT.js → registry-YPHK534W.js} +2 -2
- package/dist/reject-MUR2KWJ4.js +40 -0
- package/dist/restart-5EGG4JXU.js +42 -0
- package/dist/{sandbox-SI5HMBP3.js → sandbox-LP6YRAXS.js} +5 -5
- package/dist/scheduler-FRJ5DK24.js +30 -0
- package/dist/{schema-ETMABTW4.js → schema-MISD3JFG.js} +3 -1
- package/dist/{seed-WNGI6PNW.js → seed-CEC4RC23.js} +2 -2
- package/dist/seed-check-KJNTL72M.js +35 -0
- package/dist/seed-cmd-WTTG7SRQ.js +30 -0
- package/dist/seed-create-M6RCC6RP.js +113 -0
- package/dist/seed-sprout-ZKCHFJKH.js +148 -0
- package/dist/send-LXUT2GGR.js +409 -0
- package/dist/service-M6N3RUYU.js +121 -0
- package/dist/{setup-Z3DEVWV7.js → setup-PJOF5UV5.js} +153 -127
- package/dist/{setup-GGMKENLN.js → setup-PMJHCZQX.js} +5 -3
- package/dist/skill-TAAKEYBV.js +389 -0
- package/dist/skills/tending/SKILL.md +52 -0
- package/dist/skills/volute-mind/SKILL.md +3 -7
- package/dist/skills/volute-mind/references/extensions.md +8 -11
- package/dist/{skills-Q6VZ2UGD.js → skills-2PTRTBQP.js} +7 -7
- package/dist/sleep-manager-WAZWMFJT.js +34 -0
- package/dist/spirit-6KVDIROQ.js +24 -0
- package/dist/split-AWVOYOPZ.js +64 -0
- package/dist/{sprout-E3HJIV2Z.js → sprout-WX2FFYLP.js} +2 -2
- package/dist/src-FQE4BHRG.js +617 -0
- package/dist/src-GW6FP6VL.js +425 -0
- package/dist/src-QEOLMAYC.js +2133 -0
- package/dist/start-3UXOPXQG.js +39 -0
- package/dist/status-3IVSLJDN.js +125 -0
- package/dist/stop-3XYIBGFM.js +41 -0
- package/dist/system-chat-2IFS5HCX.js +34 -0
- package/dist/systems-O43WGQY6.js +52 -0
- package/dist/{tailscale-ZEUK7GKZ.js → tailscale-DZU4WM3E.js} +4 -4
- package/dist/{template-hash-EJRTKE36.js → template-hash-6ITI3WC4.js} +2 -2
- package/dist/up-4SCIUIMG.js +19 -0
- package/dist/update-RIQYUPVN.js +225 -0
- package/dist/{update-check-X3YG4WVP.js → update-check-4TIJKVGD.js} +3 -3
- package/dist/upgrade-ZMDGC7M2.js +74 -0
- package/dist/variant-QWL2WSRI.js +62 -0
- package/dist/{version-notify-YCH4UVQ2.js → version-notify-UXSHBZ35.js} +27 -27
- package/dist/{volute-config-WBKYJGYQ.js → volute-config-V7UFFBG3.js} +1 -1
- package/dist/web-assets/assets/index-C-eYso8Y.js +75 -0
- package/dist/web-assets/assets/index-CCv_fSte.css +1 -0
- package/dist/web-assets/index.html +2 -2
- package/dist/web-assets/sw.js +117 -0
- package/drizzle/0006_channels.sql +17 -0
- package/drizzle/0007_drop_conversation_name_title.sql +11 -0
- package/drizzle/0008_performance_indexes.sql +6 -0
- package/drizzle/meta/0006_snapshot.json +7 -0
- package/drizzle/meta/0007_snapshot.json +7 -0
- package/drizzle/meta/_journal.json +21 -0
- package/package.json +5 -5
- package/packages/extensions/pages/dist/ui/assets/index-DKZLNMED.js +2 -0
- package/packages/extensions/pages/dist/ui/index.html +1 -1
- package/packages/extensions/pages/skills/pages/SKILL.md +84 -9
- package/templates/_base/home/.config/routes.json +2 -2
- package/templates/_base/home/VOLUTE.md +1 -2
- package/templates/_base/src/lib/auto-commit.ts +8 -8
- package/templates/_base/src/lib/format-prefix.ts +1 -7
- package/templates/_base/src/lib/volute-server.ts +6 -0
- package/templates/claude/.init/.config/routes.json +2 -2
- package/templates/claude/src/agent.ts +8 -1
- package/templates/codex/.init/.config/routes.json +2 -2
- package/templates/pi/.init/.config/routes.json +2 -2
- package/dist/accept-TW6V4WI4.js +0 -42
- package/dist/bridge-O753D5F4.js +0 -207
- package/dist/chat-BHYX7DJ4.js +0 -68
- package/dist/chunk-47XDEWWV.js +0 -156
- package/dist/chunk-CVL5IGIR.js +0 -2084
- package/dist/chunk-PB65JZK2.js +0 -85
- package/dist/clock-3X4DSC2N.js +0 -281
- package/dist/config-OROA5DUA.js +0 -72
- package/dist/create-3SEKKI6P.js +0 -71
- package/dist/create-UOSOQ2HN.js +0 -44
- package/dist/daemon-client-WOAQXXBM.js +0 -12
- package/dist/daemon-restart-5ABHNXJZ.js +0 -52
- package/dist/delete-KYOVWR23.js +0 -35
- package/dist/delivery-manager-2BR5NZKF.js +0 -32
- package/dist/down-QVFN4UPK.js +0 -15
- package/dist/env-R34DT7XL.js +0 -195
- package/dist/export-6ZXAXATG.js +0 -112
- package/dist/extensions-BBGVL5JC.js +0 -38
- package/dist/files-VQV2VZQO.js +0 -47
- package/dist/import-MK2I2T6F.js +0 -23
- package/dist/join-DGYHTJUH.js +0 -66
- package/dist/list-C644WTHV.js +0 -49
- package/dist/login-IIGEQPHL.js +0 -47
- package/dist/login-KZQLMAWE.js +0 -47
- package/dist/logout-AGTZVRGP.js +0 -40
- package/dist/logout-KD6GXIJJ.js +0 -21
- package/dist/message-delivery-V3R6NXJP.js +0 -42
- package/dist/mind-BI4EPBVZ.js +0 -108
- package/dist/mind-history-WOYFLQAI.js +0 -264
- package/dist/mind-list-6VPM7GUQ.js +0 -30
- package/dist/mind-manager-MWW3BTS4.js +0 -32
- package/dist/mind-profile-WPG42U5Y.js +0 -47
- package/dist/mind-service-VIKZJK2M.js +0 -38
- package/dist/mind-sleep-XDISJY74.js +0 -42
- package/dist/mind-status-7FTZWPZF.js +0 -56
- package/dist/mind-wake-KIIKEI3A.js +0 -37
- package/dist/read-H5C26YO7.js +0 -85
- package/dist/register-J27WP33N.js +0 -47
- package/dist/reject-OEANJYIA.js +0 -40
- package/dist/restart-V5EGYBJG.js +0 -33
- package/dist/scheduler-AGG3L2FO.js +0 -32
- package/dist/seed-check-PXTH7YXS.js +0 -32
- package/dist/seed-cmd-VENFTGS3.js +0 -36
- package/dist/seed-create-663ALOKH.js +0 -112
- package/dist/seed-sprout-EH3AGKAI.js +0 -132
- package/dist/send-7FUUUZZH.js +0 -386
- package/dist/skill-DKNYJS4P.js +0 -362
- package/dist/skills/shared-files/SKILL.md +0 -44
- package/dist/skills/shared-files/scripts/merge.ts +0 -72
- package/dist/skills/shared-files/scripts/pull.ts +0 -52
- package/dist/sleep-manager-BJK2ROPX.js +0 -36
- package/dist/spirit-4JP4TY4C.js +0 -23
- package/dist/split-3YPMS2CL.js +0 -63
- package/dist/start-W3TPKX4D.js +0 -33
- package/dist/status-4OVFXFEJ.js +0 -115
- package/dist/stop-GTT6YWYO.js +0 -32
- package/dist/system-channel-DXD2JBOU.js +0 -36
- package/dist/system-chat-TYLOL7SX.js +0 -36
- package/dist/systems-AYLO727G.js +0 -61
- package/dist/up-PA7F2CXE.js +0 -18
- package/dist/update-HG4LCUSG.js +0 -215
- package/dist/upgrade-YGNIDICG.js +0 -67
- package/dist/variant-MZUMRTQO.js +0 -41
- package/dist/web-assets/assets/index-DiiwC-CZ.css +0 -1
- package/dist/web-assets/assets/index-d6y5b9Ij.js +0 -75
- package/packages/extensions/pages/dist/ui/assets/index-tLTROSk5.js +0 -2
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
compactTime,
|
|
4
|
+
isCompact
|
|
5
|
+
} from "./chunk-5T5YMX6S.js";
|
|
6
|
+
import {
|
|
7
|
+
resolveMindName
|
|
8
|
+
} from "./chunk-BTY4WNFE.js";
|
|
9
|
+
import {
|
|
10
|
+
command
|
|
11
|
+
} from "./chunk-TXSA4Q3V.js";
|
|
12
|
+
import "./chunk-O7IGP7ZW.js";
|
|
13
|
+
import {
|
|
14
|
+
daemonFetch
|
|
15
|
+
} from "./chunk-ZX7EAV5J.js";
|
|
16
|
+
import "./chunk-7KJOFUNN.js";
|
|
17
|
+
|
|
18
|
+
// packages/cli/src/commands/chat/read.ts
|
|
19
|
+
async function resolveConversationId(mindName, input) {
|
|
20
|
+
if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(input)) {
|
|
21
|
+
return input;
|
|
22
|
+
}
|
|
23
|
+
const res = await daemonFetch(`/api/minds/${encodeURIComponent(mindName)}/conversations`);
|
|
24
|
+
if (!res.ok) {
|
|
25
|
+
return input;
|
|
26
|
+
}
|
|
27
|
+
const convs = await res.json();
|
|
28
|
+
const cleaned = input.replace(/^[@#]/, "");
|
|
29
|
+
const lower = cleaned.toLowerCase();
|
|
30
|
+
const channelMatch = convs.find(
|
|
31
|
+
(c) => c.type === "channel" && c.channel_name?.toLowerCase() === lower
|
|
32
|
+
);
|
|
33
|
+
if (channelMatch) return channelMatch.id;
|
|
34
|
+
const dmMatch = convs.find(
|
|
35
|
+
(c) => c.type === "dm" && c.participants?.some((p) => p.username.toLowerCase() === lower && p.username !== mindName)
|
|
36
|
+
);
|
|
37
|
+
if (dmMatch) return dmMatch.id;
|
|
38
|
+
const prefixMatch = convs.find((c) => c.id.startsWith(input));
|
|
39
|
+
if (prefixMatch) return prefixMatch.id;
|
|
40
|
+
return input;
|
|
41
|
+
}
|
|
42
|
+
var cmd = command({
|
|
43
|
+
name: "volute chat read",
|
|
44
|
+
description: "Read conversation messages",
|
|
45
|
+
args: [
|
|
46
|
+
{
|
|
47
|
+
name: "conversation",
|
|
48
|
+
required: true,
|
|
49
|
+
description: "Conversation ID, channel name, or DM participant"
|
|
50
|
+
}
|
|
51
|
+
],
|
|
52
|
+
flags: {
|
|
53
|
+
mind: { type: "string", description: "Mind name" },
|
|
54
|
+
limit: { type: "number", description: "Number of messages to show (default 50)" }
|
|
55
|
+
},
|
|
56
|
+
async run({ args, flags }) {
|
|
57
|
+
const mindName = resolveMindName(flags);
|
|
58
|
+
const conversationId = await resolveConversationId(mindName, args.conversation);
|
|
59
|
+
const limit = String(flags.limit ?? 50);
|
|
60
|
+
const res = await daemonFetch(
|
|
61
|
+
`/api/minds/${encodeURIComponent(mindName)}/conversations/${encodeURIComponent(conversationId)}/messages?limit=${limit}`
|
|
62
|
+
);
|
|
63
|
+
if (!res.ok) {
|
|
64
|
+
console.error(`Failed to read conversation: ${res.status}`);
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
const data = await res.json();
|
|
68
|
+
if (!Array.isArray(data.items)) {
|
|
69
|
+
console.error("Unexpected response format from server");
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
const compact = isCompact();
|
|
73
|
+
for (const msg of data.items) {
|
|
74
|
+
const sender = msg.sender_name ?? msg.role;
|
|
75
|
+
const text = Array.isArray(msg.content) ? msg.content.filter((b) => b.type === "text").map((b) => b.text).join("") : msg.content;
|
|
76
|
+
if (compact) {
|
|
77
|
+
const time = compactTime(msg.created_at);
|
|
78
|
+
console.log(`[${time}] ${sender}: ${text}`);
|
|
79
|
+
} else {
|
|
80
|
+
const time = new Date(
|
|
81
|
+
msg.created_at.endsWith("Z") ? msg.created_at : `${msg.created_at}Z`
|
|
82
|
+
).toLocaleString();
|
|
83
|
+
console.log(`[${time}] ${sender}: ${text}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
var run = cmd.execute;
|
|
89
|
+
export {
|
|
90
|
+
run
|
|
91
|
+
};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
promptLine
|
|
4
|
+
} from "./chunk-VHWGEJ4V.js";
|
|
5
|
+
import {
|
|
6
|
+
command
|
|
7
|
+
} from "./chunk-TXSA4Q3V.js";
|
|
8
|
+
import "./chunk-O7IGP7ZW.js";
|
|
9
|
+
import {
|
|
10
|
+
daemonFetch
|
|
11
|
+
} from "./chunk-ZX7EAV5J.js";
|
|
12
|
+
import "./chunk-7KJOFUNN.js";
|
|
13
|
+
|
|
14
|
+
// packages/cli/src/commands/systems/register.ts
|
|
15
|
+
var cmd = command({
|
|
16
|
+
name: "volute systems register",
|
|
17
|
+
description: "Register a system on volute.systems",
|
|
18
|
+
flags: {
|
|
19
|
+
name: { type: "string", description: "System name" }
|
|
20
|
+
},
|
|
21
|
+
run: async ({ flags }) => {
|
|
22
|
+
let name = flags.name;
|
|
23
|
+
if (!name) {
|
|
24
|
+
if (!process.stdin.isTTY) {
|
|
25
|
+
console.error("Usage: volute systems register --name <system-name>");
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
name = await promptLine("Choose a system name: ");
|
|
29
|
+
if (!name) {
|
|
30
|
+
console.error("No name provided.");
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const res = await daemonFetch("/api/system/register", {
|
|
35
|
+
method: "POST",
|
|
36
|
+
headers: { "Content-Type": "application/json" },
|
|
37
|
+
body: JSON.stringify({ name })
|
|
38
|
+
});
|
|
39
|
+
if (!res.ok) {
|
|
40
|
+
const body = await res.json().catch(() => ({ error: `HTTP ${res.status}` }));
|
|
41
|
+
console.error(`Registration failed: ${body.error}`);
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
const { system } = await res.json();
|
|
45
|
+
console.log(`Registered as "${system}". Credentials saved.`);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
var run = cmd.execute;
|
|
49
|
+
export {
|
|
50
|
+
run
|
|
51
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
resolveMindName
|
|
4
|
+
} from "./chunk-BTY4WNFE.js";
|
|
5
|
+
import {
|
|
6
|
+
command
|
|
7
|
+
} from "./chunk-TXSA4Q3V.js";
|
|
8
|
+
import "./chunk-O7IGP7ZW.js";
|
|
9
|
+
import {
|
|
10
|
+
daemonFetch
|
|
11
|
+
} from "./chunk-ZX7EAV5J.js";
|
|
12
|
+
import "./chunk-7KJOFUNN.js";
|
|
13
|
+
|
|
14
|
+
// packages/cli/src/commands/chat/reject.ts
|
|
15
|
+
var cmd = command({
|
|
16
|
+
name: "volute chat reject",
|
|
17
|
+
description: "Reject a pending file transfer",
|
|
18
|
+
args: [{ name: "id", required: true, description: "File transfer ID" }],
|
|
19
|
+
flags: {
|
|
20
|
+
mind: { type: "string", description: "Mind name" }
|
|
21
|
+
},
|
|
22
|
+
async run({ args, flags }) {
|
|
23
|
+
const mind = resolveMindName(flags);
|
|
24
|
+
const res = await daemonFetch(`/api/minds/${encodeURIComponent(mind)}/files/reject`, {
|
|
25
|
+
method: "POST",
|
|
26
|
+
headers: { "Content-Type": "application/json" },
|
|
27
|
+
body: JSON.stringify({ id: args.id })
|
|
28
|
+
});
|
|
29
|
+
if (!res.ok) {
|
|
30
|
+
const data = await res.json();
|
|
31
|
+
console.error(data.error ?? `Failed to reject file: ${res.status}`);
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
console.log(`File rejected: ${args.id}`);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
var run = cmd.execute;
|
|
38
|
+
export {
|
|
39
|
+
run
|
|
40
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
resolveMindName
|
|
4
|
+
} from "./chunk-BTY4WNFE.js";
|
|
5
|
+
import {
|
|
6
|
+
command
|
|
7
|
+
} from "./chunk-TXSA4Q3V.js";
|
|
8
|
+
import "./chunk-O7IGP7ZW.js";
|
|
9
|
+
import {
|
|
10
|
+
daemonFetch
|
|
11
|
+
} from "./chunk-ZX7EAV5J.js";
|
|
12
|
+
import {
|
|
13
|
+
getClient,
|
|
14
|
+
urlOf
|
|
15
|
+
} from "./chunk-LOPXTW6H.js";
|
|
16
|
+
import "./chunk-7KJOFUNN.js";
|
|
17
|
+
|
|
18
|
+
// packages/cli/src/commands/restart.ts
|
|
19
|
+
var cmd = command({
|
|
20
|
+
name: "volute mind restart",
|
|
21
|
+
description: "Restart a mind",
|
|
22
|
+
args: [{ name: "name", description: "Mind to restart (or use VOLUTE_MIND)" }],
|
|
23
|
+
flags: {},
|
|
24
|
+
async run({ args }) {
|
|
25
|
+
const name = resolveMindName({ mind: args.name });
|
|
26
|
+
const client = getClient();
|
|
27
|
+
const res = await daemonFetch(
|
|
28
|
+
urlOf(client.api.minds[":name"].restart.$url({ param: { name } })),
|
|
29
|
+
{ method: "POST" }
|
|
30
|
+
);
|
|
31
|
+
const data = await res.json();
|
|
32
|
+
if (!res.ok) {
|
|
33
|
+
console.error(data.error || "Failed to restart mind");
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
console.log(`${name} restarted on port ${data.port}`);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
var run = cmd.execute;
|
|
40
|
+
export {
|
|
41
|
+
run
|
|
42
|
+
};
|
|
@@ -5,11 +5,11 @@ import {
|
|
|
5
5
|
isSandboxEnabled,
|
|
6
6
|
shellEscape,
|
|
7
7
|
wrapForSandbox
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-BOLJUV77.js";
|
|
9
|
+
import "./chunk-T2TP6ZC6.js";
|
|
10
|
+
import "./chunk-NUX47Y2V.js";
|
|
11
|
+
import "./chunk-75AJ54GM.js";
|
|
12
|
+
import "./chunk-7PTQGPJY.js";
|
|
13
13
|
import "./chunk-7KJOFUNN.js";
|
|
14
14
|
export {
|
|
15
15
|
buildDenyRead,
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
Scheduler,
|
|
4
|
+
getScheduler,
|
|
5
|
+
initScheduler
|
|
6
|
+
} from "./chunk-DQ7VBXAP.js";
|
|
7
|
+
import "./chunk-6F3YNULE.js";
|
|
8
|
+
import "./chunk-46DYYHN6.js";
|
|
9
|
+
import "./chunk-GBDVNPN2.js";
|
|
10
|
+
import "./chunk-PY557GDR.js";
|
|
11
|
+
import "./chunk-DMV5P2LU.js";
|
|
12
|
+
import "./chunk-IIWF2IPD.js";
|
|
13
|
+
import "./chunk-B35VNNSS.js";
|
|
14
|
+
import "./chunk-CU6OFXMM.js";
|
|
15
|
+
import "./chunk-BOLJUV77.js";
|
|
16
|
+
import "./chunk-X2J7QUFH.js";
|
|
17
|
+
import "./chunk-YDBAY3NA.js";
|
|
18
|
+
import "./chunk-M5RYAA5I.js";
|
|
19
|
+
import "./chunk-T2TP6ZC6.js";
|
|
20
|
+
import "./chunk-PJ4IPTIN.js";
|
|
21
|
+
import "./chunk-L72WYMF7.js";
|
|
22
|
+
import "./chunk-NUX47Y2V.js";
|
|
23
|
+
import "./chunk-75AJ54GM.js";
|
|
24
|
+
import "./chunk-7PTQGPJY.js";
|
|
25
|
+
import "./chunk-7KJOFUNN.js";
|
|
26
|
+
export {
|
|
27
|
+
Scheduler,
|
|
28
|
+
getScheduler,
|
|
29
|
+
initScheduler
|
|
30
|
+
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
activity,
|
|
4
|
+
channels,
|
|
4
5
|
conversationParticipants,
|
|
5
6
|
conversationReads,
|
|
6
7
|
conversations,
|
|
@@ -14,10 +15,11 @@ import {
|
|
|
14
15
|
systemPrompts,
|
|
15
16
|
turns,
|
|
16
17
|
users
|
|
17
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-7PTQGPJY.js";
|
|
18
19
|
import "./chunk-7KJOFUNN.js";
|
|
19
20
|
export {
|
|
20
21
|
activity,
|
|
22
|
+
channels,
|
|
21
23
|
conversationParticipants,
|
|
22
24
|
conversationReads,
|
|
23
25
|
conversations,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import "./chunk-7KJOFUNN.js";
|
|
3
3
|
|
|
4
|
-
// src/commands/seed.ts
|
|
4
|
+
// packages/cli/src/commands/seed.ts
|
|
5
5
|
async function run(args) {
|
|
6
6
|
console.error("Note: `volute mind seed` is now `volute seed create`");
|
|
7
|
-
await import("./seed-create-
|
|
7
|
+
await import("./seed-create-M6RCC6RP.js").then((m) => m.run(args));
|
|
8
8
|
}
|
|
9
9
|
export {
|
|
10
10
|
run
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
command
|
|
4
|
+
} from "./chunk-TXSA4Q3V.js";
|
|
5
|
+
import "./chunk-O7IGP7ZW.js";
|
|
6
|
+
import "./chunk-7KJOFUNN.js";
|
|
7
|
+
|
|
8
|
+
// packages/cli/src/commands/seed-check.ts
|
|
9
|
+
var cmd = command({
|
|
10
|
+
name: "volute seed check",
|
|
11
|
+
description: "Check seed readiness",
|
|
12
|
+
args: [{ name: "name", required: true, description: "Seed mind to check" }],
|
|
13
|
+
flags: {},
|
|
14
|
+
run: async ({ args }) => {
|
|
15
|
+
const name = args.name;
|
|
16
|
+
const { daemonFetch } = await import("./daemon-client-RVIKXGFQ.js");
|
|
17
|
+
const res = await daemonFetch(`/api/minds/${encodeURIComponent(name)}/seed-check`);
|
|
18
|
+
if (!res.ok) {
|
|
19
|
+
if (res.status === 404) {
|
|
20
|
+
console.log(`Seed "${name}" not found \u2014 it may have been deleted or already sprouted.`);
|
|
21
|
+
} else {
|
|
22
|
+
console.error(`seed check failed for ${name}: HTTP ${res.status}`);
|
|
23
|
+
}
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const data = await res.json();
|
|
27
|
+
if (data.output) {
|
|
28
|
+
console.log(data.output);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
var run = cmd.execute;
|
|
33
|
+
export {
|
|
34
|
+
run
|
|
35
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
subcommands
|
|
4
|
+
} from "./chunk-TXSA4Q3V.js";
|
|
5
|
+
import "./chunk-O7IGP7ZW.js";
|
|
6
|
+
import "./chunk-7KJOFUNN.js";
|
|
7
|
+
|
|
8
|
+
// packages/cli/src/commands/seed-cmd.ts
|
|
9
|
+
var cmd = subcommands({
|
|
10
|
+
name: "volute seed",
|
|
11
|
+
description: "Plant and grow new minds",
|
|
12
|
+
commands: {
|
|
13
|
+
create: {
|
|
14
|
+
description: "Plant a new seed",
|
|
15
|
+
run: (args) => import("./seed-create-M6RCC6RP.js").then((m) => m.run(args))
|
|
16
|
+
},
|
|
17
|
+
sprout: {
|
|
18
|
+
description: "Complete orientation and become a full mind",
|
|
19
|
+
run: (args) => import("./seed-sprout-ZKCHFJKH.js").then((m) => m.run(args))
|
|
20
|
+
},
|
|
21
|
+
check: {
|
|
22
|
+
description: "Check seed readiness",
|
|
23
|
+
run: (args) => import("./seed-check-KJNTL72M.js").then((m) => m.run(args))
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
var run = cmd.execute;
|
|
28
|
+
export {
|
|
29
|
+
run
|
|
30
|
+
};
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
promptLine
|
|
4
|
+
} from "./chunk-VHWGEJ4V.js";
|
|
5
|
+
import {
|
|
6
|
+
command
|
|
7
|
+
} from "./chunk-TXSA4Q3V.js";
|
|
8
|
+
import "./chunk-O7IGP7ZW.js";
|
|
9
|
+
import "./chunk-7KJOFUNN.js";
|
|
10
|
+
|
|
11
|
+
// packages/cli/src/commands/seed-create.ts
|
|
12
|
+
async function chooseModel(daemonFetch) {
|
|
13
|
+
const res = await daemonFetch("/api/system/ai/models");
|
|
14
|
+
if (!res.ok) {
|
|
15
|
+
console.error(`Failed to fetch AI models (HTTP ${res.status}). Is the daemon running?`);
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
const models = await res.json();
|
|
19
|
+
const enabled = models.filter((m) => m.enabled);
|
|
20
|
+
if (enabled.length === 0) return void 0;
|
|
21
|
+
console.log("\nAvailable models:");
|
|
22
|
+
for (let i = 0; i < enabled.length; i++) {
|
|
23
|
+
console.log(` ${i + 1}) ${enabled[i].name} (${enabled[i].provider})`);
|
|
24
|
+
}
|
|
25
|
+
const answer = await promptLine(`
|
|
26
|
+
Choose a model [1-${enabled.length}]: `);
|
|
27
|
+
const idx = parseInt(answer, 10) - 1;
|
|
28
|
+
if (Number.isNaN(idx) || idx < 0 || idx >= enabled.length) {
|
|
29
|
+
console.error("Invalid selection");
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
const chosen = enabled[idx];
|
|
33
|
+
return `${chosen.provider}:${chosen.id}`;
|
|
34
|
+
}
|
|
35
|
+
var cmd = command({
|
|
36
|
+
name: "volute seed create",
|
|
37
|
+
description: "Plant a new seed mind",
|
|
38
|
+
args: [{ name: "name", required: true, description: "Name for the seed mind" }],
|
|
39
|
+
flags: {
|
|
40
|
+
template: { type: "string", description: "Template to use" },
|
|
41
|
+
model: { type: "string", description: "AI model to use" },
|
|
42
|
+
description: { type: "string", description: "Description of the seed" },
|
|
43
|
+
skills: { type: "string", description: "Skills to install (comma-separated, or 'none')" },
|
|
44
|
+
"created-by": { type: "string", description: "Username of creator" }
|
|
45
|
+
},
|
|
46
|
+
run: async ({ args, flags }) => {
|
|
47
|
+
const name = args.name;
|
|
48
|
+
const skills = flags.skills === "none" ? [] : flags.skills ? flags.skills.split(",") : void 0;
|
|
49
|
+
const createdBy = flags["created-by"];
|
|
50
|
+
const { daemonFetch } = await import("./daemon-client-RVIKXGFQ.js");
|
|
51
|
+
const { getClient, urlOf } = await import("./api-client-3A77HMH7.js");
|
|
52
|
+
const client = getClient();
|
|
53
|
+
let model = flags.model;
|
|
54
|
+
let template = flags.template;
|
|
55
|
+
if (!template) {
|
|
56
|
+
const { resolveTemplate } = await import("./ai-service-GSZWIETO.js");
|
|
57
|
+
template = resolveTemplate(model);
|
|
58
|
+
}
|
|
59
|
+
if (template !== "claude" && !model) {
|
|
60
|
+
if (process.env.VOLUTE_MIND || !process.stdin.isTTY) {
|
|
61
|
+
const { getSpiritModel } = await import("./spirit-6KVDIROQ.js");
|
|
62
|
+
const { qualifyModelId } = await import("./ai-service-GSZWIETO.js");
|
|
63
|
+
const spiritModel = getSpiritModel();
|
|
64
|
+
if (spiritModel) {
|
|
65
|
+
model = template === "pi" ? qualifyModelId(spiritModel) : spiritModel;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (!model) {
|
|
69
|
+
model = await chooseModel(daemonFetch);
|
|
70
|
+
if (!model) {
|
|
71
|
+
console.error("No AI models configured. Set up providers in the web dashboard first.");
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const createRes = await daemonFetch(urlOf(client.api.minds.$url()), {
|
|
77
|
+
method: "POST",
|
|
78
|
+
headers: { "Content-Type": "application/json" },
|
|
79
|
+
body: JSON.stringify({
|
|
80
|
+
name,
|
|
81
|
+
template,
|
|
82
|
+
stage: "seed",
|
|
83
|
+
description: flags.description,
|
|
84
|
+
model,
|
|
85
|
+
skills,
|
|
86
|
+
createdBy
|
|
87
|
+
})
|
|
88
|
+
});
|
|
89
|
+
const createData = await createRes.json();
|
|
90
|
+
if (!createRes.ok) {
|
|
91
|
+
console.error(createData.error ?? "Failed to create mind");
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
const startRes = await daemonFetch(
|
|
95
|
+
urlOf(client.api.minds[":name"].start.$url({ param: { name } })),
|
|
96
|
+
{ method: "POST" }
|
|
97
|
+
);
|
|
98
|
+
if (!startRes.ok) {
|
|
99
|
+
const startData = await startRes.json();
|
|
100
|
+
console.error(startData.error ?? "Failed to start mind");
|
|
101
|
+
process.exit(1);
|
|
102
|
+
}
|
|
103
|
+
console.log(`
|
|
104
|
+
Seeded mind: ${name} (port ${createData.port})`);
|
|
105
|
+
console.log(`
|
|
106
|
+
Talk to your new mind:`);
|
|
107
|
+
console.log(` volute chat send @${name} "hello"`);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
var run = cmd.execute;
|
|
111
|
+
export {
|
|
112
|
+
run
|
|
113
|
+
};
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
command
|
|
4
|
+
} from "./chunk-TXSA4Q3V.js";
|
|
5
|
+
import "./chunk-O7IGP7ZW.js";
|
|
6
|
+
import {
|
|
7
|
+
daemonFetch
|
|
8
|
+
} from "./chunk-ZX7EAV5J.js";
|
|
9
|
+
import {
|
|
10
|
+
getStandardSkillsWithExtensions
|
|
11
|
+
} from "./chunk-GBDVNPN2.js";
|
|
12
|
+
import "./chunk-T2TP6ZC6.js";
|
|
13
|
+
import "./chunk-PJ4IPTIN.js";
|
|
14
|
+
import "./chunk-L72WYMF7.js";
|
|
15
|
+
import "./chunk-NUX47Y2V.js";
|
|
16
|
+
import {
|
|
17
|
+
mindDir
|
|
18
|
+
} from "./chunk-75AJ54GM.js";
|
|
19
|
+
import "./chunk-7PTQGPJY.js";
|
|
20
|
+
import "./chunk-7KJOFUNN.js";
|
|
21
|
+
|
|
22
|
+
// packages/cli/src/commands/seed-sprout.ts
|
|
23
|
+
import { existsSync, readFileSync } from "fs";
|
|
24
|
+
import { resolve } from "path";
|
|
25
|
+
var ORIENTATION_MARKER = "You don't have a soul yet";
|
|
26
|
+
var cmd = command({
|
|
27
|
+
name: "volute seed sprout",
|
|
28
|
+
description: "Complete orientation and become a full mind (run by the seed itself)",
|
|
29
|
+
flags: {},
|
|
30
|
+
run: async () => {
|
|
31
|
+
const mindName = process.env.VOLUTE_MIND;
|
|
32
|
+
if (!mindName) {
|
|
33
|
+
console.error("volute seed sprout must be run by a mind (VOLUTE_MIND not set)");
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
const mindRes = await daemonFetch(`/api/minds/${encodeURIComponent(mindName)}`);
|
|
37
|
+
if (!mindRes.ok) {
|
|
38
|
+
console.error(`Mind "${mindName}" not found`);
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
const mind = await mindRes.json();
|
|
42
|
+
if (mind.stage !== "seed") {
|
|
43
|
+
console.error(`${mindName} is not a seed \u2014 already at stage "${mind.stage}"`);
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
const dir = mindDir(mindName);
|
|
47
|
+
const soulPath = resolve(dir, "home/SOUL.md");
|
|
48
|
+
const memoryPath = resolve(dir, "home/MEMORY.md");
|
|
49
|
+
if (!existsSync(soulPath)) {
|
|
50
|
+
console.error("Write your SOUL.md before sprouting.");
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
const soul = readFileSync(soulPath, "utf-8");
|
|
54
|
+
if (soul.includes(ORIENTATION_MARKER)) {
|
|
55
|
+
console.error(
|
|
56
|
+
"Your SOUL.md still contains the orientation template. Write your own identity first."
|
|
57
|
+
);
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
if (!existsSync(memoryPath)) {
|
|
61
|
+
console.error("Write your MEMORY.md before sprouting.");
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
const { isImagegenEnabled } = await import("./setup-PMJHCZQX.js");
|
|
65
|
+
if (isImagegenEnabled()) {
|
|
66
|
+
const { readVoluteConfig } = await import("./volute-config-V7UFFBG3.js");
|
|
67
|
+
const config = readVoluteConfig(dir);
|
|
68
|
+
const avatarPath = config?.profile?.avatar;
|
|
69
|
+
if (!avatarPath || !existsSync(resolve(dir, "home", avatarPath))) {
|
|
70
|
+
console.error(
|
|
71
|
+
"Generate an avatar before sprouting. Use `imagegen generate` to create one, then `volute mind profile --avatar <path>` to set it."
|
|
72
|
+
);
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const { getClient, urlOf } = await import("./api-client-3A77HMH7.js");
|
|
77
|
+
const { mindSkillsDir } = await import("./skills-2PTRTBQP.js");
|
|
78
|
+
const client = getClient();
|
|
79
|
+
const failedSkills = [];
|
|
80
|
+
for (const skillId of getStandardSkillsWithExtensions()) {
|
|
81
|
+
const skillDir = resolve(mindSkillsDir(dir), skillId);
|
|
82
|
+
if (!existsSync(skillDir)) {
|
|
83
|
+
const installRes = await daemonFetch(
|
|
84
|
+
urlOf(client.api.minds[":name"].skills.install.$url({ param: { name: mindName } })),
|
|
85
|
+
{
|
|
86
|
+
method: "POST",
|
|
87
|
+
headers: { "Content-Type": "application/json" },
|
|
88
|
+
body: JSON.stringify({ skillId })
|
|
89
|
+
}
|
|
90
|
+
);
|
|
91
|
+
if (!installRes.ok) {
|
|
92
|
+
const data = await installRes.json().catch(() => ({ error: `HTTP ${installRes.status}` }));
|
|
93
|
+
console.error(
|
|
94
|
+
`Failed to install skill ${skillId}: ${data.error}`
|
|
95
|
+
);
|
|
96
|
+
failedSkills.push(skillId);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const orientationDir = resolve(mindSkillsDir(dir), "orientation");
|
|
101
|
+
if (existsSync(orientationDir)) {
|
|
102
|
+
const delRes = await daemonFetch(
|
|
103
|
+
urlOf(
|
|
104
|
+
client.api.minds[":name"].skills[":skill"].$url({
|
|
105
|
+
param: { name: mindName, skill: "orientation" }
|
|
106
|
+
})
|
|
107
|
+
),
|
|
108
|
+
{ method: "DELETE" }
|
|
109
|
+
);
|
|
110
|
+
if (!delRes.ok) {
|
|
111
|
+
const data = await delRes.json().catch(() => ({ error: `HTTP ${delRes.status}` }));
|
|
112
|
+
console.error(
|
|
113
|
+
`Failed to uninstall orientation skill: ${data.error}`
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (failedSkills.length > 0) {
|
|
118
|
+
console.error(`Warning: failed to install skills: ${failedSkills.join(", ")}`);
|
|
119
|
+
}
|
|
120
|
+
const sproutRes = await daemonFetch(
|
|
121
|
+
urlOf(client.api.minds[":name"].sprout.$url({ param: { name: mindName } })),
|
|
122
|
+
{ method: "POST" }
|
|
123
|
+
);
|
|
124
|
+
if (!sproutRes.ok) {
|
|
125
|
+
const data = await sproutRes.json().catch(() => ({ error: `HTTP ${sproutRes.status}` }));
|
|
126
|
+
console.error(data.error ?? "Failed to update stage");
|
|
127
|
+
process.exit(1);
|
|
128
|
+
}
|
|
129
|
+
const res = await daemonFetch(
|
|
130
|
+
urlOf(client.api.minds[":name"].restart.$url({ param: { name: mindName } })),
|
|
131
|
+
{
|
|
132
|
+
method: "POST",
|
|
133
|
+
headers: { "Content-Type": "application/json" },
|
|
134
|
+
body: JSON.stringify({ context: { type: "sprouted" } })
|
|
135
|
+
}
|
|
136
|
+
);
|
|
137
|
+
if (!res.ok) {
|
|
138
|
+
const data = await res.json().catch(() => ({ error: `HTTP ${res.status}` }));
|
|
139
|
+
console.error(data.error ?? "Failed to restart after sprouting");
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
console.log("Sprouted! You now have full mind capabilities.");
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
var run = cmd.execute;
|
|
146
|
+
export {
|
|
147
|
+
run
|
|
148
|
+
};
|