pi-ui-extend 0.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 (420) hide show
  1. package/README.md +307 -0
  2. package/bin/pix.mjs +219 -0
  3. package/dist/app/app.d.ts +96 -0
  4. package/dist/app/app.js +871 -0
  5. package/dist/app/blink-controller.d.ts +23 -0
  6. package/dist/app/blink-controller.js +82 -0
  7. package/dist/app/cli.d.ts +8 -0
  8. package/dist/app/cli.js +83 -0
  9. package/dist/app/clipboard.d.ts +1 -0
  10. package/dist/app/clipboard.js +24 -0
  11. package/dist/app/command-controller.d.ts +18 -0
  12. package/dist/app/command-controller.js +58 -0
  13. package/dist/app/command-host.d.ts +44 -0
  14. package/dist/app/command-host.js +1 -0
  15. package/dist/app/command-model-actions.d.ts +12 -0
  16. package/dist/app/command-model-actions.js +176 -0
  17. package/dist/app/command-navigation-actions.d.ts +19 -0
  18. package/dist/app/command-navigation-actions.js +267 -0
  19. package/dist/app/command-registry.d.ts +32 -0
  20. package/dist/app/command-registry.js +225 -0
  21. package/dist/app/command-runtime.d.ts +5 -0
  22. package/dist/app/command-runtime.js +32 -0
  23. package/dist/app/command-session-actions.d.ts +20 -0
  24. package/dist/app/command-session-actions.js +295 -0
  25. package/dist/app/constants.d.ts +52 -0
  26. package/dist/app/constants.js +103 -0
  27. package/dist/app/conversation-entry-renderer.d.ts +21 -0
  28. package/dist/app/conversation-entry-renderer.js +81 -0
  29. package/dist/app/conversation-shell-renderer.d.ts +5 -0
  30. package/dist/app/conversation-shell-renderer.js +43 -0
  31. package/dist/app/conversation-tool-renderer.d.ts +16 -0
  32. package/dist/app/conversation-tool-renderer.js +216 -0
  33. package/dist/app/conversation-viewport.d.ts +55 -0
  34. package/dist/app/conversation-viewport.js +252 -0
  35. package/dist/app/dcp-stats.d.ts +2 -0
  36. package/dist/app/dcp-stats.js +116 -0
  37. package/dist/app/editor-layout-renderer.d.ts +31 -0
  38. package/dist/app/editor-layout-renderer.js +211 -0
  39. package/dist/app/editor-panels.d.ts +4 -0
  40. package/dist/app/editor-panels.js +130 -0
  41. package/dist/app/extension-actions-controller.d.ts +22 -0
  42. package/dist/app/extension-actions-controller.js +60 -0
  43. package/dist/app/extension-event-bus.d.ts +3 -0
  44. package/dist/app/extension-event-bus.js +23 -0
  45. package/dist/app/extension-ui-controller.d.ts +57 -0
  46. package/dist/app/extension-ui-controller.js +532 -0
  47. package/dist/app/file-link-opener.d.ts +2 -0
  48. package/dist/app/file-link-opener.js +66 -0
  49. package/dist/app/file-links.d.ts +10 -0
  50. package/dist/app/file-links.js +117 -0
  51. package/dist/app/guards.d.ts +3 -0
  52. package/dist/app/guards.js +9 -0
  53. package/dist/app/icons.d.ts +37 -0
  54. package/dist/app/icons.js +97 -0
  55. package/dist/app/id.d.ts +1 -0
  56. package/dist/app/id.js +4 -0
  57. package/dist/app/image-click-targets.d.ts +5 -0
  58. package/dist/app/image-click-targets.js +32 -0
  59. package/dist/app/image-opener.d.ts +2 -0
  60. package/dist/app/image-opener.js +64 -0
  61. package/dist/app/input-action-controller.d.ts +47 -0
  62. package/dist/app/input-action-controller.js +209 -0
  63. package/dist/app/input-controller.d.ts +60 -0
  64. package/dist/app/input-controller.js +425 -0
  65. package/dist/app/input-paste-handler.d.ts +27 -0
  66. package/dist/app/input-paste-handler.js +146 -0
  67. package/dist/app/menu-items-controller.d.ts +32 -0
  68. package/dist/app/menu-items-controller.js +182 -0
  69. package/dist/app/message-content.d.ts +8 -0
  70. package/dist/app/message-content.js +115 -0
  71. package/dist/app/model-ref.d.ts +13 -0
  72. package/dist/app/model-ref.js +50 -0
  73. package/dist/app/model-usage-controller.d.ts +35 -0
  74. package/dist/app/model-usage-controller.js +99 -0
  75. package/dist/app/model-usage-status.d.ts +125 -0
  76. package/dist/app/model-usage-status.js +749 -0
  77. package/dist/app/mouse-controller.d.ts +182 -0
  78. package/dist/app/mouse-controller.js +968 -0
  79. package/dist/app/native-modifiers.d.ts +3 -0
  80. package/dist/app/native-modifiers.js +60 -0
  81. package/dist/app/nerd-font-controller.d.ts +11 -0
  82. package/dist/app/nerd-font-controller.js +90 -0
  83. package/dist/app/popup-action-controller.d.ts +44 -0
  84. package/dist/app/popup-action-controller.js +278 -0
  85. package/dist/app/popup-menu-controller.d.ts +183 -0
  86. package/dist/app/popup-menu-controller.js +1070 -0
  87. package/dist/app/prompt-enhancer-controller.d.ts +40 -0
  88. package/dist/app/prompt-enhancer-controller.js +215 -0
  89. package/dist/app/queued-message-controller.d.ts +62 -0
  90. package/dist/app/queued-message-controller.js +377 -0
  91. package/dist/app/render-controller.d.ts +41 -0
  92. package/dist/app/render-controller.js +378 -0
  93. package/dist/app/render-text.d.ts +19 -0
  94. package/dist/app/render-text.js +67 -0
  95. package/dist/app/request-history.d.ts +23 -0
  96. package/dist/app/request-history.js +131 -0
  97. package/dist/app/runtime.d.ts +39 -0
  98. package/dist/app/runtime.js +195 -0
  99. package/dist/app/screen-selection.d.ts +6 -0
  100. package/dist/app/screen-selection.js +9 -0
  101. package/dist/app/screen-styler.d.ts +34 -0
  102. package/dist/app/screen-styler.js +168 -0
  103. package/dist/app/scroll-controller.d.ts +51 -0
  104. package/dist/app/scroll-controller.js +207 -0
  105. package/dist/app/session-event-controller.d.ts +69 -0
  106. package/dist/app/session-event-controller.js +338 -0
  107. package/dist/app/session-history.d.ts +23 -0
  108. package/dist/app/session-history.js +164 -0
  109. package/dist/app/session-lifecycle-controller.d.ts +55 -0
  110. package/dist/app/session-lifecycle-controller.js +116 -0
  111. package/dist/app/session-search.d.ts +24 -0
  112. package/dist/app/session-search.js +215 -0
  113. package/dist/app/shell-command.d.ts +27 -0
  114. package/dist/app/shell-command.js +176 -0
  115. package/dist/app/shell-controller.d.ts +28 -0
  116. package/dist/app/shell-controller.js +124 -0
  117. package/dist/app/slash-commands.d.ts +6 -0
  118. package/dist/app/slash-commands.js +75 -0
  119. package/dist/app/startup-checks.d.ts +8 -0
  120. package/dist/app/startup-checks.js +59 -0
  121. package/dist/app/startup-info.d.ts +3 -0
  122. package/dist/app/startup-info.js +176 -0
  123. package/dist/app/status-controller.d.ts +35 -0
  124. package/dist/app/status-controller.js +105 -0
  125. package/dist/app/status-line-renderer.d.ts +68 -0
  126. package/dist/app/status-line-renderer.js +453 -0
  127. package/dist/app/subagents-files.d.ts +10 -0
  128. package/dist/app/subagents-files.js +193 -0
  129. package/dist/app/subagents-model.d.ts +23 -0
  130. package/dist/app/subagents-model.js +224 -0
  131. package/dist/app/subagents-widget-controller.d.ts +43 -0
  132. package/dist/app/subagents-widget-controller.js +311 -0
  133. package/dist/app/tab-line-renderer.d.ts +26 -0
  134. package/dist/app/tab-line-renderer.js +222 -0
  135. package/dist/app/tabs-controller.d.ts +100 -0
  136. package/dist/app/tabs-controller.js +885 -0
  137. package/dist/app/terminal-controller.d.ts +40 -0
  138. package/dist/app/terminal-controller.js +135 -0
  139. package/dist/app/terminal-edit-shortcuts.d.ts +23 -0
  140. package/dist/app/terminal-edit-shortcuts.js +138 -0
  141. package/dist/app/terminal-output-buffer.d.ts +20 -0
  142. package/dist/app/terminal-output-buffer.js +52 -0
  143. package/dist/app/toast-controller.d.ts +13 -0
  144. package/dist/app/toast-controller.js +40 -0
  145. package/dist/app/toast-renderer.d.ts +9 -0
  146. package/dist/app/toast-renderer.js +79 -0
  147. package/dist/app/todo-model.d.ts +22 -0
  148. package/dist/app/todo-model.js +179 -0
  149. package/dist/app/todo-widget-controller.d.ts +21 -0
  150. package/dist/app/todo-widget-controller.js +59 -0
  151. package/dist/app/tool-block-renderer.d.ts +26 -0
  152. package/dist/app/tool-block-renderer.js +439 -0
  153. package/dist/app/types.d.ts +550 -0
  154. package/dist/app/types.js +1 -0
  155. package/dist/app/update.d.ts +36 -0
  156. package/dist/app/update.js +315 -0
  157. package/dist/app/voice-controller.d.ts +52 -0
  158. package/dist/app/voice-controller.js +600 -0
  159. package/dist/app/workspace-actions-controller.d.ts +40 -0
  160. package/dist/app/workspace-actions-controller.js +215 -0
  161. package/dist/app/workspace-undo.d.ts +44 -0
  162. package/dist/app/workspace-undo.js +215 -0
  163. package/dist/config.d.ts +62 -0
  164. package/dist/config.js +527 -0
  165. package/dist/context-progress-bar.d.ts +17 -0
  166. package/dist/context-progress-bar.js +48 -0
  167. package/dist/default-pix-config.d.ts +1 -0
  168. package/dist/default-pix-config.js +375 -0
  169. package/dist/fuzzy.d.ts +23 -0
  170. package/dist/fuzzy.js +165 -0
  171. package/dist/input-editor-files.d.ts +15 -0
  172. package/dist/input-editor-files.js +62 -0
  173. package/dist/input-editor.d.ts +186 -0
  174. package/dist/input-editor.js +835 -0
  175. package/dist/main.d.ts +1 -0
  176. package/dist/main.js +12 -0
  177. package/dist/markdown-format.d.ts +22 -0
  178. package/dist/markdown-format.js +542 -0
  179. package/dist/sdk.d.ts +3 -0
  180. package/dist/sdk.js +1 -0
  181. package/dist/syntax-highlight.d.ts +22 -0
  182. package/dist/syntax-highlight.js +528 -0
  183. package/dist/terminal-width.d.ts +6 -0
  184. package/dist/terminal-width.js +245 -0
  185. package/dist/theme.d.ts +56 -0
  186. package/dist/theme.js +118 -0
  187. package/dist/tool-renderers/apply-patch.d.ts +2 -0
  188. package/dist/tool-renderers/apply-patch.js +36 -0
  189. package/dist/tool-renderers/ast.d.ts +2 -0
  190. package/dist/tool-renderers/ast.js +5 -0
  191. package/dist/tool-renderers/compress.d.ts +2 -0
  192. package/dist/tool-renderers/compress.js +126 -0
  193. package/dist/tool-renderers/index.d.ts +3 -0
  194. package/dist/tool-renderers/index.js +44 -0
  195. package/dist/tool-renderers/question.d.ts +2 -0
  196. package/dist/tool-renderers/question.js +88 -0
  197. package/dist/tool-renderers/read.d.ts +2 -0
  198. package/dist/tool-renderers/read.js +36 -0
  199. package/dist/tool-renderers/repo.d.ts +2 -0
  200. package/dist/tool-renderers/repo.js +13 -0
  201. package/dist/tool-renderers/shell.d.ts +3 -0
  202. package/dist/tool-renderers/shell.js +27 -0
  203. package/dist/tool-renderers/skill.d.ts +2 -0
  204. package/dist/tool-renderers/skill.js +132 -0
  205. package/dist/tool-renderers/subagents.d.ts +2 -0
  206. package/dist/tool-renderers/subagents.js +51 -0
  207. package/dist/tool-renderers/todo.d.ts +2 -0
  208. package/dist/tool-renderers/todo.js +9 -0
  209. package/dist/tool-renderers/types.d.ts +42 -0
  210. package/dist/tool-renderers/types.js +1 -0
  211. package/dist/tool-renderers/utils.d.ts +31 -0
  212. package/dist/tool-renderers/utils.js +230 -0
  213. package/dist/tool-renderers/web.d.ts +3 -0
  214. package/dist/tool-renderers/web.js +9 -0
  215. package/dist/tool-renderers/write.d.ts +2 -0
  216. package/dist/tool-renderers/write.js +42 -0
  217. package/dist/ui.d.ts +56 -0
  218. package/dist/ui.js +94 -0
  219. package/docs/release.md +81 -0
  220. package/extensions/question/contract.ts +100 -0
  221. package/extensions/question/index.ts +34 -0
  222. package/extensions/question/render.ts +28 -0
  223. package/extensions/question/result.ts +86 -0
  224. package/extensions/question/tool-description.ts +11 -0
  225. package/extensions/question/tui.ts +629 -0
  226. package/extensions/question/types.ts +123 -0
  227. package/extensions/session-title/config.ts +169 -0
  228. package/extensions/session-title/index.ts +459 -0
  229. package/extensions/terminal-bell/index.ts +315 -0
  230. package/external/pi-tools-suite/README.md +242 -0
  231. package/external/pi-tools-suite/index.ts +1 -0
  232. package/external/pi-tools-suite/licenses/ollama-pi-web-search.MIT +21 -0
  233. package/external/pi-tools-suite/licenses/opencode-mystatus-MIT.txt +21 -0
  234. package/external/pi-tools-suite/package.json +53 -0
  235. package/external/pi-tools-suite/src/antigravity-auth/auth-store.ts +194 -0
  236. package/external/pi-tools-suite/src/antigravity-auth/commands.ts +80 -0
  237. package/external/pi-tools-suite/src/antigravity-auth/constants.ts +26 -0
  238. package/external/pi-tools-suite/src/antigravity-auth/headers.ts +20 -0
  239. package/external/pi-tools-suite/src/antigravity-auth/index.ts +104 -0
  240. package/external/pi-tools-suite/src/antigravity-auth/models.ts +86 -0
  241. package/external/pi-tools-suite/src/antigravity-auth/oauth.ts +305 -0
  242. package/external/pi-tools-suite/src/antigravity-auth/payload.ts +423 -0
  243. package/external/pi-tools-suite/src/antigravity-auth/status.ts +78 -0
  244. package/external/pi-tools-suite/src/antigravity-auth/stream.ts +302 -0
  245. package/external/pi-tools-suite/src/antigravity-auth/types.ts +113 -0
  246. package/external/pi-tools-suite/src/ast-grep/index.ts +6 -0
  247. package/external/pi-tools-suite/src/ast-grep/render.ts +70 -0
  248. package/external/pi-tools-suite/src/ast-grep/schema.ts +109 -0
  249. package/external/pi-tools-suite/src/ast-grep/tool.ts +345 -0
  250. package/external/pi-tools-suite/src/ast-grep/types.ts +55 -0
  251. package/external/pi-tools-suite/src/ast-grep/utils.ts +65 -0
  252. package/external/pi-tools-suite/src/async-subagents/async-subagents.sample.jsonc +222 -0
  253. package/external/pi-tools-suite/src/async-subagents/commands.ts +518 -0
  254. package/external/pi-tools-suite/src/async-subagents/constants.ts +11 -0
  255. package/external/pi-tools-suite/src/async-subagents/core/agent-strategy.ts +74 -0
  256. package/external/pi-tools-suite/src/async-subagents/core/attachment-bridge.ts +133 -0
  257. package/external/pi-tools-suite/src/async-subagents/core/cleanup.ts +66 -0
  258. package/external/pi-tools-suite/src/async-subagents/core/concurrency.ts +90 -0
  259. package/external/pi-tools-suite/src/async-subagents/core/config.ts +819 -0
  260. package/external/pi-tools-suite/src/async-subagents/core/log-limits.ts +166 -0
  261. package/external/pi-tools-suite/src/async-subagents/core/model-fallback.ts +133 -0
  262. package/external/pi-tools-suite/src/async-subagents/core/paths.ts +47 -0
  263. package/external/pi-tools-suite/src/async-subagents/core/pi-invocation.ts +35 -0
  264. package/external/pi-tools-suite/src/async-subagents/core/presets.ts +67 -0
  265. package/external/pi-tools-suite/src/async-subagents/core/process.ts +15 -0
  266. package/external/pi-tools-suite/src/async-subagents/core/prompt.ts +66 -0
  267. package/external/pi-tools-suite/src/async-subagents/core/registry.ts +224 -0
  268. package/external/pi-tools-suite/src/async-subagents/core/retry.ts +191 -0
  269. package/external/pi-tools-suite/src/async-subagents/core/routing.ts +259 -0
  270. package/external/pi-tools-suite/src/async-subagents/core/sessions.ts +138 -0
  271. package/external/pi-tools-suite/src/async-subagents/core/spawn.ts +688 -0
  272. package/external/pi-tools-suite/src/async-subagents/core/state.ts +281 -0
  273. package/external/pi-tools-suite/src/async-subagents/core/stop.ts +131 -0
  274. package/external/pi-tools-suite/src/async-subagents/core/structured-result.ts +237 -0
  275. package/external/pi-tools-suite/src/async-subagents/core/tool-guard.ts +34 -0
  276. package/external/pi-tools-suite/src/async-subagents/core/types.ts +150 -0
  277. package/external/pi-tools-suite/src/async-subagents/core/ultrawork-auto.ts +184 -0
  278. package/external/pi-tools-suite/src/async-subagents/core/utils.ts +11 -0
  279. package/external/pi-tools-suite/src/async-subagents/format.ts +41 -0
  280. package/external/pi-tools-suite/src/async-subagents/index.ts +422 -0
  281. package/external/pi-tools-suite/src/async-subagents/lib.ts +88 -0
  282. package/external/pi-tools-suite/src/async-subagents/live.ts +10 -0
  283. package/external/pi-tools-suite/src/async-subagents/polling.ts +83 -0
  284. package/external/pi-tools-suite/src/async-subagents/render.ts +230 -0
  285. package/external/pi-tools-suite/src/async-subagents/subagent-overlay.ts +77 -0
  286. package/external/pi-tools-suite/src/async-subagents/tasks.ts +120 -0
  287. package/external/pi-tools-suite/src/async-subagents/tools/cleanup.ts +99 -0
  288. package/external/pi-tools-suite/src/async-subagents/tools/result.ts +179 -0
  289. package/external/pi-tools-suite/src/async-subagents/tools/spawn.ts +372 -0
  290. package/external/pi-tools-suite/src/async-subagents/tools/status.ts +60 -0
  291. package/external/pi-tools-suite/src/async-subagents/tools/stop.ts +79 -0
  292. package/external/pi-tools-suite/src/async-subagents/tools/subagents.ts +152 -0
  293. package/external/pi-tools-suite/src/async-subagents/tools/wait.ts +67 -0
  294. package/external/pi-tools-suite/src/async-subagents/types.ts +45 -0
  295. package/external/pi-tools-suite/src/async-subagents/ui.ts +5 -0
  296. package/external/pi-tools-suite/src/compress/commands.ts +440 -0
  297. package/external/pi-tools-suite/src/compress/compress-tool.ts +368 -0
  298. package/external/pi-tools-suite/src/compress/compression-blocks.ts +524 -0
  299. package/external/pi-tools-suite/src/compress/config.ts +310 -0
  300. package/external/pi-tools-suite/src/compress/dcp-tui-filter.ts +498 -0
  301. package/external/pi-tools-suite/src/compress/index.ts +397 -0
  302. package/external/pi-tools-suite/src/compress/prompts.ts +269 -0
  303. package/external/pi-tools-suite/src/compress/pruner-candidates.ts +176 -0
  304. package/external/pi-tools-suite/src/compress/pruner-compression-blocks.ts +260 -0
  305. package/external/pi-tools-suite/src/compress/pruner-message-ids.ts +147 -0
  306. package/external/pi-tools-suite/src/compress/pruner-metadata.ts +268 -0
  307. package/external/pi-tools-suite/src/compress/pruner-nudge.ts +315 -0
  308. package/external/pi-tools-suite/src/compress/pruner-tools.ts +263 -0
  309. package/external/pi-tools-suite/src/compress/pruner-types.ts +25 -0
  310. package/external/pi-tools-suite/src/compress/pruner.ts +92 -0
  311. package/external/pi-tools-suite/src/compress/state.ts +486 -0
  312. package/external/pi-tools-suite/src/compress/ui.ts +308 -0
  313. package/external/pi-tools-suite/src/config.ts +176 -0
  314. package/external/pi-tools-suite/src/context-usage.ts +31 -0
  315. package/external/pi-tools-suite/src/default-pi-tools-suite-config.ts +355 -0
  316. package/external/pi-tools-suite/src/index.ts +46 -0
  317. package/external/pi-tools-suite/src/lib/lsp.ts +62 -0
  318. package/external/pi-tools-suite/src/lib/project.ts +42 -0
  319. package/external/pi-tools-suite/src/lib/tool-args.ts +137 -0
  320. package/external/pi-tools-suite/src/lsp/_shared/config.ts +156 -0
  321. package/external/pi-tools-suite/src/lsp/_shared/glob.ts +60 -0
  322. package/external/pi-tools-suite/src/lsp/_shared/output.ts +102 -0
  323. package/external/pi-tools-suite/src/lsp/_shared/paths.ts +138 -0
  324. package/external/pi-tools-suite/src/lsp/_shared/runner.ts +64 -0
  325. package/external/pi-tools-suite/src/lsp/_shared/template.ts +23 -0
  326. package/external/pi-tools-suite/src/lsp/_shared/trust.ts +116 -0
  327. package/external/pi-tools-suite/src/lsp/_shared/types.ts +98 -0
  328. package/external/pi-tools-suite/src/lsp/async.ts +29 -0
  329. package/external/pi-tools-suite/src/lsp/child-process.ts +81 -0
  330. package/external/pi-tools-suite/src/lsp/client.ts +340 -0
  331. package/external/pi-tools-suite/src/lsp/constants.ts +9 -0
  332. package/external/pi-tools-suite/src/lsp/diagnostics-store.ts +64 -0
  333. package/external/pi-tools-suite/src/lsp/documents.ts +24 -0
  334. package/external/pi-tools-suite/src/lsp/index.ts +31 -0
  335. package/external/pi-tools-suite/src/lsp/lsp-utils.ts +37 -0
  336. package/external/pi-tools-suite/src/lsp/manager.ts +190 -0
  337. package/external/pi-tools-suite/src/lsp/mutation-events.ts +78 -0
  338. package/external/pi-tools-suite/src/lsp/renderer.ts +1 -0
  339. package/external/pi-tools-suite/src/lsp/tool-result.ts +6 -0
  340. package/external/pi-tools-suite/src/lsp/tsserver.ts +107 -0
  341. package/external/pi-tools-suite/src/lsp/types.ts +15 -0
  342. package/external/pi-tools-suite/src/model-tools/apply-patch.ts +590 -0
  343. package/external/pi-tools-suite/src/model-tools/index.ts +430 -0
  344. package/external/pi-tools-suite/src/model-tools/path-utils.ts +6 -0
  345. package/external/pi-tools-suite/src/model-tools/tool-args.ts +11 -0
  346. package/external/pi-tools-suite/src/prompt-commands/index.ts +349 -0
  347. package/external/pi-tools-suite/src/repo-discovery/index.ts +384 -0
  348. package/external/pi-tools-suite/src/repo-discovery/project.ts +7 -0
  349. package/external/pi-tools-suite/src/startup-section.ts +13 -0
  350. package/external/pi-tools-suite/src/terminal-bell/index.ts +309 -0
  351. package/external/pi-tools-suite/src/todo/index.ts +201 -0
  352. package/external/pi-tools-suite/src/todo/state/auto-clear.ts +13 -0
  353. package/external/pi-tools-suite/src/todo/state/invariants.ts +21 -0
  354. package/external/pi-tools-suite/src/todo/state/persistence.ts +94 -0
  355. package/external/pi-tools-suite/src/todo/state/replay.ts +38 -0
  356. package/external/pi-tools-suite/src/todo/state/selectors.ts +49 -0
  357. package/external/pi-tools-suite/src/todo/state/state-reducer.ts +362 -0
  358. package/external/pi-tools-suite/src/todo/state/state.ts +18 -0
  359. package/external/pi-tools-suite/src/todo/state/store.ts +52 -0
  360. package/external/pi-tools-suite/src/todo/state/task-graph.ts +57 -0
  361. package/external/pi-tools-suite/src/todo/todo.ts +487 -0
  362. package/external/pi-tools-suite/src/todo/tool/response-envelope.ts +143 -0
  363. package/external/pi-tools-suite/src/todo/tool/types.ts +188 -0
  364. package/external/pi-tools-suite/src/todo/view/format.ts +18 -0
  365. package/external/pi-tools-suite/src/todo/view/labels.ts +13 -0
  366. package/external/pi-tools-suite/src/tool-descriptions.ts +369 -0
  367. package/external/pi-tools-suite/src/usage/index.ts +152 -0
  368. package/external/pi-tools-suite/src/usage/lib/copilot.ts +535 -0
  369. package/external/pi-tools-suite/src/usage/lib/google.ts +478 -0
  370. package/external/pi-tools-suite/src/usage/lib/openai.ts +268 -0
  371. package/external/pi-tools-suite/src/usage/lib/types.ts +114 -0
  372. package/external/pi-tools-suite/src/usage/lib/utils.ts +134 -0
  373. package/external/pi-tools-suite/src/usage/lib/zhipu.ts +228 -0
  374. package/external/pi-tools-suite/src/web-search/index.ts +397 -0
  375. package/package.json +89 -0
  376. package/skills/context7/SKILL.md +69 -0
  377. package/skills/context7/scripts/context7.sh +73 -0
  378. package/skills/handoff/SKILL.md +15 -0
  379. package/skills/pdf/LICENSE.txt +30 -0
  380. package/skills/pdf/SKILL.md +314 -0
  381. package/skills/pdf/forms.md +294 -0
  382. package/skills/pdf/reference.md +612 -0
  383. package/skills/pdf/scripts/check_bounding_boxes.py +65 -0
  384. package/skills/pdf/scripts/check_fillable_fields.py +11 -0
  385. package/skills/pdf/scripts/convert_pdf_to_images.py +33 -0
  386. package/skills/pdf/scripts/create_validation_image.py +37 -0
  387. package/skills/pdf/scripts/extract_form_field_info.py +122 -0
  388. package/skills/pdf/scripts/extract_form_structure.py +115 -0
  389. package/skills/pdf/scripts/fill_fillable_fields.py +98 -0
  390. package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
  391. package/skills/playwright-cli/SKILL.md +388 -0
  392. package/skills/playwright-cli/references/element-attributes.md +23 -0
  393. package/skills/playwright-cli/references/playwright-tests.md +39 -0
  394. package/skills/playwright-cli/references/request-mocking.md +87 -0
  395. package/skills/playwright-cli/references/running-code.md +241 -0
  396. package/skills/playwright-cli/references/session-management.md +225 -0
  397. package/skills/playwright-cli/references/spec-driven-testing.md +305 -0
  398. package/skills/playwright-cli/references/storage-state.md +275 -0
  399. package/skills/playwright-cli/references/test-generation.md +134 -0
  400. package/skills/playwright-cli/references/tracing.md +139 -0
  401. package/skills/playwright-cli/references/video-recording.md +143 -0
  402. package/skills/simplify/SKILL.md +51 -0
  403. package/skills/skill-creator/LICENSE.txt +202 -0
  404. package/skills/skill-creator/SKILL.md +485 -0
  405. package/skills/skill-creator/agents/analyzer.md +274 -0
  406. package/skills/skill-creator/agents/comparator.md +202 -0
  407. package/skills/skill-creator/agents/grader.md +223 -0
  408. package/skills/skill-creator/assets/eval_review.html +146 -0
  409. package/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  410. package/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  411. package/skills/skill-creator/references/schemas.md +430 -0
  412. package/skills/skill-creator/scripts/__init__.py +0 -0
  413. package/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  414. package/skills/skill-creator/scripts/generate_report.py +326 -0
  415. package/skills/skill-creator/scripts/improve_description.py +247 -0
  416. package/skills/skill-creator/scripts/package_skill.py +136 -0
  417. package/skills/skill-creator/scripts/quick_validate.py +103 -0
  418. package/skills/skill-creator/scripts/run_eval.py +310 -0
  419. package/skills/skill-creator/scripts/run_loop.py +328 -0
  420. package/skills/skill-creator/scripts/utils.py +47 -0
