volute 0.40.1 → 0.41.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 (155) hide show
  1. package/README.md +2 -2
  2. package/dist/{accept-IVHOHXQS.js → accept-AHAOUFBK.js} +1 -1
  3. package/dist/{activity-events-DS4QRWBY.js → activity-events-EQGBUEZ7.js} +4 -4
  4. package/dist/{ai-service-AUWIPWLP.js → ai-service-ZHEPFC3U.js} +5 -5
  5. package/dist/{api-client-NFM6GX2N.js → api-client-LC5YRA32.js} +1 -1
  6. package/dist/{archive-UDHFZN4G.js → archive-LJAXDDEY.js} +4 -4
  7. package/dist/{auth-X6ZITZ7D.js → auth-VYW2ECCE.js} +5 -5
  8. package/dist/{bridge-MSZC4HUT.js → bridge-F3ZJEKDN.js} +1 -1
  9. package/dist/{chat-JD3TJINV.js → chat-FO722GU2.js} +9 -9
  10. package/dist/{chunk-4UMXOMZ6.js → chunk-2I7OKOYV.js} +2 -2
  11. package/dist/{chunk-3Y7UDHO7.js → chunk-2R4JIZCB.js} +3 -3
  12. package/dist/{chunk-QYI65HCL.js → chunk-2RQIIKFC.js} +2 -2
  13. package/dist/{chunk-6SYHHEQ7.js → chunk-4ED2DBNC.js} +1 -1
  14. package/dist/{chunk-E25SO3QW.js → chunk-6TPRURK5.js} +3 -3
  15. package/dist/{chunk-ITH5ZLZJ.js → chunk-6ZAT5PYV.js} +1 -1
  16. package/dist/{chunk-LZ6CQYRO.js → chunk-AXNAK3HT.js} +10 -8
  17. package/dist/{chunk-PKGA23XM.js → chunk-CYUNO4BM.js} +1 -1
  18. package/dist/{chunk-MNUXL4XN.js → chunk-FEQPNCXB.js} +1 -1
  19. package/dist/{chunk-5EVW4KOD.js → chunk-FU5YDH6Q.js} +3 -3
  20. package/dist/{chunk-NERYUSER.js → chunk-GMFCSXWB.js} +1 -1
  21. package/dist/{chunk-YHWGN4FX.js → chunk-GSOEUMVO.js} +1 -1
  22. package/dist/{chunk-QV7P3TYO.js → chunk-JIGVTFIR.js} +5 -5
  23. package/dist/chunk-K3NQKI34.js +10 -0
  24. package/dist/{chunk-2HZRJ35V.js → chunk-MHFAWJCC.js} +1 -1
  25. package/dist/{chunk-I57LLNAQ.js → chunk-MU2B7A3L.js} +1 -1
  26. package/dist/{chunk-DNU6XLE2.js → chunk-N64Q7FMP.js} +1 -1
  27. package/dist/{chunk-SVXOBKQY.js → chunk-OQ7UEW67.js} +2 -2
  28. package/dist/{chunk-ANSTTB55.js → chunk-PP5CGT2P.js} +20 -21
  29. package/dist/{chunk-TOANT6FD.js → chunk-SWY4DJ67.js} +2 -2
  30. package/dist/{chunk-KMHC36CA.js → chunk-U7UASV36.js} +1 -1
  31. package/dist/{chunk-KAB6UGOL.js → chunk-UU3Q65US.js} +1 -1
  32. package/dist/{chunk-JYQQDI3M.js → chunk-V67XMNGP.js} +2 -2
  33. package/dist/{chunk-B4WPXYPI.js → chunk-VDODEQSJ.js} +6 -1
  34. package/dist/{chunk-S4SXBQ7F.js → chunk-VK2YD7VJ.js} +43 -35
  35. package/dist/{chunk-BLAXARBZ.js → chunk-W5Z2H3LU.js} +194 -1313
  36. package/dist/{chunk-46DYYHN6.js → chunk-WSRGS4XP.js} +34 -0
  37. package/dist/{chunk-AEAZRTEV.js → chunk-Y2XLASFJ.js} +1 -1
  38. package/dist/chunk-YATR5BXD.js +1212 -0
  39. package/dist/{chunk-YTNBO7S6.js → chunk-YN6ISG7A.js} +11 -11
  40. package/dist/cli.js +24 -24
  41. package/dist/{clock-YLDJUKBW.js → clock-BMLJ2TR6.js} +3 -3
  42. package/dist/{cloud-sync-MAQCJEFJ.js → cloud-sync-GV6O2HN2.js} +19 -18
  43. package/dist/{config-PO4EZLIK.js → config-QB7W3Z7P.js} +4 -4
  44. package/dist/connectors/discord-bridge.js +1 -1
  45. package/dist/connectors/slack-bridge.js +1 -1
  46. package/dist/connectors/telegram-bridge.js +1 -1
  47. package/dist/{conversations-AYLXPOGC.js → conversations-KW7IYESK.js} +5 -5
  48. package/dist/{create-ZMTGINV3.js → create-C3BBFYV7.js} +1 -1
  49. package/dist/{create-T4UJ64WB.js → create-CTPXWFTL.js} +5 -5
  50. package/dist/{daemon-client-H6MEKK2W.js → daemon-client-2MIPKY3E.js} +1 -1
  51. package/dist/{daemon-restart-LP2DR24J.js → daemon-restart-W47YDE5E.js} +9 -9
  52. package/dist/daemon.js +155 -111
  53. package/dist/db-D4FVCA5I.js +9 -0
  54. package/dist/{db-FSYOTHSN.js → db-IJL6B26S.js} +1 -1
  55. package/dist/{delete-TXVOH2OC.js → delete-NLXES2C7.js} +3 -3
  56. package/dist/delivery-manager-EB52CQ5X.js +33 -0
  57. package/dist/{delivery-router-T6CYTS3M.js → delivery-router-Y66OXJPM.js} +4 -4
  58. package/dist/down-JVHNXOFU.js +17 -0
  59. package/dist/echo-text-QVPS6QDM.js +32 -0
  60. package/dist/{env-77IOWG4U.js → env-IQ6Q2333.js} +1 -1
  61. package/dist/exec-R2WWZ6FH.js +17 -0
  62. package/dist/{export-TZKOCSCE.js → export-ZZ5WWBUH.js} +6 -6
  63. package/dist/{extension-35NB6GHW.js → extension-LZYHBNLV.js} +1 -1
  64. package/dist/{extensions-LQX2N7TI.js → extensions-AGANCIQA.js} +19 -18
  65. package/dist/{files-WNNVJWJB.js → files-Q2Z4LQZP.js} +4 -4
  66. package/dist/{import-BNNFCQ7U.js → import-MFYCBS4K.js} +11 -11
  67. package/dist/{isolation-4Q4P7HRV.js → isolation-7F3MA4G7.js} +4 -4
  68. package/dist/{join-E2EJEXZO.js → join-6SZCA5FX.js} +3 -3
  69. package/dist/{list-BYCEDASJ.js → list-KHJZJPEJ.js} +1 -1
  70. package/dist/{login-JNSIYFVH.js → login-GYTH67ES.js} +1 -1
  71. package/dist/{login-Y6UAYQVO.js → login-WY3DADVB.js} +3 -3
  72. package/dist/{logout-VHGWVH63.js → logout-TFZHWNVL.js} +3 -3
  73. package/dist/{logout-M6FI62BL.js → logout-YHQLOFLR.js} +1 -1
  74. package/dist/message-delivery-X4CZE2L6.js +41 -0
  75. package/dist/{mind-ELPD6VBP.js → mind-XIKEPJNS.js} +19 -19
  76. package/dist/{mind-activity-tracker-XFRVGXFS.js → mind-activity-tracker-RSIWUUJK.js} +5 -5
  77. package/dist/{mind-history-W4JPTPTV.js → mind-history-WHCNZ6I5.js} +1 -1
  78. package/dist/{mind-list-QROHCLGT.js → mind-list-H3HC2ZRG.js} +1 -1
  79. package/dist/mind-manager-VU3RGCXD.js +31 -0
  80. package/dist/{mind-profile-3LNKXNPA.js → mind-profile-7VYRJGFZ.js} +2 -2
  81. package/dist/mind-service-L7LMMDYJ.js +37 -0
  82. package/dist/{mind-sleep-PVCMLTAH.js → mind-sleep-ZL5ZXFTM.js} +1 -1
  83. package/dist/{mind-status-RAJFLRCN.js → mind-status-ZWULKOUO.js} +1 -1
  84. package/dist/{mind-wake-HZUOVE7J.js → mind-wake-HK5ORGUK.js} +1 -1
  85. package/dist/{package-GO3PHHUF.js → package-2X7UNSTQ.js} +6 -5
  86. package/dist/{read-OOINVR2H.js → read-CP7MYMJQ.js} +1 -1
  87. package/dist/{read-stdin-P6HCZUAA.js → read-stdin-4B5UYPPM.js} +1 -1
  88. package/dist/{register-ISOH34RF.js → register-XOBFEMI4.js} +1 -1
  89. package/dist/{registry-GV35XFT7.js → registry-RAXNFN7K.js} +5 -3
  90. package/dist/{reject-ZBWP62X5.js → reject-43AGXB6B.js} +1 -1
  91. package/dist/{restart-QBJV5455.js → restart-O5QIYQJT.js} +1 -1
  92. package/dist/{sandbox-5R32QKWQ.js → sandbox-O3GZTS7J.js} +5 -5
  93. package/dist/scheduler-SXELVRWO.js +31 -0
  94. package/dist/{schema-LYQUDL7G.js → schema-HHYJDG7B.js} +2 -2
  95. package/dist/{seed-MO2C7CWC.js → seed-I4CNKTKZ.js} +2 -2
  96. package/dist/{seed-check-3WXXRHTC.js → seed-check-HZPVFJKZ.js} +2 -2
  97. package/dist/{seed-cmd-ETIF4WD6.js → seed-cmd-YTQYWCZF.js} +4 -4
  98. package/dist/{seed-create-BPQC2IOR.js → seed-create-MDBTVADS.js} +7 -7
  99. package/dist/{seed-sprout-TX72K33T.js → seed-sprout-N6O5FBPY.js} +11 -11
  100. package/dist/{send-WO3CVG73.js → send-5XA7LRNB.js} +4 -4
  101. package/dist/{service-WMV6R6VJ.js → service-AY5TGWJX.js} +6 -6
  102. package/dist/service-install-NLGAVTQS.js +17 -0
  103. package/dist/{setup-OTEC3ZPM.js → setup-3434PQ5Q.js} +4 -4
  104. package/dist/{setup-ZTW4FVMQ.js → setup-47NBOCZL.js} +9 -9
  105. package/dist/{skill-QHACP7EU.js → skill-ICN6Y2ZF.js} +1 -1
  106. package/dist/{skills-JEWMHIIE.js → skills-YTLBAF32.js} +7 -7
  107. package/dist/sleep-manager-T3AXQB3R.js +35 -0
  108. package/dist/spirit-KTBHLULO.js +24 -0
  109. package/dist/{split-7AO4IO42.js → split-5YBEQTBF.js} +3 -3
  110. package/dist/{sprout-NFJZKYEW.js → sprout-4ZUJUNDQ.js} +2 -2
  111. package/dist/src-4LFGGNW7.js +2201 -0
  112. package/dist/{src-XNUXP2FP.js → src-O4PRLMKM.js} +1 -1
  113. package/dist/{src-2IMB3V27.js → src-OYWRPLC6.js} +1 -1
  114. package/dist/{start-2U57BBK7.js → start-LMXXRR3X.js} +1 -1
  115. package/dist/{status-BRYYYO7C.js → status-VMOZUIZ2.js} +7 -7
  116. package/dist/{stop-QILBDUAR.js → stop-TWDKVEUX.js} +1 -1
  117. package/dist/system-chat-HCPHUQGI.js +35 -0
  118. package/dist/{systems-3XTAHA35.js → systems-Y2WZV2K4.js} +4 -4
  119. package/dist/{tailscale-X4HRKRTW.js → tailscale-PK3AI5EV.js} +3 -3
  120. package/dist/template-hash-JARTCRGS.js +9 -0
  121. package/dist/turn-tracker-SZBSL7LK.js +35 -0
  122. package/dist/up-VGVPOB6J.js +19 -0
  123. package/dist/{update-OY2JYXYK.js → update-3ANTQO54.js} +7 -7
  124. package/dist/{update-check-IUB7QHAF.js → update-check-4O6DKUOF.js} +4 -4
  125. package/dist/{upgrade-25J6AE47.js → upgrade-RXFZR5FI.js} +3 -3
  126. package/dist/{variant-5LQOPCQA.js → variant-HHDTW74J.js} +1 -1
  127. package/dist/{version-notify-N37N2C4G.js → version-notify-SSNAWZMX.js} +21 -20
  128. package/dist/{volute-config-7FO6QKWU.js → volute-config-TS62GS6A.js} +1 -1
  129. package/package.json +5 -4
  130. package/templates/claude/package.json.tmpl +1 -1
  131. package/templates/codex/package.json.tmpl +1 -1
  132. package/templates/pi/package.json.tmpl +2 -1
  133. package/templates/pi/src/agent.ts +1 -1
  134. package/templates/pi/src/lib/content.ts +1 -1
  135. package/templates/pi/src/lib/event-handler.ts +1 -1
  136. package/templates/pi/src/lib/reply-instructions-extension.ts +1 -1
  137. package/templates/pi/src/lib/resolve-model.ts +4 -4
  138. package/templates/pi/src/lib/subagents.ts +2 -2
  139. package/dist/chunk-LMMQX4CK.js +0 -49
  140. package/dist/db-ZEPKEJJD.js +0 -9
  141. package/dist/delivery-manager-VNHLQTTO.js +0 -30
  142. package/dist/down-6DYO2QV7.js +0 -17
  143. package/dist/echo-text-QFCH3H6G.js +0 -31
  144. package/dist/exec-5DGKQ5V3.js +0 -17
  145. package/dist/message-delivery-7BCYJLH2.js +0 -40
  146. package/dist/mind-manager-EDCLALBF.js +0 -30
  147. package/dist/mind-service-WTOFVNLW.js +0 -36
  148. package/dist/scheduler-GQBDCGLU.js +0 -30
  149. package/dist/service-install-W3FQXJKB.js +0 -17
  150. package/dist/sleep-manager-5277OBHI.js +0 -34
  151. package/dist/spirit-NVXWSVKM.js +0 -24
  152. package/dist/src-OS75U2O7.js +0 -241910
  153. package/dist/system-chat-LQSJVY55.js +0 -34
  154. package/dist/template-hash-DMHSLRDX.js +0 -9
  155. package/dist/up-4H7TL6WB.js +0 -19
