volute 0.54.0 → 0.55.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 (135) hide show
  1. package/dist/{activity-events-LQII6PZS.js → activity-events-TFAJBNBW.js} +2 -2
  2. package/dist/{ai-service-YW5SWCSB.js → ai-service-KEK2V3AP.js} +2 -2
  3. package/dist/{auth-KRDSM55Q.js → auth-Y27LTNZK.js} +3 -3
  4. package/dist/auto-upgrade-2MZF7NG3.js +46 -0
  5. package/dist/{avatar-image-52WGXLHV.js → avatar-image-SN576P45.js} +2 -2
  6. package/dist/{backup-QRNX6RK7.js → backup-GDCWH6MC.js} +2 -2
  7. package/dist/{channels-CKCY64TD.js → channels-AFJWGX7W.js} +15 -15
  8. package/dist/{chat-ZUGNL5GS.js → chat-HVPOZK3O.js} +3 -3
  9. package/dist/{chunk-QUSMYGNQ.js → chunk-2674KIGI.js} +1 -0
  10. package/dist/chunk-2GATCSZK.js +520 -0
  11. package/dist/{chunk-LKUGUQUW.js → chunk-3SFKY4GI.js} +4 -4
  12. package/dist/{chunk-CLCHOXLR.js → chunk-45QTYKQQ.js} +4 -4
  13. package/dist/{chunk-PPSN2MLC.js → chunk-4VAQKLMU.js} +7 -4
  14. package/dist/{chunk-TPX6E6PL.js → chunk-6HBGUPBA.js} +2 -2
  15. package/dist/{chunk-UFTDRTCP.js → chunk-7AA4T2RT.js} +2 -2
  16. package/dist/{chunk-56IT2ZXF.js → chunk-BP2X5AIK.js} +8 -14
  17. package/dist/{chunk-444RR3YF.js → chunk-CKOA4LWV.js} +11 -11
  18. package/dist/{chunk-HKGYZVWN.js → chunk-DUV4EMNW.js} +37 -3
  19. package/dist/{chunk-CV6BNGFK.js → chunk-FSXPPOPM.js} +3 -3
  20. package/dist/{chunk-3LHUXY3E.js → chunk-FZUPIS3T.js} +3 -3
  21. package/dist/{chunk-L7BKTZ5U.js → chunk-G3XAB4DK.js} +1 -1
  22. package/dist/{chunk-WHL6PKYP.js → chunk-HLWQ3P3R.js} +49 -45
  23. package/dist/{chunk-OAYY3WF3.js → chunk-HTSWDOJE.js} +0 -11
  24. package/dist/{chunk-OYF25B62.js → chunk-IR2FW4W7.js} +1 -1
  25. package/dist/{chunk-ICXY54ZC.js → chunk-IT4GEFDH.js} +1 -1
  26. package/dist/{chunk-F6D766VQ.js → chunk-KS62IHE2.js} +1 -1
  27. package/dist/{chunk-LNNI3MS4.js → chunk-MNKPAAQF.js} +9 -2
  28. package/dist/{chunk-LGXVGIWN.js → chunk-NCRG4SBR.js} +189 -55
  29. package/dist/{chunk-I7U5EEZC.js → chunk-NM5FDH4T.js} +1 -1
  30. package/dist/{chunk-7LT3YZUR.js → chunk-OFU6WJJZ.js} +1 -1
  31. package/dist/{chunk-OT5SXF7L.js → chunk-OUGD5L5U.js} +26 -12
  32. package/dist/{chunk-X67BDDZR.js → chunk-P3GXOT2X.js} +48 -2
  33. package/dist/{chunk-U54PJPTB.js → chunk-PRZUBJ4K.js} +1 -1
  34. package/dist/{chunk-OGPVJ53N.js → chunk-QVS3C4DK.js} +2 -2
  35. package/dist/{chunk-VDUCLVZI.js → chunk-TMTAHKYP.js} +27 -25
  36. package/dist/{chunk-RGHF3OK5.js → chunk-UEZC5MNB.js} +13 -13
  37. package/dist/{chunk-ATZF2RNJ.js → chunk-VTFXZPC3.js} +12 -12
  38. package/dist/{chunk-YSRYCS3N.js → chunk-W3OIPJPB.js} +1 -1
  39. package/dist/{chunk-5Y54AE3L.js → chunk-XAG53RWY.js} +1 -1
  40. package/dist/{chunk-HTRSSOHY.js → chunk-YU5EYQAE.js} +1 -1
  41. package/dist/{chunk-EGV6R6UF.js → chunk-Z7TNIIHW.js} +3 -1
  42. package/dist/cli.js +8 -8
  43. package/dist/{cloud-sync-52YNJRMR.js → cloud-sync-FM73SVFJ.js} +20 -20
  44. package/dist/{conversations-ZL6PHROD.js → conversations-FH3ODBL7.js} +3 -3
  45. package/dist/{create-G2RIKQYK.js → create-P75ZFTVN.js} +1 -1
  46. package/dist/{daemon-restart-QWHN5VMU.js → daemon-restart-JQMMMITM.js} +1 -1
  47. package/dist/daemon.js +187 -159
  48. package/dist/{db-I4EH5SLF.js → db-JH3NTERX.js} +17 -3
  49. package/dist/{delivery-manager-7R2YIQ2W.js → delivery-manager-H23Q23N7.js} +15 -15
  50. package/dist/{delivery-notices-RZQ6GONP.js → delivery-notices-S7TKOACE.js} +5 -5
  51. package/dist/{delivery-router-QS4NLJR6.js → delivery-router-KHBVEVVL.js} +2 -2
  52. package/dist/echo-text-ULEIFJJF.js +40 -0
  53. package/dist/{extensions-QT65JGV6.js → extensions-QD22GXZD.js} +24 -20
  54. package/dist/{files-PCKBQHAY.js → files-DUGRXN6V.js} +2 -2
  55. package/dist/{import-DB2KULRO.js → import-RDDUGGFI.js} +3 -3
  56. package/dist/message-delivery-LU4EP244.js +46 -0
  57. package/dist/migrate-init-infrastructure-Z72UJ5NT.js +44 -0
  58. package/dist/{migrate-name-placeholder-C7NCNLWF.js → migrate-name-placeholder-64AEAWPE.js} +1 -1
  59. package/dist/{migrate-thread-config-EQSEP2XG.js → migrate-thread-config-SVF2M3D3.js} +1 -1
  60. package/dist/{mind-CT6ANXK4.js → mind-BARCLI7O.js} +4 -4
  61. package/dist/{mind-activity-tracker-QF6DCX2X.js → mind-activity-tracker-UT23RGBF.js} +3 -3
  62. package/dist/mind-service-ZJCUBAUL.js +48 -0
  63. package/dist/{package-F6S5NHY2.js → package-AUDBDKAO.js} +10 -12
  64. package/dist/{prompts-JECJIFPQ.js → prompts-MOBF3TMO.js} +1 -1
  65. package/dist/{sandbox-NNWCTHRI.js → sandbox-VI7XWBIA.js} +2 -2
  66. package/dist/scheduler-GLINVC2B.js +27 -0
  67. package/dist/{seed-DRKAP3XV.js → seed-5JGR7ZRA.js} +1 -1
  68. package/dist/{seed-cmd-6IMTO3LG.js → seed-cmd-M6A7N7F3.js} +2 -2
  69. package/dist/{seed-create-VNLDYRFK.js → seed-create-TGFZW4IO.js} +3 -3
  70. package/dist/{seed-readiness-H5TTPAQH.js → seed-readiness-XBH2MUNA.js} +2 -2
  71. package/dist/{seed-sprout-PPGYGK4G.js → seed-sprout-3IC5ZVTI.js} +7 -7
  72. package/dist/{send-UXUQKO4N.js → send-DHYBAYK4.js} +2 -2
  73. package/dist/{setup-YUAQMDVZ.js → setup-6KAH3GRW.js} +1 -1
  74. package/dist/skills/volute-mind/SKILL.md +8 -0
  75. package/dist/{skills-GMQ5UIIW.js → skills-LKQCYFVP.js} +2 -2
  76. package/dist/sleep-manager-Q3ITFNOJ.js +42 -0
  77. package/dist/{spirit-Q5VGFWUI.js → spirit-FKXMGO3N.js} +5 -5
  78. package/dist/spirit-availability-5R2WYSWF.js +43 -0
  79. package/dist/{sprout-PMTRL7QN.js → sprout-VEW3CUNX.js} +1 -1
  80. package/dist/{src-H3UCOP6B.js → src-246GSX7A.js} +5 -2
  81. package/dist/src-LOUB3WPR.js +4189 -0
  82. package/dist/{system-events-Q7IVZ5T4.js → system-events-ZYOCYAO2.js} +5 -3
  83. package/dist/{tailscale-KHNZFC7L.js → tailscale-F2IMBILZ.js} +1 -1
  84. package/dist/{template-hash-YKWMVYMM.js → template-hash-RJRMF6DT.js} +2 -2
  85. package/dist/{template-staleness-PY2CULH6.js → template-staleness-IBD722PN.js} +4 -4
  86. package/dist/{turn-tracker-HZDPMSCC.js → turn-tracker-BE34OI6O.js} +7 -7
  87. package/dist/{up-XZDSJVMU.js → up-J47J5JRB.js} +1 -1
  88. package/dist/variant-cleanup-JGJZ5KB4.js +24 -0
  89. package/dist/{version-notify-VNVFX6UP.js → version-notify-KIXYNHJC.js} +11 -11
  90. package/dist/web-assets/assets/{index-CwtxGwe_.js → index-CoU1eUKE.js} +15 -15
  91. package/dist/web-assets/assets/index-hPn_fkz3.css +1 -0
  92. package/dist/web-assets/index.html +2 -2
  93. package/package.json +10 -12
  94. package/packages/extensions/intentions/dist/ui/assets/index-Bl5KEcli.js +67 -0
  95. package/packages/extensions/intentions/dist/ui/index.html +1 -1
  96. package/packages/extensions/pages/dist/ui/assets/index-BKxVQkA9.css +1 -0
  97. package/packages/extensions/pages/dist/ui/assets/index-BMt6sStP.js +68 -0
  98. package/packages/extensions/pages/dist/ui/index.html +2 -2
  99. package/packages/extensions/pages/skills/pages/SKILL.md +123 -4
  100. package/templates/_base/.init/.config/prompts.json +0 -1
  101. package/templates/_base/.init/.local/hooks/pre-prompt/turn-context.ts +30 -0
  102. package/templates/_base/src/lib/codex-session-seed.ts +6 -55
  103. package/templates/_base/src/lib/pi-session-seed.ts +8 -57
  104. package/templates/_base/src/lib/seed-note.ts +4 -4
  105. package/templates/_base/src/lib/session-seed.ts +8 -53
  106. package/templates/_base/src/lib/startup.ts +0 -20
  107. package/templates/claude/package.json +2 -2
  108. package/templates/claude/src/agent.ts +34 -102
  109. package/templates/claude/src/lib/hooks/pre-compact.ts +6 -6
  110. package/templates/claude/src/server.ts +0 -1
  111. package/templates/codex/package.json +2 -2
  112. package/templates/codex/src/agent.ts +23 -89
  113. package/templates/pi/package.json +1 -1
  114. package/templates/pi/src/agent.ts +26 -93
  115. package/templates/pi/src/server.ts +0 -1
  116. package/dist/auto-upgrade-HEVZKPTF.js +0 -46
  117. package/dist/chunk-AAPNU7GA.js +0 -168
  118. package/dist/echo-text-73CYQRL7.js +0 -40
  119. package/dist/message-delivery-TRKT4T2P.js +0 -46
  120. package/dist/mind-service-7EFIJ3ZA.js +0 -48
  121. package/dist/scheduler-73Q4MQ7Y.js +0 -27
  122. package/dist/sleep-manager-KHI65FEX.js +0 -42
  123. package/dist/spirit-availability-G5FMWKRH.js +0 -43
  124. package/dist/src-3FIW7DLH.js +0 -2376
  125. package/dist/src-LTTQVN2Z.js +0 -832
  126. package/dist/variant-cleanup-QHGGY7ND.js +0 -24
  127. package/dist/web-assets/assets/index-DhM1yYRN.css +0 -1
  128. package/packages/extensions/intentions/dist/ui/assets/index-CQz4aceM.js +0 -67
  129. package/packages/extensions/notes/dist/ui/assets/index-BBs8pyel.js +0 -67
  130. package/packages/extensions/notes/dist/ui/assets/index-D3cdui42.css +0 -1
  131. package/packages/extensions/notes/dist/ui/index.html +0 -14
  132. package/packages/extensions/notes/skills/notes/SKILL.md +0 -90
  133. package/packages/extensions/pages/dist/ui/assets/index-B589e8Xe.js +0 -2
  134. package/packages/extensions/pages/dist/ui/assets/index-BuXnE-rb.css +0 -1
  135. /package/dist/{chunk-ZNHL5KQJ.js → chunk-OKM67ZWH.js} +0 -0
