pi-orchestrator-config 4.3.6 → 4.3.8

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 (403) hide show
  1. package/README.md +23 -15
  2. package/extensions/orchestrator/extended-autocomplete.ts +4 -0
  3. package/extensions/orchestrator/mcpc.ts +172 -0
  4. package/extensions/orchestrator/session-validation.ts +5 -3
  5. package/extensions/pidash/pidash-ui/components.json +25 -0
  6. package/extensions/pidash/pidash-ui/dist/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  7. package/extensions/pidash/pidash-ui/dist/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  8. package/extensions/pidash/pidash-ui/dist/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  9. package/extensions/pidash/pidash-ui/dist/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  10. package/extensions/pidash/pidash-ui/dist/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  11. package/extensions/pidash/pidash-ui/dist/assets/index-BHH9Jo-Z.css +2 -0
  12. package/extensions/pidash/pidash-ui/dist/assets/index-DnwxYm06.js +23 -0
  13. package/extensions/pidash/pidash-ui/dist/index.html +13 -0
  14. package/extensions/pidash/pidash-ui/index.html +12 -0
  15. package/extensions/pidash/pidash-ui/package-lock.json +5545 -0
  16. package/extensions/pidash/pidash-ui/package.json +33 -0
  17. package/extensions/pidash/pidash-ui/src/App.tsx +297 -0
  18. package/extensions/pidash/pidash-ui/src/components/InfoBar.tsx +429 -0
  19. package/extensions/pidash/pidash-ui/src/components/InputBar.tsx +215 -0
  20. package/extensions/pidash/pidash-ui/src/components/KeybindingSettings.tsx +102 -0
  21. package/extensions/pidash/pidash-ui/src/components/MessageList.tsx +404 -0
  22. package/extensions/pidash/pidash-ui/src/components/NotificationSettings.tsx +76 -0
  23. package/extensions/pidash/pidash-ui/src/components/SessionSidebar.tsx +227 -0
  24. package/extensions/pidash/pidash-ui/src/components/SessionSwitcher.tsx +101 -0
  25. package/extensions/pidash/pidash-ui/src/components/Sidebar.tsx +83 -0
  26. package/extensions/pidash/pidash-ui/src/hooks/useKeybindings.ts +102 -0
  27. package/extensions/pidash/pidash-ui/src/hooks/useKeyboardNavigation.ts +69 -0
  28. package/extensions/pidash/pidash-ui/src/hooks/useMessageHandler.ts +436 -0
  29. package/extensions/pidash/pidash-ui/src/hooks/useNotifications.ts +64 -0
  30. package/extensions/pidash/pidash-ui/src/hooks/useSessions.ts +29 -0
  31. package/extensions/pidash/pidash-ui/src/hooks/useWebSocket.ts +39 -0
  32. package/extensions/pidash/pidash-ui/src/lib/utils.ts +6 -0
  33. package/extensions/pidash/pidash-ui/src/main.tsx +5 -0
  34. package/extensions/pidash/pidash-ui/src/styles.css +184 -0
  35. package/extensions/pidash/pidash-ui/src/types.ts +83 -0
  36. package/extensions/pidash/pidash-ui/tsconfig.json +22 -0
  37. package/extensions/pidash/pidash-ui/vite.config.ts +53 -0
  38. package/extensions/pidash/pidash.ts +50 -17
  39. package/extensions/pidiff/pidiff-ui/dist/assets/abap-CLvhMVsD.js +1 -0
  40. package/extensions/pidiff/pidiff-ui/dist/assets/actionscript-3-Cs6JJXT5.js +1 -0
  41. package/extensions/pidiff/pidiff-ui/dist/assets/ada-C5qYipkI.js +1 -0
  42. package/extensions/pidiff/pidiff-ui/dist/assets/ahk-CA9gdOdF.js +1 -0
  43. package/extensions/pidiff/pidiff-ui/dist/assets/ahk2-_6rzW9BS.js +1 -0
  44. package/extensions/pidiff/pidiff-ui/dist/assets/andromeeda-vGVdxbeo.js +1 -0
  45. package/extensions/pidiff/pidiff-ui/dist/assets/angular-html-ghA4VuM0.js +1 -0
  46. package/extensions/pidiff/pidiff-ui/dist/assets/angular-ts-BiEwt-Qs.js +1 -0
  47. package/extensions/pidiff/pidiff-ui/dist/assets/apache-U0d_L8uA.js +1 -0
  48. package/extensions/pidiff/pidiff-ui/dist/assets/apex-KFGFyKwG.js +1 -0
  49. package/extensions/pidiff/pidiff-ui/dist/assets/apl-DmYAGNOL.js +1 -0
  50. package/extensions/pidiff/pidiff-ui/dist/assets/applescript-CCn79oCD.js +1 -0
  51. package/extensions/pidiff/pidiff-ui/dist/assets/ara-4CJ0cIlV.js +1 -0
  52. package/extensions/pidiff/pidiff-ui/dist/assets/asciidoc-SCjQUq34.js +1 -0
  53. package/extensions/pidiff/pidiff-ui/dist/assets/asm-Cmm7eHzH.js +1 -0
  54. package/extensions/pidiff/pidiff-ui/dist/assets/astro-Bju7L81l.js +1 -0
  55. package/extensions/pidiff/pidiff-ui/dist/assets/aurora-x-CDeNXAV0.js +1 -0
  56. package/extensions/pidiff/pidiff-ui/dist/assets/awk-BWXHIvNe.js +1 -0
  57. package/extensions/pidiff/pidiff-ui/dist/assets/ayu-dark-DluEY0Gj.js +1 -0
  58. package/extensions/pidiff/pidiff-ui/dist/assets/ayu-light-C3h-C4tm.js +1 -0
  59. package/extensions/pidiff/pidiff-ui/dist/assets/ayu-mirage-Bqwy1Gya.js +1 -0
  60. package/extensions/pidiff/pidiff-ui/dist/assets/ballerina-B7ZEbQpA.js +1 -0
  61. package/extensions/pidiff/pidiff-ui/dist/assets/bat-qdxAdBWQ.js +1 -0
  62. package/extensions/pidiff/pidiff-ui/dist/assets/beancount-D-usSTwE.js +1 -0
  63. package/extensions/pidiff/pidiff-ui/dist/assets/berry-DKpUyyne.js +1 -0
  64. package/extensions/pidiff/pidiff-ui/dist/assets/bibtex-Ci_nEsc7.js +1 -0
  65. package/extensions/pidiff/pidiff-ui/dist/assets/bicep-CUHmPFLl.js +1 -0
  66. package/extensions/pidiff/pidiff-ui/dist/assets/bird2-CYIUgYqB.js +1 -0
  67. package/extensions/pidiff/pidiff-ui/dist/assets/blade-C_YtSRJN.js +1 -0
  68. package/extensions/pidiff/pidiff-ui/dist/assets/bsl-_VjlB9mv.js +1 -0
  69. package/extensions/pidiff/pidiff-ui/dist/assets/c-DxcP9pmN.js +1 -0
  70. package/extensions/pidiff/pidiff-ui/dist/assets/c3-D0apG41V.js +1 -0
  71. package/extensions/pidiff/pidiff-ui/dist/assets/cadence-CQ2zXKGN.js +1 -0
  72. package/extensions/pidiff/pidiff-ui/dist/assets/cairo-DLTphjLi.js +1 -0
  73. package/extensions/pidiff/pidiff-ui/dist/assets/catppuccin-frappe-C9Q5zVZY.js +1 -0
  74. package/extensions/pidiff/pidiff-ui/dist/assets/catppuccin-latte-CtsyrtPq.js +1 -0
  75. package/extensions/pidiff/pidiff-ui/dist/assets/catppuccin-macchiato-R8nAf1vR.js +1 -0
  76. package/extensions/pidiff/pidiff-ui/dist/assets/catppuccin-mocha-DjuaAJKi.js +1 -0
  77. package/extensions/pidiff/pidiff-ui/dist/assets/chapel-BjVM8zvB.js +1 -0
  78. package/extensions/pidiff/pidiff-ui/dist/assets/clarity-CtfBBspg.js +1 -0
  79. package/extensions/pidiff/pidiff-ui/dist/assets/clojure-DqKBuwfJ.js +1 -0
  80. package/extensions/pidiff/pidiff-ui/dist/assets/cmake-Bj61d0ZC.js +1 -0
  81. package/extensions/pidiff/pidiff-ui/dist/assets/cobol-CyAifE-8.js +1 -0
  82. package/extensions/pidiff/pidiff-ui/dist/assets/codeowners-C8r90Shi.js +1 -0
  83. package/extensions/pidiff/pidiff-ui/dist/assets/codeql-oeQT6MSM.js +1 -0
  84. package/extensions/pidiff/pidiff-ui/dist/assets/coffee-BNW4Zttb.js +1 -0
  85. package/extensions/pidiff/pidiff-ui/dist/assets/common-lisp-Cv5bFMCO.js +1 -0
  86. package/extensions/pidiff/pidiff-ui/dist/assets/coq-DuBRPxYg.js +1 -0
  87. package/extensions/pidiff/pidiff-ui/dist/assets/cpp-De6s9lN-.js +1 -0
  88. package/extensions/pidiff/pidiff-ui/dist/assets/crystal-JzhjW33_.js +1 -0
  89. package/extensions/pidiff/pidiff-ui/dist/assets/csharp-oqKa8noW.js +1 -0
  90. package/extensions/pidiff/pidiff-ui/dist/assets/css-DAnI1EKT.js +1 -0
  91. package/extensions/pidiff/pidiff-ui/dist/assets/csv-Dx-8-gkx.js +1 -0
  92. package/extensions/pidiff/pidiff-ui/dist/assets/cue-CE9AQfxI.js +1 -0
  93. package/extensions/pidiff/pidiff-ui/dist/assets/cypher-ClKdZ_lG.js +1 -0
  94. package/extensions/pidiff/pidiff-ui/dist/assets/d-qD-0Kul2.js +1 -0
  95. package/extensions/pidiff/pidiff-ui/dist/assets/dark-plus-Cs2F2srj.js +1 -0
  96. package/extensions/pidiff/pidiff-ui/dist/assets/dart-CnvKMtbv.js +1 -0
  97. package/extensions/pidiff/pidiff-ui/dist/assets/dax-BkyTk9wS.js +1 -0
  98. package/extensions/pidiff/pidiff-ui/dist/assets/desktop-Dlh5hvp9.js +1 -0
  99. package/extensions/pidiff/pidiff-ui/dist/assets/diff-woXpYk--.js +1 -0
  100. package/extensions/pidiff/pidiff-ui/dist/assets/docker-IyjqRm3v.js +1 -0
  101. package/extensions/pidiff/pidiff-ui/dist/assets/dotenv-_5a1GRtc.js +1 -0
  102. package/extensions/pidiff/pidiff-ui/dist/assets/dracula-BHWKrbxM.js +1 -0
  103. package/extensions/pidiff/pidiff-ui/dist/assets/dracula-soft-5eyTD99u.js +1 -0
  104. package/extensions/pidiff/pidiff-ui/dist/assets/dream-maker-DW3nJb8Q.js +1 -0
  105. package/extensions/pidiff/pidiff-ui/dist/assets/edge-DlbkxEj4.js +1 -0
  106. package/extensions/pidiff/pidiff-ui/dist/assets/elixir-BXz6vpDX.js +1 -0
  107. package/extensions/pidiff/pidiff-ui/dist/assets/elm-CJcSKM6_.js +1 -0
  108. package/extensions/pidiff/pidiff-ui/dist/assets/emacs-lisp-c_oH4hRZ.js +1 -0
  109. package/extensions/pidiff/pidiff-ui/dist/assets/erb-VHOaTR5g.js +1 -0
  110. package/extensions/pidiff/pidiff-ui/dist/assets/erlang-Cphh6RMH.js +1 -0
  111. package/extensions/pidiff/pidiff-ui/dist/assets/everforest-dark-sB-x3p7T.js +1 -0
  112. package/extensions/pidiff/pidiff-ui/dist/assets/everforest-light-Df2xbC6M.js +1 -0
  113. package/extensions/pidiff/pidiff-ui/dist/assets/fennel-DQxkIbk2.js +1 -0
  114. package/extensions/pidiff/pidiff-ui/dist/assets/fish-BJitypiv.js +1 -0
  115. package/extensions/pidiff/pidiff-ui/dist/assets/fluent-C03EYrpw.js +1 -0
  116. package/extensions/pidiff/pidiff-ui/dist/assets/fortran-fixed-form-DEKoE2YW.js +1 -0
  117. package/extensions/pidiff/pidiff-ui/dist/assets/fortran-free-form-CYNrtFtB.js +1 -0
  118. package/extensions/pidiff/pidiff-ui/dist/assets/fsharp-D13ZGOAj.js +1 -0
  119. package/extensions/pidiff/pidiff-ui/dist/assets/gdresource-xMC7jr7x.js +1 -0
  120. package/extensions/pidiff/pidiff-ui/dist/assets/gdscript-DYvRD3hg.js +1 -0
  121. package/extensions/pidiff/pidiff-ui/dist/assets/gdshader-CBce3t8t.js +1 -0
  122. package/extensions/pidiff/pidiff-ui/dist/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  123. package/extensions/pidiff/pidiff-ui/dist/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  124. package/extensions/pidiff/pidiff-ui/dist/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  125. package/extensions/pidiff/pidiff-ui/dist/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  126. package/extensions/pidiff/pidiff-ui/dist/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  127. package/extensions/pidiff/pidiff-ui/dist/assets/genie-CV2tkWYe.js +1 -0
  128. package/extensions/pidiff/pidiff-ui/dist/assets/gherkin-DExj1W_8.js +1 -0
  129. package/extensions/pidiff/pidiff-ui/dist/assets/git-commit-BSykSTBG.js +1 -0
  130. package/extensions/pidiff/pidiff-ui/dist/assets/git-rebase-PAYwCVk-.js +1 -0
  131. package/extensions/pidiff/pidiff-ui/dist/assets/github-dark-C-LZuMrd.js +1 -0
  132. package/extensions/pidiff/pidiff-ui/dist/assets/github-dark-default-DXG-b-1a.js +1 -0
  133. package/extensions/pidiff/pidiff-ui/dist/assets/github-dark-dimmed-Bx1FflLF.js +1 -0
  134. package/extensions/pidiff/pidiff-ui/dist/assets/github-dark-high-contrast-B_tTalzw.js +1 -0
  135. package/extensions/pidiff/pidiff-ui/dist/assets/github-light-EUqPIrTm.js +1 -0
  136. package/extensions/pidiff/pidiff-ui/dist/assets/github-light-default-BXViO-2h.js +1 -0
  137. package/extensions/pidiff/pidiff-ui/dist/assets/github-light-high-contrast-B68TUdTA.js +1 -0
  138. package/extensions/pidiff/pidiff-ui/dist/assets/gleam-CSRkHgEL.js +1 -0
  139. package/extensions/pidiff/pidiff-ui/dist/assets/glimmer-js-CspJJiU_.js +1 -0
  140. package/extensions/pidiff/pidiff-ui/dist/assets/glimmer-ts-CSMIai5o.js +1 -0
  141. package/extensions/pidiff/pidiff-ui/dist/assets/glsl-Cw9yKL2B.js +1 -0
  142. package/extensions/pidiff/pidiff-ui/dist/assets/gn-ilITqXS6.js +1 -0
  143. package/extensions/pidiff/pidiff-ui/dist/assets/gnuplot-7GGW24-e.js +1 -0
  144. package/extensions/pidiff/pidiff-ui/dist/assets/go-rLFTqkRN.js +1 -0
  145. package/extensions/pidiff/pidiff-ui/dist/assets/graphql-D0OMgGsM.js +1 -0
  146. package/extensions/pidiff/pidiff-ui/dist/assets/groovy-CacY0gHj.js +1 -0
  147. package/extensions/pidiff/pidiff-ui/dist/assets/gruvbox-dark-hard-C820rvS2.js +1 -0
  148. package/extensions/pidiff/pidiff-ui/dist/assets/gruvbox-dark-medium-BPjhmG05.js +1 -0
  149. package/extensions/pidiff/pidiff-ui/dist/assets/gruvbox-dark-soft-MrdJrrXF.js +1 -0
  150. package/extensions/pidiff/pidiff-ui/dist/assets/gruvbox-light-hard-BC_s9l72.js +1 -0
  151. package/extensions/pidiff/pidiff-ui/dist/assets/gruvbox-light-medium-BAWPOn9u.js +1 -0
  152. package/extensions/pidiff/pidiff-ui/dist/assets/gruvbox-light-soft-BSMLrYjP.js +1 -0
  153. package/extensions/pidiff/pidiff-ui/dist/assets/hack-DfiAACVA.js +1 -0
  154. package/extensions/pidiff/pidiff-ui/dist/assets/haml-DU8pAbRK.js +1 -0
  155. package/extensions/pidiff/pidiff-ui/dist/assets/handlebars-CoaiK3xT.js +1 -0
  156. package/extensions/pidiff/pidiff-ui/dist/assets/haskell-D8IpX4py.js +1 -0
  157. package/extensions/pidiff/pidiff-ui/dist/assets/haxe-C8oCnwJJ.js +1 -0
  158. package/extensions/pidiff/pidiff-ui/dist/assets/hcl-Dh228itO.js +1 -0
  159. package/extensions/pidiff/pidiff-ui/dist/assets/hjson-CxZEssPk.js +1 -0
  160. package/extensions/pidiff/pidiff-ui/dist/assets/hlsl-Cvrh5tZx.js +1 -0
  161. package/extensions/pidiff/pidiff-ui/dist/assets/horizon-CE9ld1lL.js +1 -0
  162. package/extensions/pidiff/pidiff-ui/dist/assets/horizon-bright-DSNQnXHK.js +1 -0
  163. package/extensions/pidiff/pidiff-ui/dist/assets/houston-CsvMBhTu.js +1 -0
  164. package/extensions/pidiff/pidiff-ui/dist/assets/html-B4C3aTRB.js +1 -0
  165. package/extensions/pidiff/pidiff-ui/dist/assets/html-derivative-C_NJUsxF.js +1 -0
  166. package/extensions/pidiff/pidiff-ui/dist/assets/http-Cr9w59E3.js +1 -0
  167. package/extensions/pidiff/pidiff-ui/dist/assets/hurl-BEScLvfg.js +1 -0
  168. package/extensions/pidiff/pidiff-ui/dist/assets/hxml-Dcm88srW.js +1 -0
  169. package/extensions/pidiff/pidiff-ui/dist/assets/hy-CZbG8q4J.js +1 -0
  170. package/extensions/pidiff/pidiff-ui/dist/assets/imba-DsUTQ-LC.js +1 -0
  171. package/extensions/pidiff/pidiff-ui/dist/assets/index-CcrT73jQ.css +1 -0
  172. package/extensions/pidiff/pidiff-ui/dist/assets/index-CisAus9r.js +2801 -0
  173. package/extensions/pidiff/pidiff-ui/dist/assets/ini-B5eOa1yu.js +1 -0
  174. package/extensions/pidiff/pidiff-ui/dist/assets/java-hb-3TTCg.js +1 -0
  175. package/extensions/pidiff/pidiff-ui/dist/assets/javascript-Bc0DeQtz.js +1 -0
  176. package/extensions/pidiff/pidiff-ui/dist/assets/jinja-DoEIYL2y.js +1 -0
  177. package/extensions/pidiff/pidiff-ui/dist/assets/jison-C2OZYR2e.js +1 -0
  178. package/extensions/pidiff/pidiff-ui/dist/assets/json-DKeabECb.js +1 -0
  179. package/extensions/pidiff/pidiff-ui/dist/assets/json5-BR5RXkoi.js +1 -0
  180. package/extensions/pidiff/pidiff-ui/dist/assets/jsonc-CYpm1nAK.js +1 -0
  181. package/extensions/pidiff/pidiff-ui/dist/assets/jsonl-CmCQp5Yx.js +1 -0
  182. package/extensions/pidiff/pidiff-ui/dist/assets/jsonnet-CJTPZ8u_.js +1 -0
  183. package/extensions/pidiff/pidiff-ui/dist/assets/jssm-DXw9l8Rf.js +1 -0
  184. package/extensions/pidiff/pidiff-ui/dist/assets/jsx-Dadu-wAB.js +1 -0
  185. package/extensions/pidiff/pidiff-ui/dist/assets/julia-CpUr0nh2.js +1 -0
  186. package/extensions/pidiff/pidiff-ui/dist/assets/just-BysHL69Z.js +1 -0
  187. package/extensions/pidiff/pidiff-ui/dist/assets/kanagawa-dragon-Bozd7klA.js +1 -0
  188. package/extensions/pidiff/pidiff-ui/dist/assets/kanagawa-lotus-BmuOG9ZW.js +1 -0
  189. package/extensions/pidiff/pidiff-ui/dist/assets/kanagawa-wave-BML5mF2J.js +1 -0
  190. package/extensions/pidiff/pidiff-ui/dist/assets/kdl-CsD5j6eV.js +1 -0
  191. package/extensions/pidiff/pidiff-ui/dist/assets/kotlin-DhhofPvG.js +1 -0
  192. package/extensions/pidiff/pidiff-ui/dist/assets/kusto-C7mF5XQf.js +1 -0
  193. package/extensions/pidiff/pidiff-ui/dist/assets/laserwave-C_8bwKvT.js +1 -0
  194. package/extensions/pidiff/pidiff-ui/dist/assets/latex-iNrlK36R.js +1 -0
  195. package/extensions/pidiff/pidiff-ui/dist/assets/lean-CewbzKMR.js +1 -0
  196. package/extensions/pidiff/pidiff-ui/dist/assets/less-DVTAwKKz.js +1 -0
  197. package/extensions/pidiff/pidiff-ui/dist/assets/light-plus-DVQuIRkW.js +1 -0
  198. package/extensions/pidiff/pidiff-ui/dist/assets/liquid-g8x_A5Ru.js +1 -0
  199. package/extensions/pidiff/pidiff-ui/dist/assets/llvm-DqHOMS-s.js +1 -0
  200. package/extensions/pidiff/pidiff-ui/dist/assets/log-BNLmms1o.js +1 -0
  201. package/extensions/pidiff/pidiff-ui/dist/assets/logo-Cluzi2Zq.js +1 -0
  202. package/extensions/pidiff/pidiff-ui/dist/assets/lua-B4BSWsUC.js +1 -0
  203. package/extensions/pidiff/pidiff-ui/dist/assets/luau-C2pBCSgt.js +1 -0
  204. package/extensions/pidiff/pidiff-ui/dist/assets/make-Dixweg8N.js +1 -0
  205. package/extensions/pidiff/pidiff-ui/dist/assets/markdown-BYOwaDjH.js +1 -0
  206. package/extensions/pidiff/pidiff-ui/dist/assets/marko-CHSFXjEi.js +1 -0
  207. package/extensions/pidiff/pidiff-ui/dist/assets/material-theme-Bm3Qr25_.js +1 -0
  208. package/extensions/pidiff/pidiff-ui/dist/assets/material-theme-darker-2IIEA8gg.js +1 -0
  209. package/extensions/pidiff/pidiff-ui/dist/assets/material-theme-lighter-uhdI0v04.js +1 -0
  210. package/extensions/pidiff/pidiff-ui/dist/assets/material-theme-ocean-CHQ94UKr.js +1 -0
  211. package/extensions/pidiff/pidiff-ui/dist/assets/material-theme-palenight-B5W6OYN7.js +1 -0
  212. package/extensions/pidiff/pidiff-ui/dist/assets/matlab-D7qyCx1q.js +1 -0
  213. package/extensions/pidiff/pidiff-ui/dist/assets/mdc-js2C5rVG.js +1 -0
  214. package/extensions/pidiff/pidiff-ui/dist/assets/mdx-DQZ5AkYe.js +1 -0
  215. package/extensions/pidiff/pidiff-ui/dist/assets/mermaid-BxpfTIzt.js +1 -0
  216. package/extensions/pidiff/pidiff-ui/dist/assets/min-dark-BSWPekZh.js +1 -0
  217. package/extensions/pidiff/pidiff-ui/dist/assets/min-light-DDpmG2fV.js +1 -0
  218. package/extensions/pidiff/pidiff-ui/dist/assets/mipsasm-BMqwQI7S.js +1 -0
  219. package/extensions/pidiff/pidiff-ui/dist/assets/mojo-fg40_ntQ.js +1 -0
  220. package/extensions/pidiff/pidiff-ui/dist/assets/monokai-B_bV9PQ9.js +1 -0
  221. package/extensions/pidiff/pidiff-ui/dist/assets/moonbit-DgjMoLWr.js +1 -0
  222. package/extensions/pidiff/pidiff-ui/dist/assets/move-BYnGhZoM.js +1 -0
  223. package/extensions/pidiff/pidiff-ui/dist/assets/narrat-_X_XdTYD.js +1 -0
  224. package/extensions/pidiff/pidiff-ui/dist/assets/nextflow-BJtWHP5T.js +1 -0
  225. package/extensions/pidiff/pidiff-ui/dist/assets/nextflow-groovy-DJMQeKeT.js +1 -0
  226. package/extensions/pidiff/pidiff-ui/dist/assets/nginx-BblTQvRl.js +1 -0
  227. package/extensions/pidiff/pidiff-ui/dist/assets/night-owl-DhmEMT88.js +1 -0
  228. package/extensions/pidiff/pidiff-ui/dist/assets/night-owl-light-eJ-hLW7d.js +1 -0
  229. package/extensions/pidiff/pidiff-ui/dist/assets/nim-ChxMAPPZ.js +1 -0
  230. package/extensions/pidiff/pidiff-ui/dist/assets/nix-IvuFDN5E.js +1 -0
  231. package/extensions/pidiff/pidiff-ui/dist/assets/nord-Cb4Vim4T.js +1 -0
  232. package/extensions/pidiff/pidiff-ui/dist/assets/nsis-CjNLYCLg.js +1 -0
  233. package/extensions/pidiff/pidiff-ui/dist/assets/nushell-DHYfO66s.js +1 -0
  234. package/extensions/pidiff/pidiff-ui/dist/assets/objective-c-D1A_Heim.js +1 -0
  235. package/extensions/pidiff/pidiff-ui/dist/assets/objective-cpp-BsSzOQcm.js +1 -0
  236. package/extensions/pidiff/pidiff-ui/dist/assets/ocaml-O90oeIOV.js +1 -0
  237. package/extensions/pidiff/pidiff-ui/dist/assets/odin-B1RWQWA5.js +1 -0
  238. package/extensions/pidiff/pidiff-ui/dist/assets/one-dark-pro-CLwyXe_n.js +1 -0
  239. package/extensions/pidiff/pidiff-ui/dist/assets/one-light-D7Lr4KcI.js +1 -0
  240. package/extensions/pidiff/pidiff-ui/dist/assets/openscad-BUDT5pXO.js +1 -0
  241. package/extensions/pidiff/pidiff-ui/dist/assets/org-CHoj3SWZ.js +1 -0
  242. package/extensions/pidiff/pidiff-ui/dist/assets/pascal-4ZHwLPI5.js +1 -0
  243. package/extensions/pidiff/pidiff-ui/dist/assets/perl-3zusLAIc.js +1 -0
  244. package/extensions/pidiff/pidiff-ui/dist/assets/php-DVx3dbu3.js +1 -0
  245. package/extensions/pidiff/pidiff-ui/dist/assets/pierre-dark-CpLgRqie.js +1 -0
  246. package/extensions/pidiff/pidiff-ui/dist/assets/pierre-dark-protanopia-deuteranopia-B35FxJx-.js +1 -0
  247. package/extensions/pidiff/pidiff-ui/dist/assets/pierre-dark-soft-kZQmAZld.js +1 -0
  248. package/extensions/pidiff/pidiff-ui/dist/assets/pierre-dark-tritanopia-CpjhbsIL.js +1 -0
  249. package/extensions/pidiff/pidiff-ui/dist/assets/pierre-dark-vibrant-CpQYzh95.js +1 -0
  250. package/extensions/pidiff/pidiff-ui/dist/assets/pierre-light-CoaEpmwp.js +1 -0
  251. package/extensions/pidiff/pidiff-ui/dist/assets/pierre-light-protanopia-deuteranopia-0fSaH845.js +1 -0
  252. package/extensions/pidiff/pidiff-ui/dist/assets/pierre-light-soft-lWLdNTOI.js +1 -0
  253. package/extensions/pidiff/pidiff-ui/dist/assets/pierre-light-tritanopia-CEbqgOJL.js +1 -0
  254. package/extensions/pidiff/pidiff-ui/dist/assets/pierre-light-vibrant-D80Fkn33.js +1 -0
  255. package/extensions/pidiff/pidiff-ui/dist/assets/pkl-ot-7Btpt.js +1 -0
  256. package/extensions/pidiff/pidiff-ui/dist/assets/plastic-DQwYfKfQ.js +1 -0
  257. package/extensions/pidiff/pidiff-ui/dist/assets/plsql-DGHpHOYJ.js +1 -0
  258. package/extensions/pidiff/pidiff-ui/dist/assets/po-BiJDBrnU.js +1 -0
  259. package/extensions/pidiff/pidiff-ui/dist/assets/poimandres-DRFjx7u4.js +1 -0
  260. package/extensions/pidiff/pidiff-ui/dist/assets/polar-C7UOKdEL.js +1 -0
  261. package/extensions/pidiff/pidiff-ui/dist/assets/postcss-BXeXVLqQ.js +1 -0
  262. package/extensions/pidiff/pidiff-ui/dist/assets/powerquery-DNMTfnFr.js +1 -0
  263. package/extensions/pidiff/pidiff-ui/dist/assets/powershell-CCSX75yM.js +1 -0
  264. package/extensions/pidiff/pidiff-ui/dist/assets/prisma-DMgNhnYS.js +1 -0
  265. package/extensions/pidiff/pidiff-ui/dist/assets/prolog-iXnhIJG7.js +1 -0
  266. package/extensions/pidiff/pidiff-ui/dist/assets/proto-DB4EqR-F.js +1 -0
  267. package/extensions/pidiff/pidiff-ui/dist/assets/pug-DITNjLsK.js +1 -0
  268. package/extensions/pidiff/pidiff-ui/dist/assets/puppet-CDv2pdJW.js +1 -0
  269. package/extensions/pidiff/pidiff-ui/dist/assets/purescript-9MfHhQsQ.js +1 -0
  270. package/extensions/pidiff/pidiff-ui/dist/assets/python-gzcpVVnB.js +1 -0
  271. package/extensions/pidiff/pidiff-ui/dist/assets/qml-BYmD788c.js +1 -0
  272. package/extensions/pidiff/pidiff-ui/dist/assets/qmldir-DCQb3MpD.js +1 -0
  273. package/extensions/pidiff/pidiff-ui/dist/assets/qss-Fe1Jh2GI.js +1 -0
  274. package/extensions/pidiff/pidiff-ui/dist/assets/r-Dp_qVPOX.js +1 -0
  275. package/extensions/pidiff/pidiff-ui/dist/assets/racket-DcIDlBhZ.js +1 -0
  276. package/extensions/pidiff/pidiff-ui/dist/assets/raku-B3gFvitq.js +1 -0
  277. package/extensions/pidiff/pidiff-ui/dist/assets/razor-DT4CEDjF.js +1 -0
  278. package/extensions/pidiff/pidiff-ui/dist/assets/rbs-C0MpOrj4.js +1 -0
  279. package/extensions/pidiff/pidiff-ui/dist/assets/red-DX1BQOs8.js +1 -0
  280. package/extensions/pidiff/pidiff-ui/dist/assets/reg-CRGYupPL.js +1 -0
  281. package/extensions/pidiff/pidiff-ui/dist/assets/regexp-DVFGbBOe.js +1 -0
  282. package/extensions/pidiff/pidiff-ui/dist/assets/rel-BtDbiS_P.js +1 -0
  283. package/extensions/pidiff/pidiff-ui/dist/assets/riscv-Ckw8ddFX.js +1 -0
  284. package/extensions/pidiff/pidiff-ui/dist/assets/ron-VUp2lXgN.js +1 -0
  285. package/extensions/pidiff/pidiff-ui/dist/assets/rose-pine-aMsaMD1D.js +1 -0
  286. package/extensions/pidiff/pidiff-ui/dist/assets/rose-pine-dawn-8PwUyIlP.js +1 -0
  287. package/extensions/pidiff/pidiff-ui/dist/assets/rose-pine-moon-DO-qXg-I.js +1 -0
  288. package/extensions/pidiff/pidiff-ui/dist/assets/rosmsg-CAekHB0j.js +1 -0
  289. package/extensions/pidiff/pidiff-ui/dist/assets/rst-njZM0E3u.js +1 -0
  290. package/extensions/pidiff/pidiff-ui/dist/assets/ruby-gu2hDDCx.js +1 -0
  291. package/extensions/pidiff/pidiff-ui/dist/assets/rust-Cfkwpbl8.js +1 -0
  292. package/extensions/pidiff/pidiff-ui/dist/assets/sas-Bo6NwyH7.js +1 -0
  293. package/extensions/pidiff/pidiff-ui/dist/assets/sass-DXrisJhu.js +1 -0
  294. package/extensions/pidiff/pidiff-ui/dist/assets/scala-BiFt_7mu.js +1 -0
  295. package/extensions/pidiff/pidiff-ui/dist/assets/scheme-DQCgrYNe.js +1 -0
  296. package/extensions/pidiff/pidiff-ui/dist/assets/scss-COdGMqPA.js +1 -0
  297. package/extensions/pidiff/pidiff-ui/dist/assets/sdbl-bTVj8UrX.js +1 -0
  298. package/extensions/pidiff/pidiff-ui/dist/assets/shaderlab-TOUzSsQk.js +1 -0
  299. package/extensions/pidiff/pidiff-ui/dist/assets/shellscript-DSg7qNC1.js +1 -0
  300. package/extensions/pidiff/pidiff-ui/dist/assets/shellsession-CD1RmUpx.js +1 -0
  301. package/extensions/pidiff/pidiff-ui/dist/assets/slack-dark-DnToyrRv.js +1 -0
  302. package/extensions/pidiff/pidiff-ui/dist/assets/slack-ochin-B2OO5cIa.js +1 -0
  303. package/extensions/pidiff/pidiff-ui/dist/assets/smalltalk-BHpQb5nM.js +1 -0
  304. package/extensions/pidiff/pidiff-ui/dist/assets/smithy-Dgaz7aur.js +1 -0
  305. package/extensions/pidiff/pidiff-ui/dist/assets/snazzy-light-4G7pJPwS.js +1 -0
  306. package/extensions/pidiff/pidiff-ui/dist/assets/solarized-dark-UdsmMDCL.js +1 -0
  307. package/extensions/pidiff/pidiff-ui/dist/assets/solarized-light-C1IUL_tW.js +1 -0
  308. package/extensions/pidiff/pidiff-ui/dist/assets/solidity-Bj7E1mRn.js +1 -0
  309. package/extensions/pidiff/pidiff-ui/dist/assets/soy-C0QWCEMl.js +1 -0
  310. package/extensions/pidiff/pidiff-ui/dist/assets/sparql-D_iOobhT.js +1 -0
  311. package/extensions/pidiff/pidiff-ui/dist/assets/splunk-BC2Px7Mm.js +1 -0
  312. package/extensions/pidiff/pidiff-ui/dist/assets/sql-VoWQdTUw.js +1 -0
  313. package/extensions/pidiff/pidiff-ui/dist/assets/ssh-config-BgfXC-Er.js +1 -0
  314. package/extensions/pidiff/pidiff-ui/dist/assets/stata-BEj75h4q.js +1 -0
  315. package/extensions/pidiff/pidiff-ui/dist/assets/stylus-B6D30XZt.js +1 -0
  316. package/extensions/pidiff/pidiff-ui/dist/assets/surrealql-Cj1XbW6j.js +1 -0
  317. package/extensions/pidiff/pidiff-ui/dist/assets/svelte-HcwCBvjC.js +1 -0
  318. package/extensions/pidiff/pidiff-ui/dist/assets/swift-CyEgAFGc.js +1 -0
  319. package/extensions/pidiff/pidiff-ui/dist/assets/synthwave-84-nFMaYfgc.js +1 -0
  320. package/extensions/pidiff/pidiff-ui/dist/assets/system-verilog-Dh5ihWbf.js +1 -0
  321. package/extensions/pidiff/pidiff-ui/dist/assets/systemd-BxMlprV5.js +1 -0
  322. package/extensions/pidiff/pidiff-ui/dist/assets/talonscript-CohzipZa.js +1 -0
  323. package/extensions/pidiff/pidiff-ui/dist/assets/tasl-DMoTqEGO.js +1 -0
  324. package/extensions/pidiff/pidiff-ui/dist/assets/tcl-CZd0xW_V.js +1 -0
  325. package/extensions/pidiff/pidiff-ui/dist/assets/templ-D775vyzu.js +1 -0
  326. package/extensions/pidiff/pidiff-ui/dist/assets/terraform-DswuEJGm.js +1 -0
  327. package/extensions/pidiff/pidiff-ui/dist/assets/tex-DNmK_71Q.js +1 -0
  328. package/extensions/pidiff/pidiff-ui/dist/assets/tokyo-night-oM2G3aXe.js +1 -0
  329. package/extensions/pidiff/pidiff-ui/dist/assets/toml-CcmNWLt0.js +1 -0
  330. package/extensions/pidiff/pidiff-ui/dist/assets/ts-tags-KERjFDJj.js +1 -0
  331. package/extensions/pidiff/pidiff-ui/dist/assets/tsv-sltzmVWM.js +1 -0
  332. package/extensions/pidiff/pidiff-ui/dist/assets/tsx-CMT8AiHA.js +1 -0
  333. package/extensions/pidiff/pidiff-ui/dist/assets/turtle-ByJddavk.js +1 -0
  334. package/extensions/pidiff/pidiff-ui/dist/assets/twig-B5uxCA6R.js +1 -0
  335. package/extensions/pidiff/pidiff-ui/dist/assets/typescript-5zwf3bJw.js +1 -0
  336. package/extensions/pidiff/pidiff-ui/dist/assets/typespec-BRdr0IET.js +1 -0
  337. package/extensions/pidiff/pidiff-ui/dist/assets/typst-xx02l63O.js +1 -0
  338. package/extensions/pidiff/pidiff-ui/dist/assets/v-DBj4K9d_.js +1 -0
  339. package/extensions/pidiff/pidiff-ui/dist/assets/vala-zf12oZj6.js +1 -0
  340. package/extensions/pidiff/pidiff-ui/dist/assets/vb-DOwzaHZ0.js +1 -0
  341. package/extensions/pidiff/pidiff-ui/dist/assets/verilog-B2gwz-sJ.js +1 -0
  342. package/extensions/pidiff/pidiff-ui/dist/assets/vesper-DdrHHSXu.js +1 -0
  343. package/extensions/pidiff/pidiff-ui/dist/assets/vhdl-BroJfC0k.js +1 -0
  344. package/extensions/pidiff/pidiff-ui/dist/assets/viml-DvXPmvsu.js +1 -0
  345. package/extensions/pidiff/pidiff-ui/dist/assets/vitesse-black-fwtXNY1n.js +1 -0
  346. package/extensions/pidiff/pidiff-ui/dist/assets/vitesse-dark-BZCL-v6S.js +1 -0
  347. package/extensions/pidiff/pidiff-ui/dist/assets/vitesse-light-VbXTXTou.js +1 -0
  348. package/extensions/pidiff/pidiff-ui/dist/assets/vue-BvvQRkFj.js +1 -0
  349. package/extensions/pidiff/pidiff-ui/dist/assets/vue-html-BrBDvgBy.js +1 -0
  350. package/extensions/pidiff/pidiff-ui/dist/assets/vue-vine-1CllPWUz.js +1 -0
  351. package/extensions/pidiff/pidiff-ui/dist/assets/vyper-CgoNMtux.js +1 -0
  352. package/extensions/pidiff/pidiff-ui/dist/assets/wasm-BnjxR4X6.js +1 -0
  353. package/extensions/pidiff/pidiff-ui/dist/assets/wasm-ByWQv1Qj.js +1 -0
  354. package/extensions/pidiff/pidiff-ui/dist/assets/wenyan-C8pVoKbM.js +1 -0
  355. package/extensions/pidiff/pidiff-ui/dist/assets/wgsl-BsKzXJz4.js +1 -0
  356. package/extensions/pidiff/pidiff-ui/dist/assets/wikitext-ClFFjSW2.js +1 -0
  357. package/extensions/pidiff/pidiff-ui/dist/assets/wit-DdvCle-K.js +1 -0
  358. package/extensions/pidiff/pidiff-ui/dist/assets/wolfram-DLL8P-h_.js +1 -0
  359. package/extensions/pidiff/pidiff-ui/dist/assets/worker-BX5VNpEv.js +161 -0
  360. package/extensions/pidiff/pidiff-ui/dist/assets/xml-C3nsfg4x.js +1 -0
  361. package/extensions/pidiff/pidiff-ui/dist/assets/xsl-DDOShcMh.js +1 -0
  362. package/extensions/pidiff/pidiff-ui/dist/assets/yaml-BGNXenqm.js +1 -0
  363. package/extensions/pidiff/pidiff-ui/dist/assets/zenscript-BnlCZFoB.js +1 -0
  364. package/extensions/pidiff/pidiff-ui/dist/assets/zig-CMLA9XwU.js +1 -0
  365. package/extensions/pidiff/pidiff-ui/dist/index.html +13 -0
  366. package/extensions/pidiff/pidiff-ui/index.html +12 -0
  367. package/extensions/pidiff/pidiff-ui/package-lock.json +6496 -0
  368. package/extensions/pidiff/pidiff-ui/package.json +35 -0
  369. package/extensions/pidiff/pidiff-ui/src/App.tsx +1147 -0
  370. package/extensions/pidiff/pidiff-ui/src/components/ui/switch.tsx +29 -0
  371. package/extensions/pidiff/pidiff-ui/src/hooks/useWebSocket.ts +112 -0
  372. package/extensions/pidiff/pidiff-ui/src/lib/app-reconnect-watch.tsx +32 -0
  373. package/extensions/pidiff/pidiff-ui/src/lib/app-refresh-actions.tsx +47 -0
  374. package/extensions/pidiff/pidiff-ui/src/lib/create-logger.ts +37 -0
  375. package/extensions/pidiff/pidiff-ui/src/lib/file-cache-key.ts +34 -0
  376. package/extensions/pidiff/pidiff-ui/src/lib/refresh-control.tsx +43 -0
  377. package/extensions/pidiff/pidiff-ui/src/lib/request-diffs.ts +91 -0
  378. package/extensions/pidiff/pidiff-ui/src/lib/utils.ts +6 -0
  379. package/extensions/pidiff/pidiff-ui/src/lib/ws-send.ts +141 -0
  380. package/extensions/pidiff/pidiff-ui/src/main.tsx +6 -0
  381. package/extensions/pidiff/pidiff-ui/src/styles.css +79 -0
  382. package/extensions/pidiff/pidiff-ui/src/types.ts +56 -0
  383. package/extensions/pidiff/pidiff-ui/tsconfig.json +20 -0
  384. package/extensions/pidiff/pidiff-ui/vite.config.ts +46 -0
  385. package/extensions/pidiff/pidiff.ts +17 -3
  386. package/extensions/shared/daemon-manager.ts +20 -29
  387. package/extensions/shared/find-jiti.ts +103 -0
  388. package/extensions/shared/live-ctx.ts +69 -0
  389. package/package.json +31 -2
  390. package/prompts/create-coms-feature-manager.md +1 -1
  391. package/rules/00-orchestrator-core.md +2 -2
  392. package/rules/15-mcpc.md +35 -0
  393. package/rules/45-file-preview.md +1 -1
  394. package/scripts/build-extension-uis.sh +23 -0
  395. package/scripts/daemon-shared.ts +216 -0
  396. package/scripts/httpd.py +52 -0
  397. package/scripts/pidash-discord.ts +592 -0
  398. package/scripts/pidash-server.ts +437 -0
  399. package/scripts/pidiff-git-ignore.ts +55 -0
  400. package/scripts/pidiff-server.ts +674 -0
  401. package/scripts/serve-ui.ts +97 -0
  402. package/scripts/symlink-cli-specialists.sh +86 -0
  403. package/rules/15-mcp-launchpad.md +0 -46
