volute 0.32.0 → 0.34.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 (187) hide show
  1. package/README.md +16 -0
  2. package/dist/{accept-74M7I4RZ.js → accept-TW6V4WI4.js} +4 -4
  3. package/dist/{activity-events-HETAODOK.js → activity-events-BN7V6KCC.js} +4 -4
  4. package/dist/{ai-service-ZIPCV3MX.js → ai-service-PSILB5WD.js} +5 -5
  5. package/dist/{api-client-YPKOZP2O.js → api-client-XUXOB7LI.js} +1 -1
  6. package/dist/api.d.ts +1198 -957
  7. package/dist/{archive-INXYFVCW.js → archive-C2VEMQOR.js} +4 -4
  8. package/dist/{auth-6DMGES3I.js → auth-ZFZXJZDQ.js} +5 -5
  9. package/dist/{bridge-BVCBTGPF.js → bridge-O753D5F4.js} +4 -4
  10. package/dist/{chat-XT4OBJBU.js → chat-BHYX7DJ4.js} +9 -9
  11. package/dist/{chunk-M7UL5S3Q.js → chunk-2IOP6PHB.js} +1 -1
  12. package/dist/{chunk-JJ7W6WSB.js → chunk-47XDEWWV.js} +5 -5
  13. package/dist/{chunk-RSX4OPZY.js → chunk-47ZPNLF4.js} +7 -7
  14. package/dist/{chunk-RPZZSXV3.js → chunk-4JSR7YO7.js} +20 -1
  15. package/dist/chunk-6LXAAQ43.js +22 -0
  16. package/dist/{chunk-TSXLLQZW.js → chunk-6OWJXUAR.js} +10 -1
  17. package/dist/{chunk-I5KY25PQ.js → chunk-6WAWMWR5.js} +1 -1
  18. package/dist/{chunk-LSGWR54X.js → chunk-7F2SW2KD.js} +2 -2
  19. package/dist/chunk-7KJOFUNN.js +22 -0
  20. package/dist/{spirit-N4W4UQRH.js → chunk-B2BVAIZ4.js} +21 -12
  21. package/dist/{chunk-LGB6JBHI.js → chunk-BDK73LK6.js} +5 -55
  22. package/dist/{chunk-IYDIE3HG.js → chunk-BFWHBQK4.js} +1 -1
  23. package/dist/{chunk-TDRYEPH4.js → chunk-BM474GX6.js} +4 -4
  24. package/dist/{chunk-R7E6CRVQ.js → chunk-BTWAGDV5.js} +1 -1
  25. package/dist/{chunk-WKF5FEFK.js → chunk-CVL5IGIR.js} +629 -174
  26. package/dist/{chunk-S6NFERDC.js → chunk-E5C7OWZ2.js} +20 -22
  27. package/dist/chunk-FYCALD4Q.js +23 -0
  28. package/dist/{chunk-SKLSMHXO.js → chunk-IS7WJ56Q.js} +1 -1
  29. package/dist/{chunk-2NGTS5UU.js → chunk-M3K5AARV.js} +1 -1
  30. package/dist/{chunk-ALEF47VT.js → chunk-MLOQKQNB.js} +1 -1
  31. package/dist/{chunk-D5G5YOPL.js → chunk-N3DNFPVA.js} +41 -5
  32. package/dist/{chunk-LRCG2JLP.js → chunk-N7BLAHNE.js} +5 -1
  33. package/dist/chunk-OYAKCAVY.js +29 -0
  34. package/dist/{chunk-UKVWJRKN.js → chunk-PLDWHR4D.js} +1 -1
  35. package/dist/{chunk-QBQ424EM.js → chunk-TAHX36HZ.js} +545 -246
  36. package/dist/chunk-U5BTYSAL.js +59 -0
  37. package/dist/{chunk-SX5TKJBZ.js → chunk-V45JXOWY.js} +2 -2
  38. package/dist/{chunk-2FLJ63GU.js → chunk-V6ZCNULL.js} +2 -2
  39. package/dist/{chunk-QZANELPX.js → chunk-XWXBJQBE.js} +3 -2
  40. package/dist/cli.js +32 -24
  41. package/dist/{clock-2UOZ6JPU.js → clock-3X4DSC2N.js} +38 -23
  42. package/dist/{cloud-sync-JN3NWKEM.js → cloud-sync-TG3TIX5H.js} +21 -17
  43. package/dist/{config-H2H4UIF7.js → config-OROA5DUA.js} +4 -4
  44. package/dist/connectors/discord-bridge.js +1 -1
  45. package/dist/connectors/slack-bridge.js +1 -1
  46. package/dist/connectors/telegram-bridge.js +1 -1
  47. package/dist/{conversations-3O5O6AS3.js → conversations-HL2JP5GI.js} +5 -5
  48. package/dist/{create-RNLNCORE.js → create-3SEKKI6P.js} +5 -5
  49. package/dist/{create-WBBYI6V7.js → create-UOSOQ2HN.js} +4 -4
  50. package/dist/daemon-client-WOAQXXBM.js +12 -0
  51. package/dist/{daemon-restart-NGFHFAUF.js → daemon-restart-5ABHNXJZ.js} +9 -8
  52. package/dist/daemon.js +2730 -1520
  53. package/dist/{db-RA45JBFG.js → db-PLEDCBHZ.js} +1 -1
  54. package/dist/db-RYX3SS2W.js +9 -0
  55. package/dist/{delete-QTGWEDBI.js → delete-KYOVWR23.js} +3 -3
  56. package/dist/delivery-manager-2BR5NZKF.js +32 -0
  57. package/dist/{delivery-router-FL45JL7N.js → delivery-router-D5ELDMS2.js} +4 -4
  58. package/dist/down-QVFN4UPK.js +15 -0
  59. package/dist/{env-RLYQBOOP.js → env-R34DT7XL.js} +10 -6
  60. package/dist/exec-DVLXKRIO.js +17 -0
  61. package/dist/{export-SUYRLI5Q.js → export-6ZXAXATG.js} +6 -6
  62. package/dist/extension-PM42QCID.js +97 -0
  63. package/dist/extensions-BBGVL5JC.js +38 -0
  64. package/dist/{files-EAMPO2SJ.js → files-VQV2VZQO.js} +5 -5
  65. package/dist/{import-DDUFE7AY.js → import-MK2I2T6F.js} +5 -5
  66. package/dist/isolation-62MKDZN3.js +22 -0
  67. package/dist/{join-I5QEE3LG.js → join-DGYHTJUH.js} +3 -3
  68. package/dist/lib-DYEZMGW7.js +6588 -0
  69. package/dist/{list-DW2VRTOZ.js → list-C644WTHV.js} +16 -8
  70. package/dist/{login-7CHPW2PN.js → login-IIGEQPHL.js} +4 -4
  71. package/dist/{login-RIJF2F4G.js → login-KZQLMAWE.js} +4 -4
  72. package/dist/{logout-5MLHZALK.js → logout-AGTZVRGP.js} +4 -4
  73. package/dist/{logout-UZJRGY4Z.js → logout-KD6GXIJJ.js} +4 -4
  74. package/dist/message-delivery-V3R6NXJP.js +42 -0
  75. package/dist/{mind-2B6M7Y25.js → mind-BI4EPBVZ.js} +25 -19
  76. package/dist/{mind-activity-tracker-NZZT2NTT.js → mind-activity-tracker-2ACNHA7B.js} +5 -5
  77. package/dist/mind-history-WOYFLQAI.js +264 -0
  78. package/dist/{mind-list-WUPMQDYQ.js → mind-list-6VPM7GUQ.js} +4 -4
  79. package/dist/mind-manager-MWW3BTS4.js +32 -0
  80. package/dist/mind-profile-WPG42U5Y.js +47 -0
  81. package/dist/mind-service-VIKZJK2M.js +38 -0
  82. package/dist/{mind-sleep-B7BHJLH7.js → mind-sleep-XDISJY74.js} +4 -4
  83. package/dist/{mind-status-L3EFFRPR.js → mind-status-7FTZWPZF.js} +4 -4
  84. package/dist/{mind-wake-GY3RFX7Y.js → mind-wake-KIIKEI3A.js} +4 -4
  85. package/dist/{package-PK6JUFL3.js → package-V2WHWVG6.js} +9 -5
  86. package/dist/{read-5AMJRO3D.js → read-H5C26YO7.js} +18 -8
  87. package/dist/read-stdin-PIRM6A2Y.js +8 -0
  88. package/dist/{register-V2JZZKFK.js → register-J27WP33N.js} +4 -4
  89. package/dist/{registry-PJ4S5PHQ.js → registry-UYV5S6QT.js} +3 -3
  90. package/dist/{reject-33HEZMZ4.js → reject-OEANJYIA.js} +4 -4
  91. package/dist/{restart-3UCMRUVC.js → restart-V5EGYBJG.js} +4 -4
  92. package/dist/{sandbox-JANNTX6U.js → sandbox-SI5HMBP3.js} +5 -5
  93. package/dist/scheduler-AGG3L2FO.js +32 -0
  94. package/dist/{schema-PA3M5ZKH.js → schema-ETMABTW4.js} +4 -2
  95. package/dist/seed-WNGI6PNW.js +11 -0
  96. package/dist/seed-check-PXTH7YXS.js +32 -0
  97. package/dist/seed-cmd-VENFTGS3.js +36 -0
  98. package/dist/{seed-ALUQ55FF.js → seed-create-663ALOKH.js} +8 -8
  99. package/dist/{sprout-L2GFOVF7.js → seed-sprout-EH3AGKAI.js} +24 -11
  100. package/dist/{send-3MI36LEF.js → send-7FUUUZZH.js} +66 -51
  101. package/dist/{setup-SZIARWI6.js → setup-GGMKENLN.js} +6 -4
  102. package/dist/{setup-WENLVPVP.js → setup-Z3DEVWV7.js} +13 -11
  103. package/dist/{skill-TUVOTW4Z.js → skill-DKNYJS4P.js} +12 -8
  104. package/dist/skills/imagegen/SKILL.md +11 -7
  105. package/dist/skills/imagegen/scripts/imagegen.ts +146 -25
  106. package/dist/skills/orientation/SKILL.md +9 -2
  107. package/dist/skills/plan-coordinator/SKILL.md +60 -0
  108. package/dist/skills/seed-nurture/SKILL.md +42 -0
  109. package/dist/skills/volute-mind/SKILL.md +11 -221
  110. package/dist/skills/volute-mind/references/extensions.md +37 -0
  111. package/dist/skills/volute-mind/references/integrations.md +48 -0
  112. package/dist/skills/volute-mind/references/routing.md +86 -0
  113. package/dist/skills/volute-mind/references/sleep.md +33 -0
  114. package/dist/skills/volute-mind/references/variants.md +31 -0
  115. package/dist/{skills-XNZK6P4K.js → skills-Q6VZ2UGD.js} +11 -6
  116. package/dist/sleep-manager-BJK2ROPX.js +36 -0
  117. package/dist/spirit-4JP4TY4C.js +23 -0
  118. package/dist/{split-STOROBYJ.js → split-3YPMS2CL.js} +3 -3
  119. package/dist/sprout-E3HJIV2Z.js +11 -0
  120. package/dist/{start-K2NCUUCG.js → start-W3TPKX4D.js} +4 -4
  121. package/dist/{status-TCUMUO6M.js → status-4OVFXFEJ.js} +7 -6
  122. package/dist/{stop-H26JZDXF.js → stop-GTT6YWYO.js} +4 -4
  123. package/dist/system-channel-DXD2JBOU.js +36 -0
  124. package/dist/system-chat-TYLOL7SX.js +36 -0
  125. package/dist/{systems-DHBKVYEY.js → systems-AYLO727G.js} +7 -7
  126. package/dist/{tailscale-XHQBZROW.js → tailscale-ZEUK7GKZ.js} +3 -3
  127. package/dist/{template-hash-A6VVKOXJ.js → template-hash-EJRTKE36.js} +1 -1
  128. package/dist/up-PA7F2CXE.js +18 -0
  129. package/dist/{update-QVPRF6GR.js → update-HG4LCUSG.js} +7 -6
  130. package/dist/{update-check-ZD6OOIYQ.js → update-check-X3YG4WVP.js} +4 -4
  131. package/dist/{upgrade-O4Q7WJM3.js → upgrade-YGNIDICG.js} +3 -3
  132. package/dist/{variant-7TGZHOU3.js → variant-MZUMRTQO.js} +1 -1
  133. package/dist/{version-notify-TCKWBZZG.js → version-notify-YCH4UVQ2.js} +23 -20
  134. package/dist/volute-config-WBKYJGYQ.js +10 -0
  135. package/dist/web-assets/assets/index-DiiwC-CZ.css +1 -0
  136. package/dist/web-assets/assets/index-d6y5b9Ij.js +75 -0
  137. package/dist/web-assets/ext-theme.css +48 -9
  138. package/dist/web-assets/index.html +2 -2
  139. package/drizzle/0005_meta_summaries.sql +15 -0
  140. package/drizzle/meta/0005_snapshot.json +7 -0
  141. package/drizzle/meta/_journal.json +7 -0
  142. package/package.json +8 -4
  143. package/packages/extensions/plan/dist/ui/assets/index-CJj2gZnZ.css +1 -0
  144. package/packages/extensions/plan/dist/ui/assets/index-FMEJmvQz.js +61 -0
  145. package/packages/extensions/plan/dist/ui/index.html +14 -0
  146. package/packages/extensions/plan/skills/plan/SKILL.md +43 -0
  147. package/packages/extensions/plan/skills/plan/scripts/plan-hook.sh +37 -0
  148. package/templates/_base/home/VOLUTE.md +12 -19
  149. package/templates/_base/src/lib/context-breakdown.ts +450 -0
  150. package/templates/_base/src/lib/format-prefix.ts +17 -0
  151. package/templates/_base/src/lib/hook-loader.ts +8 -2
  152. package/templates/_base/src/lib/router.ts +75 -33
  153. package/templates/_base/src/lib/routing.ts +4 -1
  154. package/templates/_base/src/lib/startup.ts +16 -8
  155. package/templates/_base/src/lib/types.ts +2 -1
  156. package/templates/_base/src/lib/volute-server.ts +69 -8
  157. package/templates/claude/.init/CLAUDE.md +4 -10
  158. package/templates/claude/package.json.tmpl +1 -0
  159. package/templates/claude/src/agent.ts +100 -32
  160. package/templates/claude/src/lib/hooks/reply-instructions.ts +27 -7
  161. package/templates/claude/src/lib/stream-consumer.ts +40 -2
  162. package/templates/claude/src/server.ts +1 -0
  163. package/templates/codex/package.json.tmpl +1 -0
  164. package/templates/codex/src/agent.ts +81 -8
  165. package/templates/codex/src/server.ts +1 -4
  166. package/templates/pi/package.json.tmpl +1 -0
  167. package/templates/pi/src/agent.ts +115 -36
  168. package/templates/pi/src/lib/event-handler.ts +22 -7
  169. package/templates/pi/src/lib/reply-instructions-extension.ts +23 -4
  170. package/templates/pi/src/lib/subagents.ts +20 -17
  171. package/templates/pi/src/server.ts +2 -5
  172. package/dist/chunk-K3NQKI34.js +0 -10
  173. package/dist/daemon-client-6QXHZ7US.js +0 -12
  174. package/dist/db-F34YLV7D.js +0 -9
  175. package/dist/delivery-manager-SDVXFD4W.js +0 -28
  176. package/dist/down-TB3ESMNP.js +0 -14
  177. package/dist/extension-FQ5D3NCC.js +0 -174
  178. package/dist/extensions-GDYWQXC4.js +0 -29
  179. package/dist/history-FO5PHBQ5.js +0 -128
  180. package/dist/message-delivery-2FIM7QKO.js +0 -32
  181. package/dist/mind-manager-BNCMGYXW.js +0 -28
  182. package/dist/mind-service-AV273WT4.js +0 -34
  183. package/dist/sleep-manager-53DZOWW7.js +0 -32
  184. package/dist/system-chat-NPYFYZVI.js +0 -32
  185. package/dist/up-6I6BHRTO.js +0 -17
  186. package/dist/web-assets/assets/index-Bui7U9Uu.css +0 -1
  187. package/dist/web-assets/assets/index-e36DIo1b.js +0 -73
