apex-code 0.4.0 → 0.5.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 (573) hide show
  1. package/CHANGELOG.md +280 -6
  2. package/README.md +624 -0
  3. package/dist/bun/cli.d.ts +3 -1
  4. package/dist/bun/cli.d.ts.map +1 -1
  5. package/dist/bun/cli.js +3 -9
  6. package/dist/bun/cli.js.map +1 -1
  7. package/dist/bun/runtime-setup.d.ts +2 -0
  8. package/dist/bun/runtime-setup.d.ts.map +1 -0
  9. package/dist/bun/runtime-setup.js +9 -0
  10. package/dist/bun/runtime-setup.js.map +1 -0
  11. package/dist/bun/sandbox-env-setup.d.ts +2 -0
  12. package/dist/bun/sandbox-env-setup.d.ts.map +1 -0
  13. package/dist/bun/sandbox-env-setup.js +4 -0
  14. package/dist/bun/sandbox-env-setup.js.map +1 -0
  15. package/dist/cli/args.d.ts.map +1 -1
  16. package/dist/cli/args.js +16 -5
  17. package/dist/cli/args.js.map +1 -1
  18. package/dist/cli/config-selector.d.ts.map +1 -1
  19. package/dist/cli/config-selector.js +2 -1
  20. package/dist/cli/config-selector.js.map +1 -1
  21. package/dist/cli/file-processor.d.ts +1 -1
  22. package/dist/cli/file-processor.d.ts.map +1 -1
  23. package/dist/cli/file-processor.js.map +1 -1
  24. package/dist/cli/session-picker.d.ts +1 -1
  25. package/dist/cli/session-picker.d.ts.map +1 -1
  26. package/dist/cli/session-picker.js.map +1 -1
  27. package/dist/cli/setup.d.ts +2 -0
  28. package/dist/cli/setup.d.ts.map +1 -0
  29. package/dist/cli/setup.js +13 -0
  30. package/dist/cli/setup.js.map +1 -0
  31. package/dist/config.d.ts +1 -0
  32. package/dist/config.d.ts.map +1 -1
  33. package/dist/config.js +1 -0
  34. package/dist/config.js.map +1 -1
  35. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  36. package/dist/core/agent-session-runtime.js +16 -8
  37. package/dist/core/agent-session-runtime.js.map +1 -1
  38. package/dist/core/agent-session.d.ts +85 -15
  39. package/dist/core/agent-session.d.ts.map +1 -1
  40. package/dist/core/agent-session.js +685 -266
  41. package/dist/core/agent-session.js.map +1 -1
  42. package/dist/core/auth-storage.d.ts +4 -0
  43. package/dist/core/auth-storage.d.ts.map +1 -1
  44. package/dist/core/auth-storage.js +55 -0
  45. package/dist/core/auth-storage.js.map +1 -1
  46. package/dist/core/bug-report.d.ts +176 -0
  47. package/dist/core/bug-report.d.ts.map +1 -0
  48. package/dist/core/bug-report.js +291 -0
  49. package/dist/core/bug-report.js.map +1 -0
  50. package/dist/core/cache-stats.d.ts.map +1 -1
  51. package/dist/core/cache-stats.js +12 -1
  52. package/dist/core/cache-stats.js.map +1 -1
  53. package/dist/core/cache-warmer.d.ts +103 -0
  54. package/dist/core/cache-warmer.d.ts.map +1 -0
  55. package/dist/core/cache-warmer.js +356 -0
  56. package/dist/core/cache-warmer.js.map +1 -0
  57. package/dist/core/compaction/branch-summarization.d.ts +1 -1
  58. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  59. package/dist/core/compaction/branch-summarization.js +4 -3
  60. package/dist/core/compaction/branch-summarization.js.map +1 -1
  61. package/dist/core/compaction/compaction.d.ts +5 -3
  62. package/dist/core/compaction/compaction.d.ts.map +1 -1
  63. package/dist/core/compaction/compaction.js +163 -66
  64. package/dist/core/compaction/compaction.js.map +1 -1
  65. package/dist/core/context/pipeline.d.ts +8 -8
  66. package/dist/core/context/pipeline.d.ts.map +1 -1
  67. package/dist/core/context/pipeline.js +21 -12
  68. package/dist/core/context/pipeline.js.map +1 -1
  69. package/dist/core/crash-log.d.ts +27 -0
  70. package/dist/core/crash-log.d.ts.map +1 -0
  71. package/dist/core/crash-log.js +139 -0
  72. package/dist/core/crash-log.js.map +1 -0
  73. package/dist/core/export-html/template.js +6 -1
  74. package/dist/core/extensions/index.d.ts +1 -1
  75. package/dist/core/extensions/index.d.ts.map +1 -1
  76. package/dist/core/extensions/index.js.map +1 -1
  77. package/dist/core/extensions/jiti-loader.d.ts +2 -0
  78. package/dist/core/extensions/jiti-loader.d.ts.map +1 -0
  79. package/dist/core/extensions/jiti-loader.js +4 -0
  80. package/dist/core/extensions/jiti-loader.js.map +1 -0
  81. package/dist/core/extensions/jiti-static-loader.d.ts +2 -0
  82. package/dist/core/extensions/jiti-static-loader.d.ts.map +1 -0
  83. package/dist/core/extensions/jiti-static-loader.js +4 -0
  84. package/dist/core/extensions/jiti-static-loader.js.map +1 -0
  85. package/dist/core/extensions/loader.d.ts.map +1 -1
  86. package/dist/core/extensions/loader.js +40 -59
  87. package/dist/core/extensions/loader.js.map +1 -1
  88. package/dist/core/extensions/runner.d.ts +24 -8
  89. package/dist/core/extensions/runner.d.ts.map +1 -1
  90. package/dist/core/extensions/runner.js +195 -72
  91. package/dist/core/extensions/runner.js.map +1 -1
  92. package/dist/core/extensions/types.d.ts +142 -55
  93. package/dist/core/extensions/types.d.ts.map +1 -1
  94. package/dist/core/extensions/types.js.map +1 -1
  95. package/dist/core/extensions/virtual-modules.d.ts +3 -0
  96. package/dist/core/extensions/virtual-modules.d.ts.map +1 -0
  97. package/dist/core/extensions/virtual-modules.js +41 -0
  98. package/dist/core/extensions/virtual-modules.js.map +1 -0
  99. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  100. package/dist/core/extensions/wrapper.js +1 -20
  101. package/dist/core/extensions/wrapper.js.map +1 -1
  102. package/dist/core/http-dispatcher.d.ts.map +1 -1
  103. package/dist/core/http-dispatcher.js +2 -0
  104. package/dist/core/http-dispatcher.js.map +1 -1
  105. package/dist/core/index.d.ts +2 -1
  106. package/dist/core/index.d.ts.map +1 -1
  107. package/dist/core/index.js.map +1 -1
  108. package/dist/core/keybindings.d.ts +6 -1
  109. package/dist/core/keybindings.d.ts.map +1 -1
  110. package/dist/core/keybindings.js +5 -1
  111. package/dist/core/keybindings.js.map +1 -1
  112. package/dist/core/messages.d.ts +1 -1
  113. package/dist/core/messages.d.ts.map +1 -1
  114. package/dist/core/messages.js +1 -0
  115. package/dist/core/messages.js.map +1 -1
  116. package/dist/core/model-config.d.ts +168 -20
  117. package/dist/core/model-config.d.ts.map +1 -1
  118. package/dist/core/model-config.js +44 -18
  119. package/dist/core/model-config.js.map +1 -1
  120. package/dist/core/model-registry.d.ts +5 -1
  121. package/dist/core/model-registry.d.ts.map +1 -1
  122. package/dist/core/model-registry.js +8 -0
  123. package/dist/core/model-registry.js.map +1 -1
  124. package/dist/core/model-resolver.d.ts.map +1 -1
  125. package/dist/core/model-resolver.js +4 -3
  126. package/dist/core/model-resolver.js.map +1 -1
  127. package/dist/core/model-runtime.d.ts +1 -0
  128. package/dist/core/model-runtime.d.ts.map +1 -1
  129. package/dist/core/model-runtime.js +12 -6
  130. package/dist/core/model-runtime.js.map +1 -1
  131. package/dist/core/permissions/store.d.ts.map +1 -1
  132. package/dist/core/permissions/store.js +11 -8
  133. package/dist/core/permissions/store.js.map +1 -1
  134. package/dist/core/prompt-templates.d.ts +6 -1
  135. package/dist/core/prompt-templates.d.ts.map +1 -1
  136. package/dist/core/prompt-templates.js +61 -35
  137. package/dist/core/prompt-templates.js.map +1 -1
  138. package/dist/core/provider-composer.d.ts +4 -2
  139. package/dist/core/provider-composer.d.ts.map +1 -1
  140. package/dist/core/provider-composer.js +29 -2
  141. package/dist/core/provider-composer.js.map +1 -1
  142. package/dist/core/radius.d.ts +3 -0
  143. package/dist/core/radius.d.ts.map +1 -1
  144. package/dist/core/radius.js +6 -0
  145. package/dist/core/radius.js.map +1 -1
  146. package/dist/core/resource-loader.d.ts.map +1 -1
  147. package/dist/core/resource-loader.js +6 -2
  148. package/dist/core/resource-loader.js.map +1 -1
  149. package/dist/core/sdk.d.ts.map +1 -1
  150. package/dist/core/sdk.js +63 -42
  151. package/dist/core/sdk.js.map +1 -1
  152. package/dist/core/session-export.d.ts +6 -2
  153. package/dist/core/session-export.d.ts.map +1 -1
  154. package/dist/core/session-export.js +14 -13
  155. package/dist/core/session-export.js.map +1 -1
  156. package/dist/core/session-manager.d.ts +66 -15
  157. package/dist/core/session-manager.d.ts.map +1 -1
  158. package/dist/core/session-manager.js +295 -115
  159. package/dist/core/session-manager.js.map +1 -1
  160. package/dist/core/settings-manager.d.ts +27 -4
  161. package/dist/core/settings-manager.d.ts.map +1 -1
  162. package/dist/core/settings-manager.js +56 -8
  163. package/dist/core/settings-manager.js.map +1 -1
  164. package/dist/core/skills.d.ts +1 -1
  165. package/dist/core/skills.d.ts.map +1 -1
  166. package/dist/core/skills.js +5 -4
  167. package/dist/core/skills.js.map +1 -1
  168. package/dist/core/slash-commands.d.ts.map +1 -1
  169. package/dist/core/slash-commands.js +1 -0
  170. package/dist/core/slash-commands.js.map +1 -1
  171. package/dist/core/system-prompt.d.ts +49 -6
  172. package/dist/core/system-prompt.d.ts.map +1 -1
  173. package/dist/core/system-prompt.js +140 -79
  174. package/dist/core/system-prompt.js.map +1 -1
  175. package/dist/core/tools/bash.d.ts +9 -15
  176. package/dist/core/tools/bash.d.ts.map +1 -1
  177. package/dist/core/tools/bash.js +20 -137
  178. package/dist/core/tools/bash.js.map +1 -1
  179. package/dist/core/tools/delegate.d.ts.map +1 -1
  180. package/dist/core/tools/delegate.js +2 -2
  181. package/dist/core/tools/delegate.js.map +1 -1
  182. package/dist/core/tools/edit.d.ts +1 -12
  183. package/dist/core/tools/edit.d.ts.map +1 -1
  184. package/dist/core/tools/edit.js +6 -204
  185. package/dist/core/tools/edit.js.map +1 -1
  186. package/dist/core/tools/find.d.ts.map +1 -1
  187. package/dist/core/tools/find.js +4 -55
  188. package/dist/core/tools/find.js.map +1 -1
  189. package/dist/core/tools/grep.d.ts.map +1 -1
  190. package/dist/core/tools/grep.js +4 -60
  191. package/dist/core/tools/grep.js.map +1 -1
  192. package/dist/core/tools/ls.d.ts.map +1 -1
  193. package/dist/core/tools/ls.js +4 -49
  194. package/dist/core/tools/ls.js.map +1 -1
  195. package/dist/core/tools/read.d.ts +4 -1
  196. package/dist/core/tools/read.d.ts.map +1 -1
  197. package/dist/core/tools/read.js +10 -122
  198. package/dist/core/tools/read.js.map +1 -1
  199. package/dist/core/tools/renderers/bash.d.ts +18 -0
  200. package/dist/core/tools/renderers/bash.d.ts.map +1 -0
  201. package/dist/core/tools/renderers/bash.js +126 -0
  202. package/dist/core/tools/renderers/bash.js.map +1 -0
  203. package/dist/core/tools/renderers/edit.d.ts +23 -0
  204. package/dist/core/tools/renderers/edit.d.ts.map +1 -0
  205. package/dist/core/tools/renderers/edit.js +207 -0
  206. package/dist/core/tools/renderers/edit.js.map +1 -0
  207. package/dist/core/tools/renderers/find.d.ts +10 -0
  208. package/dist/core/tools/renderers/find.d.ts.map +1 -0
  209. package/dist/core/tools/renderers/find.js +64 -0
  210. package/dist/core/tools/renderers/find.js.map +1 -0
  211. package/dist/core/tools/renderers/grep.d.ts +10 -0
  212. package/dist/core/tools/renderers/grep.d.ts.map +1 -0
  213. package/dist/core/tools/renderers/grep.js +69 -0
  214. package/dist/core/tools/renderers/grep.js.map +1 -0
  215. package/dist/core/tools/renderers/index.d.ts +34 -0
  216. package/dist/core/tools/renderers/index.d.ts.map +1 -0
  217. package/dist/core/tools/renderers/index.js +47 -0
  218. package/dist/core/tools/renderers/index.js.map +1 -0
  219. package/dist/core/tools/renderers/ls.d.ts +10 -0
  220. package/dist/core/tools/renderers/ls.d.ts.map +1 -0
  221. package/dist/core/tools/renderers/ls.js +58 -0
  222. package/dist/core/tools/renderers/ls.js.map +1 -0
  223. package/dist/core/tools/renderers/read.d.ts +11 -0
  224. package/dist/core/tools/renderers/read.d.ts.map +1 -0
  225. package/dist/core/tools/renderers/read.js +132 -0
  226. package/dist/core/tools/renderers/read.js.map +1 -0
  227. package/dist/core/tools/renderers/write.d.ts +10 -0
  228. package/dist/core/tools/renderers/write.d.ts.map +1 -0
  229. package/dist/core/tools/renderers/write.js +152 -0
  230. package/dist/core/tools/renderers/write.js.map +1 -0
  231. package/dist/core/tools/write.d.ts.map +1 -1
  232. package/dist/core/tools/write.js +6 -147
  233. package/dist/core/tools/write.js.map +1 -1
  234. package/dist/core/usage-totals.d.ts +1 -1
  235. package/dist/core/usage-totals.d.ts.map +1 -1
  236. package/dist/core/usage-totals.js +5 -1
  237. package/dist/core/usage-totals.js.map +1 -1
  238. package/dist/extensions/llama/client.d.ts +2 -0
  239. package/dist/extensions/llama/client.d.ts.map +1 -1
  240. package/dist/extensions/llama/client.js +7 -3
  241. package/dist/extensions/llama/client.js.map +1 -1
  242. package/dist/extensions/llama/provider.d.ts.map +1 -1
  243. package/dist/extensions/llama/provider.js +20 -5
  244. package/dist/extensions/llama/provider.js.map +1 -1
  245. package/dist/extensions/llama/ui.d.ts.map +1 -1
  246. package/dist/extensions/llama/ui.js +3 -2
  247. package/dist/extensions/llama/ui.js.map +1 -1
  248. package/dist/index.d.ts +5 -4
  249. package/dist/index.d.ts.map +1 -1
  250. package/dist/index.js +1 -1
  251. package/dist/index.js.map +1 -1
  252. package/dist/main.d.ts.map +1 -1
  253. package/dist/main.js +21 -13
  254. package/dist/main.js.map +1 -1
  255. package/dist/modes/interactive/bug-report.d.ts +16 -0
  256. package/dist/modes/interactive/bug-report.d.ts.map +1 -0
  257. package/dist/modes/interactive/bug-report.js +167 -0
  258. package/dist/modes/interactive/bug-report.js.map +1 -0
  259. package/dist/modes/interactive/chat-viewport.d.ts +20 -0
  260. package/dist/modes/interactive/chat-viewport.d.ts.map +1 -0
  261. package/dist/modes/interactive/chat-viewport.js +28 -0
  262. package/dist/modes/interactive/chat-viewport.js.map +1 -0
  263. package/dist/modes/interactive/components/assistant-message.d.ts +7 -0
  264. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  265. package/dist/modes/interactive/components/assistant-message.js +63 -27
  266. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  267. package/dist/modes/interactive/components/autocomplete-source.d.ts +8 -0
  268. package/dist/modes/interactive/components/autocomplete-source.d.ts.map +1 -0
  269. package/dist/modes/interactive/components/autocomplete-source.js +23 -0
  270. package/dist/modes/interactive/components/autocomplete-source.js.map +1 -0
  271. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  272. package/dist/modes/interactive/components/bash-execution.js +6 -4
  273. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  274. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  275. package/dist/modes/interactive/components/bordered-loader.js +1 -1
  276. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  277. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  278. package/dist/modes/interactive/components/branch-summary-message.js +12 -5
  279. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  280. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  281. package/dist/modes/interactive/components/compaction-summary-message.js +12 -5
  282. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  283. package/dist/modes/interactive/components/composer-dock.d.ts +12 -0
  284. package/dist/modes/interactive/components/composer-dock.d.ts.map +1 -0
  285. package/dist/modes/interactive/components/composer-dock.js +24 -0
  286. package/dist/modes/interactive/components/composer-dock.js.map +1 -0
  287. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  288. package/dist/modes/interactive/components/config-selector.js +11 -9
  289. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  290. package/dist/modes/interactive/components/custom-editor.d.ts +12 -0
  291. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  292. package/dist/modes/interactive/components/custom-editor.js +38 -0
  293. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  294. package/dist/modes/interactive/components/error-summary.d.ts +11 -0
  295. package/dist/modes/interactive/components/error-summary.d.ts.map +1 -0
  296. package/dist/modes/interactive/components/error-summary.js +31 -0
  297. package/dist/modes/interactive/components/error-summary.js.map +1 -0
  298. package/dist/modes/interactive/components/extension-editor.d.ts +4 -1
  299. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  300. package/dist/modes/interactive/components/extension-editor.js +15 -10
  301. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  302. package/dist/modes/interactive/components/extension-input.d.ts +2 -0
  303. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  304. package/dist/modes/interactive/components/extension-input.js +15 -5
  305. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  306. package/dist/modes/interactive/components/extension-selector.d.ts +2 -0
  307. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  308. package/dist/modes/interactive/components/extension-selector.js +15 -10
  309. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  310. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  311. package/dist/modes/interactive/components/first-time-setup.js +6 -6
  312. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  313. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  314. package/dist/modes/interactive/components/footer.js +12 -4
  315. package/dist/modes/interactive/components/footer.js.map +1 -1
  316. package/dist/modes/interactive/components/index.d.ts +1 -1
  317. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  318. package/dist/modes/interactive/components/index.js.map +1 -1
  319. package/dist/modes/interactive/components/keybinding-hints.d.ts +21 -0
  320. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  321. package/dist/modes/interactive/components/keybinding-hints.js +34 -0
  322. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  323. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  324. package/dist/modes/interactive/components/login-dialog.js +27 -23
  325. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  326. package/dist/modes/interactive/components/model-selector.d.ts +1 -1
  327. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  328. package/dist/modes/interactive/components/model-selector.js +16 -20
  329. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  330. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  331. package/dist/modes/interactive/components/oauth-selector.js +7 -6
  332. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  333. package/dist/modes/interactive/components/permission-preview.d.ts.map +1 -1
  334. package/dist/modes/interactive/components/permission-preview.js +3 -3
  335. package/dist/modes/interactive/components/permission-preview.js.map +1 -1
  336. package/dist/modes/interactive/components/prompt-input.d.ts +12 -0
  337. package/dist/modes/interactive/components/prompt-input.d.ts.map +1 -0
  338. package/dist/modes/interactive/components/prompt-input.js +18 -0
  339. package/dist/modes/interactive/components/prompt-input.js.map +1 -0
  340. package/dist/modes/interactive/components/scoped-models-selector.d.ts +1 -1
  341. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  342. package/dist/modes/interactive/components/scoped-models-selector.js +17 -18
  343. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  344. package/dist/modes/interactive/components/session-selector.d.ts +5 -5
  345. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  346. package/dist/modes/interactive/components/session-selector.js +100 -67
  347. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  348. package/dist/modes/interactive/components/settings-selector.d.ts +5 -1
  349. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  350. package/dist/modes/interactive/components/settings-selector.js +74 -16
  351. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  352. package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -1
  353. package/dist/modes/interactive/components/settings-submenu.js +8 -6
  354. package/dist/modes/interactive/components/settings-submenu.js.map +1 -1
  355. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  356. package/dist/modes/interactive/components/skill-invocation-message.js +11 -4
  357. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  358. package/dist/modes/interactive/components/status-indicator.d.ts +3 -1
  359. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  360. package/dist/modes/interactive/components/status-indicator.js +10 -3
  361. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  362. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  363. package/dist/modes/interactive/components/thinking-selector.js +14 -9
  364. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  365. package/dist/modes/interactive/components/tool-execution.d.ts +28 -16
  366. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  367. package/dist/modes/interactive/components/tool-execution.js +73 -80
  368. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  369. package/dist/modes/interactive/components/tool-panel.d.ts.map +1 -1
  370. package/dist/modes/interactive/components/tool-panel.js +7 -2
  371. package/dist/modes/interactive/components/tool-panel.js.map +1 -1
  372. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  373. package/dist/modes/interactive/components/tree-selector.js +18 -5
  374. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  375. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
  376. package/dist/modes/interactive/components/trust-selector.js +12 -12
  377. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  378. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  379. package/dist/modes/interactive/components/user-message-selector.js +2 -2
  380. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  381. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  382. package/dist/modes/interactive/components/user-message.js +6 -3
  383. package/dist/modes/interactive/components/user-message.js.map +1 -1
  384. package/dist/modes/interactive/interactive-mode.d.ts +50 -31
  385. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  386. package/dist/modes/interactive/interactive-mode.js +494 -229
  387. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  388. package/dist/modes/interactive/theme/dark.json +2 -1
  389. package/dist/modes/interactive/theme/light.json +2 -1
  390. package/dist/modes/interactive/theme/theme-controller.d.ts +1 -0
  391. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  392. package/dist/modes/interactive/theme/theme-controller.js +5 -0
  393. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  394. package/dist/modes/interactive/theme/theme-json.d.ts +84 -0
  395. package/dist/modes/interactive/theme/theme-json.d.ts.map +1 -0
  396. package/dist/modes/interactive/theme/theme-json.js +130 -0
  397. package/dist/modes/interactive/theme/theme-json.js.map +1 -0
  398. package/dist/modes/interactive/theme/theme-schema.json +6 -2
  399. package/dist/modes/interactive/theme/theme.d.ts +14 -5
  400. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  401. package/dist/modes/interactive/theme/theme.js +18 -119
  402. package/dist/modes/interactive/theme/theme.js.map +1 -1
  403. package/dist/modes/interactive/tui-renderer.d.ts +21 -0
  404. package/dist/modes/interactive/tui-renderer.d.ts.map +1 -0
  405. package/dist/modes/interactive/tui-renderer.js +66 -0
  406. package/dist/modes/interactive/tui-renderer.js.map +1 -0
  407. package/dist/modes/print-mode.d.ts.map +1 -1
  408. package/dist/modes/print-mode.js +49 -23
  409. package/dist/modes/print-mode.js.map +1 -1
  410. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  411. package/dist/modes/rpc/rpc-mode.js +2 -2
  412. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  413. package/dist/testing/replay/recorded-provider.d.ts +2 -2
  414. package/dist/testing/replay/recorded-provider.d.ts.map +1 -1
  415. package/dist/testing/replay/recorded-provider.js +2 -5
  416. package/dist/testing/replay/recorded-provider.js.map +1 -1
  417. package/dist/testing/replay/runner.d.ts.map +1 -1
  418. package/dist/testing/replay/runner.js +0 -1
  419. package/dist/testing/replay/runner.js.map +1 -1
  420. package/dist/utils/clipboard-command.d.ts +7 -0
  421. package/dist/utils/clipboard-command.d.ts.map +1 -0
  422. package/dist/utils/clipboard-command.js +45 -0
  423. package/dist/utils/clipboard-command.js.map +1 -0
  424. package/dist/utils/clipboard-image.d.ts.map +1 -1
  425. package/dist/utils/clipboard-image.js +53 -81
  426. package/dist/utils/clipboard-image.js.map +1 -1
  427. package/dist/utils/clipboard.d.ts.map +1 -1
  428. package/dist/utils/clipboard.js +111 -121
  429. package/dist/utils/clipboard.js.map +1 -1
  430. package/dist/utils/exif-orientation.d.ts.map +1 -1
  431. package/dist/utils/exif-orientation.js +2 -3
  432. package/dist/utils/exif-orientation.js.map +1 -1
  433. package/dist/utils/mime.d.ts.map +1 -1
  434. package/dist/utils/mime.js +1 -1
  435. package/dist/utils/mime.js.map +1 -1
  436. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  437. package/dist/utils/syntax-highlight.js +21 -21
  438. package/dist/utils/syntax-highlight.js.map +1 -1
  439. package/dist/utils/tool-result-images.d.ts +3 -1
  440. package/dist/utils/tool-result-images.d.ts.map +1 -1
  441. package/dist/utils/tool-result-images.js +4 -1
  442. package/dist/utils/tool-result-images.js.map +1 -1
  443. package/dist/utils/tools-manager.d.ts.map +1 -1
  444. package/dist/utils/tools-manager.js +11 -2
  445. package/dist/utils/tools-manager.js.map +1 -1
  446. package/dist/utils/wsl.d.ts +3 -0
  447. package/dist/utils/wsl.d.ts.map +1 -0
  448. package/dist/utils/wsl.js +15 -0
  449. package/dist/utils/wsl.js.map +1 -0
  450. package/dist/utils/zip.d.ts +7 -0
  451. package/dist/utils/zip.d.ts.map +1 -0
  452. package/dist/utils/zip.js +60 -0
  453. package/dist/utils/zip.js.map +1 -0
  454. package/docs/cli-integration.md +107 -0
  455. package/docs/cli.md +269 -0
  456. package/docs/compaction.md +73 -24
  457. package/docs/configuration.md +45 -0
  458. package/docs/containerization.md +22 -21
  459. package/docs/custom-provider.md +21 -12
  460. package/docs/development.md +19 -0
  461. package/docs/docs.json +139 -95
  462. package/docs/extensions.md +243 -371
  463. package/docs/how-pi-works.md +49 -0
  464. package/docs/images/interactive-mode.png +0 -0
  465. package/docs/index.md +3 -3
  466. package/docs/json.md +43 -3
  467. package/docs/keybindings.md +57 -54
  468. package/docs/llama-cpp.md +2 -2
  469. package/docs/message-types.md +261 -0
  470. package/docs/models.md +103 -49
  471. package/docs/packages.md +49 -47
  472. package/docs/prompt-templates.md +29 -56
  473. package/docs/providers.md +91 -139
  474. package/docs/quickstart.md +42 -14
  475. package/docs/rpc-commands.md +854 -0
  476. package/docs/rpc-extension-ui.md +200 -0
  477. package/docs/rpc.md +121 -223
  478. package/docs/sdk.md +99 -124
  479. package/docs/security.md +7 -7
  480. package/docs/session-format.md +85 -82
  481. package/docs/sessions.md +41 -57
  482. package/docs/settings.md +95 -88
  483. package/docs/shell-aliases.md +68 -3
  484. package/docs/skills.md +62 -49
  485. package/docs/slash-commands.md +60 -0
  486. package/docs/terminal-setup.md +86 -55
  487. package/docs/termux.md +65 -75
  488. package/docs/themes.md +64 -86
  489. package/docs/tmux.md +29 -7
  490. package/docs/tui.md +67 -122
  491. package/docs/usage.md +31 -42
  492. package/docs/windows.md +41 -13
  493. package/examples/README.md +16 -2
  494. package/examples/extensions/README.md +0 -1
  495. package/examples/extensions/custom-provider-anthropic/index.ts +18 -12
  496. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  497. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  498. package/examples/extensions/custom-provider-gitlab-duo/index.ts +2 -2
  499. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  500. package/examples/extensions/dynamic-resources/dynamic.json +2 -0
  501. package/examples/extensions/gondolin/package-lock.json +2 -2
  502. package/examples/extensions/gondolin/package.json +1 -1
  503. package/examples/extensions/prompt-customizer.ts +19 -67
  504. package/examples/extensions/sandbox/package-lock.json +2 -2
  505. package/examples/extensions/sandbox/package.json +1 -1
  506. package/examples/extensions/with-deps/package-lock.json +2 -2
  507. package/examples/extensions/with-deps/package.json +1 -1
  508. package/examples/plugins/pi-example-plugin/README.md +38 -0
  509. package/examples/plugins/pi-example-plugin/package.json +10 -0
  510. package/examples/plugins/pi-example-plugin/src/contract.ts +13 -0
  511. package/examples/plugins/pi-example-plugin/src/session.ts +24 -0
  512. package/examples/plugins/pi-example-plugin/src/tui.ts +31 -0
  513. package/examples/rpc-client.ts +35 -0
  514. package/examples/rpc-extension-ui.ts +25 -5
  515. package/examples/sdk/README.md +1 -1
  516. package/npm-shrinkwrap.json +861 -513
  517. package/package.json +27 -18
  518. package/dist/bun/register-bedrock.d.ts +0 -2
  519. package/dist/bun/register-bedrock.d.ts.map +0 -1
  520. package/dist/bun/register-bedrock.js +0 -4
  521. package/dist/bun/register-bedrock.js.map +0 -1
  522. package/dist/cli/experimental/auth.d.ts +0 -16
  523. package/dist/cli/experimental/auth.d.ts.map +0 -1
  524. package/dist/cli/experimental/auth.js +0 -13
  525. package/dist/cli/experimental/auth.js.map +0 -1
  526. package/dist/cli/experimental/cli.d.ts +0 -6
  527. package/dist/cli/experimental/cli.d.ts.map +0 -1
  528. package/dist/cli/experimental/cli.js +0 -5
  529. package/dist/cli/experimental/cli.js.map +0 -1
  530. package/dist/cli/experimental/command-options.d.ts +0 -17
  531. package/dist/cli/experimental/command-options.d.ts.map +0 -1
  532. package/dist/cli/experimental/command-options.js +0 -35
  533. package/dist/cli/experimental/command-options.js.map +0 -1
  534. package/dist/cli/experimental/command.d.ts +0 -63
  535. package/dist/cli/experimental/command.d.ts.map +0 -1
  536. package/dist/cli/experimental/command.js +0 -130
  537. package/dist/cli/experimental/command.js.map +0 -1
  538. package/dist/cli/experimental/commands/client.d.ts +0 -13
  539. package/dist/cli/experimental/commands/client.d.ts.map +0 -1
  540. package/dist/cli/experimental/commands/client.js +0 -25
  541. package/dist/cli/experimental/commands/client.js.map +0 -1
  542. package/dist/cli/experimental/commands/pi.d.ts +0 -15
  543. package/dist/cli/experimental/commands/pi.d.ts.map +0 -1
  544. package/dist/cli/experimental/commands/pi.js +0 -28
  545. package/dist/cli/experimental/commands/pi.js.map +0 -1
  546. package/dist/cli/experimental/commands/server.d.ts +0 -13
  547. package/dist/cli/experimental/commands/server.d.ts.map +0 -1
  548. package/dist/cli/experimental/commands/server.js +0 -25
  549. package/dist/cli/experimental/commands/server.js.map +0 -1
  550. package/dist/cli/experimental/transport-address.d.ts +0 -10
  551. package/dist/cli/experimental/transport-address.d.ts.map +0 -1
  552. package/dist/cli/experimental/transport-address.js +0 -38
  553. package/dist/cli/experimental/transport-address.js.map +0 -1
  554. package/dist/client/index.d.ts +0 -3
  555. package/dist/client/index.d.ts.map +0 -1
  556. package/dist/client/index.js +0 -3
  557. package/dist/client/index.js.map +0 -1
  558. package/dist/client/remote-session.d.ts +0 -53
  559. package/dist/client/remote-session.d.ts.map +0 -1
  560. package/dist/client/remote-session.js +0 -340
  561. package/dist/client/remote-session.js.map +0 -1
  562. package/dist/client/transcript.d.ts +0 -12
  563. package/dist/client/transcript.d.ts.map +0 -1
  564. package/dist/client/transcript.js +0 -98
  565. package/dist/client/transcript.js.map +0 -1
  566. package/dist/modes/interactive/components/message-spine.d.ts +0 -14
  567. package/dist/modes/interactive/components/message-spine.d.ts.map +0 -1
  568. package/dist/modes/interactive/components/message-spine.js +0 -19
  569. package/dist/modes/interactive/components/message-spine.js.map +0 -1
  570. package/dist/utils/clipboard-native.d.ts +0 -11
  571. package/dist/utils/clipboard-native.d.ts.map +0 -1
  572. package/dist/utils/clipboard-native.js +0 -20
  573. package/dist/utils/clipboard-native.js.map +0 -1
