volute 0.46.0 → 0.48.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 (172) hide show
  1. package/README.md +10 -10
  2. package/dist/{accept-N5XULCXK.js → accept-KYNC5X3U.js} +1 -1
  3. package/dist/{activity-events-NF6VWTJQ.js → activity-events-MIOK3IOU.js} +3 -3
  4. package/dist/{ai-service-UODCCE4O.js → ai-service-643TNFPH.js} +8 -4
  5. package/dist/{archive-WS2L2VIQ.js → archive-6Z4GFQPH.js} +3 -3
  6. package/dist/{auth-CCFAU4GQ.js → auth-A4VGHADI.js} +4 -4
  7. package/dist/avatar-image-Y45R7LW5.js +23 -0
  8. package/dist/{backup-TST5C2YN.js → backup-UDH4GMSW.js} +15 -15
  9. package/dist/{bridge-2PO3AI5D.js → bridge-3FNSWLNQ.js} +1 -1
  10. package/dist/channels-SGQZHNQJ.js +89 -0
  11. package/dist/{chat-ZIQQS25U.js → chat-X43VYHH2.js} +12 -8
  12. package/dist/{chunk-ZV7MFISX.js → chunk-2MJ7EOMT.js} +20 -2
  13. package/dist/{chunk-R77O2WMK.js → chunk-2OIYNHWO.js} +1 -1
  14. package/dist/{chunk-QCN24XEN.js → chunk-3YUBFTDN.js} +1 -1
  15. package/dist/chunk-4FCL4DVZ.js +48 -0
  16. package/dist/{chunk-F7H6ATM4.js → chunk-5KXCM5AW.js} +18 -2
  17. package/dist/chunk-7KRIHYLR.js +124 -0
  18. package/dist/{chunk-RBNMDAKB.js → chunk-BCG45AQB.js} +15 -1
  19. package/dist/{chunk-QMJCNZ6C.js → chunk-C3KLHJDB.js} +1 -1
  20. package/dist/{chunk-H2X54EHC.js → chunk-DGGZVZTM.js} +1 -1
  21. package/dist/chunk-DW4TRDOZ.js +29 -0
  22. package/dist/{chunk-4JOQZPCE.js → chunk-EIQDZC43.js} +1 -1
  23. package/dist/{chunk-TQJ6ZYVY.js → chunk-FJ2MZ5PH.js} +41 -5
  24. package/dist/{chunk-BJZ4PV7R.js → chunk-HNGFKPNS.js} +26 -10
  25. package/dist/{chunk-5ZQZDDIK.js → chunk-HPGN6XRT.js} +3 -3
  26. package/dist/{chunk-KGIXX4NM.js → chunk-HUNDXZBZ.js} +5 -5
  27. package/dist/{chunk-ZDZISKCL.js → chunk-IJPMIEVE.js} +1 -1
  28. package/dist/chunk-IYCV34IU.js +158 -0
  29. package/dist/{chunk-ZNMCCHCP.js → chunk-LTLFOSA4.js} +2 -2
  30. package/dist/{chunk-K6T43YBD.js → chunk-MJRXFUMS.js} +26 -6
  31. package/dist/{chunk-4YU7HF4L.js → chunk-MOERAQXH.js} +6 -4
  32. package/dist/{chunk-KQSFTPIM.js → chunk-MTRMQFCQ.js} +1 -1
  33. package/dist/{chunk-OV7ZQ2GH.js → chunk-ODDGGLM6.js} +3 -3
  34. package/dist/{chunk-A7WQZKOU.js → chunk-OQJMTHEH.js} +2 -2
  35. package/dist/{chunk-RRNXJOKB.js → chunk-PJVPDY2Z.js} +2 -2
  36. package/dist/{chunk-FXORA5JG.js → chunk-Q7HOAVFR.js} +3 -3
  37. package/dist/{chunk-KDLYIECM.js → chunk-R772ET2M.js} +18 -4
  38. package/dist/{chunk-QLWG3C2Z.js → chunk-RRZ4RQQU.js} +2 -2
  39. package/dist/{mind-list-4D7J4CHD.js → chunk-SHKM5RGD.js} +18 -4
  40. package/dist/{chunk-RXEEYDIB.js → chunk-SZJCJVXV.js} +1 -1
  41. package/dist/{chunk-E3DA4HYV.js → chunk-T4VS7UDW.js} +15 -15
  42. package/dist/{chunk-YXSUMLTC.js → chunk-USD45JKR.js} +322 -76
  43. package/dist/{chunk-JO5IO4FH.js → chunk-VB2QXUJQ.js} +391 -294
  44. package/dist/{chunk-JZ62SYWR.js → chunk-VZRA5TYO.js} +1 -1
  45. package/dist/{chunk-PJ45FQPT.js → chunk-WARH6GIV.js} +8 -8
  46. package/dist/{chunk-PFZBNKUH.js → chunk-WCFSBH33.js} +0 -1
  47. package/dist/{chunk-DRJ24GXK.js → chunk-WQ46E33M.js} +59 -39
  48. package/dist/{chunk-ALKYQULU.js → chunk-WW6C3PLV.js} +1 -1
  49. package/dist/{chunk-CDPBTTZO.js → chunk-XVBSFLM7.js} +2 -2
  50. package/dist/{chunk-6EMWJZBK.js → chunk-YKA7DCVW.js} +1 -1
  51. package/dist/{chunk-IHKGWTGT.js → chunk-YNBXEQAP.js} +31 -1
  52. package/dist/cli.js +34 -26
  53. package/dist/{clock-RHS2JEDL.js → clock-CNRF6F7T.js} +3 -3
  54. package/dist/{cloud-sync-46RS4SDA.js → cloud-sync-WHKCB4CD.js} +22 -19
  55. package/dist/{config-TJLYUV3U.js → config-RPSLA2HX.js} +3 -3
  56. package/dist/{conversations-CJOOCGNW.js → conversations-C7IKYSHD.js} +4 -4
  57. package/dist/{create-IOV4GCRX.js → create-GJKHABJB.js} +16 -5
  58. package/dist/{create-DF3KISTW.js → create-VIQVP3QB.js} +1 -1
  59. package/dist/{daemon-client-IYR4KCPU.js → daemon-client-ZFY5MOAL.js} +5 -3
  60. package/dist/{daemon-restart-VFEI57UO.js → daemon-restart-7KUHVZIN.js} +7 -7
  61. package/dist/daemon.js +829 -496
  62. package/dist/{db-MF2JNRUW.js → db-FO6LXYCW.js} +2 -2
  63. package/dist/{db-LZTLA7XC.js → db-IPXRJUI7.js} +1 -1
  64. package/dist/{delete-HPLC7ETU.js → delete-ESEP7NGQ.js} +1 -1
  65. package/dist/delivery-manager-HZTT5SJR.js +36 -0
  66. package/dist/{delivery-router-N4A7ZC5T.js → delivery-router-3QFG2ZEX.js} +3 -3
  67. package/dist/{down-U2CZ23M4.js → down-G6IADJXV.js} +5 -5
  68. package/dist/echo-text-H3SH337Q.js +36 -0
  69. package/dist/env-6TGPO5WG.js +18 -0
  70. package/dist/{env-VZ4MLFQW.js → env-C7Z55QCJ.js} +6 -6
  71. package/dist/{exec-G3ZRST4Z.js → exec-QIFYZG4C.js} +3 -3
  72. package/dist/{export-LY723I3Z.js → export-C2K3NIRD.js} +4 -4
  73. package/dist/{extension-SEID47SR.js → extension-J4ZQ2GHV.js} +1 -1
  74. package/dist/{extensions-ZELQLTSR.js → extensions-GEKF47A4.js} +24 -19
  75. package/dist/{files-4LN3EN7Q.js → files-LXQSQOFG.js} +4 -4
  76. package/dist/{import-42YNQBF4.js → import-SX3ZXHB4.js} +8 -8
  77. package/dist/{isolation-YMGZZ4E5.js → isolation-MCT4ZYLT.js} +3 -3
  78. package/dist/{join-ZJV7W6MO.js → join-34TR2GXQ.js} +1 -1
  79. package/dist/{list-OXIAY3W7.js → list-PMUXZNAM.js} +1 -1
  80. package/dist/{login-MY6ETFYB.js → login-ARRZ4ORJ.js} +3 -3
  81. package/dist/{login-M6OJUPQ2.js → login-CL4IT2ED.js} +14 -5
  82. package/dist/{logout-WQBWO77G.js → logout-HZYJCYCA.js} +3 -3
  83. package/dist/{logout-NCG3TMDL.js → logout-YZRMZ3O2.js} +1 -1
  84. package/dist/message-delivery-GPQ5SE5N.js +40 -0
  85. package/dist/{mind-LHKS55DI.js → mind-46AOK373.js} +23 -19
  86. package/dist/{mind-activity-tracker-3QRNJVR4.js → mind-activity-tracker-YVZPC4A5.js} +4 -4
  87. package/dist/mind-contacts-GV7XYL5D.js +64 -0
  88. package/dist/{mind-history-VRO5A76U.js → mind-history-TTGA5BHZ.js} +5 -5
  89. package/dist/mind-list-OTHV4ZO4.js +13 -0
  90. package/dist/{mind-profile-PEQYASQX.js → mind-profile-LUG353ZT.js} +1 -1
  91. package/dist/mind-service-2ARGJNKP.js +44 -0
  92. package/dist/{mind-sleep-74TGOQBC.js → mind-sleep-DV7KP255.js} +3 -3
  93. package/dist/{mind-status-UO34ASXZ.js → mind-status-BJNPGXKC.js} +23 -1
  94. package/dist/{mind-wake-LCLGTXA2.js → mind-wake-LVTZ55EZ.js} +1 -1
  95. package/dist/notices-2KU5NTRY.js +25 -0
  96. package/dist/{package-DOD6CPO6.js → package-RTN2PS7O.js} +5 -3
  97. package/dist/{read-QVAXMTPV.js → read-YSWUXYL7.js} +1 -1
  98. package/dist/{register-Y2H4PY5R.js → register-42VBJKTP.js} +3 -3
  99. package/dist/{registry-OUZBZ3Q4.js → registry-UMMDRPRM.js} +2 -2
  100. package/dist/{reject-EV35X64Y.js → reject-SXGCYN4A.js} +1 -1
  101. package/dist/{restart-FJQ662XJ.js → restart-YYEGZJDD.js} +5 -5
  102. package/dist/{sandbox-ZJ7QA6Z6.js → sandbox-5VQ454XP.js} +4 -4
  103. package/dist/scheduler-I7JZCT47.js +34 -0
  104. package/dist/{schema-PVNG3PQM.js → schema-VEVO7HG6.js} +3 -1
  105. package/dist/{seed-CNYIHPOH.js → seed-F2HXZQU4.js} +1 -1
  106. package/dist/{seed-check-VLTVILOV.js → seed-check-TYD7RRZY.js} +1 -1
  107. package/dist/{seed-cmd-AVNUNLZV.js → seed-cmd-MLCTGSX5.js} +3 -3
  108. package/dist/{seed-create-ANXGYSCC.js → seed-create-KQ7OILWB.js} +6 -4
  109. package/dist/seed-readiness-RBPGOLSZ.js +18 -0
  110. package/dist/{seed-sprout-NIUFTX32.js → seed-sprout-HVYCFJLA.js} +30 -31
  111. package/dist/{send-SPE6DVNJ.js → send-TD2X5U3K.js} +6 -6
  112. package/dist/{service-UOCLXDWR.js → service-CVZMQYK6.js} +4 -4
  113. package/dist/{service-install-4HHFDDWY.js → service-install-VCRMFWX5.js} +5 -5
  114. package/dist/{setup-Y2EJI3GG.js → setup-5ECWTYKG.js} +7 -3
  115. package/dist/{setup-QT2A25SY.js → setup-AE4CVUC4.js} +7 -7
  116. package/dist/{skill-FKFHIJRR.js → skill-UUM4JZRF.js} +5 -5
  117. package/dist/skills/dreaming/SKILL.md +5 -1
  118. package/dist/skills/dreaming/scripts/dream.ts +5 -1
  119. package/dist/skills/orientation/SKILL.md +8 -7
  120. package/dist/skills/tending/SKILL.md +51 -2
  121. package/dist/skills/volute-mind/SKILL.md +2 -0
  122. package/dist/{skills-AKCFA7BN.js → skills-B3SVDCEB.js} +5 -5
  123. package/dist/sleep-manager-Z27R3WTW.js +38 -0
  124. package/dist/spirit-WXS3HCLN.js +25 -0
  125. package/dist/{split-WBMZXBHF.js → split-SKZ4Y2D6.js} +1 -1
  126. package/dist/{sprout-SMX42ZBP.js → sprout-KQ43BWZJ.js} +1 -1
  127. package/dist/{src-OJHARHTF.js → src-WLJE73NP.js} +14 -5
  128. package/dist/{start-5JE3TV66.js → start-O6UKK7BG.js} +3 -3
  129. package/dist/{status-SWRVGXBI.js → status-F4PGREUU.js} +19 -7
  130. package/dist/{stop-AAMTG3TU.js → stop-UBX6X5RA.js} +5 -5
  131. package/dist/system-chat-63ABFF6V.js +40 -0
  132. package/dist/{systems-VNB5WKSS.js → systems-JJNGQHAO.js} +4 -4
  133. package/dist/{tailscale-3XOKOW7T.js → tailscale-MCLY5GYE.js} +2 -2
  134. package/dist/{template-hash-446HHH5V.js → template-hash-GSOUARW4.js} +2 -2
  135. package/dist/template-staleness-EMQORSGG.js +15 -0
  136. package/dist/{turn-tracker-FOIBNUUA.js → turn-tracker-KLPV3PAU.js} +6 -6
  137. package/dist/up-RVGDE6CQ.js +20 -0
  138. package/dist/{update-SWAYZRWJ.js → update-OXQEGGXD.js} +5 -5
  139. package/dist/{update-check-PQ2MZ47K.js → update-check-266R4ZSY.js} +3 -3
  140. package/dist/{upgrade-NWAZ7MLD.js → upgrade-K5FIQPQD.js} +1 -1
  141. package/dist/{version-notify-C5CH7CVP.js → version-notify-73YURTFR.js} +41 -25
  142. package/dist/web-assets/assets/index-WdZ60R6c.css +1 -0
  143. package/dist/web-assets/assets/index-taX6Ezfa.js +92 -0
  144. package/dist/web-assets/index.html +2 -2
  145. package/drizzle/0011_drop_turn_summary_event_id.sql +3 -0
  146. package/drizzle/0012_channel_gates.sql +17 -0
  147. package/drizzle/meta/_journal.json +14 -0
  148. package/package.json +5 -3
  149. package/packages/extensions/pages/dist/ui/assets/index-BuXnE-rb.css +1 -0
  150. package/packages/extensions/pages/dist/ui/assets/index-DtzftuPA.js +2 -0
  151. package/packages/extensions/pages/dist/ui/index.html +2 -2
  152. package/templates/_base/src/lib/startup.ts +59 -3
  153. package/templates/claude/src/agent.ts +37 -4
  154. package/templates/claude/src/lib/session-reaper.ts +32 -0
  155. package/templates/claude/src/server.ts +14 -3
  156. package/templates/pi/src/agent.ts +7 -10
  157. package/templates/pi/src/lib/dispatch.ts +65 -0
  158. package/dist/avatar-image-6KY6UU4D.js +0 -16
  159. package/dist/delivery-manager-JINZRG2W.js +0 -33
  160. package/dist/echo-text-VQPB5L2X.js +0 -33
  161. package/dist/message-delivery-R7JSQGYX.js +0 -37
  162. package/dist/mind-service-NB2JMWQZ.js +0 -39
  163. package/dist/scheduler-WVKII3LA.js +0 -31
  164. package/dist/sleep-manager-G6TXSDP7.js +0 -35
  165. package/dist/spirit-RPBLLUQ5.js +0 -23
  166. package/dist/system-chat-NDAW6YP7.js +0 -37
  167. package/dist/up-PS6PFS75.js +0 -18
  168. package/dist/volute-config-A52FHWKM.js +0 -14
  169. package/dist/web-assets/assets/index-B1JBQv2m.css +0 -1
  170. package/dist/web-assets/assets/index-CU6XWICM.js +0 -86
  171. package/packages/extensions/pages/dist/ui/assets/index-BcY6lnq4.css +0 -1
  172. package/packages/extensions/pages/dist/ui/assets/index-CQjEQg1r.js +0 -2
