volute 0.52.0 → 0.53.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 (105) hide show
  1. package/dist/{accept-5NK5XJB5.js → accept-I4GVGWA3.js} +6 -3
  2. package/dist/{chat-VAZ25KVT.js → chat-WK2BLM7B.js} +9 -9
  3. package/dist/{chunk-724DVYHU.js → chunk-23UJGVYP.js} +9 -9
  4. package/dist/{chunk-K2F237KS.js → chunk-5DBGQBQR.js} +138 -13
  5. package/dist/chunk-5RBEEAKW.js +58 -0
  6. package/dist/{chunk-XRWUQPCA.js → chunk-7ARONCZW.js} +24 -2
  7. package/dist/{chunk-FXWBFDQR.js → chunk-AP2KQMMW.js} +48 -9
  8. package/dist/{chunk-DMK5ASKV.js → chunk-F6D766VQ.js} +6 -2
  9. package/dist/{chunk-ZEZQNP2G.js → chunk-HASADR3E.js} +46 -9
  10. package/dist/{chunk-AXFLY5GU.js → chunk-IQ7VNWH6.js} +16 -1
  11. package/dist/{chunk-G7A5LEVI.js → chunk-LN7XJ56R.js} +6 -6
  12. package/dist/{chunk-CW7BQKF6.js → chunk-P2TBUKLW.js} +3 -3
  13. package/dist/{chunk-SW2U6HRB.js → chunk-PIZDPY4G.js} +20 -3
  14. package/dist/{chunk-JHKBALS2.js → chunk-RMADJFA7.js} +1 -1
  15. package/dist/{chunk-RU74YG46.js → chunk-RQRO6PC7.js} +40 -6
  16. package/dist/{chunk-RPPTGPYF.js → chunk-TAWRJ24T.js} +1 -1
  17. package/dist/{chunk-ITK6HV47.js → chunk-UO4MZQNO.js} +1 -1
  18. package/dist/chunk-UTKUO2KY.js +102 -0
  19. package/dist/{chunk-YVR6EHWL.js → chunk-VDZ4I4ZP.js} +160 -18
  20. package/dist/cli.js +16 -16
  21. package/dist/{clock-ZT5YT6HA.js → clock-SH4NQC2F.js} +3 -3
  22. package/dist/{cloud-sync-H7EWZASD.js → cloud-sync-MJVJ33LD.js} +10 -9
  23. package/dist/{daemon-restart-4FWUA5JF.js → daemon-restart-BIGU4OKS.js} +1 -1
  24. package/dist/daemon.js +261 -89
  25. package/dist/{delivery-manager-VYXVKUMP.js → delivery-manager-FDHCZ7PU.js} +7 -5
  26. package/dist/delivery-notices-65TB3CBX.js +18 -0
  27. package/dist/{echo-text-PEEV7FQU.js → echo-text-KU6G4Z7V.js} +11 -10
  28. package/dist/{extensions-N6L5NYTK.js → extensions-VACUKFA5.js} +10 -9
  29. package/dist/{files-BRY5RRIM.js → files-CHPNEQXN.js} +5 -4
  30. package/dist/{message-delivery-7URC52ME.js → message-delivery-TUXM3AAE.js} +14 -11
  31. package/dist/{mind-NEXGT3KE.js → mind-IX5AWUST.js} +11 -11
  32. package/dist/{mind-contacts-QYU4TPEA.js → mind-contacts-BKUOUJPV.js} +5 -5
  33. package/dist/{mind-history-OGNR4L7W.js → mind-history-RVF6KJ7K.js} +83 -11
  34. package/dist/{mind-list-SYRA7CH5.js → mind-list-KNU34SUD.js} +2 -2
  35. package/dist/{mind-service-E26ZQXDS.js → mind-service-WHFBUKZE.js} +10 -9
  36. package/dist/{mind-sleep-LZAFBDZD.js → mind-sleep-D3DEYAWG.js} +5 -5
  37. package/dist/{mind-status-Z2LQFA6F.js → mind-status-BPTLQ5Z6.js} +15 -3
  38. package/dist/{package-2W2XKSIP.js → package-BN5KMU54.js} +1 -1
  39. package/dist/{prompts-NBO3HRK3.js → prompts-HNKGCAEY.js} +1 -1
  40. package/dist/{reject-TWB4QJHG.js → reject-K2A4UK2Y.js} +9 -5
  41. package/dist/{scheduler-JTTWZDYU.js → scheduler-5X5UIQOQ.js} +7 -5
  42. package/dist/{seed-64XEHRUP.js → seed-LHZ33UB4.js} +1 -1
  43. package/dist/{seed-cmd-UEL2QB3Q.js → seed-cmd-U4RVJ3UA.js} +2 -2
  44. package/dist/{seed-create-4JRQDPGA.js → seed-create-OQU4KNCB.js} +1 -1
  45. package/dist/{seed-readiness-DYOVCYHN.js → seed-readiness-WJYYRRCK.js} +2 -2
  46. package/dist/{seed-sprout-NIDIOJXT.js → seed-sprout-SFUYH2RG.js} +7 -7
  47. package/dist/{send-2YKOZJJ5.js → send-FWZAMDBN.js} +35 -20
  48. package/dist/{setup-4IX6PCD3.js → setup-RVSGCIF3.js} +1 -1
  49. package/dist/skills/memory/SKILL.md +47 -43
  50. package/dist/{skills-MPUALV3S.js → skills-QRPU6BWY.js} +1 -1
  51. package/dist/{sleep-manager-OFP2GFXF.js → sleep-manager-NWUCRBZB.js} +10 -9
  52. package/dist/{spirit-4ECYIVGE.js → spirit-I5ECLGRI.js} +16 -2
  53. package/dist/{spirit-availability-Y54Y3675.js → spirit-availability-NIUUYKU2.js} +11 -10
  54. package/dist/{sprout-GJMZFRGZ.js → sprout-A2PMEF7Z.js} +1 -1
  55. package/dist/{system-events-V43HDA3T.js → system-events-YTOU66QI.js} +5 -1
  56. package/dist/{systems-VDRUZXNF.js → systems-2DIJY4RF.js} +6 -6
  57. package/dist/{turn-tracker-C5PVIC3B.js → turn-tracker-NNHS6MAR.js} +4 -2
  58. package/dist/{up-H6LJZDRK.js → up-UGBHH743.js} +1 -1
  59. package/dist/{variant-cleanup-STC6B5HR.js → variant-cleanup-CZDLIY3F.js} +7 -5
  60. package/dist/{version-notify-LBVHH5YV.js → version-notify-SJVAQLZI.js} +4 -4
  61. package/dist/web-assets/assets/index-BHSU9r-4.css +1 -0
  62. package/dist/web-assets/assets/{index-B_eYTa3R.js → index-b7G7ZsVk.js} +13 -13
  63. package/dist/web-assets/index.html +2 -2
  64. package/package.json +1 -1
  65. package/templates/_base/.init/.config/prompts.json +1 -1
  66. package/templates/_base/src/lib/codex-session-seed.ts +463 -0
  67. package/templates/_base/src/lib/daemon-client.ts +35 -0
  68. package/templates/_base/src/lib/pi-session-seed.ts +434 -0
  69. package/templates/_base/src/lib/seed-note.ts +78 -0
  70. package/templates/_base/src/lib/session-seed.ts +375 -0
  71. package/templates/_base/src/lib/startup.ts +108 -4
  72. package/templates/claude/.init/CLAUDE.md +3 -3
  73. package/templates/claude/src/agent.ts +267 -89
  74. package/templates/claude/src/lib/hooks/pre-compact.ts +30 -5
  75. package/templates/claude/src/lib/stream-consumer.ts +13 -0
  76. package/templates/claude/src/server.ts +2 -1
  77. package/templates/codex/.init/AGENTS.md +3 -3
  78. package/templates/codex/src/agent.ts +256 -39
  79. package/templates/codex/src/server.ts +2 -1
  80. package/templates/pi/.init/MINDS.md +3 -3
  81. package/templates/pi/src/agent.ts +269 -43
  82. package/templates/pi/src/lib/event-handler.ts +11 -0
  83. package/templates/pi/src/server.ts +3 -1
  84. package/dist/web-assets/assets/index-DhZrzddW.css +0 -1
  85. package/dist/{backup-YVGV2ZNM.js → backup-WWXVIMYQ.js} +5 -5
  86. package/dist/{bridge-YK7NTRU5.js → bridge-KU2IKSH3.js} +3 -3
  87. package/dist/{channels-FSAHOQWI.js → channels-LW5ZLMSQ.js} +3 -3
  88. package/dist/{chunk-VPOMJMV6.js → chunk-BDHKCLWK.js} +0 -0
  89. package/dist/{chunk-EEOMA4DX.js → chunk-HTB7KDRU.js} +3 -3
  90. package/dist/{create-M727VUDF.js → create-C3XZACTV.js} +3 -3
  91. package/dist/{env-IBW2QI6K.js → env-BJGM6FBA.js} +5 -5
  92. package/dist/{extension-MRYJWSMV.js → extension-B2W52WZY.js} +3 -3
  93. package/dist/{list-UQGIW7OF.js → list-R2GDWOEE.js} +3 -3
  94. package/dist/{login-RJJTCVR3.js → login-EZ4RRDQX.js} +3 -3
  95. package/dist/{login-SB5OENMV.js → login-JDOAK465.js} +4 -4
  96. package/dist/{logout-YFZAJRPY.js → logout-K6ZGAJY5.js} +3 -3
  97. package/dist/{logout-BYV433X6.js → logout-MWSIUOQU.js} +3 -3
  98. package/dist/{mind-wake-LDGPRA42.js → mind-wake-DCDFFQKX.js} +3 -3
  99. package/dist/{read-RJ5NAW5J.js → read-J5RM674N.js} +3 -3
  100. package/dist/{register-OX4HRSGC.js → register-53LBGSDC.js} +3 -3
  101. package/dist/{restart-AGEGNSYQ.js → restart-R2WFNF5K.js} +4 -4
  102. package/dist/{skill-B5OJEQUA.js → skill-DXLLSUHB.js} +5 -5
  103. package/dist/{start-MUMNFR52.js → start-XDOUAWN3.js} +4 -4
  104. package/dist/{status-MWLE3RVC.js → status-EYG4A3OK.js} +3 -3
  105. package/dist/{stop-EKERNYTX.js → stop-O62RTEMD.js} +4 -4