package/dist/daemon.js CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  readBackupState,
7
7
  resticVersion,
8
8
  runBackup
9
- } from "./chunk-OYF25B62.js";
9
+ } from "./chunk-IR2FW4W7.js";
10
10
  import {
11
11
  acceptPending,
12
12
  formatFileSize,
@@ -14,7 +14,7 @@ import {
14
14
  rejectPending,
15
15
  stageFile,
16
16
  validateFilePath
17
- } from "./chunk-F6D766VQ.js";
17
+ } from "./chunk-KS62IHE2.js";
18
18
  import {
19
19
  getMemoryStatus
20
20
  } from "./chunk-5RBEEAKW.js";
@@ -23,16 +23,11 @@ import {
23
23
  importOpenClawConnectors,
24
24
  importPiSession,
25
25
  parseNameFromIdentity
26
- } from "./chunk-I7U5EEZC.js";
27
- import {
28
- checkForUpdate,
29
- checkForUpdateCached,
30
- getCurrentVersion
31
- } from "./chunk-LAUCO2HC.js";
26
+ } from "./chunk-NM5FDH4T.js";
32
27
  import {
33
28
  SPIRIT_NOTICE_PREFIX,
34
29
  ensureSpiritAvailable
35
- } from "./chunk-LKUGUQUW.js";
30
+ } from "./chunk-3SFKY4GI.js";
36
31
  import {
37
32
  TEMPLATE_BRANCH,
38
33
  UpgradeInProgressError,
@@ -50,29 +45,29 @@ import {
50
45
  upgradeDiff,
51
46
  upgradeInProgress,
52
47
  validateBranchName
53
- } from "./chunk-OT5SXF7L.js";
48
+ } from "./chunk-OUGD5L5U.js";
54
49
  import {
55
50
  isTemplateStale
56
- } from "./chunk-CV6BNGFK.js";
51
+ } from "./chunk-FSXPPOPM.js";
57
52
  import {
58
53
  computeTemplateHash
59
- } from "./chunk-HTRSSOHY.js";
54
+ } from "./chunk-YU5EYQAE.js";
60
55
  import {
61
56
  cleanupVariant
62
- } from "./chunk-OGPVJ53N.js";
57
+ } from "./chunk-QVS3C4DK.js";
63
58
  import {
64
59
  isHomeOnlyArchive
65
60
  } from "./chunk-FLIEXG2T.js";
