volute 0.33.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-ZW4SDL2C.js +15 -0
- package/dist/{ai-service-SBY2WG7O.js → ai-service-LURBEDDB.js} +6 -6
- package/dist/{api-client-YPKOZP2O.js → api-client-3A77HMH7.js} +2 -2
- package/dist/api.d.ts +1 -5195
- package/dist/{archive-INXYFVCW.js → archive-ESU2FUN4.js} +4 -4
- package/dist/{auth-GKCDSO4T.js → auth-WX4TESEI.js} +6 -6
- package/dist/bridge-PXIO6PS2.js +206 -0
- package/dist/chat-QXAJF3FU.js +51 -0
- package/dist/{chunk-NNB4WIG7.js → chunk-2TGZJFAT.js} +3 -3
- package/dist/{chunk-6LXAAQ43.js → chunk-33ODGMFZ.js} +1 -1
- package/dist/{chunk-RPZZSXV3.js → chunk-5N7Y5WAM.js} +21 -2
- package/dist/chunk-5T5YMX6S.js +23 -0
- package/dist/{chunk-7J3HEVR7.js → chunk-5XJYUFZH.js} +28 -16
- package/dist/chunk-7KJOFUNN.js +22 -0
- package/dist/{chunk-2NGTS5UU.js → chunk-A2ZLHBHG.js} +2 -2
- package/dist/{chunk-KIEPMIM5.js → chunk-AN2W47GW.js} +2 -2
- package/dist/{chunk-G53F3JA4.js → chunk-AOB6GVRM.js} +1 -1
- package/dist/{chunk-LRCG2JLP.js → chunk-BDYXIWA5.js} +9 -5
- package/dist/{chunk-YUIHSKR6.js → chunk-BKF4WQCY.js} +2 -2
- package/dist/{chunk-N432I7QH.js → chunk-BMZQYACC.js} +2 -2
- package/dist/{chunk-NAOW2CLO.js → chunk-BTY4WNFE.js} +1 -1
- package/dist/{chunk-ALEF47VT.js → chunk-BV65KRHM.js} +2 -2
- package/dist/{chunk-KVK2DLWI.js → chunk-CORXD635.js} +4 -4
- package/dist/{chunk-PVY5W6QN.js → chunk-F7ZNLYKZ.js} +2 -2
- package/dist/{chunk-QTUVYI7W.js → chunk-FT5KETXZ.js} +3 -3
- package/dist/{chunk-C7I35G4R.js → chunk-IJHIXLVN.js} +44 -8
- package/dist/{chunk-JUKK7FPS.js → chunk-J6CJQDWI.js} +37 -28
- package/dist/{chunk-4RQBJWQX.js → chunk-LOPXTW6H.js} +1 -1
- package/dist/{chunk-RSX4OPZY.js → chunk-MDJGMOSD.js} +8 -137
- package/dist/{chunk-LOEJ4HPQ.js → chunk-N446KRP7.js} +3 -3
- package/dist/{chunk-I5KY25PQ.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-M7UL5S3Q.js → chunk-OTC67N2Z.js} +2 -2
- package/dist/{chunk-GY5HBI7A.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-SKLSMHXO.js → chunk-QWTR6AWZ.js} +3 -3
- package/dist/chunk-TXSA4Q3V.js +116 -0
- package/dist/{chunk-VH33ZWMW.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-RVGLDGMI.js → chunk-WZRZFFCL.js} +25 -27
- package/dist/{chunk-JYVGHWEJ.js → chunk-XRQSAMX2.js} +4 -4
- package/dist/{chunk-OYAKCAVY.js → chunk-ZSR72JB3.js} +1 -1
- package/dist/{chunk-UKVWJRKN.js → chunk-ZX7EAV5J.js} +17 -7
- package/dist/cli.js +90 -29
- package/dist/clock-HSEKS5AR.js +289 -0
- package/dist/{cloud-sync-4NWLMFVH.js → cloud-sync-6JL4C24T.js} +22 -23
- package/dist/config-UTS7QULS.js +76 -0
- package/dist/connectors/discord-bridge.js +4 -4
- package/dist/connectors/slack-bridge.js +4 -4
- package/dist/connectors/telegram-bridge.js +4 -4
- package/dist/{conversations-AWI5SZW2.js → conversations-2PW57WO2.js} +6 -6
- 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 +1349 -1211
- package/dist/db-BDMH4SZ2.js +20 -0
- package/dist/db-BVBJ57TU.js +9 -0
- package/dist/delete-L5PAVDGQ.js +42 -0
- package/dist/delivery-manager-H5ZVBMCQ.js +31 -0
- package/dist/{delivery-router-FL45JL7N.js → delivery-router-HEJSJAHQ.js} +5 -5
- package/dist/down-74VXM45A.js +17 -0
- package/dist/env-E4XHO2BI.js +223 -0
- package/dist/exec-PY7THYH4.js +17 -0
- package/dist/export-OAS6QVBN.js +113 -0
- package/dist/extension-D74CNM7G.js +89 -0
- package/dist/extensions-XDDFY72A.js +49 -0
- package/dist/files-CWTK6V3H.js +53 -0
- package/dist/import-5A3T7QV4.js +143 -0
- package/dist/{isolation-LLAYQYDY.js → isolation-TK5RX2WM.js} +4 -4
- package/dist/join-DF5XSJAC.js +67 -0
- package/dist/lib-DYEZMGW7.js +6588 -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-QBLIV7ZJ.js +18 -0
- package/dist/mind-history-IE2QH7U5.js +275 -0
- 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-U3VFO273.js → package-D2FSVFAX.js} +11 -8
- package/dist/read-67VRP2DO.js +91 -0
- package/dist/{read-stdin-HQJ7774D.js → read-stdin-3X5VYKNS.js} +2 -2
- package/dist/register-SB7NXCOE.js +51 -0
- package/dist/{registry-PJ4S5PHQ.js → registry-GBSNW3HG.js} +3 -3
- package/dist/reject-MUR2KWJ4.js +40 -0
- package/dist/restart-5EGG4JXU.js +42 -0
- package/dist/{sandbox-GJOK4QLQ.js → sandbox-R37VIU36.js} +6 -6
- package/dist/scheduler-Y7O4CJXL.js +31 -0
- package/dist/{schema-PA3M5ZKH.js → schema-XVZ2CLKW.js} +4 -2
- package/dist/{seed-QDYVLG74.js → seed-EQORWX77.js} +3 -3
- 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-XMCBE3LF.js → setup-BJ4YAY26.js} +155 -129
- package/dist/{setup-TISPCO22.js → setup-RHJRFURI.js} +4 -4
- package/dist/skill-TAAKEYBV.js +389 -0
- package/dist/skills/plan-coordinator/SKILL.md +60 -0
- package/dist/skills/volute-mind/SKILL.md +9 -227
- package/dist/skills/volute-mind/references/extensions.md +34 -0
- package/dist/skills/volute-mind/references/integrations.md +48 -0
- package/dist/skills/volute-mind/references/routing.md +86 -0
- package/dist/skills/volute-mind/references/sleep.md +33 -0
- package/dist/skills/volute-mind/references/variants.md +31 -0
- package/dist/{skills-7FV7EJTE.js → skills-EKMCQ46K.js} +12 -8
- 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-WKLZXUIQ.js → sprout-HE4TITMK.js} +3 -3
- 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-XHQBZROW.js → tailscale-ZIZ2HWJ5.js} +5 -5
- package/dist/template-hash-A7FNHTB7.js +9 -0
- package/dist/up-77ICEDEW.js +19 -0
- package/dist/update-ANE5ZM7F.js +225 -0
- package/dist/{update-check-ZD6OOIYQ.js → update-check-UV55CBEP.js} +4 -4
- package/dist/upgrade-ZMDGC7M2.js +74 -0
- package/dist/variant-QWL2WSRI.js +62 -0
- package/dist/{version-notify-NBI2MTJO.js → version-notify-FXSEMXWW.js} +29 -28
- package/dist/{volute-config-HD7WWUQC.js → volute-config-D2XVS2YI.js} +2 -2
- package/dist/web-assets/assets/index-BhxWKvbB.css +1 -0
- package/dist/web-assets/assets/index-CHVKJ9II.js +75 -0
- package/dist/web-assets/ext-theme.css +48 -9
- package/dist/web-assets/index.html +2 -2
- package/dist/web-assets/sw.js +117 -0
- package/drizzle/0005_meta_summaries.sql +15 -0
- package/drizzle/meta/0005_snapshot.json +7 -0
- package/drizzle/meta/_journal.json +7 -0
- package/package.json +10 -7
- 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/packages/extensions/plan/dist/ui/assets/index-CJj2gZnZ.css +1 -0
- package/packages/extensions/plan/dist/ui/assets/index-FMEJmvQz.js +61 -0
- package/packages/extensions/plan/dist/ui/index.html +14 -0
- package/packages/extensions/plan/skills/plan/SKILL.md +43 -0
- package/packages/extensions/plan/skills/plan/scripts/plan-hook.sh +37 -0
- package/templates/_base/home/VOLUTE.md +12 -19
- package/templates/_base/src/lib/auto-commit.ts +8 -8
- package/templates/_base/src/lib/context-breakdown.ts +450 -0
- package/templates/_base/src/lib/format-prefix.ts +17 -0
- package/templates/_base/src/lib/hook-loader.ts +8 -2
- package/templates/_base/src/lib/router.ts +75 -33
- package/templates/_base/src/lib/routing.ts +4 -1
- package/templates/_base/src/lib/startup.ts +16 -8
- package/templates/_base/src/lib/types.ts +2 -1
- package/templates/_base/src/lib/volute-server.ts +75 -8
- package/templates/claude/.init/CLAUDE.md +4 -10
- package/templates/claude/package.json.tmpl +1 -0
- package/templates/claude/src/agent.ts +108 -33
- package/templates/claude/src/lib/hooks/reply-instructions.ts +27 -7
- package/templates/claude/src/lib/stream-consumer.ts +2 -2
- package/templates/claude/src/server.ts +1 -0
- package/templates/codex/package.json.tmpl +1 -0
- package/templates/codex/src/agent.ts +80 -8
- package/templates/codex/src/server.ts +1 -4
- package/templates/pi/package.json.tmpl +1 -0
- package/templates/pi/src/agent.ts +115 -36
- package/templates/pi/src/lib/event-handler.ts +22 -7
- package/templates/pi/src/lib/reply-instructions-extension.ts +23 -4
- package/templates/pi/src/lib/subagents.ts +20 -17
- package/templates/pi/src/server.ts +2 -5
- package/dist/accept-D5VBM7JW.js +0 -42
- package/dist/activity-events-XJO3P4RR.js +0 -15
- package/dist/bridge-TXWWPPOJ.js +0 -207
- package/dist/chat-U5ZOME3O.js +0 -68
- package/dist/chunk-3Z2DPESO.js +0 -3634
- package/dist/chunk-A2A4KLFE.js +0 -1528
- package/dist/chunk-K3NQKI34.js +0 -10
- package/dist/chunk-NPKSDYA2.js +0 -156
- package/dist/chunk-PB65JZK2.js +0 -85
- package/dist/clock-BVH3V6E3.js +0 -266
- package/dist/config-H2H4UIF7.js +0 -72
- package/dist/create-2FK7Z46Y.js +0 -44
- package/dist/create-YWD2TIP4.js +0 -71
- package/dist/daemon-client-6QXHZ7US.js +0 -12
- package/dist/daemon-restart-GOBUKLX7.js +0 -52
- package/dist/db-F34YLV7D.js +0 -9
- package/dist/db-RA45JBFG.js +0 -16
- package/dist/delete-QTGWEDBI.js +0 -35
- package/dist/delivery-manager-PFAKEJTC.js +0 -32
- package/dist/down-FWWTEKXM.js +0 -15
- package/dist/env-JCOF2222.js +0 -191
- package/dist/export-SUYRLI5Q.js +0 -112
- package/dist/extension-OBTGKQQD.js +0 -175
- package/dist/extensions-KYNTVTMO.js +0 -30
- package/dist/files-65PMW5IK.js +0 -47
- package/dist/history-DKCDI3JO.js +0 -128
- package/dist/import-DDUFE7AY.js +0 -23
- package/dist/join-I5QEE3LG.js +0 -66
- package/dist/list-JQ463EDA.js +0 -41
- package/dist/login-D7ETSU4R.js +0 -47
- package/dist/login-RIJF2F4G.js +0 -47
- package/dist/logout-5MLHZALK.js +0 -40
- package/dist/logout-UZJRGY4Z.js +0 -21
- package/dist/message-delivery-DFF5SJRM.js +0 -42
- package/dist/mind-IOJFLEM5.js +0 -108
- package/dist/mind-activity-tracker-F6O4Q2SL.js +0 -18
- package/dist/mind-list-WUPMQDYQ.js +0 -30
- package/dist/mind-manager-NBJF5D26.js +0 -32
- package/dist/mind-profile-P67FEHOY.js +0 -47
- package/dist/mind-service-2MQ6UK5N.js +0 -38
- package/dist/mind-sleep-WW2IX7JT.js +0 -42
- package/dist/mind-status-L3EFFRPR.js +0 -56
- package/dist/mind-wake-VSSGW465.js +0 -37
- package/dist/read-EBY56C33.js +0 -75
- package/dist/register-HD74C4TT.js +0 -47
- package/dist/reject-UJKFBHRO.js +0 -40
- package/dist/restart-3UCMRUVC.js +0 -33
- package/dist/scheduler-ZZ7XGQG6.js +0 -32
- package/dist/seed-check-S2IX25RL.js +0 -32
- package/dist/seed-cmd-DKOUFEAU.js +0 -36
- package/dist/seed-create-4XBBOLRH.js +0 -112
- package/dist/seed-sprout-GQEIIQRT.js +0 -132
- package/dist/send-QIV2INHB.js +0 -373
- package/dist/skill-PSQGRRJX.js +0 -358
- 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-JTXSN7NV.js +0 -36
- package/dist/spirit-VRONKFMF.js +0 -23
- package/dist/split-STOROBYJ.js +0 -63
- package/dist/start-K2NCUUCG.js +0 -33
- package/dist/status-3JBTFSMI.js +0 -115
- package/dist/stop-H26JZDXF.js +0 -32
- package/dist/system-chat-JAPOJ3KE.js +0 -36
- package/dist/systems-XRI52VCH.js +0 -61
- package/dist/template-hash-A6VVKOXJ.js +0 -9
- package/dist/up-M5AS6SBV.js +0 -18
- package/dist/update-UD543CXX.js +0 -215
- package/dist/upgrade-O4Q7WJM3.js +0 -67
- package/dist/variant-7TGZHOU3.js +0 -41
- package/dist/web-assets/assets/index-CWJrVveV.css +0 -1
- package/dist/web-assets/assets/index-DJt14FRI.js +0 -75
- package/packages/extensions/pages/dist/ui/assets/index-tLTROSk5.js +0 -2
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
logger_default
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-BKF4WQCY.js";
|
|
5
5
|
import {
|
|
6
6
|
getDb
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-BDYXIWA5.js";
|
|
8
8
|
import {
|
|
9
9
|
activity
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-5N7Y5WAM.js";
|
|
11
11
|
|
|
12
|
-
// src/lib/events/activity-events.ts
|
|
12
|
+
// packages/daemon/src/lib/events/activity-events.ts
|
|
13
13
|
var subscribers = /* @__PURE__ */ new Set();
|
|
14
14
|
function subscribe(callback) {
|
|
15
15
|
subscribers.add(callback);
|
|
@@ -3,9 +3,9 @@ import {
|
|
|
3
3
|
composeTemplate,
|
|
4
4
|
findTemplatesRoot,
|
|
5
5
|
listFiles
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-AOB6GVRM.js";
|
|
7
7
|
|
|
8
|
-
// src/lib/template-hash.ts
|
|
8
|
+
// packages/daemon/src/lib/template-hash.ts
|
|
9
9
|
import { createHash } from "crypto";
|
|
10
10
|
import { existsSync, readFileSync, rmSync } from "fs";
|
|
11
11
|
import { resolve } from "path";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
logger_default
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-BKF4WQCY.js";
|
|
5
5
|
import {
|
|
6
6
|
readGlobalConfig,
|
|
7
7
|
writeGlobalConfig
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-BMZQYACC.js";
|
|
9
9
|
|
|
10
|
-
// src/lib/ai-service.ts
|
|
10
|
+
// packages/daemon/src/lib/ai-service.ts
|
|
11
11
|
import { complete, getEnvApiKey, getModel, getModels, getProviders } from "@mariozechner/pi-ai";
|
|
12
12
|
import { getOAuthApiKey } from "@mariozechner/pi-ai/oauth";
|
|
13
13
|
var aiLog = logger_default.child("ai-service");
|
|
@@ -1,24 +1,26 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
logger_default
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-BKF4WQCY.js";
|
|
5
5
|
import {
|
|
6
6
|
exec,
|
|
7
7
|
gitExec
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-AN2W47GW.js";
|
|
9
9
|
import {
|
|
10
10
|
readGlobalConfig,
|
|
11
11
|
writeGlobalConfig
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-BMZQYACC.js";
|
|
13
13
|
import {
|
|
14
14
|
getDb,
|
|
15
|
+
mindDir,
|
|
16
|
+
readRegistry,
|
|
15
17
|
voluteHome
|
|
16
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-BDYXIWA5.js";
|
|
17
19
|
import {
|
|
18
20
|
sharedSkills
|
|
19
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-5N7Y5WAM.js";
|
|
20
22
|
|
|
21
|
-
// src/lib/skills.ts
|
|
23
|
+
// packages/daemon/src/lib/skills.ts
|
|
22
24
|
import { createHash } from "crypto";
|
|
23
25
|
import {
|
|
24
26
|
cpSync,
|
|
@@ -34,7 +36,7 @@ import { basename, dirname, join, resolve } from "path";
|
|
|
34
36
|
import { eq, sql } from "drizzle-orm";
|
|
35
37
|
var VALID_SKILL_ID = /^[a-zA-Z0-9_-]+$/;
|
|
36
38
|
var SEED_SKILLS = ["orientation", "memory"];
|
|
37
|
-
var STANDARD_SKILLS = ["volute-mind", "memory", "dreaming"
|
|
39
|
+
var STANDARD_SKILLS = ["volute-mind", "memory", "dreaming"];
|
|
38
40
|
function getStandardSkillsWithExtensions() {
|
|
39
41
|
const config = readGlobalConfig();
|
|
40
42
|
if (config.defaultSkills) return [...config.defaultSkills];
|
|
@@ -44,7 +46,7 @@ async function initDefaultSkills() {
|
|
|
44
46
|
const config = readGlobalConfig();
|
|
45
47
|
let extensionSkills = [];
|
|
46
48
|
try {
|
|
47
|
-
const { getExtensionStandardSkills } = await import("./extensions-
|
|
49
|
+
const { getExtensionStandardSkills } = await import("./extensions-XDDFY72A.js");
|
|
48
50
|
extensionSkills = getExtensionStandardSkills();
|
|
49
51
|
} catch (err) {
|
|
50
52
|
logger_default.warn("failed to load extension standard skills during init", logger_default.errorData(err));
|
|
@@ -527,6 +529,38 @@ function hashSkillDir(dir) {
|
|
|
527
529
|
}
|
|
528
530
|
return hash.digest("hex");
|
|
529
531
|
}
|
|
532
|
+
function isAutoUpdateSkillsEnabled() {
|
|
533
|
+
return readGlobalConfig().autoUpdateSkills !== false;
|
|
534
|
+
}
|
|
535
|
+
async function autoUpdateMindSkills() {
|
|
536
|
+
const baseMinds = await readRegistry();
|
|
537
|
+
const shared = await listSharedSkills();
|
|
538
|
+
const sharedMap = new Map(shared.map((s) => [s.id, s]));
|
|
539
|
+
for (const mind of baseMinds) {
|
|
540
|
+
const dir = mind.dir ?? mindDir(mind.name);
|
|
541
|
+
const skillsDir = mindSkillsDir(dir);
|
|
542
|
+
if (!existsSync(skillsDir)) continue;
|
|
543
|
+
const entries = readdirSync(skillsDir, { withFileTypes: true }).filter((e) => e.isDirectory());
|
|
544
|
+
for (const entry of entries) {
|
|
545
|
+
const upstream = readUpstream(join(skillsDir, entry.name));
|
|
546
|
+
if (!upstream) continue;
|
|
547
|
+
const sharedSkill = sharedMap.get(upstream.source);
|
|
548
|
+
if (!sharedSkill || sharedSkill.version <= upstream.version) continue;
|
|
549
|
+
try {
|
|
550
|
+
const result = await updateSkill(mind.name, dir, entry.name);
|
|
551
|
+
if (result.status === "updated") {
|
|
552
|
+
logger_default.info(`auto-updated skill ${entry.name} for ${mind.name} (v${sharedSkill.version})`);
|
|
553
|
+
} else if (result.status === "conflict") {
|
|
554
|
+
logger_default.warn(
|
|
555
|
+
`auto-update conflict for skill ${entry.name} in ${mind.name}: ${result.conflictFiles.join(", ")}`
|
|
556
|
+
);
|
|
557
|
+
}
|
|
558
|
+
} catch (err) {
|
|
559
|
+
logger_default.error(`failed to auto-update skill ${entry.name} for ${mind.name}`, logger_default.errorData(err));
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
}
|
|
530
564
|
async function syncBuiltinSkills() {
|
|
531
565
|
let skillsRoot;
|
|
532
566
|
try {
|
|
@@ -579,5 +613,7 @@ export {
|
|
|
579
613
|
listFilesRecursive,
|
|
580
614
|
findSkillsRoot,
|
|
581
615
|
hashSkillDir,
|
|
616
|
+
isAutoUpdateSkillsEnabled,
|
|
617
|
+
autoUpdateMindSkills,
|
|
582
618
|
syncBuiltinSkills
|
|
583
619
|
};
|
|
@@ -5,10 +5,13 @@ import {
|
|
|
5
5
|
pollHealthDown,
|
|
6
6
|
readDaemonConfig,
|
|
7
7
|
stopService
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-2TGZJFAT.js";
|
|
9
|
+
import {
|
|
10
|
+
command
|
|
11
|
+
} from "./chunk-TXSA4Q3V.js";
|
|
9
12
|
import {
|
|
10
13
|
voluteSystemDir
|
|
11
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-BDYXIWA5.js";
|
|
12
15
|
|
|
13
16
|
// src/commands/down.ts
|
|
14
17
|
import { existsSync, readFileSync, unlinkSync } from "fs";
|
|
@@ -103,36 +106,42 @@ async function stopDaemon() {
|
|
|
103
106
|
console.error("Daemon did not exit cleanly, sent SIGKILL.");
|
|
104
107
|
return { stopped: true, clean: false };
|
|
105
108
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
console.
|
|
114
|
-
|
|
109
|
+
var cmd = command({
|
|
110
|
+
name: "volute down",
|
|
111
|
+
description: "Stop the daemon",
|
|
112
|
+
flags: {},
|
|
113
|
+
run: async () => {
|
|
114
|
+
const mode = getServiceMode();
|
|
115
|
+
if (mode !== "manual") {
|
|
116
|
+
console.log(`Stopping volute (${modeLabel(mode)})...`);
|
|
117
|
+
try {
|
|
118
|
+
await stopService(mode);
|
|
119
|
+
} catch (err) {
|
|
120
|
+
console.error(`Failed to stop service: ${err instanceof Error ? err.message : err}`);
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
const config = readDaemonConfig();
|
|
124
|
+
if (await pollHealthDown("127.0.0.1", config.internalPort ?? config.port)) {
|
|
125
|
+
console.log("Daemon stopped.");
|
|
126
|
+
} else {
|
|
127
|
+
console.error("Service stopped but daemon may still be responding.");
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
return;
|
|
115
131
|
}
|
|
116
|
-
const
|
|
117
|
-
if (
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
console.error(
|
|
132
|
+
const result = await stopDaemon();
|
|
133
|
+
if (result.stopped) return;
|
|
134
|
+
if (result.reason === "orphan") {
|
|
135
|
+
console.error(`Daemon appears to be running on port ${result.port} but PID file is missing.`);
|
|
136
|
+
console.error(`Kill the process manually: lsof -ti :${result.port} | xargs kill`);
|
|
137
|
+
process.exit(1);
|
|
138
|
+
} else if (result.reason === "kill-failed") {
|
|
121
139
|
process.exit(1);
|
|
122
140
|
}
|
|
123
|
-
|
|
141
|
+
console.log("Daemon is not running.");
|
|
124
142
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
if (result.reason === "orphan") {
|
|
128
|
-
console.error(`Daemon appears to be running on port ${result.port} but PID file is missing.`);
|
|
129
|
-
console.error(`Kill the process manually: lsof -ti :${result.port} | xargs kill`);
|
|
130
|
-
process.exit(1);
|
|
131
|
-
} else if (result.reason === "kill-failed") {
|
|
132
|
-
process.exit(1);
|
|
133
|
-
}
|
|
134
|
-
console.log("Daemon is not running.");
|
|
135
|
-
}
|
|
143
|
+
});
|
|
144
|
+
var run = cmd.execute;
|
|
136
145
|
|
|
137
146
|
export {
|
|
138
147
|
stopDaemon,
|
|
@@ -3,34 +3,20 @@ import {
|
|
|
3
3
|
readEnv,
|
|
4
4
|
sharedEnvPath,
|
|
5
5
|
writeEnv
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-A2ZLHBHG.js";
|
|
7
7
|
import {
|
|
8
8
|
logger_default
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import {
|
|
11
|
-
parseArgs
|
|
12
|
-
} from "./chunk-D424ZQGI.js";
|
|
9
|
+
} from "./chunk-BKF4WQCY.js";
|
|
13
10
|
import {
|
|
14
11
|
voluteSystemDir
|
|
15
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-BDYXIWA5.js";
|
|
16
13
|
|
|
17
|
-
// src/
|
|
18
|
-
import {
|
|
19
|
-
|
|
20
|
-
existsSync as existsSync2,
|
|
21
|
-
mkdirSync,
|
|
22
|
-
openSync,
|
|
23
|
-
readdirSync,
|
|
24
|
-
readFileSync as readFileSync2,
|
|
25
|
-
readSync,
|
|
26
|
-
rmSync,
|
|
27
|
-
statSync,
|
|
28
|
-
writeFileSync as writeFileSync2
|
|
29
|
-
} from "fs";
|
|
30
|
-
import { homedir, tmpdir } from "os";
|
|
14
|
+
// packages/daemon/src/lib/import-utils.ts
|
|
15
|
+
import { existsSync as existsSync2, mkdirSync, readdirSync, readFileSync as readFileSync2, statSync, writeFileSync as writeFileSync2 } from "fs";
|
|
16
|
+
import { homedir } from "os";
|
|
31
17
|
import { basename, resolve as resolve2 } from "path";
|
|
32
18
|
|
|
33
|
-
// src/lib/bridges.ts
|
|
19
|
+
// packages/daemon/src/lib/bridges.ts
|
|
34
20
|
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
35
21
|
import { resolve } from "path";
|
|
36
22
|
function bridgesPath() {
|
|
@@ -99,121 +85,7 @@ function findBridgeForChannel(voluteChannelName) {
|
|
|
99
85
|
return null;
|
|
100
86
|
}
|
|
101
87
|
|
|
102
|
-
// src/
|
|
103
|
-
async function run(args) {
|
|
104
|
-
const { positional, flags } = parseArgs(args, {
|
|
105
|
-
name: { type: "string" },
|
|
106
|
-
session: { type: "string" },
|
|
107
|
-
template: { type: "string" }
|
|
108
|
-
});
|
|
109
|
-
const inputPath = positional[0];
|
|
110
|
-
if (inputPath && (inputPath.endsWith(".volute") || isZipFile(inputPath))) {
|
|
111
|
-
await importArchive(resolve2(inputPath), flags.name);
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
const wsDir = resolveWorkspace(inputPath);
|
|
115
|
-
const { daemonFetch } = await import("./daemon-client-6QXHZ7US.js");
|
|
116
|
-
const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
|
|
117
|
-
const client = getClient();
|
|
118
|
-
const res = await daemonFetch(urlOf(client.api.minds.import.$url()), {
|
|
119
|
-
method: "POST",
|
|
120
|
-
headers: { "Content-Type": "application/json" },
|
|
121
|
-
body: JSON.stringify({
|
|
122
|
-
workspacePath: wsDir,
|
|
123
|
-
name: flags.name,
|
|
124
|
-
template: flags.template,
|
|
125
|
-
sessionPath: flags.session
|
|
126
|
-
})
|
|
127
|
-
});
|
|
128
|
-
const data = await res.json();
|
|
129
|
-
if (!res.ok) {
|
|
130
|
-
console.error(data.error ?? "Failed to import mind");
|
|
131
|
-
process.exit(1);
|
|
132
|
-
}
|
|
133
|
-
console.log(`
|
|
134
|
-
${data.message ?? `Imported mind: ${data.name} (port ${data.port})`}`);
|
|
135
|
-
console.log(`
|
|
136
|
-
volute mind start ${data.name}`);
|
|
137
|
-
}
|
|
138
|
-
function isZipFile(path) {
|
|
139
|
-
const resolved = resolve2(path);
|
|
140
|
-
if (!existsSync2(resolved)) return false;
|
|
141
|
-
const fd = openSync(resolved, "r");
|
|
142
|
-
try {
|
|
143
|
-
const buf = Buffer.alloc(4);
|
|
144
|
-
const bytesRead = readSync(fd, buf, 0, 4, 0);
|
|
145
|
-
return bytesRead === 4 && buf[0] === 80 && buf[1] === 75 && buf[2] === 3 && buf[3] === 4;
|
|
146
|
-
} finally {
|
|
147
|
-
closeSync(fd);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
async function importArchive(archivePath, nameOverride) {
|
|
151
|
-
if (!existsSync2(archivePath)) {
|
|
152
|
-
console.error(`File not found: ${archivePath}`);
|
|
153
|
-
process.exit(1);
|
|
154
|
-
}
|
|
155
|
-
const { extractArchive } = await import("./archive-INXYFVCW.js");
|
|
156
|
-
const tempDir = resolve2(tmpdir(), `volute-import-${Date.now()}`);
|
|
157
|
-
mkdirSync(tempDir, { recursive: true });
|
|
158
|
-
let extracted;
|
|
159
|
-
try {
|
|
160
|
-
extracted = extractArchive(archivePath, tempDir);
|
|
161
|
-
} catch (err) {
|
|
162
|
-
rmSync(tempDir, { recursive: true, force: true });
|
|
163
|
-
console.error(`Failed to extract archive: ${err.message}`);
|
|
164
|
-
process.exit(1);
|
|
165
|
-
}
|
|
166
|
-
try {
|
|
167
|
-
const { daemonFetch } = await import("./daemon-client-6QXHZ7US.js");
|
|
168
|
-
const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
|
|
169
|
-
const client = getClient();
|
|
170
|
-
const res = await daemonFetch(urlOf(client.api.minds.import.$url()), {
|
|
171
|
-
method: "POST",
|
|
172
|
-
headers: { "Content-Type": "application/json" },
|
|
173
|
-
body: JSON.stringify({
|
|
174
|
-
archivePath: tempDir,
|
|
175
|
-
name: nameOverride,
|
|
176
|
-
manifest: extracted.manifest
|
|
177
|
-
})
|
|
178
|
-
});
|
|
179
|
-
const data = await res.json();
|
|
180
|
-
if (!res.ok) {
|
|
181
|
-
console.error(data.error ?? "Failed to import mind");
|
|
182
|
-
process.exit(1);
|
|
183
|
-
}
|
|
184
|
-
console.log(`
|
|
185
|
-
${data.message ?? `Imported mind: ${data.name} (port ${data.port})`}`);
|
|
186
|
-
console.log(`
|
|
187
|
-
volute mind start ${data.name}`);
|
|
188
|
-
} catch (err) {
|
|
189
|
-
rmSync(tempDir, { recursive: true, force: true });
|
|
190
|
-
throw err;
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
function resolveWorkspace(explicitPath) {
|
|
194
|
-
if (explicitPath) {
|
|
195
|
-
const wsDir = resolve2(explicitPath);
|
|
196
|
-
if (!existsSync2(resolve2(wsDir, "SOUL.md")) || !existsSync2(resolve2(wsDir, "IDENTITY.md"))) {
|
|
197
|
-
console.error("Not a valid OpenClaw workspace: missing SOUL.md or IDENTITY.md");
|
|
198
|
-
process.exit(1);
|
|
199
|
-
}
|
|
200
|
-
return wsDir;
|
|
201
|
-
}
|
|
202
|
-
const cwd = process.cwd();
|
|
203
|
-
if (existsSync2(resolve2(cwd, "SOUL.md")) && existsSync2(resolve2(cwd, "IDENTITY.md"))) {
|
|
204
|
-
console.log(`Using workspace: ${cwd}`);
|
|
205
|
-
return cwd;
|
|
206
|
-
}
|
|
207
|
-
const openclawWs = resolve2(homedir(), ".openclaw/workspace");
|
|
208
|
-
if (existsSync2(resolve2(openclawWs, "SOUL.md")) && existsSync2(resolve2(openclawWs, "IDENTITY.md"))) {
|
|
209
|
-
console.log(`Using workspace: ${openclawWs}`);
|
|
210
|
-
return openclawWs;
|
|
211
|
-
}
|
|
212
|
-
console.error(
|
|
213
|
-
"Usage: volute mind import [<workspace-path>] [--name <name>] [--session <path>] [--template <name>]\n\nNo OpenClaw workspace found. Provide a path, run from a workspace, or ensure ~/.openclaw/workspace exists."
|
|
214
|
-
);
|
|
215
|
-
process.exit(1);
|
|
216
|
-
}
|
|
88
|
+
// packages/daemon/src/lib/import-utils.ts
|
|
217
89
|
function findOpenClawSession(workspaceDir) {
|
|
218
90
|
const ocAgentsDir = resolve2(homedir(), ".openclaw/agents");
|
|
219
91
|
if (!existsSync2(ocAgentsDir)) return void 0;
|
|
@@ -327,7 +199,6 @@ export {
|
|
|
327
199
|
removeChannelMapping,
|
|
328
200
|
resolveChannelMapping,
|
|
329
201
|
findBridgeForChannel,
|
|
330
|
-
run,
|
|
331
202
|
findOpenClawSession,
|
|
332
203
|
sessionMatchesWorkspace,
|
|
333
204
|
importPiSession,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
publish
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-CORXD635.js";
|
|
5
5
|
import {
|
|
6
6
|
logger_default
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-BKF4WQCY.js";
|
|
8
8
|
|
|
9
|
-
// src/lib/events/mind-activity-tracker.ts
|
|
9
|
+
// packages/daemon/src/lib/events/mind-activity-tracker.ts
|
|
10
10
|
var IDLE_TIMEOUT_MS = 5 * 60 * 1e3;
|
|
11
11
|
var minds = /* @__PURE__ */ new Map();
|
|
12
12
|
function getState(mind) {
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
import {
|
|
3
3
|
mindDir,
|
|
4
4
|
stateDir
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-BDYXIWA5.js";
|
|
6
6
|
|
|
7
|
-
// src/lib/archive.ts
|
|
7
|
+
// packages/daemon/src/lib/archive.ts
|
|
8
8
|
import { execFileSync } from "child_process";
|
|
9
9
|
import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from "fs";
|
|
10
10
|
import { join, relative, resolve } from "path";
|
|
@@ -1,18 +1,26 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
// src/lib/parse-args.ts
|
|
3
|
+
// packages/cli/src/lib/parse-args.ts
|
|
4
4
|
function parseArgs(args, flags) {
|
|
5
5
|
const positional = [];
|
|
6
6
|
const result = {};
|
|
7
|
+
let help = false;
|
|
7
8
|
for (const [key, def] of Object.entries(flags)) {
|
|
8
9
|
result[key] = def.type === "boolean" ? false : void 0;
|
|
9
10
|
}
|
|
10
11
|
for (let i = 0; i < args.length; i++) {
|
|
11
12
|
const arg = args[i];
|
|
13
|
+
if (arg === "--help" || arg === "-h") {
|
|
14
|
+
help = true;
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
12
17
|
if (arg.startsWith("--")) {
|
|
13
18
|
const name = arg.slice(2);
|
|
14
19
|
const def = flags[name];
|
|
15
|
-
if (!def)
|
|
20
|
+
if (!def) {
|
|
21
|
+
console.error(`Warning: unknown flag --${name}`);
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
16
24
|
if (def.type === "boolean") {
|
|
17
25
|
result[name] = true;
|
|
18
26
|
} else if (i + 1 < args.length) {
|
|
@@ -23,7 +31,7 @@ function parseArgs(args, flags) {
|
|
|
23
31
|
positional.push(arg);
|
|
24
32
|
}
|
|
25
33
|
}
|
|
26
|
-
return { positional, flags: result };
|
|
34
|
+
return { positional, flags: result, help };
|
|
27
35
|
}
|
|
28
36
|
|
|
29
37
|
export {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
voluteSystemDir
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-BDYXIWA5.js";
|
|
5
5
|
|
|
6
|
-
// src/lib/update-check.ts
|
|
6
|
+
// packages/daemon/src/lib/update-check.ts
|
|
7
7
|
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
8
8
|
import { resolve } from "path";
|
|
9
9
|
var CACHE_TTL = 60 * 60 * 1e3;
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
logger_default
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-BKF4WQCY.js";
|
|
5
5
|
import {
|
|
6
6
|
readGlobalConfig
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-BMZQYACC.js";
|
|
8
8
|
import {
|
|
9
9
|
getBaseName,
|
|
10
10
|
readRegistry,
|
|
11
11
|
voluteHome,
|
|
12
12
|
voluteSystemDir,
|
|
13
13
|
voluteUserHome
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-BDYXIWA5.js";
|
|
15
15
|
|
|
16
|
-
// src/lib/sandbox.ts
|
|
16
|
+
// packages/daemon/src/lib/sandbox.ts
|
|
17
17
|
import { resolve } from "path";
|
|
18
18
|
var slog = logger_default.child("sandbox");
|
|
19
19
|
var sandboxManager = null;
|