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,263 @@
1
+ import type { DcpConfig } from "./config.js";
2
+ import type { DcpState, ToolRecord } from "./state.js";
3
+ import { estimateMessageTokens } from "./pruner-metadata.js";
4
+
5
+ // Tool outputs that must never be auto-pruned unless a future explicit user
6
+ // action intentionally changes that policy. They mutate state or control DCP.
7
+ const ALWAYS_PROTECTED_TOOLS = new Set(["compress", "write", "edit"]);
8
+
9
+ function buildProtectedTools(config: DcpConfig, extra: string[] = []): Set<string> {
10
+ return new Set([
11
+ ...ALWAYS_PROTECTED_TOOLS,
12
+ ...(config.compress.protectedTools ?? []),
13
+ ...extra,
14
+ ]);
15
+ }
16
+
17
+ function collectStringValues(value: unknown, out: string[] = [], depth = 0): string[] {
18
+ if (depth > 6) return out;
19
+ if (typeof value === "string") {
20
+ out.push(value);
21
+ return out;
22
+ }
23
+ if (Array.isArray(value)) {
24
+ for (const item of value) collectStringValues(item, out, depth + 1);
25
+ return out;
26
+ }
27
+ if (value !== null && typeof value === "object") {
28
+ for (const item of Object.values(value as Record<string, unknown>)) {
29
+ collectStringValues(item, out, depth + 1);
30
+ }
31
+ }
32
+ return out;
33
+ }
34
+
35
+ function escapeRegExp(text: string): string {
36
+ return text.replace(/[|\\{}()[\]^$+?.]/g, "\\$&");
37
+ }
38
+
39
+ function globToRegExp(pattern: string): RegExp {
40
+ const normalized = pattern.replace(/\\/g, "/");
41
+ let source = "^";
42
+ for (let i = 0; i < normalized.length; i++) {
43
+ const char = normalized[i]!;
44
+ if (char === "*") {
45
+ if (normalized[i + 1] === "*") {
46
+ source += ".*";
47
+ i++;
48
+ } else {
49
+ source += "[^/]*";
50
+ }
51
+ } else if (char === "?") {
52
+ source += "[^/]";
53
+ } else {
54
+ source += escapeRegExp(char);
55
+ }
56
+ }
57
+ source += "$";
58
+ return new RegExp(source);
59
+ }
60
+
61
+ function patternMatchesValue(pattern: string, value: string): boolean {
62
+ const normalizedPattern = pattern.replace(/\\/g, "/");
63
+ const normalizedValue = value.replace(/\\/g, "/");
64
+
65
+ // For plain path fragments, substring matching is more useful and less
66
+ // surprising than exact matching.
67
+ if (!/[?*]/.test(normalizedPattern)) {
68
+ return normalizedValue.includes(normalizedPattern);
69
+ }
70
+
71
+ return globToRegExp(normalizedPattern).test(normalizedValue);
72
+ }
73
+
74
+ function isProtectedByFilePattern(record: ToolRecord | undefined, config: DcpConfig): boolean {
75
+ if (!record || config.protectedFilePatterns.length === 0) return false;
76
+ const values = collectStringValues(record.inputArgs);
77
+ return values.some((value) =>
78
+ config.protectedFilePatterns.some((pattern) => patternMatchesValue(pattern, value)),
79
+ );
80
+ }
81
+
82
+ function recordForToolResult(msg: any, state: DcpState): ToolRecord | undefined {
83
+ if (typeof msg.toolCallId !== "string") return undefined;
84
+ return state.toolCalls.get(msg.toolCallId);
85
+ }
86
+
87
+ function toolNameForResult(msg: any, record: ToolRecord | undefined): string {
88
+ return record?.toolName ?? msg.toolName ?? "";
89
+ }
90
+
91
+ function estimateToolResultTokens(msg: any, record: ToolRecord | undefined): number {
92
+ return Math.max(record?.tokenEstimate ?? 0, estimateMessageTokens(msg));
93
+ }
94
+
95
+ function toolResultIsProtected(
96
+ msg: any,
97
+ record: ToolRecord | undefined,
98
+ config: DcpConfig,
99
+ extraProtectedTools: string[] = [],
100
+ ): boolean {
101
+ const protectedTools = buildProtectedTools(config, extraProtectedTools);
102
+ const toolName = toolNameForResult(msg, record);
103
+ if (protectedTools.has(toolName)) return true;
104
+ return isProtectedByFilePattern(record, config);
105
+ }
106
+
107
+ export function isToolRecordProtected(
108
+ record: ToolRecord,
109
+ config: DcpConfig,
110
+ extraProtectedTools: string[] = [],
111
+ ): boolean {
112
+ const protectedTools = buildProtectedTools(config, extraProtectedTools);
113
+ if (protectedTools.has(record.toolName)) return true;
114
+ return isProtectedByFilePattern(record, config);
115
+ }
116
+
117
+ export function markToolPruned(
118
+ state: DcpState,
119
+ toolCallId: string,
120
+ reason: string,
121
+ tokenEstimate = 0,
122
+ ): boolean {
123
+ const wasAlreadyPruned = state.prunedToolIds.has(toolCallId);
124
+ if (!wasAlreadyPruned) state.prunedToolIds.add(toolCallId);
125
+ if (!state.prunedToolReasons.has(toolCallId) || !wasAlreadyPruned) {
126
+ state.prunedToolReasons.set(toolCallId, reason);
127
+ }
128
+
129
+ if (!state.accountedPrunedToolIds.has(toolCallId)) {
130
+ state.accountedPrunedToolIds.add(toolCallId);
131
+ state.totalPruneCount++;
132
+ if (tokenEstimate > 0) state.tokensSaved += Math.max(0, Math.round(tokenEstimate));
133
+ }
134
+
135
+ return !wasAlreadyPruned;
136
+ }
137
+
138
+ export function applyDeduplication(messages: any[], state: DcpState, config: DcpConfig): void {
139
+ if (!config.strategies.deduplication.enabled) return;
140
+ if (state.manualMode && !config.manualMode.automaticStrategies) return;
141
+
142
+ // fingerprint → array of toolCallIds in timestamp order
143
+ const fingerprintMap = new Map<string, Array<{ id: string; tokens: number }>>();
144
+
145
+ for (const msg of messages) {
146
+ if (msg.role !== "toolResult") continue;
147
+ const record = recordForToolResult(msg, state);
148
+ if (!record) continue;
149
+ if (toolResultIsProtected(msg, record, config, config.strategies.deduplication.protectedTools ?? [])) continue;
150
+
151
+ const fp = record.inputFingerprint;
152
+ if (!fingerprintMap.has(fp)) {
153
+ fingerprintMap.set(fp, []);
154
+ }
155
+ fingerprintMap.get(fp)!.push({ id: msg.toolCallId, tokens: estimateToolResultTokens(msg, record) });
156
+ }
157
+
158
+ // For each fingerprint with duplicates, prune all but the last
159
+ for (const [, ids] of fingerprintMap) {
160
+ if (ids.length <= 1) continue;
161
+ // Keep the last one; prune the rest
162
+ for (let i = 0; i < ids.length - 1; i++) {
163
+ markToolPruned(state, ids[i]!.id, "duplicate", ids[i]!.tokens);
164
+ }
165
+ }
166
+ }
167
+
168
+ /**
169
+ * Apply error purging: mark old error tool outputs for pruning.
170
+ * Mutates state.prunedToolIds.
171
+ */
172
+ export function applyErrorPurging(messages: any[], state: DcpState, config: DcpConfig): void {
173
+ if (!config.strategies.purgeErrors.enabled) return;
174
+ if (state.manualMode && !config.manualMode.automaticStrategies) return;
175
+
176
+ const turnsThreshold = config.strategies.purgeErrors.turns ?? 3;
177
+
178
+ for (const msg of messages) {
179
+ if (msg.role !== "toolResult") continue;
180
+ if (!msg.isError) continue;
181
+
182
+ const record = recordForToolResult(msg, state);
183
+ if (!record) continue;
184
+ if (toolResultIsProtected(msg, record, config, config.strategies.purgeErrors.protectedTools ?? [])) continue;
185
+
186
+ if (state.currentTurn - record.turnIndex >= turnsThreshold) {
187
+ markToolPruned(state, msg.toolCallId, "old-error", estimateToolResultTokens(msg, record));
188
+ }
189
+ }
190
+ }
191
+
192
+ /**
193
+ * Policy-based autonomous tool-output pruning. This is the non-LLM half of
194
+ * DCP: large, old, repeated, or stale discovery outputs can be replaced with
195
+ * placeholders without waiting for the model to call `compress`.
196
+ */
197
+ export function applyAutoToolOutputPruning(messages: any[], state: DcpState, config: DcpConfig): void {
198
+ const strategy = config.strategies.autoToolPruning;
199
+ if (!strategy.enabled) return;
200
+ if (state.manualMode && !config.manualMode.automaticStrategies) return;
201
+
202
+ const maxOutputTokens = Math.max(1, strategy.maxOutputTokens ?? 2000);
203
+ const keepRecentTurns = Math.max(0, strategy.keepRecentTurns ?? 2);
204
+ const readLikeTurns = Math.max(0, strategy.readLikeTurns ?? 3);
205
+ const readLikeTools = new Set(strategy.readLikeTools ?? []);
206
+
207
+ for (const msg of messages) {
208
+ if (msg.role !== "toolResult") continue;
209
+ if (typeof msg.toolCallId !== "string") continue;
210
+
211
+ const record = recordForToolResult(msg, state);
212
+ if (!record) continue;
213
+ if (toolResultIsProtected(msg, record, config, strategy.protectedTools ?? [])) continue;
214
+
215
+ const ageTurns = Math.max(0, state.currentTurn - record.turnIndex);
216
+ const tokenEstimate = estimateToolResultTokens(msg, record);
217
+ const toolName = toolNameForResult(msg, record);
218
+
219
+ if (tokenEstimate > maxOutputTokens && ageTurns >= keepRecentTurns) {
220
+ markToolPruned(state, msg.toolCallId, "large-output", tokenEstimate);
221
+ } else if (readLikeTools.has(toolName) && ageTurns >= readLikeTurns) {
222
+ markToolPruned(state, msg.toolCallId, "stale-read", tokenEstimate);
223
+ }
224
+ }
225
+ }
226
+
227
+ function placeholderForPrunedTool(msg: any, state: DcpState): string {
228
+ const reason = state.prunedToolReasons.get(msg.toolCallId);
229
+ if (reason === "duplicate") {
230
+ return "[Output removed to save context - duplicate tool call; latest matching result kept]";
231
+ }
232
+ if (reason === "large-output") {
233
+ return "[Large tool output removed to save context after it aged out of the active working set]";
234
+ }
235
+ if (reason === "stale-read") {
236
+ return "[Stale read/search output removed to save context; re-read if exact content is needed again]";
237
+ }
238
+ if (reason === "manual-sweep") {
239
+ return "[Output removed by /dcp sweep to save context]";
240
+ }
241
+ if (reason === "old-error" || msg.isError) {
242
+ return "[Error output removed - tool failed more than the configured number of turns ago]";
243
+ }
244
+ return "[Output removed to save context - information superseded or no longer needed]";
245
+ }
246
+
247
+ /**
248
+ * Apply explicit tool output pruning from state.prunedToolIds.
249
+ * Replaces content of matching toolResult messages in place.
250
+ */
251
+ export function applyToolOutputPruning(messages: any[], state: DcpState): void {
252
+ for (const msg of messages) {
253
+ if (msg.role !== "toolResult") continue;
254
+ if (!state.prunedToolIds.has(msg.toolCallId)) continue;
255
+
256
+ msg.content = [
257
+ {
258
+ type: "text",
259
+ text: placeholderForPrunedTool(msg, state),
260
+ },
261
+ ];
262
+ }
263
+ }
@@ -0,0 +1,25 @@
1
+ export interface CompressionCandidate {
2
+ startId: string;
3
+ endId: string;
4
+ messageCount: number;
5
+ estimatedTokens: number;
6
+ includedBlockIds: number[];
7
+ reason: string;
8
+ }
9
+
10
+ export type MessagePriority = "medium" | "high";
11
+
12
+ export interface MessageCompressionCandidate {
13
+ messageId: string;
14
+ role: string;
15
+ estimatedTokens: number;
16
+ priority: MessagePriority;
17
+ reason: string;
18
+ }
19
+
20
+ export type DcpNudgeType = "context-strong" | "context-soft" | "turn" | "iteration";
21
+
22
+ export interface NudgeThresholds {
23
+ minContextPercent?: number;
24
+ maxContextPercent?: number;
25
+ }
@@ -0,0 +1,92 @@
1
+ import type { DcpConfig } from "./config.js";
2
+ import type { DcpState } from "./state.js";
3
+ import { applyCompressionBlocks, repairOrphanedToolPairs, syncCompressionBlocks } from "./pruner-compression-blocks.js";
4
+ import { stripStaleDcpMetadataFromAssistantMessage } from "./pruner-metadata.js";
5
+ import { injectMessageIds } from "./pruner-message-ids.js";
6
+ import {
7
+ applyAutoToolOutputPruning,
8
+ applyDeduplication,
9
+ applyErrorPurging,
10
+ applyToolOutputPruning,
11
+ } from "./pruner-tools.js";
12
+
13
+ export type {
14
+ CompressionCandidate,
15
+ MessageCompressionCandidate,
16
+ MessagePriority,
17
+ NudgeThresholds,
18
+ } from "./pruner-types.js";
19
+ export {
20
+ estimateTokens,
21
+ getActiveSummaryTokenEstimate,
22
+ resolveContextThresholds,
23
+ } from "./pruner-metadata.js";
24
+ export {
25
+ isToolRecordProtected,
26
+ markToolPruned,
27
+ } from "./pruner-tools.js";
28
+ export {
29
+ detectCompressionCandidate,
30
+ detectMessageCompressionCandidates,
31
+ formatCompressionCandidateHint,
32
+ formatMessageCompressionCandidateHint,
33
+ } from "./pruner-candidates.js";
34
+ export {
35
+ appendConcreteNudgeGuidance,
36
+ applyAnchoredNudges,
37
+ clearDcpNudgeAnchors,
38
+ getNudgeType,
39
+ injectNudge,
40
+ nudgeTypeLabel,
41
+ upsertNudgeAnchor,
42
+ } from "./pruner-nudge.js";
43
+
44
+ export function applyPruning(
45
+ messages: any[],
46
+ state: DcpState,
47
+ config: DcpConfig,
48
+ ): any[] {
49
+ // Deep-clone each message and its content to prevent mutations from
50
+ // affecting the original objects across context events.
51
+ const msgs: any[] = messages.map((m: any) => {
52
+ const clone = { ...m };
53
+ if (Array.isArray(clone.content)) {
54
+ clone.content = clone.content.map((contentBlock: any) =>
55
+ typeof contentBlock === "object" && contentBlock !== null ? { ...contentBlock } : contentBlock,
56
+ );
57
+ }
58
+ return stripStaleDcpMetadataFromAssistantMessage(clone);
59
+ });
60
+
61
+ // 1. Count user turns → update state.currentTurn. Do this before inserting
62
+ // synthetic compression summaries; the raw session is the source of truth.
63
+ state.currentTurn = msgs.filter((m) => m.role === "user").length;
64
+
65
+ // 2. Reconcile persisted compression blocks with the current raw context,
66
+ // then apply active compression blocks.
67
+ syncCompressionBlocks(msgs, state);
68
+ applyCompressionBlocks(msgs, state);
69
+
70
+ // 2b. Post-compression safety net: remove any orphaned tool pairs that the
71
+ // expansion logic could not catch (e.g. multi-block interactions, pre-broken state).
72
+ repairOrphanedToolPairs(msgs);
73
+
74
+ // 3. Apply deduplication
75
+ applyDeduplication(msgs, state, config);
76
+
77
+ // 4. Apply error purging
78
+ applyErrorPurging(msgs, state, config);
79
+
80
+ // 5. Apply autonomous policy pruning for old/large/stale tool outputs
81
+ applyAutoToolOutputPruning(msgs, state, config);
82
+
83
+ // 6. Apply explicit tool output pruning (prunedToolIds)
84
+ applyToolOutputPruning(msgs, state);
85
+
86
+ // 7. Refresh visible message ID snapshots used by the compress tool.
87
+ injectMessageIds(msgs, state, { config });
88
+
89
+ // 8. state.messageIdSnapshot/messageMetaSnapshot are already updated by injectMessageIds
90
+
91
+ return msgs;
92
+ }