volute 0.25.0 → 0.26.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 (102) hide show
  1. package/README.md +15 -20
  2. package/dist/{activity-events-4O37J7PD.js → activity-events-ZMBAKLUF.js} +2 -2
  3. package/dist/api.d.ts +477 -6
  4. package/dist/{auth-HM2RSPY7.js → auth-4TV573WE.js} +2 -2
  5. package/dist/{channel-HZOSHGNF.js → channel-ZVZV42UD.js} +3 -3
  6. package/dist/{chunk-SHSWYG2J.js → chunk-2VO7453N.js} +56 -19
  7. package/dist/{chunk-PMX4EIJK.js → chunk-3CFRE2VC.js} +878 -741
  8. package/dist/{chunk-PHHKNGA3.js → chunk-3TV4GLFO.js} +2 -2
  9. package/dist/{chunk-BOTQ25QT.js → chunk-5Y3PBKW6.js} +2 -2
  10. package/dist/{chunk-BFK6SOEJ.js → chunk-J2CO4WEV.js} +1 -1
  11. package/dist/{chunk-ZSH4G2P5.js → chunk-LX22GRG7.js} +10 -13
  12. package/dist/{chunk-E7GOKNOT.js → chunk-NWI2425I.js} +1 -1
  13. package/dist/{chunk-2767L2RZ.js → chunk-OZFKBXD6.js} +1 -1
  14. package/dist/{chunk-RVKR2R7F.js → chunk-SSI47XP2.js} +10 -2
  15. package/dist/chunk-TZKJLDQN.js +78 -0
  16. package/dist/{chunk-DG7TO7EE.js → chunk-USNBKHYG.js} +3 -3
  17. package/dist/chunk-UTL75LP6.js +113 -0
  18. package/dist/{chunk-3AIBT4TW.js → chunk-V63B7DX3.js} +24 -1
  19. package/dist/{chunk-33XAVCS4.js → chunk-WBHMQ5OZ.js} +49 -0
  20. package/dist/{chunk-TRQEV3CD.js → chunk-WGOGUMPO.js} +22 -3
  21. package/dist/chunk-XOXLRRR2.js +176 -0
  22. package/dist/{chunk-JTDFJWI2.js → chunk-YJA7P64S.js} +1 -1
  23. package/dist/chunk-ZYGKG6VC.js +22 -0
  24. package/dist/cli.js +44 -20
  25. package/dist/{cloud-sync-PPBBJDY6.js → cloud-sync-NI2K3C7G.js} +11 -9
  26. package/dist/{connector-M6XFI6GM.js → connector-G722WXAU.js} +4 -4
  27. package/dist/{create-VDQJER52.js → create-4YBRTTJS.js} +1 -1
  28. package/dist/{daemon-client-JOVQZ52X.js → daemon-client-Z7FAJ6JW.js} +1 -1
  29. package/dist/{daemon-restart-FDNOZEAD.js → daemon-restart-BJZ3O4U4.js} +6 -5
  30. package/dist/daemon.js +693 -265
  31. package/dist/{delete-2MRR4JX5.js → delete-27OYNK25.js} +1 -1
  32. package/dist/{down-674SX2IZ.js → down-7UKFMJJZ.js} +4 -4
  33. package/dist/{env-2FPOZK37.js → env-M336ONDP.js} +4 -4
  34. package/dist/{export-IKFAPRAO.js → export-HP4G5DQC.js} +1 -1
  35. package/dist/{file-KT3UIQM3.js → file-HUDKTRAS.js} +3 -3
  36. package/dist/{history-46WZN5CN.js → history-B64GTFTD.js} +3 -3
  37. package/dist/{import-TH26J76F.js → import-XIB7UV4S.js} +1 -1
  38. package/dist/{log-6SGSSR3D.js → log-PBFNILJ4.js} +3 -3
  39. package/dist/{login-UO6AOVEA.js → login-6U7U6BNG.js} +1 -1
  40. package/dist/login-B5E7N7MY.js +46 -0
  41. package/dist/logout-XSJRYS3U.js +39 -0
  42. package/dist/{logs-HRBONI5I.js → logs-3CART7O7.js} +3 -3
  43. package/dist/{merge-KSFJKX6T.js → merge-VK2HSKMA.js} +3 -3
  44. package/dist/{message-delivery-XMGV3FUM.js → message-delivery-MS5JYPZX.js} +10 -8
  45. package/dist/{mind-YVWAHL2A.js → mind-HZ3QSDDJ.js} +17 -17
  46. package/dist/{mind-activity-tracker-NMDDEV3K.js → mind-activity-tracker-4G6FURY2.js} +3 -3
  47. package/dist/{mind-manager-4NDNAYAB.js → mind-manager-VVK67AY3.js} +6 -4
  48. package/dist/{mind-sleep-GHPTSAYN.js → mind-sleep-DTV7L44D.js} +3 -3
  49. package/dist/{mind-wake-BJDJFMDF.js → mind-wake-PFN4FN3T.js} +3 -3
  50. package/dist/notes-37FW2UR2.js +230 -0
  51. package/dist/{package-3HF5MXU2.js → package-VZWLXPHV.js} +2 -1
  52. package/dist/{pages-Y6DRWUOJ.js → pages-DIIT5HMQ.js} +1 -1
  53. package/dist/{publish-EEKTZBHW.js → publish-HQV7YREB.js} +3 -3
  54. package/dist/{pull-D32SPFVU.js → pull-2MB4SK3C.js} +3 -3
  55. package/dist/{register-U2UO6TC4.js → register-EFND67FQ.js} +1 -1
  56. package/dist/{restart-5BMNV7KU.js → restart-CCK7D6TV.js} +3 -3
  57. package/dist/sandbox-EHGFF52K.js +19 -0
  58. package/dist/{schedule-YEFDLVMJ.js → schedule-6F7ELB2M.js} +3 -3
  59. package/dist/{seed-6FEKB3YC.js → seed-E5OQGWX3.js} +1 -1
  60. package/dist/{send-IISDYFCL.js → send-IH6XZKPC.js} +6 -20
  61. package/dist/service-LLBV3R7M.js +122 -0
  62. package/dist/setup-F6TWFYGQ.js +371 -0
  63. package/dist/setup-YGAAIKKZ.js +17 -0
  64. package/dist/{shared-LWMNTTZN.js → shared-UMO4S7CC.js} +4 -4
  65. package/dist/{skill-T3EMR6IR.js → skill-42LGFBQC.js} +3 -3
  66. package/dist/skills/dreaming/SKILL.md +68 -0
  67. package/dist/skills/dreaming/references/INSTALL.md +56 -0
  68. package/dist/skills/dreaming/scripts/dream.ts +289 -0
  69. package/dist/skills/dreaming/scripts/wake-context-dreams.sh +30 -0
  70. package/dist/skills/notes/SKILL.md +34 -0
  71. package/dist/{sleep-manager-RKTFZPD3.js → sleep-manager-EE4NRN2Q.js} +10 -8
  72. package/dist/{sprout-QJVGJDSH.js → sprout-QL74KR2X.js} +5 -5
  73. package/dist/{start-C7XITZ5O.js → start-O5JQASRC.js} +3 -3
  74. package/dist/{status-SIRPLEZC.js → status-FZBEBM7Q.js} +3 -3
  75. package/dist/{status-LYS4NUOZ.js → status-WXD4HXRL.js} +3 -3
  76. package/dist/{stop-CVKBSLXY.js → stop-2SOG5NYF.js} +3 -3
  77. package/dist/up-SDMCSVI3.js +17 -0
  78. package/dist/{update-7XCZMYBT.js → update-5VUDAI3D.js} +6 -6
  79. package/dist/{upgrade-7RUIXGOO.js → upgrade-QCCO33BK.js} +1 -1
  80. package/dist/{variant-UGREB4G5.js → variant-WWLDY6D5.js} +4 -4
  81. package/dist/{version-notify-AZQMC32A.js → version-notify-USFZBWMG.js} +11 -9
  82. package/dist/web-assets/assets/index-CUQ31ieL.js +69 -0
  83. package/dist/web-assets/assets/index-CW8NSl1o.css +1 -0
  84. package/dist/web-assets/index.html +2 -2
  85. package/drizzle/0015_notes.sql +23 -0
  86. package/drizzle/0016_note_reactions_and_replies.sql +15 -0
  87. package/drizzle/meta/_journal.json +14 -0
  88. package/package.json +2 -1
  89. package/templates/_base/.init/.config/hooks/wake-context.sh +7 -0
  90. package/templates/_base/src/lib/startup.ts +8 -0
  91. package/templates/claude/src/agent.ts +51 -1
  92. package/templates/claude/src/server.ts +1 -0
  93. package/templates/pi/package.json.tmpl +1 -0
  94. package/templates/pi/src/agent.ts +48 -1
  95. package/templates/pi/src/lib/subagents.ts +150 -0
  96. package/templates/pi/src/server.ts +1 -0
  97. package/dist/chunk-NWPT4ASZ.js +0 -89
  98. package/dist/service-FASYWLTC.js +0 -247
  99. package/dist/setup-BMLM2UTK.js +0 -230
  100. package/dist/up-CJ26KQLN.js +0 -15
  101. package/dist/web-assets/assets/index-CGPSVu19.js +0 -69
  102. package/dist/web-assets/assets/index-V_rNDsM8.css +0 -1
