@ashx-j/lunr-dev 0.2.13-dev.8.1 → 0.2.19-dev.10.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 (484) hide show
  1. package/CHANGELOG.md +60 -1
  2. package/README.md +7 -1
  3. package/dist/builtin-extensions/ashxj-thinking.d.ts +1 -0
  4. package/dist/builtin-extensions/ashxj-thinking.d.ts.map +1 -1
  5. package/dist/builtin-extensions/ashxj-thinking.js +44 -19
  6. package/dist/builtin-extensions/ashxj-thinking.js.map +1 -1
  7. package/dist/builtin-extensions/ashxj-tui.d.ts +14 -0
  8. package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
  9. package/dist/builtin-extensions/ashxj-tui.js +37 -3
  10. package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
  11. package/dist/builtin-extensions/index.d.ts +1 -15
  12. package/dist/builtin-extensions/index.d.ts.map +1 -1
  13. package/dist/builtin-extensions/index.js +8 -21
  14. package/dist/builtin-extensions/index.js.map +1 -1
  15. package/dist/builtin-extensions/lunr-computer-use.d.ts +3 -0
  16. package/dist/builtin-extensions/lunr-computer-use.d.ts.map +1 -0
  17. package/dist/builtin-extensions/lunr-computer-use.js +157 -0
  18. package/dist/builtin-extensions/lunr-computer-use.js.map +1 -0
  19. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.d.ts.map +1 -1
  20. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js +6 -2
  21. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js.map +1 -1
  22. package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts +4 -0
  23. package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts.map +1 -1
  24. package/dist/builtin-extensions/pi-lsp-extension/src/index.js +172 -171
  25. package/dist/builtin-extensions/pi-lsp-extension/src/index.js.map +1 -1
  26. package/dist/builtin-extensions/pi-lsp-extension/src/runtime.d.ts +50 -0
  27. package/dist/builtin-extensions/pi-lsp-extension/src/runtime.d.ts.map +1 -0
  28. package/dist/builtin-extensions/pi-lsp-extension/src/runtime.js +131 -0
  29. package/dist/builtin-extensions/pi-lsp-extension/src/runtime.js.map +1 -0
  30. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.d.ts +7 -0
  31. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.d.ts.map +1 -0
  32. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.js +211 -0
  33. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.js.map +1 -0
  34. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.d.ts +0 -5
  35. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.d.ts.map +1 -1
  36. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.js +0 -202
  37. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.js.map +1 -1
  38. package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts.map +1 -1
  39. package/dist/builtin-extensions/pi-mcp-adapter/index.js +276 -109
  40. package/dist/builtin-extensions/pi-mcp-adapter/index.js.map +1 -1
  41. package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts +4 -1
  42. package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts.map +1 -1
  43. package/dist/builtin-extensions/pi-mcp-adapter/init.js +10 -3
  44. package/dist/builtin-extensions/pi-mcp-adapter/init.js.map +1 -1
  45. package/dist/builtin-extensions/pi-mcp-adapter/metadata-cache.d.ts.map +1 -1
  46. package/dist/builtin-extensions/pi-mcp-adapter/metadata-cache.js +6 -1
  47. package/dist/builtin-extensions/pi-mcp-adapter/metadata-cache.js.map +1 -1
  48. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.d.ts +6 -1
  49. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.d.ts.map +1 -1
  50. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.js +33 -8
  51. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.js.map +1 -1
  52. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts.map +1 -1
  53. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js +2 -1
  54. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js.map +1 -1
  55. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts +1 -1
  56. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts.map +1 -1
  57. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js +1 -1
  58. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js.map +1 -1
  59. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts +1 -1
  60. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
  61. package/dist/builtin-extensions/pi-subagents/src/extension/index.js +68 -15
  62. package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
  63. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts.map +1 -1
  64. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js +6 -2
  65. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js.map +1 -1
  66. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.d.ts +1 -1
  67. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.d.ts.map +1 -1
  68. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js +5 -2
  69. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js.map +1 -1
  70. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/request-params.d.ts +10 -0
  71. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/request-params.d.ts.map +1 -0
  72. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/request-params.js +38 -0
  73. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/request-params.js.map +1 -0
  74. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
  75. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +3 -16
  76. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
  77. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.d.ts +1 -1
  78. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.d.ts.map +1 -1
  79. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.js +2 -0
  80. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.js.map +1 -1
  81. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.d.ts.map +1 -1
  82. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.js +1 -1
  83. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.js.map +1 -1
  84. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts +1 -1
  85. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts.map +1 -1
  86. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js +1 -1
  87. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js.map +1 -1
  88. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +2 -1
  89. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
  90. package/dist/builtin-extensions/pi-subagents/src/tui/render.js +72 -31
  91. package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
  92. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts +1 -1
  93. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts.map +1 -1
  94. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js +2 -1
  95. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js.map +1 -1
  96. package/dist/builtin-extensions/pi-web-access/extract.d.ts.map +1 -1
  97. package/dist/builtin-extensions/pi-web-access/extract.js +105 -54
  98. package/dist/builtin-extensions/pi-web-access/extract.js.map +1 -1
  99. package/dist/builtin-extensions/pi-web-access/gemini-search.d.ts +1 -1
  100. package/dist/builtin-extensions/pi-web-access/gemini-search.d.ts.map +1 -1
  101. package/dist/builtin-extensions/pi-web-access/gemini-search.js +82 -65
  102. package/dist/builtin-extensions/pi-web-access/gemini-search.js.map +1 -1
  103. package/dist/builtin-extensions/pi-web-access/github-extract.d.ts.map +1 -1
  104. package/dist/builtin-extensions/pi-web-access/github-extract.js +2 -0
  105. package/dist/builtin-extensions/pi-web-access/github-extract.js.map +1 -1
  106. package/dist/builtin-extensions/pi-web-access/index.d.ts.map +1 -1
  107. package/dist/builtin-extensions/pi-web-access/index.js +259 -168
  108. package/dist/builtin-extensions/pi-web-access/index.js.map +1 -1
  109. package/dist/builtin-extensions/pi-web-access/lazy.d.ts +18 -0
  110. package/dist/builtin-extensions/pi-web-access/lazy.d.ts.map +1 -0
  111. package/dist/builtin-extensions/pi-web-access/lazy.js +19 -0
  112. package/dist/builtin-extensions/pi-web-access/lazy.js.map +1 -0
  113. package/dist/builtin-extensions/pi-web-access/session-cleanup.d.ts +6 -0
  114. package/dist/builtin-extensions/pi-web-access/session-cleanup.d.ts.map +1 -0
  115. package/dist/builtin-extensions/pi-web-access/session-cleanup.js +17 -0
  116. package/dist/builtin-extensions/pi-web-access/session-cleanup.js.map +1 -0
  117. package/dist/catalog/publication.json +12 -12
  118. package/dist/cli-runtime.d.ts +3 -0
  119. package/dist/cli-runtime.d.ts.map +1 -0
  120. package/dist/cli-runtime.js +73 -0
  121. package/dist/cli-runtime.js.map +1 -0
  122. package/dist/cli.d.ts.map +1 -1
  123. package/dist/cli.js +14 -53
  124. package/dist/cli.js.map +1 -1
  125. package/dist/config.d.ts +1 -0
  126. package/dist/config.d.ts.map +1 -1
  127. package/dist/config.js +1 -0
  128. package/dist/config.js.map +1 -1
  129. package/dist/core/agent-session-services.d.ts.map +1 -1
  130. package/dist/core/agent-session-services.js +1 -1
  131. package/dist/core/agent-session-services.js.map +1 -1
  132. package/dist/core/agent-session.d.ts +3 -0
  133. package/dist/core/agent-session.d.ts.map +1 -1
  134. package/dist/core/agent-session.js +56 -12
  135. package/dist/core/agent-session.js.map +1 -1
  136. package/dist/core/compaction/compaction.d.ts.map +1 -1
  137. package/dist/core/compaction/compaction.js +10 -5
  138. package/dist/core/compaction/compaction.js.map +1 -1
  139. package/dist/core/computer-use/adapter.d.ts +23 -0
  140. package/dist/core/computer-use/adapter.d.ts.map +1 -0
  141. package/dist/core/computer-use/adapter.js +116 -0
  142. package/dist/core/computer-use/adapter.js.map +1 -0
  143. package/dist/core/computer-use/lease.d.ts +18 -0
  144. package/dist/core/computer-use/lease.d.ts.map +1 -0
  145. package/dist/core/computer-use/lease.js +129 -0
  146. package/dist/core/computer-use/lease.js.map +1 -0
  147. package/dist/core/computer-use/macos-runtime.d.ts +14 -0
  148. package/dist/core/computer-use/macos-runtime.d.ts.map +1 -0
  149. package/dist/core/computer-use/macos-runtime.js +148 -0
  150. package/dist/core/computer-use/macos-runtime.js.map +1 -0
  151. package/dist/core/computer-use/policy.d.ts +19 -0
  152. package/dist/core/computer-use/policy.d.ts.map +1 -0
  153. package/dist/core/computer-use/policy.js +66 -0
  154. package/dist/core/computer-use/policy.js.map +1 -0
  155. package/dist/core/computer-use/release.generated.d.ts +31 -0
  156. package/dist/core/computer-use/release.generated.d.ts.map +1 -0
  157. package/dist/core/computer-use/release.generated.js +36 -0
  158. package/dist/core/computer-use/release.generated.js.map +1 -0
  159. package/dist/core/computer-use/runtime.d.ts +13 -0
  160. package/dist/core/computer-use/runtime.d.ts.map +1 -0
  161. package/dist/core/computer-use/runtime.js +158 -0
  162. package/dist/core/computer-use/runtime.js.map +1 -0
  163. package/dist/core/computer-use/schemas.d.ts +88 -0
  164. package/dist/core/computer-use/schemas.d.ts.map +1 -0
  165. package/dist/core/computer-use/schemas.js +80 -0
  166. package/dist/core/computer-use/schemas.js.map +1 -0
  167. package/dist/core/computer-use/windows-desktop.d.ts +3 -0
  168. package/dist/core/computer-use/windows-desktop.d.ts.map +1 -0
  169. package/dist/core/computer-use/windows-desktop.js +48 -0
  170. package/dist/core/computer-use/windows-desktop.js.map +1 -0
  171. package/dist/core/computer-use/workflow.d.ts +24 -0
  172. package/dist/core/computer-use/workflow.d.ts.map +1 -0
  173. package/dist/core/computer-use/workflow.js +330 -0
  174. package/dist/core/computer-use/workflow.js.map +1 -0
  175. package/dist/core/extensions/host-static.d.ts.map +1 -1
  176. package/dist/core/extensions/host-static.js +34 -12
  177. package/dist/core/extensions/host-static.js.map +1 -1
  178. package/dist/core/extensions/loader.d.ts +1 -2
  179. package/dist/core/extensions/loader.d.ts.map +1 -1
  180. package/dist/core/extensions/loader.js +10 -64
  181. package/dist/core/extensions/loader.js.map +1 -1
  182. package/dist/core/extensions/types.d.ts +2 -2
  183. package/dist/core/extensions/types.d.ts.map +1 -1
  184. package/dist/core/extensions/types.js.map +1 -1
  185. package/dist/core/footer-data-provider.d.ts.map +1 -1
  186. package/dist/core/footer-data-provider.js +2 -0
  187. package/dist/core/footer-data-provider.js.map +1 -1
  188. package/dist/core/keybindings.d.ts +2 -2
  189. package/dist/core/keybindings.d.ts.map +1 -1
  190. package/dist/core/keybindings.js +2 -2
  191. package/dist/core/keybindings.js.map +1 -1
  192. package/dist/core/model-runtime.d.ts +0 -3
  193. package/dist/core/model-runtime.d.ts.map +1 -1
  194. package/dist/core/model-runtime.js +1 -10
  195. package/dist/core/model-runtime.js.map +1 -1
  196. package/dist/core/package-manager.d.ts.map +1 -1
  197. package/dist/core/package-manager.js +1 -1
  198. package/dist/core/package-manager.js.map +1 -1
  199. package/dist/core/permissions.d.ts +1 -3
  200. package/dist/core/permissions.d.ts.map +1 -1
  201. package/dist/core/permissions.js +33 -25
  202. package/dist/core/permissions.js.map +1 -1
  203. package/dist/core/plan-mode.d.ts.map +1 -1
  204. package/dist/core/plan-mode.js +9 -0
  205. package/dist/core/plan-mode.js.map +1 -1
  206. package/dist/core/rollback.d.ts.map +1 -1
  207. package/dist/core/rollback.js +13 -90
  208. package/dist/core/rollback.js.map +1 -1
  209. package/dist/core/sdk.d.ts +1 -1
  210. package/dist/core/sdk.d.ts.map +1 -1
  211. package/dist/core/sdk.js +1 -1
  212. package/dist/core/sdk.js.map +1 -1
  213. package/dist/core/session-manager.d.ts +0 -1
  214. package/dist/core/session-manager.d.ts.map +1 -1
  215. package/dist/core/session-manager.js +21 -79
  216. package/dist/core/session-manager.js.map +1 -1
  217. package/dist/core/settings-manager.d.ts +6 -0
  218. package/dist/core/settings-manager.d.ts.map +1 -1
  219. package/dist/core/settings-manager.js +19 -0
  220. package/dist/core/settings-manager.js.map +1 -1
  221. package/dist/core/slash-commands.d.ts.map +1 -1
  222. package/dist/core/slash-commands.js +0 -1
  223. package/dist/core/slash-commands.js.map +1 -1
  224. package/dist/core/timings.d.ts +2 -1
  225. package/dist/core/timings.d.ts.map +1 -1
  226. package/dist/core/timings.js +17 -2
  227. package/dist/core/timings.js.map +1 -1
  228. package/dist/dev-cli.js +0 -0
  229. package/dist/gateway/agent-bridge.d.ts +6 -1
  230. package/dist/gateway/agent-bridge.d.ts.map +1 -1
  231. package/dist/gateway/agent-bridge.js +23 -6
  232. package/dist/gateway/agent-bridge.js.map +1 -1
  233. package/dist/gateway/commands.d.ts +1 -1
  234. package/dist/gateway/commands.d.ts.map +1 -1
  235. package/dist/gateway/commands.js +1 -18
  236. package/dist/gateway/commands.js.map +1 -1
  237. package/dist/gateway/cron.d.ts +1 -1
  238. package/dist/gateway/cron.d.ts.map +1 -1
  239. package/dist/gateway/cron.js +23 -7
  240. package/dist/gateway/cron.js.map +1 -1
  241. package/dist/main.d.ts +2 -2
  242. package/dist/main.d.ts.map +1 -1
  243. package/dist/main.js +57 -48
  244. package/dist/main.js.map +1 -1
  245. package/dist/modes/interactive/components/footer.d.ts +4 -2
  246. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  247. package/dist/modes/interactive/components/footer.js +23 -32
  248. package/dist/modes/interactive/components/footer.js.map +1 -1
  249. package/dist/modes/interactive/components/processes-selector.d.ts +2 -3
  250. package/dist/modes/interactive/components/processes-selector.d.ts.map +1 -1
  251. package/dist/modes/interactive/components/processes-selector.js +5 -10
  252. package/dist/modes/interactive/components/processes-selector.js.map +1 -1
  253. package/dist/modes/interactive/components/settings-selector.d.ts +4 -0
  254. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  255. package/dist/modes/interactive/components/settings-selector.js +20 -0
  256. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  257. package/dist/modes/interactive/interactive-mode.d.ts +12 -21
  258. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  259. package/dist/modes/interactive/interactive-mode.js +138 -152
  260. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  261. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  262. package/dist/modes/interactive/theme/theme.js +95 -84
  263. package/dist/modes/interactive/theme/theme.js.map +1 -1
  264. package/dist/modes/interactive/thinking-level-slash.d.ts +4 -0
  265. package/dist/modes/interactive/thinking-level-slash.d.ts.map +1 -0
  266. package/dist/modes/interactive/thinking-level-slash.js +23 -0
  267. package/dist/modes/interactive/thinking-level-slash.js.map +1 -0
  268. package/dist/node-runtime/adapter-AZMY335J.js +279 -0
  269. package/dist/node-runtime/agent-session-services-RSGP5GDN.js +39 -0
  270. package/dist/node-runtime/benchmark-request-UC7PD3V3.js +57 -0
  271. package/dist/node-runtime/brave-UWDA3I22.js +143 -0
  272. package/dist/node-runtime/builtin-extensions-7STLFW3A.js +29 -0
  273. package/dist/node-runtime/chunk-2IDTZAG5.js +1415 -0
  274. package/dist/node-runtime/chunk-3GHXVUAK.js +21 -0
  275. package/dist/node-runtime/chunk-3RCWXWAY.js +466 -0
  276. package/dist/node-runtime/chunk-3WFAEVKS.js +115 -0
  277. package/dist/node-runtime/chunk-3X3KZKMI.js +49 -0
  278. package/dist/node-runtime/chunk-4HXHDDCF.js +16 -0
  279. package/dist/node-runtime/chunk-4SJWFTUP.js +24 -0
  280. package/dist/node-runtime/chunk-4ZWGEEAS.js +69 -0
  281. package/dist/node-runtime/chunk-53YJI7JU.js +137 -0
  282. package/dist/node-runtime/chunk-5NWQCSKR.js +19218 -0
  283. package/dist/node-runtime/chunk-5OLJGVCB.js +68 -0
  284. package/dist/node-runtime/chunk-5Q45AVQG.js +108 -0
  285. package/dist/node-runtime/chunk-5SQDLSZJ.js +949 -0
  286. package/dist/node-runtime/chunk-6SPPH4FY.js +1269 -0
  287. package/dist/node-runtime/chunk-6UB6NKA3.js +860 -0
  288. package/dist/node-runtime/chunk-7AFOFSDY.js +105 -0
  289. package/dist/node-runtime/chunk-7N3YHTYF.js +26 -0
  290. package/dist/node-runtime/chunk-ARC4KOTI.js +11178 -0
  291. package/dist/node-runtime/chunk-AUXVGBO4.js +19 -0
  292. package/dist/node-runtime/chunk-AY6CAJSL.js +30 -0
  293. package/dist/node-runtime/chunk-BHO7O6E5.js +296 -0
  294. package/dist/node-runtime/chunk-BI3DHYCN.js +8845 -0
  295. package/dist/node-runtime/chunk-BKAZ6BKX.js +2185 -0
  296. package/dist/node-runtime/chunk-BR7YDUKA.js +109 -0
  297. package/dist/node-runtime/chunk-BRJX2PRC.js +53 -0
  298. package/dist/node-runtime/chunk-C4O2RSQQ.js +37 -0
  299. package/dist/node-runtime/chunk-CCZJ3PYY.js +17 -0
  300. package/dist/node-runtime/chunk-CGBXPL3E.js +1171 -0
  301. package/dist/node-runtime/chunk-CH6OL6P2.js +295 -0
  302. package/dist/node-runtime/chunk-CJECDQKP.js +19 -0
  303. package/dist/node-runtime/chunk-DAPBPCBP.js +53 -0
  304. package/dist/node-runtime/chunk-DDGMHUOW.js +305 -0
  305. package/dist/node-runtime/chunk-DMMTJQMQ.js +43 -0
  306. package/dist/node-runtime/chunk-DVGWF6A2.js +1180 -0
  307. package/dist/node-runtime/chunk-EH2LJQPM.js +64 -0
  308. package/dist/node-runtime/chunk-EHMBW7FA.js +772 -0
  309. package/dist/node-runtime/chunk-FLYMHKCS.js +966 -0
  310. package/dist/node-runtime/chunk-FVDOXRUD.js +96 -0
  311. package/dist/node-runtime/chunk-GZQHMEWL.js +126 -0
  312. package/dist/node-runtime/chunk-H2EOZYMP.js +57 -0
  313. package/dist/node-runtime/chunk-HQCKFM2O.js +56 -0
  314. package/dist/node-runtime/chunk-HRS4HMDX.js +610 -0
  315. package/dist/node-runtime/chunk-HYHJIRDW.js +19 -0
  316. package/dist/node-runtime/chunk-I6R76AG7.js +22 -0
  317. package/dist/node-runtime/chunk-ISQDQIZN.js +296 -0
  318. package/dist/node-runtime/chunk-J7QGQD45.js +24921 -0
  319. package/dist/node-runtime/chunk-JHYKXIMM.js +378 -0
  320. package/dist/node-runtime/chunk-JT6YCS5B.js +5648 -0
  321. package/dist/node-runtime/chunk-JZHEUQRL.js +180 -0
  322. package/dist/node-runtime/chunk-K72NVGUB.js +2834 -0
  323. package/dist/node-runtime/chunk-KKSIVROT.js +88 -0
  324. package/dist/node-runtime/chunk-LCACDWHJ.js +1743 -0
  325. package/dist/node-runtime/chunk-LTXUQJI4.js +173 -0
  326. package/dist/node-runtime/chunk-LWJXTA6Z.js +6814 -0
  327. package/dist/node-runtime/chunk-M3LZLQW2.js +98 -0
  328. package/dist/node-runtime/chunk-MGSB2C3M.js +46 -0
  329. package/dist/node-runtime/chunk-MGWCVY6Y.js +47 -0
  330. package/dist/node-runtime/chunk-MJQDX3BA.js +72 -0
  331. package/dist/node-runtime/chunk-MUMMMTW4.js +8392 -0
  332. package/dist/node-runtime/chunk-MX3GJNXJ.js +986 -0
  333. package/dist/node-runtime/chunk-NUIFPZWX.js +209 -0
  334. package/dist/node-runtime/chunk-OBMWP3I5.js +68 -0
  335. package/dist/node-runtime/chunk-OR4L3IB2.js +42 -0
  336. package/dist/node-runtime/chunk-OTT6JMPU.js +807 -0
  337. package/dist/node-runtime/chunk-PCIGF2XK.js +250 -0
  338. package/dist/node-runtime/chunk-PL6JKXWI.js +3622 -0
  339. package/dist/node-runtime/chunk-PVCDKGR6.js +55 -0
  340. package/dist/node-runtime/chunk-Q4Q6D4IY.js +364 -0
  341. package/dist/node-runtime/chunk-Q5ZU2VRT.js +83 -0
  342. package/dist/node-runtime/chunk-QFWG2RVL.js +5477 -0
  343. package/dist/node-runtime/chunk-RQ2Q5IYR.js +72 -0
  344. package/dist/node-runtime/chunk-RQ5DNUNG.js +429 -0
  345. package/dist/node-runtime/chunk-RRIZE6QQ.js +17 -0
  346. package/dist/node-runtime/chunk-SN6G4OU6.js +4753 -0
  347. package/dist/node-runtime/chunk-SWSN6HAB.js +53 -0
  348. package/dist/node-runtime/chunk-T5GM5BFH.js +7558 -0
  349. package/dist/node-runtime/chunk-TAP7QTUT.js +1346 -0
  350. package/dist/node-runtime/chunk-U6C7VTR5.js +2033 -0
  351. package/dist/node-runtime/chunk-URD2SLIT.js +1019 -0
  352. package/dist/node-runtime/chunk-VRB2IYGG.js +53 -0
  353. package/dist/node-runtime/chunk-W3CVH5RX.js +62 -0
  354. package/dist/node-runtime/chunk-W7S2REEG.js +9478 -0
  355. package/dist/node-runtime/chunk-XBWPBZBN.js +125 -0
  356. package/dist/node-runtime/chunk-XTHQ7XR7.js +509 -0
  357. package/dist/node-runtime/chunk-ZCHMJ34K.js +130 -0
  358. package/dist/node-runtime/chunk-ZRDIMBEQ.js +651 -0
  359. package/dist/node-runtime/chunk-ZSEZY3II.js +247 -0
  360. package/dist/node-runtime/cli-runtime.js +81 -0
  361. package/dist/node-runtime/clipboard-OZ63BBC6.js +12 -0
  362. package/dist/node-runtime/clipboard-image-7QR6GXVA.js +13 -0
  363. package/dist/node-runtime/command-6UXQ6XZN.js +13 -0
  364. package/dist/node-runtime/commands-LGR5VT5X.js +293 -0
  365. package/dist/node-runtime/config-FMEOZSWE.js +77 -0
  366. package/dist/node-runtime/curator-server-XCM43VEF.js +3816 -0
  367. package/dist/node-runtime/customize-XEXL2DGQ.js +12 -0
  368. package/dist/node-runtime/direct-tool-executor-TDJS7TBD.js +191 -0
  369. package/dist/node-runtime/exa-LL64QZR2.js +329 -0
  370. package/dist/node-runtime/export-html-E4DT6ZJQ.js +150 -0
  371. package/dist/node-runtime/extension-input-RV5N6APL.js +14 -0
  372. package/dist/node-runtime/extension-selector-CPD5LWDD.js +14 -0
  373. package/dist/node-runtime/extract-IUCVZCWC.js +17 -0
  374. package/dist/node-runtime/file-sync-HCOP2QVF.js +117 -0
  375. package/dist/node-runtime/gateway-3OLC4GQN.js +2139 -0
  376. package/dist/node-runtime/gemini-api-QE7ANVDZ.js +29 -0
  377. package/dist/node-runtime/gemini-search-NCIDF7NE.js +330 -0
  378. package/dist/node-runtime/gemini-url-context-OKIN7AIP.js +103 -0
  379. package/dist/node-runtime/gemini-web-MM446SEH.js +14 -0
  380. package/dist/node-runtime/github-extract-F64RZOEA.js +619 -0
  381. package/dist/node-runtime/goal-CZQ7FFQJ.js +1831 -0
  382. package/dist/node-runtime/image-resize-6ZPBFMWW.js +11 -0
  383. package/dist/node-runtime/index.js +863 -0
  384. package/dist/node-runtime/init-EKE277AG.js +30 -0
  385. package/dist/node-runtime/install-cli-TH7IJJQQ.js +308 -0
  386. package/dist/node-runtime/interactive-mode-S5M26CQ7.js +59 -0
  387. package/dist/node-runtime/interactive-view-N6F4KUIT.js +247 -0
  388. package/dist/node-runtime/lsp-manager-3ASUSO4T.js +1104 -0
  389. package/dist/node-runtime/lunr-computer-use-4X3KUNF4.js +206 -0
  390. package/dist/node-runtime/lunr-cron-KKBOGAEF.js +274 -0
  391. package/dist/node-runtime/main.js +57 -0
  392. package/dist/node-runtime/mcp-auth-flow-YL6RWPYG.js +33 -0
  393. package/dist/node-runtime/mcp-panel-IIGMXQGP.js +501 -0
  394. package/dist/node-runtime/mcp-setup-panel-FEK7663I.js +355 -0
  395. package/dist/node-runtime/memory-cap-3S4XRLNP.js +20 -0
  396. package/dist/node-runtime/model-tiers-NJLHUEGK.js +20 -0
  397. package/dist/node-runtime/openai-search-B3MSNCQA.js +288 -0
  398. package/dist/node-runtime/package-manager-cli-C4EJOO5Q.js +751 -0
  399. package/dist/node-runtime/parallel-AI2MNSCU.js +265 -0
  400. package/dist/node-runtime/parser-manager-TQHWYDH7.js +152 -0
  401. package/dist/node-runtime/pdf-extract-IPE6H4HP.js +57 -0
  402. package/dist/node-runtime/perplexity-QVJW3I35.js +12 -0
  403. package/dist/node-runtime/pi-intercom-EEMBGQID.js +2215 -0
  404. package/dist/node-runtime/pi-mcp-adapter-DPTJGAAL.js +428 -0
  405. package/dist/node-runtime/pi-ollama-cloud-4VZRMULP.js +1440 -0
  406. package/dist/node-runtime/pi-prompt-template-model-4QT4LLXF.js +3946 -0
  407. package/dist/node-runtime/pi-subagents-VKCLYIBY.js +6050 -0
  408. package/dist/node-runtime/pi-web-access-BV6DSZOP.js +1867 -0
  409. package/dist/node-runtime/print-mode-VWIRFDAC.js +12 -0
  410. package/dist/node-runtime/proxy-modes-R64LU6WZ.js +688 -0
  411. package/dist/node-runtime/rpc-entry.js +65 -0
  412. package/dist/node-runtime/rpc-mode-SJNSOA4G.js +13 -0
  413. package/dist/node-runtime/runtime-3SB5ATHQ.js +21 -0
  414. package/dist/node-runtime/runtime-bridges-UJ5WJJLN.js +14 -0
  415. package/dist/node-runtime/session-manager-QEMZBMTM.js +33 -0
  416. package/dist/node-runtime/session-selector-URVJLOTK.js +14 -0
  417. package/dist/node-runtime/settings-manager-K6IPIQTI.js +23 -0
  418. package/dist/node-runtime/src-GPFAU3N6.js +2427 -0
  419. package/dist/node-runtime/subagent-executor-EFLTO32A.js +8501 -0
  420. package/dist/node-runtime/summary-review-YSMXKITO.js +228 -0
  421. package/dist/node-runtime/tavily-WEZFVFP7.js +154 -0
  422. package/dist/node-runtime/timings-UAD5BEAS.js +16 -0
  423. package/dist/node-runtime/tool-renderer-MV5O452K.js +204 -0
  424. package/dist/node-runtime/update-cli-I6OVDRPL.js +75 -0
  425. package/dist/node-runtime/v4-5MNC3H7G.js +424 -0
  426. package/dist/node-runtime/video-extract-ETA5RA7U.js +304 -0
  427. package/dist/node-runtime/workflow-SA34S4VX.js +325 -0
  428. package/dist/node-runtime/workspace-index-6DBXSTJ6.js +163 -0
  429. package/dist/node-runtime/youtube-extract-SRVGNN26.js +264 -0
  430. package/dist/rpc.d.ts +3 -0
  431. package/dist/rpc.d.ts.map +1 -0
  432. package/dist/rpc.js +18 -0
  433. package/dist/rpc.js.map +1 -0
  434. package/dist/startup/benchmark-request.d.ts +3 -0
  435. package/dist/startup/benchmark-request.d.ts.map +1 -0
  436. package/dist/startup/benchmark-request.js +65 -0
  437. package/dist/startup/benchmark-request.js.map +1 -0
  438. package/dist/startup/{interactive-shell.d.ts → interactive-view.d.ts} +18 -18
  439. package/dist/startup/interactive-view.d.ts.map +1 -0
  440. package/dist/startup/{interactive-shell.js → interactive-view.js} +119 -52
  441. package/dist/startup/interactive-view.js.map +1 -0
  442. package/dist/startup/launch-routing.d.ts.map +1 -1
  443. package/dist/startup/launch-routing.js +9 -10
  444. package/dist/startup/launch-routing.js.map +1 -1
  445. package/dist/startup/startup-milestones.d.ts +1 -1
  446. package/dist/startup/startup-milestones.d.ts.map +1 -1
  447. package/dist/startup/startup-milestones.js +3 -2
  448. package/dist/startup/startup-milestones.js.map +1 -1
  449. package/dist/utils/await-with-abort.d.ts +2 -0
  450. package/dist/utils/await-with-abort.d.ts.map +1 -0
  451. package/dist/utils/await-with-abort.js +19 -0
  452. package/dist/utils/await-with-abort.js.map +1 -0
  453. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  454. package/dist/utils/syntax-highlight.js +10 -4
  455. package/dist/utils/syntax-highlight.js.map +1 -1
  456. package/docs/compaction.md +5 -3
  457. package/docs/computer-use.md +277 -0
  458. package/docs/development.md +5 -33
  459. package/docs/features.md +2 -3
  460. package/docs/interactive-startup.md +105 -0
  461. package/docs/keybindings.md +2 -2
  462. package/docs/terminal-setup.md +1 -1
  463. package/docs/usage.md +1 -2
  464. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  465. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  466. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  467. package/examples/extensions/gondolin/package-lock.json +2 -2
  468. package/examples/extensions/gondolin/package.json +1 -1
  469. package/examples/extensions/hidden-thinking-label.ts +1 -1
  470. package/examples/extensions/sandbox/package-lock.json +2 -2
  471. package/examples/extensions/sandbox/package.json +1 -1
  472. package/examples/extensions/with-deps/package-lock.json +2 -2
  473. package/examples/extensions/with-deps/package.json +1 -1
  474. package/install-lock/package-lock.json +3827 -0
  475. package/install-lock/package.json +18 -0
  476. package/native/computer-use/LICENSE.md +21 -0
  477. package/npm-shrinkwrap.json +3808 -0
  478. package/package.json +30 -24
  479. package/dist/core/swarm.d.ts +0 -23
  480. package/dist/core/swarm.d.ts.map +0 -1
  481. package/dist/core/swarm.js +0 -45
  482. package/dist/core/swarm.js.map +0 -1
  483. package/dist/startup/interactive-shell.d.ts.map +0 -1
  484. package/dist/startup/interactive-shell.js.map +0 -1
