volute 0.46.0 → 0.47.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 (136) hide show
  1. package/README.md +1 -1
  2. package/dist/{activity-events-NF6VWTJQ.js → activity-events-MIOK3IOU.js} +3 -3
  3. package/dist/{ai-service-UODCCE4O.js → ai-service-CVZEYKTK.js} +4 -4
  4. package/dist/{archive-WS2L2VIQ.js → archive-6Z4GFQPH.js} +3 -3
  5. package/dist/{auth-CCFAU4GQ.js → auth-A4VGHADI.js} +4 -4
  6. package/dist/avatar-image-7S3WA77A.js +22 -0
  7. package/dist/{backup-TST5C2YN.js → backup-IIAFOW2L.js} +13 -13
  8. package/dist/channels-ITE4YC57.js +89 -0
  9. package/dist/{chat-ZIQQS25U.js → chat-AJLJCQ3M.js} +12 -8
  10. package/dist/{chunk-ZV7MFISX.js → chunk-2MJ7EOMT.js} +20 -2
  11. package/dist/{chunk-R77O2WMK.js → chunk-2OIYNHWO.js} +1 -1
  12. package/dist/{chunk-QCN24XEN.js → chunk-3YUBFTDN.js} +1 -1
  13. package/dist/{chunk-E3DA4HYV.js → chunk-4I72V3E5.js} +10 -10
  14. package/dist/{chunk-K6T43YBD.js → chunk-5IERLDUS.js} +3 -3
  15. package/dist/{chunk-FXORA5JG.js → chunk-5NN2VHJV.js} +3 -3
  16. package/dist/chunk-7KRIHYLR.js +124 -0
  17. package/dist/{chunk-RRNXJOKB.js → chunk-BGYHLR54.js} +2 -2
  18. package/dist/{chunk-QMJCNZ6C.js → chunk-C3KLHJDB.js} +1 -1
  19. package/dist/{chunk-TQJ6ZYVY.js → chunk-CBOIHNMR.js} +2 -2
  20. package/dist/{chunk-H2X54EHC.js → chunk-DGGZVZTM.js} +1 -1
  21. package/dist/{chunk-4JOQZPCE.js → chunk-EIQDZC43.js} +1 -1
  22. package/dist/{chunk-JO5IO4FH.js → chunk-F55GRIEK.js} +243 -121
  23. package/dist/{chunk-5ZQZDDIK.js → chunk-HPGN6XRT.js} +3 -3
  24. package/dist/{chunk-KGIXX4NM.js → chunk-IWJSNMSY.js} +5 -5
  25. package/dist/{chunk-ZDZISKCL.js → chunk-IYG4FBMP.js} +1 -1
  26. package/dist/{chunk-4YU7HF4L.js → chunk-JCMGDCGX.js} +4 -4
  27. package/dist/{chunk-PJ45FQPT.js → chunk-JSVHH32K.js} +6 -6
  28. package/dist/{chunk-YXSUMLTC.js → chunk-K23P5Q5N.js} +301 -77
  29. package/dist/{chunk-ZNMCCHCP.js → chunk-LTLFOSA4.js} +2 -2
  30. package/dist/{chunk-IHKGWTGT.js → chunk-LWDTP6DH.js} +1 -1
  31. package/dist/{chunk-JZ62SYWR.js → chunk-M3XDVS5Q.js} +1 -1
  32. package/dist/{chunk-BJZ4PV7R.js → chunk-M6TTZRGH.js} +9 -9
  33. package/dist/{chunk-KQSFTPIM.js → chunk-MTRMQFCQ.js} +1 -1
  34. package/dist/{chunk-OV7ZQ2GH.js → chunk-ODDGGLM6.js} +3 -3
  35. package/dist/{chunk-QLWG3C2Z.js → chunk-RRZ4RQQU.js} +2 -2
  36. package/dist/{chunk-CDPBTTZO.js → chunk-RUFLGTOT.js} +2 -2
  37. package/dist/{chunk-F7H6ATM4.js → chunk-SKNXMUIU.js} +1 -1
  38. package/dist/{chunk-RXEEYDIB.js → chunk-SZJCJVXV.js} +1 -1
  39. package/dist/{chunk-DRJ24GXK.js → chunk-VMCZBXF2.js} +52 -8
  40. package/dist/{chunk-ALKYQULU.js → chunk-WW6C3PLV.js} +1 -1
  41. package/dist/{chunk-A7WQZKOU.js → chunk-XHN6XBWV.js} +2 -2
  42. package/dist/{chunk-6EMWJZBK.js → chunk-YKA7DCVW.js} +1 -1
  43. package/dist/cli.js +21 -21
  44. package/dist/{clock-RHS2JEDL.js → clock-E6N5Y3YW.js} +3 -3
  45. package/dist/{cloud-sync-46RS4SDA.js → cloud-sync-LQTVDTQ3.js} +19 -18
  46. package/dist/{conversations-CJOOCGNW.js → conversations-C7IKYSHD.js} +4 -4
  47. package/dist/{create-IOV4GCRX.js → create-PQQXKTJK.js} +1 -1
  48. package/dist/{daemon-restart-VFEI57UO.js → daemon-restart-5F3YTLZK.js} +7 -7
  49. package/dist/daemon.js +217 -151
  50. package/dist/{db-MF2JNRUW.js → db-FO6LXYCW.js} +2 -2
  51. package/dist/delivery-manager-TN5KK2AP.js +34 -0
  52. package/dist/{delivery-router-N4A7ZC5T.js → delivery-router-3QFG2ZEX.js} +3 -3
  53. package/dist/{down-U2CZ23M4.js → down-ZI4S6265.js} +5 -5
  54. package/dist/echo-text-SEQCLGAT.js +34 -0
  55. package/dist/{exec-G3ZRST4Z.js → exec-QIFYZG4C.js} +3 -3
  56. package/dist/{export-LY723I3Z.js → export-4GVGNW54.js} +3 -3
  57. package/dist/{extensions-ZELQLTSR.js → extensions-PIMIQ7J3.js} +21 -18
  58. package/dist/{files-4LN3EN7Q.js → files-FEFZKMNM.js} +6 -6
  59. package/dist/{import-42YNQBF4.js → import-7MO3YTRE.js} +6 -6
  60. package/dist/{isolation-YMGZZ4E5.js → isolation-MCT4ZYLT.js} +3 -3
  61. package/dist/{login-M6OJUPQ2.js → login-OF4WXDAN.js} +5 -5
  62. package/dist/{logout-WQBWO77G.js → logout-ERE2BGA3.js} +5 -5
  63. package/dist/message-delivery-ZE3YGJDD.js +38 -0
  64. package/dist/{mind-LHKS55DI.js → mind-POOHFZHP.js} +13 -13
  65. package/dist/{mind-activity-tracker-3QRNJVR4.js → mind-activity-tracker-YVZPC4A5.js} +4 -4
  66. package/dist/{mind-list-4D7J4CHD.js → mind-list-KEGRGQEQ.js} +5 -4
  67. package/dist/mind-service-JFY7UG5E.js +40 -0
  68. package/dist/{mind-sleep-74TGOQBC.js → mind-sleep-IN3WPA76.js} +5 -5
  69. package/dist/{mind-status-UO34ASXZ.js → mind-status-SMUWJKGV.js} +20 -3
  70. package/dist/{package-DOD6CPO6.js → package-WPEE2HVJ.js} +2 -2
  71. package/dist/{registry-OUZBZ3Q4.js → registry-UMMDRPRM.js} +2 -2
  72. package/dist/{sandbox-ZJ7QA6Z6.js → sandbox-G4X4K3UN.js} +4 -4
  73. package/dist/scheduler-HQSDYJFY.js +32 -0
  74. package/dist/{schema-PVNG3PQM.js → schema-VEVO7HG6.js} +3 -1
  75. package/dist/{seed-CNYIHPOH.js → seed-VANPU43L.js} +1 -1
  76. package/dist/{seed-cmd-AVNUNLZV.js → seed-cmd-SYVDZKM4.js} +2 -2
  77. package/dist/{seed-create-ANXGYSCC.js → seed-create-3FGZPS6C.js} +3 -3
  78. package/dist/{seed-sprout-NIUFTX32.js → seed-sprout-H7QLFPFM.js} +12 -12
  79. package/dist/{send-SPE6DVNJ.js → send-HYDFGC6G.js} +7 -7
  80. package/dist/{service-UOCLXDWR.js → service-SYJ5G6LP.js} +4 -4
  81. package/dist/{service-install-4HHFDDWY.js → service-install-FQ43Z4DF.js} +5 -5
  82. package/dist/{setup-Y2EJI3GG.js → setup-KFYVWTXG.js} +3 -3
  83. package/dist/{setup-QT2A25SY.js → setup-QJHGMGSN.js} +7 -7
  84. package/dist/{skills-AKCFA7BN.js → skills-L2CMTW7A.js} +5 -5
  85. package/dist/sleep-manager-3NA7ZJP3.js +36 -0
  86. package/dist/{spirit-RPBLLUQ5.js → spirit-WXN4IDBF.js} +8 -8
  87. package/dist/{sprout-SMX42ZBP.js → sprout-LTL5P36T.js} +1 -1
  88. package/dist/{status-SWRVGXBI.js → status-V4RJMHJ4.js} +19 -9
  89. package/dist/system-chat-N2F7HVY3.js +38 -0
  90. package/dist/{systems-VNB5WKSS.js → systems-B5YJKMW4.js} +6 -6
  91. package/dist/{tailscale-3XOKOW7T.js → tailscale-MCLY5GYE.js} +2 -2
  92. package/dist/{template-hash-446HHH5V.js → template-hash-GSOUARW4.js} +2 -2
  93. package/dist/template-staleness-EMQORSGG.js +15 -0
  94. package/dist/{turn-tracker-FOIBNUUA.js → turn-tracker-JZRZDFWV.js} +6 -6
  95. package/dist/{up-PS6PFS75.js → up-J2PBPOZL.js} +6 -6
  96. package/dist/{update-SWAYZRWJ.js → update-ACV4SAY3.js} +5 -5
  97. package/dist/{update-check-PQ2MZ47K.js → update-check-266R4ZSY.js} +3 -3
  98. package/dist/{version-notify-C5CH7CVP.js → version-notify-XRGTEEDK.js} +37 -23
  99. package/dist/web-assets/assets/index-DtctoDXY.css +1 -0
  100. package/dist/web-assets/assets/index-Wpyb2CML.js +86 -0
  101. package/dist/web-assets/index.html +2 -2
  102. package/drizzle/0011_drop_turn_summary_event_id.sql +3 -0
  103. package/drizzle/0012_channel_gates.sql +17 -0
  104. package/drizzle/meta/_journal.json +14 -0
  105. package/package.json +2 -2
  106. package/templates/_base/src/lib/startup.ts +43 -2
  107. package/templates/claude/src/agent.ts +28 -2
  108. package/templates/claude/src/lib/session-reaper.ts +32 -0
  109. package/templates/claude/src/server.ts +10 -1
  110. package/dist/avatar-image-6KY6UU4D.js +0 -16
  111. package/dist/delivery-manager-JINZRG2W.js +0 -33
  112. package/dist/echo-text-VQPB5L2X.js +0 -33
  113. package/dist/message-delivery-R7JSQGYX.js +0 -37
  114. package/dist/mind-service-NB2JMWQZ.js +0 -39
  115. package/dist/scheduler-WVKII3LA.js +0 -31
  116. package/dist/sleep-manager-G6TXSDP7.js +0 -35
  117. package/dist/system-chat-NDAW6YP7.js +0 -37
  118. package/dist/web-assets/assets/index-B1JBQv2m.css +0 -1
  119. package/dist/web-assets/assets/index-CU6XWICM.js +0 -86
  120. package/dist/{accept-N5XULCXK.js → accept-YAFP5JFJ.js} +3 -3
  121. package/dist/{bridge-2PO3AI5D.js → bridge-TIZGSXOD.js} +3 -3
  122. package/dist/{create-DF3KISTW.js → create-A7PDHIIL.js} +3 -3
  123. package/dist/{env-VZ4MLFQW.js → env-HRL2PWAT.js} +5 -5
  124. package/dist/{extension-SEID47SR.js → extension-QBY4C44L.js} +3 -3
  125. package/dist/{list-OXIAY3W7.js → list-LQO2DCIK.js} +3 -3
  126. package/dist/{login-MY6ETFYB.js → login-6TLMI2TQ.js} +3 -3
  127. package/dist/{logout-NCG3TMDL.js → logout-BK53HXNY.js} +3 -3
  128. package/dist/{mind-history-VRO5A76U.js → mind-history-47DN6ILW.js} +4 -4
  129. package/dist/{mind-wake-LCLGTXA2.js → mind-wake-R54BPESY.js} +3 -3
  130. package/dist/{read-QVAXMTPV.js → read-PWAJOQIQ.js} +3 -3
  131. package/dist/{register-Y2H4PY5R.js → register-7SZJFHU6.js} +3 -3
  132. package/dist/{reject-EV35X64Y.js → reject-6VH7N2A4.js} +3 -3
  133. package/dist/{restart-FJQ662XJ.js → restart-H5WJDMA7.js} +4 -4
  134. package/dist/{skill-FKFHIJRR.js → skill-GUKG2YVH.js} +5 -5
  135. package/dist/{start-5JE3TV66.js → start-X46I3GXB.js} +4 -4
  136. package/dist/{stop-AAMTG3TU.js → stop-HJQV4YSM.js} +4 -4