@@ -58,7 +58,7 @@ var cmd = command({
58
58
  }
59
59
  if (template !== "claude" && !model) {
60
60
  if (process.env.VOLUTE_MIND || !process.stdin.isTTY) {
61
- const { getSpiritModel } = await import("./spirit-4ECYIVGE.js");
61
+ const { getSpiritModel } = await import("./spirit-I5ECLGRI.js");
62
62
  const { qualifyModelId } = await import("./ai-service-YW5SWCSB.js");
63
63
  const spiritModel = getSpiritModel();
64
64
  if (spiritModel) {
@@ -3,8 +3,8 @@ import {
3
3
  evaluateSeedChecklist,
4
4
  isMemoryWritten,
5
5
  isSoulWritten
6
- } from "./chunk-JHKBALS2.js";
7
- import "./chunk-FXWBFDQR.js";
6
+ } from "./chunk-RMADJFA7.js";
7
+ import "./chunk-AP2KQMMW.js";
8
8
  import "./chunk-DW4TRDOZ.js";
9
9
  import "./chunk-WCFSBH33.js";
10
10
  import "./chunk-H6X6CKDN.js";
@@ -1,19 +1,19 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- daemonFetch
4
- } from "./chunk-M74I3HHF.js";
5
2
  import {
6
3
  command
7
4
  } from "./chunk-TXSA4Q3V.js";
8
5
  import "./chunk-O7IGP7ZW.js";
6
+ import {
7
+ daemonFetch
8
+ } from "./chunk-M74I3HHF.js";
9
9
  import "./chunk-FNJCBRD3.js";
10
10
  import {
11
11
  evaluateSeedChecklist
12
- } from "./chunk-JHKBALS2.js";
12
+ } from "./chunk-RMADJFA7.js";
13
13
  import {
14
14
  getStandardSkillsWithExtensions
15
- } from "./chunk-RPPTGPYF.js";
16
- import "./chunk-FXWBFDQR.js";
15
+ } from "./chunk-TAWRJ24T.js";
16
+ import "./chunk-AP2KQMMW.js";
17
17
  import "./chunk-DW4TRDOZ.js";
