@averyyy/pi-coding-agent 0.83.0-piclient.1 → 0.84.1-piclient.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 (344) hide show
  1. package/CHANGELOG.md +227 -0
  2. package/README.md +5 -0
  3. package/dist/cli/args.d.ts +2 -0
  4. package/dist/cli/args.d.ts.map +1 -1
  5. package/dist/cli/args.js +22 -3
  6. package/dist/cli/args.js.map +1 -1
  7. package/dist/cli/auth-check.d.ts +19 -0
  8. package/dist/cli/auth-check.d.ts.map +1 -0
  9. package/dist/cli/auth-check.js +50 -0
  10. package/dist/cli/auth-check.js.map +1 -0
  11. package/dist/cli/auth-command.d.ts +24 -0
  12. package/dist/cli/auth-command.d.ts.map +1 -0
  13. package/dist/cli/auth-command.js +102 -0
  14. package/dist/cli/auth-command.js.map +1 -0
  15. package/dist/cli/config-selector.d.ts.map +1 -1
  16. package/dist/cli/config-selector.js +2 -2
  17. package/dist/cli/config-selector.js.map +1 -1
  18. package/dist/cli/credential-print.d.ts +5 -15
  19. package/dist/cli/credential-print.d.ts.map +1 -1
  20. package/dist/cli/credential-print.js +42 -82
  21. package/dist/cli/credential-print.js.map +1 -1
  22. package/dist/cli/experimental/auth.d.ts +16 -0
  23. package/dist/cli/experimental/auth.d.ts.map +1 -0
  24. package/dist/cli/experimental/auth.js +13 -0
  25. package/dist/cli/experimental/auth.js.map +1 -0
  26. package/dist/cli/experimental/cli.d.ts +6 -0
  27. package/dist/cli/experimental/cli.d.ts.map +1 -0
  28. package/dist/cli/experimental/cli.js +5 -0
  29. package/dist/cli/experimental/cli.js.map +1 -0
  30. package/dist/cli/experimental/command-options.d.ts +17 -0
  31. package/dist/cli/experimental/command-options.d.ts.map +1 -0
  32. package/dist/cli/experimental/command-options.js +35 -0
  33. package/dist/cli/experimental/command-options.js.map +1 -0
  34. package/dist/cli/experimental/command.d.ts +63 -0
  35. package/dist/cli/experimental/command.d.ts.map +1 -0
  36. package/dist/cli/experimental/command.js +130 -0
  37. package/dist/cli/experimental/command.js.map +1 -0
  38. package/dist/cli/experimental/commands/client.d.ts +13 -0
  39. package/dist/cli/experimental/commands/client.d.ts.map +1 -0
  40. package/dist/cli/experimental/commands/client.js +25 -0
  41. package/dist/cli/experimental/commands/client.js.map +1 -0
  42. package/dist/cli/experimental/commands/pi.d.ts +15 -0
  43. package/dist/cli/experimental/commands/pi.d.ts.map +1 -0
  44. package/dist/cli/experimental/commands/pi.js +28 -0
  45. package/dist/cli/experimental/commands/pi.js.map +1 -0
  46. package/dist/cli/experimental/commands/server.d.ts +13 -0
  47. package/dist/cli/experimental/commands/server.d.ts.map +1 -0
  48. package/dist/cli/experimental/commands/server.js +25 -0
  49. package/dist/cli/experimental/commands/server.js.map +1 -0
  50. package/dist/cli/experimental/transport-address.d.ts +10 -0
  51. package/dist/cli/experimental/transport-address.d.ts.map +1 -0
  52. package/dist/cli/experimental/transport-address.js +38 -0
  53. package/dist/cli/experimental/transport-address.js.map +1 -0
  54. package/dist/cli/list-models.d.ts +1 -1
  55. package/dist/cli/list-models.d.ts.map +1 -1
  56. package/dist/cli/list-models.js +2 -2
  57. package/dist/cli/list-models.js.map +1 -1
  58. package/dist/cli/startup-ui.d.ts +1 -1
  59. package/dist/cli/startup-ui.d.ts.map +1 -1
  60. package/dist/cli/startup-ui.js +2 -2
  61. package/dist/cli/startup-ui.js.map +1 -1
  62. package/dist/cli.d.ts.map +1 -1
  63. package/dist/cli.js +1 -0
  64. package/dist/cli.js.map +1 -1
  65. package/dist/client/index.d.ts +3 -0
  66. package/dist/client/index.d.ts.map +1 -0
  67. package/dist/client/index.js +3 -0
  68. package/dist/client/index.js.map +1 -0
  69. package/dist/client/remote-session.d.ts +53 -0
  70. package/dist/client/remote-session.d.ts.map +1 -0
  71. package/dist/client/remote-session.js +340 -0
  72. package/dist/client/remote-session.js.map +1 -0
  73. package/dist/client/transcript.d.ts +12 -0
  74. package/dist/client/transcript.d.ts.map +1 -0
  75. package/dist/client/transcript.js +98 -0
  76. package/dist/client/transcript.js.map +1 -0
  77. package/dist/core/agent-session-services.d.ts +1 -0
  78. package/dist/core/agent-session-services.d.ts.map +1 -1
  79. package/dist/core/agent-session-services.js +1 -0
  80. package/dist/core/agent-session-services.js.map +1 -1
  81. package/dist/core/agent-session.d.ts +2 -11
  82. package/dist/core/agent-session.d.ts.map +1 -1
  83. package/dist/core/agent-session.js +61 -59
  84. package/dist/core/agent-session.js.map +1 -1
  85. package/dist/core/auth-storage.d.ts +25 -9
  86. package/dist/core/auth-storage.d.ts.map +1 -1
  87. package/dist/core/auth-storage.js +237 -39
  88. package/dist/core/auth-storage.js.map +1 -1
  89. package/dist/core/extensions/index.d.ts +1 -1
  90. package/dist/core/extensions/index.d.ts.map +1 -1
  91. package/dist/core/extensions/index.js.map +1 -1
  92. package/dist/core/extensions/loader.d.ts.map +1 -1
  93. package/dist/core/extensions/loader.js +43 -20
  94. package/dist/core/extensions/loader.js.map +1 -1
  95. package/dist/core/extensions/runner.d.ts +2 -1
  96. package/dist/core/extensions/runner.d.ts.map +1 -1
  97. package/dist/core/extensions/runner.js +3 -0
  98. package/dist/core/extensions/runner.js.map +1 -1
  99. package/dist/core/extensions/types.d.ts +26 -3
  100. package/dist/core/extensions/types.d.ts.map +1 -1
  101. package/dist/core/extensions/types.js.map +1 -1
  102. package/dist/core/http-dispatcher.d.ts.map +1 -1
  103. package/dist/core/http-dispatcher.js +5 -0
  104. package/dist/core/http-dispatcher.js.map +1 -1
  105. package/dist/core/keybindings.d.ts +44 -4
  106. package/dist/core/keybindings.d.ts.map +1 -1
  107. package/dist/core/model-config.d.ts +29 -5
  108. package/dist/core/model-config.d.ts.map +1 -1
  109. package/dist/core/model-config.js +4 -0
  110. package/dist/core/model-config.js.map +1 -1
  111. package/dist/core/model-registry.d.ts +5 -3
  112. package/dist/core/model-registry.d.ts.map +1 -1
  113. package/dist/core/model-registry.js +13 -10
  114. package/dist/core/model-registry.js.map +1 -1
  115. package/dist/core/model-resolver.d.ts +4 -3
  116. package/dist/core/model-resolver.d.ts.map +1 -1
  117. package/dist/core/model-resolver.js +42 -10
  118. package/dist/core/model-resolver.js.map +1 -1
  119. package/dist/core/model-runtime.d.ts +30 -13
  120. package/dist/core/model-runtime.d.ts.map +1 -1
  121. package/dist/core/model-runtime.js +233 -73
  122. package/dist/core/model-runtime.js.map +1 -1
  123. package/dist/core/models-store.d.ts +12 -7
  124. package/dist/core/models-store.d.ts.map +1 -1
  125. package/dist/core/models-store.js +83 -14
  126. package/dist/core/models-store.js.map +1 -1
  127. package/dist/core/package-manager.d.ts +4 -1
  128. package/dist/core/package-manager.d.ts.map +1 -1
  129. package/dist/core/package-manager.js +63 -36
  130. package/dist/core/package-manager.js.map +1 -1
  131. package/dist/core/pi-manifest.d.ts +8 -0
  132. package/dist/core/pi-manifest.d.ts.map +1 -0
  133. package/dist/core/pi-manifest.js +25 -0
  134. package/dist/core/pi-manifest.js.map +1 -0
  135. package/dist/core/pi-server-client.d.ts +2 -2
  136. package/dist/core/pi-server-client.d.ts.map +1 -1
  137. package/dist/core/pi-server-client.js +2 -0
  138. package/dist/core/pi-server-client.js.map +1 -1
  139. package/dist/core/provider-composer.d.ts +4 -1
  140. package/dist/core/provider-composer.d.ts.map +1 -1
  141. package/dist/core/provider-composer.js +36 -15
  142. package/dist/core/provider-composer.js.map +1 -1
  143. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  144. package/dist/core/remote-catalog-provider.js +73 -67
  145. package/dist/core/remote-catalog-provider.js.map +1 -1
  146. package/dist/core/resource-loader.d.ts.map +1 -1
  147. package/dist/core/resource-loader.js +2 -2
  148. package/dist/core/resource-loader.js.map +1 -1
  149. package/dist/core/runtime-credentials.d.ts +5 -5
  150. package/dist/core/runtime-credentials.d.ts.map +1 -1
  151. package/dist/core/runtime-credentials.js +11 -8
  152. package/dist/core/runtime-credentials.js.map +1 -1
  153. package/dist/core/session-manager.d.ts.map +1 -1
  154. package/dist/core/session-manager.js +3 -1
  155. package/dist/core/session-manager.js.map +1 -1
  156. package/dist/core/settings-manager.d.ts +12 -0
  157. package/dist/core/settings-manager.d.ts.map +1 -1
  158. package/dist/core/settings-manager.js +40 -16
  159. package/dist/core/settings-manager.js.map +1 -1
  160. package/dist/core/tools/bash.d.ts +4 -0
  161. package/dist/core/tools/bash.d.ts.map +1 -1
  162. package/dist/core/tools/bash.js +6 -4
  163. package/dist/core/tools/bash.js.map +1 -1
  164. package/dist/core/tools/edit.d.ts +4 -0
  165. package/dist/core/tools/edit.d.ts.map +1 -1
  166. package/dist/core/tools/edit.js +11 -7
  167. package/dist/core/tools/edit.js.map +1 -1
  168. package/dist/core/tools/find.d.ts +7 -0
  169. package/dist/core/tools/find.d.ts.map +1 -1
  170. package/dist/core/tools/find.js +16 -19
  171. package/dist/core/tools/find.js.map +1 -1
  172. package/dist/core/tools/grep.d.ts +4 -0
  173. package/dist/core/tools/grep.d.ts.map +1 -1
  174. package/dist/core/tools/grep.js +5 -1
  175. package/dist/core/tools/grep.js.map +1 -1
  176. package/dist/core/tools/ls.d.ts +4 -0
  177. package/dist/core/tools/ls.d.ts.map +1 -1
  178. package/dist/core/tools/ls.js +5 -1
  179. package/dist/core/tools/ls.js.map +1 -1
  180. package/dist/core/tools/read.d.ts +4 -0
  181. package/dist/core/tools/read.d.ts.map +1 -1
  182. package/dist/core/tools/read.js +7 -3
  183. package/dist/core/tools/read.js.map +1 -1
  184. package/dist/core/tools/render-utils.d.ts.map +1 -1
  185. package/dist/core/tools/render-utils.js +6 -3
  186. package/dist/core/tools/render-utils.js.map +1 -1
  187. package/dist/core/tools/write.d.ts +4 -0
  188. package/dist/core/tools/write.d.ts.map +1 -1
  189. package/dist/core/tools/write.js +6 -2
  190. package/dist/core/tools/write.js.map +1 -1
  191. package/dist/extensions/llama/index.d.ts.map +1 -1
  192. package/dist/extensions/llama/index.js +11 -2
  193. package/dist/extensions/llama/index.js.map +1 -1
  194. package/dist/extensions/llama/provider.d.ts.map +1 -1
  195. package/dist/extensions/llama/provider.js +21 -7
  196. package/dist/extensions/llama/provider.js.map +1 -1
  197. package/dist/index.d.ts +4 -4
  198. package/dist/index.d.ts.map +1 -1
  199. package/dist/index.js +1 -1
  200. package/dist/index.js.map +1 -1
  201. package/dist/main.d.ts.map +1 -1
  202. package/dist/main.js +70 -25
  203. package/dist/main.js.map +1 -1
  204. package/dist/modes/index.d.ts +1 -0
  205. package/dist/modes/index.d.ts.map +1 -1
  206. package/dist/modes/index.js.map +1 -1
  207. package/dist/modes/interactive/components/assistant-message.d.ts +5 -2
  208. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  209. package/dist/modes/interactive/components/assistant-message.js +13 -4
  210. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  211. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  212. package/dist/modes/interactive/components/custom-editor.js +7 -0
  213. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  214. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  215. package/dist/modes/interactive/components/footer.js +2 -2
  216. package/dist/modes/interactive/components/footer.js.map +1 -1
  217. package/dist/modes/interactive/components/markdown-transform.d.ts +3 -0
  218. package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -0
  219. package/dist/modes/interactive/components/markdown-transform.js +19 -0
  220. package/dist/modes/interactive/components/markdown-transform.js.map +1 -0
  221. package/dist/modes/interactive/components/mermaid.d.ts +11 -0
  222. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
  223. package/dist/modes/interactive/components/mermaid.js +75 -0
  224. package/dist/modes/interactive/components/mermaid.js.map +1 -0
  225. package/dist/modes/interactive/components/model-selector.d.ts +1 -1
  226. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  227. package/dist/modes/interactive/components/model-selector.js +16 -4
  228. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  229. package/dist/modes/interactive/components/scoped-models-selector.d.ts +4 -0
  230. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  231. package/dist/modes/interactive/components/scoped-models-selector.js +26 -0
  232. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  233. package/dist/modes/interactive/components/settings-selector.d.ts +8 -2
  234. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  235. package/dist/modes/interactive/components/settings-selector.js +30 -0
  236. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  237. package/dist/modes/interactive/components/user-message.d.ts +3 -1
  238. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  239. package/dist/modes/interactive/components/user-message.js +9 -2
  240. package/dist/modes/interactive/components/user-message.js.map +1 -1
  241. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  242. package/dist/modes/interactive/external-editor.js +7 -5
  243. package/dist/modes/interactive/external-editor.js.map +1 -1
  244. package/dist/modes/interactive/interactive-mode.d.ts +36 -2
  245. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  246. package/dist/modes/interactive/interactive-mode.js +461 -144
  247. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  248. package/dist/modes/interactive/theme/dark.json +1 -0
  249. package/dist/modes/interactive/theme/light.json +1 -0
  250. package/dist/modes/interactive/theme/theme-controller.d.ts +3 -0
  251. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  252. package/dist/modes/interactive/theme/theme-controller.js +10 -1
  253. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  254. package/dist/modes/interactive/theme/theme-schema.json +5 -1
  255. package/dist/modes/interactive/theme/theme.d.ts +2 -2
  256. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  257. package/dist/modes/interactive/theme/theme.js +24 -6
  258. package/dist/modes/interactive/theme/theme.js.map +1 -1
  259. package/dist/modes/json-event.d.ts +28 -0
  260. package/dist/modes/json-event.d.ts.map +1 -0
  261. package/dist/modes/json-event.js +12 -0
  262. package/dist/modes/json-event.js.map +1 -0
  263. package/dist/modes/print-mode.d.ts.map +1 -1
  264. package/dist/modes/print-mode.js +12 -2
  265. package/dist/modes/print-mode.js.map +1 -1
  266. package/dist/modes/rpc/rpc-client.d.ts +5 -4
  267. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  268. package/dist/modes/rpc/rpc-client.js.map +1 -1
  269. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  270. package/dist/modes/rpc/rpc-mode.js +4 -3
  271. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  272. package/dist/package-manager-cli.d.ts.map +1 -1
  273. package/dist/package-manager-cli.js +11 -9
  274. package/dist/package-manager-cli.js.map +1 -1
  275. package/dist/rpc-entry.d.ts.map +1 -1
  276. package/dist/rpc-entry.js +1 -0
  277. package/dist/rpc-entry.js.map +1 -1
  278. package/dist/server/create-harness.d.ts +26 -0
  279. package/dist/server/create-harness.d.ts.map +1 -0
  280. package/dist/server/create-harness.js +104 -0
  281. package/dist/server/create-harness.js.map +1 -0
  282. package/dist/utils/abort.d.ts +5 -0
  283. package/dist/utils/abort.d.ts.map +1 -0
  284. package/dist/utils/abort.js +48 -0
  285. package/dist/utils/abort.js.map +1 -0
  286. package/dist/utils/clipboard.d.ts +1 -1
  287. package/dist/utils/clipboard.d.ts.map +1 -1
  288. package/dist/utils/clipboard.js +22 -2
  289. package/dist/utils/clipboard.js.map +1 -1
  290. package/dist/utils/management-http.d.ts +23 -0
  291. package/dist/utils/management-http.d.ts.map +1 -0
  292. package/dist/utils/management-http.js +50 -0
  293. package/dist/utils/management-http.js.map +1 -0
  294. package/dist/utils/paths.d.ts +3 -0
  295. package/dist/utils/paths.d.ts.map +1 -1
  296. package/dist/utils/paths.js +23 -1
  297. package/dist/utils/paths.js.map +1 -1
  298. package/dist/utils/tool-result-images.d.ts +19 -0
  299. package/dist/utils/tool-result-images.d.ts.map +1 -0
  300. package/dist/utils/tool-result-images.js +45 -0
  301. package/dist/utils/tool-result-images.js.map +1 -0
  302. package/dist/utils/tools-manager.d.ts.map +1 -1
  303. package/dist/utils/tools-manager.js +4 -6
  304. package/dist/utils/tools-manager.js.map +1 -1
  305. package/dist/utils/version-check.d.ts +4 -0
  306. package/dist/utils/version-check.d.ts.map +1 -1
  307. package/dist/utils/version-check.js +20 -2
  308. package/dist/utils/version-check.js.map +1 -1
  309. package/docs/compaction.md +2 -2
  310. package/docs/custom-provider.md +7 -5
  311. package/docs/extensions.md +30 -5
  312. package/docs/json.md +19 -14
  313. package/docs/keybindings.md +46 -14
  314. package/docs/models.md +24 -3
  315. package/docs/providers.md +9 -1
  316. package/docs/quickstart.md +2 -0
  317. package/docs/rpc.md +13 -11
  318. package/docs/sdk.md +21 -2
  319. package/docs/security.md +1 -1
  320. package/docs/settings.md +4 -1
  321. package/docs/themes.md +5 -3
  322. package/docs/usage.md +7 -0
  323. package/examples/extensions/custom-compaction.ts +1 -16
  324. package/examples/extensions/custom-provider-anthropic/index.ts +2 -1
  325. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  326. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  327. package/examples/extensions/custom-provider-gitlab-duo/index.ts +2 -1
  328. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  329. package/examples/extensions/doom-overlay/wad-finder.ts +7 -3
  330. package/examples/extensions/gondolin/package-lock.json +2 -2
  331. package/examples/extensions/gondolin/package.json +1 -1
  332. package/examples/extensions/handoff.ts +2 -11
  333. package/examples/extensions/qna.ts +3 -7
  334. package/examples/extensions/sandbox/package-lock.json +2 -2
  335. package/examples/extensions/sandbox/package.json +1 -1
  336. package/examples/extensions/summarize.ts +7 -18
  337. package/examples/extensions/with-deps/package-lock.json +2 -2
  338. package/examples/extensions/with-deps/package.json +1 -1
  339. package/examples/rpc-extension-ui.ts +11 -2
  340. package/examples/sdk/02-custom-model.ts +1 -2
  341. package/examples/sdk/09-api-keys-and-oauth.ts +1 -1
  342. package/examples/sdk/12-full-control.ts +1 -1
  343. package/examples/sdk/README.md +1 -1
  344. package/package.json +13 -6
