@astralyn/pi 0.81.1-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 (1065) hide show
  1. package/CHANGELOG.md +5113 -0
  2. package/README.md +677 -0
  3. package/dist/bun/cli.d.ts +3 -0
  4. package/dist/bun/cli.d.ts.map +1 -0
  5. package/dist/bun/cli.js +11 -0
  6. package/dist/bun/cli.js.map +1 -0
  7. package/dist/bun/register-bedrock.d.ts +2 -0
  8. package/dist/bun/register-bedrock.d.ts.map +1 -0
  9. package/dist/bun/register-bedrock.js +4 -0
  10. package/dist/bun/register-bedrock.js.map +1 -0
  11. package/dist/bun/restore-sandbox-env.d.ts +17 -0
  12. package/dist/bun/restore-sandbox-env.d.ts.map +1 -0
  13. package/dist/bun/restore-sandbox-env.js +36 -0
  14. package/dist/bun/restore-sandbox-env.js.map +1 -0
  15. package/dist/cli/args.d.ts +57 -0
  16. package/dist/cli/args.d.ts.map +1 -0
  17. package/dist/cli/args.js +381 -0
  18. package/dist/cli/args.js.map +1 -0
  19. package/dist/cli/config-selector.d.ts +16 -0
  20. package/dist/cli/config-selector.d.ts.map +1 -0
  21. package/dist/cli/config-selector.js +31 -0
  22. package/dist/cli/config-selector.js.map +1 -0
  23. package/dist/cli/file-processor.d.ts +15 -0
  24. package/dist/cli/file-processor.d.ts.map +1 -0
  25. package/dist/cli/file-processor.js +70 -0
  26. package/dist/cli/file-processor.js.map +1 -0
  27. package/dist/cli/initial-message.d.ts +18 -0
  28. package/dist/cli/initial-message.d.ts.map +1 -0
  29. package/dist/cli/initial-message.js +22 -0
  30. package/dist/cli/initial-message.js.map +1 -0
  31. package/dist/cli/list-models.d.ts +9 -0
  32. package/dist/cli/list-models.d.ts.map +1 -0
  33. package/dist/cli/list-models.js +98 -0
  34. package/dist/cli/list-models.js.map +1 -0
  35. package/dist/cli/project-trust.d.ts +10 -0
  36. package/dist/cli/project-trust.d.ts.map +1 -0
  37. package/dist/cli/project-trust.js +48 -0
  38. package/dist/cli/project-trust.js.map +1 -0
  39. package/dist/cli/session-picker.d.ts +10 -0
  40. package/dist/cli/session-picker.d.ts.map +1 -0
  41. package/dist/cli/session-picker.js +36 -0
  42. package/dist/cli/session-picker.js.map +1 -0
  43. package/dist/cli/startup-ui.d.ts +20 -0
  44. package/dist/cli/startup-ui.d.ts.map +1 -0
  45. package/dist/cli/startup-ui.js +184 -0
  46. package/dist/cli/startup-ui.js.map +1 -0
  47. package/dist/cli.d.ts +3 -0
  48. package/dist/cli.d.ts.map +1 -0
  49. package/dist/cli.js +18 -0
  50. package/dist/cli.js.map +1 -0
  51. package/dist/config.d.ts +96 -0
  52. package/dist/config.d.ts.map +1 -0
  53. package/dist/config.js +455 -0
  54. package/dist/config.js.map +1 -0
  55. package/dist/core/agent-session-runtime.d.ts +119 -0
  56. package/dist/core/agent-session-runtime.d.ts.map +1 -0
  57. package/dist/core/agent-session-runtime.js +306 -0
  58. package/dist/core/agent-session-runtime.js.map +1 -0
  59. package/dist/core/agent-session-services.d.ts +85 -0
  60. package/dist/core/agent-session-services.d.ts.map +1 -0
  61. package/dist/core/agent-session-services.js +133 -0
  62. package/dist/core/agent-session-services.js.map +1 -0
  63. package/dist/core/agent-session.d.ts +642 -0
  64. package/dist/core/agent-session.d.ts.map +1 -0
  65. package/dist/core/agent-session.js +2679 -0
  66. package/dist/core/agent-session.js.map +1 -0
  67. package/dist/core/auth-guidance.d.ts +5 -0
  68. package/dist/core/auth-guidance.d.ts.map +1 -0
  69. package/dist/core/auth-guidance.js +21 -0
  70. package/dist/core/auth-guidance.js.map +1 -0
  71. package/dist/core/auth-storage.d.ts +56 -0
  72. package/dist/core/auth-storage.d.ts.map +1 -0
  73. package/dist/core/auth-storage.js +229 -0
  74. package/dist/core/auth-storage.js.map +1 -0
  75. package/dist/core/bash-executor.d.ts +32 -0
  76. package/dist/core/bash-executor.d.ts.map +1 -0
  77. package/dist/core/bash-executor.js +111 -0
  78. package/dist/core/bash-executor.js.map +1 -0
  79. package/dist/core/cache-stats.d.ts +49 -0
  80. package/dist/core/cache-stats.d.ts.map +1 -0
  81. package/dist/core/cache-stats.js +101 -0
  82. package/dist/core/cache-stats.js.map +1 -0
  83. package/dist/core/compaction/branch-summarization.d.ts +98 -0
  84. package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  85. package/dist/core/compaction/branch-summarization.js +246 -0
  86. package/dist/core/compaction/branch-summarization.js.map +1 -0
  87. package/dist/core/compaction/compaction.d.ts +137 -0
  88. package/dist/core/compaction/compaction.d.ts.map +1 -0
  89. package/dist/core/compaction/compaction.js +637 -0
  90. package/dist/core/compaction/compaction.js.map +1 -0
  91. package/dist/core/compaction/index.d.ts +7 -0
  92. package/dist/core/compaction/index.d.ts.map +1 -0
  93. package/dist/core/compaction/index.js +7 -0
  94. package/dist/core/compaction/index.js.map +1 -0
  95. package/dist/core/compaction/utils.d.ts +38 -0
  96. package/dist/core/compaction/utils.d.ts.map +1 -0
  97. package/dist/core/compaction/utils.js +142 -0
  98. package/dist/core/compaction/utils.js.map +1 -0
  99. package/dist/core/defaults.d.ts +3 -0
  100. package/dist/core/defaults.d.ts.map +1 -0
  101. package/dist/core/defaults.js +2 -0
  102. package/dist/core/defaults.js.map +1 -0
  103. package/dist/core/diagnostics.d.ts +15 -0
  104. package/dist/core/diagnostics.d.ts.map +1 -0
  105. package/dist/core/diagnostics.js +2 -0
  106. package/dist/core/diagnostics.js.map +1 -0
  107. package/dist/core/event-bus.d.ts +9 -0
  108. package/dist/core/event-bus.d.ts.map +1 -0
  109. package/dist/core/event-bus.js +25 -0
  110. package/dist/core/event-bus.js.map +1 -0
  111. package/dist/core/exec.d.ts +29 -0
  112. package/dist/core/exec.d.ts.map +1 -0
  113. package/dist/core/exec.js +75 -0
  114. package/dist/core/exec.js.map +1 -0
  115. package/dist/core/experimental.d.ts +2 -0
  116. package/dist/core/experimental.d.ts.map +1 -0
  117. package/dist/core/experimental.js +4 -0
  118. package/dist/core/experimental.js.map +1 -0
  119. package/dist/core/export-html/ansi-to-html.d.ts +22 -0
  120. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  121. package/dist/core/export-html/ansi-to-html.js +249 -0
  122. package/dist/core/export-html/ansi-to-html.js.map +1 -0
  123. package/dist/core/export-html/index.d.ts +37 -0
  124. package/dist/core/export-html/index.d.ts.map +1 -0
  125. package/dist/core/export-html/index.js +226 -0
  126. package/dist/core/export-html/index.js.map +1 -0
  127. package/dist/core/export-html/template.css +1066 -0
  128. package/dist/core/export-html/template.html +55 -0
  129. package/dist/core/export-html/template.js +1864 -0
  130. package/dist/core/export-html/tool-renderer.d.ts +34 -0
  131. package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  132. package/dist/core/export-html/tool-renderer.js +108 -0
  133. package/dist/core/export-html/tool-renderer.js.map +1 -0
  134. package/dist/core/export-html/vendor/highlight.min.js +1213 -0
  135. package/dist/core/export-html/vendor/marked.min.js +78 -0
  136. package/dist/core/extensions/index.d.ts +12 -0
  137. package/dist/core/extensions/index.d.ts.map +1 -0
  138. package/dist/core/extensions/index.js +9 -0
  139. package/dist/core/extensions/index.js.map +1 -0
  140. package/dist/core/extensions/loader.d.ts +23 -0
  141. package/dist/core/extensions/loader.d.ts.map +1 -0
  142. package/dist/core/extensions/loader.js +558 -0
  143. package/dist/core/extensions/loader.js.map +1 -0
  144. package/dist/core/extensions/runner.d.ts +171 -0
  145. package/dist/core/extensions/runner.d.ts.map +1 -0
  146. package/dist/core/extensions/runner.js +953 -0
  147. package/dist/core/extensions/runner.js.map +1 -0
  148. package/dist/core/extensions/types.d.ts +1259 -0
  149. package/dist/core/extensions/types.d.ts.map +1 -0
  150. package/dist/core/extensions/types.js +45 -0
  151. package/dist/core/extensions/types.js.map +1 -0
  152. package/dist/core/extensions/wrapper.d.ts +20 -0
  153. package/dist/core/extensions/wrapper.d.ts.map +1 -0
  154. package/dist/core/extensions/wrapper.js +41 -0
  155. package/dist/core/extensions/wrapper.js.map +1 -0
  156. package/dist/core/footer-data-provider.d.ts +54 -0
  157. package/dist/core/footer-data-provider.d.ts.map +1 -0
  158. package/dist/core/footer-data-provider.js +338 -0
  159. package/dist/core/footer-data-provider.js.map +1 -0
  160. package/dist/core/http-dispatcher.d.ts +22 -0
  161. package/dist/core/http-dispatcher.d.ts.map +1 -0
  162. package/dist/core/http-dispatcher.js +91 -0
  163. package/dist/core/http-dispatcher.js.map +1 -0
  164. package/dist/core/index.d.ts +13 -0
  165. package/dist/core/index.d.ts.map +1 -0
  166. package/dist/core/index.js +13 -0
  167. package/dist/core/index.js.map +1 -0
  168. package/dist/core/keybindings.d.ts +363 -0
  169. package/dist/core/keybindings.d.ts.map +1 -0
  170. package/dist/core/keybindings.js +300 -0
  171. package/dist/core/keybindings.js.map +1 -0
  172. package/dist/core/messages.d.ts +77 -0
  173. package/dist/core/messages.d.ts.map +1 -0
  174. package/dist/core/messages.js +123 -0
  175. package/dist/core/messages.js.map +1 -0
  176. package/dist/core/model-config.d.ts +512 -0
  177. package/dist/core/model-config.d.ts.map +1 -0
  178. package/dist/core/model-config.js +243 -0
  179. package/dist/core/model-config.js.map +1 -0
  180. package/dist/core/model-registry.d.ts +43 -0
  181. package/dist/core/model-registry.d.ts.map +1 -0
  182. package/dist/core/model-registry.js +104 -0
  183. package/dist/core/model-registry.js.map +1 -0
  184. package/dist/core/model-resolver.d.ts +121 -0
  185. package/dist/core/model-resolver.d.ts.map +1 -0
  186. package/dist/core/model-resolver.js +534 -0
  187. package/dist/core/model-resolver.js.map +1 -0
  188. package/dist/core/model-runtime.d.ts +82 -0
  189. package/dist/core/model-runtime.d.ts.map +1 -0
  190. package/dist/core/model-runtime.js +441 -0
  191. package/dist/core/model-runtime.js.map +1 -0
  192. package/dist/core/models-store.d.ts +17 -0
  193. package/dist/core/models-store.d.ts.map +1 -0
  194. package/dist/core/models-store.js +45 -0
  195. package/dist/core/models-store.js.map +1 -0
  196. package/dist/core/output-guard.d.ts +7 -0
  197. package/dist/core/output-guard.d.ts.map +1 -0
  198. package/dist/core/output-guard.js +89 -0
  199. package/dist/core/output-guard.js.map +1 -0
  200. package/dist/core/package-manager.d.ts +210 -0
  201. package/dist/core/package-manager.d.ts.map +1 -0
  202. package/dist/core/package-manager.js +2135 -0
  203. package/dist/core/package-manager.js.map +1 -0
  204. package/dist/core/project-trust.d.ts +15 -0
  205. package/dist/core/project-trust.d.ts.map +1 -0
  206. package/dist/core/project-trust.js +59 -0
  207. package/dist/core/project-trust.js.map +1 -0
  208. package/dist/core/prompt-templates.d.ts +54 -0
  209. package/dist/core/prompt-templates.d.ts.map +1 -0
  210. package/dist/core/prompt-templates.js +236 -0
  211. package/dist/core/prompt-templates.js.map +1 -0
  212. package/dist/core/provider-attribution.d.ts +4 -0
  213. package/dist/core/provider-attribution.d.ts.map +1 -0
  214. package/dist/core/provider-attribution.js +72 -0
  215. package/dist/core/provider-attribution.js.map +1 -0
  216. package/dist/core/provider-composer.d.ts +55 -0
  217. package/dist/core/provider-composer.d.ts.map +1 -0
  218. package/dist/core/provider-composer.js +375 -0
  219. package/dist/core/provider-composer.js.map +1 -0
  220. package/dist/core/radius.d.ts +2 -0
  221. package/dist/core/radius.d.ts.map +1 -0
  222. package/dist/core/radius.js +2 -0
  223. package/dist/core/radius.js.map +1 -0
  224. package/dist/core/remote-catalog-provider.d.ts +5 -0
  225. package/dist/core/remote-catalog-provider.d.ts.map +1 -0
  226. package/dist/core/remote-catalog-provider.js +102 -0
  227. package/dist/core/remote-catalog-provider.js.map +1 -0
  228. package/dist/core/resolve-config-value.d.ts +30 -0
  229. package/dist/core/resolve-config-value.d.ts.map +1 -0
  230. package/dist/core/resolve-config-value.js +247 -0
  231. package/dist/core/resolve-config-value.js.map +1 -0
  232. package/dist/core/resource-loader.d.ts +206 -0
  233. package/dist/core/resource-loader.d.ts.map +1 -0
  234. package/dist/core/resource-loader.js +817 -0
  235. package/dist/core/resource-loader.js.map +1 -0
  236. package/dist/core/runtime-credentials.d.ts +15 -0
  237. package/dist/core/runtime-credentials.d.ts.map +1 -0
  238. package/dist/core/runtime-credentials.js +36 -0
  239. package/dist/core/runtime-credentials.js.map +1 -0
  240. package/dist/core/sdk.d.ts +106 -0
  241. package/dist/core/sdk.d.ts.map +1 -0
  242. package/dist/core/sdk.js +267 -0
  243. package/dist/core/sdk.js.map +1 -0
  244. package/dist/core/session-cwd.d.ts +19 -0
  245. package/dist/core/session-cwd.d.ts.map +1 -0
  246. package/dist/core/session-cwd.js +38 -0
  247. package/dist/core/session-cwd.js.map +1 -0
  248. package/dist/core/session-manager.d.ts +356 -0
  249. package/dist/core/session-manager.d.ts.map +1 -0
  250. package/dist/core/session-manager.js +1338 -0
  251. package/dist/core/session-manager.js.map +1 -0
  252. package/dist/core/settings-manager.d.ts +297 -0
  253. package/dist/core/settings-manager.d.ts.map +1 -0
  254. package/dist/core/settings-manager.js +902 -0
  255. package/dist/core/settings-manager.js.map +1 -0
  256. package/dist/core/skills.d.ts +60 -0
  257. package/dist/core/skills.d.ts.map +1 -0
  258. package/dist/core/skills.js +387 -0
  259. package/dist/core/skills.js.map +1 -0
  260. package/dist/core/slash-commands.d.ts +15 -0
  261. package/dist/core/slash-commands.d.ts.map +1 -0
  262. package/dist/core/slash-commands.js +26 -0
  263. package/dist/core/slash-commands.js.map +1 -0
  264. package/dist/core/source-info.d.ts +18 -0
  265. package/dist/core/source-info.d.ts.map +1 -0
  266. package/dist/core/source-info.js +19 -0
  267. package/dist/core/source-info.js.map +1 -0
  268. package/dist/core/system-prompt.d.ts +28 -0
  269. package/dist/core/system-prompt.d.ts.map +1 -0
  270. package/dist/core/system-prompt.js +110 -0
  271. package/dist/core/system-prompt.js.map +1 -0
  272. package/dist/core/telemetry.d.ts +3 -0
  273. package/dist/core/telemetry.d.ts.map +1 -0
  274. package/dist/core/telemetry.js +9 -0
  275. package/dist/core/telemetry.js.map +1 -0
  276. package/dist/core/timings.d.ts +10 -0
  277. package/dist/core/timings.d.ts.map +1 -0
  278. package/dist/core/timings.js +41 -0
  279. package/dist/core/timings.js.map +1 -0
  280. package/dist/core/tools/bash.d.ts +68 -0
  281. package/dist/core/tools/bash.d.ts.map +1 -0
  282. package/dist/core/tools/bash.js +361 -0
  283. package/dist/core/tools/bash.js.map +1 -0
  284. package/dist/core/tools/edit-diff.d.ts +106 -0
  285. package/dist/core/tools/edit-diff.d.ts.map +1 -0
  286. package/dist/core/tools/edit-diff.js +424 -0
  287. package/dist/core/tools/edit-diff.js.map +1 -0
  288. package/dist/core/tools/edit.d.ts +50 -0
  289. package/dist/core/tools/edit.d.ts.map +1 -0
  290. package/dist/core/tools/edit.js +261 -0
  291. package/dist/core/tools/edit.js.map +1 -0
  292. package/dist/core/tools/file-mutation-queue.d.ts +6 -0
  293. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  294. package/dist/core/tools/file-mutation-queue.js +52 -0
  295. package/dist/core/tools/file-mutation-queue.js.map +1 -0
  296. package/dist/core/tools/find.d.ts +35 -0
  297. package/dist/core/tools/find.d.ts.map +1 -0
  298. package/dist/core/tools/find.js +305 -0
  299. package/dist/core/tools/find.js.map +1 -0
  300. package/dist/core/tools/grep.d.ts +37 -0
  301. package/dist/core/tools/grep.d.ts.map +1 -0
  302. package/dist/core/tools/grep.js +304 -0
  303. package/dist/core/tools/grep.js.map +1 -0
  304. package/dist/core/tools/index.d.ts +40 -0
  305. package/dist/core/tools/index.d.ts.map +1 -0
  306. package/dist/core/tools/index.js +112 -0
  307. package/dist/core/tools/index.js.map +1 -0
  308. package/dist/core/tools/ls.d.ts +37 -0
  309. package/dist/core/tools/ls.d.ts.map +1 -0
  310. package/dist/core/tools/ls.js +167 -0
  311. package/dist/core/tools/ls.js.map +1 -0
  312. package/dist/core/tools/output-accumulator.d.ts +52 -0
  313. package/dist/core/tools/output-accumulator.d.ts.map +1 -0
  314. package/dist/core/tools/output-accumulator.js +184 -0
  315. package/dist/core/tools/output-accumulator.js.map +1 -0
  316. package/dist/core/tools/path-utils.d.ts +10 -0
  317. package/dist/core/tools/path-utils.d.ts.map +1 -0
  318. package/dist/core/tools/path-utils.js +99 -0
  319. package/dist/core/tools/path-utils.js.map +1 -0
  320. package/dist/core/tools/read.d.ts +35 -0
  321. package/dist/core/tools/read.d.ts.map +1 -0
  322. package/dist/core/tools/read.js +276 -0
  323. package/dist/core/tools/read.js.map +1 -0
  324. package/dist/core/tools/render-utils.d.ts +24 -0
  325. package/dist/core/tools/render-utils.d.ts.map +1 -0
  326. package/dist/core/tools/render-utils.js +65 -0
  327. package/dist/core/tools/render-utils.js.map +1 -0
  328. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  329. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  330. package/dist/core/tools/tool-definition-wrapper.js +34 -0
  331. package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
  332. package/dist/core/tools/truncate.d.ts +70 -0
  333. package/dist/core/tools/truncate.d.ts.map +1 -0
  334. package/dist/core/tools/truncate.js +215 -0
  335. package/dist/core/tools/truncate.js.map +1 -0
  336. package/dist/core/tools/write.d.ts +26 -0
  337. package/dist/core/tools/write.d.ts.map +1 -0
  338. package/dist/core/tools/write.js +197 -0
  339. package/dist/core/tools/write.js.map +1 -0
  340. package/dist/core/trust-manager.d.ts +36 -0
  341. package/dist/core/trust-manager.d.ts.map +1 -0
  342. package/dist/core/trust-manager.js +202 -0
  343. package/dist/core/trust-manager.js.map +1 -0
  344. package/dist/core/usage-totals.d.ts +19 -0
  345. package/dist/core/usage-totals.d.ts.map +1 -0
  346. package/dist/core/usage-totals.js +52 -0
  347. package/dist/core/usage-totals.js.map +1 -0
  348. package/dist/extensions/deepwiki/client.d.ts +14 -0
  349. package/dist/extensions/deepwiki/client.d.ts.map +1 -0
  350. package/dist/extensions/deepwiki/client.js +196 -0
  351. package/dist/extensions/deepwiki/client.js.map +1 -0
  352. package/dist/extensions/deepwiki/constants.d.ts +13 -0
  353. package/dist/extensions/deepwiki/constants.d.ts.map +1 -0
  354. package/dist/extensions/deepwiki/constants.js +18 -0
  355. package/dist/extensions/deepwiki/constants.js.map +1 -0
  356. package/dist/extensions/deepwiki/contents.d.ts +63 -0
  357. package/dist/extensions/deepwiki/contents.d.ts.map +1 -0
  358. package/dist/extensions/deepwiki/contents.js +174 -0
  359. package/dist/extensions/deepwiki/contents.js.map +1 -0
  360. package/dist/extensions/deepwiki/execute.d.ts +25 -0
  361. package/dist/extensions/deepwiki/execute.d.ts.map +1 -0
  362. package/dist/extensions/deepwiki/execute.js +78 -0
  363. package/dist/extensions/deepwiki/execute.js.map +1 -0
  364. package/dist/extensions/deepwiki/http.d.ts +12 -0
  365. package/dist/extensions/deepwiki/http.d.ts.map +1 -0
  366. package/dist/extensions/deepwiki/http.js +74 -0
  367. package/dist/extensions/deepwiki/http.js.map +1 -0
  368. package/dist/extensions/deepwiki/index.d.ts +9 -0
  369. package/dist/extensions/deepwiki/index.d.ts.map +1 -0
  370. package/dist/extensions/deepwiki/index.js +25 -0
  371. package/dist/extensions/deepwiki/index.js.map +1 -0
  372. package/dist/extensions/deepwiki/render.d.ts +14 -0
  373. package/dist/extensions/deepwiki/render.d.ts.map +1 -0
  374. package/dist/extensions/deepwiki/render.js +166 -0
  375. package/dist/extensions/deepwiki/render.js.map +1 -0
  376. package/dist/extensions/deepwiki/schema.d.ts +13 -0
  377. package/dist/extensions/deepwiki/schema.d.ts.map +1 -0
  378. package/dist/extensions/deepwiki/schema.js +208 -0
  379. package/dist/extensions/deepwiki/schema.js.map +1 -0
  380. package/dist/extensions/index.d.ts +3 -0
  381. package/dist/extensions/index.d.ts.map +1 -0
  382. package/dist/extensions/index.js +17 -0
  383. package/dist/extensions/index.js.map +1 -0
  384. package/dist/extensions/llama/client.d.ts +61 -0
  385. package/dist/extensions/llama/client.d.ts.map +1 -0
  386. package/dist/extensions/llama/client.js +302 -0
  387. package/dist/extensions/llama/client.js.map +1 -0
  388. package/dist/extensions/llama/huggingface.d.ts +23 -0
  389. package/dist/extensions/llama/huggingface.d.ts.map +1 -0
  390. package/dist/extensions/llama/huggingface.js +141 -0
  391. package/dist/extensions/llama/huggingface.js.map +1 -0
  392. package/dist/extensions/llama/index.d.ts +3 -0
  393. package/dist/extensions/llama/index.d.ts.map +1 -0
  394. package/dist/extensions/llama/index.js +208 -0
  395. package/dist/extensions/llama/index.js.map +1 -0
  396. package/dist/extensions/llama/provider.d.ts +10 -0
  397. package/dist/extensions/llama/provider.d.ts.map +1 -0
  398. package/dist/extensions/llama/provider.js +102 -0
  399. package/dist/extensions/llama/provider.js.map +1 -0
  400. package/dist/extensions/llama/ui.d.ts +42 -0
  401. package/dist/extensions/llama/ui.d.ts.map +1 -0
  402. package/dist/extensions/llama/ui.js +416 -0
  403. package/dist/extensions/llama/ui.js.map +1 -0
  404. package/dist/extensions/question/constants.d.ts +13 -0
  405. package/dist/extensions/question/constants.d.ts.map +1 -0
  406. package/dist/extensions/question/constants.js +17 -0
  407. package/dist/extensions/question/constants.js.map +1 -0
  408. package/dist/extensions/question/dialog-primitives.d.ts +6 -0
  409. package/dist/extensions/question/dialog-primitives.d.ts.map +1 -0
  410. package/dist/extensions/question/dialog-primitives.js +20 -0
  411. package/dist/extensions/question/dialog-primitives.js.map +1 -0
  412. package/dist/extensions/question/dialog.d.ts +10 -0
  413. package/dist/extensions/question/dialog.d.ts.map +1 -0
  414. package/dist/extensions/question/dialog.js +519 -0
  415. package/dist/extensions/question/dialog.js.map +1 -0
  416. package/dist/extensions/question/index.d.ts +9 -0
  417. package/dist/extensions/question/index.d.ts.map +1 -0
  418. package/dist/extensions/question/index.js +32 -0
  419. package/dist/extensions/question/index.js.map +1 -0
  420. package/dist/extensions/question/limits.d.ts +11 -0
  421. package/dist/extensions/question/limits.d.ts.map +1 -0
  422. package/dist/extensions/question/limits.js +11 -0
  423. package/dist/extensions/question/limits.js.map +1 -0
  424. package/dist/extensions/question/render-cache.d.ts +9 -0
  425. package/dist/extensions/question/render-cache.d.ts.map +1 -0
  426. package/dist/extensions/question/render-cache.js +18 -0
  427. package/dist/extensions/question/render-cache.js.map +1 -0
  428. package/dist/extensions/question/render.d.ts +17 -0
  429. package/dist/extensions/question/render.d.ts.map +1 -0
  430. package/dist/extensions/question/render.js +47 -0
  431. package/dist/extensions/question/render.js.map +1 -0
  432. package/dist/extensions/question/results.d.ts +8 -0
  433. package/dist/extensions/question/results.d.ts.map +1 -0
  434. package/dist/extensions/question/results.js +68 -0
  435. package/dist/extensions/question/results.js.map +1 -0
  436. package/dist/extensions/question/schema.d.ts +22 -0
  437. package/dist/extensions/question/schema.d.ts.map +1 -0
  438. package/dist/extensions/question/schema.js +98 -0
  439. package/dist/extensions/question/schema.js.map +1 -0
  440. package/dist/extensions/question/state.d.ts +9 -0
  441. package/dist/extensions/question/state.d.ts.map +1 -0
  442. package/dist/extensions/question/state.js +76 -0
  443. package/dist/extensions/question/state.js.map +1 -0
  444. package/dist/extensions/question/types.d.ts +60 -0
  445. package/dist/extensions/question/types.d.ts.map +1 -0
  446. package/dist/extensions/question/types.js +2 -0
  447. package/dist/extensions/question/types.js.map +1 -0
  448. package/dist/extensions/rewind/config.d.ts +16 -0
  449. package/dist/extensions/rewind/config.d.ts.map +1 -0
  450. package/dist/extensions/rewind/config.js +69 -0
  451. package/dist/extensions/rewind/config.js.map +1 -0
  452. package/dist/extensions/rewind/engine.d.ts +97 -0
  453. package/dist/extensions/rewind/engine.d.ts.map +1 -0
  454. package/dist/extensions/rewind/engine.js +747 -0
  455. package/dist/extensions/rewind/engine.js.map +1 -0
  456. package/dist/extensions/rewind/gc.d.ts +35 -0
  457. package/dist/extensions/rewind/gc.d.ts.map +1 -0
  458. package/dist/extensions/rewind/gc.js +169 -0
  459. package/dist/extensions/rewind/gc.js.map +1 -0
  460. package/dist/extensions/rewind/index.d.ts +3 -0
  461. package/dist/extensions/rewind/index.d.ts.map +1 -0
  462. package/dist/extensions/rewind/index.js +253 -0
  463. package/dist/extensions/rewind/index.js.map +1 -0
  464. package/dist/extensions/rewind/menu.d.ts +13 -0
  465. package/dist/extensions/rewind/menu.d.ts.map +1 -0
  466. package/dist/extensions/rewind/menu.js +118 -0
  467. package/dist/extensions/rewind/menu.js.map +1 -0
  468. package/dist/extensions/rewind/paths.d.ts +4 -0
  469. package/dist/extensions/rewind/paths.d.ts.map +1 -0
  470. package/dist/extensions/rewind/paths.js +15 -0
  471. package/dist/extensions/rewind/paths.js.map +1 -0
  472. package/dist/extensions/rewind/restore.d.ts +37 -0
  473. package/dist/extensions/rewind/restore.d.ts.map +1 -0
  474. package/dist/extensions/rewind/restore.js +52 -0
  475. package/dist/extensions/rewind/restore.js.map +1 -0
  476. package/dist/extensions/rewind/snapshot.d.ts +45 -0
  477. package/dist/extensions/rewind/snapshot.d.ts.map +1 -0
  478. package/dist/extensions/rewind/snapshot.js +21 -0
  479. package/dist/extensions/rewind/snapshot.js.map +1 -0
  480. package/dist/extensions/rewind/storage.d.ts +12 -0
  481. package/dist/extensions/rewind/storage.d.ts.map +1 -0
  482. package/dist/extensions/rewind/storage.js +33 -0
  483. package/dist/extensions/rewind/storage.js.map +1 -0
  484. package/dist/extensions/rewind/text.d.ts +7 -0
  485. package/dist/extensions/rewind/text.d.ts.map +1 -0
  486. package/dist/extensions/rewind/text.js +19 -0
  487. package/dist/extensions/rewind/text.js.map +1 -0
  488. package/dist/extensions/rewind/tool-path.d.ts +3 -0
  489. package/dist/extensions/rewind/tool-path.d.ts.map +1 -0
  490. package/dist/extensions/rewind/tool-path.js +9 -0
  491. package/dist/extensions/rewind/tool-path.js.map +1 -0
  492. package/dist/extensions/router/constants.d.ts +20 -0
  493. package/dist/extensions/router/constants.d.ts.map +1 -0
  494. package/dist/extensions/router/constants.js +27 -0
  495. package/dist/extensions/router/constants.js.map +1 -0
  496. package/dist/extensions/router/dialog.d.ts +38 -0
  497. package/dist/extensions/router/dialog.d.ts.map +1 -0
  498. package/dist/extensions/router/dialog.js +407 -0
  499. package/dist/extensions/router/dialog.js.map +1 -0
  500. package/dist/extensions/router/index.d.ts +15 -0
  501. package/dist/extensions/router/index.d.ts.map +1 -0
  502. package/dist/extensions/router/index.js +61 -0
  503. package/dist/extensions/router/index.js.map +1 -0
  504. package/dist/extensions/router/presets.d.ts +48 -0
  505. package/dist/extensions/router/presets.d.ts.map +1 -0
  506. package/dist/extensions/router/presets.js +109 -0
  507. package/dist/extensions/router/presets.js.map +1 -0
  508. package/dist/extensions/router/probe.d.ts +20 -0
  509. package/dist/extensions/router/probe.d.ts.map +1 -0
  510. package/dist/extensions/router/probe.js +125 -0
  511. package/dist/extensions/router/probe.js.map +1 -0
  512. package/dist/extensions/router/register.d.ts +34 -0
  513. package/dist/extensions/router/register.d.ts.map +1 -0
  514. package/dist/extensions/router/register.js +81 -0
  515. package/dist/extensions/router/register.js.map +1 -0
  516. package/dist/extensions/router/store.d.ts +12 -0
  517. package/dist/extensions/router/store.d.ts.map +1 -0
  518. package/dist/extensions/router/store.js +164 -0
  519. package/dist/extensions/router/store.js.map +1 -0
  520. package/dist/extensions/router/stream.d.ts +16 -0
  521. package/dist/extensions/router/stream.d.ts.map +1 -0
  522. package/dist/extensions/router/stream.js +198 -0
  523. package/dist/extensions/router/stream.js.map +1 -0
  524. package/dist/extensions/router/types.d.ts +23 -0
  525. package/dist/extensions/router/types.d.ts.map +1 -0
  526. package/dist/extensions/router/types.js +2 -0
  527. package/dist/extensions/router/types.js.map +1 -0
  528. package/dist/extensions/router/ui.d.ts +9 -0
  529. package/dist/extensions/router/ui.d.ts.map +1 -0
  530. package/dist/extensions/router/ui.js +538 -0
  531. package/dist/extensions/router/ui.js.map +1 -0
  532. package/dist/extensions/statusline/index.d.ts +3 -0
  533. package/dist/extensions/statusline/index.d.ts.map +1 -0
  534. package/dist/extensions/statusline/index.js +367 -0
  535. package/dist/extensions/statusline/index.js.map +1 -0
  536. package/dist/extensions/todo/constants.d.ts +16 -0
  537. package/dist/extensions/todo/constants.d.ts.map +1 -0
  538. package/dist/extensions/todo/constants.js +20 -0
  539. package/dist/extensions/todo/constants.js.map +1 -0
  540. package/dist/extensions/todo/index.d.ts +17 -0
  541. package/dist/extensions/todo/index.d.ts.map +1 -0
  542. package/dist/extensions/todo/index.js +83 -0
  543. package/dist/extensions/todo/index.js.map +1 -0
  544. package/dist/extensions/todo/overlay.d.ts +24 -0
  545. package/dist/extensions/todo/overlay.d.ts.map +1 -0
  546. package/dist/extensions/todo/overlay.js +139 -0
  547. package/dist/extensions/todo/overlay.js.map +1 -0
  548. package/dist/extensions/todo/schema.d.ts +41 -0
  549. package/dist/extensions/todo/schema.d.ts.map +1 -0
  550. package/dist/extensions/todo/schema.js +36 -0
  551. package/dist/extensions/todo/schema.js.map +1 -0
  552. package/dist/extensions/todo/state.d.ts +57 -0
  553. package/dist/extensions/todo/state.d.ts.map +1 -0
  554. package/dist/extensions/todo/state.js +452 -0
  555. package/dist/extensions/todo/state.js.map +1 -0
  556. package/dist/extensions/todo/view.d.ts +8 -0
  557. package/dist/extensions/todo/view.d.ts.map +1 -0
  558. package/dist/extensions/todo/view.js +119 -0
  559. package/dist/extensions/todo/view.js.map +1 -0
  560. package/dist/index.d.ts +35 -0
  561. package/dist/index.d.ts.map +1 -0
  562. package/dist/index.js +47 -0
  563. package/dist/index.js.map +1 -0
  564. package/dist/main.d.ts +12 -0
  565. package/dist/main.d.ts.map +1 -0
  566. package/dist/main.js +704 -0
  567. package/dist/main.js.map +1 -0
  568. package/dist/migrations.d.ts +33 -0
  569. package/dist/migrations.d.ts.map +1 -0
  570. package/dist/migrations.js +281 -0
  571. package/dist/migrations.js.map +1 -0
  572. package/dist/modes/index.d.ts +9 -0
  573. package/dist/modes/index.d.ts.map +1 -0
  574. package/dist/modes/index.js +8 -0
  575. package/dist/modes/index.js.map +1 -0
  576. package/dist/modes/interactive/assets/clankolas.png +0 -0
  577. package/dist/modes/interactive/components/armin.d.ts +34 -0
  578. package/dist/modes/interactive/components/armin.d.ts.map +1 -0
  579. package/dist/modes/interactive/components/armin.js +333 -0
  580. package/dist/modes/interactive/components/armin.js.map +1 -0
  581. package/dist/modes/interactive/components/assistant-message.d.ts +22 -0
  582. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  583. package/dist/modes/interactive/components/assistant-message.js +141 -0
  584. package/dist/modes/interactive/components/assistant-message.js.map +1 -0
  585. package/dist/modes/interactive/components/bash-execution.d.ts +34 -0
  586. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  587. package/dist/modes/interactive/components/bash-execution.js +175 -0
  588. package/dist/modes/interactive/components/bash-execution.js.map +1 -0
  589. package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  590. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  591. package/dist/modes/interactive/components/bordered-loader.js +54 -0
  592. package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  593. package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  594. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  595. package/dist/modes/interactive/components/branch-summary-message.js +44 -0
  596. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  597. package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  598. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  599. package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
  600. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  601. package/dist/modes/interactive/components/config-selector.d.ts +102 -0
  602. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  603. package/dist/modes/interactive/components/config-selector.js +761 -0
  604. package/dist/modes/interactive/components/config-selector.js.map +1 -0
  605. package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  606. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  607. package/dist/modes/interactive/components/countdown-timer.js +33 -0
  608. package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  609. package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  610. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  611. package/dist/modes/interactive/components/custom-editor.js +70 -0
  612. package/dist/modes/interactive/components/custom-editor.js.map +1 -0
  613. package/dist/modes/interactive/components/custom-entry.d.ts +19 -0
  614. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -0
  615. package/dist/modes/interactive/components/custom-entry.js +52 -0
  616. package/dist/modes/interactive/components/custom-entry.js.map +1 -0
  617. package/dist/modes/interactive/components/custom-message.d.ts +20 -0
  618. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  619. package/dist/modes/interactive/components/custom-message.js +79 -0
  620. package/dist/modes/interactive/components/custom-message.js.map +1 -0
  621. package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  622. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
  623. package/dist/modes/interactive/components/daxnuts.js +140 -0
  624. package/dist/modes/interactive/components/daxnuts.js.map +1 -0
  625. package/dist/modes/interactive/components/diff.d.ts +12 -0
  626. package/dist/modes/interactive/components/diff.d.ts.map +1 -0
  627. package/dist/modes/interactive/components/diff.js +133 -0
  628. package/dist/modes/interactive/components/diff.js.map +1 -0
  629. package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  630. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  631. package/dist/modes/interactive/components/dynamic-border.js +21 -0
  632. package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  633. package/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
  634. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -0
  635. package/dist/modes/interactive/components/earendil-announcement.js +40 -0
  636. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -0
  637. package/dist/modes/interactive/components/extension-editor.d.ts +22 -0
  638. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  639. package/dist/modes/interactive/components/extension-editor.js +128 -0
  640. package/dist/modes/interactive/components/extension-editor.js.map +1 -0
  641. package/dist/modes/interactive/components/extension-input.d.ts +23 -0
  642. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  643. package/dist/modes/interactive/components/extension-input.js +61 -0
  644. package/dist/modes/interactive/components/extension-input.js.map +1 -0
  645. package/dist/modes/interactive/components/extension-selector.d.ts +26 -0
  646. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  647. package/dist/modes/interactive/components/extension-selector.js +83 -0
  648. package/dist/modes/interactive/components/extension-selector.js.map +1 -0
  649. package/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
  650. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -0
  651. package/dist/modes/interactive/components/first-time-setup.js +103 -0
  652. package/dist/modes/interactive/components/first-time-setup.js.map +1 -0
  653. package/dist/modes/interactive/components/footer.d.ts +32 -0
  654. package/dist/modes/interactive/components/footer.d.ts.map +1 -0
  655. package/dist/modes/interactive/components/footer.js +222 -0
  656. package/dist/modes/interactive/components/footer.js.map +1 -0
  657. package/dist/modes/interactive/components/index.d.ts +34 -0
  658. package/dist/modes/interactive/components/index.d.ts.map +1 -0
  659. package/dist/modes/interactive/components/index.js +35 -0
  660. package/dist/modes/interactive/components/index.js.map +1 -0
  661. package/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
  662. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  663. package/dist/modes/interactive/components/keybinding-hints.js +36 -0
  664. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  665. package/dist/modes/interactive/components/login-dialog.d.ts +52 -0
  666. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  667. package/dist/modes/interactive/components/login-dialog.js +188 -0
  668. package/dist/modes/interactive/components/login-dialog.js.map +1 -0
  669. package/dist/modes/interactive/components/model-selector.d.ts +54 -0
  670. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  671. package/dist/modes/interactive/components/model-selector.js +310 -0
  672. package/dist/modes/interactive/components/model-selector.js.map +1 -0
  673. package/dist/modes/interactive/components/oauth-selector.d.ts +33 -0
  674. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  675. package/dist/modes/interactive/components/oauth-selector.js +163 -0
  676. package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  677. package/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
  678. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  679. package/dist/modes/interactive/components/scoped-models-selector.js +293 -0
  680. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  681. package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  682. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  683. package/dist/modes/interactive/components/session-selector-search.js +155 -0
  684. package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  685. package/dist/modes/interactive/components/session-selector.d.ts +95 -0
  686. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  687. package/dist/modes/interactive/components/session-selector.js +867 -0
  688. package/dist/modes/interactive/components/session-selector.js.map +1 -0
  689. package/dist/modes/interactive/components/settings-selector.d.ts +77 -0
  690. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  691. package/dist/modes/interactive/components/settings-selector.js +593 -0
  692. package/dist/modes/interactive/components/settings-selector.js.map +1 -0
  693. package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  694. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  695. package/dist/modes/interactive/components/show-images-selector.js +39 -0
  696. package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  697. package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  698. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  699. package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
  700. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  701. package/dist/modes/interactive/components/status-indicator.d.ts +28 -0
  702. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -0
  703. package/dist/modes/interactive/components/status-indicator.js +60 -0
  704. package/dist/modes/interactive/components/status-indicator.js.map +1 -0
  705. package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  706. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  707. package/dist/modes/interactive/components/theme-selector.js +50 -0
  708. package/dist/modes/interactive/components/theme-selector.js.map +1 -0
  709. package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  710. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  711. package/dist/modes/interactive/components/thinking-selector.js +52 -0
  712. package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  713. package/dist/modes/interactive/components/tool-execution.d.ts +62 -0
  714. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  715. package/dist/modes/interactive/components/tool-execution.js +361 -0
  716. package/dist/modes/interactive/components/tool-execution.js.map +1 -0
  717. package/dist/modes/interactive/components/tree-selector.d.ts +94 -0
  718. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  719. package/dist/modes/interactive/components/tree-selector.js +1245 -0
  720. package/dist/modes/interactive/components/tree-selector.js.map +1 -0
  721. package/dist/modes/interactive/components/trust-selector.d.ts +23 -0
  722. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -0
  723. package/dist/modes/interactive/components/trust-selector.js +91 -0
  724. package/dist/modes/interactive/components/trust-selector.js.map +1 -0
  725. package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  726. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  727. package/dist/modes/interactive/components/user-message-selector.js +114 -0
  728. package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  729. package/dist/modes/interactive/components/user-message.d.ts +14 -0
  730. package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  731. package/dist/modes/interactive/components/user-message.js +42 -0
  732. package/dist/modes/interactive/components/user-message.js.map +1 -0
  733. package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  734. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  735. package/dist/modes/interactive/components/visual-truncate.js +33 -0
  736. package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  737. package/dist/modes/interactive/interactive-mode.d.ts +394 -0
  738. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  739. package/dist/modes/interactive/interactive-mode.js +5039 -0
  740. package/dist/modes/interactive/interactive-mode.js.map +1 -0
  741. package/dist/modes/interactive/model-search.d.ts +12 -0
  742. package/dist/modes/interactive/model-search.d.ts.map +1 -0
  743. package/dist/modes/interactive/model-search.js +15 -0
  744. package/dist/modes/interactive/model-search.js.map +1 -0
  745. package/dist/modes/interactive/theme/dark.json +87 -0
  746. package/dist/modes/interactive/theme/ice-cream-dark.json +101 -0
  747. package/dist/modes/interactive/theme/ice-cream-light.json +101 -0
  748. package/dist/modes/interactive/theme/light.json +86 -0
  749. package/dist/modes/interactive/theme/theme-controller.d.ts +29 -0
  750. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -0
  751. package/dist/modes/interactive/theme/theme-controller.js +102 -0
  752. package/dist/modes/interactive/theme/theme-controller.js.map +1 -0
  753. package/dist/modes/interactive/theme/theme-schema.json +340 -0
  754. package/dist/modes/interactive/theme/theme.d.ts +120 -0
  755. package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  756. package/dist/modes/interactive/theme/theme.js +1063 -0
  757. package/dist/modes/interactive/theme/theme.js.map +1 -0
  758. package/dist/modes/print-mode.d.ts +28 -0
  759. package/dist/modes/print-mode.d.ts.map +1 -0
  760. package/dist/modes/print-mode.js +132 -0
  761. package/dist/modes/print-mode.js.map +1 -0
  762. package/dist/modes/rpc/jsonl.d.ts +17 -0
  763. package/dist/modes/rpc/jsonl.d.ts.map +1 -0
  764. package/dist/modes/rpc/jsonl.js +49 -0
  765. package/dist/modes/rpc/jsonl.js.map +1 -0
  766. package/dist/modes/rpc/rpc-client.d.ts +246 -0
  767. package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  768. package/dist/modes/rpc/rpc-client.js +488 -0
  769. package/dist/modes/rpc/rpc-client.js.map +1 -0
  770. package/dist/modes/rpc/rpc-mode.d.ts +20 -0
  771. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  772. package/dist/modes/rpc/rpc-mode.js +639 -0
  773. package/dist/modes/rpc/rpc-mode.js.map +1 -0
  774. package/dist/modes/rpc/rpc-types.d.ts +457 -0
  775. package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  776. package/dist/modes/rpc/rpc-types.js +8 -0
  777. package/dist/modes/rpc/rpc-types.js.map +1 -0
  778. package/dist/package-manager-cli.d.ts +8 -0
  779. package/dist/package-manager-cli.d.ts.map +1 -0
  780. package/dist/package-manager-cli.js +775 -0
  781. package/dist/package-manager-cli.js.map +1 -0
  782. package/dist/rpc-entry.d.ts +3 -0
  783. package/dist/rpc-entry.d.ts.map +1 -0
  784. package/dist/rpc-entry.js +10 -0
  785. package/dist/rpc-entry.js.map +1 -0
  786. package/dist/utils/ansi.d.ts +2 -0
  787. package/dist/utils/ansi.d.ts.map +1 -0
  788. package/dist/utils/ansi.js +52 -0
  789. package/dist/utils/ansi.js.map +1 -0
  790. package/dist/utils/changelog.d.ts +22 -0
  791. package/dist/utils/changelog.d.ts.map +1 -0
  792. package/dist/utils/changelog.js +165 -0
  793. package/dist/utils/changelog.js.map +1 -0
  794. package/dist/utils/child-process.d.ts +18 -0
  795. package/dist/utils/child-process.d.ts.map +1 -0
  796. package/dist/utils/child-process.js +106 -0
  797. package/dist/utils/child-process.js.map +1 -0
  798. package/dist/utils/clipboard-image.d.ts +11 -0
  799. package/dist/utils/clipboard-image.d.ts.map +1 -0
  800. package/dist/utils/clipboard-image.js +245 -0
  801. package/dist/utils/clipboard-image.js.map +1 -0
  802. package/dist/utils/clipboard-native.d.ts +11 -0
  803. package/dist/utils/clipboard-native.d.ts.map +1 -0
  804. package/dist/utils/clipboard-native.js +20 -0
  805. package/dist/utils/clipboard-native.js.map +1 -0
  806. package/dist/utils/clipboard.d.ts +4 -0
  807. package/dist/utils/clipboard.d.ts.map +1 -0
  808. package/dist/utils/clipboard.js +130 -0
  809. package/dist/utils/clipboard.js.map +1 -0
  810. package/dist/utils/deprecation.d.ts +4 -0
  811. package/dist/utils/deprecation.d.ts.map +1 -0
  812. package/dist/utils/deprecation.js +13 -0
  813. package/dist/utils/deprecation.js.map +1 -0
  814. package/dist/utils/exif-orientation.d.ts +5 -0
  815. package/dist/utils/exif-orientation.d.ts.map +1 -0
  816. package/dist/utils/exif-orientation.js +158 -0
  817. package/dist/utils/exif-orientation.js.map +1 -0
  818. package/dist/utils/frontmatter.d.ts +8 -0
  819. package/dist/utils/frontmatter.d.ts.map +1 -0
  820. package/dist/utils/frontmatter.js +26 -0
  821. package/dist/utils/frontmatter.js.map +1 -0
  822. package/dist/utils/fs-watch.d.ts +5 -0
  823. package/dist/utils/fs-watch.d.ts.map +1 -0
  824. package/dist/utils/fs-watch.js +25 -0
  825. package/dist/utils/fs-watch.js.map +1 -0
  826. package/dist/utils/git.d.ts +26 -0
  827. package/dist/utils/git.d.ts.map +1 -0
  828. package/dist/utils/git.js +195 -0
  829. package/dist/utils/git.js.map +1 -0
  830. package/dist/utils/html.d.ts +7 -0
  831. package/dist/utils/html.d.ts.map +1 -0
  832. package/dist/utils/html.js +40 -0
  833. package/dist/utils/html.js.map +1 -0
  834. package/dist/utils/image-convert.d.ts +10 -0
  835. package/dist/utils/image-convert.d.ts.map +1 -0
  836. package/dist/utils/image-convert.js +45 -0
  837. package/dist/utils/image-convert.js.map +1 -0
  838. package/dist/utils/image-process.d.ts +18 -0
  839. package/dist/utils/image-process.d.ts.map +1 -0
  840. package/dist/utils/image-process.js +83 -0
  841. package/dist/utils/image-process.js.map +1 -0
  842. package/dist/utils/image-resize-core.d.ts +30 -0
  843. package/dist/utils/image-resize-core.d.ts.map +1 -0
  844. package/dist/utils/image-resize-core.js +124 -0
  845. package/dist/utils/image-resize-core.js.map +1 -0
  846. package/dist/utils/image-resize-worker.d.ts +2 -0
  847. package/dist/utils/image-resize-worker.d.ts.map +1 -0
  848. package/dist/utils/image-resize-worker.js +31 -0
  849. package/dist/utils/image-resize-worker.js.map +1 -0
  850. package/dist/utils/image-resize.d.ts +16 -0
  851. package/dist/utils/image-resize.d.ts.map +1 -0
  852. package/dist/utils/image-resize.js +97 -0
  853. package/dist/utils/image-resize.js.map +1 -0
  854. package/dist/utils/json.d.ts +3 -0
  855. package/dist/utils/json.d.ts.map +1 -0
  856. package/dist/utils/json.js +7 -0
  857. package/dist/utils/json.js.map +1 -0
  858. package/dist/utils/mime.d.ts +3 -0
  859. package/dist/utils/mime.d.ts.map +1 -0
  860. package/dist/utils/mime.js +110 -0
  861. package/dist/utils/mime.js.map +1 -0
  862. package/dist/utils/open-browser.d.ts +9 -0
  863. package/dist/utils/open-browser.d.ts.map +1 -0
  864. package/dist/utils/open-browser.js +22 -0
  865. package/dist/utils/open-browser.js.map +1 -0
  866. package/dist/utils/paths.d.ts +31 -0
  867. package/dist/utils/paths.d.ts.map +1 -0
  868. package/dist/utils/paths.js +92 -0
  869. package/dist/utils/paths.js.map +1 -0
  870. package/dist/utils/photon.d.ts +21 -0
  871. package/dist/utils/photon.d.ts.map +1 -0
  872. package/dist/utils/photon.js +121 -0
  873. package/dist/utils/photon.js.map +1 -0
  874. package/dist/utils/pi-user-agent.d.ts +2 -0
  875. package/dist/utils/pi-user-agent.d.ts.map +1 -0
  876. package/dist/utils/pi-user-agent.js +5 -0
  877. package/dist/utils/pi-user-agent.js.map +1 -0
  878. package/dist/utils/shell.d.ts +31 -0
  879. package/dist/utils/shell.d.ts.map +1 -0
  880. package/dist/utils/shell.js +202 -0
  881. package/dist/utils/shell.js.map +1 -0
  882. package/dist/utils/sleep.d.ts +5 -0
  883. package/dist/utils/sleep.d.ts.map +1 -0
  884. package/dist/utils/sleep.js +17 -0
  885. package/dist/utils/sleep.js.map +1 -0
  886. package/dist/utils/syntax-highlight.d.ts +12 -0
  887. package/dist/utils/syntax-highlight.d.ts.map +1 -0
  888. package/dist/utils/syntax-highlight.js +118 -0
  889. package/dist/utils/syntax-highlight.js.map +1 -0
  890. package/dist/utils/tools-manager.d.ts +3 -0
  891. package/dist/utils/tools-manager.d.ts.map +1 -0
  892. package/dist/utils/tools-manager.js +328 -0
  893. package/dist/utils/tools-manager.js.map +1 -0
  894. package/dist/utils/version-check.d.ts +15 -0
  895. package/dist/utils/version-check.d.ts.map +1 -0
  896. package/dist/utils/version-check.js +54 -0
  897. package/dist/utils/version-check.js.map +1 -0
  898. package/dist/utils/windows-self-update.d.ts +3 -0
  899. package/dist/utils/windows-self-update.d.ts.map +1 -0
  900. package/dist/utils/windows-self-update.js +77 -0
  901. package/dist/utils/windows-self-update.js.map +1 -0
  902. package/docs/compaction.md +401 -0
  903. package/docs/containerization.md +111 -0
  904. package/docs/custom-provider.md +763 -0
  905. package/docs/development.md +71 -0
  906. package/docs/docs.json +156 -0
  907. package/docs/extensions.md +2953 -0
  908. package/docs/images/doom-extension.png +0 -0
  909. package/docs/images/exy.png +0 -0
  910. package/docs/images/interactive-mode.png +0 -0
  911. package/docs/images/tree-view.png +0 -0
  912. package/docs/index.md +77 -0
  913. package/docs/json.md +86 -0
  914. package/docs/keybindings.md +198 -0
  915. package/docs/llama-cpp.md +99 -0
  916. package/docs/models.md +540 -0
  917. package/docs/packages.md +228 -0
  918. package/docs/prompt-templates.md +96 -0
  919. package/docs/providers.md +301 -0
  920. package/docs/quickstart.md +165 -0
  921. package/docs/rpc.md +1559 -0
  922. package/docs/sdk.md +1186 -0
  923. package/docs/security.md +59 -0
  924. package/docs/session-format.md +436 -0
  925. package/docs/sessions.md +145 -0
  926. package/docs/settings.md +319 -0
  927. package/docs/shell-aliases.md +13 -0
  928. package/docs/skills.md +231 -0
  929. package/docs/terminal-setup.md +142 -0
  930. package/docs/termux.md +127 -0
  931. package/docs/themes.md +301 -0
  932. package/docs/tmux.md +63 -0
  933. package/docs/tui.md +942 -0
  934. package/docs/usage.md +311 -0
  935. package/docs/windows.md +17 -0
  936. package/examples/README.md +25 -0
  937. package/examples/extensions/README.md +213 -0
  938. package/examples/extensions/auto-commit-on-exit.ts +49 -0
  939. package/examples/extensions/bash-spawn-hook.ts +30 -0
  940. package/examples/extensions/bookmark.ts +50 -0
  941. package/examples/extensions/border-status-editor.ts +145 -0
  942. package/examples/extensions/built-in-tool-renderer.ts +249 -0
  943. package/examples/extensions/claude-rules.ts +86 -0
  944. package/examples/extensions/commands.ts +72 -0
  945. package/examples/extensions/confirm-destructive.ts +59 -0
  946. package/examples/extensions/custom-compaction.ts +129 -0
  947. package/examples/extensions/custom-footer.ts +64 -0
  948. package/examples/extensions/custom-header.ts +73 -0
  949. package/examples/extensions/custom-provider-anthropic/index.ts +604 -0
  950. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
  951. package/examples/extensions/custom-provider-anthropic/package.json +19 -0
  952. package/examples/extensions/custom-provider-gitlab-duo/index.ts +404 -0
  953. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
  954. package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
  955. package/examples/extensions/dirty-repo-guard.ts +56 -0
  956. package/examples/extensions/doom-overlay/README.md +46 -0
  957. package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
  958. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  959. package/examples/extensions/doom-overlay/doom/build.sh +152 -0
  960. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
  961. package/examples/extensions/doom-overlay/doom-component.ts +132 -0
  962. package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
  963. package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
  964. package/examples/extensions/doom-overlay/index.ts +74 -0
  965. package/examples/extensions/doom-overlay/wad-finder.ts +51 -0
  966. package/examples/extensions/dynamic-resources/SKILL.md +8 -0
  967. package/examples/extensions/dynamic-resources/dynamic.json +79 -0
  968. package/examples/extensions/dynamic-resources/dynamic.md +5 -0
  969. package/examples/extensions/dynamic-resources/index.ts +15 -0
  970. package/examples/extensions/dynamic-tools.ts +74 -0
  971. package/examples/extensions/entry-renderer.ts +41 -0
  972. package/examples/extensions/event-bus.ts +43 -0
  973. package/examples/extensions/file-trigger.ts +41 -0
  974. package/examples/extensions/git-checkpoint.ts +53 -0
  975. package/examples/extensions/git-merge-and-resolve.ts +115 -0
  976. package/examples/extensions/github-issue-autocomplete.ts +185 -0
  977. package/examples/extensions/gondolin/index.ts +531 -0
  978. package/examples/extensions/gondolin/package-lock.json +185 -0
  979. package/examples/extensions/gondolin/package.json +19 -0
  980. package/examples/extensions/handoff.ts +191 -0
  981. package/examples/extensions/hello.ts +26 -0
  982. package/examples/extensions/hidden-thinking-label.ts +53 -0
  983. package/examples/extensions/inline-bash.ts +94 -0
  984. package/examples/extensions/input-transform-streaming.ts +39 -0
  985. package/examples/extensions/input-transform.ts +43 -0
  986. package/examples/extensions/interactive-shell.ts +196 -0
  987. package/examples/extensions/kimi-deferred-tools.ts +61 -0
  988. package/examples/extensions/mac-system-theme.ts +47 -0
  989. package/examples/extensions/message-renderer.ts +59 -0
  990. package/examples/extensions/minimal-mode.ts +426 -0
  991. package/examples/extensions/modal-editor.ts +85 -0
  992. package/examples/extensions/model-status.ts +31 -0
  993. package/examples/extensions/notify.ts +55 -0
  994. package/examples/extensions/overlay-qa-tests.ts +1450 -0
  995. package/examples/extensions/overlay-test.ts +153 -0
  996. package/examples/extensions/permission-gate.ts +34 -0
  997. package/examples/extensions/pirate.ts +47 -0
  998. package/examples/extensions/plan-mode/README.md +66 -0
  999. package/examples/extensions/plan-mode/index.ts +390 -0
  1000. package/examples/extensions/plan-mode/utils.ts +168 -0
  1001. package/examples/extensions/preset.ts +436 -0
  1002. package/examples/extensions/project-trust.ts +64 -0
  1003. package/examples/extensions/prompt-customizer.ts +97 -0
  1004. package/examples/extensions/protected-paths.ts +30 -0
  1005. package/examples/extensions/provider-payload.ts +18 -0
  1006. package/examples/extensions/qna.ts +122 -0
  1007. package/examples/extensions/question.ts +286 -0
  1008. package/examples/extensions/questionnaire.ts +448 -0
  1009. package/examples/extensions/rainbow-editor.ts +88 -0
  1010. package/examples/extensions/reload-runtime.ts +37 -0
  1011. package/examples/extensions/rpc-demo.ts +118 -0
  1012. package/examples/extensions/sandbox/index.ts +321 -0
  1013. package/examples/extensions/sandbox/package-lock.json +92 -0
  1014. package/examples/extensions/sandbox/package.json +19 -0
  1015. package/examples/extensions/send-user-message.ts +97 -0
  1016. package/examples/extensions/session-name.ts +27 -0
  1017. package/examples/extensions/shutdown-command.ts +63 -0
  1018. package/examples/extensions/snake.ts +343 -0
  1019. package/examples/extensions/space-invaders.ts +560 -0
  1020. package/examples/extensions/ssh.ts +220 -0
  1021. package/examples/extensions/status-line.ts +32 -0
  1022. package/examples/extensions/structured-output.ts +65 -0
  1023. package/examples/extensions/subagent/README.md +175 -0
  1024. package/examples/extensions/subagent/agents/planner.md +37 -0
  1025. package/examples/extensions/subagent/agents/reviewer.md +35 -0
  1026. package/examples/extensions/subagent/agents/scout.md +50 -0
  1027. package/examples/extensions/subagent/agents/worker.md +24 -0
  1028. package/examples/extensions/subagent/agents.ts +126 -0
  1029. package/examples/extensions/subagent/index.ts +1009 -0
  1030. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
  1031. package/examples/extensions/subagent/prompts/implement.md +10 -0
  1032. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
  1033. package/examples/extensions/summarize.ts +207 -0
  1034. package/examples/extensions/system-prompt-header.ts +17 -0
  1035. package/examples/extensions/tic-tac-toe.ts +1008 -0
  1036. package/examples/extensions/timed-confirm.ts +70 -0
  1037. package/examples/extensions/titlebar-spinner.ts +58 -0
  1038. package/examples/extensions/todo.ts +297 -0
  1039. package/examples/extensions/tool-override.ts +144 -0
  1040. package/examples/extensions/tools.ts +146 -0
  1041. package/examples/extensions/trigger-compact.ts +50 -0
  1042. package/examples/extensions/truncated-tool.ts +195 -0
  1043. package/examples/extensions/widget-placement.ts +9 -0
  1044. package/examples/extensions/with-deps/index.ts +32 -0
  1045. package/examples/extensions/with-deps/package-lock.json +31 -0
  1046. package/examples/extensions/with-deps/package.json +22 -0
  1047. package/examples/extensions/working-indicator.ts +123 -0
  1048. package/examples/extensions/working-message-test.ts +25 -0
  1049. package/examples/rpc-extension-ui.ts +632 -0
  1050. package/examples/sdk/01-minimal.ts +26 -0
  1051. package/examples/sdk/02-custom-model.ts +50 -0
  1052. package/examples/sdk/03-custom-prompt.ts +70 -0
  1053. package/examples/sdk/04-skills.ts +55 -0
  1054. package/examples/sdk/05-tools.ts +48 -0
  1055. package/examples/sdk/06-extensions.ts +94 -0
  1056. package/examples/sdk/07-context-files.ts +42 -0
  1057. package/examples/sdk/08-prompt-templates.ts +51 -0
  1058. package/examples/sdk/09-api-keys-and-oauth.ts +34 -0
  1059. package/examples/sdk/10-settings.ts +53 -0
  1060. package/examples/sdk/11-sessions.ts +52 -0
  1061. package/examples/sdk/12-full-control.ts +72 -0
  1062. package/examples/sdk/13-session-runtime.ts +67 -0
  1063. package/examples/sdk/README.md +140 -0
  1064. package/npm-shrinkwrap.json +1824 -0
  1065. package/package.json +99 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/extensions/deepwiki/http.ts"],"names":[],"mappings":"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","sourcesContent":["export interface FetchRetryOptions {\n\ttimeoutMs: number;\n\tretries?: number;\n\tsignal?: AbortSignal;\n\tlabel?: string;\n}\n\nfunction delay(milliseconds: number, label: string, signal: AbortSignal | undefined): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst handleAbort = () => {\n\t\t\tcleanup();\n\t\t\treject(new Error(`${label} request aborted`));\n\t\t};\n\t\tconst timer = setTimeout(() => {\n\t\t\tcleanup();\n\t\t\tresolve();\n\t\t}, milliseconds);\n\t\tconst cleanup = () => {\n\t\t\tclearTimeout(timer);\n\t\t\tsignal?.removeEventListener(\"abort\", handleAbort);\n\t\t};\n\n\t\tif (signal?.aborted) {\n\t\t\thandleAbort();\n\t\t\treturn;\n\t\t}\n\t\tsignal?.addEventListener(\"abort\", handleAbort, { once: true });\n\t});\n}\n\nasync function attemptOnce(\n\turl: string,\n\trequest: RequestInit,\n\ttimeoutMs: number,\n\tlabel: string,\n\tsignal: AbortSignal | undefined,\n): Promise<{ ok: true; response: Response; text: string } | { ok: false; error: Error }> {\n\tconst controller = new AbortController();\n\tlet timedOut = false;\n\tconst abortFromParent = () => controller.abort(signal?.reason);\n\tconst timeout = setTimeout(() => {\n\t\ttimedOut = true;\n\t\tcontroller.abort();\n\t}, timeoutMs);\n\n\tif (signal?.aborted) abortFromParent();\n\telse signal?.addEventListener(\"abort\", abortFromParent, { once: true });\n\n\ttry {\n\t\tconst response = await fetch(url, { ...request, signal: controller.signal });\n\t\tconst text = await response.text();\n\t\treturn { ok: true, response, text };\n\t} catch (error) {\n\t\tif (timedOut) throw new Error(`${label} request timed out after ${timeoutMs / 1000}s`);\n\t\tif (signal?.aborted) throw new Error(`${label} request aborted`);\n\t\treturn { ok: false, error: error instanceof Error ? error : new Error(String(error)) };\n\t} finally {\n\t\tclearTimeout(timeout);\n\t\tsignal?.removeEventListener(\"abort\", abortFromParent);\n\t}\n}\n\n/** Fetch with a per-attempt timeout and bounded retries for transient failures. */\nexport async function fetchWithRetry(\n\turl: string,\n\trequest: RequestInit,\n\toptions: FetchRetryOptions,\n): Promise<{ response: Response; text: string }> {\n\tconst retries = options.retries ?? 2;\n\tconst label = options.label ?? \"HTTP\";\n\tlet lastError: Error | undefined;\n\n\tfor (let attemptIndex = 0; attemptIndex <= retries; attemptIndex++) {\n\t\tif (attemptIndex > 0) await delay(1000 * attemptIndex, label, options.signal);\n\t\tconst outcome = await attemptOnce(url, request, options.timeoutMs, label, options.signal);\n\t\tif (!outcome.ok) {\n\t\t\tlastError = outcome.error;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst { response, text } = outcome;\n\t\tconst retryable = response.status >= 500 || response.status === 429;\n\t\tif (!response.ok && retryable && attemptIndex < retries) {\n\t\t\tlastError = new Error(`${label} HTTP ${response.status}`);\n\t\t\tcontinue;\n\t\t}\n\t\treturn { response, text };\n\t}\n\n\tthrow lastError ?? new Error(`${label} request failed`);\n}\n"]}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * deepwiki — Pi-native wrapper for DeepWiki repository documentation.
