volute 0.37.1 → 0.38.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/dist/{chunk-4L2Q7IP5.js → chunk-2TR2OPVA.js} +1 -1
- package/dist/chunk-JOJT34M2.js +109 -0
- package/dist/{chunk-CF4SO5L3.js → chunk-NGXQ2ESO.js} +9 -8
- package/dist/{chunk-LIIX2MOM.js → chunk-PLL2FM7A.js} +35 -20
- package/dist/{chunk-RUIVWCYY.js → chunk-TEZRVSSB.js} +24 -24
- package/dist/{chunk-QJGLTPAP.js → chunk-VUM2K6EN.js} +1 -1
- package/dist/cli.js +12 -12
- package/dist/{cloud-sync-EZKCEIBX.js → cloud-sync-PEM3IVI4.js} +8 -8
- package/dist/{daemon-restart-S6SOD3C5.js → daemon-restart-6QONRBTK.js} +6 -6
- package/dist/daemon.js +146 -76
- package/dist/{delivery-manager-3I7CA734.js → delivery-manager-IMCRV6A3.js} +5 -5
- package/dist/{down-25L2RKCQ.js → down-5XZWH4ZP.js} +2 -2
- package/dist/{echo-text-IWAQKNTC.js → echo-text-ADKLNTIA.js} +6 -6
- package/dist/{extensions-PCOXTHNM.js → extensions-P477XR46.js} +5 -5
- package/dist/{message-delivery-NWL7XEIX.js → message-delivery-54IXVE5H.js} +5 -5
- package/dist/{mind-MM2IYMJ3.js → mind-G5HDKBKL.js} +2 -2
- package/dist/{mind-manager-VOEQ2IZL.js → mind-manager-5G6P2EAT.js} +5 -5
- package/dist/{mind-service-WRTOQSAL.js → mind-service-FDATHL6X.js} +5 -5
- package/dist/{package-TA6IHIED.js → package-LYQHSDPG.js} +27 -27
- package/dist/{scheduler-355E746X.js → scheduler-ZRUZNQI5.js} +5 -5
- package/dist/{seed-6S4Z6TAM.js → seed-3KH4ZRJL.js} +1 -1
- package/dist/{seed-cmd-CBWLJWYD.js → seed-cmd-6A76SSAA.js} +2 -2
- package/dist/{seed-create-NT6DG4SE.js → seed-create-XXRRGZCO.js} +1 -1
- package/dist/{seed-sprout-GQLSK4EF.js → seed-sprout-HLMUH2AI.js} +2 -2
- package/dist/service-install-AIQBLE6P.js +17 -0
- package/dist/setup-NPAZXBIJ.js +454 -0
- package/dist/{skills-ZFVNN4TU.js → skills-NVOWS5NY.js} +1 -1
- package/dist/{sleep-manager-PBOIEBJZ.js → sleep-manager-VPPQXBPH.js} +5 -5
- package/dist/{spirit-4QOYM33G.js → spirit-ZFYG4JOH.js} +2 -2
- package/dist/{sprout-UDLZPMEO.js → sprout-FLBCETYG.js} +1 -1
- package/dist/{src-LT6ZBYYX.js → src-6Z4XYDH5.js} +200 -169
- package/dist/{system-chat-7AIN3U5M.js → system-chat-YUIT7RA6.js} +5 -5
- package/dist/{up-4T32B7OB.js → up-YRZAEZ3Z.js} +2 -2
- package/dist/{version-notify-NCRIN5QK.js → version-notify-764EXVQQ.js} +5 -5
- package/dist/web-assets/assets/index-BI7hUTBr.js +73 -0
- package/dist/web-assets/assets/index-BJifO9h_.css +1 -0
- package/dist/web-assets/index.html +2 -2
- package/package.json +27 -27
- package/packages/extensions/notes/dist/ui/assets/index-D3cdui42.css +1 -0
- package/packages/extensions/notes/dist/ui/assets/index-Dsua7alJ.js +61 -0
- package/packages/extensions/notes/dist/ui/index.html +2 -2
- package/packages/extensions/pages/dist/ui/assets/index-BM7gRdg7.js +2 -0
- package/packages/extensions/pages/dist/ui/assets/index-BcY6lnq4.css +1 -0
- package/packages/extensions/pages/dist/ui/index.html +2 -2
- package/packages/extensions/plan/dist/ui/assets/index-DWiqtzBv.js +61 -0
- package/packages/extensions/plan/dist/ui/assets/index-jIkrt-vI.css +1 -0
- package/packages/extensions/plan/dist/ui/index.html +2 -2
- package/templates/_base/src/lib/startup.ts +2 -0
- package/templates/_base/tsconfig.json +3 -1
- package/templates/claude/package.json.tmpl +5 -5
- package/templates/claude/src/agent.ts +1 -0
- package/templates/codex/package.json.tmpl +4 -4
- package/templates/pi/package.json.tmpl +5 -5
- package/templates/pi/src/agent.ts +2 -1
- package/dist/setup-APNN7KJB.js +0 -425
- package/dist/web-assets/assets/index-B3xLeex8.js +0 -75
- package/dist/web-assets/assets/index-Dr4A90Lo.css +0 -1
- package/packages/extensions/notes/dist/ui/assets/index-8jWEv9SA.js +0 -61
- package/packages/extensions/notes/dist/ui/assets/index-DkaB7Ytd.css +0 -1
- package/packages/extensions/pages/dist/ui/assets/index-D0HyS-xQ.css +0 -1
- package/packages/extensions/pages/dist/ui/assets/index-DKZLNMED.js +0 -2
- package/packages/extensions/plan/dist/ui/assets/index-CJj2gZnZ.css +0 -1
- package/packages/extensions/plan/dist/ui/assets/index-FMEJmvQz.js +0 -61
- package/dist/{chat-5Y4FD77E.js → chat-XL7CVWVJ.js} +0 -0
- package/dist/{chunk-MQRS4J24.js → chunk-LN67VPZJ.js} +3 -3
- package/dist/{service-YMHWPDXW.js → service-RH6Q2XWR.js} +4 -4
- package/dist/{status-MC2P7DBG.js → status-TGOKAFW3.js} +4 -4
- package/dist/{update-UOP2INF2.js → update-ZCTQ6UGY.js} +4 -4
package/dist/daemon.js
CHANGED
|
@@ -27,9 +27,10 @@ import {
|
|
|
27
27
|
import {
|
|
28
28
|
PLATFORMS,
|
|
29
29
|
echoTextToChannel,
|
|
30
|
+
fixModelEscapes,
|
|
30
31
|
getPlatformDriver,
|
|
31
32
|
routeOutboundBridge
|
|
32
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-PLL2FM7A.js";
|
|
33
34
|
import {
|
|
34
35
|
getBridgeConfig,
|
|
35
36
|
readBridgesConfig,
|
|
@@ -101,7 +102,7 @@ import {
|
|
|
101
102
|
trackToolUse,
|
|
102
103
|
uninstallNpmExtension,
|
|
103
104
|
writeSystemsConfig
|
|
104
|
-
} from "./chunk-
|
|
105
|
+
} from "./chunk-TEZRVSSB.js";
|
|
105
106
|
import {
|
|
106
107
|
loadMergedEnv,
|
|
107
108
|
mindEnvPath,
|
|
@@ -109,7 +110,7 @@ import {
|
|
|
109
110
|
sharedEnvPath,
|
|
110
111
|
writeEnv
|
|
111
112
|
} from "./chunk-PMMHVSCR.js";
|
|
112
|
-
import "./chunk-
|
|
113
|
+
import "./chunk-2TR2OPVA.js";
|
|
113
114
|
import {
|
|
114
115
|
applyInitFiles,
|
|
115
116
|
composeTemplate,
|
|
@@ -136,7 +137,39 @@ import {
|
|
|
136
137
|
syncBuiltinSkills,
|
|
137
138
|
uninstallSkill,
|
|
138
139
|
updateSkill
|
|
139
|
-
} from "./chunk-
|
|
140
|
+
} from "./chunk-VUM2K6EN.js";
|
|
141
|
+
import {
|
|
142
|
+
addMessage,
|
|
143
|
+
createChannel,
|
|
144
|
+
createConversation,
|
|
145
|
+
deleteConversationForUser,
|
|
146
|
+
findDMConversation,
|
|
147
|
+
fireWebhook,
|
|
148
|
+
formatChannelSettings,
|
|
149
|
+
getChannelByName,
|
|
150
|
+
getChannelName,
|
|
151
|
+
getChannelSettings,
|
|
152
|
+
getConversation,
|
|
153
|
+
getMessages,
|
|
154
|
+
getMessagesPaginated,
|
|
155
|
+
getParticipants,
|
|
156
|
+
getUnreadCounts,
|
|
157
|
+
initWebhook,
|
|
158
|
+
isConversationForMind,
|
|
159
|
+
isParticipant,
|
|
160
|
+
isParticipantOrOwner,
|
|
161
|
+
joinChannel,
|
|
162
|
+
leaveChannel,
|
|
163
|
+
listChannels,
|
|
164
|
+
listConversationsForMind,
|
|
165
|
+
listConversationsForUser,
|
|
166
|
+
listConversationsWithParticipants,
|
|
167
|
+
markConversationRead,
|
|
168
|
+
publish,
|
|
169
|
+
setConversationPrivate,
|
|
170
|
+
subscribe as subscribe2,
|
|
171
|
+
updateChannelSettings
|
|
172
|
+
} from "./chunk-5DPRTREW.js";
|
|
140
173
|
import {
|
|
141
174
|
readVoluteConfig,
|
|
142
175
|
writeVoluteConfig
|
|
@@ -182,6 +215,10 @@ import {
|
|
|
182
215
|
updateUserProfile,
|
|
183
216
|
verifyUser
|
|
184
217
|
} from "./chunk-UIM5NHPP.js";
|
|
218
|
+
import {
|
|
219
|
+
broadcast,
|
|
220
|
+
subscribe
|
|
221
|
+
} from "./chunk-N42QMDID.js";
|
|
185
222
|
import {
|
|
186
223
|
getAiConfig,
|
|
187
224
|
getAvailableModels,
|
|
@@ -203,42 +240,6 @@ import {
|
|
|
203
240
|
readGlobalConfig,
|
|
204
241
|
writeGlobalConfig
|
|
205
242
|
} from "./chunk-A6FLW5XD.js";
|
|
206
|
-
import {
|
|
207
|
-
addMessage,
|
|
208
|
-
createChannel,
|
|
209
|
-
createConversation,
|
|
210
|
-
deleteConversationForUser,
|
|
211
|
-
findDMConversation,
|
|
212
|
-
fireWebhook,
|
|
213
|
-
formatChannelSettings,
|
|
214
|
-
getChannelByName,
|
|
215
|
-
getChannelName,
|
|
216
|
-
getChannelSettings,
|
|
217
|
-
getConversation,
|
|
218
|
-
getMessages,
|
|
219
|
-
getMessagesPaginated,
|
|
220
|
-
getParticipants,
|
|
221
|
-
getUnreadCounts,
|
|
222
|
-
initWebhook,
|
|
223
|
-
isConversationForMind,
|
|
224
|
-
isParticipant,
|
|
225
|
-
isParticipantOrOwner,
|
|
226
|
-
joinChannel,
|
|
227
|
-
leaveChannel,
|
|
228
|
-
listChannels,
|
|
229
|
-
listConversationsForMind,
|
|
230
|
-
listConversationsForUser,
|
|
231
|
-
listConversationsWithParticipants,
|
|
232
|
-
markConversationRead,
|
|
233
|
-
publish,
|
|
234
|
-
setConversationPrivate,
|
|
235
|
-
subscribe as subscribe2,
|
|
236
|
-
updateChannelSettings
|
|
237
|
-
} from "./chunk-5DPRTREW.js";
|
|
238
|
-
import {
|
|
239
|
-
broadcast,
|
|
240
|
-
subscribe
|
|
241
|
-
} from "./chunk-N42QMDID.js";
|
|
242
243
|
import {
|
|
243
244
|
logBuffer,
|
|
244
245
|
logger_default
|
|
@@ -1431,6 +1432,7 @@ var oauthFlows = /* @__PURE__ */ new Map();
|
|
|
1431
1432
|
function cleanupOAuthFlows() {
|
|
1432
1433
|
for (const [id, flow] of oauthFlows) {
|
|
1433
1434
|
if (flow.status === "pending") {
|
|
1435
|
+
flow.resolveCode?.("");
|
|
1434
1436
|
flow.abortController?.abort();
|
|
1435
1437
|
}
|
|
1436
1438
|
oauthFlows.delete(id);
|
|
@@ -2085,8 +2087,8 @@ async function fanOutToBridgedMinds(opts) {
|
|
|
2085
2087
|
const participants = await getParticipants(opts.conversationId);
|
|
2086
2088
|
const mindParticipants = participants.filter((p) => p.userType === "mind");
|
|
2087
2089
|
const participantNames = participants.map((p) => p.username);
|
|
2088
|
-
const { getMindManager: getMindManager2 } = await import("./mind-manager-
|
|
2089
|
-
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-
|
|
2090
|
+
const { getMindManager: getMindManager2 } = await import("./mind-manager-5G6P2EAT.js");
|
|
2091
|
+
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-VPPQXBPH.js");
|
|
2090
2092
|
const manager = getMindManager2();
|
|
2091
2093
|
const sm = getSleepManagerIfReady2();
|
|
2092
2094
|
const targetMinds = mindParticipants.filter((ap) => {
|
|
@@ -2298,7 +2300,7 @@ async function notifyMind(mindName, message) {
|
|
|
2298
2300
|
const entry = await findMind(mindName);
|
|
2299
2301
|
if (!entry) return;
|
|
2300
2302
|
try {
|
|
2301
|
-
const { sendSystemMessage } = await import("./system-chat-
|
|
2303
|
+
const { sendSystemMessage } = await import("./system-chat-YUIT7RA6.js");
|
|
2302
2304
|
await sendSystemMessage(mindName, message);
|
|
2303
2305
|
} catch (err) {
|
|
2304
2306
|
logger_default.warn(`[file-sharing] notify mind ${mindName} failed`, logger_default.errorData(err));
|
|
@@ -3524,7 +3526,7 @@ async function getMindStatus(name, port, registryRunning) {
|
|
|
3524
3526
|
const manager = getMindManager();
|
|
3525
3527
|
let status = "stopped";
|
|
3526
3528
|
try {
|
|
3527
|
-
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-
|
|
3529
|
+
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-VPPQXBPH.js");
|
|
3528
3530
|
if (getSleepManagerIfReady2()?.isSleeping(name)) {
|
|
3529
3531
|
status = "sleeping";
|
|
3530
3532
|
}
|
|
@@ -4072,7 +4074,7 @@ The human who planted you described you as: "${body.description}"
|
|
|
4072
4074
|
try {
|
|
4073
4075
|
const spiritEntry = await findMind("volute");
|
|
4074
4076
|
if (spiritEntry) {
|
|
4075
|
-
const { spiritDir } = await import("./spirit-
|
|
4077
|
+
const { spiritDir } = await import("./spirit-ZFYG4JOH.js");
|
|
4076
4078
|
const sDir = spiritEntry.dir ?? spiritDir();
|
|
4077
4079
|
const spiritConfig = readVoluteConfig(sDir) ?? {};
|
|
4078
4080
|
const schedules = spiritConfig.schedules ?? [];
|
|
@@ -4087,7 +4089,7 @@ The human who planted you described you as: "${body.description}"
|
|
|
4087
4089
|
});
|
|
4088
4090
|
spiritConfig.schedules = schedules;
|
|
4089
4091
|
writeVoluteConfig(sDir, spiritConfig);
|
|
4090
|
-
const { getScheduler: getScheduler2 } = await import("./scheduler-
|
|
4092
|
+
const { getScheduler: getScheduler2 } = await import("./scheduler-ZRUZNQI5.js");
|
|
4091
4093
|
getScheduler2().loadSchedules("volute", sDir);
|
|
4092
4094
|
}
|
|
4093
4095
|
}
|
|
@@ -4378,7 +4380,7 @@ ${user.trimEnd()}
|
|
|
4378
4380
|
const manager = getMindManager();
|
|
4379
4381
|
try {
|
|
4380
4382
|
if (context?.type === "reload") {
|
|
4381
|
-
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-
|
|
4383
|
+
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-VPPQXBPH.js");
|
|
4382
4384
|
const sleepState = getSleepManagerIfReady2()?.getState(name);
|
|
4383
4385
|
if (sleepState?.sleeping) {
|
|
4384
4386
|
logger_default.info(`skipping reload for ${name} during sleep \u2014 will apply on next wake`);
|
|
@@ -4473,7 +4475,7 @@ ${user.trimEnd()}
|
|
|
4473
4475
|
const name = c.req.param("name");
|
|
4474
4476
|
const entry = await findMind(name);
|
|
4475
4477
|
if (!entry) return c.json({ error: "Mind not found" }, 404);
|
|
4476
|
-
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-
|
|
4478
|
+
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-VPPQXBPH.js");
|
|
4477
4479
|
const sm = getSleepManagerIfReady2();
|
|
4478
4480
|
if (!sm) return c.json({ error: "Sleep manager not initialized" }, 503);
|
|
4479
4481
|
return c.json(sm.getState(name));
|
|
@@ -4481,7 +4483,7 @@ ${user.trimEnd()}
|
|
|
4481
4483
|
const name = c.req.param("name");
|
|
4482
4484
|
const entry = await findMind(name);
|
|
4483
4485
|
if (!entry) return c.json({ error: "Mind not found" }, 404);
|
|
4484
|
-
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-
|
|
4486
|
+
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-VPPQXBPH.js");
|
|
4485
4487
|
const sm = getSleepManagerIfReady2();
|
|
4486
4488
|
if (!sm) return c.json({ error: "Sleep manager not initialized" }, 503);
|
|
4487
4489
|
if (sm.isSleeping(name)) return c.json({ error: "Mind is already sleeping" }, 409);
|
|
@@ -4501,7 +4503,7 @@ ${user.trimEnd()}
|
|
|
4501
4503
|
const name = c.req.param("name");
|
|
4502
4504
|
const entry = await findMind(name);
|
|
4503
4505
|
if (!entry) return c.json({ error: "Mind not found" }, 404);
|
|
4504
|
-
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-
|
|
4506
|
+
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-VPPQXBPH.js");
|
|
4505
4507
|
const sm = getSleepManagerIfReady2();
|
|
4506
4508
|
if (!sm) return c.json({ error: "Sleep manager not initialized" }, 503);
|
|
4507
4509
|
const sleepState = sm.getState(name);
|
|
@@ -4516,7 +4518,7 @@ ${user.trimEnd()}
|
|
|
4516
4518
|
const name = c.req.param("name");
|
|
4517
4519
|
const entry = await findMind(name);
|
|
4518
4520
|
if (!entry) return c.json({ error: "Mind not found" }, 404);
|
|
4519
|
-
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-
|
|
4521
|
+
const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-VPPQXBPH.js");
|
|
4520
4522
|
const sm = getSleepManagerIfReady2();
|
|
4521
4523
|
if (!sm) return c.json({ error: "Sleep manager not initialized" }, 503);
|
|
4522
4524
|
const flushed = await sm.flushQueuedMessages(name);
|
|
@@ -4619,7 +4621,7 @@ ${user.trimEnd()}
|
|
|
4619
4621
|
try {
|
|
4620
4622
|
const spiritEntry = await findMind("volute");
|
|
4621
4623
|
if (spiritEntry) {
|
|
4622
|
-
const { spiritDir } = await import("./spirit-
|
|
4624
|
+
const { spiritDir } = await import("./spirit-ZFYG4JOH.js");
|
|
4623
4625
|
const sDir = spiritEntry.dir ?? spiritDir();
|
|
4624
4626
|
const spiritConfig = readVoluteConfig(sDir);
|
|
4625
4627
|
if (spiritConfig?.schedules) {
|
|
@@ -4627,7 +4629,7 @@ ${user.trimEnd()}
|
|
|
4627
4629
|
spiritConfig.schedules = spiritConfig.schedules.filter((s) => s.id !== nurtureId);
|
|
4628
4630
|
if (spiritConfig.schedules.length === 0) spiritConfig.schedules = void 0;
|
|
4629
4631
|
writeVoluteConfig(sDir, spiritConfig);
|
|
4630
|
-
const { getScheduler: getScheduler2 } = await import("./scheduler-
|
|
4632
|
+
const { getScheduler: getScheduler2 } = await import("./scheduler-ZRUZNQI5.js");
|
|
4631
4633
|
getScheduler2().loadSchedules("volute", sDir);
|
|
4632
4634
|
}
|
|
4633
4635
|
}
|
|
@@ -4999,7 +5001,8 @@ ${user.trimEnd()}
|
|
|
4999
5001
|
maxThinkingTokens: config2?.maxThinkingTokens ?? templateConfig.maxThinkingTokens ?? null,
|
|
5000
5002
|
tokenBudget: config2?.tokenBudget ?? null,
|
|
5001
5003
|
tokenBudgetPeriodMinutes: config2?.tokenBudgetPeriodMinutes ?? null,
|
|
5002
|
-
compaction: templateConfig.compaction ?? null
|
|
5004
|
+
compaction: templateConfig.compaction ?? null,
|
|
5005
|
+
unescapeNewlines: config2?.unescapeNewlines === true
|
|
5003
5006
|
}
|
|
5004
5007
|
});
|
|
5005
5008
|
}).put(
|
|
@@ -5013,7 +5016,8 @@ ${user.trimEnd()}
|
|
|
5013
5016
|
maxThinkingTokens: z5.number().int().positive().nullable().optional(),
|
|
5014
5017
|
tokenBudget: z5.number().int().positive().nullable().optional(),
|
|
5015
5018
|
tokenBudgetPeriodMinutes: z5.number().int().positive().nullable().optional(),
|
|
5016
|
-
compaction: z5.object({ maxContextTokens: z5.number().int().positive().nullable().optional() }).nullable().optional()
|
|
5019
|
+
compaction: z5.object({ maxContextTokens: z5.number().int().positive().nullable().optional() }).nullable().optional(),
|
|
5020
|
+
unescapeNewlines: z5.boolean().optional()
|
|
5017
5021
|
})
|
|
5018
5022
|
),
|
|
5019
5023
|
async (c) => {
|
|
@@ -5049,7 +5053,14 @@ ${user.trimEnd()}
|
|
|
5049
5053
|
existing.maxThinkingTokens = body.maxThinkingTokens;
|
|
5050
5054
|
}
|
|
5051
5055
|
}
|
|
5056
|
+
if (body.unescapeNewlines !== void 0) {
|
|
5057
|
+
existing.unescapeNewlines = body.unescapeNewlines;
|
|
5058
|
+
}
|
|
5052
5059
|
writeVoluteConfig(dir, existing);
|
|
5060
|
+
if (body.unescapeNewlines !== void 0) {
|
|
5061
|
+
const { clearEchoTextCache } = await import("./echo-text-ADKLNTIA.js");
|
|
5062
|
+
clearEchoTextCache(name);
|
|
5063
|
+
}
|
|
5053
5064
|
const needsConfigJson = body.model !== void 0 || body.thinkingLevel !== void 0 || body.maxThinkingTokens !== void 0 || body.compaction !== void 0;
|
|
5054
5065
|
if (needsConfigJson) {
|
|
5055
5066
|
const configJsonPath = resolve10(dir, "home/.config/config.json");
|
|
@@ -5862,7 +5873,7 @@ var app15 = new Hono17().get("/:name/clock/status", async (c) => {
|
|
|
5862
5873
|
const body = await c.req.text();
|
|
5863
5874
|
const message = `[webhook: ${event}] ${body}`;
|
|
5864
5875
|
try {
|
|
5865
|
-
const { sendSystemMessage } = await import("./system-chat-
|
|
5876
|
+
const { sendSystemMessage } = await import("./system-chat-YUIT7RA6.js");
|
|
5866
5877
|
await sendSystemMessage(name, message);
|
|
5867
5878
|
return c.json({ ok: true });
|
|
5868
5879
|
} catch (err) {
|
|
@@ -5912,7 +5923,7 @@ setup.get("/status", async (c) => {
|
|
|
5912
5923
|
});
|
|
5913
5924
|
}
|
|
5914
5925
|
const config2 = readGlobalConfig();
|
|
5915
|
-
const hasSystem = config2.setup != null;
|
|
5926
|
+
const hasSystem = config2.setup != null && !!config2.name;
|
|
5916
5927
|
let hasAccount = false;
|
|
5917
5928
|
if (hasSystem) {
|
|
5918
5929
|
try {
|
|
@@ -5923,7 +5934,12 @@ setup.get("/status", async (c) => {
|
|
|
5923
5934
|
logger_default.debug("could not check for existing accounts during setup status", logger_default.errorData(err));
|
|
5924
5935
|
}
|
|
5925
5936
|
}
|
|
5926
|
-
return c.json({
|
|
5937
|
+
return c.json({
|
|
5938
|
+
complete,
|
|
5939
|
+
hasSystem,
|
|
5940
|
+
hasAccount,
|
|
5941
|
+
setupType: config2.setup?.type ?? null
|
|
5942
|
+
});
|
|
5927
5943
|
});
|
|
5928
5944
|
setup.post("/configure", async (c) => {
|
|
5929
5945
|
if (isSetupComplete()) {
|
|
@@ -5965,11 +5981,28 @@ setup.post("/system", async (c) => {
|
|
|
5965
5981
|
return c.json({ error: "System name is required" }, 400);
|
|
5966
5982
|
}
|
|
5967
5983
|
try {
|
|
5968
|
-
const
|
|
5969
|
-
|
|
5984
|
+
const existing = readGlobalConfig();
|
|
5985
|
+
let config2;
|
|
5986
|
+
if (existing.setup) {
|
|
5987
|
+
config2 = {
|
|
5988
|
+
...existing,
|
|
5989
|
+
name: body.name.trim(),
|
|
5990
|
+
description: body.description?.trim() || existing.description,
|
|
5991
|
+
setupCompleted: false
|
|
5992
|
+
};
|
|
5993
|
+
} else {
|
|
5994
|
+
config2 = writeSetupConfig(body.name.trim(), body.description?.trim());
|
|
5995
|
+
}
|
|
5996
|
+
if (body.remote && !config2.hostname) {
|
|
5970
5997
|
config2.hostname = "0.0.0.0";
|
|
5971
|
-
writeGlobalConfig(config2);
|
|
5972
5998
|
}
|
|
5999
|
+
if (body.tailscale) {
|
|
6000
|
+
config2.tailscale = true;
|
|
6001
|
+
}
|
|
6002
|
+
if (body.service && config2.setup) {
|
|
6003
|
+
config2.setup.service = true;
|
|
6004
|
+
}
|
|
6005
|
+
writeGlobalConfig(config2);
|
|
5973
6006
|
return c.json({ ok: true });
|
|
5974
6007
|
} catch (err) {
|
|
5975
6008
|
return c.json({ error: `Failed to write configuration: ${err.message}` }, 500);
|
|
@@ -6169,11 +6202,30 @@ setup.post("/complete", async (c) => {
|
|
|
6169
6202
|
return c.json({ error: "Setup already complete" }, 400);
|
|
6170
6203
|
}
|
|
6171
6204
|
try {
|
|
6172
|
-
const { ensureSpiritProject, syncSpiritTemplate } = await import("./spirit-
|
|
6173
|
-
const { startSpiritFull } = await import("./mind-service-
|
|
6205
|
+
const { ensureSpiritProject, syncSpiritTemplate } = await import("./spirit-ZFYG4JOH.js");
|
|
6206
|
+
const { startSpiritFull } = await import("./mind-service-FDATHL6X.js");
|
|
6174
6207
|
await ensureSpiritProject();
|
|
6175
6208
|
await syncSpiritTemplate();
|
|
6176
6209
|
const warnings = [];
|
|
6210
|
+
const config2 = readGlobalConfig();
|
|
6211
|
+
if (config2.setup?.service && config2.setup?.type === "local") {
|
|
6212
|
+
try {
|
|
6213
|
+
const { installUserService } = await import("./service-install-AIQBLE6P.js");
|
|
6214
|
+
const installed = await installUserService(config2.port, config2.hostname);
|
|
6215
|
+
if (!installed) {
|
|
6216
|
+
warnings.push("Service installation is not supported on this platform.");
|
|
6217
|
+
config2.setup.service = false;
|
|
6218
|
+
writeGlobalConfig(config2);
|
|
6219
|
+
}
|
|
6220
|
+
} catch (err) {
|
|
6221
|
+
logger_default.warn("user service install failed during setup (non-fatal)", logger_default.errorData(err));
|
|
6222
|
+
warnings.push(
|
|
6223
|
+
"Failed to install service \u2014 you can start Volute manually with `volute up`."
|
|
6224
|
+
);
|
|
6225
|
+
config2.setup.service = false;
|
|
6226
|
+
writeGlobalConfig(config2);
|
|
6227
|
+
}
|
|
6228
|
+
}
|
|
6177
6229
|
let spiritStarted = false;
|
|
6178
6230
|
try {
|
|
6179
6231
|
logger_default.info("starting spirit during setup...");
|
|
@@ -6209,7 +6261,7 @@ setup.post("/complete", async (c) => {
|
|
|
6209
6261
|
logger_default.info("setup complete state", { spiritConversationId, spiritStarted });
|
|
6210
6262
|
if (spiritConversationId && spiritStarted) {
|
|
6211
6263
|
try {
|
|
6212
|
-
const { deliverMessage: deliverMessage2 } = await import("./message-delivery-
|
|
6264
|
+
const { deliverMessage: deliverMessage2 } = await import("./message-delivery-54IXVE5H.js");
|
|
6213
6265
|
const { listUsersByType: listUsers2 } = await import("./auth-2QOOPMBX.js");
|
|
6214
6266
|
const admins = await listUsers2("brain");
|
|
6215
6267
|
const admin2 = admins.find((u) => u.role === "admin");
|
|
@@ -6231,9 +6283,9 @@ setup.post("/complete", async (c) => {
|
|
|
6231
6283
|
);
|
|
6232
6284
|
}
|
|
6233
6285
|
}
|
|
6234
|
-
const
|
|
6235
|
-
|
|
6236
|
-
writeGlobalConfig(
|
|
6286
|
+
const finalConfig = readGlobalConfig();
|
|
6287
|
+
finalConfig.setupCompleted = true;
|
|
6288
|
+
writeGlobalConfig(finalConfig);
|
|
6237
6289
|
return c.json({
|
|
6238
6290
|
ok: true,
|
|
6239
6291
|
spiritConversationId,
|
|
@@ -7309,6 +7361,15 @@ var unifiedChatApp = new Hono26().post(
|
|
|
7309
7361
|
contentBlocks.push({ type: "image", media_type: img.media_type, data: img.data });
|
|
7310
7362
|
}
|
|
7311
7363
|
}
|
|
7364
|
+
if (senderIsMind) {
|
|
7365
|
+
const vCfg = readVoluteConfig(mindDir(baseName ?? senderName));
|
|
7366
|
+
const shouldUnescapeNewlines = vCfg?.unescapeNewlines === true;
|
|
7367
|
+
for (const block of contentBlocks) {
|
|
7368
|
+
if (block.type === "text") {
|
|
7369
|
+
block.text = fixModelEscapes(block.text, shouldUnescapeNewlines);
|
|
7370
|
+
}
|
|
7371
|
+
}
|
|
7372
|
+
}
|
|
7312
7373
|
if (senderIsMind && conv.type === "channel" && convName) {
|
|
7313
7374
|
try {
|
|
7314
7375
|
const chSettings = await getChannelSettings(convName);
|
|
@@ -7778,12 +7839,21 @@ async function startDaemon(opts) {
|
|
|
7778
7839
|
);
|
|
7779
7840
|
}
|
|
7780
7841
|
const token = process.env.VOLUTE_DAEMON_TOKEN || randomBytes(32).toString("hex");
|
|
7842
|
+
const { readGlobalConfig: readGlobalConfig2 } = await import("./setup-PF7JSFMO.js");
|
|
7843
|
+
const globalCfg = readGlobalConfig2();
|
|
7781
7844
|
let tls;
|
|
7782
|
-
if (opts.tailscale) {
|
|
7783
|
-
|
|
7784
|
-
|
|
7785
|
-
|
|
7786
|
-
|
|
7845
|
+
if (opts.tailscale || globalCfg.tailscale) {
|
|
7846
|
+
try {
|
|
7847
|
+
const { getTailscaleTls } = await import("./tailscale-LTYNKIPZ.js");
|
|
7848
|
+
const tlsConfig = await getTailscaleTls();
|
|
7849
|
+
tls = { key: tlsConfig.key, cert: tlsConfig.cert };
|
|
7850
|
+
logger_default.info("Tailscale HTTPS enabled", { hostname: tlsConfig.hostname });
|
|
7851
|
+
} catch (err) {
|
|
7852
|
+
logger_default.error(
|
|
7853
|
+
"Tailscale TLS setup failed \u2014 starting without HTTPS. Ensure Tailscale is running, or disable tailscale in config.",
|
|
7854
|
+
logger_default.errorData(err)
|
|
7855
|
+
);
|
|
7856
|
+
}
|
|
7787
7857
|
}
|
|
7788
7858
|
let result;
|
|
7789
7859
|
try {
|
|
@@ -7855,8 +7925,8 @@ async function startDaemon(opts) {
|
|
|
7855
7925
|
try {
|
|
7856
7926
|
const { isSetupComplete: isSetupComplete2 } = await import("./setup-PF7JSFMO.js");
|
|
7857
7927
|
if (isSetupComplete2()) {
|
|
7858
|
-
const { ensureSpiritProject, syncSpiritTemplate } = await import("./spirit-
|
|
7859
|
-
const { startSpiritFull } = await import("./mind-service-
|
|
7928
|
+
const { ensureSpiritProject, syncSpiritTemplate } = await import("./spirit-ZFYG4JOH.js");
|
|
7929
|
+
const { startSpiritFull } = await import("./mind-service-FDATHL6X.js");
|
|
7860
7930
|
await ensureSpiritProject();
|
|
7861
7931
|
await syncSpiritTemplate();
|
|
7862
7932
|
const spiritEntry = await findMind("volute");
|
|
@@ -7873,7 +7943,7 @@ async function startDaemon(opts) {
|
|
|
7873
7943
|
bridgeManager.startBridges(daemonPort).catch((err) => {
|
|
7874
7944
|
logger_default.warn("failed to start bridges", logger_default.errorData(err));
|
|
7875
7945
|
});
|
|
7876
|
-
import("./cloud-sync-
|
|
7946
|
+
import("./cloud-sync-PEM3IVI4.js").then(
|
|
7877
7947
|
({ consumeQueuedMessages }) => consumeQueuedMessages().catch((err) => {
|
|
7878
7948
|
logger_default.warn("failed to consume queued cloud messages", logger_default.errorData(err));
|
|
7879
7949
|
})
|
|
@@ -7881,7 +7951,7 @@ async function startDaemon(opts) {
|
|
|
7881
7951
|
logger_default.warn("failed to load cloud-sync module", logger_default.errorData(err));
|
|
7882
7952
|
});
|
|
7883
7953
|
try {
|
|
7884
|
-
const { backfillTemplateHashes, notifyVersionUpdate } = await import("./version-notify-
|
|
7954
|
+
const { backfillTemplateHashes, notifyVersionUpdate } = await import("./version-notify-764EXVQQ.js");
|
|
7885
7955
|
backfillTemplateHashes();
|
|
7886
7956
|
notifyVersionUpdate().catch((err) => {
|
|
7887
7957
|
logger_default.warn("failed to send version update notifications", logger_default.errorData(err));
|
|
@@ -3,11 +3,12 @@ import {
|
|
|
3
3
|
DeliveryManager,
|
|
4
4
|
getDeliveryManager,
|
|
5
5
|
initDeliveryManager
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-TEZRVSSB.js";
|
|
7
7
|
import "./chunk-PMMHVSCR.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-2TR2OPVA.js";
|
|
9
9
|
import "./chunk-46DYYHN6.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-VUM2K6EN.js";
|
|
11
|
+
import "./chunk-5DPRTREW.js";
|
|
11
12
|
import "./chunk-CU6OFXMM.js";
|
|
12
13
|
import "./chunk-KXXJYY62.js";
|
|
13
14
|
import "./chunk-7AZQFSOV.js";
|
|
@@ -15,10 +16,9 @@ import "./chunk-GVVVMZ4J.js";
|
|
|
15
16
|
import "./chunk-3F7XK5Q7.js";
|
|
16
17
|
import "./chunk-SNW2NPP4.js";
|
|
17
18
|
import "./chunk-UIM5NHPP.js";
|
|
19
|
+
import "./chunk-N42QMDID.js";
|
|
18
20
|
import "./chunk-ORNY3MZR.js";
|
|
19
21
|
import "./chunk-A6FLW5XD.js";
|
|
20
|
-
import "./chunk-5DPRTREW.js";
|
|
21
|
-
import "./chunk-N42QMDID.js";
|
|
22
22
|
import "./chunk-T2TP6ZC6.js";
|
|
23
23
|
import "./chunk-2NHRJ3YO.js";
|
|
24
24
|
import "./chunk-CJ26DXZL.js";
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import {
|
|
3
3
|
run,
|
|
4
4
|
stopDaemon
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-TNZ5XQA4.js";
|
|
5
|
+
} from "./chunk-LN67VPZJ.js";
|
|
7
6
|
import "./chunk-TXSA4Q3V.js";
|
|
8
7
|
import "./chunk-O7IGP7ZW.js";
|
|
8
|
+
import "./chunk-TNZ5XQA4.js";
|
|
9
9
|
import "./chunk-3F7XK5Q7.js";
|
|
10
10
|
import "./chunk-SNW2NPP4.js";
|
|
11
11
|
import "./chunk-2NHRJ3YO.js";
|
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
import {
|
|
3
3
|
clearEchoTextCache,
|
|
4
4
|
echoTextToChannel
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-PLL2FM7A.js";
|
|
6
6
|
import "./chunk-LQ6Z4FXN.js";
|
|
7
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-TEZRVSSB.js";
|
|
8
8
|
import "./chunk-PMMHVSCR.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-2TR2OPVA.js";
|
|
10
10
|
import "./chunk-46DYYHN6.js";
|
|
11
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-VUM2K6EN.js";
|
|
12
|
+
import "./chunk-5DPRTREW.js";
|
|
12
13
|
import "./chunk-CU6OFXMM.js";
|
|
13
14
|
import "./chunk-KXXJYY62.js";
|
|
14
15
|
import "./chunk-7AZQFSOV.js";
|
|
@@ -16,10 +17,9 @@ import "./chunk-GVVVMZ4J.js";
|
|
|
16
17
|
import "./chunk-3F7XK5Q7.js";
|
|
17
18
|
import "./chunk-SNW2NPP4.js";
|
|
18
19
|
import "./chunk-UIM5NHPP.js";
|
|
20
|
+
import "./chunk-N42QMDID.js";
|
|
19
21
|
import "./chunk-ORNY3MZR.js";
|
|
20
22
|
import "./chunk-A6FLW5XD.js";
|
|
21
|
-
import "./chunk-5DPRTREW.js";
|
|
22
|
-
import "./chunk-N42QMDID.js";
|
|
23
23
|
import "./chunk-T2TP6ZC6.js";
|
|
24
24
|
import "./chunk-LGNUFVMR.js";
|
|
25
25
|
import "./chunk-2NHRJ3YO.js";
|
|
@@ -13,11 +13,12 @@ import {
|
|
|
13
13
|
parseCommandArgs,
|
|
14
14
|
setExtensionEnabled,
|
|
15
15
|
uninstallNpmExtension
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-TEZRVSSB.js";
|
|
17
17
|
import "./chunk-PMMHVSCR.js";
|
|
18
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-2TR2OPVA.js";
|
|
19
19
|
import "./chunk-46DYYHN6.js";
|
|
20
|
-
import "./chunk-
|
|
20
|
+
import "./chunk-VUM2K6EN.js";
|
|
21
|
+
import "./chunk-5DPRTREW.js";
|
|
21
22
|
import "./chunk-CU6OFXMM.js";
|
|
22
23
|
import "./chunk-KXXJYY62.js";
|
|
23
24
|
import "./chunk-7AZQFSOV.js";
|
|
@@ -25,10 +26,9 @@ import "./chunk-GVVVMZ4J.js";
|
|
|
25
26
|
import "./chunk-3F7XK5Q7.js";
|
|
26
27
|
import "./chunk-SNW2NPP4.js";
|
|
27
28
|
import "./chunk-UIM5NHPP.js";
|
|
29
|
+
import "./chunk-N42QMDID.js";
|
|
28
30
|
import "./chunk-ORNY3MZR.js";
|
|
29
31
|
import "./chunk-A6FLW5XD.js";
|
|
30
|
-
import "./chunk-5DPRTREW.js";
|
|
31
|
-
import "./chunk-N42QMDID.js";
|
|
32
32
|
import "./chunk-T2TP6ZC6.js";
|
|
33
33
|
import "./chunk-2NHRJ3YO.js";
|
|
34
34
|
import "./chunk-CJ26DXZL.js";
|
|
@@ -8,11 +8,12 @@ import {
|
|
|
8
8
|
tagRecentInbound,
|
|
9
9
|
tagUntaggedInbound,
|
|
10
10
|
tagUntaggedOutbound
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-TEZRVSSB.js";
|
|
12
12
|
import "./chunk-PMMHVSCR.js";
|
|
13
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-2TR2OPVA.js";
|
|
14
14
|
import "./chunk-46DYYHN6.js";
|
|
15
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-VUM2K6EN.js";
|
|
16
|
+
import "./chunk-5DPRTREW.js";
|
|
16
17
|
import "./chunk-CU6OFXMM.js";
|
|
17
18
|
import "./chunk-KXXJYY62.js";
|
|
18
19
|
import "./chunk-7AZQFSOV.js";
|
|
@@ -20,10 +21,9 @@ import "./chunk-GVVVMZ4J.js";
|
|
|
20
21
|
import "./chunk-3F7XK5Q7.js";
|
|
21
22
|
import "./chunk-SNW2NPP4.js";
|
|
22
23
|
import "./chunk-UIM5NHPP.js";
|
|
24
|
+
import "./chunk-N42QMDID.js";
|
|
23
25
|
import "./chunk-ORNY3MZR.js";
|
|
24
26
|
import "./chunk-A6FLW5XD.js";
|
|
25
|
-
import "./chunk-5DPRTREW.js";
|
|
26
|
-
import "./chunk-N42QMDID.js";
|
|
27
27
|
import "./chunk-T2TP6ZC6.js";
|
|
28
28
|
import "./chunk-2NHRJ3YO.js";
|
|
29
29
|
import "./chunk-CJ26DXZL.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-3KH4ZRJL.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-FLBCETYG.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."
|
|
@@ -3,11 +3,12 @@ import {
|
|
|
3
3
|
MindManager,
|
|
4
4
|
getMindManager,
|
|
5
5
|
initMindManager
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-TEZRVSSB.js";
|
|
7
7
|
import "./chunk-PMMHVSCR.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-2TR2OPVA.js";
|
|
9
9
|
import "./chunk-46DYYHN6.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-VUM2K6EN.js";
|
|
11
|
+
import "./chunk-5DPRTREW.js";
|
|
11
12
|
import "./chunk-CU6OFXMM.js";
|
|
12
13
|
import "./chunk-KXXJYY62.js";
|
|
13
14
|
import "./chunk-7AZQFSOV.js";
|
|
@@ -15,10 +16,9 @@ import "./chunk-GVVVMZ4J.js";
|
|
|
15
16
|
import "./chunk-3F7XK5Q7.js";
|
|
16
17
|
import "./chunk-SNW2NPP4.js";
|
|
17
18
|
import "./chunk-UIM5NHPP.js";
|
|
19
|
+
import "./chunk-N42QMDID.js";
|
|
18
20
|
import "./chunk-ORNY3MZR.js";
|
|
19
21
|
import "./chunk-A6FLW5XD.js";
|
|
20
|
-
import "./chunk-5DPRTREW.js";
|
|
21
|
-
import "./chunk-N42QMDID.js";
|
|
22
22
|
import "./chunk-T2TP6ZC6.js";
|
|
23
23
|
import "./chunk-2NHRJ3YO.js";
|
|
24
24
|
import "./chunk-CJ26DXZL.js";
|
|
@@ -6,11 +6,12 @@ import {
|
|
|
6
6
|
stopMindFull,
|
|
7
7
|
stopSpiritFull,
|
|
8
8
|
wakeMind
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-TEZRVSSB.js";
|
|
10
10
|
import "./chunk-PMMHVSCR.js";
|
|
11
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-2TR2OPVA.js";
|
|
12
12
|
import "./chunk-46DYYHN6.js";
|
|
13
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-VUM2K6EN.js";
|
|
14
|
+
import "./chunk-5DPRTREW.js";
|
|
14
15
|
import "./chunk-CU6OFXMM.js";
|
|
15
16
|
import "./chunk-KXXJYY62.js";
|
|
16
17
|
import "./chunk-7AZQFSOV.js";
|
|
@@ -18,10 +19,9 @@ import "./chunk-GVVVMZ4J.js";
|
|
|
18
19
|
import "./chunk-3F7XK5Q7.js";
|
|
19
20
|
import "./chunk-SNW2NPP4.js";
|
|
20
21
|
import "./chunk-UIM5NHPP.js";
|
|
22
|
+
import "./chunk-N42QMDID.js";
|
|
21
23
|
import "./chunk-ORNY3MZR.js";
|
|
22
24
|
import "./chunk-A6FLW5XD.js";
|
|
23
|
-
import "./chunk-5DPRTREW.js";
|
|
24
|
-
import "./chunk-N42QMDID.js";
|
|
25
25
|
import "./chunk-T2TP6ZC6.js";
|
|
26
26
|
import "./chunk-2NHRJ3YO.js";
|
|
27
27
|
import "./chunk-CJ26DXZL.js";
|