volute 0.23.0 → 0.25.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 (88) hide show
  1. package/README.md +5 -5
  2. package/dist/{activity-events-3WHHCOBB.js → activity-events-4O37J7PD.js} +2 -2
  3. package/dist/api.d.ts +419 -19
  4. package/dist/{channel-BOOMFULW.js → channel-HZOSHGNF.js} +1 -1
  5. package/dist/{chunk-QIXPN3OO.js → chunk-2767L2RZ.js} +5 -5
  6. package/dist/{chunk-SGPEZ32F.js → chunk-33XAVCS4.js} +16 -0
  7. package/dist/{chunk-VT5QODNE.js → chunk-3AIBT4TW.js} +4 -3
  8. package/dist/{chunk-A4S7H6G6.js → chunk-BFK6SOEJ.js} +1 -1
  9. package/dist/{chunk-RK627D57.js → chunk-BOTQ25QT.js} +3 -3
  10. package/dist/{chunk-TFS25FIM.js → chunk-DG7TO7EE.js} +31 -3
  11. package/dist/{chunk-HGCDWKSP.js → chunk-E7GOKNOT.js} +1 -1
  12. package/dist/{chunk-ISWZ6QUK.js → chunk-PMX4EIJK.js} +804 -115
  13. package/dist/{chunk-M5CNKH4J.js → chunk-SHSWYG2J.js} +7 -7
  14. package/dist/{chunk-XLC342FO.js → chunk-SIAG3QMM.js} +14 -1
  15. package/dist/{chunk-KFI7TQJ6.js → chunk-TRQEV3CD.js} +9 -5
  16. package/dist/{chunk-JG4CCJOA.js → chunk-ZSH4G2P5.js} +33 -15
  17. package/dist/cli.js +18 -18
  18. package/dist/{cloud-sync-PI47U2LT.js → cloud-sync-PPBBJDY6.js} +7 -9
  19. package/dist/{connector-PYT5UOTZ.js → connector-M6XFI6GM.js} +1 -1
  20. package/dist/{create-WIDA3M4C.js → create-VDQJER52.js} +1 -1
  21. package/dist/{daemon-client-ZHCDL4RS.js → daemon-client-JOVQZ52X.js} +1 -1
  22. package/dist/{daemon-restart-RMGOOGPE.js → daemon-restart-FDNOZEAD.js} +5 -5
  23. package/dist/daemon.js +1047 -981
  24. package/dist/{delete-LOIANQGD.js → delete-2MRR4JX5.js} +1 -1
  25. package/dist/{down-WSUASL5E.js → down-674SX2IZ.js} +2 -2
  26. package/dist/{env-4PHIHTF4.js → env-2FPOZK37.js} +1 -1
  27. package/dist/{export-XD6PJBQP.js → export-IKFAPRAO.js} +1 -1
  28. package/dist/{file-X4L5TTOL.js → file-KT3UIQM3.js} +1 -1
  29. package/dist/{history-HTEKRNID.js → history-46WZN5CN.js} +1 -1
  30. package/dist/{import-EAXTHHXL.js → import-TH26J76F.js} +2 -2
  31. package/dist/{log-SRO5Q6AD.js → log-6SGSSR3D.js} +1 -1
  32. package/dist/{logs-HNTNNBDW.js → logs-HRBONI5I.js} +1 -1
  33. package/dist/{merge-B6SYTGI7.js → merge-KSFJKX6T.js} +1 -1
  34. package/dist/{message-delivery-FHV4NO2F.js → message-delivery-XMGV3FUM.js} +6 -6
  35. package/dist/{mind-BTXR5B3C.js → mind-YVWAHL2A.js} +17 -17
  36. package/dist/{mind-activity-tracker-PGC3DBJ7.js → mind-activity-tracker-NMDDEV3K.js} +3 -3
  37. package/dist/{mind-manager-KMY4GA2J.js → mind-manager-4NDNAYAB.js} +2 -2
  38. package/dist/{mind-sleep-FWRBIFBS.js → mind-sleep-GHPTSAYN.js} +1 -1
  39. package/dist/{mind-wake-LJK2YU5X.js → mind-wake-BJDJFMDF.js} +1 -1
  40. package/dist/{package-CUBJ4PKS.js → package-3HF5MXU2.js} +2 -1
  41. package/dist/{pages-YSTRWJR4.js → pages-Y6DRWUOJ.js} +1 -1
  42. package/dist/{publish-BZNHKUUK.js → publish-EEKTZBHW.js} +1 -1
  43. package/dist/{pull-GRQAXM2E.js → pull-D32SPFVU.js} +1 -1
  44. package/dist/{restart-CIDAKGG2.js → restart-5BMNV7KU.js} +1 -1
  45. package/dist/{schedule-NLR3LZLY.js → schedule-YEFDLVMJ.js} +1 -1
  46. package/dist/{seed-3H2MRREW.js → seed-6FEKB3YC.js} +1 -1
  47. package/dist/{send-RP2TA7SG.js → send-IISDYFCL.js} +1 -1
  48. package/dist/{service-7BFXDI6J.js → service-FASYWLTC.js} +3 -3
  49. package/dist/{setup-SSIIXQMI.js → setup-BMLM2UTK.js} +1 -1
  50. package/dist/{shared-2OGT3NSL.js → shared-LWMNTTZN.js} +4 -4
  51. package/dist/{skill-Q2Y6PQ3L.js → skill-T3EMR6IR.js} +11 -3
  52. package/dist/skills/imagegen/SKILL.md +37 -0
  53. package/dist/skills/imagegen/references/INSTALL.md +13 -0
  54. package/dist/skills/imagegen/scripts/imagegen.ts +136 -0
  55. package/dist/skills/resonance/SKILL.md +73 -0
  56. package/dist/skills/resonance/assets/default-config.json +21 -0
  57. package/dist/skills/resonance/references/INSTALL.md +23 -0
  58. package/dist/skills/resonance/scripts/resonance.ts +1250 -0
  59. package/dist/skills/volute-mind/SKILL.md +94 -4
  60. package/dist/{sleep-manager-2TMQ65E4.js → sleep-manager-RKTFZPD3.js} +6 -6
  61. package/dist/{sprout-UKCYBGHK.js → sprout-QJVGJDSH.js} +3 -3
  62. package/dist/{start-JR6CUUWF.js → start-C7XITZ5O.js} +1 -1
  63. package/dist/{status-5XDGYHKP.js → status-LYS4NUOZ.js} +1 -1
  64. package/dist/{status-H2MKDN6L.js → status-SIRPLEZC.js} +4 -3
  65. package/dist/{stop-VKPGK25U.js → stop-CVKBSLXY.js} +1 -1
  66. package/dist/tailscale-AJ4VL5XK.js +49 -0
  67. package/dist/{up-Z5JRG2M2.js → up-CJ26KQLN.js} +2 -2
  68. package/dist/{update-ELC6MEUT.js → update-7XCZMYBT.js} +7 -7
  69. package/dist/{upgrade-GXW2EQY3.js → upgrade-7RUIXGOO.js} +1 -1
  70. package/dist/{variant-A4I7PHXS.js → variant-UGREB4G5.js} +4 -4
  71. package/dist/{version-notify-LKABEJSA.js → version-notify-AZQMC32A.js} +6 -6
  72. package/dist/web-assets/assets/index-CGPSVu19.js +69 -0
  73. package/dist/web-assets/assets/index-V_rNDsM8.css +1 -0
  74. package/dist/web-assets/favicon.png +0 -0
  75. package/dist/web-assets/index.html +5 -4
  76. package/dist/web-assets/logo.png +0 -0
  77. package/drizzle/0013_user_profiles.sql +3 -0
  78. package/drizzle/0014_conversation_reads.sql +7 -0
  79. package/drizzle/meta/0013_snapshot.json +7 -0
  80. package/drizzle/meta/_journal.json +14 -0
  81. package/package.json +2 -1
  82. package/templates/_base/home/public/.gitkeep +0 -0
  83. package/templates/_base/src/lib/format-prefix.ts +18 -2
  84. package/templates/_base/src/lib/routing.ts +2 -1
  85. package/templates/_base/src/lib/types.ts +8 -0
  86. package/dist/chunk-G5KRTU2F.js +0 -76
  87. package/dist/web-assets/assets/index-CZ26vsyY.js +0 -69
  88. package/dist/web-assets/assets/index-DyyAvJwW.css +0 -1
