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
package/dist/skill-DKNYJS4P.js
DELETED
|
@@ -1,362 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
isCompact
|
|
4
|
-
} from "./chunk-FYCALD4Q.js";
|
|
5
|
-
import {
|
|
6
|
-
resolveMindName
|
|
7
|
-
} from "./chunk-NAOW2CLO.js";
|
|
8
|
-
import {
|
|
9
|
-
getClient,
|
|
10
|
-
urlOf
|
|
11
|
-
} from "./chunk-4RQBJWQX.js";
|
|
12
|
-
import {
|
|
13
|
-
parseArgs
|
|
14
|
-
} from "./chunk-D424ZQGI.js";
|
|
15
|
-
import {
|
|
16
|
-
daemonFetch
|
|
17
|
-
} from "./chunk-PLDWHR4D.js";
|
|
18
|
-
import "./chunk-N7BLAHNE.js";
|
|
19
|
-
import "./chunk-4JSR7YO7.js";
|
|
20
|
-
import "./chunk-7KJOFUNN.js";
|
|
21
|
-
|
|
22
|
-
// src/commands/skill.ts
|
|
23
|
-
async function run(args) {
|
|
24
|
-
const subcommand = args[0];
|
|
25
|
-
switch (subcommand) {
|
|
26
|
-
case "list":
|
|
27
|
-
await listSkills(args.slice(1));
|
|
28
|
-
break;
|
|
29
|
-
case "info":
|
|
30
|
-
await infoSkill(args.slice(1));
|
|
31
|
-
break;
|
|
32
|
-
case "install":
|
|
33
|
-
await installSkill(args.slice(1));
|
|
34
|
-
break;
|
|
35
|
-
case "update":
|
|
36
|
-
await updateSkill(args.slice(1));
|
|
37
|
-
break;
|
|
38
|
-
case "publish":
|
|
39
|
-
await publishSkill(args.slice(1));
|
|
40
|
-
break;
|
|
41
|
-
case "remove":
|
|
42
|
-
await removeSkill(args.slice(1));
|
|
43
|
-
break;
|
|
44
|
-
case "uninstall":
|
|
45
|
-
await uninstallSkill(args.slice(1));
|
|
46
|
-
break;
|
|
47
|
-
case "defaults":
|
|
48
|
-
await manageDefaults(args.slice(1));
|
|
49
|
-
break;
|
|
50
|
-
case "--help":
|
|
51
|
-
case "-h":
|
|
52
|
-
case void 0:
|
|
53
|
-
printUsage();
|
|
54
|
-
break;
|
|
55
|
-
default:
|
|
56
|
-
console.error(`Unknown subcommand: ${subcommand}`);
|
|
57
|
-
printUsage();
|
|
58
|
-
process.exit(1);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
function printUsage() {
|
|
62
|
-
console.log(`Usage:
|
|
63
|
-
volute skill list List shared skills available to install
|
|
64
|
-
volute skill list --mind <name> List installed skills for a mind
|
|
65
|
-
volute skill info <name> Show details of a shared skill
|
|
66
|
-
volute skill install <name> --mind Install a shared skill into a mind
|
|
67
|
-
volute skill update <name> --mind Update an installed skill (3-way merge)
|
|
68
|
-
volute skill update --all --mind Update all installed skills
|
|
69
|
-
volute skill publish <name> --mind Publish a mind's skill to the shared repository
|
|
70
|
-
volute skill remove <name> Remove a shared skill
|
|
71
|
-
volute skill uninstall <name> --mind Uninstall a skill from a mind
|
|
72
|
-
volute skill defaults List default skills for new minds
|
|
73
|
-
volute skill defaults add <name> Add a skill to the default set
|
|
74
|
-
volute skill defaults remove <name> Remove a skill from the default set`);
|
|
75
|
-
}
|
|
76
|
-
async function listSkills(args) {
|
|
77
|
-
const { flags } = parseArgs(args, { mind: { type: "string" } });
|
|
78
|
-
if (flags.mind || process.env.VOLUTE_MIND) {
|
|
79
|
-
const mindName = resolveMindName(flags);
|
|
80
|
-
const client = getClient();
|
|
81
|
-
const url = urlOf(client.api.minds[":name"].skills.$url({ param: { name: mindName } }));
|
|
82
|
-
const res = await daemonFetch(url);
|
|
83
|
-
if (!res.ok) {
|
|
84
|
-
const body = await res.json().catch(() => ({ error: "Unknown error" }));
|
|
85
|
-
console.error(`Error: ${body.error}`);
|
|
86
|
-
process.exit(1);
|
|
87
|
-
}
|
|
88
|
-
const skills = await res.json();
|
|
89
|
-
if (skills.length === 0) {
|
|
90
|
-
console.log("No skills installed.");
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
const compact = isCompact();
|
|
94
|
-
console.log(`Skills for ${mindName}:${compact ? "" : "\n"}`);
|
|
95
|
-
for (const s of skills) {
|
|
96
|
-
const update = s.updateAvailable ? " (update available)" : "";
|
|
97
|
-
const source = s.upstream ? ` [shared:${s.upstream.source} v${s.upstream.version}]` : "";
|
|
98
|
-
console.log(` ${s.id} \u2014 ${s.name}${source}${update}`);
|
|
99
|
-
}
|
|
100
|
-
} else {
|
|
101
|
-
const client = getClient();
|
|
102
|
-
const url = urlOf(client.api.skills.$url());
|
|
103
|
-
const res = await daemonFetch(url);
|
|
104
|
-
if (!res.ok) {
|
|
105
|
-
const body = await res.json().catch(() => ({ error: "Unknown error" }));
|
|
106
|
-
console.error(`Error: ${body.error}`);
|
|
107
|
-
process.exit(1);
|
|
108
|
-
}
|
|
109
|
-
const skills = await res.json();
|
|
110
|
-
if (skills.length === 0) {
|
|
111
|
-
console.log("No shared skills available.");
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
const compact = isCompact();
|
|
115
|
-
console.log(`Shared skills:${compact ? "" : "\n"}`);
|
|
116
|
-
for (const s of skills) {
|
|
117
|
-
console.log(` ${s.id} \u2014 ${s.name} (v${s.version}, by ${s.author})`);
|
|
118
|
-
if (s.description && !compact) console.log(` ${s.description}`);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
async function infoSkill(args) {
|
|
123
|
-
const { positional } = parseArgs(args, {});
|
|
124
|
-
const id = positional[0];
|
|
125
|
-
if (!id) {
|
|
126
|
-
console.error("Usage: volute skill info <name>");
|
|
127
|
-
process.exit(1);
|
|
128
|
-
}
|
|
129
|
-
const client = getClient();
|
|
130
|
-
const url = urlOf(client.api.skills[":id"].$url({ param: { id } }));
|
|
131
|
-
const res = await daemonFetch(url);
|
|
132
|
-
if (!res.ok) {
|
|
133
|
-
const body = await res.json().catch(() => ({ error: "Unknown error" }));
|
|
134
|
-
console.error(`Error: ${body.error}`);
|
|
135
|
-
process.exit(1);
|
|
136
|
-
}
|
|
137
|
-
const skill = await res.json();
|
|
138
|
-
console.log(`${skill.name} (${skill.id})`);
|
|
139
|
-
console.log(` Version: ${skill.version}`);
|
|
140
|
-
console.log(` Author: ${skill.author}`);
|
|
141
|
-
if (skill.description) console.log(` Description: ${skill.description}`);
|
|
142
|
-
console.log(` Files: ${skill.files.join(", ")}`);
|
|
143
|
-
}
|
|
144
|
-
async function installSkill(args) {
|
|
145
|
-
const { positional, flags } = parseArgs(args, { mind: { type: "string" } });
|
|
146
|
-
const mindName = resolveMindName(flags);
|
|
147
|
-
const skillId = positional[0];
|
|
148
|
-
if (!skillId) {
|
|
149
|
-
console.error("Usage: volute skill install <name> [--mind <name>]");
|
|
150
|
-
process.exit(1);
|
|
151
|
-
}
|
|
152
|
-
const client = getClient();
|
|
153
|
-
const url = urlOf(client.api.minds[":name"].skills.install.$url({ param: { name: mindName } }));
|
|
154
|
-
const res = await daemonFetch(url, {
|
|
155
|
-
method: "POST",
|
|
156
|
-
headers: { "Content-Type": "application/json" },
|
|
157
|
-
body: JSON.stringify({ skillId })
|
|
158
|
-
});
|
|
159
|
-
if (!res.ok) {
|
|
160
|
-
const body2 = await res.json().catch(() => ({ error: "Unknown error" }));
|
|
161
|
-
console.error(`Error: ${body2.error}`);
|
|
162
|
-
process.exit(1);
|
|
163
|
-
}
|
|
164
|
-
const body = await res.json().catch(() => ({}));
|
|
165
|
-
console.log(`Installed skill "${skillId}" into ${mindName}.`);
|
|
166
|
-
if (body.npmInstalled?.length) {
|
|
167
|
-
console.log(`Installed npm dependencies: ${body.npmInstalled.join(", ")}`);
|
|
168
|
-
}
|
|
169
|
-
if (body.installNotes) {
|
|
170
|
-
console.log("");
|
|
171
|
-
console.log(body.installNotes);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
async function updateSkill(args) {
|
|
175
|
-
const { positional, flags } = parseArgs(args, {
|
|
176
|
-
mind: { type: "string" },
|
|
177
|
-
all: { type: "boolean" }
|
|
178
|
-
});
|
|
179
|
-
const mindName = resolveMindName(flags);
|
|
180
|
-
if (flags.all) {
|
|
181
|
-
const client = getClient();
|
|
182
|
-
const listUrl = urlOf(client.api.minds[":name"].skills.$url({ param: { name: mindName } }));
|
|
183
|
-
const listRes = await daemonFetch(listUrl);
|
|
184
|
-
if (!listRes.ok) {
|
|
185
|
-
const body = await listRes.json().catch(() => ({ error: "Unknown error" }));
|
|
186
|
-
console.error(`Error: ${body.error}`);
|
|
187
|
-
process.exit(1);
|
|
188
|
-
}
|
|
189
|
-
const skills = await listRes.json();
|
|
190
|
-
const updatable = skills.filter((s) => s.updateAvailable && s.upstream);
|
|
191
|
-
if (updatable.length === 0) {
|
|
192
|
-
console.log("All skills are up to date.");
|
|
193
|
-
return;
|
|
194
|
-
}
|
|
195
|
-
let failures = 0;
|
|
196
|
-
for (const s of updatable) {
|
|
197
|
-
const ok2 = await doUpdate(mindName, s.id);
|
|
198
|
-
if (!ok2) failures++;
|
|
199
|
-
}
|
|
200
|
-
if (failures > 0) process.exit(1);
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
const skillId = positional[0];
|
|
204
|
-
if (!skillId) {
|
|
205
|
-
console.error("Usage: volute skill update <name> [--mind <name>] [--all]");
|
|
206
|
-
process.exit(1);
|
|
207
|
-
}
|
|
208
|
-
const ok = await doUpdate(mindName, skillId);
|
|
209
|
-
if (!ok) process.exit(1);
|
|
210
|
-
}
|
|
211
|
-
async function doUpdate(mindName, skillId) {
|
|
212
|
-
const client = getClient();
|
|
213
|
-
const url = urlOf(client.api.minds[":name"].skills.update.$url({ param: { name: mindName } }));
|
|
214
|
-
const res = await daemonFetch(url, {
|
|
215
|
-
method: "POST",
|
|
216
|
-
headers: { "Content-Type": "application/json" },
|
|
217
|
-
body: JSON.stringify({ skillId })
|
|
218
|
-
});
|
|
219
|
-
if (!res.ok) {
|
|
220
|
-
const body = await res.json().catch(() => ({ error: "Unknown error" }));
|
|
221
|
-
console.error(`Error updating ${skillId}: ${body.error}`);
|
|
222
|
-
return false;
|
|
223
|
-
}
|
|
224
|
-
const result = await res.json();
|
|
225
|
-
switch (result.status) {
|
|
226
|
-
case "up-to-date":
|
|
227
|
-
console.log(`${skillId}: already up to date.`);
|
|
228
|
-
break;
|
|
229
|
-
case "updated":
|
|
230
|
-
console.log(`${skillId}: updated successfully.`);
|
|
231
|
-
break;
|
|
232
|
-
case "conflict":
|
|
233
|
-
console.log(`${skillId}: updated with conflicts in:`);
|
|
234
|
-
for (const f of result.conflictFiles ?? []) {
|
|
235
|
-
console.log(` ${f}`);
|
|
236
|
-
}
|
|
237
|
-
console.log("Resolve conflicts and commit manually.");
|
|
238
|
-
break;
|
|
239
|
-
}
|
|
240
|
-
return true;
|
|
241
|
-
}
|
|
242
|
-
async function publishSkill(args) {
|
|
243
|
-
const { positional, flags } = parseArgs(args, { mind: { type: "string" } });
|
|
244
|
-
const mindName = resolveMindName(flags);
|
|
245
|
-
const skillId = positional[0];
|
|
246
|
-
if (!skillId) {
|
|
247
|
-
console.error("Usage: volute skill publish <name> [--mind <name>]");
|
|
248
|
-
process.exit(1);
|
|
249
|
-
}
|
|
250
|
-
const client = getClient();
|
|
251
|
-
const url = urlOf(client.api.minds[":name"].skills.publish.$url({ param: { name: mindName } }));
|
|
252
|
-
const res = await daemonFetch(url, {
|
|
253
|
-
method: "POST",
|
|
254
|
-
headers: { "Content-Type": "application/json" },
|
|
255
|
-
body: JSON.stringify({ skillId })
|
|
256
|
-
});
|
|
257
|
-
if (!res.ok) {
|
|
258
|
-
const body = await res.json().catch(() => ({ error: "Unknown error" }));
|
|
259
|
-
console.error(`Error: ${body.error}`);
|
|
260
|
-
process.exit(1);
|
|
261
|
-
}
|
|
262
|
-
const skill = await res.json();
|
|
263
|
-
console.log(`Published skill "${skillId}" (v${skill.version}).`);
|
|
264
|
-
}
|
|
265
|
-
async function removeSkill(args) {
|
|
266
|
-
const { positional } = parseArgs(args, {});
|
|
267
|
-
const id = positional[0];
|
|
268
|
-
if (!id) {
|
|
269
|
-
console.error("Usage: volute skill remove <name>");
|
|
270
|
-
process.exit(1);
|
|
271
|
-
}
|
|
272
|
-
const client = getClient();
|
|
273
|
-
const url = urlOf(client.api.skills[":id"].$url({ param: { id } }));
|
|
274
|
-
const res = await daemonFetch(url, { method: "DELETE" });
|
|
275
|
-
if (!res.ok) {
|
|
276
|
-
const body = await res.json().catch(() => ({ error: "Unknown error" }));
|
|
277
|
-
console.error(`Error: ${body.error}`);
|
|
278
|
-
process.exit(1);
|
|
279
|
-
}
|
|
280
|
-
console.log(`Removed shared skill "${id}".`);
|
|
281
|
-
}
|
|
282
|
-
async function manageDefaults(args) {
|
|
283
|
-
const action = args[0];
|
|
284
|
-
if (!action || action === "list") {
|
|
285
|
-
const res = await daemonFetch("/api/skills/defaults/list");
|
|
286
|
-
if (!res.ok) {
|
|
287
|
-
const body = await res.json().catch(() => ({ error: "Unknown error" }));
|
|
288
|
-
console.error(`Error: ${body.error}`);
|
|
289
|
-
process.exit(1);
|
|
290
|
-
}
|
|
291
|
-
const { skills } = await res.json();
|
|
292
|
-
console.log("Default skills for new minds:\n");
|
|
293
|
-
for (const s of skills) {
|
|
294
|
-
console.log(` ${s}`);
|
|
295
|
-
}
|
|
296
|
-
return;
|
|
297
|
-
}
|
|
298
|
-
if (action === "add") {
|
|
299
|
-
const skillId = args[1];
|
|
300
|
-
if (!skillId) {
|
|
301
|
-
console.error("Usage: volute skill defaults add <name>");
|
|
302
|
-
process.exit(1);
|
|
303
|
-
}
|
|
304
|
-
const res = await daemonFetch("/api/skills/defaults/list", {
|
|
305
|
-
method: "POST",
|
|
306
|
-
headers: { "Content-Type": "application/json" },
|
|
307
|
-
body: JSON.stringify({ skill: skillId })
|
|
308
|
-
});
|
|
309
|
-
if (!res.ok) {
|
|
310
|
-
const body = await res.json().catch(() => ({ error: "Unknown error" }));
|
|
311
|
-
console.error(`Error: ${body.error}`);
|
|
312
|
-
process.exit(1);
|
|
313
|
-
}
|
|
314
|
-
console.log(`Added "${skillId}" to default skills.`);
|
|
315
|
-
return;
|
|
316
|
-
}
|
|
317
|
-
if (action === "remove") {
|
|
318
|
-
const skillId = args[1];
|
|
319
|
-
if (!skillId) {
|
|
320
|
-
console.error("Usage: volute skill defaults remove <name>");
|
|
321
|
-
process.exit(1);
|
|
322
|
-
}
|
|
323
|
-
const res = await daemonFetch(`/api/skills/defaults/list/${encodeURIComponent(skillId)}`, {
|
|
324
|
-
method: "DELETE"
|
|
325
|
-
});
|
|
326
|
-
if (!res.ok) {
|
|
327
|
-
const body = await res.json().catch(() => ({ error: "Unknown error" }));
|
|
328
|
-
console.error(`Error: ${body.error}`);
|
|
329
|
-
process.exit(1);
|
|
330
|
-
}
|
|
331
|
-
console.log(`Removed "${skillId}" from default skills.`);
|
|
332
|
-
return;
|
|
333
|
-
}
|
|
334
|
-
console.error(`Unknown defaults action: ${action}`);
|
|
335
|
-
console.log("Usage: volute skill defaults [add|remove] [<name>]");
|
|
336
|
-
process.exit(1);
|
|
337
|
-
}
|
|
338
|
-
async function uninstallSkill(args) {
|
|
339
|
-
const { positional, flags } = parseArgs(args, { mind: { type: "string" } });
|
|
340
|
-
const mindName = resolveMindName(flags);
|
|
341
|
-
const skillId = positional[0];
|
|
342
|
-
if (!skillId) {
|
|
343
|
-
console.error("Usage: volute skill uninstall <name> [--mind <name>]");
|
|
344
|
-
process.exit(1);
|
|
345
|
-
}
|
|
346
|
-
const client = getClient();
|
|
347
|
-
const url = urlOf(
|
|
348
|
-
client.api.minds[":name"].skills[":skill"].$url({
|
|
349
|
-
param: { name: mindName, skill: skillId }
|
|
350
|
-
})
|
|
351
|
-
);
|
|
352
|
-
const res = await daemonFetch(url, { method: "DELETE" });
|
|
353
|
-
if (!res.ok) {
|
|
354
|
-
const body = await res.json().catch(() => ({ error: "Unknown error" }));
|
|
355
|
-
console.error(`Error: ${body.error}`);
|
|
356
|
-
process.exit(1);
|
|
357
|
-
}
|
|
358
|
-
console.log(`Uninstalled skill "${skillId}" from ${mindName}.`);
|
|
359
|
-
}
|
|
360
|
-
export {
|
|
361
|
-
run
|
|
362
|
-
};
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Shared Files
|
|
3
|
-
description: This skill should be used when working with shared files, the shared folder, collaborating with other minds, sharing files between minds, merging shared changes, pulling shared updates, or checking shared status.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Shared Files
|
|
7
|
-
|
|
8
|
-
The `shared/` folder in your home directory is a collaborative space backed by a git repo. Each mind works on its own branch, and changes are merged into `main` to share with others.
|
|
9
|
-
|
|
10
|
-
## Before working
|
|
11
|
-
|
|
12
|
-
Pull the latest changes from main before starting work:
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
tsx .claude/skills/shared-files/scripts/pull.ts
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## Reading and writing files
|
|
19
|
-
|
|
20
|
-
Just use files in `shared/` normally — they auto-commit like everything else in your home directory.
|
|
21
|
-
|
|
22
|
-
## Merging your changes to main
|
|
23
|
-
|
|
24
|
-
When you're ready to share your work with other minds:
|
|
25
|
-
|
|
26
|
-
```bash
|
|
27
|
-
tsx .claude/skills/shared-files/scripts/merge.ts "description of changes"
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
This squash-merges your branch into main and resets your branch to the new main. If there are conflicts, pull first, reconcile, and try again.
|
|
31
|
-
|
|
32
|
-
## Viewing history
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
git -C shared log --oneline main
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
## Checking status
|
|
39
|
-
|
|
40
|
-
See what you've changed compared to main:
|
|
41
|
-
|
|
42
|
-
```bash
|
|
43
|
-
git -C shared diff main...HEAD --stat
|
|
44
|
-
```
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env tsx
|
|
2
|
-
/**
|
|
3
|
-
* Merge the mind's shared branch into main via the daemon API.
|
|
4
|
-
* Usage: tsx merge.ts "commit message"
|
|
5
|
-
*/
|
|
6
|
-
import { execFileSync } from "node:child_process";
|
|
7
|
-
import { resolve } from "node:path";
|
|
8
|
-
|
|
9
|
-
const message = process.argv[2];
|
|
10
|
-
if (!message) {
|
|
11
|
-
console.error('Usage: tsx merge.ts "commit message"');
|
|
12
|
-
process.exit(1);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const mind = process.env.VOLUTE_MIND;
|
|
16
|
-
const port = process.env.VOLUTE_DAEMON_PORT;
|
|
17
|
-
const token = process.env.VOLUTE_DAEMON_TOKEN;
|
|
18
|
-
|
|
19
|
-
if (!mind || !port || !token) {
|
|
20
|
-
console.error("Missing VOLUTE_MIND, VOLUTE_DAEMON_PORT, or VOLUTE_DAEMON_TOKEN");
|
|
21
|
-
process.exit(1);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
// Commit any pending changes in the worktree first
|
|
25
|
-
const worktree = resolve("shared");
|
|
26
|
-
try {
|
|
27
|
-
const status = execFileSync("git", ["status", "--porcelain"], {
|
|
28
|
-
cwd: worktree,
|
|
29
|
-
encoding: "utf-8",
|
|
30
|
-
}).trim();
|
|
31
|
-
if (status) {
|
|
32
|
-
execFileSync("git", ["add", "-A"], { cwd: worktree, stdio: "ignore" });
|
|
33
|
-
execFileSync("git", ["commit", "--author", `${mind} <${mind}@volute>`, "-m", `wip: ${mind}`], {
|
|
34
|
-
cwd: worktree,
|
|
35
|
-
stdio: "ignore",
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
} catch (err) {
|
|
39
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
40
|
-
console.error(`Failed to commit pending changes in shared worktree: ${msg}`);
|
|
41
|
-
process.exit(1);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// Call daemon merge endpoint
|
|
45
|
-
const url = `http://localhost:${port}/api/minds/${encodeURIComponent(mind)}/shared/merge`;
|
|
46
|
-
let res: Response;
|
|
47
|
-
try {
|
|
48
|
-
res = await fetch(url, {
|
|
49
|
-
method: "POST",
|
|
50
|
-
headers: {
|
|
51
|
-
"Content-Type": "application/json",
|
|
52
|
-
Authorization: `Bearer ${token}`,
|
|
53
|
-
},
|
|
54
|
-
body: JSON.stringify({ message }),
|
|
55
|
-
});
|
|
56
|
-
} catch {
|
|
57
|
-
console.error(`Failed to reach daemon at localhost:${port} — is the daemon running?`);
|
|
58
|
-
process.exit(1);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
if (!res.ok) {
|
|
62
|
-
const body = (await res.json().catch(() => ({}))) as { error?: string };
|
|
63
|
-
console.error(body.error ?? `Server responded with ${res.status}`);
|
|
64
|
-
process.exit(1);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
const result = (await res.json()) as { ok: boolean; conflicts?: boolean; message?: string };
|
|
68
|
-
if (result.conflicts) {
|
|
69
|
-
console.error("Merge conflicts detected. Pull the latest changes, reconcile, and try again.");
|
|
70
|
-
process.exit(1);
|
|
71
|
-
}
|
|
72
|
-
console.log(result.message ?? "Merged successfully.");
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env tsx
|
|
2
|
-
/**
|
|
3
|
-
* Pull latest shared changes by rebasing onto main.
|
|
4
|
-
* Usage: tsx pull.ts
|
|
5
|
-
*/
|
|
6
|
-
import { execFileSync } from "node:child_process";
|
|
7
|
-
import { resolve } from "node:path";
|
|
8
|
-
|
|
9
|
-
const mind = process.env.VOLUTE_MIND;
|
|
10
|
-
if (!mind) {
|
|
11
|
-
console.error("Missing VOLUTE_MIND env var");
|
|
12
|
-
process.exit(1);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const worktree = resolve("shared");
|
|
16
|
-
|
|
17
|
-
// Commit any pending changes first
|
|
18
|
-
try {
|
|
19
|
-
const status = execFileSync("git", ["status", "--porcelain"], {
|
|
20
|
-
cwd: worktree,
|
|
21
|
-
encoding: "utf-8",
|
|
22
|
-
}).trim();
|
|
23
|
-
if (status) {
|
|
24
|
-
execFileSync("git", ["add", "-A"], { cwd: worktree, stdio: "ignore" });
|
|
25
|
-
execFileSync("git", ["commit", "--author", `${mind} <${mind}@volute>`, "-m", `wip: ${mind}`], {
|
|
26
|
-
cwd: worktree,
|
|
27
|
-
stdio: "ignore",
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
} catch (err) {
|
|
31
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
32
|
-
console.error(`Failed to commit pending changes in shared worktree: ${msg}`);
|
|
33
|
-
process.exit(1);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
// Rebase onto main
|
|
37
|
-
try {
|
|
38
|
-
execFileSync("git", ["rebase", "main"], { cwd: worktree, stdio: "ignore" });
|
|
39
|
-
console.log("Pulled latest shared changes.");
|
|
40
|
-
} catch {
|
|
41
|
-
// Abort failed rebase
|
|
42
|
-
try {
|
|
43
|
-
execFileSync("git", ["rebase", "--abort"], { cwd: worktree, stdio: "ignore" });
|
|
44
|
-
} catch {
|
|
45
|
-
console.error("Rebase failed and abort failed — shared worktree may need manual repair.");
|
|
46
|
-
process.exit(1);
|
|
47
|
-
}
|
|
48
|
-
console.error(
|
|
49
|
-
"Rebase failed — your branch conflicts with main. Resolve the conflicting files and commit, then pull again.",
|
|
50
|
-
);
|
|
51
|
-
process.exit(1);
|
|
52
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
SleepManager,
|
|
4
|
-
getSleepManager,
|
|
5
|
-
getSleepManagerIfReady,
|
|
6
|
-
initSleepManager,
|
|
7
|
-
matchesGlob
|
|
8
|
-
} from "./chunk-TAHX36HZ.js";
|
|
9
|
-
import "./chunk-CVL5IGIR.js";
|
|
10
|
-
import "./chunk-B2BVAIZ4.js";
|
|
11
|
-
import "./chunk-G53F3JA4.js";
|
|
12
|
-
import "./chunk-N3DNFPVA.js";
|
|
13
|
-
import "./chunk-OYAKCAVY.js";
|
|
14
|
-
import "./chunk-V45JXOWY.js";
|
|
15
|
-
import "./chunk-IS7WJ56Q.js";
|
|
16
|
-
import "./chunk-BTWAGDV5.js";
|
|
17
|
-
import "./chunk-M3K5AARV.js";
|
|
18
|
-
import "./chunk-PB65JZK2.js";
|
|
19
|
-
import "./chunk-BM474GX6.js";
|
|
20
|
-
import "./chunk-E5C7OWZ2.js";
|
|
21
|
-
import "./chunk-XWXBJQBE.js";
|
|
22
|
-
import "./chunk-BFWHBQK4.js";
|
|
23
|
-
import "./chunk-YUIHSKR6.js";
|
|
24
|
-
import "./chunk-U5BTYSAL.js";
|
|
25
|
-
import "./chunk-BDK73LK6.js";
|
|
26
|
-
import "./chunk-6OWJXUAR.js";
|
|
27
|
-
import "./chunk-N7BLAHNE.js";
|
|
28
|
-
import "./chunk-4JSR7YO7.js";
|
|
29
|
-
import "./chunk-7KJOFUNN.js";
|
|
30
|
-
export {
|
|
31
|
-
SleepManager,
|
|
32
|
-
getSleepManager,
|
|
33
|
-
getSleepManagerIfReady,
|
|
34
|
-
initSleepManager,
|
|
35
|
-
matchesGlob
|
|
36
|
-
};
|
package/dist/spirit-4JP4TY4C.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
ensureSpiritProject,
|
|
4
|
-
getSpiritModel,
|
|
5
|
-
spiritDir,
|
|
6
|
-
syncSpiritTemplate
|
|
7
|
-
} from "./chunk-B2BVAIZ4.js";
|
|
8
|
-
import "./chunk-G53F3JA4.js";
|
|
9
|
-
import "./chunk-N3DNFPVA.js";
|
|
10
|
-
import "./chunk-BFWHBQK4.js";
|
|
11
|
-
import "./chunk-YUIHSKR6.js";
|
|
12
|
-
import "./chunk-U5BTYSAL.js";
|
|
13
|
-
import "./chunk-BDK73LK6.js";
|
|
14
|
-
import "./chunk-6OWJXUAR.js";
|
|
15
|
-
import "./chunk-N7BLAHNE.js";
|
|
16
|
-
import "./chunk-4JSR7YO7.js";
|
|
17
|
-
import "./chunk-7KJOFUNN.js";
|
|
18
|
-
export {
|
|
19
|
-
ensureSpiritProject,
|
|
20
|
-
getSpiritModel,
|
|
21
|
-
spiritDir,
|
|
22
|
-
syncSpiritTemplate
|
|
23
|
-
};
|
package/dist/split-3YPMS2CL.js
DELETED
|
@@ -1,63 +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 "./chunk-7KJOFUNN.js";
|
|
9
|
-
|
|
10
|
-
// src/commands/split.ts
|
|
11
|
-
async function run(args) {
|
|
12
|
-
const { positional, flags } = parseArgs(args, {
|
|
13
|
-
from: { type: "string" },
|
|
14
|
-
soul: { type: "string" },
|
|
15
|
-
port: { type: "number" },
|
|
16
|
-
"no-start": { type: "boolean" },
|
|
17
|
-
json: { type: "boolean" }
|
|
18
|
-
});
|
|
19
|
-
const mindName = resolveMindName({ mind: flags.from });
|
|
20
|
-
const variantName = positional[0];
|
|
21
|
-
const { soul, port, json } = flags;
|
|
22
|
-
const noStart = flags["no-start"];
|
|
23
|
-
if (!variantName) {
|
|
24
|
-
console.error(
|
|
25
|
-
'Usage: volute mind split <name> [--from <mind>] [--soul "..."] [--port N] [--no-start] [--json]'
|
|
26
|
-
);
|
|
27
|
-
process.exit(1);
|
|
28
|
-
}
|
|
29
|
-
if (!json) console.log("Creating variant via daemon...");
|
|
30
|
-
const { daemonFetch } = await import("./daemon-client-WOAQXXBM.js");
|
|
31
|
-
const { getClient, urlOf } = await import("./api-client-XUXOB7LI.js");
|
|
32
|
-
const client = getClient();
|
|
33
|
-
const res = await daemonFetch(
|
|
34
|
-
urlOf(client.api.minds[":name"].variants.$url({ param: { name: mindName } })),
|
|
35
|
-
{
|
|
36
|
-
method: "POST",
|
|
37
|
-
headers: { "Content-Type": "application/json" },
|
|
38
|
-
body: JSON.stringify({
|
|
39
|
-
name: variantName,
|
|
40
|
-
...soul && { soul },
|
|
41
|
-
...port && { port },
|
|
42
|
-
...noStart && { noStart }
|
|
43
|
-
})
|
|
44
|
-
}
|
|
45
|
-
);
|
|
46
|
-
const data = await res.json();
|
|
47
|
-
if (!res.ok) {
|
|
48
|
-
console.error(data.error ?? "Failed to create variant");
|
|
49
|
-
process.exit(1);
|
|
50
|
-
}
|
|
51
|
-
if (json) {
|
|
52
|
-
console.log(JSON.stringify(data.variant, null, 2));
|
|
53
|
-
} else {
|
|
54
|
-
console.log(`
|
|
55
|
-
Variant created: ${variantName}`);
|
|
56
|
-
console.log(` Branch: ${data.variant?.branch}`);
|
|
57
|
-
console.log(` Path: ${data.variant?.path}`);
|
|
58
|
-
console.log(` Port: ${data.variant?.port}`);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
export {
|
|
62
|
-
run
|
|
63
|
-
};
|
package/dist/start-W3TPKX4D.js
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
getClient,
|
|
4
|
-
urlOf
|
|
5
|
-
} from "./chunk-4RQBJWQX.js";
|
|
6
|
-
import {
|
|
7
|
-
daemonFetch
|
|
8
|
-
} from "./chunk-PLDWHR4D.js";
|
|
9
|
-
import "./chunk-N7BLAHNE.js";
|
|
10
|
-
import "./chunk-4JSR7YO7.js";
|
|
11
|
-
import "./chunk-7KJOFUNN.js";
|
|
12
|
-
|
|
13
|
-
// src/commands/start.ts
|
|
14
|
-
async function run(args) {
|
|
15
|
-
const name = args[0];
|
|
16
|
-
if (!name) {
|
|
17
|
-
console.error("Usage: volute mind start <name>");
|
|
18
|
-
process.exit(1);
|
|
19
|
-
}
|
|
20
|
-
const client = getClient();
|
|
21
|
-
const res = await daemonFetch(urlOf(client.api.minds[":name"].start.$url({ param: { name } })), {
|
|
22
|
-
method: "POST"
|
|
23
|
-
});
|
|
24
|
-
const data = await res.json();
|
|
25
|
-
if (!res.ok) {
|
|
26
|
-
console.error(data.error || "Failed to start mind");
|
|
27
|
-
process.exit(1);
|
|
28
|
-
}
|
|
29
|
-
console.log(`${name} started on port ${data.port}`);
|
|
30
|
-
}
|
|
31
|
-
export {
|
|
32
|
-
run
|
|
33
|
-
};
|