@avadisabelle/ava-pi-coding-agent 0.61.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 (628) hide show
  1. package/CHANGELOG.md +3246 -0
  2. package/README.md +596 -0
  3. package/dist/bun/cli.d.ts +3 -0
  4. package/dist/bun/cli.d.ts.map +1 -0
  5. package/dist/bun/cli.js +7 -0
  6. package/dist/bun/cli.js.map +1 -0
  7. package/dist/bun/register-bedrock.d.ts +2 -0
  8. package/dist/bun/register-bedrock.d.ts.map +1 -0
  9. package/dist/bun/register-bedrock.js +4 -0
  10. package/dist/bun/register-bedrock.js.map +1 -0
  11. package/dist/cli/args.d.ts +49 -0
  12. package/dist/cli/args.d.ts.map +1 -0
  13. package/dist/cli/args.js +304 -0
  14. package/dist/cli/args.js.map +1 -0
  15. package/dist/cli/config-selector.d.ts +14 -0
  16. package/dist/cli/config-selector.d.ts.map +1 -0
  17. package/dist/cli/config-selector.js +31 -0
  18. package/dist/cli/config-selector.js.map +1 -0
  19. package/dist/cli/file-processor.d.ts +15 -0
  20. package/dist/cli/file-processor.d.ts.map +1 -0
  21. package/dist/cli/file-processor.js +79 -0
  22. package/dist/cli/file-processor.js.map +1 -0
  23. package/dist/cli/initial-message.d.ts +18 -0
  24. package/dist/cli/initial-message.d.ts.map +1 -0
  25. package/dist/cli/initial-message.js +22 -0
  26. package/dist/cli/initial-message.js.map +1 -0
  27. package/dist/cli/list-models.d.ts +9 -0
  28. package/dist/cli/list-models.d.ts.map +1 -0
  29. package/dist/cli/list-models.js +92 -0
  30. package/dist/cli/list-models.js.map +1 -0
  31. package/dist/cli/session-picker.d.ts +9 -0
  32. package/dist/cli/session-picker.d.ts.map +1 -0
  33. package/dist/cli/session-picker.js +35 -0
  34. package/dist/cli/session-picker.js.map +1 -0
  35. package/dist/cli.d.ts +3 -0
  36. package/dist/cli.d.ts.map +1 -0
  37. package/dist/cli.js +14 -0
  38. package/dist/cli.js.map +1 -0
  39. package/dist/config.d.ts +68 -0
  40. package/dist/config.d.ts.map +1 -0
  41. package/dist/config.js +203 -0
  42. package/dist/config.js.map +1 -0
  43. package/dist/core/agent-session.d.ts +607 -0
  44. package/dist/core/agent-session.d.ts.map +1 -0
  45. package/dist/core/agent-session.js +2617 -0
  46. package/dist/core/agent-session.js.map +1 -0
  47. package/dist/core/auth-storage.d.ts +130 -0
  48. package/dist/core/auth-storage.d.ts.map +1 -0
  49. package/dist/core/auth-storage.js +419 -0
  50. package/dist/core/auth-storage.js.map +1 -0
  51. package/dist/core/bash-executor.d.ts +46 -0
  52. package/dist/core/bash-executor.d.ts.map +1 -0
  53. package/dist/core/bash-executor.js +113 -0
  54. package/dist/core/bash-executor.js.map +1 -0
  55. package/dist/core/compaction/branch-summarization.d.ts +86 -0
  56. package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  57. package/dist/core/compaction/branch-summarization.js +243 -0
  58. package/dist/core/compaction/branch-summarization.js.map +1 -0
  59. package/dist/core/compaction/compaction.d.ts +121 -0
  60. package/dist/core/compaction/compaction.d.ts.map +1 -0
  61. package/dist/core/compaction/compaction.js +612 -0
  62. package/dist/core/compaction/compaction.js.map +1 -0
  63. package/dist/core/compaction/index.d.ts +7 -0
  64. package/dist/core/compaction/index.d.ts.map +1 -0
  65. package/dist/core/compaction/index.js +7 -0
  66. package/dist/core/compaction/index.js.map +1 -0
  67. package/dist/core/compaction/utils.d.ts +38 -0
  68. package/dist/core/compaction/utils.d.ts.map +1 -0
  69. package/dist/core/compaction/utils.js +153 -0
  70. package/dist/core/compaction/utils.js.map +1 -0
  71. package/dist/core/defaults.d.ts +3 -0
  72. package/dist/core/defaults.d.ts.map +1 -0
  73. package/dist/core/defaults.js +2 -0
  74. package/dist/core/defaults.js.map +1 -0
  75. package/dist/core/diagnostics.d.ts +15 -0
  76. package/dist/core/diagnostics.d.ts.map +1 -0
  77. package/dist/core/diagnostics.js +2 -0
  78. package/dist/core/diagnostics.js.map +1 -0
  79. package/dist/core/event-bus.d.ts +9 -0
  80. package/dist/core/event-bus.d.ts.map +1 -0
  81. package/dist/core/event-bus.js +25 -0
  82. package/dist/core/event-bus.js.map +1 -0
  83. package/dist/core/exec.d.ts +29 -0
  84. package/dist/core/exec.d.ts.map +1 -0
  85. package/dist/core/exec.js +75 -0
  86. package/dist/core/exec.js.map +1 -0
  87. package/dist/core/export-html/ansi-to-html.d.ts +22 -0
  88. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  89. package/dist/core/export-html/ansi-to-html.js +249 -0
  90. package/dist/core/export-html/ansi-to-html.js.map +1 -0
  91. package/dist/core/export-html/index.d.ts +37 -0
  92. package/dist/core/export-html/index.d.ts.map +1 -0
  93. package/dist/core/export-html/index.js +223 -0
  94. package/dist/core/export-html/index.js.map +1 -0
  95. package/dist/core/export-html/template.css +1001 -0
  96. package/dist/core/export-html/template.html +55 -0
  97. package/dist/core/export-html/template.js +1690 -0
  98. package/dist/core/export-html/tool-renderer.d.ts +38 -0
  99. package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  100. package/dist/core/export-html/tool-renderer.js +70 -0
  101. package/dist/core/export-html/tool-renderer.js.map +1 -0
  102. package/dist/core/export-html/vendor/highlight.min.js +1213 -0
  103. package/dist/core/export-html/vendor/marked.min.js +6 -0
  104. package/dist/core/extensions/index.d.ts +11 -0
  105. package/dist/core/extensions/index.d.ts.map +1 -0
  106. package/dist/core/extensions/index.js +9 -0
  107. package/dist/core/extensions/index.js.map +1 -0
  108. package/dist/core/extensions/loader.d.ts +25 -0
  109. package/dist/core/extensions/loader.d.ts.map +1 -0
  110. package/dist/core/extensions/loader.js +426 -0
  111. package/dist/core/extensions/loader.js.map +1 -0
  112. package/dist/core/extensions/runner.d.ts +150 -0
  113. package/dist/core/extensions/runner.d.ts.map +1 -0
  114. package/dist/core/extensions/runner.js +707 -0
  115. package/dist/core/extensions/runner.js.map +1 -0
  116. package/dist/core/extensions/types.d.ts +1037 -0
  117. package/dist/core/extensions/types.d.ts.map +1 -0
  118. package/dist/core/extensions/types.js +35 -0
  119. package/dist/core/extensions/types.js.map +1 -0
  120. package/dist/core/extensions/wrapper.d.ts +20 -0
  121. package/dist/core/extensions/wrapper.d.ts.map +1 -0
  122. package/dist/core/extensions/wrapper.js +28 -0
  123. package/dist/core/extensions/wrapper.js.map +1 -0
  124. package/dist/core/footer-data-provider.d.ts +44 -0
  125. package/dist/core/footer-data-provider.d.ts.map +1 -0
  126. package/dist/core/footer-data-provider.js +252 -0
  127. package/dist/core/footer-data-provider.js.map +1 -0
  128. package/dist/core/index.d.ts +9 -0
  129. package/dist/core/index.d.ts.map +1 -0
  130. package/dist/core/index.js +9 -0
  131. package/dist/core/index.js.map +1 -0
  132. package/dist/core/keybindings.d.ts +275 -0
  133. package/dist/core/keybindings.d.ts.map +1 -0
  134. package/dist/core/keybindings.js +241 -0
  135. package/dist/core/keybindings.js.map +1 -0
  136. package/dist/core/messages.d.ts +77 -0
  137. package/dist/core/messages.d.ts.map +1 -0
  138. package/dist/core/messages.js +123 -0
  139. package/dist/core/messages.js.map +1 -0
  140. package/dist/core/model-registry.d.ts +114 -0
  141. package/dist/core/model-registry.d.ts.map +1 -0
  142. package/dist/core/model-registry.js +563 -0
  143. package/dist/core/model-registry.js.map +1 -0
  144. package/dist/core/model-resolver.d.ts +110 -0
  145. package/dist/core/model-resolver.d.ts.map +1 -0
  146. package/dist/core/model-resolver.js +486 -0
  147. package/dist/core/model-resolver.js.map +1 -0
  148. package/dist/core/package-manager.d.ts +171 -0
  149. package/dist/core/package-manager.d.ts.map +1 -0
  150. package/dist/core/package-manager.js +1700 -0
  151. package/dist/core/package-manager.js.map +1 -0
  152. package/dist/core/prompt-templates.d.ts +50 -0
  153. package/dist/core/prompt-templates.d.ts.map +1 -0
  154. package/dist/core/prompt-templates.js +251 -0
  155. package/dist/core/prompt-templates.js.map +1 -0
  156. package/dist/core/resolve-config-value.d.ts +17 -0
  157. package/dist/core/resolve-config-value.d.ts.map +1 -0
  158. package/dist/core/resolve-config-value.js +94 -0
  159. package/dist/core/resolve-config-value.js.map +1 -0
  160. package/dist/core/resource-loader.d.ts +184 -0
  161. package/dist/core/resource-loader.d.ts.map +1 -0
  162. package/dist/core/resource-loader.js +670 -0
  163. package/dist/core/resource-loader.js.map +1 -0
  164. package/dist/core/sdk.d.ts +90 -0
  165. package/dist/core/sdk.d.ts.map +1 -0
  166. package/dist/core/sdk.js +242 -0
  167. package/dist/core/sdk.js.map +1 -0
  168. package/dist/core/session-manager.d.ts +329 -0
  169. package/dist/core/session-manager.d.ts.map +1 -0
  170. package/dist/core/session-manager.js +1097 -0
  171. package/dist/core/session-manager.js.map +1 -0
  172. package/dist/core/settings-manager.d.ts +235 -0
  173. package/dist/core/settings-manager.d.ts.map +1 -0
  174. package/dist/core/settings-manager.js +699 -0
  175. package/dist/core/settings-manager.js.map +1 -0
  176. package/dist/core/skills.d.ts +59 -0
  177. package/dist/core/skills.d.ts.map +1 -0
  178. package/dist/core/skills.js +385 -0
  179. package/dist/core/skills.js.map +1 -0
  180. package/dist/core/slash-commands.d.ts +15 -0
  181. package/dist/core/slash-commands.d.ts.map +1 -0
  182. package/dist/core/slash-commands.js +23 -0
  183. package/dist/core/slash-commands.js.map +1 -0
  184. package/dist/core/system-prompt.d.ts +28 -0
  185. package/dist/core/system-prompt.d.ts.map +1 -0
  186. package/dist/core/system-prompt.js +151 -0
  187. package/dist/core/system-prompt.js.map +1 -0
  188. package/dist/core/timings.d.ts +7 -0
  189. package/dist/core/timings.d.ts.map +1 -0
  190. package/dist/core/timings.js +25 -0
  191. package/dist/core/timings.js.map +1 -0
  192. package/dist/core/tools/bash.d.ts +63 -0
  193. package/dist/core/tools/bash.d.ts.map +1 -0
  194. package/dist/core/tools/bash.js +250 -0
  195. package/dist/core/tools/bash.js.map +1 -0
  196. package/dist/core/tools/edit-diff.d.ts +63 -0
  197. package/dist/core/tools/edit-diff.d.ts.map +1 -0
  198. package/dist/core/tools/edit-diff.js +244 -0
  199. package/dist/core/tools/edit-diff.js.map +1 -0
  200. package/dist/core/tools/edit.d.ts +39 -0
  201. package/dist/core/tools/edit.d.ts.map +1 -0
  202. package/dist/core/tools/edit.js +147 -0
  203. package/dist/core/tools/edit.js.map +1 -0
  204. package/dist/core/tools/file-mutation-queue.d.ts +6 -0
  205. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  206. package/dist/core/tools/file-mutation-queue.js +37 -0
  207. package/dist/core/tools/file-mutation-queue.js.map +1 -0
  208. package/dist/core/tools/find.d.ts +39 -0
  209. package/dist/core/tools/find.d.ts.map +1 -0
  210. package/dist/core/tools/find.js +209 -0
  211. package/dist/core/tools/find.js.map +1 -0
  212. package/dist/core/tools/grep.d.ts +45 -0
  213. package/dist/core/tools/grep.d.ts.map +1 -0
  214. package/dist/core/tools/grep.js +239 -0
  215. package/dist/core/tools/grep.js.map +1 -0
  216. package/dist/core/tools/index.d.ts +74 -0
  217. package/dist/core/tools/index.d.ts.map +1 -0
  218. package/dist/core/tools/index.js +62 -0
  219. package/dist/core/tools/index.js.map +1 -0
  220. package/dist/core/tools/ls.d.ts +40 -0
  221. package/dist/core/tools/ls.d.ts.map +1 -0
  222. package/dist/core/tools/ls.js +118 -0
  223. package/dist/core/tools/ls.js.map +1 -0
  224. package/dist/core/tools/path-utils.d.ts +8 -0
  225. package/dist/core/tools/path-utils.d.ts.map +1 -0
  226. package/dist/core/tools/path-utils.js +81 -0
  227. package/dist/core/tools/path-utils.js.map +1 -0
  228. package/dist/core/tools/read.d.ts +39 -0
  229. package/dist/core/tools/read.d.ts.map +1 -0
  230. package/dist/core/tools/read.js +166 -0
  231. package/dist/core/tools/read.js.map +1 -0
  232. package/dist/core/tools/truncate.d.ts +70 -0
  233. package/dist/core/tools/truncate.d.ts.map +1 -0
  234. package/dist/core/tools/truncate.js +205 -0
  235. package/dist/core/tools/truncate.js.map +1 -0
  236. package/dist/core/tools/write.d.ts +29 -0
  237. package/dist/core/tools/write.d.ts.map +1 -0
  238. package/dist/core/tools/write.js +81 -0
  239. package/dist/core/tools/write.js.map +1 -0
  240. package/dist/index.d.ts +27 -0
  241. package/dist/index.d.ts.map +1 -0
  242. package/dist/index.js +42 -0
  243. package/dist/index.js.map +1 -0
  244. package/dist/main.d.ts +8 -0
  245. package/dist/main.d.ts.map +1 -0
  246. package/dist/main.js +736 -0
  247. package/dist/main.js.map +1 -0
  248. package/dist/migrations.d.ts +33 -0
  249. package/dist/migrations.d.ts.map +1 -0
  250. package/dist/migrations.js +261 -0
  251. package/dist/migrations.js.map +1 -0
  252. package/dist/modes/index.d.ts +9 -0
  253. package/dist/modes/index.d.ts.map +1 -0
  254. package/dist/modes/index.js +8 -0
  255. package/dist/modes/index.js.map +1 -0
  256. package/dist/modes/interactive/components/armin.d.ts +34 -0
  257. package/dist/modes/interactive/components/armin.d.ts.map +1 -0
  258. package/dist/modes/interactive/components/armin.js +333 -0
  259. package/dist/modes/interactive/components/armin.js.map +1 -0
  260. package/dist/modes/interactive/components/assistant-message.d.ts +16 -0
  261. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  262. package/dist/modes/interactive/components/assistant-message.js +96 -0
  263. package/dist/modes/interactive/components/assistant-message.js.map +1 -0
  264. package/dist/modes/interactive/components/bash-execution.d.ts +35 -0
  265. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  266. package/dist/modes/interactive/components/bash-execution.js +162 -0
  267. package/dist/modes/interactive/components/bash-execution.js.map +1 -0
  268. package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  269. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  270. package/dist/modes/interactive/components/bordered-loader.js +51 -0
  271. package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  272. package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  273. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  274. package/dist/modes/interactive/components/branch-summary-message.js +44 -0
  275. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  276. package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  277. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  278. package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
  279. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  280. package/dist/modes/interactive/components/config-selector.d.ts +71 -0
  281. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  282. package/dist/modes/interactive/components/config-selector.js +479 -0
  283. package/dist/modes/interactive/components/config-selector.js.map +1 -0
  284. package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  285. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  286. package/dist/modes/interactive/components/countdown-timer.js +33 -0
  287. package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  288. package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  289. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  290. package/dist/modes/interactive/components/custom-editor.js +70 -0
  291. package/dist/modes/interactive/components/custom-editor.js.map +1 -0
  292. package/dist/modes/interactive/components/custom-message.d.ts +20 -0
  293. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  294. package/dist/modes/interactive/components/custom-message.js +79 -0
  295. package/dist/modes/interactive/components/custom-message.js.map +1 -0
  296. package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  297. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
  298. package/dist/modes/interactive/components/daxnuts.js +140 -0
  299. package/dist/modes/interactive/components/daxnuts.js.map +1 -0
  300. package/dist/modes/interactive/components/diff.d.ts +12 -0
  301. package/dist/modes/interactive/components/diff.d.ts.map +1 -0
  302. package/dist/modes/interactive/components/diff.js +133 -0
  303. package/dist/modes/interactive/components/diff.js.map +1 -0
  304. package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  305. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  306. package/dist/modes/interactive/components/dynamic-border.js +21 -0
  307. package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  308. package/dist/modes/interactive/components/extension-editor.d.ts +20 -0
  309. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  310. package/dist/modes/interactive/components/extension-editor.js +111 -0
  311. package/dist/modes/interactive/components/extension-editor.js.map +1 -0
  312. package/dist/modes/interactive/components/extension-input.d.ts +23 -0
  313. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  314. package/dist/modes/interactive/components/extension-input.js +61 -0
  315. package/dist/modes/interactive/components/extension-input.js.map +1 -0
  316. package/dist/modes/interactive/components/extension-selector.d.ts +24 -0
  317. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  318. package/dist/modes/interactive/components/extension-selector.js +78 -0
  319. package/dist/modes/interactive/components/extension-selector.js.map +1 -0
  320. package/dist/modes/interactive/components/footer.d.ts +26 -0
  321. package/dist/modes/interactive/components/footer.d.ts.map +1 -0
  322. package/dist/modes/interactive/components/footer.js +198 -0
  323. package/dist/modes/interactive/components/footer.js.map +1 -0
  324. package/dist/modes/interactive/components/index.d.ts +32 -0
  325. package/dist/modes/interactive/components/index.d.ts.map +1 -0
  326. package/dist/modes/interactive/components/index.js +33 -0
  327. package/dist/modes/interactive/components/index.js.map +1 -0
  328. package/dist/modes/interactive/components/keybinding-hints.d.ts +8 -0
  329. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  330. package/dist/modes/interactive/components/keybinding-hints.js +22 -0
  331. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  332. package/dist/modes/interactive/components/login-dialog.d.ts +42 -0
  333. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  334. package/dist/modes/interactive/components/login-dialog.js +145 -0
  335. package/dist/modes/interactive/components/login-dialog.js.map +1 -0
  336. package/dist/modes/interactive/components/model-selector.d.ts +47 -0
  337. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  338. package/dist/modes/interactive/components/model-selector.js +275 -0
  339. package/dist/modes/interactive/components/model-selector.js.map +1 -0
  340. package/dist/modes/interactive/components/oauth-selector.d.ts +19 -0
  341. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  342. package/dist/modes/interactive/components/oauth-selector.js +97 -0
  343. package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  344. package/dist/modes/interactive/components/scoped-models-selector.d.ts +49 -0
  345. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  346. package/dist/modes/interactive/components/scoped-models-selector.js +275 -0
  347. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  348. package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  349. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  350. package/dist/modes/interactive/components/session-selector-search.js +155 -0
  351. package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  352. package/dist/modes/interactive/components/session-selector.d.ts +95 -0
  353. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  354. package/dist/modes/interactive/components/session-selector.js +848 -0
  355. package/dist/modes/interactive/components/session-selector.js.map +1 -0
  356. package/dist/modes/interactive/components/settings-selector.d.ts +58 -0
  357. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  358. package/dist/modes/interactive/components/settings-selector.js +301 -0
  359. package/dist/modes/interactive/components/settings-selector.js.map +1 -0
  360. package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  361. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  362. package/dist/modes/interactive/components/show-images-selector.js +39 -0
  363. package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  364. package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  365. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  366. package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
  367. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  368. package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  369. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  370. package/dist/modes/interactive/components/theme-selector.js +50 -0
  371. package/dist/modes/interactive/components/theme-selector.js.map +1 -0
  372. package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  373. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  374. package/dist/modes/interactive/components/thinking-selector.js +51 -0
  375. package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  376. package/dist/modes/interactive/components/tool-execution.d.ts +84 -0
  377. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  378. package/dist/modes/interactive/components/tool-execution.js +832 -0
  379. package/dist/modes/interactive/components/tool-execution.js.map +1 -0
  380. package/dist/modes/interactive/components/tree-selector.d.ts +87 -0
  381. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  382. package/dist/modes/interactive/components/tree-selector.js +1051 -0
  383. package/dist/modes/interactive/components/tree-selector.js.map +1 -0
  384. package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  385. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  386. package/dist/modes/interactive/components/user-message-selector.js +113 -0
  387. package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  388. package/dist/modes/interactive/components/user-message.d.ts +9 -0
  389. package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  390. package/dist/modes/interactive/components/user-message.js +28 -0
  391. package/dist/modes/interactive/components/user-message.js.map +1 -0
  392. package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  393. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  394. package/dist/modes/interactive/components/visual-truncate.js +33 -0
  395. package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  396. package/dist/modes/interactive/interactive-mode.d.ts +319 -0
  397. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  398. package/dist/modes/interactive/interactive-mode.js +3868 -0
  399. package/dist/modes/interactive/interactive-mode.js.map +1 -0
  400. package/dist/modes/interactive/theme/dark.json +85 -0
  401. package/dist/modes/interactive/theme/light.json +84 -0
  402. package/dist/modes/interactive/theme/theme-schema.json +335 -0
  403. package/dist/modes/interactive/theme/theme.d.ts +78 -0
  404. package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  405. package/dist/modes/interactive/theme/theme.js +961 -0
  406. package/dist/modes/interactive/theme/theme.js.map +1 -0
  407. package/dist/modes/print-mode.d.ts +28 -0
  408. package/dist/modes/print-mode.d.ts.map +1 -0
  409. package/dist/modes/print-mode.js +101 -0
  410. package/dist/modes/print-mode.js.map +1 -0
  411. package/dist/modes/rpc/jsonl.d.ts +17 -0
  412. package/dist/modes/rpc/jsonl.d.ts.map +1 -0
  413. package/dist/modes/rpc/jsonl.js +49 -0
  414. package/dist/modes/rpc/jsonl.js.map +1 -0
  415. package/dist/modes/rpc/rpc-client.d.ts +217 -0
  416. package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  417. package/dist/modes/rpc/rpc-client.js +401 -0
  418. package/dist/modes/rpc/rpc-client.js.map +1 -0
  419. package/dist/modes/rpc/rpc-mode.d.ts +20 -0
  420. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  421. package/dist/modes/rpc/rpc-mode.js +512 -0
  422. package/dist/modes/rpc/rpc-mode.js.map +1 -0
  423. package/dist/modes/rpc/rpc-types.d.ts +409 -0
  424. package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  425. package/dist/modes/rpc/rpc-types.js +8 -0
  426. package/dist/modes/rpc/rpc-types.js.map +1 -0
  427. package/dist/utils/changelog.d.ts +21 -0
  428. package/dist/utils/changelog.d.ts.map +1 -0
  429. package/dist/utils/changelog.js +87 -0
  430. package/dist/utils/changelog.js.map +1 -0
  431. package/dist/utils/child-process.d.ts +11 -0
  432. package/dist/utils/child-process.d.ts.map +1 -0
  433. package/dist/utils/child-process.js +78 -0
  434. package/dist/utils/child-process.js.map +1 -0
  435. package/dist/utils/clipboard-image.d.ts +11 -0
  436. package/dist/utils/clipboard-image.d.ts.map +1 -0
  437. package/dist/utils/clipboard-image.js +245 -0
  438. package/dist/utils/clipboard-image.js.map +1 -0
  439. package/dist/utils/clipboard-native.d.ts +8 -0
  440. package/dist/utils/clipboard-native.d.ts.map +1 -0
  441. package/dist/utils/clipboard-native.js +14 -0
  442. package/dist/utils/clipboard-native.js.map +1 -0
  443. package/dist/utils/clipboard.d.ts +2 -0
  444. package/dist/utils/clipboard.d.ts.map +1 -0
  445. package/dist/utils/clipboard.js +78 -0
  446. package/dist/utils/clipboard.js.map +1 -0
  447. package/dist/utils/exif-orientation.d.ts +5 -0
  448. package/dist/utils/exif-orientation.d.ts.map +1 -0
  449. package/dist/utils/exif-orientation.js +158 -0
  450. package/dist/utils/exif-orientation.js.map +1 -0
  451. package/dist/utils/frontmatter.d.ts +8 -0
  452. package/dist/utils/frontmatter.d.ts.map +1 -0
  453. package/dist/utils/frontmatter.js +26 -0
  454. package/dist/utils/frontmatter.js.map +1 -0
  455. package/dist/utils/git.d.ts +26 -0
  456. package/dist/utils/git.d.ts.map +1 -0
  457. package/dist/utils/git.js +163 -0
  458. package/dist/utils/git.js.map +1 -0
  459. package/dist/utils/image-convert.d.ts +9 -0
  460. package/dist/utils/image-convert.d.ts.map +1 -0
  461. package/dist/utils/image-convert.js +39 -0
  462. package/dist/utils/image-convert.js.map +1 -0
  463. package/dist/utils/image-resize.d.ts +36 -0
  464. package/dist/utils/image-resize.d.ts.map +1 -0
  465. package/dist/utils/image-resize.js +186 -0
  466. package/dist/utils/image-resize.js.map +1 -0
  467. package/dist/utils/mime.d.ts +2 -0
  468. package/dist/utils/mime.d.ts.map +1 -0
  469. package/dist/utils/mime.js +26 -0
  470. package/dist/utils/mime.js.map +1 -0
  471. package/dist/utils/photon.d.ts +21 -0
  472. package/dist/utils/photon.d.ts.map +1 -0
  473. package/dist/utils/photon.js +121 -0
  474. package/dist/utils/photon.js.map +1 -0
  475. package/dist/utils/shell.d.ts +26 -0
  476. package/dist/utils/shell.d.ts.map +1 -0
  477. package/dist/utils/shell.js +186 -0
  478. package/dist/utils/shell.js.map +1 -0
  479. package/dist/utils/sleep.d.ts +5 -0
  480. package/dist/utils/sleep.d.ts.map +1 -0
  481. package/dist/utils/sleep.js +17 -0
  482. package/dist/utils/sleep.js.map +1 -0
  483. package/dist/utils/tools-manager.d.ts +3 -0
  484. package/dist/utils/tools-manager.d.ts.map +1 -0
  485. package/dist/utils/tools-manager.js +252 -0
  486. package/dist/utils/tools-manager.js.map +1 -0
  487. package/docs/compaction.md +392 -0
  488. package/docs/custom-provider.md +596 -0
  489. package/docs/development.md +69 -0
  490. package/docs/extensions.md +2085 -0
  491. package/docs/images/doom-extension.png +0 -0
  492. package/docs/images/exy.png +0 -0
  493. package/docs/images/interactive-mode.png +0 -0
  494. package/docs/images/tree-view.png +0 -0
  495. package/docs/json.md +79 -0
  496. package/docs/keybindings.md +173 -0
  497. package/docs/models.md +335 -0
  498. package/docs/packages.md +218 -0
  499. package/docs/prompt-templates.md +67 -0
  500. package/docs/providers.md +195 -0
  501. package/docs/rpc.md +1354 -0
  502. package/docs/sdk.md +968 -0
  503. package/docs/session.md +412 -0
  504. package/docs/settings.md +234 -0
  505. package/docs/shell-aliases.md +13 -0
  506. package/docs/skills.md +231 -0
  507. package/docs/terminal-setup.md +106 -0
  508. package/docs/termux.md +127 -0
  509. package/docs/themes.md +295 -0
  510. package/docs/tmux.md +61 -0
  511. package/docs/tree.md +228 -0
  512. package/docs/tui.md +887 -0
  513. package/docs/windows.md +17 -0
  514. package/examples/README.md +25 -0
  515. package/examples/extensions/README.md +205 -0
  516. package/examples/extensions/antigravity-image-gen.ts +418 -0
  517. package/examples/extensions/auto-commit-on-exit.ts +49 -0
  518. package/examples/extensions/bash-spawn-hook.ts +30 -0
  519. package/examples/extensions/bookmark.ts +50 -0
  520. package/examples/extensions/built-in-tool-renderer.ts +246 -0
  521. package/examples/extensions/claude-rules.ts +86 -0
  522. package/examples/extensions/commands.ts +72 -0
  523. package/examples/extensions/confirm-destructive.ts +59 -0
  524. package/examples/extensions/custom-compaction.ts +114 -0
  525. package/examples/extensions/custom-footer.ts +64 -0
  526. package/examples/extensions/custom-header.ts +73 -0
  527. package/examples/extensions/custom-provider-anthropic/index.ts +604 -0
  528. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
  529. package/examples/extensions/custom-provider-anthropic/package.json +19 -0
  530. package/examples/extensions/custom-provider-gitlab-duo/index.ts +349 -0
  531. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
  532. package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
  533. package/examples/extensions/custom-provider-qwen-cli/index.ts +345 -0
  534. package/examples/extensions/custom-provider-qwen-cli/package.json +16 -0
  535. package/examples/extensions/dirty-repo-guard.ts +56 -0
  536. package/examples/extensions/doom-overlay/README.md +46 -0
  537. package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
  538. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  539. package/examples/extensions/doom-overlay/doom/build.sh +152 -0
  540. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
  541. package/examples/extensions/doom-overlay/doom-component.ts +132 -0
  542. package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
  543. package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
  544. package/examples/extensions/doom-overlay/index.ts +74 -0
  545. package/examples/extensions/doom-overlay/wad-finder.ts +51 -0
  546. package/examples/extensions/dynamic-resources/SKILL.md +8 -0
  547. package/examples/extensions/dynamic-resources/dynamic.json +79 -0
  548. package/examples/extensions/dynamic-resources/dynamic.md +5 -0
  549. package/examples/extensions/dynamic-resources/index.ts +15 -0
  550. package/examples/extensions/dynamic-tools.ts +74 -0
  551. package/examples/extensions/event-bus.ts +43 -0
  552. package/examples/extensions/file-trigger.ts +41 -0
  553. package/examples/extensions/git-checkpoint.ts +53 -0
  554. package/examples/extensions/handoff.ts +150 -0
  555. package/examples/extensions/hello.ts +25 -0
  556. package/examples/extensions/inline-bash.ts +94 -0
  557. package/examples/extensions/input-transform.ts +43 -0
  558. package/examples/extensions/interactive-shell.ts +196 -0
  559. package/examples/extensions/mac-system-theme.ts +47 -0
  560. package/examples/extensions/message-renderer.ts +59 -0
  561. package/examples/extensions/minimal-mode.ts +426 -0
  562. package/examples/extensions/modal-editor.ts +85 -0
  563. package/examples/extensions/model-status.ts +31 -0
  564. package/examples/extensions/notify.ts +55 -0
  565. package/examples/extensions/overlay-qa-tests.ts +1348 -0
  566. package/examples/extensions/overlay-test.ts +150 -0
  567. package/examples/extensions/permission-gate.ts +34 -0
  568. package/examples/extensions/pirate.ts +47 -0
  569. package/examples/extensions/plan-mode/README.md +65 -0
  570. package/examples/extensions/plan-mode/index.ts +340 -0
  571. package/examples/extensions/plan-mode/utils.ts +168 -0
  572. package/examples/extensions/preset.ts +397 -0
  573. package/examples/extensions/protected-paths.ts +30 -0
  574. package/examples/extensions/provider-payload.ts +14 -0
  575. package/examples/extensions/qna.ts +119 -0
  576. package/examples/extensions/question.ts +264 -0
  577. package/examples/extensions/questionnaire.ts +427 -0
  578. package/examples/extensions/rainbow-editor.ts +88 -0
  579. package/examples/extensions/reload-runtime.ts +37 -0
  580. package/examples/extensions/rpc-demo.ts +124 -0
  581. package/examples/extensions/sandbox/index.ts +317 -0
  582. package/examples/extensions/sandbox/package-lock.json +92 -0
  583. package/examples/extensions/sandbox/package.json +19 -0
  584. package/examples/extensions/send-user-message.ts +97 -0
  585. package/examples/extensions/session-name.ts +27 -0
  586. package/examples/extensions/shutdown-command.ts +63 -0
  587. package/examples/extensions/snake.ts +343 -0
  588. package/examples/extensions/space-invaders.ts +560 -0
  589. package/examples/extensions/ssh.ts +220 -0
  590. package/examples/extensions/status-line.ts +40 -0
  591. package/examples/extensions/subagent/README.md +172 -0
  592. package/examples/extensions/subagent/agents/planner.md +37 -0
  593. package/examples/extensions/subagent/agents/reviewer.md +35 -0
  594. package/examples/extensions/subagent/agents/scout.md +50 -0
  595. package/examples/extensions/subagent/agents/worker.md +24 -0
  596. package/examples/extensions/subagent/agents.ts +126 -0
  597. package/examples/extensions/subagent/index.ts +986 -0
  598. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
  599. package/examples/extensions/subagent/prompts/implement.md +10 -0
  600. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
  601. package/examples/extensions/summarize.ts +195 -0
  602. package/examples/extensions/system-prompt-header.ts +17 -0
  603. package/examples/extensions/timed-confirm.ts +70 -0
  604. package/examples/extensions/titlebar-spinner.ts +58 -0
  605. package/examples/extensions/todo.ts +299 -0
  606. package/examples/extensions/tool-override.ts +144 -0
  607. package/examples/extensions/tools.ts +146 -0
  608. package/examples/extensions/trigger-compact.ts +40 -0
  609. package/examples/extensions/truncated-tool.ts +195 -0
  610. package/examples/extensions/widget-placement.ts +17 -0
  611. package/examples/extensions/with-deps/index.ts +32 -0
  612. package/examples/extensions/with-deps/package-lock.json +31 -0
  613. package/examples/extensions/with-deps/package.json +22 -0
  614. package/examples/rpc-extension-ui.ts +632 -0
  615. package/examples/sdk/01-minimal.ts +22 -0
  616. package/examples/sdk/02-custom-model.ts +49 -0
  617. package/examples/sdk/03-custom-prompt.ts +55 -0
  618. package/examples/sdk/04-skills.ts +46 -0
  619. package/examples/sdk/05-tools.ts +56 -0
  620. package/examples/sdk/06-extensions.ts +88 -0
  621. package/examples/sdk/07-context-files.ts +40 -0
  622. package/examples/sdk/08-prompt-templates.ts +47 -0
  623. package/examples/sdk/09-api-keys-and-oauth.ts +48 -0
  624. package/examples/sdk/10-settings.ts +51 -0
  625. package/examples/sdk/11-sessions.ts +48 -0
  626. package/examples/sdk/12-full-control.ts +82 -0
  627. package/examples/sdk/README.md +144 -0
  628. package/package.json +99 -0