@@ -0,0 +1,49 @@
1
+ # How Apex Code Works
2
+
3
+ Apex Code coordinates model requests, tool execution, context assembly, and session storage. A session is Apex Code's record of a conversation, including messages, tool calls and results, model changes, compactions, and other events.
4
+
5
+ Messages and events in a session form a tree. Each path through that tree is a branch. The branch ending at the current entry is the active branch and supplies the history for the next model request.
6
+
7
+ ## Agent loop
8
+
9
+ A submitted message is added to the active branch. Apex Code builds a model request from the system prompt, active branch, available tools, and model settings, then sends it through the selected provider.
10
+
11
+ The provider streams an assistant response, which can contain text and tool calls. Apex Code records the response, executes each tool call, and records the results. That completes one turn. If tool results or queued messages require another model request, Apex Code starts another turn. Otherwise, the run ends.
12
+
13
+ Steering messages enter after the current assistant turn. Follow-up messages enter after the agent has finished its pending work. Aborting stops the current run and returns queued messages to the editor.
14
+
15
+ ## Context
16
+
17
+ The active branch supplies conversation history. Apex Code converts its session entries into model-compatible user, assistant, and tool-result messages.
18
+
19
+ Apex Code builds the system prompt from its base instructions and discovered context files. The request also carries tool definitions and skill descriptions.
20
+
21
+ Full skill instructions are loaded on demand. Extensions can add instructions or transform context.
22
+
23
+ Prompt templates expand editor input before it becomes a user message. Selected files, images, pasted text, and shell output can become message content.
24
+
25
+ ## Sessions
26
+
27
+ Persistent sessions are JSONL files. Each tree entry has an ID and refers to its parent. The current entry identifies the active branch.
28
+
29
+ Continuing from an earlier entry creates another branch in the same file. Forking and cloning copy selected history into a new session file.
30
+
31
+ Model context is reconstructed from the active branch. Compaction inserts a summary entry that replaces older messages in subsequent model requests. The original entries remain in the session tree.
32
+
33
+ ## Interfaces
34
+
35
+ Interactive mode renders session and agent events in the terminal. Print mode runs a prompt and writes the final response. JSON mode writes agent events as JSONL.
36
+
37
+ RPC mode accepts JSONL commands on stdin and writes responses and events to stdout. The TypeScript SDK creates and controls agent sessions in process.
38
+
39
+ All interfaces use the same agent and session mechanisms.
40
+
41
+ ## Extensions and resources
42
+
43
+ Extensions are TypeScript modules loaded into the Apex Code process. Their factory functions register tools, commands, shortcuts, providers, event handlers, renderers, and terminal UI.
44
+
45
+ Skills provide on-demand instructions and supporting files. Prompt templates provide reusable message text. Themes provide terminal colors. Apex Code packages distribute these resources through npm or git.
46
+
47
+ ## Trust and permissions
48
+
49
+ Apex Code resolves project trust before loading project settings and resources. After the trust decision and project-resource loading, Apex Code loads context files. Enabled tools use the operating-system permissions of the Apex Code process. Extensions execute inside that process.
Binary file
package/docs/index.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Apex Code is a minimal terminal coding harness. It is designed to stay small at the core while being extended through TypeScript extensions, skills, prompt templates, themes, and Apex Code packages.
4
4
 