@@ -0,0 +1,88 @@
1
+ import { argsRecord, expandedTextFromParts, renderWithArgsAndResult } from "./utils.js";
2
+ const CUSTOM_ANSWER_LABEL = "Something else…";
3
+ export const renderQuestionTool = (input) => {
4
+ const args = argsRecord(input);
5
+ const questions = questionItems(args?.questions);
6
+ const count = questions?.length;
7
+ if (!questions) {
8
+ return renderWithArgsAndResult(input, {
9
+ headerArgs: count != null ? `${count} question${count === 1 ? "" : "s"}` : undefined,
10
+ collapsedBody: input.output,
11
+ });
12
+ }
13
+ const resultText = formatQuestionResult(input.details, questions)
14
+ ?? (input.output.trim() || (input.status === "running" ? "waiting for answers…" : "(empty)"));
15
+ const questionsText = formatQuestions(questions);
16
+ return {
17
+ headerArgs: formatHeader(questions),
18
+ collapsedBody: resultText,
19
+ ...expandedTextFromParts({ text: questionsText, color: "muted" }, { text: input.isError ? `error\n${resultText}` : resultText }),
20
+ };
21
+ };
22
+ function questionItems(value) {
23
+ if (!Array.isArray(value))
24
+ return undefined;
25
+ return value.filter(isPlainRecord);
26
+ }
27
+ function formatHeader(questions) {
28
+ const labels = questions
29
+ .map((question) => stringValue(question.label) ?? stringValue(question.id))
30
+ .filter((label) => label !== undefined);
31
+ const countText = `${questions.length} question${questions.length === 1 ? "" : "s"}`;
32
+ if (labels.length === 0)
33
+ return countText;
34
+ const suffix = labels.length > 3 ? ", …" : "";
35
+ return `${countText} · ${labels.slice(0, 3).join(", ")}${suffix}`;
36
+ }
37
+ function formatQuestions(questions) {
38
+ return questions.map((question, index) => {
39
+ const title = `◇ ${index + 1}/${questions.length} ${questionLabel(question)}`;
40
+ const prompt = stringValue(question.prompt) ?? "(no prompt)";
41
+ const choices = Array.isArray(question.choices)
42
+ ? question.choices.filter(isPlainRecord)
43
+ : [];
44
+ const choiceLines = choices.map((choice, choiceIndex) => {
45
+ const label = stringValue(choice.label) ?? stringValue(choice.value) ?? `Choice ${choiceIndex + 1}`;
46
+ const description = stringValue(choice.description);
47
+ return description ? ` ${choiceIndex + 1}. ${label} — ${description}` : ` ${choiceIndex + 1}. ${label}`;
48
+ });
49
+ choiceLines.push(` ${choices.length + 1}. ${CUSTOM_ANSWER_LABEL} (custom answer)`);
50
+ return [title, ` ${prompt}`, ...choiceLines].join("\n");
51
+ }).join("\n\n");
52
+ }
53
+ function formatQuestionResult(details, questions) {
54
+ if (!isPlainRecord(details))
55
+ return undefined;
56
+ const questionLabels = new Map(questions.map((question) => [stringValue(question.id), questionLabel(question)]));
57
+ const questionDetails = details;
58
+ if (questionDetails.canceled === true) {
59
+ const reason = stringValue(questionDetails.reason) ?? "canceled";
60
+ const fallback = stringValue(questionDetails.fallbackPrompt);
61
+ return fallback ? `⚠ canceled: ${reason}\n\n${fallback}` : `⚠ canceled: ${reason}`;
62
+ }
63
+ if (!Array.isArray(questionDetails.answers))
64
+ return undefined;
65
+ if (questionDetails.answers.length === 0)
66
+ return "question returned no answers";
67
+ return questionDetails.answers
68
+ .filter(isPlainRecord)
69
+ .map((answer) => formatAnswer(answer, questionLabels))
70
+ .join("\n");
71
+ }
72
+ function formatAnswer(answer, questionLabels) {
73
+ const label = questionLabels.get(stringValue(answer.id)) ?? stringValue(answer.id) ?? "Question";
74
+ const answerLabel = stringValue(answer.label) ?? "(empty)";
75
+ if (answer.wasCustom === true)
76
+ return `✓ ${label}: ${answerLabel} (custom answer)`;
77
+ const index = typeof answer.index === "number" && Number.isFinite(answer.index) ? `choice ${answer.index}` : "choice";
78
+ return `✓ ${label}: ${answerLabel} (${index})`;
79
+ }
80
+ function questionLabel(question) {
81
+ return stringValue(question.label) ?? stringValue(question.id) ?? "Question";
82
+ }
83
+ function stringValue(value) {
84
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
85
+ }
86
+ function isPlainRecord(value) {
87
+ return typeof value === "object" && value !== null && !Array.isArray(value);
88
+ }
@@ -0,0 +1,2 @@
1
+ import type { ToolRendererMiddleware } from "./types.js";
2
+ export declare const renderReadTool: ToolRendererMiddleware;
@@ -0,0 +1,36 @@
1
+ import { isAbsolute, relative, sep } from "node:path";
2
+ import { syntaxHighlightLanguageForPath } from "../syntax-highlight.js";
3
+ import { numberArg, stringArg } from "./utils.js";
4
+ export const renderReadTool = (input) => {
5
+ const filePath = stringArg(input, ["path", "file", "target"]);
6
+ if (!filePath)
7
+ return undefined;
8
+ const displayPath = pathForDisplay(filePath, input.cwd);
9
+ const offset = numberArg(input, ["offset"]);
10
+ const limit = numberArg(input, ["limit"]);
11
+ const range = offset != null ? `:${offset}${limit != null ? `+${limit}` : ""}` : "";
12
+ const rendered = {
13
+ headerArgs: `${displayPath}${range}`,
14
+ collapsedBody: input.output,
15
+ expandedText: input.output || (input.status === "running" ? "running…" : "(empty)"),
16
+ };
17
+ const syntaxLanguage = !input.isError && input.output ? syntaxHighlightLanguageForPath(filePath) : undefined;
18
+ if (!syntaxLanguage)
19
+ return rendered;
20
+ return {
21
+ ...rendered,
22
+ syntaxHighlight: {
23
+ language: syntaxLanguage,
24
+ startLine: 0,
25
+ startColumn: 0,
26
+ },
27
+ };
28
+ };
29
+ function pathForDisplay(filePath, cwd) {
30
+ if (!cwd || !isAbsolute(filePath))
31
+ return filePath;
32
+ const relativePath = relative(cwd, filePath);
33
+ if (!relativePath)
34
+ return ".";
35
+ return relativePath === ".." || relativePath.startsWith(`..${sep}`) || isAbsolute(relativePath) ? filePath : relativePath.replace(/\\/gu, "/");
36
+ }
@@ -0,0 +1,2 @@
1
+ import type { ToolRendererMiddleware } from "./types.js";
2
+ export declare const renderRepoTool: ToolRendererMiddleware;
@@ -0,0 +1,13 @@
1
+ import { argsRecord, formatArgsInline } from "./utils.js";
2
+ const PREFERRED_KEYS = ["target", "path", "args", "maxLines", "maxBytes"];
3
+ export const renderRepoTool = (input) => {
4
+ const args = argsRecord(input);
5
+ if (!args)
6
+ return undefined;
7
+ const result = input.output || (input.status === "running" ? "running…" : "(empty)");
8
+ return {
9
+ headerArgs: formatArgsInline(args, PREFERRED_KEYS),
10
+ collapsedBody: input.output,
11
+ expandedText: result,
12
+ };
13
+ };
@@ -0,0 +1,3 @@
1
+ import type { ToolRendererMiddleware } from "./types.js";
2
+ export declare const renderShellTool: ToolRendererMiddleware;
3
+ export declare const renderExecTool: ToolRendererMiddleware;
@@ -0,0 +1,27 @@
1
+ import { argsAndResultExpandedText, compactCommand, renderWithArgsAndResult, stringArg } from "./utils.js";
2
+ export const renderShellTool = (input) => {
3
+ const command = compactCommand(stringArg(input, ["command", "cmd", "script"]));
4
+ if (!command)
5
+ return undefined;
6
+ const result = input.output || (input.status === "running" ? "running…" : "(empty)");
7
+ if (isGitDiffCommand(command)) {
8
+ return {
9
+ headerArgs: command,
10
+ bodyStyle: "diff",
11
+ preserveAnsi: true,
12
+ collapsedBody: input.output,
13
+ expandedText: result,
14
+ };
15
+ }
16
+ const expanded = argsAndResultExpandedText(input, `$ ${command}`);
17
+ return {
18
+ headerArgs: command,
19
+ preserveAnsi: true,
20
+ collapsedBody: input.output || `$ ${command}`,
21
+ ...expanded,
22
+ };
23
+ };
24
+ export const renderExecTool = (input) => renderWithArgsAndResult(input);
25
+ function isGitDiffCommand(command) {
26
+ return /(?:^|[;&|()]\s*)git\b[^;&|()]*\bdiff\b/.test(command);
27
+ }
@@ -0,0 +1,2 @@
1
+ import type { ToolRenderInput, ToolRenderResult } from "./types.js";
2
+ export declare function applySkillReadDisplay(input: ToolRenderInput, rendered: ToolRenderResult): ToolRenderResult;
@@ -0,0 +1,132 @@
1
+ import { argsRecord, compactCommand, expandedTextFromParts, lineCount, resultText, stringArg } from "./utils.js";
2
+ const SKILL_TOOL_NAME = "skill";
3
+ const SKILL_FILE_RE = /(?:^|[\\/])SKILL\.md$/i;
4
+ const SHELL_SKILL_FILE_RE = /(?:^|[\s'"`=:[\\/])SKILL\.md(?:$|[\s'"`;|&)>),:])/i;
5
+ const SHELL_SKILL_PATH_RE = /(?:^|[\s'"`=:[(])([^\s'"`;|&)>),]+SKILL\.md)(?=$|[\s'"`;|&)>),:])/i;
6
+ const READ_COMMAND_RE = /(?:^|[;&|()\s])(?:cat|bat|batcat|less|more|head|tail|sed|awk|grep|rg|ripgrep|nl|wc|file)\b/i;
7
+ const MUTATING_SKILL_COMMAND_RE = /(?:>\s*|>>\s*|tee\b[^\n;&|]*|sed\b[^\n;&|]*\s-i(?:\b|[A-Za-z]))[^\n;&|]*SKILL\.md/i;
8
+ export function applySkillReadDisplay(input, rendered) {
9
+ const skill = skillReadInfo(input);
10
+ if (!skill)
11
+ return rendered;
12
+ const pathText = skill.path ?? "";
13
+ const expanded = expandedTextFromParts({ text: pathText, color: "muted" }, { text: resultText(input, { empty: !pathText }) });
14
+ const resultStartLine = pathText ? lineCount(pathText) + 1 : 0;
15
+ return {
16
+ ...rendered,
17
+ toolName: SKILL_TOOL_NAME,
18
+ headerArgs: skill.name,
19
+ syntaxHighlight: input.output && !input.isError ? skillSyntaxHighlight(input.output, resultStartLine) : undefined,
20
+ ...expanded,
21
+ };
22
+ }
23
+ function skillSyntaxHighlight(output, resultStartLine) {
24
+ const frontmatterLineCount = yamlFrontmatterLineCount(output);
25
+ if (frontmatterLineCount === 0)
26
+ return { language: "markdown", startLine: resultStartLine, startColumn: 0 };
27
+ const yamlHighlight = {
28
+ language: "yaml",
29
+ startLine: resultStartLine,
30
+ endLine: resultStartLine + frontmatterLineCount,
31
+ startColumn: 0,
32
+ };
33
+ const markdownHighlight = {
34
+ language: "markdown",
35
+ startLine: resultStartLine + frontmatterLineCount,
36
+ startColumn: 0,
37
+ };
38
+ return [yamlHighlight, markdownHighlight];
39
+ }
40
+ function yamlFrontmatterLineCount(output) {
41
+ const lines = output.split("\n");
42
+ if (lines[0]?.trim() !== "---")
43
+ return 0;
44
+ for (let index = 1; index < lines.length; index += 1) {
45
+ if (lines[index]?.trim() === "---")
46
+ return index + 1;
47
+ }
48
+ return 0;
49
+ }
50
+ function skillReadInfo(input) {
51
+ let path;
52
+ if (isShellTool(input.toolName)) {
53
+ path = shellSkillPath(input);
54
+ }
55
+ else if (isReadTool(input.toolName)) {
56
+ path = skillPathArgument(input);
57
+ }
58
+ if (!path)
59
+ return undefined;
60
+ return {
61
+ path,
62
+ name: skillNameFromPath(path, shellWorkingDirectory(input)),
63
+ };
64
+ }
65
+ function isShellTool(toolName) {
66
+ const normalized = toolName.split(/[.:/]/).filter(Boolean).at(-1) ?? toolName;
67
+ return ["bash", "Bash", "shell", "shell_command"].includes(normalized);
68
+ }
69
+ function isReadTool(toolName) {
70
+ const normalized = toolName.split(/[.:/]/).filter(Boolean).at(-1) ?? toolName;
71
+ return normalized.toLowerCase() === "read";
72
+ }
73
+ function shellSkillPath(input) {
74
+ const command = compactCommand(stringArg(input, ["command", "cmd", "script"]));
75
+ if (!command || !SHELL_SKILL_FILE_RE.test(command) || !READ_COMMAND_RE.test(command))
76
+ return undefined;
77
+ if (MUTATING_SKILL_COMMAND_RE.test(command))
78
+ return undefined;
79
+ return SHELL_SKILL_PATH_RE.exec(command)?.[1] ?? "SKILL.md";
80
+ }
81
+ function skillPathArgument(input) {
82
+ const record = argsRecord(input);
83
+ if (!record)
84
+ return undefined;
85
+ for (const [key, value] of Object.entries(record)) {
86
+ if (!isPathLikeKey(key))
87
+ continue;
88
+ const path = findSkillPath(value);
89
+ if (path)
90
+ return path;
91
+ }
92
+ return undefined;
93
+ }
94
+ function isPathLikeKey(key) {
95
+ return /(?:path|file|target|url|uri|glob|cwd|workdir|directory|dir)s?$/i.test(key);
96
+ }
97
+ function findSkillPath(value) {
98
+ if (typeof value === "string") {
99
+ const path = value.trim();
100
+ return SKILL_FILE_RE.test(path) ? path : undefined;
101
+ }
102
+ if (Array.isArray(value)) {
103
+ for (const item of value) {
104
+ const path = findSkillPath(item);
105
+ if (path)
106
+ return path;
107
+ }
108
+ return undefined;
109
+ }
110
+ if (typeof value === "object" && value !== null) {
111
+ for (const nested of Object.values(value)) {
112
+ const path = findSkillPath(nested);
113
+ if (path)
114
+ return path;
115
+ }
116
+ }
117
+ return undefined;
118
+ }
119
+ function skillNameFromPath(path, cwd) {
120
+ const normalized = path.replace(/\\/g, "/").replace(/\/+$/, "");
121
+ const parts = normalized.split("/").filter(Boolean);
122
+ const fileName = parts.at(-1);
123
+ const parentName = fileName?.toLowerCase() === "skill.md" ? parts.at(-2) : undefined;
124
+ if (parentName)
125
+ return parentName;
126
+ if (cwd)
127
+ return cwd.replace(/\\/g, "/").replace(/\/+$/, "").split("/").filter(Boolean).at(-1) ?? "skill";
128
+ return "skill";
129
+ }
130
+ function shellWorkingDirectory(input) {
131
+ return stringArg(input, ["cwd", "workdir"]);
132
+ }
@@ -0,0 +1,2 @@
1
+ import type { ToolRendererMiddleware } from "./types.js";
2
+ export declare const renderSubagentsTool: ToolRendererMiddleware;
@@ -0,0 +1,51 @@
1
+ import { argsRecord, renderWithArgsAndResult, stringArg } from "./utils.js";
2
+ export const renderSubagentsTool = (input) => {
3
+ const action = stringArg(input, ["action"]);
4
+ const args = argsRecord(input);
5
+ const taskCount = Array.isArray(args?.tasks) ? args.tasks.length : undefined;
6
+ const headerArgs = [action, taskCount != null ? `${taskCount} task${taskCount === 1 ? "" : "s"}` : undefined].filter(Boolean).join(" · ");
7
+ const collapsedBody = taskCount != null
8
+ ? `${input.status === "running" ? "starting" : "started"} ${taskCount} subagent${taskCount === 1 ? "" : "s"}`
9
+ : oneLineSummary(action, input);
10
+ return renderWithArgsAndResult(input, { headerArgs, collapsedBody });
11
+ };
12
+ function oneLineSummary(action, input) {
13
+ if (!input.output)
14
+ return input.status === "running" ? "running…" : "done";
15
+ if (input.isError)
16
+ return firstLine(input.output);
17
+ switch (action) {
18
+ case "status": return compactStatus(input.output);
19
+ case "result": return compactResult(input.output);
20
+ case "wait": return compactStatus(input.output);
21
+ case "stop": return firstLine(input.output);
22
+ case "cleanup": return firstLine(input.output);
23
+ default: return firstLine(input.output);
24
+ }
25
+ }
26
+ function compactStatus(output) {
27
+ // Extract agent status lines into a compact one-liner
28
+ const lines = output.split("\n").map((l) => l.trim()).filter(Boolean);
29
+ if (lines.length === 0)
30
+ return "done";
31
+ const running = lines.filter((l) => /running/i.test(l)).length;
32
+ const completed = lines.filter((l) => /completed|done/i.test(l)).length;
33
+ const failed = lines.filter((l) => /failed|error/i.test(l)).length;
34
+ const parts = [];
35
+ if (running > 0)
36
+ parts.push(`${running} running`);
37
+ if (completed > 0)
38
+ parts.push(`${completed} completed`);
39
+ if (failed > 0)
40
+ parts.push(`${failed} failed`);
41
+ return parts.length > 0 ? parts.join(", ") : `${lines.length} agent${lines.length === 1 ? "" : "s"}`;
42
+ }
43
+ function compactResult(output) {
44
+ // Summarize: show first meaningful line
45
+ const first = firstLine(output);
46
+ // Truncate very long lines
47
+ return first.length > 200 ? first.slice(0, 197) + "…" : first;
48
+ }
49
+ function firstLine(text) {
50
+ return text.split("\n").map((l) => l.trim()).find(Boolean) ?? "";
51
+ }
@@ -0,0 +1,2 @@
1
+ import type { ToolRendererMiddleware } from "./types.js";
2
+ export declare const renderTodoTool: ToolRendererMiddleware;
@@ -0,0 +1,9 @@
1
+ import { renderWithArgsAndResult, stringArg } from "./utils.js";
2
+ export const renderTodoTool = (input) => {
3
+ const action = stringArg(input, ["action"]);
4
+ const subject = stringArg(input, ["subject"]);
5
+ return renderWithArgsAndResult(input, {
6
+ headerArgs: [action, subject].filter(Boolean).join(" · "),
7
+ collapsedBody: input.output,
8
+ });
9
+ };
@@ -0,0 +1,42 @@
1
+ import type { Theme } from "../theme.js";
2
+ import type { ToolBodySyntaxHighlights } from "../syntax-highlight.js";
3
+ export type ToolHeaderSegment = {
4
+ start: number;
5
+ end: number;
6
+ foreground?: string;
7
+ background?: string;
8
+ bold?: boolean;
9
+ strikethrough?: boolean;
10
+ };
11
+ export type ToolBodyLineStyle = {
12
+ startLine: number;
13
+ endLine?: number;
14
+ foreground?: string;
15
+ color?: keyof Theme["colors"];
16
+ bold?: boolean;
17
+ underline?: boolean;
18
+ strikethrough?: boolean;
19
+ };
20
+ export type ToolRenderInput = {
21
+ toolName: string;
22
+ argsText: string;
23
+ output: string;
24
+ details?: unknown;
25
+ isError: boolean;
26
+ status: "running" | "done";
27
+ cwd?: string;
28
+ colors?: Theme["colors"];
29
+ toolColor?: string;
30
+ };
31
+ export type ToolRenderResult = {
32
+ toolName?: string;
33
+ headerArgs?: string;
34
+ headerArgsSegments?: readonly ToolHeaderSegment[];
35
+ bodyLineStyles?: readonly ToolBodyLineStyle[];
36
+ bodyStyle?: "diff";
37
+ preserveAnsi?: boolean;
38
+ syntaxHighlight?: ToolBodySyntaxHighlights | undefined;
39
+ collapsedBody: string;
40
+ expandedText: string;
41
+ };
42
+ export type ToolRendererMiddleware = (input: ToolRenderInput) => ToolRenderResult | undefined;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,31 @@
1
+ import type { ToolBodyLineStyle, ToolRenderInput, ToolRenderResult } from "./types.js";
2
+ type PlainRecord = Record<string, unknown>;
3
+ export declare function normalizeToolName(toolName: string): string;
4
+ export declare function parseArgsText(argsText: string): unknown;
5
+ export declare function argsRecord(input: ToolRenderInput): PlainRecord | undefined;
6
+ export declare function stringArg(input: ToolRenderInput, keys: readonly string[]): string | undefined;
7
+ export declare function numberArg(input: ToolRenderInput, keys: readonly string[]): number | undefined;
8
+ export declare function defaultToolRender(input: ToolRenderInput): ToolRenderResult;
9
+ export declare function renderWithArgsAndResult(input: ToolRenderInput, options?: {
10
+ headerArgs?: string | undefined;
11
+ argumentsBody?: string | undefined;
12
+ collapsedBody?: string | undefined;
13
+ }): ToolRenderResult;
14
+ export declare function resultSection(input: ToolRenderInput): string;
15
+ export declare function argsAndResultExpandedText(input: ToolRenderInput, argsBlock: string): Pick<ToolRenderResult, "expandedText" | "bodyLineStyles">;
16
+ export declare function resultText(input: ToolRenderInput, options?: {
17
+ empty?: boolean;
18
+ }): string;
19
+ export declare function expandedTextFromParts(...parts: readonly ExpandedTextPart[]): Pick<ToolRenderResult, "expandedText" | "bodyLineStyles">;
20
+ export declare function labeledBlock(title: string, body: string | undefined): string;
21
+ export declare function joinSections(...parts: readonly string[]): string;
22
+ export declare function indent(text: string, spaces?: number): string;
23
+ export declare function lineCount(text: string): number;
24
+ type ExpandedTextPart = {
25
+ text?: string | undefined;
26
+ } & Omit<ToolBodyLineStyle, "startLine" | "endLine">;
27
+ export declare function formatArgsInline(args: unknown, preferredKeys?: readonly string[]): string;
28
+ export declare function formatArgsBlock(args: unknown, preferredKeys?: readonly string[]): string;
29
+ export declare function summarizePatch(text: string | undefined): string | undefined;
30
+ export declare function compactCommand(command: string | undefined): string | undefined;
31
+ export {};