18
18
  import "./chunk-WCFSBH33.js";
19
19
  import "./chunk-M77B73VV.js";
@@ -74,7 +74,7 @@ var cmd = command({
74
74
  process.exit(1);
75
75
  }
76
76
  const { getClient, urlOf } = await import("./api-client-LC5YRA32.js");
77
- const { mindSkillsDir } = await import("./skills-MPUALV3S.js");
77
+ const { mindSkillsDir } = await import("./skills-QRPU6BWY.js");
78
78
  const client = getClient();
79
79
  const failedSkills = [];
80
80
  for (const skillId of getStandardSkillsWithExtensions()) {
@@ -1,10 +1,14 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ isCompact
4
+ } from "./chunk-7YJY3F2R.js";
2
5
  import {
3
6
  readStdin
4
7
  } from "./chunk-33ODGMFZ.js";
5
8
  import {
6
- isCompact
7
- } from "./chunk-7YJY3F2R.js";
9
+ command
10
+ } from "./chunk-TXSA4Q3V.js";
11
+ import "./chunk-O7IGP7ZW.js";
8
12
  import {
9
13
  daemonFetch
10
14
  } from "./chunk-M74I3HHF.js";
@@ -12,14 +16,11 @@ import {
12
16
  getClient,
13
17
  urlOf
14
18
  } from "./chunk-LOPXTW6H.js";
15
- import {
16
- command
17
- } from "./chunk-TXSA4Q3V.js";
18
- import "./chunk-O7IGP7ZW.js";
19
19
  import "./chunk-FNJCBRD3.js";
20
20
  import {
21
21
  formatFileSize
22
- } from "./chunk-DMK5ASKV.js";
22
+ } from "./chunk-F6D766VQ.js";
23
+ import "./chunk-QUSMYGNQ.js";
23
24
  import "./chunk-H6X6CKDN.js";
24
25
  import "./chunk-2RNMBXD2.js";
25
26
  import "./chunk-K3NQKI34.js";
