volute 0.41.1 → 0.42.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.
Files changed (46) hide show
  1. package/dist/{ai-service-XCLE3MQP.js → ai-service-3GBOJGUA.js} +10 -2
  2. package/dist/{chunk-ULNQ6OC4.js → chunk-2YRTSK5K.js} +2 -2
  3. package/dist/{chunk-IJCZAYGT.js → chunk-4ZSUUBG5.js} +97 -2
  4. package/dist/{chunk-F44AEQAW.js → chunk-52NMCDBS.js} +13 -13
  5. package/dist/{chunk-MJIJFCAH.js → chunk-JLX3GC7T.js} +2 -2
  6. package/dist/chunk-KZAL7HEQ.js +141 -0
  7. package/dist/{chunk-EKLRS2SX.js → chunk-RKBYFLOR.js} +1 -1
  8. package/dist/{chunk-GCS64EAD.js → chunk-TKOWXAHG.js} +3 -3
  9. package/dist/{chunk-MYJSKXGH.js → chunk-VSUZE2PD.js} +3 -3
  10. package/dist/{chunk-763WUVJQ.js → chunk-WR7CSHQ4.js} +1 -1
  11. package/dist/cli.js +7 -7
  12. package/dist/{cloud-sync-2XVXEOSU.js → cloud-sync-3OPHFOYQ.js} +7 -7
  13. package/dist/{create-OTM46ZUM.js → create-YNBZWD34.js} +1 -1
  14. package/dist/{daemon-restart-HDVGTYH7.js → daemon-restart-RAKGR56L.js} +2 -2
  15. package/dist/daemon.js +80 -42
  16. package/dist/{delivery-manager-CPADWRV2.js → delivery-manager-5Y35DOX3.js} +7 -7
  17. package/dist/{echo-text-GEDEEY7M.js → echo-text-YP3JVLNA.js} +8 -8
  18. package/dist/{extensions-SU3N4COT.js → extensions-BTNIUS5J.js} +7 -7
  19. package/dist/{message-delivery-HPMELC4Q.js → message-delivery-FPIL26WV.js} +7 -7
  20. package/dist/{mind-APS4URT7.js → mind-VXV6ZYZY.js} +3 -3
  21. package/dist/{mind-manager-74XQZEGX.js → mind-manager-OYOIBGK6.js} +7 -7
  22. package/dist/{mind-service-XGXSMQP6.js → mind-service-PR4PR4XI.js} +7 -7
  23. package/dist/{package-MVFX22K5.js → package-UWH5IM76.js} +1 -1
  24. package/dist/{sandbox-ND53WZVU.js → sandbox-E7RWZDVG.js} +2 -2
  25. package/dist/{scheduler-MEBQF5MW.js → scheduler-KXUY2I7W.js} +7 -7
  26. package/dist/{seed-L4XFZ3VX.js → seed-YQAOIXIY.js} +1 -1
  27. package/dist/{seed-cmd-NSTPYJFC.js → seed-cmd-7KJS4LCA.js} +2 -2
  28. package/dist/{seed-create-ZYCZC46W.js → seed-create-Z7NDRRGP.js} +3 -3
  29. package/dist/{seed-sprout-YXHU73XA.js → seed-sprout-PYDMVVUL.js} +4 -4
  30. package/dist/{setup-FPFWDMXD.js → setup-IYOUPCIK.js} +5 -1
  31. package/dist/{setup-RMR3TKCR.js → setup-VARJ7N6Z.js} +2 -2
  32. package/dist/{skills-AOZF6U2B.js → skills-YBCYVOPQ.js} +2 -2
  33. package/dist/{sleep-manager-OHM3TO62.js → sleep-manager-FJLASHHW.js} +7 -7
  34. package/dist/{spirit-ONLRFATY.js → spirit-NJFAY5CZ.js} +4 -4
  35. package/dist/{sprout-2KJOQZCL.js → sprout-B27C2WGE.js} +1 -1
  36. package/dist/{system-chat-HZUKBIKJ.js → system-chat-P6KVGW4T.js} +7 -7
  37. package/dist/{turn-tracker-TIX4DY2W.js → turn-tracker-W4TASMR7.js} +3 -3
  38. package/dist/{up-7KVNER6V.js → up-POJX6S5Y.js} +2 -2
  39. package/dist/{version-notify-UFFDUPCX.js → version-notify-TCKAX7ZA.js} +7 -7
  40. package/dist/web-assets/assets/{index-DaUp9iE2.js → index-CrFAsfiE.js} +10 -10
  41. package/dist/web-assets/assets/{index-DqHSW9Fr.css → index-D7udpBCx.css} +1 -1
  42. package/dist/web-assets/index.html +2 -2
  43. package/package.json +1 -1
  44. package/templates/codex/src/server.ts +8 -2
  45. package/templates/pi/src/lib/resolve-model.ts +50 -12
  46. package/dist/chunk-MA7MYEOK.js +0 -71