Binary file
Binary file
Binary file
Binary file
package/docs/json.md ADDED
@@ -0,0 +1,79 @@
1
+ # JSON Event Stream Mode
2
+
3
+ ```bash
4
+ pi --mode json "Your prompt"
5
+ ```
6
+
7
+ Outputs all session events as JSON lines to stdout. Useful for integrating pi into other tools or custom UIs.
8
+
9
+ ## Event Types
10
+
11
+ Events are defined in [`AgentSessionEvent`](https://github.com/avadisabelle/ava-pi/blob/main/packages/coding-agent/src/core/agent-session.ts#L102):
12
+
13
+ ```typescript
14
+ type AgentSessionEvent =
15
+ | AgentEvent
16
+ | { type: "auto_compaction_start"; reason: "threshold" | "overflow" }
17
+ | { type: "auto_compaction_end"; result: CompactionResult | undefined; aborted: boolean; willRetry: boolean; errorMessage?: string }
18
+ | { type: "auto_retry_start"; attempt: number; maxAttempts: number; delayMs: number; errorMessage: string }
19
+ | { type: "auto_retry_end"; success: boolean; attempt: number; finalError?: string };
20
+ ```
21
+
22
+ Base events from [`AgentEvent`](https://github.com/avadisabelle/ava-pi/blob/main/packages/agent/src/types.ts#L179):
23
+
24
+ ```typescript
25
+ type AgentEvent =
26
+ // Agent lifecycle
27
+ | { type: "agent_start" }
28
+ | { type: "agent_end"; messages: AgentMessage[] }
29
+ // Turn lifecycle
30
+ | { type: "turn_start" }
31
+ | { type: "turn_end"; message: AgentMessage; toolResults: ToolResultMessage[] }
32
+ // Message lifecycle
33
+ | { type: "message_start"; message: AgentMessage }
34
+ | { type: "message_update"; message: AgentMessage; assistantMessageEvent: AssistantMessageEvent }
35
+ | { type: "message_end"; message: AgentMessage }
36
+ // Tool execution
37
+ | { type: "tool_execution_start"; toolCallId: string; toolName: string; args: any }
38
+ | { type: "tool_execution_update"; toolCallId: string; toolName: string; args: any; partialResult: any }
39
+ | { type: "tool_execution_end"; toolCallId: string; toolName: string; result: any; isError: boolean };
40
+ ```
41
+
42
+ ## Message Types
43
+
44
+ Base messages from [`packages/ai/src/types.ts`](https://github.com/avadisabelle/ava-pi/blob/main/packages/ai/src/types.ts#L134):
45
+ - `UserMessage` (line 134)
46
+ - `AssistantMessage` (line 140)
47
+ - `ToolResultMessage` (line 152)
48
+
49
+ Extended messages from [`packages/coding-agent/src/core/messages.ts`](https://github.com/avadisabelle/ava-pi/blob/main/packages/coding-agent/src/core/messages.ts#L29):
50
+ - `BashExecutionMessage` (line 29)
51
+ - `CustomMessage` (line 46)
52
+ - `BranchSummaryMessage` (line 55)
53
+ - `CompactionSummaryMessage` (line 62)
54
+
55
+ ## Output Format
56
+
57
+ Each line is a JSON object. The first line is the session header:
58
+
59
+ ```json
60
+ {"type":"session","version":3,"id":"uuid","timestamp":"...","cwd":"/path"}
61
+ ```
62
+
63
+ Followed by events as they occur:
64
+
65
+ ```json
66
+ {"type":"agent_start"}
67
+ {"type":"turn_start"}
68
+ {"type":"message_start","message":{"role":"assistant","content":[],...}}
69
+ {"type":"message_update","message":{...},"assistantMessageEvent":{"type":"text_delta","delta":"Hello",...}}
70
+ {"type":"message_end","message":{...}}
71
+ {"type":"turn_end","message":{...},"toolResults":[]}
72
+ {"type":"agent_end","messages":[...]}
73
+ ```
74
+
75
+ ## Example
76
+
77
+ ```bash
78
+ pi --mode json "List files" 2>/dev/null | jq -c 'select(.type == "message_end")'
79
+ ```
@@ -0,0 +1,173 @@
1
+ # Keybindings
2
+
3
+ All keyboard shortcuts can be customized via `~/.pi/agent/keybindings.json`. Each action can be bound to one or more keys.
4
+
5
+ The config file uses the same namespaced keybinding ids that pi uses internally and that extension authors use in `keyHint()` and injected `keybindings` managers.
6
+
7
+ Older configs using pre-namespaced ids such as `cursorUp` or `expandTools` are migrated automatically to the namespaced ids on startup.
8
+
9
+ After editing `keybindings.json`, run `/reload` in pi to apply the changes without restarting the session.
10
+
11
+ ## Key Format
12
+
13
+ `modifier+key` where modifiers are `ctrl`, `shift`, `alt` (combinable) and keys are:
14
+
15
+ - **Letters:** `a-z`
16
+ - **Digits:** `0-9`
17
+ - **Special:** `escape`, `esc`, `enter`, `return`, `tab`, `space`, `backspace`, `delete`, `insert`, `clear`, `home`, `end`, `pageUp`, `pageDown`, `up`, `down`, `left`, `right`
18
+ - **Function:** `f1`-`f12`
19
+ - **Symbols:** `` ` ``, `-`, `=`, `[`, `]`, `\`, `;`, `'`, `,`, `.`, `/`, `!`, `@`, `#`, `$`, `%`, `^`, `&`, `*`, `(`, `)`, `_`, `+`, `|`, `~`, `{`, `}`, `:`, `<`, `>`, `?`
20
+
21
+ Modifier combinations: `ctrl+shift+x`, `alt+ctrl+x`, `ctrl+shift+alt+x`, `ctrl+1`, etc.
22
+
23
+ ## All Actions
24
+
25
+ ### TUI Editor Cursor Movement
26
+
27
+ | Keybinding id | Default | Description |
28
+ |--------|---------|-------------|
29
+ | `tui.editor.cursorUp` | `up` | Move cursor up |
30
+ | `tui.editor.cursorDown` | `down` | Move cursor down |
31
+ | `tui.editor.cursorLeft` | `left`, `ctrl+b` | Move cursor left |
32
+ | `tui.editor.cursorRight` | `right`, `ctrl+f` | Move cursor right |
33
+ | `tui.editor.cursorWordLeft` | `alt+left`, `ctrl+left`, `alt+b` | Move cursor word left |
34
+ | `tui.editor.cursorWordRight` | `alt+right`, `ctrl+right`, `alt+f` | Move cursor word right |
35
+ | `tui.editor.cursorLineStart` | `home`, `ctrl+a` | Move to line start |
36
+ | `tui.editor.cursorLineEnd` | `end`, `ctrl+e` | Move to line end |
37
+ | `tui.editor.jumpForward` | `ctrl+]` | Jump forward to character |
38
+ | `tui.editor.jumpBackward` | `ctrl+alt+]` | Jump backward to character |
39
+ | `tui.editor.pageUp` | `pageUp` | Scroll up by page |
40
+ | `tui.editor.pageDown` | `pageDown` | Scroll down by page |
41
+
42
+ ### TUI Editor Deletion
43
+
44
+ | Keybinding id | Default | Description |
45
+ |--------|---------|-------------|
46
+ | `tui.editor.deleteCharBackward` | `backspace` | Delete character backward |
47
+ | `tui.editor.deleteCharForward` | `delete`, `ctrl+d` | Delete character forward |
48
+ | `tui.editor.deleteWordBackward` | `ctrl+w`, `alt+backspace` | Delete word backward |
49
+ | `tui.editor.deleteWordForward` | `alt+d`, `alt+delete` | Delete word forward |
50
+ | `tui.editor.deleteToLineStart` | `ctrl+u` | Delete to line start |
51
+ | `tui.editor.deleteToLineEnd` | `ctrl+k` | Delete to line end |
52
+
53
+ ### TUI Input
54
+
55
+ | Keybinding id | Default | Description |
56
+ |--------|---------|-------------|
57
+ | `tui.input.newLine` | `shift+enter` | Insert new line |
58
+ | `tui.input.submit` | `enter` | Submit input |
59
+ | `tui.input.tab` | `tab` | Tab / autocomplete |
60
+
61
+ ### TUI Kill Ring
62
+
63
+ | Keybinding id | Default | Description |
64
+ |--------|---------|-------------|
65
+ | `tui.editor.yank` | `ctrl+y` | Paste most recently deleted text |
66
+ | `tui.editor.yankPop` | `alt+y` | Cycle through deleted text after yank |
67
+ | `tui.editor.undo` | `ctrl+-` | Undo last edit |
68
+
69
+ ### TUI Clipboard and Selection
70
+
71
+ | Keybinding id | Default | Description |
72
+ |--------|---------|-------------|
73
+ | `tui.input.copy` | `ctrl+c` | Copy selection |
74
+ | `tui.select.up` | `up` | Move selection up |
75
+ | `tui.select.down` | `down` | Move selection down |
76
+ | `tui.select.pageUp` | `pageUp` | Page up in list |
77
+ | `tui.select.pageDown` | `pageDown` | Page down in list |
78
+ | `tui.select.confirm` | `enter` | Confirm selection |
79
+ | `tui.select.cancel` | `escape`, `ctrl+c` | Cancel selection |
80
+
81
+ ### Application
82
+
83
+ | Keybinding id | Default | Description |
84
+ |--------|---------|-------------|
85
+ | `app.interrupt` | `escape` | Cancel / abort |
86
+ | `app.clear` | `ctrl+c` | Clear editor |
87
+ | `app.exit` | `ctrl+d` | Exit (when editor empty) |
88
+ | `app.suspend` | `ctrl+z` | Suspend to background |
89
+ | `app.editor.external` | `ctrl+g` | Open in external editor (`$VISUAL` or `$EDITOR`) |
90
+ | `app.clipboard.pasteImage` | `ctrl+v` (`alt+v` on Windows) | Paste image from clipboard |
91
+
92
+ ### Sessions
93
+
94
+ | Keybinding id | Default | Description |
95
+ |--------|---------|-------------|
96
+ | `app.session.new` | *(none)* | Start a new session (`/new`) |
97
+ | `app.session.tree` | *(none)* | Open session tree navigator (`/tree`) |
98
+ | `app.session.fork` | *(none)* | Fork current session (`/fork`) |
99
+ | `app.session.resume` | *(none)* | Open session resume picker (`/resume`) |
100
+ | `app.session.togglePath` | `ctrl+p` | Toggle path display |
101
+ | `app.session.toggleSort` | `ctrl+s` | Toggle sort mode |
102
+ | `app.session.toggleNamedFilter` | `ctrl+n` | Toggle named-only filter |
103
+ | `app.session.rename` | `ctrl+r` | Rename session |
104
+ | `app.session.delete` | `ctrl+d` | Delete session |
105
+ | `app.session.deleteNoninvasive` | `ctrl+backspace` | Delete session when query is empty |
106
+
107
+ ### Models and Thinking
108
+
109
+ | Keybinding id | Default | Description |
110
+ |--------|---------|-------------|
111
+ | `app.model.select` | `ctrl+l` | Open model selector |
112
+ | `app.model.cycleForward` | `ctrl+p` | Cycle to next model |
113
+ | `app.model.cycleBackward` | `shift+ctrl+p` | Cycle to previous model |
114
+ | `app.thinking.cycle` | `shift+tab` | Cycle thinking level |
115
+ | `app.thinking.toggle` | `ctrl+t` | Collapse or expand thinking blocks |
116
+
117
+ ### Display and Message Queue
118
+
119
+ | Keybinding id | Default | Description |
120
+ |--------|---------|-------------|
121
+ | `app.tools.expand` | `ctrl+o` | Collapse or expand tool output |
122
+ | `app.message.followUp` | `alt+enter` | Queue follow-up message |
123
+ | `app.message.dequeue` | `alt+up` | Restore queued messages to editor |
124
+
125
+ ### Tree Navigation
126
+
127
+ | Keybinding id | Default | Description |
128
+ |--------|---------|-------------|
129
+ | `app.tree.foldOrUp` | `ctrl+left`, `alt+left` | Fold current branch segment, or jump to the previous segment start |
130
+ | `app.tree.unfoldOrDown` | `ctrl+right`, `alt+right` | Unfold current branch segment, or jump to the next segment start or branch end |
131
+
132
+ ## Custom Configuration
133
+
134
+ Create `~/.pi/agent/keybindings.json`:
135
+
136
+ ```json
137
+ {
138
+ "tui.editor.cursorUp": ["up", "ctrl+p"],
139
+ "tui.editor.cursorDown": ["down", "ctrl+n"],
140
+ "tui.editor.deleteWordBackward": ["ctrl+w", "alt+backspace"]
141
+ }
142
+ ```
143
+
144
+ Each action can have a single key or an array of keys. User config overrides defaults.
145
+
146
+ ### Emacs Example
147
+
148
+ ```json
149
+ {
150
+ "tui.editor.cursorUp": ["up", "ctrl+p"],
151
+ "tui.editor.cursorDown": ["down", "ctrl+n"],
152
+ "tui.editor.cursorLeft": ["left", "ctrl+b"],
153
+ "tui.editor.cursorRight": ["right", "ctrl+f"],
154
+ "tui.editor.cursorWordLeft": ["alt+left", "alt+b"],
155
+ "tui.editor.cursorWordRight": ["alt+right", "alt+f"],
156
+ "tui.editor.deleteCharForward": ["delete", "ctrl+d"],
157
+ "tui.editor.deleteCharBackward": ["backspace", "ctrl+h"],
158
+ "tui.input.newLine": ["shift+enter", "ctrl+j"]
159
+ }
160
+ ```
161
+
162
+ ### Vim Example
163
+
164
+ ```json
165
+ {
166
+ "tui.editor.cursorUp": ["up", "alt+k"],
167
+ "tui.editor.cursorDown": ["down", "alt+j"],
168
+ "tui.editor.cursorLeft": ["left", "alt+h"],
169
+ "tui.editor.cursorRight": ["right", "alt+l"],
170
+ "tui.editor.cursorWordLeft": ["alt+left", "alt+b"],
171
+ "tui.editor.cursorWordRight": ["alt+right", "alt+w"]
172
+ }
173
+ ```
package/docs/models.md ADDED
@@ -0,0 +1,335 @@
1
+ # Custom Models
2
+
3
+ Add custom providers and models (Ollama, vLLM, LM Studio, proxies) via `~/.pi/agent/models.json`.
4
+
5
+ ## Table of Contents
6
+
7
+ - [Minimal Example](#minimal-example)
8
+ - [Full Example](#full-example)
9
+ - [Supported APIs](#supported-apis)
10
+ - [Provider Configuration](#provider-configuration)
11
+ - [Model Configuration](#model-configuration)
12
+ - [Overriding Built-in Providers](#overriding-built-in-providers)
13
+ - [Per-model Overrides](#per-model-overrides)
14
+ - [OpenAI Compatibility](#openai-compatibility)
15
+
16
+ ## Minimal Example
17
+
18
+ For local models (Ollama, LM Studio, vLLM), only `id` is required per model:
19
+
20
+ ```json
21
+ {
22
+ "providers": {
23
+ "ollama": {
24
+ "baseUrl": "http://localhost:11434/v1",
25
+ "api": "openai-completions",
26
+ "apiKey": "ollama",
27
+ "models": [
28
+ { "id": "llama3.1:8b" },
29
+ { "id": "qwen2.5-coder:7b" }
30
+ ]
31
+ }
32
+ }
33
+ }
34
+ ```
35
+
36
+ The `apiKey` is required but Ollama ignores it, so any value works.
37
+
38
+ Some OpenAI-compatible servers do not understand the `developer` role used for reasoning-capable models. For those providers, set `compat.supportsDeveloperRole` to `false` so pi sends the system prompt as a `system` message instead. If the server also does not support `reasoning_effort`, set `compat.supportsReasoningEffort` to `false` too.
39
+
40
+ You can set `compat` at the provider level to apply to all models, or at the model level to override a specific model. This commonly applies to Ollama, vLLM, SGLang, and similar OpenAI-compatible servers.
41
+
42
+ ```json
43
+ {
44
+ "providers": {
45
+ "ollama": {
46
+ "baseUrl": "http://localhost:11434/v1",
47
+ "api": "openai-completions",
48
+ "apiKey": "ollama",
49
+ "compat": {
50
+ "supportsDeveloperRole": false,
51
+ "supportsReasoningEffort": false
52
+ },
53
+ "models": [
54
+ {
55
+ "id": "gpt-oss:20b",
56
+ "reasoning": true
57
+ }
58
+ ]
59
+ }
60
+ }
61
+ }
62
+ ```
63
+
64
+ ## Full Example
65
+
66
+ Override defaults when you need specific values:
67
+
68
+ ```json
69
+ {
70
+ "providers": {
71
+ "ollama": {
72
+ "baseUrl": "http://localhost:11434/v1",
73
+ "api": "openai-completions",
74
+ "apiKey": "ollama",
75
+ "models": [
76
+ {
77
+ "id": "llama3.1:8b",
78
+ "name": "Llama 3.1 8B (Local)",
79
+ "reasoning": false,
80
+ "input": ["text"],
81
+ "contextWindow": 128000,
82
+ "maxTokens": 32000,
83
+ "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
84
+ }
85
+ ]
86
+ }
87
+ }
88
+ }
89
+ ```
90
+
91
+ The file reloads each time you open `/model`. Edit during session; no restart needed.
92
+
93
+ ## Supported APIs
94
+
95
+ | API | Description |
96
+ |-----|-------------|
97
+ | `openai-completions` | OpenAI Chat Completions (most compatible) |
98
+ | `openai-responses` | OpenAI Responses API |
99
+ | `anthropic-messages` | Anthropic Messages API |
100
+ | `google-generative-ai` | Google Generative AI |
101
+
102
+ Set `api` at provider level (default for all models) or model level (override per model).
103
+
104
+ ## Provider Configuration
105
+
106
+ | Field | Description |
107
+ |-------|-------------|
108
+ | `baseUrl` | API endpoint URL |
109
+ | `api` | API type (see above) |
110
+ | `apiKey` | API key (see value resolution below) |
111
+ | `headers` | Custom headers (see value resolution below) |
112
+ | `authHeader` | Set `true` to add `Authorization: Bearer <apiKey>` automatically |
113
+ | `models` | Array of model configurations |
114
+ | `modelOverrides` | Per-model overrides for built-in models on this provider |
115
+
116
+ ### Value Resolution
117
+
118
+ The `apiKey` and `headers` fields support three formats:
119
+
120
+ - **Shell command:** `"!command"` executes and uses stdout
121
+ ```json
122
+ "apiKey": "!security find-generic-password -ws 'anthropic'"
123
+ "apiKey": "!op read 'op://vault/item/credential'"
124
+ ```
125
+ - **Environment variable:** Uses the value of the named variable
126
+ ```json
127
+ "apiKey": "MY_API_KEY"
128
+ ```
129
+ - **Literal value:** Used directly
130
+ ```json
131
+ "apiKey": "sk-..."
132
+ ```
133
+
134
+ ### Custom Headers
135
+
136
+ ```json
137
+ {
138
+ "providers": {
139
+ "custom-proxy": {
140
+ "baseUrl": "https://proxy.example.com/v1",
141
+ "apiKey": "MY_API_KEY",
142
+ "api": "anthropic-messages",
143
+ "headers": {
144
+ "x-portkey-api-key": "PORTKEY_API_KEY",
145
+ "x-secret": "!op read 'op://vault/item/secret'"
146
+ },
147
+ "models": [...]
148
+ }
149
+ }
150
+ }
151
+ ```
152
+
153
+ ## Model Configuration
154
+
155
+ | Field | Required | Default | Description |
156
+ |-------|----------|---------|-------------|
157
+ | `id` | Yes | — | Model identifier (passed to the API) |
158
+ | `name` | No | `id` | Human-readable model label. Used for matching (`--model` patterns) and shown in model details/status text. |
159
+ | `api` | No | provider's `api` | Override provider's API for this model |
160
+ | `reasoning` | No | `false` | Supports extended thinking |
161
+ | `input` | No | `["text"]` | Input types: `["text"]` or `["text", "image"]` |
162
+ | `contextWindow` | No | `128000` | Context window size in tokens |
163
+ | `maxTokens` | No | `16384` | Maximum output tokens |
164
+ | `cost` | No | all zeros | `{"input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0}` (per million tokens) |
165
+ | `compat` | No | provider `compat` | OpenAI compatibility overrides. Merged with provider-level `compat` when both are set. |
166
+
167
+ Current behavior:
168
+ - `/model` and `--list-models` list entries by model `id`.
169
+ - The configured `name` is used for model matching and detail/status text.
170
+
171
+ ## Overriding Built-in Providers
172
+
173
+ Route a built-in provider through a proxy without redefining models:
174
+
175
+ ```json
176
+ {
177
+ "providers": {
178
+ "anthropic": {
179
+ "baseUrl": "https://my-proxy.example.com/v1"
180
+ }
181
+ }
182
+ }
183
+ ```
184
+
185
+ All built-in Anthropic models remain available. Existing OAuth or API key auth continues to work.
186
+
187
+ To merge custom models into a built-in provider, include the `models` array:
188
+
189
+ ```json
190
+ {
191
+ "providers": {
192
+ "anthropic": {
193
+ "baseUrl": "https://my-proxy.example.com/v1",
194
+ "apiKey": "ANTHROPIC_API_KEY",
195
+ "api": "anthropic-messages",
196
+ "models": [...]
197
+ }
198
+ }
199
+ }
200
+ ```
201
+
202
+ Merge semantics:
203
+ - Built-in models are kept.
204
+ - Custom models are upserted by `id` within the provider.
205
+ - If a custom model `id` matches a built-in model `id`, the custom model replaces that built-in model.
206
+ - If a custom model `id` is new, it is added alongside built-in models.
207
+
208
+ ## Per-model Overrides
209
+
210
+ Use `modelOverrides` to customize specific built-in models without replacing the provider's full model list.
211
+
212
+ ```json
213
+ {
214
+ "providers": {
215
+ "openrouter": {
216
+ "modelOverrides": {
217
+ "anthropic/claude-sonnet-4": {
218
+ "name": "Claude Sonnet 4 (Bedrock Route)",
219
+ "compat": {
220
+ "openRouterRouting": {
221
+ "only": ["amazon-bedrock"]
222
+ }
223
+ }
224
+ }
225
+ }
226
+ }
227
+ }
228
+ }
229
+ ```
230
+
231
+ `modelOverrides` supports these fields per model: `name`, `reasoning`, `input`, `cost` (partial), `contextWindow`, `maxTokens`, `headers`, `compat`.
232
+
233
+ Behavior notes:
234
+ - `modelOverrides` are applied to built-in provider models.
235
+ - Unknown model IDs are ignored.
236
+ - You can combine provider-level `baseUrl`/`headers` with `modelOverrides`.
237
+ - If `models` is also defined for a provider, custom models are merged after built-in overrides. A custom model with the same `id` replaces the overridden built-in model entry.
238
+
239
+ ## OpenAI Compatibility
240
+
241
+ For providers with partial OpenAI compatibility, use the `compat` field.
242
+
243
+ - Provider-level `compat` applies defaults to all models under that provider.
244
+ - Model-level `compat` overrides provider-level values for that model.
245
+
246
+ ```json
247
+ {
248
+ "providers": {
249
+ "local-llm": {
250
+ "baseUrl": "http://localhost:8080/v1",
251
+ "api": "openai-completions",
252
+ "compat": {
253
+ "supportsUsageInStreaming": false,
254
+ "maxTokensField": "max_tokens"
255
+ },
256
+ "models": [...]
257
+ }
258
+ }
259
+ }
260
+ ```
261
+
262
+ | Field | Description |
263
+ |-------|-------------|
264
+ | `supportsStore` | Provider supports `store` field |
265
+ | `supportsDeveloperRole` | Use `developer` vs `system` role |
266
+ | `supportsReasoningEffort` | Support for `reasoning_effort` parameter |
267
+ | `reasoningEffortMap` | Map pi thinking levels to provider-specific `reasoning_effort` values |
268
+ | `supportsUsageInStreaming` | Supports `stream_options: { include_usage: true }` (default: `true`) |
269
+ | `maxTokensField` | Use `max_completion_tokens` or `max_tokens` |
270
+ | `requiresToolResultName` | Include `name` on tool result messages |
271
+ | `requiresAssistantAfterToolResult` | Insert an assistant message before a user message after tool results |
272
+ | `requiresThinkingAsText` | Convert thinking blocks to plain text |
273
+ | `thinkingFormat` | Use `reasoning_effort`, `zai`, `qwen`, or `qwen-chat-template` thinking parameters |
274
+ | `supportsStrictMode` | Include the `strict` field in tool definitions |
275
+ | `openRouterRouting` | OpenRouter routing config passed to OpenRouter for model/provider selection |
276
+ | `vercelGatewayRouting` | Vercel AI Gateway routing config for provider selection (`only`, `order`) |
277
+
278
+ `qwen` uses top-level `enable_thinking`. Use `qwen-chat-template` for local Qwen-compatible servers that require `chat_template_kwargs.enable_thinking`.
279
+
280
+ Example:
281
+
282
+ ```json
283
+ {
284
+ "providers": {
285
+ "openrouter": {
286
+ "baseUrl": "https://openrouter.ai/api/v1",
287
+ "apiKey": "OPENROUTER_API_KEY",
288
+ "api": "openai-completions",
289
+ "models": [
290
+ {
291
+ "id": "openrouter/anthropic/claude-3.5-sonnet",
292
+ "name": "OpenRouter Claude 3.5 Sonnet",
293
+ "compat": {
294
+ "openRouterRouting": {
295
+ "order": ["anthropic"],
296
+ "fallbacks": ["openai"]
297
+ }
298
+ }
299
+ }
300
+ ]
301
+ }
302
+ }
303
+ }
304
+ ```
305
+
306
+ Vercel AI Gateway example:
307
+
308
+ ```json
309
+ {
310
+ "providers": {
311
+ "vercel-ai-gateway": {
312
+ "baseUrl": "https://ai-gateway.vercel.sh/v1",
313
+ "apiKey": "AI_GATEWAY_API_KEY",
314
+ "api": "openai-completions",
315
+ "models": [
316
+ {
317
+ "id": "moonshotai/kimi-k2.5",
318
+ "name": "Kimi K2.5 (Fireworks via Vercel)",
319
+ "reasoning": true,
320
+ "input": ["text", "image"],
321
+ "cost": { "input": 0.6, "output": 3, "cacheRead": 0, "cacheWrite": 0 },
322
+ "contextWindow": 262144,
323
+ "maxTokens": 262144,
324
+ "compat": {
325
+ "vercelGatewayRouting": {
326
+ "only": ["fireworks", "novita"],
327
+ "order": ["fireworks", "novita"]
328
+ }
329
+ }
330
+ }
331
+ ]
332
+ }
333
+ }
334
+ }
335
+ ```