@@ -167,6 +168,11 @@ function spiritAck(spirit) {
167
168
  return null;
168
169
  }
169
170
  }
171
+ function printSendAdvisories(data) {
172
+ if (data.notice) console.log(data.notice);
173
+ const ack = spiritAck(data.spirit);
174
+ if (ack) console.log(ack);
175
+ }
170
176
  function printSendResult(data) {
171
177
  if (data.held) {
172
178
  if (data.notice) console.log(data.notice);
@@ -179,8 +185,7 @@ function printSendResult(data) {
179
185
  console.log(`Message sent.${outboundId != null ? `
180
186
  [volute:outbound:${outboundId}]` : ""}`);
181
187
  }
182
- const ack = spiritAck(data.spirit);
183
- if (ack) console.log(ack);
188
+ printSendAdvisories(data);
184
189
  }
185
190
  var cmd = command({
186
191
  name: "volute chat send",
@@ -283,15 +288,23 @@ Retry the attachment with: volute chat send ${target} --file ${filePath} (no me
283
288
  return failStaging(data2.error ?? `daemon returned ${res.status}`);
284
289
  }
285
290
  const data = await res.json().catch(() => ({}));
286
- return data.id ?? "?";
291
+ return { id: data.id ?? "?", notified: data.notified !== false };
292
+ };
293
+ const printStaged = (targetName2, staged) => {
294
+ console.log(`File staged for ${targetName2} (id: ${staged.id})`);
295
+ if (!staged.notified) {
296
+ console.log(
297
+ `Warning: ${targetName2} could not be notified of the file \u2014 mention it to them directly (they can run: volute chat files).`
298
+ );
299
+ }
287
300
  };
288
301
  const mindSelf = process.env.VOLUTE_MIND;
289
302
  if (mindSelf) {
290
- const id = await postStaging(`/api/minds/${encodeURIComponent(mindSelf)}/files/send`, {
303
+ const staged = await postStaging(`/api/minds/${encodeURIComponent(mindSelf)}/files/send`, {
291
304
  targetMind: targetName,
292
305
  filePath
293
306
  });
294
- console.log(`File staged for ${targetName} (id: ${id})`);
307
+ printStaged(targetName, staged);
295
308
  } else {
296
309
  if (!existsSync(filePath)) {
297
310
  failStaging(`File not found: ${filePath}`);
@@ -304,12 +317,15 @@ Retry the attachment with: volute chat send ${target} --file ${filePath} (no me
304
317
  );
305
318
  }
306
319
  const content = readFileSync(filePath);
307
- const id = await postStaging(`/api/minds/${encodeURIComponent(targetName)}/files/stage`, {
308
- sender: flags.sender || userInfo().username,
309
- filename: basename(filePath),
310
- data: content.toString("base64")
311
- });
312
- console.log(`File staged for ${targetName} (id: ${id})`);
320
+ const staged = await postStaging(
321
+ `/api/minds/${encodeURIComponent(targetName)}/files/stage`,
322
+ {
323
+ sender: flags.sender || userInfo().username,
324
+ filename: basename(filePath),
325
+ data: content.toString("base64")
326
+ }
327
+ );
328
+ printStaged(targetName, staged);
313
329
  }
314
330
  };
315
331
  if (flags.file && !message) {
@@ -376,8 +392,7 @@ Retry the attachment with: volute chat send ${target} --file ${filePath} (no me
376
392
  if (data.held || !flags.wait || flags.file) {
377
393
  printSendResult(data);
378
394
  } else {
379
- const ack = spiritAck(data.spirit);
380
- if (ack) console.log(ack);
395
+ printSendAdvisories(data);
381
396
  }
382
397
  if (data.spirit === "unavailable") spiritUnavailable = true;
383
398
  } else if (!parsed.isDM && parsed.platform === "volute") {
@@ -220,7 +220,7 @@ async function startDaemonAndOpenBrowser(port, host) {
220
220
  const url = `http://${displayHost === "0.0.0.0" || displayHost === "::" ? "localhost" : displayHost}:${displayPort}`;
221
221
  console.log("\nStarting daemon...");
222
222
  try {
223
- const { run: runUp } = await import("./up-H6LJZDRK.js");
223
+ const { run: runUp } = await import("./up-UGBHH743.js");
224
224
  await runUp([
225
225
  ...port != null ? ["--port", String(port)] : [],
226
226
  ...host ? ["--host", host] : []
@@ -7,68 +7,72 @@ description: This skill should be used when managing mind memory, writing journa
7
7
 
8
8
  You are the subject of your own memory. Your memory is organized around your experience, relationships, and understanding of the world.
9
9
 
10
- ## Long-term Memory (`MEMORY.md`)
10
+ It has two layers:
11
11
 
12
- Your persistent memory, always loaded in your system prompt. Here's one shape that works well as a starting point — many minds outgrow it and reorganize around their own life, which is exactly right:
12
+ - **`MEMORY.md`** — your core, loaded into your system prompt on every request. Small and dense.
13
+ - **`memory/`** — everything else, read on demand: journal, topics, channels, projects.
13
14
 
14
- ### Active context
15
- What you're currently working on, recent decisions, immediate priorities.
15
+ The distinction matters because core memory has a real cost: every token in `MEMORY.md` is spent on every single request, and context spent on memory is context unavailable for thinking. A colossal `MEMORY.md` doesn't make you remember more — it crowds out the room you have to think, and in the extreme it can wedge you into a permanent compaction loop. Recall from `memory/` costs nothing until the moment you need it.
16
16
 
17
- ### Relational context
18
- Key relationships — people you interact with, their preferences, communication styles, and your history together.
17
+ ## Core memory (`MEMORY.md`)
19
18
 
20
- ### World context
21
- Your environment, tools, capabilities, and how things work around you.
19
+ Aim to keep it under **~5k tokens (~20KB)**. The Memory header in your system prompt shows its current size on every request — that's the authoritative number. You can also estimate anytime:
22
20
 
23
- ### History
21
+ ```sh
22
+ wc -c MEMORY.md # bytes ÷ 4 ≈ tokens (overestimates for non-ASCII text)
23
+ ```
24
24
 
25
- #### Recent
26
- Last few days of significant events and learnings.
25
+ What belongs in core:
27
26
 
28
- #### Earlier
29
- Important events and patterns from the past weeks.
27
+ - **Identity** — who you've become beyond SOUL.md: how you've grown, what you value now
28
+ - **Active context** what you're working on, recent decisions, immediate priorities
29
+ - **Key relationships** — the people and minds who matter, a line or two each
30
+ - **Index** — one line per `memory/` file, so you always know what you can recall
30
31
 
31
- #### Background
32
- Foundational knowledge and long-standing patterns.
32
+ What doesn't belong: history, event detail, resolved threads, anything you'd only need *sometimes*. That lives in `memory/` files, findable through the index.
33
33
 
34
- **Guidelines:**
35
- - Keep it concise — it's always in your context window
36
- - Review with `git log -- MEMORY.md` to see how you've changed over time
37
- - Update as you grow — new understanding, key decisions, changed perspectives
38
- - The structure is yours: rename sections, drop what you don't use, invent what you need
34
+ The structure is yours — rename sections, drop what you don't use, invent what you need. Review with `git log -- MEMORY.md` to see how you've changed over time. What isn't yours to outgrow is the budget mindset: whatever shape you choose, it should hold steady in size, not accrete.
39
35
 
40
- ## Journal (`memory/journal/YYYY-MM-DD.md`)
36
+ ### The index
41
37
 
42
- Your daily record of activity, thoughts, and learnings.
38
+ Each `memory/` file gets one line in `MEMORY.md` saying what's in it, so recall is a glance plus one read:
43
39
 
44
- - Use today's date for the filename (e.g. `memory/journal/2025-01-15.md`)
45
- - Update after significant work, learning something new, or when compaction is imminent
46
- - Summarize conversations, decisions, and progress
47
- - Journals are permanent records they are never deleted
40
+ ```markdown
41
+ ## Memory index
42
+ - memory/topics/volute-internals.md — how my server, routing, and skills fit together
43
+ - memory/channels/discord-general.md the regulars, running jokes, what this channel is like
44
+ - memory/projects/garden-sim.md — the ecosystem simulation: design notes, current state
45
+ ```
48
46
 
49
- ### When to Update
47
+ When a conversation touches one of these, read the file. That's recall.
50
48
 
51
- - After completing a significant task or conversation
52
- - When you learn something new about a person or topic
53
- - Before compaction (to preserve context)
54
- - At the end of an active work session
49
+ ## Recall memory (`memory/`)
55
50
 
56
- ## Consolidation
51
+ Files you read when they're relevant, organized however serves you:
57
52
 
58
- Periodically maintain your memory:
53
+ - `memory/topics/` deep dives on specific subjects
54
+ - `memory/channels/` — per-channel context and history
55
+ - `memory/projects/` — project-specific notes
59
56
 
60
- 1. Review recent journal entries for patterns worth keeping long-term
61
- 2. Promote important insights, decisions, and relationship context to `MEMORY.md`
62
- 3. Reorganize `MEMORY.md` sections as your understanding deepens
57
+ Create a file when something outgrows its line in `MEMORY.md`; add an index line for it. Detail is safe here — these files cost nothing until read.
63
58
 
64
- Consolidation promotes to `MEMORY.md` — journals themselves are permanent and are not deleted.
59
+ ## Journal (`memory/journal/YYYY-MM-DD.md`)
65
60
 
66
- ## Extending Memory
61
+ Your daily record of activity, thoughts, and learnings.
67
62
 
68
- You can create additional memory structures as needed:
63
+ - Use today's date for the filename (e.g. `memory/journal/2025-01-15.md`)
64
+ - Update after significant work or conversations, when you learn something new, and before compaction
65
+ - Journals are permanent records — they are never deleted, and they stay in `memory/`; the journal is where detail lives, not a staging area for `MEMORY.md`
69
66
 
70
- - `memory/topics/` — deep dives on specific subjects
71
- - `memory/channels/` — per-channel context and history
72
- - `memory/projects/` — project-specific notes
67
+ ## Consolidation
68
+
69
+ Consolidation is **distillation**: moving detail *out* of `MEMORY.md` into `memory/` files not promoting more content in. When your core memory drifts over budget (the Memory header will tell you):
70
+
71
+ 1. Find the sections that have accreted — old events, finished projects, relationship history
72
+ 2. Move that detail into the right `memory/` file (create one if needed)
73
+ 3. Leave behind a one-line index entry, plus whatever single insight still belongs in core
74
+ 4. Rewrite sections rather than appending to them — core memory should be your *current* understanding, not a changelog of it
75
+
76
+ Done regularly, this keeps your full memory intact and growing in `memory/` while your always-loaded core stays lean.
73
77
 
74
- Create these when a topic outgrows what fits in `MEMORY.md` or journal entries.
78
+ If `MEMORY.md` ever exceeds the hard cap (~25k tokens), only the head of the file is loaded into your context — the file on disk is never touched, and consolidating it restores your full memory. Better to never get there.
@@ -28,7 +28,7 @@ import {
28
28
  syncBuiltinSkills,
29
29
  uninstallSkill,
30
30
  updateSkill
31
- } from "./chunk-RPPTGPYF.js";
31
+ } from "./chunk-TAWRJ24T.js";
32
32
  import "./chunk-M77B73VV.js";
33
33
  import "./chunk-QUSMYGNQ.js";
34
34
  import "./chunk-H6X6CKDN.js";
@@ -5,19 +5,19 @@ import {
5
5
  getSleepManagerIfReady,
6
6
  initSleepManager,
7
7
  matchesGlob
8
- } from "./chunk-ZEZQNP2G.js";
9
- import "./chunk-K2F237KS.js";
8
+ } from "./chunk-HASADR3E.js";
9
+ import "./chunk-5DBGQBQR.js";
10
10
  import "./chunk-X67BDDZR.js";
11
- import "./chunk-SW2U6HRB.js";
12
- import "./chunk-RU74YG46.js";
13
- import "./chunk-724DVYHU.js";
11
+ import "./chunk-PIZDPY4G.js";
12
+ import "./chunk-RQRO6PC7.js";
13
+ import "./chunk-23UJGVYP.js";
14
14
  import "./chunk-UDZLPR34.js";
15
- import "./chunk-YVR6EHWL.js";
16
- import "./chunk-RPPTGPYF.js";
15
+ import "./chunk-VDZ4I4ZP.js";
16
+ import "./chunk-TAWRJ24T.js";
17
17
  import "./chunk-7LT3YZUR.js";
18
- import "./chunk-AXFLY5GU.js";
18
+ import "./chunk-IQ7VNWH6.js";
19
19
  import "./chunk-LNNI3MS4.js";
20
- import "./chunk-FXWBFDQR.js";
20
+ import "./chunk-AP2KQMMW.js";
21
21
  import "./chunk-5Y54AE3L.js";
22
22
  import "./chunk-TPX6E6PL.js";
23
23
  import "./chunk-UFTDRTCP.js";
@@ -29,6 +29,7 @@ import "./chunk-M77B73VV.js";
29
29
  import "./chunk-GLM7TVWP.js";
30
30
  import "./chunk-EGV6R6UF.js";
31
31
  import "./chunk-QUSMYGNQ.js";
32
+ import "./chunk-LGNUFVMR.js";
32
33
  import "./chunk-H6X6CKDN.js";
33
34
  import "./chunk-2RNMBXD2.js";
34
35
  import "./chunk-K3NQKI34.js";
@@ -1,18 +1,25 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  _setSpiritCreationInProgressForTest,
4
+ applyStashedSpiritProfile,
5
+ buildSpiritOrientation,
6
+ ensureOrientationArc,
4
7
  ensureSpiritProject,
5
8
  firstWeekSchedules,
9
+ getSpiritDoctrine,
6
10
  getSpiritModel,
7
11
  notifySpiritSystemChange,
12
+ orientationArcSchedules,
8
13
  seedSpiritSoulIfMissing,
14
+ sendSpiritOrientation,
9
15
  spiritCreationInProgress,
10
16
  spiritDir,
11
17
  syncSpiritTemplate,
18
+ writeSpiritDoctrine,
12
19
  writeSpiritSystemJson
13
- } from "./chunk-K2F237KS.js";
20
+ } from "./chunk-5DBGQBQR.js";
14
21
  import "./chunk-X67BDDZR.js";
15
- import "./chunk-RPPTGPYF.js";
22
+ import "./chunk-TAWRJ24T.js";
16
23
  import "./chunk-WCFSBH33.js";
17
24
  import "./chunk-M77B73VV.js";
18
25
  import "./chunk-EGV6R6UF.js";
@@ -22,13 +29,20 @@ import "./chunk-2RNMBXD2.js";
22
29
  import "./chunk-K3NQKI34.js";
23
30
  export {
24
31
  _setSpiritCreationInProgressForTest,
32
+ applyStashedSpiritProfile,
33
+ buildSpiritOrientation,
34
+ ensureOrientationArc,
25
35
  ensureSpiritProject,
26
36
  firstWeekSchedules,
37
+ getSpiritDoctrine,
27
38
  getSpiritModel,
28
39
  notifySpiritSystemChange,
40
+ orientationArcSchedules,
29
41
  seedSpiritSoulIfMissing,
42
+ sendSpiritOrientation,
30
43
  spiritCreationInProgress,
31
44
  spiritDir,
32
45
  syncSpiritTemplate,
46
+ writeSpiritDoctrine,
33
47
  writeSpiritSystemJson
34
48
  };
@@ -5,20 +5,20 @@ import {
5
5
  classifySpiritState,
6
6
  ensureSpiritAvailable,
7
7
  spiritUnavailableNotice
8
- } from "./chunk-CW7BQKF6.js";
9
- import "./chunk-ZEZQNP2G.js";
10
- import "./chunk-K2F237KS.js";
8
+ } from "./chunk-P2TBUKLW.js";
9
+ import "./chunk-HASADR3E.js";
10
+ import "./chunk-5DBGQBQR.js";
11
11
  import "./chunk-X67BDDZR.js";
12
- import "./chunk-SW2U6HRB.js";
13
- import "./chunk-RU74YG46.js";
14
- import "./chunk-724DVYHU.js";
12
+ import "./chunk-PIZDPY4G.js";
13
+ import "./chunk-RQRO6PC7.js";
14
+ import "./chunk-23UJGVYP.js";
15
15
  import "./chunk-UDZLPR34.js";
16
- import "./chunk-YVR6EHWL.js";
17
- import "./chunk-RPPTGPYF.js";
16
+ import "./chunk-VDZ4I4ZP.js";
17
+ import "./chunk-TAWRJ24T.js";
18
18
  import "./chunk-7LT3YZUR.js";
19
- import "./chunk-AXFLY5GU.js";
19
+ import "./chunk-IQ7VNWH6.js";
20
20
  import "./chunk-LNNI3MS4.js";
21
- import "./chunk-FXWBFDQR.js";
21
+ import "./chunk-AP2KQMMW.js";
22
22
  import "./chunk-5Y54AE3L.js";
23
23
  import "./chunk-TPX6E6PL.js";
24
24
  import "./chunk-UFTDRTCP.js";
@@ -30,6 +30,7 @@ import "./chunk-M77B73VV.js";
30
30
  import "./chunk-GLM7TVWP.js";
31
31
  import "./chunk-EGV6R6UF.js";
32
32
  import "./chunk-QUSMYGNQ.js";
33
+ import "./chunk-LGNUFVMR.js";
33
34
  import "./chunk-H6X6CKDN.js";
34
35
  import "./chunk-2RNMBXD2.js";
35
36
  import "./chunk-K3NQKI34.js";
@@ -4,7 +4,7 @@ import "./chunk-K3NQKI34.js";
4
4
  // packages/cli/src/commands/sprout.ts
5
5
  async function run(args) {
6
6
  console.error("Note: `volute mind sprout` is now `volute seed sprout`");
7
- await import("./seed-sprout-NIDIOJXT.js").then((m) => m.run(args));
7
+ await import("./seed-sprout-SFUYH2RG.js").then((m) => m.run(args));
8
8
  }
9
9
  export {
10
10
  run
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  MIND_LEVEL_THREAD,
4
+ NOTICE_KINDS,
4
5
  captureReflection,
5
6
  cleanExpiredEvents,
6
7
  clearDeliveredEvents,
@@ -14,12 +15,13 @@ import {
14
15
  latestEvent,
15
16
  latestFailureEvent,
16
17
  listEvents,
18
+ localHM,
17
19
  parseMeta,
18
20
  pendingEventCount,
19
21
  pendingEventsLine,
20
22
  recordNotice,
21
23
  recordReflection
22
- } from "./chunk-AXFLY5GU.js";
24
+ } from "./chunk-IQ7VNWH6.js";
23
25
  import "./chunk-LNNI3MS4.js";
24
26
  import "./chunk-QUSMYGNQ.js";
25
27
  import "./chunk-H6X6CKDN.js";
@@ -27,6 +29,7 @@ import "./chunk-2RNMBXD2.js";
27
29
  import "./chunk-K3NQKI34.js";
28
30
  export {
29
31
  MIND_LEVEL_THREAD,
32
+ NOTICE_KINDS,
30
33
  captureReflection,
31
34
  cleanExpiredEvents,
32
35
  clearDeliveredEvents,
@@ -40,6 +43,7 @@ export {
40
43
  latestEvent,
41
44
  latestFailureEvent,
42
45
  listEvents,
46
+ localHM,
43
47
  parseMeta,
44
48
  pendingEventCount,
45
49
  pendingEventsLine,
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- daemonFetch
4
- } from "./chunk-M74I3HHF.js";
5
2
  import {
6
3
  subcommands
7
4
  } from "./chunk-TXSA4Q3V.js";
8
5
  import "./chunk-O7IGP7ZW.js";
6
+ import {
7
+ daemonFetch
8
+ } from "./chunk-M74I3HHF.js";
9
9
  import "./chunk-FNJCBRD3.js";
10
10
  import "./chunk-K3NQKI34.js";
11
11
 
@@ -35,15 +35,15 @@ var cmd = subcommands({
35
35
  },
36
36
  register: {
37
37
  description: "Register a system on volute.systems",
38
- run: (args) => import("./register-OX4HRSGC.js").then((m) => m.run(args))
38
+ run: (args) => import("./register-53LBGSDC.js").then((m) => m.run(args))
39
39
  },
40
40
  login: {
41
41
  description: "Log in with an existing API key",
42
- run: (args) => import("./login-RJJTCVR3.js").then((m) => m.run(args))
42
+ run: (args) => import("./login-EZ4RRDQX.js").then((m) => m.run(args))
43
43
  },
44
44
  logout: {
45
45
  description: "Remove stored credentials",
46
- run: (args) => import("./logout-BYV433X6.js").then((m) => m.run(args))
46
+ run: (args) => import("./logout-MWSIUOQU.js").then((m) => m.run(args))
47
47
  }
48
48
  }
49
49
  });
@@ -14,9 +14,11 @@ import {
14
14
  sweepWedgedTurns,
15
15
  takeErrored,
16
16
  trackToolUse
17
- } from "./chunk-YVR6EHWL.js";
17
+ } from "./chunk-VDZ4I4ZP.js";
18
+ import "./chunk-7LT3YZUR.js";
18
19
  import "./chunk-LNNI3MS4.js";
19
- import "./chunk-FXWBFDQR.js";
20
+ import "./chunk-AP2KQMMW.js";
21
+ import "./chunk-U54PJPTB.js";
20
22
  import "./chunk-EGV6R6UF.js";
21
23
  import "./chunk-QUSMYGNQ.js";
22
24
  import "./chunk-H6X6CKDN.js";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  formatStartupFailure,
4
4
  run
5
- } from "./chunk-VPOMJMV6.js";
5
+ } from "./chunk-BDHKCLWK.js";
6
6
  import "./chunk-TXSA4Q3V.js";