package/README.md CHANGED
@@ -36,7 +36,7 @@ Single extension that provides:
36
36
  | **Task tracking** | Structured task lists for multi-step workflows — live widget, progress tracking, reminder nudges (owned, based on [@tintinweb/pi-tasks](https://github.com/tintinweb/pi-tasks) MIT) |
37
37
  | **Neovim integration** | Send changed files and review findings to nvim's quickfix list — only active when running inside nvim |
38
38
  | **Inter-agent communication** | P2P (`/coms`) agent communication — on-demand activation via slash command |
39
- | **Slash commands** | `/pr-review`, `/issue-review`, `/release`, `/review-local`, `/review-status`, `/query-db`, `/btw`, `/async-status`, `/async-kill`, `/status`, `/dream`, `/remember`, `/coms`, `/pi-config-settings` — with autocomplete argument hints |
39
+ | **Slash commands** | `/pr-review`, `/issue-review`, `/release`, `/review-local`, `/review-status`, `/query-db`, `/btw`, `/async-status`, `/async-kill`, `/status`, `/dream`, `/remember`, `/coms`, `/pi-config-settings`, `/mcpc connect` — with autocomplete argument hints |
40
40
  | **GitHub autocomplete** | Type `#` in the editor to get issue/PR suggestions from the current repo — lazy-loaded, 5min cache |
41
41
  | **Command arg completions** | Tab-complete arguments for slash commands — providers and models for `/external-ai`, branches for `/review-local`, PR numbers for `/pr-review`, and more |
42
42
  | **Discord bot** | Control pi sessions from your phone via Discord DMs — send prompts, answer ask_user dialogs, switch sessions |
@@ -82,6 +82,7 @@ Single extension that provides:
82
82
  | `/nvim-changed-files` | Send git changed files to nvim's quickfix list (only inside nvim) |
83
83
  | `/pidiff start\|stop\|restart\|status` | Manage the pidiff diff viewer server (per-project) |
84
84
  | `/coms start\|stop\|status` | P2P local agent communication (Unix socket) |
85
+ | `/mcpc connect` | Connect MCP servers from `~/.pi/pi-config/mcp.json` (`mcpc connect --stdio`). Run after editing that file. |
85
86
 
86
87
  ### Inter-Agent Communication (coms)
87
88
 
@@ -120,13 +121,22 @@ See the [Docker section](#docker-sandboxed-execution) below for the full run com
120
121
 
121
122
  ### Native (without Docker)
122
123
 
123
- Run the interactive installer — it walks you through each component with multi-select checkboxes:
124
+ Install from npm and PyPI — no git clone of this repo:
125
+
126
+ ```bash
127
+ pi install npm:pi-orchestrator-config
128
+ pi install npm:@myk-org/pi-vertex-claude # optional Vertex Claude models
129
+ pi install npm:pi-web-access # optional web search/fetch
130
+ uv tool install myk-pi-tools
131
+ ```
132
+
133
+ Or run the interactive installer (downloads the script only; packages still come from npm/PyPI):
124
134
 
125
135
  ```bash
126
136
  uv run https://raw.githubusercontent.com/myk-org/pi-config/main/scripts/install.py
127
137
  ```
128
138
 
129
- Or if you already have the repo cloned:
139
+ If you already have the **dev** clone:
130
140
 
131
141
  ```bash
132
142
  uv run scripts/install.py
@@ -135,8 +145,8 @@ uv run scripts/install.py
135
145
  The installer covers:
136
146
 
137
147
  - **Pi Packages** — pi-config, pi-vertex-claude, pi-web-access, myk-pi-tools, bun
138
- - **Python Tools** — mcp-launchpad (mcpl), prek
139
- - **npm Packages** — acpx, agent-browser
148
+ - **Python Tools** — prek
149
+ - **npm Packages** — mcpc, acpx, agent-browser
140
150
  - **Browser Automation** — playwright + chromium
141
151
  - **Environment Setup** — gitignore configuration
142
152
 
@@ -192,6 +202,7 @@ Add retry logic to the HTTP client in src/api.py
192
202
  /release --dry-run
193
203
  /review-local main
194
204
  /query-db stats
205
+ /mcpc connect
195
206
  ```
196
207
 
197
208
  ### Direct subagent usage
@@ -476,10 +487,6 @@ GH_CONFIG_DIR=/home/youruser/.config/gh
476
487
 
477
488
  # Gemini (optional — required for image generation)
478
489
  GEMINI_API_KEY=xxx
479
-
480
- # mcpl (MCP Launchpad) config path inside the container (must match mount target)
481
- # Use your actual home path — it resolves inside the container via the PI_HOST_USER symlink
482
- MCPL_CONFIG_FILES=/home/youruser/.config/mcpl/mcp.json
483
490
  ```
484
491
 
485
492
  Pass via `--env-file /path/to/.env` in the docker run command.
@@ -494,7 +501,8 @@ files organized by category (lessons, preferences, patterns, decisions, completi
494
501
 
495
502
  The `.pi/memory/` directory is auto-added to the global gitignore in the container
496
503
  (along with `.pi/`, `.worktrees/`, `.cursor/agents/`, `.claude/agents/`, and
497
- `.gemini/agents/`).
504
+ `.gemini/agents/`). This repo's `.gitignore` also ignores those three `*/agents/`
505
+ dirs so `uv build` does not pack local specialist symlinks.
498
506
 
499
507
  For **native** (non-container) usage, add memory (and optionally CLI agent dirs) to your
500
508
  global gitignore:
@@ -593,6 +601,8 @@ Pidiff is a per-project diff viewer that opens in your browser, providing rich b
593
601
 
594
602
  - Branch diff and commit comparison
595
603
  - File tree with search and filtering
604
+ - Header **Refresh** (and the stale-file banner) updates the current diff in place — the file tree and panes stay mounted; only the button spins
605
+ - Refresh is disabled while pidiff is disconnected
596
606
  - Inline review comments on specific lines
597
607
  - Publish review comments back to the pi session
598
608
  - Per-project isolation — no port conflicts between sessions
@@ -621,7 +631,6 @@ PI_PIDIFF_ENABLE=false pi
621
631
 
622
632
  | Mount | Purpose |
623
633
  |---|---|
624
- | `-v "<PATH_TO_MCPL_CONFIG>":"$HOME/.config/mcpl/mcp.json":ro` | MCP server config for `mcpl` |
625
634
  | `-v "$HOME/.agents":"$HOME/.agents":rw` | User-level skills (install/uninstall from container) |
626
635
  | `-v "$HOME/.config/gcloud/application_default_credentials.json":"$HOME/.config/gcloud/application_default_credentials.json":ro` | Google Cloud ADC (for Claude via Vertex AI) |
627
636
  | `-v "$HOME/.config/cursor/auth.json":"$HOME/.config/cursor/auth.json":ro` | Cursor CLI auth (for acpx-cursor / cli-cursor models) |
@@ -644,7 +653,7 @@ PI_PIDIFF_ENABLE=false pi
644
653
  | `uv` / `uvx` | Python execution (enforced by orchestrator) |
645
654
  | `go` | Go development and code review |
646
655
  | `libxml2-dev` | libxml2 headers — needed for building Python C extensions (e.g. ovirt-engine-sdk-python) |
647
- | `mcpl` | MCP server access (search, Jenkins, etc.) |
656
+ | `mcpc` | MCP CLI (`npm: @apify/mcpc`). Put servers in `~/.pi/pi-config/mcp.json` (already on the `~/.pi` mount). Pi runs `mcpc connect … --stdio` on start. After editing the file, `/mcpc connect`. `entrypoint.sh` reinstalls `@apify/mcpc` on every start so `PI_HOST_USER` host `.npm-global` mapping does not hide the image copy. |
648
657
  | `myk-pi-tools` | PR review, release, and other CLI utilities |
649
658
  | `prek` | Pre-commit hook runner |
650
659
  | `acpx` | Agent proxy for remote models |
@@ -716,7 +725,6 @@ alias pi-docker='docker pull ghcr.io/myk-org/pi-config:latest && \
716
725
  -v "$HOME/.gitignore-global":"$HOME/.gitignore-global":ro \
717
726
  -v "$HOME/.ssh":"$HOME/.ssh":ro \
718
727
  -v "$HOME/.config/gh":"$HOME/.config/gh":ro \
719
- -v "$HOME/.config/mcpl/mcp.json":"$HOME/.config/mcpl/mcp.json":ro \ # adjust host path to your mcpl config location
720
728
  -v "$HOME/.agents":"$HOME/.agents":rw \
721
729
  -v "$HOME/.config/gcloud/application_default_credentials.json":"$HOME/.config/gcloud/application_default_credentials.json":ro \
722
730
  -v "$HOME/.config/cursor/auth.json":"$HOME/.config/cursor/auth.json":ro \
@@ -738,8 +746,8 @@ Then just run `pi-docker` from any project directory.
738
746
  > `pi install` runs on each start.
739
747
  > A `WARNING` on stderr is normal when the package is already cached in `~/.pi`.
740
748
  > If pi misbehaves or the warning persists, verify network connectivity
741
- > and run `pi install git:github.com/myk-org/pi-config` and
742
- > `pi install git:github.com/myk-org/pi-config/packages/pi-vertex-claude` manually.
749
+ > and run `pi install npm:pi-orchestrator-config` and
750
+ > `pi install npm:@myk-org/pi-vertex-claude` manually.
743
751
 
744
752
  ## Discord Bot
745
753
 
@@ -19,6 +19,7 @@
19
19
  * /cron <Tab> → add, list, list-all, remove
20
20
  * /dream-auto <Tab> → on, off
21
21
  * /async-kill <Tab> → all (or type name / id prefix)
22
+ * /mcpc <Tab> → connect
22
23
  */
23
24
 
24
25
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
@@ -28,6 +29,7 @@ import * as fs from "node:fs";
28
29
  import { execFileSync } from "node:child_process";
29
30
  import * as path from "node:path";
30
31
  import { getCronFilePath } from "./cron.js";
32
+ import { mcpcArgumentCompletions } from "./mcpc.js";
31
33
 
32
34
  // ── Cache infrastructure ────────────────────────────────────────────
33
35
 
@@ -266,6 +268,8 @@ function registerCompletions(
266
268
  }
267
269
  },
268
270
 
271
+ "mcpc": mcpcArgumentCompletions,
272
+
269
273
  "dream-auto": (prefix: string) => {
270
274
  return filter([
271
275
  { value: "on", label: "on", description: "Enable auto-dreaming (every 3h + session end)" },
@@ -0,0 +1,172 @@
1
+ /**
2
+ * mcpc — connect MCP servers from ~/.pi/pi-config/mcp.json.
3
+ *
4
+ * Auto-connect on pi process start (session_start reason "startup").
5
+ * /mcpc connect reconnects after the user edits that file.
6
+ * Connect failure is logged; it never fails the pi session.
7
+ */
8
+
9
+ import { execFile } from "node:child_process";
10
+ import * as fs from "node:fs";
11
+ import * as os from "node:os";
12
+ import * as path from "node:path";
13
+ import { promisify } from "node:util";
14
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
15
+ import { isPiOneshotInvocation } from "../shared/oneshot.js";
16
+ import { createLogger } from "../shared/logger.js";
17
+
18
+ const execFileAsync = promisify(execFile);
19
+ const log = createLogger("orchestrator", "mcpc");
20
+
21
+ const CONNECT_TIMEOUT_MS = 120_000;
22
+ const MAX_BUFFER = 10 * 1024 * 1024;
23
+
24
+ export type McpcExecFile = (
25
+ file: string,
26
+ args: readonly string[],
27
+ options: { timeout: number; maxBuffer: number; env?: NodeJS.ProcessEnv },
28
+ ) => Promise<{ stdout: string | Buffer; stderr: string | Buffer }>;
29
+
30
+ let execMcpcConnect: McpcExecFile = execFileAsync as McpcExecFile;
31
+
32
+ /** Replace the mcpc subprocess (tests). Pass undefined to restore. */
33
+ export function setMcpcExecFile(fn: McpcExecFile | undefined): void {
34
+ execMcpcConnect = fn ?? (execFileAsync as McpcExecFile);
35
+ log.debug("setMcpcExecFile", fn ? "override" : "restore");
36
+ }
37
+
38
+ export function mcpcConfigPath(): string {
39
+ const home = process.env.HOME || os.homedir();
40
+ const configPath = path.join(home, ".pi", "pi-config", "mcp.json");
41
+ log.debug("mcpcConfigPath", configPath);
42
+ return configPath;
43
+ }
44
+
45
+ export type McpcConnectResult = {
46
+ ok: boolean;
47
+ skipped: boolean;
48
+ message: string;
49
+ };
50
+
51
+ export type McpcCompletionItem = {
52
+ value: string;
53
+ label: string;
54
+ description: string;
55
+ };
56
+
57
+ const MCPC_CONNECT_COMPLETION: McpcCompletionItem = {
58
+ value: "connect",
59
+ label: "connect",
60
+ description: "Connect ~/.pi/pi-config/mcp.json (--stdio)",
61
+ };
62
+
63
+ export function mcpcArgumentCompletions(prefix: string): McpcCompletionItem[] | null {
64
+ log.debug("mcpc argument completions", prefix);
65
+ const needle = prefix.trim().toLowerCase();
66
+ const haystack = `${MCPC_CONNECT_COMPLETION.label} ${MCPC_CONNECT_COMPLETION.description}`.toLowerCase();
67
+ if (!needle || haystack.includes(needle) || MCPC_CONNECT_COMPLETION.value.startsWith(needle)) {
68
+ return [MCPC_CONNECT_COMPLETION];
69
+ }
70
+ return null;
71
+ }
72
+
73
+ function formatExecError(err: unknown): string {
74
+ if (!err || typeof err !== "object") {
75
+ log.debug("formatExecError non-object", String(err));
76
+ return String(err);
77
+ }
78
+ const e = err as {
79
+ code?: string;
80
+ killed?: boolean;
81
+ message?: string;
82
+ stdout?: string;
83
+ stderr?: string;
84
+ };
85
+ log.debug("formatExecError", { code: e.code ?? "none", killed: Boolean(e.killed) });
86
+ const parts: string[] = [];
87
+ if (e.code === "ENOENT") {
88
+ parts.push("mcpc not on PATH. Install: npm install -g @apify/mcpc");
89
+ } else if (e.killed) {
90
+ parts.push(`mcpc connect timed out after ${CONNECT_TIMEOUT_MS / 1000}s`);
91
+ } else if (e.message) {
92
+ parts.push(e.message);
93
+ }
94
+ const out = [e.stdout, e.stderr].filter(Boolean).join("\n").trim();
95
+ if (out) parts.push(out);
96
+ return parts.join("\n") || "mcpc connect failed";
97
+ }
98
+
99
+ /** Run `mcpc connect <mcp.json> --stdio`. Never throws. */
100
+ export async function connectMcpc(): Promise<McpcConnectResult> {
101
+ const configPath = mcpcConfigPath();
102
+ log.debug("connectMcpc entry", configPath);
103
+
104
+ if (!fs.existsSync(configPath)) {
105
+ log.debug("skip: mcp.json missing", configPath);
106
+ return {
107
+ ok: true,
108
+ skipped: true,
109
+ message: `No MCP config at ${configPath} — skip connect (create that file to use mcpc).`,
110
+ };
111
+ }
112
+
113
+ log.info("mcpc connect start", configPath);
114
+ try {
115
+ const { stdout, stderr } = await execMcpcConnect(
116
+ "mcpc",
117
+ ["connect", configPath, "--stdio"],
118
+ {
119
+ timeout: CONNECT_TIMEOUT_MS,
120
+ maxBuffer: MAX_BUFFER,
121
+ env: process.env,
122
+ },
123
+ );
124
+ const out = [stdout, stderr].filter(Boolean).join("\n").trim();
125
+ log.info("mcpc connect finished", configPath);
126
+ log.debug("mcpc connect output", out);
127
+ return {
128
+ ok: true,
129
+ skipped: false,
130
+ message: out || `mcpc connect finished (${configPath} --stdio)`,
131
+ };
132
+ } catch (err) {
133
+ const message = formatExecError(err);
134
+ log.warn("mcpc connect failed; continuing", message);
135
+ return { ok: false, skipped: false, message };
136
+ }
137
+ }
138
+
139
+ export function registerMcpc(pi: ExtensionAPI): void {
140
+ log.info("registerMcpc");
141
+ pi.registerCommand("mcpc", {
142
+ description:
143
+ "Reconnect MCP servers from ~/.pi/pi-config/mcp.json (mcpc connect --stdio). Run after editing that file.",
144
+ handler: async (args, ctx) => {
145
+ const sub = (args || "").trim();
146
+ if (sub && sub !== "connect") {
147
+ log.debug("/mcpc ignored unknown args", sub);
148
+ if (ctx.hasUI) ctx.ui.notify("Usage: /mcpc connect", "warning");
149
+ return;
150
+ }
151
+ log.info("/mcpc connect");
152
+ const result = await connectMcpc();
153
+ if (!ctx.hasUI) return;
154
+ if (result.skipped) ctx.ui.notify(result.message, "info");
155
+ else if (result.ok) ctx.ui.notify(result.message, "info");
156
+ else ctx.ui.notify(result.message, "warning");
157
+ },
158
+ });
159
+
160
+ pi.on("session_start", async (event, _ctx) => {
161
+ const reason = (event as { reason?: string })?.reason ?? "unknown";
162
+ if (reason !== "startup") {
163
+ log.debug("skip auto-connect: session_start reason", reason);
164
+ return;
165
+ }
166
+ if (isPiOneshotInvocation()) {
167
+ log.debug("skip auto-connect: oneshot");
168
+ return;
169
+ }
170
+ await connectMcpc();
171
+ });
172
+ }
@@ -8,6 +8,7 @@ import * as fs from "node:fs";
8
8
  import * as path from "node:path";
9
9
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
10
10
  import { setUvAvailable, isUvAvailable } from "./enforcement-helpers.js";
11
+ import { registerMcpc } from "./mcpc.js";
11
12
  import { checkMinPiVersion } from "./utils.js";
12
13
 
13
14
  /** Check whether a CLI command is available on PATH. */
@@ -209,13 +210,13 @@ async function checkSessionTools(ctx: any): Promise<void> {
209
210
  // Optional
210
211
  if (!hasCmd("gh"))
211
212
  optional.push("gh — GitHub CLI. Install: https://cli.github.com/");
212
- if (!hasCmd("mcpl"))
213
+ if (!hasCmd("mcpc"))
213
214
  optional.push(
214
- "mcpl — MCP Launchpad. Install: https://github.com/kenneth-liao/mcp-launchpad",
215
+ "mcpc — MCP CLI. Install: npm install -g @apify/mcpc",
215
216
  );
216
217
  if (!hasCmd("myk-pi-tools"))
217
218
  optional.push(
218
- "myk-pi-tools — PR/release/review CLI. Install: uv tool install git+https://github.com/myk-org/pi-config",
219
+ "myk-pi-tools — PR/release/review CLI. Install: uv tool install myk-pi-tools",
219
220
  );
220
221
 
221
222
  // Check agent-browser skill
@@ -333,6 +334,7 @@ async function checkUpgradeChangelog(ctx: any): Promise<void> {
333
334
 
334
335
  export function registerSessionValidation(pi: ExtensionAPI): void {
335
336
  registerRepairCommand(pi);
337
+ registerMcpc(pi);
336
338
 
337
339
  pi.on("session_start", async (_event, ctx) => {
338
340
  // Always check uv availability — even in headless mode.
@@ -0,0 +1,25 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema.json",
3
+ "style": "base-nova",
4
+ "rsc": false,
5
+ "tsx": true,
6
+ "tailwind": {
7
+ "config": "",
8
+ "css": "src/styles.css",
9
+ "baseColor": "neutral",
10
+ "cssVariables": true,
11
+ "prefix": ""
12
+ },
13
+ "iconLibrary": "lucide",
14
+ "rtl": false,
15
+ "aliases": {
16
+ "components": "@/components",
17
+ "utils": "@/lib/utils",
18
+ "ui": "@/components/ui",
19
+ "lib": "@/lib",
20
+ "hooks": "@/hooks"
21
+ },
22
+ "menuColor": "default",
23
+ "menuAccent": "subtle",
24
+ "registries": {}
25
+ }
@@ -0,0 +1,2 @@
1
+ /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){:root,:host{--shimmer-angle:20deg}*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0;--scroll-fade-t:0px;--scroll-fade-b:0px;--scroll-fade-s:0px;--scroll-fade-e:0px;--scroll-fade-mask:initial;--shimmer-image:initial;--shimmer-text-fill:initial}}}@layer theme{:root,:host{--font-sans:"Geist Variable", sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-cyan-300:oklch(86.5% .127 207.078);--color-cyan-400:oklch(78.9% .154 211.53);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-pink-400:oklch(71.8% .202 349.761);--color-black:#000;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-normal:0em;--tracking-wider:.05em;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--animate-bounce:bounce 1s infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:"Geist Variable", sans-serif;--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){*{outline-color:color-mix(in oklab, var(--ring) 50%, transparent)}}body{background-color:var(--background);color:var(--foreground)}html{font-family:Geist Variable,sans-serif}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:0}.-top-1{top:calc(var(--spacing) * -1)}.top-0{top:0}.top-1\.5{top:calc(var(--spacing) * 1.5)}.-right-1{right:calc(var(--spacing) * -1)}.right-0{right:0}.right-1\.5{right:calc(var(--spacing) * 1.5)}.bottom-0{bottom:0}.bottom-full{bottom:100%}.left-0{left:0}.z-10{z-index:10}.z-50{z-index:50}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.mx-0\.5{margin-inline:calc(var(--spacing) * .5)}.mx-3{margin-inline:calc(var(--spacing) * 3)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mr-1\.5{margin-right:calc(var(--spacing) * 1.5)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-6{height:calc(var(--spacing) * 6)}.h-16{height:calc(var(--spacing) * 16)}.h-full{height:100%}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-60{max-height:calc(var(--spacing) * 60)}.max-h-\[75vh\]{max-height:75vh}.max-h-\[300px\]{max-height:300px}.w-1{width:var(--spacing)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-6{width:calc(var(--spacing) * 6)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-56{width:calc(var(--spacing) * 56)}.w-72{width:calc(var(--spacing) * 72)}.w-\[320px\]{width:320px}.w-\[520px\]{width:520px}.w-\[600px\]{width:600px}.w-full{width:100%}.w-screen{width:100vw}.max-w-\[200px\]{max-width:200px}.min-w-0{min-width:0}.min-w-\[3\.5em\]{min-width:3.5em}.min-w-\[4em\]{min-width:4em}.min-w-\[120px\]{min-width:120px}.min-w-\[200px\]{min-width:200px}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.animate-bounce{animation:var(--animate-bounce)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:2147483647px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) * .8)}.rounded-sm{border-radius:calc(var(--radius) * .6)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-3,.border-l-\[3px\]{border-left-style:var(--tw-border-style);border-left-width:3px}.border-border,.border-border\/30{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/30{border-color:color-mix(in oklab, var(--border) 30%, transparent)}}.border-border\/50{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/50{border-color:color-mix(in oklab, var(--border) 50%, transparent)}}.border-cyan-400{border-color:var(--color-cyan-400)}.border-green-600{border-color:var(--color-green-600)}.border-orange-500{border-color:var(--color-orange-500)}.border-primary{border-color:var(--primary)}.border-purple-500{border-color:var(--color-purple-500)}.border-red-500{border-color:var(--color-red-500)}.border-yellow-500\/20{border-color:#edb20033}@supports (color:color-mix(in lab, red, red)){.border-yellow-500\/20{border-color:color-mix(in oklab, var(--color-yellow-500) 20%, transparent)}}.border-l-primary{border-left-color:var(--primary)}.border-l-transparent{border-left-color:#0000}.bg-accent,.bg-accent\/50{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.bg-accent\/50{background-color:color-mix(in oklab, var(--accent) 50%, transparent)}}.bg-background{background-color:var(--background)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab, red, red)){.bg-black\/60{background-color:color-mix(in oklab, var(--color-black) 60%, transparent)}}.bg-card{background-color:var(--card)}.bg-cyan-400{background-color:var(--color-cyan-400)}.bg-destructive{background-color:var(--destructive)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/15{background-color:#00c75826}@supports (color:color-mix(in lab, red, red)){.bg-green-500\/15{background-color:color-mix(in oklab, var(--color-green-500) 15%, transparent)}}.bg-muted,.bg-muted\/50{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/50{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}.bg-orange-400{background-color:var(--color-orange-400)}.bg-orange-400\/15{background-color:#ff8b1a26}@supports (color:color-mix(in lab, red, red)){.bg-orange-400\/15{background-color:color-mix(in oklab, var(--color-orange-400) 15%, transparent)}}.bg-primary{background-color:var(--primary)}.bg-red-500\/20{background-color:#fb2c3633}@supports (color:color-mix(in lab, red, red)){.bg-red-500\/20{background-color:color-mix(in oklab, var(--color-red-500) 20%, transparent)}}.bg-transparent{background-color:#0000}.bg-yellow-400{background-color:var(--color-yellow-400)}.bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab, red, red)){.bg-yellow-500\/10{background-color:color-mix(in oklab, var(--color-yellow-500) 10%, transparent)}}.bg-yellow-500\/15{background-color:#edb20026}@supports (color:color-mix(in lab, red, red)){.bg-yellow-500\/15{background-color:color-mix(in oklab, var(--color-yellow-500) 15%, transparent)}}.bg-yellow-500\/30{background-color:#edb2004d}@supports (color:color-mix(in lab, red, red)){.bg-yellow-500\/30{background-color:color-mix(in oklab, var(--color-yellow-500) 30%, transparent)}}.fill-current{fill:currentColor}.object-cover{object-fit:cover}.p-0{padding:0}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-8{padding:calc(var(--spacing) * 8)}.px-0\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-0{padding-block:0}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-\[10vh\]{padding-top:10vh}.pt-\[15vh\]{padding-top:15vh}.pt-\[env\(safe-area-inset-top\,12px\)\]{padding-top:env(safe-area-inset-top,12px)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pl-7{padding-left:calc(var(--spacing) * 7)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.whitespace-pre-wrap{white-space:pre-wrap}.text-blue-400{color:var(--color-blue-400)}.text-border{color:var(--border)}.text-cyan-300{color:var(--color-cyan-300)}.text-cyan-400{color:var(--color-cyan-400)}.text-foreground{color:var(--foreground)}.text-green-500{color:var(--color-green-500)}.text-inherit{color:inherit}.text-muted-foreground,.text-muted-foreground\/50{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\/50{color:color-mix(in oklab, var(--muted-foreground) 50%, transparent)}}.text-orange-400{color:var(--color-orange-400)}.text-pink-400{color:var(--color-pink-400)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-purple-400{color:var(--color-purple-400)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-yellow-300{color:var(--color-yellow-300)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-500{color:var(--color-yellow-500)}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.accent-primary{accent-color:var(--primary)}.opacity-0{opacity:0}.opacity-35{opacity:.35}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *),.group-hover\/session\:opacity-100:is(:where(.group\/session):hover *){opacity:1}}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}@media (hover:hover){.hover\:bg-accent:hover,.hover\:bg-accent\/30:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/30:hover{background-color:color-mix(in oklab, var(--accent) 30%, transparent)}}.hover\:bg-accent\/50:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/50:hover{background-color:color-mix(in oklab, var(--accent) 50%, transparent)}}.hover\:bg-primary\/30:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/30:hover{background-color:color-mix(in oklab, var(--primary) 30%, transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, var(--primary) 90%, transparent)}}.hover\:bg-red-500\/40:hover{background-color:#fb2c3666}@supports (color:color-mix(in lab, red, red)){.hover\:bg-red-500\/40:hover{background-color:color-mix(in oklab, var(--color-red-500) 40%, transparent)}}.hover\:text-blue-300:hover{color:var(--color-blue-300)}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:text-muted-foreground:hover{color:var(--muted-foreground)}.hover\:text-primary:hover,.hover\:text-primary\/80:hover{color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:text-primary\/80:hover{color:color-mix(in oklab, var(--primary) 80%, transparent)}}.hover\:text-yellow-300:hover{color:var(--color-yellow-300)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-80:hover{opacity:.8}}.focus\:border-primary:focus{border-color:var(--primary)}@media not all and (width>=48rem){.max-md\:fixed{position:fixed}.max-md\:inset-y-0{inset-block:0}.max-md\:left-0{left:0}.max-md\:z-20{z-index:20}.max-md\:block{display:block}.max-md\:hidden{display:none}.max-md\:w-\[85vw\]{width:85vw}.max-md\:max-w-\[320px\]{max-width:320px}.max-md\:flex-wrap{flex-wrap:wrap}.max-md\:gap-2{gap:calc(var(--spacing) * 2)}.max-md\:text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}}@media (width>=48rem){.md\:w-10{width:calc(var(--spacing) * 10)}.md\:scrollbar-none{scrollbar-width:none}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:whitespace-nowrap{white-space:nowrap}}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}@property --scroll-fade-t{syntax:"<length-percentage>";inherits:false;initial-value:0}@property --scroll-fade-b{syntax:"<length-percentage>";inherits:false;initial-value:0}@property --scroll-fade-s{syntax:"<length-percentage>";inherits:false;initial-value:0}@property --scroll-fade-e{syntax:"<length-percentage>";inherits:false;initial-value:0}@property --scroll-fade-mask{syntax:"*";inherits:false}@property --shimmer-angle{syntax:"<angle>";inherits:true;initial-value:20deg}@property --shimmer-image{syntax:"*";inherits:false}@property --shimmer-text-fill{syntax:"*";inherits:false}@media (prefers-reduced-motion:reduce){.shimmer{-webkit-text-fill-color:currentColor;background-image:none;animation:none}}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-latin-wght-normal-BgDaEnEv.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--background:oklch(100% 0 0);--foreground:oklch(14.5% 0 0);--card:oklch(100% 0 0);--card-foreground:oklch(14.5% 0 0);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.5% 0 0);--primary:oklch(20.5% 0 0);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(97% 0 0);--secondary-foreground:oklch(20.5% 0 0);--muted:oklch(97% 0 0);--muted-foreground:oklch(55.6% 0 0);--accent:oklch(97% 0 0);--accent-foreground:oklch(20.5% 0 0);--destructive:oklch(57.7% .245 27.325);--border:oklch(92.2% 0 0);--input:oklch(92.2% 0 0);--ring:oklch(70.8% 0 0);--chart-1:oklch(87% 0 0);--chart-2:oklch(55.6% 0 0);--chart-3:oklch(43.9% 0 0);--chart-4:oklch(37.1% 0 0);--chart-5:oklch(26.9% 0 0);--radius:.625rem;--sidebar:oklch(98.5% 0 0);--sidebar-foreground:oklch(14.5% 0 0);--sidebar-primary:oklch(20.5% 0 0);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(97% 0 0);--sidebar-accent-foreground:oklch(20.5% 0 0);--sidebar-border:oklch(92.2% 0 0);--sidebar-ring:oklch(70.8% 0 0)}.dark{--background:oklch(14.5% 0 0);--foreground:oklch(98.5% 0 0);--card:oklch(20.5% 0 0);--card-foreground:oklch(98.5% 0 0);--popover:oklch(20.5% 0 0);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92.2% 0 0);--primary-foreground:oklch(20.5% 0 0);--secondary:oklch(26.9% 0 0);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(26.9% 0 0);--muted-foreground:oklch(70.8% 0 0);--accent:oklch(26.9% 0 0);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.6% 0 0);--chart-1:oklch(87% 0 0);--chart-2:oklch(55.6% 0 0);--chart-3:oklch(43.9% 0 0);--chart-4:oklch(37.1% 0 0);--chart-5:oklch(26.9% 0 0);--sidebar:oklch(20.5% 0 0);--sidebar-foreground:oklch(98.5% 0 0);--sidebar-primary:oklch(48.8% .243 264.376);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(26.9% 0 0);--sidebar-accent-foreground:oklch(98.5% 0 0);--sidebar-border:oklch(100% 0 0/.1);--sidebar-ring:oklch(55.6% 0 0)}body{font-family:SF Mono,Fira Code,JetBrains Mono,Cascadia Code,monospace!important}@media (width<=768px){body{font-size:16px}.body{padding:10px 12px;font-size:15px}.role,.think-toggle{font-size:12px}}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:oklch(40% 0 0);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:oklch(50% 0 0)}*{scrollbar-width:thin;scrollbar-color:oklch(40% 0 0) transparent}html,body,#root{height:100vh}@supports (height:100dvh){html,body,#root{height:100dvh}}.scrollbar-none{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-none::-webkit-scrollbar{display:none}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}