@@ -8,8 +8,8 @@
8
8
  <link rel="preconnect" href="https://fonts.googleapis.com" />
9
9
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
10
10
  <link href="https://fonts.googleapis.com/css2?family=Averia+Serif+Libre:wght@300;400;700&family=Fira+Code:wght@300;400;500;600&family=Averia+Sans+Libre:ital,wght@0,300;0,400;0,500;0,600;1,400&display=swap" rel="stylesheet" />
11
- <script type="module" crossorigin src="/assets/index-CU6XWICM.js"></script>
12
- <link rel="stylesheet" crossorigin href="/assets/index-B1JBQv2m.css">
11
+ <script type="module" crossorigin src="/assets/index-Wpyb2CML.js"></script>
12
+ <link rel="stylesheet" crossorigin href="/assets/index-DtctoDXY.css">
13
13
  </head>
14
14
  <body>
15
15
  <div id="root"></div>
@@ -0,0 +1,3 @@
1
+ -- Drop the dead turns.summary_event_id column (superseded by summary_id, never written).
2
+
3
+ ALTER TABLE `turns` DROP COLUMN `summary_event_id`;
@@ -0,0 +1,17 @@
1
+ -- Per-(mind, channel) gate state so a mind can explicitly decline an unrouted
2
+ -- channel. Absence of a row means "pending" (undecided); the only stored state
3
+ -- is "declined". Declined channels are never released and never re-notify.
4
+ CREATE TABLE `channel_gates` (
5
+ `mind` text NOT NULL,
6
+ `channel` text NOT NULL,
7
+ `state` text NOT NULL,
8
+ `updated_at` text DEFAULT (datetime('now')) NOT NULL,
9
+ PRIMARY KEY(`mind`, `channel`)
10
+ );
11
+ --> statement-breakpoint
12
+ -- Backfill: archive stale gated rows so the first routes.json edit on an existing
13
+ -- mind with a months-old backlog can't release hundreds of messages at once. The
14
+ -- bounded release only ever promotes the newest N per channel anyway; anything
15
+ -- older than a week is treated as history and made inert here.
16
+ UPDATE `delivery_queue` SET `status` = 'archived'
17
+ WHERE `status` = 'gated' AND `created_at` < datetime('now', '-7 days');
@@ -78,6 +78,20 @@
78
78
  "when": 1775500000000,
