pi-orchestrator-config 4.3.5 → 4.3.7

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 (391) hide show
  1. package/README.md +13 -4
  2. package/extensions/orchestrator/async-agents.ts +41 -36
  3. package/extensions/orchestrator/session-validation.ts +1 -1
  4. package/extensions/pidash/pidash-ui/components.json +25 -0
  5. package/extensions/pidash/pidash-ui/dist/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  6. package/extensions/pidash/pidash-ui/dist/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  7. package/extensions/pidash/pidash-ui/dist/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  8. package/extensions/pidash/pidash-ui/dist/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  9. package/extensions/pidash/pidash-ui/dist/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  10. package/extensions/pidash/pidash-ui/dist/assets/index-BHH9Jo-Z.css +2 -0
  11. package/extensions/pidash/pidash-ui/dist/assets/index-DnwxYm06.js +23 -0
  12. package/extensions/pidash/pidash-ui/dist/index.html +13 -0
  13. package/extensions/pidash/pidash-ui/index.html +12 -0
  14. package/extensions/pidash/pidash-ui/package-lock.json +5545 -0
  15. package/extensions/pidash/pidash-ui/package.json +33 -0
  16. package/extensions/pidash/pidash-ui/src/App.tsx +297 -0
  17. package/extensions/pidash/pidash-ui/src/components/InfoBar.tsx +429 -0
  18. package/extensions/pidash/pidash-ui/src/components/InputBar.tsx +215 -0
  19. package/extensions/pidash/pidash-ui/src/components/KeybindingSettings.tsx +102 -0
  20. package/extensions/pidash/pidash-ui/src/components/MessageList.tsx +404 -0
  21. package/extensions/pidash/pidash-ui/src/components/NotificationSettings.tsx +76 -0
  22. package/extensions/pidash/pidash-ui/src/components/SessionSidebar.tsx +227 -0
  23. package/extensions/pidash/pidash-ui/src/components/SessionSwitcher.tsx +101 -0
  24. package/extensions/pidash/pidash-ui/src/components/Sidebar.tsx +83 -0
  25. package/extensions/pidash/pidash-ui/src/hooks/useKeybindings.ts +102 -0
  26. package/extensions/pidash/pidash-ui/src/hooks/useKeyboardNavigation.ts +69 -0
  27. package/extensions/pidash/pidash-ui/src/hooks/useMessageHandler.ts +436 -0
  28. package/extensions/pidash/pidash-ui/src/hooks/useNotifications.ts +64 -0
  29. package/extensions/pidash/pidash-ui/src/hooks/useSessions.ts +29 -0
  30. package/extensions/pidash/pidash-ui/src/hooks/useWebSocket.ts +39 -0
  31. package/extensions/pidash/pidash-ui/src/lib/utils.ts +6 -0
  32. package/extensions/pidash/pidash-ui/src/main.tsx +5 -0
  33. package/extensions/pidash/pidash-ui/src/styles.css +184 -0
  34. package/extensions/pidash/pidash-ui/src/types.ts +83 -0
  35. package/extensions/pidash/pidash-ui/tsconfig.json +22 -0
  36. package/extensions/pidash/pidash-ui/vite.config.ts +53 -0
  37. package/extensions/pidash/pidash.ts +50 -17
  38. package/extensions/pidiff/pidiff-ui/dist/assets/abap-CLvhMVsD.js +1 -0
  39. package/extensions/pidiff/pidiff-ui/dist/assets/actionscript-3-Cs6JJXT5.js +1 -0
  40. package/extensions/pidiff/pidiff-ui/dist/assets/ada-C5qYipkI.js +1 -0
  41. package/extensions/pidiff/pidiff-ui/dist/assets/ahk-CA9gdOdF.js +1 -0
  42. package/extensions/pidiff/pidiff-ui/dist/assets/ahk2-_6rzW9BS.js +1 -0
  43. package/extensions/pidiff/pidiff-ui/dist/assets/andromeeda-vGVdxbeo.js +1 -0
  44. package/extensions/pidiff/pidiff-ui/dist/assets/angular-html-mp_sY19l.js +1 -0
  45. package/extensions/pidiff/pidiff-ui/dist/assets/angular-ts-BG7dz03J.js +1 -0
  46. package/extensions/pidiff/pidiff-ui/dist/assets/apache-U0d_L8uA.js +1 -0
  47. package/extensions/pidiff/pidiff-ui/dist/assets/apex-KFGFyKwG.js +1 -0
  48. package/extensions/pidiff/pidiff-ui/dist/assets/apl-D0TQH1Y8.js +1 -0
  49. package/extensions/pidiff/pidiff-ui/dist/assets/applescript-CCn79oCD.js +1 -0
  50. package/extensions/pidiff/pidiff-ui/dist/assets/ara-4CJ0cIlV.js +1 -0
  51. package/extensions/pidiff/pidiff-ui/dist/assets/asciidoc-SCjQUq34.js +1 -0
  52. package/extensions/pidiff/pidiff-ui/dist/assets/asm-Cmm7eHzH.js +1 -0
  53. package/extensions/pidiff/pidiff-ui/dist/assets/astro-cuP4968W.js +1 -0
  54. package/extensions/pidiff/pidiff-ui/dist/assets/aurora-x-CDeNXAV0.js +1 -0
  55. package/extensions/pidiff/pidiff-ui/dist/assets/awk-BWXHIvNe.js +1 -0
  56. package/extensions/pidiff/pidiff-ui/dist/assets/ayu-dark-DluEY0Gj.js +1 -0
  57. package/extensions/pidiff/pidiff-ui/dist/assets/ayu-light-C3h-C4tm.js +1 -0
  58. package/extensions/pidiff/pidiff-ui/dist/assets/ayu-mirage-Bqwy1Gya.js +1 -0
  59. package/extensions/pidiff/pidiff-ui/dist/assets/ballerina-B7ZEbQpA.js +1 -0
  60. package/extensions/pidiff/pidiff-ui/dist/assets/bat-qdxAdBWQ.js +1 -0
  61. package/extensions/pidiff/pidiff-ui/dist/assets/beancount-D-usSTwE.js +1 -0
  62. package/extensions/pidiff/pidiff-ui/dist/assets/berry-DKpUyyne.js +1 -0
  63. package/extensions/pidiff/pidiff-ui/dist/assets/bibtex-Ci_nEsc7.js +1 -0
  64. package/extensions/pidiff/pidiff-ui/dist/assets/bicep-CUHmPFLl.js +1 -0
  65. package/extensions/pidiff/pidiff-ui/dist/assets/bird2-CYIUgYqB.js +1 -0
  66. package/extensions/pidiff/pidiff-ui/dist/assets/blade-ClqnBqi9.js +1 -0
  67. package/extensions/pidiff/pidiff-ui/dist/assets/bsl-_VjlB9mv.js +1 -0
  68. package/extensions/pidiff/pidiff-ui/dist/assets/c-VbuMUaRD.js +1 -0
  69. package/extensions/pidiff/pidiff-ui/dist/assets/c3-D0apG41V.js +1 -0
  70. package/extensions/pidiff/pidiff-ui/dist/assets/cadence-CQ2zXKGN.js +1 -0
  71. package/extensions/pidiff/pidiff-ui/dist/assets/cairo-DLTphjLi.js +1 -0
  72. package/extensions/pidiff/pidiff-ui/dist/assets/catppuccin-frappe-C9Q5zVZY.js +1 -0
  73. package/extensions/pidiff/pidiff-ui/dist/assets/catppuccin-latte-CtsyrtPq.js +1 -0
  74. package/extensions/pidiff/pidiff-ui/dist/assets/catppuccin-macchiato-R8nAf1vR.js +1 -0
  75. package/extensions/pidiff/pidiff-ui/dist/assets/catppuccin-mocha-DjuaAJKi.js +1 -0
  76. package/extensions/pidiff/pidiff-ui/dist/assets/chapel-Cs_P4bPZ.js +1 -0
  77. package/extensions/pidiff/pidiff-ui/dist/assets/clarity-CtfBBspg.js +1 -0
  78. package/extensions/pidiff/pidiff-ui/dist/assets/clojure-DqKBuwfJ.js +1 -0
  79. package/extensions/pidiff/pidiff-ui/dist/assets/cmake-Bj61d0ZC.js +1 -0
  80. package/extensions/pidiff/pidiff-ui/dist/assets/cobol-B1_QfE_s.js +1 -0
  81. package/extensions/pidiff/pidiff-ui/dist/assets/codeowners-C8r90Shi.js +1 -0
  82. package/extensions/pidiff/pidiff-ui/dist/assets/codeql-oeQT6MSM.js +1 -0
  83. package/extensions/pidiff/pidiff-ui/dist/assets/coffee-DngpUQ-g.js +1 -0
  84. package/extensions/pidiff/pidiff-ui/dist/assets/common-lisp-Cv5bFMCO.js +1 -0
  85. package/extensions/pidiff/pidiff-ui/dist/assets/coq-DuBRPxYg.js +1 -0
  86. package/extensions/pidiff/pidiff-ui/dist/assets/cpp-BJ9Ee2yy.js +1 -0
  87. package/extensions/pidiff/pidiff-ui/dist/assets/crystal-ClUiGo15.js +1 -0
  88. package/extensions/pidiff/pidiff-ui/dist/assets/csharp-oqKa8noW.js +1 -0
  89. package/extensions/pidiff/pidiff-ui/dist/assets/css-DqTo82CB.js +1 -0
  90. package/extensions/pidiff/pidiff-ui/dist/assets/csv-Dx-8-gkx.js +1 -0
  91. package/extensions/pidiff/pidiff-ui/dist/assets/cue-CE9AQfxI.js +1 -0
  92. package/extensions/pidiff/pidiff-ui/dist/assets/cypher-ClKdZ_lG.js +1 -0
  93. package/extensions/pidiff/pidiff-ui/dist/assets/d-qD-0Kul2.js +1 -0
  94. package/extensions/pidiff/pidiff-ui/dist/assets/dark-plus-Cs2F2srj.js +1 -0
  95. package/extensions/pidiff/pidiff-ui/dist/assets/dart-CnvKMtbv.js +1 -0
  96. package/extensions/pidiff/pidiff-ui/dist/assets/dax-BkyTk9wS.js +1 -0
  97. package/extensions/pidiff/pidiff-ui/dist/assets/desktop-Dlh5hvp9.js +1 -0
  98. package/extensions/pidiff/pidiff-ui/dist/assets/diff-woXpYk--.js +1 -0
  99. package/extensions/pidiff/pidiff-ui/dist/assets/docker-IyjqRm3v.js +1 -0
  100. package/extensions/pidiff/pidiff-ui/dist/assets/dotenv-_5a1GRtc.js +1 -0
  101. package/extensions/pidiff/pidiff-ui/dist/assets/dracula-BHWKrbxM.js +1 -0
  102. package/extensions/pidiff/pidiff-ui/dist/assets/dracula-soft-5eyTD99u.js +1 -0
  103. package/extensions/pidiff/pidiff-ui/dist/assets/dream-maker-DW3nJb8Q.js +1 -0
  104. package/extensions/pidiff/pidiff-ui/dist/assets/edge-DNO_p1iz.js +1 -0
  105. package/extensions/pidiff/pidiff-ui/dist/assets/elixir-D9BFTDA2.js +1 -0
  106. package/extensions/pidiff/pidiff-ui/dist/assets/elm-DViZ7oy1.js +1 -0
  107. package/extensions/pidiff/pidiff-ui/dist/assets/emacs-lisp-c_oH4hRZ.js +1 -0
  108. package/extensions/pidiff/pidiff-ui/dist/assets/erb-BkoQ4OFP.js +1 -0
  109. package/extensions/pidiff/pidiff-ui/dist/assets/erlang-Cphh6RMH.js +1 -0
  110. package/extensions/pidiff/pidiff-ui/dist/assets/everforest-dark-sB-x3p7T.js +1 -0
  111. package/extensions/pidiff/pidiff-ui/dist/assets/everforest-light-Df2xbC6M.js +1 -0
  112. package/extensions/pidiff/pidiff-ui/dist/assets/fennel-DQxkIbk2.js +1 -0
  113. package/extensions/pidiff/pidiff-ui/dist/assets/fish-BJitypiv.js +1 -0
  114. package/extensions/pidiff/pidiff-ui/dist/assets/fluent-C03EYrpw.js +1 -0
  115. package/extensions/pidiff/pidiff-ui/dist/assets/fortran-fixed-form-DEKoE2YW.js +1 -0
  116. package/extensions/pidiff/pidiff-ui/dist/assets/fortran-free-form-CYNrtFtB.js +1 -0
  117. package/extensions/pidiff/pidiff-ui/dist/assets/fsharp-D13ZGOAj.js +1 -0
  118. package/extensions/pidiff/pidiff-ui/dist/assets/gdresource-xMC7jr7x.js +1 -0
  119. package/extensions/pidiff/pidiff-ui/dist/assets/gdscript-DYvRD3hg.js +1 -0
  120. package/extensions/pidiff/pidiff-ui/dist/assets/gdshader-CBce3t8t.js +1 -0
  121. package/extensions/pidiff/pidiff-ui/dist/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  122. package/extensions/pidiff/pidiff-ui/dist/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  123. package/extensions/pidiff/pidiff-ui/dist/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  124. package/extensions/pidiff/pidiff-ui/dist/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  125. package/extensions/pidiff/pidiff-ui/dist/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  126. package/extensions/pidiff/pidiff-ui/dist/assets/genie-CV2tkWYe.js +1 -0
  127. package/extensions/pidiff/pidiff-ui/dist/assets/gherkin-DExj1W_8.js +1 -0
  128. package/extensions/pidiff/pidiff-ui/dist/assets/git-commit-BSykSTBG.js +1 -0
  129. package/extensions/pidiff/pidiff-ui/dist/assets/git-rebase-7gJjIY6i.js +1 -0
  130. package/extensions/pidiff/pidiff-ui/dist/assets/github-dark-C-LZuMrd.js +1 -0
  131. package/extensions/pidiff/pidiff-ui/dist/assets/github-dark-default-DXG-b-1a.js +1 -0
  132. package/extensions/pidiff/pidiff-ui/dist/assets/github-dark-dimmed-Bx1FflLF.js +1 -0
  133. package/extensions/pidiff/pidiff-ui/dist/assets/github-dark-high-contrast-B_tTalzw.js +1 -0
  134. package/extensions/pidiff/pidiff-ui/dist/assets/github-light-EUqPIrTm.js +1 -0
  135. package/extensions/pidiff/pidiff-ui/dist/assets/github-light-default-BXViO-2h.js +1 -0
  136. package/extensions/pidiff/pidiff-ui/dist/assets/github-light-high-contrast-B68TUdTA.js +1 -0
  137. package/extensions/pidiff/pidiff-ui/dist/assets/gleam-CSRkHgEL.js +1 -0
  138. package/extensions/pidiff/pidiff-ui/dist/assets/glimmer-js-BsUtNNHb.js +1 -0
  139. package/extensions/pidiff/pidiff-ui/dist/assets/glimmer-ts-D-0tIMzg.js +1 -0
  140. package/extensions/pidiff/pidiff-ui/dist/assets/glsl-B_FkRuRZ.js +1 -0
  141. package/extensions/pidiff/pidiff-ui/dist/assets/gn-ilITqXS6.js +1 -0
  142. package/extensions/pidiff/pidiff-ui/dist/assets/gnuplot-7GGW24-e.js +1 -0
  143. package/extensions/pidiff/pidiff-ui/dist/assets/go-rLFTqkRN.js +1 -0
  144. package/extensions/pidiff/pidiff-ui/dist/assets/graphql--F2JnwKx.js +1 -0
  145. package/extensions/pidiff/pidiff-ui/dist/assets/groovy-CacY0gHj.js +1 -0
  146. package/extensions/pidiff/pidiff-ui/dist/assets/gruvbox-dark-hard-C820rvS2.js +1 -0
  147. package/extensions/pidiff/pidiff-ui/dist/assets/gruvbox-dark-medium-BPjhmG05.js +1 -0
  148. package/extensions/pidiff/pidiff-ui/dist/assets/gruvbox-dark-soft-MrdJrrXF.js +1 -0
  149. package/extensions/pidiff/pidiff-ui/dist/assets/gruvbox-light-hard-BC_s9l72.js +1 -0
  150. package/extensions/pidiff/pidiff-ui/dist/assets/gruvbox-light-medium-BAWPOn9u.js +1 -0
  151. package/extensions/pidiff/pidiff-ui/dist/assets/gruvbox-light-soft-BSMLrYjP.js +1 -0
  152. package/extensions/pidiff/pidiff-ui/dist/assets/hack-oDlxgxMa.js +1 -0
  153. package/extensions/pidiff/pidiff-ui/dist/assets/haml-BZwbB22w.js +1 -0
  154. package/extensions/pidiff/pidiff-ui/dist/assets/handlebars-D5xaEd_e.js +1 -0
  155. package/extensions/pidiff/pidiff-ui/dist/assets/haskell-D8IpX4py.js +1 -0
  156. package/extensions/pidiff/pidiff-ui/dist/assets/haxe-C8oCnwJJ.js +1 -0
  157. package/extensions/pidiff/pidiff-ui/dist/assets/hcl-Dh228itO.js +1 -0
  158. package/extensions/pidiff/pidiff-ui/dist/assets/hjson-CxZEssPk.js +1 -0
  159. package/extensions/pidiff/pidiff-ui/dist/assets/hlsl-Cvrh5tZx.js +1 -0
  160. package/extensions/pidiff/pidiff-ui/dist/assets/horizon-CE9ld1lL.js +1 -0
  161. package/extensions/pidiff/pidiff-ui/dist/assets/horizon-bright-DSNQnXHK.js +1 -0
  162. package/extensions/pidiff/pidiff-ui/dist/assets/houston-CsvMBhTu.js +1 -0
  163. package/extensions/pidiff/pidiff-ui/dist/assets/html-DBGhw7-O.js +1 -0
  164. package/extensions/pidiff/pidiff-ui/dist/assets/html-derivative-0H2oo-Br.js +1 -0
  165. package/extensions/pidiff/pidiff-ui/dist/assets/http-BH6WBJxg.js +1 -0
  166. package/extensions/pidiff/pidiff-ui/dist/assets/hurl-pKbsDPF3.js +1 -0
  167. package/extensions/pidiff/pidiff-ui/dist/assets/hxml-Dcm88srW.js +1 -0
  168. package/extensions/pidiff/pidiff-ui/dist/assets/hy-CZbG8q4J.js +1 -0
  169. package/extensions/pidiff/pidiff-ui/dist/assets/imba-DsUTQ-LC.js +1 -0
  170. package/extensions/pidiff/pidiff-ui/dist/assets/index-CHmSwztf.css +1 -0
  171. package/extensions/pidiff/pidiff-ui/dist/assets/index-D9FMfzhy.js +2801 -0
  172. package/extensions/pidiff/pidiff-ui/dist/assets/ini-B5eOa1yu.js +1 -0
  173. package/extensions/pidiff/pidiff-ui/dist/assets/java-DAIRA2DV.js +1 -0
  174. package/extensions/pidiff/pidiff-ui/dist/assets/javascript-0oTH0XMX.js +1 -0
  175. package/extensions/pidiff/pidiff-ui/dist/assets/jinja-Cr2SKvYs.js +1 -0
  176. package/extensions/pidiff/pidiff-ui/dist/assets/jison-DkQ5WAwI.js +1 -0
  177. package/extensions/pidiff/pidiff-ui/dist/assets/json-Dso4xRBa.js +1 -0
  178. package/extensions/pidiff/pidiff-ui/dist/assets/json5-BR5RXkoi.js +1 -0
  179. package/extensions/pidiff/pidiff-ui/dist/assets/jsonc-CYpm1nAK.js +1 -0
  180. package/extensions/pidiff/pidiff-ui/dist/assets/jsonl-CmCQp5Yx.js +1 -0
  181. package/extensions/pidiff/pidiff-ui/dist/assets/jsonnet-CJTPZ8u_.js +1 -0
  182. package/extensions/pidiff/pidiff-ui/dist/assets/jssm-DXw9l8Rf.js +1 -0
  183. package/extensions/pidiff/pidiff-ui/dist/assets/jsx-6lZH5KCN.js +1 -0
  184. package/extensions/pidiff/pidiff-ui/dist/assets/julia-D5nsVlA4.js +1 -0
  185. package/extensions/pidiff/pidiff-ui/dist/assets/just-BJmCTT8q.js +1 -0
  186. package/extensions/pidiff/pidiff-ui/dist/assets/kanagawa-dragon-Bozd7klA.js +1 -0
  187. package/extensions/pidiff/pidiff-ui/dist/assets/kanagawa-lotus-BmuOG9ZW.js +1 -0
  188. package/extensions/pidiff/pidiff-ui/dist/assets/kanagawa-wave-BML5mF2J.js +1 -0
  189. package/extensions/pidiff/pidiff-ui/dist/assets/kdl-CsD5j6eV.js +1 -0
  190. package/extensions/pidiff/pidiff-ui/dist/assets/kotlin-DhhofPvG.js +1 -0
  191. package/extensions/pidiff/pidiff-ui/dist/assets/kusto-C7mF5XQf.js +1 -0
  192. package/extensions/pidiff/pidiff-ui/dist/assets/laserwave-C_8bwKvT.js +1 -0
  193. package/extensions/pidiff/pidiff-ui/dist/assets/latex-RNBDVFOB.js +1 -0
  194. package/extensions/pidiff/pidiff-ui/dist/assets/lean-CewbzKMR.js +1 -0
  195. package/extensions/pidiff/pidiff-ui/dist/assets/less-DVTAwKKz.js +1 -0
  196. package/extensions/pidiff/pidiff-ui/dist/assets/light-plus-DVQuIRkW.js +1 -0
  197. package/extensions/pidiff/pidiff-ui/dist/assets/liquid-BNfcDoyE.js +1 -0
  198. package/extensions/pidiff/pidiff-ui/dist/assets/llvm-DqHOMS-s.js +1 -0
  199. package/extensions/pidiff/pidiff-ui/dist/assets/log-BNLmms1o.js +1 -0
  200. package/extensions/pidiff/pidiff-ui/dist/assets/logo-Cluzi2Zq.js +1 -0
  201. package/extensions/pidiff/pidiff-ui/dist/assets/lua-C5h0aGmI.js +1 -0
  202. package/extensions/pidiff/pidiff-ui/dist/assets/luau-C2pBCSgt.js +1 -0
  203. package/extensions/pidiff/pidiff-ui/dist/assets/make-Dixweg8N.js +1 -0
  204. package/extensions/pidiff/pidiff-ui/dist/assets/markdown-BYOwaDjH.js +1 -0
  205. package/extensions/pidiff/pidiff-ui/dist/assets/marko-DNEK1bML.js +1 -0
  206. package/extensions/pidiff/pidiff-ui/dist/assets/material-theme-Bm3Qr25_.js +1 -0
  207. package/extensions/pidiff/pidiff-ui/dist/assets/material-theme-darker-2IIEA8gg.js +1 -0
  208. package/extensions/pidiff/pidiff-ui/dist/assets/material-theme-lighter-uhdI0v04.js +1 -0
  209. package/extensions/pidiff/pidiff-ui/dist/assets/material-theme-ocean-CHQ94UKr.js +1 -0
  210. package/extensions/pidiff/pidiff-ui/dist/assets/material-theme-palenight-B5W6OYN7.js +1 -0
  211. package/extensions/pidiff/pidiff-ui/dist/assets/matlab-D7qyCx1q.js +1 -0
  212. package/extensions/pidiff/pidiff-ui/dist/assets/mdc-B2NVBmGf.js +1 -0
  213. package/extensions/pidiff/pidiff-ui/dist/assets/mdx-DQZ5AkYe.js +1 -0
  214. package/extensions/pidiff/pidiff-ui/dist/assets/mermaid-BxpfTIzt.js +1 -0
  215. package/extensions/pidiff/pidiff-ui/dist/assets/min-dark-BSWPekZh.js +1 -0
  216. package/extensions/pidiff/pidiff-ui/dist/assets/min-light-DDpmG2fV.js +1 -0
  217. package/extensions/pidiff/pidiff-ui/dist/assets/mipsasm-BMqwQI7S.js +1 -0
  218. package/extensions/pidiff/pidiff-ui/dist/assets/mojo-fg40_ntQ.js +1 -0
  219. package/extensions/pidiff/pidiff-ui/dist/assets/monokai-B_bV9PQ9.js +1 -0
  220. package/extensions/pidiff/pidiff-ui/dist/assets/moonbit-DgjMoLWr.js +1 -0
  221. package/extensions/pidiff/pidiff-ui/dist/assets/move-BYnGhZoM.js +1 -0
  222. package/extensions/pidiff/pidiff-ui/dist/assets/narrat-_X_XdTYD.js +1 -0
  223. package/extensions/pidiff/pidiff-ui/dist/assets/nextflow-BJtWHP5T.js +1 -0
  224. package/extensions/pidiff/pidiff-ui/dist/assets/nextflow-groovy-DJMQeKeT.js +1 -0
  225. package/extensions/pidiff/pidiff-ui/dist/assets/nginx-_X9UmOgs.js +1 -0
  226. package/extensions/pidiff/pidiff-ui/dist/assets/night-owl-DhmEMT88.js +1 -0
  227. package/extensions/pidiff/pidiff-ui/dist/assets/night-owl-light-eJ-hLW7d.js +1 -0
  228. package/extensions/pidiff/pidiff-ui/dist/assets/nim-DOS51HeY.js +1 -0
  229. package/extensions/pidiff/pidiff-ui/dist/assets/nix-IvuFDN5E.js +1 -0
  230. package/extensions/pidiff/pidiff-ui/dist/assets/nord-Cb4Vim4T.js +1 -0
  231. package/extensions/pidiff/pidiff-ui/dist/assets/nsis-CjNLYCLg.js +1 -0
  232. package/extensions/pidiff/pidiff-ui/dist/assets/nushell-DHYfO66s.js +1 -0
  233. package/extensions/pidiff/pidiff-ui/dist/assets/objective-c-D1A_Heim.js +1 -0
  234. package/extensions/pidiff/pidiff-ui/dist/assets/objective-cpp-BsSzOQcm.js +1 -0
  235. package/extensions/pidiff/pidiff-ui/dist/assets/ocaml-O90oeIOV.js +1 -0
  236. package/extensions/pidiff/pidiff-ui/dist/assets/odin-B1RWQWA5.js +1 -0
  237. package/extensions/pidiff/pidiff-ui/dist/assets/one-dark-pro-CLwyXe_n.js +1 -0
  238. package/extensions/pidiff/pidiff-ui/dist/assets/one-light-D7Lr4KcI.js +1 -0
  239. package/extensions/pidiff/pidiff-ui/dist/assets/openscad-BUDT5pXO.js +1 -0
  240. package/extensions/pidiff/pidiff-ui/dist/assets/org-Rx4519lx.js +1 -0
  241. package/extensions/pidiff/pidiff-ui/dist/assets/pascal-4ZHwLPI5.js +1 -0
  242. package/extensions/pidiff/pidiff-ui/dist/assets/perl-Daok6kZs.js +1 -0
  243. package/extensions/pidiff/pidiff-ui/dist/assets/php-XTt5v859.js +1 -0
  244. package/extensions/pidiff/pidiff-ui/dist/assets/pierre-dark-CpLgRqie.js +1 -0
  245. package/extensions/pidiff/pidiff-ui/dist/assets/pierre-dark-protanopia-deuteranopia-B35FxJx-.js +1 -0
  246. package/extensions/pidiff/pidiff-ui/dist/assets/pierre-dark-soft-kZQmAZld.js +1 -0
  247. package/extensions/pidiff/pidiff-ui/dist/assets/pierre-dark-tritanopia-CpjhbsIL.js +1 -0
  248. package/extensions/pidiff/pidiff-ui/dist/assets/pierre-dark-vibrant-CpQYzh95.js +1 -0
  249. package/extensions/pidiff/pidiff-ui/dist/assets/pierre-light-CoaEpmwp.js +1 -0
  250. package/extensions/pidiff/pidiff-ui/dist/assets/pierre-light-protanopia-deuteranopia-0fSaH845.js +1 -0
  251. package/extensions/pidiff/pidiff-ui/dist/assets/pierre-light-soft-lWLdNTOI.js +1 -0
  252. package/extensions/pidiff/pidiff-ui/dist/assets/pierre-light-tritanopia-CEbqgOJL.js +1 -0
  253. package/extensions/pidiff/pidiff-ui/dist/assets/pierre-light-vibrant-D80Fkn33.js +1 -0
  254. package/extensions/pidiff/pidiff-ui/dist/assets/pkl-ot-7Btpt.js +1 -0
  255. package/extensions/pidiff/pidiff-ui/dist/assets/plastic-DQwYfKfQ.js +1 -0
  256. package/extensions/pidiff/pidiff-ui/dist/assets/plsql-DGHpHOYJ.js +1 -0
  257. package/extensions/pidiff/pidiff-ui/dist/assets/po-BiJDBrnU.js +1 -0
  258. package/extensions/pidiff/pidiff-ui/dist/assets/poimandres-DRFjx7u4.js +1 -0
  259. package/extensions/pidiff/pidiff-ui/dist/assets/polar-C7UOKdEL.js +1 -0
  260. package/extensions/pidiff/pidiff-ui/dist/assets/postcss-BXeXVLqQ.js +1 -0
  261. package/extensions/pidiff/pidiff-ui/dist/assets/powerquery-DNMTfnFr.js +1 -0
  262. package/extensions/pidiff/pidiff-ui/dist/assets/powershell-CCSX75yM.js +1 -0
  263. package/extensions/pidiff/pidiff-ui/dist/assets/prisma-DMgNhnYS.js +1 -0
  264. package/extensions/pidiff/pidiff-ui/dist/assets/prolog-iXnhIJG7.js +1 -0
  265. package/extensions/pidiff/pidiff-ui/dist/assets/proto-DB4EqR-F.js +1 -0
  266. package/extensions/pidiff/pidiff-ui/dist/assets/pug-f7ey1fQl.js +1 -0
  267. package/extensions/pidiff/pidiff-ui/dist/assets/puppet-CDv2pdJW.js +1 -0
  268. package/extensions/pidiff/pidiff-ui/dist/assets/purescript-9MfHhQsQ.js +1 -0
  269. package/extensions/pidiff/pidiff-ui/dist/assets/python-gzcpVVnB.js +1 -0
  270. package/extensions/pidiff/pidiff-ui/dist/assets/qml-juoUuAUN.js +1 -0
  271. package/extensions/pidiff/pidiff-ui/dist/assets/qmldir-DCQb3MpD.js +1 -0
  272. package/extensions/pidiff/pidiff-ui/dist/assets/qss-Fe1Jh2GI.js +1 -0
  273. package/extensions/pidiff/pidiff-ui/dist/assets/r-BOYZHofT.js +1 -0
  274. package/extensions/pidiff/pidiff-ui/dist/assets/racket-DcIDlBhZ.js +1 -0
  275. package/extensions/pidiff/pidiff-ui/dist/assets/raku-B3gFvitq.js +1 -0
  276. package/extensions/pidiff/pidiff-ui/dist/assets/razor-BcuibiM6.js +1 -0
  277. package/extensions/pidiff/pidiff-ui/dist/assets/rbs-C0MpOrj4.js +1 -0
  278. package/extensions/pidiff/pidiff-ui/dist/assets/red-DX1BQOs8.js +1 -0
  279. package/extensions/pidiff/pidiff-ui/dist/assets/reg-CRGYupPL.js +1 -0
  280. package/extensions/pidiff/pidiff-ui/dist/assets/regexp-BMJaNING.js +1 -0
  281. package/extensions/pidiff/pidiff-ui/dist/assets/rel-BtDbiS_P.js +1 -0
  282. package/extensions/pidiff/pidiff-ui/dist/assets/riscv-Ckw8ddFX.js +1 -0
  283. package/extensions/pidiff/pidiff-ui/dist/assets/ron-VUp2lXgN.js +1 -0
  284. package/extensions/pidiff/pidiff-ui/dist/assets/rose-pine-aMsaMD1D.js +1 -0
  285. package/extensions/pidiff/pidiff-ui/dist/assets/rose-pine-dawn-8PwUyIlP.js +1 -0
  286. package/extensions/pidiff/pidiff-ui/dist/assets/rose-pine-moon-DO-qXg-I.js +1 -0
  287. package/extensions/pidiff/pidiff-ui/dist/assets/rosmsg-CAekHB0j.js +1 -0
  288. package/extensions/pidiff/pidiff-ui/dist/assets/rst-CJY1LueG.js +1 -0
  289. package/extensions/pidiff/pidiff-ui/dist/assets/ruby-r3j2HpTd.js +1 -0
  290. package/extensions/pidiff/pidiff-ui/dist/assets/rust-Cfkwpbl8.js +1 -0
  291. package/extensions/pidiff/pidiff-ui/dist/assets/sas-D60aovOU.js +1 -0
  292. package/extensions/pidiff/pidiff-ui/dist/assets/sass-DXrisJhu.js +1 -0
  293. package/extensions/pidiff/pidiff-ui/dist/assets/scala-BiFt_7mu.js +1 -0
  294. package/extensions/pidiff/pidiff-ui/dist/assets/scheme-DQCgrYNe.js +1 -0
  295. package/extensions/pidiff/pidiff-ui/dist/assets/scss-DsQ9e_9i.js +1 -0
  296. package/extensions/pidiff/pidiff-ui/dist/assets/sdbl-bTVj8UrX.js +1 -0
  297. package/extensions/pidiff/pidiff-ui/dist/assets/shaderlab-TOUzSsQk.js +1 -0
  298. package/extensions/pidiff/pidiff-ui/dist/assets/shellscript-C0CTDLfP.js +1 -0
  299. package/extensions/pidiff/pidiff-ui/dist/assets/shellsession-CYQ4mhku.js +1 -0
  300. package/extensions/pidiff/pidiff-ui/dist/assets/slack-dark-DnToyrRv.js +1 -0
  301. package/extensions/pidiff/pidiff-ui/dist/assets/slack-ochin-B2OO5cIa.js +1 -0
  302. package/extensions/pidiff/pidiff-ui/dist/assets/smalltalk-BHpQb5nM.js +1 -0
  303. package/extensions/pidiff/pidiff-ui/dist/assets/smithy-Dgaz7aur.js +1 -0
  304. package/extensions/pidiff/pidiff-ui/dist/assets/snazzy-light-4G7pJPwS.js +1 -0
  305. package/extensions/pidiff/pidiff-ui/dist/assets/solarized-dark-UdsmMDCL.js +1 -0
  306. package/extensions/pidiff/pidiff-ui/dist/assets/solarized-light-C1IUL_tW.js +1 -0
  307. package/extensions/pidiff/pidiff-ui/dist/assets/solidity-Bj7E1mRn.js +1 -0
  308. package/extensions/pidiff/pidiff-ui/dist/assets/soy-K7-GBqQU.js +1 -0
  309. package/extensions/pidiff/pidiff-ui/dist/assets/sparql-D_iOobhT.js +1 -0
  310. package/extensions/pidiff/pidiff-ui/dist/assets/splunk-BC2Px7Mm.js +1 -0
  311. package/extensions/pidiff/pidiff-ui/dist/assets/sql-BPU0aGlV.js +1 -0
  312. package/extensions/pidiff/pidiff-ui/dist/assets/ssh-config-BgfXC-Er.js +1 -0
  313. package/extensions/pidiff/pidiff-ui/dist/assets/stata-BBQHbN5d.js +1 -0
  314. package/extensions/pidiff/pidiff-ui/dist/assets/stylus-B6D30XZt.js +1 -0
  315. package/extensions/pidiff/pidiff-ui/dist/assets/surrealql-DaVLur3e.js +1 -0
  316. package/extensions/pidiff/pidiff-ui/dist/assets/svelte-CPKe6KLX.js +1 -0
  317. package/extensions/pidiff/pidiff-ui/dist/assets/swift-CyEgAFGc.js +1 -0
  318. package/extensions/pidiff/pidiff-ui/dist/assets/synthwave-84-nFMaYfgc.js +1 -0
  319. package/extensions/pidiff/pidiff-ui/dist/assets/system-verilog-Dh5ihWbf.js +1 -0
  320. package/extensions/pidiff/pidiff-ui/dist/assets/systemd-BxMlprV5.js +1 -0
  321. package/extensions/pidiff/pidiff-ui/dist/assets/talonscript-CohzipZa.js +1 -0
  322. package/extensions/pidiff/pidiff-ui/dist/assets/tasl-DMoTqEGO.js +1 -0
  323. package/extensions/pidiff/pidiff-ui/dist/assets/tcl-CZd0xW_V.js +1 -0
  324. package/extensions/pidiff/pidiff-ui/dist/assets/templ-4FsggzCO.js +1 -0
  325. package/extensions/pidiff/pidiff-ui/dist/assets/terraform-DswuEJGm.js +1 -0
  326. package/extensions/pidiff/pidiff-ui/dist/assets/tex-Bz9V0XEc.js +1 -0
  327. package/extensions/pidiff/pidiff-ui/dist/assets/tokyo-night-oM2G3aXe.js +1 -0
  328. package/extensions/pidiff/pidiff-ui/dist/assets/toml-CcmNWLt0.js +1 -0
  329. package/extensions/pidiff/pidiff-ui/dist/assets/ts-tags-BAJP-RsL.js +1 -0
  330. package/extensions/pidiff/pidiff-ui/dist/assets/tsv-sltzmVWM.js +1 -0
  331. package/extensions/pidiff/pidiff-ui/dist/assets/tsx-CaD50Q9K.js +1 -0
  332. package/extensions/pidiff/pidiff-ui/dist/assets/turtle-ByJddavk.js +1 -0
  333. package/extensions/pidiff/pidiff-ui/dist/assets/twig-Bo_rsqRW.js +1 -0
  334. package/extensions/pidiff/pidiff-ui/dist/assets/typescript-BTuHo9Ga.js +1 -0
  335. package/extensions/pidiff/pidiff-ui/dist/assets/typespec-BRdr0IET.js +1 -0
  336. package/extensions/pidiff/pidiff-ui/dist/assets/typst-BvQMhY4k.js +1 -0
  337. package/extensions/pidiff/pidiff-ui/dist/assets/v-DBj4K9d_.js +1 -0
  338. package/extensions/pidiff/pidiff-ui/dist/assets/vala-zf12oZj6.js +1 -0
  339. package/extensions/pidiff/pidiff-ui/dist/assets/vb-DOwzaHZ0.js +1 -0
  340. package/extensions/pidiff/pidiff-ui/dist/assets/verilog-B2gwz-sJ.js +1 -0
  341. package/extensions/pidiff/pidiff-ui/dist/assets/vesper-DdrHHSXu.js +1 -0
  342. package/extensions/pidiff/pidiff-ui/dist/assets/vhdl-BroJfC0k.js +1 -0
  343. package/extensions/pidiff/pidiff-ui/dist/assets/viml-DvXPmvsu.js +1 -0
  344. package/extensions/pidiff/pidiff-ui/dist/assets/vitesse-black-fwtXNY1n.js +1 -0
  345. package/extensions/pidiff/pidiff-ui/dist/assets/vitesse-dark-BZCL-v6S.js +1 -0
  346. package/extensions/pidiff/pidiff-ui/dist/assets/vitesse-light-VbXTXTou.js +1 -0
  347. package/extensions/pidiff/pidiff-ui/dist/assets/vue-D8h9s3oH.js +1 -0
  348. package/extensions/pidiff/pidiff-ui/dist/assets/vue-html-UkoLjlSQ.js +1 -0
  349. package/extensions/pidiff/pidiff-ui/dist/assets/vue-vine-lVry86q7.js +1 -0
  350. package/extensions/pidiff/pidiff-ui/dist/assets/vyper-CgoNMtux.js +1 -0
  351. package/extensions/pidiff/pidiff-ui/dist/assets/wasm-BnjxR4X6.js +1 -0
  352. package/extensions/pidiff/pidiff-ui/dist/assets/wasm-ByWQv1Qj.js +1 -0
  353. package/extensions/pidiff/pidiff-ui/dist/assets/wenyan-C8pVoKbM.js +1 -0
  354. package/extensions/pidiff/pidiff-ui/dist/assets/wgsl-BsKzXJz4.js +1 -0
  355. package/extensions/pidiff/pidiff-ui/dist/assets/wikitext-ClFFjSW2.js +1 -0
  356. package/extensions/pidiff/pidiff-ui/dist/assets/wit-DdvCle-K.js +1 -0
  357. package/extensions/pidiff/pidiff-ui/dist/assets/wolfram-DLL8P-h_.js +1 -0
  358. package/extensions/pidiff/pidiff-ui/dist/assets/worker-BX5VNpEv.js +161 -0
  359. package/extensions/pidiff/pidiff-ui/dist/assets/xml-BxyPU0Nr.js +1 -0
  360. package/extensions/pidiff/pidiff-ui/dist/assets/xsl-BUb2EUMx.js +1 -0
  361. package/extensions/pidiff/pidiff-ui/dist/assets/yaml-qnjzIwGf.js +1 -0
  362. package/extensions/pidiff/pidiff-ui/dist/assets/zenscript-BnlCZFoB.js +1 -0
  363. package/extensions/pidiff/pidiff-ui/dist/assets/zig-CMLA9XwU.js +1 -0
  364. package/extensions/pidiff/pidiff-ui/dist/index.html +13 -0
  365. package/extensions/pidiff/pidiff-ui/index.html +12 -0
  366. package/extensions/pidiff/pidiff-ui/package-lock.json +6496 -0
  367. package/extensions/pidiff/pidiff-ui/package.json +35 -0
  368. package/extensions/pidiff/pidiff-ui/src/App.tsx +1088 -0
  369. package/extensions/pidiff/pidiff-ui/src/components/ui/switch.tsx +29 -0
  370. package/extensions/pidiff/pidiff-ui/src/hooks/useWebSocket.ts +70 -0
  371. package/extensions/pidiff/pidiff-ui/src/lib/utils.ts +6 -0
  372. package/extensions/pidiff/pidiff-ui/src/main.tsx +6 -0
  373. package/extensions/pidiff/pidiff-ui/src/styles.css +79 -0
  374. package/extensions/pidiff/pidiff-ui/src/types.ts +56 -0
  375. package/extensions/pidiff/pidiff-ui/tsconfig.json +20 -0
  376. package/extensions/pidiff/pidiff-ui/vite.config.ts +46 -0
  377. package/extensions/pidiff/pidiff.ts +17 -3
  378. package/extensions/shared/daemon-manager.ts +20 -29
  379. package/extensions/shared/find-jiti.ts +103 -0
  380. package/extensions/shared/live-ctx.ts +69 -0
  381. package/package.json +28 -1
  382. package/prompts/create-coms-feature-manager.md +1 -1
  383. package/rules/45-file-preview.md +1 -1
  384. package/scripts/build-extension-uis.sh +23 -0
  385. package/scripts/daemon-shared.ts +216 -0
  386. package/scripts/httpd.py +52 -0
  387. package/scripts/pidash-discord.ts +592 -0
  388. package/scripts/pidash-server.ts +437 -0
  389. package/scripts/pidiff-server.ts +673 -0
  390. package/scripts/serve-ui.ts +97 -0
  391. package/scripts/symlink-cli-specialists.sh +86 -0
