volute 0.30.1 → 0.31.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 (169) hide show
  1. package/dist/{accept-E3PAH3QJ.js → accept-GAKQ3MEH.js} +4 -4
  2. package/dist/{activity-events-BKBPPUBP.js → activity-events-T5ZRCVAL.js} +2 -2
  3. package/dist/{ai-service-VAJT5UBS.js → ai-service-UWUPM4T6.js} +5 -3
  4. package/dist/api.d.ts +238 -111
  5. package/dist/{archive-WWDBWYN2.js → archive-YBNSJYZZ.js} +2 -2
  6. package/dist/auth-T5AW2USD.js +43 -0
  7. package/dist/{bridge-RO37CUFM.js → bridge-4AJ3EY26.js} +4 -4
  8. package/dist/{chat-TCUNPFGO.js → chat-7YLT7FI3.js} +8 -8
  9. package/dist/{chunk-EFVHR7KH.js → chunk-4OUOFS23.js} +24 -5
  10. package/dist/{chunk-G3GBKZGG.js → chunk-57OKQMP3.js} +54 -2
  11. package/dist/chunk-6QIUN46C.js +38 -0
  12. package/dist/{chunk-FSM45XD5.js → chunk-AAO77TZX.js} +1 -1
  13. package/dist/{chunk-DTC6EH5I.js → chunk-BC3P3QCK.js} +1 -1
  14. package/dist/{chunk-P7VFDSSG.js → chunk-BNC43CSY.js} +2 -2
  15. package/dist/{chunk-QVAQ5454.js → chunk-BWKIHH7B.js} +3080 -2099
  16. package/dist/{chunk-IKHDUZRH.js → chunk-DAXJKPHZ.js} +2 -2
  17. package/dist/{chunk-P27RV5WM.js → chunk-EKDWA7E4.js} +3 -1
  18. package/dist/{chunk-S5LR3XYJ.js → chunk-EMPFLFTG.js} +1 -1
  19. package/dist/{chunk-2C2VXEBB.js → chunk-FAHDKPEH.js} +18 -56
  20. package/dist/{chunk-W5OOPLNP.js → chunk-HDKY4TWU.js} +3 -3
  21. package/dist/{chunk-EFP3PE6C.js → chunk-HR5JKIDG.js} +2 -12
  22. package/dist/{chunk-JGFRDMR6.js → chunk-LX6T3GKQ.js} +1 -1
  23. package/dist/{chunk-2NDZC3S7.js → chunk-NOWVQ7AL.js} +447 -299
  24. package/dist/{chunk-ZWKTUQEL.js → chunk-NV3TYNWX.js} +1 -1
  25. package/dist/{chunk-NSBFETWP.js → chunk-PNQCXLSV.js} +7 -26
  26. package/dist/chunk-R5QJBZZG.js +175 -0
  27. package/dist/{chunk-MDPCSXZ4.js → chunk-S2TZLSDH.js} +4 -4
  28. package/dist/{chunk-FXHXHI2A.js → chunk-SNVPRRT7.js} +3 -6
  29. package/dist/{chunk-UPA6COHU.js → chunk-WRS3B556.js} +5 -5
  30. package/dist/{chunk-HHTXM4JT.js → chunk-X62AXPR7.js} +36 -4
  31. package/dist/cli.js +74 -23
  32. package/dist/{clock-G3ALCMLJ.js → clock-LJCG426D.js} +10 -8
  33. package/dist/{cloud-sync-JV4LJOK3.js → cloud-sync-O3LXIRN6.js} +13 -13
  34. package/dist/{conversations-7KVQV7EZ.js → conversations-RKKGP5IA.js} +7 -7
  35. package/dist/{create-VQSQHJQW.js → create-TL623TFC.js} +1 -1
  36. package/dist/{create-JTLS7GX3.js → create-WUTIIRI2.js} +4 -4
  37. package/dist/daemon-client-CVGM25DM.js +11 -0
  38. package/dist/{daemon-restart-4JGBHEJ4.js → daemon-restart-EZP7XH3V.js} +6 -7
  39. package/dist/daemon.js +1879 -1727
  40. package/dist/{db-HMFPIRO2.js → db-SW5PL6QA.js} +1 -1
  41. package/dist/{delete-JESHKE7F.js → delete-Z6HAG35F.js} +1 -1
  42. package/dist/down-TS4XQBA4.js +13 -0
  43. package/dist/{env-CLXXT7M2.js → env-NHESNNSP.js} +4 -4
  44. package/dist/{export-EGA5M5PB.js → export-EVMP7GWY.js} +3 -3
  45. package/dist/{extension-WZ4SUPJB.js → extension-LR7EW3JF.js} +5 -6
  46. package/dist/{extensions-ECO4RPFQ.js → extensions-NGEJI7JH.js} +7 -7
  47. package/dist/{files-4VEJDASH.js → files-3SM7V33S.js} +5 -5
  48. package/dist/{history-EJMMLXDO.js → history-PQD3LXEP.js} +4 -4
  49. package/dist/{import-YCGPMBSI.js → import-PR2OCGQJ.js} +3 -3
  50. package/dist/{join-2GBJKZEN.js → join-R4EN5CWQ.js} +1 -1
  51. package/dist/{list-Q6O7FGAN.js → list-B4XNUOFO.js} +4 -4
  52. package/dist/{login-RL6AU2SM.js → login-62JVY6A2.js} +4 -4
  53. package/dist/{login-RET5WESK.js → login-URWP6S2N.js} +2 -2
  54. package/dist/{logout-CGAGJN3L.js → logout-NXJQJDLI.js} +2 -2
  55. package/dist/{logout-JRPBEMMR.js → logout-ZK2N62T3.js} +2 -2
  56. package/dist/message-delivery-UJHCLVU4.js +30 -0
  57. package/dist/{mind-LUWRQUQ5.js → mind-E2ZV2WRX.js} +17 -17
  58. package/dist/{mind-activity-tracker-VYN2ZZ2M.js → mind-activity-tracker-ASNZBMLC.js} +3 -3
  59. package/dist/{mind-list-V5WW5DUA.js → mind-list-BEI7E5WY.js} +2 -2
  60. package/dist/mind-manager-IPA6DZXD.js +26 -0
  61. package/dist/{mind-sleep-R6PTNNW4.js → mind-sleep-CANABWJI.js} +4 -4
  62. package/dist/{mind-status-I4ISFJ6I.js → mind-status-6WKZVUOP.js} +2 -2
  63. package/dist/{mind-wake-67ZQEWAV.js → mind-wake-RZKLH2IN.js} +4 -4
  64. package/dist/{package-OYUD4ZJ4.js → package-NU4CA7OU.js} +3 -3
  65. package/dist/{pages-watcher-Z3PKNROC.js → pages-watcher-72OVPRMH.js} +4 -3
  66. package/dist/read-THL362EI.js +74 -0
  67. package/dist/{register-NZDSTLP3.js → register-QAQELAS6.js} +4 -4
  68. package/dist/{registry-ODSALQQL.js → registry-ASXCQCNH.js} +1 -1
  69. package/dist/{reject-2HZOJEIJ.js → reject-AYPBNPNL.js} +4 -4
  70. package/dist/{restart-QHS3NT64.js → restart-6SKPV3T2.js} +4 -4
  71. package/dist/{sandbox-O5FUSF43.js → sandbox-6ZEWQDVU.js} +3 -3
  72. package/dist/{seed-WUQMPLDM.js → seed-OWX2AW75.js} +36 -12
  73. package/dist/{send-OAN3RYYY.js → send-ZO4BTWXK.js} +5 -5
  74. package/dist/{setup-QMDK5RZX.js → setup-7CFITEQN.js} +2 -4
  75. package/dist/{setup-XJH3E7YM.js → setup-ZXBXG7E4.js} +6 -8
  76. package/dist/{skill-FZIN4W4Q.js → skill-YFXP67A2.js} +4 -4
  77. package/dist/skills/dreaming/references/INSTALL.md +2 -3
  78. package/dist/skills/dreaming/scripts/dream.ts +3 -25
  79. package/dist/skills/volute-mind/SKILL.md +1 -1
  80. package/dist/sleep-manager-TPS6OGCA.js +30 -0
  81. package/dist/{split-EXYGGGQN.js → split-MI62KJUU.js} +1 -1
  82. package/dist/{sprout-AXQ6H5DB.js → sprout-FDVI2CGN.js} +5 -6
  83. package/dist/{start-MTOVL6SY.js → start-D64BRKPH.js} +4 -4
  84. package/dist/{status-ZRO37MWR.js → status-ZZWBYFGE.js} +4 -5
  85. package/dist/{stop-OK5WEPVC.js → stop-OP2CTXCO.js} +4 -4
  86. package/dist/system-chat-B43GIXQU.js +30 -0
  87. package/dist/{systems-W3BBMSOZ.js → systems-EQPPT4B7.js} +5 -5
  88. package/dist/{tailscale-BM72RXCJ.js → tailscale-6DJKUMNF.js} +1 -1
  89. package/dist/up-TDXEP3VA.js +16 -0
  90. package/dist/{update-PLPHMMZ2.js → update-KUJXATRS.js} +4 -5
  91. package/dist/{update-check-CVCN7MF6.js → update-check-5WVSU37T.js} +2 -2
  92. package/dist/{upgrade-I6NPCYUU.js → upgrade-KBHCWX6T.js} +1 -1
  93. package/dist/{version-notify-2NTWVEHL.js → version-notify-75ELVKPV.js} +17 -21
  94. package/dist/web-assets/assets/index-BM1cTzBg.js +72 -0
  95. package/dist/web-assets/assets/index-BfJkKTPF.css +1 -0
  96. package/dist/web-assets/ext-theme.css +1 -0
  97. package/dist/web-assets/index.html +2 -2
  98. package/drizzle/0000_baseline.sql +152 -0
  99. package/drizzle/0001_add_conversation_private.sql +1 -0
  100. package/drizzle/0002_turns.sql +21 -0
  101. package/drizzle/0003_turn_feed_links.sql +11 -0
  102. package/drizzle/meta/0000_snapshot.json +3 -223
  103. package/drizzle/meta/0001_snapshot.json +3 -294
  104. package/drizzle/meta/0002_snapshot.json +3 -335
  105. package/drizzle/meta/0003_snapshot.json +3 -413
  106. package/drizzle/meta/_journal.json +8 -106
  107. package/package.json +3 -3
  108. package/packages/extensions/notes/dist/ui/assets/{index-DgawVO5g.css → index-B8GdTnXs.css} +1 -1
  109. package/packages/extensions/notes/dist/ui/assets/index-CDpGTCWb.js +2 -0
  110. package/packages/extensions/notes/dist/ui/index.html +2 -2
  111. package/packages/extensions/notes/skills/notes/SKILL.md +8 -8
  112. package/packages/extensions/pages/skills/pages/SKILL.md +7 -4
  113. package/packages/extensions/pages/skills/pages/scripts/pages.mjs +58 -0
  114. package/templates/_base/.init/.config/bin/volute +27 -0
  115. package/templates/_base/src/lib/auto-commit.ts +82 -43
  116. package/templates/_base/src/lib/daemon-client.ts +19 -23
  117. package/templates/_base/src/lib/router.ts +17 -1
  118. package/templates/_base/src/lib/startup.ts +6 -8
  119. package/templates/_base/src/lib/volute-server.ts +2 -5
  120. package/templates/claude/src/agent.ts +2 -1
  121. package/templates/claude/src/lib/hooks/auto-commit.ts +7 -3
  122. package/templates/claude/src/server.ts +0 -9
  123. package/templates/pi/package.json.tmpl +1 -1
  124. package/templates/pi/src/agent.ts +1 -1
  125. package/templates/pi/src/lib/event-handler.ts +5 -3
  126. package/dist/chunk-7D47T4RB.js +0 -84
  127. package/dist/chunk-CVH6Y2YG.js +0 -59
  128. package/dist/chunk-LIRWLNAK.js +0 -729
  129. package/dist/daemon-client-BCTFGVCZ.js +0 -9
  130. package/dist/down-NGBMGORS.js +0 -14
  131. package/dist/message-delivery-6YMVNOEC.js +0 -28
  132. package/dist/migrate-registry-to-db-FK35IPEH.js +0 -110
  133. package/dist/mind-manager-YFCOIAAX.js +0 -18
  134. package/dist/read-WQMPTSN2.js +0 -46
  135. package/dist/sleep-manager-O7YQFCV5.js +0 -30
  136. package/dist/up-BXUAIDXB.js +0 -17
  137. package/dist/web-assets/assets/index--kREqKl9.js +0 -72
  138. package/dist/web-assets/assets/index-BXYTG0nJ.css +0 -1
  139. package/drizzle/0000_flaky_mariko_yashida.sql +0 -34
  140. package/drizzle/0001_careless_warpath.sql +0 -12
  141. package/drizzle/0002_wealthy_the_call.sql +0 -6
  142. package/drizzle/0003_clean_ego.sql +0 -12
  143. package/drizzle/0004_magical_silverclaw.sql +0 -1
  144. package/drizzle/0005_rename_agents_to_minds.sql +0 -11
  145. package/drizzle/0006_mind_history.sql +0 -20
  146. package/drizzle/0007_system_prompts.sql +0 -5
  147. package/drizzle/0008_volute_channels.sql +0 -24
  148. package/drizzle/0009_shared_skills.sql +0 -9
  149. package/drizzle/0010_delivery_queue.sql +0 -12
  150. package/drizzle/0011_rename_human_to_brain.sql +0 -1
  151. package/drizzle/0012_activity.sql +0 -11
  152. package/drizzle/0013_user_profiles.sql +0 -3
  153. package/drizzle/0014_conversation_reads.sql +0 -7
  154. package/drizzle/0015_notes.sql +0 -23
  155. package/drizzle/0016_note_reactions_and_replies.sql +0 -15
  156. package/drizzle/0017_minds.sql +0 -16
  157. package/drizzle/meta/0004_snapshot.json +0 -410
  158. package/drizzle/meta/0005_snapshot.json +0 -410
  159. package/drizzle/meta/0006_snapshot.json +0 -7
  160. package/drizzle/meta/0007_snapshot.json +0 -7
  161. package/drizzle/meta/0008_snapshot.json +0 -7
  162. package/drizzle/meta/0009_snapshot.json +0 -7
  163. package/drizzle/meta/0010_snapshot.json +0 -7
  164. package/drizzle/meta/0011_snapshot.json +0 -7
  165. package/drizzle/meta/0012_snapshot.json +0 -7
  166. package/drizzle/meta/0013_snapshot.json +0 -7
  167. package/packages/extensions/notes/dist/ui/assets/index-qUWoeC4c.js +0 -2
  168. package/packages/extensions/notes/skills/notes/scripts/notes.mjs +0 -185
  169. package/templates/_base/home/public/.gitkeep +0 -0