package/dist/daemon.js CHANGED
@@ -6,31 +6,31 @@ import {
6
6
  rejectPending,
7
7
  stageFile,
8
8
  validateFilePath
9
- } from "./chunk-YHWGN4FX.js";
9
+ } from "./chunk-GSOEUMVO.js";
10
10
  import {
11
11
  findOpenClawSession,
12
12
  importOpenClawConnectors,
13
13
  importPiSession,
14
14
  parseNameFromIdentity
15
- } from "./chunk-SVXOBKQY.js";
15
+ } from "./chunk-OQ7UEW67.js";
16
16
  import {
17
17
  checkForUpdate,
18
18
  checkForUpdateCached,
19
19
  getCurrentVersion
20
- } from "./chunk-MNUXL4XN.js";
20
+ } from "./chunk-FEQPNCXB.js";
21
21
  import {
22
22
  isHomeOnlyArchive
23
- } from "./chunk-I57LLNAQ.js";
23
+ } from "./chunk-MU2B7A3L.js";
24
24
  import {
25
25
  computeTemplateHash
26
- } from "./chunk-KAB6UGOL.js";
26
+ } from "./chunk-UU3Q65US.js";
27
27
  import {
28
28
  PLATFORMS,
29
29
  echoTextToChannel,
30
30
  fixModelEscapes,
31
31
  getPlatformDriver,
32
32
  routeOutboundBridge
33
- } from "./chunk-LZ6CQYRO.js";
33
+ } from "./chunk-AXNAK3HT.js";
34
34
  import {
35
35
  getBridgeConfig,
36
36
  readBridgesConfig,
@@ -39,35 +39,24 @@ import {
39
39
  resolveChannelMapping,
40
40
  setBridgeConfig,
41
41
  setChannelMapping
42
- } from "./chunk-PKGA23XM.js";
42
+ } from "./chunk-CYUNO4BM.js";
43
43
  import {
44
- PROMPT_DEFAULTS,
45
- PROMPT_KEYS,
46
44
  RestartTracker,
47
45
  RotatingLog,
48
46
  announceToSystem,
49
- assignSession,
50
47
  clearDeliveredNotices,
51
- completeOrphanedTurns,
52
- completeTurn,
53
- createTurn,
54
48
  deleteSystemsConfig,
55
49
  deliverMessage,
56
50
  drainNotices,
57
51
  ensureSystemChannel,
58
52
  formatNotices,
59
53
  generateSystemReply,
60
- getActiveTurnId,
61
54
  getAllDiscoveredExtensions,
62
55
  getAllDiscoveredExtensionsDetailed,
63
56
  getDeliveryManager,
64
57
  getExtensionStandardSkills,
65
- getLastToolUseEventId,
66
58
  getLoadedExtensions,
67
59
  getMindManager,
68
- getMindPromptDefaults,
69
- getPrompt,
70
- getPromptIfCustom,
71
60
  getScheduler,
72
61
  getSleepManagerIfReady,
73
62
  getTokenBudget,
@@ -77,17 +66,14 @@ import {
77
66
  initMindManager,
78
67
  initScheduler,
79
68
  initSleepManager,
80
- initSummarizer,
81
69
  initTokenBudget,
82
70
  installNpmExtension,
83
71
  isConversationId,
84
72
  joinSystemChannel,
85
73
  linkToolResultToTurn,
86
74
  loadAllExtensions,
87
- markErrored,
88
75
  notifyExtensionsDaemonStart,
89
76
  notifyExtensionsDaemonStop,
90
- publish as publish2,
91
77
  publishTypingForChannels,
92
78
  readSystemsConfig,
93
79
  recordInbound,
@@ -97,34 +83,29 @@ import {
97
83
  setExtensionEnabled,
98
84
  startMindFull,
99
85
  stopMindFull,
100
- subscribe as subscribe3,
101
- subscribeAll,
102
- substitute,
103
- summarizeOrphanedTurns,
104
- summarizeTurn,
105
86
  syncProviderToMinds,
106
87
  tagUntaggedInbound,
107
88
  tagUntaggedOutbound,
108
- takeErrored,
109
- trackToolUse,
110
89
  uninstallNpmExtension,
111
90
  writeSystemsConfig
112
- } from "./chunk-BLAXARBZ.js";
91
+ } from "./chunk-W5Z2H3LU.js";
113
92
  import {
114
93
  loadMergedEnv,
115
94
  mindEnvPath,
116
95
  readEnv,
117
96
  sharedEnvPath,
118
97
  writeEnv
119
- } from "./chunk-ITH5ZLZJ.js";
120
- import "./chunk-YTNBO7S6.js";
98
+ } from "./chunk-6ZAT5PYV.js";
99
+ import "./chunk-YN6ISG7A.js";
121
100
  import {
122
101
  applyInitFiles,
102
+ applyTemplateHomeFiles,
123
103
  composeTemplate,
124
104
  copyTemplateToDir,
125
105
  findTemplatesRoot,
106
+ isKnownTemplate,
126
107
  listFiles
127
- } from "./chunk-46DYYHN6.js";
108
+ } from "./chunk-WSRGS4XP.js";
128
109
  import {
129
110
  SEED_SKILLS,
130
111
  STANDARD_SKILLS,
@@ -144,7 +125,7 @@ import {
144
125
  syncBuiltinSkills,
145
126
  uninstallSkill,
146
127
  updateSkill
147
- } from "./chunk-QV7P3TYO.js";
128
+ } from "./chunk-JIGVTFIR.js";
148
129
  import {
149
130
  addMessage,
150
131
  createChannel,
@@ -176,25 +157,48 @@ import {
176
157
  setConversationPrivate,
177
158
  subscribe as subscribe2,
178
159
  updateChannelSettings
179
- } from "./chunk-3Y7UDHO7.js";
160
+ } from "./chunk-2R4JIZCB.js";
180
161
  import {
181
162
  readVoluteConfig,
182
163
  writeVoluteConfig
183
164
  } from "./chunk-CU6OFXMM.js";