@@ -8,8 +8,8 @@
8
8
  <link rel="preconnect" href="https://fonts.googleapis.com" />
9
9
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
10
10
  <link href="https://fonts.googleapis.com/css2?family=Averia+Serif+Libre:wght@300;400;700&family=Fira+Code:wght@300;400;500;600&family=Averia+Sans+Libre:ital,wght@0,300;0,400;0,500;0,600;1,400&display=swap" rel="stylesheet" />
11
- <script type="module" crossorigin src="/assets/index-CU6XWICM.js"></script>
12
- <link rel="stylesheet" crossorigin href="/assets/index-B1JBQv2m.css">
11
+ <script type="module" crossorigin src="/assets/index-taX6Ezfa.js"></script>
12
+ <link rel="stylesheet" crossorigin href="/assets/index-WdZ60R6c.css">
13
13
  </head>
14
14
  <body>
15
15
  <div id="root"></div>
@@ -0,0 +1,3 @@
1
+ -- Drop the dead turns.summary_event_id column (superseded by summary_id, never written).
2
+
3
+ ALTER TABLE `turns` DROP COLUMN `summary_event_id`;
@@ -0,0 +1,17 @@
1
+ -- Per-(mind, channel) gate state so a mind can explicitly decline an unrouted
2
+ -- channel. Absence of a row means "pending" (undecided); the only stored state
3
+ -- is "declined". Declined channels are never released and never re-notify.
4
+ CREATE TABLE `channel_gates` (
5
+ `mind` text NOT NULL,
6
+ `channel` text NOT NULL,
7
+ `state` text NOT NULL,
8
+ `updated_at` text DEFAULT (datetime('now')) NOT NULL,
9
+ PRIMARY KEY(`mind`, `channel`)
10
+ );
11
+ --> statement-breakpoint
12
+ -- Backfill: archive stale gated rows so the first routes.json edit on an existing
13
+ -- mind with a months-old backlog can't release hundreds of messages at once. The
14
+ -- bounded release only ever promotes the newest N per channel anyway; anything
15
+ -- older than a week is treated as history and made inert here.
16
+ UPDATE `delivery_queue` SET `status` = 'archived'
17
+ WHERE `status` = 'gated' AND `created_at` < datetime('now', '-7 days');
@@ -78,6 +78,20 @@
78
78
  "when": 1775500000000,
79
79
  "tag": "0010_delivery_queue_redrive",
80
80
  "breakpoints": true
81
+ },
82
+ {
83
+ "idx": 11,
84
+ "version": "6",
85
+ "when": 1775600000000,
86
+ "tag": "0011_drop_turn_summary_event_id",
87
+ "breakpoints": true
88
+ },
89
+ {
90
+ "idx": 12,
91
+ "version": "6",
92
+ "when": 1775700000000,
93
+ "tag": "0012_channel_gates",
94
+ "breakpoints": true
81
95
  }
82
96
  ]
83
97
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "volute",
3
- "version": "0.46.0",
3
+ "version": "0.48.0",
4
4
  "description": "CLI for creating and managing self-modifying AI minds powered by the Claude Agent SDK",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -58,6 +58,7 @@
58
58
  "typecheck:templates": "tsx scripts/typecheck-templates.ts",
59
59
  "lint:templates": "biome check templates/",
60
60
  "typecheck:web": "svelte-check --tsconfig packages/web/tsconfig.json",
61
+ "knip": "knip --workspace packages/web --include files",
61
62
  "prepare": "lefthook install",
62
63
  "prepublishOnly": "npm run build",
63
64
  "db:generate": "drizzle-kit generate",
@@ -65,10 +66,10 @@
65
66
  },
