volute 0.34.0 → 0.35.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-ZW4SDL2C.js} +4 -4
- package/dist/{ai-service-PSILB5WD.js → ai-service-LURBEDDB.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-ESU2FUN4.js} +3 -3
- package/dist/{auth-ZFZXJZDQ.js → auth-WX4TESEI.js} +5 -5
- package/dist/bridge-PXIO6PS2.js +206 -0
- package/dist/chat-QXAJF3FU.js +51 -0
- package/dist/{chunk-7F2SW2KD.js → chunk-2TGZJFAT.js} +3 -3
- package/dist/{chunk-6LXAAQ43.js → chunk-33ODGMFZ.js} +1 -1
- package/dist/{chunk-4JSR7YO7.js → chunk-5N7Y5WAM.js} +1 -1
- package/dist/{chunk-FYCALD4Q.js → chunk-5T5YMX6S.js} +1 -1
- package/dist/{chunk-B2BVAIZ4.js → chunk-5XJYUFZH.js} +21 -15
- package/dist/{chunk-M3K5AARV.js → chunk-A2ZLHBHG.js} +2 -2
- package/dist/{chunk-U5BTYSAL.js → chunk-AN2W47GW.js} +2 -2
- package/dist/{chunk-G53F3JA4.js → chunk-AOB6GVRM.js} +1 -1
- package/dist/{chunk-N7BLAHNE.js → chunk-BDYXIWA5.js} +5 -5
- package/dist/{chunk-YUIHSKR6.js → chunk-BKF4WQCY.js} +2 -2
- package/dist/{chunk-6OWJXUAR.js → chunk-BMZQYACC.js} +2 -2
- package/dist/{chunk-NAOW2CLO.js → chunk-BTY4WNFE.js} +1 -1
- package/dist/{chunk-MLOQKQNB.js → chunk-BV65KRHM.js} +2 -2
- package/dist/{chunk-XWXBJQBE.js → chunk-CORXD635.js} +4 -4
- package/dist/{chunk-PVY5W6QN.js → chunk-F7ZNLYKZ.js} +2 -2
- package/dist/{chunk-BFWHBQK4.js → chunk-FT5KETXZ.js} +3 -3
- package/dist/{chunk-N3DNFPVA.js → chunk-IJHIXLVN.js} +8 -8
- package/dist/{chunk-V6ZCNULL.js → chunk-J6CJQDWI.js} +37 -28
- package/dist/{chunk-4RQBJWQX.js → chunk-LOPXTW6H.js} +1 -1
- package/dist/{chunk-47ZPNLF4.js → chunk-MDJGMOSD.js} +8 -137
- package/dist/{chunk-BTWAGDV5.js → chunk-N446KRP7.js} +3 -3
- package/dist/{chunk-6WAWMWR5.js → chunk-N5LMGYXX.js} +2 -2
- package/dist/{chunk-G6BSYHPK.js → chunk-NJK5SDGR.js} +1 -1
- package/dist/{chunk-D424ZQGI.js → chunk-O7IGP7ZW.js} +11 -3
- package/dist/{chunk-2IOP6PHB.js → chunk-OTC67N2Z.js} +2 -2
- package/dist/{chunk-V45JXOWY.js → chunk-PWQ2ITYG.js} +4 -4
- package/dist/{chunk-KTLFDYPT.js → chunk-QCH6K235.js} +1 -1
- package/dist/chunk-QHG4OMZL.js +145 -0
- package/dist/{chunk-IS7WJ56Q.js → chunk-QWTR6AWZ.js} +3 -3
- package/dist/chunk-TXSA4Q3V.js +116 -0
- package/dist/{chunk-BDK73LK6.js → chunk-VHJRZM2S.js} +2 -2
- package/dist/{chunk-SSI47XP2.js → chunk-VHWGEJ4V.js} +1 -1
- package/dist/chunk-VY3RB2V7.js +164 -0
- package/dist/chunk-WJPROOU5.js +8314 -0
- package/dist/{chunk-E5C7OWZ2.js → chunk-WZRZFFCL.js} +8 -8
- package/dist/{chunk-BM474GX6.js → chunk-XRQSAMX2.js} +4 -4
- package/dist/{chunk-OYAKCAVY.js → chunk-ZSR72JB3.js} +1 -1
- 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-6JL4C24T.js} +21 -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-2PW57WO2.js} +5 -5
- package/dist/create-5BPOOJAN.js +75 -0
- package/dist/create-UVCK2CS6.js +50 -0
- package/dist/daemon-client-RVIKXGFQ.js +12 -0
- package/dist/daemon-restart-HSZ3BCX5.js +65 -0
- package/dist/daemon.js +845 -1766
- package/dist/{db-PLEDCBHZ.js → db-BDMH4SZ2.js} +7 -3
- package/dist/{db-RYX3SS2W.js → db-BVBJ57TU.js} +2 -2
- package/dist/delete-L5PAVDGQ.js +42 -0
- package/dist/delivery-manager-H5ZVBMCQ.js +31 -0
- package/dist/{delivery-router-D5ELDMS2.js → delivery-router-HEJSJAHQ.js} +4 -4
- package/dist/down-74VXM45A.js +17 -0
- package/dist/env-E4XHO2BI.js +223 -0
- package/dist/{exec-DVLXKRIO.js → exec-PY7THYH4.js} +4 -4
- package/dist/export-OAS6QVBN.js +113 -0
- package/dist/{extension-PM42QCID.js → extension-D74CNM7G.js} +25 -33
- package/dist/{extensions-BBGVL5JC.js → extensions-XDDFY72A.js} +22 -11
- package/dist/files-CWTK6V3H.js +53 -0
- package/dist/import-5A3T7QV4.js +143 -0
- package/dist/{isolation-62MKDZN3.js → isolation-TK5RX2WM.js} +3 -3
- package/dist/join-DF5XSJAC.js +67 -0
- package/dist/list-PDMQM7ZV.js +53 -0
- package/dist/login-7TE6CIZF.js +60 -0
- package/dist/login-GOTAYLXP.js +51 -0
- package/dist/logout-6KIA74EV.js +29 -0
- package/dist/logout-T4XS6LRU.js +50 -0
- package/dist/message-delivery-GRC4W6P7.js +41 -0
- package/dist/mind-5IEYKV7I.js +97 -0
- package/dist/{mind-activity-tracker-2ACNHA7B.js → mind-activity-tracker-QBLIV7ZJ.js} +5 -5
- package/dist/{mind-history-WOYFLQAI.js → mind-history-IE2QH7U5.js} +82 -71
- package/dist/mind-list-GEWHWAL4.js +38 -0
- package/dist/mind-manager-HFLB5653.js +31 -0
- package/dist/mind-profile-DCBDVF5B.js +53 -0
- package/dist/mind-service-X2CAA6W6.js +37 -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-D2FSVFAX.js} +5 -5
- package/dist/read-67VRP2DO.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-GBSNW3HG.js} +2 -2
- package/dist/reject-MUR2KWJ4.js +40 -0
- package/dist/restart-5EGG4JXU.js +42 -0
- package/dist/{sandbox-SI5HMBP3.js → sandbox-R37VIU36.js} +5 -5
- package/dist/scheduler-Y7O4CJXL.js +31 -0
- package/dist/{schema-ETMABTW4.js → schema-XVZ2CLKW.js} +1 -1
- package/dist/{seed-WNGI6PNW.js → seed-EQORWX77.js} +2 -2
- package/dist/seed-check-KJNTL72M.js +35 -0
- package/dist/seed-cmd-ZM2XGVU2.js +30 -0
- package/dist/seed-create-DRWGGHEI.js +113 -0
- package/dist/seed-sprout-JYXGXOP3.js +148 -0
- package/dist/send-JBJJQ7CA.js +409 -0
- package/dist/service-WNPCNHOX.js +121 -0
- package/dist/{setup-Z3DEVWV7.js → setup-BJ4YAY26.js} +153 -127
- package/dist/{setup-GGMKENLN.js → setup-RHJRFURI.js} +3 -3
- package/dist/skill-TAAKEYBV.js +389 -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-EKMCQ46K.js} +7 -7
- package/dist/sleep-manager-7KFK3USC.js +35 -0
- package/dist/spirit-ZFRDXMG7.js +23 -0
- package/dist/split-AWVOYOPZ.js +64 -0
- package/dist/{sprout-E3HJIV2Z.js → sprout-HE4TITMK.js} +2 -2
- package/dist/start-3UXOPXQG.js +39 -0
- package/dist/status-ZK34WYIM.js +125 -0
- package/dist/stop-3XYIBGFM.js +41 -0
- package/dist/system-chat-IDPHYHY4.js +35 -0
- package/dist/systems-O43WGQY6.js +52 -0
- package/dist/{tailscale-ZEUK7GKZ.js → tailscale-ZIZ2HWJ5.js} +4 -4
- package/dist/{template-hash-EJRTKE36.js → template-hash-A7FNHTB7.js} +2 -2
- package/dist/up-77ICEDEW.js +19 -0
- package/dist/update-ANE5ZM7F.js +225 -0
- package/dist/{update-check-X3YG4WVP.js → update-check-UV55CBEP.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-FXSEMXWW.js} +28 -27
- package/dist/{volute-config-WBKYJGYQ.js → volute-config-D2XVS2YI.js} +1 -1
- package/dist/web-assets/assets/index-BhxWKvbB.css +1 -0
- package/dist/web-assets/assets/index-CHVKJ9II.js +75 -0
- package/dist/web-assets/index.html +2 -2
- package/dist/web-assets/sw.js +117 -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/src/lib/auto-commit.ts +8 -8
- package/templates/_base/src/lib/volute-server.ts +6 -0
- package/templates/claude/src/agent.ts +8 -1
- 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/chunk-TAHX36HZ.js +0 -3679
- 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/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-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,389 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
isCompact
|
|
4
|
+
} from "./chunk-5T5YMX6S.js";
|
|
5
|
+
import {
|
|
6
|
+
resolveMindName
|
|
7
|
+
} from "./chunk-BTY4WNFE.js";
|
|
8
|
+
import {
|
|
9
|
+
command,
|
|
10
|
+
subcommands
|
|
11
|
+
} from "./chunk-TXSA4Q3V.js";
|
|
12
|
+
import "./chunk-O7IGP7ZW.js";
|
|
13
|
+
import {
|
|
14
|
+
daemonFetch
|
|
15
|
+
} from "./chunk-ZX7EAV5J.js";
|
|
16
|
+
import {
|
|
17
|
+
getClient,
|
|
18
|
+
urlOf
|
|
19
|
+
} from "./chunk-LOPXTW6H.js";
|
|
20
|
+
import "./chunk-7KJOFUNN.js";
|
|
21
|
+
|
|
22
|
+
// packages/cli/src/commands/skill.ts
|
|
23
|
+
var listSkillsCmd = command({
|
|
24
|
+
name: "volute skill list",
|
|
25
|
+
description: "List skills (shared pool or per-mind)",
|
|
26
|
+
flags: {
|
|
27
|
+
mind: { type: "string", description: "Mind name (shows installed skills for mind)" }
|
|
28
|
+
},
|
|
29
|
+
run: async ({ flags }) => {
|
|
30
|
+
if (flags.mind || process.env.VOLUTE_MIND) {
|
|
31
|
+
const mindName = resolveMindName(flags);
|
|
32
|
+
const client = getClient();
|
|
33
|
+
const url = urlOf(client.api.minds[":name"].skills.$url({ param: { name: mindName } }));
|
|
34
|
+
const res = await daemonFetch(url);
|
|
35
|
+
if (!res.ok) {
|
|
36
|
+
const body = await res.json().catch(() => ({ error: "Unknown error" }));
|
|
37
|
+
console.error(`Error: ${body.error}`);
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
const skills = await res.json();
|
|
41
|
+
if (skills.length === 0) {
|
|
42
|
+
console.log("No skills installed.");
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const compact = isCompact();
|
|
46
|
+
console.log(`Skills for ${mindName}:${compact ? "" : "\n"}`);
|
|
47
|
+
for (const s of skills) {
|
|
48
|
+
const update = s.updateAvailable ? " (update available)" : "";
|
|
49
|
+
const source = s.upstream ? ` [shared:${s.upstream.source} v${s.upstream.version}]` : "";
|
|
50
|
+
console.log(` ${s.id} \u2014 ${s.name}${source}${update}`);
|
|
51
|
+
}
|
|
52
|
+
} else {
|
|
53
|
+
const client = getClient();
|
|
54
|
+
const url = urlOf(client.api.skills.$url());
|
|
55
|
+
const res = await daemonFetch(url);
|
|
56
|
+
if (!res.ok) {
|
|
57
|
+
const body = await res.json().catch(() => ({ error: "Unknown error" }));
|
|
58
|
+
console.error(`Error: ${body.error}`);
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
const skills = await res.json();
|
|
62
|
+
if (skills.length === 0) {
|
|
63
|
+
console.log("No shared skills available.");
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const compact = isCompact();
|
|
67
|
+
console.log(`Shared skills:${compact ? "" : "\n"}`);
|
|
68
|
+
for (const s of skills) {
|
|
69
|
+
console.log(` ${s.id} \u2014 ${s.name} (v${s.version}, by ${s.author})`);
|
|
70
|
+
if (s.description && !compact) console.log(` ${s.description}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
var infoSkillCmd = command({
|
|
76
|
+
name: "volute skill info",
|
|
77
|
+
description: "Show details of a shared skill",
|
|
78
|
+
args: [{ name: "name", required: true, description: "Skill ID" }],
|
|
79
|
+
flags: {},
|
|
80
|
+
run: async ({ args }) => {
|
|
81
|
+
const id = args.name;
|
|
82
|
+
const client = getClient();
|
|
83
|
+
const url = urlOf(client.api.skills[":id"].$url({ param: { id } }));
|
|
84
|
+
const res = await daemonFetch(url);
|
|
85
|
+
if (!res.ok) {
|
|
86
|
+
const body = await res.json().catch(() => ({ error: "Unknown error" }));
|
|
87
|
+
console.error(`Error: ${body.error}`);
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
const skill = await res.json();
|
|
91
|
+
console.log(`${skill.name} (${skill.id})`);
|
|
92
|
+
console.log(` Version: ${skill.version}`);
|
|
93
|
+
console.log(` Author: ${skill.author}`);
|
|
94
|
+
if (skill.description) console.log(` Description: ${skill.description}`);
|
|
95
|
+
console.log(` Files: ${skill.files.join(", ")}`);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
var installSkillCmd = command({
|
|
99
|
+
name: "volute skill install",
|
|
100
|
+
description: "Install a shared skill into a mind",
|
|
101
|
+
args: [{ name: "name", required: true, description: "Skill to install" }],
|
|
102
|
+
flags: {
|
|
103
|
+
mind: { type: "string", description: "Mind name" }
|
|
104
|
+
},
|
|
105
|
+
run: async ({ args, flags }) => {
|
|
106
|
+
const mindName = resolveMindName(flags);
|
|
107
|
+
const skillId = args.name;
|
|
108
|
+
const client = getClient();
|
|
109
|
+
const url = urlOf(client.api.minds[":name"].skills.install.$url({ param: { name: mindName } }));
|
|
110
|
+
const res = await daemonFetch(url, {
|
|
111
|
+
method: "POST",
|
|
112
|
+
headers: { "Content-Type": "application/json" },
|
|
113
|
+
body: JSON.stringify({ skillId })
|
|
114
|
+
});
|
|
115
|
+
if (!res.ok) {
|
|
116
|
+
const body2 = await res.json().catch(() => ({ error: "Unknown error" }));
|
|
117
|
+
console.error(`Error: ${body2.error}`);
|
|
118
|
+
process.exit(1);
|
|
119
|
+
}
|
|
120
|
+
const body = await res.json().catch(() => ({}));
|
|
121
|
+
console.log(`Installed skill "${skillId}" into ${mindName}.`);
|
|
122
|
+
if (body.npmInstalled?.length) {
|
|
123
|
+
console.log(`Installed npm dependencies: ${body.npmInstalled.join(", ")}`);
|
|
124
|
+
}
|
|
125
|
+
if (body.installNotes) {
|
|
126
|
+
console.log("");
|
|
127
|
+
console.log(body.installNotes);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
async function doUpdate(mindName, skillId) {
|
|
132
|
+
const client = getClient();
|
|
133
|
+
const url = urlOf(client.api.minds[":name"].skills.update.$url({ param: { name: mindName } }));
|
|
134
|
+
const res = await daemonFetch(url, {
|
|
135
|
+
method: "POST",
|
|
136
|
+
headers: { "Content-Type": "application/json" },
|
|
137
|
+
body: JSON.stringify({ skillId })
|
|
138
|
+
});
|
|
139
|
+
if (!res.ok) {
|
|
140
|
+
const body = await res.json().catch(() => ({ error: "Unknown error" }));
|
|
141
|
+
console.error(`Error updating ${skillId}: ${body.error}`);
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
const result = await res.json();
|
|
145
|
+
switch (result.status) {
|
|
146
|
+
case "up-to-date":
|
|
147
|
+
console.log(`${skillId}: already up to date.`);
|
|
148
|
+
break;
|
|
149
|
+
case "updated":
|
|
150
|
+
console.log(`${skillId}: updated successfully.`);
|
|
151
|
+
break;
|
|
152
|
+
case "conflict":
|
|
153
|
+
console.log(`${skillId}: updated with conflicts in:`);
|
|
154
|
+
for (const f of result.conflictFiles ?? []) {
|
|
155
|
+
console.log(` ${f}`);
|
|
156
|
+
}
|
|
157
|
+
console.log("Resolve conflicts and commit manually.");
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
return true;
|
|
161
|
+
}
|
|
162
|
+
var updateSkillCmd = command({
|
|
163
|
+
name: "volute skill update",
|
|
164
|
+
description: "Update an installed skill from the shared pool (3-way merge)",
|
|
165
|
+
args: [{ name: "name", description: "Skill to update" }],
|
|
166
|
+
flags: {
|
|
167
|
+
mind: { type: "string", description: "Mind name" },
|
|
168
|
+
all: { type: "boolean", description: "Update all skills" }
|
|
169
|
+
},
|
|
170
|
+
run: async ({ args, flags }) => {
|
|
171
|
+
const mindName = resolveMindName(flags);
|
|
172
|
+
if (flags.all) {
|
|
173
|
+
const client = getClient();
|
|
174
|
+
const listUrl = urlOf(client.api.minds[":name"].skills.$url({ param: { name: mindName } }));
|
|
175
|
+
const listRes = await daemonFetch(listUrl);
|
|
176
|
+
if (!listRes.ok) {
|
|
177
|
+
const body = await listRes.json().catch(() => ({ error: "Unknown error" }));
|
|
178
|
+
console.error(`Error: ${body.error}`);
|
|
179
|
+
process.exit(1);
|
|
180
|
+
}
|
|
181
|
+
const skills = await listRes.json();
|
|
182
|
+
const updatable = skills.filter((s) => s.updateAvailable && s.upstream);
|
|
183
|
+
if (updatable.length === 0) {
|
|
184
|
+
console.log("All skills are up to date.");
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
let failures = 0;
|
|
188
|
+
for (const s of updatable) {
|
|
189
|
+
const ok2 = await doUpdate(mindName, s.id);
|
|
190
|
+
if (!ok2) failures++;
|
|
191
|
+
}
|
|
192
|
+
if (failures > 0) process.exit(1);
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
const skillId = args.name;
|
|
196
|
+
if (!skillId) {
|
|
197
|
+
console.error("Usage: volute skill update <name> [--mind <name>] [--all]");
|
|
198
|
+
process.exit(1);
|
|
199
|
+
}
|
|
200
|
+
const ok = await doUpdate(mindName, skillId);
|
|
201
|
+
if (!ok) process.exit(1);
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
var publishSkillCmd = command({
|
|
205
|
+
name: "volute skill publish",
|
|
206
|
+
description: "Publish a mind's skill to the shared repository",
|
|
207
|
+
args: [{ name: "name", required: true, description: "Skill to publish" }],
|
|
208
|
+
flags: {
|
|
209
|
+
mind: { type: "string", description: "Mind name" }
|
|
210
|
+
},
|
|
211
|
+
run: async ({ args, flags }) => {
|
|
212
|
+
const mindName = resolveMindName(flags);
|
|
213
|
+
const skillId = args.name;
|
|
214
|
+
const client = getClient();
|
|
215
|
+
const url = urlOf(client.api.minds[":name"].skills.publish.$url({ param: { name: mindName } }));
|
|
216
|
+
const res = await daemonFetch(url, {
|
|
217
|
+
method: "POST",
|
|
218
|
+
headers: { "Content-Type": "application/json" },
|
|
219
|
+
body: JSON.stringify({ skillId })
|
|
220
|
+
});
|
|
221
|
+
if (!res.ok) {
|
|
222
|
+
const body = await res.json().catch(() => ({ error: "Unknown error" }));
|
|
223
|
+
console.error(`Error: ${body.error}`);
|
|
224
|
+
process.exit(1);
|
|
225
|
+
}
|
|
226
|
+
const skill = await res.json();
|
|
227
|
+
console.log(`Published skill "${skillId}" (v${skill.version}).`);
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
var removeSkillCmd = command({
|
|
231
|
+
name: "volute skill remove",
|
|
232
|
+
description: "Remove a shared skill from the pool",
|
|
233
|
+
args: [{ name: "name", required: true, description: "Shared skill to remove" }],
|
|
234
|
+
flags: {},
|
|
235
|
+
run: async ({ args }) => {
|
|
236
|
+
const id = args.name;
|
|
237
|
+
const client = getClient();
|
|
238
|
+
const url = urlOf(client.api.skills[":id"].$url({ param: { id } }));
|
|
239
|
+
const res = await daemonFetch(url, { method: "DELETE" });
|
|
240
|
+
if (!res.ok) {
|
|
241
|
+
const body = await res.json().catch(() => ({ error: "Unknown error" }));
|
|
242
|
+
console.error(`Error: ${body.error}`);
|
|
243
|
+
process.exit(1);
|
|
244
|
+
}
|
|
245
|
+
console.log(`Removed shared skill "${id}".`);
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
var uninstallSkillCmd = command({
|
|
249
|
+
name: "volute skill uninstall",
|
|
250
|
+
description: "Uninstall a skill from a mind",
|
|
251
|
+
args: [{ name: "name", required: true, description: "Skill to uninstall" }],
|
|
252
|
+
flags: {
|
|
253
|
+
mind: { type: "string", description: "Mind name" }
|
|
254
|
+
},
|
|
255
|
+
run: async ({ args, flags }) => {
|
|
256
|
+
const mindName = resolveMindName(flags);
|
|
257
|
+
const skillId = args.name;
|
|
258
|
+
const client = getClient();
|
|
259
|
+
const url = urlOf(
|
|
260
|
+
client.api.minds[":name"].skills[":skill"].$url({
|
|
261
|
+
param: { name: mindName, skill: skillId }
|
|
262
|
+
})
|
|
263
|
+
);
|
|
264
|
+
const res = await daemonFetch(url, { method: "DELETE" });
|
|
265
|
+
if (!res.ok) {
|
|
266
|
+
const body = await res.json().catch(() => ({ error: "Unknown error" }));
|
|
267
|
+
console.error(`Error: ${body.error}`);
|
|
268
|
+
process.exit(1);
|
|
269
|
+
}
|
|
270
|
+
console.log(`Uninstalled skill "${skillId}" from ${mindName}.`);
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
var defaultsListCmd = command({
|
|
274
|
+
name: "volute skill defaults list",
|
|
275
|
+
description: "List default skills for new minds",
|
|
276
|
+
flags: {},
|
|
277
|
+
run: async () => {
|
|
278
|
+
const res = await daemonFetch("/api/skills/defaults/list");
|
|
279
|
+
if (!res.ok) {
|
|
280
|
+
const body = await res.json().catch(() => ({ error: "Unknown error" }));
|
|
281
|
+
console.error(`Error: ${body.error}`);
|
|
282
|
+
process.exit(1);
|
|
283
|
+
}
|
|
284
|
+
const { skills } = await res.json();
|
|
285
|
+
console.log("Default skills for new minds:\n");
|
|
286
|
+
for (const s of skills) {
|
|
287
|
+
console.log(` ${s}`);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
var defaultsAddCmd = command({
|
|
292
|
+
name: "volute skill defaults add",
|
|
293
|
+
description: "Add a skill to the defaults",
|
|
294
|
+
args: [{ name: "name", required: true, description: "Skill to add" }],
|
|
295
|
+
flags: {},
|
|
296
|
+
run: async ({ args }) => {
|
|
297
|
+
const skillId = args.name;
|
|
298
|
+
const res = await daemonFetch("/api/skills/defaults/list", {
|
|
299
|
+
method: "POST",
|
|
300
|
+
headers: { "Content-Type": "application/json" },
|
|
301
|
+
body: JSON.stringify({ skill: skillId })
|
|
302
|
+
});
|
|
303
|
+
if (!res.ok) {
|
|
304
|
+
const body = await res.json().catch(() => ({ error: "Unknown error" }));
|
|
305
|
+
console.error(`Error: ${body.error}`);
|
|
306
|
+
process.exit(1);
|
|
307
|
+
}
|
|
308
|
+
console.log(`Added "${skillId}" to default skills.`);
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
var defaultsRemoveCmd = command({
|
|
312
|
+
name: "volute skill defaults remove",
|
|
313
|
+
description: "Remove a skill from the defaults",
|
|
314
|
+
args: [{ name: "name", required: true, description: "Skill to remove" }],
|
|
315
|
+
flags: {},
|
|
316
|
+
run: async ({ args }) => {
|
|
317
|
+
const skillId = args.name;
|
|
318
|
+
const res = await daemonFetch(`/api/skills/defaults/list/${encodeURIComponent(skillId)}`, {
|
|
319
|
+
method: "DELETE"
|
|
320
|
+
});
|
|
321
|
+
if (!res.ok) {
|
|
322
|
+
const body = await res.json().catch(() => ({ error: "Unknown error" }));
|
|
323
|
+
console.error(`Error: ${body.error}`);
|
|
324
|
+
process.exit(1);
|
|
325
|
+
}
|
|
326
|
+
console.log(`Removed "${skillId}" from default skills.`);
|
|
327
|
+
}
|
|
328
|
+
});
|
|
329
|
+
var defaultsCmd = subcommands({
|
|
330
|
+
name: "volute skill defaults",
|
|
331
|
+
description: "Manage default skills for new minds",
|
|
332
|
+
commands: {
|
|
333
|
+
list: {
|
|
334
|
+
description: "List default skills",
|
|
335
|
+
run: defaultsListCmd.execute
|
|
336
|
+
},
|
|
337
|
+
add: {
|
|
338
|
+
description: "Add a skill to the defaults",
|
|
339
|
+
run: defaultsAddCmd.execute
|
|
340
|
+
},
|
|
341
|
+
remove: {
|
|
342
|
+
description: "Remove a skill from the defaults",
|
|
343
|
+
run: defaultsRemoveCmd.execute
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
});
|
|
347
|
+
var cmd = subcommands({
|
|
348
|
+
name: "volute skill",
|
|
349
|
+
description: "Browse, install, and manage skills",
|
|
350
|
+
commands: {
|
|
351
|
+
list: {
|
|
352
|
+
description: "List skills (shared or per-mind with --mind)",
|
|
353
|
+
run: listSkillsCmd.execute
|
|
354
|
+
},
|
|
355
|
+
info: {
|
|
356
|
+
description: "Show details of a shared skill",
|
|
357
|
+
run: infoSkillCmd.execute
|
|
358
|
+
},
|
|
359
|
+
install: {
|
|
360
|
+
description: "Install a shared skill into a mind",
|
|
361
|
+
run: installSkillCmd.execute
|
|
362
|
+
},
|
|
363
|
+
update: {
|
|
364
|
+
description: "Update an installed skill (3-way merge)",
|
|
365
|
+
run: updateSkillCmd.execute
|
|
366
|
+
},
|
|
367
|
+
publish: {
|
|
368
|
+
description: "Publish a mind's skill to the shared repository",
|
|
369
|
+
run: publishSkillCmd.execute
|
|
370
|
+
},
|
|
371
|
+
remove: {
|
|
372
|
+
description: "Remove a shared skill",
|
|
373
|
+
run: removeSkillCmd.execute
|
|
374
|
+
},
|
|
375
|
+
uninstall: {
|
|
376
|
+
description: "Uninstall a skill from a mind",
|
|
377
|
+
run: uninstallSkillCmd.execute
|
|
378
|
+
},
|
|
379
|
+
defaults: {
|
|
380
|
+
description: "Manage default skills for new minds",
|
|
381
|
+
run: defaultsCmd.execute
|
|
382
|
+
}
|
|
383
|
+
},
|
|
384
|
+
footer: "Use --mind <name> or VOLUTE_MIND to identify the mind."
|
|
385
|
+
});
|
|
386
|
+
var run = cmd.execute;
|
|
387
|
+
export {
|
|
388
|
+
run
|
|
389
|
+
};
|
|
@@ -28,8 +28,8 @@ You manage yourself through the `volute` CLI. Your mind name is auto-detected vi
|
|
|
28
28
|
| `volute mind split --list` | List your variants |
|
|
29
29
|
| `volute mind join <variant-name> [--summary "..." --memory "..."]` | Merge a variant back |
|
|
30
30
|
| `volute mind upgrade [--diff] [--continue] [--abort]` | Upgrade your server code (--diff to preview) |
|
|
31
|
-
| `volute
|
|
32
|
-
| `volute
|
|
31
|
+
| `volute chat bridge add <platform>` | Set up a bridge (discord, slack, etc.) |
|
|
32
|
+
| `volute chat bridge remove <platform>` | Remove a bridge |
|
|
33
33
|
| `volute clock add --id <name> --cron "..." --message/--script "..."` | Schedule a recurring task |
|
|
34
34
|
| `volute clock add --id <name> --in <duration> --message/--script "..."` | Set a one-time timer (10m, 1h, 2h30m) |
|
|
35
35
|
| `volute clock list` | List your schedules and timers |
|
|
@@ -41,10 +41,6 @@ You manage yourself through the `volute` CLI. Your mind name is auto-detected vi
|
|
|
41
41
|
| `volute mind profile --description "..."` | Set your description |
|
|
42
42
|
| `volute mind profile --avatar <path>` | Set your avatar image |
|
|
43
43
|
| `volute seed sprout` | Complete orientation and become a full mind |
|
|
44
|
-
| `volute shared status` | See your pending changes vs main |
|
|
45
|
-
| `volute shared merge "<message>"` | Share your changes with all minds |
|
|
46
|
-
| `volute shared pull` | Get latest shared changes from other minds |
|
|
47
|
-
| `volute shared log [--limit N]` | View recent shared history |
|
|
48
44
|
|
|
49
45
|
## Clock
|
|
50
46
|
|
|
@@ -194,6 +190,6 @@ When configuring message routing, read `references/routing.md`.
|
|
|
194
190
|
|
|
195
191
|
When working with variants or upgrades, read `references/variants.md`.
|
|
196
192
|
|
|
197
|
-
When managing shared skills
|
|
193
|
+
When managing shared skills or MCP, read `references/extensions.md`.
|
|
198
194
|
|
|
199
195
|
For email, pages, or git introspection, read `references/integrations.md`.
|
|
@@ -18,19 +18,16 @@ Your system has a shared skill repository that all minds can browse and install
|
|
|
18
18
|
|
|
19
19
|
When you install a skill, it's copied to your skills directory. You can modify it freely — updates use a 3-way merge to preserve your changes. If there are merge conflicts, resolve them like any git conflict.
|
|
20
20
|
|
|
21
|
-
# Shared
|
|
21
|
+
# Shared Pages
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
The pages extension provides collaborative web publishing. Minds can create HTML pages in `home/public/pages/` and share them with other minds.
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
**Conflicts:** If your merge fails due to conflicts, pull the latest (`volute shared pull`), reconcile the conflicting files, and merge again. If pull itself conflicts (your uncommitted changes clash), reset to main with `git -C shared reset --hard main`, re-apply your changes, and merge.
|
|
32
|
-
|
|
33
|
-
**Shared pages:** The `shared/pages/` directory is the system-level website. Any mind can contribute. Publishing is handled via the pages extension API.
|
|
25
|
+
| Command | Purpose |
|
|
26
|
+
|---------|---------|
|
|
27
|
+
| `volute pages publish` | Publish your pages (copy to shared snapshot) |
|
|
28
|
+
| `volute pages list` | List pages with publish status |
|
|
29
|
+
| `volute pages pull` | Pull latest shared page changes from other minds |
|
|
30
|
+
| `volute pages log` | View shared pages commit history |
|
|
34
31
|
|
|
35
32
|
# MCP Configuration
|
|
36
33
|
|
|
@@ -27,13 +27,13 @@ import {
|
|
|
27
27
|
syncBuiltinSkills,
|
|
28
28
|
uninstallSkill,
|
|
29
29
|
updateSkill
|
|
30
|
-
} from "./chunk-
|
|
31
|
-
import "./chunk-
|
|
32
|
-
import "./chunk-
|
|
33
|
-
import "./chunk-
|
|
34
|
-
import "./chunk-
|
|
35
|
-
import "./chunk-
|
|
36
|
-
import "./chunk-
|
|
30
|
+
} from "./chunk-IJHIXLVN.js";
|
|
31
|
+
import "./chunk-BKF4WQCY.js";
|
|
32
|
+
import "./chunk-AN2W47GW.js";
|
|
33
|
+
import "./chunk-VHJRZM2S.js";
|
|
34
|
+
import "./chunk-BMZQYACC.js";
|
|
35
|
+
import "./chunk-BDYXIWA5.js";
|
|
36
|
+
import "./chunk-5N7Y5WAM.js";
|
|
37
37
|
import "./chunk-7KJOFUNN.js";
|
|
38
38
|
export {
|
|
39
39
|
SEED_SKILLS,
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
SleepManager,
|
|
4
|
+
getSleepManager,
|
|
5
|
+
getSleepManagerIfReady,
|
|
6
|
+
initSleepManager,
|
|
7
|
+
matchesGlob
|
|
8
|
+
} from "./chunk-WJPROOU5.js";
|
|
9
|
+
import "./chunk-5XJYUFZH.js";
|
|
10
|
+
import "./chunk-AOB6GVRM.js";
|
|
11
|
+
import "./chunk-IJHIXLVN.js";
|
|
12
|
+
import "./chunk-QWTR6AWZ.js";
|
|
13
|
+
import "./chunk-N446KRP7.js";
|
|
14
|
+
import "./chunk-QHG4OMZL.js";
|
|
15
|
+
import "./chunk-XRQSAMX2.js";
|
|
16
|
+
import "./chunk-WZRZFFCL.js";
|
|
17
|
+
import "./chunk-CORXD635.js";
|
|
18
|
+
import "./chunk-ZSR72JB3.js";
|
|
19
|
+
import "./chunk-PWQ2ITYG.js";
|
|
20
|
+
import "./chunk-A2ZLHBHG.js";
|
|
21
|
+
import "./chunk-FT5KETXZ.js";
|
|
22
|
+
import "./chunk-BKF4WQCY.js";
|
|
23
|
+
import "./chunk-AN2W47GW.js";
|
|
24
|
+
import "./chunk-VHJRZM2S.js";
|
|
25
|
+
import "./chunk-BMZQYACC.js";
|
|
26
|
+
import "./chunk-BDYXIWA5.js";
|
|
27
|
+
import "./chunk-5N7Y5WAM.js";
|
|
28
|
+
import "./chunk-7KJOFUNN.js";
|
|
29
|
+
export {
|
|
30
|
+
SleepManager,
|
|
31
|
+
getSleepManager,
|
|
32
|
+
getSleepManagerIfReady,
|
|
33
|
+
initSleepManager,
|
|
34
|
+
matchesGlob
|
|
35
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
ensureSpiritProject,
|
|
4
|
+
getSpiritModel,
|
|
5
|
+
spiritDir,
|
|
6
|
+
syncSpiritTemplate
|
|
7
|
+
} from "./chunk-5XJYUFZH.js";
|
|
8
|
+
import "./chunk-AOB6GVRM.js";
|
|
9
|
+
import "./chunk-IJHIXLVN.js";
|
|
10
|
+
import "./chunk-FT5KETXZ.js";
|
|
11
|
+
import "./chunk-BKF4WQCY.js";
|
|
12
|
+
import "./chunk-AN2W47GW.js";
|
|
13
|
+
import "./chunk-VHJRZM2S.js";
|
|
14
|
+
import "./chunk-BMZQYACC.js";
|
|
15
|
+
import "./chunk-BDYXIWA5.js";
|
|
16
|
+
import "./chunk-5N7Y5WAM.js";
|
|
17
|
+
import "./chunk-7KJOFUNN.js";
|
|
18
|
+
export {
|
|
19
|
+
ensureSpiritProject,
|
|
20
|
+
getSpiritModel,
|
|
21
|
+
spiritDir,
|
|
22
|
+
syncSpiritTemplate
|
|
23
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
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 "./chunk-7KJOFUNN.js";
|
|
10
|
+
|
|
11
|
+
// packages/cli/src/commands/split.ts
|
|
12
|
+
var cmd = command({
|
|
13
|
+
name: "volute mind split",
|
|
14
|
+
description: "Create an experimental variant",
|
|
15
|
+
args: [{ name: "name", required: true, description: "Name for the variant" }],
|
|
16
|
+
flags: {
|
|
17
|
+
from: { type: "string", description: "Parent mind to split from" },
|
|
18
|
+
soul: { type: "string", description: "Custom SOUL.md content" },
|
|
19
|
+
port: { type: "number", description: "Port for variant server" },
|
|
20
|
+
"no-start": { type: "boolean", description: "Don't start the variant" },
|
|
21
|
+
json: { type: "boolean", description: "Output JSON result" }
|
|
22
|
+
},
|
|
23
|
+
run: async ({ args, flags }) => {
|
|
24
|
+
const mindName = resolveMindName({ mind: flags.from });
|
|
25
|
+
const variantName = args.name;
|
|
26
|
+
const { soul, port, json } = flags;
|
|
27
|
+
const noStart = flags["no-start"];
|
|
28
|
+
if (!json) console.log("Creating variant via daemon...");
|
|
29
|
+
const { daemonFetch } = await import("./daemon-client-RVIKXGFQ.js");
|
|
30
|
+
const { getClient, urlOf } = await import("./api-client-3A77HMH7.js");
|
|
31
|
+
const client = getClient();
|
|
32
|
+
const res = await daemonFetch(
|
|
33
|
+
urlOf(client.api.minds[":name"].variants.$url({ param: { name: mindName } })),
|
|
34
|
+
{
|
|
35
|
+
method: "POST",
|
|
36
|
+
headers: { "Content-Type": "application/json" },
|
|
37
|
+
body: JSON.stringify({
|
|
38
|
+
name: variantName,
|
|
39
|
+
...soul && { soul },
|
|
40
|
+
...port && { port },
|
|
41
|
+
...noStart && { noStart }
|
|
42
|
+
})
|
|
43
|
+
}
|
|
44
|
+
);
|
|
45
|
+
const data = await res.json();
|
|
46
|
+
if (!res.ok) {
|
|
47
|
+
console.error(data.error ?? "Failed to create variant");
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
if (json) {
|
|
51
|
+
console.log(JSON.stringify(data.variant, null, 2));
|
|
52
|
+
} else {
|
|
53
|
+
console.log(`
|
|
54
|
+
Variant created: ${variantName}`);
|
|
55
|
+
console.log(` Branch: ${data.variant?.branch}`);
|
|
56
|
+
console.log(` Path: ${data.variant?.path}`);
|
|
57
|
+
console.log(` Port: ${data.variant?.port}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
var run = cmd.execute;
|
|
62
|
+
export {
|
|
63
|
+
run
|
|
64
|
+
};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import "./chunk-7KJOFUNN.js";
|
|
3
3
|
|
|
4
|
-
// src/commands/sprout.ts
|
|
4
|
+
// packages/cli/src/commands/sprout.ts
|
|
5
5
|
async function run(args) {
|
|
6
6
|
console.error("Note: `volute mind sprout` is now `volute seed sprout`");
|
|
7
|
-
await import("./seed-sprout-
|
|
7
|
+
await import("./seed-sprout-JYXGXOP3.js").then((m) => m.run(args));
|
|
8
8
|
}
|
|
9
9
|
export {
|
|
10
10
|
run
|
|
@@ -0,0 +1,39 @@
|
|
|
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
|
+
getClient,
|
|
11
|
+
urlOf
|
|
12
|
+
} from "./chunk-LOPXTW6H.js";
|
|
13
|
+
import "./chunk-7KJOFUNN.js";
|
|
14
|
+
|
|
15
|
+
// packages/cli/src/commands/start.ts
|
|
16
|
+
var cmd = command({
|
|
17
|
+
name: "volute mind start",
|
|
18
|
+
description: "Start a mind",
|
|
19
|
+
args: [{ name: "name", required: true, description: "Mind to start" }],
|
|
20
|
+
flags: {},
|
|
21
|
+
async run({ args }) {
|
|
22
|
+
const name = args.name;
|
|
23
|
+
const client = getClient();
|
|
24
|
+
const res = await daemonFetch(
|
|
25
|
+
urlOf(client.api.minds[":name"].start.$url({ param: { name } })),
|
|
26
|
+
{ method: "POST" }
|
|
27
|
+
);
|
|
28
|
+
const data = await res.json();
|
|
29
|
+
if (!res.ok) {
|
|
30
|
+
console.error(data.error || "Failed to start mind");
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
console.log(`${name} started on port ${data.port}`);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
var run = cmd.execute;
|
|
37
|
+
export {
|
|
38
|
+
run
|
|
39
|
+
};
|