@ashx-j/lunr-dev 0.2.13-dev.8.1 → 0.2.16-dev.9.1

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 (339) hide show
  1. package/CHANGELOG.md +29 -1
  2. package/dist/builtin-extensions/ashxj-tui.d.ts +14 -0
  3. package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
  4. package/dist/builtin-extensions/ashxj-tui.js +37 -3
  5. package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
  6. package/dist/builtin-extensions/index.d.ts +1 -15
  7. package/dist/builtin-extensions/index.d.ts.map +1 -1
  8. package/dist/builtin-extensions/index.js +7 -21
  9. package/dist/builtin-extensions/index.js.map +1 -1
  10. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.d.ts.map +1 -1
  11. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js +6 -2
  12. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js.map +1 -1
  13. package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts +4 -0
  14. package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts.map +1 -1
  15. package/dist/builtin-extensions/pi-lsp-extension/src/index.js +163 -169
  16. package/dist/builtin-extensions/pi-lsp-extension/src/index.js.map +1 -1
  17. package/dist/builtin-extensions/pi-lsp-extension/src/runtime.d.ts +46 -0
  18. package/dist/builtin-extensions/pi-lsp-extension/src/runtime.d.ts.map +1 -0
  19. package/dist/builtin-extensions/pi-lsp-extension/src/runtime.js +109 -0
  20. package/dist/builtin-extensions/pi-lsp-extension/src/runtime.js.map +1 -0
  21. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.d.ts +7 -0
  22. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.d.ts.map +1 -0
  23. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.js +211 -0
  24. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.js.map +1 -0
  25. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.d.ts +0 -5
  26. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.d.ts.map +1 -1
  27. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.js +0 -202
  28. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.js.map +1 -1
  29. package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts.map +1 -1
  30. package/dist/builtin-extensions/pi-mcp-adapter/index.js +251 -94
  31. package/dist/builtin-extensions/pi-mcp-adapter/index.js.map +1 -1
  32. package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts +4 -1
  33. package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts.map +1 -1
  34. package/dist/builtin-extensions/pi-mcp-adapter/init.js +10 -3
  35. package/dist/builtin-extensions/pi-mcp-adapter/init.js.map +1 -1
  36. package/dist/builtin-extensions/pi-mcp-adapter/metadata-cache.d.ts.map +1 -1
  37. package/dist/builtin-extensions/pi-mcp-adapter/metadata-cache.js +6 -1
  38. package/dist/builtin-extensions/pi-mcp-adapter/metadata-cache.js.map +1 -1
  39. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts.map +1 -1
  40. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js +2 -1
  41. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js.map +1 -1
  42. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts +1 -1
  43. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts.map +1 -1
  44. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js +1 -1
  45. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js.map +1 -1
  46. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts +1 -1
  47. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
  48. package/dist/builtin-extensions/pi-subagents/src/extension/index.js +38 -14
  49. package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
  50. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.d.ts.map +1 -1
  51. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.js +1 -1
  52. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.js.map +1 -1
  53. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts +1 -1
  54. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts.map +1 -1
  55. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js +1 -1
  56. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js.map +1 -1
  57. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +1 -1
  58. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
  59. package/dist/builtin-extensions/pi-subagents/src/tui/render.js +2 -1
  60. package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
  61. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts +1 -1
  62. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts.map +1 -1
  63. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js +2 -1
  64. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js.map +1 -1
  65. package/dist/builtin-extensions/pi-web-access/extract.d.ts.map +1 -1
  66. package/dist/builtin-extensions/pi-web-access/extract.js +105 -54
  67. package/dist/builtin-extensions/pi-web-access/extract.js.map +1 -1
  68. package/dist/builtin-extensions/pi-web-access/gemini-search.d.ts +1 -1
  69. package/dist/builtin-extensions/pi-web-access/gemini-search.d.ts.map +1 -1
  70. package/dist/builtin-extensions/pi-web-access/gemini-search.js +82 -65
  71. package/dist/builtin-extensions/pi-web-access/gemini-search.js.map +1 -1
  72. package/dist/builtin-extensions/pi-web-access/github-extract.d.ts.map +1 -1
  73. package/dist/builtin-extensions/pi-web-access/github-extract.js +2 -0
  74. package/dist/builtin-extensions/pi-web-access/github-extract.js.map +1 -1
  75. package/dist/builtin-extensions/pi-web-access/index.d.ts.map +1 -1
  76. package/dist/builtin-extensions/pi-web-access/index.js +167 -77
  77. package/dist/builtin-extensions/pi-web-access/index.js.map +1 -1
  78. package/dist/builtin-extensions/pi-web-access/lazy.d.ts +18 -0
  79. package/dist/builtin-extensions/pi-web-access/lazy.d.ts.map +1 -0
  80. package/dist/builtin-extensions/pi-web-access/lazy.js +19 -0
  81. package/dist/builtin-extensions/pi-web-access/lazy.js.map +1 -0
  82. package/dist/builtin-extensions/pi-web-access/session-cleanup.d.ts +6 -0
  83. package/dist/builtin-extensions/pi-web-access/session-cleanup.d.ts.map +1 -0
  84. package/dist/builtin-extensions/pi-web-access/session-cleanup.js +17 -0
  85. package/dist/builtin-extensions/pi-web-access/session-cleanup.js.map +1 -0
  86. package/dist/catalog/publication.json +12 -12
  87. package/dist/cli-runtime.d.ts +3 -0
  88. package/dist/cli-runtime.d.ts.map +1 -0
  89. package/dist/cli-runtime.js +73 -0
  90. package/dist/cli-runtime.js.map +1 -0
  91. package/dist/cli.d.ts.map +1 -1
  92. package/dist/cli.js +14 -53
  93. package/dist/cli.js.map +1 -1
  94. package/dist/config.d.ts +1 -0
  95. package/dist/config.d.ts.map +1 -1
  96. package/dist/config.js +1 -0
  97. package/dist/config.js.map +1 -1
  98. package/dist/core/agent-session.d.ts +3 -0
  99. package/dist/core/agent-session.d.ts.map +1 -1
  100. package/dist/core/agent-session.js +56 -12
  101. package/dist/core/agent-session.js.map +1 -1
  102. package/dist/core/compaction/compaction.d.ts.map +1 -1
  103. package/dist/core/compaction/compaction.js +10 -5
  104. package/dist/core/compaction/compaction.js.map +1 -1
  105. package/dist/core/extensions/host-static.d.ts.map +1 -1
  106. package/dist/core/extensions/host-static.js +34 -12
  107. package/dist/core/extensions/host-static.js.map +1 -1
  108. package/dist/core/extensions/loader.d.ts +1 -2
  109. package/dist/core/extensions/loader.d.ts.map +1 -1
  110. package/dist/core/extensions/loader.js +10 -64
  111. package/dist/core/extensions/loader.js.map +1 -1
  112. package/dist/core/extensions/types.d.ts +2 -2
  113. package/dist/core/extensions/types.d.ts.map +1 -1
  114. package/dist/core/extensions/types.js.map +1 -1
  115. package/dist/core/footer-data-provider.d.ts.map +1 -1
  116. package/dist/core/footer-data-provider.js +2 -0
  117. package/dist/core/footer-data-provider.js.map +1 -1
  118. package/dist/core/permissions.d.ts +0 -2
  119. package/dist/core/permissions.d.ts.map +1 -1
  120. package/dist/core/permissions.js +10 -18
  121. package/dist/core/permissions.js.map +1 -1
  122. package/dist/core/sdk.d.ts +1 -1
  123. package/dist/core/sdk.d.ts.map +1 -1
  124. package/dist/core/sdk.js +1 -1
  125. package/dist/core/sdk.js.map +1 -1
  126. package/dist/core/slash-commands.d.ts.map +1 -1
  127. package/dist/core/slash-commands.js +0 -1
  128. package/dist/core/slash-commands.js.map +1 -1
  129. package/dist/core/timings.d.ts +2 -1
  130. package/dist/core/timings.d.ts.map +1 -1
  131. package/dist/core/timings.js +17 -2
  132. package/dist/core/timings.js.map +1 -1
  133. package/dist/gateway/commands.d.ts +1 -1
  134. package/dist/gateway/commands.d.ts.map +1 -1
  135. package/dist/gateway/commands.js +1 -18
  136. package/dist/gateway/commands.js.map +1 -1
  137. package/dist/main.d.ts +2 -2
  138. package/dist/main.d.ts.map +1 -1
  139. package/dist/main.js +57 -48
  140. package/dist/main.js.map +1 -1
  141. package/dist/modes/interactive/interactive-mode.d.ts +12 -21
  142. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  143. package/dist/modes/interactive/interactive-mode.js +120 -144
  144. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  145. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  146. package/dist/modes/interactive/theme/theme.js +95 -84
  147. package/dist/modes/interactive/theme/theme.js.map +1 -1
  148. package/dist/node-runtime/agent-session-services-IFJMSX7Z.js +36 -0
  149. package/dist/node-runtime/benchmark-request-UC7PD3V3.js +57 -0
  150. package/dist/node-runtime/brave-UWDA3I22.js +143 -0
  151. package/dist/node-runtime/builtin-extensions-LYZ3BFWQ.js +28 -0
  152. package/dist/node-runtime/chunk-2QKLKMKC.js +173 -0
  153. package/dist/node-runtime/chunk-3GHXVUAK.js +21 -0
  154. package/dist/node-runtime/chunk-3RCWXWAY.js +466 -0
  155. package/dist/node-runtime/chunk-3WFAEVKS.js +115 -0
  156. package/dist/node-runtime/chunk-3X3KZKMI.js +49 -0
  157. package/dist/node-runtime/chunk-4HXHDDCF.js +16 -0
  158. package/dist/node-runtime/chunk-4TLO4PO2.js +3427 -0
  159. package/dist/node-runtime/chunk-4ZWGEEAS.js +69 -0
  160. package/dist/node-runtime/chunk-53YJI7JU.js +137 -0
  161. package/dist/node-runtime/chunk-5P7PZMRU.js +610 -0
  162. package/dist/node-runtime/chunk-7N3YHTYF.js +26 -0
  163. package/dist/node-runtime/chunk-7NBZ5P7I.js +24 -0
  164. package/dist/node-runtime/chunk-A2KQXUJD.js +105 -0
  165. package/dist/node-runtime/chunk-AD6VXAO7.js +342 -0
  166. package/dist/node-runtime/chunk-AHSTJBIB.js +64 -0
  167. package/dist/node-runtime/chunk-AJX357CL.js +20211 -0
  168. package/dist/node-runtime/chunk-ARC4KOTI.js +11178 -0
  169. package/dist/node-runtime/chunk-AUXVGBO4.js +19 -0
  170. package/dist/node-runtime/chunk-AY6CAJSL.js +30 -0
  171. package/dist/node-runtime/chunk-BHO7O6E5.js +296 -0
  172. package/dist/node-runtime/chunk-BI3DHYCN.js +8845 -0
  173. package/dist/node-runtime/chunk-BR7YDUKA.js +109 -0
  174. package/dist/node-runtime/chunk-BRJX2PRC.js +53 -0
  175. package/dist/node-runtime/chunk-C4O2RSQQ.js +37 -0
  176. package/dist/node-runtime/chunk-CCZJ3PYY.js +17 -0
  177. package/dist/node-runtime/chunk-CDFZEWPU.js +8388 -0
  178. package/dist/node-runtime/chunk-CGBXPL3E.js +1171 -0
  179. package/dist/node-runtime/chunk-CJECDQKP.js +19 -0
  180. package/dist/node-runtime/chunk-DAPBPCBP.js +53 -0
  181. package/dist/node-runtime/chunk-DDGMHUOW.js +305 -0
  182. package/dist/node-runtime/chunk-DMMTJQMQ.js +43 -0
  183. package/dist/node-runtime/chunk-DVGWF6A2.js +1180 -0
  184. package/dist/node-runtime/chunk-ECD5L7YI.js +1369 -0
  185. package/dist/node-runtime/chunk-EDBJNRSM.js +46 -0
  186. package/dist/node-runtime/chunk-F4VQFJI2.js +1269 -0
  187. package/dist/node-runtime/chunk-FVDOXRUD.js +96 -0
  188. package/dist/node-runtime/chunk-GZQHMEWL.js +126 -0
  189. package/dist/node-runtime/chunk-H2EOZYMP.js +57 -0
  190. package/dist/node-runtime/chunk-HQCKFM2O.js +56 -0
  191. package/dist/node-runtime/chunk-HYHJIRDW.js +19 -0
  192. package/dist/node-runtime/chunk-I6R76AG7.js +22 -0
  193. package/dist/node-runtime/chunk-IPA627GP.js +296 -0
  194. package/dist/node-runtime/chunk-JHYKXIMM.js +378 -0
  195. package/dist/node-runtime/chunk-KKSIVROT.js +88 -0
  196. package/dist/node-runtime/chunk-LZAW4ZX3.js +633 -0
  197. package/dist/node-runtime/chunk-M3LZLQW2.js +98 -0
  198. package/dist/node-runtime/chunk-MGWCVY6Y.js +47 -0
  199. package/dist/node-runtime/chunk-MJQDX3BA.js +72 -0
  200. package/dist/node-runtime/chunk-MKKH27PH.js +8956 -0
  201. package/dist/node-runtime/chunk-MX3GJNXJ.js +986 -0
  202. package/dist/node-runtime/chunk-N77MY65L.js +966 -0
  203. package/dist/node-runtime/chunk-NUIFPZWX.js +209 -0
  204. package/dist/node-runtime/chunk-OBMWP3I5.js +68 -0
  205. package/dist/node-runtime/chunk-OR4L3IB2.js +42 -0
  206. package/dist/node-runtime/chunk-PBC2Y6GS.js +903 -0
  207. package/dist/node-runtime/chunk-PCGNAY2O.js +1324 -0
  208. package/dist/node-runtime/chunk-PCIGF2XK.js +250 -0
  209. package/dist/node-runtime/chunk-PGAJ5MO5.js +7558 -0
  210. package/dist/node-runtime/chunk-PL6JKXWI.js +3622 -0
  211. package/dist/node-runtime/chunk-PVCDKGR6.js +55 -0
  212. package/dist/node-runtime/chunk-Q4Q6D4IY.js +364 -0
  213. package/dist/node-runtime/chunk-Q5ZU2VRT.js +83 -0
  214. package/dist/node-runtime/chunk-QFWG2RVL.js +5477 -0
  215. package/dist/node-runtime/chunk-QH42CDX3.js +9451 -0
  216. package/dist/node-runtime/chunk-RQ2Q5IYR.js +72 -0
  217. package/dist/node-runtime/chunk-RQ5DNUNG.js +429 -0
  218. package/dist/node-runtime/chunk-RRIZE6QQ.js +17 -0
  219. package/dist/node-runtime/chunk-SN6G4OU6.js +4753 -0
  220. package/dist/node-runtime/chunk-SWSN6HAB.js +53 -0
  221. package/dist/node-runtime/chunk-TQNSPERU.js +949 -0
  222. package/dist/node-runtime/chunk-VRB2IYGG.js +53 -0
  223. package/dist/node-runtime/chunk-VSELYKWU.js +772 -0
  224. package/dist/node-runtime/chunk-W3CVH5RX.js +62 -0
  225. package/dist/node-runtime/chunk-WJVFOIB5.js +24921 -0
  226. package/dist/node-runtime/chunk-WOVTOV5P.js +5653 -0
  227. package/dist/node-runtime/chunk-XBWPBZBN.js +125 -0
  228. package/dist/node-runtime/chunk-XTHQ7XR7.js +509 -0
  229. package/dist/node-runtime/chunk-YF63P5ZT.js +864 -0
  230. package/dist/node-runtime/chunk-YSKSB3BJ.js +295 -0
  231. package/dist/node-runtime/chunk-ZCHMJ34K.js +130 -0
  232. package/dist/node-runtime/chunk-ZKMFUD3Q.js +2834 -0
  233. package/dist/node-runtime/cli-runtime.js +81 -0
  234. package/dist/node-runtime/clipboard-OZ63BBC6.js +12 -0
  235. package/dist/node-runtime/clipboard-image-7QR6GXVA.js +13 -0
  236. package/dist/node-runtime/command-L3LAHDIH.js +13 -0
  237. package/dist/node-runtime/commands-RL5YBW5I.js +291 -0
  238. package/dist/node-runtime/config-FMEOZSWE.js +77 -0
  239. package/dist/node-runtime/curator-server-XCM43VEF.js +3816 -0
  240. package/dist/node-runtime/customize-XEXL2DGQ.js +12 -0
  241. package/dist/node-runtime/direct-tool-executor-JVDXTO7A.js +188 -0
  242. package/dist/node-runtime/exa-LL64QZR2.js +329 -0
  243. package/dist/node-runtime/export-html-KR26FOUZ.js +150 -0
  244. package/dist/node-runtime/extension-input-RV5N6APL.js +14 -0
  245. package/dist/node-runtime/extension-selector-CPD5LWDD.js +14 -0
  246. package/dist/node-runtime/extract-XLQSJN4V.js +17 -0
  247. package/dist/node-runtime/file-sync-HCOP2QVF.js +117 -0
  248. package/dist/node-runtime/gateway-X2TI5X7F.js +2484 -0
  249. package/dist/node-runtime/gemini-api-QE7ANVDZ.js +29 -0
  250. package/dist/node-runtime/gemini-search-U7SUMPQA.js +330 -0
  251. package/dist/node-runtime/gemini-url-context-PXWCBQHK.js +103 -0
  252. package/dist/node-runtime/gemini-web-MM446SEH.js +14 -0
  253. package/dist/node-runtime/github-extract-F64RZOEA.js +619 -0
  254. package/dist/node-runtime/goal-CZQ7FFQJ.js +1831 -0
  255. package/dist/node-runtime/index.js +859 -0
  256. package/dist/node-runtime/init-NJV2T55N.js +28 -0
  257. package/dist/node-runtime/install-cli-TH7IJJQQ.js +308 -0
  258. package/dist/node-runtime/interactive-mode-KOM35YF2.js +56 -0
  259. package/dist/node-runtime/interactive-view-U6OILKF3.js +249 -0
  260. package/dist/node-runtime/lsp-manager-3ASUSO4T.js +1104 -0
  261. package/dist/node-runtime/lunr-cron-YJ5UHYRD.js +268 -0
  262. package/dist/node-runtime/main.js +54 -0
  263. package/dist/node-runtime/mcp-auth-flow-QIXHW6QN.js +32 -0
  264. package/dist/node-runtime/mcp-panel-IIGMXQGP.js +501 -0
  265. package/dist/node-runtime/mcp-setup-panel-FEK7663I.js +355 -0
  266. package/dist/node-runtime/memory-cap-3S4XRLNP.js +20 -0
  267. package/dist/node-runtime/model-tiers-NJLHUEGK.js +20 -0
  268. package/dist/node-runtime/openai-search-B3MSNCQA.js +288 -0
  269. package/dist/node-runtime/package-manager-cli-TZZHJCVI.js +749 -0
  270. package/dist/node-runtime/parallel-AI2MNSCU.js +265 -0
  271. package/dist/node-runtime/parser-manager-TQHWYDH7.js +152 -0
  272. package/dist/node-runtime/pdf-extract-IPE6H4HP.js +57 -0
  273. package/dist/node-runtime/perplexity-QVJW3I35.js +12 -0
  274. package/dist/node-runtime/pi-intercom-EEMBGQID.js +2215 -0
  275. package/dist/node-runtime/pi-mcp-adapter-QFB37AVN.js +422 -0
  276. package/dist/node-runtime/pi-ollama-cloud-4VZRMULP.js +1440 -0
  277. package/dist/node-runtime/pi-prompt-template-model-4QT4LLXF.js +3946 -0
  278. package/dist/node-runtime/pi-subagents-7XJ4H53P.js +6023 -0
  279. package/dist/node-runtime/pi-web-access-DPGAVKOA.js +1864 -0
  280. package/dist/node-runtime/print-mode-VWIRFDAC.js +12 -0
  281. package/dist/node-runtime/proxy-modes-HEEFK4KC.js +685 -0
  282. package/dist/node-runtime/rpc-entry.js +62 -0
  283. package/dist/node-runtime/rpc-mode-SJNSOA4G.js +13 -0
  284. package/dist/node-runtime/runtime-bridges-PPHNBFWL.js +14 -0
  285. package/dist/node-runtime/session-manager-MQNBYACL.js +35 -0
  286. package/dist/node-runtime/session-selector-5AZLJS6U.js +14 -0
  287. package/dist/node-runtime/settings-manager-5LF2VQWC.js +21 -0
  288. package/dist/node-runtime/src-Y7JSCK64.js +2407 -0
  289. package/dist/node-runtime/subagent-executor-5RNDEPIJ.js +8483 -0
  290. package/dist/node-runtime/summary-review-YSMXKITO.js +228 -0
  291. package/dist/node-runtime/tavily-WEZFVFP7.js +154 -0
  292. package/dist/node-runtime/timings-UAD5BEAS.js +16 -0
  293. package/dist/node-runtime/tool-renderer-MV5O452K.js +204 -0
  294. package/dist/node-runtime/update-cli-A253SZ7P.js +73 -0
  295. package/dist/node-runtime/v4-5MNC3H7G.js +424 -0
  296. package/dist/node-runtime/video-extract-OYT5WKS5.js +304 -0
  297. package/dist/node-runtime/workspace-index-6DBXSTJ6.js +163 -0
  298. package/dist/node-runtime/youtube-extract-TQYKGFGS.js +264 -0
  299. package/dist/startup/benchmark-request.d.ts +3 -0
  300. package/dist/startup/benchmark-request.d.ts.map +1 -0
  301. package/dist/startup/benchmark-request.js +65 -0
  302. package/dist/startup/benchmark-request.js.map +1 -0
  303. package/dist/startup/interactive-view.d.ts +55 -0
  304. package/dist/startup/interactive-view.d.ts.map +1 -0
  305. package/dist/startup/interactive-view.js +332 -0
  306. package/dist/startup/interactive-view.js.map +1 -0
  307. package/dist/startup/launch-routing.d.ts.map +1 -1
  308. package/dist/startup/launch-routing.js +9 -10
  309. package/dist/startup/launch-routing.js.map +1 -1
  310. package/dist/startup/startup-milestones.d.ts +1 -1
  311. package/dist/startup/startup-milestones.d.ts.map +1 -1
  312. package/dist/startup/startup-milestones.js +3 -2
  313. package/dist/startup/startup-milestones.js.map +1 -1
  314. package/dist/utils/await-with-abort.d.ts +2 -0
  315. package/dist/utils/await-with-abort.d.ts.map +1 -0
  316. package/dist/utils/await-with-abort.js +19 -0
  317. package/dist/utils/await-with-abort.js.map +1 -0
  318. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  319. package/dist/utils/syntax-highlight.js +10 -4
  320. package/dist/utils/syntax-highlight.js.map +1 -1
  321. package/docs/compaction.md +5 -3
  322. package/docs/development.md +5 -1
  323. package/docs/features.md +0 -1
  324. package/docs/interactive-startup.md +98 -0
  325. package/docs/usage.md +0 -1
  326. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  327. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  328. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  329. package/examples/extensions/gondolin/package-lock.json +2 -2
  330. package/examples/extensions/gondolin/package.json +1 -1
  331. package/examples/extensions/sandbox/package-lock.json +2 -2
  332. package/examples/extensions/sandbox/package.json +1 -1
  333. package/examples/extensions/with-deps/package-lock.json +2 -2
  334. package/examples/extensions/with-deps/package.json +1 -1
  335. package/package.json +20 -20
  336. package/dist/core/swarm.d.ts +0 -23
  337. package/dist/core/swarm.d.ts.map +0 -1
  338. package/dist/core/swarm.js +0 -45
  339. package/dist/core/swarm.js.map +0 -1