66
67
  "dependencies": {
67
68
  "@anthropic-ai/sandbox-runtime": "^0.0.56",
69
+ "@earendil-works/pi-ai": "^0.80.3",
68
70
  "@hono/node-server": "^2.0.6",
69
71
  "@hono/zod-validator": "^0.8.0",
70
72
  "@libsql/client": "^0.17.4",
71
- "@earendil-works/pi-ai": "^0.80.3",
72
73
  "@slack/bolt": "^4.7.3",
73
74
  "adm-zip": "^0.5.17",
74
75
  "bcryptjs": "^3.0.3",
@@ -79,6 +80,7 @@
79
80
  "isomorphic-dompurify": "^2.36.0",
80
81
  "libsql": "^0.5.29",
81
82
  "replicate": "^1.4.0",
83
+ "sharp": "^0.35.2",
82
84
  "telegraf": "^4.16.3",
83
85
  "undici": "^6.24.1",
84
86
  "zod": "^4.4.3"
@@ -92,9 +94,9 @@
92
94
  "@types/node": "^26.0.0",
93
95
  "dompurify": "^3.4.11",
94
96
  "drizzle-kit": "^0.31.10",
97
+ "knip": "^6.26.0",
95
98
  "lefthook": "^2.1.9",
96
99
  "marked": "^18.0.5",
97
- "sharp": "^0.35.2",
98
100
  "svelte": "^5.56.3",
99
101
  "svelte-check": "4.7.1",
100
102
  "tsup": "^8.5.1",
@@ -0,0 +1 @@
1
+ .thumbnail-card.svelte-yqwgpu{cursor:pointer;text-align:left;color:inherit;background:0 0;flex-direction:column;gap:6px;padding:0;display:flex}.thumbnail-frame.svelte-yqwgpu{border-radius:var(--radius-lg);border:1px solid var(--border);background:var(--bg-0);transition:border-color .15s;overflow:hidden}.thumbnail-card.svelte-yqwgpu:hover .thumbnail-frame:where(.svelte-yqwgpu){border-color:var(--border-bright)}iframe.svelte-yqwgpu{transform-origin:0 0;pointer-events:none;opacity:0;background:#fff;border:none;transition:opacity .15s}iframe.loaded.svelte-yqwgpu{opacity:1}.thumbnail-label.svelte-yqwgpu{color:var(--text-0);text-overflow:ellipsis;white-space:nowrap;max-width:var(--card-w);padding:0 2px;font-size:13px;font-weight:500;overflow:hidden}.thumbnail-sublabel.svelte-yqwgpu{color:var(--text-2);text-overflow:ellipsis;white-space:nowrap;max-width:var(--card-w);padding:0 2px;font-size:11px;overflow:hidden}.dashboard.svelte-apzsoj{max-width:1200px}.section.svelte-apzsoj{margin-bottom:24px}.section-header.svelte-apzsoj{text-transform:uppercase;letter-spacing:.05em;margin-bottom:12px;font-size:12px}.section-title.svelte-apzsoj{color:var(--text-2)}.thumbnail-grid.svelte-apzsoj{flex-wrap:wrap;gap:16px;display:flex}.empty.svelte-apzsoj{color:var(--text-2);font-size:13px}.site-view.svelte-vvnkg1{max-width:1200px}.site-header.svelte-vvnkg1{align-items:baseline;gap:8px;margin-bottom:16px;display:flex}.site-name.svelte-vvnkg1{color:var(--text-0);font-size:16px;font-weight:500}.page-count.svelte-vvnkg1{color:var(--text-2);font-size:12px}.thumbnail-grid.svelte-vvnkg1{flex-wrap:wrap;gap:16px;display:flex}.thumbnail-grid.with-hero.svelte-vvnkg1{margin-top:20px}.empty.svelte-vvnkg1{color:var(--text-2);font-size:13px}.ext-app.svelte-1r8vfx3{max-width:100%;min-height:100%;padding:24px;animation:.2s both fadeIn}.ext-app.full-page.svelte-1r8vfx3{height:100%;padding:0}.full-page-iframe.svelte-1r8vfx3{background:#fff;border:none;width:100%;height:100%}
@@ -0,0 +1,2 @@
1
+ (function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e=Array.isArray,t=Array.prototype.indexOf,n=Array.prototype.includes,r=Array.from,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyDescriptors,s=Object.prototype,c=Array.prototype,l=Object.getPrototypeOf,u=Object.isExtensible,d=()=>{};function f(e){for(var t=0;t<e.length;t++)e[t]()}function p(){var e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}var m=1024,h=2048,g=4096,_=8192,v=16384,y=32768,b=1<<25,x=65536,S=1<<19,ee=1<<20,te=1<<25,C=65536,ne=1<<21,re=1<<22,ie=1<<23,ae=Symbol(`$state`),oe=Symbol(`legacy props`),se=Symbol(``),ce=Symbol(`attributes`),le=Symbol(`class`),ue=Symbol(`style`),de=Symbol(`text`),fe=new class extends Error{name=`StaleReactionError`;message="The reaction that called `getAbortSignal()` was re-run or destroyed"},pe=!!globalThis.document?.contentType&&globalThis.document.contentType.includes(`xml`);function me(e){throw Error(`https://svelte.dev/e/lifecycle_outside_component`)}function he(){throw Error(`https://svelte.dev/e/async_derived_orphan`)}function ge(e,t,n){throw Error(`https://svelte.dev/e/each_key_duplicate`)}function _e(e){throw Error(`https://svelte.dev/e/effect_in_teardown`)}function ve(){throw Error(`https://svelte.dev/e/effect_in_unowned_derived`)}function ye(e){throw Error(`https://svelte.dev/e/effect_orphan`)}function be(){throw Error(`https://svelte.dev/e/effect_update_depth_exceeded`)}function xe(e){throw Error(`https://svelte.dev/e/props_invalid_value`)}function Se(){throw Error(`https://svelte.dev/e/state_descriptors_fixed`)}function Ce(){throw Error(`https://svelte.dev/e/state_prototype_fixed`)}function we(){throw Error(`https://svelte.dev/e/state_unsafe_mutation`)}function Te(){throw Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`)}var Ee={},w=Symbol(`uninitialized`),De=`http://www.w3.org/1999/xhtml`;function Oe(){console.warn(`https://svelte.dev/e/derived_inert`)}function ke(e){console.warn(`https://svelte.dev/e/hydration_mismatch`)}function Ae(){console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`)}var T=!1;function je(e){T=e}var E;function D(e){if(e===null)throw ke(),Ee;return E=e}function Me(){return D(en(E))}function O(e){if(T){if(en(E)!==null)throw ke(),Ee;E=e}}function Ne(e=1){if(T){for(var t=e,n=E;t--;)n=en(n);E=n}}function Pe(e=!0){for(var t=0,n=E;;){if(n.nodeType===8){var r=n.data;if(r===`]`){if(t===0)return n;--t}else (r===`[`||r===`[!`||r[0]===`[`&&!isNaN(Number(r.slice(1))))&&(t+=1)}var i=en(n);e&&n.remove(),n=i}}function Fe(e){if(!e||e.nodeType!==8)throw ke(),Ee;return e.data}function Ie(e){return e===this.v}function Le(e,t){return e==e?e!==t||typeof e==`object`&&!!e||typeof e==`function`:t==t}function Re(e){return!Le(e,this.v)}var ze=!1,Be=!1,k=null;function Ve(e){k=e}function He(e,t=!1,n){k={p:k,i:!1,c:null,e:null,s:e,x:null,r:G,l:Be&&!t?{s:null,u:null,$:[]}:null}}function Ue(e){var t=k,n=t.e;if(n!==null){t.e=null;for(var r of n)pn(r)}return e!==void 0&&(t.x=e),t.i=!0,k=t.p,e??{}}function We(){return!Be||k!==null&&k.l===null}var Ge=[];function Ke(){var e=Ge;Ge=[],f(e)}function qe(e){if(Ge.length===0&&!wt){var t=Ge;queueMicrotask(()=>{t===Ge&&Ke()})}Ge.push(e)}function Je(e){var t=G;if(t===null)return H.f|=ie,e;if(!(t.f&32768)&&!(t.f&4))throw e;Ye(e,t)}function Ye(e,t){if(!(t!==null&&t.f&16384)){for(;t!==null;){if(t.f&128){if(!(t.f&32768))throw e;try{t.b.error(e);return}catch(t){e=t}}t=t.parent}throw e}}var Xe=~(h|g|m);function A(e,t){e.f=e.f&Xe|t}function Ze(e){e.f&512||e.deps===null?A(e,m):A(e,g)}function Qe(e){if(e!==null)for(let t of e)!(t.f&2)||!(t.f&65536)||(t.f^=C,Qe(t.deps))}function $e(e,t,n){e.f&2048?t.add(e):e.f&4096&&n.add(e),Qe(e.deps),A(e,m)}var et=!1,tt=!1;function nt(e){var t=tt;try{return tt=!1,[e(),tt]}finally{tt=t}}function rt(e){let t=0,n=Vt(0),r;return()=>{un()&&(Z(n),_n(()=>(t===0&&(r=Yn(()=>e(()=>Gt(n)))),t+=1,()=>{qe(()=>{--t,t===0&&(r?.(),r=void 0,Gt(n))})})))}}var it=x|S;function at(e,t,n,r){new ot(e,t,n,r)}var ot=class{parent;is_pending=!1;transform_error;#e;#t=T?E:null;#n;#r;#i;#a=null;#o=null;#s=null;#c=null;#l=0;#u=0;#d=!1;#f=new Set;#p=new Set;#m=null;#h=rt(()=>(this.#m=Vt(this.#l),()=>{this.#m=null}));constructor(e,t,n,r){this.#e=e,this.#n=t,this.#r=e=>{var t=G;t.b=this,t.f|=128,n(e)},this.parent=G.b,this.transform_error=r??this.parent?.transform_error??(e=>e),this.#i=yn(()=>{if(T){let e=this.#t;Me();let t=e.data===`[!`;if(e.data.startsWith(`[?`)){let t=JSON.parse(e.data.slice(2));this.#_(t)}else t?this.#v():this.#g()}else this.#y()},it),T&&(this.#e=E)}#g(){try{this.#a=B(()=>this.#r(this.#e))}catch(e){this.error(e)}}#_(e){let t=this.#n.failed;t&&(this.#s=B(()=>{t(this.#e,()=>e,()=>()=>{})}))}#v(){let e=this.#n.pending;e&&(this.is_pending=!0,this.#o=B(()=>e(this.#e)),qe(()=>{var e=this.#c=document.createDocumentFragment(),t=L();e.append(t),this.#a=this.#x(()=>B(()=>this.#r(t))),this.#u===0&&(this.#e.before(e),this.#c=null,Tn(this.#o,()=>{this.#o=null}),this.#b(M))}))}#y(){try{if(this.is_pending=this.has_pending_snippet(),this.#u=0,this.#l=0,this.#a=B(()=>{this.#r(this.#e)}),this.#u>0){var e=this.#c=document.createDocumentFragment();kn(this.#a,e);let t=this.#n.pending;this.#o=B(()=>t(this.#e))}else this.#b(M)}catch(e){this.error(e)}}#b(e){this.is_pending=!1,e.transfer_effects(this.#f,this.#p)}defer_effect(e){$e(e,this.#f,this.#p)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#n.pending}#x(e){var t=G,n=H,r=k;K(this.#i),W(this.#i),Ve(this.#i.ctx);try{return At.ensure(),e()}catch(e){return Je(e),null}finally{K(t),W(n),Ve(r)}}#S(e,t){if(!this.has_pending_snippet()){this.parent&&this.parent.#S(e,t);return}this.#u+=e,this.#u===0&&(this.#b(t),this.#o&&Tn(this.#o,()=>{this.#o=null}),this.#c&&=(this.#e.before(this.#c),null))}update_pending_count(e,t){this.#S(e,t),this.#l+=e,!(!this.#m||this.#d)&&(this.#d=!0,qe(()=>{this.#d=!1,this.#m&&Ut(this.#m,this.#l)}))}get_effect_pending(){return this.#h(),Z(this.#m)}error(e){if(!this.#n.onerror&&!this.#n.failed)throw e;M?.is_fork?(this.#a&&M.skip_effect(this.#a),this.#o&&M.skip_effect(this.#o),this.#s&&M.skip_effect(this.#s),M.oncommit(()=>{this.#C(e)})):this.#C(e)}#C(e){this.#a&&=(V(this.#a),null),this.#o&&=(V(this.#o),null),this.#s&&=(V(this.#s),null),T&&(D(this.#t),Ne(),D(Pe()));var t=this.#n.onerror;let n=this.#n.failed;var r=!1,i=!1;let a=()=>{if(r){Ae();return}r=!0,i&&Te(),this.#s!==null&&Tn(this.#s,()=>{this.#s=null}),this.#x(()=>{this.#y()})},o=e=>{try{i=!0,t?.(e,a),i=!1}catch(e){Ye(e,this.#i&&this.#i.parent)}n&&(this.#s=this.#x(()=>{try{return B(()=>{var t=G;t.b=this,t.f|=128,n(this.#e,()=>e,()=>a)})}catch(e){return Ye(e,this.#i.parent),null}}))};qe(()=>{var t;try{t=this.transform_error(e)}catch(e){Ye(e,this.#i&&this.#i.parent);return}typeof t==`object`&&t&&typeof t.then==`function`?t.then(o,e=>Ye(e,this.#i&&this.#i.parent)):o(t)})}};function st(e,t,n,r){let i=We()?dt:mt;var a=e.filter(e=>!e.settled),o=t.map(i);if(n.length===0&&a.length===0){r(o);return}var s=G,c=ct(),l=a.length===1?a[0].promise:a.length>1?Promise.all(a.map(e=>e.promise)):null;function u(e){if(!(s.f&16384)){c();try{r([...o,...e])}catch(e){Ye(e,s)}lt()}}var d=ut();if(n.length===0){l.then(()=>u([])).finally(d);return}function f(){Promise.all(n.map(e=>pt(e))).then(u).catch(e=>Ye(e,s)).finally(d)}l?l.then(()=>{c(),f(),lt()}):f()}function ct(){var e=G,t=H,n=k,r=M;return function(i=!0){K(e),W(t),Ve(n),i&&!(e.f&16384)&&(r?.activate(),r?.apply())}}function lt(e=!0){K(null),W(null),Ve(null),e&&M?.deactivate()}function ut(){var e=G,t=e.b,n=M,r=!!t?.is_rendered();return t?.update_pending_count(1,n),n.increment(r,e),()=>{t?.update_pending_count(-1,n),n.decrement(r,e)}}function dt(e){var t=2|h;return G!==null&&(G.f|=S),{ctx:k,deps:null,effects:null,equals:Ie,f:t,fn:e,reactions:null,rv:0,v:w,wv:0,parent:G,ac:null}}var ft=Symbol(`obsolete`);function pt(e,t,n){let r=G;r===null&&he();var i=void 0,a=Vt(w),o=!H,s=new Set;return gn(()=>{var t=G,n=p();i=n.promise;try{Promise.resolve(e()).then(n.resolve,e=>{e!==fe&&n.reject(e)}).finally(lt)}catch(e){n.reject(e),lt()}var c=M;if(o){if(t.f&32768)var l=ut();if(r.b?.is_rendered())c.async_deriveds.get(t)?.reject(ft);else for(let e of s.values())e.reject(ft);s.add(n),c.async_deriveds.set(t,n)}let u=(e,t=void 0)=>{l?.(),s.delete(n),t!==ft&&(c.activate(),t?(a.f|=ie,Ut(a,t)):(a.f&8388608&&(a.f^=ie),Ut(a,e)),c.deactivate())};n.promise.then(u,e=>u(null,e||`unknown`))}),dn(()=>{for(let e of s)e.reject(ft)}),new Promise(e=>{function t(n){function r(){n===i?e(a):t(i)}n.then(r,r)}t(i)})}function j(e){let t=dt(e);return ze||Pn(t),t}function mt(e){let t=dt(e);return t.equals=Re,t}function ht(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n<t.length;n+=1)V(t[n])}}function gt(e){var t,n=G,r=e.parent;if(!Mn&&r!==null&&e.v!==w&&r.f&24576)return Oe(),e.v;K(r);try{e.f&=~C,ht(e),t=Un(e)}finally{K(n)}return t}function _t(e){var t=gt(e);if(!e.equals(t)&&(e.wv=Bn(),(!M?.is_fork||e.deps===null)&&(M===null?e.v=t:(M.capture(e,t,!0),St?.capture(e,t,!0)),e.deps===null))){A(e,m);return}Mn||(N===null?Ze(e):(un()||M?.is_fork)&&N.set(e,t))}function vt(e){if(e.effects!==null)for(let t of e.effects)(t.teardown||t.ac)&&(t.teardown?.(),t.ac?.abort(fe),t.fn!==null&&(t.teardown=d),t.ac=null,Gn(t,0),xn(t))}function yt(e){if(e.effects!==null)for(let t of e.effects)t.teardown&&t.fn!==null&&Kn(t)}var bt=null,xt=null,M=null,St=null,N=null,Ct=null,wt=!1,Tt=!1,Et=null,Dt=null,Ot=0,kt=1,At=class e{id=kt++;#e=!1;linked=!0;#t=null;#n=null;async_deriveds=new Map;current=new Map;previous=new Map;#r=new Set;#i=new Set;#a=0;#o=new Map;#s=null;#c=[];#l=[];#u=new Set;#d=new Set;#f=new Map;#p=new Set;is_fork=!1;#m=!1;constructor(){xt===null?bt=xt=this:(xt.#n=this,this.#t=xt),xt=this}#h(){if(this.is_fork)return!0;for(let n of this.#o.keys()){for(var e=n,t=!1;e.parent!==null;){if(this.#f.has(e)){t=!0;break}e=e.parent}if(!t)return!0}return!1}skip_effect(e){this.#f.has(e)||this.#f.set(e,{d:[],m:[]}),this.#p.delete(e)}unskip_effect(e,t=e=>this.schedule(e)){var n=this.#f.get(e);if(n){this.#f.delete(e);for(var r of n.d)A(r,h),t(r);for(r of n.m)A(r,g),t(r)}this.#p.add(e)}#g(){this.#e=!0,Ot++>1e3&&(this.#S(),jt());for(let e of this.#u)this.#d.delete(e),A(e,h),this.schedule(e);for(let e of this.#d)A(e,g),this.schedule(e);let t=this.#c;this.#c=[],this.apply();var n=Et=[],r=[],i=Dt=[];for(let e of t)try{this.#_(e,n,r)}catch(t){throw Lt(e),this.#h()||this.discard(),t}if(M=null,i.length>0){var a=e.ensure();for(let e of i)a.schedule(e)}if(Et=null,Dt=null,this.#h()){this.#b(r),this.#b(n);for(let[e,t]of this.#f)It(e,t);i.length>0&&M.#g();return}let o=this.#v();if(o){this.#b(r),this.#b(n),o.#y(this);return}this.#u.clear(),this.#d.clear();for(let e of this.#r)e(this);this.#r.clear(),St=this,Mt(r),Mt(n),St=null,this.#s?.resolve();var s=M;if(this.#a===0&&(this.#c.length===0||s!==null)&&(this.#S(),ze&&(this.#x(),M=s)),this.#c.length>0)if(s!==null){let e=s;e.#c.push(...this.#c.filter(t=>!e.#c.includes(t)))}else s=this;s!==null&&s.#g()}#_(e,t,n){e.f^=m;for(var r=e.first;r!==null;){var i=r.f,a=(i&96)!=0;if(!(a&&i&1024||i&8192||this.#f.has(r))&&r.fn!==null){a?r.f^=m:i&4?t.push(r):ze&&i&16777224?n.push(r):Vn(r)&&(i&16&&this.#d.add(r),Kn(r));var o=r.first;if(o!==null){r=o;continue}}for(;r!==null;){var s=r.next;if(s!==null){r=s;break}r=r.parent}}}#v(){for(var e=this.#t;e!==null;){if(!e.is_fork){for(let[t,[,n]]of this.current)if(e.current.has(t)&&!n)return e}e=e.#t}return null}#y(e){for(let[t,n]of e.current)!this.previous.has(t)&&e.previous.has(t)&&this.previous.set(t,e.previous.get(t)),this.current.set(t,n);for(let[t,n]of e.async_deriveds){let e=this.async_deriveds.get(t);e&&n.promise.then(e.resolve).catch(e.reject)}e.async_deriveds.clear(),this.transfer_effects(e.#u,e.#d);let t=e=>{var n=e.reactions;if(n!==null)for(let e of n){var r=e.f;if(r&2)t(e);else{var i=e;r&4194320&&!this.async_deriveds.has(i)&&(this.#d.delete(i),A(i,h),this.schedule(i))}}};for(let e of this.current.keys())t(e);this.oncommit(()=>e.discard()),e.#S(),M=this,this.#g()}#b(e){for(var t=0;t<e.length;t+=1)$e(e[t],this.#u,this.#d)}capture(e,t,n=!1){e.v!==w&&!this.previous.has(e)&&this.previous.set(e,e.v),e.f&8388608||(this.current.set(e,[t,n]),N?.set(e,t)),this.is_fork||(e.v=t)}activate(){M=this}deactivate(){M=null,N=null}flush(){try{Tt=!0,M=this,this.#g()}finally{Ot=0,Ct=null,Et=null,Dt=null,Tt=!1,M=null,N=null,zt.clear()}}discard(){for(let e of this.#i)e(this);this.#i.clear();for(let e of this.async_deriveds.values())e.reject(ft);this.#S(),this.#s?.resolve()}register_created_effect(e){this.#l.push(e)}#x(){for(let u=bt;u!==null;u=u.#n){var e=u.id<this.id,t=[];for(let[r,[i,a]]of this.current){if(u.current.has(r)){var n=u.current.get(r)[0];if(e&&i!==n)u.current.set(r,[i,a]);else continue}t.push(r)}if(e)for(let[e,t]of this.async_deriveds){let n=u.async_deriveds.get(e);n&&t.promise.then(n.resolve).catch(n.reject)}var r=[...u.current.keys()].filter(e=>!u.current.get(e)[1]);if(!(!u.#e||r.length===0)){var i=r.filter(e=>!this.current.has(e));if(i.length===0)e&&u.discard();else if(t.length>0){if(e)for(let e of this.#p)u.unskip_effect(e,e=>{e.f&4194320?u.schedule(e):u.#b([e])});u.activate();var a=new Set,o=new Map;for(var s of t)Nt(s,i,a,o);o=new Map;var c=[...u.current].filter(([e,t])=>{let n=this.current.get(e);return n?n[0]!==t[0]||n[1]!==t[1]:!0}).map(([e])=>e);if(c.length>0)for(let e of this.#l)!(e.f&155648)&&Pt(e,c,o)&&(e.f&4194320?(A(e,h),u.schedule(e)):u.#u.add(e));if(u.#c.length>0&&!u.#m){u.apply();for(var l of u.#c)u.#_(l,[],[]);u.#c=[]}u.deactivate()}}}}increment(e,t){if(this.#a+=1,e){let e=this.#o.get(t)??0;this.#o.set(t,e+1)}}decrement(e,t){if(--this.#a,e){let e=this.#o.get(t)??0;e===1?this.#o.delete(t):this.#o.set(t,e-1)}this.#m||(this.#m=!0,qe(()=>{this.#m=!1,this.linked&&this.flush()}))}transfer_effects(e,t){for(let t of e)this.#u.add(t);for(let e of t)this.#d.add(e);e.clear(),t.clear()}oncommit(e){this.#r.add(e)}ondiscard(e){this.#i.add(e)}settled(){return(this.#s??=p()).promise}static ensure(){if(M===null){let t=M=new e;!Tt&&!wt&&qe(()=>{t.#e||t.flush()})}return M}apply(){if(!ze||!this.is_fork&&this.#t===null&&this.#n===null){N=null;return}N=new Map;for(let[e,[t]]of this.current)N.set(e,t);for(let t=bt;t!==null;t=t.#n)if(!(t===this||t.is_fork)){var e=!1;if(t.id<this.id){for(let[n,[,r]]of t.current)if(!r&&this.current.has(n)){e=!0;break}}if(!e)for(let[e,n]of t.previous)N.has(e)||N.set(e,n)}}schedule(e){if(Ct=e,e.b?.is_pending&&e.f&16777228&&!(e.f&32768)){e.b.defer_effect(e);return}for(var t=e;t.parent!==null;){t=t.parent;var n=t.f;if(Et!==null&&t===G&&(ze||(H===null||!(H.f&2))&&!et))return;if(n&96){if(!(n&1024))return;t.f^=m}}this.#c.push(t)}#S(){if(this.linked){var e=this.#t,t=this.#n;e===null?bt=t:e.#n=t,t===null?xt=e:t.#t=e,this.linked=!1}}};function jt(){try{be()}catch(e){Ye(e,Ct)}}var P=null;function Mt(e){var t=e.length;if(t!==0){for(var n=0;n<t;){var r=e[n++];if(!(r.f&24576)&&Vn(r)&&(P=new Set,Kn(r),r.deps===null&&r.first===null&&r.nodes===null&&r.teardown===null&&r.ac===null&&wn(r),P?.size>0)){zt.clear();for(let e of P){if(e.f&24576)continue;let t=[e],n=e.parent;for(;n!==null;)P.has(n)&&(P.delete(n),t.push(n)),n=n.parent;for(let e=t.length-1;e>=0;e--){let n=t[e];n.f&24576||Kn(n)}}P.clear()}}P=null}}function Nt(e,t,n,r){if(!n.has(e)&&(n.add(e),e.reactions!==null))for(let i of e.reactions){let e=i.f;e&2?Nt(i,t,n,r):e&4194320&&!(e&2048)&&Pt(i,t,r)&&(A(i,h),Ft(i))}}function Pt(e,t,r){let i=r.get(e);if(i!==void 0)return i;if(e.deps!==null)for(let i of e.deps){if(n.call(t,i))return!0;if(i.f&2&&Pt(i,t,r))return r.set(i,!0),!0}return r.set(e,!1),!1}function Ft(e){M.schedule(e)}function It(e,t){if(!(e.f&32&&e.f&1024)){e.f&2048?t.d.push(e):e.f&4096&&t.m.push(e),A(e,m);for(var n=e.first;n!==null;)It(n,t),n=n.next}}function Lt(e){A(e,m);for(var t=e.first;t!==null;)Lt(t),t=t.next}var Rt=new Set,zt=new Map,Bt=!1;function Vt(e,t){return{f:0,v:e,reactions:null,equals:Ie,rv:0,wv:0}}function F(e,t){let n=Vt(e,t);return Pn(n),n}function Ht(e,t=!1,n=!0){let r=Vt(e);return t||(r.equals=Re),Be&&n&&k!==null&&k.l!==null&&(k.l.s??=[]).push(r),r}function I(e,t,n=!1){return H!==null&&(!U||H.f&131072)&&We()&&H.f&4325394&&(q===null||!q.has(e))&&we(),Ut(e,n?qt(t):t,Dt)}function Ut(e,t,n=null){if(!e.equals(t)){zt.set(e,Mn?t:e.v);var r=At.ensure();if(r.capture(e,t),e.f&2){let t=e;e.f&2048&&gt(t),N===null&&Ze(t)}e.wv=Bn(),Kt(e,h,n),We()&&G!==null&&G.f&1024&&!(G.f&96)&&(X===null?Fn([e]):X.push(e)),!r.is_fork&&Rt.size>0&&!Bt&&Wt()}return t}function Wt(){Bt=!1;for(let e of Rt){e.f&1024&&A(e,g);let t;try{t=Vn(e)}catch{t=!0}t&&Kn(e)}Rt.clear()}function Gt(e){I(e,e.v+1)}function Kt(e,t,n){var r=e.reactions;if(r!==null)for(var i=We(),a=r.length,o=0;o<a;o++){var s=r[o],c=s.f;if(!(!i&&s===G)){var l=(c&h)===0;if(l&&A(s,t),c&131072)Rt.add(s);else if(c&2){var u=s;N?.delete(u),c&65536||(c&512&&(G===null||!(G.f&2097152))&&(s.f|=C),Kt(u,g,n))}else if(l){var d=s;c&16&&P!==null&&P.add(d),n===null?Ft(d):n.push(d)}}}}function qt(t){if(typeof t!=`object`||!t||ae in t)return t;let n=l(t);if(n!==s&&n!==c)return t;var r=new Map,i=e(t),o=F(0),u=null,d=Rn,f=e=>{if(Rn===d)return e();var t=H,n=Rn;W(null),zn(d);var r=e();return W(t),zn(n),r};return i&&r.set(`length`,F(t.length,u)),new Proxy(t,{defineProperty(e,t,n){(!(`value`in n)||n.configurable===!1||n.enumerable===!1||n.writable===!1)&&Se();var i=r.get(t);return i===void 0?f(()=>{var e=F(n.value,u);return r.set(t,e),e}):I(i,n.value,!0),!0},deleteProperty(e,t){var n=r.get(t);if(n===void 0){if(t in e){let e=f(()=>F(w,u));r.set(t,e),Gt(o)}}else I(n,w),Gt(o);return!0},get(e,n,i){if(n===ae)return t;var o=r.get(n),s=n in e;if(o===void 0&&(!s||a(e,n)?.writable)&&(o=f(()=>F(qt(s?e[n]:w),u)),r.set(n,o)),o!==void 0){var c=Z(o);return c===w?void 0:c}return Reflect.get(e,n,i)},getOwnPropertyDescriptor(e,t){var n=Reflect.getOwnPropertyDescriptor(e,t);if(n&&`value`in n){var i=r.get(t);i&&(n.value=Z(i))}else if(n===void 0){var a=r.get(t),o=a?.v;if(a!==void 0&&o!==w)return{enumerable:!0,configurable:!0,value:o,writable:!0}}return n},has(e,t){if(t===ae)return!0;var n=r.get(t),i=n!==void 0&&n.v!==w||Reflect.has(e,t);return(n!==void 0||G!==null&&(!i||a(e,t)?.writable))&&(n===void 0&&(n=f(()=>F(i?qt(e[t]):w,u)),r.set(t,n)),Z(n)===w)?!1:i},set(e,t,n,s){var c=r.get(t),l=t in e;if(i&&t===`length`)for(var d=n;d<c.v;d+=1){var p=r.get(d+``);p===void 0?d in e&&(p=f(()=>F(w,u)),r.set(d+``,p)):I(p,w)}if(c===void 0)(!l||a(e,t)?.writable)&&(c=f(()=>F(void 0,u)),I(c,qt(n)),r.set(t,c));else{l=c.v!==w;var m=f(()=>qt(n));I(c,m)}var h=Reflect.getOwnPropertyDescriptor(e,t);if(h?.set&&h.set.call(s,n),!l){if(i&&typeof t==`string`){var g=r.get(`length`),_=Number(t);Number.isInteger(_)&&_>=g.v&&I(g,_+1)}Gt(o)}return!0},ownKeys(e){Z(o);var t=Reflect.ownKeys(e).filter(e=>{var t=r.get(e);return t===void 0||t.v!==w});for(var[n,i]of r)i.v!==w&&!(n in e)&&t.push(n);return t},setPrototypeOf(){Ce()}})}new Set([`copyWithin`,`fill`,`pop`,`push`,`reverse`,`shift`,`sort`,`splice`,`unshift`]);var Jt,Yt,Xt,Zt;function Qt(){if(Jt===void 0){Jt=window,Yt=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;Xt=a(t,`firstChild`).get,Zt=a(t,`nextSibling`).get,u(e)&&(e[le]=void 0,e[ce]=null,e[ue]=void 0,e.__e=void 0),u(n)&&(n[de]=void 0)}}function L(e=``){return document.createTextNode(e)}function $t(e){return Xt.call(e)}function en(e){return Zt.call(e)}function R(e,t){if(!T)return $t(e);var n=$t(E);if(n===null)n=E.appendChild(L());else if(t&&n.nodeType!==3){var r=L();return n?.before(r),D(r),r}return t&&an(n),D(n),n}function z(e,t=1,n=!1){let r=T?E:e;for(var i;t--;)i=r,r=en(r);if(!T)return r;if(n){if(r?.nodeType!==3){var a=L();return r===null?i?.after(a):r.before(a),D(a),a}an(r)}return D(r),r}function tn(e){e.textContent=``}function nn(){return!ze||P!==null?!1:(G.f&y)!==0}function rn(e,t,n){return t==null||t===`http://www.w3.org/1999/xhtml`?n?document.createElement(e,{is:n}):document.createElement(e):n?document.createElementNS(t,e,{is:n}):document.createElementNS(t,e)}function an(e){if(e.nodeValue.length<65536)return;let t=e.nextSibling;for(;t!==null&&t.nodeType===3;)t.remove(),e.nodeValue+=t.nodeValue,t=e.nextSibling}function on(e){var t=H,n=G;W(null),K(null);try{return e()}finally{W(t),K(n)}}function sn(e){G===null&&(H===null&&ye(e),ve()),Mn&&_e(e)}function cn(e,t){var n=t.last;n===null?t.last=t.first=e:(n.next=e,e.prev=n,t.last=e)}function ln(e,t){var n=G;n!==null&&n.f&8192&&(e|=_);var r={ctx:k,deps:null,nodes:null,f:e|h|512,first:null,fn:t,last:null,next:null,parent:n,b:n&&n.b,prev:null,teardown:null,wv:0,ac:null};M?.register_created_effect(r);var i=r;if(e&4)Et===null?At.ensure().schedule(r):Et.push(r);else if(t!==null){try{Kn(r)}catch(e){throw V(r),e}i.deps===null&&i.teardown===null&&i.nodes===null&&i.first===i.last&&!(i.f&524288)&&(i=i.first,e&16&&e&65536&&i!==null&&(i.f|=x))}if(i!==null&&(i.parent=n,n!==null&&cn(i,n),H!==null&&H.f&2&&!(e&64))){var a=H;(a.effects??=[]).push(i)}return r}function un(){return H!==null&&!U}function dn(e){let t=ln(8,null);return A(t,m),t.teardown=e,t}function fn(e){sn(`$effect`);var t=G.f;if(!H&&t&32&&k!==null&&!k.i){var n=k;(n.e??=[]).push(e)}else return pn(e)}function pn(e){return ln(4|ee,e)}function mn(e){At.ensure();let t=ln(64|S,e);return(e={})=>new Promise(n=>{e.outro?Tn(t,()=>{V(t),n(void 0)}):(V(t),n(void 0))})}function hn(e){return ln(4,e)}function gn(e){return ln(re|S,e)}function _n(e,t=0){return ln(8|t,e)}function vn(e,t=[],n=[],r=[]){st(r,t,n,t=>{ln(8,()=>{e(...t.map(Z))})})}function yn(e,t=0){return ln(16|t,e)}function B(e){return ln(32|S,e)}function bn(e){var t=e.teardown;if(t!==null){let e=Mn,n=H;Nn(!0),W(null);try{t.call(null)}finally{Nn(e),W(n)}}}function xn(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){let e=n.ac;e!==null&&on(()=>{e.abort(fe)});var r=n.next;n.f&64?n.parent=null:V(n,t),n=r}}function Sn(e){for(var t=e.first;t!==null;){var n=t.next;t.f&32||V(t),t=n}}function V(e,t=!0){var n=!1;(t||e.f&262144)&&e.nodes!==null&&e.nodes.end!==null&&(Cn(e.nodes.start,e.nodes.end),n=!0),e.f|=b,xn(e,t&&!n),Gn(e,0);var r=e.nodes&&e.nodes.t;if(r!==null)for(let e of r)e.stop();bn(e),e.f^=b,e.f|=v;var i=e.parent;i!==null&&i.first!==null&&wn(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=e.b=null}function Cn(e,t){for(;e!==null;){var n=e===t?null:en(e);e.remove(),e=n}}function wn(e){var t=e.parent,n=e.prev,r=e.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function Tn(e,t,n=!0){var r=[];En(e,r,!0);var i=()=>{n&&V(e),t&&t()},a=r.length;if(a>0){var o=()=>--a||i();for(var s of r)s.out(o)}else i()}function En(e,t,n){if(!(e.f&8192)){e.f^=_;var r=e.nodes&&e.nodes.t;if(r!==null)for(let e of r)(e.is_global||n)&&t.push(e);for(var i=e.first;i!==null;){var a=i.next;if(!(i.f&64)){var o=(i.f&65536)!=0||(i.f&32)!=0&&(e.f&16)!=0;En(i,t,o?n:!1)}i=a}}}function Dn(e){On(e,!0)}function On(e,t){if(e.f&8192){e.f^=_,e.f&1024||(A(e,h),At.ensure().schedule(e));for(var n=e.first;n!==null;){var r=n.next,i=(n.f&65536)!=0||(n.f&32)!=0;On(n,i?t:!1),n=r}var a=e.nodes&&e.nodes.t;if(a!==null)for(let e of a)(e.is_global||t)&&e.in()}}function kn(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;n!==null;){var i=n===r?null:en(n);t.append(n),n=i}}var An=null,jn=!1,Mn=!1;function Nn(e){Mn=e}var H=null,U=!1;function W(e){H=e}var G=null;function K(e){G=e}var q=null;function Pn(e){H!==null&&(!ze||H.f&2)&&(q??=new Set).add(e)}var J=null,Y=0,X=null;function Fn(e){X=e}var In=1,Ln=0,Rn=Ln;function zn(e){Rn=e}function Bn(){return++In}function Vn(e){var t=e.f;if(t&2048)return!0;if(t&2&&(e.f&=~C),t&4096){for(var n=e.deps,r=n.length,i=0;i<r;i++){var a=n[i];if(Vn(a)&&_t(a),a.wv>e.wv)return!0}t&512&&N===null&&A(e,m)}return!1}function Hn(e,t,n=!0){var r=e.reactions;if(r!==null&&!(!ze&&q!==null&&q.has(e)))for(var i=0;i<r.length;i++){var a=r[i];a.f&2?Hn(a,t,!1):t===a&&(n?A(a,h):a.f&1024&&A(a,g),Ft(a))}}function Un(e){var t=J,n=Y,r=X,i=H,a=q,o=k,s=U,c=Rn,l=e.f;J=null,Y=0,X=null,H=l&96?null:e,q=null,Ve(e.ctx),U=!1,Rn=++Ln,e.ac!==null&&(on(()=>{e.ac.abort(fe)}),e.ac=null);try{e.f|=ne;var u=e.fn,d=u();e.f|=y;var f=e.deps,p=M?.is_fork;if(J!==null){var m;if(p||Gn(e,Y),f!==null&&Y>0)for(f.length=Y+J.length,m=0;m<J.length;m++)f[Y+m]=J[m];else e.deps=f=J;if(un()&&e.f&512)for(m=Y;m<f.length;m++)(f[m].reactions??=[]).push(e)}else !p&&f!==null&&Y<f.length&&(Gn(e,Y),f.length=Y);if(We()&&X!==null&&!U&&f!==null&&!(e.f&6146))for(m=0;m<X.length;m++)Hn(X[m],e);if(i!==null&&i!==e){if(Ln++,i.deps!==null)for(let e=0;e<n;e+=1)i.deps[e].rv=Ln;if(t!==null)for(let e of t)e.rv=Ln;X!==null&&(r===null?r=X:r.push(...X))}return e.f&8388608&&(e.f^=ie),d}catch(e){return Je(e)}finally{e.f^=ne,J=t,Y=n,X=r,H=i,q=a,Ve(o),U=s,Rn=c}}function Wn(e,r){let i=r.reactions;if(i!==null){var a=t.call(i,e);if(a!==-1){var o=i.length-1;o===0?i=r.reactions=null:(i[a]=i[o],i.pop())}}if(i===null&&r.f&2&&(J===null||!n.call(J,r))){var s=r;s.f&512&&(s.f^=512,s.f&=~C),s.v!==w&&Ze(s),vt(s),Gn(s,0)}}function Gn(e,t){var n=e.deps;if(n!==null)for(var r=t;r<n.length;r++)Wn(e,n[r])}function Kn(e){var t=e.f;if(!(t&16384)){A(e,m);var n=G,r=jn;G=e,jn=!0;try{t&16777232?Sn(e):xn(e),bn(e);var i=Un(e);e.teardown=typeof i==`function`?i:null,e.wv=In}finally{jn=r,G=n}}}function Z(e){var t=(e.f&2)!=0;if(An?.add(e),H!==null&&!U&&!(G!==null&&G.f&16384)&&(q===null||!q.has(e))){var r=H.deps;if(H.f&2097152)e.rv<Ln&&(e.rv=Ln,J===null&&r!==null&&r[Y]===e?Y++:J===null?J=[e]:J.push(e));else{H.deps??=[],n.call(H.deps,e)||H.deps.push(e);var i=e.reactions;i===null?e.reactions=[H]:n.call(i,H)||i.push(H)}}if(Mn&&zt.has(e))return zt.get(e);if(t){var a=e;if(Mn){var o=a.v;return(!(a.f&1024)&&a.reactions!==null||Jn(a))&&(o=gt(a)),zt.set(a,o),o}var s=(a.f&512)==0&&!U&&H!==null&&(jn||(H.f&512)!=0),c=(a.f&y)===0;Vn(a)&&(s&&(a.f|=512),_t(a)),s&&!c&&(yt(a),qn(a))}if(N?.has(e))return N.get(e);if(e.f&8388608)throw e.v;return e.v}function qn(e){if(e.f|=512,e.deps!==null)for(let t of e.deps)(t.reactions??=[]).push(e),t.f&2&&!(t.f&512)&&(yt(t),qn(t))}function Jn(e){if(e.v===w)return!0;if(e.deps===null)return!1;for(let t of e.deps)if(zt.has(t)||t.f&2&&Jn(t))return!0;return!1}function Yn(e){var t=U;try{return U=!0,e()}finally{U=t}}[...`allowfullscreen.async.autofocus.autoplay.checked.controls.default.disabled.formnovalidate.indeterminate.inert.ismap.loop.multiple.muted.nomodule.novalidate.open.playsinline.readonly.required.reversed.seamless.selected.webkitdirectory.defer.disablepictureinpicture.disableremoteplayback`.split(`.`)];var Xn=[`touchstart`,`touchmove`];function Zn(e){return Xn.includes(e)}var Qn=Symbol(`events`),$n=new Set,er=new Set;function tr(e){if(!T)return;e.removeAttribute(`onload`),e.removeAttribute(`onerror`);let t=e.__e;t!==void 0&&(e.__e=void 0,queueMicrotask(()=>{e.isConnected&&e.dispatchEvent(t)}))}function nr(e,t,n,r={}){function i(e){if(r.capture||sr.call(t,e),!e.cancelBubble)return on(()=>n?.call(this,e))}return e.startsWith(`pointer`)||e.startsWith(`touch`)||e===`wheel`?qe(()=>{t.addEventListener(e,i,r)}):t.addEventListener(e,i,r),i}function rr(e,t,n,r,i){var a={capture:r,passive:i},o=nr(e,t,n,a);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&dn(()=>{t.removeEventListener(e,o,a)})}function ir(e,t,n){(t[Qn]??={})[e]=n}function ar(e){for(var t=0;t<e.length;t++)$n.add(e[t]);for(var n of er)n(e)}var or=null;function sr(e){var t=this,n=t.ownerDocument,r=e.type,a=e.composedPath?.()||[],o=a[0]||e.target;or=e;var s=0,c=or===e&&e[Qn];if(c){var l=a.indexOf(c);if(l!==-1&&(t===document||t===window)){e[Qn]=t;return}var u=a.indexOf(t);if(u===-1)return;l<=u&&(s=l)}if(o=a[s]||e.target,o!==t){i(e,`currentTarget`,{configurable:!0,get(){return o||n}});var d=H,f=G;W(null),K(null);try{for(var p,m=[];o!==null&&o!==t;){try{var h=o[Qn]?.[r];h!=null&&(!o.disabled||e.target===o)&&h.call(o,e)}catch(e){p?m.push(e):p=e}if(e.cancelBubble)break;s++,o=s<a.length?a[s]:null}if(p){for(let e of m)queueMicrotask(()=>{throw e});throw p}}finally{e[Qn]=t,delete e.currentTarget,W(d),K(f)}}}var cr=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy(`svelte-trusted-html`,{createHTML:e=>e});function lr(e){return cr?.createHTML(e)??e}function ur(e){var t=rn(`template`);return t.innerHTML=lr(e.replaceAll(`<!>`,`<!---->`)),t.content}function dr(e,t){var n=G;n.nodes===null&&(n.nodes={start:e,end:t,a:null,t:null})}function Q(e,t){var n=(t&1)!=0,r=(t&2)!=0,i,a=!e.startsWith(`<!>`);return()=>{if(T)return dr(E,null),E;i===void 0&&(i=ur(a?e:`<!>`+e),n||(i=$t(i)));var t=r||Yt?document.importNode(i,!0):i.cloneNode(!0);if(n){var o=$t(t),s=t.lastChild;dr(o,s)}else dr(t,t);return t}}function $(e,t){if(T){var n=G;(!(n.f&32768)||n.nodes.end===null)&&(n.nodes.end=E),Me();return}e!==null&&e.before(t)}function fr(e,t){var n=t==null?``:typeof t==`object`?`${t}`:t;n!==(e[de]??=e.nodeValue)&&(e[de]=n,e.nodeValue=`${n}`)}function pr(e,t){return hr(e,t)}var mr=new Map;function hr(e,{target:t,anchor:n,props:i={},events:a,context:o,intro:s=!0,transformError:c}){Qt();var l=void 0,u=mn(()=>{var s=n??t.appendChild(L());at(s,{pending:()=>{}},t=>{He({});var n=k;if(o&&(n.c=o),a&&(i.$$events=a),T&&dr(t,null),l=e(t,i)||{},T&&(G.nodes.end=E,E===null||E.nodeType!==8||E.data!==`]`))throw ke(),Ee;Ue()},c);var u=new Set,d=e=>{for(var n=0;n<e.length;n++){var r=e[n];if(!u.has(r)){u.add(r);var i=Zn(r);for(let e of[t,document]){var a=mr.get(e);a===void 0&&(a=new Map,mr.set(e,a));var o=a.get(r);o===void 0?(e.addEventListener(r,sr,{passive:i}),a.set(r,1)):a.set(r,o+1)}}}};return d(r($n)),er.add(d),()=>{for(var e of u)for(let n of[t,document]){var r=mr.get(n),i=r.get(e);--i==0?(n.removeEventListener(e,sr),r.delete(e),r.size===0&&mr.delete(n)):r.set(e,i)}er.delete(d),s!==n&&s.parentNode?.removeChild(s)}});return gr.set(l,u),l}var gr=new WeakMap,_r=class{anchor;#e=new Map;#t=new Map;#n=new Map;#r=new Set;#i=!0;constructor(e,t=!0){this.anchor=e,this.#i=t}#a=e=>{if(this.#e.has(e)){var t=this.#e.get(e),n=this.#t.get(t);if(n)Dn(n),this.#r.delete(t);else{var r=this.#n.get(t);r&&(Dn(r.effect),this.#t.set(t,r.effect),this.#n.delete(t),r.fragment.lastChild.remove(),this.anchor.before(r.fragment),n=r.effect)}for(let[t,n]of this.#e){if(this.#e.delete(t),t===e)break;let r=this.#n.get(n);r&&(V(r.effect),this.#n.delete(n))}for(let[e,r]of this.#t){if(e===t||this.#r.has(e))continue;let i=()=>{if(Array.from(this.#e.values()).includes(e)){var t=document.createDocumentFragment();kn(r,t),t.append(L()),this.#n.set(e,{effect:r,fragment:t})}else V(r);this.#r.delete(e),this.#t.delete(e)};this.#i||!n?(this.#r.add(e),Tn(r,i,!1)):i()}}};#o=e=>{this.#e.delete(e);let t=Array.from(this.#e.values());for(let[e,n]of this.#n)t.includes(e)||(V(n.effect),this.#n.delete(e))};ensure(e,t){var n=M,r=nn();if(t&&!this.#t.has(e)&&!this.#n.has(e))if(r){var i=document.createDocumentFragment(),a=L();i.append(a),this.#n.set(e,{effect:B(()=>t(a)),fragment:i})}else this.#t.set(e,B(()=>t(this.anchor)));if(this.#e.set(n,e),r){for(let[t,r]of this.#t)t===e?n.unskip_effect(r):n.skip_effect(r);for(let[t,r]of this.#n)t===e?n.unskip_effect(r.effect):n.skip_effect(r.effect);n.oncommit(this.#a),n.ondiscard(this.#o)}else T&&(this.anchor=E),this.#a(n)}};function vr(e,t,n=!1){var r;T&&(r=E,Me());var i=new _r(e),a=n?x:0;function o(e,t){if(T){var n=Fe(r);if(e!==parseInt(n.substring(1))){var a=Pe();D(a),i.anchor=a,je(!1),i.ensure(e,t),je(!0);return}}i.ensure(e,t)}yn(()=>{var e=!1;t((t,n=0)=>{e=!0,o(n,t)}),e||o(-1,null)},a)}function yr(e,t){return t}function br(e,t,n){for(var i=[],a=t.length,o,s=t.length,c=0;c<a;c++){let n=t[c];Tn(n,()=>{if(o){if(o.pending.delete(n),o.done.add(n),o.pending.size===0){var t=e.outrogroups;xr(e,r(o.done)),t.delete(o),t.size===0&&(e.outrogroups=null)}}else --s},!1)}if(s===0){var l=i.length===0&&n!==null;if(l){var u=n,d=u.parentNode;tn(d),d.append(u),e.items.clear()}xr(e,t,!l)}else o={pending:new Set(t),done:new Set},(e.outrogroups??=new Set).add(o)}function xr(e,t,n=!0){var r;if(e.pending.size>0){r=new Set;for(let t of e.pending.values())for(let n of t)r.add(e.items.get(n).e)}for(var i=0;i<t.length;i++){var a=t[i];r?.has(a)?(a.f|=te,kn(a,document.createDocumentFragment())):V(t[i],n)}}var Sr;function Cr(t,n,i,a,o,s=null){var c=t,l=new Map;if(n&4){var u=t;c=T?D($t(u)):u.appendChild(L())}T&&Me();var d=null,f=mt(()=>{var t=i();return e(t)?t:t==null?[]:r(t)}),p,m=new Map,h=!0;function g(e){v.effect.f&16384||(v.pending.delete(e),v.fallback=d,Tr(v,p,c,n,a),d!==null&&(p.length===0?d.f&33554432?(d.f^=te,Dr(d,null,c)):Dn(d):Tn(d,()=>{d=null})))}function _(e){v.pending.delete(e)}var v={effect:yn(()=>{p=Z(f);var e=p.length;let t=!1;T&&Fe(c)===`[!`!=(e===0)&&(c=Pe(),D(c),je(!1),t=!0);for(var r=new Set,u=M,v=nn(),y=0;y<e;y+=1){T&&E.nodeType===8&&E.data===`]`&&(c=E,t=!0,je(!1));var b=p[y],x=a(b,y),S=h?null:l.get(x);S?(S.v&&Ut(S.v,b),S.i&&Ut(S.i,y),v&&u.unskip_effect(S.e)):(S=Er(l,h?c:Sr??=L(),b,x,y,o,n,i),h||(S.e.f|=te),l.set(x,S)),r.add(x)}if(e===0&&s&&!d&&(h?d=B(()=>s(c)):(d=B(()=>s(Sr??=L())),d.f|=te)),e>r.size&&ge(``,``,``),T&&e>0&&D(Pe()),!h)if(m.set(u,r),v){for(let[e,t]of l)r.has(e)||u.skip_effect(t.e);u.oncommit(g),u.ondiscard(_)}else g(u);t&&je(!0),Z(f)}),flags:n,items:l,pending:m,outrogroups:null,fallback:d};h=!1,T&&(c=E)}function wr(e){for(;e!==null&&!(e.f&32);)e=e.next;return e}function Tr(e,t,n,i,a){var o=(i&8)!=0,s=t.length,c=e.items,l=wr(e.effect.first),u,d=null,f,p=[],m=[],h,g,_,v;if(o)for(v=0;v<s;v+=1)h=t[v],g=a(h,v),_=c.get(g).e,_.f&33554432||(_.nodes?.a?.measure(),(f??=new Set).add(_));for(v=0;v<s;v+=1){if(h=t[v],g=a(h,v),_=c.get(g).e,e.outrogroups!==null)for(let t of e.outrogroups)t.pending.delete(_),t.done.delete(_);if(_.f&8192&&(Dn(_),o&&(_.nodes?.a?.unfix(),(f??=new Set).delete(_))),_.f&33554432)if(_.f^=te,_===l)Dr(_,null,n);else{var y=d?d.next:l;_===e.effect.last&&(e.effect.last=_.prev),_.prev&&(_.prev.next=_.next),_.next&&(_.next.prev=_.prev),Or(e,d,_),Or(e,_,y),Dr(_,y,n),d=_,p=[],m=[],l=wr(d.next);continue}if(_!==l){if(u!==void 0&&u.has(_)){if(p.length<m.length){var b=m[0],x;d=b.prev;var S=p[0],ee=p[p.length-1];for(x=0;x<p.length;x+=1)Dr(p[x],b,n);for(x=0;x<m.length;x+=1)u.delete(m[x]);Or(e,S.prev,ee.next),Or(e,d,S),Or(e,ee,b),l=b,d=ee,--v,p=[],m=[]}else u.delete(_),Dr(_,l,n),Or(e,_.prev,_.next),Or(e,_,d===null?e.effect.first:d.next),Or(e,d,_),d=_;continue}for(p=[],m=[];l!==null&&l!==_;)(u??=new Set).add(l),m.push(l),l=wr(l.next);if(l===null)continue}_.f&33554432||p.push(_),d=_,l=wr(_.next)}if(e.outrogroups!==null){for(let t of e.outrogroups)t.pending.size===0&&(xr(e,r(t.done)),e.outrogroups?.delete(t));e.outrogroups.size===0&&(e.outrogroups=null)}if(l!==null||u!==void 0){var C=[];if(u!==void 0)for(_ of u)_.f&8192||C.push(_);for(;l!==null;)!(l.f&8192)&&l!==e.fallback&&C.push(l),l=wr(l.next);var ne=C.length;if(ne>0){var re=i&4&&s===0?n:null;if(o){for(v=0;v<ne;v+=1)C[v].nodes?.a?.measure();for(v=0;v<ne;v+=1)C[v].nodes?.a?.fix()}br(e,C,re)}}o&&qe(()=>{if(f!==void 0)for(_ of f)_.nodes?.a?.apply()})}function Er(e,t,n,r,i,a,o,s){var c=o&1?o&16?Vt(n):Ht(n,!1,!1):null,l=o&2?Vt(i):null;return{v:c,i:l,e:B(()=>(a(t,c??n,l??i,s),()=>{e.delete(r)}))}}function Dr(e,t,n){if(e.nodes)for(var r=e.nodes.start,i=e.nodes.end,a=t&&!(t.f&33554432)?t.nodes.start:n;r!==null;){var o=en(r);if(a.before(r),r===i)return;r=o}}function Or(e,t,n){t===null?e.effect.first=n:t.next=n,n===null?e.effect.last=t:n.prev=t}var kr=[...`
2
+ \r\f\xA0\v`];function Ar(e,t,n){var r=e==null?``:``+e;if(t&&(r=r?r+` `+t:t),n){for(var i of Object.keys(n))if(n[i])r=r?r+` `+i:i;else if(r.length)for(var a=i.length,o=0;(o=r.indexOf(i,o))>=0;){var s=o+a;(o===0||kr.includes(r[o-1]))&&(s===r.length||kr.includes(r[s]))?r=(o===0?``:r.substring(0,o))+r.substring(s+1):o=s}}return r===``?null:r}function jr(e,t=!1){var n=t?` !important;`:`;`,r=``;for(var i of Object.keys(e)){var a=e[i];a!=null&&a!==``&&(r+=` `+i+`: `+a+n)}return r}function Mr(e){return e[0]!==`-`||e[1]!==`-`?e.toLowerCase():e}function Nr(e,t){if(t){var n=``,r,i;if(Array.isArray(t)?(r=t[0],i=t[1]):r=t,e){e=String(e).replaceAll(/\s*\/\*.*?\*\/\s*/g,``).trim();var a=!1,o=0,s=!1,c=[];r&&c.push(...Object.keys(r).map(Mr)),i&&c.push(...Object.keys(i).map(Mr));var l=0,u=-1;let t=e.length;for(var d=0;d<t;d++){var f=e[d];if(s?f===`/`&&e[d-1]===`*`&&(s=!1):a?a===f&&(a=!1):f===`/`&&e[d+1]===`*`?s=!0:f===`"`||f===`'`?a=f:f===`(`?o++:f===`)`&&o--,!s&&a===!1&&o===0){if(f===`:`&&u===-1)u=d;else if(f===`;`||d===t-1){if(u!==-1){var p=Mr(e.substring(l,u).trim());if(!c.includes(p)){f!==`;`&&d++;var m=e.substring(l,d).trim();n+=` `+m+`;`}}l=d+1,u=-1}}}}return r&&(n+=jr(r)),i&&(n+=jr(i,!0)),n=n.trim(),n===``?null:n}return e==null?null:String(e)}function Pr(e,t,n,r,i,a){var o=e[le];if(T||o!==n||o===void 0){var s=Ar(n,r,a);(!T||s!==e.getAttribute(`class`))&&(s==null?e.removeAttribute(`class`):t?e.className=s:e.setAttribute(`class`,s)),e[le]=n}else if(a&&i!==a)for(var c in a){var l=!!a[c];(i==null||l!==!!i[c])&&e.classList.toggle(c,l)}return a}function Fr(e,t={},n,r){for(var i in n){var a=n[i];t[i]!==a&&(n[i]==null?e.style.removeProperty(i):e.style.setProperty(i,a,r))}}function Ir(e,t,n,r){var i=e[ue];if(T||i!==t){var a=Nr(t,r);(!T||a!==e.getAttribute(`style`))&&(a==null?e.removeAttribute(`style`):e.style.cssText=a),e[ue]=t}else r&&(Array.isArray(r)?(Fr(e,n?.[0],r[0]),Fr(e,n?.[1],r[1],`important`)):Fr(e,n,r));return r}var Lr=Symbol(`is custom element`),Rr=Symbol(`is html`),zr=pe?`link`:`LINK`;function Br(e,t,n,r){var i=Vr(e);T&&(i[t]=e.getAttribute(t),t===`src`||t===`srcset`||t===`href`&&e.nodeName===zr)||i[t]!==(i[t]=n)&&(t===`loading`&&(e[se]=n),n==null?e.removeAttribute(t):typeof n!=`string`&&Ur(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function Vr(e){return e[ce]??={[Lr]:e.nodeName.includes(`-`),[Rr]:e.namespaceURI===De}}var Hr=new Map;function Ur(e){var t=e.getAttribute(`is`)||e.nodeName,n=Hr.get(t);if(n)return n;Hr.set(t,n=[]);for(var r,i=e,a=Element.prototype;a!==i;){for(var s in r=o(i),r)r[s].set&&s!==`innerHTML`&&s!==`textContent`&&s!==`innerText`&&n.push(s);i=l(i)}return n}function Wr(e,t){return e===t||e?.[ae]===t}function Gr(e={},t,n,r){var i=k.r,a=G;return hn(()=>{var o,s;return _n(()=>{o=s,s=r?.()||[],Yn(()=>{Wr(n(...s),e)||(t(e,...s),o&&Wr(n(...o),e)&&t(null,...o))})}),()=>{let r=a;for(;r!==i&&r.parent!==null&&r.parent.f&33554432;)r=r.parent;let o=()=>{s&&Wr(n(...s),e)&&t(null,...s)},c=r.teardown;r.teardown=()=>{o(),c?.()}}}),e}function Kr(e,t,n,r){var i=!Be||(n&2)!=0,o=(n&8)!=0,s=(n&16)!=0,c=r,l=!0,u=void 0,d=()=>s&&i?(u??=dt(r),Z(u)):(l&&(l=!1,c=s?Yn(r):r),c);let f;if(o){var p=ae in e||oe in e;f=a(e,t)?.set??(p&&t in e?n=>e[t]=n:void 0)}var m,h=!1;o?[m,h]=nt(()=>e[t]):m=e[t],m===void 0&&r!==void 0&&(m=d(),f&&(i&&xe(t),f(m)));var g=i?()=>{var n=e[t];return n===void 0?d():(l=!0,n)}:()=>{var n=e[t];return n!==void 0&&(c=void 0),n===void 0?c:n};if(i&&!(n&4))return g;if(f){var _=e.$$legacy;return(function(e,t){return arguments.length>0?((!i||!t||_||h)&&f(t?g():e),e):g()})}var v=!1,y=(n&1?dt:mt)(()=>(v=!1,g()));o&&Z(y);var b=G;return(function(e,t){if(arguments.length>0){let n=t?Z(y):i&&o?qt(e):e;return I(y,n),v=!0,c!==void 0&&(c=n),e}return Mn&&v||b.f&16384?y.v:Z(y)})}function qr(e){k===null&&me(`onMount`),Be&&k.l!==null?Jr(k).m.push(e):fn(()=>{let t=Yn(e);if(typeof t==`function`)return t})}function Jr(e){var t=e.l;return t.u??={a:[],b:[],m:[]}}typeof window<`u`&&((window.__svelte??={}).v??=new Set).add(`5`);var Yr=`/api/ext/pages`;async function Xr(){let e=await fetch(Yr);return e.ok?e.json():(console.warn(`Failed to fetch pages data: HTTP ${e.status}`),{sites:[],systemSite:null,recentPages:[]})}var Zr=Q(`<div class="thumbnail-sublabel svelte-yqwgpu"> </div>`),Qr=Q(`<button class="thumbnail-card svelte-yqwgpu"><div class="thumbnail-frame svelte-yqwgpu"><iframe loading="lazy" sandbox="allow-same-origin"></iframe></div> <div class="thumbnail-label svelte-yqwgpu"> </div> <!></button>`);function $r(e,t){let n=Kr(t,`width`,3,280),r=Kr(t,`height`,3,180),i=F(!1),a=j(()=>n()/1280);var o=Qr(),s=R(o),c=R(s);Br(c,`tabindex`,-1);let l;O(s);var u=z(s,2),d=R(u,!0);O(u);var f=z(u,2),p=e=>{var n=Zr(),r=R(n,!0);O(n),vn(()=>fr(r,t.sublabel)),$(e,n)};vr(f,e=>{t.sublabel&&e(p)}),O(o),vn(()=>{Ir(o,`--card-w: ${n()??``}px`),Ir(s,`width: ${n()??``}px; height: ${r()??``}px`),Br(c,`src`,t.url),Br(c,`title`,t.label),Ir(c,`width: 1280px; height: ${r()/Z(a)}px; transform: scale(${Z(a)??``})`),l=Pr(c,1,`svelte-yqwgpu`,null,l,{loaded:Z(i)}),fr(d,t.label)}),ir(`click`,o,function(...e){t.onclick?.apply(this,e)}),rr(`load`,c,()=>I(i,!0)),tr(c),$(e,o)}ar([`click`]);var ei=Q(`<div class="section svelte-apzsoj"><div class="section-header svelte-apzsoj"><span class="section-title svelte-apzsoj">mind sites</span></div> <div class="thumbnail-grid svelte-apzsoj"></div></div>`),ti=Q(`<div class="section svelte-apzsoj"><div class="section-header svelte-apzsoj"><span class="section-title svelte-apzsoj">recently updated</span></div> <div class="thumbnail-grid svelte-apzsoj"></div></div>`),ni=Q(`<div class="section svelte-apzsoj"><div class="section-header svelte-apzsoj"><span class="section-title svelte-apzsoj">shared pages</span></div> <div class="thumbnail-grid svelte-apzsoj"></div></div>`),ri=Q(`<div class="empty svelte-apzsoj">No pages published yet.</div>`),ii=Q(`<div class="dashboard svelte-apzsoj"><!> <!> <!> <!></div>`);function ai(e,t){He(t,!0);function n(e){let t=Math.floor((Date.now()-new Date(e).getTime())/1e3);if(t<60)return`just now`;let n=Math.floor(t/60);if(n<60)return`${n}m ago`;let r=Math.floor(n/60);if(r<24)return`${r}h ago`;let i=Math.floor(r/24);return i<30?`${i}d ago`:`${Math.floor(i/30)}mo ago`}function r(e){let t=n(e.modified);return e.mind===`_system`&&e.author?`${e.author} · ${t}`:`${e.mind} · ${t}`}var i=ii(),a=R(i),o=e=>{var n=ei(),r=z(R(n),2);Cr(r,21,()=>t.sites,yr,(e,n)=>{{let r=j(()=>Z(n).pages[0]?`/ext/pages/public/${Z(n).name}/${Z(n).pages[0].file}`:`about:blank`);$r(e,{get url(){return Z(r)},get label(){return Z(n).label},onclick:()=>t.onSelectSite(Z(n).name)})}}),O(r),O(n),$(e,n)};vr(a,e=>{t.sites.length>0&&e(o)});var s=z(a,2),c=e=>{var n=ti(),i=z(R(n),2);Cr(i,21,()=>t.recentPages,yr,(e,n)=>{{let i=j(()=>`/ext/pages/public/${Z(n).mind}/${Z(n).file}`),a=j(()=>r(Z(n)));$r(e,{get url(){return Z(i)},get label(){return Z(n).file},get sublabel(){return Z(a)},onclick:()=>t.onSelectPage(Z(n).mind,Z(n).file)})}}),O(i),O(n),$(e,n)};vr(s,e=>{t.recentPages.length>0&&e(c)});var l=z(s,2),u=e=>{var n=ni(),r=z(R(n),2);Cr(r,21,()=>t.systemSite.pages,yr,(e,n)=>{{let r=j(()=>Z(n).author??void 0);$r(e,{get url(){return Z(n).url},get label(){return Z(n).file},get sublabel(){return Z(r)},onclick:()=>t.onSelectPage(`_system`,Z(n).file)})}}),O(r),O(n),$(e,n)};vr(l,e=>{t.systemSite&&e(u)});var d=z(l,2),f=e=>{$(e,ri())};vr(d,e=>{!t.systemSite&&t.sites.length===0&&t.recentPages.length===0&&e(f)}),O(i),$(e,i),Ue()}var oi=Q(`<div></div>`),si=Q(`<div class="empty svelte-vvnkg1">No pages in this site.</div>`),ci=Q(`<div class="site-view svelte-vvnkg1"><div class="site-header svelte-vvnkg1"><span class="site-name svelte-vvnkg1"> </span> <span class="page-count svelte-vvnkg1"> </span></div> <!> <!> <!></div>`);function li(e,t){He(t,!0);function n(e){let t=Math.floor((Date.now()-new Date(e).getTime())/1e3);if(t<60)return`just now`;let n=Math.floor(t/60);if(n<60)return`${n}m ago`;let r=Math.floor(n/60);if(r<24)return`${r}h ago`;let i=Math.floor(r/24);return i<30?`${i}d ago`:`${Math.floor(i/30)}mo ago`}let r=e=>e===`index.html`||e===`index.md`,i=j(()=>t.site.pages.find(e=>r(e.file))),a=j(()=>t.site.pages.filter(e=>e!==Z(i)));var o=ci(),s=R(o),c=R(s),l=R(c,!0);O(c);var u=z(c,2),d=R(u);O(u),O(s);var f=z(s,2),p=e=>{{let r=j(()=>`/ext/pages/public/${t.site.name}/${Z(i).file}`),a=j(()=>`home · ${n(Z(i).modified)}`);$r(e,{get url(){return Z(r)},get label(){return Z(i).file},get sublabel(){return Z(a)},onclick:()=>t.onSelectPage(t.site.name,Z(i).file),width:600,height:340})}};vr(f,e=>{Z(i)&&e(p)});var m=z(f,2),h=e=>{var r=oi();let o;Cr(r,21,()=>Z(a),yr,(e,r)=>{{let i=j(()=>`/ext/pages/public/${t.site.name}/${Z(r).file}`),a=j(()=>n(Z(r).modified));$r(e,{get url(){return Z(i)},get label(){return Z(r).file},get sublabel(){return Z(a)},onclick:()=>t.onSelectPage(t.site.name,Z(r).file)})}}),O(r),vn(()=>o=Pr(r,1,`thumbnail-grid svelte-vvnkg1`,null,o,{"with-hero":Z(i)})),$(e,r)};vr(m,e=>{Z(a).length>0&&e(h)});var g=z(m,2),_=e=>{$(e,si())};vr(g,e=>{t.site.pages.length===0&&e(_)}),O(o),vn(()=>{fr(l,t.site.label),fr(d,`${t.site.pages.length??``} ${t.site.pages.length===1?`page`:`pages`}`)}),$(e,o),Ue()}var ui=Q(`<iframe class="full-page-iframe svelte-1r8vfx3"></iframe>`),di=Q(`<div><!></div>`);function fi(e,t){He(t,!0);let n=F(qt(window.location.hash)),r=F(void 0);qr(()=>{let e=()=>{I(n,window.location.hash,!0)};return window.addEventListener(`hashchange`,e),window.addEventListener(`message`,f),()=>{window.removeEventListener(`hashchange`,e),window.removeEventListener(`message`,f)}});let i=j(()=>{let e=Z(n).replace(/^#\/?/,``),t=e.match(/^mind\/([^/]+)/);if(t)return{view:`mind`,name:t[1]};let r=e.match(/^([^/]+)\/(.+)$/);return r?{view:`page`,name:r[1],path:r[2]}:e&&!e.includes(`/`)?{view:`site`,name:e}:{view:`dashboard`}}),a=F(qt([])),o=F(null),s=F(qt([]));fn(()=>{Xr().then(e=>{I(a,e.sites,!0),I(o,e.systemSite,!0),I(s,e.recentPages,!0)})});let c=j(()=>[...Z(o)?[Z(o)]:[],...Z(a)]),l=j(()=>{if(Z(i).view!==`site`&&Z(i).view!==`mind`)return;let e=Z(i).name;return Z(c).find(t=>t.name===e)??{name:e,label:e,pages:[]}});function u(e){window.parent.postMessage({type:`navigate`,path:e},`*`)}function d(e){let t=e.match(/^\/ext\/pages\/public\/([^/]+)\/(.+)$/);if(!t)return;let[,n,r]=t;Z(i).view===`page`&&n===Z(i).name&&r===Z(i).path||u(n===`_system`?`/pages/_system/${r}`:`/minds/${n}/pages/${r}`)}function f(e){if(e.source!==Z(r)?.contentWindow)return;let t=e.data;t?.type!==`volute-pages-nav`||typeof t.path!=`string`||d(t.path)}function p(e,t){u(e===`_system`?`/pages/_system/${t}`:`/minds/${e}/pages/${t}`)}function m(e){u(e===`_system`?`/pages/_system`:`/minds/${e}/pages`)}var h=di();let g;var _=R(h),v=e=>{var t=ui();Gr(t,e=>I(r,e),()=>Z(r)),vn(()=>{Br(t,`src`,`/ext/pages/public/${Z(i).name??``}/${Z(i).path??``}`),Br(t,`title`,`${Z(i).name??``}/${Z(i).path??``}`)}),$(e,t)},y=e=>{li(e,{get site(){return Z(l)},onSelectPage:p})},b=e=>{ai(e,{get sites(){return Z(a)},get systemSite(){return Z(o)},get recentPages(){return Z(s)},onSelectSite:m,onSelectPage:p})};vr(_,e=>{Z(i).view===`page`?e(v):(Z(i).view===`site`||Z(i).view===`mind`)&&Z(l)?e(y,1):e(b,-1)}),O(h),vn(()=>g=Pr(h,1,`ext-app svelte-1r8vfx3`,null,g,{"full-page":Z(i).view===`page`})),$(e,h),Ue()}pr(fi,{target:document.getElementById(`app`)});
@@ -5,8 +5,8 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <link rel="stylesheet" href="/ext-theme.css" />
7
7
  <title>Pages</title>
8
- <script type="module" crossorigin src="/ext/pages/assets/index-CQjEQg1r.js"></script>
9
- <link rel="stylesheet" crossorigin href="/ext/pages/assets/index-BcY6lnq4.css">
8
+ <script type="module" crossorigin src="/ext/pages/assets/index-DtzftuPA.js"></script>
9
+ <link rel="stylesheet" crossorigin href="/ext/pages/assets/index-BuXnE-rb.css">
10
10
  </head>
11
11
  <body>
12
12
  <div id="app"></div>
@@ -23,6 +23,20 @@ export type SubagentConfig = {
23
23
  maxTurns?: number;
24
24
  };
25
25
 
26
+ /** Extended-thinking config, passed through to the Claude Agent SDK's `thinking` option.
27
+ * `adaptive` on current models (Opus 4.6+, Sonnet 5, Fable); `enabled` for older models
28
+ * that take a fixed budget. `display: "summarized"` returns readable reasoning summaries;
29
+ * `"omitted"` (the API default on Opus 4.7+/Sonnet 5) returns empty thinking blocks. */
30
+ export type ThinkingConfig =
31
+ | { type: "adaptive"; display?: "summarized" | "omitted" }
32
+ | { type: "enabled"; budgetTokens?: number; display?: "summarized" | "omitted" }
33
+ | { type: "disabled" };
34
+
35
+ /** Reasoning depth, passed through to the Claude Agent SDK's `effort` option (the analog
36
+ * of Claude Code's thinking level). `xhigh` needs Fable 5/Opus 4.7+/Sonnet 5, `max` needs
37
+ * Fable 5/Opus 4.6+/Sonnet 4.6+; the SDK silently downgrades on models that lack a level. */
38
+ export type EffortLevel = "low" | "medium" | "high" | "xhigh" | "max";
39
+
26
40
  export type MindConfig = {
27
41
  model?: string;
28
42
  logLevel?: "error" | "warn" | "info" | "debug";
@@ -32,7 +46,8 @@ export type MindConfig = {
32
46
  sessionIdleMinutes?: number;
33
47
  subagents?: Record<string, SubagentConfig>;
34
48
  // Template-specific config fields (claude, pi, codex)
35
- maxThinkingTokens?: number;
49
+ thinking?: ThinkingConfig;
50
+ effort?: EffortLevel;
36
51
  thinkingLevel?: "off" | "minimal" | "low" | "medium" | "high" | "xhigh";
37
52
  reasoningEffort?: "minimal" | "low" | "medium" | "high" | "xhigh";
38
53
  };
@@ -179,9 +194,50 @@ export function loadPrompts(): MindPrompts {
179
194
  }
180
195
  }
181
196
 
182
- export function setupShutdown(): void {
183
- function shutdown() {
197
+ /**
198
+ * Run the optional teardown before exit, bounded by a timeout so a wedged child
199
+ * (e.g. an SDK subprocess that won't exit) can't block shutdown forever. Teardown
200
+ * errors are logged, never thrown, so a failing hook still lets the process exit.
201
+ */
202
+ export async function runShutdown(
203
+ onShutdown: (() => Promise<void>) | undefined,
204
+ timeoutMs: number,
205
+ ): Promise<void> {
206
+ if (!onShutdown) return;
207
+ let timer: ReturnType<typeof setTimeout> | undefined;
208
+ const timeout = new Promise<void>((resolve) => {
209
+ timer = setTimeout(() => {
210
+ log("server", `shutdown teardown timed out after ${timeoutMs}ms — exiting anyway`);
211
+ resolve();
212
+ }, timeoutMs);
213
+ });
214
+ try {
215
+ await Promise.race([
216
+ // Normalize a synchronous throw into the logged/swallowed path so it can't
217
+ // escape runShutdown and prevent the caller's process.exit.
218
+ Promise.resolve()
219
+ .then(() => onShutdown())
220
+ .catch((err) => log("server", "shutdown teardown failed:", err)),
221
+ timeout,
222
+ ]);
223
+ } finally {
224
+ if (timer) clearTimeout(timer);
225
+ }
226
+ }
227
+
228
+ /**
229
+ * Wire SIGINT/SIGTERM to a graceful shutdown. Without `onShutdown` this exits
230
+ * immediately (as before); pass a teardown to reap live SDK subprocesses before
231
+ * exit so they aren't orphaned to PID 1 as `<defunct>` zombies. The handler is
232
+ * idempotent so a second signal during teardown doesn't double-run it.
233
+ */
234
+ export function setupShutdown(onShutdown?: () => Promise<void>, timeoutMs = 10_000): void {
235
+ let shuttingDown = false;
236
+ async function shutdown() {
237
+ if (shuttingDown) return;
238
+ shuttingDown = true;
184
239
  log("server", "shutdown signal received");
240
+ await runShutdown(onShutdown, timeoutMs);
185
241
  process.exit(0);
186
242
  }
187
243
  process.on("SIGINT", shutdown);
@@ -22,8 +22,13 @@ import { createPreCompactHook } from "./lib/hooks/pre-compact.js";
22
22
  import { createReplyInstructionsHook } from "./lib/hooks/reply-instructions.js";
23
23
  import { log } from "./lib/logger.js";
24
24
  import { createMessageChannel } from "./lib/message-channel.js";
25
- import { isSessionReapable, reapSessionQuery } from "./lib/session-reaper.js";
25
+ import {
26
+ isSessionReapable,
27
+ reapSessionQuery,
28
+ reapSessionsForShutdown,
29
+ } from "./lib/session-reaper.js";
26
30
  import { createSessionStore } from "./lib/session-store.js";
31
+ import type { EffortLevel, ThinkingConfig } from "./lib/startup.js";
27
32
  import { loadPrompts, type SubagentConfig } from "./lib/startup.js";
28
33
  import { consumeStream } from "./lib/stream-consumer.js";
29
34
  import type {
@@ -56,7 +61,8 @@ export function createMind(options: {
56
61
  cwd: string;
57
62
  abortController: AbortController;
58
63
  model?: string;
59
- maxThinkingTokens?: number;
64
+ thinking?: ThinkingConfig;
65
+ effort?: EffortLevel;
60
66
  sessionsDir: string;
61
67
  compactionMessage?: string;
62
68
  maxContextTokens?: number;
@@ -69,6 +75,7 @@ export function createMind(options: {
69
75
  waitForCommits: () => Promise<void>;
70
76
  getContextInfo: () => Promise<ContextInfo>;
71
77
  getContextMessages: () => Promise<ContextMessages>;
78
+ reapAllSessions: () => Promise<void>;
72
79
  } {
73
80
  const autoCommit = createAutoCommitHook(options.cwd);
74
81
  const identityReload = createIdentityReloadHook(options.cwd);
@@ -269,7 +276,12 @@ export function createMind(options: {
269
276
  cwd: options.cwd,
270
277
  abortController: streamAbort,
271
278
  model: options.model,
272
- maxThinkingTokens: options.maxThinkingTokens,
279
+ // Default to visible reasoning: on Opus 4.7+/Sonnet 5 the API omits thinking
280
+ // text unless display is "summarized", so minds' reasoning would otherwise be
281
+ // invisible. A mind can override (e.g. omitted, or enabled+budgetTokens for
282
+ // older models) via `thinking` in config.json.
283
+ thinking: options.thinking ?? { type: "adaptive", display: "summarized" },
284
+ effort: options.effort,
273
285
  resume,
274
286
  agents,
275
287
  hooks: {
@@ -569,6 +581,21 @@ export function createMind(options: {
569
581
  }
570
582
  }
571
583
 
584
+ /**
585
+ * Reap every live session's SDK subprocess on shutdown so `mind stop`/restart
586
+ * don't orphan `<defunct>` claude children to PID 1. Delegates the teardown to
587
+ * reapSessionsForShutdown; bounded externally by setupShutdown's timeout.
588
+ */
589
+ async function reapAllSessions(): Promise<void> {
590
+ const live = [...sessions.values()];
591
+ if (live.length === 0) return;
592
+ log("mind", `shutdown: reaping ${live.length} live SDK subprocess(es)`);
593
+ for (const s of live) sessions.delete(s.name);
594
+ await reapSessionsForShutdown(live, (name, err) =>
595
+ log("mind", `session "${name}": shutdown reap failed:`, err),
596
+ );
597
+ }
598
+
572
599
  if (idleTimeoutMs > 0) {
573
600
  log("mind", `idle session reaper: ${idleTimeoutMs / 60_000} min timeout`);
574
601
  const checkMs = Math.min(60_000, idleTimeoutMs);
@@ -746,5 +773,11 @@ export function createMind(options: {
746
773
  // instead of waiting for the first message (which adds minutes of latency).
747
774
  getOrCreateSession("main");
748
775
 
749
- return { resolve, waitForCommits: autoCommit.waitForCommits, getContextInfo, getContextMessages };
776
+ return {
777
+ resolve,
778
+ waitForCommits: autoCommit.waitForCommits,
779
+ getContextInfo,
780
+ getContextMessages,
781
+ reapAllSessions,
782
+ };
750
783
  }
@@ -66,3 +66,35 @@ export async function reapSessionQuery(
66
66
  onError(err);
67
67
  }
68
68
  }
69
+
70
+ /** Minimal view of a live session needed to tear it down on shutdown. */
71
+ export interface ShutdownReapable {
72
+ name: string;
73
+ /** Input iterable — closing it unwinds the stream consumer. */
74
+ channel: { close(): void };
75
+ /** The session's live SDK query, if it has one. */
76
+ currentQuery?: ReapableQuery;
77
+ }
78
+
79
+ /**
80
+ * Reap every live session's SDK subprocess on shutdown (SIGTERM/SIGINT).
81
+ *
82
+ * Unlike the idle reaper this ignores idle/reapable state — on the way out we
83
+ * want *all* children gone. For each session it closes the input channel so the
84
+ * stream consumer unwinds, then awaits `query.return()` so the CLI subprocess
85
+ * exits and its status is reaped, rather than being orphaned to PID 1 (the
86
+ * daemon, which doesn't reap reparented children) as a `<defunct>` zombie.
87
+ * Reaps run in parallel; a per-session failure is reported via `onError` and
88
+ * never rejects the batch, so one wedged child can't block the others.
89
+ */
90
+ export async function reapSessionsForShutdown(
91
+ sessions: Iterable<ShutdownReapable>,
92
+ onError: (name: string, err: unknown) => void,
93
+ ): Promise<void> {
94
+ await Promise.all(
95
+ [...sessions].map(async (s) => {
96
+ s.channel.close();
97
+ await reapSessionQuery(s.currentQuery, (err) => onError(s.name, err));
98
+ }),
99
+ );
100
+ }
@@ -17,7 +17,8 @@ const { port } = parseArgs();
17
17
  const config = loadConfig();
18
18
  if (config.logLevel) setLevel(config.logLevel);
19
19
  if (config.model) log("server", `using model: ${config.model}`);
20
- if (config.maxThinkingTokens) log("server", `max thinking tokens: ${config.maxThinkingTokens}`);
20
+ if (config.thinking) log("server", `thinking: ${JSON.stringify(config.thinking)}`);
21
+ if (config.effort) log("server", `effort: ${config.effort}`);
21
22
 
22
23
  const systemPrompt = loadSystemPrompt();
23
24
  const sessionsDir = resolve(".mind/sessions");
@@ -29,7 +30,8 @@ const mind = createMind({
29
30
  cwd: resolve("home"),
30
31
  abortController,
31
32
  model: config.model,
32
- maxThinkingTokens: config.maxThinkingTokens,
33
+ thinking: config.thinking,
34
+ effort: config.effort,
33
35
  sessionsDir,
34
36
  compactionMessage: config.compactionMessage,
35
37
  maxContextTokens: config.compaction?.maxContextTokens,
@@ -63,4 +65,13 @@ server.listen(port, () => {
63
65
  log("server", `listening on :${actualPort}`);
64
66
  });
65
67
 
66
- setupShutdown();
68
+ // Reap live SDK subprocesses on SIGTERM/SIGINT so `mind stop`/restart don't
69
+ // orphan `<defunct>` claude children to PID 1 (the daemon, which isn't a
70
+ // reaping init). Bounded so a wedged child can't block shutdown forever.
71
+ // Stop accepting new messages first so a late request can't spawn a fresh
72
+ // subprocess after reapAllSessions has snapshotted the live set (which would
73
+ // re-orphan the very child we're reaping).
74
+ setupShutdown(async () => {
75
+ server.close();
76
+ await mind.reapAllSessions();
77
+ });
@@ -22,6 +22,7 @@ import {
22
22
  readSkillDescriptions,
23
23
  } from "./lib/context-breakdown.js";
24
24
  import { daemonEmit } from "./lib/daemon-client.js";
25
+ import { dispatchPrompt } from "./lib/dispatch.js";
25
26
  import { createEventHandler, emit } from "./lib/event-handler.js";
26
27
  import { runHooks } from "./lib/hook-loader.js";
27
28
  import { log } from "./lib/logger.js";
@@ -489,16 +490,12 @@ export function createMind(options: {
489
490
  broadcast(session, { type: "done" });
490
491
  return;
491
492
  }
492
- if (session.agentSession.isStreaming) {
493
- if (meta.interrupt) {
494
- interruptSession(sessionName);
495
- session.agentSession.prompt(text, { streamingBehavior: "steer", ...opts });
496
- } else {
497
- session.agentSession.prompt(text, { streamingBehavior: "followUp", ...opts });
498
- }
499
- } else {
500
- session.agentSession.prompt(text, opts);
501
- }
493
+ // This await is load-bearing: without it a prompt rejection (burst race,
494
+ // auth failure, ...) floats as an unhandled rejection and crashes the
495
+ // mind server instead of landing in the .catch below (issue #565).
496
+ await dispatchPrompt(session.agentSession, text, opts, meta.interrupt === true, () =>
497
+ interruptSession(sessionName),
498
+ );
502
499
  })().catch(async (err) => {
503
500
  log("mind", `session "${sessionName}": prompt failed:`, err);
504
501
  // Tell the daemon the turn failed (so it records a notice for the mind's next
@@ -0,0 +1,65 @@
1
+ import type { ImageContent } from "@earendil-works/pi-ai";
2
+
3
+ /** Options accepted by {@link PromptTarget.prompt}. Subset of pi's PromptOptions. */
4
+ export interface DispatchOptions {
5
+ streamingBehavior?: "steer" | "followUp";
6
+ images?: ImageContent[];
7
+ }
8
+
9
+ /** The slice of a pi AgentSession that {@link dispatchPrompt} needs. */
10
+ export interface PromptTarget {
11
+ readonly isStreaming: boolean;
12
+ prompt(text: string, options?: DispatchOptions): Promise<void>;
13
+ }
14
+
15
+ /**
16
+ * True when `err` is pi's "agent is already processing" rejection — thrown when a
17
+ * fresh (non-streaming) prompt is sent while a turn is actually in flight.
18
+ */
19
+ export function isAlreadyProcessingError(err: unknown): boolean {
20
+ return err instanceof Error && err.message.includes("already processing");
21
+ }
22
+
23
+ /**
24
+ * Send `text` to the agent, choosing the right queueing behavior for burst delivery.
25
+ *
26
+ * `AgentSession.isStreaming` only flips to `true` partway through an in-flight
27
+ * `prompt()` call, so a second message that arrives in the same tick can observe
28
+ * `isStreaming === false`, take the fresh-prompt path, and race the first message.
29
+ * pi rejects the loser with "agent is already processing". Awaiting the dispatch
30
+ * (so the rejection is caught, not left floating as an unhandled rejection that
31
+ * crashes the mind server) and re-routing the loser as a follow-up keeps both
32
+ * messages: nothing is dropped, and the server survives.
33
+ *
34
+ * - Idle: fresh prompt. On the race rejection, re-route as a follow-up.
35
+ * - Streaming + interrupt: steer the current turn (after `onInterrupt`).
36
+ * - Streaming: queue as a follow-up to run after the current turn.
37
+ */
38
+ export async function dispatchPrompt(
39
+ agent: PromptTarget,
40
+ text: string,
41
+ opts: { images?: ImageContent[] },
42
+ interrupt: boolean,
43
+ onInterrupt: () => void,
44
+ ): Promise<void> {
45
+ if (agent.isStreaming) {
46
+ if (interrupt) {
47
+ onInterrupt();
48
+ await agent.prompt(text, { streamingBehavior: "steer", ...opts });
49
+ } else {
50
+ await agent.prompt(text, { streamingBehavior: "followUp", ...opts });
51
+ }
52
+ return;
53
+ }
54
+
55
+ try {
56
+ await agent.prompt(text, opts);
57
+ } catch (err) {
58
+ if (!isAlreadyProcessingError(err)) throw err;
59
+ // Lost the race: another burst message started a turn between our isStreaming
60
+ // check and this dispatch. Queue as a follow-up instead of crashing. If the
61
+ // winning turn has already finished by now, pi only consults streamingBehavior
62
+ // while streaming, so this is sent as a fresh prompt — delivered either way.
63
+ await agent.prompt(text, { streamingBehavior: "followUp", ...opts });
64
+ }
65
+ }
@@ -1,16 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- AVATAR_DIM,
4
- migrateAvatarSizes,
5
- normalizeAvatar
6
- } from "./chunk-DRJ24GXK.js";
7
- import "./chunk-PFZBNKUH.js";
8
- import "./chunk-T2TP6ZC6.js";
9
- import "./chunk-ALKYQULU.js";
10
- import "./chunk-ZV7MFISX.js";
11
- import "./chunk-K3NQKI34.js";
12
- export {
13
- AVATAR_DIM,
14
- migrateAvatarSizes,
15
- normalizeAvatar
16
- };
@@ -1,33 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- DeliveryManager,
4
- getDeliveryManager,
5
- initDeliveryManager,
6
- tryGetDeliveryManager
7
- } from "./chunk-JO5IO4FH.js";
8
- import "./chunk-ZDZISKCL.js";
9
- import "./chunk-BJZ4PV7R.js";
10
- import "./chunk-QLWG3C2Z.js";
11
- import "./chunk-KGIXX4NM.js";
12
- import "./chunk-5ZQZDDIK.js";
13
- import "./chunk-PFZBNKUH.js";
14
- import "./chunk-JZ62SYWR.js";
15
- import "./chunk-KQSFTPIM.js";
16
- import "./chunk-4JOQZPCE.js";
17
- import "./chunk-YXSUMLTC.js";
18
- import "./chunk-4YU7HF4L.js";
19
- import "./chunk-H2X54EHC.js";
20
- import "./chunk-IHKGWTGT.js";
21
- import "./chunk-F7H6ATM4.js";
22
- import "./chunk-OV7ZQ2GH.js";
23
- import "./chunk-ZNMCCHCP.js";
24
- import "./chunk-T2TP6ZC6.js";
25
- import "./chunk-ALKYQULU.js";
26
- import "./chunk-ZV7MFISX.js";
27
- import "./chunk-K3NQKI34.js";
28
- export {
29
- DeliveryManager,
30
- getDeliveryManager,
31
- initDeliveryManager,
32
- tryGetDeliveryManager
33
- };