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,586 @@
1
+ /**
2
+ * Extension manager — runtime discovery + install for pi.dev extensions.
3
+ * Scans ~/.pi/agent/ for installed extensions, agents, and packages,
4
+ * and exposes a curated recommendation catalog optimised for pi-kot.
5
+ *
6
+ * Architecture: extension dynamic detection pattern:
7
+ * detect → activate — UI features light up based on what's installed.
8
+ *
9
+ * Update checking:
10
+ * checkExtensionUpdates() compares installed vs. npm registry latest.
11
+ * updateExtension() runs npm install to upgrade to latest.
12
+ */
13
+ import { readFile, readdir } from "node:fs/promises";
14
+ import { existsSync, readFileSync } from "node:fs";
15
+ import { join } from "node:path";
16
+ import { homedir } from "node:os";
17
+ import { execSync } from "node:child_process";
18
+ // ── Path helpers ────────────────────────────────────────────────────
19
+ function piAgentDir() {
20
+ // getAgentDir in pi SDK defaults to ~/.pi/agent
21
+ return join(homedir(), ".pi", "agent");
22
+ }
23
+ function extensionsDir() {
24
+ return join(piAgentDir(), "extensions");
25
+ }
26
+ function agentsDir() {
27
+ return join(piAgentDir(), "agents");
28
+ }
29
+ function settingsPath() {
30
+ return join(piAgentDir(), "settings.json");
31
+ }
32
+ function npmPackagePath() {
33
+ return join(piAgentDir(), "npm", "package.json");
34
+ }
35
+ // ── Known extension registry (curated) ──────────────────────────────
36
+ const knownExtensions = [
37
+ // ── Tools ──
38
+ {
39
+ id: "pi-web-access",
40
+ name: "pi-web-access",
41
+ description: "Web search, content extraction, and API interaction tools for pi. Essential for research-aware coding sessions.",
42
+ package: "npm:pi-web-access",
43
+ category: "tools",
44
+ verified: true,
45
+ enablesFeatures: ["Web search in agent sessions"],
46
+ icon: "🌐",
47
+ },
48
+ {
49
+ id: "pi-playwright",
50
+ name: "pi-playwright",
51
+ description: "Automated browser testing and web scraping via Playwright. Steer the agent through real web UI.",
52
+ package: "npm:pi-playwright",
53
+ category: "tools",
54
+ enablesFeatures: ["Browser automation in agent sessions"],
55
+ icon: "🎭",
56
+ },
57
+ {
58
+ id: "pi-vision-tool",
59
+ name: "pi-vision-tool",
60
+ description: "Delegates image analysis to a vision-capable model. Non-vision models can call describe_image to understand screenshots, diagrams, and photos.",
61
+ package: "npm:pi-vision-tool",
62
+ category: "tools",
63
+ verified: true,
64
+ enablesFeatures: ["Image analysis via vision model delegation"],
65
+ icon: "👁️",
66
+ },
67
+ // ── Productivity ──
68
+ {
69
+ id: "pi-rewind",
70
+ name: "pi-rewind",
71
+ description: "Session history navigation — checkpoint, rewind, and branch from any prior state. Like undo for your agent.",
72
+ package: "npm:@ayulab/pi-rewind",
73
+ category: "productivity",
74
+ verified: true,
75
+ enablesFeatures: ["Checkpoint/rewind in session history"],
76
+ icon: "⏪",
77
+ },
78
+ {
79
+ id: "context-mode",
80
+ name: "context-mode",
81
+ description: "⚠️ First prompt uses ~8,181 extra tokens for setup; savings start from the second turn onward. Saves ~98% of context window by capturing tool results in SQLite, sandboxed code execution (ctx_execute), session continuity across compaction, and BM25 search over indexed docs.",
82
+ package: "npm:context-mode",
83
+ category: "productivity",
84
+ verified: true,
85
+ enablesFeatures: ["⚠️ ~8,181 tokens on first prompt — then saves ~98%", "Context window savings", "Sandboxed code execution (ctx_execute)", "Session continuity after compaction", "FTS5 knowledge base with BM25 search", "Commands: /ctx-stats, /ctx-doctor"],
86
+ icon: "🧠",
87
+ },
88
+ {
89
+ id: "pi-plan-mode",
90
+ name: "pi-plan-mode",
91
+ description: "Codex-like structured planning. Blocks mutating tools, adds plan_mode_question for structured user questions, and guides the agent through explore → intent → final plan flow.",
92
+ package: "npm:@narumitw/pi-plan-mode",
93
+ category: "productivity",
94
+ verified: true,
95
+ enablesFeatures: ["Plan mode with /plan command", "Structured plan_mode_question tool", "Tool safety in planning phase"],
96
+ icon: "📋",
97
+ },
98
+ ];
99
+ // ── Discovery ───────────────────────────────────────────────────────
100
+ /** Get installed npm packages from ~/.pi/agent/npm/package.json */
101
+ async function readInstalledPackages() {
102
+ const installed = new Set();
103
+ try {
104
+ const pkg = JSON.parse(await readFile(npmPackagePath(), "utf-8"));
105
+ for (const name of Object.keys(pkg.dependencies || {})) {
106
+ installed.add(`npm:${name}`);
107
+ installed.add(name);
108
+ }
109
+ }
110
+ catch {
111
+ // No npm dir yet — that's fine
112
+ }
113
+ return installed;
114
+ }
115
+ /** Scan ~/.pi/agent/extensions/ for *.ts files and subdirectories */
116
+ async function scanExtensionsDir() {
117
+ const results = [];
118
+ try {
119
+ const dir = extensionsDir();
120
+ if (!existsSync(dir))
121
+ return results;
122
+ const entries = await readdir(dir, { withFileTypes: true });
123
+ for (const entry of entries) {
124
+ if (entry.name.endsWith(".ts")) {
125
+ const name = entry.name.replace(/\.ts$/, "");
126
+ const desc = await extractDescriptionFromExtension(join(dir, entry.name));
127
+ results.push({
128
+ name,
129
+ description: desc || `Custom extension at ~/.pi/agent/extensions/${entry.name}`,
130
+ source: "extensions_dir",
131
+ enablesFeatures: ["Custom extension loaded"],
132
+ });
133
+ }
134
+ else if (entry.isDirectory()) {
135
+ results.push({
136
+ name: entry.name,
137
+ description: `Extension directory at ~/.pi/agent/extensions/${entry.name}/`,
138
+ source: "extensions_dir",
139
+ enablesFeatures: ["Custom extension loaded"],
140
+ });
141
+ }
142
+ }
143
+ }
144
+ catch {
145
+ // No extensions dir
146
+ }
147
+ return results;
148
+ }
149
+ /** Scan ~/.pi/agent/agents/ for *.md agent definitions */
150
+ async function scanAgentsDir() {
151
+ const agents = [];
152
+ try {
153
+ const dir = agentsDir();
154
+ if (!existsSync(dir))
155
+ return agents;
156
+ const entries = await readdir(dir, { withFileTypes: true });
157
+ for (const entry of entries) {
158
+ if (!entry.name.endsWith(".md"))
159
+ continue;
160
+ const content = await readFile(join(dir, entry.name), "utf-8");
161
+ const name = entry.name.replace(/\.md$/, "");
162
+ // Parse YAML frontmatter (basic, no external dep)
163
+ const fM = parseFrontmatter(content);
164
+ agents.push({
165
+ name: fM.name || name,
166
+ description: fM.description || `Agent definition from ~/.pi/agent/agents/${entry.name}`,
167
+ model: fM.model,
168
+ tools: fM.tools?.split(",").map((t) => t.trim()).filter(Boolean),
169
+ source: "file",
170
+ });
171
+ }
172
+ }
173
+ catch {
174
+ // No agents dir
175
+ }
176
+ return agents;
177
+ }
178
+ /** Crude frontmatter parser — enough for YAML name/desc/model/tools */
179
+ function parseFrontmatter(content) {
180
+ const result = {};
181
+ const match = content.match(/^---\n([\s\S]*?)\n---/);
182
+ if (!match)
183
+ return result;
184
+ for (const line of match[1].split("\n")) {
185
+ const sep = line.indexOf(":");
186
+ if (sep === -1)
187
+ continue;
188
+ const key = line.slice(0, sep).trim();
189
+ const value = line.slice(sep + 1).trim().replace(/^["']|["']$/g, "");
190
+ result[key] = value;
191
+ }
192
+ return result;
193
+ }
194
+ /** Try to grab a one-liner description from an extension file */
195
+ async function extractDescriptionFromExtension(filePath) {
196
+ try {
197
+ const content = await readFile(filePath, "utf-8");
198
+ const lines = content.split("\n").slice(0, 30);
199
+ for (const line of lines) {
200
+ const trimmed = line.trim();
201
+ // Look for description in JSDoc
202
+ if (trimmed.startsWith("*") && !trimmed.startsWith("* "))
203
+ continue;
204
+ if (trimmed.startsWith("* ") && trimmed.length > 5) {
205
+ const text = trimmed.replace(/^\*\s?/, "");
206
+ if (text.length > 10)
207
+ return text;
208
+ }
209
+ }
210
+ }
211
+ catch {
212
+ // ignore
213
+ }
214
+ return null;
215
+ }
216
+ /** Read settings.json for configured packages */
217
+ async function readConfiguredPackages() {
218
+ try {
219
+ const raw = await readFile(settingsPath(), "utf-8");
220
+ const settings = JSON.parse(raw);
221
+ return settings.packages || [];
222
+ }
223
+ catch {
224
+ return [];
225
+ }
226
+ }
227
+ // ── Main API ────────────────────────────────────────────────────────
228
+ export async function discoverExtensions() {
229
+ const installed = await readInstalledPackages();
230
+ const configured = new Set(await readConfiguredPackages());
231
+ // Scan filesystem
232
+ const [extFiles, agents] = await Promise.all([
233
+ scanExtensionsDir(),
234
+ scanAgentsDir(),
235
+ ]);
236
+ // Build detected list from packages
237
+ const detectedPkgs = [];
238
+ for (const pkg of configured) {
239
+ // Look up known info
240
+ const known = knownExtensions.find((k) => k.package === pkg);
241
+ detectedPkgs.push({
242
+ name: known?.name ?? pkg.replace("npm:", ""),
243
+ description: known?.description ?? `Installed package: ${pkg}`,
244
+ source: "package",
245
+ version: known ? undefined : undefined,
246
+ package: pkg,
247
+ agentTypes: known?.providesAgentTypes,
248
+ enablesFeatures: known?.enablesFeatures,
249
+ });
250
+ }
251
+ // Build recommended list with install status
252
+ const allInstalled = new Set();
253
+ for (const pkg of configured)
254
+ allInstalled.add(pkg);
255
+ installed.forEach((p) => allInstalled.add(p));
256
+ // Also check if agents dir has the agent types
257
+ const agentNames = new Set(agents.map((a) => a.name));
258
+ for (const ext of extFiles)
259
+ allInstalled.add(ext.name);
260
+ const recommended = knownExtensions.map((k) => ({
261
+ ...k,
262
+ installed: allInstalled.has(k.package) ||
263
+ allInstalled.has(k.id) ||
264
+ allInstalled.has(k.package.replace("npm:", "").replace("@", "")) ||
265
+ (k.providesAgentTypes?.some((t) => agentNames.has(t)) ?? false),
266
+ }));
267
+ return {
268
+ detected: [...detectedPkgs, ...extFiles],
269
+ recommended,
270
+ agents,
271
+ };
272
+ }
273
+ export async function uninstallExtension(packageName) {
274
+ try {
275
+ // Remove from settings.json packages array — match the EXACT spec as stored
276
+ const settingsRaw = await readFile(settingsPath(), "utf-8");
277
+ const settings = JSON.parse(settingsRaw);
278
+ if (settings.packages) {
279
+ // Remove by exact match, npm: prefixed variant, AND translated npm ref
280
+ const translated = packageName.startsWith("git:") ? specToNpmRef(packageName) : packageName;
281
+ settings.packages = settings.packages.filter((p) => p !== packageName &&
282
+ p !== `npm:${packageName.replace(/^npm:/, "")}` &&
283
+ p !== translated);
284
+ }
285
+ // Write settings back atomically
286
+ const tmpPath = settingsPath() + ".tmp";
287
+ const { writeFile, rename } = await import("node:fs/promises");
288
+ await writeFile(tmpPath, JSON.stringify(settings, null, 2), "utf-8");
289
+ await rename(tmpPath, settingsPath());
290
+ // Uninstall via npm in the agent dir (keep settings clean even if npm uninstall fails).
291
+ // For git: specs, npm stores the dependency value as the shorthand (e.g. "github:user/repo")
292
+ // but the key is the package name from the repo's package.json. We need the key.
293
+ const npmDir = join(piAgentDir(), "npm");
294
+ try {
295
+ const pkgName = findInstalledPackageName(packageName);
296
+ if (pkgName) {
297
+ execSync(`npm uninstall ${pkgName}`, {
298
+ cwd: npmDir,
299
+ stdio: "pipe",
300
+ timeout: 60_000,
301
+ });
302
+ }
303
+ }
304
+ catch {
305
+ // npm uninstall may fail if the package isn't actually installed
306
+ // but we already cleaned the settings — best effort
307
+ }
308
+ return { success: true };
309
+ }
310
+ catch (err) {
311
+ const message = err instanceof Error ? err.message : String(err);
312
+ return { success: false, error: message };
313
+ }
314
+ }
315
+ export async function installExtension(packageName) {
316
+ try {
317
+ // Strip npm: prefix if present
318
+ const npmName = packageName.replace(/^npm:/, "");
319
+ // Add to settings.json packages array
320
+ const settingsRaw = await readFile(settingsPath(), "utf-8");
321
+ const settings = JSON.parse(settingsRaw);
322
+ if (!settings.packages)
323
+ settings.packages = [];
324
+ const pkgEntry = packageName.startsWith("npm:") ? packageName : `npm:${npmName}`;
325
+ if (!settings.packages.includes(pkgEntry)) {
326
+ settings.packages.push(pkgEntry);
327
+ }
328
+ // Write settings back atomically
329
+ const tmpPath = settingsPath() + ".tmp";
330
+ const { writeFile, rename } = await import("node:fs/promises");
331
+ await writeFile(tmpPath, JSON.stringify(settings, null, 2), "utf-8");
332
+ await rename(tmpPath, settingsPath());
333
+ // Install via npm in the agent dir
334
+ const npmDir = join(piAgentDir(), "npm");
335
+ execSync(`npm install ${npmName}`, {
336
+ cwd: npmDir,
337
+ stdio: "pipe",
338
+ timeout: 180_000,
339
+ });
340
+ return { success: true };
341
+ }
342
+ catch (err) {
343
+ const message = err instanceof Error ? err.message : String(err);
344
+ return { success: false, error: message };
345
+ }
346
+ }
347
+ /**
348
+ * Hold a short-lived cache of check results to avoid hammering npm
349
+ * registry on every UI render. Cleared after 60 seconds.
350
+ */
351
+ let _updateCache;
352
+ /** Clear the update cache so the next `checkExtensionUpdates()` hits npm fresh. */
353
+ export function clearExtensionCache() {
354
+ _updateCache = undefined;
355
+ }
356
+ /**
357
+ * Check for updates on all installed npm packages.
358
+ * Reads installed versions from node_modules, then fetches latest
359
+ * from registry.npmjs.org. Results are cached for 60 seconds.
360
+ */
361
+ export async function checkExtensionUpdates() {
362
+ const now = Date.now();
363
+ if (_updateCache && now - _updateCache.timestamp < 60_000) {
364
+ return _updateCache.data;
365
+ }
366
+ const results = [];
367
+ const npmDir = join(piAgentDir(), "npm");
368
+ // Read installed packages list
369
+ let packageNames = [];
370
+ try {
371
+ const pkg = JSON.parse(await readFile(join(npmDir, "package.json"), "utf-8"));
372
+ packageNames = Object.keys(pkg.dependencies || {});
373
+ }
374
+ catch {
375
+ // No npm dir or no packages yet
376
+ }
377
+ for (const name of packageNames) {
378
+ // Read installed version
379
+ let installed;
380
+ try {
381
+ const installedPkg = JSON.parse(await readFile(join(npmDir, "node_modules", name, "package.json"), "utf-8"));
382
+ installed = installedPkg.version;
383
+ }
384
+ catch {
385
+ installed = undefined;
386
+ }
387
+ // Fetch latest from npm registry
388
+ let latest;
389
+ try {
390
+ const controller = new AbortController();
391
+ const timeout = setTimeout(() => controller.abort(), 10_000);
392
+ const res = await fetch(`https://registry.npmjs.org/${encodeURIComponent(name)}/latest`, {
393
+ signal: controller.signal,
394
+ });
395
+ clearTimeout(timeout);
396
+ if (res.ok) {
397
+ const data = await res.json();
398
+ latest = data.version;
399
+ }
400
+ }
401
+ catch {
402
+ latest = undefined;
403
+ }
404
+ // Look up display name from curated list
405
+ const known = knownExtensions.find((k) => k.package === `npm:${name}`);
406
+ results.push({
407
+ package: name,
408
+ name: known?.name ?? name,
409
+ installed,
410
+ latest,
411
+ updateAvailable: installed !== undefined && latest !== undefined && installed !== latest,
412
+ });
413
+ }
414
+ _updateCache = { data: results, timestamp: now };
415
+ return results;
416
+ }
417
+ /**
418
+ * Manual install — accepts any pi install spec through the SDK config path
419
+ * (settings.json + npm install). No CLI dependency.
420
+ *
421
+ * Supported formats:
422
+ * npm:package-name → npm install
423
+ * git:github.com/user/repo → npm install via git URL
424
+ * pi install <spec> → strips prefix first (user typed the full command)
425
+ */
426
+ export async function installManualExtension(installSpec) {
427
+ // Strip leading "pi install " or "pi " if the user typed the full CLI command
428
+ const spec = installSpec
429
+ .replace(/^pi\s+install\s+/i, "")
430
+ .replace(/^pi\s+/i, "")
431
+ .trim();
432
+ if (spec.length === 0) {
433
+ return { success: false, error: "Empty install spec." };
434
+ }
435
+ try {
436
+ const settingsRaw = await readFile(settingsPath(), "utf-8");
437
+ const settings = JSON.parse(settingsRaw);
438
+ if (!settings.packages)
439
+ settings.packages = [];
440
+ // Add the raw spec (npm:..., git:...) to settings.json packages[]
441
+ if (!settings.packages.includes(spec)) {
442
+ settings.packages.push(spec);
443
+ }
444
+ // Write settings back atomically
445
+ const tmpPath = settingsPath() + ".tmp";
446
+ const { writeFile, rename } = await import("node:fs/promises");
447
+ await writeFile(tmpPath, JSON.stringify(settings, null, 2), "utf-8");
448
+ await rename(tmpPath, settingsPath());
449
+ // Translate spec to an npm-compatible package reference
450
+ const npmRef = specToNpmRef(spec);
451
+ // Install via npm in the agent dir
452
+ const npmDir = join(piAgentDir(), "npm");
453
+ execSync(`npm install ${npmRef}`, {
454
+ cwd: npmDir,
455
+ stdio: "pipe",
456
+ timeout: 180_000,
457
+ });
458
+ return { success: true };
459
+ }
460
+ catch (err) {
461
+ const message = err instanceof Error ? err.message : String(err);
462
+ return { success: false, error: message };
463
+ }
464
+ }
465
+ /**
466
+ * Translate a pi install spec to an npm package reference.
467
+ *
468
+ * npm:foo → foo
469
+ * git:github.com/user/repo → github:user/repo (npm's GitHub shortcut)
470
+ * git:github.com/user/repo.git → same logic
471
+ * Anything else → passed through as-is
472
+ */
473
+ function specToNpmRef(spec) {
474
+ if (spec.startsWith("npm:")) {
475
+ return spec.slice(4);
476
+ }
477
+ if (spec.startsWith("git:")) {
478
+ const path = spec.slice(4); // github.com/user/repo
479
+ // npm supports "github:user/repo" directly
480
+ const match = path.match(/github\.com\/([^/]+\/[^/]+?)(?:\.git)?$/);
481
+ if (match) {
482
+ return `github:${match[1]}`;
483
+ }
484
+ // For other git hosts, use the full git+https URL
485
+ return `git+https://${path}`;
486
+ }
487
+ // Pass through as-is (bare package name, local path, etc.)
488
+ return spec;
489
+ }
490
+ /**
491
+ * Given a pi install spec (npm:foo, git:github.com/user/repo, etc.),
492
+ * find the actual package name as stored in npm's package.json
493
+ * dependency key. Needed because git: specs get stored by their
494
+ * repo package.json name (e.g. "@user/repo") not the install shorthand.
495
+ *
496
+ * Returns the package name, or null if not found.
497
+ */
498
+ function findInstalledPackageName(packageName) {
499
+ try {
500
+ const npmPkgPath = npmPackagePath();
501
+ const npmPkg = JSON.parse(readFileSync(npmPkgPath, "utf-8"));
502
+ const deps = npmPkg.dependencies ?? {};
503
+ if (packageName.startsWith("npm:")) {
504
+ const bareName = packageName.slice(4);
505
+ if (deps[bareName] !== undefined)
506
+ return bareName;
507
+ // Try scoped variants
508
+ if (deps[`@${bareName}`] !== undefined)
509
+ return `@${bareName}`;
510
+ return null;
511
+ }
512
+ // Resolve to npm shorthand / URL for matching against dependency values
513
+ const npmRef = specToNpmRef(packageName);
514
+ // First try matching by dependency value (git: specs store the shorthand as value)
515
+ for (const [key, val] of Object.entries(deps)) {
516
+ if (val === npmRef)
517
+ return key;
518
+ if (val.includes(npmRef))
519
+ return key;
520
+ }
521
+ // Fallback: try matching the key
522
+ for (const [key, val] of Object.entries(deps)) {
523
+ if (key === packageName || key === npmRef)
524
+ return key;
525
+ }
526
+ return null;
527
+ }
528
+ catch {
529
+ return null;
530
+ }
531
+ }
532
+ /**
533
+ * Update an installed extension to the latest version via npm install.
534
+ * Equivalent to re-running the install but without touching settings.json
535
+ * (since it's already in the packages list).
536
+ */
537
+ export async function updateExtension(packageName) {
538
+ try {
539
+ const npmName = packageName.replace(/^npm:/, "");
540
+ const npmDir = join(piAgentDir(), "npm");
541
+ execSync(`npm install ${npmName}@latest`, {
542
+ cwd: npmDir,
543
+ stdio: "pipe",
544
+ timeout: 180_000,
545
+ });
546
+ // Invalidate cache so next check picks up the new version
547
+ _updateCache = undefined;
548
+ return { success: true };
549
+ }
550
+ catch (err) {
551
+ const message = err instanceof Error ? err.message : String(err);
552
+ return { success: false, error: message };
553
+ }
554
+ }
555
+ /** Built-in agent definitions (builtin defaults like pi-subagents examples) */
556
+ export const builtinAgentDefs = [
557
+ {
558
+ name: "scout",
559
+ description: "Fast codebase recon — returns compressed context for handoff to other agents",
560
+ model: "claude-haiku-4-5",
561
+ tools: ["read", "grep", "find", "ls", "bash"],
562
+ source: "builtin",
563
+ },
564
+ {
565
+ name: "planner",
566
+ description: "Creates implementation plans with structured analysis",
567
+ model: "claude-sonnet-4-5",
568
+ tools: ["read", "grep", "find", "ls"],
569
+ source: "builtin",
570
+ },
571
+ {
572
+ name: "reviewer",
573
+ description: "Code review & quality assurance — checks for issues, security, and style",
574
+ model: "claude-sonnet-4-5",
575
+ tools: ["read", "grep", "find", "ls", "bash"],
576
+ source: "builtin",
577
+ },
578
+ {
579
+ name: "worker",
580
+ description: "General-purpose task execution with full capabilities",
581
+ model: "claude-sonnet-4-5",
582
+ tools: [],
583
+ source: "builtin",
584
+ },
585
+ ];
586
+ //# sourceMappingURL=extension-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-manager.js","sourceRoot":"","sources":["../src/extension-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAQ,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAW,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AA2D9C,uEAAuE;AAEvE,SAAS,UAAU;IACjB,gDAAgD;IAChD,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,YAAY,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,eAAe,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;AACnD,CAAC;AAED,uEAAuE;AAEvE,MAAM,eAAe,GAA8C;IACjE,cAAc;IACd;QACE,EAAE,EAAE,eAAe;QACnB,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,iHAAiH;QACnH,OAAO,EAAE,mBAAmB;QAC5B,QAAQ,EAAE,OAAO;QACjB,QAAQ,EAAE,IAAI;QACd,eAAe,EAAE,CAAC,8BAA8B,CAAC;QACjD,IAAI,EAAE,IAAI;KACX;IACD;QACE,EAAE,EAAE,eAAe;QACnB,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,iGAAiG;QACnG,OAAO,EAAE,mBAAmB;QAC5B,QAAQ,EAAE,OAAO;QACjB,eAAe,EAAE,CAAC,sCAAsC,CAAC;QACzD,IAAI,EAAE,IAAI;KACX;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,gJAAgJ;QAClJ,OAAO,EAAE,oBAAoB;QAC7B,QAAQ,EAAE,OAAO;QACjB,QAAQ,EAAE,IAAI;QACd,eAAe,EAAE,CAAC,4CAA4C,CAAC;QAC/D,IAAI,EAAE,KAAK;KACZ;IACD,qBAAqB;IACrB;QACE,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,WAAW;QACjB,WAAW,EACT,6GAA6G;QAC/G,OAAO,EAAE,uBAAuB;QAChC,QAAQ,EAAE,cAAc;QACxB,QAAQ,EAAE,IAAI;QACd,eAAe,EAAE,CAAC,sCAAsC,CAAC;QACzD,IAAI,EAAE,GAAG;KACV;IAED;QACE,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,mRAAmR;QACrR,OAAO,EAAE,kBAAkB;QAC3B,QAAQ,EAAE,cAAc;QACxB,QAAQ,EAAE,IAAI;QACd,eAAe,EAAE,CAAC,oDAAoD,EAAE,wBAAwB,EAAE,wCAAwC,EAAE,qCAAqC,EAAE,sCAAsC,EAAE,mCAAmC,CAAC;QAC/P,IAAI,EAAE,IAAI;KACX;IACD;QACE,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,gLAAgL;QAClL,OAAO,EAAE,4BAA4B;QACrC,QAAQ,EAAE,cAAc;QACxB,QAAQ,EAAE,IAAI;QACd,eAAe,EAAE,CAAC,8BAA8B,EAAE,oCAAoC,EAAE,+BAA+B,CAAC;QACxH,IAAI,EAAE,IAAI;KACX;CACF,CAAC;AAEF,uEAAuE;AAEvE,mEAAmE;AACnE,KAAK,UAAU,qBAAqB;IAClC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;QAClE,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,CAAC;YACvD,SAAS,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAC7B,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;IACjC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,qEAAqE;AACrE,KAAK,UAAU,iBAAiB;IAC9B,MAAM,OAAO,GAA0B,EAAE,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;QAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC;QACrC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC7C,MAAM,IAAI,GAAG,MAAM,+BAA+B,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC1E,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI;oBACJ,WAAW,EAAE,IAAI,IAAI,8CAA8C,KAAK,CAAC,IAAI,EAAE;oBAC/E,MAAM,EAAE,gBAAgB;oBACxB,eAAe,EAAE,CAAC,yBAAyB,CAAC;iBAC7C,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC/B,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,WAAW,EAAE,iDAAiD,KAAK,CAAC,IAAI,GAAG;oBAC3E,MAAM,EAAE,gBAAgB;oBACxB,eAAe,EAAE,CAAC,yBAAyB,CAAC;iBAC7C,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,oBAAoB;IACtB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,0DAA0D;AAC1D,KAAK,UAAU,aAAa;IAC1B,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;QACxB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,MAAM,CAAC;QACpC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,SAAS;YAC1C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YAC/D,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAE7C,kDAAkD;YAClD,MAAM,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAErC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI;gBACrB,WAAW,EAAE,EAAE,CAAC,WAAW,IAAI,4CAA4C,KAAK,CAAC,IAAI,EAAE;gBACvF,KAAK,EAAE,EAAE,CAAC,KAAK;gBACf,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;gBACxE,MAAM,EAAE,MAAM;aACf,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,uEAAuE;AACvE,SAAS,gBAAgB,CACvB,OAAe;IAEf,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACrD,IAAI,CAAC,KAAK;QAAE,OAAO,MAAM,CAAC;IAE1B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,SAAS;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,iEAAiE;AACjE,KAAK,UAAU,+BAA+B,CAAC,QAAgB;IAC7D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,gCAAgC;YAChC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,SAAS;YACnE,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAC3C,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE;oBAAE,OAAO,IAAI,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,iDAAiD;AACjD,KAAK,UAAU,sBAAsB;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,uEAAuE;AAEvE,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,SAAS,GAAG,MAAM,qBAAqB,EAAE,CAAC;IAChD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,sBAAsB,EAAE,CAAC,CAAC;IAE3D,kBAAkB;IAClB,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC3C,iBAAiB,EAAE;QACnB,aAAa,EAAE;KAChB,CAAC,CAAC;IAEH,oCAAoC;IACpC,MAAM,YAAY,GAA0B,EAAE,CAAC;IAC/C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,qBAAqB;QACrB,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC;QAC7D,YAAY,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5C,WAAW,EACT,KAAK,EAAE,WAAW,IAAI,sBAAsB,GAAG,EAAE;YACnD,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACtC,OAAO,EAAE,GAAG;YACZ,UAAU,EAAE,KAAK,EAAE,kBAAkB;YACrC,eAAe,EAAE,KAAK,EAAE,eAAe;SACxC,CAAC,CAAC;IACL,CAAC;IAED,6CAA6C;IAC7C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,KAAK,MAAM,GAAG,IAAI,UAAU;QAAE,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpD,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,+CAA+C;IAC/C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,KAAK,MAAM,GAAG,IAAI,QAAQ;QAAE,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAEvD,MAAM,WAAW,GAA2B,eAAe,CAAC,GAAG,CAC7D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACN,GAAG,CAAC;QACJ,SAAS,EACP,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;YAC3B,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,YAAY,CAAC,GAAG,CACd,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAC/C;YACD,CAAC,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;KAClE,CAAC,CACH,CAAC;IAEF,OAAO;QACL,QAAQ,EAAE,CAAC,GAAG,YAAY,EAAE,GAAG,QAAQ,CAAC;QACxC,WAAW;QACX,MAAM;KACP,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,WAAmB;IAEnB,IAAI,CAAC;QACH,4EAA4E;QAC5E,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACzC,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtB,uEAAuE;YACvE,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;YAC5F,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAC1C,CAAC,CAAS,EAAE,EAAE,CACZ,CAAC,KAAK,WAAW;gBACjB,CAAC,KAAK,OAAO,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE;gBAC/C,CAAC,KAAK,UAAU,CACnB,CAAC;QACJ,CAAC;QAED,iCAAiC;QACjC,MAAM,OAAO,GAAG,YAAY,EAAE,GAAG,MAAM,CAAC;QACxC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC/D,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACrE,MAAM,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;QAEtC,wFAAwF;QACxF,6FAA6F;QAC7F,iFAAiF;QACjF,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAC;YACtD,IAAI,OAAO,EAAE,CAAC;gBACZ,QAAQ,CAAC,iBAAiB,OAAO,EAAE,EAAE;oBACnC,GAAG,EAAE,MAAM;oBACX,KAAK,EAAE,MAAM;oBACb,OAAO,EAAE,MAAM;iBAChB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,iEAAiE;YACjE,oDAAoD;QACtD,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,WAAmB;IAEnB,IAAI,CAAC;QACH,+BAA+B;QAC/B,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAEjD,sCAAsC;QACtC,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,QAAQ;YAAE,QAAQ,CAAC,QAAQ,GAAG,EAAE,CAAC;QAE/C,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,OAAO,EAAE,CAAC;QACjF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1C,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC;QAED,iCAAiC;QACjC,MAAM,OAAO,GAAG,YAAY,EAAE,GAAG,MAAM,CAAC;QACxC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC/D,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACrE,MAAM,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;QAEtC,mCAAmC;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC;QACzC,QAAQ,CAAC,eAAe,OAAO,EAAE,EAAE;YACjC,GAAG,EAAE,MAAM;YACX,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC5C,CAAC;AACH,CAAC;AAiBD;;;GAGG;AACH,IAAI,YAA4E,CAAC;AAEjF,mFAAmF;AACnF,MAAM,UAAU,mBAAmB;IACjC,YAAY,GAAG,SAAS,CAAC;AAC3B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,YAAY,IAAI,GAAG,GAAG,YAAY,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC;QAC1D,OAAO,YAAY,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,MAAM,OAAO,GAA0B,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC;IAEzC,+BAA+B;IAC/B,IAAI,YAAY,GAAa,EAAE,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAC9E,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,yBAAyB;QACzB,IAAI,SAA6B,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAC7B,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAC5E,CAAC;YACF,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,GAAG,SAAS,CAAC;QACxB,CAAC;QAED,iCAAiC;QACjC,IAAI,MAA0B,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;YAC7D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,8BAA8B,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE;gBACvF,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YACH,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA0B,CAAC;gBACtD,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;YACxB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,GAAG,SAAS,CAAC;QACrB,CAAC;QAED,yCAAyC;QACzC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,EAAE,CAAC,CAAC;QAEvE,OAAO,CAAC,IAAI,CAAC;YACX,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,IAAI;YACzB,SAAS;YACT,MAAM;YACN,eAAe,EAAE,SAAS,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,IAAI,SAAS,KAAK,MAAM;SACzF,CAAC,CAAC;IACL,CAAC;IAED,YAAY,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACjD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,WAAmB;IAEnB,8EAA8E;IAC9E,MAAM,IAAI,GAAG,WAAW;SACrB,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;SAChC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;SACtB,IAAI,EAAE,CAAC;IAEV,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC;IAC1D,CAAC;IAED,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,QAAQ;YAAE,QAAQ,CAAC,QAAQ,GAAG,EAAE,CAAC;QAE/C,kEAAkE;QAClE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QAED,iCAAiC;QACjC,MAAM,OAAO,GAAG,YAAY,EAAE,GAAG,MAAM,CAAC;QACxC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC/D,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACrE,MAAM,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;QAEtC,wDAAwD;QACxD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAElC,mCAAmC;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC;QACzC,QAAQ,CAAC,eAAe,MAAM,EAAE,EAAE;YAChC,GAAG,EAAE,MAAM;YACX,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC5C,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB;QACnD,2CAA2C;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QACpE,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,UAAU,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,CAAC;QACD,kDAAkD;QAClD,OAAO,eAAe,IAAI,EAAE,CAAC;IAC/B,CAAC;IACD,2DAA2D;IAC3D,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,wBAAwB,CAAC,WAAmB;IACnD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7D,MAAM,IAAI,GAA2B,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;QAE/D,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,SAAS;gBAAE,OAAO,QAAQ,CAAC;YAClD,sBAAsB;YACtB,IAAI,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC,KAAK,SAAS;gBAAE,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC9D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,wEAAwE;QACxE,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;QAEzC,mFAAmF;QACnF,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,IAAI,GAAG,KAAK,MAAM;gBAAE,OAAO,GAAG,CAAC;YAC/B,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO,GAAG,CAAC;QACvC,CAAC;QAED,iCAAiC;QACjC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,MAAM;gBAAE,OAAO,GAAG,CAAC;QACxD,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,WAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC;QACzC,QAAQ,CAAC,eAAe,OAAO,SAAS,EAAE;YACxC,GAAG,EAAE,MAAM;YACX,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QACH,0DAA0D;QAC1D,YAAY,GAAG,SAAS,CAAC;QACzB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,MAAM,CAAC,MAAM,gBAAgB,GAAe;IAC1C;QACE,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,8EAA8E;QAC3F,KAAK,EAAE,kBAAkB;QACzB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC;QAC7C,MAAM,EAAE,SAAS;KAClB;IACD;QACE,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,uDAAuD;QACpE,KAAK,EAAE,mBAAmB;QAC1B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;QACrC,MAAM,EAAE,SAAS;KAClB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,0EAA0E;QACvF,KAAK,EAAE,mBAAmB;QAC1B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC;QAC7C,MAAM,EAAE,SAAS;KAClB;IACD;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,uDAAuD;QACpE,KAAK,EAAE,mBAAmB;QAC1B,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,SAAS;KAClB;CACF,CAAC"}
@@ -0,0 +1,26 @@
1
+ export interface ExtensionToolInfo {
2
+ /** Tool name as the agent sees it (<toolName> from registerTool). */
3
+ name: string;
4
+ /** User-visible package name (e.g. "pi-web-access", "@ayulab/pi-rewind"). */
5
+ packageSource: string;
6
+ /** Human-readable description from the tool definition. */
7
+ description: string;
8
+ }
9
+ export interface ExtensionResources {
10
+ tools: ExtensionToolInfo[];
11
+ errors: {
12
+ path: string;
13
+ error: string;
14
+ }[];
15
+ }
16
+ /**
17
+ * Resolve extension-contributed tools visible to a session in `cwd`.
18
+ * Uses the SDK package manager to discover installed packages, then
19
+ * loads each extension to enumerate its registered tools.
20
+ *
21
+ * Failures inside individual packages surface as `errors[]` rather
22
+ * than throwing — a single broken extension must not block the
23
+ * tools listing.
24
+ */
25
+ export declare function discoverExtensionResources(cwd: string): Promise<ExtensionResources>;
26
+ //# sourceMappingURL=extension-scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-scanner.d.ts","sourceRoot":"","sources":["../src/extension-scanner.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,iBAAiB;IACjC,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,aAAa,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC1C;AAED;;;;;;;;GAQG;AACH,wBAAsB,0BAA0B,CAC/C,GAAG,EAAE,MAAM,GACT,OAAO,CAAC,kBAAkB,CAAC,CAgG7B"}