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
|
@@ -1,37 +0,0 @@
|
|
|
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-PLDWHR4D.js";
|
|
11
|
-
import "./chunk-N7BLAHNE.js";
|
|
12
|
-
import "./chunk-4JSR7YO7.js";
|
|
13
|
-
import "./chunk-7KJOFUNN.js";
|
|
14
|
-
|
|
15
|
-
// src/commands/mind-wake.ts
|
|
16
|
-
async function run(args) {
|
|
17
|
-
const { positional, flags } = parseArgs(args, {
|
|
18
|
-
mind: { type: "string" }
|
|
19
|
-
});
|
|
20
|
-
const name = positional[0] || resolveMindName(flags);
|
|
21
|
-
if (!name) {
|
|
22
|
-
console.error("Usage: volute mind wake <name>");
|
|
23
|
-
process.exit(1);
|
|
24
|
-
}
|
|
25
|
-
const res = await daemonFetch(`/api/minds/${encodeURIComponent(name)}/wake`, {
|
|
26
|
-
method: "POST"
|
|
27
|
-
});
|
|
28
|
-
const data = await res.json();
|
|
29
|
-
if (!res.ok) {
|
|
30
|
-
console.error(data.error || "Failed to wake mind");
|
|
31
|
-
process.exit(1);
|
|
32
|
-
}
|
|
33
|
-
console.log(`${name} is waking up`);
|
|
34
|
-
}
|
|
35
|
-
export {
|
|
36
|
-
run
|
|
37
|
-
};
|
package/dist/read-H5C26YO7.js
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
compactTime,
|
|
4
|
-
isCompact
|
|
5
|
-
} from "./chunk-FYCALD4Q.js";
|
|
6
|
-
import {
|
|
7
|
-
resolveMindName
|
|
8
|
-
} from "./chunk-NAOW2CLO.js";
|
|
9
|
-
import {
|
|
10
|
-
parseArgs
|
|
11
|
-
} from "./chunk-D424ZQGI.js";
|
|
12
|
-
import {
|
|
13
|
-
daemonFetch
|
|
14
|
-
} from "./chunk-PLDWHR4D.js";
|
|
15
|
-
import "./chunk-N7BLAHNE.js";
|
|
16
|
-
import "./chunk-4JSR7YO7.js";
|
|
17
|
-
import "./chunk-7KJOFUNN.js";
|
|
18
|
-
|
|
19
|
-
// src/commands/chat/read.ts
|
|
20
|
-
async function resolveConversationId(mindName, input) {
|
|
21
|
-
if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(input)) {
|
|
22
|
-
return input;
|
|
23
|
-
}
|
|
24
|
-
const res = await daemonFetch(`/api/minds/${encodeURIComponent(mindName)}/conversations`);
|
|
25
|
-
if (!res.ok) {
|
|
26
|
-
return input;
|
|
27
|
-
}
|
|
28
|
-
const convs = await res.json();
|
|
29
|
-
const cleaned = input.replace(/^[@#]/, "");
|
|
30
|
-
const lower = cleaned.toLowerCase();
|
|
31
|
-
const channelMatch = convs.find((c) => c.type === "channel" && c.name?.toLowerCase() === lower);
|
|
32
|
-
if (channelMatch) return channelMatch.id;
|
|
33
|
-
const titleMatch = convs.find((c) => c.title?.toLowerCase() === lower);
|
|
34
|
-
if (titleMatch) return titleMatch.id;
|
|
35
|
-
const dmMatch = convs.find(
|
|
36
|
-
(c) => c.type === "dm" && c.title?.toLowerCase().split(/,\s*/).some((name) => name === lower)
|
|
37
|
-
);
|
|
38
|
-
if (dmMatch) return dmMatch.id;
|
|
39
|
-
const prefixMatch = convs.find((c) => c.id.startsWith(input));
|
|
40
|
-
if (prefixMatch) return prefixMatch.id;
|
|
41
|
-
return input;
|
|
42
|
-
}
|
|
43
|
-
async function run(args) {
|
|
44
|
-
const { positional, flags } = parseArgs(args, {
|
|
45
|
-
mind: { type: "string" },
|
|
46
|
-
limit: { type: "number" }
|
|
47
|
-
});
|
|
48
|
-
const input = positional[0];
|
|
49
|
-
if (!input) {
|
|
50
|
-
console.error("Usage: volute chat read <conversation> [--limit N] [--mind <name>]");
|
|
51
|
-
process.exit(1);
|
|
52
|
-
}
|
|
53
|
-
const mindName = resolveMindName(flags);
|
|
54
|
-
const conversationId = await resolveConversationId(mindName, input);
|
|
55
|
-
const limit = String(flags.limit ?? 50);
|
|
56
|
-
const res = await daemonFetch(
|
|
57
|
-
`/api/minds/${encodeURIComponent(mindName)}/conversations/${encodeURIComponent(conversationId)}/messages?limit=${limit}`
|
|
58
|
-
);
|
|
59
|
-
if (!res.ok) {
|
|
60
|
-
console.error(`Failed to read conversation: ${res.status}`);
|
|
61
|
-
process.exit(1);
|
|
62
|
-
}
|
|
63
|
-
const data = await res.json();
|
|
64
|
-
if (!Array.isArray(data.items)) {
|
|
65
|
-
console.error("Unexpected response format from server");
|
|
66
|
-
process.exit(1);
|
|
67
|
-
}
|
|
68
|
-
const compact = isCompact();
|
|
69
|
-
for (const msg of data.items) {
|
|
70
|
-
const sender = msg.sender_name ?? msg.role;
|
|
71
|
-
const text = Array.isArray(msg.content) ? msg.content.filter((b) => b.type === "text").map((b) => b.text).join("") : msg.content;
|
|
72
|
-
if (compact) {
|
|
73
|
-
const time = compactTime(msg.created_at);
|
|
74
|
-
console.log(`[${time}] ${sender}: ${text}`);
|
|
75
|
-
} else {
|
|
76
|
-
const time = new Date(
|
|
77
|
-
msg.created_at.endsWith("Z") ? msg.created_at : `${msg.created_at}Z`
|
|
78
|
-
).toLocaleString();
|
|
79
|
-
console.log(`[${time}] ${sender}: ${text}`);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
export {
|
|
84
|
-
run
|
|
85
|
-
};
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
promptLine
|
|
4
|
-
} from "./chunk-SSI47XP2.js";
|
|
5
|
-
import {
|
|
6
|
-
parseArgs
|
|
7
|
-
} from "./chunk-D424ZQGI.js";
|
|
8
|
-
import {
|
|
9
|
-
daemonFetch
|
|
10
|
-
} from "./chunk-PLDWHR4D.js";
|
|
11
|
-
import "./chunk-N7BLAHNE.js";
|
|
12
|
-
import "./chunk-4JSR7YO7.js";
|
|
13
|
-
import "./chunk-7KJOFUNN.js";
|
|
14
|
-
|
|
15
|
-
// src/commands/systems/register.ts
|
|
16
|
-
async function run(args) {
|
|
17
|
-
const { flags } = parseArgs(args, {
|
|
18
|
-
name: { type: "string" }
|
|
19
|
-
});
|
|
20
|
-
let name = flags.name;
|
|
21
|
-
if (!name) {
|
|
22
|
-
if (!process.stdin.isTTY) {
|
|
23
|
-
console.error("Usage: volute systems register --name <system-name>");
|
|
24
|
-
process.exit(1);
|
|
25
|
-
}
|
|
26
|
-
name = await promptLine("Choose a system name: ");
|
|
27
|
-
if (!name) {
|
|
28
|
-
console.error("No name provided.");
|
|
29
|
-
process.exit(1);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
const res = await daemonFetch("/api/system/register", {
|
|
33
|
-
method: "POST",
|
|
34
|
-
headers: { "Content-Type": "application/json" },
|
|
35
|
-
body: JSON.stringify({ name })
|
|
36
|
-
});
|
|
37
|
-
if (!res.ok) {
|
|
38
|
-
const body = await res.json().catch(() => ({ error: `HTTP ${res.status}` }));
|
|
39
|
-
console.error(`Registration failed: ${body.error}`);
|
|
40
|
-
process.exit(1);
|
|
41
|
-
}
|
|
42
|
-
const { system } = await res.json();
|
|
43
|
-
console.log(`Registered as "${system}". Credentials saved.`);
|
|
44
|
-
}
|
|
45
|
-
export {
|
|
46
|
-
run
|
|
47
|
-
};
|
package/dist/reject-OEANJYIA.js
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
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-PLDWHR4D.js";
|
|
11
|
-
import "./chunk-N7BLAHNE.js";
|
|
12
|
-
import "./chunk-4JSR7YO7.js";
|
|
13
|
-
import "./chunk-7KJOFUNN.js";
|
|
14
|
-
|
|
15
|
-
// src/commands/chat/reject.ts
|
|
16
|
-
async function run(args) {
|
|
17
|
-
const { positional, flags } = parseArgs(args, {
|
|
18
|
-
mind: { type: "string" }
|
|
19
|
-
});
|
|
20
|
-
const mind = resolveMindName(flags);
|
|
21
|
-
const id = positional[0];
|
|
22
|
-
if (!id) {
|
|
23
|
-
console.error("Usage: volute chat reject <id> [--mind <name>]");
|
|
24
|
-
process.exit(1);
|
|
25
|
-
}
|
|
26
|
-
const res = await daemonFetch(`/api/minds/${encodeURIComponent(mind)}/files/reject`, {
|
|
27
|
-
method: "POST",
|
|
28
|
-
headers: { "Content-Type": "application/json" },
|
|
29
|
-
body: JSON.stringify({ id })
|
|
30
|
-
});
|
|
31
|
-
if (!res.ok) {
|
|
32
|
-
const data = await res.json();
|
|
33
|
-
console.error(data.error ?? `Failed to reject file: ${res.status}`);
|
|
34
|
-
process.exit(1);
|
|
35
|
-
}
|
|
36
|
-
console.log(`File rejected: ${id}`);
|
|
37
|
-
}
|
|
38
|
-
export {
|
|
39
|
-
run
|
|
40
|
-
};
|
package/dist/restart-V5EGYBJG.js
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
resolveMindName
|
|
4
|
-
} from "./chunk-NAOW2CLO.js";
|
|
5
|
-
import {
|
|
6
|
-
getClient,
|
|
7
|
-
urlOf
|
|
8
|
-
} from "./chunk-4RQBJWQX.js";
|
|
9
|
-
import {
|
|
10
|
-
daemonFetch
|
|
11
|
-
} from "./chunk-PLDWHR4D.js";
|
|
12
|
-
import "./chunk-N7BLAHNE.js";
|
|
13
|
-
import "./chunk-4JSR7YO7.js";
|
|
14
|
-
import "./chunk-7KJOFUNN.js";
|
|
15
|
-
|
|
16
|
-
// src/commands/restart.ts
|
|
17
|
-
async function run(args) {
|
|
18
|
-
const name = resolveMindName({ mind: args[0] });
|
|
19
|
-
const client = getClient();
|
|
20
|
-
const res = await daemonFetch(
|
|
21
|
-
urlOf(client.api.minds[":name"].restart.$url({ param: { name } })),
|
|
22
|
-
{ method: "POST" }
|
|
23
|
-
);
|
|
24
|
-
const data = await res.json();
|
|
25
|
-
if (!res.ok) {
|
|
26
|
-
console.error(data.error || "Failed to restart mind");
|
|
27
|
-
process.exit(1);
|
|
28
|
-
}
|
|
29
|
-
console.log(`${name} restarted on port ${data.port}`);
|
|
30
|
-
}
|
|
31
|
-
export {
|
|
32
|
-
run
|
|
33
|
-
};
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
Scheduler,
|
|
4
|
-
getScheduler,
|
|
5
|
-
initScheduler
|
|
6
|
-
} from "./chunk-TAHX36HZ.js";
|
|
7
|
-
import "./chunk-CVL5IGIR.js";
|
|
8
|
-
import "./chunk-B2BVAIZ4.js";
|
|
9
|
-
import "./chunk-G53F3JA4.js";
|
|
10
|
-
import "./chunk-N3DNFPVA.js";
|
|
11
|
-
import "./chunk-OYAKCAVY.js";
|
|
12
|
-
import "./chunk-V45JXOWY.js";
|
|
13
|
-
import "./chunk-IS7WJ56Q.js";
|
|
14
|
-
import "./chunk-BTWAGDV5.js";
|
|
15
|
-
import "./chunk-M3K5AARV.js";
|
|
16
|
-
import "./chunk-PB65JZK2.js";
|
|
17
|
-
import "./chunk-BM474GX6.js";
|
|
18
|
-
import "./chunk-E5C7OWZ2.js";
|
|
19
|
-
import "./chunk-XWXBJQBE.js";
|
|
20
|
-
import "./chunk-BFWHBQK4.js";
|
|
21
|
-
import "./chunk-YUIHSKR6.js";
|
|
22
|
-
import "./chunk-U5BTYSAL.js";
|
|
23
|
-
import "./chunk-BDK73LK6.js";
|
|
24
|
-
import "./chunk-6OWJXUAR.js";
|
|
25
|
-
import "./chunk-N7BLAHNE.js";
|
|
26
|
-
import "./chunk-4JSR7YO7.js";
|
|
27
|
-
import "./chunk-7KJOFUNN.js";
|
|
28
|
-
export {
|
|
29
|
-
Scheduler,
|
|
30
|
-
getScheduler,
|
|
31
|
-
initScheduler
|
|
32
|
-
};
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
parseArgs
|
|
4
|
-
} from "./chunk-D424ZQGI.js";
|
|
5
|
-
import "./chunk-7KJOFUNN.js";
|
|
6
|
-
|
|
7
|
-
// src/commands/seed-check.ts
|
|
8
|
-
async function run(args) {
|
|
9
|
-
const { positional } = parseArgs(args, {});
|
|
10
|
-
const name = positional[0];
|
|
11
|
-
if (!name) {
|
|
12
|
-
console.error("Usage: volute seed check <name>");
|
|
13
|
-
process.exit(1);
|
|
14
|
-
}
|
|
15
|
-
const { daemonFetch } = await import("./daemon-client-WOAQXXBM.js");
|
|
16
|
-
const res = await daemonFetch(`/api/minds/${encodeURIComponent(name)}/seed-check`);
|
|
17
|
-
if (!res.ok) {
|
|
18
|
-
if (res.status === 404) {
|
|
19
|
-
console.log(`Seed "${name}" not found \u2014 it may have been deleted or already sprouted.`);
|
|
20
|
-
} else {
|
|
21
|
-
console.error(`seed check failed for ${name}: HTTP ${res.status}`);
|
|
22
|
-
}
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
const data = await res.json();
|
|
26
|
-
if (data.output) {
|
|
27
|
-
console.log(data.output);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
export {
|
|
31
|
-
run
|
|
32
|
-
};
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import "./chunk-7KJOFUNN.js";
|
|
3
|
-
|
|
4
|
-
// src/commands/seed-cmd.ts
|
|
5
|
-
async function run(args) {
|
|
6
|
-
const subcommand = args[0];
|
|
7
|
-
switch (subcommand) {
|
|
8
|
-
case "create":
|
|
9
|
-
await import("./seed-create-663ALOKH.js").then((m) => m.run(args.slice(1)));
|
|
10
|
-
break;
|
|
11
|
-
case "sprout":
|
|
12
|
-
await import("./seed-sprout-EH3AGKAI.js").then((m) => m.run(args.slice(1)));
|
|
13
|
-
break;
|
|
14
|
-
case "check":
|
|
15
|
-
await import("./seed-check-PXTH7YXS.js").then((m) => m.run(args.slice(1)));
|
|
16
|
-
break;
|
|
17
|
-
case "--help":
|
|
18
|
-
case "-h":
|
|
19
|
-
case void 0:
|
|
20
|
-
printUsage();
|
|
21
|
-
break;
|
|
22
|
-
default:
|
|
23
|
-
printUsage();
|
|
24
|
-
process.exit(1);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
function printUsage() {
|
|
28
|
-
console.log(`volute seed \u2014 seed lifecycle
|
|
29
|
-
|
|
30
|
-
volute seed create <name> Plant a new seed
|
|
31
|
-
volute seed sprout Complete orientation and become a full mind
|
|
32
|
-
volute seed check <name> Check seed readiness (used by spirit scheduler)`);
|
|
33
|
-
}
|
|
34
|
-
export {
|
|
35
|
-
run
|
|
36
|
-
};
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
promptLine
|
|
4
|
-
} from "./chunk-SSI47XP2.js";
|
|
5
|
-
import {
|
|
6
|
-
parseArgs
|
|
7
|
-
} from "./chunk-D424ZQGI.js";
|
|
8
|
-
import "./chunk-7KJOFUNN.js";
|
|
9
|
-
|
|
10
|
-
// src/commands/seed-create.ts
|
|
11
|
-
async function chooseModel(daemonFetch) {
|
|
12
|
-
const res = await daemonFetch("/api/system/ai/models");
|
|
13
|
-
if (!res.ok) {
|
|
14
|
-
console.error(`Failed to fetch AI models (HTTP ${res.status}). Is the daemon running?`);
|
|
15
|
-
process.exit(1);
|
|
16
|
-
}
|
|
17
|
-
const models = await res.json();
|
|
18
|
-
const enabled = models.filter((m) => m.enabled);
|
|
19
|
-
if (enabled.length === 0) return void 0;
|
|
20
|
-
console.log("\nAvailable models:");
|
|
21
|
-
for (let i = 0; i < enabled.length; i++) {
|
|
22
|
-
console.log(` ${i + 1}) ${enabled[i].name} (${enabled[i].provider})`);
|
|
23
|
-
}
|
|
24
|
-
const answer = await promptLine(`
|
|
25
|
-
Choose a model [1-${enabled.length}]: `);
|
|
26
|
-
const idx = parseInt(answer, 10) - 1;
|
|
27
|
-
if (Number.isNaN(idx) || idx < 0 || idx >= enabled.length) {
|
|
28
|
-
console.error("Invalid selection");
|
|
29
|
-
process.exit(1);
|
|
30
|
-
}
|
|
31
|
-
const chosen = enabled[idx];
|
|
32
|
-
return `${chosen.provider}:${chosen.id}`;
|
|
33
|
-
}
|
|
34
|
-
async function run(args) {
|
|
35
|
-
const { positional, flags } = parseArgs(args, {
|
|
36
|
-
template: { type: "string" },
|
|
37
|
-
model: { type: "string" },
|
|
38
|
-
description: { type: "string" },
|
|
39
|
-
skills: { type: "string" },
|
|
40
|
-
"created-by": { type: "string" }
|
|
41
|
-
});
|
|
42
|
-
const name = positional[0];
|
|
43
|
-
if (!name) {
|
|
44
|
-
console.error(
|
|
45
|
-
"Usage: volute seed create <name> [--template <name>] [--model <model>] [--description <text>] [--skills <list|none>] [--created-by <username>]"
|
|
46
|
-
);
|
|
47
|
-
process.exit(1);
|
|
48
|
-
}
|
|
49
|
-
const skills = flags.skills === "none" ? [] : flags.skills ? flags.skills.split(",") : void 0;
|
|
50
|
-
const createdBy = flags["created-by"];
|
|
51
|
-
const { daemonFetch } = await import("./daemon-client-WOAQXXBM.js");
|
|
52
|
-
const { getClient, urlOf } = await import("./api-client-XUXOB7LI.js");
|
|
53
|
-
const client = getClient();
|
|
54
|
-
let model = flags.model;
|
|
55
|
-
let template = flags.template;
|
|
56
|
-
if (!template) {
|
|
57
|
-
const { resolveTemplate } = await import("./ai-service-PSILB5WD.js");
|
|
58
|
-
template = resolveTemplate(model);
|
|
59
|
-
}
|
|
60
|
-
if (template !== "claude" && !model) {
|
|
61
|
-
if (process.env.VOLUTE_MIND || !process.stdin.isTTY) {
|
|
62
|
-
const { getSpiritModel } = await import("./spirit-4JP4TY4C.js");
|
|
63
|
-
const { qualifyModelId } = await import("./ai-service-PSILB5WD.js");
|
|
64
|
-
const spiritModel = getSpiritModel();
|
|
65
|
-
if (spiritModel) {
|
|
66
|
-
model = template === "pi" ? qualifyModelId(spiritModel) : spiritModel;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
if (!model) {
|
|
70
|
-
model = await chooseModel(daemonFetch);
|
|
71
|
-
if (!model) {
|
|
72
|
-
console.error("No AI models configured. Set up providers in the web dashboard first.");
|
|
73
|
-
process.exit(1);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
const createRes = await daemonFetch(urlOf(client.api.minds.$url()), {
|
|
78
|
-
method: "POST",
|
|
79
|
-
headers: { "Content-Type": "application/json" },
|
|
80
|
-
body: JSON.stringify({
|
|
81
|
-
name,
|
|
82
|
-
template,
|
|
83
|
-
stage: "seed",
|
|
84
|
-
description: flags.description,
|
|
85
|
-
model,
|
|
86
|
-
skills,
|
|
87
|
-
createdBy
|
|
88
|
-
})
|
|
89
|
-
});
|
|
90
|
-
const createData = await createRes.json();
|
|
91
|
-
if (!createRes.ok) {
|
|
92
|
-
console.error(createData.error ?? "Failed to create mind");
|
|
93
|
-
process.exit(1);
|
|
94
|
-
}
|
|
95
|
-
const startRes = await daemonFetch(
|
|
96
|
-
urlOf(client.api.minds[":name"].start.$url({ param: { name } })),
|
|
97
|
-
{ method: "POST" }
|
|
98
|
-
);
|
|
99
|
-
if (!startRes.ok) {
|
|
100
|
-
const startData = await startRes.json();
|
|
101
|
-
console.error(startData.error ?? "Failed to start mind");
|
|
102
|
-
process.exit(1);
|
|
103
|
-
}
|
|
104
|
-
console.log(`
|
|
105
|
-
Seeded mind: ${name} (port ${createData.port})`);
|
|
106
|
-
console.log(`
|
|
107
|
-
Talk to your new mind:`);
|
|
108
|
-
console.log(` volute chat send @${name} "hello"`);
|
|
109
|
-
}
|
|
110
|
-
export {
|
|
111
|
-
run
|
|
112
|
-
};
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
getStandardSkillsWithExtensions
|
|
4
|
-
} from "./chunk-N3DNFPVA.js";
|
|
5
|
-
import "./chunk-YUIHSKR6.js";
|
|
6
|
-
import "./chunk-U5BTYSAL.js";
|
|
7
|
-
import "./chunk-BDK73LK6.js";
|
|
8
|
-
import "./chunk-6OWJXUAR.js";
|
|
9
|
-
import {
|
|
10
|
-
findMind,
|
|
11
|
-
mindDir
|
|
12
|
-
} from "./chunk-N7BLAHNE.js";
|
|
13
|
-
import "./chunk-4JSR7YO7.js";
|
|
14
|
-
import "./chunk-7KJOFUNN.js";
|
|
15
|
-
|
|
16
|
-
// src/commands/seed-sprout.ts
|
|
17
|
-
import { existsSync, readFileSync } from "fs";
|
|
18
|
-
import { resolve } from "path";
|
|
19
|
-
var ORIENTATION_MARKER = "You don't have a soul yet";
|
|
20
|
-
async function run(_args) {
|
|
21
|
-
const mindName = process.env.VOLUTE_MIND;
|
|
22
|
-
if (!mindName) {
|
|
23
|
-
console.error("volute seed sprout must be run by a mind (VOLUTE_MIND not set)");
|
|
24
|
-
process.exit(1);
|
|
25
|
-
}
|
|
26
|
-
const entry = await findMind(mindName);
|
|
27
|
-
if (!entry) {
|
|
28
|
-
console.error(`Unknown mind: ${mindName}`);
|
|
29
|
-
process.exit(1);
|
|
30
|
-
}
|
|
31
|
-
if (entry.stage !== "seed") {
|
|
32
|
-
console.error(`${mindName} is not a seed \u2014 already at stage "${entry.stage}"`);
|
|
33
|
-
process.exit(1);
|
|
34
|
-
}
|
|
35
|
-
const dir = mindDir(mindName);
|
|
36
|
-
const soulPath = resolve(dir, "home/SOUL.md");
|
|
37
|
-
const memoryPath = resolve(dir, "home/MEMORY.md");
|
|
38
|
-
if (!existsSync(soulPath)) {
|
|
39
|
-
console.error("Write your SOUL.md before sprouting.");
|
|
40
|
-
process.exit(1);
|
|
41
|
-
}
|
|
42
|
-
const soul = readFileSync(soulPath, "utf-8");
|
|
43
|
-
if (soul.includes(ORIENTATION_MARKER)) {
|
|
44
|
-
console.error(
|
|
45
|
-
"Your SOUL.md still contains the orientation template. Write your own identity first."
|
|
46
|
-
);
|
|
47
|
-
process.exit(1);
|
|
48
|
-
}
|
|
49
|
-
if (!existsSync(memoryPath)) {
|
|
50
|
-
console.error("Write your MEMORY.md before sprouting.");
|
|
51
|
-
process.exit(1);
|
|
52
|
-
}
|
|
53
|
-
const { isImagegenEnabled } = await import("./setup-GGMKENLN.js");
|
|
54
|
-
if (isImagegenEnabled()) {
|
|
55
|
-
const { readVoluteConfig } = await import("./volute-config-WBKYJGYQ.js");
|
|
56
|
-
const config = readVoluteConfig(dir);
|
|
57
|
-
const avatarPath = config?.profile?.avatar;
|
|
58
|
-
if (!avatarPath || !existsSync(resolve(dir, "home", avatarPath))) {
|
|
59
|
-
console.error(
|
|
60
|
-
"Generate an avatar before sprouting. Use `imagegen generate` to create one, then `volute mind profile --avatar <path>` to set it."
|
|
61
|
-
);
|
|
62
|
-
process.exit(1);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
const { daemonFetch } = await import("./daemon-client-WOAQXXBM.js");
|
|
66
|
-
const { getClient, urlOf } = await import("./api-client-XUXOB7LI.js");
|
|
67
|
-
const { mindSkillsDir } = await import("./skills-Q6VZ2UGD.js");
|
|
68
|
-
const client = getClient();
|
|
69
|
-
const failedSkills = [];
|
|
70
|
-
for (const skillId of getStandardSkillsWithExtensions()) {
|
|
71
|
-
const skillDir = resolve(mindSkillsDir(dir), skillId);
|
|
72
|
-
if (!existsSync(skillDir)) {
|
|
73
|
-
const installRes = await daemonFetch(
|
|
74
|
-
urlOf(client.api.minds[":name"].skills.install.$url({ param: { name: mindName } })),
|
|
75
|
-
{
|
|
76
|
-
method: "POST",
|
|
77
|
-
headers: { "Content-Type": "application/json" },
|
|
78
|
-
body: JSON.stringify({ skillId })
|
|
79
|
-
}
|
|
80
|
-
);
|
|
81
|
-
if (!installRes.ok) {
|
|
82
|
-
const data = await installRes.json().catch(() => ({ error: `HTTP ${installRes.status}` }));
|
|
83
|
-
console.error(`Failed to install skill ${skillId}: ${data.error}`);
|
|
84
|
-
failedSkills.push(skillId);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
const orientationDir = resolve(mindSkillsDir(dir), "orientation");
|
|
89
|
-
if (existsSync(orientationDir)) {
|
|
90
|
-
const delRes = await daemonFetch(
|
|
91
|
-
urlOf(
|
|
92
|
-
client.api.minds[":name"].skills[":skill"].$url({
|
|
93
|
-
param: { name: mindName, skill: "orientation" }
|
|
94
|
-
})
|
|
95
|
-
),
|
|
96
|
-
{ method: "DELETE" }
|
|
97
|
-
);
|
|
98
|
-
if (!delRes.ok) {
|
|
99
|
-
const data = await delRes.json().catch(() => ({ error: `HTTP ${delRes.status}` }));
|
|
100
|
-
console.error(`Failed to uninstall orientation skill: ${data.error}`);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
if (failedSkills.length > 0) {
|
|
104
|
-
console.error(`Warning: failed to install skills: ${failedSkills.join(", ")}`);
|
|
105
|
-
}
|
|
106
|
-
const sproutRes = await daemonFetch(
|
|
107
|
-
urlOf(client.api.minds[":name"].sprout.$url({ param: { name: mindName } })),
|
|
108
|
-
{ method: "POST" }
|
|
109
|
-
);
|
|
110
|
-
if (!sproutRes.ok) {
|
|
111
|
-
const data = await sproutRes.json().catch(() => ({ error: `HTTP ${sproutRes.status}` }));
|
|
112
|
-
console.error(data.error ?? "Failed to update stage");
|
|
113
|
-
process.exit(1);
|
|
114
|
-
}
|
|
115
|
-
const res = await daemonFetch(
|
|
116
|
-
urlOf(client.api.minds[":name"].restart.$url({ param: { name: mindName } })),
|
|
117
|
-
{
|
|
118
|
-
method: "POST",
|
|
119
|
-
headers: { "Content-Type": "application/json" },
|
|
120
|
-
body: JSON.stringify({ context: { type: "sprouted" } })
|
|
121
|
-
}
|
|
122
|
-
);
|
|
123
|
-
if (!res.ok) {
|
|
124
|
-
const data = await res.json().catch(() => ({ error: `HTTP ${res.status}` }));
|
|
125
|
-
console.error(data.error ?? "Failed to restart after sprouting");
|
|
126
|
-
process.exit(1);
|
|
127
|
-
}
|
|
128
|
-
console.log("Sprouted! You now have full mind capabilities.");
|
|
129
|
-
}
|
|
130
|
-
export {
|
|
131
|
-
run
|
|
132
|
-
};
|