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,430 @@
1
+ import {
2
+ createBashToolDefinition,
3
+ createEditToolDefinition,
4
+ createFindToolDefinition,
5
+ createGrepToolDefinition,
6
+ createLsToolDefinition,
7
+ createReadToolDefinition,
8
+ createWriteToolDefinition,
9
+ defineTool,
10
+ type ExtensionAPI,
11
+ type ExtensionContext,
12
+ type ToolDefinition,
13
+ type ToolRenderResultOptions,
14
+ } from "@mariozechner/pi-coding-agent";
15
+ import { realpath } from "node:fs/promises";
16
+ import { resolve } from "node:path";
17
+ import { Type, type TSchema } from "typebox";
18
+ import { CODEX_ALIAS_TOOL_DESCRIPTIONS, REPO_DISCOVERY_TOOL_NAMES, claudeAliasToolDescriptions } from "../tool-descriptions";
19
+ import { hasIndexedProjectRoot } from "../lib/project.js";
20
+ import { applyPatch } from "./apply-patch";
21
+ import { isPathInside } from "./path-utils";
22
+ import {
23
+ detectModelProfile,
24
+ prepareApplyPatchArgs,
25
+ selectSuitableToolsForModel,
26
+ toEditArgs,
27
+ toGrepArgs,
28
+ toReadArgs,
29
+ toShellCommand,
30
+ toWriteArgs,
31
+ type ModelProfile,
32
+ } from "./tool-args";
33
+
34
+ const CLAUDE_ALIAS_TOOL_DESCRIPTIONS = claudeAliasToolDescriptions(false);
35
+ const CLAUDE_ALIAS_TOOLS = Object.values(CLAUDE_ALIAS_TOOL_DESCRIPTIONS).map((tool) => tool.name);
36
+ const CODEX_ALIAS_TOOLS = ["read", ...Object.values(CODEX_ALIAS_TOOL_DESCRIPTIONS).map((tool) => tool.name)];
37
+ const BUILTIN_TOOLS = ["read", "bash", "edit", "write", "grep", "find", "ls"] as const;
38
+ const LEGACY_MANAGED_TOOLS = ["LS", "shell_command"];
39
+ const MANAGED_TOOLS = new Set([...CLAUDE_ALIAS_TOOLS, ...CODEX_ALIAS_TOOLS, ...BUILTIN_TOOLS, ...LEGACY_MANAGED_TOOLS]);
40
+ const REPO_DISCOVERY_TOOL_NAME_SET = new Set(REPO_DISCOVERY_TOOL_NAMES);
41
+ const MAX_BUILTIN_DEFINITIONS = 64;
42
+
43
+ type ShellAliasInput = {
44
+ command?: string;
45
+ description?: string;
46
+ cwd?: string;
47
+ workdir?: string;
48
+ timeout?: number;
49
+ timeout_ms?: number;
50
+ run_in_background?: boolean;
51
+ };
52
+
53
+ type BashToolDefinition = ReturnType<typeof createBashToolDefinition>;
54
+ type AnyToolDefinition = ToolDefinition<any, any, any>;
55
+ type BuiltinToolName = (typeof BUILTIN_TOOLS)[number];
56
+ type RenderContext = {
57
+ args: any;
58
+ cwd: string;
59
+ [key: string]: any;
60
+ };
61
+ type RenderTheme = Parameters<NonNullable<BashToolDefinition["renderCall"]>>[1];
62
+
63
+ const builtinDefinitions = new Map<string, AnyToolDefinition>();
64
+
65
+ function timeoutSeconds(input: { timeout?: number; timeout_ms?: number }): number | undefined {
66
+ if (typeof input.timeout === "number") return input.timeout;
67
+ if (typeof input.timeout_ms === "number") return Math.max(1, Math.ceil(input.timeout_ms / 1000));
68
+ return undefined;
69
+ }
70
+
71
+ function createBuiltinDefinition(name: BuiltinToolName, cwd: string): AnyToolDefinition {
72
+ switch (name) {
73
+ case "read":
74
+ return createReadToolDefinition(cwd);
75
+ case "edit":
76
+ return createEditToolDefinition(cwd);
77
+ case "write":
78
+ return createWriteToolDefinition(cwd);
79
+ case "bash":
80
+ return createBashToolDefinition(cwd);
81
+ case "grep":
82
+ return createGrepToolDefinition(cwd);
83
+ case "find":
84
+ return createFindToolDefinition(cwd);
85
+ case "ls":
86
+ return createLsToolDefinition(cwd);
87
+ }
88
+ }
89
+
90
+ function getRenderDefinition(name: BuiltinToolName, cwd: string): AnyToolDefinition {
91
+ const key = `${name}:${cwd}`;
92
+ const existing = builtinDefinitions.get(key);
93
+ if (existing) {
94
+ builtinDefinitions.delete(key);
95
+ builtinDefinitions.set(key, existing);
96
+ return existing;
97
+ }
98
+ const definition = createBuiltinDefinition(name, cwd);
99
+ if (builtinDefinitions.size >= MAX_BUILTIN_DEFINITIONS) {
100
+ const oldestKey = builtinDefinitions.keys().next().value;
101
+ if (oldestKey) builtinDefinitions.delete(oldestKey);
102
+ }
103
+ builtinDefinitions.set(key, definition);
104
+ return definition;
105
+ }
106
+
107
+ function toBashRenderArgs(input: ShellAliasInput): { command: string; timeout?: number } {
108
+ return { command: toShellCommand(input), timeout: timeoutSeconds(input) };
109
+ }
110
+
111
+ function withRenderArgs(context: unknown, args: unknown): RenderContext {
112
+ return { ...(context as RenderContext), args };
113
+ }
114
+
115
+ function replaceRenderedTitle(text: string, builtinName: BuiltinToolName, aliasLabel: string): string {
116
+ return aliasLabel === builtinName ? text : text.replace(builtinName, aliasLabel);
117
+ }
118
+
119
+ function applyAliasToolTitle(component: unknown, builtinName: BuiltinToolName, aliasLabel: string): boolean {
120
+ if (aliasLabel === builtinName || !component || typeof component !== "object") return false;
121
+ const target = component as { text?: unknown; setText?: (text: string) => void; children?: unknown[]; invalidate?: () => void };
122
+ if (typeof target.text === "string") {
123
+ const next = replaceRenderedTitle(target.text, builtinName, aliasLabel);
124
+ if (next !== target.text) {
125
+ if (typeof target.setText === "function") target.setText(next);
126
+ else target.text = next;
127
+ return true;
128
+ }
129
+ return false;
130
+ }
131
+ let changed = false;
132
+ for (const child of target.children ?? []) changed = applyAliasToolTitle(child, builtinName, aliasLabel) || changed;
133
+ if (changed) target.invalidate?.();
134
+ return changed;
135
+ }
136
+
137
+ function renderAliasCall(
138
+ name: BuiltinToolName,
139
+ args: unknown,
140
+ theme: RenderTheme,
141
+ context: unknown,
142
+ aliasLabel: string = name,
143
+ ) {
144
+ const renderContext = context as RenderContext;
145
+ const renderCall = getRenderDefinition(name, renderContext.cwd).renderCall;
146
+ if (!renderCall) throw new Error(`${name} renderer is unavailable`);
147
+ const component = renderCall(args, theme, withRenderArgs(renderContext, args) as any);
148
+ applyAliasToolTitle(component, name, aliasLabel);
149
+ return component;
150
+ }
151
+
152
+ function renderAliasResult(
153
+ name: BuiltinToolName,
154
+ args: unknown,
155
+ result: unknown,
156
+ options: ToolRenderResultOptions,
157
+ theme: RenderTheme,
158
+ context: unknown,
159
+ aliasLabel: string = name,
160
+ ) {
161
+ const renderContext = context as RenderContext;
162
+ const renderResult = getRenderDefinition(name, renderContext.cwd).renderResult;
163
+ if (!renderResult) throw new Error(`${name} renderer is unavailable`);
164
+ const component = renderResult(
165
+ result as Parameters<NonNullable<AnyToolDefinition["renderResult"]>>[0],
166
+ options,
167
+ theme,
168
+ withRenderArgs(renderContext, args) as any,
169
+ );
170
+ applyAliasToolTitle((renderContext.state as { callComponent?: unknown } | undefined)?.callComponent, name, aliasLabel);
171
+ applyAliasToolTitle(component, name, aliasLabel);
172
+ return component;
173
+ }
174
+
175
+ function renderShellAliasCall(args: ShellAliasInput, theme: RenderTheme, context: unknown) {
176
+ return renderAliasCall("bash", toBashRenderArgs(args), theme, context, "shell");
177
+ }
178
+
179
+ function renderShellAliasResult(result: unknown, options: ToolRenderResultOptions, theme: RenderTheme, context: unknown) {
180
+ const args = toBashRenderArgs((context as RenderContext).args as ShellAliasInput);
181
+ return renderAliasResult("bash", args, result, options, theme, context, "shell");
182
+ }
183
+
184
+ async function resolveWorkdir(ctx: ExtensionContext, workdir: string | undefined): Promise<string | undefined> {
185
+ if (!workdir) return undefined;
186
+ const cwdRealPath = await realpath(ctx.cwd);
187
+ const absolutePath = resolve(ctx.cwd, workdir);
188
+ const workdirRealPath = await realpath(absolutePath);
189
+ if (isPathInside(cwdRealPath, workdirRealPath)) return workdirRealPath;
190
+ throw new Error(`Working directory escapes workspace: ${workdir}`);
191
+ }
192
+
193
+ type BuiltinAliasOptions<Input> = {
194
+ name: string;
195
+ label: string;
196
+ description: string;
197
+ parameters: TSchema;
198
+ builtinName: BuiltinToolName;
199
+ toArgs: (params: Input) => unknown;
200
+ renderShell?: "self";
201
+ validate?: (params: Input) => void;
202
+ };
203
+
204
+ function registerBuiltinAlias<Input>(pi: ExtensionAPI, options: BuiltinAliasOptions<Input>): void {
205
+ pi.registerTool(
206
+ defineTool({
207
+ name: options.name,
208
+ label: options.label,
209
+ description: options.description,
210
+ parameters: options.parameters,
211
+ renderShell: options.renderShell,
212
+ renderCall: (params, theme, context) =>
213
+ renderAliasCall(options.builtinName, options.toArgs(params as Input), theme, context, options.label),
214
+ renderResult: (result, renderOptions, theme, context) =>
215
+ renderAliasResult(
216
+ options.builtinName,
217
+ options.toArgs((context as RenderContext).args as Input),
218
+ result,
219
+ renderOptions,
220
+ theme,
221
+ context,
222
+ options.label,
223
+ ),
224
+ async execute(id, params, signal, onUpdate, ctx) {
225
+ const input = params as Input;
226
+ options.validate?.(input);
227
+ return createBuiltinDefinition(options.builtinName, ctx.cwd).execute(
228
+ id,
229
+ options.toArgs(input),
230
+ signal,
231
+ onUpdate,
232
+ ctx,
233
+ );
234
+ },
235
+ }),
236
+ );
237
+ }
238
+
239
+ function registerClaudeAliases(pi: ExtensionAPI, repoDiscovery: boolean): void {
240
+ const descriptions = claudeAliasToolDescriptions(repoDiscovery);
241
+
242
+ registerBuiltinAlias(pi, {
243
+ ...descriptions.Read,
244
+ builtinName: "read",
245
+ parameters: Type.Object({
246
+ file_path: Type.String({ description: "Path to the file to read" }),
247
+ offset: Type.Optional(Type.Number({ description: "Line number to start reading from" })),
248
+ limit: Type.Optional(Type.Number({ description: "Maximum number of lines to read" })),
249
+ }),
250
+ toArgs: toReadArgs,
251
+ });
252
+
253
+ registerBuiltinAlias(pi, {
254
+ ...descriptions.Edit,
255
+ builtinName: "edit",
256
+ parameters: Type.Object({
257
+ file_path: Type.String({ description: "Path to the file to edit" }),
258
+ old_string: Type.String({ description: "Exact text to replace" }),
259
+ new_string: Type.String({ description: "Replacement text" }),
260
+ replace_all: Type.Optional(Type.Boolean({ description: "Not supported by this adapter" })),
261
+ }),
262
+ renderShell: "self",
263
+ toArgs: toEditArgs,
264
+ validate: (params: { replace_all?: boolean }) => {
265
+ if (params.replace_all) throw new Error("Edit.replace_all is not supported by the Pi edit adapter");
266
+ },
267
+ });
268
+
269
+ registerBuiltinAlias(pi, {
270
+ ...descriptions.Write,
271
+ builtinName: "write",
272
+ parameters: Type.Object({
273
+ file_path: Type.String({ description: "Path to the file to write" }),
274
+ content: Type.String({ description: "Complete file contents" }),
275
+ }),
276
+ toArgs: toWriteArgs,
277
+ });
278
+
279
+ registerBuiltinAlias(pi, {
280
+ ...descriptions.Bash,
281
+ builtinName: "bash",
282
+ parameters: Type.Object({
283
+ command: Type.String({ description: "Command to execute" }),
284
+ description: Type.Optional(Type.String({ description: "Short command description" })),
285
+ timeout: Type.Optional(Type.Number({ description: "Timeout in seconds" })),
286
+ run_in_background: Type.Optional(Type.Boolean({ description: "Unsupported by this adapter; omit it." })),
287
+ }),
288
+ toArgs: toBashRenderArgs,
289
+ validate: (params: { run_in_background?: boolean }) => {
290
+ if (params.run_in_background) throw new Error("Bash.run_in_background is not supported by this adapter");
291
+ },
292
+ });
293
+
294
+ registerBuiltinAlias(pi, {
295
+ ...descriptions.Grep,
296
+ builtinName: "grep",
297
+ parameters: Type.Object({
298
+ pattern: Type.String({ description: "Search pattern" }),
299
+ path: Type.Optional(Type.String({ description: "File or directory to search" })),
300
+ glob: Type.Optional(Type.String({ description: "Glob filter" })),
301
+ case_sensitive: Type.Optional(Type.Boolean({ description: "Case-sensitive search" })),
302
+ regex: Type.Optional(Type.Boolean({ description: "Treat pattern as regex" })),
303
+ before_context: Type.Optional(Type.Number({ description: "Lines before each match" })),
304
+ after_context: Type.Optional(Type.Number({ description: "Lines after each match" })),
305
+ context: Type.Optional(Type.Number({ description: "Lines around each match" })),
306
+ max_count: Type.Optional(Type.Number({ description: "Maximum matches" })),
307
+ limit: Type.Optional(Type.Number({ description: "Maximum matches" })),
308
+ }),
309
+ toArgs: toGrepArgs,
310
+ });
311
+
312
+ registerBuiltinAlias(pi, {
313
+ ...descriptions.Glob,
314
+ builtinName: "find",
315
+ parameters: Type.Object({
316
+ pattern: Type.String({ description: "Glob pattern" }),
317
+ path: Type.Optional(Type.String({ description: "Directory to search" })),
318
+ }),
319
+ toArgs: (params) => params,
320
+ });
321
+
322
+ }
323
+
324
+ async function runShellAlias(
325
+ id: string,
326
+ input: ShellAliasInput,
327
+ signal: AbortSignal | undefined,
328
+ onUpdate: Parameters<ReturnType<typeof createBashToolDefinition>["execute"]>[3],
329
+ ctx: ExtensionContext,
330
+ ) {
331
+ const command = toShellCommand(input);
332
+ if (!command) throw new Error("Missing shell command");
333
+ const workdir = await resolveWorkdir(ctx, input.cwd ?? input.workdir);
334
+ const tool = createBashToolDefinition(
335
+ ctx.cwd,
336
+ workdir ? { spawnHook: (spawnContext) => ({ ...spawnContext, cwd: workdir }) } : undefined,
337
+ );
338
+ return tool.execute(id, { command, timeout: timeoutSeconds(input) }, signal, onUpdate, ctx);
339
+ }
340
+
341
+ function registerCodexAliases(pi: ExtensionAPI): void {
342
+ const shellParameters = Type.Object({
343
+ command: Type.String({ description: "The shell script to execute in the user's default shell" }),
344
+ workdir: Type.Optional(Type.String({ description: "Working directory" })),
345
+ cwd: Type.Optional(Type.String({ description: "Working directory" })),
346
+ timeout_ms: Type.Optional(Type.Number({ description: "Timeout in milliseconds" })),
347
+ timeout: Type.Optional(Type.Number({ description: "Timeout in seconds" })),
348
+ });
349
+
350
+ pi.registerTool(
351
+ defineTool({
352
+ ...CODEX_ALIAS_TOOL_DESCRIPTIONS.shellCommand,
353
+ parameters: shellParameters,
354
+ renderCall: renderShellAliasCall,
355
+ renderResult: renderShellAliasResult,
356
+ async execute(id, params, signal, onUpdate, ctx) {
357
+ return runShellAlias(id, params, signal, onUpdate, ctx);
358
+ },
359
+ }),
360
+ );
361
+
362
+ pi.registerTool(
363
+ defineTool({
364
+ ...CODEX_ALIAS_TOOL_DESCRIPTIONS.applyPatch,
365
+ parameters: Type.Object({
366
+ input: Type.String({ description: "Complete patch text: either a unified diff or a Begin Patch block" }),
367
+ }),
368
+ prepareArguments: prepareApplyPatchArgs,
369
+ executionMode: "sequential",
370
+ async execute(_id, params, signal, _onUpdate, ctx) {
371
+ const result = await applyPatch(ctx.cwd, params.input, signal);
372
+ return { content: [{ type: "text", text: result.summary }], details: result };
373
+ },
374
+ }),
375
+ );
376
+ }
377
+
378
+ function toolsForProfile(profile: ModelProfile): string[] | undefined {
379
+ if (profile === "claude") return CLAUDE_ALIAS_TOOLS;
380
+ if (profile === "codex") return CODEX_ALIAS_TOOLS;
381
+ return undefined;
382
+ }
383
+
384
+ function activeRepoDiscoveryTools(activeTools: string[], baseTools: string[]): string[] {
385
+ const availableTools = new Set([...activeTools, ...baseTools]);
386
+ return REPO_DISCOVERY_TOOL_NAMES.filter((tool) => availableTools.has(tool));
387
+ }
388
+
389
+ function sameTools(left: string[], right: string[]): boolean {
390
+ return left.length === right.length && left.every((tool, index) => tool === right[index]);
391
+ }
392
+
393
+ function applyToolProfile(pi: ExtensionAPI, model: unknown, baseTools: string[]): void {
394
+ const targetTools = toolsForProfile(detectModelProfile(model));
395
+ const preserveSelection = shouldPreserveSelection();
396
+ const active = pi.getActiveTools();
397
+ const repoTools = activeRepoDiscoveryTools(active, baseTools);
398
+ const preserved = active.filter((tool) => !MANAGED_TOOLS.has(tool) && !REPO_DISCOVERY_TOOL_NAME_SET.has(tool));
399
+ const baseWithoutRepoTools = baseTools.filter((tool) => !REPO_DISCOVERY_TOOL_NAME_SET.has(tool));
400
+ const selectedTargetTools = preserveSelection
401
+ ? selectSuitableToolsForModel(model, active.filter((tool) => MANAGED_TOOLS.has(tool)))
402
+ : targetTools;
403
+ const next = selectedTargetTools ? [...repoTools, ...preserved, ...selectedTargetTools] : [...repoTools, ...preserved, ...baseWithoutRepoTools];
404
+ const nextTools = [...new Set(next)];
405
+ if (!sameTools(active, nextTools)) pi.setActiveTools(nextTools);
406
+ }
407
+
408
+ function shouldPreserveSelection(env: NodeJS.ProcessEnv = process.env): boolean {
409
+ return [env.PI_MODEL_SUITABLE_TOOLS_PRESERVE_SELECTION, env.MODEL_SUITABLE_TOOLS_PRESERVE_SELECTION]
410
+ .some((value) => typeof value === "string" && /^(1|true|yes|on)$/i.test(value.trim()));
411
+ }
412
+
413
+ export default function modelTools(pi: ExtensionAPI): void {
414
+ registerClaudeAliases(pi, hasIndexedProjectRoot());
415
+ registerCodexAliases(pi);
416
+
417
+ let baseTools: string[] = [];
418
+
419
+ pi.on("session_start", (_event, ctx) => {
420
+ baseTools = pi.getActiveTools().filter((tool) => !MANAGED_TOOLS.has(tool));
421
+ applyToolProfile(pi, ctx.model, baseTools);
422
+ });
423
+
424
+ pi.on("model_select", (event) => {
425
+ applyToolProfile(pi, event.model, baseTools);
426
+ });
427
+ }
428
+
429
+ export { applyPatch, parseApplyPatch } from "./apply-patch";
430
+ export { detectModelProfile, prepareApplyPatchArgs, selectSuitableToolsForModel, toGrepArgs, toShellCommand } from "./tool-args";
@@ -0,0 +1,6 @@
1
+ import { isAbsolute, relative } from "node:path";
2
+
3
+ export function isPathInside(parentPath: string, targetPath: string): boolean {
4
+ const rel = relative(parentPath, targetPath);
5
+ return rel === "" || (!rel.startsWith("..") && !isAbsolute(rel));
6
+ }
@@ -0,0 +1,11 @@
1
+ export {
2
+ detectModelProfile,
3
+ prepareApplyPatchArgs,
4
+ selectSuitableToolsForModel,
5
+ toEditArgs,
6
+ toGrepArgs,
7
+ toReadArgs,
8
+ toShellCommand,
9
+ toWriteArgs,
10
+ type ModelProfile,
11
+ } from "../lib/tool-args.js";