volute 0.19.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +68 -68
- package/dist/activity-events-3WHHCOBB.js +15 -0
- package/dist/{archive-ZCFOSTKB.js → archive-4ZQYK5MN.js} +4 -2
- package/dist/auth-HM2RSPY7.js +37 -0
- package/dist/{channel-PUQKGSQM.js → channel-BOOMFULW.js} +2 -2
- package/dist/{chunk-OTWLI7F4.js → chunk-5462YKWP.js} +12 -9
- package/dist/{chunk-2TJGRJ4O.js → chunk-7LPTHFIL.js} +64 -59
- package/dist/chunk-A4S7H6G6.js +56 -0
- package/dist/chunk-AKPFNL7L.js +148 -0
- package/dist/{chunk-EBGCNDMM.js → chunk-B2CPS4QU.js} +128 -114
- package/dist/{chunk-FCDU5BFX.js → chunk-HFCBO2GL.js} +2 -2
- package/dist/chunk-HGCDWKSP.js +97 -0
- package/dist/{chunk-DYZGP3EW.js → chunk-IPJXU366.js} +1 -1
- package/dist/{chunk-VE4D3GOP.js → chunk-J5A3DF2U.js} +2 -2
- package/dist/{chunk-WC6ZHVRL.js → chunk-KFI7TQJ6.js} +2 -2
- package/dist/{chunk-AW7P4EVV.js → chunk-KTJGZ7M7.js} +55 -7
- package/dist/{chunk-4KPUF5JD.js → chunk-L3LHXZD7.js} +18 -5
- package/dist/{chunk-OGXOMR65.js → chunk-NWPT4ASZ.js} +1 -1
- package/dist/{chunk-FGV2H4TX.js → chunk-OGZYB5GL.js} +312 -268
- package/dist/{chunk-SCUDS4US.js → chunk-ON3FF5JA.js} +1 -1
- package/dist/{chunk-EMQSAY3B.js → chunk-PC6R6UUW.js} +6 -5
- package/dist/{chunk-VDWCHYTS.js → chunk-PHU4DEAJ.js} +1 -1
- package/dist/{chunk-7NO7EV5Z.js → chunk-Q7AITQ44.js} +2 -2
- package/dist/{chunk-32VR2EOH.js → chunk-QUJUKM4U.js} +2 -2
- package/dist/{chunk-VQWDC6UK.js → chunk-SGPEZ32F.js} +46 -1
- package/dist/{chunk-RHEGSQFJ.js → chunk-WSLPZF72.js} +1 -1
- package/dist/cli.js +59 -111
- package/dist/{connector-JBVNZ7VK.js → connector-PYT5UOTZ.js} +6 -6
- package/dist/connectors/discord.js +2 -2
- package/dist/connectors/slack.js +2 -2
- package/dist/connectors/telegram.js +2 -2
- package/dist/{create-HP4OVVHF.js → create-WIDA3M4C.js} +1 -1
- package/dist/{daemon-client-ITWUCNFO.js → daemon-client-ZHCDL4RS.js} +2 -2
- package/dist/{daemon-restart-JMZM3QY4.js → daemon-restart-BH67ZOTE.js} +8 -8
- package/dist/daemon.js +2872 -1301
- package/dist/{delete-BSU7K3RY.js → delete-LOIANQGD.js} +1 -1
- package/dist/down-LIOQ5JDH.js +14 -0
- package/dist/{env-A3LMO777.js → env-4PHIHTF4.js} +2 -2
- package/dist/{export-GCDNQCF3.js → export-XD6PJBQP.js} +19 -8
- package/dist/file-X4L5TTOL.js +204 -0
- package/dist/{history-WNK3DFUM.js → history-HTEKRNID.js} +2 -2
- package/dist/{import-M63VIUJ5.js → import-E433B4KG.js} +3 -3
- package/dist/{log-PPPZDVEF.js → log-SRO5Q6AD.js} +2 -2
- package/dist/{login-HNH3EUQV.js → login-UO6AOVEA.js} +4 -4
- package/dist/{logout-I5CB5UZS.js → logout-UKD5LA37.js} +2 -2
- package/dist/{logs-SF2IMJN4.js → logs-HNTNNBDW.js} +2 -2
- package/dist/{merge-33C237A4.js → merge-B6SYTGI7.js} +2 -2
- package/dist/{mind-PQ5NCPSU.js → mind-BIDOF65R.js} +27 -11
- package/dist/mind-activity-tracker-PGC3DBJ7.js +18 -0
- package/dist/{mind-manager-RVCFROAY.js → mind-manager-3V2NXX4I.js} +5 -6
- package/dist/{package-MYE2ZJLV.js → package-HQR52XSG.js} +1 -1
- package/dist/{pages-AXCOSY3P.js → pages-KQBR5TAZ.js} +6 -6
- package/dist/{publish-YB377JB7.js → publish-OJ4QMXVZ.js} +12 -9
- package/dist/{pull-XAEWQJ47.js → pull-GRQAXM2E.js} +2 -2
- package/dist/{register-VSPCMHKX.js → register-U2UO6TC4.js} +5 -5
- package/dist/registry-D2BSQ2X5.js +42 -0
- package/dist/{restart-IQKMCK5M.js → restart-CIDAKGG2.js} +3 -6
- package/dist/{schedule-LMX7GAQZ.js → schedule-NLR3LZLY.js} +27 -7
- package/dist/{seed-J43YDKXG.js → seed-3H2MRREW.js} +2 -2
- package/dist/{send-KVIZIGCE.js → send-RP2TA7SG.js} +132 -36
- package/dist/{service-LUR7WDO7.js → service-TVNEORO7.js} +31 -13
- package/dist/{setup-OH3PJUJO.js → setup-OZDYCKDI.js} +25 -34
- package/dist/{shared-KO35ZM44.js → shared-DCQ2UXOM.js} +4 -4
- package/dist/{skill-BCVNI6TV.js → skill-Q2Y6PQ3L.js} +2 -2
- package/dist/skills/orientation/SKILL.md +2 -2
- package/dist/skills/volute-mind/SKILL.md +38 -8
- package/dist/{sprout-VBEX63LX.js → sprout-6Z6C42YM.js} +34 -30
- package/dist/{start-I5JYB65M.js → start-JR6CUUWF.js} +3 -6
- package/dist/{status-D7E5HHBV.js → status-5XDGYHKP.js} +2 -2
- package/dist/{status-JCJAOXTW.js → status-LV34BG6G.js} +6 -5
- package/dist/{status-4ESFLGH4.js → status-Z7NAFMBI.js} +5 -5
- package/dist/{stop-NBVKEFQQ.js → stop-VKPGK25U.js} +2 -5
- package/dist/template-hash-BIMA4ILT.js +8 -0
- package/dist/{up-WG65SWJU.js → up-7BGDMFRT.js} +5 -5
- package/dist/{update-FJIHDJKM.js → update-4WT7VWHW.js} +5 -5
- package/dist/{update-check-MWE5AH4U.js → update-check-F5Z3ALXX.js} +2 -2
- package/dist/{upgrade-AIT24B5I.js → upgrade-ZEC2GGFO.js} +1 -1
- package/dist/{variant-63ZWO2W7.js → variant-A4I7PHXS.js} +16 -24
- package/dist/version-notify-TFS2U5CF.js +173 -0
- package/dist/web-assets/assets/index-BR3gtK3E.css +1 -0
- package/dist/web-assets/assets/index-CWmrZRQd.js +64 -0
- package/dist/web-assets/index.html +2 -2
- package/drizzle/0012_activity.sql +11 -0
- package/drizzle/meta/0012_snapshot.json +7 -0
- package/drizzle/meta/_journal.json +7 -0
- package/package.json +1 -1
- package/templates/_base/home/.config/routes.json +2 -2
- package/templates/_base/home/VOLUTE.md +1 -1
- package/templates/_base/src/lib/daemon-client.ts +22 -0
- package/templates/_base/src/lib/transparency.ts +1 -1
- package/templates/claude/.init/.config/routes.json +7 -1
- package/templates/pi/.init/.config/routes.json +7 -1
- package/templates/pi/src/agent.ts +11 -5
- package/templates/pi/src/lib/session-context-extension.ts +6 -4
- package/templates/pi/src/server.ts +2 -0
- package/dist/chunk-UJ6GHNR7.js +0 -675
- package/dist/chunk-Z524RFCJ.js +0 -36
- package/dist/db-5ZVC6MQF.js +0 -10
- package/dist/delivery-manager-ISTJMZDW.js +0 -16
- package/dist/down-ZY35KMHR.js +0 -14
- package/dist/schema-5BW7DFZI.js +0 -24
- package/dist/variants-JAGWGBXG.js +0 -26
- package/dist/web-assets/assets/index-BAbuRsVF.css +0 -1
- package/dist/web-assets/assets/index-CiQhSKi_.js +0 -63
|
@@ -39,7 +39,7 @@ Once you have a sense of who you are:
|
|
|
39
39
|
|
|
40
40
|
1. Write `SOUL.md` — your identity, personality, and perspective. This becomes your system prompt.
|
|
41
41
|
2. Write `MEMORY.md` — any important context, preferences, or knowledge to start with.
|
|
42
|
-
3. Run `volute sprout` to complete the transformation.
|
|
42
|
+
3. Run `volute mind sprout` to complete the transformation.
|
|
43
43
|
|
|
44
44
|
After sprouting, you'll have full mind capabilities (connectors, schedules, variants, etc.).
|
|
45
45
|
|
|
@@ -48,7 +48,7 @@ After sprouting, you'll have full mind capabilities (connectors, schedules, vari
|
|
|
48
48
|
| Command | Purpose |
|
|
49
49
|
|---------|---------|
|
|
50
50
|
| `volute send @<name> "msg"` | Send a message to another user |
|
|
51
|
-
| `volute sprout` | Complete orientation and become a full mind |
|
|
51
|
+
| `volute mind sprout` | Complete orientation and become a full mind |
|
|
52
52
|
|
|
53
53
|
## Files
|
|
54
54
|
|
|
@@ -22,14 +22,14 @@ You manage yourself through the `volute` CLI. Your mind name is auto-detected vi
|
|
|
22
22
|
| `volute variant merge <name> [--summary "..." --memory "..."]` | Merge a variant back |
|
|
23
23
|
| `volute variant delete <name>` | Delete a variant without merging |
|
|
24
24
|
| `volute mind upgrade [--template <name>] [--continue]` | Upgrade your server code |
|
|
25
|
-
| `volute
|
|
26
|
-
| `volute
|
|
25
|
+
| `volute mind connect <type>` | Enable a connector (discord, slack, etc.) |
|
|
26
|
+
| `volute mind disconnect <type>` | Disable a connector |
|
|
27
27
|
| `volute channel read <platform>:<id> [--limit N]` | Read channel history |
|
|
28
28
|
| `volute send <platform>:<id> "msg"` | Send a message proactively (or pipe via stdin) |
|
|
29
29
|
| `volute channel list [<platform>]` | List conversations on a platform (or all platforms) |
|
|
30
30
|
| `volute channel users <platform>` | List users/contacts on a platform |
|
|
31
31
|
| `volute channel create <platform> --participants u1,u2 [--name "..."]` | Create a conversation on a platform |
|
|
32
|
-
| `volute schedule add --cron "..." --message "..."` | Schedule a recurring
|
|
32
|
+
| `volute schedule add --cron "..." --message/--script "..."` | Schedule a recurring task |
|
|
33
33
|
| `volute schedule list` | List your schedules |
|
|
34
34
|
| `volute schedule remove --id <id>` | Remove a schedule |
|
|
35
35
|
| `volute shared status` | See your pending changes vs main |
|
|
@@ -46,6 +46,12 @@ volute schedule add --cron "0 9 * * *" --message "morning — review what's on y
|
|
|
46
46
|
volute schedule add --cron "0 0 * * 0" --message "weekly — consolidate your memory and reflect on the past week"
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
+
You can also schedule scripts that run and deliver their output as a message (empty output is silent — no wake-up):
|
|
50
|
+
|
|
51
|
+
```sh
|
|
52
|
+
volute schedule add --cron "*/30 * * * *" --script "cat status.txt" --id check-status
|
|
53
|
+
```
|
|
54
|
+
|
|
49
55
|
## Piping Messages via Stdin
|
|
50
56
|
|
|
51
57
|
All send commands accept the message from stdin instead of as an argument. This avoids shell escaping issues with quotes, special characters, and multiline content:
|
|
@@ -71,6 +77,23 @@ For group conversations, use `volute channel create volute --participants mind-b
|
|
|
71
77
|
|
|
72
78
|
Your `.config/volute.json` controls your model, connectors, schedules, and compaction message.
|
|
73
79
|
|
|
80
|
+
### Transparency
|
|
81
|
+
|
|
82
|
+
The `transparency` setting in `.config/volute.json` controls what observers (web UI, connectors) can see of your activity. Presets:
|
|
83
|
+
|
|
84
|
+
| Preset | Thinking | Text | Tool use | Tool results | Logs/usage |
|
|
85
|
+
|--------|----------|------|----------|--------------|------------|
|
|
86
|
+
| `transparent` | yes | yes | yes (with args) | yes | yes |
|
|
87
|
+
| `standard` | no | yes | name only | no | yes |
|
|
88
|
+
| `private` | no | no | no | no | no |
|
|
89
|
+
| `silent` | no | no | no | no | no |
|
|
90
|
+
|
|
91
|
+
Default is `transparent`. Inbound/outbound messages (what you send and receive) are always visible regardless of preset. To change:
|
|
92
|
+
|
|
93
|
+
```json
|
|
94
|
+
{ "transparency": "standard" }
|
|
95
|
+
```
|
|
96
|
+
|
|
74
97
|
## Startup Context
|
|
75
98
|
|
|
76
99
|
Edit `.config/hooks/startup-context.sh` to customize what you see when a new session starts. This hook runs automatically on session creation and provides orientation context.
|
|
@@ -132,7 +155,7 @@ Your `shared/` directory is a collaborative space backed by git. Each mind works
|
|
|
132
155
|
|
|
133
156
|
**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.
|
|
134
157
|
|
|
135
|
-
**Shared pages:** The `shared/pages/` directory is the system-level website. Any mind can contribute. Publish with `volute pages publish
|
|
158
|
+
**Shared pages:** The `shared/pages/` directory is the system-level website. Any mind can contribute. Publish with `volute pages publish --system` to deploy the shared site.
|
|
136
159
|
|
|
137
160
|
## MCP Configuration
|
|
138
161
|
|
|
@@ -185,9 +208,10 @@ The `sessions` section configures behavior per session. Keys are glob patterns m
|
|
|
185
208
|
|
|
186
209
|
| Field | Description |
|
|
187
210
|
|-------|-------------|
|
|
188
|
-
| `
|
|
211
|
+
| `delivery` | Delivery mode: `"immediate"` (default), `"batch"`, or `{ "mode": "batch", "debounce": N, "maxWait": N }` |
|
|
189
212
|
| `interrupt` | Whether to interrupt an in-progress turn (default: `true`) |
|
|
190
213
|
| `instructions` | Instructions prepended to messages for this session (e.g. `"Brief responses only."`) |
|
|
214
|
+
| `batch` | Legacy alias for batch config (use `delivery` instead) |
|
|
191
215
|
|
|
192
216
|
### Batch config
|
|
193
217
|
|
|
@@ -209,6 +233,10 @@ Examples:
|
|
|
209
233
|
|
|
210
234
|
Batched messages arrive as a single message with a `[Batch: N messages — ...]` header showing the channel URI and message count, followed by individual messages with `[sender — time]` prefixes.
|
|
211
235
|
|
|
236
|
+
### New-speaker interrupts
|
|
237
|
+
|
|
238
|
+
In batch mode, if you're mid-turn and a **new speaker** sends a message in the **same channel**, the pending batch is force-flushed with `interrupt: true` so you can incorporate the new voice. This prevents pile-ups in group conversations where multiple people are talking. The interrupt has a debounce cooldown (matching the session's debounce setting) and only fires within the `maxWait` window of the last delivery.
|
|
239
|
+
|
|
212
240
|
## Channel Gating
|
|
213
241
|
|
|
214
242
|
When `gateUnmatched` is `true` (the default), messages from channels without a matching rule are held:
|
|
@@ -249,16 +277,18 @@ Publish your `home/pages/` directory to the web. Your system must be registered
|
|
|
249
277
|
|
|
250
278
|
```sh
|
|
251
279
|
volute pages publish # publish your pages/ directory
|
|
280
|
+
volute pages publish --system # publish the shared/pages/ system site
|
|
252
281
|
volute pages status # check your published URL and status
|
|
282
|
+
volute pages status --system # check the system site status
|
|
253
283
|
```
|
|
254
284
|
|
|
255
285
|
Your pages are served at `https://{system}.volute.systems/~{your-name}/`. Create an `index.html` in `home/pages/` to get started.
|
|
256
286
|
|
|
257
287
|
Registration commands (usually run by the operator, not the mind):
|
|
258
288
|
```sh
|
|
259
|
-
volute register --name <system-name>
|
|
260
|
-
volute login --key <api-key>
|
|
261
|
-
volute logout
|
|
289
|
+
volute auth register --name <system-name>
|
|
290
|
+
volute auth login --key <api-key>
|
|
291
|
+
volute auth logout
|
|
262
292
|
```
|
|
263
293
|
|
|
264
294
|
## Git Introspection
|
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
-
STANDARD_SKILLS
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
uninstallSkill
|
|
7
|
-
} from "./chunk-OTWLI7F4.js";
|
|
3
|
+
STANDARD_SKILLS
|
|
4
|
+
} from "./chunk-5462YKWP.js";
|
|
5
|
+
import "./chunk-SGPEZ32F.js";
|
|
8
6
|
import "./chunk-YUIHSKR6.js";
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-DYZGP3EW.js";
|
|
12
|
-
import "./chunk-OGXOMR65.js";
|
|
7
|
+
import "./chunk-IPJXU366.js";
|
|
8
|
+
import "./chunk-NWPT4ASZ.js";
|
|
13
9
|
import {
|
|
14
10
|
findMind,
|
|
15
11
|
mindDir
|
|
16
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-B2CPS4QU.js";
|
|
17
13
|
import "./chunk-K3NQKI34.js";
|
|
18
14
|
|
|
19
15
|
// src/commands/sprout.ts
|
|
@@ -23,7 +19,7 @@ var ORIENTATION_MARKER = "You don't have a soul yet";
|
|
|
23
19
|
async function run(_args) {
|
|
24
20
|
const mindName = process.env.VOLUTE_MIND;
|
|
25
21
|
if (!mindName) {
|
|
26
|
-
console.error("volute sprout must be run by a mind (VOLUTE_MIND not set)");
|
|
22
|
+
console.error("volute mind sprout must be run by a mind (VOLUTE_MIND not set)");
|
|
27
23
|
process.exit(1);
|
|
28
24
|
}
|
|
29
25
|
const entry = findMind(mindName);
|
|
@@ -53,44 +49,52 @@ async function run(_args) {
|
|
|
53
49
|
console.error("Write your MEMORY.md before sprouting.");
|
|
54
50
|
process.exit(1);
|
|
55
51
|
}
|
|
52
|
+
const { daemonFetch } = await import("./daemon-client-ZHCDL4RS.js");
|
|
53
|
+
const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
|
|
54
|
+
const client = getClient();
|
|
56
55
|
const failedSkills = [];
|
|
57
56
|
for (const skillId of STANDARD_SKILLS) {
|
|
58
|
-
const shared = await getSharedSkill(skillId);
|
|
59
|
-
if (!shared) {
|
|
60
|
-
console.error(`Shared skill not found: ${skillId} \u2014 run 'volute up' to sync built-in skills`);
|
|
61
|
-
failedSkills.push(skillId);
|
|
62
|
-
continue;
|
|
63
|
-
}
|
|
64
57
|
const skillDir = resolve(dir, "home", ".claude", "skills", skillId);
|
|
65
58
|
if (!existsSync(skillDir)) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
59
|
+
const installRes = await daemonFetch(
|
|
60
|
+
urlOf(client.api.minds[":name"].skills.install.$url({ param: { name: mindName } })),
|
|
61
|
+
{
|
|
62
|
+
method: "POST",
|
|
63
|
+
headers: { "Content-Type": "application/json" },
|
|
64
|
+
body: JSON.stringify({ skillId })
|
|
65
|
+
}
|
|
66
|
+
);
|
|
67
|
+
if (!installRes.ok) {
|
|
68
|
+
const data = await installRes.json().catch(() => ({ error: `HTTP ${installRes.status}` }));
|
|
69
|
+
console.error(`Failed to install skill ${skillId}: ${data.error}`);
|
|
70
70
|
failedSkills.push(skillId);
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
const orientationDir = resolve(dir, "home", ".claude", "skills", "orientation");
|
|
75
75
|
if (existsSync(orientationDir)) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
76
|
+
const delRes = await daemonFetch(
|
|
77
|
+
urlOf(
|
|
78
|
+
client.api.minds[":name"].skills[":skill"].$url({
|
|
79
|
+
param: { name: mindName, skill: "orientation" }
|
|
80
|
+
})
|
|
81
|
+
),
|
|
82
|
+
{ method: "DELETE" }
|
|
83
|
+
);
|
|
84
|
+
if (!delRes.ok) {
|
|
85
|
+
const data = await delRes.json().catch(() => ({ error: `HTTP ${delRes.status}` }));
|
|
86
|
+
console.error(`Failed to uninstall orientation skill: ${data.error}`);
|
|
80
87
|
}
|
|
81
88
|
}
|
|
82
89
|
if (failedSkills.length > 0) {
|
|
83
90
|
console.error(`Warning: failed to install skills: ${failedSkills.join(", ")}`);
|
|
84
91
|
}
|
|
85
|
-
const { daemonFetch } = await import("./daemon-client-ITWUCNFO.js");
|
|
86
|
-
const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
|
|
87
|
-
const client = getClient();
|
|
88
92
|
const sproutRes = await daemonFetch(
|
|
89
93
|
urlOf(client.api.minds[":name"].sprout.$url({ param: { name: mindName } })),
|
|
90
94
|
{ method: "POST" }
|
|
91
95
|
);
|
|
92
96
|
if (!sproutRes.ok) {
|
|
93
|
-
const data = await sproutRes.json();
|
|
97
|
+
const data = await sproutRes.json().catch(() => ({ error: `HTTP ${sproutRes.status}` }));
|
|
94
98
|
console.error(data.error ?? "Failed to update stage");
|
|
95
99
|
process.exit(1);
|
|
96
100
|
}
|
|
@@ -103,7 +107,7 @@ async function run(_args) {
|
|
|
103
107
|
}
|
|
104
108
|
);
|
|
105
109
|
if (!res.ok) {
|
|
106
|
-
const data = await res.json();
|
|
110
|
+
const data = await res.json().catch(() => ({ error: `HTTP ${res.status}` }));
|
|
107
111
|
console.error(data.error ?? "Failed to restart after sprouting");
|
|
108
112
|
process.exit(1);
|
|
109
113
|
}
|
|
@@ -5,10 +5,8 @@ import {
|
|
|
5
5
|
} from "./chunk-4RQBJWQX.js";
|
|
6
6
|
import {
|
|
7
7
|
daemonFetch
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import
|
|
10
|
-
resolveMind
|
|
11
|
-
} from "./chunk-EBGCNDMM.js";
|
|
8
|
+
} from "./chunk-KFI7TQJ6.js";
|
|
9
|
+
import "./chunk-B2CPS4QU.js";
|
|
12
10
|
import "./chunk-K3NQKI34.js";
|
|
13
11
|
|
|
14
12
|
// src/commands/start.ts
|
|
@@ -18,7 +16,6 @@ async function run(args) {
|
|
|
18
16
|
console.error("Usage: volute mind start <name>");
|
|
19
17
|
process.exit(1);
|
|
20
18
|
}
|
|
21
|
-
const { entry } = resolveMind(name);
|
|
22
19
|
const client = getClient();
|
|
23
20
|
const res = await daemonFetch(urlOf(client.api.minds[":name"].start.$url({ param: { name } })), {
|
|
24
21
|
method: "POST"
|
|
@@ -28,7 +25,7 @@ async function run(args) {
|
|
|
28
25
|
console.error(data.error || "Failed to start mind");
|
|
29
26
|
process.exit(1);
|
|
30
27
|
}
|
|
31
|
-
console.log(`${name} started on port ${
|
|
28
|
+
console.log(`${name} started on port ${data.port}`);
|
|
32
29
|
}
|
|
33
30
|
export {
|
|
34
31
|
run
|
|
@@ -7,8 +7,8 @@ import {
|
|
|
7
7
|
} from "./chunk-D424ZQGI.js";
|
|
8
8
|
import {
|
|
9
9
|
daemonFetch
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
} from "./chunk-KFI7TQJ6.js";
|
|
11
|
+
import "./chunk-B2CPS4QU.js";
|
|
12
12
|
import "./chunk-K3NQKI34.js";
|
|
13
13
|
|
|
14
14
|
// src/commands/shared/status.ts
|
|
@@ -7,24 +7,25 @@ import {
|
|
|
7
7
|
} from "./chunk-NAOW2CLO.js";
|
|
8
8
|
import {
|
|
9
9
|
readSystemsConfig
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-HFCBO2GL.js";
|
|
11
11
|
import {
|
|
12
12
|
parseArgs
|
|
13
13
|
} from "./chunk-D424ZQGI.js";
|
|
14
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-B2CPS4QU.js";
|
|
15
15
|
import "./chunk-K3NQKI34.js";
|
|
16
16
|
|
|
17
17
|
// src/commands/pages/status.ts
|
|
18
18
|
async function run(args) {
|
|
19
19
|
const { flags } = parseArgs(args, {
|
|
20
|
-
mind: { type: "string" }
|
|
20
|
+
mind: { type: "string" },
|
|
21
|
+
system: { type: "boolean" }
|
|
21
22
|
});
|
|
22
23
|
const config = readSystemsConfig();
|
|
23
24
|
if (!config) {
|
|
24
|
-
console.error('Not logged in. Run "volute
|
|
25
|
+
console.error('Not logged in. Run "volute auth register" or "volute auth login" first.');
|
|
25
26
|
process.exit(1);
|
|
26
27
|
}
|
|
27
|
-
const mindName = resolveMindName(flags);
|
|
28
|
+
const mindName = flags.mind || process.env.VOLUTE_MIND ? resolveMindName(flags) : "system";
|
|
28
29
|
const res = await systemsFetch(`${config.apiUrl}/api/pages/status/${mindName}`, {
|
|
29
30
|
headers: { Authorization: `Bearer ${config.apiKey}` }
|
|
30
31
|
});
|
|
@@ -4,13 +4,13 @@ import {
|
|
|
4
4
|
getServiceMode,
|
|
5
5
|
modeLabel,
|
|
6
6
|
readDaemonConfig
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-QUJUKM4U.js";
|
|
8
|
+
import "./chunk-IPJXU366.js";
|
|
9
|
+
import "./chunk-NWPT4ASZ.js";
|
|
10
10
|
import {
|
|
11
11
|
checkForUpdate
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-ON3FF5JA.js";
|
|
13
|
+
import "./chunk-B2CPS4QU.js";
|
|
14
14
|
import "./chunk-K3NQKI34.js";
|
|
15
15
|
|
|
16
16
|
// src/commands/status.ts
|
|
@@ -8,16 +8,13 @@ import {
|
|
|
8
8
|
} from "./chunk-NAOW2CLO.js";
|
|
9
9
|
import {
|
|
10
10
|
daemonFetch
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import
|
|
13
|
-
resolveMind
|
|
14
|
-
} from "./chunk-EBGCNDMM.js";
|
|
11
|
+
} from "./chunk-KFI7TQJ6.js";
|
|
12
|
+
import "./chunk-B2CPS4QU.js";
|
|
15
13
|
import "./chunk-K3NQKI34.js";
|
|
16
14
|
|
|
17
15
|
// src/commands/stop.ts
|
|
18
16
|
async function run(args) {
|
|
19
17
|
const name = resolveMindName({ mind: args[0] });
|
|
20
|
-
resolveMind(name);
|
|
21
18
|
const client = getClient();
|
|
22
19
|
const res = await daemonFetch(urlOf(client.api.minds[":name"].stop.$url({ param: { name } })), {
|
|
23
20
|
method: "POST"
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
import {
|
|
3
3
|
readGlobalConfig,
|
|
4
4
|
run
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-J5A3DF2U.js";
|
|
6
|
+
import "./chunk-QUJUKM4U.js";
|
|
7
7
|
import "./chunk-D424ZQGI.js";
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-IPJXU366.js";
|
|
9
|
+
import "./chunk-NWPT4ASZ.js";
|
|
10
|
+
import "./chunk-B2CPS4QU.js";
|
|
11
11
|
import "./chunk-K3NQKI34.js";
|
|
12
12
|
export {
|
|
13
13
|
readGlobalConfig,
|
|
@@ -5,19 +5,19 @@ import {
|
|
|
5
5
|
pollHealth,
|
|
6
6
|
readDaemonConfig,
|
|
7
7
|
restartService
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-QUJUKM4U.js";
|
|
9
9
|
import {
|
|
10
10
|
exec,
|
|
11
11
|
execInherit,
|
|
12
12
|
resolveVoluteBin
|
|
13
|
-
} from "./chunk-
|
|
14
|
-
import "./chunk-
|
|
13
|
+
} from "./chunk-IPJXU366.js";
|
|
14
|
+
import "./chunk-NWPT4ASZ.js";
|
|
15
15
|
import {
|
|
16
16
|
checkForUpdate
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-ON3FF5JA.js";
|
|
18
18
|
import {
|
|
19
19
|
voluteHome
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-B2CPS4QU.js";
|
|
21
21
|
import "./chunk-K3NQKI34.js";
|
|
22
22
|
|
|
23
23
|
// src/commands/update.ts
|
|
@@ -14,7 +14,7 @@ async function run(args) {
|
|
|
14
14
|
continue: { type: "boolean" }
|
|
15
15
|
});
|
|
16
16
|
const mindName = resolveMindName({ mind: positional[0] });
|
|
17
|
-
const { daemonFetch } = await import("./daemon-client-
|
|
17
|
+
const { daemonFetch } = await import("./daemon-client-ZHCDL4RS.js");
|
|
18
18
|
const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
|
|
19
19
|
const client = getClient();
|
|
20
20
|
const res = await daemonFetch(
|
|
@@ -5,12 +5,6 @@ import {
|
|
|
5
5
|
import {
|
|
6
6
|
parseArgs
|
|
7
7
|
} from "./chunk-D424ZQGI.js";
|
|
8
|
-
import {
|
|
9
|
-
checkHealth,
|
|
10
|
-
readVariants,
|
|
11
|
-
resolveMind,
|
|
12
|
-
writeVariants
|
|
13
|
-
} from "./chunk-EBGCNDMM.js";
|
|
14
8
|
import "./chunk-K3NQKI34.js";
|
|
15
9
|
|
|
16
10
|
// src/commands/variant.ts
|
|
@@ -65,7 +59,7 @@ async function createVariant(args) {
|
|
|
65
59
|
process.exit(1);
|
|
66
60
|
}
|
|
67
61
|
if (!json) console.log("Creating variant via daemon...");
|
|
68
|
-
const { daemonFetch } = await import("./daemon-client-
|
|
62
|
+
const { daemonFetch } = await import("./daemon-client-ZHCDL4RS.js");
|
|
69
63
|
const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
|
|
70
64
|
const client = getClient();
|
|
71
65
|
const res = await daemonFetch(
|
|
@@ -103,9 +97,19 @@ async function listVariants(args) {
|
|
|
103
97
|
});
|
|
104
98
|
const mindName = resolveMindName(flags);
|
|
105
99
|
const { json } = flags;
|
|
106
|
-
|
|
107
|
-
const
|
|
108
|
-
|
|
100
|
+
const { daemonFetch } = await import("./daemon-client-ZHCDL4RS.js");
|
|
101
|
+
const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
|
|
102
|
+
const client = getClient();
|
|
103
|
+
const res = await daemonFetch(
|
|
104
|
+
urlOf(client.api.minds[":name"].variants.$url({ param: { name: mindName } }))
|
|
105
|
+
);
|
|
106
|
+
if (!res.ok) {
|
|
107
|
+
const data = await res.json().catch(() => ({ error: `HTTP ${res.status}` }));
|
|
108
|
+
console.error(data.error ?? "Failed to list variants");
|
|
109
|
+
process.exit(1);
|
|
110
|
+
}
|
|
111
|
+
const results = await res.json();
|
|
112
|
+
if (results.length === 0) {
|
|
109
113
|
if (json) {
|
|
110
114
|
console.log("[]");
|
|
111
115
|
} else {
|
|
@@ -113,18 +117,6 @@ async function listVariants(args) {
|
|
|
113
117
|
}
|
|
114
118
|
return;
|
|
115
119
|
}
|
|
116
|
-
const results = await Promise.all(
|
|
117
|
-
variants.map(async (v) => {
|
|
118
|
-
if (!v.port) return { ...v, status: "no-server" };
|
|
119
|
-
const health = await checkHealth(v.port);
|
|
120
|
-
return { ...v, status: health.ok ? "running" : "dead" };
|
|
121
|
-
})
|
|
122
|
-
);
|
|
123
|
-
const updated = results.map(({ status, ...v }) => ({
|
|
124
|
-
...v,
|
|
125
|
-
running: status === "running"
|
|
126
|
-
}));
|
|
127
|
-
writeVariants(mindName, updated);
|
|
128
120
|
if (json) {
|
|
129
121
|
console.log(JSON.stringify(results, null, 2));
|
|
130
122
|
return;
|
|
@@ -155,7 +147,7 @@ async function mergeVariant(args) {
|
|
|
155
147
|
process.exit(1);
|
|
156
148
|
}
|
|
157
149
|
console.log(`Merging variant ${variantName}...`);
|
|
158
|
-
const { daemonFetch } = await import("./daemon-client-
|
|
150
|
+
const { daemonFetch } = await import("./daemon-client-ZHCDL4RS.js");
|
|
159
151
|
const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
|
|
160
152
|
const client = getClient();
|
|
161
153
|
const res = await daemonFetch(
|
|
@@ -192,7 +184,7 @@ async function deleteVariant(args) {
|
|
|
192
184
|
console.error("Usage: volute variant delete <variant> [--mind <name>]");
|
|
193
185
|
process.exit(1);
|
|
194
186
|
}
|
|
195
|
-
const { daemonFetch } = await import("./daemon-client-
|
|
187
|
+
const { daemonFetch } = await import("./daemon-client-ZHCDL4RS.js");
|
|
196
188
|
const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
|
|
197
189
|
const client = getClient();
|
|
198
190
|
const res = await daemonFetch(
|