79
79
  "tag": "0010_delivery_queue_redrive",
80
80
  "breakpoints": true
81
+ },
82
+ {
83
+ "idx": 11,
84
+ "version": "6",
85
+ "when": 1775600000000,
86
+ "tag": "0011_drop_turn_summary_event_id",
87
+ "breakpoints": true
88
+ },
89
+ {
90
+ "idx": 12,
91
+ "version": "6",
92
+ "when": 1775700000000,
93
+ "tag": "0012_channel_gates",
94
+ "breakpoints": true
81
95
  }
82
96
  ]
83
97
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "volute",
3
- "version": "0.46.0",
3
+ "version": "0.47.0",
4
4
  "description": "CLI for creating and managing self-modifying AI minds powered by the Claude Agent SDK",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -79,6 +79,7 @@
79
79
  "isomorphic-dompurify": "^2.36.0",
80
80
  "libsql": "^0.5.29",
81
81
  "replicate": "^1.4.0",
82
+ "sharp": "^0.35.2",
82
83
  "telegraf": "^4.16.3",
83
84
  "undici": "^6.24.1",
84
85
  "zod": "^4.4.3"
@@ -94,7 +95,6 @@
94
95
  "drizzle-kit": "^0.31.10",
95
96
  "lefthook": "^2.1.9",