5
- ## Quick start
5
+ Use Apex Code for software development, research notes, writing projects, data files, or hobby work. You can use Apex Code as is, prompt it to adapt itself to your workflow, or build other applications powered by Apex Code using the SDK.
6
6
 
7
7
  Install Apex Code with npm, pnpm, Yarn, or Bun — all resolve it from the same npm registry:
8
8
 
@@ -14,7 +14,7 @@ npm install -g --ignore-scripts apex-code
14
14
 
15
15
  To uninstall, use the package manager that installed it: `npm uninstall -g apex-code`, `pnpm remove -g apex-code`, `yarn global remove apex-code`, or `bun uninstall -g apex-code`.
16
16
 
17
- Then run it in a project directory:
17
+ ## Find reference and setup information
18
18
 
19
19
  ```bash
20
20
  apex-code
@@ -22,7 +22,7 @@ apex-code
22
22
 
23
23
  Authenticate with `/login` for subscription providers, or set an API key such as `ANTHROPIC_API_KEY` before starting Apex Code.
24
24
 
25
- For the full first-run flow, see [Quickstart](quickstart.md).
25
+ ## Work safely
26
26
 
27
27
  ## Start here
28
28
 
package/docs/json.md CHANGED
@@ -1,4 +1,6 @@
1
- # JSON Event Stream Mode
1
+ # JSON Event Stream
2
+
3
+ JSON mode emits structured progress for one invocation:
2
4
 
3
5
  ```bash