@@ -7,10 +7,10 @@ import {
7
7
  } from "./chunk-D424ZQGI.js";
8
8
  import {
9
9
  daemonFetch
10
- } from "./chunk-UKVWJRKN.js";
11
- import "./chunk-LRCG2JLP.js";
12
- import "./chunk-RPZZSXV3.js";
13
- import "./chunk-K3NQKI34.js";
10
+ } from "./chunk-PLDWHR4D.js";
11
+ import "./chunk-N7BLAHNE.js";
12
+ import "./chunk-4JSR7YO7.js";
13
+ import "./chunk-7KJOFUNN.js";
14
14
 
15
15
  // src/commands/mind-sleep.ts
16
16
  async function run(args) {
@@ -4,10 +4,10 @@ import {
4
4
  } from "./chunk-NAOW2CLO.js";
5
5
  import {
6
6
  daemonFetch
7
- } from "./chunk-UKVWJRKN.js";
8
- import "./chunk-LRCG2JLP.js";
9
- import "./chunk-RPZZSXV3.js";
10
- import "./chunk-K3NQKI34.js";
7
+ } from "./chunk-PLDWHR4D.js";
8
+ import "./chunk-N7BLAHNE.js";
9
+ import "./chunk-4JSR7YO7.js";
10
+ import "./chunk-7KJOFUNN.js";
11
11
 