184
- import "./chunk-KMHC36CA.js";
165
+ import "./chunk-U7UASV36.js";
185
166
  import {
186
167
  getActiveMinds,
187
168
  onMindEvent,
188
169
  stopAll
189
- } from "./chunk-ANSTTB55.js";
170
+ } from "./chunk-PP5CGT2P.js";
190
171
  import {
191
172
  extractTextContent
192
- } from "./chunk-NERYUSER.js";
173
+ } from "./chunk-GMFCSXWB.js";
174
+ import {
175
+ PROMPT_DEFAULTS,
176
+ PROMPT_KEYS,
177
+ assignSession,
178
+ completeOrphanedTurns,
179
+ completeTurn,
180
+ createTurn,
181
+ getActiveTurnId,
182
+ getLastToolUseEventId,
183
+ getMindPromptDefaults,
184
+ getPrompt,
185
+ getPromptIfCustom,
186
+ initSummarizer,
187
+ markErrored,
188
+ publish as publish2,
189
+ subscribe as subscribe3,
190
+ subscribeAll,
191
+ substitute,
192
+ summarizeOrphanedTurns,
193
+ summarizeTurn,
194
+ takeErrored,
195
+ trackToolUse
196
+ } from "./chunk-YATR5BXD.js";
193
197
  import {
194
198
  exec,
195
199
  gitExec,
196
200
  resolveVoluteBin
197
- } from "./chunk-AEAZRTEV.js";
201
+ } from "./chunk-Y2XLASFJ.js";
198
202
  import {
199
203
  chownMindDir,
200
204
  createMindUser,
@@ -202,7 +206,7 @@ import {
202
206
  ensureVoluteGroup,
203
207
  isIsolationEnabled,
204
208
  wrapForIsolation
205
- } from "./chunk-6SYHHEQ7.js";
209
+ } from "./chunk-4ED2DBNC.js";
206
210
  import {
207
211
  getAiConfig,
208
212
  getAvailableModels,
@@ -219,12 +223,12 @@ import {
219
223
  setProviderRefreshHook,
220
224
  setUtilityModel,
221
225
  unqualifyModelId
222
- } from "./chunk-S4SXBQ7F.js";
226
+ } from "./chunk-VK2YD7VJ.js";
223
227
  import {
224
228
  isSetupComplete,
225
229
  readGlobalConfig,
226
230
  writeGlobalConfig
227
- } from "./chunk-DNU6XLE2.js";
231
+ } from "./chunk-N64Q7FMP.js";
228
232
  import {
229
233
  approveUser,
230
234
  changePassword,
@@ -243,11 +247,11 @@ import {
243
247
  syncMindProfile,
244
248
  updateUserProfile,
245
249
  verifyUser
246
- } from "./chunk-E25SO3QW.js";
250
+ } from "./chunk-6TPRURK5.js";
247
251
  import {
248
252
  broadcast,
249
253
  subscribe
250
- } from "./chunk-QYI65HCL.js";
254
+ } from "./chunk-2RQIIKFC.js";
251
255
  import {
252
256
  logBuffer,
253
257
  logger_default
@@ -272,12 +276,13 @@ import {
272
276
  removeMind,
273
277
  setMindRunning,
274
278
  setMindStage,
279
+ setMindTemplate,
275
280
  setMindTemplateHash,
276
281
  stateDir,
277
282
  validateMindName,
278
283
  voluteHome,
279
284
  voluteSystemDir
280
- } from "./chunk-B4WPXYPI.js";
285
+ } from "./chunk-VDODEQSJ.js";
281
286
  import {
282
287
  activity,
283
288
  channels,
@@ -289,8 +294,8 @@ import {
289
294
  systemPrompts,
290
295
  turns,
291
296
  users
292
- } from "./chunk-2HZRJ35V.js";
293
- import "./chunk-LMMQX4CK.js";
297
+ } from "./chunk-MHFAWJCC.js";
298
+ import "./chunk-K3NQKI34.js";
294
299
 