@@ -1 +1 @@
1
- {"version":3,"file":"external-editor.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/external-editor.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,qBAAqB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,oBAAoB,GAAG;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,CAAC;AAElG,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAgCxG","sourcesContent":["import { spawn } from \"node:child_process\";\nimport { mkdtempSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport interface ExternalEditorOptions {\n\tcommand: string;\n\tcontent: string;\n}\n\nexport type ExternalEditorResult = { status: \"complete\"; content: string } | { status: \"failed\" };\n\nexport async function editInExternalEditor(options: ExternalEditorOptions): Promise<ExternalEditorResult> {\n\tconst directory = mkdtempSync(join(tmpdir(), \"pi-editor-\"));\n\tconst filePath = join(directory, \"prompt.md\");\n\ttry {\n\t\twriteFileSync(filePath, options.content, \"utf-8\");\n\t\tconst [editor, ...editorArgs] = options.command.split(\" \");\n\t\tprocess.stdout.write(`Launching external editor: ${options.command}\\nPi will resume when the editor exits.\\n`);\n\n\t\t// Do not use spawnSync here. On Windows, synchronous child_process calls can keep\n\t\t// Node/libuv's console input read active after the parent pauses stdin, racing\n\t\t// vim/nvim for the console input buffer until Ctrl+C cancels the pending read.\n\t\tconst exitCode = await new Promise<number | null>((resolve) => {\n\t\t\tconst child = spawn(editor, [...editorArgs, filePath], {\n\t\t\t\tstdio: \"inherit\",\n\t\t\t\tshell: process.platform === \"win32\",\n\t\t\t});\n\t\t\tchild.on(\"error\", () => resolve(null));\n\t\t\tchild.on(\"close\", (code) => resolve(code));\n\t\t});\n\n\t\tif (exitCode !== 0) {\n\t\t\treturn { status: \"failed\" };\n\t\t}\n\n\t\treturn { status: \"complete\", content: readFileSync(filePath, \"utf-8\").replace(/\\n$/, \"\") };\n\t} finally {\n\t\ttry {\n\t\t\trmSync(directory, { recursive: true, force: true });\n\t\t} catch {\n\t\t\t// Cleanup is best effort.\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"external-editor.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/external-editor.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,qBAAqB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,oBAAoB,GAAG;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,CAAC;AAElG,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAmCxG","sourcesContent":["import { spawn } from \"node:child_process\";\nimport { mkdtempSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport interface ExternalEditorOptions {\n\tcommand: string;\n\tcontent: string;\n}\n\nexport type ExternalEditorResult = { status: \"complete\"; content: string } | { status: \"failed\" };\n\nexport async function editInExternalEditor(options: ExternalEditorOptions): Promise<ExternalEditorResult> {\n\tconst directory = mkdtempSync(join(tmpdir(), \"pi-editor-\"));\n\tconst filePath = join(directory, \"prompt.md\");\n\ttry {\n\t\twriteFileSync(filePath, options.content, \"utf-8\");\n\t\tprocess.stdout.write(`Launching external editor: ${options.command}\\nPi will resume when the editor exits.\\n`);\n\n\t\t// Do not use spawnSync here. On Windows, synchronous child_process calls can keep\n\t\t// Node/libuv's console input read active after the parent pauses stdin, racing\n\t\t// vim/nvim for the console input buffer until Ctrl+C cancels the pending read.\n\t\tconst exitCode = await new Promise<number | null>((resolve) => {\n\t\t\tconst [editor, ...editorArgs] = options.command.split(\" \");\n\t\t\tconst child =\n\t\t\t\tprocess.platform === \"win32\"\n\t\t\t\t\t? spawn(`${options.command} \"${filePath.replaceAll('\"', '\"\"')}\"`, {\n\t\t\t\t\t\t\tstdio: \"inherit\",\n\t\t\t\t\t\t\tshell: true,\n\t\t\t\t\t\t})\n\t\t\t\t\t: spawn(editor, [...editorArgs, filePath], { stdio: \"inherit\" });\n\t\t\tchild.on(\"error\", () => resolve(null));\n\t\t\tchild.on(\"close\", (code) => resolve(code));\n\t\t});\n\n\t\tif (exitCode !== 0) {\n\t\t\treturn { status: \"failed\" };\n\t\t}\n\n\t\treturn { status: \"complete\", content: readFileSync(filePath, \"utf-8\").replace(/\\n$/, \"\") };\n\t} finally {\n\t\ttry {\n\t\t\trmSync(directory, { recursive: true, force: true });\n\t\t} catch {\n\t\t\t// Cleanup is best effort.\n\t\t}\n\t}\n}\n"]}
@@ -7,16 +7,18 @@ export async function editInExternalEditor(options) {
7
7
  const filePath = join(directory, "prompt.md");
8
8
  try {
9
9
  writeFileSync(filePath, options.content, "utf-8");
10
- const [editor, ...editorArgs] = options.command.split(" ");
11
10
  process.stdout.write(`Launching external editor: ${options.command}\nPi will resume when the editor exits.\n`);
12
11
  // Do not use spawnSync here. On Windows, synchronous child_process calls can keep
13
12
  // Node/libuv's console input read active after the parent pauses stdin, racing
14
13
  // vim/nvim for the console input buffer until Ctrl+C cancels the pending read.
15
14
  const exitCode = await new Promise((resolve) => {
16
- const child = spawn(editor, [...editorArgs, filePath], {
17
- stdio: "inherit",
18
- shell: process.platform === "win32",
19
- });
15
+ const [editor, ...editorArgs] = options.command.split(" ");
16
+ const child = process.platform === "win32"
17
+ ? spawn(`${options.command} "${filePath.replaceAll('"', '""')}"`, {
18
+ stdio: "inherit",
19
+ shell: true,
20
+ })
21
+ : spawn(editor, [...editorArgs, filePath], { stdio: "inherit" });
20
22
  child.on("error", () => resolve(null));
21
23
  child.on("close", (code) => resolve(code));
22
24
  });
@@ -1 +1 @@
1
- {"version":3,"file":"external-editor.js","sourceRoot":"","sources":["../../../src/modes/interactive/external-editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AASjC,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAA8B,EAAiC;IACzG,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC9C,IAAI,CAAC;QACJ,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,OAAO,CAAC,OAAO,2CAA2C,CAAC,CAAC;QAE/G,kFAAkF;QAClF,+EAA+E;QAC/E,+EAA+E;QAC/E,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,UAAU,EAAE,QAAQ,CAAC,EAAE;gBACtD,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;aACnC,CAAC,CAAC;YACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACvC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAAA,CAC3C,CAAC,CAAC;QAEH,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACpB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAC7B,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;IAC5F,CAAC;YAAS,CAAC;QACV,IAAI,CAAC;YACJ,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QAAC,MAAM,CAAC;YACR,0BAA0B;QAC3B,CAAC;IACF,CAAC;AAAA,CACD","sourcesContent":["import { spawn } from \"node:child_process\";\nimport { mkdtempSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport interface ExternalEditorOptions {\n\tcommand: string;\n\tcontent: string;\n}\n\nexport type ExternalEditorResult = { status: \"complete\"; content: string } | { status: \"failed\" };\n\nexport async function editInExternalEditor(options: ExternalEditorOptions): Promise<ExternalEditorResult> {\n\tconst directory = mkdtempSync(join(tmpdir(), \"pi-editor-\"));\n\tconst filePath = join(directory, \"prompt.md\");\n\ttry {\n\t\twriteFileSync(filePath, options.content, \"utf-8\");\n\t\tconst [editor, ...editorArgs] = options.command.split(\" \");\n\t\tprocess.stdout.write(`Launching external editor: ${options.command}\\nPi will resume when the editor exits.\\n`);\n\n\t\t// Do not use spawnSync here. On Windows, synchronous child_process calls can keep\n\t\t// Node/libuv's console input read active after the parent pauses stdin, racing\n\t\t// vim/nvim for the console input buffer until Ctrl+C cancels the pending read.\n\t\tconst exitCode = await new Promise<number | null>((resolve) => {\n\t\t\tconst child = spawn(editor, [...editorArgs, filePath], {\n\t\t\t\tstdio: \"inherit\",\n\t\t\t\tshell: process.platform === \"win32\",\n\t\t\t});\n\t\t\tchild.on(\"error\", () => resolve(null));\n\t\t\tchild.on(\"close\", (code) => resolve(code));\n\t\t});\n\n\t\tif (exitCode !== 0) {\n\t\t\treturn { status: \"failed\" };\n\t\t}\n\n\t\treturn { status: \"complete\", content: readFileSync(filePath, \"utf-8\").replace(/\\n$/, \"\") };\n\t} finally {\n\t\ttry {\n\t\t\trmSync(directory, { recursive: true, force: true });\n\t\t} catch {\n\t\t\t// Cleanup is best effort.\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"external-editor.js","sourceRoot":"","sources":["../../../src/modes/interactive/external-editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AASjC,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAA8B,EAAiC;IACzG,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC9C,IAAI,CAAC;QACJ,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,OAAO,CAAC,OAAO,2CAA2C,CAAC,CAAC;QAE/G,kFAAkF;QAClF,+EAA+E;QAC/E,+EAA+E;QAC/E,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9D,MAAM,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3D,MAAM,KAAK,GACV,OAAO,CAAC,QAAQ,KAAK,OAAO;gBAC3B,CAAC,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;oBAChE,KAAK,EAAE,SAAS;oBAChB,KAAK,EAAE,IAAI;iBACX,CAAC;gBACH,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YACnE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACvC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAAA,CAC3C,CAAC,CAAC;QAEH,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACpB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAC7B,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;IAC5F,CAAC;YAAS,CAAC;QACV,IAAI,CAAC;YACJ,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QAAC,MAAM,CAAC;YACR,0BAA0B;QAC3B,CAAC;IACF,CAAC;AAAA,CACD","sourcesContent":["import { spawn } from \"node:child_process\";\nimport { mkdtempSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport interface ExternalEditorOptions {\n\tcommand: string;\n\tcontent: string;\n}\n\nexport type ExternalEditorResult = { status: \"complete\"; content: string } | { status: \"failed\" };\n\nexport async function editInExternalEditor(options: ExternalEditorOptions): Promise<ExternalEditorResult> {\n\tconst directory = mkdtempSync(join(tmpdir(), \"pi-editor-\"));\n\tconst filePath = join(directory, \"prompt.md\");\n\ttry {\n\t\twriteFileSync(filePath, options.content, \"utf-8\");\n\t\tprocess.stdout.write(`Launching external editor: ${options.command}\\nPi will resume when the editor exits.\\n`);\n\n\t\t// Do not use spawnSync here. On Windows, synchronous child_process calls can keep\n\t\t// Node/libuv's console input read active after the parent pauses stdin, racing\n\t\t// vim/nvim for the console input buffer until Ctrl+C cancels the pending read.\n\t\tconst exitCode = await new Promise<number | null>((resolve) => {\n\t\t\tconst [editor, ...editorArgs] = options.command.split(\" \");\n\t\t\tconst child =\n\t\t\t\tprocess.platform === \"win32\"\n\t\t\t\t\t? spawn(`${options.command} \"${filePath.replaceAll('\"', '\"\"')}\"`, {\n\t\t\t\t\t\t\tstdio: \"inherit\",\n\t\t\t\t\t\t\tshell: true,\n\t\t\t\t\t\t})\n\t\t\t\t\t: spawn(editor, [...editorArgs, filePath], { stdio: \"inherit\" });\n\t\t\tchild.on(\"error\", () => resolve(null));\n\t\t\tchild.on(\"close\", (code) => resolve(code));\n\t\t});\n\n\t\tif (exitCode !== 0) {\n\t\t\treturn { status: \"failed\" };\n\t\t}\n\n\t\treturn { status: \"complete\", content: readFileSync(filePath, \"utf-8\").replace(/\\n$/, \"\") };\n\t} finally {\n\t\ttry {\n\t\t\trmSync(directory, { recursive: true, force: true });\n\t\t} catch {\n\t\t\t// Cleanup is best effort.\n\t\t}\n\t}\n}\n"]}
@@ -3,8 +3,11 @@
3
3
  * Handles TUI rendering and user interaction, delegating business logic to AgentSession.
4
4
  */
5
5
  import type { ImageContent } from "@earendil-works/pi-ai/compat";
6
+ import type { Terminal } from "@earendil-works/pi-tui";
7
+ import { type TUI, TuiAltScreen, TuiMainScreen } from "@earendil-works/pi-tui";
6
8
  import { type AgentSessionRuntime } from "../../core/agent-session-runtime.ts";
7
9
  import { SessionManager } from "../../core/session-manager.ts";
10
+ import type { TuiMode } from "../../core/settings-manager.ts";
8
11
  import { type LatestPiRelease } from "../../utils/version-check.ts";
9
12
  export declare function formatResumeCommand(sessionManager: SessionManager): string | undefined;
10
13
  /**
@@ -25,12 +28,30 @@ export interface InteractiveModeOptions {
25
28
  initialMessages?: string[];
26
29
  /** Force verbose startup (overrides quietStartup setting) */
27
30
  verbose?: boolean;
31
+ /** TUI layout mode. */
32
+ tuiMode?: TuiMode;
28
33
  }
34
+ interface InteractiveTuiOptions {
35
+ tuiMode: TuiMode;
36
+ showHardwareCursor: boolean;
37
+ logDirectory: string;
38
+ terminal?: Terminal;
39
+ onRightClickPaste?: () => void;
40
+ }
41
+ /** Composition root for selecting the interactive terminal renderer. */
42
+ export declare function createInteractiveTui(options: InteractiveTuiOptions): TuiMainScreen | TuiAltScreen;
43
+ /** Stable reference for components while InteractiveMode replaces the active renderer. */
44
+ export declare function createInteractiveTuiReference(getTui: () => TUI): TUI;
29
45
  export declare class InteractiveMode {
30
46
  private runtimeHost;
47
+ private renderer;
31
48
  private ui;
49
+ private mainScreenRenderState;
32
50
  private loadedResourcesContainer;
33
51
  private chatContainer;
52
+ private documentContainer;
53
+ private transcriptScrollView;
54
+ private fullscreenLayoutRoot;
34
55
  private pendingMessagesContainer;
35
56
  private statusContainer;
36
57
  private defaultEditor;
@@ -40,7 +61,10 @@ export declare class InteractiveMode {
40
61
  private autocompleteProviderWrappers;
41
62
  private fdPath;
42
63
  private editorContainer;
64
+ private activeSelectorToken?;
65
+ private activeSelectorDispose?;
43
66
  private footer;
67
+ private footerContainer;
44
68
  private footerDataProvider;
45
69
  private keybindings;
46
70
  private version;
@@ -68,6 +92,7 @@ export declare class InteractiveMode {
68
92
  private toolOutputExpanded;
69
93
  private hideThinkingBlock;
70
94
  private outputPad;
95
+ private readonly mermaidMarkdownTransformer;
71
96
  private skillCommands;
72
97
  private unsubscribe?;
73
98
  private signalCleanupHandlers;
@@ -81,7 +106,7 @@ export declare class InteractiveMode {
81
106
  private extensionSelector;
82
107
  private extensionInput;
83
108
  private extensionEditor;
84
- private extensionTerminalInputUnsubscribers;
109
+ private extensionTerminalInputSubscriptions;
85
110
  private extensionWidgetsAbove;
86
111
  private extensionWidgetsBelow;
87
112
  private widgetContainerAbove;
@@ -91,6 +116,7 @@ export declare class InteractiveMode {
91
116
  private builtInHeader;
92
117
  private customHeader;
93
118
  private options;
119
+ private readonly onRightClickPaste;
94
120
  private autoTrustOnReloadCwd;
95
121
  private themeController;
96
122
  private get session();
@@ -104,6 +130,9 @@ export declare class InteractiveMode {
104
130
  private createBaseAutocompleteProvider;
105
131
  private setupAutocompleteProvider;
106
132
  private showStartupNoticesIfNeeded;
133
+ private mountInteractiveTui;
134
+ private stopInteractiveTui;
135
+ private switchTuiMode;
107
136
  init(): Promise<void>;
108
137
  /**
109
138
  * Update terminal title with session name and cwd.
@@ -147,6 +176,7 @@ export declare class InteractiveMode {
147
176
  private formatDiagnostics;
148
177
  private showLoadedResources;
149
178
  private bindCurrentSessionExtensions;
179
+ private applyFullscreenScrollbarSetting;
150
180
  private applyRuntimeSettings;
151
181
  private rebindCurrentSession;
152
182
  private handleFatalRuntimeError;
@@ -155,6 +185,7 @@ export declare class InteractiveMode {
155
185
  * Get a registered tool definition by name (for custom rendering).
156
186
  */
157
187
  private getRegisteredToolDefinition;
188
+ private getMarkdownTransformers;
158
189
  /**
159
190
  * Set up keyboard shortcuts registered by extensions.
160
191
  */
@@ -190,6 +221,7 @@ export declare class InteractiveMode {
190
221
  */
191
222
  private setExtensionHeader;
192
223
  private addExtensionTerminalInputListener;
224
+ private rebindExtensionTerminalInputListeners;
193
225
  private clearExtensionTerminalInputListeners;
194
226
  /**
195
227
  * Create the ExtensionUIContext for extensions.
@@ -237,6 +269,7 @@ export declare class InteractiveMode {
237
269
  */
238
270
  private showExtensionError;
239
271
  private setupKeyHandlers;
272
+ private handleRightClickPaste;
240
273
  private handleClipboardPaste;
241
274
  private setupEditorSubmitHandler;
242
275
  private subscribeToAgent;
@@ -328,6 +361,7 @@ export declare class InteractiveMode {
328
361
  private flushCompactionQueue;
329
362
  /** Move pending bash components from pending area to chat */
330
363
  private flushPendingBashComponents;
364
+ private disposeActiveSelector;
331
365
  /**
332
366
  * Shows a selector component in place of the editor.
333
367
  * @param create Factory that receives a `done` callback and returns the component and focus target
@@ -336,7 +370,6 @@ export declare class InteractiveMode {
336
370
  private showSettingsSelector;
337
371
  private handleModelCommand;
338
372
  private findExactModelMatch;
339
- private getModelCandidates;
340
373
  /** Update the footer's available provider count from the current snapshot without refreshing catalogs. */
341
374
  private updateAvailableProviderCount;
342
375
  private maybeWarnAboutAnthropicSubscriptionAuth;
@@ -393,4 +426,5 @@ export declare class InteractiveMode {
393
426
  private handleCompactCommand;
394
427
  stop(): void;
395
428
  }
429
+ export {};
396
430
  //# sourceMappingURL=interactive-mode.d.ts.map