66
61
  import {
67
62
  evaluateSeedChecklist
68
- } from "./chunk-CLCHOXLR.js";
63
+ } from "./chunk-45QTYKQQ.js";
69
64
  import {
70
65
  PLATFORMS,
71
66
  echoTextToChannel,
72
67
  fixModelEscapes,
73
68
  getPlatformDriver,
74
69
  routeOutboundBridge
75
- } from "./chunk-ATZF2RNJ.js";
70
+ } from "./chunk-VTFXZPC3.js";
76
71
  import {
77
72
  getBridgeConfig,
78
73
  readBridgesConfig,
@@ -81,7 +76,12 @@ import {
81
76
  resolveChannelMapping,
82
77
  setBridgeConfig,
83
78
  setChannelMapping
84
- } from "./chunk-L7BKTZ5U.js";
79
+ } from "./chunk-G3XAB4DK.js";
80
+ import {
81
+ checkForUpdate,
82
+ checkForUpdateCached,
83
+ getCurrentVersion
84
+ } from "./chunk-LAUCO2HC.js";
85
85
  import {
86
86
  SESSION_MAX_AGE,
87
87
  announceSprout,
@@ -89,6 +89,7 @@ import {
89
89
  authMiddleware,
90
90
  backfillSystemChannelMembers,
91
91
  cleanExpiredSessions,
92
+ collectTurnContext,
92
93
  createSession,
93
94
  deleteSession,
94
95
  deleteSystemsConfig,
@@ -113,6 +114,7 @@ import {
113
114
  linkToolResultToTurn,
114
115
  listApiTokens,
115
116
  loadAllExtensions,
117
+ normalizeTrailingSlash,
116
118
  notifyExtensionsDaemonStart,
117
119
  notifyExtensionsDaemonStop,
118
120
  notifyExtensionsSpiritReady,
@@ -128,8 +130,8 @@ import {
128
130
  uninstallNpmExtension,
129
131
  willGateMessage,
130
132
  writeSystemsConfig
131
- } from "./chunk-LGXVGIWN.js";
132
- import "./chunk-RGHF3OK5.js";
133
+ } from "./chunk-NCRG4SBR.js";
134
+ import "./chunk-UEZC5MNB.js";
133
135
  import {
134
136
  applyInitFiles,
135
137
  composeTemplate,
@@ -137,14 +139,14 @@ import {
137
139
  findTemplatesRoot,
138
140
  isKnownTemplate,
139
141
  listFiles
140
- } from "./chunk-X67BDDZR.js";
142
+ } from "./chunk-P3GXOT2X.js";
141
143
  import {
142
144
  getScheduler,
143
145
  initScheduler
144
- } from "./chunk-444RR3YF.js";
146
+ } from "./chunk-CKOA4LWV.js";
145
147
  import {
146
148
  recordDeliveryFailure
147
- } from "./chunk-3LHUXY3E.js";
149
+ } from "./chunk-FZUPIS3T.js";
148
150
  import {
149
151
  UnknownChannelError,
150
152
  checkStaleSend,
@@ -154,7 +156,7 @@ import {
154
156
  initDeliveryManager,
155
157
  isConversationId,
156
158
  publishTypingForChannels
157
- } from "./chunk-VDUCLVZI.js";
159
+ } from "./chunk-TMTAHKYP.js";
158
160
  import {
159
161
  MindStartupError,
160
162
  RestartTracker,
@@ -164,10 +166,7 @@ import {
164
166
  initMindManager,
165
167
  syncProviderToMinds,
166
168
  tryGetMindManager
167
- } from "./chunk-WHL6PKYP.js";
168
- import {
169
- extractTextContent
170
- } from "./chunk-YSRYCS3N.js";
169
+ } from "./chunk-HLWQ3P3R.js";
171
170
  import {
172
171
  SYSTEM_MIND,
173
172
  assignSession,
@@ -181,7 +180,6 @@ import {
181
180
  initSummarizer,
182
181
  isoWeekKeyForDateStr,
183
182
  markErrored,
184
- parseDbTimestamp,
185
183
  parseUtcDateTime,
186
184
  summarizeOrphanedTurns,
187
185
  summarizeTurn,
@@ -189,82 +187,11 @@ import {
189
187
  takeErrored,
190
188
  trackToolUse,
191
189
  utcDateTimeStr
192
- } from "./chunk-56IT2ZXF.js";
193
- import {
194
- SEED_SKILLS,
195
- STANDARD_SKILLS,
196
- autoUpdateMindSkills,
197
- getSharedSkill,
198
- getStandardSkillsWithExtensions,
199
- importSkillFromDir,
200
- initDefaultSkills,
201
- installSkill,
202
- isAutoUpdateSkillsEnabled,
203
- listFilesRecursive,
204
- listMindSkills,
205
- listSharedSkills,
206
- mindSkillsDir,
207
- publishSkill,
208
- removeSharedSkill,
209
- sharedSkillsDir,
210
- syncBuiltinSkills,
211
- uninstallSkill,
212
- updateSkill
213
- } from "./chunk-PPSN2MLC.js";
214
- import {
215
- approveUser,
216
- changePassword,
217
- countAdmins,
218
- createUser,
219
- deleteExternalMindUser,
220
- deleteMindUser as deleteMindUser2,
221
- deleteUser,
222
- getDisplayNames,
223
- getOrCreateMindUser,
224
- getOrCreateSystemUser,
225
- getUser,
226
- getUserByUsername,
227
- listPendingUsers,
228
- listUsers,
229
- listUsersByType,
230
- setUserRole,
231
- syncMindProfile,
232
- updateUserProfile,
233
- verifyUser,
234
- withSenderDisplayNames
235
- } from "./chunk-7LT3YZUR.js";
236
- import {
237
- MIND_LEVEL_THREAD,
238
- captureReflection,
239
- cleanExpiredEvents,
240
- clearDeliveredEvents,
241
- deliverEvent,
242
- drainEvents,
243
- eventLabel,
244
- formatEvents,
245
- latestEvent,
246
- latestFailureEvent,
247
- listEvents,
248
- parseMeta,
249
- recordNotice
250
- } from "./chunk-HKGYZVWN.js";
251
- import {
252
- publish as publish2,
253
- subscribe as subscribe2,
254
- subscribeAll
255
- } from "./chunk-LNNI3MS4.js";
256
- import {
257
- PROMPT_DEFAULTS,
258
- PROMPT_KEYS,
259
- getMindPromptDefaults,
260
- getPrompt,
261
- getPromptIfCustom,
262
- substitute
263
- } from "./chunk-OAYY3WF3.js";
190
+ } from "./chunk-BP2X5AIK.js";
264
191
  import {
265
192
  isSandboxEnabled,
266
193
  wrapForSandbox
267
- } from "./chunk-5Y54AE3L.js";
194
+ } from "./chunk-XAG53RWY.js";
268
195
  import {
269
196
  addMessage,
270
197
  createChannel,
@@ -300,22 +227,15 @@ import {
300
227
  subscribe as subscribe3,
301
228
  subscribeParticipantAdded,
302
229
  updateChannelSettings
303
- } from "./chunk-TPX6E6PL.js";
230
+ } from "./chunk-6HBGUPBA.js";
304
231
  import {
305
232
  getActiveMinds,
306
233
  onMindEvent,
307
234
  stopAll
308
- } from "./chunk-UFTDRTCP.js";
309
- import {
310
- broadcast,
311
- getEventsSince,
312
- nextEventId,
313
- publish,
314
- subscribe
315
- } from "./chunk-U54PJPTB.js";
235
+ } from "./chunk-7AA4T2RT.js";
316
236
  import {
317
237
  normalizeAvatar
318
- } from "./chunk-ICXY54ZC.js";
238
+ } from "./chunk-IT4GEFDH.js";
319
239
  import {
320
240
  safeResolveWithinBase
321
241
  } from "./chunk-DW4TRDOZ.js";