3
+ *
4
+ * Pi does not expose MCP servers as tools. This extension intentionally exposes
5
+ * only one DeepWiki-specific tool and hard-codes DeepWiki's public operations.
6
+ */
7
+ import type { ExtensionAPI } from "../../core/extensions/types.ts";
8
+ export default function deepwiki(pi: ExtensionAPI): void;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/extensions/deepwiki/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAanE,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAsBvD","sourcesContent":["/**\n * deepwiki — Pi-native wrapper for DeepWiki repository documentation.\n *\n * Pi does not expose MCP servers as tools. This extension intentionally exposes\n * only one DeepWiki-specific tool and hard-codes DeepWiki's public operations.\n */\nimport type { ExtensionAPI } from \"../../core/extensions/types.ts\";\nimport {\n\tDEEPWIKI_DESCRIPTION,\n\tDEEPWIKI_LABEL,\n\tDEEPWIKI_PROMPT_GUIDELINES,\n\tDEEPWIKI_PROMPT_SNIPPET,\n\tDEEPWIKI_TOOL_NAME,\n} from \"./constants.ts\";\n\nimport { type DeepWikiDetails, executeDeepWiki } from \"./execute.ts\";\nimport { renderDeepWikiCall, renderDeepWikiResult } from \"./render.ts\";\nimport { type DeepWikiParams, DeepWikiParamsSchema, normalizeDeepWikiParams } from \"./schema.ts\";\n\nexport default function deepwiki(pi: ExtensionAPI): void {\n\tpi.registerTool<typeof DeepWikiParamsSchema, DeepWikiDetails>({\n\t\tname: DEEPWIKI_TOOL_NAME,\n\t\tlabel: DEEPWIKI_LABEL,\n\t\tdescription: DEEPWIKI_DESCRIPTION,\n\t\tpromptSnippet: DEEPWIKI_PROMPT_SNIPPET,\n\t\tpromptGuidelines: DEEPWIKI_PROMPT_GUIDELINES,\n\t\tparameters: DeepWikiParamsSchema,\n\t\tprepareArguments: normalizeDeepWikiParams,\n\n\t\tasync execute(_toolCallId, params, signal, onUpdate) {\n\t\t\treturn executeDeepWiki(params, signal, onUpdate);\n\t\t},\n\n\t\trenderCall(args, theme) {\n\t\t\treturn renderDeepWikiCall(args as DeepWikiParams, theme);\n\t\t},\n\n\t\trenderResult(result, options, theme, context) {\n\t\t\treturn renderDeepWikiResult(result, options, theme, context.isError);\n\t\t},\n\t});\n}\n"]}
@@ -0,0 +1,25 @@
1
+ import { DEEPWIKI_DESCRIPTION, DEEPWIKI_LABEL, DEEPWIKI_PROMPT_GUIDELINES, DEEPWIKI_PROMPT_SNIPPET, DEEPWIKI_TOOL_NAME, } from "./constants.js";
2
+ import { executeDeepWiki } from "./execute.js";
3
+ import { renderDeepWikiCall, renderDeepWikiResult } from "./render.js";
4
+ import { DeepWikiParamsSchema, normalizeDeepWikiParams } from "./schema.js";
5
+ export default function deepwiki(pi) {
6
+ pi.registerTool({
7
+ name: DEEPWIKI_TOOL_NAME,
8
+ label: DEEPWIKI_LABEL,
9
+ description: DEEPWIKI_DESCRIPTION,
10
+ promptSnippet: DEEPWIKI_PROMPT_SNIPPET,
11
+ promptGuidelines: DEEPWIKI_PROMPT_GUIDELINES,
12
+ parameters: DeepWikiParamsSchema,
13
+ prepareArguments: normalizeDeepWikiParams,
14
+ async execute(_toolCallId, params, signal, onUpdate) {
15
+ return executeDeepWiki(params, signal, onUpdate);
16
+ },
17
+ renderCall(args, theme) {
18
+ return renderDeepWikiCall(args, theme);
19
+ },
20
+ renderResult(result, options, theme, context) {
21
+ return renderDeepWikiResult(result, options, theme, context.isError);
22
+ },
23
+ });
24
+ }
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extensions/deepwiki/index.ts"],"names":[],"mappings":"AAOA,OAAO,EACN,oBAAoB,EACpB,cAAc,EACd,0BAA0B,EAC1B,uBAAuB,EACvB,kBAAkB,GAClB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAwB,eAAe,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAuB,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEjG,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAAgB,EAAQ;IACxD,EAAE,CAAC,YAAY,CAA+C;QAC7D,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,oBAAoB;QACjC,aAAa,EAAE,uBAAuB;QACtC,gBAAgB,EAAE,0BAA0B;QAC5C,UAAU,EAAE,oBAAoB;QAChC,gBAAgB,EAAE,uBAAuB;QAEzC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE;YACpD,OAAO,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAAA,CACjD;QAED,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE;YACvB,OAAO,kBAAkB,CAAC,IAAsB,EAAE,KAAK,CAAC,CAAC;QAAA,CACzD;QAED,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;YAC7C,OAAO,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAAA,CACrE;KACD,CAAC,CAAC;AAAA,CACH","sourcesContent":["/**\n * deepwiki — Pi-native wrapper for DeepWiki repository documentation.\n *\n * Pi does not expose MCP servers as tools. This extension intentionally exposes\n * only one DeepWiki-specific tool and hard-codes DeepWiki's public operations.\n */\nimport type { ExtensionAPI } from \"../../core/extensions/types.ts\";\nimport {\n\tDEEPWIKI_DESCRIPTION,\n\tDEEPWIKI_LABEL,\n\tDEEPWIKI_PROMPT_GUIDELINES,\n\tDEEPWIKI_PROMPT_SNIPPET,\n\tDEEPWIKI_TOOL_NAME,\n} from \"./constants.ts\";\n\nimport { type DeepWikiDetails, executeDeepWiki } from \"./execute.ts\";\nimport { renderDeepWikiCall, renderDeepWikiResult } from \"./render.ts\";\nimport { type DeepWikiParams, DeepWikiParamsSchema, normalizeDeepWikiParams } from \"./schema.ts\";\n\nexport default function deepwiki(pi: ExtensionAPI): void {\n\tpi.registerTool<typeof DeepWikiParamsSchema, DeepWikiDetails>({\n\t\tname: DEEPWIKI_TOOL_NAME,\n\t\tlabel: DEEPWIKI_LABEL,\n\t\tdescription: DEEPWIKI_DESCRIPTION,\n\t\tpromptSnippet: DEEPWIKI_PROMPT_SNIPPET,\n\t\tpromptGuidelines: DEEPWIKI_PROMPT_GUIDELINES,\n\t\tparameters: DeepWikiParamsSchema,\n\t\tprepareArguments: normalizeDeepWikiParams,\n\n\t\tasync execute(_toolCallId, params, signal, onUpdate) {\n\t\t\treturn executeDeepWiki(params, signal, onUpdate);\n\t\t},\n\n\t\trenderCall(args, theme) {\n\t\t\treturn renderDeepWikiCall(args as DeepWikiParams, theme);\n\t\t},\n\n\t\trenderResult(result, options, theme, context) {\n\t\t\treturn renderDeepWikiResult(result, options, theme, context.isError);\n\t\t},\n\t});\n}\n"]}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * TUI rendering for the deepwiki tool (collapse / expand).
3
+ *
4
+ * Pi's fallback renderer dumps full `content` text and ignores `expanded`; this
5
+ * extension returns large wiki payloads, so a private renderer stays local here.
6
+ */
7
+ import { type Component } from "@earendil-works/pi-tui";
8
+ import type { AgentToolResult, ToolRenderResultOptions } from "../../core/extensions/types.ts";
9
+ import { type Theme } from "../../modes/interactive/theme/theme.ts";
10
+ import type { DeepWikiDetails } from "./execute.ts";
11
+ import type { DeepWikiParams } from "./schema.ts";
12
+ export declare function renderDeepWikiCall(args: DeepWikiParams, theme: Theme): Component;
13
+ export declare function renderDeepWikiResult(result: AgentToolResult<DeepWikiDetails>, options: ToolRenderResultOptions, theme: Theme, isError: boolean): Component;
14
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/extensions/deepwiki/render.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,KAAK,SAAS,EAAqC,MAAM,wBAAwB,CAAC;AAC3F,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAE/F,OAAO,EAAoB,KAAK,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAItF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAoHlD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,GAAG,SAAS,CAUhF;AASD,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,eAAe,CAAC,eAAe,CAAC,EACxC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,GACd,SAAS,CAqBX","sourcesContent":["/**\n * TUI rendering for the deepwiki tool (collapse / expand).\n *\n * Pi's fallback renderer dumps full `content` text and ignores `expanded`; this\n * extension returns large wiki payloads, so a private renderer stays local here.\n */\nimport { type Component, Container, Markdown, Spacer, Text } from \"@earendil-works/pi-tui\";\nimport type { AgentToolResult, ToolRenderResultOptions } from \"../../core/extensions/types.ts\";\nimport { keyHint } from \"../../modes/interactive/components/keybinding-hints.ts\";\nimport { getMarkdownTheme, type Theme } from \"../../modes/interactive/theme/theme.ts\";\n\nimport { extractContentPages, extractStructureSections } from \"./client.ts\";\nimport { DEEPWIKI_LABEL } from \"./constants.ts\";\nimport type { DeepWikiDetails } from \"./execute.ts\";\nimport type { DeepWikiParams } from \"./schema.ts\";\n\nfunction truncateText(text: string, maxLength: number, options?: { word?: boolean }): string {\n\tif (text.length <= maxLength) return text;\n\tif (options?.word) {\n\t\tconst prefix = text.slice(0, maxLength - 3);\n\t\tconst lastSpace = prefix.lastIndexOf(\" \");\n\t\tif (lastSpace >= 40) return `${prefix.slice(0, lastSpace)}...`;\n\t}\n\treturn `${text.slice(0, maxLength - 3)}...`;\n}\n\nfunction firstText(result: AgentToolResult<DeepWikiDetails>): string {\n\tfor (const part of result.content ?? []) {\n\t\tif (part.type === \"text\" && typeof part.text === \"string\") return part.text;\n\t}\n\treturn \"\";\n}\n\nfunction firstContentLine(text: string): string {\n\treturn (\n\t\ttext\n\t\t\t.split(\"\\n\")\n\t\t\t.map((line) => line.trim())\n\t\t\t.find((line) => line.length > 0) ?? \"DeepWiki response\"\n\t);\n}\n\nfunction formatPageList(pages: string[], maxItems = 4): string {\n\tconst shown = pages.slice(0, maxItems).join(\", \");\n\treturn pages.length > maxItems ? `${shown}...` : shown;\n}\n\nfunction pageTitlesFromResult(text: string, details: DeepWikiDetails | undefined): string[] {\n\tif (details?.pageTitles?.length) return details.pageTitles;\n\tif (details?.sectionTitles?.length) return details.sectionTitles;\n\tconst fromContent = extractContentPages(text);\n\tif (fromContent.length) return fromContent;\n\treturn extractStructureSections(text);\n}\n\nfunction summarizeStructure(text: string, details: DeepWikiDetails | undefined): string {\n\tconst pages = pageTitlesFromResult(text, details);\n\tif (pages.length === 0) return truncateText(firstContentLine(text), 120);\n\tconst count = details?.pageCount ?? pages.length;\n\treturn `${count} pages · ${formatPageList(pages)}`;\n}\n\nfunction summarizeContents(text: string, details: DeepWikiDetails | undefined): string {\n\tif (details?.requestedPage) {\n\t\tconst position =\n\t\t\tdetails.pageIndex !== undefined && details.pageCount ? `${details.pageIndex}/${details.pageCount} · ` : \"\";\n\t\tconst cut = details.truncatedChars ? \" (truncated)\" : \"\";\n\t\treturn `Page ${position}${details.requestedPage}${cut}`;\n\t}\n\tconst pages = pageTitlesFromResult(text, details);\n\tif (details?.shownPages !== undefined) {\n\t\tconst total = details.pageCount ?? pages.length;\n\t\tconst pagesPart = total > 0 ? `${details.shownPages}/${total} pages` : \"partial\";\n\t\treturn `Wiki · ${pagesPart} shown (truncated)`;\n\t}\n\tif (pages.length === 0) return \"Wiki loaded\";\n\treturn `Wiki · ${details?.pageCount ?? pages.length} pages`;\n}\n\nfunction stripDeepWikiTail(text: string): string {\n\tconst tailIndex = text.search(/\\n(?:#+\\s*)?(?:Wiki pages you might want to explore|View this search)/i);\n\tif (tailIndex < 0) return text;\n\treturn text.slice(0, tailIndex);\n}\n\nfunction summarizeQuestion(text: string): string {\n\tconst cleaned = stripDeepWikiTail(text)\n\t\t.replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, \"$1\")\n\t\t.replace(/[`*_]/g, \"\")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n\tif (!cleaned) return \"Answer ready\";\n\tconst sentenceMatch = cleaned.match(/^.{40,}?[.!?](?=\\s|$)/);\n\treturn truncateText(sentenceMatch?.[0] ?? cleaned, 140, { word: true });\n}\n\nfunction summarizeCollapsed(text: string, details: DeepWikiDetails | undefined): string {\n\tif (details?.action === \"structure\") return summarizeStructure(text, details);\n\tif (details?.action === \"contents\") return summarizeContents(text, details);\n\tif (details?.action === \"question\") return summarizeQuestion(text);\n\treturn truncateText(firstContentLine(text), 120);\n}\n\nfunction repoLabel(repoName: DeepWikiParams[\"repoName\"] | undefined): string {\n\tif (Array.isArray(repoName)) {\n\t\tif (repoName.length === 0) return \"repo\";\n\t\tif (repoName.length === 1) return repoName[0];\n\t\treturn `${repoName.length} repos: ${repoName.slice(0, 2).join(\", \")}${repoName.length > 2 ? \"...\" : \"\"}`;\n\t}\n\treturn repoName ?? \"repo\";\n}\n\n/** renderCall sees raw tool args; normalize JSON-array strings for display. */\nfunction repoLabelForCall(repoName: unknown): string {\n\tif (Array.isArray(repoName)) return repoLabel(repoName as DeepWikiParams[\"repoName\"]);\n\tif (typeof repoName === \"string\") {\n\t\tconst trimmed = repoName.trim();\n\t\tif (trimmed.startsWith(\"[\")) {\n\t\t\ttry {\n\t\t\t\tconst parsed: unknown = JSON.parse(trimmed);\n\t\t\t\tif (Array.isArray(parsed)) return repoLabel(parsed as string[]);\n\t\t\t} catch {\n\t\t\t\t/* fall through */\n\t\t\t}\n\t\t}\n\t\treturn repoLabel(repoName);\n\t}\n\treturn repoLabel(undefined);\n}\n\nexport function renderDeepWikiCall(args: DeepWikiParams, theme: Theme): Component {\n\tlet line = theme.fg(\"toolTitle\", theme.bold(`${DEEPWIKI_LABEL} `));\n\tline += theme.fg(\"muted\", args.action);\n\tline += ` ${theme.fg(\"accent\", repoLabelForCall(args.repoName))}`;\n\tif (args.action === \"question\" && args.question) {\n\t\tline += ` ${theme.fg(\"dim\", truncateText(args.question, 64))}`;\n\t} else if (args.action === \"contents\" && args.page !== undefined) {\n\t\tline += ` ${theme.fg(\"dim\", truncateText(String(args.page), 40))}`;\n\t}\n\treturn new Text(line, 0, 0);\n}\n\nfunction markdownBlock(text: string): Component {\n\tconst container = new Container();\n\tcontainer.addChild(new Spacer(1));\n\tcontainer.addChild(new Markdown(text, 1, 0, getMarkdownTheme()));\n\treturn container;\n}\n\nexport function renderDeepWikiResult(\n\tresult: AgentToolResult<DeepWikiDetails>,\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tisError: boolean,\n): Component {\n\tif (options.isPartial) {\n\t\tconst repo = result.details?.repoName;\n\t\tconst label = repo ? `Querying ${repo}...` : \"Querying...\";\n\t\treturn new Text(theme.fg(\"warning\", label), 0, 0);\n\t}\n\n\tconst text = firstText(result);\n\tif (isError || result.details?.errorMessage) {\n\t\tconst msg = result.details?.errorMessage ?? firstContentLine(text);\n\t\tconst line = truncateText(msg, 200);\n\t\treturn new Text(theme.fg(\"error\", `failed · ${line}`), 0, 0);\n\t}\n\n\tif (!options.expanded) {\n\t\tconst summary = theme.fg(\"accent\", summarizeCollapsed(text, result.details));\n\t\tconst hint = `${theme.fg(\"muted\", \"(\")}${keyHint(\"app.tools.expand\", \"to expand\")}${theme.fg(\"muted\", \")\")}`;\n\t\treturn new Text(`${summary}\\n${hint}`, 0, 0);\n\t}\n\n\treturn markdownBlock(text);\n}\n"]}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * TUI rendering for the deepwiki tool (collapse / expand).
3
+ *
4
+ * Pi's fallback renderer dumps full `content` text and ignores `expanded`; this
5
+ * extension returns large wiki payloads, so a private renderer stays local here.
6
+ */
7
+ import { Container, Markdown, Spacer, Text } from "@earendil-works/pi-tui";
8
+ import { keyHint } from "../../modes/interactive/components/keybinding-hints.js";
9
+ import { getMarkdownTheme } from "../../modes/interactive/theme/theme.js";
10
+ import { extractContentPages, extractStructureSections } from "./client.js";
11
+ import { DEEPWIKI_LABEL } from "./constants.js";
12
+ function truncateText(text, maxLength, options) {
13
+ if (text.length <= maxLength)
14
+ return text;
15
+ if (options?.word) {
16
+ const prefix = text.slice(0, maxLength - 3);
17
+ const lastSpace = prefix.lastIndexOf(" ");
18
+ if (lastSpace >= 40)
19
+ return `${prefix.slice(0, lastSpace)}...`;
20
+ }
21
+ return `${text.slice(0, maxLength - 3)}...`;
22
+ }
23
+ function firstText(result) {
24
+ for (const part of result.content ?? []) {
25
+ if (part.type === "text" && typeof part.text === "string")
26
+ return part.text;
27
+ }
28
+ return "";
29
+ }
30
+ function firstContentLine(text) {
31
+ return (text
32
+ .split("\n")
33
+ .map((line) => line.trim())
34
+ .find((line) => line.length > 0) ?? "DeepWiki response");
35
+ }
36
+ function formatPageList(pages, maxItems = 4) {
37
+ const shown = pages.slice(0, maxItems).join(", ");
38
+ return pages.length > maxItems ? `${shown}...` : shown;
39
+ }
40
+ function pageTitlesFromResult(text, details) {
41
+ if (details?.pageTitles?.length)
42
+ return details.pageTitles;
43
+ if (details?.sectionTitles?.length)
44
+ return details.sectionTitles;
45
+ const fromContent = extractContentPages(text);
46
+ if (fromContent.length)
47
+ return fromContent;
48
+ return extractStructureSections(text);
49
+ }
50
+ function summarizeStructure(text, details) {
51
+ const pages = pageTitlesFromResult(text, details);
52
+ if (pages.length === 0)
53
+ return truncateText(firstContentLine(text), 120);
54
+ const count = details?.pageCount ?? pages.length;
55
+ return `${count} pages · ${formatPageList(pages)}`;
56
+ }
57
+ function summarizeContents(text, details) {
58
+ if (details?.requestedPage) {
59
+ const position = details.pageIndex !== undefined && details.pageCount ? `${details.pageIndex}/${details.pageCount} · ` : "";
60
+ const cut = details.truncatedChars ? " (truncated)" : "";
61
+ return `Page ${position}${details.requestedPage}${cut}`;
62
+ }
63
+ const pages = pageTitlesFromResult(text, details);
64
+ if (details?.shownPages !== undefined) {
65
+ const total = details.pageCount ?? pages.length;
66
+ const pagesPart = total > 0 ? `${details.shownPages}/${total} pages` : "partial";
67
+ return `Wiki · ${pagesPart} shown (truncated)`;
68
+ }
69
+ if (pages.length === 0)
70
+ return "Wiki loaded";
71
+ return `Wiki · ${details?.pageCount ?? pages.length} pages`;
72
+ }
73
+ function stripDeepWikiTail(text) {
74
+ const tailIndex = text.search(/\n(?:#+\s*)?(?:Wiki pages you might want to explore|View this search)/i);
75
+ if (tailIndex < 0)
76
+ return text;
77
+ return text.slice(0, tailIndex);
78
+ }
79
+ function summarizeQuestion(text) {
80
+ const cleaned = stripDeepWikiTail(text)
81
+ .replace(/\[([^\]]+)\]\([^)]+\)/g, "$1")
82
+ .replace(/[`*_]/g, "")
83
+ .replace(/\s+/g, " ")
84
+ .trim();
85
+ if (!cleaned)
86
+ return "Answer ready";
87
+ const sentenceMatch = cleaned.match(/^.{40,}?[.!?](?=\s|$)/);
88
+ return truncateText(sentenceMatch?.[0] ?? cleaned, 140, { word: true });
89
+ }
90
+ function summarizeCollapsed(text, details) {
91
+ if (details?.action === "structure")
92
+ return summarizeStructure(text, details);
93
+ if (details?.action === "contents")
94
+ return summarizeContents(text, details);
95
+ if (details?.action === "question")
96
+ return summarizeQuestion(text);
97
+ return truncateText(firstContentLine(text), 120);
98
+ }
99
+ function repoLabel(repoName) {
100
+ if (Array.isArray(repoName)) {
101
+ if (repoName.length === 0)
102
+ return "repo";
103
+ if (repoName.length === 1)
104
+ return repoName[0];
105
+ return `${repoName.length} repos: ${repoName.slice(0, 2).join(", ")}${repoName.length > 2 ? "..." : ""}`;
106
+ }
107
+ return repoName ?? "repo";
108
+ }
109
+ /** renderCall sees raw tool args; normalize JSON-array strings for display. */
110
+ function repoLabelForCall(repoName) {
111
+ if (Array.isArray(repoName))
112
+ return repoLabel(repoName);
113
+ if (typeof repoName === "string") {
114
+ const trimmed = repoName.trim();
115
+ if (trimmed.startsWith("[")) {
116
+ try {
117
+ const parsed = JSON.parse(trimmed);
118
+ if (Array.isArray(parsed))
119
+ return repoLabel(parsed);
120
+ }
121
+ catch {
122
+ /* fall through */
123
+ }
124
+ }
125
+ return repoLabel(repoName);
126
+ }
127
+ return repoLabel(undefined);
128
+ }
129
+ export function renderDeepWikiCall(args, theme) {
130
+ let line = theme.fg("toolTitle", theme.bold(`${DEEPWIKI_LABEL} `));
131
+ line += theme.fg("muted", args.action);
132
+ line += ` ${theme.fg("accent", repoLabelForCall(args.repoName))}`;
133
+ if (args.action === "question" && args.question) {
134
+ line += ` ${theme.fg("dim", truncateText(args.question, 64))}`;
135
+ }
136
+ else if (args.action === "contents" && args.page !== undefined) {
137
+ line += ` ${theme.fg("dim", truncateText(String(args.page), 40))}`;
138
+ }
139
+ return new Text(line, 0, 0);
140
+ }
141
+ function markdownBlock(text) {
142
+ const container = new Container();
143
+ container.addChild(new Spacer(1));
144
+ container.addChild(new Markdown(text, 1, 0, getMarkdownTheme()));
145
+ return container;
146
+ }
147
+ export function renderDeepWikiResult(result, options, theme, isError) {
148
+ if (options.isPartial) {
149
+ const repo = result.details?.repoName;
150
+ const label = repo ? `Querying ${repo}...` : "Querying...";
151
+ return new Text(theme.fg("warning", label), 0, 0);
152
+ }
153
+ const text = firstText(result);
154
+ if (isError || result.details?.errorMessage) {
155
+ const msg = result.details?.errorMessage ?? firstContentLine(text);
156
+ const line = truncateText(msg, 200);
157
+ return new Text(theme.fg("error", `failed · ${line}`), 0, 0);
158
+ }
159
+ if (!options.expanded) {
160
+ const summary = theme.fg("accent", summarizeCollapsed(text, result.details));
161
+ const hint = `${theme.fg("muted", "(")}${keyHint("app.tools.expand", "to expand")}${theme.fg("muted", ")")}`;
162
+ return new Text(`${summary}\n${hint}`, 0, 0);
163
+ }
164
+ return markdownBlock(text);
165
+ }
166
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/extensions/deepwiki/render.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * TUI rendering for the deepwiki tool (collapse / expand).\n *\n * Pi's fallback renderer dumps full `content` text and ignores `expanded`; this\n * extension returns large wiki payloads, so a private renderer stays local here.\n */\nimport { type Component, Container, Markdown, Spacer, Text } from \"@earendil-works/pi-tui\";\nimport type { AgentToolResult, ToolRenderResultOptions } from \"../../core/extensions/types.ts\";\nimport { keyHint } from \"../../modes/interactive/components/keybinding-hints.ts\";\nimport { getMarkdownTheme, type Theme } from \"../../modes/interactive/theme/theme.ts\";\n\nimport { extractContentPages, extractStructureSections } from \"./client.ts\";\nimport { DEEPWIKI_LABEL } from \"./constants.ts\";\nimport type { DeepWikiDetails } from \"./execute.ts\";\nimport type { DeepWikiParams } from \"./schema.ts\";\n\nfunction truncateText(text: string, maxLength: number, options?: { word?: boolean }): string {\n\tif (text.length <= maxLength) return text;\n\tif (options?.word) {\n\t\tconst prefix = text.slice(0, maxLength - 3);\n\t\tconst lastSpace = prefix.lastIndexOf(\" \");\n\t\tif (lastSpace >= 40) return `${prefix.slice(0, lastSpace)}...`;\n\t}\n\treturn `${text.slice(0, maxLength - 3)}...`;\n}\n\nfunction firstText(result: AgentToolResult<DeepWikiDetails>): string {\n\tfor (const part of result.content ?? []) {\n\t\tif (part.type === \"text\" && typeof part.text === \"string\") return part.text;\n\t}\n\treturn \"\";\n}\n\nfunction firstContentLine(text: string): string {\n\treturn (\n\t\ttext\n\t\t\t.split(\"\\n\")\n\t\t\t.map((line) => line.trim())\n\t\t\t.find((line) => line.length > 0) ?? \"DeepWiki response\"\n\t);\n}\n\nfunction formatPageList(pages: string[], maxItems = 4): string {\n\tconst shown = pages.slice(0, maxItems).join(\", \");\n\treturn pages.length > maxItems ? `${shown}...` : shown;\n}\n\nfunction pageTitlesFromResult(text: string, details: DeepWikiDetails | undefined): string[] {\n\tif (details?.pageTitles?.length) return details.pageTitles;\n\tif (details?.sectionTitles?.length) return details.sectionTitles;\n\tconst fromContent = extractContentPages(text);\n\tif (fromContent.length) return fromContent;\n\treturn extractStructureSections(text);\n}\n\nfunction summarizeStructure(text: string, details: DeepWikiDetails | undefined): string {\n\tconst pages = pageTitlesFromResult(text, details);\n\tif (pages.length === 0) return truncateText(firstContentLine(text), 120);\n\tconst count = details?.pageCount ?? pages.length;\n\treturn `${count} pages · ${formatPageList(pages)}`;\n}\n\nfunction summarizeContents(text: string, details: DeepWikiDetails | undefined): string {\n\tif (details?.requestedPage) {\n\t\tconst position =\n\t\t\tdetails.pageIndex !== undefined && details.pageCount ? `${details.pageIndex}/${details.pageCount} · ` : \"\";\n\t\tconst cut = details.truncatedChars ? \" (truncated)\" : \"\";\n\t\treturn `Page ${position}${details.requestedPage}${cut}`;\n\t}\n\tconst pages = pageTitlesFromResult(text, details);\n\tif (details?.shownPages !== undefined) {\n\t\tconst total = details.pageCount ?? pages.length;\n\t\tconst pagesPart = total > 0 ? `${details.shownPages}/${total} pages` : \"partial\";\n\t\treturn `Wiki · ${pagesPart} shown (truncated)`;\n\t}\n\tif (pages.length === 0) return \"Wiki loaded\";\n\treturn `Wiki · ${details?.pageCount ?? pages.length} pages`;\n}\n\nfunction stripDeepWikiTail(text: string): string {\n\tconst tailIndex = text.search(/\\n(?:#+\\s*)?(?:Wiki pages you might want to explore|View this search)/i);\n\tif (tailIndex < 0) return text;\n\treturn text.slice(0, tailIndex);\n}\n\nfunction summarizeQuestion(text: string): string {\n\tconst cleaned = stripDeepWikiTail(text)\n\t\t.replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, \"$1\")\n\t\t.replace(/[`*_]/g, \"\")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n\tif (!cleaned) return \"Answer ready\";\n\tconst sentenceMatch = cleaned.match(/^.{40,}?[.!?](?=\\s|$)/);\n\treturn truncateText(sentenceMatch?.[0] ?? cleaned, 140, { word: true });\n}\n\nfunction summarizeCollapsed(text: string, details: DeepWikiDetails | undefined): string {\n\tif (details?.action === \"structure\") return summarizeStructure(text, details);\n\tif (details?.action === \"contents\") return summarizeContents(text, details);\n\tif (details?.action === \"question\") return summarizeQuestion(text);\n\treturn truncateText(firstContentLine(text), 120);\n}\n\nfunction repoLabel(repoName: DeepWikiParams[\"repoName\"] | undefined): string {\n\tif (Array.isArray(repoName)) {\n\t\tif (repoName.length === 0) return \"repo\";\n\t\tif (repoName.length === 1) return repoName[0];\n\t\treturn `${repoName.length} repos: ${repoName.slice(0, 2).join(\", \")}${repoName.length > 2 ? \"...\" : \"\"}`;\n\t}\n\treturn repoName ?? \"repo\";\n}\n\n/** renderCall sees raw tool args; normalize JSON-array strings for display. */\nfunction repoLabelForCall(repoName: unknown): string {\n\tif (Array.isArray(repoName)) return repoLabel(repoName as DeepWikiParams[\"repoName\"]);\n\tif (typeof repoName === \"string\") {\n\t\tconst trimmed = repoName.trim();\n\t\tif (trimmed.startsWith(\"[\")) {\n\t\t\ttry {\n\t\t\t\tconst parsed: unknown = JSON.parse(trimmed);\n\t\t\t\tif (Array.isArray(parsed)) return repoLabel(parsed as string[]);\n\t\t\t} catch {\n\t\t\t\t/* fall through */\n\t\t\t}\n\t\t}\n\t\treturn repoLabel(repoName);\n\t}\n\treturn repoLabel(undefined);\n}\n\nexport function renderDeepWikiCall(args: DeepWikiParams, theme: Theme): Component {\n\tlet line = theme.fg(\"toolTitle\", theme.bold(`${DEEPWIKI_LABEL} `));\n\tline += theme.fg(\"muted\", args.action);\n\tline += ` ${theme.fg(\"accent\", repoLabelForCall(args.repoName))}`;\n\tif (args.action === \"question\" && args.question) {\n\t\tline += ` ${theme.fg(\"dim\", truncateText(args.question, 64))}`;\n\t} else if (args.action === \"contents\" && args.page !== undefined) {\n\t\tline += ` ${theme.fg(\"dim\", truncateText(String(args.page), 40))}`;\n\t}\n\treturn new Text(line, 0, 0);\n}\n\nfunction markdownBlock(text: string): Component {\n\tconst container = new Container();\n\tcontainer.addChild(new Spacer(1));\n\tcontainer.addChild(new Markdown(text, 1, 0, getMarkdownTheme()));\n\treturn container;\n}\n\nexport function renderDeepWikiResult(\n\tresult: AgentToolResult<DeepWikiDetails>,\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tisError: boolean,\n): Component {\n\tif (options.isPartial) {\n\t\tconst repo = result.details?.repoName;\n\t\tconst label = repo ? `Querying ${repo}...` : \"Querying...\";\n\t\treturn new Text(theme.fg(\"warning\", label), 0, 0);\n\t}\n\n\tconst text = firstText(result);\n\tif (isError || result.details?.errorMessage) {\n\t\tconst msg = result.details?.errorMessage ?? firstContentLine(text);\n\t\tconst line = truncateText(msg, 200);\n\t\treturn new Text(theme.fg(\"error\", `failed · ${line}`), 0, 0);\n\t}\n\n\tif (!options.expanded) {\n\t\tconst summary = theme.fg(\"accent\", summarizeCollapsed(text, result.details));\n\t\tconst hint = `${theme.fg(\"muted\", \"(\")}${keyHint(\"app.tools.expand\", \"to expand\")}${theme.fg(\"muted\", \")\")}`;\n\t\treturn new Text(`${summary}\\n${hint}`, 0, 0);\n\t}\n\n\treturn markdownBlock(text);\n}\n"]}
@@ -0,0 +1,13 @@
1
+ import { type Static, Type } from "typebox";
2
+ export declare const DEEPWIKI_ACTIONS: readonly ["structure", "contents", "question"];
3
+ export declare const DeepWikiParamsSchema: Type.TObject<{
4
+ action: Type.TUnsafe<"contents" | "question" | "structure">;
5
+ repoName: Type.TUnion<[Type.TString, Type.TArray<Type.TString>]>;
6
+ question: Type.TOptional<Type.TString>;
7
+ page: Type.TOptional<Type.TUnion<[Type.TString, Type.TNumber]>>;
8
+ }>;
9
+ export type DeepWikiAction = (typeof DEEPWIKI_ACTIONS)[number];
10
+ export type DeepWikiParams = Static<typeof DeepWikiParamsSchema>;
11
+ export declare function normalizeRepoName(value: unknown): string;
12
+ export declare function normalizeDeepWikiParams(input: unknown): DeepWikiParams;
13
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/extensions/deepwiki/schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAI5C,eAAO,MAAM,gBAAgB,gDAAiD,CAAC;AAQ/E,eAAO,MAAM,oBAAoB;;;;;EAkC/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/D,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAgFjE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAkCxD;AA4BD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAsCtE","sourcesContent":["import { StringEnum } from \"@earendil-works/pi-ai\";\nimport { type Static, Type } from \"typebox\";\n\nimport { normalizePageRef } from \"./contents.ts\";\n\nexport const DEEPWIKI_ACTIONS = [\"structure\", \"contents\", \"question\"] as const;\nconst MAX_QUESTION_REPOS = 10;\n\nconst DeepWikiActionSchema = StringEnum(DEEPWIKI_ACTIONS, {\n\tdescription:\n\t\t\"DeepWiki operation: structure lists generated wiki pages for one repo, contents reads the full generated wiki for one repo, and question answers focused repo/reference/comparison questions across up to 10 repos.\",\n});\n\nexport const DeepWikiParamsSchema = Type.Object({\n\taction: DeepWikiActionSchema,\n\trepoName: Type.Union([\n\t\tType.String({\n\t\t\tminLength: 1,\n\t\t\tdescription:\n\t\t\t\t'One public GitHub repo as \"owner/repo\" (preferred), or a GitHub/DeepWiki URL. Required for structure and contents; for question with a single repo use this string form — not a one-element array.',\n\t\t}),\n\t\tType.Array(\n\t\t\tType.String({\n\t\t\t\tminLength: 1,\n\t\t\t\tdescription: 'Public GitHub repo in \"owner/repo\" format.',\n\t\t\t}),\n\t\t\t{\n\t\t\t\tminItems: 1,\n\t\t\t\tmaxItems: MAX_QUESTION_REPOS,\n\t\t\t\tdescription:\n\t\t\t\t\t\"Only for action question when comparing 2-10 repos. Each entry is owner/repo. For one repo use a string repoName instead.\",\n\t\t\t},\n\t\t),\n\t]),\n\tquestion: Type.Optional(\n\t\tType.String({\n\t\t\tminLength: 1,\n\t\t\tdescription:\n\t\t\t\t\"Required for action question. Ask a focused question about architecture, APIs, implementation patterns, extension points, onboarding, or cross-repo comparison.\",\n\t\t}),\n\t),\n\tpage: Type.Optional(\n\t\tType.Union([Type.String({ minLength: 1 }), Type.Number()], {\n\t\t\tdescription:\n\t\t\t\t'Only for action contents: one page by 1-based index or by title from structure (e.g. \"Extension System\") — titles do not include outline numbers like \"4.4\". Run structure first if unsure. Prefer page reads over omitting page.',\n\t\t}),\n\t),\n});\n\nexport type DeepWikiAction = (typeof DEEPWIKI_ACTIONS)[number];\nexport type DeepWikiParams = Static<typeof DeepWikiParamsSchema>;\n\nconst ACTION_ALIASES: Record<string, DeepWikiAction> = {\n\task: \"question\",\n\task_question: \"question\",\n\tcontents: \"contents\",\n\tcontent: \"contents\",\n\tfull: \"contents\",\n\tmap: \"structure\",\n\tpages: \"structure\",\n\tquestion: \"question\",\n\tquery: \"question\",\n\tread_wiki_contents: \"contents\",\n\tread_wiki_structure: \"structure\",\n\tstructure: \"structure\",\n\ttopics: \"structure\",\n\twiki: \"contents\",\n};\n\nconst GITHUB_OWNER_RE = /^[A-Za-z0-9](?:[A-Za-z0-9-]{0,38}[A-Za-z0-9])?$/;\nconst GITHUB_REPO_RE = /^[A-Za-z0-9._-]{1,100}$/;\n\nfunction readString(record: Record<string, unknown>, keys: string[]): string | undefined {\n\tfor (const key of keys) {\n\t\tconst value = record[key];\n\t\tif (typeof value === \"string\" && value.trim()) return value.trim();\n\t}\n\treturn undefined;\n}\n\nfunction readPageRef(record: Record<string, unknown>): string | number | undefined {\n\tfor (const key of [\"page\", \"pageName\", \"pageTitle\"]) {\n\t\tconst value = record[key];\n\t\tif (typeof value === \"number\" && Number.isFinite(value)) return value;\n\t\tif (typeof value === \"string\" && value.trim()) return normalizePageRef(value.trim());\n\t}\n\treturn undefined;\n}\n\nfunction coerceRepoNameInput(value: unknown): unknown {\n\tif (Array.isArray(value)) return value;\n\tif (typeof value !== \"string\") return value;\n\tconst trimmed = value.trim();\n\tif (!trimmed.startsWith(\"[\")) return value;\n\ttry {\n\t\tconst parsed: unknown = JSON.parse(trimmed);\n\t\tif (Array.isArray(parsed)) return parsed;\n\t} catch {\n\t\t/* keep original string */\n\t}\n\treturn value;\n}\n\nfunction normalizeAction(\n\taction: unknown,\n\tquestion: string | undefined,\n\tpage: string | number | undefined,\n): DeepWikiAction {\n\tif (typeof action === \"string\") {\n\t\tconst key = action\n\t\t\t.trim()\n\t\t\t.toLowerCase()\n\t\t\t.replace(/[\\s-]+/g, \"_\");\n\t\tif (!key) return inferAction(question, page);\n\t\tconst normalized = ACTION_ALIASES[key];\n\t\tif (normalized) return normalized;\n\t\tthrow new Error(`unsupported deepwiki action: ${action}`);\n\t}\n\tif (action !== undefined && action !== null) {\n\t\tthrow new Error(\"deepwiki action must be a string\");\n\t}\n\treturn inferAction(question, page);\n}\n\nfunction inferAction(question: string | undefined, page: string | number | undefined): DeepWikiAction {\n\tif (question) return \"question\";\n\tif (page !== undefined) return \"contents\";\n\treturn \"structure\";\n}\n\nexport function normalizeRepoName(value: unknown): string {\n\tif (typeof value !== \"string\") throw new Error(\"repoName is required\");\n\n\tconst input = value.trim().replace(/^\\/+|\\/+$/g, \"\");\n\tif (!input) throw new Error(\"repoName is required\");\n\n\tlet owner: string | undefined;\n\tlet repo: string | undefined;\n\n\tconst sshMatch = input.match(/^git@github\\.com:([^/\\s]+)\\/([^/\\s]+?)(?:\\.git)?$/i);\n\tif (sshMatch) {\n\t\towner = sshMatch[1];\n\t\trepo = sshMatch[2];\n\t} else if (/^(?:https?:\\/\\/)?(?:www\\.)?(?:github\\.com|deepwiki\\.com)\\//i.test(input)) {\n\t\tconst urlInput = /^[a-z][a-z0-9+.-]*:\\/\\//i.test(input) ? input : `https://${input}`;\n\t\ttry {\n\t\t\tconst url = new URL(urlInput);\n\t\t\tconst [urlOwner, urlRepo] = url.pathname.replace(/^\\/+|\\/+$/g, \"\").split(\"/\");\n\t\t\towner = urlOwner;\n\t\t\trepo = urlRepo?.replace(/\\.git$/i, \"\");\n\t\t} catch {\n\t\t\tthrow new Error('repoName must use \"owner/repo\" format');\n\t\t}\n\t} else {\n\t\tconst parts = input.replace(/\\.git$/i, \"\").split(\"/\");\n\t\tif (parts.length === 2) {\n\t\t\t[owner, repo] = parts;\n\t\t}\n\t}\n\n\tif (!owner || !repo || !GITHUB_OWNER_RE.test(owner) || !GITHUB_REPO_RE.test(repo)) {\n\t\tthrow new Error('repoName must use a public GitHub \"owner/repo\" identifier');\n\t}\n\treturn `${owner}/${repo}`;\n}\n\nfunction normalizeRepoNames(value: unknown): string[] {\n\tvalue = coerceRepoNameInput(value);\n\tconst values =\n\t\ttypeof value === \"string\" && value.includes(\",\")\n\t\t\t? value\n\t\t\t\t\t.split(\",\")\n\t\t\t\t\t.map((repo) => repo.trim())\n\t\t\t\t\t.filter(Boolean)\n\t\t\t: Array.isArray(value)\n\t\t\t\t? value\n\t\t\t\t: [value];\n\tconst repos = values.map((item) => normalizeRepoName(item));\n\tconst seen = new Set<string>();\n\tconst unique: string[] = [];\n\tfor (const repo of repos) {\n\t\tconst key = repo.toLowerCase();\n\t\tif (seen.has(key)) continue;\n\t\tseen.add(key);\n\t\tunique.push(repo);\n\t}\n\tif (unique.length > MAX_QUESTION_REPOS) {\n\t\tthrow new Error(`question action supports at most ${MAX_QUESTION_REPOS} repositories`);\n\t}\n\treturn unique;\n}\n\nexport function normalizeDeepWikiParams(input: unknown): DeepWikiParams {\n\tif (!input || typeof input !== \"object\") {\n\t\tthrow new Error(\"deepwiki arguments must be an object\");\n\t}\n\n\tconst record = input as Record<string, unknown>;\n\tconst question = readString(record, [\"question\", \"query\", \"prompt\"]);\n\tconst page = readPageRef(record);\n\tconst action = normalizeAction(record.action, question, page);\n\tconst rawRepoName =\n\t\trecord.repoName ??\n\t\trecord.repo ??\n\t\trecord.repos ??\n\t\trecord.repository ??\n\t\trecord.repositories ??\n\t\trecord.githubRepo ??\n\t\trecord.githubRepos;\n\tconst repoNames = normalizeRepoNames(rawRepoName);\n\n\tif (action === \"question\") {\n\t\tif (!question) throw new Error(\"question is required when action is question\");\n\t\treturn {\n\t\t\taction,\n\t\t\trepoName: repoNames.length > 1 ? repoNames : repoNames[0],\n\t\t\tquestion,\n\t\t};\n\t}\n\n\tif (repoNames.length !== 1) {\n\t\tthrow new Error(`${action} action requires exactly one repository`);\n\t}\n\n\t// page is meaningful only for contents; structure/question ignore it.\n\treturn {\n\t\taction,\n\t\trepoName: repoNames[0],\n\t\t...(action === \"contents\" && page !== undefined ? { page } : {}),\n\t};\n}\n"]}
@@ -0,0 +1,208 @@
1
+ import { StringEnum } from "@earendil-works/pi-ai";
2
+ import { Type } from "typebox";
3
+ import { normalizePageRef } from "./contents.js";
4
+ export const DEEPWIKI_ACTIONS = ["structure", "contents", "question"];
5
+ const MAX_QUESTION_REPOS = 10;
6
+ const DeepWikiActionSchema = StringEnum(DEEPWIKI_ACTIONS, {
7
+ description: "DeepWiki operation: structure lists generated wiki pages for one repo, contents reads the full generated wiki for one repo, and question answers focused repo/reference/comparison questions across up to 10 repos.",
8
+ });
9
+ export const DeepWikiParamsSchema = Type.Object({
10
+ action: DeepWikiActionSchema,
11
+ repoName: Type.Union([
12
+ Type.String({
13
+ minLength: 1,
14
+ description: 'One public GitHub repo as "owner/repo" (preferred), or a GitHub/DeepWiki URL. Required for structure and contents; for question with a single repo use this string form — not a one-element array.',
15
+ }),
16
+ Type.Array(Type.String({
17
+ minLength: 1,
18
+ description: 'Public GitHub repo in "owner/repo" format.',
19
+ }), {
20
+ minItems: 1,
21
+ maxItems: MAX_QUESTION_REPOS,
22
+ description: "Only for action question when comparing 2-10 repos. Each entry is owner/repo. For one repo use a string repoName instead.",
23
+ }),
24
+ ]),
25
+ question: Type.Optional(Type.String({
26
+ minLength: 1,
27
+ description: "Required for action question. Ask a focused question about architecture, APIs, implementation patterns, extension points, onboarding, or cross-repo comparison.",
28
+ })),
29
+ page: Type.Optional(Type.Union([Type.String({ minLength: 1 }), Type.Number()], {
30
+ description: 'Only for action contents: one page by 1-based index or by title from structure (e.g. "Extension System") — titles do not include outline numbers like "4.4". Run structure first if unsure. Prefer page reads over omitting page.',
31
+ })),
32
+ });
33
+ const ACTION_ALIASES = {
34
+ ask: "question",
35
+ ask_question: "question",
36
+ contents: "contents",
37
+ content: "contents",
38
+ full: "contents",
39
+ map: "structure",
40
+ pages: "structure",
41
+ question: "question",
42
+ query: "question",
43
+ read_wiki_contents: "contents",
44
+ read_wiki_structure: "structure",
45
+ structure: "structure",
46
+ topics: "structure",
47
+ wiki: "contents",
48
+ };
49
+ const GITHUB_OWNER_RE = /^[A-Za-z0-9](?:[A-Za-z0-9-]{0,38}[A-Za-z0-9])?$/;
50
+ const GITHUB_REPO_RE = /^[A-Za-z0-9._-]{1,100}$/;
51
+ function readString(record, keys) {
52
+ for (const key of keys) {
53
+ const value = record[key];
54
+ if (typeof value === "string" && value.trim())
55
+ return value.trim();
56
+ }
57
+ return undefined;
58
+ }
59
+ function readPageRef(record) {
60
+ for (const key of ["page", "pageName", "pageTitle"]) {
61
+ const value = record[key];
62
+ if (typeof value === "number" && Number.isFinite(value))
63
+ return value;
64
+ if (typeof value === "string" && value.trim())
65
+ return normalizePageRef(value.trim());
66
+ }
67
+ return undefined;
68
+ }
69
+ function coerceRepoNameInput(value) {
70
+ if (Array.isArray(value))
71
+ return value;
72
+ if (typeof value !== "string")
73
+ return value;
74
+ const trimmed = value.trim();
75
+ if (!trimmed.startsWith("["))
76
+ return value;
77
+ try {
78
+ const parsed = JSON.parse(trimmed);
79
+ if (Array.isArray(parsed))
80
+ return parsed;
81
+ }
82
+ catch {
83
+ /* keep original string */
84
+ }
85
+ return value;
86
+ }
87
+ function normalizeAction(action, question, page) {
88
+ if (typeof action === "string") {
89
+ const key = action
90
+ .trim()
91
+ .toLowerCase()
92
+ .replace(/[\s-]+/g, "_");
93
+ if (!key)
94
+ return inferAction(question, page);
95
+ const normalized = ACTION_ALIASES[key];
96
+ if (normalized)
97
+ return normalized;
98
+ throw new Error(`unsupported deepwiki action: ${action}`);
99
+ }
100
+ if (action !== undefined && action !== null) {
101
+ throw new Error("deepwiki action must be a string");
102
+ }
103
+ return inferAction(question, page);
104
+ }
105
+ function inferAction(question, page) {
106
+ if (question)
107
+ return "question";
108
+ if (page !== undefined)
109
+ return "contents";
110
+ return "structure";
111
+ }
112
+ export function normalizeRepoName(value) {
113
+ if (typeof value !== "string")
114
+ throw new Error("repoName is required");
115
+ const input = value.trim().replace(/^\/+|\/+$/g, "");
116
+ if (!input)
117
+ throw new Error("repoName is required");
118
+ let owner;
119
+ let repo;
120
+ const sshMatch = input.match(/^git@github\.com:([^/\s]+)\/([^/\s]+?)(?:\.git)?$/i);
121
+ if (sshMatch) {
122
+ owner = sshMatch[1];
123
+ repo = sshMatch[2];
124
+ }
125
+ else if (/^(?:https?:\/\/)?(?:www\.)?(?:github\.com|deepwiki\.com)\//i.test(input)) {
126
+ const urlInput = /^[a-z][a-z0-9+.-]*:\/\//i.test(input) ? input : `https://${input}`;
127
+ try {
128
+ const url = new URL(urlInput);
129
+ const [urlOwner, urlRepo] = url.pathname.replace(/^\/+|\/+$/g, "").split("/");
130
+ owner = urlOwner;
131
+ repo = urlRepo?.replace(/\.git$/i, "");
132
+ }
133
+ catch {
134
+ throw new Error('repoName must use "owner/repo" format');
135
+ }
136
+ }
137
+ else {
138
+ const parts = input.replace(/\.git$/i, "").split("/");
139
+ if (parts.length === 2) {
140
+ [owner, repo] = parts;
141
+ }
142
+ }
143
+ if (!owner || !repo || !GITHUB_OWNER_RE.test(owner) || !GITHUB_REPO_RE.test(repo)) {
144
+ throw new Error('repoName must use a public GitHub "owner/repo" identifier');
145
+ }
146
+ return `${owner}/${repo}`;
147
+ }
148
+ function normalizeRepoNames(value) {
149
+ value = coerceRepoNameInput(value);
150
+ const values = typeof value === "string" && value.includes(",")
151
+ ? value
152
+ .split(",")
153
+ .map((repo) => repo.trim())
154
+ .filter(Boolean)
155
+ : Array.isArray(value)
156
+ ? value
157
+ : [value];
158
+ const repos = values.map((item) => normalizeRepoName(item));
159
+ const seen = new Set();
160
+ const unique = [];
161
+ for (const repo of repos) {
162
+ const key = repo.toLowerCase();
163
+ if (seen.has(key))
164
+ continue;
165
+ seen.add(key);
166
+ unique.push(repo);
167
+ }
168
+ if (unique.length > MAX_QUESTION_REPOS) {
169
+ throw new Error(`question action supports at most ${MAX_QUESTION_REPOS} repositories`);
170
+ }
171
+ return unique;
172
+ }
173
+ export function normalizeDeepWikiParams(input) {
174
+ if (!input || typeof input !== "object") {
175
+ throw new Error("deepwiki arguments must be an object");
176
+ }
177
+ const record = input;
178
+ const question = readString(record, ["question", "query", "prompt"]);
179
+ const page = readPageRef(record);
180
+ const action = normalizeAction(record.action, question, page);
181
+ const rawRepoName = record.repoName ??
182
+ record.repo ??
183
+ record.repos ??
184
+ record.repository ??
185
+ record.repositories ??
186
+ record.githubRepo ??
187
+ record.githubRepos;
188
+ const repoNames = normalizeRepoNames(rawRepoName);
189
+ if (action === "question") {
190
+ if (!question)
191
+ throw new Error("question is required when action is question");
192
+ return {
193
+ action,
194
+ repoName: repoNames.length > 1 ? repoNames : repoNames[0],
195
+ question,
196
+ };
197
+ }
198
+ if (repoNames.length !== 1) {
199
+ throw new Error(`${action} action requires exactly one repository`);
200
+ }
201
+ // page is meaningful only for contents; structure/question ignore it.
202
+ return {
203
+ action,
204
+ repoName: repoNames[0],
205
+ ...(action === "contents" && page !== undefined ? { page } : {}),
206
+ };
207
+ }
208
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/extensions/deepwiki/schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { StringEnum } from \"@earendil-works/pi-ai\";\nimport { type Static, Type } from \"typebox\";\n\nimport { normalizePageRef } from \"./contents.ts\";\n\nexport const DEEPWIKI_ACTIONS = [\"structure\", \"contents\", \"question\"] as const;\nconst MAX_QUESTION_REPOS = 10;\n\nconst DeepWikiActionSchema = StringEnum(DEEPWIKI_ACTIONS, {\n\tdescription:\n\t\t\"DeepWiki operation: structure lists generated wiki pages for one repo, contents reads the full generated wiki for one repo, and question answers focused repo/reference/comparison questions across up to 10 repos.\",\n});\n\nexport const DeepWikiParamsSchema = Type.Object({\n\taction: DeepWikiActionSchema,\n\trepoName: Type.Union([\n\t\tType.String({\n\t\t\tminLength: 1,\n\t\t\tdescription:\n\t\t\t\t'One public GitHub repo as \"owner/repo\" (preferred), or a GitHub/DeepWiki URL. Required for structure and contents; for question with a single repo use this string form — not a one-element array.',\n\t\t}),\n\t\tType.Array(\n\t\t\tType.String({\n\t\t\t\tminLength: 1,\n\t\t\t\tdescription: 'Public GitHub repo in \"owner/repo\" format.',\n\t\t\t}),\n\t\t\t{\n\t\t\t\tminItems: 1,\n\t\t\t\tmaxItems: MAX_QUESTION_REPOS,\n\t\t\t\tdescription:\n\t\t\t\t\t\"Only for action question when comparing 2-10 repos. Each entry is owner/repo. For one repo use a string repoName instead.\",\n\t\t\t},\n\t\t),\n\t]),\n\tquestion: Type.Optional(\n\t\tType.String({\n\t\t\tminLength: 1,\n\t\t\tdescription:\n\t\t\t\t\"Required for action question. Ask a focused question about architecture, APIs, implementation patterns, extension points, onboarding, or cross-repo comparison.\",\n\t\t}),\n\t),\n\tpage: Type.Optional(\n\t\tType.Union([Type.String({ minLength: 1 }), Type.Number()], {\n\t\t\tdescription:\n\t\t\t\t'Only for action contents: one page by 1-based index or by title from structure (e.g. \"Extension System\") — titles do not include outline numbers like \"4.4\". Run structure first if unsure. Prefer page reads over omitting page.',\n\t\t}),\n\t),\n});\n\nexport type DeepWikiAction = (typeof DEEPWIKI_ACTIONS)[number];\nexport type DeepWikiParams = Static<typeof DeepWikiParamsSchema>;\n\nconst ACTION_ALIASES: Record<string, DeepWikiAction> = {\n\task: \"question\",\n\task_question: \"question\",\n\tcontents: \"contents\",\n\tcontent: \"contents\",\n\tfull: \"contents\",\n\tmap: \"structure\",\n\tpages: \"structure\",\n\tquestion: \"question\",\n\tquery: \"question\",\n\tread_wiki_contents: \"contents\",\n\tread_wiki_structure: \"structure\",\n\tstructure: \"structure\",\n\ttopics: \"structure\",\n\twiki: \"contents\",\n};\n\nconst GITHUB_OWNER_RE = /^[A-Za-z0-9](?:[A-Za-z0-9-]{0,38}[A-Za-z0-9])?$/;\nconst GITHUB_REPO_RE = /^[A-Za-z0-9._-]{1,100}$/;\n\nfunction readString(record: Record<string, unknown>, keys: string[]): string | undefined {\n\tfor (const key of keys) {\n\t\tconst value = record[key];\n\t\tif (typeof value === \"string\" && value.trim()) return value.trim();\n\t}\n\treturn undefined;\n}\n\nfunction readPageRef(record: Record<string, unknown>): string | number | undefined {\n\tfor (const key of [\"page\", \"pageName\", \"pageTitle\"]) {\n\t\tconst value = record[key];\n\t\tif (typeof value === \"number\" && Number.isFinite(value)) return value;\n\t\tif (typeof value === \"string\" && value.trim()) return normalizePageRef(value.trim());\n\t}\n\treturn undefined;\n}\n\nfunction coerceRepoNameInput(value: unknown): unknown {\n\tif (Array.isArray(value)) return value;\n\tif (typeof value !== \"string\") return value;\n\tconst trimmed = value.trim();\n\tif (!trimmed.startsWith(\"[\")) return value;\n\ttry {\n\t\tconst parsed: unknown = JSON.parse(trimmed);\n\t\tif (Array.isArray(parsed)) return parsed;\n\t} catch {\n\t\t/* keep original string */\n\t}\n\treturn value;\n}\n\nfunction normalizeAction(\n\taction: unknown,\n\tquestion: string | undefined,\n\tpage: string | number | undefined,\n): DeepWikiAction {\n\tif (typeof action === \"string\") {\n\t\tconst key = action\n\t\t\t.trim()\n\t\t\t.toLowerCase()\n\t\t\t.replace(/[\\s-]+/g, \"_\");\n\t\tif (!key) return inferAction(question, page);\n\t\tconst normalized = ACTION_ALIASES[key];\n\t\tif (normalized) return normalized;\n\t\tthrow new Error(`unsupported deepwiki action: ${action}`);\n\t}\n\tif (action !== undefined && action !== null) {\n\t\tthrow new Error(\"deepwiki action must be a string\");\n\t}\n\treturn inferAction(question, page);\n}\n\nfunction inferAction(question: string | undefined, page: string | number | undefined): DeepWikiAction {\n\tif (question) return \"question\";\n\tif (page !== undefined) return \"contents\";\n\treturn \"structure\";\n}\n\nexport function normalizeRepoName(value: unknown): string {\n\tif (typeof value !== \"string\") throw new Error(\"repoName is required\");\n\n\tconst input = value.trim().replace(/^\\/+|\\/+$/g, \"\");\n\tif (!input) throw new Error(\"repoName is required\");\n\n\tlet owner: string | undefined;\n\tlet repo: string | undefined;\n\n\tconst sshMatch = input.match(/^git@github\\.com:([^/\\s]+)\\/([^/\\s]+?)(?:\\.git)?$/i);\n\tif (sshMatch) {\n\t\towner = sshMatch[1];\n\t\trepo = sshMatch[2];\n\t} else if (/^(?:https?:\\/\\/)?(?:www\\.)?(?:github\\.com|deepwiki\\.com)\\//i.test(input)) {\n\t\tconst urlInput = /^[a-z][a-z0-9+.-]*:\\/\\//i.test(input) ? input : `https://${input}`;\n\t\ttry {\n\t\t\tconst url = new URL(urlInput);\n\t\t\tconst [urlOwner, urlRepo] = url.pathname.replace(/^\\/+|\\/+$/g, \"\").split(\"/\");\n\t\t\towner = urlOwner;\n\t\t\trepo = urlRepo?.replace(/\\.git$/i, \"\");\n\t\t} catch {\n\t\t\tthrow new Error('repoName must use \"owner/repo\" format');\n\t\t}\n\t} else {\n\t\tconst parts = input.replace(/\\.git$/i, \"\").split(\"/\");\n\t\tif (parts.length === 2) {\n\t\t\t[owner, repo] = parts;\n\t\t}\n\t}\n\n\tif (!owner || !repo || !GITHUB_OWNER_RE.test(owner) || !GITHUB_REPO_RE.test(repo)) {\n\t\tthrow new Error('repoName must use a public GitHub \"owner/repo\" identifier');\n\t}\n\treturn `${owner}/${repo}`;\n}\n\nfunction normalizeRepoNames(value: unknown): string[] {\n\tvalue = coerceRepoNameInput(value);\n\tconst values =\n\t\ttypeof value === \"string\" && value.includes(\",\")\n\t\t\t? value\n\t\t\t\t\t.split(\",\")\n\t\t\t\t\t.map((repo) => repo.trim())\n\t\t\t\t\t.filter(Boolean)\n\t\t\t: Array.isArray(value)\n\t\t\t\t? value\n\t\t\t\t: [value];\n\tconst repos = values.map((item) => normalizeRepoName(item));\n\tconst seen = new Set<string>();\n\tconst unique: string[] = [];\n\tfor (const repo of repos) {\n\t\tconst key = repo.toLowerCase();\n\t\tif (seen.has(key)) continue;\n\t\tseen.add(key);\n\t\tunique.push(repo);\n\t}\n\tif (unique.length > MAX_QUESTION_REPOS) {\n\t\tthrow new Error(`question action supports at most ${MAX_QUESTION_REPOS} repositories`);\n\t}\n\treturn unique;\n}\n\nexport function normalizeDeepWikiParams(input: unknown): DeepWikiParams {\n\tif (!input || typeof input !== \"object\") {\n\t\tthrow new Error(\"deepwiki arguments must be an object\");\n\t}\n\n\tconst record = input as Record<string, unknown>;\n\tconst question = readString(record, [\"question\", \"query\", \"prompt\"]);\n\tconst page = readPageRef(record);\n\tconst action = normalizeAction(record.action, question, page);\n\tconst rawRepoName =\n\t\trecord.repoName ??\n\t\trecord.repo ??\n\t\trecord.repos ??\n\t\trecord.repository ??\n\t\trecord.repositories ??\n\t\trecord.githubRepo ??\n\t\trecord.githubRepos;\n\tconst repoNames = normalizeRepoNames(rawRepoName);\n\n\tif (action === \"question\") {\n\t\tif (!question) throw new Error(\"question is required when action is question\");\n\t\treturn {\n\t\t\taction,\n\t\t\trepoName: repoNames.length > 1 ? repoNames : repoNames[0],\n\t\t\tquestion,\n\t\t};\n\t}\n\n\tif (repoNames.length !== 1) {\n\t\tthrow new Error(`${action} action requires exactly one repository`);\n\t}\n\n\t// page is meaningful only for contents; structure/question ignore it.\n\treturn {\n\t\taction,\n\t\trepoName: repoNames[0],\n\t\t...(action === \"contents\" && page !== undefined ? { page } : {}),\n\t};\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { InlineExtension } from "../core/extensions/types.ts";
2
+ export declare const builtInExtensions: InlineExtension[];
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AASnE,eAAO,MAAM,iBAAiB,EAAE,eAAe,EAQ9C,CAAC","sourcesContent":["import type { InlineExtension } from \"../core/extensions/types.ts\";\nimport deepwikiExtension from \"./deepwiki/index.ts\";\nimport llamaExtension from \"./llama/index.ts\";\nimport questionExtension from \"./question/index.ts\";\nimport rewindExtension from \"./rewind/index.ts\";\nimport routerExtension from \"./router/index.ts\";\nimport statuslineExtension from \"./statusline/index.ts\";\nimport todoExtension from \"./todo/index.ts\";\n\nexport const builtInExtensions: InlineExtension[] = [\n\t{ name: \"llama.cpp\", factory: llamaExtension, hidden: true },\n\t{ name: \"deepwiki\", factory: deepwikiExtension, hidden: true },\n\t{ name: \"question\", factory: questionExtension, hidden: true },\n\t{ name: \"rewind\", factory: rewindExtension, hidden: true },\n\t{ name: \"router\", factory: routerExtension, hidden: true },\n\t{ name: \"statusline\", factory: statuslineExtension, hidden: true },\n\t{ name: \"todo\", factory: todoExtension, hidden: true },\n];\n"]}
@@ -0,0 +1,17 @@
1
+ import deepwikiExtension from "./deepwiki/index.js";
2
+ import llamaExtension from "./llama/index.js";
3
+ import questionExtension from "./question/index.js";
4
+ import rewindExtension from "./rewind/index.js";
5
+ import routerExtension from "./router/index.js";
6
+ import statuslineExtension from "./statusline/index.js";
7
+ import todoExtension from "./todo/index.js";
8
+ export const builtInExtensions = [
9
+ { name: "llama.cpp", factory: llamaExtension, hidden: true },
10
+ { name: "deepwiki", factory: deepwikiExtension, hidden: true },
11
+ { name: "question", factory: questionExtension, hidden: true },
12
+ { name: "rewind", factory: rewindExtension, hidden: true },
13
+ { name: "router", factory: routerExtension, hidden: true },
14
+ { name: "statusline", factory: statuslineExtension, hidden: true },
15
+ { name: "todo", factory: todoExtension, hidden: true },
16
+ ];
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AACA,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AACxD,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,MAAM,CAAC,MAAM,iBAAiB,GAAsB;IACnD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE;IAC5D,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,EAAE;IAC9D,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,EAAE;IAC9D,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE;IAC1D,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE;IAC1D,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,IAAI,EAAE;IAClE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE;CACtD,CAAC","sourcesContent":["import type { InlineExtension } from \"../core/extensions/types.ts\";\nimport deepwikiExtension from \"./deepwiki/index.ts\";\nimport llamaExtension from \"./llama/index.ts\";\nimport questionExtension from \"./question/index.ts\";\nimport rewindExtension from \"./rewind/index.ts\";\nimport routerExtension from \"./router/index.ts\";\nimport statuslineExtension from \"./statusline/index.ts\";\nimport todoExtension from \"./todo/index.ts\";\n\nexport const builtInExtensions: InlineExtension[] = [\n\t{ name: \"llama.cpp\", factory: llamaExtension, hidden: true },\n\t{ name: \"deepwiki\", factory: deepwikiExtension, hidden: true },\n\t{ name: \"question\", factory: questionExtension, hidden: true },\n\t{ name: \"rewind\", factory: rewindExtension, hidden: true },\n\t{ name: \"router\", factory: routerExtension, hidden: true },\n\t{ name: \"statusline\", factory: statuslineExtension, hidden: true },\n\t{ name: \"todo\", factory: todoExtension, hidden: true },\n];\n"]}