@@ -1,4 +1,3 @@
1
- import { existsSync, mkdirSync, renameSync } from "node:fs";
2
1
  import { resolve } from "node:path";
3
2
  import { createMind } from "./agent.js";
4
3
  import { daemonRestart } from "./lib/daemon-client.js";
@@ -23,14 +22,6 @@ if (config.maxThinkingTokens) log("server", `max thinking tokens: ${config.maxTh
23
22
  const systemPrompt = loadSystemPrompt();
24
23
  const sessionsDir = resolve(".mind/sessions");
25
24
 
26
- // Migrate old single session.json → sessions/main.json
27
- const oldSessionPath = resolve(".mind/session.json");
28
- if (existsSync(oldSessionPath) && !existsSync(resolve(sessionsDir, "main.json"))) {
29
- mkdirSync(sessionsDir, { recursive: true });
30
- renameSync(oldSessionPath, resolve(sessionsDir, "main.json"));
31
- log("server", "migrated session.json → sessions/main.json");
32
- }
33
-
34
25
  const pkg = loadPackageInfo();
35
26
  const abortController = new AbortController();
36
27
  const mind = createMind({
@@ -9,7 +9,7 @@
9
9
  "typecheck": "tsc --noEmit"
10
10
  },
11
11
  "dependencies": {
12
- "@mariozechner/pi-coding-agent": "^0.51.0",
12
+ "@mariozechner/pi-coding-agent": "^0.58.1",
13
13
  "@sinclair/typebox": "^0.34.0",
14
14
  "tsx": "^4.0.0"
15
15
  },
@@ -64,7 +64,7 @@ export function createMind(options: {
64
64
  // Shared setup (created once)
65
65
  const modelStr = options.model || process.env.PI_MODEL || "anthropic:claude-sonnet-4-20250514";
66
66
  const model = resolveModel(modelStr);
67
- const authStorage = new AuthStorage();
67
+ const authStorage = AuthStorage.create();
68
68
  const modelRegistry = new ModelRegistry(authStorage);
69
69
 
70
70
  // --- Subagents (config-driven) ---
@@ -1,4 +1,4 @@
1
- import { commitFileChange } from "./auto-commit.js";
1
+ import { flushFileChanges, trackFileChange } from "./auto-commit.js";
2
2
  import { daemonEmit, type EventType } from "./daemon-client.js";
3
3
  import { log, warn } from "./logger.js";
4
4
  import { filterEvent, loadTransparencyPreset } from "./transparency.js";
@@ -110,7 +110,7 @@ export function createEventHandler(session: EventSession, options: EventHandlerO
110
110
  const args = toolArgs.get(event.toolCallId);
111
111
  const filePath = (args as { path?: string })?.path;
112
112
  if (filePath) {
113
- commitFileChange(filePath, options.cwd);
113
+ trackFileChange(filePath, options.cwd);
114
114
  }
115
115
  }
116
116
  toolArgs.delete(event.toolCallId);
@@ -158,7 +158,9 @@ export function createEventHandler(session: EventSession, options: EventHandlerO
158
158
  options.broadcast({ type: "done" });
159
159
  emit(session, { type: "done" });
160
160
  session.currentMessageId = undefined;
161
- options.onTurnEnd?.();
161
+ flushFileChanges(options.cwd)
162
+ .then(() => options.onTurnEnd?.())
163
+ .catch((err) => log("mind", `session "${session.name}": flush/turn-end error:`, err));
162
164
  }
163
165
  } catch (err) {
164
166
  log("mind", `session "${session.name}": event handler error (${event?.type}):`, err);
@@ -1,84 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- voluteHome,
4
- voluteSystemDir
5
- } from "./chunk-HHTXM4JT.js";
6
-
7
- // src/lib/setup.ts
8
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
9
- import { resolve } from "path";
10
- function configPath() {
11
- return resolve(voluteSystemDir(), "config.json");
12
- }
13
- function readGlobalConfig() {
14
- const path = configPath();
15
- const legacyPath = resolve(voluteHome(), "config.json");
16
- const effectivePath = existsSync(path) ? path : legacyPath;
17
- if (!existsSync(effectivePath)) return {};
18
- try {
19
- return JSON.parse(readFileSync(effectivePath, "utf-8"));
20
- } catch (err) {
21
- console.error(`Failed to parse ${effectivePath}: ${err instanceof Error ? err.message : err}`);
22
- return {};
23
- }
24
- }
25
- function writeGlobalConfig(config) {
26
- const path = configPath();
27
- mkdirSync(voluteSystemDir(), { recursive: true });
28
- writeFileSync(path, `${JSON.stringify(config, null, 2)}
29
- `);
30
- }
31
- function isSetupComplete() {
32
- const config = readGlobalConfig();
33
- return config.setup != null;
34
- }
35
- function migrateSetupConfig() {
36
- const config = readGlobalConfig();
37
- if (config.setup) return;
38
- const home = voluteHome();
39
- const systemDir = voluteSystemDir();
40
- const registryPath = resolve(systemDir, "minds.json");
41
- const legacyRegistryPath = resolve(home, "minds.json");
42
- if (!existsSync(registryPath) && !existsSync(legacyRegistryPath)) return;
43
- const isSystem = process.env.VOLUTE_ISOLATION === "user";
44
- const mindsDir = process.env.VOLUTE_MINDS_DIR || resolve(home, "minds");
45
- let hasService = false;
46
- try {
47
- if (process.platform === "darwin") {
48
- const plistPath = resolve(
49
- process.env.HOME || "",
50
- "Library",
51
- "LaunchAgents",
52
- "com.volute.daemon.plist"
53
- );
54
- if (existsSync(plistPath)) hasService = true;
55
- }
56
- if (process.platform === "linux") {
57
- if (existsSync("/etc/systemd/system/volute.service")) hasService = true;
58
- const userUnit = resolve(
59
- process.env.HOME || "",
60
- ".config",
61
- "systemd",
62
- "user",
63
- "volute.service"
64
- );
65
- if (existsSync(userUnit)) hasService = true;
66
- }
67
- } catch {
68
- }
69
- const setup = {
70
- type: isSystem ? "system" : "local",
71
- isolation: isSystem ? "user" : "none",
72
- mindsDir,
73
- service: hasService
74
- };
75
- writeGlobalConfig({ ...config, setup });
76
- }
77
-
78
- export {
79
- configPath,
80
- readGlobalConfig,
81
- writeGlobalConfig,
82
- isSetupComplete,
83
- migrateSetupConfig
84
- };
@@ -1,59 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- wrapForIsolation
4
- } from "./chunk-G3GBKZGG.js";
5
-
6
- // src/lib/exec.ts
7
- import { execFile as execFileCb, execFileSync, spawn } from "child_process";
8
- async function exec(cmd, args, options) {
9
- const [wrappedCmd, wrappedArgs] = options?.mindName ? await wrapForIsolation(cmd, args, options.mindName) : [cmd, args];
10
- return new Promise((resolve, reject) => {
11
- execFileCb(
12
- wrappedCmd,
13
- wrappedArgs,
14
- { cwd: options?.cwd, env: options?.env },
15
- (err, stdout, stderr) => {
16
- if (err) {
17
- err.stderr = stderr;
18
- err.stdout = stdout;
19
- reject(err);
20
- } else {
21
- resolve(stdout);
22
- }
23
- }
24
- );
25
- });
26
- }
27
- function gitExec(args, options) {
28
- const fullArgs = process.env.VOLUTE_ISOLATION === "user" ? ["-c", "safe.directory=*", ...args] : args;
29
- return exec("git", fullArgs, options);
30
- }
31
- function resolveVoluteBin() {
32
- try {
33
- return execFileSync("which", ["volute"], { encoding: "utf-8" }).trim();
34
- } catch {
35
- throw new Error("Could not find volute binary on PATH");
36
- }
37
- }
38
- async function execInherit(cmd, args, options) {
39
- const [wrappedCmd, wrappedArgs] = options?.mindName ? await wrapForIsolation(cmd, args, options.mindName) : [cmd, args];
40
- return new Promise((resolve, reject) => {
41
- const child = spawn(wrappedCmd, wrappedArgs, {
42
- cwd: options?.cwd,
43
- env: options?.env,
44
- stdio: "inherit"
45
- });
46
- child.on("error", reject);
47
- child.on("close", (code) => {
48
- if (code === 0) resolve();
49
- else reject(new Error(`${cmd} ${args.join(" ")} exited with code ${code}`));
50
- });
51
- });
52
- }
53
-
54
- export {
55
- exec,
56
- gitExec,
57
- resolveVoluteBin,
58
- execInherit
59
- };