@@ -323,6 +243,89 @@ import {
323
243
  readVoluteConfig,
324
244
  writeVoluteConfig
325
245
  } from "./chunk-WCFSBH33.js";
246
+ import {
247
+ extractTextContent
248
+ } from "./chunk-W3OIPJPB.js";
249
+ import {
250
+ approveUser,
251
+ changePassword,
252
+ countAdmins,
253
+ createUser,
254
+ deleteExternalMindUser,
255
+ deleteMindUser as deleteMindUser2,
256
+ deleteUser,
257
+ getDisplayNames,
258
+ getOrCreateMindUser,
259
+ getOrCreateSystemUser,
260
+ getUser,
261
+ getUserByUsername,
262
+ listPendingUsers,
263
+ listUsers,
264
+ listUsersByType,
265
+ setUserRole,
266
+ syncMindProfile,
267
+ updateUserProfile,
268
+ verifyUser,
269
+ withSenderDisplayNames
270
+ } from "./chunk-OFU6WJJZ.js";
271
+ import {
272
+ broadcast,
273
+ getEventsSince,
274
+ nextEventId,
275
+ publish,
276
+ subscribe
277
+ } from "./chunk-PRZUBJ4K.js";
278
+ import {
279
+ MIND_LEVEL_THREAD,
280
+ captureReflection,
281
+ cleanExpiredEvents,
282
+ clearDeliveredEvents,
283
+ deliverEvent,
284
+ drainEvents,
285
+ eventLabel,
286
+ findStrandedEventMinds,
287
+ formatEvents,
288
+ latestEvent,
289
+ latestFailureEvent,
290
+ listEvents,
291
+ parseMeta,
292
+ recordNotice
293
+ } from "./chunk-DUV4EMNW.js";
294
+ import {
295
+ parseDbTimestamp,
296
+ publish as publish2,
297
+ subscribe as subscribe2,
298
+ subscribeAll
299
+ } from "./chunk-MNKPAAQF.js";
300
+ import {
301
+ PROMPT_DEFAULTS,
302
+ PROMPT_KEYS,
303
+ getMindPromptDefaults,
304
+ getPrompt,
305
+ getPromptIfCustom,
306
+ substitute
307
+ } from "./chunk-HTSWDOJE.js";
308
+ import {
309
+ SEED_SKILLS,
310
+ STANDARD_SKILLS,
311
+ autoUpdateMindSkills,
312
+ getSharedSkill,
313
+ getStandardSkillsWithExtensions,
314
+ importSkillFromDir,
315
+ initDefaultSkills,
316
+ installSkill,
317
+ isAutoUpdateSkillsEnabled,
318
+ listFilesRecursive,
319
+ listMindSkills,
320
+ listSharedSkills,
321
+ mindSkillsDir,
322
+ publishSkill,
323
+ removeSharedSkill,
324
+ sharedSkillsDir,
325
+ syncBuiltinSkills,
326
+ uninstallSkill,
327
+ updateSkill
328
+ } from "./chunk-4VAQKLMU.js";
326
329
  import "./chunk-CKPAVQNK.js";
327
330
  import {
328
331
  chownMindDir,
@@ -368,11 +371,11 @@ import {
368
371
  setProviderRefreshHook,
369
372
  setUtilityModel,
370
373
  unqualifyModelId
371
- } from "./chunk-EGV6R6UF.js";
374
+ } from "./chunk-Z7TNIIHW.js";
372
375
  import {
373
376
  logBuffer,
374
377
  logger_default
375
- } from "./chunk-QUSMYGNQ.js";
378
+ } from "./chunk-2674KIGI.js";
376
379
  import {
377
380
  buildVoluteSlug
378
381
  } from "./chunk-LGNUFVMR.js";
@@ -537,7 +540,7 @@ var BackupManager = class {
537
540
  } catch (pubErr) {
538
541
  blog.error("failed to publish backup-failure activity", logger_default.errorData(pubErr));
539
542
  }