4
6
  apex-code --mode json "Your prompt"
@@ -6,7 +8,7 @@ apex-code --mode json "Your prompt"
6
8
 
7
9
  Outputs all session events as JSON lines to stdout. Useful for integrating Apex Code into other tools or custom UIs.
8
10
 
9
- ## Event Types
11
+ This page is the canonical reference for events shared by JSON and RPC mode. Message values use the [shared message types](message-types.md).
10
12
 
11
13
  Wire events use `JsonAgentSessionEvent`. It matches
12
14
  [`AgentSessionEvent`](https://github.com/Fchery87/apex-code/blob/main/packages/coding-agent/src/core/agent-session.ts)
@@ -53,7 +55,7 @@ type AgentEvent =
53
55
 
54
56
  ## Message Types
55
57
 
56
- Base messages from [`packages/ai/src/types.ts`](https://github.com/earendil-works/pi-mono/blob/main/packages/ai/src/types.ts#L134):
58
+ Base messages from [`packages/ai/src/types.ts`](https://github.com/earendil-works/pi/blob/main/packages/ai/src/types.ts#L134):
57
59
  - `UserMessage` (line 134)
58
60
  - `AssistantMessage` (line 140)
59
61
  - `ToolResultMessage` (line 152)
@@ -93,6 +95,44 @@ fields. `message_end` contains the final authoritative message.
93
95
 
94
96
  ## Example
95
97
 
98
+ Print completed messages from a one-shot run:
99
+
96
100
  ```bash
97
101
  apex-code --mode json "List files" 2>/dev/null | jq -c 'select(.type == "message_end")'
98
102
  ```
103
+
104
+ ## Result envelope and exit codes
105
+
106
+ A `--mode json` run that reaches a normal terminal outcome ends with a `result` envelope.
107
+ It is written by print mode rather than emitted by the session, so it is not an
108
+ `AgentSessionEvent` and does not appear in `--mode text`. A run killed by `SIGTERM` or
109
+ `SIGHUP` exits from the signal handler before the envelope is written, so a consumer
110
+ treats a missing envelope as an incomplete run rather than as a success.
111
+
112
+ ```json
113
+ {"type":"result","status":"completed"}
114
+ ```
115
+
116
+ `status` is the run's terminal outcome, using the same vocabulary as the agent loop's
117
+ `AgentStopReason`:
118
+
119
+ | `status` | Meaning | Exit code |
120
+ | --- | --- | --- |
121
+ | `completed` | The run finished normally. | `0` |
122
+ | `error` | The run failed, for example a provider error. | `1` |
123
+ | `aborted` | The run was cancelled. | `1` |
124
+ | `budget-exhausted` | A `runBudget` limit stopped the run. | `1` |
125
+
126
+ Exit codes are `0` for `completed` and `1` for every other status. A caller that needs to
127
+ distinguish the causes reads `status` rather than the exit code, so new statuses can be
128
+ added without changing what an existing script sees. Signals are unchanged: `SIGTERM` exits
129
+ `143` and `SIGHUP` exits `129`.
130
+
131
+ Before this envelope existed, a failed `--mode json` run exited `0`, because the exit-code
132
+ decision was reachable only from `--mode text`. Scripts written against that behavior treated
133
+ every run as a success.
134
+
135
+ ```bash
136
+ apex-code --mode json --permission-mode plan --print "Summarize the repository" \
137
+ | jq -r 'select(.type == "result") | .status'
138
+ ```
@@ -1,16 +1,35 @@
1
- # Keybindings
1
+ # Keybindings Reference
2
2
 
3
3
  All keyboard shortcuts can be customized via `~/.apex-code/agent/keybindings.json`. Each action can be bound to one or more keys.
4
4
 
5
5
  The config file uses the same namespaced keybinding ids that Apex Code uses internally and that extension authors use in `keyHint()` and injected `keybindings` managers.
6
6
 
7
- Older configs using pre-namespaced ids such as `cursorUp` or `expandTools` are migrated automatically to the namespaced ids on startup.
7
+ ## Assign keybindings
8
8
 
9
9
  After editing `keybindings.json`, run `/reload` in Apex Code to apply the changes without restarting the session.
10
10
 
11
- ## Key Format
11
+ Map each action identifier to one key or a list of keys:
12
12
 
13
- `modifier+key` where modifiers are `ctrl`, `shift`, `alt`, `super` (combinable) and keys are:
13
+ ```json
14
+ {
15
+ "app.session.new": "ctrl+shift+n",
16
+ "app.session.tree": ["ctrl+shift+t", "alt+shift+t"]
17
+ }
18
+ ```
19
+
20
+ A configured value replaces the default for that action. Use an empty list to disable an action's keybindings:
21
+
22
+ ```json
23
+ {
24
+ "tui.altScreen.pageUp": []
25
+ }
26
+ ```
27
+
28
+ After editing the file, run `/reload` to apply the changes to the active session.
29
+
30
+ ## Key syntax
31
+
32
+ Write a key as `modifier+key`. Modifiers are `ctrl`, `shift`, `alt`, and `super`. You can combine modifiers. Valid keys are:
14
33
 
15
34
  - **Letters:** `a-z`
16
35
  - **Digits:** `0-9`
@@ -18,20 +37,22 @@ After editing `keybindings.json`, run `/reload` in Apex Code to apply the change
18
37
  - **Function:** `f1`-`f12`
19
38
  - **Symbols:** `` ` ``, `-`, `=`, `[`, `]`, `\`, `;`, `'`, `,`, `.`, `/`, `!`, `@`, `#`, `$`, `%`, `^`, `&`, `*`, `(`, `)`, `_`, `+`, `|`, `~`, `{`, `}`, `:`, `<`, `>`, `?`
20
39
 
21
- Modifier combinations: `ctrl+shift+x`, `alt+ctrl+x`, `ctrl+shift+alt+x`, `super+k`, `ctrl+super+k`, `ctrl+1`, etc.
40
+ Examples: `ctrl+shift+x`, `alt+ctrl+x`, `ctrl+shift+alt+x`, `super+k`, `ctrl+super+k`, and `ctrl+1`.
22
41
 
23
42
  `super` bindings require a terminal that reports the modifier separately, typically through the Kitty keyboard protocol. They may not work in terminals without that support.
24
43
 
25
- ## All Actions
44
+ ## Actions
26
45
 
27
- ### TUI Editor Cursor Movement
46
+ ### Terminal UI
47
+
48
+ #### Cursor movement
28
49
 
29
50
  | Keybinding id | Default | Description |
30
- |--------|---------|-------------|
51
+ |---|---|---|
31
52
  | `tui.editor.cursorUp` | `up` | Move cursor up, browsing older history at the top |
32
53
  | `tui.editor.cursorDown` | `down` | Move cursor down, browsing newer history at the bottom |
33
- | `tui.editor.historyPrevious` | *(none)* | Select the previous prompt history entry |
34
- | `tui.editor.historyNext` | *(none)* | Select the next prompt history entry |
54
+ | `tui.editor.historyPrevious` | None | Select the previous prompt history entry |
55
+ | `tui.editor.historyNext` | None | Select the next prompt history entry |
35
56
  | `tui.editor.cursorLeft` | `left`, `ctrl+b` | Move cursor left |
36
57
  | `tui.editor.cursorRight` | `right`, `ctrl+f` | Move cursor right |
37
58
  | `tui.editor.cursorWordLeft` | `alt+left`, `ctrl+left`, `alt+b` | Move cursor word left |
@@ -43,39 +64,29 @@ Modifier combinations: `ctrl+shift+x`, `alt+ctrl+x`, `ctrl+shift+alt+x`, `super+
43
64
  | `tui.editor.pageUp` | `pageUp`, `ctrl+pageUp` | Scroll up by page |
44
65
  | `tui.editor.pageDown` | `pageDown`, `ctrl+pageDown` | Scroll down by page |
45
66
 
46
- The dedicated history actions always change history entries, regardless of the cursor position in a multiline prompt. Explicit history bindings take precedence over application actions while the main editor is focused, so binding `tui.editor.historyPrevious` to `ctrl+p` overrides model cycling in that context without changing `Ctrl+P` in selectors.
67
+ The dedicated history actions browse prompt history regardless of cursor position and take precedence over application actions using the same key.
47
68
 
48
- ### TUI Editor Deletion
69
+ #### Text editing
49
70
 
50
71
  | Keybinding id | Default | Description |
51
- |--------|---------|-------------|
72
+ |---|---|---|
52
73
  | `tui.editor.deleteCharBackward` | `backspace` | Delete character backward |
53
74
  | `tui.editor.deleteCharForward` | `delete`, `ctrl+d` | Delete character forward |
54
75
  | `tui.editor.deleteWordBackward` | `ctrl+w`, `alt+backspace` | Delete word backward |
55
76
  | `tui.editor.deleteWordForward` | `alt+d`, `alt+delete` | Delete word forward |
56
77
  | `tui.editor.deleteToLineStart` | `ctrl+u` | Delete to line start |
57
78
  | `tui.editor.deleteToLineEnd` | `ctrl+k` | Delete to line end |
58
-
59
- ### TUI Input
60
-
61
- | Keybinding id | Default | Description |
62
- |--------|---------|-------------|
63
- | `tui.input.newLine` | `shift+enter`, `ctrl+j` | Insert new line |
64
- | `tui.input.submit` | `enter` | Submit input |
65
- | `tui.input.tab` | `tab` | Tab / autocomplete |
66
-
67
- ### TUI Kill Ring
68
-
69
- | Keybinding id | Default | Description |
70
- |--------|---------|-------------|
71
79
  | `tui.editor.yank` | `ctrl+y` | Paste most recently deleted text |
72
80
  | `tui.editor.yankPop` | `alt+y` | Cycle through deleted text after yank |
73
81
  | `tui.editor.undo` | `ctrl+-` (`ctrl+z` on Windows; `alt+z` on WSL) | Undo last edit |
74
82
 
75
- ### TUI Clipboard and Selection
83
+ #### Input and selection
76
84
 
77
85
  | Keybinding id | Default | Description |
78
- |--------|---------|-------------|
86
+ |---|---|---|
87
+ | `tui.input.newLine` | `shift+enter`, `ctrl+j` | Insert new line |
88
+ | `tui.input.submit` | `enter` | Submit input |
89
+ | `tui.input.tab` | `tab` | Tab or autocomplete |
79
90
  | `tui.input.copy` | `ctrl+c` | Copy selection |
80
91
  | `tui.select.up` | `up` | Move selection up |
81
92
  | `tui.select.down` | `down` | Move selection down |
@@ -84,29 +95,18 @@ The dedicated history actions always change history entries, regardless of the c
84
95
  | `tui.select.confirm` | `enter` | Confirm selection |
85
96
  | `tui.select.cancel` | `escape`, `ctrl+c` | Cancel selection |
86
97
 
87
- ### TUI Fullscreen Viewport
88
-
89
- These actions apply when interactive mode uses `--tui-mode fullscreen` and target the primary transcript scroll region. Two-finger trackpad and mouse-wheel input scroll the region under the pointer, falling back to the transcript over the fixed editor/status/footer dock. Clicking an OSC 8 hyperlink opens it in the default handler. Dragging with the primary mouse button selects text and copies it to the clipboard; holding at the transcript's top or bottom edge auto-scrolls into off-screen content. See [Terminal setup](terminal-setup.md) for terminal-specific mouse and trackpad behavior.
98
+ #### Fullscreen
90
99
 
91
- Fullscreen transcript bindings take precedence over editor bindings. The default unmodified navigation keys therefore control the transcript in fullscreen mode, while their `ctrl` variants continue to control the editor. Outside fullscreen mode, both variants control the editor.
92
-
93
- | Key | Default mode | Fullscreen mode |
94
- |-----|--------------|-----------------|
95
- | `home`, `end` | Editor | Transcript |
96
- | `ctrl+home`, `ctrl+end` | Editor | Editor |
97
- | `pageUp`, `pageDown` | Editor | Transcript |
98
- | `ctrl+pageUp`, `ctrl+pageDown` | Editor | Editor |
99
-
100
- This routing remains configurable through the ordinary action bindings. For example, `"tui.altScreen.pageUp": "ctrl+pageUp"` makes `pageUp` control the editor and `ctrl+pageUp` control the transcript in fullscreen mode. Bind `tui.altScreen.halfPageUp` and `tui.altScreen.halfPageDown` for half-page steps, or bind `tui.altScreen.lineUp` and `tui.altScreen.lineDown` for single-line steps. Setting `"tui.altScreen.pageUp": []` disables that transcript shortcut entirely. User bindings replace the defaults for that action.
100
+ In fullscreen mode, these actions control the transcript and take precedence over editor actions using the same key.
101
101
 
102
102
  | Keybinding id | Default | Description |
103
- |--------|---------|-------------|
103
+ |---|---|---|
104
104
  | `tui.altScreen.pageUp` | `pageUp` | Scroll the transcript up by one page |
105
105
  | `tui.altScreen.pageDown` | `pageDown` | Scroll the transcript down by one page |
106
- | `tui.altScreen.halfPageUp` | *(none)* | Scroll the transcript up by half a page |
107
- | `tui.altScreen.halfPageDown` | *(none)* | Scroll the transcript down by half a page |
108
- | `tui.altScreen.lineUp` | *(none)* | Scroll the transcript up by one line |
109
- | `tui.altScreen.lineDown` | *(none)* | Scroll the transcript down by one line |
106
+ | `tui.altScreen.halfPageUp` | None | Scroll the transcript up by half a page |
107
+ | `tui.altScreen.halfPageDown` | None | Scroll the transcript down by half a page |
108
+ | `tui.altScreen.lineUp` | None | Scroll the transcript up by one line |
109
+ | `tui.altScreen.lineDown` | None | Scroll the transcript down by one line |
110
110
  | `tui.altScreen.previousPrompt` | `ctrl+shift+up`, `ctrl+up` (`ctrl+up` only on Windows and WSL) | Jump to the previous marked message |
111
111
  | `tui.altScreen.nextPrompt` | `ctrl+shift+down`, `ctrl+down` (`ctrl+down` only on Windows and WSL) | Jump to the next marked message |
112
112
  | `tui.altScreen.search` | `ctrl+shift+f` (`ctrl+f` on Windows and WSL) | Search the rendered transcript |
@@ -123,18 +123,20 @@ This routing remains configurable through the ordinary action bindings. For exam
123
123
  | `app.interrupt` | `escape` | Cancel / abort |
124
124
  | `app.clear` | `ctrl+c` | Clear editor (first) / exit (second) |
125
125
  | `app.exit` | `ctrl+d` | Exit (when editor empty) |
126
- | `app.suspend` | `ctrl+z` (none on Windows) | Suspend to background |
126
+ | `app.suspend` | `ctrl+z` (None on Windows) | Suspend to background |
127
127
  | `app.editor.external` | `ctrl+g` | Open in external editor (`externalEditor`, `$VISUAL`, `$EDITOR`, Notepad on Windows, or `nano` elsewhere) |
128
128
  | `app.clipboard.pasteImage` | `ctrl+v` (`alt+v` on Windows and WSL) | Paste image or text from clipboard |
129
129
 
130
+ On native Windows, `app.suspend` has no default because Windows terminals do not support Unix job control. If you assign it manually, Pi shows a status message instead of suspending. WSL uses the normal `ctrl+z` and `fg` behavior.
131
+
130
132
  ### Sessions
131
133
 
132
134
  | Keybinding id | Default | Description |
133
135
  |--------|---------|-------------|
134
- | `app.session.new` | *(none)* | Start a new session (`/new`) |
135
- | `app.session.tree` | *(none)* | Open session tree navigator (`/tree`) |
136
- | `app.session.fork` | *(none)* | Fork current session (`/fork`) |
137
- | `app.session.resume` | *(none)* | Open session resume picker (`/resume`) |
136
+ | `app.session.new` | None | Start a new session (`/new`) |
137
+ | `app.session.tree` | None | Open session tree navigator (`/tree`) |
138
+ | `app.session.fork` | None | Fork current session (`/fork`) |
139
+ | `app.session.resume` | None | Open session resume picker (`/resume`) |
138
140
  | `app.session.togglePath` | `ctrl+p` | Toggle path display |
139
141
  | `app.session.toggleSort` | `ctrl+s` | Toggle sort mode |
140
142
  | `app.session.toggleNamedFilter` | `ctrl+n` | Toggle named-only filter |
@@ -149,15 +151,17 @@ This routing remains configurable through the ordinary action bindings. For exam
149
151
  | `app.model.select` | `ctrl+l` | Open model selector |
150
152
  | `app.model.cycleForward` | `ctrl+p` | Cycle to next model |
151
153
  | `app.model.cycleBackward` | `shift+ctrl+p` (`alt+p` on Windows and WSL) | Cycle to previous model |
154
+ | `app.models.save` | `ctrl+s` | Save the selected default model or scoped model configuration to settings |
152
155
  | `app.thinking.cycle` | `shift+tab` | Cycle thinking level |
156
+ | `app.thinking.save` | `ctrl+s` | Save current thinking level to settings |
153
157
  | `app.thinking.toggle` | `ctrl+t` | Collapse or expand thinking blocks |
154
158
 
155
159
  ### Display and Message Queue
156
160
 
157
161
  | Keybinding id | Default | Description |
158
162
  |--------|---------|-------------|
159
- | `app.tools.expand` | `ctrl+o` | Collapse or expand tool output |
160
- | `app.message.copy` | `ctrl+x` | Copy the selected message in `/tree`; otherwise copy the last assistant message, or the active fullscreen text selection when `fullscreenCopyOnSelect` is disabled |
163
+ | `app.tools.expand` | `ctrl+o` | Cycle conversation detail: overview (everything collapsed), details (diffs and thinking if enabled in settings), all (full tool output and thinking) |
164
+ | `app.message.copy` | `ctrl+x` | Copy the selected message in `/tree`; in fullscreen mode, copy the active selection when `fullscreenCopyOnSelect` is `false`; otherwise copy the last assistant message |
161
165
  | `app.message.followUp` | `alt+enter` (`ctrl+q` on Windows and WSL) | Queue follow-up message |
162
166
  | `app.message.dequeue` | `alt+up` (`alt+q` on Windows and WSL) | Restore queued messages to editor |
163
167
 
@@ -183,7 +187,6 @@ Used inside the scoped models selector (opened via `/scoped-models`).
183
187
 
184
188
  | Keybinding id | Default | Description |
185
189
  |--------|---------|-------------|
186
- | `app.models.save` | `ctrl+s` | Save current model selection to settings |
187
190
  | `app.models.enableAll` | `ctrl+a` | Enable all models (or all matching the current search) |
188
191
  | `app.models.clearAll` | `ctrl+x` | Clear all models (or all matching the current search) |
189
192
  | `app.models.toggleProvider` | `ctrl+p` | Toggle all models for the current provider |
package/docs/llama-cpp.md CHANGED
@@ -1,4 +1,4 @@
1
- # llama.cpp
1
+ # Local Models with llama.cpp
2
2
 
3
3
  Apex Code supports the [llama.cpp](https://github.com/ggml-org/llama.cpp) router server. The router discovers multiple GGUF models and loads or unloads them on demand.
4
4
 
@@ -96,6 +96,6 @@ curl http://127.0.0.1:8080/models
96
96
  ```
97
97
 
98
98
  - **No models in `/llama`:** Check `--models-dir`, the directory layout, and restart the router.
99
- - **Model missing from `/model`:** Load it with `/llama` first.
99
+ - **Model missing from `/model` with `--no-models-autoload`:** Load it with `/llama` first.
100
100
  - **Load fails or uses too much memory:** Lower `-c` or unload another model.
101
101
  - **Server is not in router mode:** Start it without `--model`, `-m`, or `-hf`.
@@ -0,0 +1,261 @@
1
+ # Message Types
2
+
3
+ Apex Code uses `AgentMessage` values in SDK state, lifecycle events, RPC responses, and persisted session message entries. This page defines those shared messages and their content blocks.
4
+
5
+ Message timestamps are Unix timestamps in milliseconds. They are different from the ISO 8601 timestamps on [session entries](session-format.md#entry-base).
6
+
7
+ Source definitions:
8
+
9
+ - [`packages/ai/src/types.ts`](https://github.com/Fchery87/apex-code/blob/main/packages/ai/src/types.ts) defines provider-facing messages and content blocks.
10
+ - [`packages/agent/src/types.ts`](https://github.com/Fchery87/apex-code/blob/main/packages/agent/src/types.ts) defines the extensible `AgentMessage` union.
11
+ - [`packages/coding-agent/src/core/messages.ts`](https://github.com/Fchery87/apex-code/blob/main/packages/coding-agent/src/core/messages.ts) adds coding-agent message roles.
12
+
13
+ ## Content blocks
14
+
15
+ ### TextContent
16
+
17
+ ```typescript
18
+ interface TextContent {
19
+ type: "text";
20
+ text: string;
21
+ textSignature?: string;
22
+ }
23
+ ```
24
+
25
+ `textSignature` contains provider-specific message metadata. Treat it as opaque.
26
+
27
+ ### ImageContent
28
+
29
+ ```typescript
30
+ interface ImageContent {
31
+ type: "image";
32
+ data: string;
33
+ mimeType: string;
34
+ }
35
+ ```
36
+
37
+ `data` is base64-encoded image data. `mimeType` identifies its media type, such as `image/png` or `image/jpeg`.
38
+
39
+ ### ThinkingContent
40
+
41
+ ```typescript
42
+ interface ThinkingContent {
43
+ type: "thinking";
44
+ thinking: string;
45
+ thinkingSignature?: string;
46
+ redacted?: boolean;
47
+ }
48
+ ```
49
+
50
+ Thinking signatures contain provider-specific replay data. Treat them as opaque. A redacted block can have no visible thinking text while retaining an encrypted payload in `thinkingSignature`.
51
+
52
+ ### ToolCall
53
+
54
+ ```typescript
55
+ interface ToolCall {
56
+ type: "toolCall";
57
+ id: string;
58
+ name: string;
59
+ arguments: Record<string, any>;
60
+ thoughtSignature?: string;
61
+ namespace?: string;
62
+ }
63
+ ```
64
+
65
+ `thoughtSignature` is provider-specific. `namespace` identifies an OpenAI Responses namespace for dynamically loaded or namespaced tools.
66
+
67
+ ## Usage
68
+
69
+ Assistant messages always contain usage. Tool results can contain usage when the tool performed nested model work.
70
+
71
+ ```typescript
72
+ interface Usage {
73
+ input: number;
74
+ output: number;
75
+ cacheRead: number;
76
+ cacheWrite: number;
77
+ cacheWrite1h?: number;
78
+ reasoning?: number;
79
+ totalTokens: number;
80
+ cost: {
81
+ input: number;
82
+ output: number;
83
+ cacheRead: number;
84
+ cacheWrite: number;
85
+ total: number;
86
+ };
87
+ }
88
+ ```
89
+
90
+ When present, `reasoning` is already included in `output`; do not add it again. `cacheWrite1h` is the subset of `cacheWrite` written with one-hour retention.
91
+
92
+ ## Base messages
93
+
94
+ ### SystemMessage
95
+
96
+ ```typescript
97
+ interface SystemMessage {
98
+ role: "system";
99
+ content: string | TextContent[];
100
+ sections?: Record<string, string | null>;
101
+ toolsAdded?: Tool[];
102
+ toolsRemoved?: ToolReference[];
103
+ replace?: boolean;
104
+ timestamp: number;
105
+ }
106
+ ```
107
+
108
+ The leading system message declares the initial prompt and tools. Later system messages can append instructions, replace or remove named prompt sections, and add or remove tools. Replaying them in order yields the current state. A message with `replace: true` discards the earlier state and establishes a complete new baseline.
109
+
110
+ ### UserMessage
111
+
112
+ ```typescript
113
+ interface UserMessage {
114
+ role: "user";
115
+ content: string | (TextContent | ImageContent)[];
116
+ timestamp: number;
117
+ }
118
+ ```
119
+
120
+ ### AssistantMessage
121
+
122
+ ```typescript
123
+ interface AssistantMessage {
124
+ role: "assistant";
125
+ content: (TextContent | ThinkingContent | ToolCall)[];
126
+ api: string;
127
+ provider: string;
128
+ model: string;
129
+ responseModel?: string;
130
+ responseId?: string;
131
+ providerThinkingLevel?: string;
132
+ diagnostics?: AssistantMessageDiagnostic[];
133
+ usage: Usage;
134
+ stopReason: "pending" | "stop" | "length" | "toolUse" | "error" | "aborted" | "deferred";
135
+ deferred?: DeferredHandle;
136
+ errorMessage?: string;
137
+ rawStopReason?: string;
138
+ endTurn?: boolean;
139
+ timestamp: number;
140
+ }
141
+ ```
142
+
143
+ `responseModel` records a concrete provider response model when it differs from the requested model. `responseId`, `providerThinkingLevel`, `diagnostics`, and `rawStopReason` preserve provider or runtime details.
144
+
145
+ `"pending"` is used for a partial assistant message while it streams. The completed message in `message_end` has a terminal stop reason, and Apex Code does not persist `"pending"` assistant messages in session JSONL.
146
+
147
+ A `"deferred"` response has a `DeferredHandle` with the provider data needed to retrieve it:
148
+
149
+ ```typescript
150
+ interface DeferredHandle {
151
+ provider: string;
152
+ modelId: string;
153
+ api: string;
154
+ id: string;
155
+ expiresAt?: number;
156
+ pollAfterMs?: number;
157
+ data?: JsonValue;
158
+ }
159
+ ```
160
+
161
+ ### ToolResultMessage
162
+
163
+ ```typescript
164
+ interface ToolResultMessage<TDetails = any> {
165
+ role: "toolResult";
166
+ toolCallId: string;
167
+ toolName: string;
168
+ content: (TextContent | ImageContent)[];
169
+ details?: TDetails;
170
+ usage?: Usage;
171
+ isError: boolean;
172
+ timestamp: number;
173
+ }
174
+ ```
175
+
176
+ `details` is tool-specific. Optional `usage` reports nested model work performed by the tool and contributes to full-session statistics, but it is not part of the main model-call usage.
177
+
178
+ ## Coding-agent messages
179
+
180
+ The coding-agent package extends `AgentMessage` with four roles.
181
+
182
+ ### BashExecutionMessage
183
+
184
+ Created by direct shell commands, including the RPC [`bash`](rpc-commands.md#bash) command. It is not an LLM tool result.
185
+
186
+ ```typescript
187
+ interface BashExecutionMessage {
188
+ role: "bashExecution";
189
+ command: string;
190
+ output: string;
191
+ exitCode: number | undefined;
192
+ cancelled: boolean;
193
+ truncated: boolean;
194
+ fullOutputPath?: string;
195
+ excludeFromContext?: boolean;
196
+ timestamp: number;
197
+ }
198
+ ```
199
+
200
+ Unless `excludeFromContext` is true, Apex Code converts this message to user-role text before the next model request.
201
+
202
+ ### CustomMessage
203
+
204
+ Created when an extension sends a context message.
205
+
206
+ ```typescript
207
+ interface CustomMessage<T = unknown> {
208
+ role: "custom";
209
+ customType: string;
210
+ content: string | (TextContent | ImageContent)[];
211
+ display: boolean;
212
+ details?: T;
213
+ timestamp: number;
214
+ }
215
+ ```
216
+
217
+ Apex Code converts its content to a user message for model requests. `display` controls terminal rendering; `details` is not sent to the model.
218
+
219
+ ### BranchSummaryMessage
220
+
221
+ ```typescript
222
+ interface BranchSummaryMessage {
223
+ role: "branchSummary";
224
+ summary: string;
225
+ fromId: string | null;
226
+ timestamp: number;
227
+ }
228
+ ```
229
+
230
+ Apex Code creates this context message from a persisted `branch_summary` entry.
231
+
232
+ ### CompactionSummaryMessage
233
+
234
+ ```typescript
235
+ interface CompactionSummaryMessage {
236
+ role: "compactionSummary";
237
+ summary: string;
238
+ tokensBefore: number;
239
+ timestamp: number;
240
+ }
241
+ ```
242
+
243
+ Apex Code creates this context message from a persisted `compaction` entry.
244
+
245
+ ## AgentMessage union
246
+
247
+ In the coding agent, the union is equivalent to:
248
+
249
+ ```typescript
250
+ type AgentMessage =
251
+ | SystemMessage
252
+ | UserMessage
253
+ | AssistantMessage
254
+ | ToolResultMessage
255
+ | BashExecutionMessage
256
+ | CustomMessage
257
+ | BranchSummaryMessage
258
+ | CompactionSummaryMessage;
259
+ ```
260
+
261
+ At the lower-level agent package, `AgentMessage` is `Message | CustomAgentMessages[keyof CustomAgentMessages]`. Applications can add roles through TypeScript declaration merging, so consumers should tolerate unknown custom roles when they accept messages from an augmented host.