295
300
  // packages/daemon/src/daemon.ts
296
301
  import { randomBytes } from "crypto";
@@ -627,9 +632,9 @@ async function cleanExpiredLogs() {
627
632
  }
628
633
 
629
634
  // packages/daemon/src/web/api/system.ts
635
+ import { getOAuthProvider, getOAuthProviders } from "@earendil-works/pi-ai/oauth";
636
+ import { getBuiltinProviders } from "@earendil-works/pi-ai/providers/all";
630
637
  import { zValidator } from "@hono/zod-validator";
631
- import { getProviders } from "@mariozechner/pi-ai";
632
- import { getOAuthProvider, getOAuthProviders } from "@mariozechner/pi-ai/oauth";
633
638
  import { Hono } from "hono";
634
639
  import { streamSSE } from "hono/streaming";
635
640
  import { z } from "zod";
@@ -1200,7 +1205,7 @@ var app = new Hono().post("/restart", requireAdmin, (c) => {
1200
1205
  if (!key) return c.json({ error: "No key available" }, 404);
1201
1206
  return c.json({ key });
1202
1207
  }).get("/ai/providers", requireAdmin, (c) => {
1203
- const allProviders = getProviders();
1208
+ const allProviders = getBuiltinProviders();
1204
1209
  const oauthProviders = getOAuthProviders();
1205
1210
  const oauthMap = new Map(oauthProviders.map((p) => [p.id, p]));
1206
1211
  const ai = getAiConfig();
@@ -1223,8 +1228,8 @@ var app = new Hono().post("/restart", requireAdmin, (c) => {
1223
1228
  };
1224
1229
  });
1225
1230
  return c.json(result);
1226
- }).get("/ai/models", requireAdmin, (c) => {
1227
- const models = getAvailableModels();
1231
+ }).get("/ai/models", requireAdmin, async (c) => {
1232
+ const models = await getAvailableModels();
1228
1233
  const enabled = new Set(getEnabledModels());
1229
1234
  return c.json(
1230
1235
  models.map((m) => ({
@@ -1318,6 +1323,15 @@ var app = new Hono().post("/restart", requireAdmin, (c) => {
1318
1323
  if (existing)
1319
1324
  Object.assign(existing, { url: info.url, instructions: info.instructions });
1320
1325
  },
1326
+ onDeviceCode: (info) => {
1327
+ const existing = oauthFlows.get(flowId);
1328
+ if (existing)
1329
+ Object.assign(existing, {
1330
+ url: info.verificationUri,
1331
+ instructions: `Enter code: ${info.userCode}`
1332
+ });
1333
+ },
1334
+ onSelect: async (_prompt) => void 0,
1321
1335
  onPrompt: async (_prompt) => {
1322
1336
  if (promptPromise) {
1323
1337
  const existing = oauthFlows.get(flowId);
@@ -1484,7 +1498,7 @@ function needsRefresh(oauth) {
1484
1498
  }
1485
1499
  async function refreshApiKeyCache() {
1486
1500
  const ai = getAiConfig();
1487
- const providers = getConfiguredProviders();
1501
+ const providers = await getConfiguredProviders();
1488
1502
  for (const id of oauthHealth.keys()) {
1489
1503
  if (!providers.includes(id)) oauthHealth.delete(id);
1490
1504
  }
@@ -2002,7 +2016,7 @@ var app4 = new Hono4().post("/:platform/inbound", zValidator3("json", inboundSch
2002
2016
  }
2003
2017
  const participants = await getParticipants(channel.id);
2004
2018
  if (!participants.some((p) => p.userId === puppet.id)) {
2005
- const { addParticipant } = await import("./conversations-AYLXPOGC.js");
2019
+ const { addParticipant } = await import("./conversations-KW7IYESK.js");
2006
2020
  await addParticipant(channel.id, puppet.id);
2007
2021
  }
2008
2022
  const contentBlocks = body.content;
@@ -2095,8 +2109,8 @@ async function fanOutToBridgedMinds(opts) {
2095
2109
  const participants = await getParticipants(opts.conversationId);
2096
2110
  const mindParticipants = participants.filter((p) => p.userType === "mind");
2097
2111
  const participantNames = participants.map((p) => p.username);
2098
- const { getMindManager: getMindManager2 } = await import("./mind-manager-EDCLALBF.js");
2099
- const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-5277OBHI.js");
2112
+ const { getMindManager: getMindManager2 } = await import("./mind-manager-VU3RGCXD.js");
2113
+ const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-T3AXQB3R.js");
2100
2114
  const manager = getMindManager2();
2101
2115
  const sm = getSleepManagerIfReady2();
2102
2116
  const targetMinds = mindParticipants.filter((ap) => {
@@ -2155,9 +2169,9 @@ var channels_default = app5;
2155
2169
  // packages/daemon/src/web/api/config.ts
2156
2170
  import { Hono as Hono6 } from "hono";
2157
2171
  var config = new Hono6();
2158
- config.get("/models", (c) => {
2172
+ config.get("/models", async (c) => {
2159
2173
  const enabled = new Set(getEnabledModels());
2160
- const all = getAvailableModels();
2174
+ const all = await getAvailableModels();
2161
2175
  const models = all.map((m) => ({
2162
2176
  id: m.id,
2163
2177
  name: m.name,
@@ -2166,8 +2180,8 @@ config.get("/models", (c) => {
2166
2180
  }));
2167
2181
  return c.json(models);
2168
2182
  });
2169
- config.get("/providers", (c) => {
2170
- const configured = getConfiguredProviders();
2183
+ config.get("/providers", async (c) => {
2184
+ const configured = await getConfiguredProviders();
2171
2185
  return c.json(configured.map((id) => ({ id, configured: true })));
2172
2186
  });
2173
2187
  config.get("/status", (c) => {
@@ -2308,7 +2322,7 @@ async function notifyMind(mindName, message) {
2308
2322
  const entry = await findMind(mindName);
2309
2323
  if (!entry) return;
2310
2324
  try {
2311
- const { sendSystemMessage } = await import("./system-chat-LQSJVY55.js");
2325
+ const { sendSystemMessage } = await import("./system-chat-HCPHUQGI.js");
2312
2326
  await sendSystemMessage(mindName, message);
2313
2327
  } catch (err) {
2314
2328
  logger_default.warn(`[file-sharing] notify mind ${mindName} failed`, logger_default.errorData(err));
@@ -3354,7 +3368,7 @@ async function cleanupVariant(variantName, projectRoot, variantPath, opts) {
3354
3368
  logger_default.warn(`failed to stop variant ${variantName}`, logger_default.errorData(err));
3355
3369
  }
3356
3370
  }
3357
- const { findMind: findMind2 } = await import("./registry-GV35XFT7.js");
3371
+ const { findMind: findMind2 } = await import("./registry-RAXNFN7K.js");
3358
3372
  const variantEntry = await findMind2(variantName);
3359
3373
  const branchName = variantEntry?.branch ?? variantName;
3360
3374
  if (existsSync6(variantPath)) {
@@ -3611,7 +3625,7 @@ async function getMindStatus(name, port, registryRunning) {
3611
3625
  const manager = getMindManager();
3612
3626
  let status = "stopped";
3613
3627
  try {
3614
- const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-5277OBHI.js");
3628
+ const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-T3AXQB3R.js");
3615
3629
  if (getSleepManagerIfReady2()?.isSleeping(name)) {
3616
3630
  status = "sleeping";
3617
3631
  }
@@ -3743,7 +3757,8 @@ async function npmInstallAsMind(cwd, mindName) {
3743
3757
  await exec("npm", ["install"], { cwd });
3744
3758
  }
3745
3759
  }
3746
- async function mergeUpgradeAndRestart(mindName, dir, worktreeDir, upgradeVariantName, upgradeBranch, template) {
3760
+ async function mergeUpgradeAndRestart(mindName, dir, worktreeDir, upgradeVariantName, upgradeBranch, template, oldTemplate) {
3761
+ const templateChanged = template !== oldTemplate;
3747
3762
  const mainStatus = (await gitExec(["status", "--porcelain"], { cwd: dir })).trim();
3748
3763
  if (mainStatus) {
3749
3764
  await gitExec(["add", "-A"], { cwd: dir });
@@ -3759,10 +3774,33 @@ async function mergeUpgradeAndRestart(mindName, dir, worktreeDir, upgradeVariant
3759
3774
  await gitExec(["branch", "-D", upgradeBranch], { cwd: dir });
3760
3775
  } catch {
3761
3776
  }
3777
+ let switchWarning;
3778
+ if (templateChanged) {
3779
+ try {
3780
+ applyTemplateHomeFiles(resolve11(dir, "home"), template);
3781
+ await gitExec(["add", "home/"], { cwd: dir });
3782
+ try {
3783
+ await gitExec(["diff", "--cached", "--quiet"], { cwd: dir });
3784
+ } catch {
3785
+ await gitExec(["commit", "-m", `swap template-owned home files for ${template}`], {
3786
+ cwd: dir
3787
+ });
3788
+ }
3789
+ chownMindDir(dir, mindName);
3790
+ switchWarning = `Switched ${oldTemplate}\u2192${template}: config reset to ${template} defaults, mechanics doc replaced, conversation starts fresh (sessions aren't portable across runtimes).`;
3791
+ } catch (err) {
3792
+ logger_default.warn(`failed to swap template home files for ${mindName}`, logger_default.errorData(err));
3793
+ return {
3794
+ ok: true,
3795
+ warning: `Upgrade merged but template switch ${oldTemplate}\u2192${template} failed: ${err instanceof Error ? err.message : String(err)}. The mind is still registered as ${oldTemplate}; re-run the switch or fix home/ manually.`
3796
+ };
3797
+ }
3798
+ }
3762
3799
  try {
3763
3800
  await setMindTemplateHash(mindName, computeTemplateHash(template));
3801
+ await setMindTemplate(mindName, template);
3764
3802
  } catch (err) {
3765
- logger_default.warn(`failed to update template hash for ${mindName}`, logger_default.errorData(err));
3803
+ logger_default.warn(`failed to update template for ${mindName}`, logger_default.errorData(err));
3766
3804
  }
3767
3805
  try {
3768
3806
  await npmInstallAsMind(dir, mindName);
@@ -3786,7 +3824,7 @@ async function mergeUpgradeAndRestart(mindName, dir, worktreeDir, upgradeVariant
3786
3824
  warning: `Upgrade merged but mind restart failed: ${e instanceof Error ? e.message : String(e)}`
3787
3825
  };
3788
3826
  }
3789
- return { ok: true };
3827
+ return { ok: true, warning: switchWarning };
3790
3828
  }
3791
3829
  async function importFromArchive(c, tempDir, nameOverride, manifest) {
3792
3830
  const extractedMindDir = resolve11(tempDir, "mind");
@@ -4068,7 +4106,7 @@ async function proxyToMind(c, path) {
4068
4106
  var app13 = new Hono15().post("/", requireAdminOrSystem, zValidator5("json", createMindSchema), async (c) => {
4069
4107
  const body = c.req.valid("json");
4070
4108
  const { name } = body;
4071
- const template = body.template ?? resolveTemplate(body.model);
4109
+ const template = body.template ?? await resolveTemplate(body.model);
4072
4110
  const nameErr = validateMindName(name);
4073
4111
  if (nameErr) return c.json({ error: nameErr }, 400);
4074
4112
  if (await findMind(name)) return c.json({ error: `Mind already exists: ${name}` }, 409);
@@ -4082,7 +4120,7 @@ var app13 = new Hono15().post("/", requireAdminOrSystem, zValidator5("json", cre
4082
4120
  applyInitFiles(dest);
4083
4121
  const { publicKeyPem } = generateIdentity(dest);
4084
4122
  {
4085
- const { readGlobalConfig: readGlobal } = await import("./setup-OTEC3ZPM.js");
4123
+ const { readGlobalConfig: readGlobal } = await import("./setup-3434PQ5Q.js");
4086
4124
  const mindDefaults = readGlobal().mindDefaults;
4087
4125
  const config2 = readVoluteConfig(dest);
4088
4126
  if (!config2) throw new Error("Failed to read volute.json after identity generation");
@@ -4173,7 +4211,7 @@ The human who planted you described you as: "${body.description}"
4173
4211
  }
4174
4212
  let skillSet = body.skills ?? (body.stage === "seed" ? SEED_SKILLS : getStandardSkillsWithExtensions());
4175
4213
  if (body.stage === "seed" && !body.skills) {
4176
- const { isImagegenEnabled } = await import("./setup-OTEC3ZPM.js");
4214
+ const { isImagegenEnabled } = await import("./setup-3434PQ5Q.js");
4177
4215
  if (isImagegenEnabled()) {
4178
4216
  skillSet = [...skillSet, "imagegen"];
4179
4217
  }
@@ -4191,7 +4229,7 @@ The human who planted you described you as: "${body.description}"
4191
4229
  try {
4192
4230
  const spiritEntry = await findMind("volute");
4193
4231
  if (spiritEntry) {
4194
- const { spiritDir } = await import("./spirit-NVXWSVKM.js");
4232
+ const { spiritDir } = await import("./spirit-KTBHLULO.js");
4195
4233
  const sDir = spiritEntry.dir ?? spiritDir();
4196
4234
  const spiritConfig = readVoluteConfig(sDir) ?? {};
4197
4235
  const schedules = spiritConfig.schedules ?? [];
@@ -4206,7 +4244,7 @@ The human who planted you described you as: "${body.description}"
4206
4244
  });
4207
4245
  spiritConfig.schedules = schedules;
4208
4246
  writeVoluteConfig(sDir, spiritConfig);
4209
- const { getScheduler: getScheduler2 } = await import("./scheduler-GQBDCGLU.js");
4247
+ const { getScheduler: getScheduler2 } = await import("./scheduler-SXELVRWO.js");
4210
4248
  getScheduler2().loadSchedules("volute", sDir);
4211
4249
  }
4212
4250
  }
@@ -4471,7 +4509,7 @@ ${user.trimEnd()}
4471
4509
  const manager = getMindManager();
4472
4510
  try {
4473
4511
  if (context?.type === "reload") {
4474
- const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-5277OBHI.js");
4512
+ const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-T3AXQB3R.js");
4475
4513
  const sleepState = getSleepManagerIfReady2()?.getState(name);
4476
4514
  if (sleepState?.sleeping) {
4477
4515
  logger_default.info(`skipping reload for ${name} during sleep \u2014 will apply on next wake`);
@@ -4566,7 +4604,7 @@ ${user.trimEnd()}
4566
4604
  const name = c.req.param("name");
4567
4605
  const entry = await findMind(name);
4568
4606
  if (!entry) return c.json({ error: "Mind not found" }, 404);
4569
- const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-5277OBHI.js");
4607
+ const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-T3AXQB3R.js");
4570
4608
  const sm = getSleepManagerIfReady2();
4571
4609
  if (!sm) return c.json({ error: "Sleep manager not initialized" }, 503);
4572
4610
  return c.json(sm.getState(name));
@@ -4574,7 +4612,7 @@ ${user.trimEnd()}
4574
4612
  const name = c.req.param("name");
4575
4613
  const entry = await findMind(name);
4576
4614
  if (!entry) return c.json({ error: "Mind not found" }, 404);
4577
- const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-5277OBHI.js");
4615
+ const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-T3AXQB3R.js");
4578
4616
  const sm = getSleepManagerIfReady2();
4579
4617
  if (!sm) return c.json({ error: "Sleep manager not initialized" }, 503);
4580
4618
  if (sm.isSleeping(name)) return c.json({ error: "Mind is already sleeping" }, 409);
@@ -4594,7 +4632,7 @@ ${user.trimEnd()}
4594
4632
  const name = c.req.param("name");
4595
4633
  const entry = await findMind(name);
4596
4634
  if (!entry) return c.json({ error: "Mind not found" }, 404);
4597
- const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-5277OBHI.js");
4635
+ const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-T3AXQB3R.js");
4598
4636
  const sm = getSleepManagerIfReady2();
4599
4637
  if (!sm) return c.json({ error: "Sleep manager not initialized" }, 503);
4600
4638
  const sleepState = sm.getState(name);
@@ -4609,7 +4647,7 @@ ${user.trimEnd()}
4609
4647
  const name = c.req.param("name");
4610
4648
  const entry = await findMind(name);
4611
4649
  if (!entry) return c.json({ error: "Mind not found" }, 404);
4612
- const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-5277OBHI.js");
4650
+ const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-T3AXQB3R.js");
4613
4651
  const sm = getSleepManagerIfReady2();
4614
4652
  if (!sm) return c.json({ error: "Sleep manager not initialized" }, 503);
4615
4653
  const flushed = await sm.flushQueuedMessages(name);
@@ -4627,7 +4665,7 @@ ${user.trimEnd()}
4627
4665
  if (body.avatar !== void 0) profile.avatar = basename(body.avatar);
4628
4666
  config2.profile = profile;
4629
4667
  writeVoluteConfig(dir, config2);
4630
- const { syncMindProfile: syncMindProfile2 } = await import("./auth-X6ZITZ7D.js");
4668
+ const { syncMindProfile: syncMindProfile2 } = await import("./auth-VYW2ECCE.js");
4631
4669
  await syncMindProfile2(name, profile);
4632
4670
  broadcast({ type: "profile_updated", mind: name, summary: `${name} profile updated` });
4633
4671
  return c.json({ ok: true });
@@ -4674,7 +4712,7 @@ ${user.trimEnd()}
4674
4712
  const config2 = readVoluteConfig(dir);
4675
4713
  const displayNameSet = !!config2?.profile?.displayName;
4676
4714
  const avatarSet = !!config2?.profile?.avatar;
4677
- const { isImagegenEnabled } = await import("./setup-OTEC3ZPM.js");
4715
+ const { isImagegenEnabled } = await import("./setup-3434PQ5Q.js");
4678
4716
  const imagegenEnabled = isImagegenEnabled();
4679
4717
  const done = [];
4680
4718
  const remaining = [];
@@ -4712,7 +4750,7 @@ ${user.trimEnd()}
4712
4750
  try {
4713
4751
  const spiritEntry = await findMind("volute");
4714
4752
  if (spiritEntry) {
4715
- const { spiritDir } = await import("./spirit-NVXWSVKM.js");
4753
+ const { spiritDir } = await import("./spirit-KTBHLULO.js");
4716
4754
  const sDir = spiritEntry.dir ?? spiritDir();
4717
4755
  const spiritConfig = readVoluteConfig(sDir);
4718
4756
  if (spiritConfig?.schedules) {
@@ -4720,7 +4758,7 @@ ${user.trimEnd()}
4720
4758
  spiritConfig.schedules = spiritConfig.schedules.filter((s) => s.id !== nurtureId);
4721
4759
  if (spiritConfig.schedules.length === 0) spiritConfig.schedules = void 0;
4722
4760
  writeVoluteConfig(sDir, spiritConfig);
4723
- const { getScheduler: getScheduler2 } = await import("./scheduler-GQBDCGLU.js");
4761
+ const { getScheduler: getScheduler2 } = await import("./scheduler-SXELVRWO.js");
4724
4762
  getScheduler2().loadSchedules("volute", sDir);
4725
4763
  }
4726
4764
  }
@@ -4772,7 +4810,11 @@ ${user.trimEnd()}
4772
4810
  body = await c.req.json();
4773
4811
  } catch {
4774
4812
  }
4775
- const template = body.template ?? entry.template ?? "claude";
4813
+ const oldTemplate = entry.template ?? "claude";
4814
+ const template = body.template ?? oldTemplate;
4815
+ if (!isKnownTemplate(template)) {
4816
+ return c.json({ error: `Unknown template: ${template}` }, 400);
4817
+ }
4776
4818
  const UPGRADE_BRANCH = "upgrade";
4777
4819
  const upgradeVariantName = `${mindName}-upgrade`;
4778
4820
  const worktreeDir = resolve11(dir, ".variants", UPGRADE_BRANCH);
@@ -4841,7 +4883,8 @@ ${user.trimEnd()}
4841
4883
  worktreeDir,
4842
4884
  upgradeVariantName,
4843
4885
  UPGRADE_BRANCH,
4844
- template
4886
+ template,
4887
+ oldTemplate
4845
4888
  );
4846
4889
  return c.json(result);
4847
4890
  } catch (err) {
@@ -4973,7 +5016,8 @@ ${user.trimEnd()}
4973
5016
  worktreeDir,
4974
5017
  upgradeVariantName,
4975
5018
  UPGRADE_BRANCH,
4976
- template
5019
+ template,
5020
+ oldTemplate
4977
5021
  );
4978
5022
  return c.json(result);
4979
5023
  } catch (err) {
@@ -5149,7 +5193,7 @@ ${user.trimEnd()}
5149
5193
  }
5150
5194
  writeVoluteConfig(dir, existing);
5151
5195
  if (body.unescapeNewlines !== void 0) {
5152
- const { clearEchoTextCache } = await import("./echo-text-QFCH3H6G.js");
5196
+ const { clearEchoTextCache } = await import("./echo-text-QVPS6QDM.js");
5153
5197
  clearEchoTextCache(name);
5154
5198
  }
5155
5199
  const needsConfigJson = body.model !== void 0 || body.thinkingLevel !== void 0 || body.maxThinkingTokens !== void 0 || body.compaction !== void 0;
@@ -5226,7 +5270,7 @@ ${user.trimEnd()}
5226
5270
  }
5227
5271
  if (entry.mindType === "spirit" && body.model !== void 0) {
5228
5272
  try {
5229
- const { readGlobalConfig: readGlobalConfig2, writeGlobalConfig: writeGlobalConfig2 } = await import("./setup-OTEC3ZPM.js");
5273
+ const { readGlobalConfig: readGlobalConfig2, writeGlobalConfig: writeGlobalConfig2 } = await import("./setup-3434PQ5Q.js");
5230
5274
  const globalConfig = readGlobalConfig2();
5231
5275
  globalConfig.spiritModel = body.model;
5232
5276
  writeGlobalConfig2(globalConfig);
@@ -5254,7 +5298,7 @@ ${user.trimEnd()}
5254
5298
  if (!body.systemPrompt || !body.message) {
5255
5299
  return c.json({ error: "systemPrompt and message required" }, 400);
5256
5300
  }
5257
- const { aiComplete: aiCompleteFn, isAiConfigured } = await import("./ai-service-AUWIPWLP.js");
5301
+ const { aiComplete: aiCompleteFn, isAiConfigured } = await import("./ai-service-ZHEPFC3U.js");
5258
5302
  if (!isAiConfigured()) {
5259
5303
  return c.json({ error: "AI service not configured" }, 503);
5260
5304
  }
@@ -5998,7 +6042,7 @@ var app15 = new Hono17().get("/:name/clock/status", requireSelf(), async (c) =>
5998
6042
  const body = await c.req.text();
5999
6043
  const message = `[webhook: ${event}] ${body}`;
6000
6044
  try {
6001
- const { sendSystemMessage } = await import("./system-chat-LQSJVY55.js");
6045
+ const { sendSystemMessage } = await import("./system-chat-HCPHUQGI.js");
6002
6046
  await sendSystemMessage(name, message);
6003
6047
  return c.json({ ok: true });
6004
6048
  } catch (err) {
@@ -6052,7 +6096,7 @@ setup.get("/status", async (c) => {
6052
6096
  let hasAccount = false;
6053
6097
  if (hasSystem) {
6054
6098
  try {
6055
- const { listUsersByType: listUsersByType2 } = await import("./auth-X6ZITZ7D.js");
6099
+ const { listUsersByType: listUsersByType2 } = await import("./auth-VYW2ECCE.js");
6056
6100
  const brains = await listUsersByType2("brain");
6057
6101
  hasAccount = brains.length > 0;
6058
6102
  } catch (err) {
@@ -6263,7 +6307,7 @@ setup.post("/account", async (c) => {
6263
6307
  }
6264
6308
  }
6265
6309
  try {
6266
- const { createUser: createUser2, updateUserProfile: updateUserProfile2 } = await import("./auth-X6ZITZ7D.js");
6310
+ const { createUser: createUser2, updateUserProfile: updateUserProfile2 } = await import("./auth-VYW2ECCE.js");
6267
6311
  const user = await createUser2(body.username.trim(), body.password);
6268
6312
  if (body.displayName?.trim()) {
6269
6313
  await updateUserProfile2(user.id, { display_name: body.displayName.trim() });
@@ -6309,7 +6353,7 @@ setup.post("/models", async (c) => {
6309
6353
  return c.json({ error: "Spirit model is required" }, 400);
6310
6354
  }
6311
6355
  try {
6312
- const { setEnabledModels: setEnabledModels3, setUtilityModel: setUtilityModel2 } = await import("./ai-service-AUWIPWLP.js");
6356
+ const { setEnabledModels: setEnabledModels3, setUtilityModel: setUtilityModel2 } = await import("./ai-service-ZHEPFC3U.js");
6313
6357
  setEnabledModels3(body.models);
6314
6358
  const config2 = readGlobalConfig();
6315
6359
  config2.spiritModel = body.spiritModel.trim();
@@ -6327,15 +6371,15 @@ setup.post("/complete", async (c) => {
6327
6371
  return c.json({ error: "Setup already complete" }, 400);
6328
6372
  }
6329
6373
  try {
6330
- const { ensureSpiritProject, syncSpiritTemplate } = await import("./spirit-NVXWSVKM.js");
6331
- const { startSpiritFull } = await import("./mind-service-WTOFVNLW.js");
6374
+ const { ensureSpiritProject, syncSpiritTemplate } = await import("./spirit-KTBHLULO.js");
6375
+ const { startSpiritFull } = await import("./mind-service-L7LMMDYJ.js");
6332
6376
  await ensureSpiritProject();
6333
6377
  await syncSpiritTemplate();
6334
6378
  const warnings = [];
6335
6379
  const config2 = readGlobalConfig();
6336
6380
  if (config2.setup?.service && config2.setup?.type === "local") {
6337
6381
  try {
6338
- const { installUserService } = await import("./service-install-W3FQXJKB.js");
6382
+ const { installUserService } = await import("./service-install-NLGAVTQS.js");
6339
6383
  const installed = await installUserService(config2.port, config2.hostname);
6340
6384
  if (!installed) {
6341
6385
  warnings.push("Service installation is not supported on this platform.");
@@ -6363,8 +6407,8 @@ setup.post("/complete", async (c) => {
6363
6407
  }
6364
6408
  let spiritConversationId;
6365
6409
  try {
6366
- const { getOrCreateMindUser: getOrCreateMindUser2, listUsersByType: listUsersByType2 } = await import("./auth-X6ZITZ7D.js");
6367
- const { createConversation: createConversation2, findDMConversation: findDMConversation2 } = await import("./conversations-AYLXPOGC.js");
6410
+ const { getOrCreateMindUser: getOrCreateMindUser2, listUsersByType: listUsersByType2 } = await import("./auth-VYW2ECCE.js");
6411
+ const { createConversation: createConversation2, findDMConversation: findDMConversation2 } = await import("./conversations-KW7IYESK.js");
6368
6412
  const spiritUser = await getOrCreateMindUser2("volute");
6369
6413
  const brains = await listUsersByType2("brain");
6370
6414
  const admin2 = brains.find((u) => u.role === "admin");
@@ -6386,8 +6430,8 @@ setup.post("/complete", async (c) => {
6386
6430
  logger_default.info("setup complete state", { spiritConversationId, spiritStarted });
6387
6431
  if (spiritConversationId && spiritStarted) {
6388
6432
  try {
6389
- const { deliverMessage: deliverMessage2 } = await import("./message-delivery-7BCYJLH2.js");
6390
- const { listUsersByType: listUsers2 } = await import("./auth-X6ZITZ7D.js");
6433
+ const { deliverMessage: deliverMessage2 } = await import("./message-delivery-X4CZE2L6.js");
6434
+ const { listUsersByType: listUsers2 } = await import("./auth-VYW2ECCE.js");
6391
6435
  const admins = await listUsers2("brain");
6392
6436
  const admin2 = admins.find((u) => u.role === "admin");
6393
6437
  const adminName = admin2?.display_name || admin2?.username || "the admin";
@@ -7144,8 +7188,8 @@ var app21 = new Hono24().get("/:name/variants", async (c) => {
7144
7188
  await cleanupVariant(variantName, projectRoot, variantEntry.dir);
7145
7189
  if (variantName.endsWith("-upgrade") || variantName === "upgrade") {
7146
7190
  try {
7147
- const { computeTemplateHash: computeTemplateHash2 } = await import("./template-hash-DMHSLRDX.js");
7148
- const { setMindTemplateHash: setMindTemplateHash2 } = await import("./registry-GV35XFT7.js");
7191
+ const { computeTemplateHash: computeTemplateHash2 } = await import("./template-hash-JARTCRGS.js");
7192
+ const { setMindTemplateHash: setMindTemplateHash2 } = await import("./registry-RAXNFN7K.js");
7149
7193
  const tmpl = parentEntry.template ?? "claude";
7150
7194
  await setMindTemplateHash2(mindName, computeTemplateHash2(tmpl));
7151
7195
  } catch (err) {
@@ -7917,18 +7961,18 @@ async function startDaemon(opts) {
7917
7961
  const DAEMON_JSON_PATH = resolve17(systemDir, "daemon.json");
7918
7962
  mkdirSync10(home, { recursive: true });
7919
7963
  ensureSystemDir();
7920
- const { migrateSetupCompleted } = await import("./setup-OTEC3ZPM.js");
7964
+ const { migrateSetupCompleted } = await import("./setup-3434PQ5Q.js");
7921
7965
  migrateSetupCompleted();
7922
- await (await import("./db-ZEPKEJJD.js")).getDb();
7966
+ await (await import("./db-D4FVCA5I.js")).getDb();
7923
7967
  try {
7924
7968
  const { eq: eq7, and: and5 } = await import("drizzle-orm");
7925
- const { users: users2 } = await import("./schema-LYQUDL7G.js");
7926
- const db = await (await import("./db-ZEPKEJJD.js")).getDb();
7969
+ const { users: users2 } = await import("./schema-HHYJDG7B.js");
7970
+ const db = await (await import("./db-D4FVCA5I.js")).getDb();
7927
7971
  await db.update(users2).set({ role: "system" }).where(and5(eq7(users2.user_type, "system"), eq7(users2.role, "user")));
7928
7972
  } catch (err) {
7929
7973
  logger_default.warn("failed to migrate system user role", logger_default.errorData(err));
7930
7974
  }
7931
- const { initSandbox } = await import("./sandbox-5R32QKWQ.js");
7975
+ const { initSandbox } = await import("./sandbox-O3GZTS7J.js");
7932
7976
  await initSandbox();
7933
7977
  try {
7934
7978
  await syncBuiltinSkills();
@@ -7955,7 +7999,7 @@ async function startDaemon(opts) {
7955
7999
  logger_default.warn("failed to ensure #system channel", logger_default.errorData(err));
7956
8000
  }
7957
8001
  try {
7958
- const { getOrCreateSystemUser: getOrCreateSystemUser2 } = await import("./auth-X6ZITZ7D.js");
8002
+ const { getOrCreateSystemUser: getOrCreateSystemUser2 } = await import("./auth-VYW2ECCE.js");
7959
8003
  await getOrCreateSystemUser2();
7960
8004
  } catch (err) {
7961
8005
  logger_default.warn(
@@ -7964,12 +8008,12 @@ async function startDaemon(opts) {
7964
8008
  );
7965
8009
  }
7966
8010
  const token = process.env.VOLUTE_DAEMON_TOKEN || randomBytes(32).toString("hex");
7967
- const { readGlobalConfig: readGlobalConfig2 } = await import("./setup-OTEC3ZPM.js");
8011
+ const { readGlobalConfig: readGlobalConfig2 } = await import("./setup-3434PQ5Q.js");
7968
8012
  const globalCfg = readGlobalConfig2();
7969
8013
  let tls;
7970
8014
  if (opts.tailscale || globalCfg.tailscale) {
7971
8015
  try {
7972
- const { getTailscaleTls } = await import("./tailscale-X4HRKRTW.js");
8016
+ const { getTailscaleTls } = await import("./tailscale-PK3AI5EV.js");
7973
8017
  const tlsConfig = await getTailscaleTls();
7974
8018
  tls = { key: tlsConfig.key, cert: tlsConfig.cert };
7975
8019
  logger_default.info("Tailscale HTTPS enabled", { hostname: tlsConfig.hostname });
@@ -8048,10 +8092,10 @@ async function startDaemon(opts) {
8048
8092
  await Promise.all(workers);
8049
8093
  }
8050
8094
  try {
8051
- const { isSetupComplete: isSetupComplete2 } = await import("./setup-OTEC3ZPM.js");
8095
+ const { isSetupComplete: isSetupComplete2 } = await import("./setup-3434PQ5Q.js");
8052
8096
  if (isSetupComplete2()) {
8053
- const { ensureSpiritProject, syncSpiritTemplate } = await import("./spirit-NVXWSVKM.js");
8054
- const { startSpiritFull } = await import("./mind-service-WTOFVNLW.js");
8097
+ const { ensureSpiritProject, syncSpiritTemplate } = await import("./spirit-KTBHLULO.js");
8098
+ const { startSpiritFull } = await import("./mind-service-L7LMMDYJ.js");
8055
8099
  await ensureSpiritProject();
8056
8100
  await syncSpiritTemplate();
8057
8101
  const spiritEntry = await findMind("volute");
@@ -8068,7 +8112,7 @@ async function startDaemon(opts) {
8068
8112
  bridgeManager.startBridges(daemonPort).catch((err) => {
8069
8113
  logger_default.warn("failed to start bridges", logger_default.errorData(err));
8070
8114
  });
8071
- import("./cloud-sync-MAQCJEFJ.js").then(
8115
+ import("./cloud-sync-GV6O2HN2.js").then(
8072
8116
  ({ consumeQueuedMessages }) => consumeQueuedMessages().catch((err) => {
8073
8117
  logger_default.warn("failed to consume queued cloud messages", logger_default.errorData(err));
8074
8118
  })
@@ -8076,7 +8120,7 @@ async function startDaemon(opts) {
8076
8120
  logger_default.warn("failed to load cloud-sync module", logger_default.errorData(err));
8077
8121
  });
8078
8122
  try {
8079
- const { backfillTemplateHashes, notifyVersionUpdate } = await import("./version-notify-N37N2C4G.js");
8123
+ const { backfillTemplateHashes, notifyVersionUpdate } = await import("./version-notify-SSNAWZMX.js");
8080
8124
  backfillTemplateHashes();
8081
8125
  notifyVersionUpdate().catch((err) => {
8082
8126
  logger_default.warn("failed to send version update notifications", logger_default.errorData(err));