volute 0.26.0 → 0.28.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 (141) hide show
  1. package/README.md +18 -18
  2. package/dist/accept-666DIZX2.js +41 -0
  3. package/dist/{activity-events-ZMBAKLUF.js → activity-events-BBIEA2F4.js} +2 -3
  4. package/dist/api.d.ts +510 -299
  5. package/dist/{archive-4ZQYK5MN.js → archive-UA4BDFXQ.js} +2 -2
  6. package/dist/bridge-FQHZL3MC.js +206 -0
  7. package/dist/chat-M4SX42JD.js +68 -0
  8. package/dist/{chunk-PHU4DEAJ.js → chunk-2WPW7OT6.js} +3 -3
  9. package/dist/{chunk-5Y3PBKW6.js → chunk-2YP2TVDT.js} +138 -56
  10. package/dist/{chunk-3CFRE2VC.js → chunk-AAPXKR5V.js} +435 -1090
  11. package/dist/{chunk-YJA7P64S.js → chunk-AW7PFDVN.js} +5 -5
  12. package/dist/{chunk-OZFKBXD6.js → chunk-EHYDTZTF.js} +6 -6
  13. package/dist/{chunk-WBHMQ5OZ.js → chunk-H7OZRFJB.js} +192 -12
  14. package/dist/{chunk-ON3FF5JA.js → chunk-HDN7MNGD.js} +3 -3
  15. package/dist/chunk-IAYBDWVG.js +477 -0
  16. package/dist/{chunk-TZKJLDQN.js → chunk-IKRVFPWU.js} +14 -9
  17. package/dist/{chunk-UTL75LP6.js → chunk-J4IBNXGJ.js} +20 -22
  18. package/dist/{chunk-WGOGUMPO.js → chunk-JGFVMROS.js} +13 -6
  19. package/dist/{chunk-NWI2425I.js → chunk-K5NAC55T.js} +1 -1
  20. package/dist/chunk-KTLFDYPT.js +61 -0
  21. package/dist/{chunk-V63B7DX3.js → chunk-LAC664WU.js} +7 -4
  22. package/dist/chunk-MD4C26II.js +128 -0
  23. package/dist/{chunk-USNBKHYG.js → chunk-NI5FFCCS.js} +12 -7
  24. package/dist/{chunk-3TV4GLFO.js → chunk-P72MVS4R.js} +4 -43
  25. package/dist/{chunk-2VO7453N.js → chunk-POSXWWTA.js} +30 -54
  26. package/dist/{chunk-XOXLRRR2.js → chunk-RKQEHRBB.js} +4 -3
  27. package/dist/{chunk-LX22GRG7.js → chunk-SGVNFZHW.js} +11 -8
  28. package/dist/chunk-T6HKBWXZ.js +23 -0
  29. package/dist/{chunk-J2CO4WEV.js → chunk-VIVMW2H2.js} +4 -4
  30. package/dist/{chunk-KTJGZ7M7.js → chunk-XBLSAVJF.js} +1 -1
  31. package/dist/cli.js +32 -49
  32. package/dist/{cloud-sync-NI2K3C7G.js → cloud-sync-HDL6PHZI.js} +14 -14
  33. package/dist/connectors/discord-bridge.js +158 -0
  34. package/dist/connectors/slack-bridge.js +119 -0
  35. package/dist/connectors/telegram-bridge.js +133 -0
  36. package/dist/conversations-M2K4253F.js +55 -0
  37. package/dist/create-D7J73A6H.js +45 -0
  38. package/dist/{create-4YBRTTJS.js → create-QWV73WXD.js} +1 -1
  39. package/dist/{daemon-client-Z7FAJ6JW.js → daemon-client-I42FK2BF.js} +2 -2
  40. package/dist/{daemon-restart-BJZ3O4U4.js → daemon-restart-G4B2OYAB.js} +7 -7
  41. package/dist/daemon.js +1889 -1216
  42. package/dist/db-IC4J52XQ.js +8 -0
  43. package/dist/{delete-27OYNK25.js → delete-4JYGD4VN.js} +1 -1
  44. package/dist/down-LVBXEULC.js +14 -0
  45. package/dist/{env-M336ONDP.js → env-YJMUMFIY.js} +2 -2
  46. package/dist/{export-HP4G5DQC.js → export-BOJQWBMA.js} +4 -4
  47. package/dist/files-M546TKVN.js +46 -0
  48. package/dist/{history-B64GTFTD.js → history-ALPTNB3I.js} +5 -5
  49. package/dist/{import-XIB7UV4S.js → import-SRTQXBGH.js} +4 -4
  50. package/dist/join-J4QU42DL.js +66 -0
  51. package/dist/list-R73GENNL.js +40 -0
  52. package/dist/{login-B5E7N7MY.js → login-3QZNR2DF.js} +4 -4
  53. package/dist/{login-6U7U6BNG.js → login-BKP3AFWN.js} +8 -18
  54. package/dist/logout-IQK7FNEK.js +20 -0
  55. package/dist/{logout-XSJRYS3U.js → logout-T53VKCPU.js} +4 -4
  56. package/dist/message-delivery-HV3S6HZV.js +24 -0
  57. package/dist/migrate-registry-to-db-XC7T5B7P.js +110 -0
  58. package/dist/{mind-HZ3QSDDJ.js → mind-S5V6CK5W.js} +29 -34
  59. package/dist/{mind-activity-tracker-4G6FURY2.js → mind-activity-tracker-EN6XNXPF.js} +3 -4
  60. package/dist/mind-list-UPJ75GPI.js +29 -0
  61. package/dist/mind-manager-S6ILZVX3.js +18 -0
  62. package/dist/{mind-sleep-DTV7L44D.js → mind-sleep-BTSWQNAC.js} +4 -4
  63. package/dist/mind-status-TK5AETEM.js +55 -0
  64. package/dist/{mind-wake-PFN4FN3T.js → mind-wake-SBAKIDVP.js} +4 -4
  65. package/dist/{notes-37FW2UR2.js → notes-XCER3I7M.js} +11 -21
  66. package/dist/{package-VZWLXPHV.js → package-CG4RWUGP.js} +1 -1
  67. package/dist/{pages-DIIT5HMQ.js → pages-KJDJX4TA.js} +5 -5
  68. package/dist/{publish-HQV7YREB.js → publish-ZZB33WP4.js} +9 -20
  69. package/dist/read-36UFXN3G.js +46 -0
  70. package/dist/{register-EFND67FQ.js → register-CHREOMJ3.js} +6 -25
  71. package/dist/{registry-D2BSQ2X5.js → registry-NDNOOYG4.js} +15 -9
  72. package/dist/reject-LXIZFJ4Q.js +39 -0
  73. package/dist/{restart-CCK7D6TV.js → restart-6ESL3NBO.js} +5 -5
  74. package/dist/{sandbox-EHGFF52K.js → sandbox-5BW5HPXM.js} +3 -3
  75. package/dist/{schedule-6F7ELB2M.js → schedule-QTJMFATP.js} +5 -5
  76. package/dist/{seed-E5OQGWX3.js → seed-SSUCYYDF.js} +2 -2
  77. package/dist/{send-IH6XZKPC.js → send-TAOEZ4NH.js} +87 -23
  78. package/dist/{setup-YGAAIKKZ.js → setup-JHL5ZEST.js} +2 -2
  79. package/dist/{setup-F6TWFYGQ.js → setup-RXYVGGT7.js} +9 -9
  80. package/dist/{skill-42LGFBQC.js → skill-AUAQTSP5.js} +5 -5
  81. package/dist/skills/dreaming/references/INSTALL.md +2 -2
  82. package/dist/skills/orientation/SKILL.md +3 -3
  83. package/dist/skills/shared-files/SKILL.md +44 -0
  84. package/dist/skills/shared-files/scripts/merge.ts +72 -0
  85. package/dist/skills/shared-files/scripts/pull.ts +52 -0
  86. package/dist/skills/volute-mind/SKILL.md +35 -34
  87. package/dist/sleep-manager-WMVG2VCL.js +28 -0
  88. package/dist/split-TKJ5OT3P.js +63 -0
  89. package/dist/{sprout-QL74KR2X.js → sprout-UNT7LKKE.js} +6 -7
  90. package/dist/{start-O5JQASRC.js → start-EUJSS5R4.js} +2 -2
  91. package/dist/status-NQJYR4BG.js +114 -0
  92. package/dist/{status-LV34BG6G.js → status-S7UUPNRW.js} +4 -14
  93. package/dist/{stop-2SOG5NYF.js → stop-3XAITBBF.js} +5 -5
  94. package/dist/systems-SMEFSHTA.js +60 -0
  95. package/dist/{tailscale-AJ4VL5XK.js → tailscale-NY5MUMY3.js} +1 -1
  96. package/dist/up-GM2JOH2Y.js +17 -0
  97. package/dist/{update-5VUDAI3D.js → update-PTSH22AZ.js} +9 -9
  98. package/dist/{update-check-F5Z3ALXX.js → update-check-64FWC4Y2.js} +2 -2
  99. package/dist/{upgrade-QCCO33BK.js → upgrade-HA47CS4C.js} +12 -5
  100. package/dist/variant-7TGZHOU3.js +41 -0
  101. package/dist/{version-notify-USFZBWMG.js → version-notify-JDUF4HQJ.js} +24 -29
  102. package/dist/web-assets/assets/index-BZGvToHi.css +1 -0
  103. package/dist/web-assets/assets/index-Cz4TrpzB.js +75 -0
  104. package/dist/web-assets/favicon.png +0 -0
  105. package/dist/web-assets/index.html +2 -2
  106. package/drizzle/0017_minds.sql +16 -0
  107. package/drizzle/meta/_journal.json +7 -0
  108. package/package.json +1 -1
  109. package/templates/_base/.init/.config/prompts.json +2 -2
  110. package/templates/_base/home/VOLUTE.md +5 -5
  111. package/templates/_base/src/lib/logger.ts +0 -4
  112. package/templates/_base/src/lib/startup.ts +2 -2
  113. package/dist/auth-4TV573WE.js +0 -37
  114. package/dist/channel-ZVZV42UD.js +0 -260
  115. package/dist/chunk-B2CPS4QU.js +0 -283
  116. package/dist/chunk-HFCBO2GL.js +0 -50
  117. package/dist/chunk-RWKVSSLY.js +0 -26
  118. package/dist/chunk-SIAG3QMM.js +0 -42
  119. package/dist/chunk-WSLPZF72.js +0 -173
  120. package/dist/connector-G722WXAU.js +0 -147
  121. package/dist/connectors/discord.js +0 -177
  122. package/dist/connectors/slack.js +0 -181
  123. package/dist/connectors/telegram.js +0 -187
  124. package/dist/down-7UKFMJJZ.js +0 -14
  125. package/dist/file-HUDKTRAS.js +0 -204
  126. package/dist/log-PBFNILJ4.js +0 -39
  127. package/dist/logout-UKD5LA37.js +0 -18
  128. package/dist/logs-3CART7O7.js +0 -77
  129. package/dist/merge-VK2HSKMA.js +0 -46
  130. package/dist/message-delivery-MS5JYPZX.js +0 -25
  131. package/dist/mind-manager-VVK67AY3.js +0 -19
  132. package/dist/pull-2MB4SK3C.js +0 -39
  133. package/dist/service-LLBV3R7M.js +0 -122
  134. package/dist/shared-UMO4S7CC.js +0 -39
  135. package/dist/sleep-manager-EE4NRN2Q.js +0 -29
  136. package/dist/status-FZBEBM7Q.js +0 -70
  137. package/dist/status-WXD4HXRL.js +0 -35
  138. package/dist/up-SDMCSVI3.js +0 -17
  139. package/dist/variant-WWLDY6D5.js +0 -207
  140. package/dist/web-assets/assets/index-CUQ31ieL.js +0 -69
  141. package/dist/web-assets/assets/index-CW8NSl1o.css +0 -1
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  wrapForIsolation
4
- } from "./chunk-XOXLRRR2.js";
4
+ } from "./chunk-RKQEHRBB.js";
5
5
 