@@ -38,7 +38,6 @@ import { getSearchCuratorSetting, setSearchCuratorSetting } from "../../core/sea
38
38
  import { formatMissingSessionCwdPrompt, MissingSessionCwdError } from "../../core/session-cwd.js";
39
39
  import { SessionManager, sessionEntryToContextMessages } from "../../core/session-manager.js";
40
40
  import { BUILTIN_SLASH_COMMANDS } from "../../core/slash-commands.js";
41
- import { buildSwarmPrompt } from "../../core/swarm.js";
42
41
  import { time } from "../../core/timings.js";
43
42
  import { hasTrustRequiringProjectResources, ProjectTrustStore } from "../../core/trust-manager.js";
44
43
  import { checkForUpdate, markUpdateNotified } from "../../core/update-check.js";
@@ -93,6 +92,7 @@ import { wrapSkillTagAutocomplete } from "./skill-tag-autocomplete.js";
93
92
  import { computeSmoothRevealStep, countGraphemesBeforeToolCall, countMessageGraphemes, sliceMessageContent, } from "./smooth-streaming.js";
94
93
  import { getAvailableThemes, getAvailableThemesWithPaths, getEditorTheme, getMarkdownTheme, getThemeByName, getThemeName, onThemeChange, setRegisteredThemes, stopThemeWatcher, Theme, theme, } from "./theme/theme.js";
