pi-kot 0.1.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 (222) hide show
  1. package/README.md +30 -0
  2. package/bin/pi-kot.mjs +125 -0
  3. package/dist/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  4. package/dist/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  5. package/dist/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  6. package/dist/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  7. package/dist/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  8. package/dist/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  9. package/dist/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  10. package/dist/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  11. package/dist/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  12. package/dist/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  13. package/dist/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  14. package/dist/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  15. package/dist/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  16. package/dist/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  17. package/dist/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  18. package/dist/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  19. package/dist/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  20. package/dist/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  21. package/dist/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  22. package/dist/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  23. package/dist/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  24. package/dist/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  25. package/dist/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  26. package/dist/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  27. package/dist/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  28. package/dist/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  29. package/dist/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  30. package/dist/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  31. package/dist/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  32. package/dist/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  33. package/dist/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  34. package/dist/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  35. package/dist/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  36. package/dist/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  37. package/dist/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  38. package/dist/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  39. package/dist/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  40. package/dist/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  41. package/dist/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  42. package/dist/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  43. package/dist/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  44. package/dist/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  45. package/dist/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  46. package/dist/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  47. package/dist/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  48. package/dist/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  49. package/dist/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  50. package/dist/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  51. package/dist/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  52. package/dist/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  53. package/dist/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  54. package/dist/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  55. package/dist/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  56. package/dist/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  57. package/dist/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  58. package/dist/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  59. package/dist/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  60. package/dist/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  61. package/dist/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  62. package/dist/client/assets/index-UJgsBs6a.js +361 -0
  63. package/dist/client/assets/index-UJgsBs6a.js.map +1 -0
  64. package/dist/client/assets/index-ZuTc_0YY.css +1 -0
  65. package/dist/client/index.html +14 -0
  66. package/dist/server/ask-user-question/envelope.d.ts +11 -0
  67. package/dist/server/ask-user-question/envelope.d.ts.map +1 -0
  68. package/dist/server/ask-user-question/envelope.js +41 -0
  69. package/dist/server/ask-user-question/envelope.js.map +1 -0
  70. package/dist/server/ask-user-question/prompt-strings.d.ts +4 -0
  71. package/dist/server/ask-user-question/prompt-strings.d.ts.map +1 -0
  72. package/dist/server/ask-user-question/prompt-strings.js +18 -0
  73. package/dist/server/ask-user-question/prompt-strings.js.map +1 -0
  74. package/dist/server/ask-user-question/registry.d.ts +39 -0
  75. package/dist/server/ask-user-question/registry.d.ts.map +1 -0
  76. package/dist/server/ask-user-question/registry.js +124 -0
  77. package/dist/server/ask-user-question/registry.js.map +1 -0
  78. package/dist/server/ask-user-question/tool.d.ts +4 -0
  79. package/dist/server/ask-user-question/tool.d.ts.map +1 -0
  80. package/dist/server/ask-user-question/tool.js +68 -0
  81. package/dist/server/ask-user-question/tool.js.map +1 -0
  82. package/dist/server/ask-user-question/types.d.ts +50 -0
  83. package/dist/server/ask-user-question/types.d.ts.map +1 -0
  84. package/dist/server/ask-user-question/types.js +7 -0
  85. package/dist/server/ask-user-question/types.js.map +1 -0
  86. package/dist/server/ask-user-question/validate.d.ts +3 -0
  87. package/dist/server/ask-user-question/validate.d.ts.map +1 -0
  88. package/dist/server/ask-user-question/validate.js +67 -0
  89. package/dist/server/ask-user-question/validate.js.map +1 -0
  90. package/dist/server/config-manager.d.ts +47 -0
  91. package/dist/server/config-manager.d.ts.map +1 -0
  92. package/dist/server/config-manager.js +182 -0
  93. package/dist/server/config-manager.js.map +1 -0
  94. package/dist/server/config.d.ts +20 -0
  95. package/dist/server/config.d.ts.map +1 -0
  96. package/dist/server/config.js +58 -0
  97. package/dist/server/config.js.map +1 -0
  98. package/dist/server/extension-manager.d.ts +70 -0
  99. package/dist/server/extension-manager.d.ts.map +1 -0
  100. package/dist/server/extension-manager.js +401 -0
  101. package/dist/server/extension-manager.js.map +1 -0
  102. package/dist/server/extension-ui-bridge.d.ts +35 -0
  103. package/dist/server/extension-ui-bridge.d.ts.map +1 -0
  104. package/dist/server/extension-ui-bridge.js +228 -0
  105. package/dist/server/extension-ui-bridge.js.map +1 -0
  106. package/dist/server/file-manager.d.ts +79 -0
  107. package/dist/server/file-manager.d.ts.map +1 -0
  108. package/dist/server/file-manager.js +526 -0
  109. package/dist/server/file-manager.js.map +1 -0
  110. package/dist/server/file-searcher.d.ts +29 -0
  111. package/dist/server/file-searcher.d.ts.map +1 -0
  112. package/dist/server/file-searcher.js +318 -0
  113. package/dist/server/file-searcher.js.map +1 -0
  114. package/dist/server/git-clone.d.ts +56 -0
  115. package/dist/server/git-clone.d.ts.map +1 -0
  116. package/dist/server/git-clone.js +173 -0
  117. package/dist/server/git-clone.js.map +1 -0
  118. package/dist/server/index.d.ts +22 -0
  119. package/dist/server/index.d.ts.map +1 -0
  120. package/dist/server/index.js +196 -0
  121. package/dist/server/index.js.map +1 -0
  122. package/dist/server/lifecycle-notifications.d.ts +28 -0
  123. package/dist/server/lifecycle-notifications.d.ts.map +1 -0
  124. package/dist/server/lifecycle-notifications.js +38 -0
  125. package/dist/server/lifecycle-notifications.js.map +1 -0
  126. package/dist/server/orchestration/config.d.ts +5 -0
  127. package/dist/server/orchestration/config.d.ts.map +1 -0
  128. package/dist/server/orchestration/config.js +35 -0
  129. package/dist/server/orchestration/config.js.map +1 -0
  130. package/dist/server/orchestration/event-bridge.d.ts +32 -0
  131. package/dist/server/orchestration/event-bridge.d.ts.map +1 -0
  132. package/dist/server/orchestration/event-bridge.js +110 -0
  133. package/dist/server/orchestration/event-bridge.js.map +1 -0
  134. package/dist/server/orchestration/inbox.d.ts +9 -0
  135. package/dist/server/orchestration/inbox.d.ts.map +1 -0
  136. package/dist/server/orchestration/inbox.js +186 -0
  137. package/dist/server/orchestration/inbox.js.map +1 -0
  138. package/dist/server/orchestration/init.d.ts +2 -0
  139. package/dist/server/orchestration/init.d.ts.map +1 -0
  140. package/dist/server/orchestration/init.js +22 -0
  141. package/dist/server/orchestration/init.js.map +1 -0
  142. package/dist/server/orchestration/store.d.ts +33 -0
  143. package/dist/server/orchestration/store.d.ts.map +1 -0
  144. package/dist/server/orchestration/store.js +331 -0
  145. package/dist/server/orchestration/store.js.map +1 -0
  146. package/dist/server/orchestration/tools.d.ts +15 -0
  147. package/dist/server/orchestration/tools.d.ts.map +1 -0
  148. package/dist/server/orchestration/tools.js +621 -0
  149. package/dist/server/orchestration/tools.js.map +1 -0
  150. package/dist/server/orchestration/types.d.ts +68 -0
  151. package/dist/server/orchestration/types.d.ts.map +1 -0
  152. package/dist/server/orchestration/types.js +43 -0
  153. package/dist/server/orchestration/types.js.map +1 -0
  154. package/dist/server/orchestration/worker-lifecycle.d.ts +15 -0
  155. package/dist/server/orchestration/worker-lifecycle.d.ts.map +1 -0
  156. package/dist/server/orchestration/worker-lifecycle.js +45 -0
  157. package/dist/server/orchestration/worker-lifecycle.js.map +1 -0
  158. package/dist/server/project-manager.d.ts +25 -0
  159. package/dist/server/project-manager.d.ts.map +1 -0
  160. package/dist/server/project-manager.js +157 -0
  161. package/dist/server/project-manager.js.map +1 -0
  162. package/dist/server/routes/_schemas.d.ts +16 -0
  163. package/dist/server/routes/_schemas.d.ts.map +1 -0
  164. package/dist/server/routes/_schemas.js +12 -0
  165. package/dist/server/routes/_schemas.js.map +1 -0
  166. package/dist/server/routes/ask-user-question.d.ts +3 -0
  167. package/dist/server/routes/ask-user-question.d.ts.map +1 -0
  168. package/dist/server/routes/ask-user-question.js +105 -0
  169. package/dist/server/routes/ask-user-question.js.map +1 -0
  170. package/dist/server/routes/auth.d.ts +7 -0
  171. package/dist/server/routes/auth.d.ts.map +1 -0
  172. package/dist/server/routes/auth.js +126 -0
  173. package/dist/server/routes/auth.js.map +1 -0
  174. package/dist/server/routes/config.d.ts +3 -0
  175. package/dist/server/routes/config.d.ts.map +1 -0
  176. package/dist/server/routes/config.js +203 -0
  177. package/dist/server/routes/config.js.map +1 -0
  178. package/dist/server/routes/control.d.ts +3 -0
  179. package/dist/server/routes/control.d.ts.map +1 -0
  180. package/dist/server/routes/control.js +180 -0
  181. package/dist/server/routes/control.js.map +1 -0
  182. package/dist/server/routes/extension-commands.d.ts +22 -0
  183. package/dist/server/routes/extension-commands.d.ts.map +1 -0
  184. package/dist/server/routes/extension-commands.js +178 -0
  185. package/dist/server/routes/extension-commands.js.map +1 -0
  186. package/dist/server/routes/extensions.d.ts +8 -0
  187. package/dist/server/routes/extensions.d.ts.map +1 -0
  188. package/dist/server/routes/extensions.js +169 -0
  189. package/dist/server/routes/extensions.js.map +1 -0
  190. package/dist/server/routes/files.d.ts +3 -0
  191. package/dist/server/routes/files.d.ts.map +1 -0
  192. package/dist/server/routes/files.js +549 -0
  193. package/dist/server/routes/files.js.map +1 -0
  194. package/dist/server/routes/orchestration.d.ts +3 -0
  195. package/dist/server/routes/orchestration.d.ts.map +1 -0
  196. package/dist/server/routes/orchestration.js +251 -0
  197. package/dist/server/routes/orchestration.js.map +1 -0
  198. package/dist/server/routes/projects.d.ts +3 -0
  199. package/dist/server/routes/projects.d.ts.map +1 -0
  200. package/dist/server/routes/projects.js +412 -0
  201. package/dist/server/routes/projects.js.map +1 -0
  202. package/dist/server/routes/prompt.d.ts +3 -0
  203. package/dist/server/routes/prompt.d.ts.map +1 -0
  204. package/dist/server/routes/prompt.js +192 -0
  205. package/dist/server/routes/prompt.js.map +1 -0
  206. package/dist/server/routes/sessions.d.ts +3 -0
  207. package/dist/server/routes/sessions.d.ts.map +1 -0
  208. package/dist/server/routes/sessions.js +581 -0
  209. package/dist/server/routes/sessions.js.map +1 -0
  210. package/dist/server/routes/stream.d.ts +3 -0
  211. package/dist/server/routes/stream.d.ts.map +1 -0
  212. package/dist/server/routes/stream.js +109 -0
  213. package/dist/server/routes/stream.js.map +1 -0
  214. package/dist/server/session-registry.d.ts +151 -0
  215. package/dist/server/session-registry.d.ts.map +1 -0
  216. package/dist/server/session-registry.js +655 -0
  217. package/dist/server/session-registry.js.map +1 -0
  218. package/dist/server/sse-bridge.d.ts +31 -0
  219. package/dist/server/sse-bridge.d.ts.map +1 -0
  220. package/dist/server/sse-bridge.js +126 -0
  221. package/dist/server/sse-bridge.js.map +1 -0
  222. package/package.json +69 -0