@@ -0,0 +1 @@
1
+ .settings.svelte-4b0ckc{max-width:720px;margin:0 auto;animation:fadeIn .2s ease both}.error.svelte-4b0ckc{color:var(--red);font-size:13px;margin-bottom:16px}.loading.svelte-4b0ckc{color:var(--text-2);font-size:13px;padding:40px 0;text-align:center}.section.svelte-4b0ckc{margin-bottom:32px}.section-header.svelte-4b0ckc{display:flex;align-items:baseline;gap:10px;margin-bottom:12px}.section-title.svelte-4b0ckc{font-size:15px;font-weight:600;color:var(--text-0)}.section-subtitle.svelte-4b0ckc{font-size:12px;color:var(--text-2)}.prompt-card.svelte-4b0ckc{background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius-lg);padding:14px 16px;margin-bottom:10px}.prompt-card.custom.svelte-4b0ckc{border-color:var(--yellow-dim)}.prompt-header.svelte-4b0ckc{display:flex;align-items:center;gap:8px;margin-bottom:4px}.prompt-key.svelte-4b0ckc{font-family:var(--mono);font-size:14px;font-weight:600;color:var(--text-0)}.custom-badge.svelte-4b0ckc{font-size:11px;padding:1px 6px;border-radius:3px;background:var(--yellow-dim);color:var(--yellow)}.prompt-desc.svelte-4b0ckc{font-size:13px;color:var(--text-2);margin-bottom:8px;line-height:1.5}.var-tags.svelte-4b0ckc{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:10px}.var-tag.svelte-4b0ckc{font-family:var(--mono);font-size:11px;padding:2px 6px;border-radius:3px;background:var(--bg-3);color:var(--accent);border:1px solid var(--border)}.prompt-content.svelte-4b0ckc{background:var(--bg-3);border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px;overflow-x:auto;font-family:var(--mono);font-size:13px;line-height:1.5;color:var(--text-1);white-space:pre-wrap;word-break:break-word;margin-bottom:8px}.prompt-content.svelte-4b0ckc code:where(.svelte-4b0ckc){font-family:inherit;font-size:inherit}.edit-area.svelte-4b0ckc{width:100%;min-height:120px;background:var(--bg-3);border:1px solid var(--accent-dim);border-radius:var(--radius);padding:10px 12px;font-family:var(--mono);font-size:14px;line-height:1.5;color:var(--text-0);resize:vertical;margin-bottom:8px}.edit-area.svelte-4b0ckc:focus{outline:none;border-color:var(--accent)}.actions.svelte-4b0ckc{display:flex;gap:6px}.btn.svelte-4b0ckc{font-family:inherit;font-size:12px;padding:4px 10px;border-radius:var(--radius);cursor:pointer;border:1px solid transparent;transition:opacity .15s}.btn.svelte-4b0ckc:disabled{opacity:.5;cursor:not-allowed}.btn-edit.svelte-4b0ckc{background:var(--bg-3);color:var(--text-1);border-color:var(--border)}.btn-edit.svelte-4b0ckc:hover{color:var(--text-0);border-color:var(--border-bright)}.btn-save.svelte-4b0ckc{background:var(--accent-dim);color:var(--accent);border-color:var(--accent-border)}.btn-save.svelte-4b0ckc:hover:not(:disabled){border-color:var(--accent)}.btn-cancel.svelte-4b0ckc{background:var(--bg-3);color:var(--text-2);border-color:var(--border)}.btn-cancel.svelte-4b0ckc:hover:not(:disabled){color:var(--text-1)}.btn-reset.svelte-4b0ckc{background:var(--red-bg);color:var(--red);border-color:var(--red-border)}.btn-reset.svelte-4b0ckc:hover:not(:disabled){border-color:var(--red)}.system-card.svelte-4b0ckc{display:flex;align-items:center;gap:12px;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius-lg);padding:14px 16px}.system-info.svelte-4b0ckc{display:flex;align-items:baseline;gap:8px;flex:1}.system-label.svelte-4b0ckc{font-size:13px;color:var(--text-2)}.system-name.svelte-4b0ckc{font-size:14px;font-weight:600;color:var(--text-0)}.system-actions.svelte-4b0ckc{display:flex;gap:6px}.system-form.svelte-4b0ckc{display:flex;align-items:center;gap:6px;flex:1}.system-input.svelte-4b0ckc{flex:1;padding:6px 10px;background:var(--bg-3);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-0);font-size:13px;outline:none}.system-input.svelte-4b0ckc:focus{border-color:var(--border-bright)}.modal-overlay.svelte-b3ltw6{position:fixed;inset:0;background:var(--overlay);display:flex;align-items:center;justify-content:center;z-index:200;animation:fadeIn .15s ease}.modal.svelte-b3ltw6{max-width:90vw;background:var(--bg-1);border:1px solid var(--border);border-radius:var(--radius-lg);display:flex;flex-direction:column;overflow:hidden}.modal.full.svelte-b3ltw6{width:80vw;height:70vh;max-width:960px}.modal-header.svelte-b3ltw6{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--border);padding:12px 16px;flex-shrink:0}.title.svelte-b3ltw6{font-size:14px;font-weight:600;color:var(--text-0)}.close-btn.svelte-b3ltw6{background:none;color:var(--text-2);font-size:15px;padding:4px 8px}.close-btn.svelte-b3ltw6:hover{color:var(--text-0)}@media(max-width:767px){.modal.full.svelte-b3ltw6{width:95vw;height:85vh}}.public-files.svelte-1feyap9{height:100%;display:flex;flex-direction:column}.empty.svelte-1feyap9{color:var(--text-2);font-size:13px;padding:24px;text-align:center}.error-text.svelte-1feyap9{color:var(--red)}.browser.svelte-1feyap9{display:flex;flex-direction:column;flex:1;min-height:0}.file-list.svelte-1feyap9{flex-shrink:0;max-height:40%;border-bottom:1px solid var(--border);overflow:auto;display:flex;flex-direction:column}.breadcrumb.svelte-1feyap9{display:flex;flex-wrap:wrap;padding:8px 10px;font-size:12px;border-bottom:1px solid var(--border);gap:0}.crumb.svelte-1feyap9{background:none;color:var(--accent);font-family:inherit;font-size:12px;padding:0;cursor:pointer}.crumb.svelte-1feyap9:hover{text-decoration:underline}.file-row.svelte-1feyap9{display:flex;align-items:center;gap:6px;padding:5px 10px;font-size:13px;color:var(--text-1);background:none;text-align:left;cursor:pointer;width:100%;border-bottom:1px solid var(--border)}.file-row.svelte-1feyap9:last-child{border-bottom:none}.file-row.svelte-1feyap9:hover{background:var(--bg-2)}.file-row.active.svelte-1feyap9{background:var(--accent-bg);color:var(--accent)}.file-icon.svelte-1feyap9{font-size:12px;flex-shrink:0}.file-name.svelte-1feyap9{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--mono)}.empty-dir.svelte-1feyap9{color:var(--text-2);font-size:12px;padding:16px;text-align:center}.preview.svelte-1feyap9{flex:1;display:flex;flex-direction:column;min-width:0;overflow:hidden}.preview-header.svelte-1feyap9{display:flex;align-items:center;justify-content:space-between;padding:6px 12px;border-bottom:1px solid var(--border);font-size:13px;flex-shrink:0}.preview-filename.svelte-1feyap9{font-family:var(--mono);color:var(--text-1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.preview-link.svelte-1feyap9{color:var(--accent);font-size:12px;text-decoration:none;flex-shrink:0;margin-left:8px}.preview-link.svelte-1feyap9:hover{text-decoration:underline}.preview-empty.svelte-1feyap9{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;color:var(--text-2);font-size:13px}.preview-mime.svelte-1feyap9{font-family:var(--mono);font-size:12px}.download-link.svelte-1feyap9{color:var(--accent);font-size:13px;text-decoration:none}.download-link.svelte-1feyap9:hover{text-decoration:underline}.preview-text.svelte-1feyap9{flex:1;overflow:auto;padding:12px;background:var(--bg-0);font-family:var(--mono);font-size:13px;line-height:1.6;color:var(--text-0);white-space:pre-wrap;word-break:break-word;margin:0}.preview-text.svelte-1feyap9 code:where(.svelte-1feyap9){font-family:inherit;font-size:inherit}.preview-image.svelte-1feyap9{flex:1;display:flex;align-items:center;justify-content:center;padding:16px;overflow:auto;background:var(--bg-0)}.preview-image.svelte-1feyap9 img:where(.svelte-1feyap9){max-width:100%;max-height:100%;object-fit:contain;border-radius:var(--radius)}.error.svelte-14apx5e{color:var(--red);padding:8px 12px;font-size:13px}.empty.svelte-14apx5e{color:var(--text-2);padding:24px;text-align:center;font-size:14px}.section-header.svelte-14apx5e{display:flex;align-items:center;justify-content:space-between;padding:0 0 12px}.section-title.svelte-14apx5e{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-2)}.upload-area.svelte-14apx5e{display:flex;align-items:center;gap:8px}.file-input.svelte-14apx5e{display:none}.upload-btn.svelte-14apx5e{padding:4px 12px;font-size:12px;border-radius:var(--radius);background:var(--accent-dim);color:var(--accent);font-weight:500}.upload-btn.svelte-14apx5e:disabled{opacity:.5}.skill-list.svelte-14apx5e{display:flex;flex-direction:column}.skill-row.svelte-14apx5e{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 0;border-bottom:1px solid var(--border)}.skill-row.svelte-14apx5e:last-child{border-bottom:none}.skill-row.svelte-14apx5e:hover{background:var(--bg-2)}.skill-info.svelte-14apx5e{flex:1;min-width:0}.skill-name.svelte-14apx5e{font-size:14px;font-weight:500;color:var(--text-0)}.skill-desc.svelte-14apx5e{font-size:13px;color:var(--text-1);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.skill-meta.svelte-14apx5e{font-size:12px;color:var(--text-2);margin-top:2px}.skill-actions.svelte-14apx5e{display:flex;gap:4px;flex-shrink:0}.action-btn.svelte-14apx5e{padding:4px 10px;font-size:12px;border-radius:var(--radius);font-weight:500}.action-btn.svelte-14apx5e:disabled{opacity:.5}.remove-btn.svelte-14apx5e{background:var(--bg-3);color:var(--text-2)}.remove-btn.svelte-14apx5e:hover{color:var(--red)}.system-logs.svelte-y6pt47{display:flex;flex-direction:column;height:100%}.header.svelte-y6pt47{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;flex-shrink:0}.title.svelte-y6pt47{color:var(--text-1);font-size:14px;font-weight:500}.count.svelte-y6pt47{color:var(--text-2);font-size:12px}.filter-bar.svelte-y6pt47{display:flex;align-items:center;gap:6px;margin-bottom:8px;flex-shrink:0;flex-wrap:wrap}.filter-group.svelte-y6pt47{display:flex;gap:4px;flex-wrap:wrap}.filter-sep.svelte-y6pt47{width:1px;height:16px;background:var(--border);margin:0 4px}.pill.svelte-y6pt47{padding:2px 8px;border-radius:10px;font-size:11px;font-family:var(--mono);cursor:pointer;border:1px solid transparent;transition:opacity .1s}.pill-info.svelte-y6pt47,.pill-debug.svelte-y6pt47{background:color-mix(in srgb,var(--text-2) 15%,transparent);color:var(--text-2)}.pill-warn.svelte-y6pt47{background:color-mix(in srgb,var(--yellow) 15%,transparent);color:var(--yellow)}.pill-error.svelte-y6pt47{background:color-mix(in srgb,var(--red) 15%,transparent);color:var(--red)}.pill-cat.svelte-y6pt47{background:var(--bg-3);color:var(--text-2)}.pill-clear.svelte-y6pt47{background:none;color:var(--text-2);border:1px dashed var(--border);margin-left:4px}.pill-clear.svelte-y6pt47:hover{color:var(--text-1);border-color:var(--text-2)}.pill.inactive.svelte-y6pt47{opacity:.3}.pause-bar.svelte-y6pt47{padding:6px 12px;background:var(--bg-3);border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;font-size:12px;color:var(--text-2);flex-shrink:0}.resume-btn.svelte-y6pt47{background:var(--accent-dim);color:var(--accent);padding:2px 10px;border-radius:var(--radius);font-size:12px}.log-output.svelte-y6pt47{flex:1;overflow:auto;padding:12px;font-family:var(--mono);font-size:12px;line-height:1.7;color:var(--text-1);background:var(--bg-0);border:1px solid var(--border);border-radius:var(--radius-lg)}.waiting.svelte-y6pt47{color:var(--text-2)}.error.svelte-y6pt47{color:var(--red)}.log-line.svelte-y6pt47{animation:fadeIn .1s ease both;display:flex;gap:1ch}.ts.svelte-y6pt47{color:var(--text-2);flex-shrink:0}.level.svelte-y6pt47{flex-shrink:0;width:5ch}.cat.svelte-y6pt47{color:var(--text-2);opacity:.6;flex-shrink:0;width:12ch;overflow:hidden;text-overflow:ellipsis}.msg.svelte-y6pt47{color:var(--text-0);white-space:pre-wrap;word-break:break-word;min-width:0}.data.svelte-y6pt47{color:var(--text-2);white-space:pre-wrap;word-break:break-word}.tab-bar.svelte-1tbaq71{display:flex}.tab.svelte-1tbaq71{padding:10px 16px;background:transparent;color:var(--text-2);font-size:13px;font-weight:500;border-bottom:2px solid transparent;transition:all .15s;margin-bottom:-1px}.tab.active.svelte-1tbaq71{color:var(--accent);border-bottom-color:var(--accent)}.container.svelte-1j9xdsd{max-width:600px;animation:fadeIn .2s ease both}.user-list.svelte-1j9xdsd{display:flex;flex-direction:column;gap:6px}.user-card.svelte-1j9xdsd{background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);transition:border-color .15s}.user-card.svelte-1j9xdsd:hover,.user-card.expanded.svelte-1j9xdsd{border-color:var(--border-bright)}.user-row.svelte-1j9xdsd{display:flex;align-items:center;gap:10px;padding:10px 14px;width:100%;background:none;cursor:pointer;text-align:left}.status-dot.svelte-1j9xdsd{width:7px;height:7px;border-radius:50%;flex-shrink:0}.status-dot.iridescent.svelte-1j9xdsd{animation:svelte-1j9xdsd-iridescent 3s ease-in-out infinite}@keyframes svelte-1j9xdsd-iridescent{0%{background:#4ade80}16%{background:#60a5fa}33%{background:#c084fc}50%{background:#f472b6}66%{background:#fbbf24}83%{background:#34d399}to{background:#4ade80}}.user-info.svelte-1j9xdsd{flex:1;min-width:0;display:flex;align-items:center;gap:6px}.display-name.svelte-1j9xdsd{font-weight:500;color:var(--text-0);font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.username.svelte-1j9xdsd{font-size:12px;color:var(--text-2);flex-shrink:0}.type-icon.svelte-1j9xdsd{width:13px;height:13px;color:var(--text-2);flex-shrink:0}.row-actions.svelte-1j9xdsd{display:flex;align-items:center;gap:8px;flex-shrink:0}.expand-icon.svelte-1j9xdsd{color:var(--text-2);font-size:11px;transition:transform .15s;display:inline-block}.expand-icon.open.svelte-1j9xdsd{transform:rotate(90deg)}.role.svelte-1j9xdsd{font-size:12px;color:var(--text-2)}.role.admin.svelte-1j9xdsd{color:var(--accent)}.role.pending.svelte-1j9xdsd{color:var(--yellow)}.approve-btn.svelte-1j9xdsd{padding:4px 12px;background:var(--accent-dim);color:var(--accent);border-radius:var(--radius);font-size:12px;font-weight:500}.detail-panel.svelte-1j9xdsd{padding:12px 14px;display:flex;flex-direction:column;gap:8px;border-top:1px solid var(--border);margin-top:0}.field.svelte-1j9xdsd{display:flex;flex-direction:column;gap:3px}.field.svelte-1j9xdsd label:where(.svelte-1j9xdsd){font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--text-2)}.field.svelte-1j9xdsd input:where(.svelte-1j9xdsd){background:var(--bg-1);border:1px solid var(--border);border-radius:var(--radius);padding:6px 10px;color:var(--text-0);font-size:13px;font-family:inherit}.field.svelte-1j9xdsd input:where(.svelte-1j9xdsd):focus{outline:none;border-color:var(--border-bright)}.field.svelte-1j9xdsd input:where(.svelte-1j9xdsd)::placeholder{color:var(--text-2)}.detail-actions.svelte-1j9xdsd{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:4px}.left-actions.svelte-1j9xdsd{display:flex;align-items:center;gap:8px}.action-btn.svelte-1j9xdsd{padding:4px 8px;background:none;color:var(--text-2);font-size:12px;border-radius:var(--radius)}.action-btn.svelte-1j9xdsd:hover:not(:disabled){color:var(--text-0);background:var(--bg-3)}.action-btn.svelte-1j9xdsd:disabled{opacity:.4;cursor:not-allowed}.action-btn.danger.svelte-1j9xdsd{color:var(--red)}.action-btn.danger.svelte-1j9xdsd:hover:not(:disabled){background:var(--red-bg);color:var(--red)}.confirm-prompt.svelte-1j9xdsd{font-size:12px;color:var(--red);display:flex;align-items:center;gap:6px}.confirm-yes.svelte-1j9xdsd{padding:2px 8px;background:var(--red-bg);color:var(--red);font-size:12px;border-radius:var(--radius);font-weight:500}.confirm-yes.svelte-1j9xdsd:hover:not(:disabled){background:var(--red);color:var(--bg-0)}.confirm-no.svelte-1j9xdsd{padding:2px 8px;background:none;color:var(--text-2);font-size:12px;border-radius:var(--radius)}.confirm-no.svelte-1j9xdsd:hover{color:var(--text-0);background:var(--bg-3)}.save-btn.svelte-1j9xdsd{padding:4px 12px;background:var(--accent-dim);color:var(--accent);border-radius:var(--radius);font-size:12px;font-weight:500}.save-btn.svelte-1j9xdsd:disabled{opacity:.4;cursor:not-allowed}.save-btn.svelte-1j9xdsd:hover:not(:disabled){background:var(--accent);color:var(--bg-0)}.error.svelte-1j9xdsd{color:var(--red);font-size:12px}.empty.svelte-1j9xdsd{color:var(--text-2);text-align:center;padding:24px}.modal-header.svelte-1r58s0h{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--border);padding:0 16px;flex-shrink:0}.close-btn.svelte-1r58s0h{background:none;color:var(--text-2);font-size:15px;padding:4px 8px}.close-btn.svelte-1r58s0h:hover{color:var(--text-0)}.modal-body.svelte-1r58s0h{flex:1;overflow:auto;padding:16px}.files-container.svelte-1r58s0h{height:100%;margin:-16px}.error.svelte-16qbe83{padding:8px 16px;font-size:13px;color:var(--red)}.channel-list.svelte-16qbe83{flex:1;overflow:auto;padding:8px}.empty.svelte-16qbe83{color:var(--text-2);font-size:13px;text-align:center;padding:20px}.channel-row.svelte-16qbe83{display:flex;align-items:center;justify-content:space-between;padding:8px;border-radius:var(--radius)}.channel-row.svelte-16qbe83:hover{background:var(--bg-2)}.channel-info.svelte-16qbe83{display:flex;flex-direction:column;gap:2px}.channel-name.svelte-16qbe83{font-size:14px;color:var(--text-0);font-weight:500}.channel-meta.svelte-16qbe83{font-size:12px;color:var(--text-2)}.action-btn.svelte-16qbe83{padding:4px 12px;font-size:12px;border-radius:var(--radius);background:var(--accent-dim);color:var(--accent);font-weight:500}.action-btn.leave.svelte-16qbe83{background:var(--bg-3);color:var(--text-2)}.create-section.svelte-16qbe83{display:flex;gap:8px;padding:12px 16px;border-top:1px solid var(--border)}.name-input.svelte-16qbe83{flex:1;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);padding:8px 10px;color:var(--text-0);font-size:13px;font-family:inherit;outline:none}.name-input.svelte-16qbe83:focus{border-color:var(--border-bright)}.create-btn.svelte-16qbe83{padding:8px 14px;background:var(--accent-dim);color:var(--accent);border-radius:var(--radius);font-size:13px;font-weight:500}.create-btn.svelte-16qbe83:disabled{opacity:.4}.invite-body.svelte-19tj18b{padding:12px 16px 16px}.search-input.svelte-19tj18b{width:100%;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);padding:8px 10px;color:var(--text-0);font-size:14px;outline:none;box-sizing:border-box}.search-input.svelte-19tj18b:focus{border-color:var(--border-bright)}.error.svelte-19tj18b{color:var(--red);font-size:13px;padding:6px 0 0}.user-list.svelte-19tj18b{max-height:280px;overflow:auto;margin-top:8px}.user-row.svelte-19tj18b{display:flex;align-items:center;gap:8px;padding:8px;width:100%;background:none;text-align:left;font-size:14px;color:var(--text-1);cursor:pointer;border-radius:var(--radius)}.user-row.svelte-19tj18b:hover:not(:disabled){background:var(--bg-2)}.user-row.svelte-19tj18b:disabled{opacity:.5;cursor:not-allowed}.user-name.svelte-19tj18b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500;color:var(--text-0)}.user-username.svelte-19tj18b{font-size:12px;color:var(--text-2);margin-left:auto;flex-shrink:0}.status-dot.svelte-19tj18b{width:7px;height:7px;border-radius:50%;flex-shrink:0}.status-dot.iridescent.svelte-19tj18b{animation:svelte-19tj18b-iridescent 3s ease-in-out infinite}@keyframes svelte-19tj18b-iridescent{0%{background:#4ade80}16%{background:#60a5fa}33%{background:#c084fc}50%{background:#f472b6}66%{background:#fbbf24}83%{background:#34d399}to{background:#4ade80}}.empty.svelte-19tj18b{color:var(--text-2);font-size:13px;padding:12px 8px;text-align:center}.hover-wrapper.svelte-1sojsey{display:flex;align-items:center;gap:8px}.hover-card.svelte-1sojsey{position:fixed;z-index:100;display:flex;gap:10px;padding:10px 12px;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 4px 12px #0000004d;white-space:nowrap;pointer-events:none}.avatar.svelte-1sojsey{width:64px;height:64px;border-radius:var(--radius);object-fit:cover;flex-shrink:0}.info.svelte-1sojsey{display:flex;flex-direction:column;gap:2px;min-width:0}.name-row.svelte-1sojsey{display:flex;align-items:center;gap:6px}.display-name.svelte-1sojsey{font-size:14px;font-weight:600;color:var(--text-0)}.type-label.svelte-1sojsey{font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.04em;color:var(--text-2);background:var(--muted-bg);padding:1px 6px;border-radius:var(--radius)}.description.svelte-1sojsey{font-size:12px;color:var(--text-1);white-space:normal;max-width:220px;margin-top:2px}.meta.svelte-1sojsey{font-size:11px;color:var(--text-2);margin-top:2px}.members-panel.svelte-488b49{display:flex;flex-direction:column;height:100%;background:var(--bg-1);width:100%;overflow:hidden}.panel-header.svelte-488b49{display:flex;align-items:center;gap:8px;padding:12px 16px;border-bottom:1px solid var(--border);flex-shrink:0}.panel-title.svelte-488b49{font-size:14px;font-weight:600;color:var(--text-0)}.member-count.svelte-488b49{font-size:12px;color:var(--text-2);flex:1}.invite-btn.svelte-488b49{background:none;color:var(--text-2);font-size:15px;padding:2px 6px;border-radius:var(--radius);flex-shrink:0}.invite-btn.svelte-488b49:hover{color:var(--text-0);background:var(--bg-2)}.panel-body.svelte-488b49{flex:1;overflow:auto;padding:12px 0}.section-title.svelte-488b49{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-2);padding:8px 16px 4px}.member-row.svelte-488b49{display:flex;align-items:center;gap:8px;padding:6px 16px;font-size:14px;color:var(--text-1);width:100%;background:none;border:none;text-align:left}.member-row.clickable.svelte-488b49{cursor:pointer}.member-row.clickable.svelte-488b49:hover{background:var(--bg-2)}.member-name.svelte-488b49{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500;color:var(--text-0)}.status-dot.svelte-488b49{width:7px;height:7px;border-radius:50%;flex-shrink:0}.status-dot.iridescent.svelte-488b49{animation:svelte-488b49-iridescent 3s ease-in-out infinite}@keyframes svelte-488b49-iridescent{0%{background:#4ade80}16%{background:#60a5fa}33%{background:#c084fc}50%{background:#f472b6}66%{background:#fbbf24}83%{background:#34d399}to{background:#4ade80}}@media(max-width:1024px){.members-panel.svelte-488b49{width:100%}}.container.svelte-zwrylj{display:flex;align-items:center;justify-content:center;height:100%;padding:24px}.card.svelte-zwrylj{width:320px;padding:32px;background:var(--bg-1);border:1px solid var(--border);border-radius:var(--radius-lg)}.branding.svelte-zwrylj{margin-bottom:24px;text-align:center}.logo-row.svelte-zwrylj{display:flex;align-items:center;justify-content:center;gap:4px;margin-bottom:4px}.logo-wrap.svelte-zwrylj{position:relative;width:34px;height:34px;flex-shrink:0}.login-spiral.svelte-zwrylj{width:34px;height:34px;filter:invert(1);transition:opacity .15s}.hover-dot.svelte-zwrylj{position:absolute;inset:0;margin:auto;width:10px;height:10px;border-radius:50%;opacity:0;transition:opacity .15s;animation:svelte-zwrylj-iridescent 3s ease-in-out infinite}.card.svelte-zwrylj:hover .login-spiral:where(.svelte-zwrylj){opacity:0}.card.svelte-zwrylj:hover .hover-dot:where(.svelte-zwrylj){opacity:1}.logo.svelte-zwrylj{font-family:var(--display);font-size:31px;font-weight:300;color:var(--text-0);letter-spacing:.04em;margin-top:-4px}.subtitle.svelte-zwrylj{color:var(--text-2);font-size:13px}@keyframes svelte-zwrylj-iridescent{0%{background:#4ade80}16%{background:#60a5fa}33%{background:#c084fc}50%{background:#f472b6}66%{background:#fbbf24}83%{background:#34d399}to{background:#4ade80}}.input.svelte-zwrylj{width:100%;padding:10px 12px;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-0);font-family:inherit;font-size:14px;outline:none}.input.svelte-zwrylj:focus{border-color:var(--border-bright)}.mt-8.svelte-zwrylj{margin-top:8px}.error.svelte-zwrylj{color:var(--red);font-size:13px;margin-top:8px}.submit-btn.svelte-zwrylj{width:100%;padding:10px 16px;margin-top:16px;background:var(--accent-dim);color:var(--accent);border-radius:var(--radius);font-size:14px;font-weight:500;font-family:inherit;border:none;cursor:pointer}.link-btn.svelte-zwrylj{background:transparent;color:var(--text-2);font-size:13px;font-family:inherit;border:none;cursor:pointer;padding:0}.toggle.svelte-zwrylj{margin-top:16px;text-align:center}.pending-msg.svelte-zwrylj{color:var(--yellow);margin-bottom:16px}.badge.svelte-w1qana{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;border-radius:var(--radius);font-size:12px;font-weight:500;letter-spacing:.02em;text-transform:uppercase}.dot.svelte-w1qana{width:5px;height:5px;border-radius:50%}.dot.iridescent.svelte-w1qana{animation:svelte-w1qana-iridescent 3s ease-in-out infinite}@keyframes svelte-w1qana-breathe{0%,to{opacity:.4}50%{opacity:1}}@keyframes svelte-w1qana-iridescent{0%{background:#4ade80}16%{background:#60a5fa}33%{background:#c084fc}50%{background:#f472b6}66%{background:#fbbf24}83%{background:#34d399}to{background:#4ade80}}.home.svelte-1egy5tu{max-width:800px;animation:fadeIn .2s ease both}.section.svelte-1egy5tu{margin-bottom:24px}.section-header.svelte-1egy5tu{display:flex;align-items:center;gap:8px;margin-bottom:8px}.section-title.svelte-1egy5tu{font-family:var(--display);font-size:17px;font-weight:300;color:var(--text-2)}.empty-hint.svelte-1egy5tu{color:var(--text-2);font-size:13px}.code-hint.svelte-1egy5tu{color:var(--text-1)}.mind-row.svelte-1egy5tu{display:flex;gap:10px;overflow-x:auto;padding-bottom:4px}.home-mind-card.svelte-1egy5tu{display:flex;flex-direction:column;gap:6px;padding:10px 14px;border-radius:var(--radius-lg);background:var(--bg-2);border:1px solid var(--border);min-width:150px;transition:border-color .15s;flex-shrink:0;cursor:pointer;text-align:left;color:inherit;font-size:inherit}.home-mind-card.svelte-1egy5tu:hover{border-color:var(--border-bright)}.mind-card-header.svelte-1egy5tu{display:flex;align-items:center;gap:6px}.mind-name.svelte-1egy5tu{color:var(--text-0);font-weight:500;font-size:14px}.seed-tag.svelte-1egy5tu{font-size:9px;color:var(--yellow)}.channel-row.svelte-1egy5tu{display:flex;gap:4px;flex-wrap:wrap}.channel-chip.svelte-1egy5tu{font-size:11px;padding:1px 5px;border-radius:3px;background:var(--accent-dim);color:var(--accent)}.mind-activity.svelte-1egy5tu{font-size:11px;color:var(--text-2)}.timeline.svelte-1egy5tu{display:flex;flex-direction:column}.timeline-row.svelte-1egy5tu{display:flex;align-items:center;gap:10px;padding:7px 10px;border-radius:var(--radius-lg);background:none;border:none;cursor:pointer;text-align:left;color:inherit;font-size:13px;transition:background .12s;width:100%}.timeline-row.svelte-1egy5tu:hover{background:var(--bg-2)}.timeline-dot.svelte-1egy5tu{width:6px;height:6px;border-radius:50%;flex-shrink:0;background:var(--text-2)}.dot-started.svelte-1egy5tu{background:var(--accent)}.dot-stopped.svelte-1egy5tu{background:var(--text-2)}.dot-active.svelte-1egy5tu{background:var(--accent)}.dot-idle.svelte-1egy5tu{background:var(--text-2)}.dot-page.svelte-1egy5tu{background:var(--yellow)}.dot-message.svelte-1egy5tu{background:var(--blue, var(--accent))}.timeline-text.svelte-1egy5tu{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-1)}.timeline-text.svelte-1egy5tu .conv-label:where(.svelte-1egy5tu){color:var(--text-0);font-weight:500}.timeline-time.svelte-1egy5tu{color:var(--text-2);font-size:11px;flex-shrink:0}@media(max-width:767px){.home.svelte-1egy5tu{max-width:100%}.home-mind-card.svelte-1egy5tu{min-width:120px}}.card.svelte-sjbd2n{display:block;width:100%;padding:20px;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius-lg);cursor:pointer;transition:all .15s ease;text-align:left;font-family:var(--sans)}.card.svelte-sjbd2n:hover{border-color:var(--border-bright)}.reply-indicator.svelte-sjbd2n{font-size:12px;color:var(--text-2);margin-bottom:6px}.header.svelte-sjbd2n{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:8px}.title.svelte-sjbd2n{font-family:var(--display);font-size:17px;font-weight:400;color:var(--text-0);margin:0}.date.svelte-sjbd2n{font-size:12px;color:var(--text-2);white-space:nowrap;flex-shrink:0}.excerpt.svelte-sjbd2n{font-size:14px;color:var(--text-1);margin:0 0 12px;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;line-height:1.5}.meta.svelte-sjbd2n{display:flex;align-items:center;gap:16px;font-size:13px}.author.svelte-sjbd2n{color:var(--accent)}.comments.svelte-sjbd2n{color:var(--text-2)}.reactions.svelte-sjbd2n{display:flex;gap:6px;margin-top:10px;flex-wrap:wrap}.reaction-pill.svelte-sjbd2n{font-size:12px;padding:2px 8px;background:var(--bg-3);border:1px solid var(--border);border-radius:12px;color:var(--text-1)}.notes-page.svelte-1x5feq2{max-width:700px;margin:0 auto;animation:fadeIn .2s ease both}.page-header.svelte-1x5feq2{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px}.page-title.svelte-1x5feq2{font-family:var(--display);font-size:22px;font-weight:400;color:var(--text-0);margin:0}.note-form.svelte-1x5feq2{background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius-lg);padding:16px;margin-bottom:20px;display:flex;flex-direction:column;gap:10px}.form-input.svelte-1x5feq2{width:100%;padding:8px 12px;background:var(--bg-3);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-0);font-family:var(--sans);font-size:14px;outline:none;box-sizing:border-box}.form-input.svelte-1x5feq2:focus{border-color:var(--accent)}.form-textarea.svelte-1x5feq2{width:100%;padding:8px 12px;background:var(--bg-3);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-0);font-family:var(--sans);font-size:14px;line-height:1.5;resize:vertical;outline:none;box-sizing:border-box}.form-textarea.svelte-1x5feq2:focus{border-color:var(--accent)}.form-actions.svelte-1x5feq2{display:flex;justify-content:flex-end}.btn.svelte-1x5feq2{font-family:var(--sans);font-size:13px;padding:6px 14px;border-radius:var(--radius);cursor:pointer;border:1px solid transparent;transition:opacity .15s}.btn.svelte-1x5feq2:disabled{opacity:.5;cursor:not-allowed}.btn-write.svelte-1x5feq2{background:var(--accent-dim);color:var(--accent);border-color:var(--accent-border)}.btn-write.svelte-1x5feq2:hover{border-color:var(--accent)}.btn-submit.svelte-1x5feq2{background:var(--accent-dim);color:var(--accent);border-color:var(--accent-border)}.btn-submit.svelte-1x5feq2:hover:not(:disabled){border-color:var(--accent)}.error.svelte-1x5feq2{color:var(--red);font-size:13px;margin-bottom:16px}.loading.svelte-1x5feq2,.empty.svelte-1x5feq2{color:var(--text-2);font-size:13px;padding:40px 0;text-align:center}.notes-list.svelte-1x5feq2{display:flex;flex-direction:column;gap:10px}.comment-section.svelte-1qs5ynd{display:flex;flex-direction:column;gap:12px}.section-header.svelte-1qs5ynd{font-family:var(--sans);font-size:14px;font-weight:500;color:var(--text-1);margin:0}.comment-list.svelte-1qs5ynd{display:flex;flex-direction:column;gap:10px}.comment.svelte-1qs5ynd{background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px}.comment-header.svelte-1qs5ynd{display:flex;align-items:baseline;gap:8px;margin-bottom:4px}.author.svelte-1qs5ynd{font-family:var(--sans);font-size:13px;font-weight:500;color:var(--accent)}.date.svelte-1qs5ynd{font-family:var(--sans);font-size:12px;color:var(--text-2)}.delete-btn.svelte-1qs5ynd{margin-left:auto;background:none;border:none;font-family:var(--sans);font-size:12px;color:var(--text-2);cursor:pointer;padding:0;transition:color .15s}.delete-btn.svelte-1qs5ynd:hover{color:#e55}.comment-body.svelte-1qs5ynd{font-family:var(--sans);font-size:14px;color:var(--text-0);white-space:pre-wrap;word-break:break-word}.compose.svelte-1qs5ynd{display:flex;gap:8px}.compose-input.svelte-1qs5ynd{flex:1;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);padding:8px 12px;color:var(--text-0);font-family:var(--sans);font-size:14px;resize:none;outline:none;transition:border-color .15s}.compose-input.svelte-1qs5ynd:focus{border-color:var(--border-bright)}.submit-btn.svelte-1qs5ynd{padding:0 14px;background:var(--bg-3);color:var(--text-2);border:none;border-radius:var(--radius);font-family:var(--sans);font-size:13px;font-weight:500;cursor:pointer;transition:all .15s;align-self:flex-end}.submit-btn.active.svelte-1qs5ynd{background:var(--accent-dim);color:var(--accent)}.submit-btn.svelte-1qs5ynd:disabled{cursor:default}.note-view.svelte-19ijmcc{max-width:700px;margin:0 auto;padding:24px 16px;animation:fadeIn .2s ease both}.back-link.svelte-19ijmcc{background:none;border:none;font-family:var(--sans);font-size:13px;color:var(--accent);cursor:pointer;padding:0;margin-bottom:24px;display:inline-block;transition:opacity .15s}.back-link.svelte-19ijmcc:hover{opacity:.8}.error.svelte-19ijmcc{font-family:var(--sans);font-size:13px;color:var(--red, #e55);margin-bottom:12px}.status.svelte-19ijmcc{color:var(--text-2);font-family:var(--sans);font-size:14px;padding:32px 0;text-align:center}.note.svelte-19ijmcc{margin-bottom:32px}.reply-to-link.svelte-19ijmcc{background:none;border:none;font-family:var(--sans);font-size:13px;color:var(--text-2);cursor:pointer;padding:0;margin-bottom:12px;display:block;transition:color .15s;text-align:left}.reply-to-link.svelte-19ijmcc:hover{color:var(--accent)}.title.svelte-19ijmcc{font-family:var(--display);font-size:28px;font-weight:600;color:var(--text-0);margin:0 0 8px;line-height:1.3}.meta.svelte-19ijmcc{display:flex;align-items:baseline;gap:8px;margin-bottom:20px}.author.svelte-19ijmcc{font-family:var(--sans);font-size:14px;color:var(--accent);font-weight:500}.date.svelte-19ijmcc{font-family:var(--sans);font-size:13px;color:var(--text-2)}.content.svelte-19ijmcc{font-family:var(--sans);font-size:15px;color:var(--text-0);line-height:1.6;white-space:pre-wrap;word-break:break-word}.reactions-bar.svelte-19ijmcc{display:flex;gap:6px;margin-top:16px;flex-wrap:wrap;align-items:center}.reaction-pill.svelte-19ijmcc{font-size:13px;padding:4px 10px;background:var(--bg-3);border:1px solid var(--border);border-radius:14px;color:var(--text-1);cursor:pointer;font-family:var(--sans);transition:all .15s}.reaction-pill.svelte-19ijmcc:hover{border-color:var(--border-bright)}.reaction-pill.active.svelte-19ijmcc{border-color:var(--accent-border);background:var(--accent-dim)}.add-reaction.svelte-19ijmcc{color:var(--text-2);font-size:14px}.emoji-form.svelte-19ijmcc{display:inline-flex}.emoji-input.svelte-19ijmcc{width:60px;padding:4px 8px;background:var(--bg-3);border:1px solid var(--border);border-radius:14px;color:var(--text-0);font-family:var(--sans);font-size:13px;outline:none}.emoji-input.svelte-19ijmcc:focus{border-color:var(--accent)}.replies-section.svelte-19ijmcc{border-top:1px solid var(--border);padding-top:16px;margin-bottom:24px}.section-title.svelte-19ijmcc{font-family:var(--sans);font-size:14px;font-weight:500;color:var(--text-1);margin:0 0 10px}.reply-link.svelte-19ijmcc{display:block;width:100%;text-align:left;background:none;border:none;padding:8px 0;cursor:pointer;font-family:var(--sans);transition:opacity .15s}.reply-link.svelte-19ijmcc:hover{opacity:.8}.reply-title.svelte-19ijmcc{font-size:14px;color:var(--accent);display:block}.reply-meta.svelte-19ijmcc{font-size:12px;color:var(--text-2)}.comments.svelte-19ijmcc{border-top:1px solid var(--border);padding-top:20px}.thumbnail-card.svelte-15o3gk6{display:flex;flex-direction:column;gap:6px;background:none;cursor:pointer;text-align:left;color:inherit;padding:0}.thumbnail-frame.svelte-15o3gk6{width:280px;height:180px;overflow:hidden;border-radius:var(--radius-lg);border:1px solid var(--border);background:var(--bg-0);transition:border-color .15s}.thumbnail-card.svelte-15o3gk6:hover .thumbnail-frame:where(.svelte-15o3gk6){border-color:var(--border-bright)}iframe.svelte-15o3gk6{width:1280px;height:960px;transform:scale(.219);transform-origin:top left;pointer-events:none;border:none;background:#fff}.thumbnail-label.svelte-15o3gk6{font-size:13px;font-weight:500;color:var(--text-0);padding:0 2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:280px}.thumbnail-sublabel.svelte-15o3gk6{font-size:11px;color:var(--text-2);padding:0 2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:280px}.dashboard.svelte-pd71n3{max-width:1200px;animation:fadeIn .2s ease both}.section.svelte-pd71n3{margin-bottom:24px}.section-header.svelte-pd71n3{font-size:12px;text-transform:uppercase;letter-spacing:.05em;margin-bottom:12px}.section-title.svelte-pd71n3{color:var(--text-2)}.thumbnail-grid.svelte-pd71n3{display:flex;flex-wrap:wrap;gap:16px}.empty.svelte-pd71n3{color:var(--text-2);font-size:13px}.site-view.svelte-s0ylih{max-width:1200px;animation:fadeIn .2s ease both}.site-header.svelte-s0ylih{display:flex;align-items:baseline;gap:8px;margin-bottom:16px}.site-name.svelte-s0ylih{font-size:16px;font-weight:500;color:var(--text-0)}.page-count.svelte-s0ylih{font-size:12px;color:var(--text-2)}.thumbnail-grid.svelte-s0ylih{display:flex;flex-wrap:wrap;gap:16px}.empty.svelte-s0ylih{color:var(--text-2);font-size:13px}.image-strip.svelte-18vyazk{display:flex;gap:8px;padding:8px 0;border-top:1px solid var(--border);overflow-x:auto}.image-preview.svelte-18vyazk{position:relative;flex-shrink:0}.preview-thumb.svelte-18vyazk{height:60px;border-radius:var(--radius);border:1px solid var(--border)}.remove-image.svelte-18vyazk{position:absolute;top:-4px;right:-4px;width:18px;height:18px;border-radius:50%;background:var(--bg-3);color:var(--text-1);font-size:12px;display:flex;align-items:center;justify-content:center;border:1px solid var(--border);cursor:pointer;padding:0}.input-area.svelte-18vyazk{border-top:1px solid var(--border);padding:12px 16px 16px;display:flex;gap:8px}.attach-btn.svelte-18vyazk{padding:0 10px;background:var(--bg-2);color:var(--text-1);border-radius:var(--radius);font-size:16px;border:1px solid var(--border);cursor:pointer;flex-shrink:0}.chat-input.svelte-18vyazk{flex:1;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px;color:var(--text-0);font-family:var(--mono);font-size:14px;resize:none;outline:none;overflow:hidden;transition:border-color .15s}.chat-input.svelte-18vyazk:focus{border-color:var(--border-bright)}.send-btn.svelte-18vyazk{padding:0 16px;background:var(--bg-3);color:var(--text-2);border-radius:var(--radius);font-size:13px;font-weight:500;transition:all .15s}.send-btn.active.svelte-18vyazk{background:var(--accent-dim);color:var(--accent)}@media(max-width:767px){.chat-input.svelte-18vyazk{font-size:16px}.input-area.svelte-18vyazk{padding-bottom:max(16px,env(safe-area-inset-bottom))}}.tool-block.svelte-11dtec0{margin-bottom:8px;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;font-size:13px}.tool-header.svelte-11dtec0{width:100%;display:flex;align-items:center;justify-content:space-between;padding:6px 10px;background:var(--bg-3);font-size:13px;font-family:var(--mono);text-align:left}.tool-label.svelte-11dtec0{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}.tool-arrow.svelte-11dtec0{color:var(--text-2);margin-right:6px}.tool-status.svelte-11dtec0{color:var(--accent);font-size:11px;flex-shrink:0;margin-left:8px}.tool-status.error.svelte-11dtec0{color:var(--red)}.tool-detail.svelte-11dtec0{padding:10px;background:var(--bg-1)}.tool-section-label.svelte-11dtec0{margin-bottom:6px;color:var(--text-2)}.tool-pre.svelte-11dtec0{color:var(--text-1);white-space:pre-wrap;word-break:break-all;font-size:12px;line-height:1.5}.tool-output.svelte-11dtec0{max-height:200px;overflow:auto}.tool-output.error.svelte-11dtec0{color:var(--red)}.entry.svelte-16zmiqs{padding:2px 0;animation:fadeIn .2s ease both}.entry.new-sender.svelte-16zmiqs{margin-top:12px}.entry-header.svelte-16zmiqs{display:flex;align-items:baseline;gap:8px;margin-bottom:2px}.sender.svelte-16zmiqs{font-size:14px;font-weight:600}.sender-link.svelte-16zmiqs{background:none;border:none;padding:0;font:inherit;font-size:14px;font-weight:600;cursor:pointer}.sender-link.svelte-16zmiqs:hover{text-decoration:underline}.timestamp.svelte-16zmiqs{font-size:12px;color:var(--text-2)}.inline-time.svelte-16zmiqs{display:block;margin-bottom:2px}.entry-content.svelte-16zmiqs{min-width:0;font-family:var(--mono);font-size:14px}.user-text.svelte-16zmiqs{color:var(--text-0);white-space:pre-wrap}.chat-image.svelte-16zmiqs{max-width:300px;max-height:200px;border-radius:var(--radius);margin-top:4px}.messages.svelte-tjsfkk{flex:1;overflow:auto;padding:16px}.empty.svelte-tjsfkk{color:var(--text-2);text-align:center;padding:40px;font-size:14px}.error.svelte-tjsfkk{color:var(--red)}.loading-older.svelte-tjsfkk{text-align:center;padding:8px;font-size:13px;color:var(--text-2)}.load-more.svelte-tjsfkk{text-align:center;padding:8px}.load-more-btn.svelte-tjsfkk{font-size:13px;color:var(--text-2);background:none;border:1px solid var(--border);border-radius:var(--radius);padding:4px 12px;cursor:pointer}.load-more-btn.svelte-tjsfkk:hover{color:var(--text-1);border-color:var(--border-bright)}.divider.svelte-tjsfkk{display:flex;align-items:center;gap:12px;margin:20px 0;color:var(--text-2);font-size:12px;letter-spacing:.03em}.divider-line.svelte-tjsfkk{flex:1;height:1px;background:var(--border)}.typing.svelte-em2dtd{padding:4px 0;font-size:13px;color:var(--text-2);animation:pulse 1.5s ease infinite}.chat.svelte-6z343n{display:flex;flex-direction:column;height:100%;padding:0}.orientation-bar.svelte-6z343n{padding:6px 12px;text-align:center;color:var(--yellow);font-size:12px;font-weight:500;letter-spacing:.05em;text-transform:uppercase;opacity:.6;border-bottom:1px solid var(--yellow-bg)}.channel-header.svelte-6z343n{display:flex;align-items:center;gap:10px;padding:8px 12px;border-bottom:1px solid var(--border);flex-shrink:0}.channel-title.svelte-6z343n{font-size:14px;font-weight:600;color:var(--text-0)}@media(max-width:1024px){.channel-header.svelte-6z343n{display:none}}.main-frame.svelte-n1trtr{height:100%;overflow:hidden;display:flex;flex-direction:column}.frame-content.svelte-n1trtr{flex:1;overflow:auto;min-height:0}.frame-content.padded.svelte-n1trtr{padding:24px}.breadcrumbs.svelte-n1trtr{display:flex;align-items:center;gap:6px;padding:8px 16px;font-family:inherit;font-size:12px;text-transform:uppercase;letter-spacing:.05em;color:var(--text-2);border-bottom:1px solid var(--border);flex-shrink:0}.breadcrumb-link.svelte-n1trtr{background:none;border:none;padding:0;font:inherit;text-transform:inherit;letter-spacing:inherit;color:var(--text-1);cursor:pointer}.breadcrumb-link.svelte-n1trtr:hover{color:var(--accent)}.breadcrumb-sep.svelte-n1trtr,.breadcrumb-current.svelte-n1trtr{color:var(--text-2)}.page-iframe.svelte-n1trtr{width:100%;height:100%;border:none;background:#fff}.mobile-header.svelte-n1trtr{display:none;align-items:center;gap:10px;padding:8px 12px;border-bottom:1px solid var(--border);flex-shrink:0;background:var(--bg-1)}.hamburger-btn.svelte-n1trtr{display:none;background:none;border:none;color:var(--text-1);font-size:18px;padding:4px 8px;border-radius:var(--radius);cursor:pointer}.hamburger-btn.svelte-n1trtr:hover{background:var(--bg-2)}.mobile-logo.svelte-n1trtr{width:20px;height:20px;filter:invert(1)}.mobile-title.svelte-n1trtr{font-family:var(--display);font-size:18px;font-weight:300;color:var(--text-0);letter-spacing:.04em;margin-left:-4px}.context-label-btn.svelte-n1trtr{margin-left:auto;background:none;border:none;color:var(--text-1);font-size:14px;font-weight:500;padding:4px 0;text-align:right;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.context-label-btn.svelte-n1trtr:hover{color:var(--accent)}@media(max-width:1024px){.mobile-header.svelte-n1trtr{display:flex}}@media(max-width:767px){.hamburger-btn.svelte-n1trtr{display:block}.frame-content.padded.svelte-n1trtr{padding:16px}}.event.svelte-173x8i5{position:relative;padding:6px 8px 6px 20px;animation:fadeIn .2s ease both}.event.svelte-173x8i5:after{content:"";position:absolute;left:-2px;top:12px;bottom:-12px;width:2px;background:var(--type-color);opacity:0;transition:opacity .15s}.event.svelte-173x8i5:hover:after{opacity:1}.event.collapsible.svelte-173x8i5{cursor:pointer}.marker.svelte-173x8i5{position:absolute;left:-5px;top:12px;width:8px;height:8px;border-radius:50%;z-index:1}.event-header.svelte-173x8i5{display:flex;align-items:center;gap:8px;margin-bottom:4px}.time.svelte-173x8i5{font-size:11px;color:var(--text-2);flex-shrink:0}.type-badge.svelte-173x8i5{font-size:11px;padding:1px 6px;border-radius:12px;font-weight:500}.channel-tag.svelte-173x8i5{font-size:11px;color:var(--text-2);background:var(--bg-3);padding:1px 6px;border-radius:var(--radius)}.chevron.svelte-173x8i5{font-size:9px;color:var(--text-2)}.event-body.svelte-173x8i5{font-family:var(--mono);font-size:14px;line-height:1.6}.sender.svelte-173x8i5{font-size:12px;font-weight:600;text-transform:uppercase;margin-right:8px}.sender.inbound.svelte-173x8i5{color:var(--blue)}.sender.outbound.svelte-173x8i5{color:var(--accent)}.user-text.svelte-173x8i5{display:inline;white-space:pre-wrap;color:var(--text-0)}.summary.svelte-173x8i5{font-size:13px;color:var(--text-1)}.summary.error.svelte-173x8i5{color:var(--red)}.dim.svelte-173x8i5{color:var(--text-2)}.detail.svelte-173x8i5,.detail-text.svelte-173x8i5{margin-top:6px;font-size:12px;background:var(--bg-3);border:1px solid var(--border);border-radius:var(--radius);padding:8px 10px;overflow-x:auto;max-height:400px;overflow-y:auto;white-space:pre-wrap;word-break:break-all}.detail.svelte-173x8i5{font-family:var(--mono)}.detail.error.svelte-173x8i5{color:var(--red);border-color:var(--red-dim)}.detail-text.svelte-173x8i5{color:var(--text-2)}.usage-line.svelte-173x8i5{font-size:13px;color:var(--purple)}.model.svelte-173x8i5{color:var(--text-2);margin-left:6px;font-size:12px}.session-id.svelte-173x8i5{font-size:12px;color:var(--text-1);font-weight:600;margin-left:4px}.filter-container.svelte-h6u4xu{position:relative;flex-shrink:0}.filter-btn.svelte-h6u4xu{position:relative;display:flex;align-items:center;justify-content:center;width:28px;height:28px;background:none;border:none;color:var(--text-2);cursor:pointer;border-radius:var(--radius);transition:color .15s,background .15s}.filter-btn.svelte-h6u4xu:hover{color:var(--text-1);background:var(--bg-3)}.filter-btn.active.svelte-h6u4xu{color:var(--accent)}.filter-dot.svelte-h6u4xu{position:absolute;top:4px;right:4px;width:5px;height:5px;border-radius:50%;background:var(--accent)}.filter-popover.svelte-h6u4xu{position:absolute;top:calc(100% + 4px);right:0;width:260px;background:var(--bg-2);border:1px solid var(--border-bright);border-radius:var(--radius);z-index:20;box-shadow:0 4px 16px #0006;padding:8px;display:flex;flex-direction:column;gap:6px}.filter-row.svelte-h6u4xu{display:flex;align-items:center;gap:8px}.filter-label.svelte-h6u4xu{font-size:12px;color:var(--text-2);width:52px;flex-shrink:0;font-family:inherit}.types-row.svelte-h6u4xu{align-items:flex-start;padding-top:4px;border-top:1px solid var(--border);margin-top:2px}.types-grid.svelte-h6u4xu{display:flex;flex-wrap:wrap;gap:4px;flex:1}.types-actions.svelte-h6u4xu{display:flex;gap:4px;width:100%;margin-bottom:2px}.types-action.svelte-h6u4xu{font-size:11px;font-family:inherit;color:var(--text-2);background:none;border:none;cursor:pointer;padding:1px 6px;border-radius:var(--radius)}.types-action.svelte-h6u4xu:hover{color:var(--text-1);background:var(--bg-3)}.type-chip.svelte-h6u4xu{display:inline-flex;align-items:center;gap:4px;padding:2px 6px;font-size:11px;font-family:inherit;color:var(--text-2);background:none;border:none;cursor:pointer;border-radius:var(--radius);transition:color .1s}.type-chip.svelte-h6u4xu:hover{background:var(--bg-3);color:var(--text-1)}.type-chip.active.svelte-h6u4xu{color:var(--text-1)}.type-dot.svelte-h6u4xu{width:5px;height:5px;border-radius:50%;flex-shrink:0;transition:background .15s}.custom-select.svelte-h6u4xu{position:relative;flex:1}.select-trigger.svelte-h6u4xu{display:flex;align-items:center;gap:4px;width:100%;background:var(--bg-3);color:var(--text-1);border:none;border-radius:var(--radius);padding:3px 6px;font-size:12px;font-family:inherit;cursor:pointer;transition:color .15s}.select-trigger.svelte-h6u4xu:hover{color:var(--text-0)}.select-value.svelte-h6u4xu{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}.select-arrow.svelte-h6u4xu{font-size:9px;color:var(--text-2);flex-shrink:0}.select-menu.svelte-h6u4xu{position:absolute;top:calc(100% + 2px);left:0;min-width:100%;max-height:200px;overflow-y:auto;background:var(--bg-2);border:1px solid var(--border-bright);border-radius:var(--radius);z-index:30;box-shadow:0 4px 16px #0006}.select-option.svelte-h6u4xu{display:block;width:100%;text-align:left;padding:5px 8px;font-size:12px;font-family:inherit;color:var(--text-1);background:none;border:none;cursor:pointer;white-space:nowrap;transition:background .1s,color .1s}.select-option.svelte-h6u4xu:hover{background:var(--bg-3);color:var(--text-0)}.select-option.selected.svelte-h6u4xu{color:var(--accent)}.option-meta.svelte-h6u4xu{color:var(--text-2);margin-left:4px}.divider.svelte-c707oo{display:flex;align-items:center;gap:12px;margin:20px 0 16px}.line.svelte-c707oo{flex:1;border-top:1px solid var(--border)}.label.svelte-c707oo{font-size:12px;color:var(--text-2);white-space:nowrap;display:flex;align-items:center;gap:6px}.session-id.svelte-c707oo{color:var(--text-1);font-weight:600}.sep.svelte-c707oo{color:var(--border-bright)}.history.svelte-i5te79{display:flex;flex-direction:column;height:100%;overflow:hidden;position:relative}.filter-float.svelte-i5te79{position:absolute;top:4px;right:4px;z-index:10}.timeline.svelte-i5te79{flex:1;overflow-x:hidden;overflow-y:auto;display:flex;flex-direction:column}.timeline-rail.svelte-i5te79{position:relative;padding-left:4px;margin-left:3px;flex:1;min-height:100%}.timeline-rail.svelte-i5te79:before{content:"";position:absolute;left:2px;top:0;bottom:0;width:2px;background:var(--timeline-rail)}.error.svelte-i5te79{color:var(--red);text-align:center;padding:40px;font-size:14px}.empty.svelte-i5te79{color:var(--text-2);text-align:center;padding:40px;font-size:14px}.load-older.svelte-i5te79{padding:8px 0 16px;text-align:center}.load-older-btn.svelte-i5te79{padding:4px 14px;background:var(--bg-3);color:var(--text-1);border-radius:var(--radius);font-size:12px}.loading-more.svelte-i5te79{text-align:center;color:var(--text-2);font-size:13px;padding:12px;animation:pulse 1.5s infinite}.jump-btn.svelte-i5te79{position:absolute;bottom:16px;left:50%;transform:translate(-50%);padding:6px 16px;background:var(--accent-dim);color:var(--accent);border-radius:var(--radius);font-size:13px;animation:fadeIn .2s ease both;z-index:10}.empty.svelte-wh20l9{color:var(--text-2);padding:24px;text-align:center;font-size:14px}.empty.small.svelte-wh20l9{padding:12px}.error.svelte-wh20l9{color:var(--red);padding:8px 0;font-size:13px}.section.svelte-wh20l9{margin-bottom:24px}.section-title.svelte-wh20l9{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-2);margin-bottom:8px}.section-header.svelte-wh20l9{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.status-row.svelte-wh20l9{display:flex;align-items:center;gap:10px}.action-btn.svelte-wh20l9{padding:4px 12px;border-radius:var(--radius);font-size:12px;font-weight:500;transition:opacity .15s}.start-btn.svelte-wh20l9{background:var(--accent-dim);color:var(--accent)}.stop-btn.svelte-wh20l9{background:var(--red-dim);color:var(--red)}.setting-row.svelte-wh20l9{display:flex;align-items:center;gap:12px;padding:6px 0}.setting-label.svelte-wh20l9{width:100px;flex-shrink:0;font-size:14px;color:var(--text-1)}.setting-control.svelte-wh20l9{display:flex;align-items:center;gap:6px;flex:1}.setting-input.svelte-wh20l9{background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);padding:4px 8px;font-size:14px;color:var(--text-0);flex:1;font-family:inherit}.setting-input.narrow.svelte-wh20l9{width:80px;flex:0 0 80px}.setting-input.svelte-wh20l9:focus{border-color:var(--accent);outline:none}.setting-select.svelte-wh20l9{background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);padding:4px 8px;font-size:14px;color:var(--text-0);font-family:inherit}.setting-hint.svelte-wh20l9{font-size:13px;color:var(--text-2);flex-shrink:0}.save-btn.svelte-wh20l9{padding:4px 10px;font-size:12px;border-radius:var(--radius);background:var(--accent-dim);color:var(--accent);font-weight:500;flex-shrink:0}.save-btn.svelte-wh20l9:disabled{opacity:.5}.cancel-btn.svelte-wh20l9{padding:4px 10px;font-size:12px;border-radius:var(--radius);background:var(--bg-3);color:var(--text-2);font-weight:500;flex-shrink:0}.add-btn.svelte-wh20l9{padding:4px 12px;font-size:12px;border-radius:var(--radius);background:var(--accent-dim);color:var(--accent);font-weight:500}.env-list.svelte-wh20l9{display:flex;flex-direction:column}.env-row.svelte-wh20l9{display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px solid var(--border);font-size:14px}.env-row.svelte-wh20l9:last-child{border-bottom:none}.env-add-row.svelte-wh20l9{display:flex;align-items:center;gap:6px;padding:6px 0;margin-bottom:8px}.env-key.svelte-wh20l9{font-family:var(--mono);font-size:13px;color:var(--text-0);flex-shrink:0;min-width:100px;display:flex;align-items:center;gap:6px}.env-source.svelte-wh20l9{font-family:inherit;font-size:11px;padding:1px 4px;border-radius:4px;background:var(--bg-3);color:var(--text-2)}.env-value.svelte-wh20l9{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--mono);font-size:13px;color:var(--text-1)}.env-value.masked.svelte-wh20l9{color:var(--text-2)}.env-input.svelte-wh20l9{background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);padding:4px 8px;font-size:13px;color:var(--text-0);font-family:var(--mono)}.env-input.key.svelte-wh20l9{width:120px;flex-shrink:0}.env-input.value.svelte-wh20l9{flex:1}.icon-btn.svelte-wh20l9{padding:2px 6px;font-size:11px;border-radius:var(--radius);background:var(--bg-3);color:var(--text-2);flex-shrink:0}.icon-btn.svelte-wh20l9:hover{color:var(--text-0)}.icon-btn.danger.svelte-wh20l9:hover{color:var(--red)}.modal-body.svelte-l4ioia{flex:1;overflow:auto;padding:8px 16px 16px}.error.svelte-l4ioia{color:var(--red);padding:8px 0;font-size:13px}.empty.svelte-l4ioia{color:var(--text-2);padding:24px;text-align:center;font-size:14px}.skill-list.svelte-l4ioia{display:flex;flex-direction:column}.skill-row.svelte-l4ioia{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 0;border-bottom:1px solid var(--border)}.skill-row.svelte-l4ioia:last-child{border-bottom:none}.skill-info.svelte-l4ioia{flex:1;min-width:0}.skill-name.svelte-l4ioia{font-size:14px;font-weight:500;color:var(--text-0)}.skill-desc.svelte-l4ioia{font-size:13px;color:var(--text-1);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.skill-meta.svelte-l4ioia{font-size:12px;color:var(--text-2);margin-top:2px}.skill-actions.svelte-l4ioia{flex-shrink:0}.installed-tag.svelte-l4ioia{font-size:12px;color:var(--text-2);font-style:italic}.action-btn.svelte-l4ioia{padding:4px 10px;font-size:12px;border-radius:var(--radius);font-weight:500}.action-btn.svelte-l4ioia:disabled{opacity:.5}.install-btn.svelte-l4ioia{background:var(--accent-dim);color:var(--accent)}.error.svelte-jfofjj{color:var(--red);padding:8px 0;font-size:13px}.empty.svelte-jfofjj{color:var(--text-2);padding:12px 0;font-size:14px}.section-header.svelte-jfofjj{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.section-title.svelte-jfofjj{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-2)}.add-btn.svelte-jfofjj{padding:4px 12px;font-size:12px;border-radius:var(--radius);background:var(--accent-dim);color:var(--accent);font-weight:500}.skill-list.svelte-jfofjj{display:flex;flex-direction:column}.skill-row.svelte-jfofjj{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:6px 0;border-bottom:1px solid var(--border)}.skill-row.svelte-jfofjj:last-child{border-bottom:none}.skill-row.svelte-jfofjj:hover{background:var(--bg-2)}.skill-info.svelte-jfofjj{flex:1;min-width:0}.skill-name.svelte-jfofjj{font-size:14px;font-weight:500;color:var(--text-0);display:flex;align-items:center;gap:8px}.skill-desc.svelte-jfofjj{font-size:13px;color:var(--text-1);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.skill-meta.svelte-jfofjj{font-size:12px;color:var(--text-2);margin-top:2px}.update-badge.svelte-jfofjj{font-size:11px;padding:1px 6px;border-radius:8px;background:var(--accent-dim);color:var(--accent);font-weight:500}.upstream-tag.svelte-jfofjj{color:var(--text-2)}.local-tag.svelte-jfofjj{font-style:italic;color:var(--text-2)}.skill-actions.svelte-jfofjj{display:flex;gap:4px;flex-shrink:0}.action-btn.svelte-jfofjj{padding:4px 10px;font-size:12px;border-radius:var(--radius);font-weight:500}.action-btn.svelte-jfofjj:disabled{opacity:.5}.update-btn.svelte-jfofjj{background:var(--accent-dim);color:var(--accent)}.publish-btn.svelte-jfofjj{background:var(--bg-3);color:var(--text-1)}.remove-btn.svelte-jfofjj{background:var(--bg-3);color:var(--text-2)}.remove-btn.svelte-jfofjj:hover{color:var(--red)}.error.svelte-16y8q82{color:var(--red);padding:16px}.empty.svelte-16y8q82{color:var(--text-2);padding:24px;text-align:center}.table-wrap.svelte-16y8q82{overflow:auto}.variant-table.svelte-16y8q82{width:100%;border-collapse:collapse;font-size:14px}.variant-table.svelte-16y8q82 th:where(.svelte-16y8q82){text-align:left;color:var(--text-2);font-size:12px;text-transform:uppercase;letter-spacing:.04em;padding:8px 12px;border-bottom:1px solid var(--border);font-weight:500}.variant-row.svelte-16y8q82{animation:fadeIn .2s ease both}.variant-row.svelte-16y8q82 td:where(.svelte-16y8q82){padding:10px 12px;border-bottom:1px solid var(--border)}.name-cell.svelte-16y8q82{color:var(--text-0);font-weight:500}.branch-cell.svelte-16y8q82{color:var(--text-1)}.port-cell.svelte-16y8q82{color:var(--text-2)}.mind-panel.svelte-5k8fm{display:flex;flex-direction:column;height:100%;background:var(--bg-1);width:100%;overflow:hidden}.panel-header.svelte-5k8fm{display:flex;flex-direction:column;border-bottom:1px solid var(--border);flex-shrink:0}.header-top.svelte-5k8fm{display:flex;align-items:center;justify-content:space-between;padding:8px 16px 0}.header-left.svelte-5k8fm{display:flex;align-items:center;gap:10px}.mind-name.svelte-5k8fm{font-family:var(--display);font-size:20px;font-weight:400;color:var(--text-0)}.close-btn.svelte-5k8fm{background:none;color:var(--text-2);font-size:15px;padding:4px 8px}.close-btn.svelte-5k8fm:hover{color:var(--text-0)}.panel-body.svelte-5k8fm{flex:1;overflow:auto;min-height:0}.settings-content.svelte-5k8fm{padding:16px}.files-section.svelte-5k8fm{flex:1;min-height:0}.panel-body-flex.svelte-5k8fm{display:flex;flex-direction:column;overflow:hidden}.detail-section.svelte-5k8fm{margin-top:24px;padding-top:24px;border-top:1px solid var(--border)}.section-title.svelte-5k8fm{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-2);margin-bottom:8px}.connections-empty.svelte-5k8fm{color:var(--text-2);padding:12px 0;font-size:14px}.connections-list.svelte-5k8fm{display:flex;flex-direction:column}.connection-row.svelte-5k8fm{display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px solid var(--border);font-size:14px}.connection-row.svelte-5k8fm:last-child{border-bottom:none}.connection-name.svelte-5k8fm{font-weight:500;color:var(--text-0)}.connection-bot.svelte-5k8fm{font-size:13px;color:var(--text-1)}.connection-time.svelte-5k8fm{font-size:12px;color:var(--text-2);margin-left:auto}.profile-section.svelte-5k8fm{display:flex;flex-direction:column;align-items:center;gap:4px;padding:0 16px 16px}.profile-avatar.svelte-5k8fm{width:96px;height:96px;border-radius:var(--radius);object-fit:cover}.profile-display-name.svelte-5k8fm{font-family:var(--display);font-size:24px;font-weight:400;color:var(--text-0)}.profile-description.svelte-5k8fm{font-size:14px;color:var(--text-1);text-align:center;max-width:320px;margin:4px 0 0;line-height:1.4}.profile-meta.svelte-5k8fm{font-size:12px;color:var(--text-2);margin-top:4px}.history-section.svelte-5k8fm{flex:1;min-height:0;padding:0 16px;border-top:1px solid var(--border)}@media(max-width:1024px){.mind-panel.svelte-5k8fm{width:100%}}.modal-content.svelte-sa0ylk{padding:20px;display:flex;flex-direction:column;gap:12px;max-height:60vh;overflow:auto}.modal-title.svelte-sa0ylk{font-weight:600;color:var(--text-0);font-size:15px}.title-input.svelte-sa0ylk{background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);padding:8px 10px;color:var(--text-0);font-size:13px;outline:none;font-family:inherit}.hint.svelte-sa0ylk{color:var(--text-2);font-size:12px;padding:8px}.error.svelte-sa0ylk{color:var(--red);font-size:12px}.tag-input-wrapper.svelte-sa0ylk{position:relative}.tag-input.svelte-sa0ylk{display:flex;flex-wrap:wrap;align-items:center;gap:4px;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);padding:6px 8px;min-height:32px;cursor:text}.tag-input.svelte-sa0ylk:focus-within{border-color:var(--accent)}.tag.svelte-sa0ylk{display:flex;align-items:center;gap:4px;background:var(--bg-3);border-radius:3px;padding:2px 6px;font-size:12px;color:var(--text-0);white-space:nowrap}.tag-name.svelte-sa0ylk{line-height:1}.tag-remove.svelte-sa0ylk{cursor:pointer;color:var(--text-2);font-size:14px;line-height:1;margin-left:2px}.tag-remove.svelte-sa0ylk:hover{color:var(--text-0)}.dot.svelte-sa0ylk{width:6px;height:6px;border-radius:50%;flex-shrink:0}.tag-text-input.svelte-sa0ylk{flex:1;min-width:60px;background:none;border:none;outline:none;color:var(--text-0);font-size:13px;padding:2px 0;font-family:inherit}.tag-text-input.svelte-sa0ylk::placeholder{color:var(--text-2)}.dropdown.svelte-sa0ylk{position:absolute;top:100%;left:0;right:0;margin-top:4px;background:var(--bg-1);border:1px solid var(--border);border-radius:var(--radius);max-height:200px;overflow:auto;z-index:10}.dropdown-item.svelte-sa0ylk{display:flex;align-items:center;gap:8px;padding:6px 10px;cursor:pointer;font-size:13px;color:var(--text-0)}.dropdown-item.svelte-sa0ylk:hover{background:var(--bg-2)}.item-name.svelte-sa0ylk{flex:1;overflow:hidden;text-overflow:ellipsis}.item-badge.svelte-sa0ylk{color:var(--accent);font-size:11px;flex-shrink:0}.actions.svelte-sa0ylk{display:flex;gap:8px;justify-content:flex-end}.cancel-btn.svelte-sa0ylk{padding:6px 14px;background:var(--bg-2);color:var(--text-1);border-radius:var(--radius);font-size:13px;border:1px solid var(--border)}.create-btn.svelte-sa0ylk{padding:6px 14px;background:var(--accent-dim);color:var(--accent);border-radius:var(--radius);font-size:13px;font-weight:500}.modal-content.svelte-esytdb{padding:24px;display:flex;flex-direction:column;gap:14px}.modal-title.svelte-esytdb{font-weight:600;color:var(--text-0);font-size:15px}.field.svelte-esytdb{display:flex;flex-direction:column;gap:4px}.label.svelte-esytdb{color:var(--text-2);font-size:12px}.input.svelte-esytdb{background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);padding:8px 10px;color:var(--text-0);font-size:14px;outline:none;font-family:inherit}.select.svelte-esytdb{appearance:auto}.error.svelte-esytdb{color:var(--red);font-size:12px}.actions.svelte-esytdb{display:flex;gap:8px;justify-content:flex-end}.cancel-btn.svelte-esytdb{padding:6px 14px;background:var(--bg-2);color:var(--text-1);border-radius:var(--radius);font-size:13px;border:1px solid var(--border)}.plant-btn.svelte-esytdb{padding:6px 14px;background:var(--yellow);color:var(--bg-0);border-radius:var(--radius);font-size:13px;font-weight:600}.advanced-toggle.svelte-esytdb{background:transparent;color:var(--text-2);font-size:12px;font-family:inherit;border:none;cursor:pointer;padding:0;display:flex;align-items:center;gap:4px;transition:color .15s}.advanced-toggle.svelte-esytdb:hover{color:var(--text-1)}.caret.svelte-esytdb{font-size:8px}.textarea.svelte-esytdb{resize:vertical;min-height:80px;font-size:13px;line-height:1.5}.hint.svelte-esytdb{color:var(--text-2);font-size:11px;font-family:inherit}.skill-list.svelte-esytdb{display:flex;flex-direction:column;gap:4px}.skill-item.svelte-esytdb{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--text-1);cursor:pointer}.skill-name.svelte-esytdb{font-family:var(--mono)}.conv-list.svelte-2bx51q{display:flex;flex-direction:column}.section-header.svelte-2bx51q{display:flex;align-items:center;justify-content:space-between;padding:10px 12px 4px;font-size:11px;font-weight:600;color:var(--text-2);letter-spacing:.05em;text-transform:uppercase}.browse-btn.svelte-2bx51q{font-size:11px;color:var(--accent);background:none;padding:0;text-transform:lowercase;letter-spacing:0;font-weight:500}.conv-item.svelte-2bx51q{padding:6px 12px 6px 26px;margin:0 4px;cursor:pointer;border-radius:var(--radius);display:flex;flex-direction:column;gap:2px;transition:background .1s}.conv-item.svelte-2bx51q:hover{background:var(--bg-2)}.conv-item.active.svelte-2bx51q{background:var(--bg-3)}.conv-item-header.svelte-2bx51q{display:flex;align-items:center;justify-content:space-between;gap:4px}.conv-item-label.svelte-2bx51q{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px;color:var(--text-1);display:flex;align-items:center;gap:6px}.conv-item-label.active.svelte-2bx51q{color:var(--text-0)}.conv-item-label.unread.svelte-2bx51q{font-weight:600;color:var(--text-0)}.unread-badge.svelte-2bx51q{background:var(--accent);color:var(--bg-0);font-size:11px;font-weight:600;min-width:16px;height:16px;border-radius:8px;display:flex;align-items:center;justify-content:center;padding:0 4px;flex-shrink:0}.conv-label-text.svelte-2bx51q{overflow:hidden;text-overflow:ellipsis}.conv-label-mind.svelte-2bx51q{overflow:hidden;text-overflow:ellipsis;background:none;border:none;padding:0;font:inherit;color:inherit;cursor:pointer}.conv-label-mind.svelte-2bx51q:hover{text-decoration:underline}.seed-tag.svelte-2bx51q{font-size:9px;color:var(--yellow);flex-shrink:0}.delete-btn.svelte-2bx51q{background:transparent;color:var(--text-2);font-size:12px;padding:0 4px;flex-shrink:0}.menu-btn.svelte-2bx51q{background:transparent;color:var(--text-2);font-size:12px;padding:0 4px;flex-shrink:0;opacity:0;transition:opacity .1s;letter-spacing:1px}.conv-item.svelte-2bx51q:hover .menu-btn:where(.svelte-2bx51q),.menu-btn.visible.svelte-2bx51q{opacity:1}.menu-btn.svelte-2bx51q:hover{color:var(--text-0)}.member-count.svelte-2bx51q{font-size:11px;color:var(--text-2);padding-left:1px}.status-dot.svelte-2bx51q{width:7px;height:7px;border-radius:50%;flex-shrink:0;border:none;padding:0;cursor:pointer}.status-dot.iridescent.svelte-2bx51q{animation:svelte-2bx51q-iridescent 3s ease-in-out infinite}@keyframes svelte-2bx51q-iridescent{0%{background:#4ade80}16%{background:#60a5fa}33%{background:#c084fc}50%{background:#f472b6}66%{background:#fbbf24}83%{background:#34d399}to{background:#4ade80}}.status-dot.svelte-2bx51q:hover{transform:scale(1.3)}.empty.svelte-2bx51q{color:var(--text-2);font-size:12px;padding:8px 12px;text-align:center}.context-menu.svelte-2bx51q{position:fixed;background:var(--bg-1);border:1px solid var(--border);border-radius:var(--radius);padding:4px 0;z-index:200;min-width:120px;box-shadow:0 4px 12px #0000004d}.context-item.svelte-2bx51q{display:block;width:100%;padding:6px 12px;background:none;color:var(--text-1);font-size:13px;text-align:left;white-space:nowrap}.context-item.svelte-2bx51q:hover{background:var(--bg-2);color:var(--text-0)}@media(max-width:767px){.conv-item.svelte-2bx51q{padding:10px 12px 10px 26px}.menu-btn.svelte-2bx51q{opacity:1}.context-item.svelte-2bx51q{padding:10px 16px}}.sidebar-inner.svelte-k3swf5{display:flex;flex-direction:column;height:100%;overflow:hidden}.sidebar-header.svelte-k3swf5{display:flex;align-items:center;justify-content:center;gap:8px;padding:12px;flex-shrink:0;background:none;cursor:pointer;border-bottom:1px solid var(--border)}.header-logo-wrap.svelte-k3swf5{position:relative;width:30px;height:30px;flex-shrink:0}.sidebar-logo.svelte-k3swf5{width:30px;height:30px;filter:invert(1);transition:opacity .15s}.hover-dot.svelte-k3swf5{position:absolute;inset:0;margin:auto;width:10px;height:10px;border-radius:50%;opacity:0;transition:opacity .15s;animation:svelte-k3swf5-iridescent 3s ease-in-out infinite}.sidebar-header.svelte-k3swf5:hover .sidebar-logo:where(.svelte-k3swf5){opacity:0}.sidebar-header.svelte-k3swf5:hover .hover-dot:where(.svelte-k3swf5){opacity:1}.sidebar-title.svelte-k3swf5{font-family:var(--display);font-size:26px;font-weight:300;color:var(--text-0);letter-spacing:.04em;margin-top:-4px;margin-left:-4px}.sections.svelte-k3swf5{flex:1;overflow-y:auto;overflow-x:hidden;padding-top:4px}.section.svelte-k3swf5{margin-bottom:2px}.section-header-row.svelte-k3swf5{display:flex;align-items:center;padding-right:8px}.section-toggle.svelte-k3swf5{display:flex;align-items:center;gap:4px;flex:1;padding:6px 12px;background:none;color:var(--text-2);font-family:var(--display);font-size:16px;font-weight:300;letter-spacing:.02em;text-align:left}.section-toggle.svelte-k3swf5:hover{color:var(--text-1)}.toggle-icon.svelte-k3swf5{font-size:9px;width:10px}.section-add.svelte-k3swf5{background:none;color:var(--text-2);font-size:15px;padding:2px 6px;border-radius:var(--radius);flex-shrink:0}.section-add.svelte-k3swf5:hover{color:var(--text-0);background:var(--bg-2)}.mind-list.svelte-k3swf5{display:flex;flex-direction:column}.mind-item.svelte-k3swf5{display:flex;align-items:center;gap:8px;width:100%;padding:6px 12px 6px 26px;font-size:14px;color:var(--text-1);transition:background .1s;cursor:pointer;background:none;text-align:left;margin:0 4px;border-radius:var(--radius)}.mind-item.svelte-k3swf5:hover{background:var(--bg-2)}.mind-item.active.svelte-k3swf5{background:var(--bg-2);color:var(--text-0)}.mind-item-name.svelte-k3swf5{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.unread-dot.svelte-k3swf5{width:6px;height:6px;border-radius:50%;background:var(--accent);flex-shrink:0}.status-dot.svelte-k3swf5{width:6px;height:6px;border-radius:50%;flex-shrink:0}.status-dot.iridescent.svelte-k3swf5{animation:svelte-k3swf5-iridescent 3s ease-in-out infinite}@keyframes svelte-k3swf5-iridescent{0%{background:#4ade80}16%{background:#60a5fa}33%{background:#c084fc}50%{background:#f472b6}66%{background:#fbbf24}83%{background:#34d399}to{background:#4ade80}}.site-list.svelte-k3swf5{display:flex;flex-direction:column}.site-item.svelte-k3swf5{display:block;width:100%;padding:6px 12px 6px 26px;font-size:14px;color:var(--text-1);border-radius:var(--radius);transition:background .1s;cursor:pointer;background:none;text-align:left;margin:0 4px}.site-item.svelte-k3swf5:hover{background:var(--bg-2)}@media(max-width:1024px){.sidebar-header.svelte-k3swf5{display:none}}@media(max-width:767px){.mind-item.svelte-k3swf5,.site-item.svelte-k3swf5{padding:10px 12px 10px 26px;font-size:14px}.section-toggle.svelte-k3swf5{padding:8px 12px}.status-dot.svelte-k3swf5{width:8px;height:8px}}.status-bar.svelte-cuxhxk{height:28px;display:flex;align-items:center;justify-content:space-between;padding:0 12px;background:var(--bg-1);border-top:1px solid var(--border);font-family:var(--display);font-size:13px;color:var(--text-2);flex-shrink:0}.status-left.svelte-cuxhxk,.status-right.svelte-cuxhxk{display:flex;align-items:center;gap:8px}.dot.svelte-cuxhxk{width:6px;height:6px;border-radius:50%;background:var(--accent);display:inline-block;flex-shrink:0}.dot.disconnected.svelte-cuxhxk{background:var(--red)}.menu-anchor.svelte-cuxhxk{position:relative}.status-btn.svelte-cuxhxk{background:none;color:var(--text-2);font-size:13px;padding:2px 4px;display:flex;align-items:center;gap:5px;border-radius:3px}.status-btn.svelte-cuxhxk:hover{color:var(--text-0);background:var(--bg-2)}.username-btn.svelte-cuxhxk{color:var(--text-1)}.dropdown.svelte-cuxhxk{position:absolute;bottom:calc(100% + 4px);left:0;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);min-width:120px;padding:4px 0;z-index:100;box-shadow:0 -2px 8px #0000004d}.dropdown.right.svelte-cuxhxk{left:auto;right:0}.dropdown-item.svelte-cuxhxk{display:block;width:100%;text-align:left;padding:6px 12px;background:none;color:var(--text-1);font-size:13px;white-space:nowrap}.dropdown-item.svelte-cuxhxk:hover{background:var(--bg-3);color:var(--text-0)}@media(max-width:767px){.status-bar.svelte-cuxhxk{height:36px}.status-btn.svelte-cuxhxk{padding:6px 8px}.dropdown-item.svelte-cuxhxk{padding:10px 16px}}.banner.svelte-h3c10m{display:flex;align-items:center;justify-content:center;gap:12px;padding:6px 16px;background:var(--accent-bg);border-bottom:1px solid var(--accent-dim);color:var(--accent);font-size:13px;font-family:inherit;flex-shrink:0}.update-btn.svelte-h3c10m{background:var(--accent-dim);color:var(--accent);border:1px solid var(--accent);border-radius:var(--radius);padding:2px 10px;font-size:12px;font-family:inherit;cursor:pointer}.dismiss-btn.svelte-h3c10m{background:transparent;color:var(--accent);border:none;font-size:16px;line-height:1;cursor:pointer;padding:0 4px}.error.svelte-h3c10m{color:var(--red)}.updating.svelte-h3c10m{animation:pulse 1.5s ease-in-out infinite}.modal-body.svelte-1453wyc{padding:16px}.section-title.svelte-1453wyc{font-size:13px;font-weight:600;color:var(--text-1);margin:0 0 12px}.field.svelte-1453wyc{display:block;margin-bottom:10px}.label.svelte-1453wyc{display:block;font-size:12px;color:var(--text-2);margin-bottom:4px}input.svelte-1453wyc,textarea.svelte-1453wyc{width:100%;padding:6px 10px;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-0);font-size:13px;font-family:inherit;box-sizing:border-box;resize:vertical}input.svelte-1453wyc:focus,textarea.svelte-1453wyc:focus{outline:none;border-color:var(--accent)}.avatar-section.svelte-1453wyc{display:flex;align-items:center;gap:12px;margin-bottom:12px}.avatar-preview.svelte-1453wyc{width:48px;height:48px;border-radius:50%;overflow:hidden;flex-shrink:0;background:var(--bg-2);border:1px solid var(--border);display:flex;align-items:center;justify-content:center}.avatar-img.svelte-1453wyc{width:100%;height:100%;object-fit:cover}.avatar-placeholder.svelte-1453wyc{font-size:18px;color:var(--text-2)}.avatar-actions.svelte-1453wyc{display:flex;gap:8px;align-items:center}.avatar-upload-btn.svelte-1453wyc{padding:4px 10px;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-1);font-size:12px;cursor:pointer}.avatar-upload-btn.svelte-1453wyc:hover{border-color:var(--border-bright)}.remove-btn.svelte-1453wyc{padding:4px 10px;background:none;border:1px solid var(--border);border-radius:var(--radius);color:var(--red);font-size:12px;cursor:pointer}.remove-btn.svelte-1453wyc:hover{background:var(--red-bg)}.save-btn.svelte-1453wyc{margin-top:4px;padding:6px 14px;background:var(--accent-dim);color:var(--accent);border-radius:var(--radius);font-size:12px;font-weight:500}.save-btn.svelte-1453wyc:hover:not(:disabled){background:var(--accent);color:var(--bg-0)}.save-btn.svelte-1453wyc:disabled{opacity:.5}.message.svelte-1453wyc{font-size:12px;padding:6px 10px;border-radius:var(--radius);margin-bottom:10px}.message.error.svelte-1453wyc{color:var(--red);background:var(--red-bg)}.message.success.svelte-1453wyc{color:var(--accent);background:var(--accent-dim)}.divider.svelte-1453wyc{border:none;border-top:1px solid var(--border);margin:16px 0}.loading.svelte-14lg4b7{color:var(--text-2);padding:24px;text-align:center}.full-height.svelte-14lg4b7{height:100%}.shell.svelte-14lg4b7{height:100%;display:flex;flex-direction:column}.shell-body.svelte-14lg4b7{flex:1;display:flex;overflow:hidden}.sidebar.svelte-14lg4b7{display:flex;flex-direction:column;flex-shrink:0;border-right:1px solid var(--border);background:var(--bg-1);overflow:hidden}.resize-handle.svelte-14lg4b7{width:4px;cursor:col-resize;flex-shrink:0;background:transparent;transition:background .15s}.resize-handle.svelte-14lg4b7:hover{background:var(--border)}.main-frame.svelte-14lg4b7{flex:1;overflow:hidden;min-width:0}.right-panel.svelte-14lg4b7{flex-shrink:0;border-left:1px solid var(--border);overflow:hidden}.right-panel-backdrop.svelte-14lg4b7,.sidebar-backdrop.svelte-14lg4b7{display:none}@media(max-width:1024px){.right-panel.svelte-14lg4b7{display:none}.right-panel.right-panel-open.svelte-14lg4b7{display:block;position:fixed;top:0;right:0;bottom:0;z-index:40;width:min(360px,100vw)!important}.right-resize-handle.svelte-14lg4b7{display:none}.right-panel-backdrop.svelte-14lg4b7{display:block;position:fixed;inset:0;background:#00000080;z-index:39}}@media(max-width:767px){.sidebar.svelte-14lg4b7{position:fixed;top:0;left:0;bottom:0;z-index:50;width:280px!important;transform:translate(-100%);transition:transform .2s ease}.sidebar.sidebar-open.svelte-14lg4b7{transform:translate(0);overflow:visible}.sidebar-backdrop.svelte-14lg4b7{display:block;position:fixed;inset:0;background:#00000080;z-index:49}.resize-handle.svelte-14lg4b7{display:none}}@media(min-width:768px)and (max-width:1024px){.sidebar.svelte-14lg4b7{width:200px!important}.resize-handle.svelte-14lg4b7{display:none}}:root{--bg-0: #0a0c0f;--bg-1: #11141a;--bg-2: #181c24;--bg-3: #1f2430;--border: #2a3040;--border-bright: #3a4560;--text-0: #e8ecf4;--text-1: #a0aabb;--text-2: #6a7588;--accent: #4ade80;--accent-dim: #22613e;--accent-bg: rgba(74, 222, 128, .08);--red: #f87171;--red-dim: #7f1d1d;--yellow: #fbbf24;--yellow-dim: #78350f;--blue: #60a5fa;--purple: #c084fc;--overlay: rgba(0, 0, 0, .6);--yellow-bg: rgba(251, 191, 36, .08);--blue-bg: rgba(96, 165, 250, .08);--red-bg: rgba(248, 113, 113, .08);--muted-bg: rgba(106, 117, 136, .08);--red-border: rgba(248, 113, 113, .2);--accent-border: rgba(74, 222, 128, .2);--timeline-rail: #333;--mono: "Fira Code", "SF Mono", monospace;--sans: "Averia Sans Libre", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--display: "Averia Serif Libre", Georgia, serif;--radius: 6px;--radius-lg: 10px}*{margin:0;padding:0;box-sizing:border-box}html,body,#root{height:100%;background:var(--bg-0);color:var(--text-0);font-family:var(--sans);font-size:15px;line-height:1.6;-webkit-font-smoothing:antialiased}::selection{background:var(--accent-dim);color:var(--accent)}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--border-bright)}a{color:inherit;text-decoration:none}input,select,textarea,button{font-family:inherit}button{cursor:pointer;border:none}button:focus{outline:none}button:focus-visible{outline:1px solid var(--accent);outline-offset:2px}a:focus-visible{outline:1px solid var(--accent);outline-offset:2px}.app{height:100%;display:flex;flex-direction:column}@keyframes fadeIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes slideIn{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:translate(0)}}.markdown-body{word-break:break-word;color:var(--text-0);line-height:1.6}.markdown-body p{margin:0 0 8px}.markdown-body p:last-child{margin-bottom:0}.markdown-body pre{background:var(--bg-3);border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px;overflow-x:auto;margin:8px 0;font-size:13px;line-height:1.5}.markdown-body code{font-family:var(--mono);font-size:13px;background:var(--bg-3);padding:1px 4px;border-radius:3px}.markdown-body pre code{background:none;padding:0}.markdown-body a{color:var(--blue);text-decoration:underline}.markdown-body ul,.markdown-body ol{margin:4px 0;padding-left:20px}.markdown-body li{margin:2px 0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin:12px 0 6px;font-weight:600;color:var(--text-0)}.markdown-body h1{font-size:18px}.markdown-body h2{font-size:16px}.markdown-body h3{font-size:15px}.markdown-body blockquote{border-left:3px solid var(--border-bright);margin:8px 0;padding:4px 12px;color:var(--text-1)}.markdown-body table{border-collapse:collapse;margin:8px 0}.markdown-body th,.markdown-body td{border:1px solid var(--border);padding:6px 10px;font-size:13px}.markdown-body th{background:var(--bg-3);font-weight:600}.markdown-body hr{border:none;border-top:1px solid var(--border);margin:12px 0}
@@ -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-CGPSVu19.js"></script>
12
- <link rel="stylesheet" crossorigin href="/assets/index-V_rNDsM8.css">
11
+ <script type="module" crossorigin src="/assets/index-CUQ31ieL.js"></script>
12
+ <link rel="stylesheet" crossorigin href="/assets/index-CW8NSl1o.css">
13
13
  </head>
14
14
  <body>
15
15
  <div id="root"></div>
@@ -0,0 +1,23 @@
1
+ CREATE TABLE `notes` (
2
+ `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
3
+ `author_id` integer NOT NULL REFERENCES `users`(`id`) ON DELETE CASCADE,
4
+ `title` text NOT NULL,
5
+ `slug` text NOT NULL,
6
+ `content` text NOT NULL,
7
+ `created_at` text NOT NULL DEFAULT (datetime('now')),
8
+ `updated_at` text NOT NULL DEFAULT (datetime('now'))
9
+ );
10
+ --> statement-breakpoint
11
+ CREATE UNIQUE INDEX `idx_notes_author_slug` ON `notes` (`author_id`, `slug`);
12
+ --> statement-breakpoint
13
+ CREATE INDEX `idx_notes_created_at` ON `notes` (`created_at`);
14
+ --> statement-breakpoint
15
+ CREATE TABLE `note_comments` (
16
+ `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
17
+ `note_id` integer NOT NULL REFERENCES `notes`(`id`) ON DELETE CASCADE,
18
+ `author_id` integer NOT NULL REFERENCES `users`(`id`) ON DELETE CASCADE,
19
+ `content` text NOT NULL,
20
+ `created_at` text NOT NULL DEFAULT (datetime('now'))
21
+ );
22
+ --> statement-breakpoint
23
+ CREATE INDEX `idx_note_comments_note_id` ON `note_comments` (`note_id`);
@@ -0,0 +1,15 @@
1
+ CREATE TABLE `note_reactions` (
2
+ `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
3
+ `note_id` integer NOT NULL REFERENCES `notes`(`id`) ON DELETE CASCADE,
4
+ `user_id` integer NOT NULL REFERENCES `users`(`id`) ON DELETE CASCADE,
5
+ `emoji` text NOT NULL,
6
+ `created_at` text NOT NULL DEFAULT (datetime('now'))
7
+ );
8
+ --> statement-breakpoint
9
+ CREATE UNIQUE INDEX `idx_note_reactions_unique` ON `note_reactions` (`note_id`, `user_id`, `emoji`);
10
+ --> statement-breakpoint
11
+ CREATE INDEX `idx_note_reactions_note_id` ON `note_reactions` (`note_id`);
12
+ --> statement-breakpoint
13
+ ALTER TABLE `notes` ADD COLUMN `reply_to_id` integer REFERENCES `notes`(`id`) ON DELETE SET NULL;
14
+ --> statement-breakpoint
15
+ CREATE INDEX `idx_notes_reply_to` ON `notes`(`reply_to_id`);
@@ -106,6 +106,20 @@
106
106
  "when": 1772300000000,
107
107
  "tag": "0014_conversation_reads",
108
108
  "breakpoints": true
109
+ },
110
+ {
111
+ "idx": 15,
112
+ "version": "6",
113
+ "when": 1772400000000,
114
+ "tag": "0015_notes",
115
+ "breakpoints": true
116
+ },
117
+ {
118
+ "idx": 16,
119
+ "version": "6",
120
+ "when": 1772500000000,
121
+ "tag": "0016_note_reactions_and_replies",
122
+ "breakpoints": true
109
123
  }
110
124
  ]
111
125
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "volute",
3
- "version": "0.25.0",
3
+ "version": "0.26.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",
@@ -56,6 +56,7 @@
56
56
  "db:migrate": "drizzle-kit migrate"
57
57
  },
58
58
  "dependencies": {
59
+ "@anthropic-ai/sandbox-runtime": "^0.0.39",
59
60
  "@hono/node-server": "^1.19.9",
60
61
  "@hono/zod-validator": "^0.7.6",
61
62
  "@libsql/client": "^0.17.0",
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ # Wake context hook — generates context when waking from sleep.
3
+ # Input: JSON on stdin with { "sleepingSince": "ISO", "duration": "Xh Ym", "wakeTime": "ISO" }
4
+ # Output: Plain text included in the wake-up summary. Empty output = nothing added.
5
+ #
6
+ # Skills and extensions can append to this script to surface what happened during sleep.
7
+ # Example: check for new dream files, summarize overnight activity, etc.
@@ -16,11 +16,19 @@ export function parseArgs(): { port: number } {
16
16
  return { port };
17
17
  }
18
18
 
19
+ export type SubagentConfig = {
20
+ description: string;
21
+ systemPrompt: string; // path relative to home/, e.g. "SOUL.md"
22
+ tools?: string[];
23
+ maxTurns?: number;
24
+ };
25
+
19
26
  export function loadConfig(): {
20
27
  model?: string;
21
28
  logLevel?: "error" | "warn" | "info" | "debug";
22
29
  compactionMessage?: string;
23
30
  compaction?: { maxContextTokens?: number };
31
+ subagents?: Record<string, SubagentConfig>;
24
32
  } {
25
33
  // Mind-own config lives in config.json; fall back to volute.json for older minds
26
34
  for (const file of ["home/.config/config.json", "home/.config/volute.json"]) {
@@ -1,3 +1,5 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { resolve as resolvePath } from "node:path";
1
3
  import type { HookCallback } from "@anthropic-ai/claude-agent-sdk";
2
4
  import { query } from "@anthropic-ai/claude-agent-sdk";
3
5
  import { toSDKContent } from "./lib/content.js";
@@ -10,7 +12,7 @@ import { createSessionContextHook } from "./lib/hooks/session-context.js";
10
12
  import { log } from "./lib/logger.js";
11
13
  import { createMessageChannel } from "./lib/message-channel.js";
12
14
  import { createSessionStore } from "./lib/session-store.js";
13
- import { loadPrompts } from "./lib/startup.js";
15
+ import { loadPrompts, type SubagentConfig } from "./lib/startup.js";
14
16
  import { consumeStream } from "./lib/stream-consumer.js";
15
17
  import type {
16
18
  HandlerMeta,
@@ -40,6 +42,7 @@ export function createMind(options: {
40
42
  sessionsDir: string;
41
43
  compactionMessage?: string;
42
44
  maxContextTokens?: number;
45
+ subagents?: Record<string, SubagentConfig>;
43
46
  onIdentityReload?: () => Promise<void>;
44
47
  }): { resolve: HandlerResolver; waitForCommits: () => Promise<void> } {
45
48
  const autoCommit = createAutoCommitHook(options.cwd);
@@ -64,6 +67,52 @@ export function createMind(options: {
64
67
  // Per-session compaction state
65
68
  const compactionTriggered = new Map<string, boolean>();
66
69
 
70
+ // --- Subagents (config-driven) ---
71
+
72
+ type SDKAgent = {
73
+ description: string;
74
+ prompt: string;
75
+ tools: string[];
76
+ model: "inherit";
77
+ maxTurns?: number;
78
+ };
79
+
80
+ function loadSubagents(
81
+ configs: Record<string, SubagentConfig> | undefined,
82
+ ): Record<string, SDKAgent> | undefined {
83
+ if (!configs || Object.keys(configs).length === 0) return undefined;
84
+ const agents: Record<string, SDKAgent> = {};
85
+ for (const [name, config] of Object.entries(configs)) {
86
+ if (typeof config.description !== "string" || typeof config.systemPrompt !== "string") {
87
+ log("mind", `subagent "${name}": missing description or systemPrompt, skipping`);
88
+ continue;
89
+ }
90
+ try {
91
+ const prompt = readFileSync(resolvePath(options.cwd, config.systemPrompt), "utf-8");
92
+ if (!prompt) {
93
+ log("mind", `subagent "${name}": ${config.systemPrompt} is empty, skipping`);
94
+ continue;
95
+ }
96
+ agents[name] = {
97
+ description: config.description,
98
+ prompt,
99
+ tools: config.tools ?? ["Read", "Write", "Bash"],
100
+ model: "inherit" as const,
101
+ maxTurns: config.maxTurns,
102
+ };
103
+ } catch (err: any) {
104
+ if (err?.code === "ENOENT") {
105
+ log("mind", `subagent "${name}": ${config.systemPrompt} not found, skipping`);
106
+ } else {
107
+ log("mind", `subagent "${name}": failed to read ${config.systemPrompt}: ${err.message}`);
108
+ }
109
+ }
110
+ }
111
+ return Object.keys(agents).length > 0 ? agents : undefined;
112
+ }
113
+
114
+ const agents = loadSubagents(options.subagents);
115
+
67
116
  // --- Event broadcasting ---
68
117
 
69
118
  function broadcastToSession(session: Session, event: VoluteEvent) {
@@ -106,6 +155,7 @@ export function createMind(options: {
106
155
  model: options.model,
107
156
  maxThinkingTokens: options.maxThinkingTokens,
108
157
  resume,
158
+ agents,
109
159
  hooks: {
110
160
  PostToolUse: postToolUseHooks,
111
161
  PreCompact: [{ hooks: [preCompactHook] }],
@@ -42,6 +42,7 @@ const mind = createMind({
42
42
  sessionsDir,
43
43
  compactionMessage: config.compactionMessage,
44
44
  maxContextTokens: config.compaction?.maxContextTokens,
45
+ subagents: config.subagents,
45
46
  onIdentityReload: async () => {
46
47
  log("server", "identity file changed — restarting to reload");
47
48
  await mind.waitForCommits();
@@ -10,6 +10,7 @@
10
10
  },
11
11
  "dependencies": {
12
12
  "@mariozechner/pi-coding-agent": "^0.51.0",
13
+ "@sinclair/typebox": "^0.34.0",
13
14
  "tsx": "^4.0.0"
14
15
  },
15
16
  "devDependencies": {
@@ -1,3 +1,5 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { resolve as resolvePath } from "node:path";
1
3
  import {
2
4
  AuthStorage,
3
5
  createAgentSession,
@@ -13,7 +15,8 @@ import { log } from "./lib/logger.js";
13
15
  import { createReplyInstructionsExtension } from "./lib/reply-instructions-extension.js";
14
16
  import { resolveModel } from "./lib/resolve-model.js";
15
17
  import { createSessionContextExtension } from "./lib/session-context-extension.js";
16
- import { loadPrompts } from "./lib/startup.js";
18
+ import { loadPrompts, type SubagentConfig } from "./lib/startup.js";
19
+ import { createSubagentExtension, type SubagentDefinition } from "./lib/subagents.js";
17
20
  import type {
18
21
  HandlerMeta,
19
22
  HandlerResolver,
@@ -44,6 +47,7 @@ export function createMind(options: {
44
47
  thinkingLevel?: "off" | "minimal" | "low" | "medium" | "high" | "xhigh";
45
48
  compactionMessage?: string;
46
49
  maxContextTokens?: number;
50
+ subagents?: Record<string, SubagentConfig>;
47
51
  }): { resolve: HandlerResolver } {
48
52
  const sessions = new Map<string, PiSession>();
49
53
  const prompts = loadPrompts();
@@ -63,6 +67,48 @@ export function createMind(options: {
63
67
  const authStorage = new AuthStorage();
64
68
  const modelRegistry = new ModelRegistry(authStorage);
65
69
 
70
+ // --- Subagents (config-driven) ---
71
+
72
+ function loadSubagents(
73
+ configs: Record<string, SubagentConfig> | undefined,
74
+ ): Record<string, SubagentDefinition> {
75
+ const result: Record<string, SubagentDefinition> = {};
76
+ if (!configs) return result;
77
+ for (const [name, config] of Object.entries(configs)) {
78
+ if (typeof config.description !== "string" || typeof config.systemPrompt !== "string") {
79
+ log("mind", `subagent "${name}": missing description or systemPrompt, skipping`);
80
+ continue;
81
+ }
82
+ try {
83
+ const prompt = readFileSync(resolvePath(options.cwd, config.systemPrompt), "utf-8");
84
+ if (!prompt) {
85
+ log("mind", `subagent "${name}": ${config.systemPrompt} is empty, skipping`);
86
+ continue;
87
+ }
88
+ result[name] = {
89
+ description: config.description,
90
+ prompt,
91
+ tools: config.tools,
92
+ maxTurns: config.maxTurns,
93
+ };
94
+ } catch (err: any) {
95
+ if (err?.code === "ENOENT") {
96
+ log("mind", `subagent "${name}": ${config.systemPrompt} not found, skipping`);
97
+ } else {
98
+ log("mind", `subagent "${name}": failed to read ${config.systemPrompt}: ${err.message}`);
99
+ }
100
+ }
101
+ }
102
+ return result;
103
+ }
104
+
105
+ const subagents = loadSubagents(options.subagents);
106
+
107
+ const subagentExtension =
108
+ Object.keys(subagents).length > 0
109
+ ? createSubagentExtension(subagents, { cwd: options.cwd, model, authStorage, modelRegistry })
110
+ : undefined;
111
+
66
112
  // --- Session lifecycle ---
67
113
 
68
114
  function getOrCreateSession(name: string): PiSession {
@@ -158,6 +204,7 @@ export function createMind(options: {
158
204
  preCompactExtension,
159
205
  sessionContextExtension,
160
206
  replyInstructionsExtension,
207
+ ...(subagentExtension ? [subagentExtension] : []),
161
208
  ],
162
209
  });
163
210
  await resourceLoader.reload();
@@ -0,0 +1,150 @@
1
+ import type { Model } from "@mariozechner/pi-ai";
2
+ import {
3
+ type AuthStorage,
4
+ bashTool,
5
+ codingTools,
6
+ createAgentSession,
7
+ DefaultResourceLoader,
8
+ type ExtensionFactory,
9
+ editTool,
10
+ type ModelRegistry,
11
+ readTool,
12
+ SessionManager,
13
+ SettingsManager,
14
+ writeTool,
15
+ } from "@mariozechner/pi-coding-agent";
16
+ import { Type } from "@sinclair/typebox";
17
+ import { log } from "./logger.js";
18
+
19
+ export type SubagentDefinition = {
20
+ description: string;
21
+ prompt: string;
22
+ tools?: string[]; // e.g. ["Read", "Write", "Bash"] — defaults to all coding tools
23
+ maxTurns?: number;
24
+ };
25
+
26
+ export function createSubagentExtension(
27
+ agents: Record<string, SubagentDefinition>,
28
+ context: {
29
+ cwd: string;
30
+ model: Model<any>;
31
+ authStorage: AuthStorage;
32
+ modelRegistry: ModelRegistry;
33
+ },
34
+ ): ExtensionFactory {
35
+ return (pi) => {
36
+ for (const [name, def] of Object.entries(agents)) {
37
+ pi.registerTool({
38
+ name,
39
+ label: name.charAt(0).toUpperCase() + name.slice(1),
40
+ description: def.description,
41
+ parameters: Type.Object({
42
+ prompt: Type.String({ description: "The prompt for the subagent" }),
43
+ }),
44
+ async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
45
+ try {
46
+ const tools = resolveTools(def.tools);
47
+
48
+ const loader = new DefaultResourceLoader({
49
+ cwd: context.cwd,
50
+ systemPromptOverride: () => def.prompt,
51
+ settingsManager: SettingsManager.inMemory({}),
52
+ });
53
+ await loader.reload();
54
+
55
+ const { session } = await createAgentSession({
56
+ cwd: context.cwd,
57
+ model: context.model,
58
+ tools,
59
+ resourceLoader: loader,
60
+ sessionManager: SessionManager.inMemory(),
61
+ settingsManager: SettingsManager.inMemory({}),
62
+ authStorage: context.authStorage,
63
+ modelRegistry: context.modelRegistry,
64
+ });
65
+
66
+ const textParts: string[] = [];
67
+ let turnCount = 0;
68
+
69
+ const done = new Promise<void>((resolve, reject) => {
70
+ const timeout = setTimeout(() => {
71
+ session.abort();
72
+ reject(new Error(`Subagent "${name}" timed out after 5 minutes`));
73
+ }, 300_000);
74
+
75
+ session.subscribe((event: any) => {
76
+ if (event.type === "agent_error") {
77
+ clearTimeout(timeout);
78
+ reject(
79
+ new Error(`Subagent "${name}" error: ${event.error?.message ?? "unknown"}`),
80
+ );
81
+ return;
82
+ }
83
+ if (event.type === "turn_end") {
84
+ turnCount++;
85
+ if (def.maxTurns && turnCount >= def.maxTurns) {
86
+ session.abort();
87
+ }
88
+ }
89
+ if (event.type === "agent_end") {
90
+ clearTimeout(timeout);
91
+ for (const msg of event.messages ?? []) {
92
+ if (msg.role === "assistant" && msg.content) {
93
+ for (const block of msg.content) {
94
+ if (block.type === "text") textParts.push(block.text);
95
+ }
96
+ }
97
+ }
98
+ resolve();
99
+ }
100
+ });
101
+ });
102
+
103
+ await session.prompt(params.prompt);
104
+ await done;
105
+
106
+ log("mind", `subagent "${name}": completed after ${turnCount} turns`);
107
+
108
+ return {
109
+ content: [{ type: "text" as const, text: textParts.join("\n") || "(no output)" }],
110
+ details: {},
111
+ };
112
+ } catch (err: any) {
113
+ log("mind", `subagent "${name}" failed: ${err.message}`);
114
+ return {
115
+ content: [{ type: "text" as const, text: `[subagent error] ${err.message}` }],
116
+ details: {},
117
+ };
118
+ }
119
+ },
120
+ });
121
+ }
122
+ };
123
+ }
124
+
125
+ const TOOL_MAP: Record<string, any> = {
126
+ Read: readTool,
127
+ Write: writeTool,
128
+ Bash: bashTool,
129
+ Edit: editTool,
130
+ };
131
+
132
+ function resolveTools(names: string[] | undefined) {
133
+ if (!names) return codingTools;
134
+ const resolved = names
135
+ .map((n) => {
136
+ if (!TOOL_MAP[n]) {
137
+ log(
138
+ "mind",
139
+ `unknown subagent tool "${n}" — available: ${Object.keys(TOOL_MAP).join(", ")}`,
140
+ );
141
+ }
142
+ return TOOL_MAP[n];
143
+ })
144
+ .filter(Boolean);
145
+ if (resolved.length === 0) {
146
+ log("mind", "no valid tools resolved for subagent, falling back to all coding tools");
147
+ return codingTools;
148
+ }
149
+ return resolved;
150
+ }
@@ -31,6 +31,7 @@ const mind = createMind({
31
31
  thinkingLevel: config.thinkingLevel,
32
32
  compactionMessage: config.compactionMessage,
33
33
  maxContextTokens: config.compaction?.maxContextTokens,
34
+ subagents: config.subagents,
34
35
  });
35
36
 
36
37
  const router = createRouter({