95
94
  import { InteractiveThemeController } from "./theme/theme-controller.js";
95
+ import { wrapThinkingLevelSlashCommands } from "./thinking-level-slash.js";
96
96
  function isExpandable(obj) {
97
97
  return typeof obj === "object" && obj !== null && "setExpanded" in obj && typeof obj.setExpanded === "function";
98
98
  }
@@ -227,9 +227,6 @@ export class InteractiveMode {
227
227
  stopCatalogRefresh;
228
228
  onInputCallback;
229
229
  pendingUserInputs = [];
230
- startupUserInputs = [];
231
- startedFromShell;
232
- deferredStartupEditorFactory;
233
230
  stagedSubmitImages;
234
231
  fallbackImageAttachments = new Map();
235
232
  activeStatusIndicator = undefined;
@@ -275,8 +272,6 @@ export class InteractiveMode {
275
272
  signalCleanupHandlers = [];
276
273
  // Track if editor is in bash mode (text starts with !)
277
274
  isBashMode = false;
278
- // Track whether a /swarm orchestration turn is in flight (footer status)
279
- swarmMode = false;
280
275
  // lunr: mode in effect before the current plan stretch. Used by approve / `/plan off`
281
276
  // / `/plan <text>` to leave plan. Shift+Tab and `/mode` pick the destination themselves.
282
277
  previousPermissionMode;
@@ -294,6 +289,7 @@ export class InteractiveMode {
294
289
  pendingBashComponents = [];
295
290
  // Auto-compaction state
296
291
  autoCompactionEscapeHandler;
292
+ pendingCompactionRender;
297
293
  // Auto-retry state
298
294
  retryEscapeHandler;
299
295
  // Messages queued while compaction is running
@@ -322,8 +318,9 @@ export class InteractiveMode {
322
318
  autoTrustOnReloadCwd;
323
319
  themeController;
324
320
  deferredBuiltinsAttached = false;
321
+ startupReadyPromise;
322
+ startupFeatureError;
325
323
  deferredBuiltinAttachPromise;
326
- promptBarrierPromise;
327
324
  // Convenience accessors
328
325
  get session() {
329
326
  return this.runtimeHost.session;
@@ -363,9 +360,7 @@ export class InteractiveMode {
363
360
  this.syncPermissionModeEffects(this.settingsManager.getDefaultPermissionMode());
364
361
  });
365
362
  this.version = VERSION;
366
- const startupShell = options.startupShellBinding;
367
- this.startedFromShell = startupShell !== undefined;
368
- this.ui = startupShell?.ui ?? new TUI(new ProcessTerminal(), this.settingsManager.getShowHardwareCursor());
363
+ this.ui = options.startupView?.ui ?? new TUI(new ProcessTerminal(), this.settingsManager.getShowHardwareCursor());
369
364
  this.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());
370
365
  // lunr: register the permission-mode footer bridge (provider-side: InteractiveMode owns the state).
371
366
  registerPermissionModeBridge(() => getPermissionMode());
@@ -376,25 +371,29 @@ export class InteractiveMode {
376
371
  // lunr: reset permission mode to configured default on startup.
377
372
  resetPermissions(this.settingsManager.getDefaultPermissionMode());
378
373
  this.headerContainer = new Container();
374
+ if (options.startupView) {
375
+ this.headerContainer.addChild(new Spacer(1));
376
+ this.headerContainer.addChild(options.startupView.header);
377
+ this.customFooter = options.startupView.footer;
378
+ }
379
379
  this.loadedResourcesContainer = new Container();
380
380
  this.chatContainer = new Container();
381
381
  this.pendingMessagesContainer = new Container();
382
- this.statusContainer = new Container();
382
+ this.statusContainer = options.startupView?.statusContainer ?? new Container();
383
383
  this.widgetContainerAbove = new Container();
384
384
  this.widgetContainerBelow = new Container();
385
- this.keybindings = startupShell?.keybindings ?? KeybindingsManager.create();
385
+ this.keybindings = options.startupView?.keybindings ?? KeybindingsManager.create();
386
386
  setKeybindings(this.keybindings);
387
387
  const editorPaddingX = this.settingsManager.getEditorPaddingX();
388
388
  const autocompleteMaxVisible = this.settingsManager.getAutocompleteMaxVisible();
389
389
  this.defaultEditor =
390
- startupShell?.editor ??
390
+ options.startupView?.editor ??
391
391
  new CustomEditor(this.ui, getEditorTheme(), this.keybindings, {
392
392
  paddingX: editorPaddingX,
393
393
  autocompleteMaxVisible,
394
394
  });
395
- this.defaultEditor.setPaddingX(editorPaddingX);
396
- this.defaultEditor.setAutocompleteMaxVisible(autocompleteMaxVisible);
397
395
  this.editor = this.defaultEditor;
396
+ options.startupView?.setCurrentEditor(() => this.editor);
398
397
  this.editorContainer = new Container();
399
398
  this.editorContainer.addChild(this.editor);
400
399
  this.footerDataProvider = new FooterDataProvider(this.sessionManager.getCwd());
@@ -537,7 +536,7 @@ export class InteractiveMode {
537
536
  });
538
537
  }
539
538
  setupAutocompleteProvider() {
540
- let provider = this.createBaseAutocompleteProvider();
539
+ let provider = wrapThinkingLevelSlashCommands(this.createBaseAutocompleteProvider(), () => this.session.getAvailableThinkingLevels());
541
540
  const triggerCharacters = [...(provider.triggerCharacters ?? [])];
542
541
  for (const wrapProvider of this.autocompleteProviderWrappers) {
543
542
  provider = wrapProvider(provider);
@@ -556,14 +555,11 @@ export class InteractiveMode {
556
555
  if (this.isInitialized)
557
556
  return;
558
557
  this.registerSignalHandlers();
559
- const startupBenchmark = process.env.PI_STARTUP_BENCHMARK === "1";
560
558
  this.fdPath = getToolPath("fd") ?? undefined;
561
- const toolMaintenance = startupBenchmark
562
- ? Promise.resolve()
563
- : startInteractiveToolInstalls(this.fdPath, (fdPath) => {
564
- this.fdPath = fdPath;
565
- this.setupAutocompleteProvider();
566
- });
559
+ void startInteractiveToolInstalls(this.fdPath, (fdPath) => {
560
+ this.fdPath = fdPath;
561
+ this.setupAutocompleteProvider();
562
+ });
567
563
  time("ensureTools");
568
564
  if (this.session.scopedModels.length > 0 && (this.options.verbose || !this.settingsManager.getQuietStartup())) {
569
565
  const modelList = this.session.scopedModels
@@ -578,7 +574,7 @@ export class InteractiveMode {
578
574
  : "";
579
575
  console.log(theme.fg("dim", `Model scope: ${modelList}${cycleHint}`));
580
576
  }
581
- if (this.startedFromShell) {
577
+ if (this.options.startupView) {
582
578
  this.ui.pinFrom(null);
583
579
  this.ui.clear();
584
580
  }
@@ -593,28 +589,20 @@ export class InteractiveMode {
593
589
  this.ui.addChild(this.widgetContainerAbove);
594
590
  this.ui.addChild(this.editorContainer);
595
591
  this.ui.addChild(this.widgetContainerBelow);
596
- this.ui.addChild(this.footer);
592
+ this.ui.addChild(this.customFooter ?? this.footer);
597
593
  this.ui.setFocus(this.editor);
598
- this.setupKeyHandlers();
599
- const startupSubmissions = this.options.startupShellBinding?.pendingSubmissions.splice(0) ?? [];
600
- this.startupUserInputs.push(...startupSubmissions.map(async ({ text, attachments }) => ({
601
- text,
602
- images: await this.loadImageAttachments(attachments),
603
- })));
604
- this.setupEditorSubmitHandler();
605
594
  this.ui.pinFrom(this.widgetContainerAbove);
595
+ this.setupKeyHandlers();
596
+ if (!this.options.startupView)
597
+ this.setupEditorSubmitHandler();
606
598
  this.ui.setAlternateScreen(true);
607
- if (this.startedFromShell) {
608
- this.ui.requestRender(true);
609
- }
610
- else {
599
+ // Start the UI before initializing extensions so session_start handlers can use interactive dialogs
600
+ if (!this.options.startupView)
611
601
  this.ui.start();
612
- }
613
602
  this.isInitialized = true;
614
603
  time("ui.start");
615
- const updateMaintenance = startupBenchmark ? Promise.resolve() : this.maybeNotifyCliUpdate();
616
- if (!startupBenchmark)
617
- this.startPlanUsagePolling();
604
+ void this.maybeNotifyCliUpdate();
605
+ this.startPlanUsagePolling();
618
606
  // lunr: register the permission approval dialog handler so manual mode can prompt.
619
607
  registerApprovalHandler(async (req) => {
620
608
  if (req.kind === "large-subagent-launch") {
@@ -638,6 +626,7 @@ export class InteractiveMode {
638
626
  setRollbackWarningHandler((msg) => this.showStatus(msg));
639
627
  this.syncPermissionModeEffects(this.settingsManager.getDefaultPermissionMode());
640
628
  await this.themeController.applyFromSettings();
629
+ this.headerContainer.clear();
641
630
  // Add boot screen header (unless silenced)
642
631
  if (this.options.verbose || !this.settingsManager.getQuietStartup()) {
643
632
  const header = theme.bold(theme.fg("accent", APP_NAME)) + theme.fg("dim", ` v${this.version}`);
@@ -657,21 +646,32 @@ export class InteractiveMode {
657
646
  await this.rebindCurrentSession();
658
647
  time("rebindCurrentSession");
659
648
  this.renderInitialMessages();
660
- for (const diagnostic of this.options.startupDiagnostics ?? []) {
661
- if (diagnostic.type === "warning")
662
- this.showWarning(diagnostic.message);
663
- else
664
- this.showStatus(diagnostic.message);
665
- }
649
+ this.ui.requestRender();
650
+ for (const diagnostic of this.options.startupDiagnostics ?? [])
651
+ this.showStatus(diagnostic.message);
666
652
  for (const warning of this.options.deprecationWarnings ?? [])
667
653
  this.showWarning(warning);
668
654
  this.deferredBuiltinAttachPromise = this.attachDeferredBuiltinExtensions();
669
- this.promptBarrierPromise = this.deferredBuiltinAttachPromise.then(() => {
670
- time("attachDeferredBuiltins");
671
- markStartupMilestone("prompt_barrier_open");
672
- }, () => {
655
+ this.startupReadyPromise = this.deferredBuiltinAttachPromise.then(() => {
656
+ if (!this.isInitialized)
657
+ return;
658
+ if (this.startupFeatureError)
659
+ throw this.startupFeatureError;
660
+ if (this.options.startupView) {
661
+ this.setupEditorSubmitHandler();
662
+ // Extensions can replace the editor. Wire its submit callback after readiness as well.
663
+ this.editor.onSubmit = this.defaultEditor.onSubmit;
664
+ this.options.startupView.activate();
665
+ }
673
666
  time("attachDeferredBuiltins");
674
667
  markStartupMilestone("prompt_barrier_open");
668
+ void this.options.deferredMaintenance?.();
669
+ });
670
+ void this.startupReadyPromise.catch((error) => {
671
+ if (this.options.startupView)
672
+ this.options.startupView.showError(error);
673
+ else
674
+ this.showError(String(error));
675
675
  });
676
676
  // Set up theme file watcher
677
677
  onThemeChange(() => {
@@ -681,47 +681,40 @@ export class InteractiveMode {
681
681
  });
682
682
  // Set up git branch watcher (uses provider instead of footer)
683
683
  this.footerDataProvider.onBranchChange(() => {
684
- this.ui.requestPaint();
684
+ this.ui.requestRender();
685
685
  });
686
- const providerMaintenance = startupBenchmark
687
- ? Promise.resolve()
688
- : this.updateAvailableProviderCount().then(() => {
689
- time("updateAvailableProviderCount");
690
- });
691
- const callerMaintenance = startupBenchmark
692
- ? Promise.resolve()
693
- : this.waitForPromptBarrier().then(() => this.options.deferredMaintenance?.());
694
- if (!startupBenchmark)
695
- void this.waitForPromptBarrier().then(() => {
696
- if (!this.isInitialized)
697
- return;
698
- this.stopCatalogRefresh = startCatalogRefreshPolling({
699
- refresh: (signal) => this.session.modelRuntime.refreshIfStale({ signal }),
700
- isBusy: () => this.session.isStreaming,
701
- onUpdate: () => {
702
- this.session.refreshModelFromRegistry();
703
- this.footer.invalidate();
704
- },
705
- });
686
+ // Cache-only footer snapshot. Do not hold time-to-type on it.
687
+ void this.updateAvailableProviderCount().then(() => {
688
+ time("updateAvailableProviderCount");
689
+ });
690
+ void this.waitForDeferredBuiltins().then(() => {
691
+ if (!this.isInitialized)
692
+ return;
693
+ this.stopCatalogRefresh = startCatalogRefreshPolling({
694
+ refresh: (signal) => this.session.modelRuntime.refreshIfStale({ signal }),
695
+ isBusy: () => this.session.isStreaming,
696
+ onUpdate: () => {
697
+ this.session.refreshModelFromRegistry();
698
+ this.footer.invalidate();
699
+ },
706
700
  });
707
- void Promise.allSettled([toolMaintenance, updateMaintenance, providerMaintenance, callerMaintenance]).then(() => {
708
- markStartupMilestone("deferred_maintenance_idle");
709
701
  });
710
702
  }
703
+ async waitForStartupReady() {
704
+ await this.startupReadyPromise;
705
+ }
706
+ /** Wait until deferred builtins have attached (or were skipped). */
711
707
  async waitForDeferredBuiltins() {
712
- if (this.deferredBuiltinAttachPromise)
708
+ if (this.deferredBuiltinAttachPromise) {
713
709
  await this.deferredBuiltinAttachPromise;
714
- }
715
- async waitForPromptBarrier() {
716
- if (this.promptBarrierPromise)
717
- await this.promptBarrierPromise;
710
+ }
718
711
  }
719
712
  planUsageTimer;
720
713
  startPlanUsagePolling() {
721
714
  const bridge = getUsageServiceBridge();
722
715
  if (!bridge)
723
716
  return;
724
- bridge.setOnUpdate(() => this.ui.requestPaint());
717
+ bridge.setOnUpdate(() => this.ui.requestRender());
725
718
  const tick = () => {
726
719
  const provider = this.session.model?.provider;
727
720
  if (provider)
@@ -769,6 +762,7 @@ export class InteractiveMode {
769
762
  if (!this.isInitialized) {
770
763
  await this.init();
771
764
  }
765
+ await this.waitForStartupReady();
772
766
  // Check tmux keyboard setup asynchronously
773
767
  this.checkTmuxKeyboardSetup().then((warning) => {
774
768
  if (warning) {
@@ -1307,7 +1301,7 @@ export class InteractiveMode {
1307
1301
  * Initialize the extension system with TUI-based UI context.
1308
1302
  */
1309
1303
  async awaitDeferredBuiltinsForPrompt() {
1310
- await this.waitForPromptBarrier();
1304
+ await this.waitForDeferredBuiltins();
1311
1305
  }
1312
1306
  async promptAfterDeferredBuiltins(text, options) {
1313
1307
  await this.awaitDeferredBuiltinsForPrompt();
@@ -1323,24 +1317,24 @@ export class InteractiveMode {
1323
1317
  }
1324
1318
  this.setExtensionStatus("deferred-builtins", "loading tools…");
1325
1319
  try {
1326
- const { extensions, failures } = await this.options.deferredBuiltinFactories();
1327
- if (extensions.length > 0) {
1328
- this.options.onDeferredBuiltinsAttached?.(extensions);
1329
- await this.session.attachInlineExtensions(extensions);
1330
- this.setupAutocompleteProvider();
1331
- this.setupExtensionShortcuts(this.session.extensionRunner);
1332
- this.showLoadedResources({ force: false, showDiagnosticsWhenQuiet: true });
1333
- }
1334
- if (failures.length > 0) {
1335
- this.showError(`Failed to load deferred extensions: ${failures.map(({ name }) => name).join(", ")}`);
1336
- }
1320
+ const factories = await this.options.deferredBuiltinFactories();
1321
+ this.deferredBuiltinsAttached = true;
1322
+ if (factories.length === 0)
1323
+ return;
1324
+ this.options.onDeferredBuiltinsAttached?.(factories);
1325
+ await this.session.attachInlineExtensions(factories);
1326
+ this.setupAutocompleteProvider();
1327
+ this.setupExtensionShortcuts(this.session.extensionRunner);
1328
+ this.showLoadedResources({ force: false, showDiagnosticsWhenQuiet: true });
1337
1329
  }
1338
1330
  catch (error) {
1331
+ this.deferredBuiltinsAttached = false;
1339
1332
  const message = error instanceof Error ? error.message : String(error);
1333
+ if (this.options.startupView)
1334
+ this.startupFeatureError = new Error(message);
1340
1335
  this.showError(`Failed to load deferred extensions: ${message}`);
1341
1336
  }
1342
1337
  finally {
1343
- this.deferredBuiltinsAttached = true;
1344
1338
  this.setExtensionStatus("deferred-builtins", undefined);
1345
1339
  }
1346
1340
  }
@@ -1490,6 +1484,7 @@ export class InteractiveMode {
1490
1484
  this.chatContainer.clear();
1491
1485
  this.pendingMessagesContainer.clear();
1492
1486
  this.compactionQueuedMessages = [];
1487
+ this.pendingCompactionRender = undefined;
1493
1488
  this.stopSmoothStreaming();
1494
1489
  this.streamingComponent = undefined;
1495
1490
  this.streamingMessage = undefined;
@@ -1715,7 +1710,13 @@ export class InteractiveMode {
1715
1710
  if (leadingSpacer) {
1716
1711
  container.addChild(new Spacer(1));
1717
1712
  }
1713
+ let first = true;
1718
1714
  for (const component of widgets.values()) {
1715
+ if (!first) {
1716
+ container.addChild(new Spacer(1));
1717
+ container.addChild(new DynamicBorder((s) => theme.fg("dim", s)));
1718
+ }
1719
+ first = false;
1719
1720
  container.addChild(component);
1720
1721
  }
1721
1722
  }
@@ -1996,12 +1997,9 @@ export class InteractiveMode {
1996
1997
  */
1997
1998
  setCustomEditorComponent(factory) {
1998
1999
  this.editorComponentFactory = factory;
2000
+ // Save text from current editor before switching
1999
2001
  const currentText = this.editor.getText();
2000
- if (this.startedFromShell && factory && currentText.length > 0) {
2001
- this.deferredStartupEditorFactory = factory;
2002
- return;
2003
- }
2004
- this.deferredStartupEditorFactory = undefined;
2002
+ const startupImages = this.options.startupView ? this.editor.getPendingImages?.() : undefined;
2005
2003
  this.editorContainer.clear();
2006
2004
  if (factory) {
2007
2005
  // Create the custom editor with tui, theme, and keybindings
@@ -2010,7 +2008,16 @@ export class InteractiveMode {
2010
2008
  newEditor.onSubmit = this.defaultEditor.onSubmit;
2011
2009
  newEditor.onChange = this.defaultEditor.onChange;
2012
2010
  // Copy text from previous editor
2013
- newEditor.setText(currentText);
2011
+ if (newEditor !== this.editor) {
2012
+ newEditor.setText(currentText);
2013
+ if (startupImages?.length) {
2014
+ if (newEditor.restoreImageMarkers)
2015
+ newEditor.restoreImageMarkers(startupImages);
2016
+ else
2017
+ for (const image of startupImages)
2018
+ this.fallbackImageAttachments.set(image.id, image);
2019
+ }
2020
+ }
2014
2021
  // Copy appearance settings if supported
2015
2022
  if (newEditor.borderColor !== undefined) {
2016
2023
  newEditor.borderColor = this.defaultEditor.borderColor;
@@ -2025,7 +2032,9 @@ export class InteractiveMode {
2025
2032
  // If extending CustomEditor, copy app-level handlers
2026
2033
  // Use duck typing since instanceof fails across jiti module boundaries
2027
2034
  const customEditor = newEditor;
2028
- if ("actionHandlers" in customEditor && customEditor.actionHandlers instanceof Map) {
2035
+ if (newEditor !== this.defaultEditor &&
2036
+ "actionHandlers" in customEditor &&
2037
+ customEditor.actionHandlers instanceof Map) {
2029
2038
  if (!customEditor.onEscape) {
2030
2039
  customEditor.onEscape = () => this.defaultEditor.onEscape?.();
2031
2040
  }
@@ -2044,20 +2053,14 @@ export class InteractiveMode {
2044
2053
  }
2045
2054
  else {
2046
2055
  // Restore default editor with text from custom editor
2047
- this.defaultEditor.setText(currentText);
2056
+ if (this.editor !== this.defaultEditor)
2057
+ this.defaultEditor.setText(currentText);
2048
2058
  this.editor = this.defaultEditor;
2049
2059
  }
2050
2060
  this.editorContainer.addChild(this.editor);
2051
2061
  this.ui.setFocus(this.editor);
2052
2062
  this.ui.requestRender();
2053
2063
  }
2054
- activateDeferredStartupEditor() {
2055
- const factory = this.deferredStartupEditorFactory;
2056
- if (!factory || this.editor.getText().length > 0)
2057
- return;
2058
- this.deferredStartupEditorFactory = undefined;
2059
- this.setCustomEditorComponent(factory);
2060
- }
2061
2064
  /**
2062
2065
  * Show a notification for extensions.
2063
2066
  */
@@ -2354,9 +2357,8 @@ export class InteractiveMode {
2354
2357
  const image = await readClipboardImage();
2355
2358
  if (image) {
2356
2359
  const saved = this.writeClipboardImageFile(image);
2357
- const id = this.insertImageChip(saved);
2360
+ this.insertImageChip(saved);
2358
2361
  this.ui.requestRender();
2359
- this.showStatus(`Pasted ${formatImageMarker(id)}`);
2360
2362
  return;
2361
2363
  }
2362
2364
  if (options.textFallback !== false) {
@@ -2381,7 +2383,6 @@ export class InteractiveMode {
2381
2383
  return;
2382
2384
  }
2383
2385
  const images = this.consumeStagedSubmitImages() ?? (await this.loadImageAttachments(this.takeSubmittedImages(text)));
2384
- this.activateDeferredStartupEditor();
2385
2386
  this.ui.setChatScroll(0);
2386
2387
  // Handle commands
2387
2388
  if (text === "/paste-image") {
@@ -2554,12 +2555,6 @@ export class InteractiveMode {
2554
2555
  await this.handleInitCommand();
2555
2556
  return;
2556
2557
  }
2557
- if (text === "/swarm" || text.startsWith("/swarm ")) {
2558
- const task = text.startsWith("/swarm ") ? text.slice(7).trim() : "";
2559
- this.editor.setText("");
2560
- await this.handleSwarmCommand(task);
2561
- return;
2562
- }
2563
2558
  if (text === "/debug") {
2564
2559
  this.handleDebugCommand();
2565
2560
  this.editor.setText("");
@@ -2957,16 +2952,17 @@ export class InteractiveMode {
2957
2952
  this.streamingMessage = undefined;
2958
2953
  }
2959
2954
  this.pendingTools.clear();
2960
- if (this.swarmMode) {
2961
- this.swarmMode = false;
2962
- this.setExtensionStatus("swarm", undefined);
2963
- }
2964
2955
  this.maybeAutoNameSession();
2965
2956
  // lunr: capture tree-scope changes at turn boundary (bash side-effects).
2966
2957
  captureTreeChanges(this.sessionManager.getCwd(), this.sessionManager.getSessionId());
2967
2958
  this.ui.requestRender();
2968
2959
  break;
2969
2960
  case "agent_settled":
2961
+ if (this.pendingCompactionRender) {
2962
+ const result = this.pendingCompactionRender;
2963
+ this.pendingCompactionRender = undefined;
2964
+ this.renderCompactionResult(result);
2965
+ }
2970
2966
  await this.checkShutdownRequested();
2971
2967
  break;
2972
2968
  case "compaction_start": {
@@ -3000,10 +2996,12 @@ export class InteractiveMode {
3000
2996
  }
3001
2997
  }
3002
2998
  else if (event.result) {
3003
- this.chatContainer.clear();
3004
- this.rebuildChatFromMessages();
3005
- this.addMessageToChat(createCompactionSummaryMessage(event.result.summary, event.result.tokensBefore, new Date().toISOString()));
3006
- this.footer.invalidate();
2999
+ if (this.session.isIdle) {
3000
+ this.renderCompactionResult(event.result);
3001
+ }
3002
+ else {
3003
+ this.pendingCompactionRender = event.result;
3004
+ }
3007
3005
  }
3008
3006
  else if (event.errorMessage) {
3009
3007
  if (event.reason === "manual") {
@@ -3332,9 +3330,6 @@ export class InteractiveMode {
3332
3330
  this.chatContainer.addChild(new Text(theme.fg("warning", `This project is not trusted. Project ${CONFIG_DIR_NAME} resources and packages are ignored. Use /trust to save a trust decision, then restart pi.`), 1, 0));
3333
3331
  }
3334
3332
  async getUserInput() {
3335
- const startupInput = this.startupUserInputs.shift();
3336
- if (startupInput !== undefined)
3337
- return startupInput;
3338
3333
  const queuedInput = this.pendingUserInputs.shift();
3339
3334
  if (queuedInput !== undefined) {
3340
3335
  return queuedInput;
@@ -3360,7 +3355,6 @@ export class InteractiveMode {
3360
3355
  }
3361
3356
  else {
3362
3357
  this.clearEditor();
3363
- this.activateDeferredStartupEditor();
3364
3358
  this.lastSigintTime = now;
3365
3359
  }
3366
3360
  }
@@ -3626,7 +3620,6 @@ export class InteractiveMode {
3626
3620
  else {
3627
3621
  this.footer.invalidate();
3628
3622
  this.updateEditorBorderColor();
3629
- this.showStatus(`Thinking level: ${newLevel}`);
3630
3623
  }
3631
3624
  }
3632
3625
  cyclePermissionMode() {
@@ -3642,8 +3635,6 @@ export class InteractiveMode {
3642
3635
  else {
3643
3636
  this.footer.invalidate();
3644
3637
  this.updateEditorBorderColor();
3645
- const thinkingStr = result.model.reasoning && result.thinkingLevel !== "off" ? ` (thinking: ${result.thinkingLevel})` : "";
3646
- this.showStatus(`Switched to ${result.model.name || result.model.id}${thinkingStr}`);
3647
3638
  void this.maybeWarnAboutAnthropicSubscriptionAuth(result.model);
3648
3639
  }
3649
3640
  }
@@ -3861,6 +3852,12 @@ export class InteractiveMode {
3861
3852
  const commandName = spaceIndex === -1 ? text.slice(1) : text.slice(1, spaceIndex);
3862
3853
  return !!extensionRunner.getCommand(commandName);
3863
3854
  }
3855
+ renderCompactionResult(result) {
3856
+ this.chatContainer.clear();
3857
+ this.rebuildChatFromMessages();
3858
+ this.addMessageToChat(createCompactionSummaryMessage(result.summary, result.tokensBefore, new Date().toISOString()));
3859
+ this.footer.invalidate();
3860
+ }
3864
3861
  async flushCompactionQueue(options) {
3865
3862
  if (this.compactionQueuedMessages.length === 0) {
3866
3863
  return;
@@ -4001,6 +3998,8 @@ export class InteractiveMode {
4001
3998
  globalInstructionsPath: getGlobalInstructionsPath(getAgentDir()),
4002
3999
  modelInstructionsPath: getModelInstructionsPath(getAgentDir(), this.session.model?.id ?? "no-model-selected"),
4003
4000
  confirmLargeSubagentLaunches: this.settingsManager.getConfirmLargeSubagentLaunches(),
4001
+ computerUse: this.settingsManager.getComputerUse(),
4002
+ computerForeground: this.settingsManager.getComputerForeground(),
4004
4003
  memoryEnabled: this.settingsManager.getMemoryEnabled(),
4005
4004
  memoryCharCap: this.settingsManager.getMemoryCharCap(),
4006
4005
  searchCurator: getSearchCuratorSetting(),
@@ -4206,6 +4205,12 @@ export class InteractiveMode {
4206
4205
  onMemoryCharCapChange: (cap) => {
4207
4206
  this.settingsManager.setMemoryCharCap(cap);
4208
4207
  },
4208
+ onComputerUseChange: (enabled) => {
4209
+ this.settingsManager.setComputerUse(enabled);
4210
+ },
4211
+ onComputerForegroundChange: (enabled) => {
4212
+ this.settingsManager.setComputerForeground(enabled);
4213
+ },
4209
4214
  onMemoryEnabledChange: (enabled) => {
4210
4215
  this.settingsManager.setMemoryEnabled(enabled);
4211
4216
  this.session.refreshToolRegistry();
@@ -5599,24 +5604,6 @@ export class InteractiveMode {
5599
5604
  await this.sendUserMessageAfterDeferredBuiltins(prompt);
5600
5605
  this.showStatus("AGENTS.md is being generated — run /reload when it finishes to load it into context.");
5601
5606
  }
5602
- async handleSwarmCommand(task) {
5603
- if (task.length === 0) {
5604
- if (this.swarmMode) {
5605
- this.showStatus("Swarm mode is active — run /subagents-fleet to monitor the fleet.");
5606
- }
5607
- else {
5608
- this.showStatus("Usage: /swarm <task> — decomposes the task across parallel subagents. Monitor with /subagents-fleet.");
5609
- }
5610
- return;
5611
- }
5612
- if (this.session.isStreaming) {
5613
- this.showWarning("Wait for the current response to finish before running /swarm.");
5614
- return;
5615
- }
5616
- this.swarmMode = true;
5617
- this.setExtensionStatus("swarm", "swarm");
5618
- await this.sendUserMessageAfterDeferredBuiltins(buildSwarmPrompt(task));
5619
- }
5620
5607
  // lunr: /undo and /edit rewind the same session via navigateTree (no fork).
5621
5608
  // /undo leaves the editor alone; /edit pastes the undone user text. /redo
5622
5609
  // pops the previous leaf and navigates back.
@@ -6460,7 +6447,7 @@ export class InteractiveMode {
6460
6447
  this.showSelector((done) => {
6461
6448
  const component = new ProcessesSelectorComponent(() => {
6462
6449
  done();
6463
- }, () => this.ui.requestPaint());
6450
+ });
6464
6451
  return { component, focus: component };
6465
6452
  });
6466
6453
  }
@@ -6630,8 +6617,7 @@ export class InteractiveMode {
6630
6617
  ${cycleThinkingLevel ? `| \`${cycleThinkingLevel}\` | Cycle thinking level |\n` : ""}| \`${cycleModelForward}\` / \`${cycleModelBackward}\` | Cycle models |
6631
6618
  | \`${selectModel}\` | Open model selector |
6632
6619
  | \`${expandTools}\` | Expand or collapse a thinking/tool card |
6633
- | \`${toggleThinking}\` | Toggle thinking block visibility |
6634
- | \`${externalEditor}\` | Edit message in external editor |
6620
+ ${toggleThinking ? `| \`${toggleThinking}\` | Toggle thinking block visibility |\n` : ""}| \`${externalEditor}\` | Edit message in external editor |
6635
6621
  | \`${copyMessage}\` | Copy last assistant message |
6636
6622
  | \`${followUp}\` | Queue follow-up message |
6637
6623
  | \`${dequeue}\` | Restore queued messages |