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,150 @@
1
+ import type { ChildProcessWithoutNullStreams } from "node:child_process";
2
+
3
+ export interface AgentTask {
4
+ id: string;
5
+ task: string;
6
+ scope?: string;
7
+ /** Logical sub-agent type/profile, resolved from config before spawning. */
8
+ subagentType?: string;
9
+ /** Explicit model override for this task. */
10
+ model?: string;
11
+ /** Explicit thinking level for this task. */
12
+ thinking?: string;
13
+ /** Extra prompt text appended after the generated or overridden prompt. */
14
+ promptAppend?: string;
15
+ /** Full prompt replacement for this task. Supports prompt template variables. */
16
+ promptOverride?: string;
17
+ /** Optional visual attention instructions for vision-capable sub-agents. */
18
+ focus?: string;
19
+ /** Local image files to attach to the sub-agent RPC prompt. */
20
+ imagePaths?: string[];
21
+ tools?: string[];
22
+ extraArgs?: string[];
23
+ /** Per-agent wall-clock timeout in milliseconds. */
24
+ timeoutMs?: number;
25
+ parentObjective?: string;
26
+ }
27
+
28
+ export interface AgentState {
29
+ id: string;
30
+ status: "planned" | "running" | "retrying" | "done" | "failed" | "stopped";
31
+ exitCode?: number;
32
+ startedAt?: string;
33
+ finishedAt?: string;
34
+ /** ISO-8601 timestamp for the next retry attempt while status is retrying. */
35
+ nextRetryAt?: string;
36
+ pid?: number;
37
+ resultLines?: number;
38
+ stderrLines?: number;
39
+ eventLines?: number;
40
+ /** How many times this agent has been retried (0 = first attempt). */
41
+ retryCount?: number;
42
+ }
43
+
44
+ /** Retry configuration for failed agents. */
45
+ export interface RetryConfig {
46
+ /** Maximum number of retry attempts (default 0 = no retries). */
47
+ maxRetries: number;
48
+ /** Base delay in ms before first retry, doubled on each subsequent attempt (default 2000). */
49
+ backoffMs: number;
50
+ /** Exit codes eligible for retry. Default: all non-zero. Empty array disables retry. */
51
+ retryableExitCodes?: number[];
52
+ }
53
+
54
+ export interface RunState {
55
+ runDir: string;
56
+ agents: AgentState[];
57
+ }
58
+
59
+ export type StructuredSeverity = "low" | "medium" | "high" | "critical";
60
+
61
+ export interface StructuredFinding {
62
+ text: string;
63
+ severity?: StructuredSeverity;
64
+ file?: string;
65
+ line?: number;
66
+ }
67
+
68
+ export interface StructuredFileReference {
69
+ path: string;
70
+ line?: number;
71
+ }
72
+
73
+ export interface StructuredRisk {
74
+ text: string;
75
+ severity?: StructuredSeverity;
76
+ }
77
+
78
+ /** Machine-readable structured result written alongside result.md. */
79
+ export interface StructuredResult {
80
+ /** Structured result schema version. */
81
+ schemaVersion?: 2;
82
+ /** Agent identifier. */
83
+ agentId: string;
84
+ /** Final status. */
85
+ status: AgentState["status"];
86
+ /** Process exit code. */
87
+ exitCode?: number;
88
+ /** ISO-8601 start timestamp. */
89
+ startedAt?: string;
90
+ /** ISO-8601 finish timestamp. */
91
+ finishedAt?: string;
92
+ /** Wall-clock duration in seconds. */
93
+ durationSeconds?: number;
94
+ /** Retry count (0 = first attempt, omitted when never retried). */
95
+ retryCount?: number;
96
+ /** Sub-agent type that was used. */
97
+ subagentType?: string;
98
+ /** Model used by the sub-agent. */
99
+ model?: string;
100
+ /** The full result text (may be truncated by maxResultBytes). */
101
+ resultText?: string;
102
+ /** True when resultText was truncated. */
103
+ resultTruncated?: boolean;
104
+ /** Original byte length before truncation. */
105
+ resultOriginalBytes?: number;
106
+ /** Compact best-effort summary extracted from resultText for parent-agent chaining. */
107
+ summary?: string;
108
+ /** Best-effort findings extracted from bullet/checklist style result text. */
109
+ findings?: StructuredFinding[];
110
+ /** File references mentioned in result text. */
111
+ files?: StructuredFileReference[];
112
+ /** Best-effort risk statements extracted from result text. */
113
+ risks?: StructuredRisk[];
114
+ /** Best-effort recommended next actions extracted from result text. */
115
+ nextActions?: string[];
116
+ /** Optional confidence if the agent explicitly reports it. */
117
+ confidence?: "low" | "medium" | "high";
118
+ /** First line(s) of stderr, if any. */
119
+ stderrPreview?: string;
120
+ }
121
+
122
+ export interface AgentResult {
123
+ result?: string;
124
+ stderr?: string;
125
+ exitCode?: number;
126
+ state: AgentState;
127
+ /** Structured JSON result, if available. */
128
+ structured?: StructuredResult;
129
+ }
130
+
131
+ export interface SpawnedAgent {
132
+ pid: number;
133
+ agentDir: string;
134
+ process: ChildProcessWithoutNullStreams;
135
+ }
136
+
137
+ export interface RpcEventRecord {
138
+ type: string;
139
+ [key: string]: unknown;
140
+ }
141
+
142
+ export type RpcEventHandler = (event: RpcEventRecord) => void;
143
+
144
+ export type AgentCompletionHandler = (completion: {
145
+ runDir: string;
146
+ agentId: string;
147
+ agentDir: string;
148
+ exitCode: number;
149
+ state: AgentState;
150
+ }) => void;
@@ -0,0 +1,184 @@
1
+ import { complete } from "@earendil-works/pi-ai";
2
+ import type { Api, Model } from "@earendil-works/pi-ai";
3
+ import { currentModelRef, resolveSubagentRoutingConfig, type SubagentConfig } from "./config.js";
4
+
5
+ export type UltraworkAutoDecision = "ultrawork" | "hint" | "none";
6
+
7
+ export interface UltraworkAutoContext {
8
+ model?: unknown;
9
+ modelRegistry?: {
10
+ find(provider: string, modelId: string): Model<Api> | undefined;
11
+ getApiKeyAndHeaders(model: Model<Api>): Promise<
12
+ | { ok?: true; apiKey?: string; headers?: Record<string, string> }
13
+ | { ok: false; error: string }
14
+ >;
15
+ };
16
+ hasUI?: boolean;
17
+ ui?: { notify?(message: string, level?: string): void };
18
+ }
19
+
20
+ export const ULTRAWORK_AUTO_HINT = [
21
+ "Auto-ultrawork hint:",
22
+ "If this task turns out to be broad, multi-file, high-risk, or benefits from independent parallel tracks, adopt ultrawork mode: spawn focused subagents and keep the parent context lean. Otherwise solve it directly.",
23
+ ].join(" ");
24
+
25
+ const TRUE_ENV_PATTERN = /^(1|true|yes|on|auto)$/i;
26
+
27
+ const CLASSIFIER_SYSTEM_PROMPT = [
28
+ "You classify the FIRST user message for Pi ultrawork mode.",
29
+ "This is a weak-model routing task: be conservative and follow the labels exactly.",
30
+ "Return exactly one lowercase word: ultrawork, hint, or none.",
31
+ "ultrawork = clearly broad/complex/parallel work that should spawn subagents immediately.",
32
+ "hint = not enough detail, but it may become broad/complex; tell the parent agent to switch only if complexity appears.",
33
+ "none = simple chat, one known file, exact lookup, trivial edit, or narrow question.",
34
+ "When uncertain between ultrawork and hint, choose hint. When uncertain between hint and none, choose none.",
35
+ ].join("\n");
36
+
37
+ export function isUltraworkAutoEnvEnabled(env: NodeJS.ProcessEnv = process.env): boolean {
38
+ return [env.ULTRAWORK_AUTO, env.PI_ULTRAWORK_AUTO, env.ASYNC_SUBAGENTS_ULTRAWORK_AUTO, env.PI_SUBAGENTS_ULTRAWORK_AUTO]
39
+ .some((value) => typeof value === "string" && TRUE_ENV_PATTERN.test(value.trim()));
40
+ }
41
+
42
+ export function isGptLikeModel(modelRef: string | undefined): boolean {
43
+ if (!modelRef) return false;
44
+ const lower = modelRef.toLowerCase();
45
+ return lower.includes("openai-codex/") || /\bgpt(?:[-_.\w]*)?\b/i.test(modelRef);
46
+ }
47
+
48
+ export function appendUltraworkAutoHint(text: string): string {
49
+ return `${text.trimEnd()}\n\n${ULTRAWORK_AUTO_HINT}`;
50
+ }
51
+
52
+ export async function decideUltraworkAuto(
53
+ userText: string,
54
+ config: SubagentConfig,
55
+ ctx: UltraworkAutoContext,
56
+ signal?: AbortSignal,
57
+ ): Promise<UltraworkAutoDecision> {
58
+ const routing = resolveSubagentRoutingConfig(config);
59
+ if (!routing.enabled) return "none";
60
+ if (signal?.aborted) throw new Error("Aborted");
61
+
62
+ try {
63
+ const resolved = await resolveClassifierModel(ctx, routing.model);
64
+ if (!resolved) return "none";
65
+
66
+ const response = await complete(
67
+ resolved.model,
68
+ {
69
+ systemPrompt: CLASSIFIER_SYSTEM_PROMPT,
70
+ messages: [
71
+ {
72
+ role: "user" as const,
73
+ content: [{ type: "text" as const, text: buildClassifierPrompt(userText) }],
74
+ timestamp: Date.now(),
75
+ },
76
+ ],
77
+ },
78
+ {
79
+ apiKey: resolved.apiKey,
80
+ headers: resolved.headers,
81
+ cacheRetention: "none",
82
+ maxRetries: routing.maxRetries,
83
+ maxTokens: Math.min(routing.maxTokens, 32),
84
+ signal,
85
+ temperature: 0,
86
+ timeoutMs: routing.timeoutMs,
87
+ },
88
+ );
89
+
90
+ return parseUltraworkAutoDecision(responseText(response));
91
+ } catch (error) {
92
+ if (signal?.aborted || isAbortError(error)) throw error;
93
+ return "none";
94
+ }
95
+ }
96
+
97
+ export function parseUltraworkAutoDecision(raw: string): UltraworkAutoDecision {
98
+ const normalized = raw.trim().toLowerCase()
99
+ .replace(/^```(?:json|text)?\s*/iu, "")
100
+ .replace(/```$/u, "")
101
+ .trim();
102
+
103
+ if (normalized === "ultrawork" || normalized === "hint" || normalized === "none") return normalized;
104
+
105
+ try {
106
+ const parsed = JSON.parse(normalized) as unknown;
107
+ const value = isRecord(parsed) ? parsed.decision ?? parsed.mode ?? parsed.result : parsed;
108
+ if (typeof value === "string") return parseUltraworkAutoDecision(value);
109
+ } catch {
110
+ // Fall through to weak-model text extraction.
111
+ }
112
+
113
+ const matches = normalized.match(/\b(ultrawork|hint|none)\b/gi) ?? [];
114
+ const unique = [...new Set(matches.map((match: string) => match.toLowerCase()))];
115
+ return unique.length === 1 && isUltraworkDecision(unique[0]) ? unique[0] : "none";
116
+ }
117
+
118
+ function buildClassifierPrompt(userText: string): string {
119
+ return [
120
+ "Choose one label for this first user message.",
121
+ "Use ultrawork for: explicit parallel/subagents/delegate; broad repo investigation; architecture/root-cause/debugging across modules; code review/audit/security/perf/release/test strategy; multi-file implementation/refactor.",
122
+ "Use hint for: vague but potentially complex requests like 'fix this bug', 'implement feature', 'improve the project', 'investigate issue' with no scope yet.",
123
+ "Use none for: simple question, exact string/file lookup, known one-file edit, typo, formatting, command request, or casual chat.",
124
+ "First user message:",
125
+ `<<<${truncate(userText, 4000)}>>>`,
126
+ "Answer with exactly one word: ultrawork, hint, or none.",
127
+ ].join("\n");
128
+ }
129
+
130
+ async function resolveClassifierModel(ctx: UltraworkAutoContext, modelRef: string): Promise<{
131
+ model: Model<Api>;
132
+ apiKey?: string;
133
+ headers?: Record<string, string>;
134
+ } | undefined> {
135
+ const configured = await resolveModelRef(ctx, modelRef);
136
+ if (configured) return configured;
137
+ const parentModel = currentModelRef(ctx.model);
138
+ return parentModel && parentModel !== modelRef ? resolveModelRef(ctx, parentModel) : undefined;
139
+ }
140
+
141
+ async function resolveModelRef(ctx: UltraworkAutoContext, modelRef: string): Promise<{
142
+ model: Model<Api>;
143
+ apiKey?: string;
144
+ headers?: Record<string, string>;
145
+ } | undefined> {
146
+ const parsed = parseModelRef(modelRef);
147
+ if (!parsed || !ctx.modelRegistry) return undefined;
148
+ const model = ctx.modelRegistry.find(parsed.provider, parsed.modelId);
149
+ if (!model) return undefined;
150
+ const auth = await ctx.modelRegistry.getApiKeyAndHeaders(model);
151
+ if (auth.ok === false) return undefined;
152
+ return { model, apiKey: auth.apiKey, headers: auth.headers };
153
+ }
154
+
155
+ function parseModelRef(modelRef: string): { provider: string; modelId: string } | undefined {
156
+ const trimmed = modelRef.trim();
157
+ const slash = trimmed.indexOf("/");
158
+ if (slash <= 0 || slash === trimmed.length - 1) return undefined;
159
+ return { provider: trimmed.slice(0, slash), modelId: trimmed.slice(slash + 1) };
160
+ }
161
+
162
+ function responseText(response: { content: Array<{ type: string; text?: string }> }): string {
163
+ return response.content
164
+ .filter((block): block is { type: "text"; text: string } => block.type === "text" && typeof block.text === "string")
165
+ .map((block) => block.text)
166
+ .join("\n");
167
+ }
168
+
169
+ function truncate(value: string, maxChars: number): string {
170
+ const trimmed = value.trim();
171
+ return trimmed.length <= maxChars ? trimmed : `${trimmed.slice(0, maxChars).trimEnd()}…`;
172
+ }
173
+
174
+ function isUltraworkDecision(value: string): value is UltraworkAutoDecision {
175
+ return value === "ultrawork" || value === "hint" || value === "none";
176
+ }
177
+
178
+ function isRecord(value: unknown): value is Record<string, unknown> {
179
+ return typeof value === "object" && value !== null && !Array.isArray(value);
180
+ }
181
+
182
+ function isAbortError(error: unknown): boolean {
183
+ return error instanceof Error && /abort/i.test(error.name || error.message);
184
+ }
@@ -0,0 +1,11 @@
1
+ export function isoNow(): string {
2
+ return new Date().toISOString().replace(/\.\d{3}Z$/, "Z");
3
+ }
4
+
5
+ export function serializeJsonLine(value: unknown): string {
6
+ return `${JSON.stringify(value)}\n`;
7
+ }
8
+
9
+ export function isRecord(value: unknown): value is Record<string, unknown> {
10
+ return typeof value === "object" && value !== null;
11
+ }
@@ -0,0 +1,41 @@
1
+ import type { AgentState } from "./lib.js";
2
+
3
+ export function formatAgentStatus(status: string): string {
4
+ const icons: Record<string, string> = {
5
+ planned: "[planned]",
6
+ running: "[running]",
7
+ retrying: "[retrying]",
8
+ done: "[done]",
9
+ failed: "[failed]",
10
+ stopped: "[stopped]",
11
+ };
12
+ return icons[status] || `[${status}]`;
13
+ }
14
+
15
+ export function truncate(text: string, maxLen: number): string {
16
+ if (text.length <= maxLen) return text;
17
+ return text.slice(0, maxLen - 3) + "...";
18
+ }
19
+
20
+ export function plural(count: number, one: string, many = `${one}s`): string {
21
+ return `${count} ${count === 1 ? one : many}`;
22
+ }
23
+
24
+ export function statusGlyph(status: AgentState["status"]): string {
25
+ if (status === "done") return "✓";
26
+ if (status === "failed") return "✕";
27
+ if (status === "stopped") return "■";
28
+ if (status === "retrying") return "↻";
29
+ if (status === "running") return "◐";
30
+ return "○";
31
+ }
32
+
33
+ export function statusLabel(status: AgentState["status"]): string {
34
+ return status === "running" ? "in progress" : status;
35
+ }
36
+
37
+ export function modelName(model?: string): string {
38
+ if (!model) return "";
39
+ const slash = model.lastIndexOf("/");
40
+ return slash >= 0 ? model.slice(slash + 1) : model;
41
+ }