12
12
  // src/commands/mind-status.ts
13
13
  async function run(args) {
@@ -7,10 +7,10 @@ import {
7
7
  } from "./chunk-D424ZQGI.js";
8
8
  import {
9
9
  daemonFetch
10
- } from "./chunk-UKVWJRKN.js";
11
- import "./chunk-LRCG2JLP.js";
12
- import "./chunk-RPZZSXV3.js";
13
- import "./chunk-K3NQKI34.js";
10
+ } from "./chunk-PLDWHR4D.js";
11
+ import "./chunk-N7BLAHNE.js";
12
+ import "./chunk-4JSR7YO7.js";
13
+ import "./chunk-7KJOFUNN.js";
14
14
 
15
15
  // src/commands/mind-wake.ts
16
16
  async function run(args) {
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
- import "./chunk-K3NQKI34.js";
2
+ import "./chunk-7KJOFUNN.js";
3
3
 
4
4
  // package.json
5
5
  var package_default = {
6
6
  name: "volute",
7
- version: "0.32.0",
7
+ version: "0.34.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",
@@ -42,12 +42,14 @@ var package_default = {
42
42
  "packages/extensions/notes/dist/ui/",
43
43
  "packages/extensions/notes/skills/",
44
44
  "packages/extensions/pages/dist/ui/",
45
- "packages/extensions/pages/skills/"
45
+ "packages/extensions/pages/skills/",
46
+ "packages/extensions/plan/dist/ui/",
47
+ "packages/extensions/plan/skills/"
46
48
  ],
47
49
  scripts: {
48
50
  dev: "tsx src/cli.ts",
49
51
  build: "npm run build:ext && tsup && cp -r skills dist/skills && npm run build:web",
50
- "build:ext": "npm run build:ui --workspace=packages/extensions/notes && npm run build:ui --workspace=packages/extensions/pages",
52
+ "build:ext": "npm run build:ext-theme --workspace=packages/ui && cp packages/ui/dist/ext-theme.css src/web/ui/public/ext-theme.css && npm run build:ui --workspace=packages/extensions/notes && npm run build:ui --workspace=packages/extensions/pages && npm run build:ui --workspace=packages/extensions/plan",
51
53
  "build:web": "vite build --config src/web/ui/vite.config.ts",
52
54
  "dev:web": "vite --config src/web/ui/vite.config.ts",
53
55
  test: "node --import tsx --import ./test/setup.ts --test --test-force-exit --test-concurrency=4 $(find test -name '*.test.ts' ! -name 'daemon-e2e.test.ts' | sort)",
@@ -57,7 +59,7 @@ var package_default = {
57
59
  "lint:fix": "biome check --write src/ test/",
58
60
  format: "biome format --write src/ test/",
59
61
  typecheck: "tsc --noEmit",
60
- "typecheck:templates": "tsc --noEmit -p templates/claude/tsconfig.json && tsc --noEmit -p templates/pi/tsconfig.json",
62
+ "typecheck:templates": "tsx scripts/typecheck-templates.ts",
61
63
  "lint:templates": "biome check templates/",
62
64
  "typecheck:web": "svelte-check --tsconfig src/web/ui/tsconfig.json",
63
65
  prepare: "lefthook install",
@@ -79,6 +81,7 @@ var package_default = {
79
81
  "drizzle-orm": "^0.45.1",
80
82
  hono: "^4.11.7",
81
83
  libsql: "^0.5.22",
84
+ replicate: "^1.4.0",
82
85
  telegraf: "^4.16.3",
83
86
  zod: "^4.3.6"
84
87
  },
@@ -95,6 +98,7 @@ var package_default = {
95
98
  "drizzle-kit": "^0.31.8",
96
99
  lefthook: "^2.1.0",
97
100
  marked: "^17.0.1",
101
+ sharp: "^0.34.5",
98
102
  svelte: "^5.53.0",
99
103
  tsup: "^8.0.0",
100
104
  tsx: "^4.0.0",
@@ -1,4 +1,8 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ compactTime,
4
+ isCompact
5
+ } from "./chunk-FYCALD4Q.js";
2
6
  import {
3
7
  resolveMindName
4
8
  } from "./chunk-NAOW2CLO.js";
@@ -7,10 +11,10 @@ import {
7
11
  } from "./chunk-D424ZQGI.js";
8
12
  import {
9
13
  daemonFetch
10
- } from "./chunk-UKVWJRKN.js";
11
- import "./chunk-LRCG2JLP.js";
12
- import "./chunk-RPZZSXV3.js";
13
- import "./chunk-K3NQKI34.js";
14
+ } from "./chunk-PLDWHR4D.js";
15
+ import "./chunk-N7BLAHNE.js";
16
+ import "./chunk-4JSR7YO7.js";
17
+ import "./chunk-7KJOFUNN.js";
14
18
 
15
19
  // src/commands/chat/read.ts
16
20
  async function resolveConversationId(mindName, input) {
@@ -61,13 +65,19 @@ async function run(args) {
61
65
  console.error("Unexpected response format from server");
62
66
  process.exit(1);
63
67
  }
68
+ const compact = isCompact();
64
69
  for (const msg of data.items) {
65
70
  const sender = msg.sender_name ?? msg.role;
66
71
  const text = Array.isArray(msg.content) ? msg.content.filter((b) => b.type === "text").map((b) => b.text).join("") : msg.content;
67
- const time = new Date(
68
- msg.created_at.endsWith("Z") ? msg.created_at : `${msg.created_at}Z`
69
- ).toLocaleString();
70
- console.log(`[${time}] ${sender}: ${text}`);
72
+ if (compact) {
73
+ const time = compactTime(msg.created_at);
74
+ console.log(`[${time}] ${sender}: ${text}`);
75
+ } else {
76
+ const time = new Date(
77
+ msg.created_at.endsWith("Z") ? msg.created_at : `${msg.created_at}Z`
78
+ ).toLocaleString();
79
+ console.log(`[${time}] ${sender}: ${text}`);
80
+ }
71
81
  }
72
82
  }
73
83
  export {
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ readStdin
4
+ } from "./chunk-6LXAAQ43.js";
5
+ import "./chunk-7KJOFUNN.js";
6
+ export {
7
+ readStdin
8
+ };
@@ -7,10 +7,10 @@ import {
7
7
  } from "./chunk-D424ZQGI.js";
8
8
  import {
9
9
  daemonFetch
10
- } from "./chunk-UKVWJRKN.js";
11
- import "./chunk-LRCG2JLP.js";
12
- import "./chunk-RPZZSXV3.js";
13
- import "./chunk-K3NQKI34.js";
10
+ } from "./chunk-PLDWHR4D.js";
11
+ import "./chunk-N7BLAHNE.js";
12
+ import "./chunk-4JSR7YO7.js";
13
+ import "./chunk-7KJOFUNN.js";
14
14
 
15
15
  // src/commands/systems/register.ts
16
16
  async function run(args) {
@@ -24,9 +24,9 @@ import {
24
24
  voluteHome,
25
25
  voluteSystemDir,
26
26
  voluteUserHome
27
- } from "./chunk-LRCG2JLP.js";
28
- import "./chunk-RPZZSXV3.js";
29
- import "./chunk-K3NQKI34.js";
27
+ } from "./chunk-N7BLAHNE.js";
28
+ import "./chunk-4JSR7YO7.js";
29
+ import "./chunk-7KJOFUNN.js";
30
30
  export {
31
31
  addMind,
32
32
  addSpirit,
@@ -7,10 +7,10 @@ import {
7
7
  } from "./chunk-D424ZQGI.js";
8
8
  import {
9
9
  daemonFetch
10
- } from "./chunk-UKVWJRKN.js";
11
- import "./chunk-LRCG2JLP.js";
12
- import "./chunk-RPZZSXV3.js";
13
- import "./chunk-K3NQKI34.js";
10
+ } from "./chunk-PLDWHR4D.js";
11
+ import "./chunk-N7BLAHNE.js";
12
+ import "./chunk-4JSR7YO7.js";
13
+ import "./chunk-7KJOFUNN.js";
14
14
 
15
15
  // src/commands/chat/reject.ts
16
16
  async function run(args) {
@@ -8,10 +8,10 @@ import {
8
8
  } from "./chunk-4RQBJWQX.js";
9
9
  import {
10
10
  daemonFetch
11
- } from "./chunk-UKVWJRKN.js";
12
- import "./chunk-LRCG2JLP.js";
13
- import "./chunk-RPZZSXV3.js";
14
- import "./chunk-K3NQKI34.js";
11
+ } from "./chunk-PLDWHR4D.js";
12
+ import "./chunk-N7BLAHNE.js";
13
+ import "./chunk-4JSR7YO7.js";
14
+ import "./chunk-7KJOFUNN.js";
15
15
 
16
16
  // src/commands/restart.ts
17
17
  async function run(args) {
@@ -5,12 +5,12 @@ import {
5
5
  isSandboxEnabled,
6
6
  shellEscape,
7
7
  wrapForSandbox
8
- } from "./chunk-SX5TKJBZ.js";
8
+ } from "./chunk-V45JXOWY.js";
9
9
  import "./chunk-YUIHSKR6.js";
10
- import "./chunk-TSXLLQZW.js";
11
- import "./chunk-LRCG2JLP.js";
12
- import "./chunk-RPZZSXV3.js";
13
- import "./chunk-K3NQKI34.js";
10
+ import "./chunk-6OWJXUAR.js";
11
+ import "./chunk-N7BLAHNE.js";
12
+ import "./chunk-4JSR7YO7.js";
13
+ import "./chunk-7KJOFUNN.js";
14
14
  export {
15
15
  buildDenyRead,
16
16
  initSandbox,
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ Scheduler,
4
+ getScheduler,
5
+ initScheduler
6
+ } from "./chunk-TAHX36HZ.js";
7
+ import "./chunk-CVL5IGIR.js";
8
+ import "./chunk-B2BVAIZ4.js";
9
+ import "./chunk-G53F3JA4.js";
10
+ import "./chunk-N3DNFPVA.js";
11
+ import "./chunk-OYAKCAVY.js";
12
+ import "./chunk-V45JXOWY.js";
13
+ import "./chunk-IS7WJ56Q.js";
14
+ import "./chunk-BTWAGDV5.js";
15
+ import "./chunk-M3K5AARV.js";
16
+ import "./chunk-PB65JZK2.js";
17
+ import "./chunk-BM474GX6.js";
18
+ import "./chunk-E5C7OWZ2.js";
19
+ import "./chunk-XWXBJQBE.js";
20
+ import "./chunk-BFWHBQK4.js";
21
+ import "./chunk-YUIHSKR6.js";
22
+ import "./chunk-U5BTYSAL.js";
23
+ import "./chunk-BDK73LK6.js";
24
+ import "./chunk-6OWJXUAR.js";
25
+ import "./chunk-N7BLAHNE.js";
26
+ import "./chunk-4JSR7YO7.js";
27
+ import "./chunk-7KJOFUNN.js";
28
+ export {
29
+ Scheduler,
30
+ getScheduler,
31
+ initScheduler
32
+ };
@@ -10,11 +10,12 @@ import {
10
10
  minds,
11
11
  sessions,
12
12
  sharedSkills,
13
+ summaries,
13
14
  systemPrompts,
14
15
  turns,
15
16
  users
16
- } from "./chunk-RPZZSXV3.js";
17
- import "./chunk-K3NQKI34.js";
17
+ } from "./chunk-4JSR7YO7.js";
18
+ import "./chunk-7KJOFUNN.js";
18
19
  export {
19
20
  activity,
20
21
  conversationParticipants,
@@ -26,6 +27,7 @@ export {
26
27
  minds,
27
28
  sessions,
28
29
  sharedSkills,
30
+ summaries,
29
31
  systemPrompts,
30
32
  turns,
31
33
  users
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ import "./chunk-7KJOFUNN.js";
3
+
4
+ // src/commands/seed.ts
5
+ async function run(args) {
6
+ console.error("Note: `volute mind seed` is now `volute seed create`");
7
+ await import("./seed-create-663ALOKH.js").then((m) => m.run(args));
8
+ }
9
+ export {
10
+ run
11
+ };
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ parseArgs
4
+ } from "./chunk-D424ZQGI.js";
5
+ import "./chunk-7KJOFUNN.js";
6
+
7
+ // src/commands/seed-check.ts
8
+ async function run(args) {
9
+ const { positional } = parseArgs(args, {});
10
+ const name = positional[0];
11
+ if (!name) {
12
+ console.error("Usage: volute seed check <name>");
13
+ process.exit(1);
14
+ }
15
+ const { daemonFetch } = await import("./daemon-client-WOAQXXBM.js");
16
+ const res = await daemonFetch(`/api/minds/${encodeURIComponent(name)}/seed-check`);
17
+ if (!res.ok) {
18
+ if (res.status === 404) {
19
+ console.log(`Seed "${name}" not found \u2014 it may have been deleted or already sprouted.`);
20
+ } else {
21
+ console.error(`seed check failed for ${name}: HTTP ${res.status}`);
22
+ }
23
+ return;
24
+ }
25
+ const data = await res.json();
26
+ if (data.output) {
27
+ console.log(data.output);
28
+ }
29
+ }
30
+ export {
31
+ run
32
+ };
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env node
2
+ import "./chunk-7KJOFUNN.js";
3
+
4
+ // src/commands/seed-cmd.ts
5
+ async function run(args) {
6
+ const subcommand = args[0];
7
+ switch (subcommand) {
8
+ case "create":
9
+ await import("./seed-create-663ALOKH.js").then((m) => m.run(args.slice(1)));
10
+ break;
11
+ case "sprout":
12
+ await import("./seed-sprout-EH3AGKAI.js").then((m) => m.run(args.slice(1)));
13
+ break;
14
+ case "check":
15
+ await import("./seed-check-PXTH7YXS.js").then((m) => m.run(args.slice(1)));
16
+ break;
17
+ case "--help":
18
+ case "-h":
19
+ case void 0:
20
+ printUsage();
21
+ break;
22
+ default:
23
+ printUsage();
24
+ process.exit(1);
25
+ }
26
+ }
27
+ function printUsage() {
28
+ console.log(`volute seed \u2014 seed lifecycle
29
+
30
+ volute seed create <name> Plant a new seed
31
+ volute seed sprout Complete orientation and become a full mind
32
+ volute seed check <name> Check seed readiness (used by spirit scheduler)`);
33
+ }
34
+ export {
35
+ run
36
+ };
@@ -5,9 +5,9 @@ import {
5
5
  import {
6
6
  parseArgs
7
7
  } from "./chunk-D424ZQGI.js";
8
- import "./chunk-K3NQKI34.js";
8
+ import "./chunk-7KJOFUNN.js";
9
9
 
10
- // src/commands/seed.ts
10
+ // src/commands/seed-create.ts
11
11
  async function chooseModel(daemonFetch) {
12
12
  const res = await daemonFetch("/api/system/ai/models");
13
13
  if (!res.ok) {
@@ -42,25 +42,25 @@ async function run(args) {
42
42
  const name = positional[0];
43
43
  if (!name) {
44
44
  console.error(
45
- "Usage: volute mind seed <name> [--template <name>] [--model <model>] [--description <text>] [--skills <list|none>] [--created-by <username>]"
45
+ "Usage: volute seed create <name> [--template <name>] [--model <model>] [--description <text>] [--skills <list|none>] [--created-by <username>]"
46
46
  );
47
47
  process.exit(1);
48
48
  }
49
49
  const skills = flags.skills === "none" ? [] : flags.skills ? flags.skills.split(",") : void 0;
50
50
  const createdBy = flags["created-by"];
51
- const { daemonFetch } = await import("./daemon-client-6QXHZ7US.js");
52
- const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
51
+ const { daemonFetch } = await import("./daemon-client-WOAQXXBM.js");
52
+ const { getClient, urlOf } = await import("./api-client-XUXOB7LI.js");
53
53
  const client = getClient();
54
54
  let model = flags.model;
55
55
  let template = flags.template;
56
56
  if (!template) {
57
- const { resolveTemplate } = await import("./ai-service-ZIPCV3MX.js");
57
+ const { resolveTemplate } = await import("./ai-service-PSILB5WD.js");
58
58
  template = resolveTemplate(model);
59
59
  }
60
60
  if (template !== "claude" && !model) {
61
61
  if (process.env.VOLUTE_MIND || !process.stdin.isTTY) {
62
- const { getSpiritModel } = await import("./spirit-N4W4UQRH.js");
63
- const { qualifyModelId } = await import("./ai-service-ZIPCV3MX.js");
62
+ const { getSpiritModel } = await import("./spirit-4JP4TY4C.js");
63
+ const { qualifyModelId } = await import("./ai-service-PSILB5WD.js");
64
64
  const spiritModel = getSpiritModel();
65
65
  if (spiritModel) {
66
66
  model = template === "pi" ? qualifyModelId(spiritModel) : spiritModel;
@@ -1,25 +1,26 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  getStandardSkillsWithExtensions
4
- } from "./chunk-D5G5YOPL.js";
4
+ } from "./chunk-N3DNFPVA.js";
5
5
  import "./chunk-YUIHSKR6.js";
6
- import "./chunk-LGB6JBHI.js";
7
- import "./chunk-TSXLLQZW.js";
6
+ import "./chunk-U5BTYSAL.js";
7
+ import "./chunk-BDK73LK6.js";
8
+ import "./chunk-6OWJXUAR.js";
8
9
  import {
9
10
  findMind,
10
11
  mindDir
11
- } from "./chunk-LRCG2JLP.js";
12
- import "./chunk-RPZZSXV3.js";
13
- import "./chunk-K3NQKI34.js";
12
+ } from "./chunk-N7BLAHNE.js";
13
+ import "./chunk-4JSR7YO7.js";
14
+ import "./chunk-7KJOFUNN.js";
14
15
 
15
- // src/commands/sprout.ts
16
+ // src/commands/seed-sprout.ts
16
17
  import { existsSync, readFileSync } from "fs";
17
18
  import { resolve } from "path";
18
19
  var ORIENTATION_MARKER = "You don't have a soul yet";
19
20
  async function run(_args) {
20
21
  const mindName = process.env.VOLUTE_MIND;
21
22
  if (!mindName) {
22
- console.error("volute mind sprout must be run by a mind (VOLUTE_MIND not set)");
23
+ console.error("volute seed sprout must be run by a mind (VOLUTE_MIND not set)");
23
24
  process.exit(1);
24
25
  }
25
26
  const entry = await findMind(mindName);
@@ -49,9 +50,21 @@ async function run(_args) {
49
50
  console.error("Write your MEMORY.md before sprouting.");
50
51
  process.exit(1);
51
52
  }
52
- const { daemonFetch } = await import("./daemon-client-6QXHZ7US.js");
53
- const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
54
- const { mindSkillsDir } = await import("./skills-XNZK6P4K.js");
53
+ const { isImagegenEnabled } = await import("./setup-GGMKENLN.js");
54
+ if (isImagegenEnabled()) {
55
+ const { readVoluteConfig } = await import("./volute-config-WBKYJGYQ.js");
56
+ const config = readVoluteConfig(dir);
57
+ const avatarPath = config?.profile?.avatar;
58
+ if (!avatarPath || !existsSync(resolve(dir, "home", avatarPath))) {
59
+ console.error(
60
+ "Generate an avatar before sprouting. Use `imagegen generate` to create one, then `volute mind profile --avatar <path>` to set it."
61
+ );
62
+ process.exit(1);
63
+ }
64
+ }
65
+ const { daemonFetch } = await import("./daemon-client-WOAQXXBM.js");
66
+ const { getClient, urlOf } = await import("./api-client-XUXOB7LI.js");
67
+ const { mindSkillsDir } = await import("./skills-Q6VZ2UGD.js");
55
68
  const client = getClient();
56
69
  const failedSkills = [];
57
70
  for (const skillId of getStandardSkillsWithExtensions()) {
@@ -1,20 +1,26 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ readStdin
4
+ } from "./chunk-6LXAAQ43.js";
5
+ import {
6
+ isCompact
7
+ } from "./chunk-FYCALD4Q.js";
2
8
  import {
3
9
  getClient,
4
10
  urlOf
5
11
  } from "./chunk-4RQBJWQX.js";
6
12
  import {
7
13
  formatFileSize
8
- } from "./chunk-ALEF47VT.js";
14
+ } from "./chunk-MLOQKQNB.js";
9
15
  import {
10
16
  parseArgs
11
17
  } from "./chunk-D424ZQGI.js";
12
18
  import {
13
19
  daemonFetch
14
- } from "./chunk-UKVWJRKN.js";
15
- import "./chunk-LRCG2JLP.js";
16
- import "./chunk-RPZZSXV3.js";
17
- import "./chunk-K3NQKI34.js";
20
+ } from "./chunk-PLDWHR4D.js";
21
+ import "./chunk-N7BLAHNE.js";
22
+ import "./chunk-4JSR7YO7.js";
23
+ import "./chunk-7KJOFUNN.js";
18
24
 
19
25
  // src/commands/send.ts
20
26
  import { existsSync, readFileSync, statSync } from "fs";
@@ -50,23 +56,6 @@ function parseTarget(target) {
50
56
  };
51
57
  }
52
58
 
53
- // src/lib/read-stdin.ts
54
- import { isatty } from "tty";
55
- async function readStdin() {
56
- if (isatty(0)) return void 0;
57
- const chunks = [];
58
- try {
59
- for await (const chunk of process.stdin) {
60
- chunks.push(chunk);
61
- }
62
- } catch (err) {
63
- console.error(`Failed to read from stdin: ${err instanceof Error ? err.message : String(err)}`);
64
- process.exit(1);
65
- }
66
- const text = Buffer.concat(chunks).toString().replace(/\r?\n$/, "");
67
- return text || void 0;
68
- }
69
-
70
59
  // src/commands/send.ts
71
60
  async function isMind(name) {
72
61
  try {
@@ -285,25 +274,41 @@ To reply to a person, use their username from the message prefix (e.g. volute ch
285
274
  }
286
275
  const { conversationId: convId } = await createRes.json();
287
276
  if (convId) waitConversationId = convId;
288
- const sendRes = await daemonFetch(
289
- urlOf(client.api.minds[":name"].chat.$url({ param: { name: contextMind } })),
290
- {
291
- method: "POST",
292
- headers: { "Content-Type": "application/json" },
293
- body: JSON.stringify({
294
- message: message ?? "",
295
- conversationId: convId,
296
- images,
297
- sender
298
- })
299
- }
300
- );
277
+ const sendRes = await daemonFetch("/api/v1/chat", {
278
+ method: "POST",
279
+ headers: { "Content-Type": "application/json" },
280
+ body: JSON.stringify({
281
+ message: message ?? "",
282
+ conversationId: convId,
283
+ images,
284
+ sender,
285
+ targetMind: contextMind
286
+ })
287
+ });
301
288
  if (!sendRes.ok) {
302
289
  const data = await sendRes.json().catch(() => ({ error: "Unknown error" }));
303
290
  console.error(data.error);
304
291
  process.exit(1);
305
292
  }
306
- if (!flags.wait) console.log("Message sent.");
293
+ if (!flags.wait) {
294
+ let outboundId;
295
+ try {
296
+ const resData = await sendRes.json();
297
+ outboundId = resData.outboundId;
298
+ } catch (err) {
299
+ console.error(
300
+ `Warning: could not read outboundId from response: ${err.message}`
301
+ );
302
+ }
303
+ if (isCompact()) {
304
+ if (outboundId != null) console.log(`[volute:outbound:${outboundId}]`);
305
+ } else {
306
+ console.log(
307
+ `Message sent.${outboundId != null ? `
308
+ [volute:outbound:${outboundId}]` : ""}`
309
+ );
310
+ }
311
+ }
307
312
  } else if (!parsed.isDM && parsed.platform === "volute") {
308
313
  if (!parsed.identifier.startsWith("#")) {
309
314
  console.error(
@@ -316,7 +321,7 @@ To reply to a person, use their username from the message prefix (e.g. volute ch
316
321
  const channelName = parsed.identifier.slice(1);
317
322
  const mindSelf = process.env.VOLUTE_MIND;
318
323
  const sender = flags.sender || mindSelf || userInfo().username;
319
- const channelRes = await daemonFetch(`/api/volute/channels/${encodeURIComponent(channelName)}`);
324
+ const channelRes = await daemonFetch(`/api/v1/channels/${encodeURIComponent(channelName)}`);
320
325
  if (!channelRes.ok) {
321
326
  console.error(`Channel "${channelName}" not found. Create it first or check the name.`);
322
327
  process.exit(1);
@@ -328,25 +333,35 @@ To reply to a person, use their username from the message prefix (e.g. volute ch
328
333
  console.error("No mind is a member of this channel. A mind must join the channel first.");
329
334
  process.exit(1);
330
335
  }
331
- const sendRes = await daemonFetch(
332
- urlOf(client.api.minds[":name"].chat.$url({ param: { name: contextMind } })),
333
- {
334
- method: "POST",
335
- headers: { "Content-Type": "application/json" },
336
- body: JSON.stringify({
337
- message: message ?? "",
338
- conversationId: channelData.id,
339
- images,
340
- sender
341
- })
342
- }
343
- );
336
+ const sendRes = await daemonFetch("/api/v1/chat", {
337
+ method: "POST",
338
+ headers: { "Content-Type": "application/json" },
339
+ body: JSON.stringify({
340
+ message: message ?? "",
341
+ conversationId: channelData.id,
342
+ images,
343
+ sender,
344
+ targetMind: contextMind
345
+ })
346
+ });
344
347
  if (!sendRes.ok) {
345
348
  const data = await sendRes.json().catch(() => ({ error: "Unknown error" }));
346
349
  console.error(data.error);
347
350
  process.exit(1);
348
351
  }
349
- console.log("Message sent.");
352
+ let outboundId;
353
+ try {
354
+ const resData = await sendRes.json();
355
+ outboundId = resData.outboundId;
356
+ } catch (err) {
357
+ console.error(`Warning: could not read outboundId from response: ${err.message}`);
358
+ }
359
+ if (isCompact()) {
360
+ if (outboundId != null) console.log(`[volute:outbound:${outboundId}]`);
361
+ } else {
362
+ console.log(`Message sent.${outboundId != null ? `
363
+ [volute:outbound:${outboundId}]` : ""}`);
364
+ }
350
365
  } else {
351
366
  console.error(
352
367
  `Direct sends to ${parsed.platform} channels are no longer supported.