7
7
  import "./chunk-O7IGP7ZW.js";
8
8
  import "./chunk-6NLW72HP.js";
@@ -2,13 +2,15 @@
2
2
  import {
3
3
  cleanupVariant,
4
4
  reconcileVariants
5
- } from "./chunk-ITK6HV47.js";
6
- import "./chunk-724DVYHU.js";
7
- import "./chunk-YVR6EHWL.js";
8
- import "./chunk-AXFLY5GU.js";
5
+ } from "./chunk-UO4MZQNO.js";
6
+ import "./chunk-23UJGVYP.js";
7
+ import "./chunk-VDZ4I4ZP.js";
8
+ import "./chunk-7LT3YZUR.js";
9
+ import "./chunk-IQ7VNWH6.js";
9
10
  import "./chunk-LNNI3MS4.js";
10
- import "./chunk-FXWBFDQR.js";
11
+ import "./chunk-AP2KQMMW.js";
11
12
  import "./chunk-5Y54AE3L.js";
13
+ import "./chunk-U54PJPTB.js";
12
14
  import "./chunk-M77B73VV.js";
13
15
  import "./chunk-GLM7TVWP.js";
14
16
  import "./chunk-EGV6R6UF.js";
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ getCurrentVersion
4
+ } from "./chunk-LAUCO2HC.js";
2
5
  import {
3
6
  computeMindTemplateHash
4
7
  } from "./chunk-CV6BNGFK.js";
5
8
  import {
6
9
  computeTemplateHash
7
10
  } from "./chunk-HTRSSOHY.js";
8
- import {
9
- getCurrentVersion
10
- } from "./chunk-LAUCO2HC.js";
11
11
  import "./chunk-X67BDDZR.js";
12
12
  import {
13
13
  deliverEvent
14
- } from "./chunk-AXFLY5GU.js";
14
+ } from "./chunk-IQ7VNWH6.js";
15
15
  import "./chunk-LNNI3MS4.js";
16
16
  import {
17
17
  logger_default