@@ -0,0 +1 @@
1
+ @font-face{font-display:block;font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2)format("woff2"),url(/assets/KaTeX_AMS-Regular-DMm9YOAa.woff)format("woff"),url(/assets/KaTeX_AMS-Regular-DRggAlZN.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2)format("woff2"),url(/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff)format("woff"),url(/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2)format("woff2"),url(/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff)format("woff"),url(/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2)format("woff2"),url(/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff)format("woff"),url(/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2)format("woff2"),url(/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff)format("woff"),url(/assets/KaTeX_Fraktur-Regular-CB_wures.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Main-Bold-Cx986IdX.woff2)format("woff2"),url(/assets/KaTeX_Main-Bold-Jm3AIy58.woff)format("woff"),url(/assets/KaTeX_Main-Bold-waoOVXN0.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2)format("woff2"),url(/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff)format("woff"),url(/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2)format("woff2"),url(/assets/KaTeX_Main-Italic-BMLOBm91.woff)format("woff"),url(/assets/KaTeX_Main-Italic-3WenGoN9.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Main-Regular-B22Nviop.woff2)format("woff2"),url(/assets/KaTeX_Main-Regular-Dr94JaBh.woff)format("woff"),url(/assets/KaTeX_Main-Regular-ypZvNtVU.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2)format("woff2"),url(/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff)format("woff"),url(/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(/assets/KaTeX_Math-Italic-t53AETM-.woff2)format("woff2"),url(/assets/KaTeX_Math-Italic-DA0__PXp.woff)format("woff"),url(/assets/KaTeX_Math-Italic-flOr_0UB.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:700;src:url(/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2)format("woff2"),url(/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff)format("woff"),url(/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:italic;font-weight:400;src:url(/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2)format("woff2"),url(/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff)format("woff"),url(/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:400;src:url(/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2)format("woff2"),url(/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff)format("woff"),url(/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Script-Regular-D3wIWfF6.woff2)format("woff2"),url(/assets/KaTeX_Script-Regular-D5yQViql.woff)format("woff"),url(/assets/KaTeX_Script-Regular-C5JkGWo-.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2)format("woff2"),url(/assets/KaTeX_Size1-Regular-C195tn64.woff)format("woff"),url(/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2)format("woff2"),url(/assets/KaTeX_Size2-Regular-oD1tc_U0.woff)format("woff"),url(/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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)format("woff2"),url(/assets/KaTeX_Size3-Regular-CTq5MqoE.woff)format("woff"),url(/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2)format("woff2"),url(/assets/KaTeX_Size4-Regular-BF-4gkZK.woff)format("woff"),url(/assets/KaTeX_Size4-Regular-DWFBv043.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2)format("woff2"),url(/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff)format("woff"),url(/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf)format("truetype")}.katex{text-indent:0;text-rendering:auto;font:1.21em/1.2 KaTeX_Main,Times New Roman,serif;position:relative}.katex *{border-color:currentColor;-ms-high-contrast-adjust:none!important}.katex .katex-version:after{content:"0.17.0"}.katex .katex-mathml{clip-path:inset(50%);border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.katex .katex-html>.newline{display:block}.katex .base{white-space:nowrap;width:min-content;position:relative}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .mathsfit,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;table-layout:fixed;display:inline-table}.katex .vlist-r{display:table-row}.katex .vlist{vertical-align:bottom;display:table-cell;position:relative}.katex .vlist>span{height:0;display:block;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{width:0;overflow:hidden}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{vertical-align:bottom;width:2px;min-width:2px;font-size:1px;display:table-cell}.katex .vbox{flex-direction:column;align-items:baseline;display:inline-flex}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{flex-direction:row;display:inline-flex}.katex .thinbox{width:0;max-width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;width:100%;display:inline-block}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .smash{line-height:0;display:inline}.katex .clap,.katex .llap,.katex .rlap{width:0;position:relative}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;width:100%;display:inline-block}.katex .hdashline{border-bottom-style:dashed;width:100%;display:inline-block}.katex .sqrt>.root{margin-left:.277778em;margin-right:-.555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.833333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.714286em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.857143em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14286em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71429em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96286em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55429em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.416667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.583333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.833333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.347222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.416667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.486111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.694444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.833333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44028em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.289352em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.347222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.405093em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.462963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.520833em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.578704em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.694444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.833333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.289296em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.337512em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.385728em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.433944em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.578592em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.694311em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.833173em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.200965em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.241158em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.281351em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.321543em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.361736em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.401929em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.482315em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.578778em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.694534em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.833601em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{width:.12em;display:inline-block}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{min-width:1px;display:inline-block}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;height:inherit;width:100%;display:block;position:absolute}.katex svg path{stroke:none}.katex svg{fill-rule:nonzero;fill-opacity:1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1}.katex img{border-style:none;min-width:0;max-width:none;min-height:0;max-height:none}.katex .stretchy{width:100%;display:block;position:relative;overflow:hidden}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{width:100%;position:relative;overflow:hidden}.katex .halfarrow-left{width:50.2%;position:absolute;left:0;overflow:hidden}.katex .halfarrow-right{width:50.2%;position:absolute;right:0;overflow:hidden}.katex .brace-left{width:25.1%;position:absolute;left:0;overflow:hidden}.katex .brace-center{width:50%;position:absolute;left:25%;overflow:hidden}.katex .brace-right{width:25.1%;position:absolute;right:0;overflow:hidden}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{box-sizing:border-box;border:.04em solid}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{box-sizing:border-box;border-top:.049em solid;border-right:.049em solid;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{text-align:left;display:inline-block;position:absolute;right:calc(50% + .3em)}.katex .cd-label-right{text-align:right;display:inline-block;position:absolute;left:calc(50% + .3em)}.katex-display{text-align:center;margin:1em 0;display:block}.katex-display>.katex{text-align:center;white-space:nowrap;display:block}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{text-align:left;padding-left:2em}body{counter-reset:katexEqnNo mmlEqnNo}*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--radius-xs:4px;--radius-sm:6px;--radius-md:10px;--radius:16px;--radius-lg:24px;--radius-pill:100px;--sidebar-width:260px;--ease:cubic-bezier(.4, 0, .2, 1);--spring:cubic-bezier(.34, 1.56, .64, 1);--duration:.2s;--blur:24px;--blur-heavy:48px;--success:#34d399;--error:#f87171;--warning:#fbbf24}:root,:root[data-theme=night]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg-solid:#212121;--header-bg:#37373cbf;--sidebar-bg:#282826f2;--bg-glass:#ffffff0a;--bg-glass-hover:#ffffff0f;--bg-glass-active:#ffffff14;--bg-glass-strong:#ffffff0d;--bg-frosted:#212121d9;--text-primary:#ffffffe0;--text-secondary:#ffffff80;--text-dim:#ffffff4d;--text-ghost:#ffffff1a;--accent:#a0a0a0;--accent-glow:#ffffff0f;--accent-subtle:#ffffff0a;--accent-text:silver;--user-bubble:#ffffff0f;--user-bubble-text:var(--text-primary);--user-bubble-border:#ffffff14;--tool-accent:#777;--tool-accent-text:#999;--tool-bg:#ffffff08;--tool-border:#ffffff0f;--thinking-accent:#666;--thinking-accent-text:#888;--thinking-bg:#ffffff05;--border:#ffffff0f;--border-hover:#ffffff1a;--border-bright:#ffffff24;--input-bg:#ffffff0a;--input-border:#ffffff14;--input-focus-border:var(--accent);--scrollbar-thumb:#ffffff1a;--scrollbar-thumb-hover:#ffffff24}:root[data-theme=midnight]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg-solid:#000;--header-bg:#19191cb8;--sidebar-bg:#121211f2;--bg-glass:#ffffff08;--bg-glass-hover:#ffffff0d;--bg-glass-active:#ffffff12;--bg-glass-strong:#ffffff0a;--bg-frosted:#000000e6;--text-primary:#ffffffd9;--text-secondary:#ffffff73;--text-dim:#ffffff52;--accent:#6a7a88;--accent-glow:#6a7a881a;--accent-subtle:#6a7a880f;--accent-text:#8a9aa8;--user-bubble:#ffffff14;--user-bubble-text:var(--text-primary);--user-bubble-border:#ffffff1a;--tool-accent:#4a5565;--tool-accent-text:#8a95a5;--tool-bg:#ffffff0f;--tool-border:#ffffff0a;--thinking-accent:#4a5a72;--thinking-accent-text:#8a9ab8;--thinking-bg:#3c4b6e1f;--border:#ffffff0a;--border-hover:#ffffff14;--border-bright:#ffffff1f;--input-bg:#ffffff08;--input-border:#ffffff0f;--input-focus-border:var(--accent);--scrollbar-thumb:#ffffff0f;--scrollbar-thumb-hover:#ffffff1a}:root[data-theme=dawn]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg-solid:#1a1d26;--header-bg:#2d3037b8;--sidebar-bg:#1e222cf2;--bg-glass:#ffffff0a;--bg-glass-hover:#ffffff12;--bg-glass-active:#ffffff17;--bg-glass-strong:#ffffff0f;--bg-frosted:#1a1d26c7;--text-primary:#ffffffe6;--text-secondary:#ffffff8c;--text-dim:#ffffff59;--accent:#7a8ab0;--accent-glow:#7a8ab033;--accent-subtle:#7a8ab01a;--accent-text:#a0b4d8;--user-bubble:#7a8ab01a;--user-bubble-text:var(--text-primary);--user-bubble-border:#7a8ab026;--tool-accent:#6a5a80;--tool-accent-text:#a090b8;--tool-bg:#6a5a8012;--tool-border:#6a5a801f;--thinking-accent:#5a7a9a;--thinking-accent-text:#8ab4d8;--thinking-bg:#5a7a9a12;--border:#ffffff14;--border-hover:#ffffff21;--border-bright:#ffffff30;--input-bg:#ffffff0d;--input-border:#ffffff14;--input-focus-border:var(--accent);--scrollbar-thumb:#ffffff1a;--scrollbar-thumb-hover:#ffffff26;--success:#34d399}:root[data-theme=flexoki-dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg-solid:#171515;--header-bg:#2a2826c7;--sidebar-bg:#1c1b1af2;--bg-glass:#ffffff0a;--bg-glass-hover:#ffffff0f;--bg-glass-active:#ffffff17;--bg-glass-strong:#ffffff0d;--bg-frosted:#171515d1;--text-primary:#cecdc3eb;--text-secondary:#807e79d9;--text-dim:#807e7980;--text-ghost:#807e7933;--accent:#da702c;--accent-glow:#da702c2e;--accent-subtle:#da702c14;--accent-text:#f9ae77;--user-bubble:#f7f4ec;--user-bubble-text:#171515;--user-bubble-border:transparent;--tool-accent:#4385be;--tool-accent-text:#6aa4d4;--tool-bg:#4385be1a;--tool-border:#4385be33;--thinking-accent:#a0af54;--thinking-accent-text:#bccc6a;--thinking-bg:#a0af5414;--border:#343331cc;--border-hover:#403e3ce6;--border-bright:#cecdc31f;--input-bg:#00000040;--input-border:#cecdc30f;--input-focus-border:var(--accent);--scrollbar-thumb:#cecdc314;--scrollbar-thumb-hover:#cecdc324;--success:#a0af54}:root[data-theme=flexoki-light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg-solid:#fffdf4;--header-bg:#f2f0e8b8;--sidebar-bg:#f6f5eef2;--bg-glass:#00000008;--bg-glass-hover:#0000000f;--bg-glass-active:#00000017;--bg-glass-strong:#0000000a;--bg-frosted:#fffdf4d1;--text-primary:#100f0fe6;--text-secondary:#686663d9;--text-dim:#68666373;--accent:#bc5215;--accent-glow:#bc521526;--accent-subtle:#bc52150f;--accent-text:#da702c;--user-bubble:#f7f4ec;--user-bubble-text:#100f0f;--user-bubble-border:transparent;--tool-accent:#205ea6;--tool-accent-text:#4385be;--tool-bg:#205ea612;--tool-border:#205ea624;--thinking-accent:#66800b;--thinking-accent-text:#879a39;--thinking-bg:#66800b12;--border:#dad8cecc;--border-hover:#cecdc3e6;--border-bright:#100f0f1f;--input-bg:#00000008;--input-border:#100f0f14;--input-focus-border:var(--accent);--scrollbar-thumb:#100f0f1a;--scrollbar-thumb-hover:#100f0f29;--success:#879a39}:root[data-theme=clean]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg-solid:#fff;--header-bg:#f0f0f4b8;--sidebar-bg:#f2f2f7f2;--bg-glass:#00000008;--bg-glass-hover:#0000000f;--bg-glass-active:#00000017;--bg-glass-strong:#0000000a;--bg-frosted:#ffffffd1;--text-primary:#000000e0;--text-secondary:#0000008c;--text-dim:#00000059;--accent:#0580c4;--accent-glow:#0580c426;--accent-subtle:#0580c40f;--accent-text:#0470b0;--user-bubble:#2a96d6;--user-bubble-text:white;--user-bubble-border:transparent;--tool-accent:#007aff;--tool-accent-text:#007aff;--tool-bg:#007aff0d;--tool-border:#007aff1f;--thinking-accent:#5ac8fa;--thinking-accent-text:#2a8abf;--thinking-bg:#5ac8fa0f;--border:#00000014;--border-hover:#00000024;--border-bright:#0003;--input-bg:#00000008;--input-border:#0000001a;--input-focus-border:var(--accent);--scrollbar-thumb:#0000001f;--scrollbar-thumb-hover:#0000002e;--success:#34c759}:root[data-theme=terracotta]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg-solid:#f4f1ec;--header-bg:#e8e4deb8;--sidebar-bg:#f0eae0f2;--bg-glass:#f4f1ec99;--bg-glass-hover:#0000000f;--bg-glass-active:#0000001a;--bg-glass-strong:#f4f1ecb3;--bg-frosted:#f4f1eccc;--text-primary:#000000eb;--text-secondary:#0000009e;--text-dim:#00000061;--accent:#b06a48;--accent-glow:#b06a4826;--accent-subtle:#b06a4814;--accent-text:#a05e3e;--user-bubble:#b06a48;--user-bubble-text:white;--user-bubble-border:transparent;--tool-accent:#5c2860;--tool-accent-text:#6b3570;--tool-bg:#5c28600f;--tool-border:#5c28601f;--thinking-accent:#3a6a9b;--thinking-accent-text:#4a80b0;--thinking-bg:#3a6a9b0f;--border:#0000000f;--border-hover:#0000001a;--border-bright:#00000026;--input-bg:#00000008;--input-border:#00000014;--input-focus-border:var(--accent);--scrollbar-thumb:#0000001a;--scrollbar-thumb-hover:#00000029;--success:#1a8a5a}:root[data-theme=sage]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg-solid:#f0f2ec;--header-bg:#e4e6e0b8;--sidebar-bg:#e8eee2f2;--bg-glass:#f0f2ec99;--bg-glass-hover:#0000000f;--bg-glass-active:#0000001a;--bg-glass-strong:#f0f2ecb3;--bg-frosted:#f0f2eccc;--text-primary:#000000e6;--text-secondary:#00000094;--text-dim:#00000059;--accent:#6a7d5a;--accent-glow:#6a7d5a26;--accent-subtle:#6a7d5a14;--accent-text:#5a6d4a;--user-bubble:#6a7d5a;--user-bubble-text:white;--user-bubble-border:transparent;--tool-accent:#4a3860;--tool-accent-text:#5c4870;--tool-bg:#4a38600f;--tool-border:#4a38601f;--thinking-accent:#3a6a7a;--thinking-accent-text:#4a808a;--thinking-bg:#3a6a7a0f;--border:#0000000f;--border-hover:#0000001a;--border-bright:#00000026;--input-bg:#00000008;--input-border:#00000014;--input-focus-border:var(--accent);--scrollbar-thumb:#0000001a;--scrollbar-thumb-hover:#00000029;--success:#2a8a52}:root[data-theme=monokai]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg-solid:#272822;--header-bg:#373830c7;--sidebar-bg:#1e1f1cf2;--bg-glass:#ffffff0a;--bg-glass-hover:#ffffff0f;--bg-glass-active:#ffffff17;--bg-glass-strong:#ffffff0d;--bg-frosted:#272822d1;--text-primary:#f8f8f2eb;--text-secondary:#f8f8f28c;--text-dim:#f8f8f252;--text-ghost:#f8f8f21a;--accent:#ae81ff;--accent-glow:#ae81ff26;--accent-subtle:#ae81ff14;--accent-text:#c6a8ff;--user-bubble:#ae81ff;--user-bubble-text:#fff;--user-bubble-border:transparent;--tool-accent:#f92672;--tool-accent-text:#ff6b9d;--tool-bg:#f9267214;--tool-border:#f9267226;--thinking-accent:#a6e22e;--thinking-accent-text:#c4f066;--thinking-bg:#a6e22e14;--border:#ffffff0f;--border-hover:#ffffff1c;--border-bright:#ffffff29;--input-bg:#00000026;--input-border:#ffffff14;--input-focus-border:var(--accent);--scrollbar-thumb:#ffffff14;--scrollbar-thumb-hover:#ffffff21;--success:#a6e22e}:root[data-theme=dracula]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg-solid:#282a36;--header-bg:#373944bf;--sidebar-bg:#1e202cf2;--bg-glass:#ffffff0a;--bg-glass-hover:#ffffff0f;--bg-glass-active:#ffffff17;--bg-glass-strong:#ffffff0d;--bg-frosted:#282a36d1;--text-primary:#f8f8f2eb;--text-secondary:#f8f8f28c;--text-dim:#f8f8f252;--text-ghost:#f8f8f21a;--accent:#bd93f9;--accent-glow:#bd93f926;--accent-subtle:#bd93f914;--accent-text:#d4b8ff;--user-bubble:#bd93f9;--user-bubble-text:#fff;--user-bubble-border:transparent;--tool-accent:#ff79c6;--tool-accent-text:#ffa8da;--tool-bg:#ff79c614;--tool-border:#ff79c626;--thinking-accent:#50fa7b;--thinking-accent-text:#7fffa2;--thinking-bg:#50fa7b14;--border:#ffffff0f;--border-hover:#ffffff1c;--border-bright:#ffffff29;--input-bg:#00000026;--input-border:#ffffff14;--input-focus-border:var(--accent);--scrollbar-thumb:#ffffff14;--scrollbar-thumb-hover:#ffffff21;--success:#50fa7b}:root[data-theme=nord]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg-solid:#2e3440;--header-bg:#3c414cbf;--sidebar-bg:#242a36f2;--bg-glass:#ffffff0a;--bg-glass-hover:#ffffff0f;--bg-glass-active:#ffffff17;--bg-glass-strong:#ffffff0d;--bg-frosted:#2e3440d1;--text-primary:#eceff4eb;--text-secondary:#eceff48c;--text-dim:#eceff452;--text-ghost:#eceff41a;--accent:#88c0d0;--accent-glow:#88c0d026;--accent-subtle:#88c0d014;--accent-text:#a6d5e0;--user-bubble:#88c0d0;--user-bubble-text:#2e3440;--user-bubble-border:transparent;--tool-accent:#81a1c1;--tool-accent-text:#a5bfda;--tool-bg:#81a1c114;--tool-border:#81a1c124;--thinking-accent:#5e81ac;--thinking-accent-text:#7ea0c8;--thinking-bg:#5e81ac1a;--border:#ffffff0d;--border-hover:#ffffff17;--border-bright:#ffffff21;--input-bg:#0000001f;--input-border:#ffffff12;--input-focus-border:var(--accent);--scrollbar-thumb:#ffffff12;--scrollbar-thumb-hover:#ffffff1c;--success:#a3be8c}body{background:var(--bg-solid);color:var(--text-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,SF Pro Display,SF Pro Text,Helvetica Neue,sans-serif;font-size:16px;line-height:1.6}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-hover)}@keyframes blink{0%,50%{opacity:1}51%,to{opacity:0}}@keyframes msgIn{0%{opacity:0;transform:translateY(8px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.app-layout{height:100dvh;display:flex;overflow:hidden}.sidebar{width:var(--sidebar-width);min-width:var(--sidebar-width);background:var(--sidebar-bg);-webkit-backdrop-filter:blur(var(--blur-heavy)) saturate(1.5);backdrop-filter:blur(var(--blur-heavy)) saturate(1.5);border-right:1px solid var(--border);transition:left .3s var(--ease);z-index:100;will-change:transform;flex-direction:column;display:flex;position:fixed;top:50px;bottom:0;left:0;overflow-y:auto;box-shadow:4px 0 32px #0000002e}.sidebar.collapsed{left:calc(var(--sidebar-width) * -1);box-shadow:none}.sidebar-header{color:var(--accent-text);letter-spacing:-.02em;align-items:center;padding:16px 16px 12px;font-size:16px;font-weight:700;display:flex}.project-list{flex:1;padding:0 8px 8px;overflow-y:auto}.project-group{margin-bottom:2px}.project-header{border-radius:var(--radius);cursor:pointer;color:var(--text-secondary);transition:all var(--duration) var(--ease);-webkit-user-select:none;user-select:none;align-items:center;padding:8px 10px;font-size:13px;font-weight:600;display:flex}.project-header:hover{background:var(--bg-glass-hover);color:var(--text-primary)}.project-header.active{background:var(--accent-subtle);color:var(--accent-text)}.project-chevron{opacity:.6;width:16px;transition:transform .15s var(--ease);font-size:10px;display:inline-flex}.project-name{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.project-count{opacity:.5;text-align:right;min-width:16px;margin-left:6px;font-size:11px}.project-sublist{flex:unset;padding:0 0 2px 24px}.project-sublist .session-item{border-radius:var(--radius-sm);cursor:pointer;color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;transition:all var(--duration) var(--ease);margin-bottom:1px;padding:8px 12px;font-size:14px;overflow:hidden}.project-sublist .session-item:hover{background:var(--bg-glass-hover);color:var(--text-primary)}.project-sublist .session-item.active{background:var(--accent-subtle);color:var(--accent-text);font-weight:600}.session-name{text-overflow:ellipsis;overflow:hidden}.session-rename-input{border-radius:var(--radius-sm);border:1px solid var(--accent);background:var(--input-bg);width:100%;color:var(--text-primary);box-sizing:border-box;outline:none;padding:2px 6px;font-family:inherit;font-size:12px}.session-rename-input:focus{border-color:var(--input-focus-border);box-shadow:0 0 0 2px var(--accent-glow)}.session-item{position:relative}.session-archive-btn{color:var(--text-dim);cursor:pointer;border-radius:var(--radius-xs);transition:color var(--duration) var(--ease);background:0 0;border:none;padding:2px 4px;font-size:11px;line-height:1;display:none;position:absolute;top:50%;right:4px;transform:translateY(-50%)}.session-archive-btn:hover{color:var(--error)}.session-item:hover .session-archive-btn{display:inline-block}.session-restore-btn{color:var(--accent);cursor:pointer;border-radius:var(--radius-xs);background:0 0;border:none;padding:2px 4px;font-size:14px;line-height:1;display:none;position:absolute;top:50%;right:4px;transform:translateY(-50%)}.session-item.archived:hover .session-restore-btn{display:inline-block}.archived-toggle{border-radius:var(--radius);cursor:pointer;color:var(--text-dim);transition:all var(--duration) var(--ease);-webkit-user-select:none;user-select:none;align-items:center;margin:4px 8px;padding:6px 10px;font-size:13px;font-weight:500;display:flex}.archived-toggle:hover{background:var(--bg-glass-hover);color:var(--text-secondary)}.archived-list{border-bottom:1px solid var(--border);margin-bottom:4px;padding-bottom:8px}.archived-status{color:var(--text-dim);padding:6px 10px 6px 24px;font-size:11px}.new-session-mini{border-radius:var(--radius-sm);border:1px dashed var(--border);width:calc(100% - 8px);color:var(--text-tertiary);cursor:pointer;transition:all var(--duration) var(--ease);text-align:left;background:0 0;margin:4px 4px 0;padding:5px 10px;font-family:inherit;font-size:11px;font-weight:500;display:block}.new-session-mini:hover{background:var(--bg-glass-hover);border-color:var(--accent);color:var(--accent-text)}.new-session-inline{color:var(--text-tertiary);cursor:pointer;border-radius:var(--radius-sm);transition:all var(--duration) var(--ease);opacity:0;background:0 0;border:none;margin-left:auto;padding:0 4px;font-size:16px;font-weight:600;line-height:1}.project-header:hover .new-session-inline{opacity:1}.new-session-inline:hover{color:var(--accent-text);background:var(--bg-glass-hover)}.project-remove-btn{color:var(--text-tertiary);cursor:pointer;border-radius:var(--radius-sm);transition:all var(--duration) var(--ease);opacity:0;background:0 0;border:none;margin-left:2px;padding:0 4px;font-size:12px;font-weight:400;line-height:1}.project-header:hover .project-remove-btn{opacity:1}.project-remove-btn:hover{color:#e06c75;background:var(--bg-glass-hover)}.sidebar-actions{display:none}.sidebar-footer{border-top:1px solid var(--border);padding:8px}.add-project-toggle{border-radius:var(--radius);border:1px dashed var(--border);width:100%;color:var(--text-tertiary);cursor:pointer;transition:all var(--duration) var(--ease);text-align:center;background:0 0;padding:8px 10px;font-family:inherit;font-size:12px;font-weight:500}.add-project-toggle:hover{background:var(--bg-glass-hover);border-color:var(--accent);color:var(--accent-text)}.add-project-form{flex-direction:column;gap:6px;display:flex}.add-project-input{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-glass);width:100%;color:var(--text-primary);transition:border-color var(--duration) var(--ease);box-sizing:border-box;outline:none;padding:7px 10px;font-family:inherit;font-size:12px}.add-project-input:focus{border-color:var(--accent)}.add-project-input::placeholder{color:var(--text-dim)}.path-suggestions{z-index:100;background:var(--header-bg);-webkit-backdrop-filter:blur(40px)saturate(1.5);backdrop-filter:blur(40px)saturate(1.5);border:1px solid var(--border);border-radius:var(--radius-sm);max-height:240px;margin-bottom:4px;padding:4px 0;position:absolute;bottom:100%;left:0;right:0;overflow-y:auto;box-shadow:0 -4px 12px #0000004d}.path-suggestion-item{cursor:pointer;color:var(--text-secondary);padding:6px 10px;font-family:SF Mono,Menlo,Monaco,monospace;font-size:12px;transition:background .1s,color .1s}.path-suggestion-item:hover,.path-suggestion-item.highlighted{background:var(--bg-glass-active);color:var(--text-primary)}.add-project-actions{gap:6px;display:flex}.add-project-btn{border-radius:var(--radius-sm);background:var(--accent);color:var(--accent-text);cursor:pointer;transition:opacity var(--duration) var(--ease);border:none;flex:1;padding:6px 10px;font-family:inherit;font-size:12px;font-weight:600}.add-project-btn:hover{opacity:.85}.add-project-cancel{border-radius:var(--radius-sm);border:1px solid var(--border);color:var(--text-secondary);cursor:pointer;transition:all var(--duration) var(--ease);background:0 0;padding:6px 10px;font-family:inherit;font-size:12px}.add-project-cancel:hover{background:var(--bg-glass-hover);color:var(--text-primary)}.clone-mode-toggle{gap:2px;margin-bottom:6px;display:flex}.clone-mode-btn{border-radius:var(--radius-sm);border:1px solid var(--border);color:var(--text-tertiary);cursor:pointer;transition:all var(--duration) var(--ease);background:0 0;flex:1;padding:5px 8px;font-family:inherit;font-size:11px;font-weight:500}.clone-mode-btn:hover{background:var(--bg-glass-hover);color:var(--text-primary)}.clone-mode-btn.active{background:var(--accent-subtle);border-color:var(--accent);color:var(--accent-text);font-weight:600}.clone-progress{border-radius:var(--radius-sm);background:#0003;max-height:120px;padding:6px 8px;font-family:SF Mono,Menlo,Monaco,monospace;font-size:10px;line-height:1.5;overflow-y:auto}.clone-progress-line{white-space:nowrap;text-overflow:ellipsis;color:var(--text-dim);overflow:hidden}.new-session-btn{border-radius:var(--radius-md);border:1px dashed var(--border-hover);background:var(--bg-glass);width:100%;color:var(--accent-text);cursor:pointer;transition:all var(--duration) var(--ease);padding:10px;font-family:inherit;font-size:13px;font-weight:600}.new-session-btn:hover{background:var(--bg-glass-hover);border-color:var(--accent)}.new-session-btn:active{transform:scale(.98)}.session-list{flex:1;padding:4px 8px;overflow-y:auto}.session-item{border-radius:var(--radius);cursor:pointer;color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;transition:all var(--duration) var(--ease);margin-bottom:2px;padding:10px 12px;font-size:13px;overflow:hidden}.session-item:hover{background:var(--bg-glass-hover);color:var(--text-primary)}.session-item.active{background:var(--accent-subtle);color:var(--accent-text);font-weight:600}.main-area{flex-direction:column;flex:1;min-width:0;display:flex;position:relative}.header{background:var(--header-bg);-webkit-backdrop-filter:blur(40px)saturate(1.5);backdrop-filter:blur(40px)saturate(1.5);border-bottom:1px solid var(--border);z-index:200;will-change:transform;justify-content:space-between;align-items:center;height:50px;padding:8px 16px;display:flex;position:absolute;top:0;left:0;right:0;box-shadow:0 1px 8px #00000026}.header-left,.header-right{align-items:center;gap:10px;display:flex}.sidebar-toggle{color:var(--text-secondary);cursor:pointer;border-radius:var(--radius-md);transition:all var(--duration) var(--ease);background:0 0;border:none;justify-content:center;align-items:center;padding:6px;font-size:16px;line-height:1;display:flex}.sidebar-toggle:hover{color:var(--text-secondary);background:var(--bg-glass-hover)}.sidebar-toggle:active{opacity:.7}.model-dropdown{position:relative}.model-dropdown-btn{background:var(--bg-glass);border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text-primary);cursor:pointer;transition:all var(--duration) var(--ease);align-items:center;gap:6px;min-width:0;max-width:180px;padding:4px 10px;font-family:SF Mono,Menlo,Monaco,monospace;font-size:12px;display:flex}.model-dropdown-btn:hover{background:var(--bg-glass-hover);border-color:var(--border-hover)}.model-dropdown-chevron{opacity:.5;transition:transform var(--duration) var(--ease);flex-shrink:0}.model-dropdown-btn[aria-expanded=true] .model-dropdown-chevron{transform:rotate(180deg)}.model-dropdown-menu{background:var(--bg-solid);border:1px solid var(--border-hover);border-radius:var(--radius-md);z-index:1001;min-width:260px;max-width:calc(100vw - 32px);max-height:360px;animation:dropdownIn .15s var(--ease);padding:4px;position:absolute;top:calc(100% + 4px);right:0;overflow-y:auto;box-shadow:0 8px 32px #0006}@keyframes dropdownIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.model-dropdown-search{background:var(--bg-glass);border:1px solid var(--border);border-radius:var(--radius-md);width:100%;color:var(--text-primary);box-sizing:border-box;outline:none;margin-bottom:4px;padding:8px 12px;font-family:SF Mono,Menlo,Monaco,monospace;font-size:12px}.model-dropdown-search:focus{border-color:var(--accent)}.model-dropdown-search::placeholder{color:var(--text-dim)}.model-dropdown-item{border-radius:var(--radius-md);width:100%;color:var(--text-primary);cursor:pointer;text-align:left;transition:background var(--duration) var(--ease);background:0 0;border:none;justify-content:space-between;align-items:center;padding:6px 12px;font-family:SF Mono,Menlo,Monaco,monospace;font-size:12px;display:flex}.model-dropdown-item:hover{background:var(--bg-glass-hover)}.model-dropdown-active{background:var(--accent-subtle)!important;color:var(--accent-text)!important}.model-dropdown-item-main{flex:1;align-items:baseline;gap:8px;min-width:0;display:flex}.model-dropdown-provider{color:var(--text-dim);font-size:11px}.model-dropdown-name{word-break:break-word;flex:1;min-width:0;line-height:1.4}.model-dropdown-item-ctx{color:var(--text-dim);margin-left:8px;font-size:10px}.model-dropdown-empty{text-align:center;color:var(--text-dim);padding:16px;font-family:inherit;font-size:11px}.model-dropdown-list{max-height:288px;padding:4px 0;overflow-y:auto}.model-dropdown-footer{border-top:1px solid var(--border);color:var(--text-dim);padding:6px 12px;font-family:SF Mono,Menlo,Monaco,monospace;font-size:10px}.model-dropdown-warn{color:var(--warning);font-size:10px}.messages-container{scroll-behavior:smooth;scrollbar-width:none;flex-direction:column;flex:1;gap:6px;width:100%;max-width:800px;margin:0 auto;padding:60px 24px 80px;display:flex;overflow-y:auto}.messages-container::-webkit-scrollbar{display:none}.messages-container>*{width:100%}@media (width<=640px){.messages-container{padding:8px 0 72px}}.message-row{width:100%;animation:msgIn .25s var(--ease);align-items:flex-start;gap:8px;display:flex}.message-row.user{flex-direction:row-reverse;align-self:flex-end}.message-row.assistant{align-self:flex-start}.message-bubble{word-wrap:break-word;overflow-wrap:break-word;min-width:0;font-size:15px;line-height:1.7}.message-bubble.user{border-radius:var(--radius-lg);background:var(--user-bubble);color:var(--user-bubble-text);border:1px solid var(--border);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);white-space:pre-wrap;border-bottom-right-radius:6px;max-width:80%;padding:10px 16px;font-weight:500}.message-bubble.assistant{color:var(--text-primary);background:0 0;border:none;padding:4px 0}.message-bubble.assistant .md-p{margin-bottom:8px}.message-bubble.assistant .md-p:last-child{margin-bottom:0}.message-bubble.assistant .md-strong{font-weight:600}.message-bubble.assistant .md-em{color:var(--text-secondary);font-style:italic}.message-bubble.assistant .md-link{color:var(--accent-text);border-bottom:1px solid var(--accent-subtle);text-decoration:none}.message-bubble.assistant .md-link:hover{border-color:var(--accent-text)}.message-bubble.assistant .md-ul,.message-bubble.assistant .md-ol{margin:6px 0;padding-left:20px}.message-bubble.assistant .md-li{margin-bottom:3px}.message-bubble.assistant .md-h1,.message-bubble.assistant .md-h2,.message-bubble.assistant .md-h3{color:var(--text-primary);letter-spacing:-.02em;margin:14px 0 6px}.message-bubble.assistant .md-h1{font-size:18px;font-weight:700}.message-bubble.assistant .md-h2{font-size:16px;font-weight:600}.message-bubble.assistant .md-h3{font-size:14px;font-weight:600}.message-bubble.assistant .md-hr{border:none;border-top:1px solid var(--border);margin:12px 0}.message-bubble.assistant .md-blockquote{border-left:2px solid var(--accent);color:var(--text-secondary);margin:8px 0;padding-left:12px;font-style:italic}.message-bubble.assistant .table-wrapper{margin:8px 0}.message-bubble.assistant .md-table{font-size:14px}.assistant-msg-footer{justify-content:flex-start;margin-top:2px;margin-bottom:8px;padding:0;display:flex}.assistant-msg-footer.user{justify-content:flex-end}.copy-msg-btn{color:var(--text-dim);border-radius:var(--radius-xs);cursor:pointer;transition:color var(--duration) var(--ease), background var(--duration) var(--ease);background:0 0;border:none;align-items:center;gap:4px;padding:4px 10px;font-family:inherit;font-size:12px;font-weight:500;line-height:1.5;display:inline-flex}.copy-msg-btn:hover{color:var(--text-primary);background:var(--bg-glass-hover)}.copy-msg-btn:active{color:var(--accent-text)}.rewind-btn{margin-left:2px}.tool-result{border-radius:var(--radius);background:var(--tool-bg);border:1px solid var(--tool-border);font-family:SF Mono,Menlo,Monaco,monospace;font-size:13px;line-height:1.4;animation:.25s ease-out toolFadeIn;overflow:hidden}.tool-result summary{cursor:pointer;color:var(--tool-accent-text);-webkit-user-select:none;user-select:none;transition:background var(--duration) var(--ease);padding:8px 12px;font-weight:600}.tool-result summary:hover{background:var(--bg-glass-hover)}.tool-result .tool-result-content{white-space:pre-wrap;word-break:break-word;color:var(--tool-accent-text);padding:0 12px 8px}.markdown-content p{margin-bottom:2px}.markdown-content p:last-child{margin-bottom:0}.markdown-content strong{font-weight:600}.markdown-content em{color:var(--text-secondary);font-style:italic}.markdown-content a{color:var(--accent-text);border-bottom:1px solid var(--accent-subtle);text-decoration:none}.markdown-content a:hover{border-color:var(--accent-text)}.markdown-content ul,.markdown-content ol{margin:2px 0;padding-left:16px}.markdown-content li{margin-bottom:0}.markdown-content li>p{margin:0}.markdown-content h1,.markdown-content h2,.markdown-content h3,.markdown-content h4{color:var(--text-primary);letter-spacing:-.02em;margin:6px 0 2px}.markdown-content h1{font-size:15px;font-weight:700}.markdown-content h2{font-size:14px;font-weight:600}.markdown-content h3{font-size:13px;font-weight:600}.markdown-content hr{border:none;border-top:1px solid var(--border);margin:4px 0}.markdown-content blockquote{border-left:2px solid var(--accent);color:var(--text-secondary);margin:2px 0;padding-left:8px;font-style:italic}.markdown-content .table-wrapper{border-radius:var(--radius-md);border:1px solid var(--border);margin:6px 0;overflow-x:auto}.markdown-content table{border-collapse:collapse;width:100%;font-size:12px}.markdown-content th{background:var(--bg-glass-strong);text-transform:uppercase;letter-spacing:.03em;color:var(--text-secondary);border-bottom:1px solid var(--border-hover);white-space:nowrap;padding:6px 10px;font-size:11px;font-weight:600}.markdown-content td{border-bottom:1px solid var(--border);color:var(--text-primary);padding:5px 10px}.markdown-content tr:last-child td{border-bottom:none}.markdown-content code{background:var(--bg-glass-strong);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--accent-text);padding:1px 5px;font-family:SF Mono,Menlo,Monaco,monospace;font-size:.88em}.markdown-content pre:not(.code-block){border-radius:var(--radius);border:1px solid var(--border);background:#00000040;margin:4px 0;padding:8px;font-family:SF Mono,Menlo,Monaco,monospace;font-size:12px;line-height:1.4;overflow-x:auto}.markdown-content pre code{font-size:inherit;color:var(--text-primary);background:0 0;border:none;padding:0}.pi-thinking-dots span{font-size:14px;line-height:1;animation:1.4s infinite thinkingDot}.pi-thinking-dots span:nth-child(2){animation-delay:.2s}.pi-thinking-dots span:nth-child(3){animation-delay:.4s}@keyframes thinkingDot{0%,80%,to{opacity:0}40%{opacity:1}}.code-group:hover .code-copy-btn{opacity:1!important}.error-banner{border-radius:var(--radius);color:var(--error);cursor:pointer;background:#f871711a;border:1px solid #f8717133;padding:8px 12px;font-size:13px}.welcome{text-align:center;color:var(--text-dim);animation:fadeIn .5s var(--ease);padding:40px 20px}.welcome-icon{opacity:.4;margin-bottom:8px;font-size:32px}.welcome-text{color:var(--text-secondary);margin-bottom:4px;font-size:15px}.welcome-hint{color:var(--text-dim);font-size:13px}.ti-area{background:var(--header-bg);-webkit-backdrop-filter:blur(40px)saturate(1.5);backdrop-filter:blur(40px)saturate(1.5);border-top:none;align-items:center;gap:8px;width:100%;max-width:800px;margin:0 auto;padding:10px 20px 12px;display:flex}.ti-left{flex-direction:column;align-self:center;gap:2px;display:flex}.ti-icon-btn{border-radius:var(--radius-md);width:30px;height:30px;color:var(--text-dim);cursor:pointer;transition:all var(--duration) var(--ease);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:flex}.ti-icon-btn:hover{color:var(--text-secondary);background:var(--bg-glass-hover)}.ti-icon-btn:active{opacity:.7}.ti-bubble{flex:1;align-items:stretch;display:flex;position:relative}.ti-input{background:var(--bg-glass);border:1px solid var(--border);border-radius:var(--radius-lg);color:var(--text-primary);resize:none;max-height:160px;-webkit-backdrop-filter:blur(var(--blur));backdrop-filter:blur(var(--blur));transition:all var(--duration) var(--ease);outline:none;flex:1;padding:12px 16px;font-family:inherit;font-size:15px;line-height:1.45;overflow-y:auto}.ti-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-glow);background:var(--bg-glass-hover)}.ti-input::placeholder{color:var(--text-dim)}.ti-input:disabled{opacity:.35;cursor:not-allowed}.ti-actions{align-self:center;gap:4px;display:flex}.ti-send-btn{background:var(--accent);cursor:pointer;width:36px;height:36px;transition:all var(--duration) var(--ease);box-shadow:3px 3px 10px var(--accent-glow), -2px -2px 6px #ffffff26, inset 0 1px 2px #fff3;border:none;border-radius:50%;justify-content:center;align-items:center;padding:0;display:flex}.ti-send-btn:hover:not(:disabled){filter:brightness(1.15);box-shadow:0 6px 24px var(--accent-glow);transform:scale(1.1)}.ti-send-btn:active:not(:disabled){transition:transform .1s var(--ease);transform:scale(.88)}.ti-send-icon{color:#fff;justify-content:center;align-items:center;display:flex}.ti-abort-btn{cursor:pointer;width:36px;height:36px;color:var(--error);transition:all var(--duration) var(--ease);background:#f8717126;border:1px solid #f8717140;border-radius:50%;justify-content:center;align-items:center;padding:0;font-size:12px;display:flex}.ti-abort-btn:hover:not(:disabled){background:#f8717140;transform:scale(1.1)}.ti-abort-btn:active:not(:disabled){transition:transform .1s var(--ease);transform:scale(.88)}.settings-btn{border-radius:var(--radius-md);border:1px solid var(--border);background:var(--bg-glass);color:var(--text-primary);cursor:pointer;transition:all var(--duration) var(--ease);animation:fadeIn .2s var(--ease);outline:none;padding:8px 16px;font-family:inherit;font-size:12px}.settings-btn:hover{box-shadow:0 4px 12px var(--accent-glow);transform:translateY(-1px)}.centered{background:var(--bg-solid);height:100vh;color:var(--text-secondary);justify-content:center;align-items:center;font-family:system-ui,sans-serif;display:flex}.login-form{background:var(--bg-frosted);border-radius:var(--radius-lg);border:1px solid var(--border-hover);width:320px;max-width:90vw;-webkit-backdrop-filter:blur(var(--blur-heavy));backdrop-filter:blur(var(--blur-heavy));flex-direction:column;gap:12px;padding:32px;display:flex}.login-title{color:var(--text-primary);margin:0 0 4px;font-size:20px;font-weight:600}.login-input{border-radius:var(--radius-md);border:1px solid var(--input-border);background:var(--input-bg);color:var(--text-primary);transition:all var(--duration) var(--ease);outline:none;padding:10px 12px;font-family:inherit;font-size:14px}.login-input:focus{border-color:var(--input-focus-border);box-shadow:0 0 0 3px var(--accent-glow)}.login-btn{border-radius:var(--radius-md);background:var(--accent);color:var(--bg-solid);cursor:pointer;transition:all var(--duration) var(--ease);border:none;padding:10px;font-family:inherit;font-size:14px;font-weight:600}.login-btn:hover{opacity:.9}.login-btn:active{transform:scale(.97)}.streaming-cursor{color:var(--accent);animation:1s infinite blink}.tool-badge{border-radius:var(--radius-sm);background:var(--tool-bg);color:var(--tool-accent-text);margin-bottom:6px;padding:2px 8px;font-family:SF Mono,Menlo,Monaco,monospace;font-size:12px;font-weight:600;animation:.2s ease-out toolFadeIn;display:inline-block}.status-dot{border-radius:50%;width:6px;height:6px;margin-right:6px;display:inline-block}.status-dot.live{background:var(--success);box-shadow:0 0 8px #34d39980}.status-dot.streaming{background:var(--accent);animation:1s infinite blink}.theme-select{border-radius:var(--radius-md);border:1px solid var(--border);background:var(--bg-glass);color:var(--text-primary);cursor:pointer;outline:none;padding:6px 10px;font-family:inherit;font-size:12px}.theme-select:focus{border-color:var(--accent)}.settings-overlay{z-index:500;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);background:#00000080;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.settings-panel{background:var(--bg-frosted);-webkit-backdrop-filter:blur(40px)saturate(1.6);backdrop-filter:blur(40px)saturate(1.6);border:1px solid var(--border-hover);border-radius:var(--radius-lg);width:100%;max-width:760px;max-height:80vh;animation:sheetIn .25s var(--ease);flex-direction:column;display:flex;overflow:hidden;box-shadow:0 16px 48px #0006}@keyframes sheetIn{0%{opacity:0;transform:scale(.94)}to{opacity:1;transform:scale(1)}}.settings-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:12px;padding:12px 16px;display:flex}.settings-tabs{flex:1;gap:2px;min-width:0;display:flex;overflow-x:auto}.settings-tab{white-space:nowrap;border-radius:var(--radius-sm);color:var(--text-dim);cursor:pointer;transition:all var(--duration) var(--ease);background:0 0;border:none;flex-shrink:0;padding:6px 12px;font-family:inherit;font-size:13px}.settings-tab:hover{background:var(--bg-glass-hover);color:var(--text-secondary)}.settings-tab-active{background:var(--accent-subtle);color:var(--accent-text);font-weight:600}.settings-close{border-radius:var(--radius-md);border:1px solid var(--border);width:32px;height:32px;color:var(--text-dim);cursor:pointer;transition:all var(--duration) var(--ease);background:0 0;flex-shrink:0;justify-content:center;align-items:center;font-size:14px;display:flex}.settings-close:hover{background:var(--bg-glass-hover);color:var(--text-primary)}.settings-error{color:var(--error);background:#f871711a;border-bottom:1px solid #f8717133;padding:8px 16px;font-size:12px}.settings-body{flex:1;padding:16px;overflow-y:auto}.settings-fields{flex-direction:column;gap:16px;display:flex}.settings-field{flex-direction:column;gap:4px;display:flex}.settings-label{color:var(--text-primary);font-size:12px;font-weight:600}.settings-hint{color:var(--text-dim);font-size:11px;line-height:1.5}.settings-field-row{align-items:center;gap:8px;display:flex}.settings-input,.settings-select,.settings-textarea{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-glass);color:var(--text-primary);transition:border-color var(--duration) var(--ease);outline:none;flex:1;padding:8px 10px;font-family:inherit;font-size:13px}.settings-input:focus,.settings-select:focus,.settings-textarea:focus{border-color:var(--accent)}.settings-divider{border:none;border-top:1px solid var(--border);margin:16px 0}.settings-section-title{color:var(--accent-text);text-transform:uppercase;letter-spacing:.05em;margin:0 0 8px;font-size:12px;font-weight:700}.settings-textarea{resize:vertical;font-family:SF Mono,Menlo,Monaco,monospace;font-size:11px;line-height:1.5}.settings-btn{border-radius:var(--radius-sm);border:1px solid var(--border);color:var(--text-secondary);cursor:pointer;transition:all var(--duration) var(--ease);white-space:nowrap;background:0 0;flex-shrink:0;padding:6px 14px;font-family:inherit;font-size:12px}.settings-btn:hover{background:var(--bg-glass-hover);color:var(--text-primary)}.settings-btn-primary{background:var(--accent-subtle);border-color:var(--accent);color:var(--accent-text)}.settings-btn-primary:hover{background:var(--accent-glow)}.settings-btn-primary:disabled{opacity:.5;cursor:not-allowed}.settings-btn-danger{color:var(--error);border-color:#f8717140}.settings-btn-danger:hover{background:#f871711a}.settings-card{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-glass);overflow:hidden}.settings-card-header{justify-content:space-between;align-items:center;gap:8px;padding:10px 12px;display:flex}.settings-card-left{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.settings-card-actions{flex-shrink:0;align-items:center;gap:6px;display:flex}.settings-card-edit{align-items:center;gap:8px;padding:0 12px 10px;display:flex}.settings-badge{text-transform:uppercase;letter-spacing:.5px;border-radius:var(--radius-pill);padding:2px 8px;font-size:10px;font-weight:600}.settings-badge-on{color:var(--success);background:#34d39926;border:1px solid #34d39940}.settings-badge-off{background:var(--bg-glass);color:var(--text-dim);border:1px solid var(--border)}.settings-details{border-top:1px solid var(--border)}.settings-summary{color:var(--text-dim);cursor:pointer;-webkit-user-select:none;user-select:none;padding:6px 12px;font-size:11px}.settings-summary:hover{color:var(--text-secondary)}.settings-model-list{flex-direction:column;gap:2px;margin:0;padding:0 12px 8px 24px;list-style:none;display:flex}.settings-model-item{justify-content:space-between;font-family:SF Mono,Menlo,Monaco,monospace;font-size:11px;display:flex}.settings-raw-json{margin-top:8px}.settings-json-area{flex-direction:column;gap:8px;margin-top:8px;display:flex}.settings-json-actions{justify-content:flex-end;align-items:center;gap:8px;display:flex}.settings-theme-grid{grid-template-columns:1fr 1fr;gap:8px;display:grid}.settings-theme-swatch{border-radius:var(--radius-md);border:1px solid var(--border);background:var(--bg-glass);color:var(--text-secondary);text-align:left;cursor:pointer;transition:all var(--duration) var(--ease);justify-content:space-between;align-items:center;gap:8px;padding:10px 14px;font-family:inherit;font-size:13px;display:flex}.settings-theme-swatch:hover{background:var(--bg-glass-hover);border-color:var(--accent)}.settings-theme-active{border-color:var(--accent);background:var(--accent-subtle);color:var(--accent-text);font-weight:600}.settings-theme-variant{color:var(--text-dim);text-transform:capitalize;font-size:10px}.space-y-3>*+*{margin-top:12px}.space-y-2>*+*{margin-top:8px}.space-y-4>*+*{margin-top:16px}.text-green{color:var(--success)}.text-dim{color:var(--text-dim)}.font-mono{font-family:SF Mono,Menlo,Monaco,monospace}.text-xs{font-size:11px}.text-sm{font-size:13px}.text-11{font-size:11px}.italic{font-style:italic}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.chat-scroll{flex:1;padding:4px 16px 2px;overflow-y:auto}.chat-message-list{flex-direction:column;gap:16px;width:100%;max-width:760px;margin:0 auto;display:flex}.assistant-blocks{flex-direction:column;gap:8px;display:flex}.streaming-row{opacity:.92}.streaming-bubble{flex-direction:column;gap:8px;display:flex}.streaming-text{align-items:center;gap:4px;display:flex}.thinking-bubble{align-items:center;gap:8px;padding:6px 0;display:flex}.thinking-running{align-items:center;gap:6px;display:inline-flex}.thinking-code{background:var(--bg-glass);border-radius:var(--radius-sm);padding:1px 6px;font-family:SF Mono,Menlo,Monaco,monospace;font-size:11px}.inline-code{background:var(--bg-glass-strong);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--accent-text);padding:1px 5px;font-family:SF Mono,Menlo,Monaco,monospace;font-size:.88em}.code-block-wrap{border-radius:var(--radius);border:1px solid var(--border);margin:8px 0;position:relative;overflow:hidden}.code-block-header{background:var(--bg-glass-strong);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:6px 12px;display:flex}.code-block-lang{color:var(--text-dim);text-transform:lowercase;font-family:SF Mono,Menlo,Monaco,monospace;font-size:11px}.code-copy-btn{border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-dim);cursor:pointer;transition:all var(--duration) var(--ease);background:0 0;padding:2px 8px;font-family:inherit;font-size:11px;position:absolute;top:8px;right:8px}.code-copy-btn:hover{background:var(--bg-glass-hover);color:var(--text-secondary);border-color:var(--border-hover)}.code-block{background:var(--bg-elevated);margin:0;padding:12px 48px 12px 12px;font-family:SF Mono,Menlo,Monaco,monospace;font-size:12px;line-height:1.55;overflow-x:auto}.code-line{white-space:pre;display:block}.md-h1{margin:10px 0 4px;font-size:15px;font-weight:700}.md-h2{margin:8px 0 3px;font-size:14px;font-weight:600}.md-h3{margin:6px 0 2px;font-size:13px;font-weight:600}.md-h4{margin:4px 0 2px;font-size:12px;font-weight:600}.md-p{margin:4px 0;line-height:1.5}.md-ul,.md-ol{margin:4px 0 8px;padding-left:18px}.md-li{margin:2px 0;line-height:1.45}.md-blockquote{border-left:2px solid var(--accent);color:var(--text-secondary);background:var(--bg-glass);border-radius:0 var(--radius-sm) var(--radius-sm) 0;margin:6px 0;padding:4px 10px;font-style:italic}.md-hr{border:none;border-top:1px solid var(--border);margin:8px 0}.md-link{color:var(--accent-text);border-bottom:1px solid var(--accent-subtle);text-decoration:none}.md-link:hover{border-color:var(--accent-text)}.md-table{border-collapse:collapse;width:100%;font-size:12px}.md-th{background:var(--bg-glass-strong);text-transform:uppercase;letter-spacing:.03em;color:var(--text-secondary);border-bottom:1px solid var(--border-hover);white-space:nowrap;padding:6px 10px;font-size:11px;font-weight:600}.md-td{border-bottom:1px solid var(--border);padding:4px 10px}@keyframes toolPulse{0%,to{opacity:1;box-shadow:0 0 0 0 var(--tool-accent)}50%{opacity:.7;box-shadow:0 0 0 3px #0000}}@keyframes toolNodeIn{0%{opacity:0;transform:translate(-4px)}to{opacity:1;transform:translate(0)}}.tool-timeline{flex-direction:column;margin:4px 0;animation:.2s ease-out toolNodeIn;display:flex}.tool-timeline-track{flex-direction:column;padding-left:20px;display:flex;position:relative}.tool-timeline-track:before{content:"";background:var(--border);width:1px;position:absolute;top:0;bottom:0;left:7px}.tool-timeline-header{cursor:pointer;border-radius:var(--radius-sm);transition:background .15s var(--ease);-webkit-user-select:none;user-select:none;align-items:center;gap:7px;padding:4px 6px 4px 0;list-style:none;display:flex}.tool-timeline-header:hover{background:var(--bg-glass-hover)}.tool-timeline-header::-webkit-details-marker{display:none}.tool-timeline-chevron{color:var(--text-dim);width:10px;transition:transform .15s var(--ease);flex-shrink:0;font-size:9px}.tool-timeline-batch-label{color:var(--text-dim);font-family:SF Mono,Menlo,Monaco,monospace;font-size:11px;font-weight:600}.tool-timeline-batch-preview{color:var(--text-dim);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-family:SF Mono,Menlo,Monaco,monospace;font-size:10px;overflow:hidden}.tool-timeline-badge{border-radius:var(--radius-pill);letter-spacing:.4px;text-transform:uppercase;color:var(--accent);background:var(--bg-glass);padding:1px 5px;font-size:9px;font-weight:600}.tool-timeline-badge.error{color:var(--error);background:#f871711a}.tool-timeline-node{align-items:flex-start;gap:8px;padding:3px 0;animation:.18s ease-out toolNodeIn;display:flex;position:relative}.tool-timeline-icon{background:var(--bg-glass);border:1px solid var(--border);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:16px;height:16px;margin-top:1px;font-size:11px;line-height:1;display:flex}.tool-timeline-icon.running{border-color:var(--tool-accent);animation:1.4s ease-in-out infinite toolPulse}.tool-timeline-icon.error{border-color:var(--error)}.tool-timeline-content{flex:1;min-width:0;font-family:SF Mono,Menlo,Monaco,monospace;font-size:12px;line-height:1.4}.tool-timeline-row{flex-wrap:wrap;align-items:baseline;gap:6px;display:flex}.tool-timeline-name{color:var(--text-secondary);font-size:12px;font-weight:600}.tool-timeline-arg{color:var(--text-dim);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:11px;overflow:hidden}.tool-timeline-running{color:var(--tool-accent);font-size:10px;animation:1.4s ease-in-out infinite toolPulse}.tool-timeline-output-preview{color:var(--text-dim);text-overflow:ellipsis;white-space:nowrap;max-width:100%;margin-top:1px;font-size:11px;overflow:hidden}.tool-timeline-output-preview.error-preview{color:var(--error)}.tool-timeline-details-btn{appearance:none;cursor:pointer;color:var(--text-dim);text-underline-offset:2px;background:0 0;border:none;outline:none;padding:0;font-family:inherit;font-size:10px;text-decoration:underline;transition:color .12s}.tool-timeline-details-btn:hover{color:var(--text-secondary)}.tool-timeline-details{flex-direction:column;gap:4px;margin-top:5px;display:flex}.tool-timeline-section-label{text-transform:uppercase;letter-spacing:.5px;color:var(--text-dim);margin-bottom:2px;font-size:9px}.tool-timeline-code{white-space:pre-wrap;word-break:break-word;color:var(--text-secondary);background:var(--bg-glass);border-radius:var(--radius-sm);border:1px solid var(--border);max-height:160px;padding:6px 8px;font-size:11px;overflow:auto}.thinking-block{border-radius:var(--radius-sm);border:1px solid var(--border);color:var(--text-dim);margin:2px 0;padding:3px 8px;font-size:12px}.thinking-block summary{cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--text-secondary);list-style:none}.thinking-block summary::-webkit-details-marker{display:none}.thinking-content{white-space:pre-wrap;word-break:break-word;color:var(--text-dim);margin-top:4px;font-family:inherit;font-size:12px}.tool-badge{color:var(--accent);background:var(--bg-glass);border-radius:var(--radius-sm);text-transform:uppercase;letter-spacing:.5px;padding:1px 5px;font-size:9px}.tool-badge-error{color:var(--error);background:#f871711a}.session-children{border-left:1px solid var(--border-color);margin-top:2px;margin-bottom:2px;margin-left:8px;padding-left:16px}.session-worker-item{border-radius:var(--radius-sm);cursor:pointer;align-items:center;gap:4px;padding:3px 8px 3px 4px;font-size:12px;display:flex;position:relative}.session-worker-item:hover{background:var(--hover-bg)}.session-worker-item.active{background:var(--active-bg);color:var(--accent-text)}.session-worker-dot{border-radius:50%;flex-shrink:0;width:6px;height:6px;display:inline-block}.session-worker-dot.active{animation:1.5s ease-in-out infinite pulsate-dot}.session-worker-dot.idle{background:#56b6c2}.session-worker-dot.streaming{background:#98c379}@keyframes pulsate-dot{0%,to{box-shadow:0 0 #98c37966}50%{box-shadow:0 0 0 6px #98c37900}}.session-worker-name{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>pi-kot</title>
7
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
8
+ <script type="module" crossorigin src="/assets/index-UJgsBs6a.js"></script>
9
+ <link rel="stylesheet" crossorigin href="/assets/index-ZuTc_0YY.css">
10
+ </head>
11
+ <body>
12
+ <div id="root"></div>
13
+ </body>
14
+ </html>
@@ -0,0 +1,11 @@
1
+ import type { QuestionAnswer, AskUserQuestionResult } from "./types.js";
2
+ /**
3
+ * Build the tool result envelope from the user's answers.
4
+ * The text block contains a human-readable summary so the agent
5
+ * can see what happened; `details` carries the structured data.
6
+ */
7
+ export declare function buildResult(answers: QuestionAnswer[], extras: {
8
+ cancelled: boolean;
9
+ questionCount: number;
10
+ }): AskUserQuestionResult;
11
+ //# sourceMappingURL=envelope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/ask-user-question/envelope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExE;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,cAAc,EAAE,EACzB,MAAM,EAAE;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GACpD,qBAAqB,CAqCvB"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Build the tool result envelope from the user's answers.
3
+ * The text block contains a human-readable summary so the agent
4
+ * can see what happened; `details` carries the structured data.
5
+ */
6
+ export function buildResult(answers, extras) {
7
+ const { cancelled, questionCount } = extras;
8
+ const parts = [];
9
+ if (cancelled) {
10
+ if (answers.length > 0) {
11
+ parts.push(`The user cancelled the questionnaire after answering ${answers.length}/${questionCount} questions.`);
12
+ }
13
+ else {
14
+ parts.push("The user cancelled the questionnaire. No answers were provided.");
15
+ }
16
+ }
17
+ else {
18
+ parts.push("The user answered the following questions:");
19
+ }
20
+ for (const a of answers) {
21
+ switch (a.kind) {
22
+ case "option":
23
+ parts.push(`- ${a.question}: ${a.answer}`);
24
+ break;
25
+ case "multi":
26
+ parts.push(`- ${a.question}: selected ${a.selected?.join(", ") ?? "nothing"}`);
27
+ break;
28
+ case "custom":
29
+ parts.push(`- ${a.question}: ${a.answer ?? "(no input)"}`);
30
+ break;
31
+ case "chat":
32
+ parts.push(`- ${a.question}: (user chose to chat about this)`);
33
+ break;
34
+ }
35
+ }
36
+ return {
37
+ content: [{ type: "text", text: parts.join("\n") }],
38
+ details: { answers, cancelled, error: undefined },
39
+ };
40
+ }
41
+ //# sourceMappingURL=envelope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/ask-user-question/envelope.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,OAAyB,EACzB,MAAqD;IAErD,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;IAE5C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CACR,wDAAwD,OAAO,CAAC,MAAM,IAAI,aAAa,aAAa,CACrG,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;YACf,KAAK,QAAQ;gBACX,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC3C,MAAM;YACR,KAAK,OAAO;gBACV,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,cAAc,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC;gBAC/E,MAAM;YACR,KAAK,QAAQ;gBACX,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,MAAM,IAAI,YAAY,EAAE,CAAC,CAAC;gBAC3D,MAAM;YACR,KAAK,MAAM;gBACT,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,mCAAmC,CAAC,CAAC;gBAC/D,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;KAClD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const TOOL_DESCRIPTION: string;
2
+ export declare const PROMPT_SNIPPET: string;
3
+ export declare const PROMPT_GUIDELINES: string;
4
+ //# sourceMappingURL=prompt-strings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-strings.d.ts","sourceRoot":"","sources":["../../src/ask-user-question/prompt-strings.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,QAIF,CAAC;AAE5B,eAAO,MAAM,cAAc,QAEc,CAAC;AAE1C,eAAO,MAAM,iBAAiB,QAWiB,CAAC"}
@@ -0,0 +1,18 @@
1
+ export const TOOL_DESCRIPTION = "Present a structured question to the user with predefined options. " +
2
+ "Use this when you need the user to make a choice or provide input " +
3
+ "before continuing. Supports single-select, multi-select, and " +
4
+ "free-text custom input.";
5
+ export const PROMPT_SNIPPET = "\n- Use `ask_user_question` to ask the user questions when you need " +
6
+ "their input, choices, or decisions.\n";
7
+ export const PROMPT_GUIDELINES = "## Asking the user questions\n\n" +
8
+ "You can use `ask_user_question` to ask the user structured questions " +
9
+ "when you need their input. Each question can have multiple options. " +
10
+ "The user can select one option, type a custom answer, or choose to " +
11
+ "chat about it instead.\n\n" +
12
+ "Guidelines:\n" +
13
+ "- Use this when you're blocked and need user input\n" +
14
+ "- Provide clear, descriptive options\n" +
15
+ "- Keep headers short (16 chars max)\n" +
16
+ "- You can ask up to 4 questions at once\n" +
17
+ "- Each question needs between 2-4 options\n";
18
+ //# sourceMappingURL=prompt-strings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-strings.js","sourceRoot":"","sources":["../../src/ask-user-question/prompt-strings.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAC3B,qEAAqE;IACrE,oEAAoE;IACpE,+DAA+D;IAC/D,yBAAyB,CAAC;AAE5B,MAAM,CAAC,MAAM,cAAc,GACzB,sEAAsE;IACtE,uCAAuC,CAAC;AAE1C,MAAM,CAAC,MAAM,iBAAiB,GAC5B,kCAAkC;IAClC,uEAAuE;IACvE,sEAAsE;IACtE,qEAAqE;IACrE,4BAA4B;IAC5B,eAAe;IACf,sDAAsD;IACtD,wCAAwC;IACxC,uCAAuC;IACvC,2CAA2C;IAC3C,6CAA6C,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { AskUserQuestionResult, Question } from "./types.js";
2
+ /**
3
+ * In-memory registry of pending ask_user_question requests.
4
+ * One pending per session (SDK serialises tool calls per session).
5
+ * The tool factory registers a pending entry, the answer route
6
+ * resolves it, and the SSE bridge re-emits on reconnect.
7
+ */
8
+ export interface PendingAskUserQuestion {
9
+ requestId: string;
10
+ sessionId: string;
11
+ questions: Question[];
12
+ createdAt: Date;
13
+ }
14
+ export type AskQuestionEvent = {
15
+ type: "ask_user_question";
16
+ sessionId: string;
17
+ requestId: string;
18
+ questions: Question[];
19
+ } | {
20
+ type: "ask_user_question_cancelled";
21
+ sessionId: string;
22
+ requestId: string;
23
+ reason: string;
24
+ };
25
+ type Listener = (event: AskQuestionEvent) => void;
26
+ export declare function subscribe(fn: Listener): () => void;
27
+ export declare function registerPending(args: {
28
+ sessionId: string;
29
+ questions: Question[];
30
+ signal?: AbortSignal;
31
+ }): {
32
+ requestId: string;
33
+ result: Promise<AskUserQuestionResult>;
34
+ };
35
+ export declare function answerPending(requestId: string, expectedSessionId: string, result: AskUserQuestionResult): boolean;
36
+ export declare function getPendingForSession(sessionId: string): PendingAskUserQuestion[];
37
+ export declare function _resetForTests(): void;
38
+ export {};
39
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/ask-user-question/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAElE;;;;;GAKG;AAEH,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,SAAS,EAAE,IAAI,CAAC;CACjB;AASD,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,QAAQ,EAAE,CAAA;CAAE,GAC1F;IAAE,IAAI,EAAE,6BAA6B,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElG,KAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAGlD,wBAAgB,SAAS,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,IAAI,CAGlD;AAQD,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAA;CAAE,CAqEhE;AASD,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EACzB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAaT;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,sBAAsB,EAAE,CAWhF;AAED,wBAAgB,cAAc,IAAI,IAAI,CAIrC"}
@@ -0,0 +1,124 @@
1
+ import { randomUUID } from "node:crypto";
2
+ const byRequestId = new Map();
3
+ const bySessionId = new Map();
4
+ const listeners = new Set();
5
+ export function subscribe(fn) {
6
+ listeners.add(fn);
7
+ return () => listeners.delete(fn);
8
+ }
9
+ function notify(event) {
10
+ for (const fn of listeners) {
11
+ try {
12
+ fn(event);
13
+ }
14
+ catch { /* best-effort */ }
15
+ }
16
+ }
17
+ export function registerPending(args) {
18
+ const requestId = randomUUID();
19
+ // If there's already a pending entry for this session, resolve it
20
+ // as cancelled first (shouldn't happen with serialised tools, but
21
+ // be safe).
22
+ const existingId = bySessionId.get(args.sessionId);
23
+ if (existingId !== undefined) {
24
+ const existing = byRequestId.get(existingId);
25
+ if (existing !== undefined) {
26
+ byRequestId.delete(existingId);
27
+ bySessionId.delete(args.sessionId);
28
+ existing.resolve({
29
+ content: [{ type: "text", text: "Replaced by a new question." }],
30
+ details: { answers: [], cancelled: true, error: "superseded" },
31
+ });
32
+ notify({
33
+ type: "ask_user_question_cancelled",
34
+ sessionId: args.sessionId,
35
+ requestId: existingId,
36
+ reason: "superseded",
37
+ });
38
+ }
39
+ }
40
+ let resolveFn;
41
+ const result = new Promise((resolve) => {
42
+ resolveFn = resolve;
43
+ });
44
+ const entry = {
45
+ requestId,
46
+ sessionId: args.sessionId,
47
+ questions: args.questions,
48
+ createdAt: new Date(),
49
+ resolve: resolveFn,
50
+ };
51
+ byRequestId.set(requestId, entry);
52
+ bySessionId.set(args.sessionId, requestId);
53
+ if (args.signal !== undefined) {
54
+ const onAbort = () => {
55
+ if (byRequestId.has(requestId)) {
56
+ removeEntry(requestId);
57
+ notify({
58
+ type: "ask_user_question_cancelled",
59
+ sessionId: args.sessionId,
60
+ requestId,
61
+ reason: "aborted",
62
+ });
63
+ resolveFn({
64
+ content: [{ type: "text", text: "The agent was aborted." }],
65
+ details: { answers: [], cancelled: true, error: "aborted" },
66
+ });
67
+ }
68
+ };
69
+ if (args.signal.aborted)
70
+ onAbort();
71
+ else
72
+ args.signal.addEventListener("abort", onAbort, { once: true });
73
+ }
74
+ notify({
75
+ type: "ask_user_question",
76
+ sessionId: args.sessionId,
77
+ requestId,
78
+ questions: args.questions,
79
+ });
80
+ return { requestId, result };
81
+ }
82
+ function removeEntry(requestId) {
83
+ const e = byRequestId.get(requestId);
84
+ if (e === undefined)
85
+ return;
86
+ byRequestId.delete(requestId);
87
+ bySessionId.delete(e.sessionId);
88
+ }
89
+ export function answerPending(requestId, expectedSessionId, result) {
90
+ const e = byRequestId.get(requestId);
91
+ if (e === undefined)
92
+ return false;
93
+ if (e.sessionId !== expectedSessionId)
94
+ return false;
95
+ removeEntry(requestId);
96
+ notify({
97
+ type: "ask_user_question_cancelled",
98
+ sessionId: e.sessionId,
99
+ requestId,
100
+ reason: "answered",
101
+ });
102
+ e.resolve(result);
103
+ return true;
104
+ }
105
+ export function getPendingForSession(sessionId) {
106
+ const id = bySessionId.get(sessionId);
107
+ if (id === undefined)
108
+ return [];
109
+ const e = byRequestId.get(id);
110
+ if (e === undefined)
111
+ return [];
112
+ return [{
113
+ requestId: e.requestId,
114
+ sessionId: e.sessionId,
115
+ questions: e.questions,
116
+ createdAt: e.createdAt,
117
+ }];
118
+ }
119
+ export function _resetForTests() {
120
+ byRequestId.clear();
121
+ bySessionId.clear();
122
+ listeners.clear();
123
+ }
124
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/ask-user-question/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ToolDefinition } from "@earendil-works/pi-coding-agent";
2
+ export declare const ASK_USER_QUESTION_TOOL_NAME = "ask_user_question";
3
+ export declare function createAskUserQuestionTool(sessionId: string): ToolDefinition;
4
+ //# sourceMappingURL=tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/ask-user-question/tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAOtE,eAAO,MAAM,2BAA2B,sBAAsB,CAAC;AAqC/D,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAyB3E"}
@@ -0,0 +1,68 @@
1
+ import { registerPending } from "./registry.js";
2
+ import { validateQuestionnaire } from "./validate.js";
3
+ import { buildResult } from "./envelope.js";
4
+ import { PROMPT_GUIDELINES, PROMPT_SNIPPET, TOOL_DESCRIPTION } from "./prompt-strings.js";
5
+ import { MAX_HEADER_LENGTH, MAX_LABEL_LENGTH, MAX_OPTIONS, MAX_QUESTIONS, MIN_OPTIONS } from "./types.js";
6
+ export const ASK_USER_QUESTION_TOOL_NAME = "ask_user_question";
7
+ const inputSchema = {
8
+ type: "object",
9
+ required: ["questions"],
10
+ properties: {
11
+ questions: {
12
+ type: "array",
13
+ minItems: 1,
14
+ maxItems: MAX_QUESTIONS,
15
+ items: {
16
+ type: "object",
17
+ required: ["question", "header", "options"],
18
+ properties: {
19
+ question: { type: "string", minLength: 1 },
20
+ header: { type: "string", minLength: 1, maxLength: MAX_HEADER_LENGTH },
21
+ multiSelect: { type: "boolean" },
22
+ options: {
23
+ type: "array",
24
+ minItems: MIN_OPTIONS,
25
+ maxItems: MAX_OPTIONS,
26
+ items: {
27
+ type: "object",
28
+ required: ["label", "description"],
29
+ properties: {
30
+ label: { type: "string", minLength: 1, maxLength: MAX_LABEL_LENGTH },
31
+ description: { type: "string", minLength: 1 },
32
+ preview: { type: "string" },
33
+ },
34
+ },
35
+ },
36
+ },
37
+ },
38
+ },
39
+ },
40
+ };
41
+ export function createAskUserQuestionTool(sessionId) {
42
+ return {
43
+ name: ASK_USER_QUESTION_TOOL_NAME,
44
+ label: "Ask User Question",
45
+ description: TOOL_DESCRIPTION,
46
+ promptSnippet: PROMPT_SNIPPET,
47
+ promptGuidelines: [PROMPT_GUIDELINES],
48
+ parameters: inputSchema,
49
+ async execute(_toolCallId, params, signal) {
50
+ const validation = validateQuestionnaire(params);
51
+ if (!validation.ok) {
52
+ return buildResult([], { cancelled: true, questionCount: 0 });
53
+ }
54
+ try {
55
+ const { result } = registerPending({
56
+ sessionId,
57
+ questions: validation.params.questions,
58
+ signal,
59
+ });
60
+ return await result;
61
+ }
62
+ catch {
63
+ return buildResult([], { cancelled: true, questionCount: 0 });
64
+ }
65
+ },
66
+ };
67
+ }
68
+ //# sourceMappingURL=tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/ask-user-question/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC1F,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE1G,MAAM,CAAC,MAAM,2BAA2B,GAAG,mBAAmB,CAAC;AAE/D,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,CAAC,WAAW,CAAC;IACvB,UAAU,EAAE;QACV,SAAS,EAAE;YACT,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,aAAa;YACvB,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC;gBAC3C,UAAU,EAAE;oBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE;oBAC1C,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE;oBACtE,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;oBAChC,OAAO,EAAE;wBACP,IAAI,EAAE,OAAO;wBACb,QAAQ,EAAE,WAAW;wBACrB,QAAQ,EAAE,WAAW;wBACrB,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;4BACd,QAAQ,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC;4BAClC,UAAU,EAAE;gCACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gCACpE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE;gCAC7C,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;6BAC5B;yBACF;qBACF;iBACF;aACF;SACF;KACF;CACO,CAAC;AAEX,MAAM,UAAU,yBAAyB,CAAC,SAAiB;IACzD,OAAO;QACL,IAAI,EAAE,2BAA2B;QACjC,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,gBAAgB;QAC7B,aAAa,EAAE,cAAc;QAC7B,gBAAgB,EAAE,CAAC,iBAAiB,CAAC;QACrC,UAAU,EAAE,WAAW;QACvB,KAAK,CAAC,OAAO,CAAC,WAAmB,EAAE,MAAe,EAAE,MAA+B;YACjF,MAAM,UAAU,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;YACjD,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;gBACnB,OAAO,WAAW,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC;oBACjC,SAAS;oBACT,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,SAAS;oBACtC,MAAM;iBACP,CAAC,CAAC;gBACH,OAAO,MAAM,MAAM,CAAC;YACtB,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,WAAW,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;KAC2B,CAAC;AACjC,CAAC"}
@@ -0,0 +1,50 @@
1
+ export declare const MAX_QUESTIONS = 4;
2
+ export declare const MIN_OPTIONS = 2;
3
+ export declare const MAX_OPTIONS = 4;
4
+ export declare const MAX_HEADER_LENGTH = 16;
5
+ export declare const MAX_LABEL_LENGTH = 60;
6
+ export declare const RESERVED_LABELS: readonly ["Other", "Type something.", "Chat about this", "Next"];
7
+ export interface Option {
8
+ label: string;
9
+ description: string;
10
+ preview?: string;
11
+ }
12
+ export interface Question {
13
+ question: string;
14
+ header: string;
15
+ options: Option[];
16
+ multiSelect?: boolean;
17
+ }
18
+ export interface AskUserQuestionParams {
19
+ questions: Question[];
20
+ }
21
+ export interface QuestionAnswer {
22
+ questionIndex: number;
23
+ question: string;
24
+ kind: "option" | "custom" | "chat" | "multi";
25
+ answer: string | null;
26
+ selected?: string[];
27
+ notes?: string;
28
+ preview?: string;
29
+ }
30
+ export interface AskUserQuestionDetails {
31
+ answers: QuestionAnswer[];
32
+ cancelled: boolean;
33
+ error?: string;
34
+ }
35
+ export interface AskUserQuestionResult {
36
+ content: {
37
+ type: "text";
38
+ text: string;
39
+ }[];
40
+ details: AskUserQuestionDetails;
41
+ }
42
+ export type ValidationResult = {
43
+ ok: true;
44
+ params: AskUserQuestionParams;
45
+ } | {
46
+ ok: false;
47
+ error: string;
48
+ message: string;
49
+ };
50
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ask-user-question/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,eAAO,MAAM,eAAe,kEAAmE,CAAC;AAEhG,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IAC7C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C,OAAO,EAAE,sBAAsB,CAAC;CACjC;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,qBAAqB,CAAA;CAAE,GAC3C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ export const MAX_QUESTIONS = 4;
2
+ export const MIN_OPTIONS = 2;
3
+ export const MAX_OPTIONS = 4;
4
+ export const MAX_HEADER_LENGTH = 16;
5
+ export const MAX_LABEL_LENGTH = 60;
6
+ export const RESERVED_LABELS = ["Other", "Type something.", "Chat about this", "Next"];
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/ask-user-question/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAC/B,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAC7B,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAC7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACpC,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAEnC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,CAAU,CAAC"}