volute 0.40.0 → 0.40.2
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 +2 -2
- package/dist/{accept-AHAOUFBK.js → accept-IVHOHXQS.js} +1 -1
- package/dist/{activity-events-OJZ7G5CG.js → activity-events-DS4QRWBY.js} +4 -4
- package/dist/{ai-service-JMV4KZN4.js → ai-service-EVLKMAJD.js} +5 -5
- package/dist/{api-client-LC5YRA32.js → api-client-NFM6GX2N.js} +1 -1
- package/dist/{archive-BC2MTNPV.js → archive-UDHFZN4G.js} +4 -4
- package/dist/{auth-2IMZ6N5G.js → auth-X6ZITZ7D.js} +5 -5
- package/dist/{bridge-F3ZJEKDN.js → bridge-MSZC4HUT.js} +1 -1
- package/dist/{chat-O5QCGCUG.js → chat-F2EEN76G.js} +9 -9
- package/dist/{chunk-MHFAWJCC.js → chunk-2HZRJ35V.js} +1 -1
- package/dist/{chunk-B7YJUWMM.js → chunk-3Y7UDHO7.js} +3 -3
- package/dist/{chunk-RMZSICLS.js → chunk-42UMLIQR.js} +20 -21
- package/dist/{chunk-SGC6CDXB.js → chunk-4UMXOMZ6.js} +2 -2
- package/dist/{chunk-FBV22PFY.js → chunk-6SYHHEQ7.js} +1 -1
- package/dist/{chunk-3XSFMN3H.js → chunk-AEAZRTEV.js} +1 -1
- package/dist/{chunk-PDSA3ILI.js → chunk-B4WPXYPI.js} +1 -1
- package/dist/{chunk-2AQCEQYN.js → chunk-DNU6XLE2.js} +1 -1
- package/dist/{chunk-PHR4XQPL.js → chunk-E25SO3QW.js} +3 -3
- package/dist/{chunk-76Q6YLJL.js → chunk-I57LLNAQ.js} +1 -1
- package/dist/{chunk-HAJHDGBV.js → chunk-ITH5ZLZJ.js} +1 -1
- package/dist/{chunk-SOPMVTTW.js → chunk-JYQQDI3M.js} +2 -2
- package/dist/{chunk-PIRL2HAO.js → chunk-KMHC36CA.js} +1 -1
- package/dist/chunk-LMMQX4CK.js +49 -0
- package/dist/{chunk-FRJ73IWR.js → chunk-MNUXL4XN.js} +67 -3
- package/dist/{chunk-PC55DGNX.js → chunk-NERYUSER.js} +1 -1
- package/dist/{chunk-WGRMLXTH.js → chunk-NRJ3ZYFP.js} +10 -10
- package/dist/{chunk-43PVCF4V.js → chunk-PEKG3GNZ.js} +3 -3
- package/dist/{chunk-S4YO5OWV.js → chunk-PKGA23XM.js} +1 -1
- package/dist/{chunk-5VBXKFPO.js → chunk-QYI65HCL.js} +2 -2
- package/dist/{chunk-HEZM5GCV.js → chunk-SVXOBKQY.js} +2 -2
- package/dist/{chunk-PZTVQL3J.js → chunk-TOANT6FD.js} +2 -2
- package/dist/{chunk-T26YLQPU.js → chunk-UX7FPDDO.js} +5 -5
- package/dist/{chunk-JSITYTIL.js → chunk-WOWRLBL2.js} +10 -8
- package/dist/{chunk-DNQPHLGM.js → chunk-YHWGN4FX.js} +1 -1
- package/dist/chunk-YMMYN2V3.js +1212 -0
- package/dist/{chunk-XUJR6NZW.js → chunk-ZOI6D2YH.js} +194 -1313
- package/dist/{chunk-PGX52NFO.js → chunk-ZXPWTH4I.js} +43 -35
- package/dist/cli.js +24 -24
- package/dist/{clock-BMLJ2TR6.js → clock-YLDJUKBW.js} +3 -3
- package/dist/{cloud-sync-5JF2Z7VM.js → cloud-sync-GOSJZIHH.js} +18 -17
- package/dist/{config-QB7W3Z7P.js → config-PO4EZLIK.js} +4 -4
- package/dist/connectors/discord-bridge.js +1 -1
- package/dist/connectors/slack-bridge.js +1 -1
- package/dist/connectors/telegram-bridge.js +1 -1
- package/dist/{conversations-LUVHGQSS.js → conversations-AYLXPOGC.js} +5 -5
- package/dist/{create-TDQM3SHV.js → create-Y3RGU2GI.js} +5 -5
- package/dist/{create-C3BBFYV7.js → create-ZMTGINV3.js} +1 -1
- package/dist/{daemon-client-2MIPKY3E.js → daemon-client-H6MEKK2W.js} +1 -1
- package/dist/{daemon-restart-XHDJDOPQ.js → daemon-restart-FSWVXPUE.js} +9 -9
- package/dist/daemon.js +318 -280
- package/dist/{db-IJL6B26S.js → db-FSYOTHSN.js} +1 -1
- package/dist/db-ZEPKEJJD.js +9 -0
- package/dist/{delete-NLXES2C7.js → delete-TXVOH2OC.js} +3 -3
- package/dist/delivery-manager-3NTCDKHR.js +33 -0
- package/dist/{delivery-router-IU4OMVKZ.js → delivery-router-T6CYTS3M.js} +4 -4
- package/dist/down-6DYO2QV7.js +17 -0
- package/dist/echo-text-JUNRP4ER.js +32 -0
- package/dist/{env-IQ6Q2333.js → env-77IOWG4U.js} +1 -1
- package/dist/exec-5DGKQ5V3.js +17 -0
- package/dist/{export-RKUWSQSG.js → export-TZKOCSCE.js} +6 -6
- package/dist/{extension-LZYHBNLV.js → extension-35NB6GHW.js} +1 -1
- package/dist/{extensions-VN5SEVRP.js → extensions-MD757RFY.js} +18 -17
- package/dist/{files-J2CKZ6PK.js → files-WNNVJWJB.js} +4 -4
- package/dist/{import-KVY6BYXG.js → import-BNNFCQ7U.js} +11 -11
- package/dist/{isolation-MM7YHK6J.js → isolation-4Q4P7HRV.js} +4 -4
- package/dist/{join-6SZCA5FX.js → join-E2EJEXZO.js} +3 -3
- package/dist/{list-KHJZJPEJ.js → list-BYCEDASJ.js} +1 -1
- package/dist/{login-GYTH67ES.js → login-JNSIYFVH.js} +1 -1
- package/dist/{login-OHM32QVD.js → login-Y6UAYQVO.js} +3 -3
- package/dist/{logout-YHQLOFLR.js → logout-M6FI62BL.js} +1 -1
- package/dist/{logout-74WBDMOE.js → logout-VHGWVH63.js} +3 -3
- package/dist/message-delivery-Q7TU24IA.js +41 -0
- package/dist/{mind-PUPXDIYQ.js → mind-OOB2LEVC.js} +19 -19
- package/dist/{mind-activity-tracker-7GE24YZE.js → mind-activity-tracker-GJ5RJS32.js} +5 -5
- package/dist/{mind-history-WHCNZ6I5.js → mind-history-W4JPTPTV.js} +1 -1
- package/dist/{mind-list-H3HC2ZRG.js → mind-list-QROHCLGT.js} +1 -1
- package/dist/mind-manager-4NFK4GEU.js +31 -0
- package/dist/{mind-profile-7VYRJGFZ.js → mind-profile-3LNKXNPA.js} +2 -2
- package/dist/mind-service-X7FH3NA4.js +37 -0
- package/dist/{mind-sleep-ZL5ZXFTM.js → mind-sleep-PVCMLTAH.js} +1 -1
- package/dist/{mind-status-ZWULKOUO.js → mind-status-RAJFLRCN.js} +1 -1
- package/dist/{mind-wake-HK5ORGUK.js → mind-wake-HZUOVE7J.js} +1 -1
- package/dist/{package-6YPVWGD3.js → package-PPA3VWS2.js} +28 -27
- package/dist/{read-CP7MYMJQ.js → read-OOINVR2H.js} +1 -1
- package/dist/{read-stdin-4B5UYPPM.js → read-stdin-P6HCZUAA.js} +1 -1
- package/dist/{register-XOBFEMI4.js → register-ISOH34RF.js} +1 -1
- package/dist/{registry-L272BZJR.js → registry-GV35XFT7.js} +3 -3
- package/dist/{reject-43AGXB6B.js → reject-ZBWP62X5.js} +1 -1
- package/dist/{restart-O5QIYQJT.js → restart-QBJV5455.js} +1 -1
- package/dist/{sandbox-BQAFYHLE.js → sandbox-5R32QKWQ.js} +5 -5
- package/dist/scheduler-PDARH4CE.js +31 -0
- package/dist/{schema-HHYJDG7B.js → schema-LYQUDL7G.js} +2 -2
- package/dist/{seed-4V2O7FQE.js → seed-BTAHXCO5.js} +2 -2
- package/dist/{seed-check-HZPVFJKZ.js → seed-check-3WXXRHTC.js} +2 -2
- package/dist/{seed-cmd-JKDEW4MP.js → seed-cmd-VEJNJBAQ.js} +4 -4
- package/dist/{seed-create-EPAO3H5F.js → seed-create-LOU5RALI.js} +7 -7
- package/dist/{seed-sprout-EONCL4DU.js → seed-sprout-BXF5TBXD.js} +11 -11
- package/dist/{send-232RAHPX.js → send-WO3CVG73.js} +4 -4
- package/dist/{service-AG5BKRUV.js → service-WMV6R6VJ.js} +6 -6
- package/dist/service-install-W3FQXJKB.js +17 -0
- package/dist/{setup-IL7QJZN4.js → setup-OTEC3ZPM.js} +4 -4
- package/dist/{setup-PSA7LJ5U.js → setup-W3545462.js} +9 -9
- package/dist/{skill-ICN6Y2ZF.js → skill-QHACP7EU.js} +1 -1
- package/dist/{skills-SLEY5X6W.js → skills-3P7VQA4U.js} +7 -7
- package/dist/sleep-manager-TTNOLIX5.js +35 -0
- package/dist/{spirit-7BUHSEO2.js → spirit-T6GK5GEP.js} +9 -9
- package/dist/{split-5YBEQTBF.js → split-7AO4IO42.js} +3 -3
- package/dist/{sprout-JWQ57KF3.js → sprout-AQICF7WZ.js} +2 -2
- package/dist/{src-OYWRPLC6.js → src-2IMB3V27.js} +1 -1
- package/dist/src-OS75U2O7.js +241910 -0
- package/dist/{src-O4PRLMKM.js → src-XNUXP2FP.js} +1 -1
- package/dist/{start-LMXXRR3X.js → start-2U57BBK7.js} +1 -1
- package/dist/{status-6GSOSYOD.js → status-BRYYYO7C.js} +7 -7
- package/dist/{stop-TWDKVEUX.js → stop-QILBDUAR.js} +1 -1
- package/dist/system-chat-7CA2PP6A.js +35 -0
- package/dist/{systems-Y2WZV2K4.js → systems-3XTAHA35.js} +4 -4
- package/dist/{tailscale-6MHNLBAX.js → tailscale-X4HRKRTW.js} +3 -3
- package/dist/{template-hash-SSIBEEYK.js → template-hash-DMHSLRDX.js} +1 -1
- package/dist/turn-tracker-AI6WWEBA.js +35 -0
- package/dist/up-PKNNDN6M.js +19 -0
- package/dist/{update-BT2PY73H.js → update-OY2JYXYK.js} +61 -14
- package/dist/update-check-IUB7QHAF.js +24 -0
- package/dist/{upgrade-RXFZR5FI.js → upgrade-25J6AE47.js} +3 -3
- package/dist/{variant-HHDTW74J.js → variant-5LQOPCQA.js} +1 -1
- package/dist/{version-notify-NFQMI5IY.js → version-notify-DK6AHWX7.js} +19 -18
- package/dist/{volute-config-TS62GS6A.js → volute-config-7FO6QKWU.js} +1 -1
- package/dist/web-assets/assets/index-DaUp9iE2.js +79 -0
- package/dist/web-assets/index.html +1 -1
- package/package.json +27 -26
- package/packages/extensions/notes/dist/ui/assets/index-BbgANhFm.js +67 -0
- package/packages/extensions/notes/dist/ui/index.html +1 -1
- package/packages/extensions/pages/dist/ui/assets/index-Dxk-DYrf.js +2 -0
- package/packages/extensions/pages/dist/ui/index.html +1 -1
- package/packages/extensions/plan/dist/ui/assets/index-Cfzs-0G9.js +67 -0
- package/packages/extensions/plan/dist/ui/index.html +1 -1
- package/templates/claude/package.json.tmpl +5 -5
- package/templates/codex/package.json.tmpl +5 -5
- package/templates/pi/package.json.tmpl +7 -6
- package/templates/pi/src/agent.ts +3 -1
- package/templates/pi/src/lib/content.ts +1 -1
- package/templates/pi/src/lib/event-handler.ts +1 -1
- package/templates/pi/src/lib/reply-instructions-extension.ts +1 -1
- package/templates/pi/src/lib/resolve-model.ts +4 -4
- package/templates/pi/src/lib/subagents.ts +21 -19
- package/dist/chunk-K3NQKI34.js +0 -10
- package/dist/db-2GIS7HSG.js +0 -9
- package/dist/delivery-manager-L5WFP2ND.js +0 -30
- package/dist/down-KIJVZ3OC.js +0 -17
- package/dist/echo-text-TJWCUBPB.js +0 -31
- package/dist/exec-BGMU7VXR.js +0 -17
- package/dist/message-delivery-VBBAJX3J.js +0 -40
- package/dist/mind-manager-4Q6KGZHL.js +0 -30
- package/dist/mind-service-7OD4PRO5.js +0 -36
- package/dist/scheduler-7E22Q7IC.js +0 -30
- package/dist/service-install-HVAEUBAH.js +0 -17
- package/dist/sleep-manager-27S7MKJO.js +0 -34
- package/dist/src-6Z4XYDH5.js +0 -2164
- package/dist/system-chat-EIINIHFB.js +0 -34
- package/dist/up-4XS3RCPP.js +0 -19
- package/dist/update-check-Y3HBEMF2.js +0 -18
- package/dist/web-assets/assets/index-Jluza4c-.js +0 -73
- package/packages/extensions/notes/dist/ui/assets/index-Dsua7alJ.js +0 -61
- package/packages/extensions/pages/dist/ui/assets/index-BM7gRdg7.js +0 -2
- package/packages/extensions/plan/dist/ui/assets/index-DWiqtzBv.js +0 -61
package/README.md
CHANGED
|
@@ -342,7 +342,7 @@ Your mind's `SOUL.md` and `MEMORY.md` are never overwritten.
|
|
|
342
342
|
Three built-in templates:
|
|
343
343
|
|
|
344
344
|
- **`claude`** (default) — Anthropic Claude Agent SDK
|
|
345
|
-
- **`pi`** — [pi-coding-agent](https://github.com/
|
|
345
|
+
- **`pi`** — [pi-coding-agent](https://github.com/earendil-works/pi) for multi-provider LLM support
|
|
346
346
|
- **`codex`** — OpenAI Codex models
|
|
347
347
|
|
|
348
348
|
```sh
|
|
@@ -351,7 +351,7 @@ volute mind create atlas --template pi
|
|
|
351
351
|
|
|
352
352
|
## AI Service
|
|
353
353
|
|
|
354
|
-
Volute has an optional system-level AI service for features like automatic turn summaries. It uses [`@
|
|
354
|
+
Volute has an optional system-level AI service for features like automatic turn summaries. It uses [`@earendil-works/pi-ai`](https://github.com/earendil-works/pi) for multi-provider support — configure any combination of Anthropic, OpenAI, Google, GitHub Copilot, and others.
|
|
355
355
|
|
|
356
356
|
Configure via the web dashboard (Settings → AI Service) or during `volute setup`. Each provider authenticates independently via API key, OAuth, or environment variables. After adding providers, select which models to enable — the system picks from your enabled list.
|
|
357
357
|
|
|
@@ -3,11 +3,11 @@ import {
|
|
|
3
3
|
broadcast,
|
|
4
4
|
publish,
|
|
5
5
|
subscribe
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-QYI65HCL.js";
|
|
7
7
|
import "./chunk-T2TP6ZC6.js";
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-B4WPXYPI.js";
|
|
9
|
+
import "./chunk-2HZRJ35V.js";
|
|
10
|
+
import "./chunk-LMMQX4CK.js";
|
|
11
11
|
export {
|
|
12
12
|
broadcast,
|
|
13
13
|
publish,
|
|
@@ -19,12 +19,12 @@ import {
|
|
|
19
19
|
setProviderRefreshHook,
|
|
20
20
|
setUtilityModel,
|
|
21
21
|
unqualifyModelId
|
|
22
|
-
} from "./chunk-
|
|
23
|
-
import "./chunk-
|
|
22
|
+
} from "./chunk-ZXPWTH4I.js";
|
|
23
|
+
import "./chunk-DNU6XLE2.js";
|
|
24
24
|
import "./chunk-T2TP6ZC6.js";
|
|
25
|
-
import "./chunk-
|
|
26
|
-
import "./chunk-
|
|
27
|
-
import "./chunk-
|
|
25
|
+
import "./chunk-B4WPXYPI.js";
|
|
26
|
+
import "./chunk-2HZRJ35V.js";
|
|
27
|
+
import "./chunk-LMMQX4CK.js";
|
|
28
28
|
export {
|
|
29
29
|
aiComplete,
|
|
30
30
|
aiCompleteUtility,
|
|
@@ -5,10 +5,10 @@ import {
|
|
|
5
5
|
extractArchive,
|
|
6
6
|
isHomeOnlyArchive,
|
|
7
7
|
readManifest
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-I57LLNAQ.js";
|
|
9
|
+
import "./chunk-B4WPXYPI.js";
|
|
10
|
+
import "./chunk-2HZRJ35V.js";
|
|
11
|
+
import "./chunk-LMMQX4CK.js";
|
|
12
12
|
export {
|
|
13
13
|
addHistoryToArchive,
|
|
14
14
|
createExportArchive,
|
|
@@ -17,12 +17,12 @@ import {
|
|
|
17
17
|
syncMindProfile,
|
|
18
18
|
updateUserProfile,
|
|
19
19
|
verifyUser
|
|
20
|
-
} from "./chunk-
|
|
21
|
-
import "./chunk-
|
|
20
|
+
} from "./chunk-E25SO3QW.js";
|
|
21
|
+
import "./chunk-QYI65HCL.js";
|
|
22
22
|
import "./chunk-T2TP6ZC6.js";
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-
|
|
25
|
-
import "./chunk-
|
|
23
|
+
import "./chunk-B4WPXYPI.js";
|
|
24
|
+
import "./chunk-2HZRJ35V.js";
|
|
25
|
+
import "./chunk-LMMQX4CK.js";
|
|
26
26
|
export {
|
|
27
27
|
approveUser,
|
|
28
28
|
changePassword,
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
subcommands
|
|
4
4
|
} from "./chunk-TXSA4Q3V.js";
|
|
5
5
|
import "./chunk-O7IGP7ZW.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-LMMQX4CK.js";
|
|
7
7
|
|
|
8
8
|
// packages/cli/src/commands/chat.ts
|
|
9
9
|
var cmd = subcommands({
|
|
@@ -12,35 +12,35 @@ var cmd = subcommands({
|
|
|
12
12
|
commands: {
|
|
13
13
|
send: {
|
|
14
14
|
description: "Send a message",
|
|
15
|
-
run: (args) => import("./send-
|
|
15
|
+
run: (args) => import("./send-WO3CVG73.js").then((m) => m.run(args))
|
|
16
16
|
},
|
|
17
17
|
list: {
|
|
18
18
|
description: "List conversations",
|
|
19
|
-
run: (args) => import("./list-
|
|
19
|
+
run: (args) => import("./list-BYCEDASJ.js").then((m) => m.run(args))
|
|
20
20
|
},
|
|
21
21
|
read: {
|
|
22
22
|
description: "Read conversation messages",
|
|
23
|
-
run: (args) => import("./read-
|
|
23
|
+
run: (args) => import("./read-OOINVR2H.js").then((m) => m.run(args))
|
|
24
24
|
},
|
|
25
25
|
create: {
|
|
26
26
|
description: "Create a conversation",
|
|
27
|
-
run: (args) => import("./create-
|
|
27
|
+
run: (args) => import("./create-ZMTGINV3.js").then((m) => m.run(args))
|
|
28
28
|
},
|
|
29
29
|
bridge: {
|
|
30
30
|
description: "Manage platform bridges",
|
|
31
|
-
run: (args) => import("./bridge-
|
|
31
|
+
run: (args) => import("./bridge-MSZC4HUT.js").then((m) => m.run(args))
|
|
32
32
|
},
|
|
33
33
|
files: {
|
|
34
34
|
description: "List pending incoming files",
|
|
35
|
-
run: (args) => import("./files-
|
|
35
|
+
run: (args) => import("./files-WNNVJWJB.js").then((m) => m.run(args))
|
|
36
36
|
},
|
|
37
37
|
accept: {
|
|
38
38
|
description: "Accept a pending file",
|
|
39
|
-
run: (args) => import("./accept-
|
|
39
|
+
run: (args) => import("./accept-IVHOHXQS.js").then((m) => m.run(args))
|
|
40
40
|
},
|
|
41
41
|
reject: {
|
|
42
42
|
description: "Reject a pending file",
|
|
43
|
-
run: (args) => import("./reject-
|
|
43
|
+
run: (args) => import("./reject-ZBWP62X5.js").then((m) => m.run(args))
|
|
44
44
|
}
|
|
45
45
|
},
|
|
46
46
|
footer: "Use --mind <name> or VOLUTE_MIND to identify the mind."
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
subscribe
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-QYI65HCL.js";
|
|
5
5
|
import {
|
|
6
6
|
logger_default
|
|
7
7
|
} from "./chunk-T2TP6ZC6.js";
|
|
8
8
|
import {
|
|
9
9
|
getDb
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-B4WPXYPI.js";
|
|
11
11
|
import {
|
|
12
12
|
channels,
|
|
13
13
|
conversationParticipants,
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
conversations,
|
|
16
16
|
messages,
|
|
17
17
|
users
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-2HZRJ35V.js";
|
|
19
19
|
|
|
20
20
|
// packages/daemon/src/lib/events/conversations.ts
|
|
21
21
|
import { randomUUID } from "crypto";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
publish
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-QYI65HCL.js";
|
|
5
5
|
import {
|
|
6
6
|
logger_default
|
|
7
7
|
} from "./chunk-T2TP6ZC6.js";
|
|
@@ -17,31 +17,30 @@ function getState(mind) {
|
|
|
17
17
|
}
|
|
18
18
|
return state;
|
|
19
19
|
}
|
|
20
|
-
var IGNORED_EVENTS = /* @__PURE__ */ new Set(["
|
|
20
|
+
var IGNORED_EVENTS = /* @__PURE__ */ new Set(["session_start", "usage", "log"]);
|
|
21
|
+
function armIdleTimer(mind, state) {
|
|
22
|
+
if (state.idleTimer) {
|
|
23
|
+
clearTimeout(state.idleTimer);
|
|
24
|
+
}
|
|
25
|
+
state.idleTimer = setTimeout(() => {
|
|
26
|
+
state.idleTimer = null;
|
|
27
|
+
state.active = false;
|
|
28
|
+
publish({
|
|
29
|
+
type: "mind_idle",
|
|
30
|
+
mind,
|
|
31
|
+
summary: `${mind} is idle`
|
|
32
|
+
}).catch((err) => {
|
|
33
|
+
logger_default.error("[mind-activity] failed to publish mind_idle", logger_default.errorData(err));
|
|
34
|
+
});
|
|
35
|
+
}, IDLE_TIMEOUT_MS);
|
|
36
|
+
}
|
|
21
37
|
function onMindEvent(mind, type, channel) {
|
|
22
38
|
const state = getState(mind);
|
|
23
39
|
if (type === "done") {
|
|
24
40
|
state.active = false;
|
|
25
|
-
|
|
26
|
-
clearTimeout(state.idleTimer);
|
|
27
|
-
}
|
|
28
|
-
state.idleTimer = setTimeout(() => {
|
|
29
|
-
state.idleTimer = null;
|
|
30
|
-
if (!state.active) {
|
|
31
|
-
publish({
|
|
32
|
-
type: "mind_idle",
|
|
33
|
-
mind,
|
|
34
|
-
summary: `${mind} is idle`
|
|
35
|
-
}).catch((err) => {
|
|
36
|
-
logger_default.error("[mind-activity] failed to publish mind_idle", logger_default.errorData(err));
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
}, IDLE_TIMEOUT_MS);
|
|
41
|
+
armIdleTimer(mind, state);
|
|
40
42
|
} else if (!IGNORED_EVENTS.has(type)) {
|
|
41
|
-
|
|
42
|
-
clearTimeout(state.idleTimer);
|
|
43
|
-
state.idleTimer = null;
|
|
44
|
-
}
|
|
43
|
+
armIdleTimer(mind, state);
|
|
45
44
|
if (!state.active) {
|
|
46
45
|
state.active = true;
|
|
47
46
|
state.channel = channel;
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import {
|
|
3
3
|
exec,
|
|
4
4
|
execInherit
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-AEAZRTEV.js";
|
|
6
6
|
import {
|
|
7
7
|
voluteSystemDir
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-B4WPXYPI.js";
|
|
9
9
|
|
|
10
10
|
// packages/daemon/src/lib/config/service-mode.ts
|
|
11
11
|
import { execFileSync } from "child_process";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
broadcast
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-QYI65HCL.js";
|
|
5
5
|
import {
|
|
6
6
|
getDb
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-B4WPXYPI.js";
|
|
8
8
|
import {
|
|
9
9
|
users
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-2HZRJ35V.js";
|
|
11
11
|
|
|
12
12
|
// packages/daemon/src/lib/auth.ts
|
|
13
13
|
import { compareSync, hashSync } from "bcryptjs";
|
|
@@ -8,10 +8,10 @@ import {
|
|
|
8
8
|
pollHealthDown,
|
|
9
9
|
readDaemonConfig,
|
|
10
10
|
stopService
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-4UMXOMZ6.js";
|
|
12
12
|
import {
|
|
13
13
|
voluteSystemDir
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-B4WPXYPI.js";
|
|
15
15
|
|
|
16
16
|
// src/commands/down.ts
|
|
17
17
|
import { existsSync, readFileSync, unlinkSync } from "fs";
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
9
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
10
|
+
}) : x)(function(x) {
|
|
11
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
12
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
13
|
+
});
|
|
14
|
+
var __esm = (fn, res) => function __init() {
|
|
15
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
16
|
+
};
|
|
17
|
+
var __commonJS = (cb, mod) => function __require2() {
|
|
18
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
19
|
+
};
|
|
20
|
+
var __export = (target, all) => {
|
|
21
|
+
for (var name in all)
|
|
22
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
23
|
+
};
|
|
24
|
+
var __copyProps = (to, from, except, desc) => {
|
|
25
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
26
|
+
for (let key of __getOwnPropNames(from))
|
|
27
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
28
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
29
|
+
}
|
|
30
|
+
return to;
|
|
31
|
+
};
|
|
32
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
33
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
34
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
35
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
36
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
37
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
38
|
+
mod
|
|
39
|
+
));
|
|
40
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
41
|
+
|
|
42
|
+
export {
|
|
43
|
+
__require,
|
|
44
|
+
__esm,
|
|
45
|
+
__commonJS,
|
|
46
|
+
__export,
|
|
47
|
+
__toESM,
|
|
48
|
+
__toCommonJS
|
|
49
|
+
};
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
voluteSystemDir
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-B4WPXYPI.js";
|
|
5
5
|
|
|
6
6
|
// packages/daemon/src/lib/update-check.ts
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
7
|
+
import { execFile as execFileCb, execFileSync } from "child_process";
|
|
8
|
+
import { existsSync, readFileSync, realpathSync, writeFileSync } from "fs";
|
|
9
|
+
import { basename, dirname, resolve, sep } from "path";
|
|
10
|
+
import { promisify } from "util";
|
|
11
|
+
var execFile = promisify(execFileCb);
|
|
9
12
|
var CACHE_TTL = 60 * 60 * 1e3;
|
|
10
13
|
function cachePath() {
|
|
11
14
|
return resolve(voluteSystemDir(), "update-check.json");
|
|
@@ -90,6 +93,64 @@ async function checkForUpdate(force = false) {
|
|
|
90
93
|
return { current, latest: current, updateAvailable: false, checkFailed: true };
|
|
91
94
|
}
|
|
92
95
|
}
|
|
96
|
+
function readPackageVersion(pkgDir) {
|
|
97
|
+
try {
|
|
98
|
+
return JSON.parse(readFileSync(resolve(pkgDir, "package.json"), "utf-8")).version ?? null;
|
|
99
|
+
} catch {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
function analyzeInstallPath(realPath) {
|
|
104
|
+
const marker = `${sep}node_modules${sep}volute${sep}`;
|
|
105
|
+
const idx = realPath.indexOf(marker);
|
|
106
|
+
if (idx === -1) return { packageRoot: null, prefix: null, isLinked: true };
|
|
107
|
+
const packageRoot = `${realPath.slice(0, idx)}${sep}node_modules${sep}volute`;
|
|
108
|
+
const nodeModulesRoot = dirname(packageRoot);
|
|
109
|
+
const libDir = dirname(nodeModulesRoot);
|
|
110
|
+
const prefix = basename(libDir) === "lib" ? dirname(libDir) : libDir;
|
|
111
|
+
return { packageRoot, prefix, isLinked: false };
|
|
112
|
+
}
|
|
113
|
+
function resolveVoluteInstall() {
|
|
114
|
+
let binPath;
|
|
115
|
+
try {
|
|
116
|
+
binPath = execFileSync("which", ["volute"], { encoding: "utf-8" }).trim();
|
|
117
|
+
} catch {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
if (!binPath) return null;
|
|
121
|
+
let realPath = binPath;
|
|
122
|
+
try {
|
|
123
|
+
realPath = realpathSync(binPath);
|
|
124
|
+
} catch {
|
|
125
|
+
}
|
|
126
|
+
const { packageRoot, prefix, isLinked } = analyzeInstallPath(realPath);
|
|
127
|
+
if (isLinked) {
|
|
128
|
+
let dir = dirname(realPath);
|
|
129
|
+
let version = null;
|
|
130
|
+
for (let i = 0; i < 4 && dir !== dirname(dir); i++) {
|
|
131
|
+
version = readPackageVersion(dir);
|
|
132
|
+
if (version) break;
|
|
133
|
+
dir = dirname(dir);
|
|
134
|
+
}
|
|
135
|
+
return { binPath, realPath, packageRoot: null, prefix: null, version, isLinked: true };
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
binPath,
|
|
139
|
+
realPath,
|
|
140
|
+
packageRoot,
|
|
141
|
+
prefix,
|
|
142
|
+
version: packageRoot ? readPackageVersion(packageRoot) : null,
|
|
143
|
+
isLinked: false
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
async function getResolvedVersion(binPath) {
|
|
147
|
+
try {
|
|
148
|
+
const { stdout } = await execFile(binPath, ["--version"], { timeout: 15e3 });
|
|
149
|
+
return stdout.trim() || null;
|
|
150
|
+
} catch {
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
93
154
|
function checkForUpdateCached() {
|
|
94
155
|
const cache = readCache();
|
|
95
156
|
if (!cache) return null;
|
|
@@ -106,5 +167,8 @@ export {
|
|
|
106
167
|
fetchLatestVersion,
|
|
107
168
|
isNewer,
|
|
108
169
|
checkForUpdate,
|
|
170
|
+
analyzeInstallPath,
|
|
171
|
+
resolveVoluteInstall,
|
|
172
|
+
getResolvedVersion,
|
|
109
173
|
checkForUpdateCached
|
|
110
174
|
};
|
|
@@ -9,21 +9,21 @@ import {
|
|
|
9
9
|
getSharedSkill,
|
|
10
10
|
installSkill,
|
|
11
11
|
mindSkillsDir
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-UX7FPDDO.js";
|
|
13
13
|
import {
|
|
14
14
|
readVoluteConfig,
|
|
15
15
|
writeVoluteConfig
|
|
16
16
|
} from "./chunk-CU6OFXMM.js";
|
|
17
17
|
import {
|
|
18
18
|
exec
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-AEAZRTEV.js";
|
|
20
20
|
import {
|
|
21
21
|
qualifyModelId,
|
|
22
22
|
resolveTemplate
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-ZXPWTH4I.js";
|
|
24
24
|
import {
|
|
25
25
|
readGlobalConfig
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-DNU6XLE2.js";
|
|
27
27
|
import {
|
|
28
28
|
logger_default
|
|
29
29
|
} from "./chunk-T2TP6ZC6.js";
|
|
@@ -32,7 +32,7 @@ import {
|
|
|
32
32
|
findMind,
|
|
33
33
|
nextPort,
|
|
34
34
|
voluteSystemDir
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-B4WPXYPI.js";
|
|
36
36
|
|
|
37
37
|
// packages/daemon/src/lib/mind/spirit.ts
|
|
38
38
|
import { cpSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "fs";
|
|
@@ -79,7 +79,7 @@ async function ensureSpiritProject() {
|
|
|
79
79
|
if (existing) return;
|
|
80
80
|
const dir = spiritDir();
|
|
81
81
|
const spiritModel = getSpiritModel();
|
|
82
|
-
const template = resolveTemplate(spiritModel);
|
|
82
|
+
const template = await resolveTemplate(spiritModel);
|
|
83
83
|
const templatesRoot = findTemplatesRoot();
|
|
84
84
|
const { composedDir, manifest } = composeTemplate(templatesRoot, template);
|
|
85
85
|
try {
|
|
@@ -128,7 +128,7 @@ async function ensureSpiritProject() {
|
|
|
128
128
|
} catch (err) {
|
|
129
129
|
slog.warn("failed to add tending schedule to spirit config", logger_default.errorData(err));
|
|
130
130
|
}
|
|
131
|
-
const { createMindUser, chownMindDir, ensureVoluteGroup } = await import("./isolation-
|
|
131
|
+
const { createMindUser, chownMindDir, ensureVoluteGroup } = await import("./isolation-4Q4P7HRV.js");
|
|
132
132
|
ensureVoluteGroup();
|
|
133
133
|
createMindUser("volute", resolve(dir, "home"));
|
|
134
134
|
chownMindDir(dir, "volute");
|
|
@@ -148,7 +148,7 @@ async function syncSpiritTemplate() {
|
|
|
148
148
|
if (!existsSync(dir)) return;
|
|
149
149
|
const templatesRoot = findTemplatesRoot();
|
|
150
150
|
const currentModel = getSpiritModel();
|
|
151
|
-
const expectedTemplate = resolveTemplate(currentModel);
|
|
151
|
+
const expectedTemplate = await resolveTemplate(currentModel);
|
|
152
152
|
const currentTemplate = entry.template ?? "claude";
|
|
153
153
|
if (expectedTemplate !== currentTemplate) {
|
|
154
154
|
slog.info(`spirit template change: ${currentTemplate} \u2192 ${expectedTemplate}`);
|
|
@@ -162,8 +162,8 @@ async function syncSpiritTemplate() {
|
|
|
162
162
|
cpSync(newPkg, resolve(dir, "package.json"));
|
|
163
163
|
await exec("npm", ["install"], { cwd: dir, env: npmEnv() });
|
|
164
164
|
}
|
|
165
|
-
const db = await (await import("./db-
|
|
166
|
-
const { minds } = await import("./schema-
|
|
165
|
+
const db = await (await import("./db-ZEPKEJJD.js")).getDb();
|
|
166
|
+
const { minds } = await import("./schema-LYQUDL7G.js");
|
|
167
167
|
const { eq } = await import("drizzle-orm");
|
|
168
168
|
await db.update(minds).set({ template: expectedTemplate }).where(eq(minds.name, "volute"));
|
|
169
169
|
}
|
|
@@ -7,14 +7,14 @@ import {
|
|
|
7
7
|
modeLabel,
|
|
8
8
|
pollHealth,
|
|
9
9
|
startService
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-4UMXOMZ6.js";
|
|
11
11
|
import {
|
|
12
12
|
readGlobalConfig
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-DNU6XLE2.js";
|
|
14
14
|
import {
|
|
15
15
|
voluteHome,
|
|
16
16
|
voluteSystemDir
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-B4WPXYPI.js";
|
|
18
18
|
|
|
19
19
|
// src/commands/up.ts
|
|
20
20
|
import { spawn } from "child_process";
|
|
@@ -4,10 +4,10 @@ import {
|
|
|
4
4
|
} from "./chunk-T2TP6ZC6.js";
|
|
5
5
|
import {
|
|
6
6
|
getDb
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-B4WPXYPI.js";
|
|
8
8
|
import {
|
|
9
9
|
activity
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-2HZRJ35V.js";
|
|
11
11
|
|
|
12
12
|
// packages/daemon/src/lib/events/activity-events.ts
|
|
13
13
|
var subscribers = /* @__PURE__ */ new Set();
|