package/dist/daemon.js CHANGED
@@ -30,7 +30,7 @@ import {
30
30
  fixModelEscapes,
31
31
  getPlatformDriver,
32
32
  routeOutboundBridge
33
- } from "./chunk-ULNQ6OC4.js";
33
+ } from "./chunk-2YRTSK5K.js";
34
34
  import {
35
35
  getBridgeConfig,
36
36
  readBridgesConfig,
@@ -98,7 +98,7 @@ import {
98
98
  tagUntaggedOutbound,
99
99
  uninstallNpmExtension,
100
100
  writeSystemsConfig
101
- } from "./chunk-F44AEQAW.js";
101
+ } from "./chunk-52NMCDBS.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-BLOAJLGI.js";
109
- import "./chunk-MYJSKXGH.js";
109
+ import "./chunk-VSUZE2PD.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-MJIJFCAH.js";
138
+ } from "./chunk-JLX3GC7T.js";
139
139
  import {
140
140
  addMessage,
141
141
  createChannel,
@@ -175,7 +175,7 @@ import {
175
175
  import {
176
176
  isSandboxEnabled,
177
177
  wrapForSandbox
178
- } from "./chunk-763WUVJQ.js";
178
+ } from "./chunk-WR7CSHQ4.js";
179
179
  import {
180
180
  getActiveMinds,
181
181
  onMindEvent,
@@ -206,7 +206,7 @@ import {
206
206
  summarizeTurn,
207
207
  takeErrored,
208
208
  trackToolUse
209
- } from "./chunk-GCS64EAD.js";
209
+ } from "./chunk-TKOWXAHG.js";
210
210
  import {
211
211
  exec,
212
212
  gitExec,
@@ -221,13 +221,17 @@ import {
221
221
  wrapForIsolation
222
222
  } from "./chunk-TFBQESH7.js";
223
223
  import {
224
+ addCustomModel,
225
+ buildCustomModel,
224
226
  getAiConfig,
225
227
  getAvailableModels,
226
228
  getConfiguredProviders,
229
+ getCustomModels,
227
230
  getEnabledModels,
228
231
  getUtilityModel,
229
232
  qualifyModelId,
230
233
  removeAiConfig,
234
+ removeCustomModel,
231
235
  removeProviderConfig,
232
236
  resolveApiKey,
233
237
  resolveTemplate,
@@ -236,12 +240,12 @@ import {
236
240
  setProviderRefreshHook,
237
241
  setUtilityModel,
238
242
  unqualifyModelId
239
- } from "./chunk-IJCZAYGT.js";
243
+ } from "./chunk-4ZSUUBG5.js";
240
244
  import {
241
245
  isSetupComplete,
242
246
  readGlobalConfig,
243
247
  writeGlobalConfig
244
- } from "./chunk-MA7MYEOK.js";
248
+ } from "./chunk-KZAL7HEQ.js";
245
249
  import {
246
250
  approveUser,
247
251
  changePassword,
@@ -1100,6 +1104,7 @@ var app = new Hono().post("/restart", requireAdmin, (c) => {
1100
1104
  }).get("/ai/models", requireAdmin, async (c) => {
1101
1105
  const models = await getAvailableModels();
1102
1106
  const enabled = new Set(getEnabledModels());
1107
+ const customIds = new Set(getCustomModels().map((m) => m.id));
1103
1108
  return c.json(
1104
1109
  models.map((m) => ({
1105
1110
  id: m.id,
@@ -1107,7 +1112,8 @@ var app = new Hono().post("/restart", requireAdmin, (c) => {
1107
1112
  provider: m.provider,
1108
1113
  contextWindow: m.contextWindow,
1109
1114
  maxTokens: m.maxTokens,
1110
- enabled: enabled.has(m.id)
1115
+ enabled: enabled.has(m.id),
1116
+ custom: customIds.has(m.id)
1111
1117
  }))
1112
1118
  );
1113
1119
  }).put(
@@ -1119,7 +1125,38 @@ var app = new Hono().post("/restart", requireAdmin, (c) => {
1119
1125
  setEnabledModels(models);
1120
1126
  return c.json({ ok: true });
1121
1127
  }
1122
- ).get("/ai/defaults", requireAdmin, (c) => {
1128
+ ).post(
1129
+ "/ai/models/custom",
1130
+ requireAdmin,
1131
+ zValidator(
1132
+ "json",
1133
+ z.object({ provider: z.string().min(1), id: z.string().min(1), name: z.string().optional() })
1134
+ ),
1135
+ (c) => {
1136
+ const { provider, id, name } = c.req.valid("json");
1137
+ if (!buildCustomModel(provider, id)) {
1138
+ return c.json(
1139
+ { error: `No built-in model for provider "${provider}" to clone metadata from` },
1140
+ 400
1141
+ );
1142
+ }
1143
+ if (getCustomModels().some((m) => m.id === id && m.provider !== provider)) {
1144
+ return c.json(
1145
+ { error: `A custom model "${id}" is already registered under another provider` },
1146
+ 400
1147
+ );
1148
+ }
1149
+ addCustomModel(provider, id, name);
1150
+ setEnabledModels([.../* @__PURE__ */ new Set([...getEnabledModels(), id])]);
1151
+ return c.json({ ok: true });
1152
+ }
1153
+ ).delete("/ai/models/custom", requireAdmin, (c) => {
1154
+ const provider = c.req.query("provider");
1155
+ const id = c.req.query("id");
1156
+ if (!provider || !id) return c.json({ error: "provider and id are required" }, 400);
1157
+ removeCustomModel(provider, id);
1158
+ return c.json({ ok: true });
1159
+ }).get("/ai/defaults", requireAdmin, (c) => {
1123
1160
  const config2 = readGlobalConfig();
1124
1161
  return c.json({
1125
1162
  spiritModel: config2.spiritModel ?? null,
@@ -1978,8 +2015,8 @@ async function fanOutToBridgedMinds(opts) {
1978
2015
  const participants = await getParticipants(opts.conversationId);
1979
2016
  const mindParticipants = participants.filter((p) => p.userType === "mind");
1980
2017
  const participantNames = participants.map((p) => p.username);
1981
- const { getMindManager: getMindManager2 } = await import("./mind-manager-74XQZEGX.js");
1982
- const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-OHM3TO62.js");
2018
+ const { getMindManager: getMindManager2 } = await import("./mind-manager-OYOIBGK6.js");
2019
+ const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-FJLASHHW.js");
1983
2020
  const manager = getMindManager2();
1984
2021
  const sm = getSleepManagerIfReady2();
1985
2022
  const targetMinds = mindParticipants.filter((ap) => {
@@ -2191,7 +2228,7 @@ async function notifyMind(mindName, message) {
2191
2228
  const entry = await findMind(mindName);
2192
2229
  if (!entry) return;
2193
2230
  try {
2194
- const { sendSystemMessage } = await import("./system-chat-HZUKBIKJ.js");
2231
+ const { sendSystemMessage } = await import("./system-chat-P6KVGW4T.js");
2195
2232
  await sendSystemMessage(mindName, message);
2196
2233
  } catch (err) {
2197
2234
  logger_default.warn(`[file-sharing] notify mind ${mindName} failed`, logger_default.errorData(err));
@@ -3505,7 +3542,7 @@ async function getMindStatus(name, port, registryRunning) {
3505
3542
  const manager = getMindManager();
3506
3543
  let status = "stopped";
3507
3544
  try {
3508
- const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-OHM3TO62.js");
3545
+ const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-FJLASHHW.js");
3509
3546
  if (getSleepManagerIfReady2()?.isSleeping(name)) {
3510
3547
  status = "sleeping";
3511
3548
  }
@@ -4000,7 +4037,7 @@ var app13 = new Hono15().post("/", requireAdminOrSystem, zValidator5("json", cre
4000
4037
  applyInitFiles(dest);
4001
4038
  const { publicKeyPem } = generateIdentity(dest);
4002
4039
  {
4003
- const { readGlobalConfig: readGlobal } = await import("./setup-FPFWDMXD.js");
4040
+ const { readGlobalConfig: readGlobal } = await import("./setup-IYOUPCIK.js");
4004
4041
  const mindDefaults = readGlobal().mindDefaults;
4005
4042
  const config2 = readVoluteConfig(dest);
4006
4043
  if (!config2) throw new Error("Failed to read volute.json after identity generation");
@@ -4091,7 +4128,7 @@ The human who planted you described you as: "${body.description}"
4091
4128
  }
4092
4129
  let skillSet = body.skills ?? (body.stage === "seed" ? SEED_SKILLS : getStandardSkillsWithExtensions());
4093
4130
  if (body.stage === "seed" && !body.skills) {
4094
- const { isImagegenEnabled } = await import("./setup-FPFWDMXD.js");
4131
+ const { isImagegenEnabled } = await import("./setup-IYOUPCIK.js");
4095
4132
  if (isImagegenEnabled()) {
4096
4133
  skillSet = [...skillSet, "imagegen"];
4097
4134
  }
@@ -4109,7 +4146,7 @@ The human who planted you described you as: "${body.description}"
4109
4146
  try {
4110
4147
  const spiritEntry = await findMind("volute");
4111
4148
  if (spiritEntry) {
4112
- const { spiritDir } = await import("./spirit-ONLRFATY.js");
4149
+ const { spiritDir } = await import("./spirit-NJFAY5CZ.js");
4113
4150
  const sDir = spiritEntry.dir ?? spiritDir();
4114
4151
  const spiritConfig = readVoluteConfig(sDir) ?? {};
4115
4152
  const schedules = spiritConfig.schedules ?? [];
@@ -4124,7 +4161,7 @@ The human who planted you described you as: "${body.description}"
4124
4161
  });
4125
4162
  spiritConfig.schedules = schedules;
4126
4163
  writeVoluteConfig(sDir, spiritConfig);
4127
- const { getScheduler: getScheduler2 } = await import("./scheduler-MEBQF5MW.js");
4164
+ const { getScheduler: getScheduler2 } = await import("./scheduler-KXUY2I7W.js");
4128
4165
  getScheduler2().loadSchedules("volute", sDir);
4129
4166
  }
4130
4167
  }
@@ -4389,7 +4426,7 @@ ${user.trimEnd()}
4389
4426
  const manager = getMindManager();
4390
4427
  try {
4391
4428
  if (context?.type === "reload") {
4392
- const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-OHM3TO62.js");
4429
+ const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-FJLASHHW.js");
4393
4430
  const sleepState = getSleepManagerIfReady2()?.getState(name);
4394
4431
  if (sleepState?.sleeping) {
4395
4432
  logger_default.info(`skipping reload for ${name} during sleep \u2014 will apply on next wake`);
@@ -4484,7 +4521,7 @@ ${user.trimEnd()}
4484
4521
  const name = c.req.param("name");
4485
4522
  const entry = await findMind(name);
4486
4523
  if (!entry) return c.json({ error: "Mind not found" }, 404);
4487
- const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-OHM3TO62.js");
4524
+ const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-FJLASHHW.js");
4488
4525
  const sm = getSleepManagerIfReady2();
4489
4526
  if (!sm) return c.json({ error: "Sleep manager not initialized" }, 503);
4490
4527
  return c.json(sm.getState(name));
@@ -4492,7 +4529,7 @@ ${user.trimEnd()}
4492
4529
  const name = c.req.param("name");
4493
4530
  const entry = await findMind(name);
4494
4531
  if (!entry) return c.json({ error: "Mind not found" }, 404);
4495
- const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-OHM3TO62.js");
4532
+ const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-FJLASHHW.js");
4496
4533
  const sm = getSleepManagerIfReady2();
4497
4534
  if (!sm) return c.json({ error: "Sleep manager not initialized" }, 503);
4498
4535
  if (sm.isSleeping(name)) return c.json({ error: "Mind is already sleeping" }, 409);
@@ -4512,7 +4549,7 @@ ${user.trimEnd()}
4512
4549
  const name = c.req.param("name");
4513
4550
  const entry = await findMind(name);
4514
4551
  if (!entry) return c.json({ error: "Mind not found" }, 404);
4515
- const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-OHM3TO62.js");
4552
+ const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-FJLASHHW.js");
4516
4553
  const sm = getSleepManagerIfReady2();
4517
4554
  if (!sm) return c.json({ error: "Sleep manager not initialized" }, 503);
4518
4555
  const sleepState = sm.getState(name);
@@ -4527,7 +4564,7 @@ ${user.trimEnd()}
4527
4564
  const name = c.req.param("name");
4528
4565
  const entry = await findMind(name);
4529
4566
  if (!entry) return c.json({ error: "Mind not found" }, 404);
4530
- const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-OHM3TO62.js");
4567
+ const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-FJLASHHW.js");
4531
4568
  const sm = getSleepManagerIfReady2();
4532
4569
  if (!sm) return c.json({ error: "Sleep manager not initialized" }, 503);
4533
4570
  const flushed = await sm.flushQueuedMessages(name);
@@ -4592,7 +4629,7 @@ ${user.trimEnd()}
4592
4629
  const config2 = readVoluteConfig(dir);
4593
4630
  const displayNameSet = !!config2?.profile?.displayName;
4594
4631
  const avatarSet = !!config2?.profile?.avatar;
4595
- const { isImagegenEnabled } = await import("./setup-FPFWDMXD.js");
4632
+ const { isImagegenEnabled } = await import("./setup-IYOUPCIK.js");
4596
4633
  const imagegenEnabled = isImagegenEnabled();
4597
4634
  const done = [];
4598
4635
  const remaining = [];
@@ -4630,7 +4667,7 @@ ${user.trimEnd()}
4630
4667
  try {
4631
4668
  const spiritEntry = await findMind("volute");
4632
4669
  if (spiritEntry) {
4633
- const { spiritDir } = await import("./spirit-ONLRFATY.js");
4670
+ const { spiritDir } = await import("./spirit-NJFAY5CZ.js");
4634
4671
  const sDir = spiritEntry.dir ?? spiritDir();
4635
4672
  const spiritConfig = readVoluteConfig(sDir);
4636
4673
  if (spiritConfig?.schedules) {
@@ -4638,7 +4675,7 @@ ${user.trimEnd()}
4638
4675
  spiritConfig.schedules = spiritConfig.schedules.filter((s) => s.id !== nurtureId);
4639
4676
  if (spiritConfig.schedules.length === 0) spiritConfig.schedules = void 0;
4640
4677
  writeVoluteConfig(sDir, spiritConfig);
4641
- const { getScheduler: getScheduler2 } = await import("./scheduler-MEBQF5MW.js");
4678
+ const { getScheduler: getScheduler2 } = await import("./scheduler-KXUY2I7W.js");
4642
4679
  getScheduler2().loadSchedules("volute", sDir);
4643
4680
  }
4644
4681
  }
@@ -5073,7 +5110,7 @@ ${user.trimEnd()}
5073
5110
  }
5074
5111
  writeVoluteConfig(dir, existing);
5075
5112
  if (body.unescapeNewlines !== void 0) {
5076
- const { clearEchoTextCache } = await import("./echo-text-GEDEEY7M.js");
5113
+ const { clearEchoTextCache } = await import("./echo-text-YP3JVLNA.js");
5077
5114
  clearEchoTextCache(name);
5078
5115
  }
5079
5116
  const needsConfigJson = body.model !== void 0 || body.thinkingLevel !== void 0 || body.maxThinkingTokens !== void 0 || body.compaction !== void 0;
@@ -5150,7 +5187,7 @@ ${user.trimEnd()}
5150
5187
  }
5151
5188
  if (entry.mindType === "spirit" && body.model !== void 0) {
5152
5189
  try {
5153
- const { readGlobalConfig: readGlobalConfig2, writeGlobalConfig: writeGlobalConfig2 } = await import("./setup-FPFWDMXD.js");
5190
+ const { readGlobalConfig: readGlobalConfig2, writeGlobalConfig: writeGlobalConfig2 } = await import("./setup-IYOUPCIK.js");
5154
5191
  const globalConfig = readGlobalConfig2();
5155
5192
  globalConfig.spiritModel = body.model;
5156
5193
  writeGlobalConfig2(globalConfig);
@@ -5178,7 +5215,7 @@ ${user.trimEnd()}
5178
5215
  if (!body.systemPrompt || !body.message) {
5179
5216
  return c.json({ error: "systemPrompt and message required" }, 400);
5180
5217
  }
5181
- const { aiComplete: aiCompleteFn, isAiConfigured } = await import("./ai-service-XCLE3MQP.js");
5218
+ const { aiComplete: aiCompleteFn, isAiConfigured } = await import("./ai-service-3GBOJGUA.js");
5182
5219
  if (!isAiConfigured()) {
5183
5220
  return c.json({ error: "AI service not configured" }, 503);
5184
5221
  }
@@ -5922,7 +5959,7 @@ var app15 = new Hono17().get("/:name/clock/status", requireSelf(), async (c) =>
5922
5959
  const body = await c.req.text();
5923
5960
  const message = `[webhook: ${event}] ${body}`;
5924
5961
  try {
5925
- const { sendSystemMessage } = await import("./system-chat-HZUKBIKJ.js");
5962
+ const { sendSystemMessage } = await import("./system-chat-P6KVGW4T.js");
5926
5963
  await sendSystemMessage(name, message);
5927
5964
  return c.json({ ok: true });
5928
5965
  } catch (err) {
@@ -6233,7 +6270,7 @@ setup.post("/models", async (c) => {
6233
6270
  return c.json({ error: "Spirit model is required" }, 400);
6234
6271
  }
6235
6272
  try {
6236
- const { setEnabledModels: setEnabledModels3, setUtilityModel: setUtilityModel2 } = await import("./ai-service-XCLE3MQP.js");
6273
+ const { setEnabledModels: setEnabledModels3, setUtilityModel: setUtilityModel2 } = await import("./ai-service-3GBOJGUA.js");
6237
6274
  setEnabledModels3(body.models);
6238
6275
  const config2 = readGlobalConfig();
6239
6276
  config2.spiritModel = body.spiritModel.trim();
@@ -6251,8 +6288,8 @@ setup.post("/complete", async (c) => {
6251
6288
  return c.json({ error: "Setup already complete" }, 400);
6252
6289
  }
6253
6290
  try {
6254
- const { ensureSpiritProject, syncSpiritTemplate } = await import("./spirit-ONLRFATY.js");
6255
- const { startSpiritFull } = await import("./mind-service-XGXSMQP6.js");
6291
+ const { ensureSpiritProject, syncSpiritTemplate } = await import("./spirit-NJFAY5CZ.js");
6292
+ const { startSpiritFull } = await import("./mind-service-PR4PR4XI.js");
6256
6293
  await ensureSpiritProject();
6257
6294
  await syncSpiritTemplate();
6258
6295
  const warnings = [];
@@ -6310,7 +6347,7 @@ setup.post("/complete", async (c) => {
6310
6347
  logger_default.info("setup complete state", { spiritConversationId, spiritStarted });
6311
6348
  if (spiritConversationId && spiritStarted) {
6312
6349
  try {
6313
- const { deliverMessage: deliverMessage2 } = await import("./message-delivery-HPMELC4Q.js");
6350
+ const { deliverMessage: deliverMessage2 } = await import("./message-delivery-FPIL26WV.js");
6314
6351
  const { listUsersByType: listUsers2 } = await import("./auth-EAASQPTN.js");
6315
6352
  const admins = await listUsers2("brain");
6316
6353
  const admin2 = admins.find((u) => u.role === "admin");
@@ -7876,7 +7913,8 @@ async function startDaemon(opts) {
7876
7913
  const DAEMON_JSON_PATH = resolve17(systemDir, "daemon.json");
7877
7914
  mkdirSync10(home, { recursive: true });
7878
7915
  ensureSystemDir();
7879
- const { migrateSetupCompleted } = await import("./setup-FPFWDMXD.js");
7916
+ const { migrateConfigSecrets, migrateSetupCompleted } = await import("./setup-IYOUPCIK.js");
7917
+ migrateConfigSecrets();
7880
7918
  migrateSetupCompleted();
7881
7919
  await (await import("./db-ZJJJYJBU.js")).getDb();
7882
7920
  try {
@@ -7887,7 +7925,7 @@ async function startDaemon(opts) {
7887
7925
  } catch (err) {
7888
7926
  logger_default.warn("failed to migrate system user role", logger_default.errorData(err));
7889
7927
  }
7890
- const { initSandbox } = await import("./sandbox-ND53WZVU.js");
7928
+ const { initSandbox } = await import("./sandbox-E7RWZDVG.js");
7891
7929
  await initSandbox();
7892
7930
  try {
7893
7931
  await syncBuiltinSkills();
@@ -7923,7 +7961,7 @@ async function startDaemon(opts) {
7923
7961
  );
7924
7962
  }
7925
7963
  const token = process.env.VOLUTE_DAEMON_TOKEN || randomBytes(32).toString("hex");
7926
- const { readGlobalConfig: readGlobalConfig2 } = await import("./setup-FPFWDMXD.js");
7964
+ const { readGlobalConfig: readGlobalConfig2 } = await import("./setup-IYOUPCIK.js");
7927
7965
  const globalCfg = readGlobalConfig2();
7928
7966
  let tls;
7929
7967
  if (opts.tailscale || globalCfg.tailscale) {
@@ -8006,10 +8044,10 @@ async function startDaemon(opts) {
8006
8044
  await Promise.all(workers);
8007
8045
  }
8008
8046
  try {
8009
- const { isSetupComplete: isSetupComplete2 } = await import("./setup-FPFWDMXD.js");
8047
+ const { isSetupComplete: isSetupComplete2 } = await import("./setup-IYOUPCIK.js");
8010
8048
  if (isSetupComplete2()) {
8011
- const { ensureSpiritProject, syncSpiritTemplate } = await import("./spirit-ONLRFATY.js");
8012
- const { startSpiritFull } = await import("./mind-service-XGXSMQP6.js");
8049
+ const { ensureSpiritProject, syncSpiritTemplate } = await import("./spirit-NJFAY5CZ.js");
8050
+ const { startSpiritFull } = await import("./mind-service-PR4PR4XI.js");
8013
8051
  await ensureSpiritProject();
8014
8052
  await syncSpiritTemplate();
8015
8053
  const spiritEntry = await findMind("volute");
@@ -8026,7 +8064,7 @@ async function startDaemon(opts) {
8026
8064
  bridgeManager.startBridges(daemonPort).catch((err) => {
8027
8065
  logger_default.warn("failed to start bridges", logger_default.errorData(err));
8028
8066
  });
8029
- import("./cloud-sync-2XVXEOSU.js").then(
8067
+ import("./cloud-sync-3OPHFOYQ.js").then(
8030
8068
  ({ consumeQueuedMessages }) => consumeQueuedMessages().catch((err) => {
8031
8069
  logger_default.warn("failed to consume queued cloud messages", logger_default.errorData(err));
8032
8070
  })
@@ -8034,7 +8072,7 @@ async function startDaemon(opts) {
8034
8072
  logger_default.warn("failed to load cloud-sync module", logger_default.errorData(err));
8035
8073
  });
8036
8074
  try {
8037
- const { backfillTemplateHashes, notifyVersionUpdate } = await import("./version-notify-UFFDUPCX.js");
8075
+ const { backfillTemplateHashes, notifyVersionUpdate } = await import("./version-notify-TCKAX7ZA.js");
8038
8076
  backfillTemplateHashes();
8039
8077
  notifyVersionUpdate().catch((err) => {
8040
8078
  logger_default.warn("failed to send version update notifications", logger_default.errorData(err));
@@ -4,21 +4,21 @@ import {
4
4
  getDeliveryManager,
5
5
  initDeliveryManager,
6
6
  tryGetDeliveryManager
7
- } from "./chunk-F44AEQAW.js";
7
+ } from "./chunk-52NMCDBS.js";
8
8
  import "./chunk-BLOAJLGI.js";
9
- import "./chunk-MYJSKXGH.js";
9
+ import "./chunk-VSUZE2PD.js";
10
10
  import "./chunk-QLWG3C2Z.js";
11
- import "./chunk-MJIJFCAH.js";
11
+ import "./chunk-JLX3GC7T.js";
12
12
  import "./chunk-YLTIEEVL.js";
13
13
  import "./chunk-CU6OFXMM.js";
14
- import "./chunk-763WUVJQ.js";
14
+ import "./chunk-WR7CSHQ4.js";
15
15
  import "./chunk-VBKRZCR7.js";
16
16
  import "./chunk-62ICA2FF.js";
17
- import "./chunk-GCS64EAD.js";
17
+ import "./chunk-TKOWXAHG.js";
18
18
  import "./chunk-GN52E2DP.js";
19
19
  import "./chunk-TFBQESH7.js";
20
- import "./chunk-IJCZAYGT.js";
21
- import "./chunk-MA7MYEOK.js";
20
+ import "./chunk-4ZSUUBG5.js";
21
+ import "./chunk-KZAL7HEQ.js";
22
22
  import "./chunk-5QG36RV7.js";
23
23
  import "./chunk-K547QOCM.js";
24
24
  import "./chunk-T2TP6ZC6.js";
@@ -2,23 +2,23 @@
2
2
  import {
3
3
  clearEchoTextCache,
4
4
  echoTextToChannel
5
- } from "./chunk-ULNQ6OC4.js";
5
+ } from "./chunk-2YRTSK5K.js";
6
6
  import "./chunk-QPTQKGGF.js";
7
- import "./chunk-F44AEQAW.js";
7
+ import "./chunk-52NMCDBS.js";
8
8
  import "./chunk-BLOAJLGI.js";
9
- import "./chunk-MYJSKXGH.js";
9
+ import "./chunk-VSUZE2PD.js";
10
10
  import "./chunk-QLWG3C2Z.js";
11
- import "./chunk-MJIJFCAH.js";
11
+ import "./chunk-JLX3GC7T.js";
12
12
  import "./chunk-YLTIEEVL.js";
13
13
  import "./chunk-CU6OFXMM.js";
14
- import "./chunk-763WUVJQ.js";
14
+ import "./chunk-WR7CSHQ4.js";
15
15
  import "./chunk-VBKRZCR7.js";
16
16
  import "./chunk-62ICA2FF.js";
17
- import "./chunk-GCS64EAD.js";
17
+ import "./chunk-TKOWXAHG.js";
18
18
  import "./chunk-GN52E2DP.js";
19
19
  import "./chunk-TFBQESH7.js";
20
- import "./chunk-IJCZAYGT.js";
21
- import "./chunk-MA7MYEOK.js";
20
+ import "./chunk-4ZSUUBG5.js";
21
+ import "./chunk-KZAL7HEQ.js";
22
22
  import "./chunk-5QG36RV7.js";
23
23
  import "./chunk-K547QOCM.js";
24
24
  import "./chunk-T2TP6ZC6.js";
@@ -13,21 +13,21 @@ import {
13
13
  parseCommandArgs,
14
14
  setExtensionEnabled,
15
15
  uninstallNpmExtension
16
- } from "./chunk-F44AEQAW.js";
16
+ } from "./chunk-52NMCDBS.js";
17
17
  import "./chunk-BLOAJLGI.js";
18
- import "./chunk-MYJSKXGH.js";
18
+ import "./chunk-VSUZE2PD.js";
19
19
  import "./chunk-QLWG3C2Z.js";
20
- import "./chunk-MJIJFCAH.js";
20
+ import "./chunk-JLX3GC7T.js";
21
21
  import "./chunk-YLTIEEVL.js";
22
22
  import "./chunk-CU6OFXMM.js";
23
- import "./chunk-763WUVJQ.js";
23
+ import "./chunk-WR7CSHQ4.js";
24
24
  import "./chunk-VBKRZCR7.js";
25
25
  import "./chunk-62ICA2FF.js";
26
- import "./chunk-GCS64EAD.js";
26
+ import "./chunk-TKOWXAHG.js";
27
27
  import "./chunk-GN52E2DP.js";
28
28
  import "./chunk-TFBQESH7.js";
29
- import "./chunk-IJCZAYGT.js";
30
- import "./chunk-MA7MYEOK.js";
29
+ import "./chunk-4ZSUUBG5.js";
30
+ import "./chunk-KZAL7HEQ.js";
31
31
  import "./chunk-5QG36RV7.js";
32
32
  import "./chunk-K547QOCM.js";
33
33
  import "./chunk-T2TP6ZC6.js";
@@ -8,21 +8,21 @@ import {
8
8
  tagRecentInbound,
9
9
  tagUntaggedInbound,
10
10
  tagUntaggedOutbound
11
- } from "./chunk-F44AEQAW.js";
11
+ } from "./chunk-52NMCDBS.js";
12
12
  import "./chunk-BLOAJLGI.js";
13
- import "./chunk-MYJSKXGH.js";
13
+ import "./chunk-VSUZE2PD.js";
14
14
  import "./chunk-QLWG3C2Z.js";
15
- import "./chunk-MJIJFCAH.js";
15
+ import "./chunk-JLX3GC7T.js";
16
16
  import "./chunk-YLTIEEVL.js";
17
17
  import "./chunk-CU6OFXMM.js";
18
- import "./chunk-763WUVJQ.js";
18
+ import "./chunk-WR7CSHQ4.js";
19
19
  import "./chunk-VBKRZCR7.js";
20
20
  import "./chunk-62ICA2FF.js";
21
- import "./chunk-GCS64EAD.js";
21
+ import "./chunk-TKOWXAHG.js";
22
22
  import "./chunk-GN52E2DP.js";
23
23
  import "./chunk-TFBQESH7.js";
24
- import "./chunk-IJCZAYGT.js";
25
- import "./chunk-MA7MYEOK.js";
24
+ import "./chunk-4ZSUUBG5.js";
25
+ import "./chunk-KZAL7HEQ.js";
26
26
  import "./chunk-5QG36RV7.js";
27
27
  import "./chunk-K547QOCM.js";
28
28
  import "./chunk-T2TP6ZC6.js";
@@ -18,7 +18,7 @@ var cmd = subcommands({
18
18
  commands: {
19
19
  create: {
20
20
  description: "Create a new mind",
21
- run: (args) => import("./create-OTM46ZUM.js").then((m) => m.run(args))
21
+ run: (args) => import("./create-YNBZWD34.js").then((m) => m.run(args))
22
22
  },
23
23
  start: {
24
24
  description: "Start a mind",
@@ -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-L4XFZ3VX.js").then((m) => m.run(args))
85
+ run: (args) => import("./seed-YQAOIXIY.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-2KJOQZCL.js").then((m) => m.run(args))
89
+ run: (args) => import("./sprout-B27C2WGE.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."
@@ -4,21 +4,21 @@ import {
4
4
  buildMindBaseEnv,
5
5
  getMindManager,
6
6
  initMindManager
7
- } from "./chunk-F44AEQAW.js";
7
+ } from "./chunk-52NMCDBS.js";
8
8
  import "./chunk-BLOAJLGI.js";
9
- import "./chunk-MYJSKXGH.js";
9
+ import "./chunk-VSUZE2PD.js";
10
10
  import "./chunk-QLWG3C2Z.js";
11
- import "./chunk-MJIJFCAH.js";
11
+ import "./chunk-JLX3GC7T.js";
12
12
  import "./chunk-YLTIEEVL.js";
13
13
  import "./chunk-CU6OFXMM.js";
14
- import "./chunk-763WUVJQ.js";
14
+ import "./chunk-WR7CSHQ4.js";
15
15
  import "./chunk-VBKRZCR7.js";
16
16
  import "./chunk-62ICA2FF.js";
17
- import "./chunk-GCS64EAD.js";
17
+ import "./chunk-TKOWXAHG.js";
18
18
  import "./chunk-GN52E2DP.js";
19
19
  import "./chunk-TFBQESH7.js";
20
- import "./chunk-IJCZAYGT.js";
21
- import "./chunk-MA7MYEOK.js";
20
+ import "./chunk-4ZSUUBG5.js";
21
+ import "./chunk-KZAL7HEQ.js";
22
22
  import "./chunk-5QG36RV7.js";
23
23
  import "./chunk-K547QOCM.js";
24
24
  import "./chunk-T2TP6ZC6.js";
@@ -6,21 +6,21 @@ import {
6
6
  stopMindFull,
7
7
  stopSpiritFull,
8
8
  wakeMind
9
- } from "./chunk-F44AEQAW.js";
9
+ } from "./chunk-52NMCDBS.js";
10
10
  import "./chunk-BLOAJLGI.js";
11
- import "./chunk-MYJSKXGH.js";
11
+ import "./chunk-VSUZE2PD.js";
12
12
  import "./chunk-QLWG3C2Z.js";
13
- import "./chunk-MJIJFCAH.js";
13
+ import "./chunk-JLX3GC7T.js";
14
14
  import "./chunk-YLTIEEVL.js";
15
15
  import "./chunk-CU6OFXMM.js";
16
- import "./chunk-763WUVJQ.js";
16
+ import "./chunk-WR7CSHQ4.js";
17
17
  import "./chunk-VBKRZCR7.js";
18
18
  import "./chunk-62ICA2FF.js";
19
- import "./chunk-GCS64EAD.js";
19
+ import "./chunk-TKOWXAHG.js";
20
20
  import "./chunk-GN52E2DP.js";
21
21
  import "./chunk-TFBQESH7.js";
22
- import "./chunk-IJCZAYGT.js";
23
- import "./chunk-MA7MYEOK.js";
22
+ import "./chunk-4ZSUUBG5.js";
23
+ import "./chunk-KZAL7HEQ.js";
24
24
  import "./chunk-5QG36RV7.js";
25
25
  import "./chunk-K547QOCM.js";
26
26
  import "./chunk-T2TP6ZC6.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.41.1",
7
+ version: "0.42.0",
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",
@@ -7,8 +7,8 @@ import {
7
7
  isSandboxOptional,
8
8
  shellEscape,
9
9
  wrapForSandbox
10
- } from "./chunk-763WUVJQ.js";
11
- import "./chunk-MA7MYEOK.js";
10
+ } from "./chunk-WR7CSHQ4.js";
11
+ import "./chunk-KZAL7HEQ.js";
12
12
  import "./chunk-T2TP6ZC6.js";
13
13
  import "./chunk-IUZ3EV2D.js";
14
14
  import "./chunk-MHFAWJCC.js";
@@ -3,21 +3,21 @@ import {
3
3
  Scheduler,
4
4
  getScheduler,
5
5
  initScheduler
6
- } from "./chunk-F44AEQAW.js";
6
+ } from "./chunk-52NMCDBS.js";
7
7
  import "./chunk-BLOAJLGI.js";
8
- import "./chunk-MYJSKXGH.js";
8
+ import "./chunk-VSUZE2PD.js";
9
9
  import "./chunk-QLWG3C2Z.js";
10
- import "./chunk-MJIJFCAH.js";
10
+ import "./chunk-JLX3GC7T.js";
11
11
  import "./chunk-YLTIEEVL.js";
12
12
  import "./chunk-CU6OFXMM.js";
13
- import "./chunk-763WUVJQ.js";
13
+ import "./chunk-WR7CSHQ4.js";
14
14
  import "./chunk-VBKRZCR7.js";
15
15
  import "./chunk-62ICA2FF.js";
16
- import "./chunk-GCS64EAD.js";
16
+ import "./chunk-TKOWXAHG.js";
17
17
  import "./chunk-GN52E2DP.js";
18
18
  import "./chunk-TFBQESH7.js";
19
- import "./chunk-IJCZAYGT.js";
20
- import "./chunk-MA7MYEOK.js";
19
+ import "./chunk-4ZSUUBG5.js";
20
+ import "./chunk-KZAL7HEQ.js";
21
21
  import "./chunk-5QG36RV7.js";
22
22
  import "./chunk-K547QOCM.js";
23
23
  import "./chunk-T2TP6ZC6.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-ZYCZC46W.js").then((m) => m.run(args));
7
+ await import("./seed-create-Z7NDRRGP.js").then((m) => m.run(args));
8
8
  }
9
9
  export {
10
10
  run