volute 0.43.0 → 0.43.1
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/dist/{chunk-PF2AB7VJ.js → chunk-4SVONUTC.js} +11 -11
- package/dist/{chunk-FZ5TH5PF.js → chunk-DMUPZQWP.js} +2 -2
- package/dist/{chunk-FSSUANZJ.js → chunk-KINGVQSR.js} +1 -1
- package/dist/{chunk-65OLHBCL.js → chunk-QQ2MVQU3.js} +1 -1
- package/dist/{chunk-3WLWKOGM.js → chunk-Y6O35D7K.js} +2 -2
- package/dist/cli.js +6 -6
- package/dist/{cloud-sync-FRYNWKCR.js → cloud-sync-KOEBUFW5.js} +4 -4
- package/dist/{daemon-restart-5GVZ5V3X.js → daemon-restart-EZXB73W7.js} +1 -1
- package/dist/daemon.js +25 -25
- package/dist/{delivery-manager-5J2BE22P.js → delivery-manager-OMCCJEVP.js} +4 -4
- package/dist/{echo-text-XKBJM6RV.js → echo-text-KFSUCZXL.js} +5 -5
- package/dist/{extensions-76EGTMFY.js → extensions-PQPZT6LS.js} +4 -4
- package/dist/{message-delivery-WJBZFALY.js → message-delivery-HRGFNWO7.js} +4 -4
- package/dist/{mind-QEWCR7FA.js → mind-G3WEWDM4.js} +2 -2
- package/dist/{mind-service-ZBVUMJ5H.js → mind-service-2C7AINBO.js} +4 -4
- package/dist/{package-ZOI2KAYC.js → package-24TL6DTF.js} +1 -1
- package/dist/{scheduler-BR6C6B3E.js → scheduler-VON2TB52.js} +4 -4
- package/dist/{seed-KOG6KJAO.js → seed-HHSJTM6O.js} +1 -1
- package/dist/{seed-cmd-GJFENEJH.js → seed-cmd-UPQY35RG.js} +2 -2
- package/dist/{seed-create-YXO6R4KE.js → seed-create-MDRMXMSB.js} +1 -1
- package/dist/{seed-sprout-BBU64QXP.js → seed-sprout-4M7IQWMH.js} +2 -2
- package/dist/{setup-354PDHUF.js → setup-ZD2LMBR3.js} +1 -1
- package/dist/{skills-DPI3WZPQ.js → skills-4KQ377GN.js} +1 -1
- package/dist/{sleep-manager-BVU5D2AE.js → sleep-manager-AG5SQDDI.js} +4 -4
- package/dist/{spirit-JQQHUVWR.js → spirit-53DQPRNR.js} +2 -2
- package/dist/{sprout-4WAYBUVV.js → sprout-YKM2M6D6.js} +1 -1
- package/dist/{src-TJ7RBU5H.js → src-3EGHHKZK.js} +8 -8
- package/dist/{system-chat-KMQIP7VH.js → system-chat-54RN3K67.js} +4 -4
- package/dist/{turn-tracker-2GMKJQTN.js → turn-tracker-JZYERJ76.js} +1 -1
- package/dist/{up-7RSBEKW6.js → up-LFZA4GI5.js} +1 -1
- package/dist/{version-notify-DCAIXXZB.js → version-notify-SRQJCQEK.js} +4 -4
- package/package.json +1 -1
- package/templates/claude/src/agent.ts +8 -1
- package/templates/claude/src/lib/message-channel.ts +28 -6
- /package/dist/{chunk-ZO7IQJKO.js → chunk-DE4EKQFH.js} +0 -0
|
@@ -4,13 +4,13 @@ import {
|
|
|
4
4
|
} from "./chunk-XDTKJNW5.js";
|
|
5
5
|
import {
|
|
6
6
|
spiritDir
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-QQ2MVQU3.js";
|
|
8
8
|
import {
|
|
9
9
|
hashSkillDir,
|
|
10
10
|
importSkillFromDir,
|
|
11
11
|
removeSharedSkill,
|
|
12
12
|
sharedSkillsDir
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-KINGVQSR.js";
|
|
14
14
|
import {
|
|
15
15
|
addMessage,
|
|
16
16
|
createChannel,
|
|
@@ -46,7 +46,7 @@ import {
|
|
|
46
46
|
linkInboundToActiveTurn,
|
|
47
47
|
publish as publish3,
|
|
48
48
|
summarizeOrphanedTurns
|
|
49
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-Y6O35D7K.js";
|
|
50
50
|
import {
|
|
51
51
|
chownMindDir,
|
|
52
52
|
exec,
|
|
@@ -905,7 +905,7 @@ var MindManager = class {
|
|
|
905
905
|
if (this.shuttingDown || this.stopping.has(name)) return;
|
|
906
906
|
mlog.error(`mind ${name} exited with code ${code}`);
|
|
907
907
|
try {
|
|
908
|
-
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-
|
|
908
|
+
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-AG5SQDDI.js");
|
|
909
909
|
const sleepMgr = getSleepManagerIfReady2();
|
|
910
910
|
const sleepState = sleepMgr?.getState(name);
|
|
911
911
|
if (sleepState?.sleeping) {
|
|
@@ -935,7 +935,7 @@ var MindManager = class {
|
|
|
935
935
|
(err) => mlog.warn(`failed to clear turn state for ${name} after crash`, logger_default.errorData(err))
|
|
936
936
|
);
|
|
937
937
|
try {
|
|
938
|
-
const { getDeliveryManager: getDeliveryManager2 } = await import("./delivery-manager-
|
|
938
|
+
const { getDeliveryManager: getDeliveryManager2 } = await import("./delivery-manager-OMCCJEVP.js");
|
|
939
939
|
getDeliveryManager2().clearMindSessions(name);
|
|
940
940
|
} catch (err) {
|
|
941
941
|
if (!(err instanceof Error && err.message.includes("not initialized"))) {
|
|
@@ -1001,7 +1001,7 @@ var MindManager = class {
|
|
|
1001
1001
|
mlog.warn(`failed to clear turn state for ${name} on stop`, logger_default.errorData(err));
|
|
1002
1002
|
}
|
|
1003
1003
|
try {
|
|
1004
|
-
const { getDeliveryManager: getDeliveryManager2 } = await import("./delivery-manager-
|
|
1004
|
+
const { getDeliveryManager: getDeliveryManager2 } = await import("./delivery-manager-OMCCJEVP.js");
|
|
1005
1005
|
getDeliveryManager2().clearMindSessions(name);
|
|
1006
1006
|
} catch (err) {
|
|
1007
1007
|
if (!(err instanceof Error && err.message.includes("not initialized"))) {
|
|
@@ -1009,7 +1009,7 @@ var MindManager = class {
|
|
|
1009
1009
|
}
|
|
1010
1010
|
}
|
|
1011
1011
|
try {
|
|
1012
|
-
const { clearEchoTextCache } = await import("./echo-text-
|
|
1012
|
+
const { clearEchoTextCache } = await import("./echo-text-KFSUCZXL.js");
|
|
1013
1013
|
clearEchoTextCache(name);
|
|
1014
1014
|
} catch (err) {
|
|
1015
1015
|
mlog.debug(`failed to clear echo-text cache for ${name}`, logger_default.errorData(err));
|
|
@@ -1647,7 +1647,7 @@ function resolveSkillsDir(manifest) {
|
|
|
1647
1647
|
async function discoverBuiltinExtensions(disabledIds) {
|
|
1648
1648
|
const builtins = [
|
|
1649
1649
|
{ id: "notes", load: async () => (await import("./src-L2Z7X5UT.js")).default },
|
|
1650
|
-
{ id: "pages", load: async () => (await import("./src-
|
|
1650
|
+
{ id: "pages", load: async () => (await import("./src-3EGHHKZK.js")).default },
|
|
1651
1651
|
{ id: "plan", load: async () => (await import("./src-O4PRLMKM.js")).default }
|
|
1652
1652
|
];
|
|
1653
1653
|
const results = [];
|
|
@@ -3108,7 +3108,7 @@ var SleepManager = class {
|
|
|
3108
3108
|
const db = await getDb();
|
|
3109
3109
|
const rows = await db.select().from(deliveryQueue).where(and2(eq3(deliveryQueue.mind, name), eq3(deliveryQueue.status, "sleep-queued"))).all();
|
|
3110
3110
|
if (rows.length === 0) return 0;
|
|
3111
|
-
const { deliverMessage: deliverMessage2 } = await import("./message-delivery-
|
|
3111
|
+
const { deliverMessage: deliverMessage2 } = await import("./message-delivery-HRGFNWO7.js");
|
|
3112
3112
|
const delivered = [];
|
|
3113
3113
|
for (const row of rows) {
|
|
3114
3114
|
try {
|
|
@@ -4201,7 +4201,7 @@ var DeliveryManager = class {
|
|
|
4201
4201
|
`To accept this channel, add a routing rule for "${channel}" to your routes.json.`,
|
|
4202
4202
|
`Messages are being held until a route is configured.`
|
|
4203
4203
|
].filter((line) => line !== null).join("\n");
|
|
4204
|
-
const { sendSystemMessage: sendSystemMessage2 } = await import("./system-chat-
|
|
4204
|
+
const { sendSystemMessage: sendSystemMessage2 } = await import("./system-chat-54RN3K67.js");
|
|
4205
4205
|
await sendSystemMessage2(mindName, notification);
|
|
4206
4206
|
}
|
|
4207
4207
|
/**
|
|
@@ -4643,7 +4643,7 @@ async function generateSystemReply(conversationId, mindName, message) {
|
|
|
4643
4643
|
if (config.sleep.schedule?.wake) contextParts.push(`Wake cron: ${config.sleep.schedule.wake}`);
|
|
4644
4644
|
}
|
|
4645
4645
|
try {
|
|
4646
|
-
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-
|
|
4646
|
+
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-AG5SQDDI.js");
|
|
4647
4647
|
const sm = getSleepManagerIfReady2();
|
|
4648
4648
|
if (sm) {
|
|
4649
4649
|
const state = sm.getState(mindName);
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
} from "./chunk-57LBQ7JX.js";
|
|
6
6
|
import {
|
|
7
7
|
recordOutbound
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-4SVONUTC.js";
|
|
9
9
|
import {
|
|
10
10
|
readEnv,
|
|
11
11
|
sharedEnvPath
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
} from "./chunk-CU6OFXMM.js";
|
|
24
24
|
import {
|
|
25
25
|
publish
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-Y6O35D7K.js";
|
|
27
27
|
import {
|
|
28
28
|
daemonConfigPath,
|
|
29
29
|
readDaemonToken
|
|
@@ -46,7 +46,7 @@ async function initDefaultSkills() {
|
|
|
46
46
|
const config = readGlobalConfig();
|
|
47
47
|
let extensionSkills = [];
|
|
48
48
|
try {
|
|
49
|
-
const { getExtensionStandardSkills } = await import("./extensions-
|
|
49
|
+
const { getExtensionStandardSkills } = await import("./extensions-PQPZT6LS.js");
|
|
50
50
|
extensionSkills = getExtensionStandardSkills();
|
|
51
51
|
} catch (err) {
|
|
52
52
|
logger_default.warn("failed to load extension standard skills during init", logger_default.errorData(err));
|
|
@@ -1013,11 +1013,11 @@ var Summarizer = class {
|
|
|
1013
1013
|
}
|
|
1014
1014
|
};
|
|
1015
1015
|
async function reconcileWedgedTurns(idleMs) {
|
|
1016
|
-
const { sweepWedgedTurns: sweepWedgedTurns2, summarizeOrphanedTurns: summarizeOrphanedTurns2 } = await import("./turn-tracker-
|
|
1016
|
+
const { sweepWedgedTurns: sweepWedgedTurns2, summarizeOrphanedTurns: summarizeOrphanedTurns2 } = await import("./turn-tracker-JZYERJ76.js");
|
|
1017
1017
|
const wedged = await sweepWedgedTurns2(idleMs);
|
|
1018
1018
|
if (wedged.length === 0) return;
|
|
1019
1019
|
summarizeOrphanedTurns2(wedged);
|
|
1020
|
-
const { tryGetDeliveryManager } = await import("./delivery-manager-
|
|
1020
|
+
const { tryGetDeliveryManager } = await import("./delivery-manager-OMCCJEVP.js");
|
|
1021
1021
|
const dm = tryGetDeliveryManager();
|
|
1022
1022
|
if (!dm) return;
|
|
1023
1023
|
for (const t of wedged) {
|
package/dist/cli.js
CHANGED
|
@@ -10,7 +10,7 @@ if (!process.env.VOLUTE_HOME) {
|
|
|
10
10
|
var command = process.argv[2];
|
|
11
11
|
var args = process.argv.slice(3);
|
|
12
12
|
if (command === "--version" || command === "-v") {
|
|
13
|
-
const { default: pkg } = await import("./package-
|
|
13
|
+
const { default: pkg } = await import("./package-24TL6DTF.js");
|
|
14
14
|
console.log(pkg.version);
|
|
15
15
|
process.exit(0);
|
|
16
16
|
}
|
|
@@ -39,13 +39,13 @@ if (!ungatedCommands.has(command)) {
|
|
|
39
39
|
}
|
|
40
40
|
switch (command) {
|
|
41
41
|
case "setup":
|
|
42
|
-
await import("./setup-
|
|
42
|
+
await import("./setup-ZD2LMBR3.js").then((m) => m.run(args));
|
|
43
43
|
break;
|
|
44
44
|
case "mind":
|
|
45
|
-
await import("./mind-
|
|
45
|
+
await import("./mind-G3WEWDM4.js").then((m) => m.run(args));
|
|
46
46
|
break;
|
|
47
47
|
case "seed":
|
|
48
|
-
await import("./seed-cmd-
|
|
48
|
+
await import("./seed-cmd-UPQY35RG.js").then((m) => m.run(args));
|
|
49
49
|
break;
|
|
50
50
|
case "chat":
|
|
51
51
|
await import("./chat-SDSX5TVV.js").then((m) => m.run(args));
|
|
@@ -66,13 +66,13 @@ switch (command) {
|
|
|
66
66
|
await import("./config-TJLYUV3U.js").then((m) => m.run(args));
|
|
67
67
|
break;
|
|
68
68
|
case "up":
|
|
69
|
-
await import("./up-
|
|
69
|
+
await import("./up-LFZA4GI5.js").then((m) => m.run(args));
|
|
70
70
|
break;
|
|
71
71
|
case "down":
|
|
72
72
|
await import("./down-RRNYIGCU.js").then((m) => m.run(args));
|
|
73
73
|
break;
|
|
74
74
|
case "restart":
|
|
75
|
-
await import("./daemon-restart-
|
|
75
|
+
await import("./daemon-restart-EZXB73W7.js").then((m) => m.run(args));
|
|
76
76
|
break;
|
|
77
77
|
case "update":
|
|
78
78
|
await import("./update-EJ7Q77ZX.js").then((m) => m.run(args));
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
deliverMessage
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-4SVONUTC.js";
|
|
5
5
|
import "./chunk-XDTKJNW5.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-QQ2MVQU3.js";
|
|
7
7
|
import "./chunk-QLWG3C2Z.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-KINGVQSR.js";
|
|
9
9
|
import {
|
|
10
10
|
getAuthHeaders,
|
|
11
11
|
getWebhookUrl
|
|
@@ -14,7 +14,7 @@ import "./chunk-CU6OFXMM.js";
|
|
|
14
14
|
import "./chunk-C6ESRQZ7.js";
|
|
15
15
|
import "./chunk-M3PGGSBH.js";
|
|
16
16
|
import "./chunk-SPLPKBES.js";
|
|
17
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-Y6O35D7K.js";
|
|
18
18
|
import "./chunk-PGPLCJPK.js";
|
|
19
19
|
import "./chunk-YSV3VJQK.js";
|
|
20
20
|
import "./chunk-ONM2AZFL.js";
|
package/dist/daemon.js
CHANGED
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
fixModelEscapes,
|
|
31
31
|
getPlatformDriver,
|
|
32
32
|
routeOutboundBridge
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-DMUPZQWP.js";
|
|
34
34
|
import {
|
|
35
35
|
getBridgeConfig,
|
|
36
36
|
readBridgesConfig,
|
|
@@ -98,7 +98,7 @@ import {
|
|
|
98
98
|
syncProviderToMinds,
|
|
99
99
|
uninstallNpmExtension,
|
|
100
100
|
writeSystemsConfig
|
|
101
|
-
} from "./chunk-
|
|
101
|
+
} from "./chunk-4SVONUTC.js";
|
|
102
102
|
import {
|
|
103
103
|
loadMergedEnv,
|
|
104
104
|
mindEnvPath,
|
|
@@ -106,7 +106,7 @@ import {
|
|
|
106
106
|
sharedEnvPath,
|
|
107
107
|
writeEnv
|
|
108
108
|
} from "./chunk-XDTKJNW5.js";
|
|
109
|
-
import "./chunk-
|
|
109
|
+
import "./chunk-QQ2MVQU3.js";
|
|
110
110
|
import {
|
|
111
111
|
applyInitFiles,
|
|
112
112
|
applyTemplateHomeFiles,
|
|
@@ -135,7 +135,7 @@ import {
|
|
|
135
135
|
syncBuiltinSkills,
|
|
136
136
|
uninstallSkill,
|
|
137
137
|
updateSkill
|
|
138
|
-
} from "./chunk-
|
|
138
|
+
} from "./chunk-KINGVQSR.js";
|
|
139
139
|
import {
|
|
140
140
|
addMessage,
|
|
141
141
|
createChannel,
|
|
@@ -206,7 +206,7 @@ import {
|
|
|
206
206
|
summarizeTurn,
|
|
207
207
|
takeErrored,
|
|
208
208
|
trackToolUse
|
|
209
|
-
} from "./chunk-
|
|
209
|
+
} from "./chunk-Y6O35D7K.js";
|
|
210
210
|
import "./chunk-ATEX3ZPG.js";
|
|
211
211
|
import {
|
|
212
212
|
chownMindDir,
|
|
@@ -2274,7 +2274,7 @@ async function notifyMind(mindName, message) {
|
|
|
2274
2274
|
const entry = await findMind(mindName);
|
|
2275
2275
|
if (!entry) return;
|
|
2276
2276
|
try {
|
|
2277
|
-
const { sendSystemMessage } = await import("./system-chat-
|
|
2277
|
+
const { sendSystemMessage } = await import("./system-chat-54RN3K67.js");
|
|
2278
2278
|
await sendSystemMessage(mindName, message);
|
|
2279
2279
|
} catch (err) {
|
|
2280
2280
|
logger_default.warn(`[file-sharing] notify mind ${mindName} failed`, logger_default.errorData(err));
|
|
@@ -3768,7 +3768,7 @@ async function getMindStatus(name, port, registryRunning) {
|
|
|
3768
3768
|
const manager = getMindManager();
|
|
3769
3769
|
let status = "stopped";
|
|
3770
3770
|
try {
|
|
3771
|
-
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-
|
|
3771
|
+
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-AG5SQDDI.js");
|
|
3772
3772
|
if (getSleepManagerIfReady2()?.isSleeping(name)) {
|
|
3773
3773
|
status = "sleeping";
|
|
3774
3774
|
}
|
|
@@ -4372,7 +4372,7 @@ The human who planted you described you as: "${body.description}"
|
|
|
4372
4372
|
try {
|
|
4373
4373
|
const spiritEntry = await findMind("volute");
|
|
4374
4374
|
if (spiritEntry) {
|
|
4375
|
-
const { spiritDir } = await import("./spirit-
|
|
4375
|
+
const { spiritDir } = await import("./spirit-53DQPRNR.js");
|
|
4376
4376
|
const sDir = spiritEntry.dir ?? spiritDir();
|
|
4377
4377
|
const spiritConfig = readVoluteConfig(sDir) ?? {};
|
|
4378
4378
|
const schedules = spiritConfig.schedules ?? [];
|
|
@@ -4387,7 +4387,7 @@ The human who planted you described you as: "${body.description}"
|
|
|
4387
4387
|
});
|
|
4388
4388
|
spiritConfig.schedules = schedules;
|
|
4389
4389
|
writeVoluteConfig(sDir, spiritConfig);
|
|
4390
|
-
const { getScheduler: getScheduler2 } = await import("./scheduler-
|
|
4390
|
+
const { getScheduler: getScheduler2 } = await import("./scheduler-VON2TB52.js");
|
|
4391
4391
|
getScheduler2().loadSchedules("volute", sDir);
|
|
4392
4392
|
}
|
|
4393
4393
|
}
|
|
@@ -4652,7 +4652,7 @@ ${user.trimEnd()}
|
|
|
4652
4652
|
const manager = getMindManager();
|
|
4653
4653
|
try {
|
|
4654
4654
|
if (context?.type === "reload") {
|
|
4655
|
-
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-
|
|
4655
|
+
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-AG5SQDDI.js");
|
|
4656
4656
|
const sleepState = getSleepManagerIfReady2()?.getState(name);
|
|
4657
4657
|
if (sleepState?.sleeping) {
|
|
4658
4658
|
logger_default.info(`skipping reload for ${name} during sleep \u2014 will apply on next wake`);
|
|
@@ -4779,7 +4779,7 @@ ${user.trimEnd()}
|
|
|
4779
4779
|
const name = c.req.param("name");
|
|
4780
4780
|
const entry = await findMind(name);
|
|
4781
4781
|
if (!entry) return c.json({ error: "Mind not found" }, 404);
|
|
4782
|
-
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-
|
|
4782
|
+
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-AG5SQDDI.js");
|
|
4783
4783
|
const sm = getSleepManagerIfReady2();
|
|
4784
4784
|
if (!sm) return c.json({ error: "Sleep manager not initialized" }, 503);
|
|
4785
4785
|
return c.json(sm.getState(name));
|
|
@@ -4787,7 +4787,7 @@ ${user.trimEnd()}
|
|
|
4787
4787
|
const name = c.req.param("name");
|
|
4788
4788
|
const entry = await findMind(name);
|
|
4789
4789
|
if (!entry) return c.json({ error: "Mind not found" }, 404);
|
|
4790
|
-
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-
|
|
4790
|
+
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-AG5SQDDI.js");
|
|
4791
4791
|
const sm = getSleepManagerIfReady2();
|
|
4792
4792
|
if (!sm) return c.json({ error: "Sleep manager not initialized" }, 503);
|
|
4793
4793
|
if (sm.isSleeping(name)) return c.json({ error: "Mind is already sleeping" }, 409);
|
|
@@ -4807,7 +4807,7 @@ ${user.trimEnd()}
|
|
|
4807
4807
|
const name = c.req.param("name");
|
|
4808
4808
|
const entry = await findMind(name);
|
|
4809
4809
|
if (!entry) return c.json({ error: "Mind not found" }, 404);
|
|
4810
|
-
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-
|
|
4810
|
+
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-AG5SQDDI.js");
|
|
4811
4811
|
const sm = getSleepManagerIfReady2();
|
|
4812
4812
|
if (!sm) return c.json({ error: "Sleep manager not initialized" }, 503);
|
|
4813
4813
|
const sleepState = sm.getState(name);
|
|
@@ -4822,7 +4822,7 @@ ${user.trimEnd()}
|
|
|
4822
4822
|
const name = c.req.param("name");
|
|
4823
4823
|
const entry = await findMind(name);
|
|
4824
4824
|
if (!entry) return c.json({ error: "Mind not found" }, 404);
|
|
4825
|
-
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-
|
|
4825
|
+
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-AG5SQDDI.js");
|
|
4826
4826
|
const sm = getSleepManagerIfReady2();
|
|
4827
4827
|
if (!sm) return c.json({ error: "Sleep manager not initialized" }, 503);
|
|
4828
4828
|
const flushed = await sm.flushQueuedMessages(name);
|
|
@@ -4925,7 +4925,7 @@ ${user.trimEnd()}
|
|
|
4925
4925
|
try {
|
|
4926
4926
|
const spiritEntry = await findMind("volute");
|
|
4927
4927
|
if (spiritEntry) {
|
|
4928
|
-
const { spiritDir } = await import("./spirit-
|
|
4928
|
+
const { spiritDir } = await import("./spirit-53DQPRNR.js");
|
|
4929
4929
|
const sDir = spiritEntry.dir ?? spiritDir();
|
|
4930
4930
|
const spiritConfig = readVoluteConfig(sDir);
|
|
4931
4931
|
if (spiritConfig?.schedules) {
|
|
@@ -4933,7 +4933,7 @@ ${user.trimEnd()}
|
|
|
4933
4933
|
spiritConfig.schedules = spiritConfig.schedules.filter((s) => s.id !== nurtureId);
|
|
4934
4934
|
if (spiritConfig.schedules.length === 0) spiritConfig.schedules = void 0;
|
|
4935
4935
|
writeVoluteConfig(sDir, spiritConfig);
|
|
4936
|
-
const { getScheduler: getScheduler2 } = await import("./scheduler-
|
|
4936
|
+
const { getScheduler: getScheduler2 } = await import("./scheduler-VON2TB52.js");
|
|
4937
4937
|
getScheduler2().loadSchedules("volute", sDir);
|
|
4938
4938
|
}
|
|
4939
4939
|
}
|
|
@@ -5368,7 +5368,7 @@ ${user.trimEnd()}
|
|
|
5368
5368
|
}
|
|
5369
5369
|
writeVoluteConfig(dir, existing);
|
|
5370
5370
|
if (body.unescapeNewlines !== void 0) {
|
|
5371
|
-
const { clearEchoTextCache } = await import("./echo-text-
|
|
5371
|
+
const { clearEchoTextCache } = await import("./echo-text-KFSUCZXL.js");
|
|
5372
5372
|
clearEchoTextCache(name);
|
|
5373
5373
|
}
|
|
5374
5374
|
const needsConfigJson = body.model !== void 0 || body.thinkingLevel !== void 0 || body.maxThinkingTokens !== void 0 || body.compaction !== void 0;
|
|
@@ -6058,7 +6058,7 @@ var app15 = new Hono17().get("/:name/clock/status", requireSelf(), async (c) =>
|
|
|
6058
6058
|
const body = await c.req.text();
|
|
6059
6059
|
const message = `[webhook: ${event}] ${body}`;
|
|
6060
6060
|
try {
|
|
6061
|
-
const { sendSystemMessage } = await import("./system-chat-
|
|
6061
|
+
const { sendSystemMessage } = await import("./system-chat-54RN3K67.js");
|
|
6062
6062
|
await sendSystemMessage(name, message);
|
|
6063
6063
|
return c.json({ ok: true });
|
|
6064
6064
|
} catch (err) {
|
|
@@ -6387,8 +6387,8 @@ setup.post("/complete", async (c) => {
|
|
|
6387
6387
|
return c.json({ error: "Setup already complete" }, 400);
|
|
6388
6388
|
}
|
|
6389
6389
|
try {
|
|
6390
|
-
const { ensureSpiritProject, syncSpiritTemplate } = await import("./spirit-
|
|
6391
|
-
const { startSpiritFull } = await import("./mind-service-
|
|
6390
|
+
const { ensureSpiritProject, syncSpiritTemplate } = await import("./spirit-53DQPRNR.js");
|
|
6391
|
+
const { startSpiritFull } = await import("./mind-service-2C7AINBO.js");
|
|
6392
6392
|
await ensureSpiritProject();
|
|
6393
6393
|
await syncSpiritTemplate();
|
|
6394
6394
|
const warnings = [];
|
|
@@ -6446,7 +6446,7 @@ setup.post("/complete", async (c) => {
|
|
|
6446
6446
|
logger_default.info("setup complete state", { spiritConversationId, spiritStarted });
|
|
6447
6447
|
if (spiritConversationId && spiritStarted) {
|
|
6448
6448
|
try {
|
|
6449
|
-
const { deliverMessage: deliverMessage2 } = await import("./message-delivery-
|
|
6449
|
+
const { deliverMessage: deliverMessage2 } = await import("./message-delivery-HRGFNWO7.js");
|
|
6450
6450
|
const { listUsersByType: listUsers2 } = await import("./auth-3RIG6GKN.js");
|
|
6451
6451
|
const admins = await listUsers2("brain");
|
|
6452
6452
|
const admin2 = admins.find((u) => u.role === "admin");
|
|
@@ -8143,8 +8143,8 @@ async function startDaemon(opts) {
|
|
|
8143
8143
|
try {
|
|
8144
8144
|
const { isSetupComplete: isSetupComplete2 } = await import("./setup-25MMJ3J4.js");
|
|
8145
8145
|
if (isSetupComplete2()) {
|
|
8146
|
-
const { ensureSpiritProject, syncSpiritTemplate } = await import("./spirit-
|
|
8147
|
-
const { startSpiritFull } = await import("./mind-service-
|
|
8146
|
+
const { ensureSpiritProject, syncSpiritTemplate } = await import("./spirit-53DQPRNR.js");
|
|
8147
|
+
const { startSpiritFull } = await import("./mind-service-2C7AINBO.js");
|
|
8148
8148
|
await ensureSpiritProject();
|
|
8149
8149
|
await syncSpiritTemplate();
|
|
8150
8150
|
const spiritEntry = await findMind("volute");
|
|
@@ -8161,7 +8161,7 @@ async function startDaemon(opts) {
|
|
|
8161
8161
|
bridgeManager.startBridges(daemonPort).catch((err) => {
|
|
8162
8162
|
logger_default.warn("failed to start bridges", logger_default.errorData(err));
|
|
8163
8163
|
});
|
|
8164
|
-
import("./cloud-sync-
|
|
8164
|
+
import("./cloud-sync-KOEBUFW5.js").then(
|
|
8165
8165
|
({ consumeQueuedMessages }) => consumeQueuedMessages().catch((err) => {
|
|
8166
8166
|
logger_default.warn("failed to consume queued cloud messages", logger_default.errorData(err));
|
|
8167
8167
|
})
|
|
@@ -8169,7 +8169,7 @@ async function startDaemon(opts) {
|
|
|
8169
8169
|
logger_default.warn("failed to load cloud-sync module", logger_default.errorData(err));
|
|
8170
8170
|
});
|
|
8171
8171
|
try {
|
|
8172
|
-
const { backfillTemplateHashes, notifyVersionUpdate } = await import("./version-notify-
|
|
8172
|
+
const { backfillTemplateHashes, notifyVersionUpdate } = await import("./version-notify-SRQJCQEK.js");
|
|
8173
8173
|
backfillTemplateHashes();
|
|
8174
8174
|
notifyVersionUpdate().catch((err) => {
|
|
8175
8175
|
logger_default.warn("failed to send version update notifications", logger_default.errorData(err));
|
|
@@ -4,17 +4,17 @@ import {
|
|
|
4
4
|
getDeliveryManager,
|
|
5
5
|
initDeliveryManager,
|
|
6
6
|
tryGetDeliveryManager
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-4SVONUTC.js";
|
|
8
8
|
import "./chunk-XDTKJNW5.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-QQ2MVQU3.js";
|
|
10
10
|
import "./chunk-QLWG3C2Z.js";
|
|
11
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-KINGVQSR.js";
|
|
12
12
|
import "./chunk-K4EHBHPE.js";
|
|
13
13
|
import "./chunk-CU6OFXMM.js";
|
|
14
14
|
import "./chunk-C6ESRQZ7.js";
|
|
15
15
|
import "./chunk-M3PGGSBH.js";
|
|
16
16
|
import "./chunk-SPLPKBES.js";
|
|
17
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-Y6O35D7K.js";
|
|
18
18
|
import "./chunk-PGPLCJPK.js";
|
|
19
19
|
import "./chunk-YSV3VJQK.js";
|
|
20
20
|
import "./chunk-ONM2AZFL.js";
|
|
@@ -2,19 +2,19 @@
|
|
|
2
2
|
import {
|
|
3
3
|
clearEchoTextCache,
|
|
4
4
|
echoTextToChannel
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-DMUPZQWP.js";
|
|
6
6
|
import "./chunk-57LBQ7JX.js";
|
|
7
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-4SVONUTC.js";
|
|
8
8
|
import "./chunk-XDTKJNW5.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-QQ2MVQU3.js";
|
|
10
10
|
import "./chunk-QLWG3C2Z.js";
|
|
11
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-KINGVQSR.js";
|
|
12
12
|
import "./chunk-K4EHBHPE.js";
|
|
13
13
|
import "./chunk-CU6OFXMM.js";
|
|
14
14
|
import "./chunk-C6ESRQZ7.js";
|
|
15
15
|
import "./chunk-M3PGGSBH.js";
|
|
16
16
|
import "./chunk-SPLPKBES.js";
|
|
17
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-Y6O35D7K.js";
|
|
18
18
|
import "./chunk-ATEX3ZPG.js";
|
|
19
19
|
import "./chunk-PGPLCJPK.js";
|
|
20
20
|
import "./chunk-YSV3VJQK.js";
|
|
@@ -13,17 +13,17 @@ import {
|
|
|
13
13
|
parseCommandArgs,
|
|
14
14
|
setExtensionEnabled,
|
|
15
15
|
uninstallNpmExtension
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-4SVONUTC.js";
|
|
17
17
|
import "./chunk-XDTKJNW5.js";
|
|
18
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-QQ2MVQU3.js";
|
|
19
19
|
import "./chunk-QLWG3C2Z.js";
|
|
20
|
-
import "./chunk-
|
|
20
|
+
import "./chunk-KINGVQSR.js";
|
|
21
21
|
import "./chunk-K4EHBHPE.js";
|
|
22
22
|
import "./chunk-CU6OFXMM.js";
|
|
23
23
|
import "./chunk-C6ESRQZ7.js";
|
|
24
24
|
import "./chunk-M3PGGSBH.js";
|
|
25
25
|
import "./chunk-SPLPKBES.js";
|
|
26
|
-
import "./chunk-
|
|
26
|
+
import "./chunk-Y6O35D7K.js";
|
|
27
27
|
import "./chunk-PGPLCJPK.js";
|
|
28
28
|
import "./chunk-YSV3VJQK.js";
|
|
29
29
|
import "./chunk-ONM2AZFL.js";
|
|
@@ -5,17 +5,17 @@ import {
|
|
|
5
5
|
recordInbound,
|
|
6
6
|
recordOutbound,
|
|
7
7
|
resolveSleepAction
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-4SVONUTC.js";
|
|
9
9
|
import "./chunk-XDTKJNW5.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-QQ2MVQU3.js";
|
|
11
11
|
import "./chunk-QLWG3C2Z.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-KINGVQSR.js";
|
|
13
13
|
import "./chunk-K4EHBHPE.js";
|
|
14
14
|
import "./chunk-CU6OFXMM.js";
|
|
15
15
|
import "./chunk-C6ESRQZ7.js";
|
|
16
16
|
import "./chunk-M3PGGSBH.js";
|
|
17
17
|
import "./chunk-SPLPKBES.js";
|
|
18
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-Y6O35D7K.js";
|
|
19
19
|
import "./chunk-PGPLCJPK.js";
|
|
20
20
|
import "./chunk-YSV3VJQK.js";
|
|
21
21
|
import "./chunk-ONM2AZFL.js";
|
|
@@ -82,11 +82,11 @@ var cmd = subcommands({
|
|
|
82
82
|
},
|
|
83
83
|
seed: {
|
|
84
84
|
description: "(legacy) Use 'volute seed create' instead",
|
|
85
|
-
run: (args) => import("./seed-
|
|
85
|
+
run: (args) => import("./seed-HHSJTM6O.js").then((m) => m.run(args))
|
|
86
86
|
},
|
|
87
87
|
sprout: {
|
|
88
88
|
description: "(legacy) Use 'volute seed sprout' instead",
|
|
89
|
-
run: (args) => import("./sprout-
|
|
89
|
+
run: (args) => import("./sprout-YKM2M6D6.js").then((m) => m.run(args))
|
|
90
90
|
}
|
|
91
91
|
},
|
|
92
92
|
footer: "Mind name can be omitted (where applicable) if VOLUTE_MIND is set."
|
|
@@ -6,17 +6,17 @@ import {
|
|
|
6
6
|
stopMindFull,
|
|
7
7
|
stopSpiritFull,
|
|
8
8
|
wakeMind
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-4SVONUTC.js";
|
|
10
10
|
import "./chunk-XDTKJNW5.js";
|
|
11
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-QQ2MVQU3.js";
|
|
12
12
|
import "./chunk-QLWG3C2Z.js";
|
|
13
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-KINGVQSR.js";
|
|
14
14
|
import "./chunk-K4EHBHPE.js";
|
|
15
15
|
import "./chunk-CU6OFXMM.js";
|
|
16
16
|
import "./chunk-C6ESRQZ7.js";
|
|
17
17
|
import "./chunk-M3PGGSBH.js";
|
|
18
18
|
import "./chunk-SPLPKBES.js";
|
|
19
|
-
import "./chunk-
|
|
19
|
+
import "./chunk-Y6O35D7K.js";
|
|
20
20
|
import "./chunk-PGPLCJPK.js";
|
|
21
21
|
import "./chunk-YSV3VJQK.js";
|
|
22
22
|
import "./chunk-ONM2AZFL.js";
|
|
@@ -4,7 +4,7 @@ import "./chunk-K3NQKI34.js";
|
|
|
4
4
|
// package.json
|
|
5
5
|
var package_default = {
|
|
6
6
|
name: "volute",
|
|
7
|
-
version: "0.43.
|
|
7
|
+
version: "0.43.1",
|
|
8
8
|
description: "CLI for creating and managing self-modifying AI minds powered by the Claude Agent SDK",
|
|
9
9
|
type: "module",
|
|
10
10
|
license: "MIT",
|
|
@@ -3,17 +3,17 @@ import {
|
|
|
3
3
|
Scheduler,
|
|
4
4
|
getScheduler,
|
|
5
5
|
initScheduler
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-4SVONUTC.js";
|
|
7
7
|
import "./chunk-XDTKJNW5.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-QQ2MVQU3.js";
|
|
9
9
|
import "./chunk-QLWG3C2Z.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-KINGVQSR.js";
|
|
11
11
|
import "./chunk-K4EHBHPE.js";
|
|
12
12
|
import "./chunk-CU6OFXMM.js";
|
|
13
13
|
import "./chunk-C6ESRQZ7.js";
|
|
14
14
|
import "./chunk-M3PGGSBH.js";
|
|
15
15
|
import "./chunk-SPLPKBES.js";
|
|
16
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-Y6O35D7K.js";
|
|
17
17
|
import "./chunk-PGPLCJPK.js";
|
|
18
18
|
import "./chunk-YSV3VJQK.js";
|
|
19
19
|
import "./chunk-ONM2AZFL.js";
|
|
@@ -4,7 +4,7 @@ import "./chunk-K3NQKI34.js";
|
|
|
4
4
|
// packages/cli/src/commands/seed.ts
|
|
5
5
|
async function run(args) {
|
|
6
6
|
console.error("Note: `volute mind seed` is now `volute seed create`");
|
|
7
|
-
await import("./seed-create-
|
|
7
|
+
await import("./seed-create-MDRMXMSB.js").then((m) => m.run(args));
|
|
8
8
|
}
|
|
9
9
|
export {
|
|
10
10
|
run
|
|
@@ -12,11 +12,11 @@ var cmd = subcommands({
|
|
|
12
12
|
commands: {
|
|
13
13
|
create: {
|
|
14
14
|
description: "Plant a new seed",
|
|
15
|
-
run: (args) => import("./seed-create-
|
|
15
|
+
run: (args) => import("./seed-create-MDRMXMSB.js").then((m) => m.run(args))
|
|
16
16
|
},
|
|
17
17
|
sprout: {
|
|
18
18
|
description: "Complete orientation and become a full mind",
|
|
19
|
-
run: (args) => import("./seed-sprout-
|
|
19
|
+
run: (args) => import("./seed-sprout-4M7IQWMH.js").then((m) => m.run(args))
|
|
20
20
|
},
|
|
21
21
|
check: {
|
|
22
22
|
description: "Check seed readiness",
|
|
@@ -58,7 +58,7 @@ var cmd = command({
|
|
|
58
58
|
}
|
|
59
59
|
if (template !== "claude" && !model) {
|
|
60
60
|
if (process.env.VOLUTE_MIND || !process.stdin.isTTY) {
|
|
61
|
-
const { getSpiritModel } = await import("./spirit-
|
|
61
|
+
const { getSpiritModel } = await import("./spirit-53DQPRNR.js");
|
|
62
62
|
const { qualifyModelId } = await import("./ai-service-FBCCEYF5.js");
|
|
63
63
|
const spiritModel = getSpiritModel();
|
|
64
64
|
if (spiritModel) {
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
import "./chunk-O7IGP7ZW.js";
|
|
9
9
|
import {
|
|
10
10
|
getStandardSkillsWithExtensions
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-KINGVQSR.js";
|
|
12
12
|
import "./chunk-PGPLCJPK.js";
|
|
13
13
|
import "./chunk-ONM2AZFL.js";
|
|
14
14
|
import "./chunk-T2TP6ZC6.js";
|
|
@@ -73,7 +73,7 @@ var cmd = command({
|
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
const { getClient, urlOf } = await import("./api-client-LC5YRA32.js");
|
|
76
|
-
const { mindSkillsDir } = await import("./skills-
|
|
76
|
+
const { mindSkillsDir } = await import("./skills-4KQ377GN.js");
|
|
77
77
|
const client = getClient();
|
|
78
78
|
const failedSkills = [];
|
|
79
79
|
for (const skillId of getStandardSkillsWithExtensions()) {
|
|
@@ -221,7 +221,7 @@ async function startDaemonAndOpenBrowser(port, host) {
|
|
|
221
221
|
const url = `http://${displayHost === "0.0.0.0" || displayHost === "::" ? "localhost" : displayHost}:${displayPort}`;
|
|
222
222
|
console.log("\nStarting daemon...");
|
|
223
223
|
try {
|
|
224
|
-
const { run: runUp } = await import("./up-
|
|
224
|
+
const { run: runUp } = await import("./up-LFZA4GI5.js");
|
|
225
225
|
await runUp([
|
|
226
226
|
...port != null ? ["--port", String(port)] : [],
|
|
227
227
|
...host ? ["--host", host] : []
|
|
@@ -5,17 +5,17 @@ import {
|
|
|
5
5
|
getSleepManagerIfReady,
|
|
6
6
|
initSleepManager,
|
|
7
7
|
matchesGlob
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-4SVONUTC.js";
|
|
9
9
|
import "./chunk-XDTKJNW5.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-QQ2MVQU3.js";
|
|
11
11
|
import "./chunk-QLWG3C2Z.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-KINGVQSR.js";
|
|
13
13
|
import "./chunk-K4EHBHPE.js";
|
|
14
14
|
import "./chunk-CU6OFXMM.js";
|
|
15
15
|
import "./chunk-C6ESRQZ7.js";
|
|
16
16
|
import "./chunk-M3PGGSBH.js";
|
|
17
17
|
import "./chunk-SPLPKBES.js";
|
|
18
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-Y6O35D7K.js";
|
|
19
19
|
import "./chunk-PGPLCJPK.js";
|
|
20
20
|
import "./chunk-YSV3VJQK.js";
|
|
21
21
|
import "./chunk-ONM2AZFL.js";
|
|
@@ -4,9 +4,9 @@ import {
|
|
|
4
4
|
getSpiritModel,
|
|
5
5
|
spiritDir,
|
|
6
6
|
syncSpiritTemplate
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-QQ2MVQU3.js";
|
|
8
8
|
import "./chunk-QLWG3C2Z.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-KINGVQSR.js";
|
|
10
10
|
import "./chunk-CU6OFXMM.js";
|
|
11
11
|
import "./chunk-PGPLCJPK.js";
|
|
12
12
|
import "./chunk-YSV3VJQK.js";
|
|
@@ -4,7 +4,7 @@ import "./chunk-K3NQKI34.js";
|
|
|
4
4
|
// packages/cli/src/commands/sprout.ts
|
|
5
5
|
async function run(args) {
|
|
6
6
|
console.error("Note: `volute mind sprout` is now `volute seed sprout`");
|
|
7
|
-
await import("./seed-sprout-
|
|
7
|
+
await import("./seed-sprout-4M7IQWMH.js").then((m) => m.run(args));
|
|
8
8
|
}
|
|
9
9
|
export {
|
|
10
10
|
run
|
|
@@ -77,6 +77,11 @@ function pagesRepoDir(dataDir) {
|
|
|
77
77
|
function worktreePath(mindDir) {
|
|
78
78
|
return resolve(mindDir, "home", "pages", "_system");
|
|
79
79
|
}
|
|
80
|
+
function pagesIsolationChownPaths(mindDir, wtGitDir) {
|
|
81
|
+
const paths = [resolve(mindDir, "home", "pages")];
|
|
82
|
+
if (wtGitDir) paths.push(wtGitDir);
|
|
83
|
+
return paths;
|
|
84
|
+
}
|
|
80
85
|
async function ensurePagesRepo(dataDir, isolation) {
|
|
81
86
|
const dir = pagesRepoDir(dataDir);
|
|
82
87
|
mkdirSync(dir, { recursive: true });
|
|
@@ -129,17 +134,12 @@ async function addPagesWorktree(mindName, mindDir, dataDir, isolation) {
|
|
|
129
134
|
}
|
|
130
135
|
if (isolation?.isIsolationEnabled()) {
|
|
131
136
|
const user = isolation.getMindUser(mindName);
|
|
132
|
-
try {
|
|
133
|
-
await execAsync("chown", ["-R", `${user}:volute`, wt]);
|
|
134
|
-
} catch {
|
|
135
|
-
console.warn(`[pages] failed to chown worktree for ${mindName}`);
|
|
136
|
-
}
|
|
137
137
|
const wtGitDir = readWorktreeGitDir(wt);
|
|
138
|
-
|
|
138
|
+
for (const target of pagesIsolationChownPaths(mindDir, wtGitDir)) {
|
|
139
139
|
try {
|
|
140
|
-
await execAsync("chown", ["-R", `${user}:volute`,
|
|
140
|
+
await execAsync("chown", ["-R", `${user}:volute`, target]);
|
|
141
141
|
} catch {
|
|
142
|
-
console.warn(`[pages] failed to chown
|
|
142
|
+
console.warn(`[pages] failed to chown ${target} for ${mindName}`);
|
|
143
143
|
}
|
|
144
144
|
}
|
|
145
145
|
}
|
|
@@ -5,17 +5,17 @@ import {
|
|
|
5
5
|
resetSystemDMCache,
|
|
6
6
|
sendSystemMessage,
|
|
7
7
|
sendSystemMessageDirect
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-4SVONUTC.js";
|
|
9
9
|
import "./chunk-XDTKJNW5.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-QQ2MVQU3.js";
|
|
11
11
|
import "./chunk-QLWG3C2Z.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-KINGVQSR.js";
|
|
13
13
|
import "./chunk-K4EHBHPE.js";
|
|
14
14
|
import "./chunk-CU6OFXMM.js";
|
|
15
15
|
import "./chunk-C6ESRQZ7.js";
|
|
16
16
|
import "./chunk-M3PGGSBH.js";
|
|
17
17
|
import "./chunk-SPLPKBES.js";
|
|
18
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-Y6O35D7K.js";
|
|
19
19
|
import "./chunk-PGPLCJPK.js";
|
|
20
20
|
import "./chunk-YSV3VJQK.js";
|
|
21
21
|
import "./chunk-ONM2AZFL.js";
|
|
@@ -7,17 +7,17 @@ import {
|
|
|
7
7
|
} from "./chunk-QMJCNZ6C.js";
|
|
8
8
|
import {
|
|
9
9
|
sendSystemMessage
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-4SVONUTC.js";
|
|
11
11
|
import "./chunk-XDTKJNW5.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-QQ2MVQU3.js";
|
|
13
13
|
import "./chunk-QLWG3C2Z.js";
|
|
14
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-KINGVQSR.js";
|
|
15
15
|
import "./chunk-K4EHBHPE.js";
|
|
16
16
|
import "./chunk-CU6OFXMM.js";
|
|
17
17
|
import "./chunk-C6ESRQZ7.js";
|
|
18
18
|
import "./chunk-M3PGGSBH.js";
|
|
19
19
|
import "./chunk-SPLPKBES.js";
|
|
20
|
-
import "./chunk-
|
|
20
|
+
import "./chunk-Y6O35D7K.js";
|
|
21
21
|
import "./chunk-PGPLCJPK.js";
|
|
22
22
|
import "./chunk-YSV3VJQK.js";
|
|
23
23
|
import "./chunk-ONM2AZFL.js";
|
package/package.json
CHANGED
|
@@ -292,6 +292,9 @@ export function createMind(options: {
|
|
|
292
292
|
},
|
|
293
293
|
broadcast: (event: VoluteEvent) => broadcastToSession(session, event),
|
|
294
294
|
onTurnEnd: async () => {
|
|
295
|
+
// This turn's message is fully processed — drop it from the channel's
|
|
296
|
+
// in-flight set so a later compaction abort won't re-feed it.
|
|
297
|
+
session.channel.ack();
|
|
295
298
|
await autoCommit.flushFileChanges();
|
|
296
299
|
const wasCompacting = compactionTriggered.get(session.name);
|
|
297
300
|
compactionTriggered.set(session.name, false);
|
|
@@ -422,7 +425,11 @@ export function createMind(options: {
|
|
|
422
425
|
break;
|
|
423
426
|
}
|
|
424
427
|
streamAbort = new AbortController();
|
|
425
|
-
|
|
428
|
+
// Recover input the aborted stream had already pulled but not
|
|
429
|
+
// finished (the compaction wrap-up plus any messages that arrived
|
|
430
|
+
// mid-turn) alongside anything queued during /compact, so nothing
|
|
431
|
+
// is dropped when the killed subprocess takes its buffer with it.
|
|
432
|
+
const pending = session.channel.recover();
|
|
426
433
|
session.channel = createMessageChannel();
|
|
427
434
|
for (const msg of pending) session.channel.push(msg);
|
|
428
435
|
continue; // restart the stream loop
|
|
@@ -2,40 +2,62 @@ import type { SDKUserMessage } from "@anthropic-ai/claude-agent-sdk";
|
|
|
2
2
|
|
|
3
3
|
export type MessageChannel = {
|
|
4
4
|
push: (msg: SDKUserMessage) => void;
|
|
5
|
-
|
|
5
|
+
/** Acknowledge that the oldest in-flight message's turn has completed. */
|
|
6
|
+
ack: () => void;
|
|
7
|
+
/**
|
|
8
|
+
* Return every message that has not been fully processed — those delivered to
|
|
9
|
+
* the consumer but not yet acked (their turn never finished) followed by those
|
|
10
|
+
* still queued — and reset the channel. Used to re-feed the stream after a
|
|
11
|
+
* compaction abort so in-flight input is never lost.
|
|
12
|
+
*/
|
|
13
|
+
recover: () => SDKUserMessage[];
|
|
6
14
|
iterable: AsyncIterable<SDKUserMessage>;
|
|
7
15
|
};
|
|
8
16
|
|
|
9
17
|
export function createMessageChannel(): MessageChannel {
|
|
10
18
|
const queue: SDKUserMessage[] = [];
|
|
19
|
+
// Messages handed to the consumer (the SDK's read-ahead) whose turn has not yet
|
|
20
|
+
// completed. The SDK's streamInput loop pulls messages eagerly and writes them
|
|
21
|
+
// to the CLI subprocess, so once delivered they no longer live in `queue`. We
|
|
22
|
+
// retain them here so a compaction abort — which kills that subprocess — can
|
|
23
|
+
// re-feed the unprocessed ones instead of dropping them.
|
|
24
|
+
const inFlight: SDKUserMessage[] = [];
|
|
11
25
|
let resolve: ((value: IteratorResult<SDKUserMessage>) => void) | null = null;
|
|
12
26
|
|
|
27
|
+
function deliver(msg: SDKUserMessage): IteratorResult<SDKUserMessage> {
|
|
28
|
+
inFlight.push(msg);
|
|
29
|
+
return { value: msg, done: false };
|
|
30
|
+
}
|
|
31
|
+
|
|
13
32
|
return {
|
|
14
33
|
push(msg: SDKUserMessage) {
|
|
15
34
|
if (resolve) {
|
|
16
35
|
const r = resolve;
|
|
17
36
|
resolve = null;
|
|
18
|
-
r(
|
|
37
|
+
r(deliver(msg));
|
|
19
38
|
} else {
|
|
20
39
|
queue.push(msg);
|
|
21
40
|
}
|
|
22
41
|
},
|
|
23
|
-
|
|
42
|
+
ack() {
|
|
43
|
+
inFlight.shift();
|
|
44
|
+
},
|
|
45
|
+
recover() {
|
|
24
46
|
// Resolve any pending iterator wait with done:true so it doesn't
|
|
25
|
-
// leak as an orphaned promise (the old iterator is discarded after
|
|
47
|
+
// leak as an orphaned promise (the old iterator is discarded after recover)
|
|
26
48
|
if (resolve) {
|
|
27
49
|
const r = resolve;
|
|
28
50
|
resolve = null;
|
|
29
51
|
r({ value: undefined as any, done: true });
|
|
30
52
|
}
|
|
31
|
-
return queue.splice(0);
|
|
53
|
+
return [...inFlight.splice(0), ...queue.splice(0)];
|
|
32
54
|
},
|
|
33
55
|
iterable: {
|
|
34
56
|
[Symbol.asyncIterator]() {
|
|
35
57
|
return {
|
|
36
58
|
next(): Promise<IteratorResult<SDKUserMessage>> {
|
|
37
59
|
if (queue.length > 0) {
|
|
38
|
-
return Promise.resolve(
|
|
60
|
+
return Promise.resolve(deliver(queue.shift()!));
|
|
39
61
|
}
|
|
40
62
|
return new Promise((r) => {
|
|
41
63
|
resolve = r;
|
|
File without changes
|