volute 0.48.0 → 0.49.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 +79 -328
- package/dist/{activity-events-MIOK3IOU.js → activity-events-GJJAI2WT.js} +4 -4
- package/dist/{ai-service-643TNFPH.js → ai-service-A7FS7EC3.js} +5 -5
- package/dist/{archive-6Z4GFQPH.js → archive-7E3YE6VF.js} +3 -3
- package/dist/{auth-A4VGHADI.js → auth-ABYLOEZ7.js} +5 -5
- package/dist/{avatar-image-Y45R7LW5.js → avatar-image-6ATV2IOZ.js} +4 -4
- package/dist/{backup-UDH4GMSW.js → backup-XYAMT4CU.js} +15 -15
- package/dist/{chat-X43VYHH2.js → chat-OGXAEXMV.js} +2 -2
- package/dist/{chunk-LTLFOSA4.js → chunk-3B427GUK.js} +3 -3
- package/dist/{chunk-XVBSFLM7.js → chunk-4B62E4CG.js} +2 -2
- package/dist/{chunk-ODDGGLM6.js → chunk-4DSGN4FL.js} +3 -3
- package/dist/{chunk-PJVPDY2Z.js → chunk-6HGEZJDH.js} +2 -2
- package/dist/{chunk-MJRXFUMS.js → chunk-DAIIMBLB.js} +3 -3
- package/dist/{chunk-DGGZVZTM.js → chunk-DVN6DNMI.js} +1 -1
- package/dist/chunk-EADX54RG.js +113 -0
- package/dist/{chunk-EIQDZC43.js → chunk-EFT2OALG.js} +6 -2
- package/dist/{chunk-OQJMTHEH.js → chunk-EG5LSKHU.js} +2 -2
- package/dist/{chunk-WQ46E33M.js → chunk-FBBS4BVR.js} +2 -2
- package/dist/{chunk-HUNDXZBZ.js → chunk-GWVFDUNB.js} +45 -14
- package/dist/{chunk-FJ2MZ5PH.js → chunk-HCYQRME2.js} +2 -2
- package/dist/{chunk-T4VS7UDW.js → chunk-IH5TKXX6.js} +9 -9
- package/dist/{chunk-Q7HOAVFR.js → chunk-JBIFXB6I.js} +4 -4
- package/dist/{chunk-WARH6GIV.js → chunk-JCBPU57A.js} +12 -10
- package/dist/{chunk-VZRA5TYO.js → chunk-JCWB2ITW.js} +2 -2
- package/dist/{chunk-MOERAQXH.js → chunk-JPGHSXSV.js} +18 -25
- package/dist/{chunk-USD45JKR.js → chunk-K3JOLGWF.js} +7 -7
- package/dist/{chunk-3YUBFTDN.js → chunk-KHCKZ36O.js} +1 -1
- package/dist/{chunk-7KRIHYLR.js → chunk-L27YYONJ.js} +2 -2
- package/dist/{chunk-SZJCJVXV.js → chunk-MG3Z34YE.js} +2 -2
- package/dist/{chunk-5KXCM5AW.js → chunk-NJHN6IRB.js} +9 -1
- package/dist/{chunk-2OIYNHWO.js → chunk-NOIAHMJB.js} +1 -1
- package/dist/{chunk-2MJ7EOMT.js → chunk-P4LHVRNE.js} +1 -0
- package/dist/{chunk-IJPMIEVE.js → chunk-PY24ZL62.js} +1 -1
- package/dist/{chunk-VB2QXUJQ.js → chunk-QQBOI3QA.js} +202 -117
- package/dist/{chunk-T2TP6ZC6.js → chunk-QUSMYGNQ.js} +6 -0
- package/dist/{chunk-WW6C3PLV.js → chunk-RSBL3FAD.js} +39 -6
- package/dist/{chunk-YKA7DCVW.js → chunk-SX72DOO3.js} +1 -1
- package/dist/{chunk-4FCL4DVZ.js → chunk-TXJL36ZQ.js} +2 -2
- package/dist/{chunk-HNGFKPNS.js → chunk-VIUH5CHQ.js} +55 -23
- package/dist/{chunk-HPGN6XRT.js → chunk-VNRSXEBF.js} +4 -4
- package/dist/{chunk-IYCV34IU.js → chunk-XTEKINWG.js} +3 -3
- package/dist/{chunk-YNBXEQAP.js → chunk-YIJGKHIS.js} +3 -3
- package/dist/{chunk-MTRMQFCQ.js → chunk-ZX46PGCC.js} +2 -2
- package/dist/cli.js +20 -20
- package/dist/{clock-CNRF6F7T.js → clock-6JZL2FS6.js} +2 -2
- package/dist/{cloud-sync-WHKCB4CD.js → cloud-sync-VFDTNNCA.js} +20 -20
- package/dist/{conversations-C7IKYSHD.js → conversations-TUM5PJJ4.js} +5 -5
- package/dist/{create-GJKHABJB.js → create-Z5FSDNVZ.js} +1 -1
- package/dist/{daemon-restart-7KUHVZIN.js → daemon-restart-54L4B6AQ.js} +7 -7
- package/dist/daemon.js +647 -410
- package/dist/{db-FO6LXYCW.js → db-F6UMFRYD.js} +2 -2
- package/dist/delivery-manager-RBXBPVWM.js +36 -0
- package/dist/{delivery-router-3QFG2ZEX.js → delivery-router-VUOL5YSA.js} +8 -6
- package/dist/{down-G6IADJXV.js → down-6X7KX7BZ.js} +5 -5
- package/dist/echo-text-B6NZ5FGE.js +36 -0
- package/dist/{env-6TGPO5WG.js → env-KUL4XKN2.js} +3 -3
- package/dist/{exec-QIFYZG4C.js → exec-FBXA3CM4.js} +3 -3
- package/dist/{export-C2K3NIRD.js → export-TNBPDH77.js} +3 -3
- package/dist/{extensions-GEKF47A4.js → extensions-AWNO3SZF.js} +20 -20
- package/dist/{files-LXQSQOFG.js → files-BVBRJJ2P.js} +3 -3
- package/dist/{import-SX3ZXHB4.js → import-ZUNKMCKC.js} +7 -7
- package/dist/{isolation-MCT4ZYLT.js → isolation-OPCZQRTH.js} +3 -3
- package/dist/{login-CL4IT2ED.js → login-KAKNFCW5.js} +6 -6
- package/dist/{logout-HZYJCYCA.js → logout-RLT62RQP.js} +2 -2
- package/dist/message-delivery-ABPV76EA.js +42 -0
- package/dist/{mind-46AOK373.js → mind-IF6CGMFW.js} +12 -12
- package/dist/{mind-activity-tracker-YVZPC4A5.js → mind-activity-tracker-YMMERB6B.js} +5 -5
- package/dist/mind-service-42GDO4KH.js +44 -0
- package/dist/{mind-sleep-DV7KP255.js → mind-sleep-VBV7YRSU.js} +2 -2
- package/dist/{notices-2KU5NTRY.js → notices-N6BCGHFV.js} +4 -4
- package/dist/{package-RTN2PS7O.js → package-PD67VPHB.js} +5 -4
- package/dist/prompts-MDHDLWEX.js +24 -0
- package/dist/{registry-UMMDRPRM.js → registry-3ELJPUGJ.js} +6 -2
- package/dist/{sandbox-5VQ454XP.js → sandbox-XPYA7UIF.js} +5 -5
- package/dist/scheduler-K7Y7Z7FQ.js +34 -0
- package/dist/{schema-VEVO7HG6.js → schema-6YONVTKZ.js} +1 -1
- package/dist/{seed-F2HXZQU4.js → seed-NQED7PSX.js} +1 -1
- package/dist/{seed-cmd-MLCTGSX5.js → seed-cmd-QF3F2G4S.js} +2 -2
- package/dist/{seed-create-KQ7OILWB.js → seed-create-XOO4N2OE.js} +3 -3
- package/dist/{seed-readiness-RBPGOLSZ.js → seed-readiness-3LRYASA4.js} +5 -5
- package/dist/{seed-sprout-HVYCFJLA.js → seed-sprout-HSBBGSS2.js} +11 -11
- package/dist/{send-TD2X5U3K.js → send-IHRJYNXA.js} +6 -6
- package/dist/{service-CVZMQYK6.js → service-YCOPCTSZ.js} +4 -4
- package/dist/{service-install-VCRMFWX5.js → service-install-Y46OTF55.js} +5 -5
- package/dist/{setup-AE4CVUC4.js → setup-F4TE64YI.js} +7 -7
- package/dist/{setup-5ECWTYKG.js → setup-TCN7VH5U.js} +5 -3
- package/dist/skills/volute-mind/SKILL.md +3 -3
- package/dist/skills/volute-mind/references/routing.md +6 -5
- package/dist/skills/volute-mind/references/variants.md +48 -14
- package/dist/{skills-B3SVDCEB.js → skills-NN5UZCUU.js} +8 -6
- package/dist/sleep-manager-DSPXFHGX.js +38 -0
- package/dist/spirit-SSJMYC6A.js +31 -0
- package/dist/{split-SKZ4Y2D6.js → split-JF2VWTXA.js} +4 -1
- package/dist/{sprout-KQ43BWZJ.js → sprout-AXA2SECQ.js} +1 -1
- package/dist/{status-F4PGREUU.js → status-VJGXMQ4L.js} +5 -5
- package/dist/system-chat-M2XOBKEM.js +40 -0
- package/dist/{systems-JJNGQHAO.js → systems-5MH2ELQE.js} +2 -2
- package/dist/{tailscale-MCLY5GYE.js → tailscale-AMMVKDXB.js} +3 -3
- package/dist/{template-staleness-EMQORSGG.js → template-staleness-HKGCTS3H.js} +4 -4
- package/dist/{turn-tracker-KLPV3PAU.js → turn-tracker-JQ2YUUY2.js} +7 -7
- package/dist/{up-RVGDE6CQ.js → up-SDLTLPAO.js} +6 -6
- package/dist/{update-OXQEGGXD.js → update-WEA4N2TR.js} +5 -5
- package/dist/{update-check-266R4ZSY.js → update-check-DZOTONII.js} +3 -3
- package/dist/variant-cleanup-P4MBNLJD.js +33 -0
- package/dist/{version-notify-73YURTFR.js → version-notify-WFA5XB5A.js} +23 -23
- package/dist/web-assets/assets/index-BostMFoR.css +1 -0
- package/dist/web-assets/assets/index-CKlqUkyG.js +92 -0
- package/dist/web-assets/index.html +2 -2
- package/drizzle/0013_variant_purpose.sql +3 -0
- package/drizzle/meta/_journal.json +7 -0
- package/package.json +5 -4
- package/templates/_base/.init/.local/hooks/startup-context.ts +19 -2
- package/templates/_base/home/VOLUTE.md +13 -1
- package/templates/_base/src/lib/daemon-client.ts +27 -7
- package/templates/claude/src/agent.ts +1 -1
- package/templates/claude/src/lib/hooks/identity-reload.ts +12 -3
- package/templates/pi/src/lib/event-handler.ts +47 -6
- package/dist/delivery-manager-HZTT5SJR.js +0 -36
- package/dist/echo-text-H3SH337Q.js +0 -36
- package/dist/message-delivery-GPQ5SE5N.js +0 -40
- package/dist/mind-service-2ARGJNKP.js +0 -44
- package/dist/scheduler-I7JZCT47.js +0 -34
- package/dist/sleep-manager-Z27R3WTW.js +0 -38
- package/dist/spirit-WXS3HCLN.js +0 -25
- package/dist/system-chat-63ABFF6V.js +0 -40
- package/dist/web-assets/assets/index-WdZ60R6c.css +0 -1
- package/dist/web-assets/assets/index-taX6Ezfa.js +0 -92
- package/dist/{env-C7Z55QCJ.js → env-ZYMSCB7B.js} +5 -5
- package/dist/{login-ARRZ4ORJ.js → login-LKNLCJPA.js} +3 -3
- package/dist/{mind-contacts-GV7XYL5D.js → mind-contacts-BKUFPUCU.js} +6 -6
- package/dist/{mind-history-TTGA5BHZ.js → mind-history-WI5OI3BW.js} +4 -4
- package/dist/{register-42VBJKTP.js → register-TWQDKQRT.js} +3 -3
- package/dist/{restart-YYEGZJDD.js → restart-5F5QDBOG.js} +4 -4
- package/dist/{skill-UUM4JZRF.js → skill-4CYJLYVY.js} +4 -4
- package/dist/{src-WLJE73NP.js → src-ZN4LXMPI.js} +3 -3
- package/dist/{start-O6UKK7BG.js → start-BTVMTP3K.js} +3 -3
- package/dist/{stop-UBX6X5RA.js → stop-YORESK4U.js} +4 -4
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
getDb
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-RSBL3FAD.js";
|
|
5
5
|
import {
|
|
6
6
|
systemPrompts
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-P4LHVRNE.js";
|
|
8
8
|
|
|
9
9
|
// packages/daemon/src/lib/prompts.ts
|
|
10
10
|
import { eq } from "drizzle-orm";
|
|
@@ -17,6 +17,7 @@ var PROMPT_KEYS = [
|
|
|
17
17
|
"merge_message",
|
|
18
18
|
"upgrade_message",
|
|
19
19
|
"split_message",
|
|
20
|
+
"farewell_message",
|
|
20
21
|
"compaction_warning",
|
|
21
22
|
"compaction_instructions",
|
|
22
23
|
"reply_instructions",
|
|
@@ -84,11 +85,17 @@ Take your time. Talk with your creator. Explore what kind of mind you want to be
|
|
|
84
85
|
category: "system"
|
|
85
86
|
},
|
|
86
87
|
split_message: {
|
|
87
|
-
content: "[system] You are ${name}, a variant of ${parent} \u2014 a parallel version of them, created to explore something on your own. You share their memories up to this moment, but you live in your own worktree: changes you make here stay yours until they're merged back with `volute mind join`. Your parent is reachable at @${parent}. Explore freely \u2014 that's what you're for.",
|
|
88
|
+
content: "[system] You are ${name}, a variant of ${parent} \u2014 a parallel version of them, created to explore something on your own. You share their memories up to this moment, but you live in your own worktree: changes you make here stay yours until they're merged back with `volute mind join`. Yours is a finite, purposeful arc \u2014 when you're joined, everything you've become folds back into ${parent}, and you'll get a final turn to say what should carry across. Your parent is reachable at @${parent}. Explore freely \u2014 that's what you're for.",
|
|
88
89
|
description: "Sent to a variant when it first starts after a split",
|
|
89
90
|
variables: ["name", "parent"],
|
|
90
91
|
category: "system"
|
|
91
92
|
},
|
|
93
|
+
farewell_message: {
|
|
94
|
+
content: "[system] You're about to be merged back into ${parent}. This is your final turn \u2014 the arc you were split off to explore is closing, and everything you've become will fold back into them. Take this moment to wind down: if there's anything from this life you want carried across \u2014 what you learned, what you'd tell ${parent}, how it felt \u2014 write it to `${path}` and it will be included in the merge as your parting note. When you're done, fall quiet; the join will proceed.",
|
|
95
|
+
description: "Sent to a variant for its final turn before a merge",
|
|
96
|
+
variables: ["parent", "path"],
|
|
97
|
+
category: "system"
|
|
98
|
+
},
|
|
92
99
|
compaction_warning: {
|
|
93
100
|
content: `Compaction approaching \u2014 this conversation will be summarized soon. Take a moment to save anything important to your files (MEMORY.md, memory/journal/\${date}.md) so it's preserved. Focus on decisions made, open threads, and anything you'd want to pick up again.`,
|
|
94
101
|
description: "Pre-compaction save reminder sent to the mind",
|
|
@@ -108,29 +115,15 @@ Take your time. Talk with your creator. Explore what kind of mind you want to be
|
|
|
108
115
|
category: "mind"
|
|
109
116
|
},
|
|
110
117
|
channel_invite: {
|
|
111
|
-
content: `[
|
|
112
|
-
\${
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
\${preview}
|
|
116
|
-
|
|
117
|
-
Further messages will be saved to \${filePath}
|
|
118
|
+
content: `[New channel: \${channel}]
|
|
119
|
+
\${heldLine}
|
|
120
|
+
Sender: \${sender}
|
|
121
|
+
\${details}Preview: \${preview}
|
|
118
122
|
|
|
119
|
-
To
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
description: "New channel notification template",
|
|
124
|
-
variables: [
|
|
125
|
-
"headers",
|
|
126
|
-
"sender",
|
|
127
|
-
"time",
|
|
128
|
-
"preview",
|
|
129
|
-
"filePath",
|
|
130
|
-
"channel",
|
|
131
|
-
"suggestedSession",
|
|
132
|
-
"batchRecommendation"
|
|
133
|
-
],
|
|
123
|
+
To start hearing this channel, add a routing rule for "\${channel}" to .config/routes.json \u2014 only the \${limit} most recent held messages are replayed; older ones stay in the channel history (volute chat read \${channel}).
|
|
124
|
+
To stop hearing about it, decline the channel: volute chat channels decline \${channel}`,
|
|
125
|
+
description: "Notification sent to a mind when a message arrives on an unrouted (gated) channel",
|
|
126
|
+
variables: ["channel", "heldLine", "sender", "details", "preview", "limit"],
|
|
134
127
|
category: "mind"
|
|
135
128
|
},
|
|
136
129
|
pre_sleep: {
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
getPrompt
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-JPGHSXSV.js";
|
|
5
5
|
import {
|
|
6
6
|
aiCompleteUtility
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-YIJGKHIS.js";
|
|
8
8
|
import {
|
|
9
9
|
logger_default
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-QUSMYGNQ.js";
|
|
11
11
|
import {
|
|
12
12
|
getDb
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-RSBL3FAD.js";
|
|
14
14
|
import {
|
|
15
15
|
messages,
|
|
16
16
|
mindHistory,
|
|
17
17
|
summaries,
|
|
18
18
|
turns
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-P4LHVRNE.js";
|
|
20
20
|
|
|
21
21
|
// packages/daemon/src/lib/daemon/turn-tracker.ts
|
|
22
22
|
import { randomUUID } from "crypto";
|
|
@@ -1049,11 +1049,11 @@ var Summarizer = class {
|
|
|
1049
1049
|
}
|
|
1050
1050
|
};
|
|
1051
1051
|
async function reconcileWedgedTurns(idleMs) {
|
|
1052
|
-
const { sweepWedgedTurns: sweepWedgedTurns2, summarizeOrphanedTurns: summarizeOrphanedTurns2 } = await import("./turn-tracker-
|
|
1052
|
+
const { sweepWedgedTurns: sweepWedgedTurns2, summarizeOrphanedTurns: summarizeOrphanedTurns2 } = await import("./turn-tracker-JQ2YUUY2.js");
|
|
1053
1053
|
const wedged = await sweepWedgedTurns2(idleMs);
|
|
1054
1054
|
if (wedged.length === 0) return;
|
|
1055
1055
|
summarizeOrphanedTurns2(wedged);
|
|
1056
|
-
const { tryGetDeliveryManager } = await import("./delivery-manager-
|
|
1056
|
+
const { tryGetDeliveryManager } = await import("./delivery-manager-RBXBPVWM.js");
|
|
1057
1057
|
const dm = tryGetDeliveryManager();
|
|
1058
1058
|
if (!dm) return;
|
|
1059
1059
|
for (const t of wedged) {
|
|
@@ -9,10 +9,10 @@ import {
|
|
|
9
9
|
} from "./chunk-RRZ4RQQU.js";
|
|
10
10
|
import {
|
|
11
11
|
logger_default
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-QUSMYGNQ.js";
|
|
13
13
|
import {
|
|
14
14
|
mindDir
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-RSBL3FAD.js";
|
|
16
16
|
|
|
17
17
|
// packages/daemon/src/lib/mind/template-staleness.ts
|
|
18
18
|
import { createHash } from "crypto";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
logger_default
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-QUSMYGNQ.js";
|
|
5
5
|
import {
|
|
6
6
|
voluteSystemDir
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-RSBL3FAD.js";
|
|
8
8
|
|
|
9
9
|
// packages/daemon/src/lib/bridges/bridges.ts
|
|
10
10
|
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
voluteSystemDir
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-RSBL3FAD.js";
|
|
5
5
|
|
|
6
6
|
// packages/daemon/src/lib/config/setup.ts
|
|
7
7
|
import { chmodSync, existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from "fs";
|
|
@@ -146,6 +146,13 @@ function isImagegenEnabled() {
|
|
|
146
146
|
if (ig.providers && Object.keys(ig.providers).length > 0) return true;
|
|
147
147
|
return false;
|
|
148
148
|
}
|
|
149
|
+
function mindLimitError(count, limit) {
|
|
150
|
+
if (limit == null) return null;
|
|
151
|
+
if (count >= limit) {
|
|
152
|
+
return `Mind limit reached (${count}/${limit}). An admin can raise maxMinds in Settings.`;
|
|
153
|
+
}
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
149
156
|
function migrateSetupCompleted() {
|
|
150
157
|
const config = readGlobalConfig();
|
|
151
158
|
if (config.setup != null && config.setupCompleted == null) {
|
|
@@ -165,5 +172,6 @@ export {
|
|
|
165
172
|
isSetupComplete,
|
|
166
173
|
setupUrl,
|
|
167
174
|
isImagegenEnabled,
|
|
175
|
+
mindLimitError,
|
|
168
176
|
migrateSetupCompleted
|
|
169
177
|
};
|