96
97
  "marked": "^18.0.5",
97
- "sharp": "^0.35.2",
98
98
  "svelte": "^5.56.3",
99
99
  "svelte-check": "4.7.1",
100
100
  "tsup": "^8.5.1",
@@ -179,9 +179,50 @@ export function loadPrompts(): MindPrompts {
179
179
  }
180
180
  }
181
181
 
182
- export function setupShutdown(): void {
183
- function shutdown() {
182
+ /**
183
+ * Run the optional teardown before exit, bounded by a timeout so a wedged child
184
+ * (e.g. an SDK subprocess that won't exit) can't block shutdown forever. Teardown
185
+ * errors are logged, never thrown, so a failing hook still lets the process exit.
186
+ */
187
+ export async function runShutdown(
188
+ onShutdown: (() => Promise<void>) | undefined,
189
+ timeoutMs: number,
190
+ ): Promise<void> {
191
+ if (!onShutdown) return;
192
+ let timer: ReturnType<typeof setTimeout> | undefined;
193
+ const timeout = new Promise<void>((resolve) => {
194
+ timer = setTimeout(() => {
195
+ log("server", `shutdown teardown timed out after ${timeoutMs}ms — exiting anyway`);
196
+ resolve();
197
+ }, timeoutMs);
198
+ });
199
+ try {
200
+ await Promise.race([
201
+ // Normalize a synchronous throw into the logged/swallowed path so it can't
202
+ // escape runShutdown and prevent the caller's process.exit.
203
+ Promise.resolve()
204
+ .then(() => onShutdown())
205
+ .catch((err) => log("server", "shutdown teardown failed:", err)),
206
+ timeout,
207
+ ]);
208
+ } finally {
209
+ if (timer) clearTimeout(timer);
210
+ }
211
+ }
212
+
213
+ /**
214
+ * Wire SIGINT/SIGTERM to a graceful shutdown. Without `onShutdown` this exits
215
+ * immediately (as before); pass a teardown to reap live SDK subprocesses before
216
+ * exit so they aren't orphaned to PID 1 as `<defunct>` zombies. The handler is
217
+ * idempotent so a second signal during teardown doesn't double-run it.
218
+ */
219
+ export function setupShutdown(onShutdown?: () => Promise<void>, timeoutMs = 10_000): void {
220
+ let shuttingDown = false;
221
+ async function shutdown() {
222
+ if (shuttingDown) return;
223
+ shuttingDown = true;
184
224
  log("server", "shutdown signal received");
225
+ await runShutdown(onShutdown, timeoutMs);
185
226
  process.exit(0);
186
227
  }
187
228
  process.on("SIGINT", shutdown);
@@ -22,7 +22,11 @@ import { createPreCompactHook } from "./lib/hooks/pre-compact.js";
22
22
  import { createReplyInstructionsHook } from "./lib/hooks/reply-instructions.js";
23
23
  import { log } from "./lib/logger.js";
24
24
  import { createMessageChannel } from "./lib/message-channel.js";
25
- import { isSessionReapable, reapSessionQuery } from "./lib/session-reaper.js";
25
+ import {
26
+ isSessionReapable,
27
+ reapSessionQuery,
28
+ reapSessionsForShutdown,
29
+ } from "./lib/session-reaper.js";
26
30
  import { createSessionStore } from "./lib/session-store.js";
27
31
  import { loadPrompts, type SubagentConfig } from "./lib/startup.js";
28
32
  import { consumeStream } from "./lib/stream-consumer.js";
@@ -69,6 +73,7 @@ export function createMind(options: {
69
73
  waitForCommits: () => Promise<void>;
70
74
  getContextInfo: () => Promise<ContextInfo>;
71
75
  getContextMessages: () => Promise<ContextMessages>;
76
+ reapAllSessions: () => Promise<void>;
72
77
  } {
73
78
  const autoCommit = createAutoCommitHook(options.cwd);
74
79
  const identityReload = createIdentityReloadHook(options.cwd);
@@ -569,6 +574,21 @@ export function createMind(options: {
569
574
  }
570
575
  }
571
576
 
577
+ /**
578
+ * Reap every live session's SDK subprocess on shutdown so `mind stop`/restart
579
+ * don't orphan `<defunct>` claude children to PID 1. Delegates the teardown to
580
+ * reapSessionsForShutdown; bounded externally by setupShutdown's timeout.
581
+ */
582
+ async function reapAllSessions(): Promise<void> {
583
+ const live = [...sessions.values()];
584
+ if (live.length === 0) return;
585
+ log("mind", `shutdown: reaping ${live.length} live SDK subprocess(es)`);
586
+ for (const s of live) sessions.delete(s.name);
587
+ await reapSessionsForShutdown(live, (name, err) =>
588
+ log("mind", `session "${name}": shutdown reap failed:`, err),
589
+ );
590
+ }
591
+
572
592
  if (idleTimeoutMs > 0) {
573
593
  log("mind", `idle session reaper: ${idleTimeoutMs / 60_000} min timeout`);
574
594
  const checkMs = Math.min(60_000, idleTimeoutMs);
@@ -746,5 +766,11 @@ export function createMind(options: {
746
766
  // instead of waiting for the first message (which adds minutes of latency).
747
767
  getOrCreateSession("main");
748
768
 
749
- return { resolve, waitForCommits: autoCommit.waitForCommits, getContextInfo, getContextMessages };
769
+ return {
770
+ resolve,
771
+ waitForCommits: autoCommit.waitForCommits,
772
+ getContextInfo,
773
+ getContextMessages,
774
+ reapAllSessions,
775
+ };
750
776
  }
@@ -66,3 +66,35 @@ export async function reapSessionQuery(
66
66
  onError(err);
67
67
  }
68
68
  }
69
+
70
+ /** Minimal view of a live session needed to tear it down on shutdown. */
71
+ export interface ShutdownReapable {
72
+ name: string;
73
+ /** Input iterable — closing it unwinds the stream consumer. */
74
+ channel: { close(): void };
75
+ /** The session's live SDK query, if it has one. */
76
+ currentQuery?: ReapableQuery;
77
+ }
78
+
79
+ /**
80
+ * Reap every live session's SDK subprocess on shutdown (SIGTERM/SIGINT).
81
+ *
82
+ * Unlike the idle reaper this ignores idle/reapable state — on the way out we
83
+ * want *all* children gone. For each session it closes the input channel so the
84
+ * stream consumer unwinds, then awaits `query.return()` so the CLI subprocess
85
+ * exits and its status is reaped, rather than being orphaned to PID 1 (the
86
+ * daemon, which doesn't reap reparented children) as a `<defunct>` zombie.
87
+ * Reaps run in parallel; a per-session failure is reported via `onError` and
88
+ * never rejects the batch, so one wedged child can't block the others.
89
+ */
90
+ export async function reapSessionsForShutdown(
91
+ sessions: Iterable<ShutdownReapable>,
92
+ onError: (name: string, err: unknown) => void,
93
+ ): Promise<void> {
94
+ await Promise.all(
95
+ [...sessions].map(async (s) => {
96
+ s.channel.close();
97
+ await reapSessionQuery(s.currentQuery, (err) => onError(s.name, err));
98
+ }),
99
+ );
100
+ }
@@ -63,4 +63,13 @@ server.listen(port, () => {
63
63
  log("server", `listening on :${actualPort}`);
64
64
  });
65
65
 
66
- setupShutdown();
66
+ // Reap live SDK subprocesses on SIGTERM/SIGINT so `mind stop`/restart don't
67
+ // orphan `<defunct>` claude children to PID 1 (the daemon, which isn't a
68
+ // reaping init). Bounded so a wedged child can't block shutdown forever.
69
+ // Stop accepting new messages first so a late request can't spawn a fresh
70
+ // subprocess after reapAllSessions has snapshotted the live set (which would
71
+ // re-orphan the very child we're reaping).
72
+ setupShutdown(async () => {
73
+ server.close();
74
+ await mind.reapAllSessions();
75
+ });
@@ -1,16 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- AVATAR_DIM,
4
- migrateAvatarSizes,
5
- normalizeAvatar
6
- } from "./chunk-DRJ24GXK.js";
7
- import "./chunk-PFZBNKUH.js";
8
- import "./chunk-T2TP6ZC6.js";
9
- import "./chunk-ALKYQULU.js";
10
- import "./chunk-ZV7MFISX.js";
11
- import "./chunk-K3NQKI34.js";
12
- export {
13
- AVATAR_DIM,
14
- migrateAvatarSizes,
15
- normalizeAvatar
16
- };
@@ -1,33 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- DeliveryManager,
4
- getDeliveryManager,
5
- initDeliveryManager,
6
- tryGetDeliveryManager
7
- } from "./chunk-JO5IO4FH.js";
8
- import "./chunk-ZDZISKCL.js";
9
- import "./chunk-BJZ4PV7R.js";
10
- import "./chunk-QLWG3C2Z.js";
11
- import "./chunk-KGIXX4NM.js";
12
- import "./chunk-5ZQZDDIK.js";
13
- import "./chunk-PFZBNKUH.js";
14
- import "./chunk-JZ62SYWR.js";
15
- import "./chunk-KQSFTPIM.js";
16
- import "./chunk-4JOQZPCE.js";
17
- import "./chunk-YXSUMLTC.js";
18
- import "./chunk-4YU7HF4L.js";
19
- import "./chunk-H2X54EHC.js";
20
- import "./chunk-IHKGWTGT.js";
21
- import "./chunk-F7H6ATM4.js";
22
- import "./chunk-OV7ZQ2GH.js";
23
- import "./chunk-ZNMCCHCP.js";
24
- import "./chunk-T2TP6ZC6.js";
25
- import "./chunk-ALKYQULU.js";
26
- import "./chunk-ZV7MFISX.js";
27
- import "./chunk-K3NQKI34.js";
28
- export {
29
- DeliveryManager,
30
- getDeliveryManager,
31
- initDeliveryManager,
32
- tryGetDeliveryManager
33
- };
@@ -1,33 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- clearEchoTextCache,
4
- echoTextToChannel
5
- } from "./chunk-E3DA4HYV.js";
6
- import "./chunk-RXEEYDIB.js";
7
- import "./chunk-JO5IO4FH.js";
8
- import "./chunk-ZDZISKCL.js";
9
- import "./chunk-BJZ4PV7R.js";
10
- import "./chunk-QLWG3C2Z.js";
11
- import "./chunk-KGIXX4NM.js";
12
- import "./chunk-5ZQZDDIK.js";
13
- import "./chunk-PFZBNKUH.js";
14
- import "./chunk-JZ62SYWR.js";
15
- import "./chunk-KQSFTPIM.js";
16
- import "./chunk-4JOQZPCE.js";
17
- import "./chunk-YXSUMLTC.js";
18
- import "./chunk-4YU7HF4L.js";
19
- import "./chunk-TQJ6ZYVY.js";
20
- import "./chunk-H2X54EHC.js";
21
- import "./chunk-IHKGWTGT.js";
22
- import "./chunk-F7H6ATM4.js";
23
- import "./chunk-OV7ZQ2GH.js";
24
- import "./chunk-ZNMCCHCP.js";
25
- import "./chunk-T2TP6ZC6.js";
26
- import "./chunk-LGNUFVMR.js";
27
- import "./chunk-ALKYQULU.js";
28
- import "./chunk-ZV7MFISX.js";
29
- import "./chunk-K3NQKI34.js";
30
- export {
31
- clearEchoTextCache,
32
- echoTextToChannel
33
- };
@@ -1,37 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- deliverBatch,
4
- deliverMessage,
5
- linkToolResultToTurn,
6
- recordInbound,
7
- recordOutbound,
8
- resolveSleepAction
9
- } from "./chunk-JO5IO4FH.js";
10
- import "./chunk-ZDZISKCL.js";
11
- import "./chunk-BJZ4PV7R.js";
12
- import "./chunk-QLWG3C2Z.js";
13
- import "./chunk-KGIXX4NM.js";
14
- import "./chunk-5ZQZDDIK.js";
15
- import "./chunk-PFZBNKUH.js";
16
- import "./chunk-JZ62SYWR.js";
17
- import "./chunk-KQSFTPIM.js";
18
- import "./chunk-4JOQZPCE.js";
19
- import "./chunk-YXSUMLTC.js";
20
- import "./chunk-4YU7HF4L.js";
21
- import "./chunk-H2X54EHC.js";
22
- import "./chunk-IHKGWTGT.js";
23
- import "./chunk-F7H6ATM4.js";
24
- import "./chunk-OV7ZQ2GH.js";
25
- import "./chunk-ZNMCCHCP.js";
26
- import "./chunk-T2TP6ZC6.js";
27
- import "./chunk-ALKYQULU.js";
28
- import "./chunk-ZV7MFISX.js";
29
- import "./chunk-K3NQKI34.js";
30
- export {
31
- deliverBatch,
32
- deliverMessage,
33
- linkToolResultToTurn,
34
- recordInbound,
35
- recordOutbound,
36
- resolveSleepAction
37
- };
@@ -1,39 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- buildSeedOrientation,
4
- sleepMind,
5
- startMindFull,
6
- startSpiritFull,
7
- stopMindFull,
8
- stopSpiritFull,
9
- wakeMind
10
- } from "./chunk-JO5IO4FH.js";
11
- import "./chunk-ZDZISKCL.js";
12
- import "./chunk-BJZ4PV7R.js";
13
- import "./chunk-QLWG3C2Z.js";
14
- import "./chunk-KGIXX4NM.js";
15
- import "./chunk-5ZQZDDIK.js";
16
- import "./chunk-PFZBNKUH.js";
17
- import "./chunk-JZ62SYWR.js";
18
- import "./chunk-KQSFTPIM.js";
19
- import "./chunk-4JOQZPCE.js";
20
- import "./chunk-YXSUMLTC.js";
21
- import "./chunk-4YU7HF4L.js";
22
- import "./chunk-H2X54EHC.js";
23
- import "./chunk-IHKGWTGT.js";
24
- import "./chunk-F7H6ATM4.js";
25
- import "./chunk-OV7ZQ2GH.js";
26
- import "./chunk-ZNMCCHCP.js";
27
- import "./chunk-T2TP6ZC6.js";
28
- import "./chunk-ALKYQULU.js";
29
- import "./chunk-ZV7MFISX.js";
30
- import "./chunk-K3NQKI34.js";
31
- export {
32
- buildSeedOrientation,
33
- sleepMind,
34
- startMindFull,
35
- startSpiritFull,
36
- stopMindFull,
37
- stopSpiritFull,
38
- wakeMind
39
- };
@@ -1,31 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- Scheduler,
4
- getScheduler,
5
- initScheduler
6
- } from "./chunk-JO5IO4FH.js";
7
- import "./chunk-ZDZISKCL.js";
8
- import "./chunk-BJZ4PV7R.js";
9
- import "./chunk-QLWG3C2Z.js";
10
- import "./chunk-KGIXX4NM.js";
11
- import "./chunk-5ZQZDDIK.js";
12
- import "./chunk-PFZBNKUH.js";
13
- import "./chunk-JZ62SYWR.js";
14
- import "./chunk-KQSFTPIM.js";
15
- import "./chunk-4JOQZPCE.js";
16
- import "./chunk-YXSUMLTC.js";
17
- import "./chunk-4YU7HF4L.js";
18
- import "./chunk-H2X54EHC.js";
19
- import "./chunk-IHKGWTGT.js";
20
- import "./chunk-F7H6ATM4.js";
21
- import "./chunk-OV7ZQ2GH.js";
22
- import "./chunk-ZNMCCHCP.js";
23
- import "./chunk-T2TP6ZC6.js";
24
- import "./chunk-ALKYQULU.js";
25
- import "./chunk-ZV7MFISX.js";
26
- import "./chunk-K3NQKI34.js";
27
- export {
28
- Scheduler,
29
- getScheduler,
30
- initScheduler
31
- };
@@ -1,35 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- SleepManager,
4
- getSleepManager,
5
- getSleepManagerIfReady,
6
- initSleepManager,
7
- matchesGlob
8
- } from "./chunk-JO5IO4FH.js";
9
- import "./chunk-ZDZISKCL.js";
10
- import "./chunk-BJZ4PV7R.js";
11
- import "./chunk-QLWG3C2Z.js";
12
- import "./chunk-KGIXX4NM.js";
13
- import "./chunk-5ZQZDDIK.js";
14
- import "./chunk-PFZBNKUH.js";
15
- import "./chunk-JZ62SYWR.js";
16
- import "./chunk-KQSFTPIM.js";
17
- import "./chunk-4JOQZPCE.js";
18
- import "./chunk-YXSUMLTC.js";
19
- import "./chunk-4YU7HF4L.js";
20
- import "./chunk-H2X54EHC.js";
21
- import "./chunk-IHKGWTGT.js";
22
- import "./chunk-F7H6ATM4.js";
23
- import "./chunk-OV7ZQ2GH.js";
24
- import "./chunk-ZNMCCHCP.js";
25
- import "./chunk-T2TP6ZC6.js";
26
- import "./chunk-ALKYQULU.js";
27
- import "./chunk-ZV7MFISX.js";
28
- import "./chunk-K3NQKI34.js";
29
- export {
30
- SleepManager,
31
- getSleepManager,
32
- getSleepManagerIfReady,
33
- initSleepManager,
34
- matchesGlob
35
- };
@@ -1,37 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- ensureSystemDM,
4
- generateSystemFallbackReply,
5
- resetSystemDMCache,
6
- sendSystemMessage,
7
- sendSystemMessageDirect,
8
- shouldGenerateSystemFallback
9
- } from "./chunk-JO5IO4FH.js";
10
- import "./chunk-ZDZISKCL.js";
11
- import "./chunk-BJZ4PV7R.js";
12
- import "./chunk-QLWG3C2Z.js";
13
- import "./chunk-KGIXX4NM.js";
14
- import "./chunk-5ZQZDDIK.js";
15
- import "./chunk-PFZBNKUH.js";
16
- import "./chunk-JZ62SYWR.js";
17
- import "./chunk-KQSFTPIM.js";
18
- import "./chunk-4JOQZPCE.js";
19
- import "./chunk-YXSUMLTC.js";
20
- import "./chunk-4YU7HF4L.js";
21
- import "./chunk-H2X54EHC.js";
22
- import "./chunk-IHKGWTGT.js";
23
- import "./chunk-F7H6ATM4.js";
24
- import "./chunk-OV7ZQ2GH.js";
25
- import "./chunk-ZNMCCHCP.js";
26
- import "./chunk-T2TP6ZC6.js";
27
- import "./chunk-ALKYQULU.js";
28
- import "./chunk-ZV7MFISX.js";
29
- import "./chunk-K3NQKI34.js";
30
- export {
31
- ensureSystemDM,
32
- generateSystemFallbackReply,
33
- resetSystemDMCache,
34
- sendSystemMessage,
35
- sendSystemMessageDirect,
36
- shouldGenerateSystemFallback
37
- };