pi-kot 0.1.21 → 0.1.22

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 (348) hide show
  1. package/bin/pi-kot.mjs +148 -0
  2. package/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  3. package/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  4. package/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  5. package/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  6. package/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  7. package/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  8. package/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  9. package/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  10. package/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  11. package/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  12. package/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  13. package/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  14. package/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  15. package/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  16. package/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  17. package/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  18. package/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  19. package/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  20. package/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  21. package/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  22. package/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  23. package/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  24. package/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  25. package/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  26. package/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  27. package/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  28. package/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  29. package/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  30. package/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  31. package/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  32. package/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  33. package/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  34. package/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  35. package/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  36. package/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  37. package/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  38. package/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  39. package/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  40. package/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  41. package/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  42. package/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  43. package/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  44. package/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  45. package/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  46. package/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  47. package/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  48. package/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  49. package/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  50. package/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  51. package/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  52. package/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  53. package/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  54. package/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  55. package/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  56. package/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  57. package/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  58. package/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  59. package/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  60. package/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  61. package/client/assets/index-CE_Na97I.js +75 -0
  62. package/client/assets/index-CE_Na97I.js.map +1 -0
  63. package/client/assets/index-QP95zkpd.css +1 -0
  64. package/client/assets/rolldown-runtime-QTnfLwEv.js +1 -0
  65. package/client/assets/vendor-codemirror-CD3uCqRj.js +48 -0
  66. package/client/assets/vendor-codemirror-CD3uCqRj.js.map +1 -0
  67. package/client/assets/vendor-icons-W8thHNMl.js +2 -0
  68. package/client/assets/vendor-icons-W8thHNMl.js.map +1 -0
  69. package/client/assets/vendor-katex-4z5K3dyr.js +260 -0
  70. package/client/assets/vendor-katex-4z5K3dyr.js.map +1 -0
  71. package/client/assets/vendor-katex-CYlHEDRF.css +1 -0
  72. package/client/assets/vendor-markdown-BSzxNR_7.js +35 -0
  73. package/client/assets/vendor-markdown-BSzxNR_7.js.map +1 -0
  74. package/client/assets/vendor-prism-CQGp13s2.js +4 -0
  75. package/client/assets/vendor-prism-CQGp13s2.js.map +1 -0
  76. package/client/assets/vendor-xterm-BrP-ENHg.css +1 -0
  77. package/client/assets/vendor-xterm-DXwh06H3.js +36 -0
  78. package/client/assets/vendor-xterm-DXwh06H3.js.map +1 -0
  79. package/client/index.html +23 -0
  80. package/package.json +5 -3
  81. package/server/ask-user-question/envelope.d.ts +11 -0
  82. package/server/ask-user-question/envelope.d.ts.map +1 -0
  83. package/server/ask-user-question/envelope.js +41 -0
  84. package/server/ask-user-question/envelope.js.map +1 -0
  85. package/server/ask-user-question/plan-mode-question-tool.d.ts +26 -0
  86. package/server/ask-user-question/plan-mode-question-tool.d.ts.map +1 -0
  87. package/server/ask-user-question/plan-mode-question-tool.js +273 -0
  88. package/server/ask-user-question/plan-mode-question-tool.js.map +1 -0
  89. package/server/ask-user-question/prompt-strings.d.ts +4 -0
  90. package/server/ask-user-question/prompt-strings.d.ts.map +1 -0
  91. package/server/ask-user-question/prompt-strings.js +18 -0
  92. package/server/ask-user-question/prompt-strings.js.map +1 -0
  93. package/server/ask-user-question/registry.d.ts +39 -0
  94. package/server/ask-user-question/registry.d.ts.map +1 -0
  95. package/server/ask-user-question/registry.js +124 -0
  96. package/server/ask-user-question/registry.js.map +1 -0
  97. package/server/ask-user-question/tool.d.ts +4 -0
  98. package/server/ask-user-question/tool.d.ts.map +1 -0
  99. package/server/ask-user-question/tool.js +68 -0
  100. package/server/ask-user-question/tool.js.map +1 -0
  101. package/server/ask-user-question/types.d.ts +50 -0
  102. package/server/ask-user-question/types.d.ts.map +1 -0
  103. package/server/ask-user-question/types.js +7 -0
  104. package/server/ask-user-question/types.js.map +1 -0
  105. package/server/ask-user-question/validate.d.ts +3 -0
  106. package/server/ask-user-question/validate.d.ts.map +1 -0
  107. package/server/ask-user-question/validate.js +67 -0
  108. package/server/ask-user-question/validate.js.map +1 -0
  109. package/server/clone-provider.d.ts +55 -0
  110. package/server/clone-provider.d.ts.map +1 -0
  111. package/server/clone-provider.js +172 -0
  112. package/server/clone-provider.js.map +1 -0
  113. package/server/compaction-cards.d.ts +62 -0
  114. package/server/compaction-cards.d.ts.map +1 -0
  115. package/server/compaction-cards.js +180 -0
  116. package/server/compaction-cards.js.map +1 -0
  117. package/server/compaction-continuation.d.ts +112 -0
  118. package/server/compaction-continuation.d.ts.map +1 -0
  119. package/server/compaction-continuation.js +65 -0
  120. package/server/compaction-continuation.js.map +1 -0
  121. package/server/config-store.d.ts +97 -0
  122. package/server/config-store.d.ts.map +1 -0
  123. package/server/config-store.js +351 -0
  124. package/server/config-store.js.map +1 -0
  125. package/server/config.d.ts +24 -0
  126. package/server/config.d.ts.map +1 -0
  127. package/server/config.js +67 -0
  128. package/server/config.js.map +1 -0
  129. package/server/event-stream.d.ts +28 -0
  130. package/server/event-stream.d.ts.map +1 -0
  131. package/server/event-stream.js +153 -0
  132. package/server/event-stream.js.map +1 -0
  133. package/server/extension-manager.d.ts +116 -0
  134. package/server/extension-manager.d.ts.map +1 -0
  135. package/server/extension-manager.js +586 -0
  136. package/server/extension-manager.js.map +1 -0
  137. package/server/extension-scanner.d.ts +26 -0
  138. package/server/extension-scanner.d.ts.map +1 -0
  139. package/server/extension-scanner.js +107 -0
  140. package/server/extension-scanner.js.map +1 -0
  141. package/server/extension-ui-bridge.d.ts +35 -0
  142. package/server/extension-ui-bridge.d.ts.map +1 -0
  143. package/server/extension-ui-bridge.js +228 -0
  144. package/server/extension-ui-bridge.js.map +1 -0
  145. package/server/file-manager.d.ts +79 -0
  146. package/server/file-manager.d.ts.map +1 -0
  147. package/server/file-manager.js +535 -0
  148. package/server/file-manager.js.map +1 -0
  149. package/server/file-searcher.d.ts +29 -0
  150. package/server/file-searcher.d.ts.map +1 -0
  151. package/server/file-searcher.js +318 -0
  152. package/server/file-searcher.js.map +1 -0
  153. package/server/git-operations.d.ts +346 -0
  154. package/server/git-operations.d.ts.map +1 -0
  155. package/server/git-operations.js +884 -0
  156. package/server/git-operations.js.map +1 -0
  157. package/server/hunk-stager.d.ts +56 -0
  158. package/server/hunk-stager.d.ts.map +1 -0
  159. package/server/hunk-stager.js +137 -0
  160. package/server/hunk-stager.js.map +1 -0
  161. package/server/index.d.ts +21 -0
  162. package/server/index.d.ts.map +1 -0
  163. package/server/index.js +262 -0
  164. package/server/index.js.map +1 -0
  165. package/server/mcp/config.d.ts +23 -0
  166. package/server/mcp/config.d.ts.map +1 -0
  167. package/server/mcp/config.js +139 -0
  168. package/server/mcp/config.js.map +1 -0
  169. package/server/mcp/manager.d.ts +40 -0
  170. package/server/mcp/manager.d.ts.map +1 -0
  171. package/server/mcp/manager.js +435 -0
  172. package/server/mcp/manager.js.map +1 -0
  173. package/server/mcp/stdio-trust.d.ts +5 -0
  174. package/server/mcp/stdio-trust.d.ts.map +1 -0
  175. package/server/mcp/stdio-trust.js +78 -0
  176. package/server/mcp/stdio-trust.js.map +1 -0
  177. package/server/mcp/tool-bridge.d.ts +33 -0
  178. package/server/mcp/tool-bridge.d.ts.map +1 -0
  179. package/server/mcp/tool-bridge.js +138 -0
  180. package/server/mcp/tool-bridge.js.map +1 -0
  181. package/server/orchestration/config.d.ts +5 -0
  182. package/server/orchestration/config.d.ts.map +1 -0
  183. package/server/orchestration/config.js +35 -0
  184. package/server/orchestration/config.js.map +1 -0
  185. package/server/orchestration/event-bridge.d.ts +32 -0
  186. package/server/orchestration/event-bridge.d.ts.map +1 -0
  187. package/server/orchestration/event-bridge.js +110 -0
  188. package/server/orchestration/event-bridge.js.map +1 -0
  189. package/server/orchestration/inbox.d.ts +9 -0
  190. package/server/orchestration/inbox.d.ts.map +1 -0
  191. package/server/orchestration/inbox.js +186 -0
  192. package/server/orchestration/inbox.js.map +1 -0
  193. package/server/orchestration/init.d.ts +2 -0
  194. package/server/orchestration/init.d.ts.map +1 -0
  195. package/server/orchestration/init.js +22 -0
  196. package/server/orchestration/init.js.map +1 -0
  197. package/server/orchestration/store.d.ts +33 -0
  198. package/server/orchestration/store.d.ts.map +1 -0
  199. package/server/orchestration/store.js +331 -0
  200. package/server/orchestration/store.js.map +1 -0
  201. package/server/orchestration/tools.d.ts +15 -0
  202. package/server/orchestration/tools.d.ts.map +1 -0
  203. package/server/orchestration/tools.js +621 -0
  204. package/server/orchestration/tools.js.map +1 -0
  205. package/server/orchestration/types.d.ts +68 -0
  206. package/server/orchestration/types.d.ts.map +1 -0
  207. package/server/orchestration/types.js +43 -0
  208. package/server/orchestration/types.js.map +1 -0
  209. package/server/orchestration/worker-lifecycle.d.ts +15 -0
  210. package/server/orchestration/worker-lifecycle.d.ts.map +1 -0
  211. package/server/orchestration/worker-lifecycle.js +45 -0
  212. package/server/orchestration/worker-lifecycle.js.map +1 -0
  213. package/server/path-refs.d.ts +5 -0
  214. package/server/path-refs.d.ts.map +1 -0
  215. package/server/path-refs.js +249 -0
  216. package/server/path-refs.js.map +1 -0
  217. package/server/routes/_schemas.d.ts +16 -0
  218. package/server/routes/_schemas.d.ts.map +1 -0
  219. package/server/routes/_schemas.js +12 -0
  220. package/server/routes/_schemas.js.map +1 -0
  221. package/server/routes/ask-user-question.d.ts +3 -0
  222. package/server/routes/ask-user-question.d.ts.map +1 -0
  223. package/server/routes/ask-user-question.js +105 -0
  224. package/server/routes/ask-user-question.js.map +1 -0
  225. package/server/routes/auth.d.ts +8 -0
  226. package/server/routes/auth.d.ts.map +1 -0
  227. package/server/routes/auth.js +225 -0
  228. package/server/routes/auth.js.map +1 -0
  229. package/server/routes/config.d.ts +3 -0
  230. package/server/routes/config.d.ts.map +1 -0
  231. package/server/routes/config.js +602 -0
  232. package/server/routes/config.js.map +1 -0
  233. package/server/routes/control.d.ts +3 -0
  234. package/server/routes/control.d.ts.map +1 -0
  235. package/server/routes/control.js +365 -0
  236. package/server/routes/control.js.map +1 -0
  237. package/server/routes/exec.d.ts +3 -0
  238. package/server/routes/exec.d.ts.map +1 -0
  239. package/server/routes/exec.js +426 -0
  240. package/server/routes/exec.js.map +1 -0
  241. package/server/routes/extension-commands.d.ts +22 -0
  242. package/server/routes/extension-commands.d.ts.map +1 -0
  243. package/server/routes/extension-commands.js +178 -0
  244. package/server/routes/extension-commands.js.map +1 -0
  245. package/server/routes/extensions.d.ts +8 -0
  246. package/server/routes/extensions.d.ts.map +1 -0
  247. package/server/routes/extensions.js +414 -0
  248. package/server/routes/extensions.js.map +1 -0
  249. package/server/routes/files.d.ts +3 -0
  250. package/server/routes/files.d.ts.map +1 -0
  251. package/server/routes/files.js +835 -0
  252. package/server/routes/files.js.map +1 -0
  253. package/server/routes/git.d.ts +3 -0
  254. package/server/routes/git.d.ts.map +1 -0
  255. package/server/routes/git.js +1058 -0
  256. package/server/routes/git.js.map +1 -0
  257. package/server/routes/mcp.d.ts +3 -0
  258. package/server/routes/mcp.d.ts.map +1 -0
  259. package/server/routes/mcp.js +403 -0
  260. package/server/routes/mcp.js.map +1 -0
  261. package/server/routes/orchestration.d.ts +3 -0
  262. package/server/routes/orchestration.d.ts.map +1 -0
  263. package/server/routes/orchestration.js +251 -0
  264. package/server/routes/orchestration.js.map +1 -0
  265. package/server/routes/projects.d.ts +3 -0
  266. package/server/routes/projects.d.ts.map +1 -0
  267. package/server/routes/projects.js +421 -0
  268. package/server/routes/projects.js.map +1 -0
  269. package/server/routes/prompt.d.ts +3 -0
  270. package/server/routes/prompt.d.ts.map +1 -0
  271. package/server/routes/prompt.js +311 -0
  272. package/server/routes/prompt.js.map +1 -0
  273. package/server/routes/session-extensions.d.ts +11 -0
  274. package/server/routes/session-extensions.d.ts.map +1 -0
  275. package/server/routes/session-extensions.js +171 -0
  276. package/server/routes/session-extensions.js.map +1 -0
  277. package/server/routes/sessions.d.ts +3 -0
  278. package/server/routes/sessions.d.ts.map +1 -0
  279. package/server/routes/sessions.js +706 -0
  280. package/server/routes/sessions.js.map +1 -0
  281. package/server/routes/skills.d.ts +14 -0
  282. package/server/routes/skills.d.ts.map +1 -0
  283. package/server/routes/skills.js +448 -0
  284. package/server/routes/skills.js.map +1 -0
  285. package/server/routes/stream.d.ts +3 -0
  286. package/server/routes/stream.d.ts.map +1 -0
  287. package/server/routes/stream.js +112 -0
  288. package/server/routes/stream.js.map +1 -0
  289. package/server/routes/terminal.d.ts +28 -0
  290. package/server/routes/terminal.d.ts.map +1 -0
  291. package/server/routes/terminal.js +211 -0
  292. package/server/routes/terminal.js.map +1 -0
  293. package/server/routes/tunnel.d.ts +13 -0
  294. package/server/routes/tunnel.d.ts.map +1 -0
  295. package/server/routes/tunnel.js +231 -0
  296. package/server/routes/tunnel.js.map +1 -0
  297. package/server/session-alerts.d.ts +28 -0
  298. package/server/session-alerts.d.ts.map +1 -0
  299. package/server/session-alerts.js +38 -0
  300. package/server/session-alerts.js.map +1 -0
  301. package/server/session-store.d.ts +164 -0
  302. package/server/session-store.d.ts.map +1 -0
  303. package/server/session-store.js +754 -0
  304. package/server/session-store.js.map +1 -0
  305. package/server/skill-policy.d.ts +47 -0
  306. package/server/skill-policy.d.ts.map +1 -0
  307. package/server/skill-policy.js +178 -0
  308. package/server/skill-policy.js.map +1 -0
  309. package/server/terminal-provider.d.ts +54 -0
  310. package/server/terminal-provider.d.ts.map +1 -0
  311. package/server/terminal-provider.js +220 -0
  312. package/server/terminal-provider.js.map +1 -0
  313. package/server/tool-policy.d.ts +39 -0
  314. package/server/tool-policy.d.ts.map +1 -0
  315. package/server/tool-policy.js +121 -0
  316. package/server/tool-policy.js.map +1 -0
  317. package/server/tunnel/executable-search.d.ts +43 -0
  318. package/server/tunnel/executable-search.d.ts.map +1 -0
  319. package/server/tunnel/executable-search.js +148 -0
  320. package/server/tunnel/executable-search.js.map +1 -0
  321. package/server/tunnel/install-help.d.ts +19 -0
  322. package/server/tunnel/install-help.d.ts.map +1 -0
  323. package/server/tunnel/install-help.js +47 -0
  324. package/server/tunnel/install-help.js.map +1 -0
  325. package/server/tunnel/providers/ngrok.d.ts +31 -0
  326. package/server/tunnel/providers/ngrok.d.ts.map +1 -0
  327. package/server/tunnel/providers/ngrok.js +461 -0
  328. package/server/tunnel/providers/ngrok.js.map +1 -0
  329. package/server/tunnel/registry.d.ts +13 -0
  330. package/server/tunnel/registry.d.ts.map +1 -0
  331. package/server/tunnel/registry.js +56 -0
  332. package/server/tunnel/registry.js.map +1 -0
  333. package/server/tunnel/service.d.ts +13 -0
  334. package/server/tunnel/service.d.ts.map +1 -0
  335. package/server/tunnel/service.js +156 -0
  336. package/server/tunnel/service.js.map +1 -0
  337. package/server/tunnel/types.d.ts +163 -0
  338. package/server/tunnel/types.d.ts.map +1 -0
  339. package/server/tunnel/types.js +214 -0
  340. package/server/tunnel/types.js.map +1 -0
  341. package/server/ui-settings-store.d.ts +25 -0
  342. package/server/ui-settings-store.d.ts.map +1 -0
  343. package/server/ui-settings-store.js +91 -0
  344. package/server/ui-settings-store.js.map +1 -0
  345. package/server/workspace-store.d.ts +25 -0
  346. package/server/workspace-store.d.ts.map +1 -0
  347. package/server/workspace-store.js +157 -0
  348. package/server/workspace-store.js.map +1 -0
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Surface extension-contributed tools from the filesystem (no live
3
+ * session needed).
4
+ *
5
+ * Uses the pi SDK's DefaultPackageManager + discoverAndLoadExtensions
6
+ * to enumerate all registered tools from installed packages.
7
+ */
8
+ import { discoverAndLoadExtensions, DefaultPackageManager, SettingsManager, } from "@earendil-works/pi-coding-agent";
9
+ import { config } from "./config.js";
10
+ /**
11
+ * Resolve extension-contributed tools visible to a session in `cwd`.
12
+ * Uses the SDK package manager to discover installed packages, then
13
+ * loads each extension to enumerate its registered tools.
14
+ *
15
+ * Failures inside individual packages surface as `errors[]` rather
16
+ * than throwing — a single broken extension must not block the
17
+ * tools listing.
18
+ */
19
+ export async function discoverExtensionResources(cwd) {
20
+ const errors = [];
21
+ let extensionPathToPackage;
22
+ try {
23
+ const settingsManager = SettingsManager.create(cwd, config.piConfigDir);
24
+ await settingsManager.reload?.();
25
+ const packageManager = new DefaultPackageManager({
26
+ cwd,
27
+ agentDir: config.piConfigDir,
28
+ settingsManager,
29
+ });
30
+ const resolved = await packageManager.resolve();
31
+ extensionPathToPackage = new Map();
32
+ for (const r of resolved.extensions) {
33
+ if (!r.enabled)
34
+ continue;
35
+ const src = r.metadata.source;
36
+ if (typeof src !== "string" || src.length === 0)
37
+ continue;
38
+ // Normalize: strip npm: prefix so packageSource matches
39
+ // ext.package from the /extensions endpoint (e.g. both
40
+ // become "pi-web-access" instead of "npm:pi-web-access").
41
+ const normalized = src.replace(/^npm:/, "");
42
+ extensionPathToPackage.set(r.path, normalized);
43
+ }
44
+ // Also surface tools from extensions in the legacy extensions dir
45
+ // that aren't behind a package manager entry (e.g. hand-dropped
46
+ // extensions). Use their resolved path as the source name.
47
+ for (const r of resolved.extensions) {
48
+ if (!r.enabled)
49
+ continue;
50
+ const src = r.metadata.source;
51
+ if (typeof src === "string" && src.length > 0)
52
+ continue; // already mapped
53
+ // Unattributed extension — use its name as fallback
54
+ const name = r.path
55
+ .split(/[/\\]/)
56
+ .pop()
57
+ ?.replace(/\.\w+$/, "") ?? r.path;
58
+ if (!extensionPathToPackage.has(r.path)) {
59
+ extensionPathToPackage.set(r.path, name);
60
+ }
61
+ }
62
+ }
63
+ catch (err) {
64
+ errors.push({
65
+ path: "<package-manager>",
66
+ error: err instanceof Error ? err.message : String(err),
67
+ });
68
+ return { tools: [], errors };
69
+ }
70
+ if (extensionPathToPackage.size === 0) {
71
+ return { tools: [], errors };
72
+ }
73
+ let loaded;
74
+ try {
75
+ loaded = await discoverAndLoadExtensions(Array.from(extensionPathToPackage.keys()), cwd, config.piConfigDir);
76
+ }
77
+ catch (err) {
78
+ errors.push({
79
+ path: "<discoverAndLoadExtensions>",
80
+ error: err instanceof Error ? err.message : String(err),
81
+ });
82
+ return { tools: [], errors };
83
+ }
84
+ for (const e of loaded.errors) {
85
+ errors.push({ path: e.path, error: e.error });
86
+ }
87
+ const tools = [];
88
+ for (const ext of loaded.extensions) {
89
+ const pkgSource = extensionPathToPackage.get(ext.path) ??
90
+ extensionPathToPackage.get(ext.resolvedPath);
91
+ if (pkgSource === undefined)
92
+ continue;
93
+ for (const [, registered] of ext.tools) {
94
+ const def = registered.definition;
95
+ const info = {
96
+ name: def.name,
97
+ packageSource: pkgSource,
98
+ description: typeof def.description === "string" && def.description.length > 0
99
+ ? def.description
100
+ : "",
101
+ };
102
+ tools.push(info);
103
+ }
104
+ }
105
+ return { tools, errors };
106
+ }
107
+ //# sourceMappingURL=extension-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-scanner.js","sourceRoot":"","sources":["../src/extension-scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Extension UI Bridge — adapts extension `ctx.ui` interactions (select, confirm,
3
+ * notify) to the WebSocket/SSE + REST model of pi-kot's web GUI.
4
+ *
5
+ * When the extension calls `ctx.ui.select("Rewind to checkpoint:", items)`, this
6
+ * bridge sends an `extension_ui_select` SSE event to the browser, creating a
7
+ * pending request. The browser renders the selector and responds via
8
+ * `POST /api/v1/sessions/:id/extension-ui/respond`, which resolves the promise
9
+ * and lets the extension continue.
10
+ *
11
+ * Unused TUI-specific methods (setWidget, setFooter, setHeader, custom, …) are
12
+ * no-ops so that any extension command works unmodified through the bridge.
13
+ */
14
+ import type { ExtensionUIContext } from "@earendil-works/pi-coding-agent";
15
+ import type { SSEClient } from "./session-store.js";
16
+ /**
17
+ * Resolve a pending select/confirm/input request.
18
+ * Called from `POST /api/v1/sessions/:id/extension-ui/respond`.
19
+ */
20
+ export declare function resolveExtensionUIRequest(requestId: string, value: unknown): boolean;
21
+ /**
22
+ * Cancel all pending requests (e.g., when the command is aborted or session
23
+ * is disposed). Each pending promise rejects so the extension handler sees
24
+ * a cancelled/interrupted state.
25
+ */
26
+ export declare function cancelAllPendingRequests(): void;
27
+ /**
28
+ * Create an `ExtensionUIContext` that bridges extension UI interactions
29
+ * to the browser GUI via SSE events + REST callbacks.
30
+ *
31
+ * @param clients - The live session's connected SSE clients.
32
+ * @param sessionId - The session ID, included in SSE events for routing.
33
+ */
34
+ export declare function createBridgeUIContext(clients: Set<SSEClient>, sessionId: string): ExtensionUIContext;
35
+ //# sourceMappingURL=extension-ui-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-ui-bridge.d.ts","sourceRoot":"","sources":["../src/extension-ui-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EACV,kBAAkB,EAInB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAiBpD;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,GACb,OAAO,CA0BT;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAiB/C;AAOD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,EACvB,SAAS,EAAE,MAAM,GAChB,kBAAkB,CAqLpB"}
@@ -0,0 +1,228 @@
1
+ /**
2
+ * Extension UI Bridge — adapts extension `ctx.ui` interactions (select, confirm,
3
+ * notify) to the WebSocket/SSE + REST model of pi-kot's web GUI.
4
+ *
5
+ * When the extension calls `ctx.ui.select("Rewind to checkpoint:", items)`, this
6
+ * bridge sends an `extension_ui_select` SSE event to the browser, creating a
7
+ * pending request. The browser renders the selector and responds via
8
+ * `POST /api/v1/sessions/:id/extension-ui/respond`, which resolves the promise
9
+ * and lets the extension continue.
10
+ *
11
+ * Unused TUI-specific methods (setWidget, setFooter, setHeader, custom, …) are
12
+ * no-ops so that any extension command works unmodified through the bridge.
13
+ */
14
+ import { randomUUID } from "node:crypto";
15
+ const pendingSelects = new Map();
16
+ const pendingConfirms = new Map();
17
+ const pendingInputs = new Map();
18
+ const REQUEST_TIMEOUT_MS = 120_000; // 2 minutes
19
+ /**
20
+ * Resolve a pending select/confirm/input request.
21
+ * Called from `POST /api/v1/sessions/:id/extension-ui/respond`.
22
+ */
23
+ export function resolveExtensionUIRequest(requestId, value) {
24
+ // Try select
25
+ const sel = pendingSelects.get(requestId);
26
+ if (sel !== undefined) {
27
+ clearTimeout(sel.timer);
28
+ sel.resolve(typeof value === "string" ? value : undefined);
29
+ pendingSelects.delete(requestId);
30
+ return true;
31
+ }
32
+ // Try confirm
33
+ const con = pendingConfirms.get(requestId);
34
+ if (con !== undefined) {
35
+ clearTimeout(con.timer);
36
+ con.resolve(value === true || value === "true" || value === "yes");
37
+ pendingConfirms.delete(requestId);
38
+ return true;
39
+ }
40
+ // Try input
41
+ const inp = pendingInputs.get(requestId);
42
+ if (inp !== undefined) {
43
+ clearTimeout(inp.timer);
44
+ inp.resolve(typeof value === "string" ? value : undefined);
45
+ pendingInputs.delete(requestId);
46
+ return true;
47
+ }
48
+ return false;
49
+ }
50
+ /**
51
+ * Cancel all pending requests (e.g., when the command is aborted or session
52
+ * is disposed). Each pending promise rejects so the extension handler sees
53
+ * a cancelled/interrupted state.
54
+ */
55
+ export function cancelAllPendingRequests() {
56
+ const err = new Error("Extension UI request cancelled");
57
+ for (const [id, req] of pendingSelects) {
58
+ clearTimeout(req.timer);
59
+ req.reject(err);
60
+ pendingSelects.delete(id);
61
+ }
62
+ for (const [id, req] of pendingConfirms) {
63
+ clearTimeout(req.timer);
64
+ req.reject(err);
65
+ pendingConfirms.delete(id);
66
+ }
67
+ for (const [id, req] of pendingInputs) {
68
+ clearTimeout(req.timer);
69
+ req.reject(err);
70
+ pendingInputs.delete(id);
71
+ }
72
+ }
73
+ /**
74
+ * Create an `ExtensionUIContext` that bridges extension UI interactions
75
+ * to the browser GUI via SSE events + REST callbacks.
76
+ *
77
+ * @param clients - The live session's connected SSE clients.
78
+ * @param sessionId - The session ID, included in SSE events for routing.
79
+ */
80
+ export function createBridgeUIContext(clients, sessionId) {
81
+ /** Send a typed SSE event to all connected clients. */
82
+ function send(type, extra = {}) {
83
+ const payload = {
84
+ type,
85
+ sessionId,
86
+ ...extra,
87
+ };
88
+ for (const client of clients) {
89
+ try {
90
+ client.send(payload);
91
+ }
92
+ catch {
93
+ clients.delete(client);
94
+ }
95
+ }
96
+ }
97
+ return {
98
+ // ── Interactive methods (bridge to GUI) ──
99
+ select: async (title, options, _opts) => {
100
+ return new Promise((resolve, reject) => {
101
+ const requestId = randomUUID();
102
+ send("extension_ui_select", { requestId, title, options });
103
+ const timer = setTimeout(() => {
104
+ pendingSelects.delete(requestId);
105
+ reject(new Error(`Extension UI select timed out: ${title}`));
106
+ }, REQUEST_TIMEOUT_MS);
107
+ pendingSelects.set(requestId, { requestId, resolve, reject, timer });
108
+ });
109
+ },
110
+ confirm: async (title, message, _opts) => {
111
+ return new Promise((resolve, reject) => {
112
+ const requestId = randomUUID();
113
+ send("extension_ui_confirm", { requestId, title, message });
114
+ const timer = setTimeout(() => {
115
+ pendingConfirms.delete(requestId);
116
+ reject(new Error(`Extension UI confirm timed out: ${title}`));
117
+ }, REQUEST_TIMEOUT_MS);
118
+ pendingConfirms.set(requestId, { requestId, resolve, reject, timer });
119
+ });
120
+ },
121
+ input: async (title, placeholder, _opts) => {
122
+ return new Promise((resolve, reject) => {
123
+ const requestId = randomUUID();
124
+ send("extension_ui_input", {
125
+ requestId,
126
+ title,
127
+ placeholder: placeholder ?? "",
128
+ });
129
+ const timer = setTimeout(() => {
130
+ pendingInputs.delete(requestId);
131
+ reject(new Error(`Extension UI input timed out: ${title}`));
132
+ }, REQUEST_TIMEOUT_MS);
133
+ pendingInputs.set(requestId, { requestId, resolve, reject, timer });
134
+ });
135
+ },
136
+ notify: (message, notificationType) => {
137
+ send("extension_ui_notify", {
138
+ message,
139
+ notificationType: notificationType ?? "info",
140
+ });
141
+ },
142
+ // ── No-ops (TUI-specific, not applicable in web GUI) ──
143
+ onTerminalInput: (_handler) => {
144
+ return () => { };
145
+ },
146
+ setStatus: (_key, _text) => {
147
+ // Status bar is managed by the GUI.
148
+ },
149
+ setWorkingMessage: (_message) => {
150
+ // Working message is managed by the GUI.
151
+ },
152
+ setWorkingVisible: (_visible) => {
153
+ // Working indicator visibility is managed by the GUI.
154
+ },
155
+ setWorkingIndicator: (_options) => {
156
+ // Working indicator animation is managed by the GUI.
157
+ },
158
+ setHiddenThinkingLabel: (_label) => {
159
+ // Hidden thinking label is managed by the GUI.
160
+ },
161
+ setWidget: (_key,
162
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
163
+ _content, _options) => {
164
+ // Widgets are TUI-specific.
165
+ },
166
+ setFooter: (
167
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
168
+ _factory) => {
169
+ // Footer is TUI-specific.
170
+ },
171
+ setHeader: (
172
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
173
+ _factory) => {
174
+ // Header is TUI-specific.
175
+ },
176
+ setTitle: (_title) => {
177
+ // Title is managed by the browser tab.
178
+ },
179
+ // custom is intentionally undefined so that extensions which check
180
+ // `if (!ctx.ui.custom)` fall back to `ctx.ui.select()` / `ctx.ui.confirm()`
181
+ // instead of calling the TUI custom component factory and getting nothing.
182
+ // This fixes pi-rewind's `/rewind` command which would exit silently
183
+ // when `custom` returned `Promise.resolve(undefined)` immediately.
184
+ custom: undefined,
185
+ pasteToEditor: (_text) => {
186
+ // Editor paste is not supported in bridge mode.
187
+ },
188
+ setEditorText: (_text) => {
189
+ // Editor text is managed by the GUI.
190
+ },
191
+ getEditorText: () => {
192
+ return "";
193
+ },
194
+ editor: async (_title, _prefill) => {
195
+ // Multi-line editor is not supported in bridge mode.
196
+ return undefined;
197
+ },
198
+ addAutocompleteProvider: (_factory) => {
199
+ // Autocomplete is managed by the GUI.
200
+ },
201
+ setEditorComponent: (_factory) => {
202
+ // Editor component is managed by the GUI.
203
+ },
204
+ getEditorComponent: () => {
205
+ return undefined;
206
+ },
207
+ get theme() {
208
+ // Return a minimal theme stub — the server doesn't have a TUI theme.
209
+ return {};
210
+ },
211
+ getAllThemes: () => {
212
+ return [];
213
+ },
214
+ getTheme: () => {
215
+ return undefined;
216
+ },
217
+ setTheme: () => {
218
+ return { success: false, error: "Theme switching not supported via bridge" };
219
+ },
220
+ getToolsExpanded: () => {
221
+ return true;
222
+ },
223
+ setToolsExpanded: () => {
224
+ // Tool expansion is managed by the GUI.
225
+ },
226
+ };
227
+ }
228
+ //# sourceMappingURL=extension-ui-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-ui-bridge.js","sourceRoot":"","sources":["../src/extension-ui-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import type { Readable } from "node:stream";
2
+ export declare class PathOutsideRootError extends Error {
3
+ constructor(target: string, root: string);
4
+ }
5
+ export declare class NotFoundError extends Error {
6
+ constructor(path: string);
7
+ }
8
+ export declare class NotAFileError extends Error {
9
+ constructor(path: string);
10
+ }
11
+ export declare class FileTooLargeError extends Error {
12
+ readonly size: number;
13
+ readonly limit: number;
14
+ constructor(path: string, size: number, limit: number);
15
+ }
16
+ export declare class DirectoryNotEmptyError extends Error {
17
+ constructor(path: string);
18
+ }
19
+ export declare class InvalidNameError extends Error {
20
+ constructor(message?: string);
21
+ }
22
+ export declare class ChecksumMismatchError extends Error {
23
+ readonly target: string;
24
+ readonly expected: string;
25
+ readonly actual: string;
26
+ constructor(target: string, expected: string, actual: string);
27
+ }
28
+ export declare class TargetExistsError extends Error {
29
+ constructor(path: string);
30
+ }
31
+ export declare const MAX_READ_BYTES: number;
32
+ export declare const SEARCH_SKIP_DIRS: ReadonlySet<string>;
33
+ export declare function assertInsideRoot(target: string, root: string): string;
34
+ export interface TreeNode {
35
+ name: string;
36
+ path: string;
37
+ type: "file" | "directory";
38
+ children?: TreeNode[];
39
+ truncated?: boolean;
40
+ }
41
+ export interface GetTreeOptions {
42
+ maxDepth?: number;
43
+ }
44
+ export declare function getTree(rootPath: string, opts?: GetTreeOptions): Promise<TreeNode>;
45
+ export declare function listAllFiles(rootPath: string): Promise<string[]>;
46
+ export interface ReadResult {
47
+ path: string;
48
+ content: string;
49
+ size: number;
50
+ language: string;
51
+ binary: boolean;
52
+ }
53
+ export declare function readFile(absPath: string, root: string): Promise<ReadResult>;
54
+ export declare function writeFile(absPath: string, root: string, content: string): Promise<void>;
55
+ export declare function downloadStream(absPath: string, root: string): Promise<{
56
+ kind: "file";
57
+ filename: string;
58
+ size: number;
59
+ stream: Readable;
60
+ } | {
61
+ kind: "directory";
62
+ filename: string;
63
+ stream: Readable;
64
+ }>;
65
+ export declare function writeFileBytes(parentAbsPath: string, name: string, root: string, source: AsyncIterable<Buffer | Uint8Array>, opts?: {
66
+ expectedSha256?: string;
67
+ overwrite?: boolean;
68
+ }): Promise<{
69
+ path: string;
70
+ size: number;
71
+ sha256: string;
72
+ }>;
73
+ export declare function makeDirectory(parentAbsPath: string, root: string, name: string): Promise<string>;
74
+ export declare function renameEntry(absPath: string, root: string, newName: string): Promise<string>;
75
+ export declare function moveEntry(srcAbsPath: string, destAbsPath: string, root: string): Promise<string>;
76
+ export declare function deleteEntry(absPath: string, root: string, opts?: {
77
+ recursive?: boolean;
78
+ }): Promise<void>;
79
+ //# sourceMappingURL=file-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-manager.d.ts","sourceRoot":"","sources":["../src/file-manager.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAGvC;CACF;AAED,qBAAa,aAAc,SAAQ,KAAK;IACtC,YAAY,IAAI,EAAE,MAAM,EAGvB;CACF;AAED,qBAAa,aAAc,SAAQ,KAAK;IACtC,YAAY,IAAI,EAAE,MAAM,EAGvB;CACF;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,YAAY,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAKpD;CACF;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,IAAI,EAAE,MAAM,EAGvB;CACF;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,YAAY,OAAO,SAAsB,EAGxC;CACF;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,YAAY,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAM3D;CACF;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,IAAI,EAAE,MAAM,EAGvB;CACF;AAED,eAAO,MAAM,cAAc,QAAkB,CAAC;AAgB9C,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAkB,CAAC;AAIpE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAUrE;AAuCD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAQ5F;AAuED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAOtE;AAiBD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAejF;AAUD,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7F;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,OAAO,CACN;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAA;CAAE,CAC5D,CAgCA;AAED,wBAAsB,cAAc,CAClC,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC,EAC1C,IAAI,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GACtD,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAoCzD;AAED,wBAAsB,aAAa,CACjC,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBjG;AAED,wBAAsB,SAAS,CAC7B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CAgBjB;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7B,OAAO,CAAC,IAAI,CAAC,CAuBf"}