package/README.md CHANGED
@@ -120,13 +120,22 @@ See the [Docker section](#docker-sandboxed-execution) below for the full run com
120
120
 
121
121
  ### Native (without Docker)
122
122
 
123
- Run the interactive installer — it walks you through each component with multi-select checkboxes:
123
+ Install from npm and PyPI — no git clone of this repo:
124
+
125
+ ```bash
126
+ pi install npm:pi-orchestrator-config
127
+ pi install npm:@myk-org/pi-vertex-claude # optional Vertex Claude models
128
+ pi install npm:pi-web-access # optional web search/fetch
129
+ uv tool install myk-pi-tools
130
+ ```
131
+
132
+ Or run the interactive installer (downloads the script only; packages still come from npm/PyPI):
124
133
 
125
134
  ```bash
126
135
  uv run https://raw.githubusercontent.com/myk-org/pi-config/main/scripts/install.py
127
136
  ```
128
137
 
129
- Or if you already have the repo cloned:
138
+ If you already have the **dev** clone:
130
139
 
131
140
  ```bash
132
141
  uv run scripts/install.py
@@ -738,8 +747,8 @@ Then just run `pi-docker` from any project directory.
738
747
  > `pi install` runs on each start.
739
748
  > A `WARNING` on stderr is normal when the package is already cached in `~/.pi`.
740
749
  > 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.
750
+ > and run `pi install npm:pi-orchestrator-config` and
751
+ > `pi install npm:@myk-org/pi-vertex-claude` manually.
743
752
 
744
753
  ## Discord Bot
745
754
 
@@ -921,55 +921,60 @@ export function registerAsyncAgents(
921
921
  // Find the runner script
922
922
  const runnerPath = path.join(path.dirname(fileURLToPath(import.meta.url)), "async-runner.ts");
923
923
 
924
- // Find jiti for TypeScript execution
924
+ // Find jiti for TypeScript execution — walk UP from known roots until
925
+ // found; never assume a fixed depth (install layouts vary: dist/,
926
+ // dist/bundle/, workspace hoisting, nested node_modules).
925
927
  let jitiCliPath: string | undefined;
926
- // Strategy 1: resolve from pi's own require context
927
- // NOTE: newer pi SDK "exports" maps hide ./package.json — fall back to
928
- // resolving the main entry and walking up to its package root.
929
- try {
930
- const req = createRequire(import.meta.url);
931
- let piPkgJsonPath: string | undefined;
932
- try {
933
- piPkgJsonPath = req.resolve("@earendil-works/pi-coding-agent/package.json");
934
- } catch {
935
- const entry = req.resolve("@earendil-works/pi-coding-agent");
936
- let dir = path.dirname(entry);
937
- while (dir !== path.dirname(dir)) {
938
- const pj = path.join(dir, "package.json");
939
- if (fs.existsSync(pj) && JSON.parse(fs.readFileSync(pj, "utf8"))?.name === "@earendil-works/pi-coding-agent") { piPkgJsonPath = pj; break; }
940
- dir = path.dirname(dir);
941
- }
928
+ const jitiProbes: string[] = [];
929
+ const findJitiUnder = (label: string, startDir: string): string | undefined => {
930
+ let dir = startDir;
931
+ while (dir !== path.dirname(dir)) {
932
+ const candidate = path.join(dir, "node_modules/jiti/lib/jiti-cli.mjs");
933
+ jitiProbes.push(`${fs.existsSync(candidate) ? "HIT" : "--"} ${candidate}`);
934
+ if (fs.existsSync(candidate)) return candidate;
935
+ dir = path.dirname(dir);
942
936
  }
943
- if (piPkgJsonPath) {
944
- const candidate = path.join(path.dirname(piPkgJsonPath), "node_modules/jiti/lib/jiti-cli.mjs");
945
- if (fs.existsSync(candidate)) jitiCliPath = candidate;
937
+ jitiProbes.push(`(exhausted from ${label}: ${startDir})`);
938
+ return undefined;
939
+ };
940
+
941
+ // Strategy 1: resolve from pi's own install location (the running binary).
942
+ try {
943
+ if (process.argv[1]) {
944
+ const piRoot = path.dirname(fs.realpathSync(process.argv[1]));
945
+ jitiCliPath = findJitiUnder("argv-binary", piRoot);
946
946
  }
947
947
  } catch (e: any) {
948
- log.debug(`jiti strategy 1 (require.resolve) failed: ${e?.message || e}`);
948
+ log.debug(`jiti strategy 1 (running binary) failed: ${e?.message || e}`);
949
949
  }
950
- // Strategy 2: resolve from the pi binary (works for global npm installs)
950
+
951
+ // Strategy 2: resolve the pi SDK package from this module's require context.
951
952
  if (!jitiCliPath) {
952
953
  try {
953
- const piScript = process.argv[1];
954
- if (piScript) {
955
- const realPath = fs.realpathSync(piScript);
956
- // pi script -> dist/cli.js, package root is 2 levels up
957
- const piPkgDir = path.dirname(path.dirname(realPath));
958
- const candidate = path.join(piPkgDir, "node_modules/jiti/lib/jiti-cli.mjs");
959
- if (fs.existsSync(candidate)) jitiCliPath = candidate;
954
+ const req = createRequire(fileURLToPath(import.meta.url));
955
+ let sdkPkgJson: string | undefined;
956
+ try {
957
+ sdkPkgJson = req.resolve("@earendil-works/pi-coding-agent/package.json");
958
+ } catch {
959
+ // Newer SDK "exports" maps hide ./package.json — resolve the entry
960
+ // and walk up to the owning package.json instead.
961
+ let dir = path.dirname(req.resolve("@earendil-works/pi-coding-agent"));
962
+ while (dir !== path.dirname(dir)) {
963
+ const pj = path.join(dir, "package.json");
964
+ if (fs.existsSync(pj) && JSON.parse(fs.readFileSync(pj, "utf8"))?.name === "@earendil-works/pi-coding-agent") { sdkPkgJson = pj; break; }
965
+ dir = path.dirname(dir);
966
+ }
960
967
  }
968
+ if (sdkPkgJson) jitiCliPath ??= findJitiUnder("sdk-pkg", path.dirname(sdkPkgJson));
961
969
  } catch (e: any) {
962
- log.debug(`jiti strategy 2 (process.argv) failed: ${e?.message || e}`);
970
+ log.debug(`jiti strategy 2 (SDK package) failed: ${e?.message || e}`);
963
971
  }
964
972
  }
965
973
 
966
- // Strategy 3: this package's own node_modules — git/stow installs ship
967
- // jiti themselves (npm consumers are covered by strategies 1-2).
974
+ // Strategy 3: this package's own node_modules (git/stow clones ship jiti).
968
975
  if (!jitiCliPath) {
969
976
  try {
970
- const pkgRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../..");
971
- const candidate = path.join(pkgRoot, "node_modules/jiti/lib/jiti-cli.mjs");
972
- if (fs.existsSync(candidate)) jitiCliPath = candidate;
977
+ jitiCliPath = findJitiUnder("extension-dir", path.dirname(fileURLToPath(import.meta.url)));
973
978
  } catch (e: any) {
974
979
  log.debug(`jiti strategy 3 (package root) failed: ${e?.message || e}`);
975
980
  }
@@ -978,7 +983,7 @@ export function registerAsyncAgents(
978
983
  // Fail fast with a self-explanatory error instead of spawning a child that
979
984
  // cannot load TypeScript (bare node dies on ".js"→".ts" specifiers).
980
985
  if (!jitiCliPath) {
981
- log.error(`async-spawn: ${id} — no jiti-cli.mjs found (strategies 1-3 failed); refusing to spawn`);
986
+ log.error(`async-spawn: ${id} — no jiti-cli.mjs found. Probes:\n ${(jitiProbes.slice(-14)).join("\n ")}`);
982
987
  // Clean up the artifacts we already created — nothing will consume them.
983
988
  try { fs.rmSync(configPath, { force: true }); } catch {}
984
989
  try { fs.rmSync(workerDir, { recursive: true, force: true }); } catch {}
@@ -215,7 +215,7 @@ async function checkSessionTools(ctx: any): Promise<void> {
215
215
  );
216
216
  if (!hasCmd("myk-pi-tools"))
217
217
  optional.push(
218
- "myk-pi-tools — PR/release/review CLI. Install: uv tool install git+https://github.com/myk-org/pi-config",
218
+ "myk-pi-tools — PR/release/review CLI. Install: uv tool install myk-pi-tools",
219
219
  );
220
220
 
221
221
  // Check agent-browser skill
@@ -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}}