@@ -11,6 +11,7 @@ var schema_exports = {};
11
11
  __export(schema_exports, {
12
12
  activity: () => activity,
13
13
  conversationParticipants: () => conversationParticipants,
14
+ conversationReads: () => conversationReads,
14
15
  conversations: () => conversations,
15
16
  deliveryQueue: () => deliveryQueue,
16
17
  messages: () => messages,
@@ -28,6 +29,9 @@ var users = sqliteTable("users", {
28
29
  password_hash: text("password_hash").notNull(),
29
30
  role: text("role").notNull().default("pending"),
30
31
  user_type: text("user_type").notNull().default("brain"),
32
+ display_name: text("display_name"),
33
+ description: text("description"),
34
+ avatar: text("avatar"),
31
35
  created_at: text("created_at").notNull().default(sql`(datetime('now'))`)
32
36
  });
33
37
  var conversations = sqliteTable(
@@ -134,6 +138,17 @@ var activity = sqliteTable(
134
138
  index("idx_activity_mind").on(table.mind)
135
139
  ]
136
140
  );
141
+ var conversationReads = sqliteTable(
142
+ "conversation_reads",
143
+ {
144
+ user_id: integer("user_id").notNull().references(() => users.id, { onDelete: "cascade" }),
145
+ conversation_id: text("conversation_id").notNull().references(() => conversations.id, { onDelete: "cascade" }),
146
+ last_read_message_id: integer("last_read_message_id").notNull().default(0)
147
+ },
148
+ (table) => [
149
+ uniqueIndex("idx_conversation_reads_unique").on(table.user_id, table.conversation_id)
150
+ ]
151
+ );
137
152
  var messages = sqliteTable(
138
153
  "messages",
139
154
  {
@@ -182,6 +197,7 @@ export {
182
197
  sharedSkills,
183
198
  deliveryQueue,
184
199
  activity,
200
+ conversationReads,
185
201
  messages,
186
202
  getDb
187
203
  };
@@ -132,17 +132,18 @@ async function restartService(mode) {
132
132
  }
133
133
  function readDaemonConfig() {
134
134
  const configPath = resolve(voluteHome(), "daemon.json");
135
- if (!existsSync(configPath)) return { hostname: "127.0.0.1", port: 4200 };
135
+ if (!existsSync(configPath)) return { hostname: "127.0.0.1", port: 1618 };
136
136
  try {
137
137
  const config = JSON.parse(readFileSync(configPath, "utf-8"));
138
138
  return {
139
139
  hostname: config.hostname || "127.0.0.1",
140
- port: config.port ?? 4200,
140
+ port: config.port ?? 1618,
141
+ internalPort: config.internalPort,
141
142
  token: config.token
142
143
  };
143
144
  } catch {
144
145
  console.error("Warning: could not read daemon config, using defaults.");
145
- return { hostname: "127.0.0.1", port: 4200 };
146
+ return { hostname: "127.0.0.1", port: 1618 };
146
147
  }
147
148
  }
148
149
  function modeLabel(mode) {
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  activity,
4
4
  getDb
5
- } from "./chunk-SGPEZ32F.js";
5
+ } from "./chunk-33XAVCS4.js";
6
6
  import {
7
7
  logger_default
8
8
  } from "./chunk-YUIHSKR6.js";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  readVoluteConfig,
4
4
  writeVoluteConfig
5
- } from "./chunk-XLC342FO.js";
5
+ } from "./chunk-SIAG3QMM.js";
6
6
  import {
7
7
  mindEnvPath,
8
8
  readEnv,
@@ -39,7 +39,7 @@ async function run(args) {
39
39
  return;
40
40
  }
41
41
  const wsDir = resolveWorkspace(inputPath);
42
- const { daemonFetch } = await import("./daemon-client-ZHCDL4RS.js");
42
+ const { daemonFetch } = await import("./daemon-client-JOVQZ52X.js");
43
43
  const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
44
44
  const client = getClient();
45
45
  const res = await daemonFetch(urlOf(client.api.minds.import.$url()), {
@@ -91,7 +91,7 @@ async function importArchive(archivePath, nameOverride) {
91
91
  process.exit(1);
92
92
  }
93
93
  try {
94
- const { daemonFetch } = await import("./daemon-client-ZHCDL4RS.js");
94
+ const { daemonFetch } = await import("./daemon-client-JOVQZ52X.js");
95
95
  const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
96
96
  const client = getClient();
97
97
  const res = await daemonFetch(urlOf(client.api.minds.import.$url()), {
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  getDb,
4
4
  sharedSkills
5
- } from "./chunk-SGPEZ32F.js";
5
+ } from "./chunk-33XAVCS4.js";
6
6
  import {
7
7
  logger_default
8
8
  } from "./chunk-YUIHSKR6.js";
@@ -41,13 +41,15 @@ function sharedSkillsDir() {
41
41
  }
42
42
  function parseSkillMd(content) {
43
43
  const match = content.match(/^---\n([\s\S]*?)\n---/);
44
- if (!match) return { name: "", description: "" };
44
+ if (!match) return { name: "", description: "", npmDependencies: [] };
45
45
  const frontmatter = match[1];
46
46
  const nameMatch = frontmatter.match(/^name:\s*(.+)$/m);
47
47
  const descMatch = frontmatter.match(/^description:\s*(.+)$/m);
48
+ const depsMatch = frontmatter.match(/^\s*npm-dependencies:\s*(.+)$/m);
48
49
  return {
49
50
  name: nameMatch?.[1].trim() ?? "",
50
- description: descMatch?.[1].trim() ?? ""
51
+ description: descMatch?.[1].trim() ?? "",
52
+ npmDependencies: depsMatch ? depsMatch[1].trim().split(/[\s,]+/).filter(Boolean) : []
51
53
  };
52
54
  }
53
55
  async function listSharedSkills() {
@@ -127,7 +129,32 @@ async function installSkill(_mindName, dir, skillId) {
127
129
  if (existsSync(destDir)) throw new Error(`Skill already installed: ${skillId}`);
128
130
  mkdirSync(destDir, { recursive: true });
129
131
  cpSync(sourceDir, destDir, { recursive: true });
132
+ const npmInstalled = [];
133
+ const skillMdPath = join(sourceDir, "SKILL.md");
134
+ if (existsSync(skillMdPath)) {
135
+ const { npmDependencies } = parseSkillMd(readFileSync(skillMdPath, "utf-8"));
136
+ if (npmDependencies.length > 0) {
137
+ try {
138
+ await exec("npm", ["install", ...npmDependencies], { cwd: dir });
139
+ npmInstalled.push(...npmDependencies);
140
+ } catch (e) {
141
+ rmSync(destDir, { recursive: true });
142
+ const msg = e instanceof Error ? e.message : String(e);
143
+ throw new Error(
144
+ `Failed to install npm dependencies (${npmDependencies.join(", ")}): ${msg}`
145
+ );
146
+ }
147
+ }
148
+ }
149
+ let installNotes = null;
150
+ const installMdPath = join(destDir, "references", "INSTALL.md");
151
+ if (existsSync(installMdPath)) {
152
+ installNotes = readFileSync(installMdPath, "utf-8");
153
+ }
130
154
  await gitExec(["add", join("home", ".claude", "skills", skillId)], { cwd: dir });
155
+ if (npmInstalled.length > 0) {
156
+ await gitExec(["add", "package.json", "package-lock.json"], { cwd: dir });
157
+ }
131
158
  await gitExec(["commit", "-m", `Install shared skill: ${skillId}`], { cwd: dir });
132
159
  const commitHash = (await gitExec(["rev-parse", "HEAD"], { cwd: dir })).trim();
133
160
  const upstream = {
@@ -141,6 +168,7 @@ async function installSkill(_mindName, dir, skillId) {
141
168
  cwd: dir
142
169
  });
143
170
  await gitExec(["commit", "--amend", "--no-edit"], { cwd: dir });
171
+ return { installNotes, npmInstalled };
144
172
  }
145
173
  async function uninstallSkill(_mindName, dir, skillId) {
146
174
  validateSkillId(skillId);
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  publish
4
- } from "./chunk-A4S7H6G6.js";
4
+ } from "./chunk-BFK6SOEJ.js";
5
5
  import {
6
6
  logger_default
7
7
  } from "./chunk-YUIHSKR6.js";