6
6
  // src/lib/exec.ts
7
7
  import { execFile as execFileCb, execFileSync, spawn } from "child_process";
8
- function exec(cmd, args, options) {
9
- const [wrappedCmd, wrappedArgs] = options?.mindName ? wrapForIsolation(cmd, args, options.mindName) : [cmd, args];
8
+ async function exec(cmd, args, options) {
9
+ const [wrappedCmd, wrappedArgs] = options?.mindName ? await wrapForIsolation(cmd, args, options.mindName) : [cmd, args];
10
10
  return new Promise((resolve, reject) => {
11
11
  execFileCb(
12
12
  wrappedCmd,
@@ -35,8 +35,8 @@ function resolveVoluteBin() {
35
35
  throw new Error("Could not find volute binary on PATH");
36
36
  }
37
37
  }
38
- function execInherit(cmd, args, options) {
39
- const [wrappedCmd, wrappedArgs] = options?.mindName ? wrapForIsolation(cmd, args, options.mindName) : [cmd, args];
38
+ async function execInherit(cmd, args, options) {
39
+ const [wrappedCmd, wrappedArgs] = options?.mindName ? await wrapForIsolation(cmd, args, options.mindName) : [cmd, args];
40
40
  return new Promise((resolve, reject) => {
41
41
  const child = spawn(wrappedCmd, wrappedArgs, {
42
42
  cwd: options?.cwd,
@@ -5,19 +5,19 @@ import {
5
5
  pollHealthDown,
6
6
  readDaemonConfig,
7
7
  stopService
8
- } from "./chunk-V63B7DX3.js";
8
+ } from "./chunk-LAC664WU.js";
9
9
  import {
10
- voluteHome
11
- } from "./chunk-B2CPS4QU.js";
10
+ voluteSystemDir
11
+ } from "./chunk-H7OZRFJB.js";
12
12
 
13
13
  // src/commands/down.ts
14
14
  import { existsSync, readFileSync, unlinkSync } from "fs";
15
15
  import { resolve } from "path";
16
16
  async function stopDaemon() {
17
- const home = voluteHome();
18
- const pidPath = resolve(home, "daemon.pid");
17
+ const systemDir = voluteSystemDir();
18
+ const pidPath = resolve(systemDir, "daemon.pid");
19
19
  if (!existsSync(pidPath)) {
20
- const configPath = resolve(home, "daemon.json");
20
+ const configPath = resolve(systemDir, "daemon.json");
21
21
  let port = 1618;
22
22
  let hostname = "localhost";
23
23
  if (existsSync(configPath)) {
@@ -1,11 +1,22 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- voluteHome
4
- } from "./chunk-B2CPS4QU.js";
5
2
  import {
6
3
  __export
7
4
  } from "./chunk-K3NQKI34.js";
8
5
 
6
+ // src/lib/db.ts
7
+ import { chmodSync, existsSync } from "fs";
8
+ import { dirname as dirname2, resolve as resolve2 } from "path";
9
+ import { fileURLToPath as fileURLToPath2 } from "url";
10
+ import { drizzle } from "drizzle-orm/libsql";
11
+ import { migrate } from "drizzle-orm/libsql/migrator";
12
+
13
+ // src/lib/registry.ts
14
+ import { mkdirSync } from "fs";
15
+ import { homedir } from "os";
16
+ import { dirname, resolve } from "path";
17
+ import { fileURLToPath } from "url";
18
+ import { eq, isNull } from "drizzle-orm";
19
+
9
20
  // src/lib/schema.ts
10
21
  var schema_exports = {};
11
22
  __export(schema_exports, {
@@ -16,6 +27,7 @@ __export(schema_exports, {
16
27
  deliveryQueue: () => deliveryQueue,
17
28
  messages: () => messages,
18
29
  mindHistory: () => mindHistory,
30
+ minds: () => minds,
19
31
  noteComments: () => noteComments,
20
32
  noteReactions: () => noteReactions,
21
33
  notes: () => notes,
@@ -26,6 +38,22 @@ __export(schema_exports, {
26
38
  });
27
39
  import { sql } from "drizzle-orm";
28
40
  import { index, integer, sqliteTable, text, uniqueIndex } from "drizzle-orm/sqlite-core";
41
+ var minds = sqliteTable(
42
+ "minds",
43
+ {
44
+ name: text("name").primaryKey(),
45
+ port: integer("port").notNull().unique(),
46
+ parent: text("parent").references(() => minds.name, { onDelete: "cascade" }),
47
+ dir: text("dir"),
48
+ branch: text("branch"),
49
+ stage: text("stage"),
50
+ template: text("template"),
51
+ template_hash: text("template_hash"),
52
+ running: integer("running").notNull().default(0),
53
+ created_at: text("created_at").notNull().default(sql`(datetime('now'))`)
54
+ },
55
+ (table) => [index("idx_minds_parent").on(table.parent)]
56
+ );
29
57
  var users = sqliteTable("users", {
30
58
  id: integer("id").primaryKey({ autoIncrement: true }),
31
59
  username: text("username").unique().notNull(),
@@ -208,18 +236,148 @@ var messages = sqliteTable(
208
236
  (table) => [index("idx_messages_conversation_id").on(table.conversation_id)]
209
237
  );
210
238
 
239
+ // src/lib/registry.ts
240
+ function voluteHome() {
241
+ if (process.env.VOLUTE_HOME) return process.env.VOLUTE_HOME;
242
+ const dir = dirname(fileURLToPath(import.meta.url));
243
+ if (dir.endsWith("/src/lib")) {
244
+ throw new Error(
245
+ 'VOLUTE_HOME must be set when running from source. For tests, run via "npm test" or add "--import ./test/setup.ts".'
246
+ );
247
+ }
248
+ return resolve(homedir(), ".volute");
249
+ }
250
+ function voluteUserHome() {
251
+ if (process.env.VOLUTE_USER_HOME) return process.env.VOLUTE_USER_HOME;
252
+ return resolve(homedir(), ".volute");
253
+ }
254
+ function voluteSystemDir() {
255
+ return resolve(voluteHome(), "system");
256
+ }
257
+ function ensureSystemDir() {
258
+ mkdirSync(voluteSystemDir(), { recursive: true });
259
+ }
260
+ function ensureVoluteHome() {
261
+ const mindsBase = process.env.VOLUTE_MINDS_DIR ?? resolve(voluteHome(), "minds");
262
+ mkdirSync(mindsBase, { recursive: true });
263
+ ensureSystemDir();
264
+ }
265
+ function rowToEntry(row) {
266
+ return {
267
+ name: row.name,
268
+ port: row.port,
269
+ created: row.created_at,
270
+ running: row.running === 1,
271
+ stage: row.stage ?? (row.parent ? void 0 : "sprouted"),
272
+ template: row.template ?? void 0,
273
+ templateHash: row.template_hash ?? void 0,
274
+ parent: row.parent ?? void 0,
275
+ dir: row.dir ?? void 0,
276
+ branch: row.branch ?? void 0
277
+ };
278
+ }
279
+ async function readRegistry() {
280
+ const db2 = await getDb();
281
+ const rows = await db2.select().from(minds).where(isNull(minds.parent));
282
+ return rows.map(rowToEntry);
283
+ }
284
+ async function readAllMinds() {
285
+ const db2 = await getDb();
286
+ const rows = await db2.select().from(minds);
287
+ return rows.map(rowToEntry);
288
+ }
289
+ var MIND_NAME_RE = /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/;
290
+ var MIND_NAME_MAX = 64;
291
+ function validateMindName(name) {
292
+ if (!name) return "Mind name is required";
293
+ if (name.length > MIND_NAME_MAX) return `Mind name must be at most ${MIND_NAME_MAX} characters`;
294
+ if (!MIND_NAME_RE.test(name)) {
295
+ return "Mind name must start with alphanumeric and contain only alphanumeric, dots, dashes, or underscores";
296
+ }
297
+ return null;
298
+ }
299
+ async function addMind(name, port, stage, template) {
300
+ const err = validateMindName(name);
301
+ if (err) throw new Error(err);
302
+ const db2 = await getDb();
303
+ await db2.insert(minds).values({ name, port, stage: stage ?? null, template: template ?? null }).onConflictDoUpdate({
304
+ target: minds.name,
305
+ set: { port, stage: stage ?? null, template: template ?? null }
306
+ });
307
+ }
308
+ async function addVariant(name, parent, port, dir, branch) {
309
+ const err = validateMindName(name);
310
+ if (err) throw new Error(err);
311
+ const db2 = await getDb();
312
+ await db2.insert(minds).values({ name, port, parent, dir, branch }).onConflictDoUpdate({
313
+ target: minds.name,
314
+ set: { port, parent, dir, branch }
315
+ });
316
+ }
317
+ async function removeMind(name) {
318
+ const db2 = await getDb();
319
+ await db2.delete(minds).where(eq(minds.name, name));
320
+ }
321
+ async function setMindRunning(name, running) {
322
+ const db2 = await getDb();
323
+ await db2.update(minds).set({ running: running ? 1 : 0 }).where(eq(minds.name, name));
324
+ }
325
+ async function setMindStage(name, stage) {
326
+ const db2 = await getDb();
327
+ await db2.update(minds).set({ stage }).where(eq(minds.name, name));
328
+ }
329
+ async function setMindTemplateHash(name, hash) {
330
+ const db2 = await getDb();
331
+ await db2.update(minds).set({ template_hash: hash }).where(eq(minds.name, name));
332
+ }
333
+ async function findMind(name) {
334
+ const db2 = await getDb();
335
+ const rows = await db2.select().from(minds).where(eq(minds.name, name));
336
+ if (rows.length === 0) return void 0;
337
+ return rowToEntry(rows[0]);
338
+ }
339
+ async function findVariants(parent) {
340
+ const db2 = await getDb();
341
+ const rows = await db2.select().from(minds).where(eq(minds.parent, parent));
342
+ return rows.map(rowToEntry);
343
+ }
344
+ async function getBaseName(name) {
345
+ const entry = await findMind(name);
346
+ return entry?.parent ?? name;
347
+ }
348
+ function mindDir(name) {
349
+ if (process.env.VOLUTE_MINDS_DIR) {
350
+ return resolve(process.env.VOLUTE_MINDS_DIR, name);
351
+ }
352
+ return resolve(voluteHome(), "minds", name);
353
+ }
354
+ function stateDir(name) {
355
+ return resolve(voluteSystemDir(), "state", name);
356
+ }
357
+ async function nextPort() {
358
+ const db2 = await getDb();
359
+ const rows = await db2.select({ port: minds.port }).from(minds);
360
+ const usedPorts = new Set(rows.map((r) => r.port));
361
+ const basePort = parseInt(process.env.VOLUTE_BASE_PORT || "4100", 10);
362
+ let port = basePort;
363
+ while (usedPorts.has(port)) port++;
364
+ if (port > 65535) throw new Error("No available ports \u2014 all ports 4100-65535 are allocated");
365
+ return port;
366
+ }
367
+ function daemonLoopback() {
368
+ const host = process.env.VOLUTE_DAEMON_HOSTNAME || "127.0.0.1";
369
+ if (host === "0.0.0.0") return "127.0.0.1";
370
+ if (host === "::") return "[::1]";
371
+ return host;
372
+ }
373
+
211
374
  // src/lib/db.ts
212
- import { chmodSync, existsSync } from "fs";
213
- import { dirname, resolve } from "path";
214
- import { fileURLToPath } from "url";
215
- import { drizzle } from "drizzle-orm/libsql";
216
- import { migrate } from "drizzle-orm/libsql/migrator";
217
- var __dirname = dirname(fileURLToPath(import.meta.url));
218
- var migrationsFolder = existsSync(resolve(__dirname, "../drizzle")) ? resolve(__dirname, "../drizzle") : resolve(__dirname, "../../drizzle");
375
+ var __dirname = dirname2(fileURLToPath2(import.meta.url));
376
+ var migrationsFolder = existsSync(resolve2(__dirname, "../drizzle")) ? resolve2(__dirname, "../drizzle") : resolve2(__dirname, "../../drizzle");
219
377
  var db = null;
220
378
  async function getDb() {
221
379
  if (db) return db;
222
- const dbPath = process.env.VOLUTE_DB_PATH || resolve(voluteHome(), "volute.db");
380
+ const dbPath = process.env.VOLUTE_DB_PATH || resolve2(voluteSystemDir(), "volute.db");
223
381
  db = drizzle({ connection: { url: `file:${dbPath}` }, schema: schema_exports });
224
382
  await migrate(db, { migrationsFolder });
225
383
  try {
@@ -234,6 +392,7 @@ async function getDb() {
234
392
  }
235
393
 
236
394
  export {
395
+ minds,
237
396
  users,
238
397
  conversations,
239
398
  mindHistory,
@@ -248,5 +407,26 @@ export {
248
407
  noteComments,
249
408
  noteReactions,
250
409
  messages,
251
- getDb
410
+ getDb,
411
+ voluteHome,
412
+ voluteUserHome,
413
+ voluteSystemDir,
414
+ ensureSystemDir,
415
+ ensureVoluteHome,
416
+ readRegistry,
417
+ readAllMinds,
418
+ validateMindName,
419
+ addMind,
420
+ addVariant,
421
+ removeMind,
422
+ setMindRunning,
423
+ setMindStage,
424
+ setMindTemplateHash,
425
+ findMind,
426
+ findVariants,
427
+ getBaseName,
428
+ mindDir,
429
+ stateDir,
430
+ nextPort,
431
+ daemonLoopback
252
432
  };
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
- voluteHome
4
- } from "./chunk-B2CPS4QU.js";
3
+ voluteSystemDir
4
+ } from "./chunk-H7OZRFJB.js";
5
5
 
6
6
  // src/lib/update-check.ts
7
7
  import { existsSync, readFileSync, writeFileSync } from "fs";
8
8
  import { resolve } from "path";
9
9
  var CACHE_TTL = 60 * 60 * 1e3;
10
10
  function cachePath() {
11
- return resolve(voluteHome(), "update-check.json");
11
+ return resolve(voluteSystemDir(), "update-check.json");
12
12
  }
13
13
  function readCache() {
14
14
  try {