@@ -0,0 +1,12 @@
1
+ import { createRequire as __lunrRequire } from "node:module"; const require = __lunrRequire(import.meta.url);
2
+ import {
3
+ CUSTOMIZE_BRIDGE_SYMBOL,
4
+ getCustomizeBridge,
5
+ registerCustomizeBridge
6
+ } from "./chunk-HQCKFM2O.js";
7
+ import "./chunk-BRJX2PRC.js";
8
+ export {
9
+ CUSTOMIZE_BRIDGE_SYMBOL,
10
+ getCustomizeBridge,
11
+ registerCustomizeBridge
12
+ };
@@ -0,0 +1,188 @@
1
+ import { createRequire as __lunrRequire } from "node:module"; const require = __lunrRequire(import.meta.url);
2
+ import {
3
+ guardMcpOutput,
4
+ guardedMcpDetails,
5
+ maybeStartUiSession,
6
+ resolveMcpOutputGuardOptions,
7
+ resolveMcpResultContent,
8
+ transformMcpContent
9
+ } from "./chunk-F4VQFJI2.js";
10
+ import {
11
+ formatSchema,
12
+ getFailureAgeSeconds,
13
+ lazyConnect
14
+ } from "./chunk-MKKH27PH.js";
15
+ import {
16
+ abortable,
17
+ formatAuthRequiredMessage,
18
+ throwIfAborted
19
+ } from "./chunk-VSELYKWU.js";
20
+ import {
21
+ UrlElicitationRequiredError,
22
+ authenticate,
23
+ supportsOAuth
24
+ } from "./chunk-4TLO4PO2.js";
25
+ import "./chunk-4HXHDDCF.js";
26
+ import "./chunk-BI3DHYCN.js";
27
+ import "./chunk-ARC4KOTI.js";
28
+ import "./chunk-Q4Q6D4IY.js";
29
+ import "./chunk-BRJX2PRC.js";
30
+
31
+ // packages/coding-agent/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.js
32
+ function getDirectAuthRequiredMessage(state, serverName, defaultMessage = `MCP server "${serverName}" requires OAuth authentication. Run mcp({ action: "auth-start", server: "${serverName}" }) to get a browser URL, or /mcp-auth ${serverName} in an interactive local session.`) {
33
+ return formatAuthRequiredMessage(state.config, serverName, defaultMessage);
34
+ }
35
+ function getDirectAuthFailedMessage(state, serverName, message) {
36
+ return state.config.settings?.authRequiredMessage ? `OAuth authentication failed for "${serverName}": ${message}. ${getDirectAuthRequiredMessage(state, serverName)}` : `OAuth authentication failed for "${serverName}": ${message}. Run mcp({ action: "auth-start", server: "${serverName}" }) to get a browser URL, or /mcp-auth ${serverName} in an interactive local session.`;
37
+ }
38
+ async function attemptDirectAutoAuth(state, serverName, signal) {
39
+ if (state.config.settings?.autoAuth !== !0)
40
+ return { status: "skipped" };
41
+ let definition = state.config.mcpServers[serverName];
42
+ if (!definition || !supportsOAuth(definition) || !definition.url)
43
+ return { status: "skipped" };
44
+ let grantType = definition.oauth ? definition.oauth.grantType ?? "authorization_code" : "authorization_code";
45
+ if (!state.ui && grantType !== "client_credentials")
46
+ return {
47
+ status: "failed",
48
+ message: getDirectAuthRequiredMessage(state, serverName, `MCP server "${serverName}" requires OAuth authentication. Run mcp({ action: "auth-start", server: "${serverName}" }) to get a browser URL, or /mcp-auth ${serverName} in an interactive local session.`)
49
+ };
50
+ try {
51
+ return await abortable(authenticate(serverName, definition.url, definition), signal), throwIfAborted(signal), { status: "success" };
52
+ } catch (error) {
53
+ throwIfAborted(signal);
54
+ let message = error instanceof Error ? error.message : String(error);
55
+ return {
56
+ status: "failed",
57
+ message: getDirectAuthFailedMessage(state, serverName, message)
58
+ };
59
+ }
60
+ }
61
+ function createDirectToolExecutor(getState, getInitPromise, spec) {
62
+ return async function(_toolCallId, params, signal) {
63
+ throwIfAborted(signal);
64
+ let state = getState(), initPromise = getInitPromise();
65
+ if (!state && initPromise)
66
+ try {
67
+ state = await initPromise;
68
+ } catch (error) {
69
+ let message = error instanceof Error ? error.message : String(error);
70
+ return {
71
+ content: [{ type: "text", text: `MCP initialization failed: ${message}` }],
72
+ details: { error: "init_failed", message }
73
+ };
74
+ }
75
+ if (!state)
76
+ return {
77
+ content: [{ type: "text", text: "MCP not initialized" }],
78
+ details: { error: "not_initialized" }
79
+ };
80
+ let connected = await lazyConnect(state, spec.serverName, signal);
81
+ throwIfAborted(signal);
82
+ let autoAuthAttempted = !1;
83
+ if (!connected && state.manager.getConnection(spec.serverName)?.status === "needs-auth") {
84
+ autoAuthAttempted = !0;
85
+ let autoAuth = await attemptDirectAutoAuth(state, spec.serverName, signal);
86
+ if (throwIfAborted(signal), autoAuth.status === "failed")
87
+ return {
88
+ content: [{ type: "text", text: autoAuth.message }],
89
+ details: { error: "auth_required", server: spec.serverName, message: autoAuth.message }
90
+ };
91
+ autoAuth.status === "success" && (await state.manager.close(spec.serverName), throwIfAborted(signal), state.failureTracker.delete(spec.serverName), connected = await lazyConnect(state, spec.serverName, signal), throwIfAborted(signal));
92
+ }
93
+ if (!connected) {
94
+ if (state.manager.getConnection(spec.serverName)?.status === "needs-auth") {
95
+ let message = getDirectAuthRequiredMessage(state, spec.serverName);
96
+ return {
97
+ content: [{ type: "text", text: message }],
98
+ details: { error: "auth_required", server: spec.serverName, message, autoAuthAttempted }
99
+ };
100
+ }
101
+ let failedAgo = getFailureAgeSeconds(state, spec.serverName);
102
+ return {
103
+ content: [{ type: "text", text: `MCP server "${spec.serverName}" not available${failedAgo !== null ? ` (failed ${failedAgo}s ago)` : ""}` }],
104
+ details: { error: "server_unavailable", server: spec.serverName }
105
+ };
106
+ }
107
+ let connection = state.manager.getConnection(spec.serverName);
108
+ if (!connection || connection.status !== "connected")
109
+ return {
110
+ content: [{ type: "text", text: `MCP server "${spec.serverName}" not connected` }],
111
+ details: { error: "not_connected", server: spec.serverName }
112
+ };
113
+ let uiSession = null, requestOptions = state.manager.getRequestOptions?.(spec.serverName, signal) ?? (signal ? { signal } : void 0), outputGuardOptions = resolveMcpOutputGuardOptions(state.config.settings);
114
+ try {
115
+ if (state.manager.touch(spec.serverName), state.manager.incrementInFlight(spec.serverName), spec.resourceUri) {
116
+ let content2 = ((await connection.client.readResource({ uri: spec.resourceUri }, requestOptions)).contents ?? []).map((c) => ({
117
+ type: "text",
118
+ text: "text" in c ? c.text : "blob" in c ? `[Binary data: ${c.mimeType ?? "unknown"}]` : JSON.stringify(c)
119
+ })), guarded2 = await guardMcpOutput(content2.length > 0 ? content2 : [{ type: "text", text: "(empty resource)" }], outputGuardOptions);
120
+ return {
121
+ content: guarded2.content,
122
+ details: { server: spec.serverName, resourceUri: spec.resourceUri, ...guardedMcpDetails(guarded2) }
123
+ };
124
+ }
125
+ let hasUi = !!spec.uiResourceUri;
126
+ uiSession = hasUi ? await maybeStartUiSession(state, {
127
+ serverName: spec.serverName,
128
+ toolName: spec.originalName,
129
+ toolArgs: params ?? {},
130
+ uiResourceUri: spec.uiResourceUri,
131
+ streamMode: spec.uiStreamMode
132
+ }) : null, throwIfAborted(signal);
133
+ let resultPromise = connection.client.callTool({
134
+ name: spec.originalName,
135
+ arguments: params ?? {},
136
+ _meta: uiSession?.requestMeta
137
+ }, void 0, requestOptions), result = await abortable(resultPromise, signal);
138
+ if (throwIfAborted(signal), uiSession?.sendToolResult(result), result.isError) {
139
+ let mcpContent = result.content ?? [], content2 = transformMcpContent(mcpContent), outputContent2 = content2.length > 0 ? content2 : [{ type: "text", text: "(empty result)" }], schemaText = spec.inputSchema ? `
140
+
141
+ Expected parameters:
142
+ ${formatSchema(spec.inputSchema)}` : "", guarded2 = await guardMcpOutput(outputContent2, { ...outputGuardOptions, prefix: "Error: ", suffix: schemaText, emptyTextFallback: "Tool execution failed" });
143
+ return {
144
+ content: guarded2.content,
145
+ details: { error: "tool_error", server: spec.serverName, ...guardedMcpDetails(guarded2) }
146
+ };
147
+ }
148
+ let content = resolveMcpResultContent(result), outputContent = content.length > 0 ? content : [{ type: "text", text: "(empty result)" }];
149
+ if (hasUi) {
150
+ let uiMessage = uiSession?.reused ? "Updated the open UI." : "\u{1F4FA} Interactive UI is now open in your browser. I'll respond to your prompts and intents as you interact with it.", guarded2 = await guardMcpOutput(outputContent, { ...outputGuardOptions, suffix: `
151
+
152
+ ${uiMessage}` });
153
+ return {
154
+ content: guarded2.content,
155
+ details: { server: spec.serverName, tool: spec.originalName, uiOpen: !0, ...guardedMcpDetails(guarded2) }
156
+ };
157
+ }
158
+ let guarded = await guardMcpOutput(outputContent, { ...outputGuardOptions });
159
+ return {
160
+ content: guarded.content,
161
+ details: { server: spec.serverName, tool: spec.originalName, ...guardedMcpDetails(guarded) }
162
+ };
163
+ } catch (error) {
164
+ if (error instanceof UrlElicitationRequiredError) {
165
+ let action = await state.manager.handleUrlElicitationRequired(spec.serverName, error), message2 = action === "accept" ? "The original MCP tool did not run. Complete the opened browser interaction, then retry the tool." : `The URL interaction was ${action === "decline" ? "declined" : "cancelled"}.`;
166
+ return uiSession?.sendToolCancelled(message2), {
167
+ content: [{ type: "text", text: message2 }],
168
+ details: { error: "url_elicitation_required", server: spec.serverName, action }
169
+ };
170
+ }
171
+ let message = error instanceof Error ? error.message : String(error);
172
+ uiSession?.sendToolCancelled(message);
173
+ let schemaText = spec.inputSchema ? `
174
+
175
+ Expected parameters:
176
+ ${formatSchema(spec.inputSchema)}` : "", guarded = await guardMcpOutput([{ type: "text", text: message }], { ...outputGuardOptions, prefix: "Failed to call tool: ", suffix: schemaText });
177
+ return {
178
+ content: guarded.content,
179
+ details: { error: "call_failed", server: spec.serverName, ...guardedMcpDetails(guarded) }
180
+ };
181
+ } finally {
182
+ uiSession?.reused && uiSession.close(), state.manager.decrementInFlight(spec.serverName), state.manager.touch(spec.serverName);
183
+ }
184
+ };
185
+ }
186
+ export {
187
+ createDirectToolExecutor
188
+ };
@@ -0,0 +1,329 @@
1
+ import { createRequire as __lunrRequire } from "node:module"; const require = __lunrRequire(import.meta.url);
2
+ import {
3
+ activityMonitor
4
+ } from "./chunk-DAPBPCBP.js";
5
+ import {
6
+ getWebSearchConfigPath
7
+ } from "./chunk-VRB2IYGG.js";
8
+ import "./chunk-BRJX2PRC.js";
9
+
10
+ // packages/coding-agent/dist/builtin-extensions/pi-web-access/exa.js
11
+ import { existsSync, readFileSync } from "node:fs";
12
+ var EXA_ANSWER_URL = "https://api.exa.ai/answer", EXA_SEARCH_URL = "https://api.exa.ai/search", EXA_MCP_URL = "https://mcp.exa.ai/mcp", CONFIG_PATH = getWebSearchConfigPath(), cachedConfig = null;
13
+ function loadConfig() {
14
+ if (cachedConfig)
15
+ return cachedConfig;
16
+ if (!existsSync(CONFIG_PATH))
17
+ return cachedConfig = {}, cachedConfig;
18
+ let raw = readFileSync(CONFIG_PATH, "utf-8");
19
+ try {
20
+ return cachedConfig = JSON.parse(raw), cachedConfig;
21
+ } catch (err) {
22
+ let message = err instanceof Error ? err.message : String(err);
23
+ throw new Error(`Failed to parse ${CONFIG_PATH}: ${message}`);
24
+ }
25
+ }
26
+ function normalizeApiKey(value) {
27
+ if (typeof value != "string")
28
+ return null;
29
+ let normalized = value.trim();
30
+ return normalized.length > 0 ? normalized : null;
31
+ }
32
+ function getApiKey() {
33
+ return normalizeApiKey(process.env.EXA_API_KEY) ?? normalizeApiKey(loadConfig().exaApiKey);
34
+ }
35
+ function requestSignal(signal) {
36
+ let timeout = AbortSignal.timeout(6e4);
37
+ return signal ? AbortSignal.any([signal, timeout]) : timeout;
38
+ }
39
+ function recencyToStartDate(filter) {
40
+ let now = /* @__PURE__ */ new Date(), days = {
41
+ day: 1,
42
+ week: 7,
43
+ month: 30,
44
+ year: 365
45
+ }[filter] ?? 0;
46
+ return new Date(now.getTime() - days * 864e5).toISOString();
47
+ }
48
+ function mapDomainFilter(domainFilter) {
49
+ if (!domainFilter?.length)
50
+ return {};
51
+ let includeDomains = domainFilter.filter((d) => !d.startsWith("-") && d.trim().length > 0).map((d) => d.trim()), excludeDomains = domainFilter.filter((d) => d.startsWith("-")).map((d) => d.slice(1).trim()).filter(Boolean);
52
+ return {
53
+ ...includeDomains.length ? { includeDomains } : {},
54
+ ...excludeDomains.length ? { excludeDomains } : {}
55
+ };
56
+ }
57
+ function normalizeHighlights(value) {
58
+ return Array.isArray(value) ? value.filter((item) => typeof item == "string" && item.trim().length > 0) : [];
59
+ }
60
+ function buildAnswerFromSearchResults(results) {
61
+ if (!results?.length)
62
+ return "";
63
+ let parts = [];
64
+ for (let i = 0; i < results.length; i++) {
65
+ let item = results[i];
66
+ if (!item?.url)
67
+ continue;
68
+ let highlights = normalizeHighlights(item.highlights), content = highlights.length > 0 ? highlights.join(" ") : typeof item.text == "string" ? item.text.trim().slice(0, 1e3) : "";
69
+ if (!content)
70
+ continue;
71
+ let sourceTitle = item.title || `Source ${i + 1}`;
72
+ parts.push(`${content}
73
+ Source: ${sourceTitle} (${item.url})`);
74
+ }
75
+ return parts.join(`
76
+
77
+ `);
78
+ }
79
+ function mapResults(results) {
80
+ if (!Array.isArray(results))
81
+ return [];
82
+ let mapped = [];
83
+ for (let i = 0; i < results.length; i++) {
84
+ let item = results[i];
85
+ item?.url && mapped.push({
86
+ title: item.title || `Source ${i + 1}`,
87
+ url: item.url,
88
+ snippet: ""
89
+ });
90
+ }
91
+ return mapped;
92
+ }
93
+ function mapInlineContent(results) {
94
+ return results?.length ? results.filter((r) => !!r?.url && typeof r.text == "string" && r.text.length > 0).map((r) => ({
95
+ url: r.url,
96
+ title: r.title || "",
97
+ content: r.text,
98
+ error: null
99
+ })) : [];
100
+ }
101
+ async function callExaMcp(toolName, args, signal) {
102
+ let response = await fetch(EXA_MCP_URL, {
103
+ method: "POST",
104
+ headers: {
105
+ "Content-Type": "application/json",
106
+ Accept: "application/json, text/event-stream"
107
+ },
108
+ body: JSON.stringify({
109
+ jsonrpc: "2.0",
110
+ id: 1,
111
+ method: "tools/call",
112
+ params: {
113
+ name: toolName,
114
+ arguments: args
115
+ }
116
+ }),
117
+ signal: requestSignal(signal)
118
+ });
119
+ if (!response.ok) {
120
+ let errorText = await response.text();
121
+ throw new Error(`Exa MCP error ${response.status}: ${errorText.slice(0, 300)}`);
122
+ }
123
+ let body = await response.text(), dataLines = body.split(`
124
+ `).filter((line) => line.startsWith("data:")), parsed = null;
125
+ for (let line of dataLines) {
126
+ let payload = line.slice(5).trim();
127
+ if (payload)
128
+ try {
129
+ let candidate = JSON.parse(payload);
130
+ if (candidate?.result || candidate?.error) {
131
+ parsed = candidate;
132
+ break;
133
+ }
134
+ } catch {
135
+ }
136
+ }
137
+ if (!parsed)
138
+ try {
139
+ let candidate = JSON.parse(body);
140
+ (candidate?.result || candidate?.error) && (parsed = candidate);
141
+ } catch {
142
+ }
143
+ if (!parsed)
144
+ throw new Error("Exa MCP returned an empty response");
145
+ if (parsed.error) {
146
+ let code = typeof parsed.error.code == "number" ? ` ${parsed.error.code}` : "", message = parsed.error.message || "Unknown error";
147
+ throw new Error(`Exa MCP error${code}: ${message}`);
148
+ }
149
+ if (parsed.result?.isError) {
150
+ let message = parsed.result.content?.find((item) => item.type === "text" && typeof item.text == "string")?.text?.trim();
151
+ throw new Error(message || "Exa MCP returned an error");
152
+ }
153
+ let text = parsed.result?.content?.find((item) => item.type === "text" && typeof item.text == "string" && item.text.trim().length > 0)?.text;
154
+ if (!text)
155
+ throw new Error("Exa MCP returned empty content");
156
+ return text;
157
+ }
158
+ function parseMcpResults(text) {
159
+ let parsed = text.split(/(?=^Title: )/m).filter((block) => block.trim().length > 0).map((block) => {
160
+ let title = block.match(/^Title: (.+)/m)?.[1]?.trim() ?? "", url = block.match(/^URL: (.+)/m)?.[1]?.trim() ?? "", content = "", textStart = block.indexOf(`
161
+ Text: `);
162
+ if (textStart >= 0)
163
+ content = block.slice(textStart + 7).trim();
164
+ else {
165
+ let hlMatch = block.match(/\nHighlights:\s*\n/);
166
+ hlMatch?.index != null && (content = block.slice(hlMatch.index + hlMatch[0].length).trim());
167
+ }
168
+ return content = content.replace(/\n---\s*$/, "").trim(), { title, url, content };
169
+ }).filter((result) => result.url.length > 0);
170
+ return parsed.length > 0 ? parsed : null;
171
+ }
172
+ function buildAnswerFromMcpResults(results) {
173
+ if (results.length === 0)
174
+ return "";
175
+ let parts = [];
176
+ for (let i = 0; i < results.length; i++) {
177
+ let result = results[i], snippet = result.content.replace(/\s+/g, " ").trim().slice(0, 500);
178
+ if (!snippet)
179
+ continue;
180
+ let sourceTitle = result.title || `Source ${i + 1}`;
181
+ parts.push(`${snippet}
182
+ Source: ${sourceTitle} (${result.url})`);
183
+ }
184
+ return parts.join(`
185
+
186
+ `);
187
+ }
188
+ function mapMcpInlineContent(results) {
189
+ return results.filter((result) => result.content.length > 0).map((result) => ({
190
+ url: result.url,
191
+ title: result.title,
192
+ content: result.content,
193
+ error: null
194
+ }));
195
+ }
196
+ function buildMcpQuery(query, options) {
197
+ let parts = [query];
198
+ if (options.domainFilter?.length)
199
+ for (let d of options.domainFilter)
200
+ parts.push(d.startsWith("-") ? `-site:${d.slice(1)}` : `site:${d}`);
201
+ if (options.recencyFilter) {
202
+ let now = /* @__PURE__ */ new Date();
203
+ switch (options.recencyFilter) {
204
+ case "day":
205
+ parts.push("past 24 hours");
206
+ break;
207
+ case "week":
208
+ parts.push("past week");
209
+ break;
210
+ case "month":
211
+ parts.push(`${now.toLocaleString("en", { month: "long" })} ${now.getFullYear()}`);
212
+ break;
213
+ case "year":
214
+ parts.push(String(now.getFullYear()));
215
+ break;
216
+ }
217
+ }
218
+ return parts.join(" ");
219
+ }
220
+ async function searchWithExaMcp(query, options = {}) {
221
+ let enrichedQuery = buildMcpQuery(query, options), activityId = activityMonitor.logStart({ type: "api", query: enrichedQuery });
222
+ try {
223
+ let text = await callExaMcp("web_search_exa", {
224
+ query: enrichedQuery,
225
+ numResults: options.numResults ?? 5,
226
+ livecrawl: "fallback",
227
+ type: "auto",
228
+ contextMaxCharacters: options.includeContent ? 5e4 : 3e3
229
+ }, options.signal), parsedResults = parseMcpResults(text);
230
+ if (activityMonitor.logComplete(activityId, 200), !parsedResults)
231
+ return null;
232
+ let response = {
233
+ answer: buildAnswerFromMcpResults(parsedResults),
234
+ results: parsedResults.map((result, index) => ({
235
+ title: result.title || `Source ${index + 1}`,
236
+ url: result.url,
237
+ snippet: ""
238
+ }))
239
+ };
240
+ if (options.includeContent) {
241
+ let inlineContent = mapMcpInlineContent(parsedResults);
242
+ inlineContent.length > 0 && (response.inlineContent = inlineContent);
243
+ }
244
+ return response;
245
+ } catch (err) {
246
+ let message = err instanceof Error ? err.message : String(err);
247
+ throw message.toLowerCase().includes("abort") ? activityMonitor.logComplete(activityId, 0) : activityMonitor.logError(activityId, message), err;
248
+ }
249
+ }
250
+ function isExaAvailable() {
251
+ return !0;
252
+ }
253
+ function hasExaApiKey() {
254
+ return !!getApiKey();
255
+ }
256
+ async function searchWithExa(query, options = {}) {
257
+ let apiKey = getApiKey();
258
+ if (!apiKey)
259
+ return searchWithExaMcp(query, options);
260
+ let useSearch = options.includeContent || !!options.recencyFilter || !!options.domainFilter?.length || !!(options.numResults && options.numResults !== 5), activityId = activityMonitor.logStart({ type: "api", query });
261
+ try {
262
+ if (!useSearch) {
263
+ let response2 = await fetch(EXA_ANSWER_URL, {
264
+ method: "POST",
265
+ headers: {
266
+ "x-api-key": apiKey,
267
+ "Content-Type": "application/json"
268
+ },
269
+ body: JSON.stringify({
270
+ query,
271
+ text: !0
272
+ }),
273
+ signal: requestSignal(options.signal)
274
+ });
275
+ if (!response2.ok) {
276
+ let errorText = await response2.text();
277
+ throw new Error(`Exa API error ${response2.status}: ${errorText.slice(0, 300)}`);
278
+ }
279
+ let data2 = await response2.json();
280
+ return activityMonitor.logComplete(activityId, response2.status), {
281
+ answer: data2.answer || "",
282
+ results: mapResults(data2.citations)
283
+ };
284
+ }
285
+ let startDate = options.recencyFilter ? recencyToStartDate(options.recencyFilter) : null, domainFilters = mapDomainFilter(options.domainFilter), response = await fetch(EXA_SEARCH_URL, {
286
+ method: "POST",
287
+ headers: {
288
+ "x-api-key": apiKey,
289
+ "Content-Type": "application/json"
290
+ },
291
+ body: JSON.stringify({
292
+ query,
293
+ type: "auto",
294
+ numResults: options.numResults ?? 5,
295
+ ...domainFilters,
296
+ ...startDate ? { startPublishedDate: startDate } : {},
297
+ contents: {
298
+ text: options.includeContent ? !0 : { maxCharacters: 3e3 },
299
+ highlights: !0
300
+ }
301
+ }),
302
+ signal: requestSignal(options.signal)
303
+ });
304
+ if (!response.ok) {
305
+ let errorText = await response.text();
306
+ throw new Error(`Exa API error ${response.status}: ${errorText.slice(0, 300)}`);
307
+ }
308
+ let data = await response.json();
309
+ activityMonitor.logComplete(activityId, response.status);
310
+ let mapped = {
311
+ answer: buildAnswerFromSearchResults(data.results),
312
+ results: mapResults(data.results)
313
+ };
314
+ if (options.includeContent) {
315
+ let inlineContent = mapInlineContent(data.results);
316
+ inlineContent.length > 0 && (mapped.inlineContent = inlineContent);
317
+ }
318
+ return mapped;
319
+ } catch (err) {
320
+ let message = err instanceof Error ? err.message : String(err);
321
+ throw message.toLowerCase().includes("abort") ? activityMonitor.logComplete(activityId, 0) : activityMonitor.logError(activityId, message), err;
322
+ }
323
+ }
324
+ export {
325
+ callExaMcp,
326
+ hasExaApiKey,
327
+ isExaAvailable,
328
+ searchWithExa
329
+ };
@@ -0,0 +1,150 @@
1
+ import { createRequire as __lunrRequire } from "node:module"; const require = __lunrRequire(import.meta.url);
2
+ import {
3
+ SessionManager
4
+ } from "./chunk-PBC2Y6GS.js";
5
+ import "./chunk-FVDOXRUD.js";
6
+ import {
7
+ getResolvedThemeColors,
8
+ getThemeExportColors
9
+ } from "./chunk-MX3GJNXJ.js";
10
+ import {
11
+ APP_NAME,
12
+ getExportTemplateDir,
13
+ normalizePath,
14
+ resolvePath
15
+ } from "./chunk-PCIGF2XK.js";
16
+ import "./chunk-Q4Q6D4IY.js";
17
+ import "./chunk-BRJX2PRC.js";
18
+
19
+ // packages/coding-agent/dist/core/export-html/index.js
20
+ import { existsSync, readFileSync, writeFileSync } from "fs";
21
+ import { basename, join } from "path";
22
+ function parseColor(color) {
23
+ let hexMatch = color.match(/^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/);
24
+ if (hexMatch)
25
+ return {
26
+ r: Number.parseInt(hexMatch[1], 16),
27
+ g: Number.parseInt(hexMatch[2], 16),
28
+ b: Number.parseInt(hexMatch[3], 16)
29
+ };
30
+ let rgbMatch = color.match(/^rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/);
31
+ if (rgbMatch)
32
+ return {
33
+ r: Number.parseInt(rgbMatch[1], 10),
34
+ g: Number.parseInt(rgbMatch[2], 10),
35
+ b: Number.parseInt(rgbMatch[3], 10)
36
+ };
37
+ }
38
+ function getLuminance(r, g, b) {
39
+ let toLinear = (c) => {
40
+ let s = c / 255;
41
+ return s <= 0.03928 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4;
42
+ };
43
+ return 0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b);
44
+ }
45
+ function adjustBrightness(color, factor) {
46
+ let parsed = parseColor(color);
47
+ if (!parsed)
48
+ return color;
49
+ let adjust = (c) => Math.min(255, Math.max(0, Math.round(c * factor)));
50
+ return `rgb(${adjust(parsed.r)}, ${adjust(parsed.g)}, ${adjust(parsed.b)})`;
51
+ }
52
+ function deriveExportColors(baseColor) {
53
+ let parsed = parseColor(baseColor);
54
+ return parsed ? getLuminance(parsed.r, parsed.g, parsed.b) > 0.5 ? {
55
+ pageBg: adjustBrightness(baseColor, 0.96),
56
+ cardBg: baseColor,
57
+ infoBg: `rgb(${Math.min(255, parsed.r + 10)}, ${Math.min(255, parsed.g + 5)}, ${Math.max(0, parsed.b - 20)})`
58
+ } : {
59
+ pageBg: adjustBrightness(baseColor, 0.7),
60
+ cardBg: adjustBrightness(baseColor, 0.85),
61
+ infoBg: `rgb(${Math.min(255, parsed.r + 20)}, ${Math.min(255, parsed.g + 15)}, ${parsed.b})`
62
+ } : {
63
+ pageBg: "rgb(24, 24, 30)",
64
+ cardBg: "rgb(30, 30, 36)",
65
+ infoBg: "rgb(60, 55, 40)"
66
+ };
67
+ }
68
+ function generateThemeVars(themeName) {
69
+ let colors = getResolvedThemeColors(themeName), lines = [];
70
+ for (let [key, value] of Object.entries(colors))
71
+ lines.push(`--${key}: ${value};`);
72
+ let themeExport = getThemeExportColors(themeName), userMessageBg = colors.userMessageBg || "#343541", derivedColors = deriveExportColors(userMessageBg);
73
+ return lines.push(`--exportPageBg: ${themeExport.pageBg ?? derivedColors.pageBg};`), lines.push(`--exportCardBg: ${themeExport.cardBg ?? derivedColors.cardBg};`), lines.push(`--exportInfoBg: ${themeExport.infoBg ?? derivedColors.infoBg};`), lines.join(`
74
+ `);
75
+ }
76
+ function generateHtml(sessionData, themeName) {
77
+ let templateDir = getExportTemplateDir(), template = readFileSync(join(templateDir, "template.html"), "utf-8"), templateCss = readFileSync(join(templateDir, "template.css"), "utf-8"), templateJs = readFileSync(join(templateDir, "template.js"), "utf-8"), markedJs = readFileSync(join(templateDir, "vendor", "marked.min.js"), "utf-8"), hljsJs = readFileSync(join(templateDir, "vendor", "highlight.min.js"), "utf-8"), themeVars = generateThemeVars(themeName), colors = getResolvedThemeColors(themeName), themeExport = getThemeExportColors(themeName), derivedExportColors = deriveExportColors(colors.userMessageBg || "#343541"), bodyBg = themeExport.pageBg ?? derivedExportColors.pageBg, containerBg = themeExport.cardBg ?? derivedExportColors.cardBg, infoBg = themeExport.infoBg ?? derivedExportColors.infoBg, sessionDataBase64 = Buffer.from(JSON.stringify(sessionData)).toString("base64"), css = templateCss.replace("{{THEME_VARS}}", themeVars).replace("{{BODY_BG}}", bodyBg).replace("{{CONTAINER_BG}}", containerBg).replace("{{INFO_BG}}", infoBg);
78
+ return template.replace("{{CSS}}", css).replace("{{JS}}", templateJs).replace("{{SESSION_DATA}}", sessionDataBase64).replace("{{MARKED_JS}}", markedJs).replace("{{HIGHLIGHT_JS}}", hljsJs);
79
+ }
80
+ var TEMPLATE_RENDERED_TOOLS = /* @__PURE__ */ new Set(["bash", "read", "write", "edit", "ls"]);
81
+ function preRenderCustomTools(entries, toolRenderer) {
82
+ let renderedTools = {};
83
+ for (let entry of entries) {
84
+ if (entry.type !== "message")
85
+ continue;
86
+ let msg = entry.message;
87
+ if (msg.role === "assistant" && Array.isArray(msg.content)) {
88
+ for (let block of msg.content)
89
+ if (block.type === "toolCall" && !TEMPLATE_RENDERED_TOOLS.has(block.name)) {
90
+ let callHtml = toolRenderer.renderCall(block.id, block.name, block.arguments);
91
+ callHtml && (renderedTools[block.id] = { callHtml });
92
+ }
93
+ }
94
+ if (msg.role === "toolResult" && msg.toolCallId) {
95
+ let toolName = msg.toolName || "", existing = renderedTools[msg.toolCallId];
96
+ if (existing || !TEMPLATE_RENDERED_TOOLS.has(toolName)) {
97
+ let rendered = toolRenderer.renderResult(msg.toolCallId, toolName, msg.content, msg.details, msg.isError || !1);
98
+ rendered && (renderedTools[msg.toolCallId] = {
99
+ ...existing,
100
+ resultHtmlCollapsed: rendered.collapsed,
101
+ resultHtmlExpanded: rendered.expanded
102
+ });
103
+ }
104
+ }
105
+ }
106
+ return renderedTools;
107
+ }
108
+ async function exportSessionToHtml(sm, state, options) {
109
+ let opts = typeof options == "string" ? { outputPath: options } : options || {}, sessionFile = sm.getSessionFile();
110
+ if (!sessionFile)
111
+ throw new Error("Cannot export in-memory session to HTML");
112
+ if (!existsSync(sessionFile))
113
+ throw new Error("Nothing to export yet - start a conversation first");
114
+ let entries = sm.getEntries(), renderedTools;
115
+ opts.toolRenderer && (renderedTools = preRenderCustomTools(entries, opts.toolRenderer), Object.keys(renderedTools).length === 0 && (renderedTools = void 0));
116
+ let sessionData = {
117
+ header: sm.getHeader(),
118
+ entries,
119
+ leafId: sm.getLeafId(),
120
+ systemPrompt: state?.systemPrompt,
121
+ tools: state?.tools?.map((t) => ({ name: t.name, description: t.description, parameters: t.parameters })),
122
+ renderedTools
123
+ }, html = generateHtml(sessionData, opts.themeName), outputPath = opts.outputPath ? normalizePath(opts.outputPath) : void 0;
124
+ if (!outputPath) {
125
+ let sessionBasename = basename(sessionFile, ".jsonl");
126
+ outputPath = `${APP_NAME}-session-${sessionBasename}.html`;
127
+ }
128
+ return writeFileSync(outputPath, html, "utf8"), outputPath;
129
+ }
130
+ async function exportFromFile(inputPath, options) {
131
+ let opts = typeof options == "string" ? { outputPath: options } : options || {}, resolvedInputPath = resolvePath(inputPath);
132
+ if (!existsSync(resolvedInputPath))
133
+ throw new Error(`File not found: ${resolvedInputPath}`);
134
+ let sm = SessionManager.open(resolvedInputPath), sessionData = {
135
+ header: sm.getHeader(),
136
+ entries: sm.getEntries(),
137
+ leafId: sm.getLeafId(),
138
+ systemPrompt: void 0,
139
+ tools: void 0
140
+ }, html = generateHtml(sessionData, opts.themeName), outputPath = opts.outputPath ? normalizePath(opts.outputPath) : void 0;
141
+ if (!outputPath) {
142
+ let inputBasename = basename(resolvedInputPath, ".jsonl");
143
+ outputPath = `${APP_NAME}-session-${inputBasename}.html`;
144
+ }
145
+ return writeFileSync(outputPath, html, "utf8"), outputPath;
146
+ }
147
+ export {
148
+ exportFromFile,
149
+ exportSessionToHtml
150
+ };