540
- const { deliverEvent: deliverEvent2 } = await import("./system-events-Q7IVZ5T4.js");
543
+ const { deliverEvent: deliverEvent2 } = await import("./system-events-ZYOCYAO2.js");
541
544
  await deliverEvent2(getSpiritName(), {
542
545
  type: "notice",
543
546
  meta: { subtype: "backup" },
@@ -899,6 +902,19 @@ async function runMaintenance() {
899
902
  } catch (err) {
900
903
  logger_default.warn("maintenance: failed to clean expired events", logger_default.errorData(err));
901
904
  }
905
+ try {
906
+ await warnStrandedEvents();
907
+ } catch (err) {
908
+ logger_default.warn("maintenance: failed to check for stranded events", logger_default.errorData(err));
909
+ }
910
+ }
911
+ async function warnStrandedEvents() {
912
+ for (const s of await findStrandedEventMinds()) {
913
+ logger_default.warn(
914
+ `${s.mind} has ${s.pending} undelivered next-turn system event${s.pending === 1 ? "" : "s"} and has completed ${s.turnsSince} turns without draining them (oldest is ${s.ageHours}h old). Its pre-prompt drain hook is missing or failing \u2014 check home/.local/hooks/pre-prompt/notices.ts and run \`volute mind upgrade ${s.mind}\`.`,
915
+ { mind: s.mind, pending: s.pending, turnsSince: s.turnsSince, ageHours: s.ageHours }
916
+ );
917
+ }
902
918
  }
903
919
  function startMaintenanceInterval(intervalMs = MAINTENANCE_INTERVAL_MS, task = runMaintenance) {
904
920
  const handle = setInterval(() => void task(), intervalMs);
@@ -1489,7 +1505,7 @@ var app = new Hono().post("/restart", requireAdmin, (c) => {
1489
1505
  config2.name = name.trim() || void 0;
1490
1506
  writeGlobalConfig(config2);
1491
1507
  if (config2.name !== previousName) {
1492
- const { notifySpiritSystemChange } = await import("./spirit-Q5VGFWUI.js");
1508
+ const { notifySpiritSystemChange } = await import("./spirit-FKXMGO3N.js");
1493
1509
  await notifySpiritSystemChange();
1494
1510
  }
1495
1511
  return c.json({ name: config2.name ?? null });
@@ -2731,7 +2747,7 @@ async function fanOutToMinds(opts) {
2731
2747
  );
2732
2748
  }
2733
2749
  if (ap.userType === "system") {
2734
- import("./spirit-availability-G5FMWKRH.js").then(({ ensureSpiritAvailable: ensureSpiritAvailable2 }) => ensureSpiritAvailable2()).catch((err) => logger_default.warn("fan-out: on-demand spirit start failed", logger_default.errorData(err)));
2750
+ import("./spirit-availability-5R2WYSWF.js").then(({ ensureSpiritAvailable: ensureSpiritAvailable2 }) => ensureSpiritAvailable2()).catch((err) => logger_default.warn("fan-out: on-demand spirit start failed", logger_default.errorData(err)));
2735
2751
  }
2736
2752
  }
2737
2753
  return null;
@@ -2864,7 +2880,7 @@ var app4 = new Hono5().post("/:platform/inbound", zValidator4("json", inboundSch
2864
2880
  }
2865
2881
  const participants = await getParticipants(channel.id);
2866
2882
  if (!participants.some((p) => p.userId === puppet.id)) {
2867
- const { addParticipant } = await import("./conversations-ZL6PHROD.js");
2883
+ const { addParticipant } = await import("./conversations-FH3ODBL7.js");
2868
2884
  await addParticipant(channel.id, puppet.id);
2869
2885
  }
2870
2886
  const contentBlocks = body.content;
@@ -3148,11 +3164,11 @@ async function notifyMind(mindName, message) {
3148
3164
  const entry = await findMind(mindName);
3149
3165
  if (!entry) return false;
3150
3166
  try {
3151
- const { deliverEvent: deliverEvent2 } = await import("./system-events-Q7IVZ5T4.js");
3167
+ const { deliverEvent: deliverEvent2 } = await import("./system-events-ZYOCYAO2.js");
3152
3168
  const result = await deliverEvent2(mindName, { type: "file-share", body: message });
3153
3169
  if (result.delivered) return true;
3154
3170
  if (result.id == null) return false;
3155
- const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-KHI65FEX.js");
3171
+ const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-Q3ITFNOJ.js");
3156
3172
  const { getBaseName: getBaseName2 } = await import("./registry-TRC2HJXR.js");
3157
3173
  return getSleepManagerIfReady2()?.isSleeping(await getBaseName2(mindName)) ?? false;
3158
3174
  } catch (err) {
@@ -5031,7 +5047,7 @@ async function getMindStatus(name, port, registryRunning, seed) {
5031
5047
  let status = "stopped";
5032
5048
  let wakeAt = null;
5033
5049
  try {
5034
- const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-KHI65FEX.js");
5050
+ const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-Q3ITFNOJ.js");
5035
5051
  const sleepManager = getSleepManagerIfReady2();
5036
5052
  if (sleepManager?.isSleeping(name)) {
5037
5053
  status = "sleeping";
@@ -5517,7 +5533,7 @@ Your creator described you as: "${body.description}"
5517
5533
  const spiritName = getSpiritName();
5518
5534
  const spiritEntry = await findMind(spiritName);
5519
5535
  if (spiritEntry) {
5520
- const { spiritDir } = await import("./spirit-Q5VGFWUI.js");
5536
+ const { spiritDir } = await import("./spirit-FKXMGO3N.js");
5521
5537
  const sDir = spiritEntry.dir ?? spiritDir();
5522
5538
  const spiritConfig = readVoluteConfig(sDir) ?? {};
5523
5539
  const schedules = spiritConfig.schedules ?? [];
@@ -5532,7 +5548,7 @@ Your creator described you as: "${body.description}"
5532
5548
  });
5533
5549
  spiritConfig.schedules = schedules;
5534
5550
  writeVoluteConfig(sDir, spiritConfig);
5535
- const { getScheduler: getScheduler2 } = await import("./scheduler-73Q4MQ7Y.js");
5551
+ const { getScheduler: getScheduler2 } = await import("./scheduler-GLINVC2B.js");
5536
5552
  getScheduler2().loadSchedules(spiritName, sDir);
5537
5553
  }
5538
5554
  }
@@ -5840,7 +5856,7 @@ ${user.trimEnd()}
5840
5856
  const manager = getMindManager();
5841
5857
  try {
5842
5858
  if (context?.type === "reload") {
5843
- const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-KHI65FEX.js");
5859
+ const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-Q3ITFNOJ.js");
5844
5860
  const sleepState = getSleepManagerIfReady2()?.getState(name);
5845
5861
  if (sleepState?.sleeping) {
5846
5862
  logger_default.info(`skipping reload for ${name} during sleep \u2014 will apply on next wake`);
@@ -5989,7 +6005,7 @@ ${user.trimEnd()}
5989
6005
  const name = c.req.param("name");
5990
6006
  const entry = await findMind(name);
5991
6007
  if (!entry) return c.json({ error: "Mind not found" }, 404);
5992
- const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-KHI65FEX.js");
6008
+ const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-Q3ITFNOJ.js");
5993
6009
  const sm = getSleepManagerIfReady2();
5994
6010
  if (!sm) return c.json({ error: "Sleep manager not initialized" }, 503);
5995
6011
  return c.json(sm.getState(name));
@@ -5997,7 +6013,7 @@ ${user.trimEnd()}
5997
6013
  const name = c.req.param("name");
5998
6014
  const entry = await findMind(name);
5999
6015
  if (!entry) return c.json({ error: "Mind not found" }, 404);
6000
- const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-KHI65FEX.js");
6016
+ const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-Q3ITFNOJ.js");
6001
6017
  const sm = getSleepManagerIfReady2();
6002
6018
  if (!sm) return c.json({ error: "Sleep manager not initialized" }, 503);
6003
6019
  if (sm.isSleeping(name)) return c.json({ error: "Mind is already sleeping" }, 409);
@@ -6017,7 +6033,7 @@ ${user.trimEnd()}
6017
6033
  const name = c.req.param("name");
6018
6034
  const entry = await findMind(name);
6019
6035
  if (!entry) return c.json({ error: "Mind not found" }, 404);
6020
- const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-KHI65FEX.js");
6036
+ const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-Q3ITFNOJ.js");
6021
6037
  const sm = getSleepManagerIfReady2();
6022
6038
  if (!sm) return c.json({ error: "Sleep manager not initialized" }, 503);
6023
6039
  const sleepState = sm.getState(name);
@@ -6032,7 +6048,7 @@ ${user.trimEnd()}
6032
6048
  const name = c.req.param("name");
6033
6049
  const entry = await findMind(name);
6034
6050
  if (!entry) return c.json({ error: "Mind not found" }, 404);
6035
- const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-KHI65FEX.js");
6051
+ const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-Q3ITFNOJ.js");
6036
6052
  const sm = getSleepManagerIfReady2();
6037
6053
  if (!sm) return c.json({ error: "Sleep manager not initialized" }, 503);
6038
6054
  const flushed = await sm.flushQueuedMessages(name);
@@ -6060,7 +6076,7 @@ ${user.trimEnd()}
6060
6076
  }
6061
6077
  config2.profile = profile;
6062
6078
  writeVoluteConfig(dir, config2);
6063
- const { syncMindProfile: syncMindProfile2 } = await import("./auth-KRDSM55Q.js");
6079
+ const { syncMindProfile: syncMindProfile2 } = await import("./auth-Y27LTNZK.js");
6064
6080
  await syncMindProfile2(name, profile);
6065
6081
  broadcast({ type: "profile_updated", mind: name, summary: `${name} profile updated` });
6066
6082
  return c.json({ ok: true });
@@ -6104,7 +6120,7 @@ ${user.trimEnd()}
6104
6120
  });
6105
6121
  }
6106
6122
  if (!force) {
6107
- const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-KHI65FEX.js");
6123
+ const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-Q3ITFNOJ.js");
6108
6124
  if (getSleepManagerIfReady2()?.isSleeping(name)) {
6109
6125
  return c.json({ output: "" });
6110
6126
  }
@@ -6159,7 +6175,7 @@ ${user.trimEnd()}
6159
6175
  }
6160
6176
  }
6161
6177
  const dir = entry.dir ?? mindDir(name);
6162
- const { evaluateSeedChecklist: evaluateSeedChecklist2 } = await import("./seed-readiness-H5TTPAQH.js");
6178
+ const { evaluateSeedChecklist: evaluateSeedChecklist2 } = await import("./seed-readiness-XBH2MUNA.js");
6163
6179
  const checklist = evaluateSeedChecklist2(dir);
6164
6180
  const done = [];
6165
6181
  const remaining = [];
@@ -6201,7 +6217,7 @@ ${user.trimEnd()}
6201
6217
  try {
6202
6218
  const sproutedDir = entry.dir ?? mindDir(name);
6203
6219
  if (setupDefaultDreaming(sproutedDir).schedulesChanged) {
6204
- const { getScheduler: getScheduler2 } = await import("./scheduler-73Q4MQ7Y.js");
6220
+ const { getScheduler: getScheduler2 } = await import("./scheduler-GLINVC2B.js");
6205
6221
  getScheduler2().loadSchedules(name, sproutedDir);
6206
6222
  }
6207
6223
  } catch (err) {
@@ -6211,7 +6227,7 @@ ${user.trimEnd()}
6211
6227
  const spiritName = getSpiritName();
6212
6228
  const spiritEntry = await findMind(spiritName);
6213
6229
  if (spiritEntry) {
6214
- const { firstWeekSchedules, spiritDir } = await import("./spirit-Q5VGFWUI.js");
6230
+ const { firstWeekSchedules, spiritDir } = await import("./spirit-FKXMGO3N.js");
6215
6231
  const sDir = spiritEntry.dir ?? spiritDir();
6216
6232
  const spiritConfig = readVoluteConfig(sDir);
6217
6233
  if (spiritConfig) {
@@ -6225,7 +6241,7 @@ ${user.trimEnd()}
6225
6241
  spiritConfig.schedules = schedules;
6226
6242
  writeVoluteConfig(sDir, spiritConfig);
6227
6243
  try {
6228
- const { getScheduler: getScheduler2 } = await import("./scheduler-73Q4MQ7Y.js");
6244
+ const { getScheduler: getScheduler2 } = await import("./scheduler-GLINVC2B.js");
6229
6245
  getScheduler2().loadSchedules(spiritName, sDir);
6230
6246
  } catch (err) {
6231
6247
  logger_default.warn(
@@ -6533,7 +6549,7 @@ ${user.trimEnd()}
6533
6549
  }
6534
6550
  writeVoluteConfig(dir, existing);
6535
6551
  if (body.unescapeNewlines !== void 0) {
6536
- const { clearEchoTextCache } = await import("./echo-text-73CYQRL7.js");
6552
+ const { clearEchoTextCache } = await import("./echo-text-ULEIFJJF.js");
6537
6553
  clearEchoTextCache(name);
6538
6554
  }
6539
6555
  const needsConfigJson = body.model !== void 0 || body.thinkingLevel !== void 0 || body.compaction !== void 0;
@@ -6647,7 +6663,7 @@ ${user.trimEnd()}
6647
6663
  if (!body.systemPrompt || !body.message) {
6648
6664
  return c.json({ error: "systemPrompt and message required" }, 400);
6649
6665
  }
6650
- const { aiComplete: aiCompleteFn, isAiConfigured: isAiConfigured2 } = await import("./ai-service-YW5SWCSB.js");
6666
+ const { aiComplete: aiCompleteFn, isAiConfigured: isAiConfigured2 } = await import("./ai-service-KEK2V3AP.js");
6651
6667
  if (!isAiConfigured2()) {
6652
6668
  return c.json({ error: "AI service not configured" }, 503);
6653
6669
  }
@@ -6892,6 +6908,11 @@ ${lines.join("\n")}` });
6892
6908
  const maxId = notices.reduce((m, n) => Math.max(m, n.id), 0);
6893
6909
  setNoticeDrainWatermark(baseName, session, maxId);
6894
6910
  return c.json({ context: formatEvents(notices), notices });
6911
+ }).get("/:name/turn-context", requireSelf(), async (c) => {
6912
+ const name = c.req.param("name");
6913
+ const baseName = await getBaseName(name);
6914
+ const reason = c.req.query("reason") === "wake" ? "wake" : "turn";
6915
+ return c.json({ context: await collectTurnContext(baseName, reason) });
6895
6916
  }).post("/:name/notices", requireSelf(), async (c) => {
6896
6917
  const MIND_POSTABLE_KINDS = ["context_lost", "delivery_failed"];
6897
6918
  const name = c.req.param("name");
@@ -7411,7 +7432,7 @@ var app15 = new Hono18().get("/:name/clock/status", requireSelf(), async (c) =>
7411
7432
  const entry = await findMind(name);
7412
7433
  if (!entry) return c.json({ error: "Mind not found" }, 404);
7413
7434
  const body = await c.req.text();
7414
- const { deliverEvent: deliverEvent2 } = await import("./system-events-Q7IVZ5T4.js");
7435
+ const { deliverEvent: deliverEvent2 } = await import("./system-events-ZYOCYAO2.js");
7415
7436
  const { id, delivered } = await deliverEvent2(name, {
7416
7437
  type: "webhook",
7417
7438
  body,
@@ -7470,7 +7491,7 @@ setup.get("/status", async (c) => {
7470
7491
  let hasAccount = false;
7471
7492
  if (hasSystem) {
7472
7493
  try {
7473
- const { listUsersByType: listUsersByType2 } = await import("./auth-KRDSM55Q.js");
7494
+ const { listUsersByType: listUsersByType2 } = await import("./auth-Y27LTNZK.js");
7474
7495
  const brains = await listUsersByType2("human");
7475
7496
  hasAccount = brains.length > 0;
7476
7497
  } catch (err) {
@@ -7682,7 +7703,7 @@ setup.post("/account", async (c) => {
7682
7703
  }
7683
7704
  }
7684
7705
  try {
7685
- const { createUser: createUser2, updateUserProfile: updateUserProfile2 } = await import("./auth-KRDSM55Q.js");
7706
+ const { createUser: createUser2, updateUserProfile: updateUserProfile2 } = await import("./auth-Y27LTNZK.js");
7686
7707
  const user = await createUser2(body.username.trim(), body.password);
7687
7708
  if (body.displayName?.trim()) {
7688
7709
  await updateUserProfile2(user.id, { display_name: body.displayName.trim() });
@@ -7728,7 +7749,7 @@ setup.post("/models", async (c) => {
7728
7749
  return c.json({ error: "Spirit model is required" }, 400);
7729
7750
  }
7730
7751
  try {
7731
- const { setEnabledModels: setEnabledModels3, setUtilityModel: setUtilityModel2 } = await import("./ai-service-YW5SWCSB.js");
7752
+ const { setEnabledModels: setEnabledModels3, setUtilityModel: setUtilityModel2 } = await import("./ai-service-KEK2V3AP.js");
7732
7753
  setEnabledModels3(body.models);
7733
7754
  const config2 = readGlobalConfig();
7734
7755
  config2.spiritModel = body.spiritModel.trim();
@@ -7808,8 +7829,8 @@ setup.post("/complete", async (c) => {
7808
7829
  return c.json({ error: "Setup already complete" }, 400);
7809
7830
  }
7810
7831
  try {
7811
- const { ensureSpiritProject, syncSpiritTemplate } = await import("./spirit-Q5VGFWUI.js");
7812
- const { startSpiritFull } = await import("./mind-service-7EFIJ3ZA.js");
7832
+ const { ensureSpiritProject, syncSpiritTemplate } = await import("./spirit-FKXMGO3N.js");
7833
+ const { startSpiritFull } = await import("./mind-service-ZJCUBAUL.js");
7813
7834
  await ensureSpiritProject();
7814
7835
  await syncSpiritTemplate();
7815
7836
  await notifyExtensionsSpiritReady();
@@ -7847,8 +7868,8 @@ setup.post("/complete", async (c) => {
7847
7868
  }
7848
7869
  let spiritConversationId;
7849
7870
  try {
7850
- const { getOrCreateMindUser: getOrCreateMindUser2, listUsersByType: listUsersByType2 } = await import("./auth-KRDSM55Q.js");
7851
- const { createConversation: createConversation2, findDMConversation: findDMConversation2 } = await import("./conversations-ZL6PHROD.js");
7871
+ const { getOrCreateMindUser: getOrCreateMindUser2, listUsersByType: listUsersByType2 } = await import("./auth-Y27LTNZK.js");
7872
+ const { createConversation: createConversation2, findDMConversation: findDMConversation2 } = await import("./conversations-FH3ODBL7.js");
7852
7873
  const spiritUser = await getOrCreateMindUser2(spiritName);
7853
7874
  const brains = await listUsersByType2("human");
7854
7875
  const admin2 = brains.find((u) => u.role === "admin");
@@ -7870,8 +7891,8 @@ setup.post("/complete", async (c) => {
7870
7891
  logger_default.info("setup complete state", { spiritConversationId, spiritStarted });
7871
7892
  if (spiritConversationId && spiritStarted) {
7872
7893
  try {
7873
- const { deliverMessage: deliverMessage2 } = await import("./message-delivery-TRKT4T2P.js");
7874
- const { listUsersByType: listUsers2 } = await import("./auth-KRDSM55Q.js");
7894
+ const { deliverMessage: deliverMessage2 } = await import("./message-delivery-LU4EP244.js");
7895
+ const { listUsersByType: listUsers2 } = await import("./auth-Y27LTNZK.js");
7875
7896
  const admins = await listUsers2("human");
7876
7897
  const admin2 = admins.find((u) => u.role === "admin");
7877
7898
  if (admin2) {
@@ -9120,7 +9141,7 @@ var app22 = new Hono26().get("/:name/variants", async (c) => {
9120
9141
  await chownMindDir(projectRoot, mindName);
9121
9142
  if (variantName.endsWith("-upgrade") || variantName === "upgrade") {
9122
9143
  try {
9123
- const { computeTemplateHash: computeTemplateHash2 } = await import("./template-hash-YKWMVYMM.js");
9144
+ const { computeTemplateHash: computeTemplateHash2 } = await import("./template-hash-RJRMF6DT.js");
9124
9145
  const { setMindTemplateHash: setMindTemplateHash2 } = await import("./registry-TRC2HJXR.js");
9125
9146
  const tmpl = parentEntry.template ?? "claude";
9126
9147
  await setMindTemplateHash2(mindName, computeTemplateHash2(tmpl));
@@ -9817,6 +9838,7 @@ app26.get("/api/health", (c) => {
9817
9838
  ...cached?.updateAvailable ? { updateAvailable: true, latest: cached.latest } : {}
9818
9839
  });
9819
9840
  });
9841
+ app26.use("/api/ext/*", normalizeTrailingSlash(app26));
9820
9842
  app26.use("/api/activity/*", authMiddleware);
9821
9843
  app26.use("/api/minds/*", authMiddleware);
9822
9844
  app26.use("/api/conversations/*", authMiddleware);
@@ -9992,7 +10014,7 @@ async function startDaemon(opts) {
9992
10014
  const { migrateConfigSecrets, migrateSetupCompleted } = await import("./setup-WZSXHHRJ.js");
9993
10015
  migrateConfigSecrets();
9994
10016
  migrateSetupCompleted();
9995
- const { migrateAiModelQualification } = await import("./ai-service-YW5SWCSB.js");
10017
+ const { migrateAiModelQualification } = await import("./ai-service-KEK2V3AP.js");
9996
10018
  migrateAiModelQualification();
9997
10019
  await (await import("./db-BONH4SUG.js")).getDb();
9998
10020
  try {
@@ -10004,24 +10026,30 @@ async function startDaemon(opts) {
10004
10026
  logger_default.warn("failed to migrate system user role", logger_default.errorData(err));
10005
10027
  }
10006
10028
  try {
10007
- const { migrateAvatarSizes } = await import("./avatar-image-52WGXLHV.js");
10029
+ const { migrateAvatarSizes } = await import("./avatar-image-SN576P45.js");
10008
10030
  await migrateAvatarSizes();
10009
10031
  } catch (err) {
10010
10032
  logger_default.warn("avatar size migration failed", logger_default.errorData(err));
10011
10033
  }
10012
10034
  try {
10013
- const { migrateThreadConfigs } = await import("./migrate-thread-config-EQSEP2XG.js");
10035
+ const { migrateThreadConfigs } = await import("./migrate-thread-config-SVF2M3D3.js");
10014
10036
  await migrateThreadConfigs();
10015
10037
  } catch (err) {
10016
10038
  logger_default.warn("session\u2192thread config migration failed", logger_default.errorData(err));
10017
10039
  }
10018
10040
  try {
10019
- const { migrateNamePlaceholders } = await import("./migrate-name-placeholder-C7NCNLWF.js");
10041
+ const { migrateNamePlaceholders } = await import("./migrate-name-placeholder-64AEAWPE.js");
10020
10042
  await migrateNamePlaceholders();
10021
10043
  } catch (err) {
10022
10044
  logger_default.warn("{{name}} placeholder migration failed", logger_default.errorData(err));
10023
10045
  }
10024
- const { initSandbox } = await import("./sandbox-NNWCTHRI.js");
10046
+ try {
10047
+ const { migrateInitInfrastructure } = await import("./migrate-init-infrastructure-Z72UJ5NT.js");
10048
+ await migrateInitInfrastructure();
10049
+ } catch (err) {
10050
+ logger_default.warn("`.init/` infrastructure backfill failed", logger_default.errorData(err));
10051
+ }
10052
+ const { initSandbox } = await import("./sandbox-VI7XWBIA.js");
10025
10053
  await initSandbox();
10026
10054
  try {
10027
10055
  await syncBuiltinSkills();
@@ -10053,7 +10081,7 @@ async function startDaemon(opts) {
10053
10081
  logger_default.warn("failed to backfill minds into #system", logger_default.errorData(err));
10054
10082
  }
10055
10083
  try {
10056
- const { getOrCreateSystemUser: getOrCreateSystemUser2 } = await import("./auth-KRDSM55Q.js");
10084
+ const { getOrCreateSystemUser: getOrCreateSystemUser2 } = await import("./auth-Y27LTNZK.js");
10057
10085
  await getOrCreateSystemUser2();
10058
10086
  } catch (err) {
10059
10087
  logger_default.warn(
@@ -10067,7 +10095,7 @@ async function startDaemon(opts) {
10067
10095
  let tls;
10068
10096
  if (opts.tailscale || globalCfg.tailscale) {
10069
10097
  try {
10070
- const { getTailscaleTls } = await import("./tailscale-KHNZFC7L.js");
10098
+ const { getTailscaleTls } = await import("./tailscale-F2IMBILZ.js");
10071
10099
  const tlsConfig = await getTailscaleTls();
10072
10100
  tls = { key: tlsConfig.key, cert: tlsConfig.cert };
10073
10101
  logger_default.info("Tailscale HTTPS enabled", { hostname: tlsConfig.hostname });
@@ -10121,7 +10149,7 @@ async function startDaemon(opts) {
10121
10149
  const orphanedTurns = await completeOrphanedTurns();
10122
10150
  summarizeOrphanedTurns(orphanedTurns);
10123
10151
  try {
10124
- const { reconcileVariants } = await import("./variant-cleanup-QHGGY7ND.js");
10152
+ const { reconcileVariants } = await import("./variant-cleanup-JGJZ5KB4.js");
10125
10153
  await reconcileVariants();
10126
10154
  } catch (err) {
10127
10155
  logger_default.error("failed to reconcile variants", logger_default.errorData(err));
@@ -10157,13 +10185,13 @@ async function startDaemon(opts) {
10157
10185
  try {
10158
10186
  const { isSetupComplete: isSetupComplete2, getSpiritName: getSpiritName2 } = await import("./setup-WZSXHHRJ.js");
10159
10187
  if (isSetupComplete2()) {
10160
- const { ensureSpiritProject, syncSpiritTemplate } = await import("./spirit-Q5VGFWUI.js");
10161
- const { startSpiritFull } = await import("./mind-service-7EFIJ3ZA.js");
10188
+ const { ensureSpiritProject, syncSpiritTemplate } = await import("./spirit-FKXMGO3N.js");
10189
+ const { startSpiritFull } = await import("./mind-service-ZJCUBAUL.js");
10162
10190
  await ensureSpiritProject();
10163
10191
  const spiritName = getSpiritName2();
10164
10192
  const spiritEntry = await findMind(spiritName);
10165
10193
  if (spiritEntry?.dir) {
10166
- const { registerMindDir } = await import("./delivery-router-QS4NLJR6.js");
10194
+ const { registerMindDir } = await import("./delivery-router-KHBVEVVL.js");
10167
10195
  registerMindDir(spiritName, spiritEntry.dir);
10168
10196
  }
10169
10197
  await syncSpiritTemplate();
@@ -10178,7 +10206,7 @@ async function startDaemon(opts) {
10178
10206
  bridgeManager.startBridges(daemonPort).catch((err) => {
10179
10207
  logger_default.warn("failed to start bridges", logger_default.errorData(err));
10180
10208
  });
10181
- import("./cloud-sync-52YNJRMR.js").then(
10209
+ import("./cloud-sync-FM73SVFJ.js").then(
10182
10210
  ({ consumeQueuedMessages }) => consumeQueuedMessages().catch((err) => {
10183
10211
  logger_default.warn("failed to consume queued cloud messages", logger_default.errorData(err));
10184
10212
  })
@@ -10186,11 +10214,11 @@ async function startDaemon(opts) {
10186
10214
  logger_default.warn("failed to load cloud-sync module", logger_default.errorData(err));
10187
10215
  });
10188
10216
  try {
10189
- const { backfillTemplateHashes, notifyVersionUpdate, warnStaleTemplates } = await import("./version-notify-VNVFX6UP.js");
10217
+ const { backfillTemplateHashes, notifyVersionUpdate, warnStaleTemplates } = await import("./version-notify-KIXYNHJC.js");
10190
10218
  notifyVersionUpdate().catch((err) => {
10191
10219
  logger_default.warn("failed to send version update notifications", logger_default.errorData(err));
10192
10220
  }).then(() => backfillTemplateHashes()).then(() => warnStaleTemplates()).then(async () => {
10193
- const { runAutoUpgrades } = await import("./auto-upgrade-HEVZKPTF.js");
10221
+ const { runAutoUpgrades } = await import("./auto-upgrade-2MZF7NG3.js");
10194
10222
  await runAutoUpgrades();
10195
10223
  }).catch((err) => {
10196
10224
  logger_default.warn("template staleness/auto-upgrade pass failed", logger_default.errorData(err));