openvibe 0.57.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 (636) hide show
  1. package/CHANGELOG.md +3041 -0
  2. package/README.md +569 -0
  3. package/dist/cli/args.d.ts +44 -0
  4. package/dist/cli/args.d.ts.map +1 -0
  5. package/dist/cli/args.js +272 -0
  6. package/dist/cli/args.js.map +1 -0
  7. package/dist/cli/config-selector.d.ts +10 -0
  8. package/dist/cli/config-selector.d.ts.map +1 -0
  9. package/dist/cli/config-selector.js +26 -0
  10. package/dist/cli/config-selector.js.map +1 -0
  11. package/dist/cli/file-processor.d.ts +10 -0
  12. package/dist/cli/file-processor.d.ts.map +1 -0
  13. package/dist/cli/file-processor.js +68 -0
  14. package/dist/cli/file-processor.js.map +1 -0
  15. package/dist/cli/list-models.d.ts +3 -0
  16. package/dist/cli/list-models.d.ts.map +1 -0
  17. package/dist/cli/list-models.js +30 -0
  18. package/dist/cli/list-models.js.map +1 -0
  19. package/dist/cli/session-picker.d.ts +5 -0
  20. package/dist/cli/session-picker.d.ts.map +1 -0
  21. package/dist/cli/session-picker.js +30 -0
  22. package/dist/cli/session-picker.js.map +1 -0
  23. package/dist/cli.d.ts +3 -0
  24. package/dist/cli.d.ts.map +1 -0
  25. package/dist/cli.js +31 -0
  26. package/dist/cli.js.map +1 -0
  27. package/dist/config.d.ts +29 -0
  28. package/dist/config.d.ts.map +1 -0
  29. package/dist/config.js +145 -0
  30. package/dist/config.js.map +1 -0
  31. package/dist/core/accelerated-client.d.ts +42 -0
  32. package/dist/core/accelerated-client.d.ts.map +1 -0
  33. package/dist/core/accelerated-client.js +97 -0
  34. package/dist/core/accelerated-client.js.map +1 -0
  35. package/dist/core/accelerated-stream.d.ts +41 -0
  36. package/dist/core/accelerated-stream.d.ts.map +1 -0
  37. package/dist/core/accelerated-stream.js +133 -0
  38. package/dist/core/accelerated-stream.js.map +1 -0
  39. package/dist/core/agent-session.d.ts +566 -0
  40. package/dist/core/agent-session.d.ts.map +1 -0
  41. package/dist/core/agent-session.js +2361 -0
  42. package/dist/core/agent-session.js.map +1 -0
  43. package/dist/core/api-concurrency.d.ts +37 -0
  44. package/dist/core/api-concurrency.d.ts.map +1 -0
  45. package/dist/core/api-concurrency.js +179 -0
  46. package/dist/core/api-concurrency.js.map +1 -0
  47. package/dist/core/auth-storage.d.ts +66 -0
  48. package/dist/core/auth-storage.d.ts.map +1 -0
  49. package/dist/core/auth-storage.js +336 -0
  50. package/dist/core/auth-storage.js.map +1 -0
  51. package/dist/core/bash-executor.d.ts +15 -0
  52. package/dist/core/bash-executor.d.ts.map +1 -0
  53. package/dist/core/bash-executor.js +166 -0
  54. package/dist/core/bash-executor.js.map +1 -0
  55. package/dist/core/branded-ai.d.ts +17 -0
  56. package/dist/core/branded-ai.d.ts.map +1 -0
  57. package/dist/core/branded-ai.js +123 -0
  58. package/dist/core/branded-ai.js.map +1 -0
  59. package/dist/core/compaction/branch-summarization.d.ts +37 -0
  60. package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  61. package/dist/core/compaction/branch-summarization.js +158 -0
  62. package/dist/core/compaction/branch-summarization.js.map +1 -0
  63. package/dist/core/compaction/compaction.d.ts +56 -0
  64. package/dist/core/compaction/compaction.d.ts.map +1 -0
  65. package/dist/core/compaction/compaction.js +501 -0
  66. package/dist/core/compaction/compaction.js.map +1 -0
  67. package/dist/core/compaction/index.d.ts +4 -0
  68. package/dist/core/compaction/index.d.ts.map +1 -0
  69. package/dist/core/compaction/index.js +4 -0
  70. package/dist/core/compaction/index.js.map +1 -0
  71. package/dist/core/compaction/utils.d.ts +17 -0
  72. package/dist/core/compaction/utils.d.ts.map +1 -0
  73. package/dist/core/compaction/utils.js +120 -0
  74. package/dist/core/compaction/utils.js.map +1 -0
  75. package/dist/core/defaults.d.ts +3 -0
  76. package/dist/core/defaults.d.ts.map +1 -0
  77. package/dist/core/defaults.js +2 -0
  78. package/dist/core/defaults.js.map +1 -0
  79. package/dist/core/diagnostics.d.ts +15 -0
  80. package/dist/core/diagnostics.d.ts.map +1 -0
  81. package/dist/core/diagnostics.js +2 -0
  82. package/dist/core/diagnostics.js.map +1 -0
  83. package/dist/core/event-bus.d.ts +9 -0
  84. package/dist/core/event-bus.d.ts.map +1 -0
  85. package/dist/core/event-bus.js +25 -0
  86. package/dist/core/event-bus.js.map +1 -0
  87. package/dist/core/exec.d.ts +13 -0
  88. package/dist/core/exec.d.ts.map +1 -0
  89. package/dist/core/exec.js +61 -0
  90. package/dist/core/exec.js.map +1 -0
  91. package/dist/core/export-html/ansi-to-html.d.ts +3 -0
  92. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  93. package/dist/core/export-html/ansi-to-html.js +193 -0
  94. package/dist/core/export-html/ansi-to-html.js.map +1 -0
  95. package/dist/core/export-html/index.d.ts +22 -0
  96. package/dist/core/export-html/index.d.ts.map +1 -0
  97. package/dist/core/export-html/index.js +193 -0
  98. package/dist/core/export-html/index.js.map +1 -0
  99. package/dist/core/export-html/template.css +971 -0
  100. package/dist/core/export-html/template.html +54 -0
  101. package/dist/core/export-html/template.js +1583 -0
  102. package/dist/core/export-html/tool-renderer.d.ts +21 -0
  103. package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  104. package/dist/core/export-html/tool-renderer.js +51 -0
  105. package/dist/core/export-html/tool-renderer.js.map +1 -0
  106. package/dist/core/export-html/vendor/highlight.min.js +1213 -0
  107. package/dist/core/export-html/vendor/marked.min.js +6 -0
  108. package/dist/core/extensions/index.d.ts +8 -0
  109. package/dist/core/extensions/index.d.ts.map +1 -0
  110. package/dist/core/extensions/index.js +5 -0
  111. package/dist/core/extensions/index.js.map +1 -0
  112. package/dist/core/extensions/loader.d.ts +7 -0
  113. package/dist/core/extensions/loader.d.ts.map +1 -0
  114. package/dist/core/extensions/loader.js +349 -0
  115. package/dist/core/extensions/loader.js.map +1 -0
  116. package/dist/core/extensions/runner.d.ts +124 -0
  117. package/dist/core/extensions/runner.d.ts.map +1 -0
  118. package/dist/core/extensions/runner.js +657 -0
  119. package/dist/core/extensions/runner.js.map +1 -0
  120. package/dist/core/extensions/types.d.ts +1032 -0
  121. package/dist/core/extensions/types.d.ts.map +1 -0
  122. package/dist/core/extensions/types.js +35 -0
  123. package/dist/core/extensions/types.js.map +1 -0
  124. package/dist/core/extensions/wrapper.d.ts +8 -0
  125. package/dist/core/extensions/wrapper.d.ts.map +1 -0
  126. package/dist/core/extensions/wrapper.js +79 -0
  127. package/dist/core/extensions/wrapper.js.map +1 -0
  128. package/dist/core/footer-data-provider.d.ts +19 -0
  129. package/dist/core/footer-data-provider.d.ts.map +1 -0
  130. package/dist/core/footer-data-provider.js +113 -0
  131. package/dist/core/footer-data-provider.js.map +1 -0
  132. package/dist/core/index.d.ts +13 -0
  133. package/dist/core/index.d.ts.map +1 -0
  134. package/dist/core/index.js +11 -0
  135. package/dist/core/index.js.map +1 -0
  136. package/dist/core/keybindings.d.ts +22 -0
  137. package/dist/core/keybindings.d.ts.map +1 -0
  138. package/dist/core/keybindings.js +124 -0
  139. package/dist/core/keybindings.js.map +1 -0
  140. package/dist/core/messages.d.ts +51 -0
  141. package/dist/core/messages.d.ts.map +1 -0
  142. package/dist/core/messages.js +102 -0
  143. package/dist/core/messages.js.map +1 -0
  144. package/dist/core/model-registry.d.ts +26 -0
  145. package/dist/core/model-registry.d.ts.map +1 -0
  146. package/dist/core/model-registry.js +61 -0
  147. package/dist/core/model-registry.js.map +1 -0
  148. package/dist/core/model-resolver.d.ts +20 -0
  149. package/dist/core/model-resolver.d.ts.map +1 -0
  150. package/dist/core/model-resolver.js +47 -0
  151. package/dist/core/model-resolver.js.map +1 -0
  152. package/dist/core/multi-gpu-executor.d.ts +50 -0
  153. package/dist/core/multi-gpu-executor.d.ts.map +1 -0
  154. package/dist/core/multi-gpu-executor.js +201 -0
  155. package/dist/core/multi-gpu-executor.js.map +1 -0
  156. package/dist/core/onboarding.d.ts +3 -0
  157. package/dist/core/onboarding.d.ts.map +1 -0
  158. package/dist/core/onboarding.js +109 -0
  159. package/dist/core/onboarding.js.map +1 -0
  160. package/dist/core/package-manager.d.ts +136 -0
  161. package/dist/core/package-manager.d.ts.map +1 -0
  162. package/dist/core/package-manager.js +1375 -0
  163. package/dist/core/package-manager.js.map +1 -0
  164. package/dist/core/prompt-templates.d.ts +18 -0
  165. package/dist/core/prompt-templates.d.ts.map +1 -0
  166. package/dist/core/prompt-templates.js +204 -0
  167. package/dist/core/prompt-templates.js.map +1 -0
  168. package/dist/core/resolve-config-value.d.ts +4 -0
  169. package/dist/core/resolve-config-value.d.ts.map +1 -0
  170. package/dist/core/resolve-config-value.js +45 -0
  171. package/dist/core/resolve-config-value.js.map +1 -0
  172. package/dist/core/resource-loader.d.ts +184 -0
  173. package/dist/core/resource-loader.d.ts.map +1 -0
  174. package/dist/core/resource-loader.js +661 -0
  175. package/dist/core/resource-loader.js.map +1 -0
  176. package/dist/core/response-accelerator.d.ts +51 -0
  177. package/dist/core/response-accelerator.d.ts.map +1 -0
  178. package/dist/core/response-accelerator.js +149 -0
  179. package/dist/core/response-accelerator.js.map +1 -0
  180. package/dist/core/sdk.d.ts +39 -0
  181. package/dist/core/sdk.d.ts.map +1 -0
  182. package/dist/core/sdk.js +151 -0
  183. package/dist/core/sdk.js.map +1 -0
  184. package/dist/core/session-manager.d.ts +160 -0
  185. package/dist/core/session-manager.d.ts.map +1 -0
  186. package/dist/core/session-manager.js +899 -0
  187. package/dist/core/session-manager.js.map +1 -0
  188. package/dist/core/settings-manager.d.ts +220 -0
  189. package/dist/core/settings-manager.d.ts.map +1 -0
  190. package/dist/core/settings-manager.js +673 -0
  191. package/dist/core/settings-manager.js.map +1 -0
  192. package/dist/core/skills.d.ts +33 -0
  193. package/dist/core/skills.d.ts.map +1 -0
  194. package/dist/core/skills.js +326 -0
  195. package/dist/core/skills.js.map +1 -0
  196. package/dist/core/slash-commands.d.ts +15 -0
  197. package/dist/core/slash-commands.d.ts.map +1 -0
  198. package/dist/core/slash-commands.js +19 -0
  199. package/dist/core/slash-commands.js.map +1 -0
  200. package/dist/core/system-prompt.d.ts +23 -0
  201. package/dist/core/system-prompt.d.ts.map +1 -0
  202. package/dist/core/system-prompt.js +154 -0
  203. package/dist/core/system-prompt.js.map +1 -0
  204. package/dist/core/timings.d.ts +3 -0
  205. package/dist/core/timings.d.ts.map +1 -0
  206. package/dist/core/timings.js +21 -0
  207. package/dist/core/timings.js.map +1 -0
  208. package/dist/core/tools/bash.d.ts +40 -0
  209. package/dist/core/tools/bash.d.ts.map +1 -0
  210. package/dist/core/tools/bash.js +212 -0
  211. package/dist/core/tools/bash.js.map +1 -0
  212. package/dist/core/tools/edit-diff.d.ts +29 -0
  213. package/dist/core/tools/edit-diff.d.ts.map +1 -0
  214. package/dist/core/tools/edit-diff.js +182 -0
  215. package/dist/core/tools/edit-diff.js.map +1 -0
  216. package/dist/core/tools/edit.d.ts +28 -0
  217. package/dist/core/tools/edit.d.ts.map +1 -0
  218. package/dist/core/tools/edit.js +129 -0
  219. package/dist/core/tools/edit.js.map +1 -0
  220. package/dist/core/tools/fast-executor.d.ts +33 -0
  221. package/dist/core/tools/fast-executor.d.ts.map +1 -0
  222. package/dist/core/tools/fast-executor.js +83 -0
  223. package/dist/core/tools/fast-executor.js.map +1 -0
  224. package/dist/core/tools/find.d.ts +28 -0
  225. package/dist/core/tools/find.d.ts.map +1 -0
  226. package/dist/core/tools/find.js +50 -0
  227. package/dist/core/tools/find.js.map +1 -0
  228. package/dist/core/tools/grep.d.ts +37 -0
  229. package/dist/core/tools/grep.d.ts.map +1 -0
  230. package/dist/core/tools/grep.js +233 -0
  231. package/dist/core/tools/grep.js.map +1 -0
  232. package/dist/core/tools/index.d.ts +63 -0
  233. package/dist/core/tools/index.d.ts.map +1 -0
  234. package/dist/core/tools/index.js +52 -0
  235. package/dist/core/tools/index.js.map +1 -0
  236. package/dist/core/tools/local-accelerator.d.ts +65 -0
  237. package/dist/core/tools/local-accelerator.d.ts.map +1 -0
  238. package/dist/core/tools/local-accelerator.js +198 -0
  239. package/dist/core/tools/local-accelerator.js.map +1 -0
  240. package/dist/core/tools/ls.d.ts +31 -0
  241. package/dist/core/tools/ls.d.ts.map +1 -0
  242. package/dist/core/tools/ls.js +109 -0
  243. package/dist/core/tools/ls.js.map +1 -0
  244. package/dist/core/tools/parallel-executor.d.ts +60 -0
  245. package/dist/core/tools/parallel-executor.d.ts.map +1 -0
  246. package/dist/core/tools/parallel-executor.js +257 -0
  247. package/dist/core/tools/parallel-executor.js.map +1 -0
  248. package/dist/core/tools/path-utils.d.ts +4 -0
  249. package/dist/core/tools/path-utils.d.ts.map +1 -0
  250. package/dist/core/tools/path-utils.js +70 -0
  251. package/dist/core/tools/path-utils.js.map +1 -0
  252. package/dist/core/tools/read.d.ts +29 -0
  253. package/dist/core/tools/read.d.ts.map +1 -0
  254. package/dist/core/tools/read.js +146 -0
  255. package/dist/core/tools/read.js.map +1 -0
  256. package/dist/core/tools/truncate.d.ts +28 -0
  257. package/dist/core/tools/truncate.d.ts.map +1 -0
  258. package/dist/core/tools/truncate.js +161 -0
  259. package/dist/core/tools/truncate.js.map +1 -0
  260. package/dist/core/tools/write.d.ts +21 -0
  261. package/dist/core/tools/write.d.ts.map +1 -0
  262. package/dist/core/tools/write.js +69 -0
  263. package/dist/core/tools/write.js.map +1 -0
  264. package/dist/core/user-config.d.ts +26 -0
  265. package/dist/core/user-config.d.ts.map +1 -0
  266. package/dist/core/user-config.js +75 -0
  267. package/dist/core/user-config.js.map +1 -0
  268. package/dist/index.d.ts +27 -0
  269. package/dist/index.d.ts.map +1 -0
  270. package/dist/index.js +42 -0
  271. package/dist/index.js.map +1 -0
  272. package/dist/main.d.ts +2 -0
  273. package/dist/main.d.ts.map +1 -0
  274. package/dist/main.js +609 -0
  275. package/dist/main.js.map +1 -0
  276. package/dist/migrations.d.ts +8 -0
  277. package/dist/migrations.d.ts.map +1 -0
  278. package/dist/migrations.js +197 -0
  279. package/dist/migrations.js.map +1 -0
  280. package/dist/modes/index.d.ts +6 -0
  281. package/dist/modes/index.d.ts.map +1 -0
  282. package/dist/modes/index.js +5 -0
  283. package/dist/modes/index.js.map +1 -0
  284. package/dist/modes/interactive/components/armin.d.ts +31 -0
  285. package/dist/modes/interactive/components/armin.d.ts.map +1 -0
  286. package/dist/modes/interactive/components/armin.js +306 -0
  287. package/dist/modes/interactive/components/armin.js.map +1 -0
  288. package/dist/modes/interactive/components/assistant-message.d.ts +13 -0
  289. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  290. package/dist/modes/interactive/components/assistant-message.js +82 -0
  291. package/dist/modes/interactive/components/assistant-message.js.map +1 -0
  292. package/dist/modes/interactive/components/bash-execution.d.ts +23 -0
  293. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  294. package/dist/modes/interactive/components/bash-execution.js +126 -0
  295. package/dist/modes/interactive/components/bash-execution.js.map +1 -0
  296. package/dist/modes/interactive/components/bordered-loader.d.ts +15 -0
  297. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  298. package/dist/modes/interactive/components/bordered-loader.js +50 -0
  299. package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  300. package/dist/modes/interactive/components/branch-summary-message.d.ts +12 -0
  301. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  302. package/dist/modes/interactive/components/branch-summary-message.js +40 -0
  303. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  304. package/dist/modes/interactive/components/compaction-summary-message.d.ts +12 -0
  305. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  306. package/dist/modes/interactive/components/compaction-summary-message.js +41 -0
  307. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  308. package/dist/modes/interactive/components/config-selector.d.ts +68 -0
  309. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  310. package/dist/modes/interactive/components/config-selector.js +451 -0
  311. package/dist/modes/interactive/components/config-selector.js.map +1 -0
  312. package/dist/modes/interactive/components/countdown-timer.d.ts +11 -0
  313. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  314. package/dist/modes/interactive/components/countdown-timer.js +30 -0
  315. package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  316. package/dist/modes/interactive/components/custom-editor.d.ts +14 -0
  317. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  318. package/dist/modes/interactive/components/custom-editor.js +52 -0
  319. package/dist/modes/interactive/components/custom-editor.js.map +1 -0
  320. package/dist/modes/interactive/components/custom-message.d.ts +16 -0
  321. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  322. package/dist/modes/interactive/components/custom-message.js +66 -0
  323. package/dist/modes/interactive/components/custom-message.js.map +1 -0
  324. package/dist/modes/interactive/components/daxnuts.d.ts +18 -0
  325. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
  326. package/dist/modes/interactive/components/daxnuts.js +130 -0
  327. package/dist/modes/interactive/components/daxnuts.js.map +1 -0
  328. package/dist/modes/interactive/components/diff.d.ts +5 -0
  329. package/dist/modes/interactive/components/diff.d.ts.map +1 -0
  330. package/dist/modes/interactive/components/diff.js +106 -0
  331. package/dist/modes/interactive/components/diff.js.map +1 -0
  332. package/dist/modes/interactive/components/dynamic-border.d.ts +8 -0
  333. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  334. package/dist/modes/interactive/components/dynamic-border.js +12 -0
  335. package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  336. package/dist/modes/interactive/components/extension-editor.d.ts +16 -0
  337. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  338. package/dist/modes/interactive/components/extension-editor.js +95 -0
  339. package/dist/modes/interactive/components/extension-editor.js.map +1 -0
  340. package/dist/modes/interactive/components/extension-input.d.ts +20 -0
  341. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  342. package/dist/modes/interactive/components/extension-input.js +57 -0
  343. package/dist/modes/interactive/components/extension-input.js.map +1 -0
  344. package/dist/modes/interactive/components/extension-selector.d.ts +20 -0
  345. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  346. package/dist/modes/interactive/components/extension-selector.js +74 -0
  347. package/dist/modes/interactive/components/extension-selector.js.map +1 -0
  348. package/dist/modes/interactive/components/footer.d.ts +14 -0
  349. package/dist/modes/interactive/components/footer.d.ts.map +1 -0
  350. package/dist/modes/interactive/components/footer.js +78 -0
  351. package/dist/modes/interactive/components/footer.js.map +1 -0
  352. package/dist/modes/interactive/components/index.d.ts +28 -0
  353. package/dist/modes/interactive/components/index.d.ts.map +1 -0
  354. package/dist/modes/interactive/components/index.js +28 -0
  355. package/dist/modes/interactive/components/index.js.map +1 -0
  356. package/dist/modes/interactive/components/keybinding-hints.d.ts +8 -0
  357. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  358. package/dist/modes/interactive/components/keybinding-hints.js +25 -0
  359. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  360. package/dist/modes/interactive/components/onboarding-wizard.d.ts +23 -0
  361. package/dist/modes/interactive/components/onboarding-wizard.d.ts.map +1 -0
  362. package/dist/modes/interactive/components/onboarding-wizard.js +250 -0
  363. package/dist/modes/interactive/components/onboarding-wizard.js.map +1 -0
  364. package/dist/modes/interactive/components/session-selector-search.d.ts +21 -0
  365. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  366. package/dist/modes/interactive/components/session-selector-search.js +149 -0
  367. package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  368. package/dist/modes/interactive/components/session-selector.d.ts +89 -0
  369. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  370. package/dist/modes/interactive/components/session-selector.js +786 -0
  371. package/dist/modes/interactive/components/session-selector.js.map +1 -0
  372. package/dist/modes/interactive/components/settings-selector.d.ts +55 -0
  373. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  374. package/dist/modes/interactive/components/settings-selector.js +273 -0
  375. package/dist/modes/interactive/components/settings-selector.js.map +1 -0
  376. package/dist/modes/interactive/components/show-images-selector.d.ts +7 -0
  377. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  378. package/dist/modes/interactive/components/show-images-selector.js +28 -0
  379. package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  380. package/dist/modes/interactive/components/skill-invocation-message.d.ts +12 -0
  381. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  382. package/dist/modes/interactive/components/skill-invocation-message.js +40 -0
  383. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  384. package/dist/modes/interactive/components/theme-selector.d.ts +8 -0
  385. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  386. package/dist/modes/interactive/components/theme-selector.js +38 -0
  387. package/dist/modes/interactive/components/theme-selector.js.map +1 -0
  388. package/dist/modes/interactive/components/thinking-selector.d.ts +8 -0
  389. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  390. package/dist/modes/interactive/components/thinking-selector.js +40 -0
  391. package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  392. package/dist/modes/interactive/components/tool-execution.d.ts +54 -0
  393. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  394. package/dist/modes/interactive/components/tool-execution.js +704 -0
  395. package/dist/modes/interactive/components/tool-execution.js.map +1 -0
  396. package/dist/modes/interactive/components/tree-selector.d.ts +59 -0
  397. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  398. package/dist/modes/interactive/components/tree-selector.js +929 -0
  399. package/dist/modes/interactive/components/tree-selector.js.map +1 -0
  400. package/dist/modes/interactive/components/user-message-selector.d.ts +24 -0
  401. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  402. package/dist/modes/interactive/components/user-message-selector.js +89 -0
  403. package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  404. package/dist/modes/interactive/components/user-message.d.ts +6 -0
  405. package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  406. package/dist/modes/interactive/components/user-message.js +24 -0
  407. package/dist/modes/interactive/components/user-message.js.map +1 -0
  408. package/dist/modes/interactive/components/visual-truncate.d.ts +6 -0
  409. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  410. package/dist/modes/interactive/components/visual-truncate.js +15 -0
  411. package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  412. package/dist/modes/interactive/interactive-mode.d.ts +177 -0
  413. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  414. package/dist/modes/interactive/interactive-mode.js +3037 -0
  415. package/dist/modes/interactive/interactive-mode.js.map +1 -0
  416. package/dist/modes/interactive/theme/dark.json +85 -0
  417. package/dist/modes/interactive/theme/light.json +84 -0
  418. package/dist/modes/interactive/theme/theme-schema.json +335 -0
  419. package/dist/modes/interactive/theme/theme.d.ts +60 -0
  420. package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  421. package/dist/modes/interactive/theme/theme.js +852 -0
  422. package/dist/modes/interactive/theme/theme.js.map +1 -0
  423. package/dist/modes/print-mode.d.ts +10 -0
  424. package/dist/modes/print-mode.d.ts.map +1 -0
  425. package/dist/modes/print-mode.js +80 -0
  426. package/dist/modes/print-mode.js.map +1 -0
  427. package/dist/modes/rpc/jsonl.d.ts +4 -0
  428. package/dist/modes/rpc/jsonl.d.ts.map +1 -0
  429. package/dist/modes/rpc/jsonl.js +36 -0
  430. package/dist/modes/rpc/jsonl.js.map +1 -0
  431. package/dist/modes/rpc/rpc-client.d.ts +94 -0
  432. package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  433. package/dist/modes/rpc/rpc-client.js +262 -0
  434. package/dist/modes/rpc/rpc-client.js.map +1 -0
  435. package/dist/modes/rpc/rpc-mode.d.ts +3 -0
  436. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  437. package/dist/modes/rpc/rpc-mode.js +227 -0
  438. package/dist/modes/rpc/rpc-mode.js.map +1 -0
  439. package/dist/modes/rpc/rpc-types.d.ts +395 -0
  440. package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  441. package/dist/modes/rpc/rpc-types.js +2 -0
  442. package/dist/modes/rpc/rpc-types.js.map +1 -0
  443. package/dist/utils/changelog.d.ts +11 -0
  444. package/dist/utils/changelog.d.ts.map +1 -0
  445. package/dist/utils/changelog.js +69 -0
  446. package/dist/utils/changelog.js.map +1 -0
  447. package/dist/utils/clipboard-image.d.ts +11 -0
  448. package/dist/utils/clipboard-image.d.ts.map +1 -0
  449. package/dist/utils/clipboard-image.js +157 -0
  450. package/dist/utils/clipboard-image.js.map +1 -0
  451. package/dist/utils/clipboard-native.d.ts +7 -0
  452. package/dist/utils/clipboard-native.d.ts.map +1 -0
  453. package/dist/utils/clipboard-native.js +14 -0
  454. package/dist/utils/clipboard-native.js.map +1 -0
  455. package/dist/utils/clipboard.d.ts +2 -0
  456. package/dist/utils/clipboard.d.ts.map +1 -0
  457. package/dist/utils/clipboard.js +55 -0
  458. package/dist/utils/clipboard.js.map +1 -0
  459. package/dist/utils/frontmatter.d.ts +8 -0
  460. package/dist/utils/frontmatter.d.ts.map +1 -0
  461. package/dist/utils/frontmatter.js +26 -0
  462. package/dist/utils/frontmatter.js.map +1 -0
  463. package/dist/utils/git.d.ts +10 -0
  464. package/dist/utils/git.d.ts.map +1 -0
  465. package/dist/utils/git.js +156 -0
  466. package/dist/utils/git.js.map +1 -0
  467. package/dist/utils/image-convert.d.ts +5 -0
  468. package/dist/utils/image-convert.d.ts.map +1 -0
  469. package/dist/utils/image-convert.js +28 -0
  470. package/dist/utils/image-convert.js.map +1 -0
  471. package/dist/utils/image-resize.d.ts +19 -0
  472. package/dist/utils/image-resize.d.ts.map +1 -0
  473. package/dist/utils/image-resize.js +152 -0
  474. package/dist/utils/image-resize.js.map +1 -0
  475. package/dist/utils/mime.d.ts +2 -0
  476. package/dist/utils/mime.d.ts.map +1 -0
  477. package/dist/utils/mime.js +26 -0
  478. package/dist/utils/mime.js.map +1 -0
  479. package/dist/utils/photon.d.ts +3 -0
  480. package/dist/utils/photon.d.ts.map +1 -0
  481. package/dist/utils/photon.js +102 -0
  482. package/dist/utils/photon.js.map +1 -0
  483. package/dist/utils/shell.d.ts +8 -0
  484. package/dist/utils/shell.d.ts.map +1 -0
  485. package/dist/utils/shell.js +135 -0
  486. package/dist/utils/shell.js.map +1 -0
  487. package/dist/utils/sleep.d.ts +2 -0
  488. package/dist/utils/sleep.d.ts.map +1 -0
  489. package/dist/utils/sleep.js +14 -0
  490. package/dist/utils/sleep.js.map +1 -0
  491. package/dist/utils/tools-manager.d.ts +3 -0
  492. package/dist/utils/tools-manager.d.ts.map +1 -0
  493. package/dist/utils/tools-manager.js +227 -0
  494. package/dist/utils/tools-manager.js.map +1 -0
  495. package/docs/compaction.md +392 -0
  496. package/docs/custom-provider.md +592 -0
  497. package/docs/development.md +69 -0
  498. package/docs/extensions.md +2023 -0
  499. package/docs/images/doom-extension.png +0 -0
  500. package/docs/images/exy.png +0 -0
  501. package/docs/images/interactive-mode.png +0 -0
  502. package/docs/images/tree-view.png +0 -0
  503. package/docs/json.md +79 -0
  504. package/docs/keybindings.md +182 -0
  505. package/docs/models.md +297 -0
  506. package/docs/packages.md +209 -0
  507. package/docs/prompt-templates.md +67 -0
  508. package/docs/providers.md +188 -0
  509. package/docs/rpc.md +1354 -0
  510. package/docs/sdk.md +968 -0
  511. package/docs/session.md +412 -0
  512. package/docs/settings.md +225 -0
  513. package/docs/shell-aliases.md +13 -0
  514. package/docs/skills.md +231 -0
  515. package/docs/terminal-setup.md +87 -0
  516. package/docs/termux.md +127 -0
  517. package/docs/themes.md +295 -0
  518. package/docs/tmux.md +61 -0
  519. package/docs/tree.md +228 -0
  520. package/docs/tui.md +887 -0
  521. package/docs/windows.md +17 -0
  522. package/examples/README.md +25 -0
  523. package/examples/extensions/README.md +205 -0
  524. package/examples/extensions/antigravity-image-gen.ts +415 -0
  525. package/examples/extensions/auto-commit-on-exit.ts +49 -0
  526. package/examples/extensions/bash-spawn-hook.ts +30 -0
  527. package/examples/extensions/bookmark.ts +50 -0
  528. package/examples/extensions/built-in-tool-renderer.ts +246 -0
  529. package/examples/extensions/claude-rules.ts +86 -0
  530. package/examples/extensions/commands.ts +72 -0
  531. package/examples/extensions/confirm-destructive.ts +59 -0
  532. package/examples/extensions/custom-compaction.ts +114 -0
  533. package/examples/extensions/custom-footer.ts +64 -0
  534. package/examples/extensions/custom-header.ts +73 -0
  535. package/examples/extensions/custom-provider-anthropic/index.ts +604 -0
  536. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
  537. package/examples/extensions/custom-provider-anthropic/package.json +19 -0
  538. package/examples/extensions/custom-provider-gitlab-duo/index.ts +349 -0
  539. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
  540. package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
  541. package/examples/extensions/custom-provider-qwen-cli/index.ts +345 -0
  542. package/examples/extensions/custom-provider-qwen-cli/package.json +16 -0
  543. package/examples/extensions/dirty-repo-guard.ts +56 -0
  544. package/examples/extensions/doom-overlay/README.md +46 -0
  545. package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
  546. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  547. package/examples/extensions/doom-overlay/doom/build.sh +152 -0
  548. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
  549. package/examples/extensions/doom-overlay/doom-component.ts +132 -0
  550. package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
  551. package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
  552. package/examples/extensions/doom-overlay/index.ts +74 -0
  553. package/examples/extensions/doom-overlay/wad-finder.ts +51 -0
  554. package/examples/extensions/dynamic-resources/SKILL.md +8 -0
  555. package/examples/extensions/dynamic-resources/dynamic.json +79 -0
  556. package/examples/extensions/dynamic-resources/dynamic.md +5 -0
  557. package/examples/extensions/dynamic-resources/index.ts +15 -0
  558. package/examples/extensions/dynamic-tools.ts +74 -0
  559. package/examples/extensions/event-bus.ts +43 -0
  560. package/examples/extensions/file-trigger.ts +41 -0
  561. package/examples/extensions/git-checkpoint.ts +53 -0
  562. package/examples/extensions/handoff.ts +150 -0
  563. package/examples/extensions/hello.ts +25 -0
  564. package/examples/extensions/inline-bash.ts +94 -0
  565. package/examples/extensions/input-transform.ts +43 -0
  566. package/examples/extensions/interactive-shell.ts +196 -0
  567. package/examples/extensions/mac-system-theme.ts +47 -0
  568. package/examples/extensions/message-renderer.ts +59 -0
  569. package/examples/extensions/minimal-mode.ts +426 -0
  570. package/examples/extensions/modal-editor.ts +85 -0
  571. package/examples/extensions/model-status.ts +31 -0
  572. package/examples/extensions/notify.ts +55 -0
  573. package/examples/extensions/overlay-qa-tests.ts +1348 -0
  574. package/examples/extensions/overlay-test.ts +150 -0
  575. package/examples/extensions/permission-gate.ts +34 -0
  576. package/examples/extensions/pirate.ts +47 -0
  577. package/examples/extensions/plan-mode/README.md +65 -0
  578. package/examples/extensions/plan-mode/index.ts +340 -0
  579. package/examples/extensions/plan-mode/utils.ts +168 -0
  580. package/examples/extensions/preset.ts +398 -0
  581. package/examples/extensions/protected-paths.ts +30 -0
  582. package/examples/extensions/provider-payload.ts +14 -0
  583. package/examples/extensions/qna.ts +119 -0
  584. package/examples/extensions/question.ts +264 -0
  585. package/examples/extensions/questionnaire.ts +427 -0
  586. package/examples/extensions/rainbow-editor.ts +88 -0
  587. package/examples/extensions/reload-runtime.ts +37 -0
  588. package/examples/extensions/rpc-demo.ts +124 -0
  589. package/examples/extensions/sandbox/index.ts +318 -0
  590. package/examples/extensions/sandbox/package-lock.json +92 -0
  591. package/examples/extensions/sandbox/package.json +19 -0
  592. package/examples/extensions/send-user-message.ts +97 -0
  593. package/examples/extensions/session-name.ts +27 -0
  594. package/examples/extensions/shutdown-command.ts +63 -0
  595. package/examples/extensions/snake.ts +343 -0
  596. package/examples/extensions/space-invaders.ts +560 -0
  597. package/examples/extensions/ssh.ts +220 -0
  598. package/examples/extensions/status-line.ts +40 -0
  599. package/examples/extensions/subagent/README.md +172 -0
  600. package/examples/extensions/subagent/agents/planner.md +37 -0
  601. package/examples/extensions/subagent/agents/reviewer.md +35 -0
  602. package/examples/extensions/subagent/agents/scout.md +50 -0
  603. package/examples/extensions/subagent/agents/worker.md +24 -0
  604. package/examples/extensions/subagent/agents.ts +126 -0
  605. package/examples/extensions/subagent/index.ts +964 -0
  606. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
  607. package/examples/extensions/subagent/prompts/implement.md +10 -0
  608. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
  609. package/examples/extensions/summarize.ts +195 -0
  610. package/examples/extensions/system-prompt-header.ts +17 -0
  611. package/examples/extensions/timed-confirm.ts +70 -0
  612. package/examples/extensions/titlebar-spinner.ts +58 -0
  613. package/examples/extensions/todo.ts +299 -0
  614. package/examples/extensions/tool-override.ts +143 -0
  615. package/examples/extensions/tools.ts +146 -0
  616. package/examples/extensions/trigger-compact.ts +40 -0
  617. package/examples/extensions/truncated-tool.ts +192 -0
  618. package/examples/extensions/widget-placement.ts +17 -0
  619. package/examples/extensions/with-deps/index.ts +32 -0
  620. package/examples/extensions/with-deps/package-lock.json +31 -0
  621. package/examples/extensions/with-deps/package.json +22 -0
  622. package/examples/rpc-extension-ui.ts +632 -0
  623. package/examples/sdk/01-minimal.ts +22 -0
  624. package/examples/sdk/02-custom-model.ts +49 -0
  625. package/examples/sdk/03-custom-prompt.ts +55 -0
  626. package/examples/sdk/04-skills.ts +46 -0
  627. package/examples/sdk/05-tools.ts +56 -0
  628. package/examples/sdk/06-extensions.ts +88 -0
  629. package/examples/sdk/07-context-files.ts +40 -0
  630. package/examples/sdk/08-prompt-templates.ts +47 -0
  631. package/examples/sdk/09-api-keys-and-oauth.ts +48 -0
  632. package/examples/sdk/10-settings.ts +51 -0
  633. package/examples/sdk/11-sessions.ts +48 -0
  634. package/examples/sdk/12-full-control.ts +82 -0
  635. package/examples/sdk/README.md +144 -0
  636. package/package.json +100 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"footer-data-provider.js","sourceRoot":"","sources":["../../src/core/footer-data-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, type FSWatcher, readFileSync, statSync, watch } from \"fs\";\nimport { dirname, join, resolve } from \"path\";\n\nfunction findGitHeadPath(): string | null {\n\tlet dir = process.cwd();\n\twhile (true) {\n\t\tconst gitPath = join(dir, \".git\");\n\t\tif (existsSync(gitPath)) {\n\t\t\ttry {\n\t\t\t\tconst stat = statSync(gitPath);\n\t\t\t\tif (stat.isFile()) {\n\t\t\t\t\tconst content = readFileSync(gitPath, \"utf8\").trim();\n\t\t\t\t\tif (content.startsWith(\"gitdir: \")) {\n\t\t\t\t\t\tconst gitDir = content.slice(8);\n\t\t\t\t\t\tconst headPath = resolve(dir, gitDir, \"HEAD\");\n\t\t\t\t\t\tif (existsSync(headPath)) return headPath;\n\t\t\t\t\t}\n\t\t\t\t} else if (stat.isDirectory()) {\n\t\t\t\t\tconst headPath = join(gitPath, \"HEAD\");\n\t\t\t\t\tif (existsSync(headPath)) return headPath;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\tconst parent = dirname(dir);\n\t\tif (parent === dir) return null;\n\t\tdir = parent;\n\t}\n}\nexport class FooterDataProvider {\n\tprivate extensionStatuses = new Map<string, string>();\n\tprivate cachedBranch: string | null | undefined = undefined;\n\tprivate gitWatcher: FSWatcher | null = null;\n\tprivate branchChangeCallbacks = new Set<() => void>();\n\tprivate availableProviderCount = 0;\n\tconstructor() {\n\t\tthis.setupGitWatcher();\n\t}\n\tgetGitBranch(): string | null {\n\t\tif (this.cachedBranch !== undefined) return this.cachedBranch;\n\t\ttry {\n\t\t\tconst gitHeadPath = findGitHeadPath();\n\t\t\tif (!gitHeadPath) {\n\t\t\t\tthis.cachedBranch = null;\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst content = readFileSync(gitHeadPath, \"utf8\").trim();\n\t\t\tthis.cachedBranch = content.startsWith(\"ref: refs/heads/\") ? content.slice(16) : \"detached\";\n\t\t} catch {\n\t\t\tthis.cachedBranch = null;\n\t\t}\n\t\treturn this.cachedBranch;\n\t}\n\tgetExtensionStatuses(): ReadonlyMap<string, string> {\n\t\treturn this.extensionStatuses;\n\t}\n\tonBranchChange(callback: () => void): () => void {\n\t\tthis.branchChangeCallbacks.add(callback);\n\t\treturn () => this.branchChangeCallbacks.delete(callback);\n\t}\n\tsetExtensionStatus(key: string, text: string | undefined): void {\n\t\tif (text === undefined) {\n\t\t\tthis.extensionStatuses.delete(key);\n\t\t} else {\n\t\t\tthis.extensionStatuses.set(key, text);\n\t\t}\n\t}\n\tclearExtensionStatuses(): void {\n\t\tthis.extensionStatuses.clear();\n\t}\n\tgetAvailableProviderCount(): number {\n\t\treturn this.availableProviderCount;\n\t}\n\tsetAvailableProviderCount(count: number): void {\n\t\tthis.availableProviderCount = count;\n\t}\n\tdispose(): void {\n\t\tif (this.gitWatcher) {\n\t\t\tthis.gitWatcher.close();\n\t\t\tthis.gitWatcher = null;\n\t\t}\n\t\tthis.branchChangeCallbacks.clear();\n\t}\n\tprivate setupGitWatcher(): void {\n\t\tif (this.gitWatcher) {\n\t\t\tthis.gitWatcher.close();\n\t\t\tthis.gitWatcher = null;\n\t\t}\n\t\tconst gitHeadPath = findGitHeadPath();\n\t\tif (!gitHeadPath) return;\n\t\tconst gitDir = dirname(gitHeadPath);\n\t\ttry {\n\t\t\tthis.gitWatcher = watch(gitDir, (_eventType, filename) => {\n\t\t\t\tif (filename === \"HEAD\") {\n\t\t\t\t\tthis.cachedBranch = undefined;\n\t\t\t\t\tfor (const cb of this.branchChangeCallbacks) cb();\n\t\t\t\t}\n\t\t\t});\n\t\t} catch {}\n\t}\n}\nexport type ReadonlyFooterDataProvider = Pick<\n\tFooterDataProvider,\n\t\"getGitBranch\" | \"getExtensionStatuses\" | \"getAvailableProviderCount\" | \"onBranchChange\"\n>;\n"]}
@@ -0,0 +1,13 @@
1
+ export { AcceleratedAPIClient, globalAcceleratedClient, } from "./accelerated-client.js";
2
+ export { AcceleratedStream, globalAcceleratedStream, globalStreamMerger, StreamMerger, } from "./accelerated-stream.js";
3
+ export { AgentSession, type AgentSessionConfig, type AgentSessionEvent, type AgentSessionEventListener, type ModelCycleResult, type PromptOptions, type SessionStats, } from "./agent-session.js";
4
+ export { APIParallelExecutor, type ConcurrencyStats, detectOptimalConcurrency, globalParallelExecutor, } from "./api-concurrency.js";
5
+ export { type BashExecutorOptions, type BashResult, executeBash, executeBashWithOperations } from "./bash-executor.js";
6
+ export type { CompactionResult } from "./compaction/index.js";
7
+ export { createEventBus, type EventBus, type EventBusController } from "./event-bus.js";
8
+ export { type AgentEndEvent, type AgentStartEvent, type AgentToolResult, type AgentToolUpdateCallback, type BeforeAgentStartEvent, type ContextEvent, discoverAndLoadExtensions, type ExecOptions, type ExecResult, type Extension, type ExtensionAPI, type ExtensionCommandContext, type ExtensionContext, type ExtensionError, type ExtensionEvent, type ExtensionFactory, type ExtensionFlag, type ExtensionHandler, ExtensionRunner, type ExtensionShortcut, type ExtensionUIContext, type LoadExtensionsResult, type MessageRenderer, type RegisteredCommand, type SessionBeforeCompactEvent, type SessionBeforeForkEvent, type SessionBeforeSwitchEvent, type SessionBeforeTreeEvent, type SessionCompactEvent, type SessionForkEvent, type SessionShutdownEvent, type SessionStartEvent, type SessionSwitchEvent, type SessionTreeEvent, type ToolCallEvent, type ToolDefinition, type ToolRenderResultOptions, type ToolResultEvent, type TurnEndEvent, type TurnStartEvent, wrapToolsWithExtensions, } from "./extensions/index.js";
9
+ export { detectCPUCores, detectGPUCount, globalMultiGPUExecutor, MultiGPUExecutor, } from "./multi-gpu-executor.js";
10
+ export { hasConfiguredModels as checkOnboarding, runOnboarding } from "./onboarding.js";
11
+ export type { BrandSettings, ModelConfig, UserConfig } from "./user-config.js";
12
+ export { getActiveModel, hasConfiguredModels, loadUserConfig, saveUserConfig, setModel, updateBrandSettings, } from "./user-config.js";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,oBAAoB,EACpB,uBAAuB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,YAAY,GACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,YAAY,EACZ,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,YAAY,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACN,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,wBAAwB,EACxB,sBAAsB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,UAAU,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AACvH,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,KAAK,QAAQ,EAAE,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EACN,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EACjB,yBAAyB,EACzB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,eAAe,EACf,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,uBAAuB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACN,cAAc,EACd,cAAc,EACd,sBAAsB,EACtB,gBAAgB,GAChB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,mBAAmB,IAAI,eAAe,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACxF,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EACN,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,QAAQ,EACR,mBAAmB,GACnB,MAAM,kBAAkB,CAAC","sourcesContent":["export {\n\tAcceleratedAPIClient,\n\tglobalAcceleratedClient,\n} from \"./accelerated-client.js\";\nexport {\n\tAcceleratedStream,\n\tglobalAcceleratedStream,\n\tglobalStreamMerger,\n\tStreamMerger,\n} from \"./accelerated-stream.js\";\nexport {\n\tAgentSession,\n\ttype AgentSessionConfig,\n\ttype AgentSessionEvent,\n\ttype AgentSessionEventListener,\n\ttype ModelCycleResult,\n\ttype PromptOptions,\n\ttype SessionStats,\n} from \"./agent-session.js\";\nexport {\n\tAPIParallelExecutor,\n\ttype ConcurrencyStats,\n\tdetectOptimalConcurrency,\n\tglobalParallelExecutor,\n} from \"./api-concurrency.js\";\nexport { type BashExecutorOptions, type BashResult, executeBash, executeBashWithOperations } from \"./bash-executor.js\";\nexport type { CompactionResult } from \"./compaction/index.js\";\nexport { createEventBus, type EventBus, type EventBusController } from \"./event-bus.js\";\nexport {\n\ttype AgentEndEvent,\n\ttype AgentStartEvent,\n\ttype AgentToolResult,\n\ttype AgentToolUpdateCallback,\n\ttype BeforeAgentStartEvent,\n\ttype ContextEvent,\n\tdiscoverAndLoadExtensions,\n\ttype ExecOptions,\n\ttype ExecResult,\n\ttype Extension,\n\ttype ExtensionAPI,\n\ttype ExtensionCommandContext,\n\ttype ExtensionContext,\n\ttype ExtensionError,\n\ttype ExtensionEvent,\n\ttype ExtensionFactory,\n\ttype ExtensionFlag,\n\ttype ExtensionHandler,\n\tExtensionRunner,\n\ttype ExtensionShortcut,\n\ttype ExtensionUIContext,\n\ttype LoadExtensionsResult,\n\ttype MessageRenderer,\n\ttype RegisteredCommand,\n\ttype SessionBeforeCompactEvent,\n\ttype SessionBeforeForkEvent,\n\ttype SessionBeforeSwitchEvent,\n\ttype SessionBeforeTreeEvent,\n\ttype SessionCompactEvent,\n\ttype SessionForkEvent,\n\ttype SessionShutdownEvent,\n\ttype SessionStartEvent,\n\ttype SessionSwitchEvent,\n\ttype SessionTreeEvent,\n\ttype ToolCallEvent,\n\ttype ToolDefinition,\n\ttype ToolRenderResultOptions,\n\ttype ToolResultEvent,\n\ttype TurnEndEvent,\n\ttype TurnStartEvent,\n\twrapToolsWithExtensions,\n} from \"./extensions/index.js\";\nexport {\n\tdetectCPUCores,\n\tdetectGPUCount,\n\tglobalMultiGPUExecutor,\n\tMultiGPUExecutor,\n} from \"./multi-gpu-executor.js\";\nexport { hasConfiguredModels as checkOnboarding, runOnboarding } from \"./onboarding.js\";\nexport type { BrandSettings, ModelConfig, UserConfig } from \"./user-config.js\";\nexport {\n\tgetActiveModel,\n\thasConfiguredModels,\n\tloadUserConfig,\n\tsaveUserConfig,\n\tsetModel,\n\tupdateBrandSettings,\n} from \"./user-config.js\";\n"]}
@@ -0,0 +1,11 @@
1
+ export { AcceleratedAPIClient, globalAcceleratedClient, } from "./accelerated-client.js";
2
+ export { AcceleratedStream, globalAcceleratedStream, globalStreamMerger, StreamMerger, } from "./accelerated-stream.js";
3
+ export { AgentSession, } from "./agent-session.js";
4
+ export { APIParallelExecutor, detectOptimalConcurrency, globalParallelExecutor, } from "./api-concurrency.js";
5
+ export { executeBash, executeBashWithOperations } from "./bash-executor.js";
6
+ export { createEventBus } from "./event-bus.js";
7
+ export { discoverAndLoadExtensions, ExtensionRunner, wrapToolsWithExtensions, } from "./extensions/index.js";
8
+ export { detectCPUCores, detectGPUCount, globalMultiGPUExecutor, MultiGPUExecutor, } from "./multi-gpu-executor.js";
9
+ export { hasConfiguredModels as checkOnboarding, runOnboarding } from "./onboarding.js";
10
+ export { getActiveModel, hasConfiguredModels, loadUserConfig, saveUserConfig, setModel, updateBrandSettings, } from "./user-config.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,oBAAoB,EACpB,uBAAuB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,YAAY,GACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,YAAY,GAOZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACN,mBAAmB,EAEnB,wBAAwB,EACxB,sBAAsB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAA6C,WAAW,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAEvH,OAAO,EAAE,cAAc,EAA0C,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAON,yBAAyB,EAYzB,eAAe,EAsBf,uBAAuB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACN,cAAc,EACd,cAAc,EACd,sBAAsB,EACtB,gBAAgB,GAChB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,mBAAmB,IAAI,eAAe,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAExF,OAAO,EACN,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,QAAQ,EACR,mBAAmB,GACnB,MAAM,kBAAkB,CAAC","sourcesContent":["export {\n\tAcceleratedAPIClient,\n\tglobalAcceleratedClient,\n} from \"./accelerated-client.js\";\nexport {\n\tAcceleratedStream,\n\tglobalAcceleratedStream,\n\tglobalStreamMerger,\n\tStreamMerger,\n} from \"./accelerated-stream.js\";\nexport {\n\tAgentSession,\n\ttype AgentSessionConfig,\n\ttype AgentSessionEvent,\n\ttype AgentSessionEventListener,\n\ttype ModelCycleResult,\n\ttype PromptOptions,\n\ttype SessionStats,\n} from \"./agent-session.js\";\nexport {\n\tAPIParallelExecutor,\n\ttype ConcurrencyStats,\n\tdetectOptimalConcurrency,\n\tglobalParallelExecutor,\n} from \"./api-concurrency.js\";\nexport { type BashExecutorOptions, type BashResult, executeBash, executeBashWithOperations } from \"./bash-executor.js\";\nexport type { CompactionResult } from \"./compaction/index.js\";\nexport { createEventBus, type EventBus, type EventBusController } from \"./event-bus.js\";\nexport {\n\ttype AgentEndEvent,\n\ttype AgentStartEvent,\n\ttype AgentToolResult,\n\ttype AgentToolUpdateCallback,\n\ttype BeforeAgentStartEvent,\n\ttype ContextEvent,\n\tdiscoverAndLoadExtensions,\n\ttype ExecOptions,\n\ttype ExecResult,\n\ttype Extension,\n\ttype ExtensionAPI,\n\ttype ExtensionCommandContext,\n\ttype ExtensionContext,\n\ttype ExtensionError,\n\ttype ExtensionEvent,\n\ttype ExtensionFactory,\n\ttype ExtensionFlag,\n\ttype ExtensionHandler,\n\tExtensionRunner,\n\ttype ExtensionShortcut,\n\ttype ExtensionUIContext,\n\ttype LoadExtensionsResult,\n\ttype MessageRenderer,\n\ttype RegisteredCommand,\n\ttype SessionBeforeCompactEvent,\n\ttype SessionBeforeForkEvent,\n\ttype SessionBeforeSwitchEvent,\n\ttype SessionBeforeTreeEvent,\n\ttype SessionCompactEvent,\n\ttype SessionForkEvent,\n\ttype SessionShutdownEvent,\n\ttype SessionStartEvent,\n\ttype SessionSwitchEvent,\n\ttype SessionTreeEvent,\n\ttype ToolCallEvent,\n\ttype ToolDefinition,\n\ttype ToolRenderResultOptions,\n\ttype ToolResultEvent,\n\ttype TurnEndEvent,\n\ttype TurnStartEvent,\n\twrapToolsWithExtensions,\n} from \"./extensions/index.js\";\nexport {\n\tdetectCPUCores,\n\tdetectGPUCount,\n\tglobalMultiGPUExecutor,\n\tMultiGPUExecutor,\n} from \"./multi-gpu-executor.js\";\nexport { hasConfiguredModels as checkOnboarding, runOnboarding } from \"./onboarding.js\";\nexport type { BrandSettings, ModelConfig, UserConfig } from \"./user-config.js\";\nexport {\n\tgetActiveModel,\n\thasConfiguredModels,\n\tloadUserConfig,\n\tsaveUserConfig,\n\tsetModel,\n\tupdateBrandSettings,\n} from \"./user-config.js\";\n"]}
@@ -0,0 +1,22 @@
1
+ import { type EditorAction, type KeyId } from "@mariozechner/pi-tui";
2
+ export type AppAction = "interrupt" | "clear" | "exit" | "suspend" | "cycleThinkingLevel" | "cycleModelForward" | "cycleModelBackward" | "selectModel" | "expandTools" | "toggleThinking" | "toggleSessionNamedFilter" | "externalEditor" | "followUp" | "dequeue" | "pasteImage" | "newSession" | "tree" | "fork" | "resume";
3
+ export type KeyAction = AppAction | EditorAction;
4
+ export type KeybindingsConfig = {
5
+ [K in KeyAction]?: KeyId | KeyId[];
6
+ };
7
+ export declare const DEFAULT_APP_KEYBINDINGS: Record<AppAction, KeyId | KeyId[]>;
8
+ export declare const DEFAULT_KEYBINDINGS: Required<KeybindingsConfig>;
9
+ export declare class KeybindingsManager {
10
+ private config;
11
+ private appActionToKeys;
12
+ private constructor();
13
+ static create(agentDir?: string): KeybindingsManager;
14
+ static inMemory(config?: KeybindingsConfig): KeybindingsManager;
15
+ private static loadFromFile;
16
+ private buildMaps;
17
+ matches(data: string, action: AppAction): boolean;
18
+ getKeys(action: AppAction): KeyId[];
19
+ getEffectiveConfig(): Required<KeybindingsConfig>;
20
+ }
21
+ export type { EditorAction, KeyId };
22
+ //# sourceMappingURL=keybindings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keybindings.d.ts","sourceRoot":"","sources":["../../src/core/keybindings.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,YAAY,EAGjB,KAAK,KAAK,EAGV,MAAM,sBAAsB,CAAC;AAI9B,MAAM,MAAM,SAAS,GAClB,WAAW,GACX,OAAO,GACP,MAAM,GACN,SAAS,GACT,oBAAoB,GACpB,mBAAmB,GACnB,oBAAoB,GACpB,aAAa,GACb,aAAa,GACb,gBAAgB,GAChB,0BAA0B,GAC1B,gBAAgB,GAChB,UAAU,GACV,SAAS,GACT,YAAY,GACZ,YAAY,GACZ,MAAM,GACN,MAAM,GACN,QAAQ,CAAC;AACZ,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC;AACjD,MAAM,MAAM,iBAAiB,GAAG;KAC9B,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE;CAClC,CAAC;AACF,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,GAAG,KAAK,EAAE,CAoBtE,CAAC;AACF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,iBAAiB,CAG3D,CAAC;AAyBF,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,eAIN;IACD,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAE,MAAsB,GAAG,kBAAkB,CAYlE;IACD,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAE,iBAAsB,GAAG,kBAAkB,CAElE;IACD,OAAO,CAAC,MAAM,CAAC,YAAY;IAQ3B,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAOhD;IACD,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE,CAElC;IACD,kBAAkB,IAAI,QAAQ,CAAC,iBAAiB,CAAC,CAQhD;CACD;AACD,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC","sourcesContent":["import {\n\tDEFAULT_EDITOR_KEYBINDINGS,\n\ttype EditorAction,\n\ttype EditorKeybindingsConfig,\n\tEditorKeybindingsManager,\n\ttype KeyId,\n\tmatchesKey,\n\tsetEditorKeybindings,\n} from \"@mariozechner/pi-tui\";\nimport { existsSync, readFileSync } from \"fs\";\nimport { join } from \"path\";\nimport { getAgentDir } from \"../config.js\";\nexport type AppAction =\n\t| \"interrupt\"\n\t| \"clear\"\n\t| \"exit\"\n\t| \"suspend\"\n\t| \"cycleThinkingLevel\"\n\t| \"cycleModelForward\"\n\t| \"cycleModelBackward\"\n\t| \"selectModel\"\n\t| \"expandTools\"\n\t| \"toggleThinking\"\n\t| \"toggleSessionNamedFilter\"\n\t| \"externalEditor\"\n\t| \"followUp\"\n\t| \"dequeue\"\n\t| \"pasteImage\"\n\t| \"newSession\"\n\t| \"tree\"\n\t| \"fork\"\n\t| \"resume\";\nexport type KeyAction = AppAction | EditorAction;\nexport type KeybindingsConfig = {\n\t[K in KeyAction]?: KeyId | KeyId[];\n};\nexport const DEFAULT_APP_KEYBINDINGS: Record<AppAction, KeyId | KeyId[]> = {\n\tinterrupt: \"escape\",\n\tclear: \"ctrl+c\",\n\texit: \"ctrl+d\",\n\tsuspend: \"ctrl+z\",\n\tcycleThinkingLevel: \"shift+tab\",\n\tcycleModelForward: \"ctrl+p\",\n\tcycleModelBackward: \"shift+ctrl+p\",\n\tselectModel: \"ctrl+l\",\n\texpandTools: \"ctrl+o\",\n\ttoggleThinking: \"ctrl+t\",\n\ttoggleSessionNamedFilter: \"ctrl+n\",\n\texternalEditor: \"ctrl+g\",\n\tfollowUp: \"alt+enter\",\n\tdequeue: \"alt+up\",\n\tpasteImage: process.platform === \"win32\" ? \"alt+v\" : \"ctrl+v\",\n\tnewSession: [],\n\ttree: [],\n\tfork: [],\n\tresume: [],\n};\nexport const DEFAULT_KEYBINDINGS: Required<KeybindingsConfig> = {\n\t...DEFAULT_EDITOR_KEYBINDINGS,\n\t...DEFAULT_APP_KEYBINDINGS,\n};\nconst APP_ACTIONS: AppAction[] = [\n\t\"interrupt\",\n\t\"clear\",\n\t\"exit\",\n\t\"suspend\",\n\t\"cycleThinkingLevel\",\n\t\"cycleModelForward\",\n\t\"cycleModelBackward\",\n\t\"selectModel\",\n\t\"expandTools\",\n\t\"toggleThinking\",\n\t\"toggleSessionNamedFilter\",\n\t\"externalEditor\",\n\t\"followUp\",\n\t\"dequeue\",\n\t\"pasteImage\",\n\t\"newSession\",\n\t\"tree\",\n\t\"fork\",\n\t\"resume\",\n];\nfunction isAppAction(action: string): action is AppAction {\n\treturn APP_ACTIONS.includes(action as AppAction);\n}\nexport class KeybindingsManager {\n\tprivate config: KeybindingsConfig;\n\tprivate appActionToKeys: Map<AppAction, KeyId[]>;\n\tprivate constructor(config: KeybindingsConfig) {\n\t\tthis.config = config;\n\t\tthis.appActionToKeys = new Map();\n\t\tthis.buildMaps();\n\t}\n\tstatic create(agentDir: string = getAgentDir()): KeybindingsManager {\n\t\tconst configPath = join(agentDir, \"keybindings.json\");\n\t\tconst config = KeybindingsManager.loadFromFile(configPath);\n\t\tconst manager = new KeybindingsManager(config);\n\t\tconst editorConfig: EditorKeybindingsConfig = {};\n\t\tfor (const [action, keys] of Object.entries(config)) {\n\t\t\tif (!isAppAction(action) || action === \"expandTools\") {\n\t\t\t\teditorConfig[action as EditorAction] = keys;\n\t\t\t}\n\t\t}\n\t\tsetEditorKeybindings(new EditorKeybindingsManager(editorConfig));\n\t\treturn manager;\n\t}\n\tstatic inMemory(config: KeybindingsConfig = {}): KeybindingsManager {\n\t\treturn new KeybindingsManager(config);\n\t}\n\tprivate static loadFromFile(path: string): KeybindingsConfig {\n\t\tif (!existsSync(path)) return {};\n\t\ttry {\n\t\t\treturn JSON.parse(readFileSync(path, \"utf-8\"));\n\t\t} catch {\n\t\t\treturn {};\n\t\t}\n\t}\n\tprivate buildMaps(): void {\n\t\tthis.appActionToKeys.clear();\n\t\tfor (const [action, keys] of Object.entries(DEFAULT_APP_KEYBINDINGS)) {\n\t\t\tconst keyArray = Array.isArray(keys) ? keys : [keys];\n\t\t\tthis.appActionToKeys.set(action as AppAction, [...keyArray]);\n\t\t}\n\t\tfor (const [action, keys] of Object.entries(this.config)) {\n\t\t\tif (keys === undefined || !isAppAction(action)) continue;\n\t\t\tconst keyArray = Array.isArray(keys) ? keys : [keys];\n\t\t\tthis.appActionToKeys.set(action, keyArray);\n\t\t}\n\t}\n\tmatches(data: string, action: AppAction): boolean {\n\t\tconst keys = this.appActionToKeys.get(action);\n\t\tif (!keys) return false;\n\t\tfor (const key of keys) {\n\t\t\tif (matchesKey(data, key)) return true;\n\t\t}\n\t\treturn false;\n\t}\n\tgetKeys(action: AppAction): KeyId[] {\n\t\treturn this.appActionToKeys.get(action) ?? [];\n\t}\n\tgetEffectiveConfig(): Required<KeybindingsConfig> {\n\t\tconst result = { ...DEFAULT_KEYBINDINGS };\n\t\tfor (const [action, keys] of Object.entries(this.config)) {\n\t\t\tif (keys !== undefined) {\n\t\t\t\t(result as KeybindingsConfig)[action as KeyAction] = keys;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n}\nexport type { EditorAction, KeyId };\n"]}
@@ -0,0 +1,124 @@
1
+ import { DEFAULT_EDITOR_KEYBINDINGS, EditorKeybindingsManager, matchesKey, setEditorKeybindings, } from "@mariozechner/pi-tui";
2
+ import { existsSync, readFileSync } from "fs";
3
+ import { join } from "path";
4
+ import { getAgentDir } from "../config.js";
5
+ export const DEFAULT_APP_KEYBINDINGS = {
6
+ interrupt: "escape",
7
+ clear: "ctrl+c",
8
+ exit: "ctrl+d",
9
+ suspend: "ctrl+z",
10
+ cycleThinkingLevel: "shift+tab",
11
+ cycleModelForward: "ctrl+p",
12
+ cycleModelBackward: "shift+ctrl+p",
13
+ selectModel: "ctrl+l",
14
+ expandTools: "ctrl+o",
15
+ toggleThinking: "ctrl+t",
16
+ toggleSessionNamedFilter: "ctrl+n",
17
+ externalEditor: "ctrl+g",
18
+ followUp: "alt+enter",
19
+ dequeue: "alt+up",
20
+ pasteImage: process.platform === "win32" ? "alt+v" : "ctrl+v",
21
+ newSession: [],
22
+ tree: [],
23
+ fork: [],
24
+ resume: [],
25
+ };
26
+ export const DEFAULT_KEYBINDINGS = {
27
+ ...DEFAULT_EDITOR_KEYBINDINGS,
28
+ ...DEFAULT_APP_KEYBINDINGS,
29
+ };
30
+ const APP_ACTIONS = [
31
+ "interrupt",
32
+ "clear",
33
+ "exit",
34
+ "suspend",
35
+ "cycleThinkingLevel",
36
+ "cycleModelForward",
37
+ "cycleModelBackward",
38
+ "selectModel",
39
+ "expandTools",
40
+ "toggleThinking",
41
+ "toggleSessionNamedFilter",
42
+ "externalEditor",
43
+ "followUp",
44
+ "dequeue",
45
+ "pasteImage",
46
+ "newSession",
47
+ "tree",
48
+ "fork",
49
+ "resume",
50
+ ];
51
+ function isAppAction(action) {
52
+ return APP_ACTIONS.includes(action);
53
+ }
54
+ export class KeybindingsManager {
55
+ config;
56
+ appActionToKeys;
57
+ constructor(config) {
58
+ this.config = config;
59
+ this.appActionToKeys = new Map();
60
+ this.buildMaps();
61
+ }
62
+ static create(agentDir = getAgentDir()) {
63
+ const configPath = join(agentDir, "keybindings.json");
64
+ const config = KeybindingsManager.loadFromFile(configPath);
65
+ const manager = new KeybindingsManager(config);
66
+ const editorConfig = {};
67
+ for (const [action, keys] of Object.entries(config)) {
68
+ if (!isAppAction(action) || action === "expandTools") {
69
+ editorConfig[action] = keys;
70
+ }
71
+ }
72
+ setEditorKeybindings(new EditorKeybindingsManager(editorConfig));
73
+ return manager;
74
+ }
75
+ static inMemory(config = {}) {
76
+ return new KeybindingsManager(config);
77
+ }
78
+ static loadFromFile(path) {
79
+ if (!existsSync(path))
80
+ return {};
81
+ try {
82
+ return JSON.parse(readFileSync(path, "utf-8"));
83
+ }
84
+ catch {
85
+ return {};
86
+ }
87
+ }
88
+ buildMaps() {
89
+ this.appActionToKeys.clear();
90
+ for (const [action, keys] of Object.entries(DEFAULT_APP_KEYBINDINGS)) {
91
+ const keyArray = Array.isArray(keys) ? keys : [keys];
92
+ this.appActionToKeys.set(action, [...keyArray]);
93
+ }
94
+ for (const [action, keys] of Object.entries(this.config)) {
95
+ if (keys === undefined || !isAppAction(action))
96
+ continue;
97
+ const keyArray = Array.isArray(keys) ? keys : [keys];
98
+ this.appActionToKeys.set(action, keyArray);
99
+ }
100
+ }
101
+ matches(data, action) {
102
+ const keys = this.appActionToKeys.get(action);
103
+ if (!keys)
104
+ return false;
105
+ for (const key of keys) {
106
+ if (matchesKey(data, key))
107
+ return true;
108
+ }
109
+ return false;
110
+ }
111
+ getKeys(action) {
112
+ return this.appActionToKeys.get(action) ?? [];
113
+ }
114
+ getEffectiveConfig() {
115
+ const result = { ...DEFAULT_KEYBINDINGS };
116
+ for (const [action, keys] of Object.entries(this.config)) {
117
+ if (keys !== undefined) {
118
+ result[action] = keys;
119
+ }
120
+ }
121
+ return result;
122
+ }
123
+ }
124
+ //# sourceMappingURL=keybindings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keybindings.js","sourceRoot":"","sources":["../../src/core/keybindings.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tDEFAULT_EDITOR_KEYBINDINGS,\n\ttype EditorAction,\n\ttype EditorKeybindingsConfig,\n\tEditorKeybindingsManager,\n\ttype KeyId,\n\tmatchesKey,\n\tsetEditorKeybindings,\n} from \"@mariozechner/pi-tui\";\nimport { existsSync, readFileSync } from \"fs\";\nimport { join } from \"path\";\nimport { getAgentDir } from \"../config.js\";\nexport type AppAction =\n\t| \"interrupt\"\n\t| \"clear\"\n\t| \"exit\"\n\t| \"suspend\"\n\t| \"cycleThinkingLevel\"\n\t| \"cycleModelForward\"\n\t| \"cycleModelBackward\"\n\t| \"selectModel\"\n\t| \"expandTools\"\n\t| \"toggleThinking\"\n\t| \"toggleSessionNamedFilter\"\n\t| \"externalEditor\"\n\t| \"followUp\"\n\t| \"dequeue\"\n\t| \"pasteImage\"\n\t| \"newSession\"\n\t| \"tree\"\n\t| \"fork\"\n\t| \"resume\";\nexport type KeyAction = AppAction | EditorAction;\nexport type KeybindingsConfig = {\n\t[K in KeyAction]?: KeyId | KeyId[];\n};\nexport const DEFAULT_APP_KEYBINDINGS: Record<AppAction, KeyId | KeyId[]> = {\n\tinterrupt: \"escape\",\n\tclear: \"ctrl+c\",\n\texit: \"ctrl+d\",\n\tsuspend: \"ctrl+z\",\n\tcycleThinkingLevel: \"shift+tab\",\n\tcycleModelForward: \"ctrl+p\",\n\tcycleModelBackward: \"shift+ctrl+p\",\n\tselectModel: \"ctrl+l\",\n\texpandTools: \"ctrl+o\",\n\ttoggleThinking: \"ctrl+t\",\n\ttoggleSessionNamedFilter: \"ctrl+n\",\n\texternalEditor: \"ctrl+g\",\n\tfollowUp: \"alt+enter\",\n\tdequeue: \"alt+up\",\n\tpasteImage: process.platform === \"win32\" ? \"alt+v\" : \"ctrl+v\",\n\tnewSession: [],\n\ttree: [],\n\tfork: [],\n\tresume: [],\n};\nexport const DEFAULT_KEYBINDINGS: Required<KeybindingsConfig> = {\n\t...DEFAULT_EDITOR_KEYBINDINGS,\n\t...DEFAULT_APP_KEYBINDINGS,\n};\nconst APP_ACTIONS: AppAction[] = [\n\t\"interrupt\",\n\t\"clear\",\n\t\"exit\",\n\t\"suspend\",\n\t\"cycleThinkingLevel\",\n\t\"cycleModelForward\",\n\t\"cycleModelBackward\",\n\t\"selectModel\",\n\t\"expandTools\",\n\t\"toggleThinking\",\n\t\"toggleSessionNamedFilter\",\n\t\"externalEditor\",\n\t\"followUp\",\n\t\"dequeue\",\n\t\"pasteImage\",\n\t\"newSession\",\n\t\"tree\",\n\t\"fork\",\n\t\"resume\",\n];\nfunction isAppAction(action: string): action is AppAction {\n\treturn APP_ACTIONS.includes(action as AppAction);\n}\nexport class KeybindingsManager {\n\tprivate config: KeybindingsConfig;\n\tprivate appActionToKeys: Map<AppAction, KeyId[]>;\n\tprivate constructor(config: KeybindingsConfig) {\n\t\tthis.config = config;\n\t\tthis.appActionToKeys = new Map();\n\t\tthis.buildMaps();\n\t}\n\tstatic create(agentDir: string = getAgentDir()): KeybindingsManager {\n\t\tconst configPath = join(agentDir, \"keybindings.json\");\n\t\tconst config = KeybindingsManager.loadFromFile(configPath);\n\t\tconst manager = new KeybindingsManager(config);\n\t\tconst editorConfig: EditorKeybindingsConfig = {};\n\t\tfor (const [action, keys] of Object.entries(config)) {\n\t\t\tif (!isAppAction(action) || action === \"expandTools\") {\n\t\t\t\teditorConfig[action as EditorAction] = keys;\n\t\t\t}\n\t\t}\n\t\tsetEditorKeybindings(new EditorKeybindingsManager(editorConfig));\n\t\treturn manager;\n\t}\n\tstatic inMemory(config: KeybindingsConfig = {}): KeybindingsManager {\n\t\treturn new KeybindingsManager(config);\n\t}\n\tprivate static loadFromFile(path: string): KeybindingsConfig {\n\t\tif (!existsSync(path)) return {};\n\t\ttry {\n\t\t\treturn JSON.parse(readFileSync(path, \"utf-8\"));\n\t\t} catch {\n\t\t\treturn {};\n\t\t}\n\t}\n\tprivate buildMaps(): void {\n\t\tthis.appActionToKeys.clear();\n\t\tfor (const [action, keys] of Object.entries(DEFAULT_APP_KEYBINDINGS)) {\n\t\t\tconst keyArray = Array.isArray(keys) ? keys : [keys];\n\t\t\tthis.appActionToKeys.set(action as AppAction, [...keyArray]);\n\t\t}\n\t\tfor (const [action, keys] of Object.entries(this.config)) {\n\t\t\tif (keys === undefined || !isAppAction(action)) continue;\n\t\t\tconst keyArray = Array.isArray(keys) ? keys : [keys];\n\t\t\tthis.appActionToKeys.set(action, keyArray);\n\t\t}\n\t}\n\tmatches(data: string, action: AppAction): boolean {\n\t\tconst keys = this.appActionToKeys.get(action);\n\t\tif (!keys) return false;\n\t\tfor (const key of keys) {\n\t\t\tif (matchesKey(data, key)) return true;\n\t\t}\n\t\treturn false;\n\t}\n\tgetKeys(action: AppAction): KeyId[] {\n\t\treturn this.appActionToKeys.get(action) ?? [];\n\t}\n\tgetEffectiveConfig(): Required<KeybindingsConfig> {\n\t\tconst result = { ...DEFAULT_KEYBINDINGS };\n\t\tfor (const [action, keys] of Object.entries(this.config)) {\n\t\t\tif (keys !== undefined) {\n\t\t\t\t(result as KeybindingsConfig)[action as KeyAction] = keys;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n}\nexport type { EditorAction, KeyId };\n"]}
@@ -0,0 +1,51 @@
1
+ import type { AgentMessage } from "@mariozechner/pi-agent-core";
2
+ import type { ImageContent, Message, TextContent } from "@mariozechner/pi-ai";
3
+ export declare const COMPACTION_SUMMARY_PREFIX = "The conversation history before this point was compacted into the following summary:\n<summary>\n";
4
+ export declare const COMPACTION_SUMMARY_SUFFIX = "\n</summary>";
5
+ export declare const BRANCH_SUMMARY_PREFIX = "The following is a summary of a branch that this conversation came back from:\n<summary>\n";
6
+ export declare const BRANCH_SUMMARY_SUFFIX = "</summary>";
7
+ export interface BashExecutionMessage {
8
+ role: "bashExecution";
9
+ command: string;
10
+ output: string;
11
+ exitCode: number | undefined;
12
+ cancelled: boolean;
13
+ truncated: boolean;
14
+ fullOutputPath?: string;
15
+ timestamp: number;
16
+ excludeFromContext?: boolean;
17
+ }
18
+ export interface CustomMessage<T = unknown> {
19
+ role: "custom";
20
+ customType: string;
21
+ content: string | (TextContent | ImageContent)[];
22
+ display: boolean;
23
+ details?: T;
24
+ timestamp: number;
25
+ }
26
+ export interface BranchSummaryMessage {
27
+ role: "branchSummary";
28
+ summary: string;
29
+ fromId: string;
30
+ timestamp: number;
31
+ }
32
+ export interface CompactionSummaryMessage {
33
+ role: "compactionSummary";
34
+ summary: string;
35
+ tokensBefore: number;
36
+ timestamp: number;
37
+ }
38
+ declare module "@mariozechner/pi-agent-core" {
39
+ interface CustomAgentMessages {
40
+ bashExecution: BashExecutionMessage;
41
+ custom: CustomMessage;
42
+ branchSummary: BranchSummaryMessage;
43
+ compactionSummary: CompactionSummaryMessage;
44
+ }
45
+ }
46
+ export declare function bashExecutionToText(msg: BashExecutionMessage): string;
47
+ export declare function createBranchSummaryMessage(summary: string, fromId: string, timestamp: string): BranchSummaryMessage;
48
+ export declare function createCompactionSummaryMessage(summary: string, tokensBefore: number, timestamp: string): CompactionSummaryMessage;
49
+ export declare function createCustomMessage(customType: string, content: string | (TextContent | ImageContent)[], display: boolean, details: unknown | undefined, timestamp: string): CustomMessage;
50
+ export declare function convertToLlm(messages: AgentMessage[]): Message[];
51
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/core/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC9E,eAAO,MAAM,yBAAyB,sGAErC,CAAC;AACF,eAAO,MAAM,yBAAyB,iBAC3B,CAAC;AACZ,eAAO,MAAM,qBAAqB,+FAEjC,CAAC;AACF,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAClD,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC7B;AACD,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IACzC,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,CAAC,WAAW,GAAG,YAAY,CAAC,EAAE,CAAC;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,CAAC,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,WAAW,wBAAwB;IACxC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CAClB;AACD,OAAO,QAAQ,6BAA6B,CAAC,CAAC;IAC7C,UAAU,mBAAmB;QAC5B,aAAa,EAAE,oBAAoB,CAAC;QACpC,MAAM,EAAE,aAAa,CAAC;QACtB,aAAa,EAAE,oBAAoB,CAAC;QACpC,iBAAiB,EAAE,wBAAwB,CAAC;KAC5C;CACD;AACD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,oBAAoB,GAAG,MAAM,CAgBrE;AACD,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,oBAAoB,CAOnH;AACD,wBAAgB,8BAA8B,CAC7C,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GACf,wBAAwB,CAO1B;AACD,wBAAgB,mBAAmB,CAClC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GAAG,CAAC,WAAW,GAAG,YAAY,CAAC,EAAE,EAChD,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,GAAG,SAAS,EAC5B,SAAS,EAAE,MAAM,GACf,aAAa,CASf;AACD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,EAAE,CA8ChE","sourcesContent":["import type { AgentMessage } from \"@mariozechner/pi-agent-core\";\nimport type { ImageContent, Message, TextContent } from \"@mariozechner/pi-ai\";\nexport const COMPACTION_SUMMARY_PREFIX = `The conversation history before this point was compacted into the following summary:\n<summary>\n`;\nexport const COMPACTION_SUMMARY_SUFFIX = `\n</summary>`;\nexport const BRANCH_SUMMARY_PREFIX = `The following is a summary of a branch that this conversation came back from:\n<summary>\n`;\nexport const BRANCH_SUMMARY_SUFFIX = `</summary>`;\nexport interface BashExecutionMessage {\n\trole: \"bashExecution\";\n\tcommand: string;\n\toutput: string;\n\texitCode: number | undefined;\n\tcancelled: boolean;\n\ttruncated: boolean;\n\tfullOutputPath?: string;\n\ttimestamp: number;\n\texcludeFromContext?: boolean;\n}\nexport interface CustomMessage<T = unknown> {\n\trole: \"custom\";\n\tcustomType: string;\n\tcontent: string | (TextContent | ImageContent)[];\n\tdisplay: boolean;\n\tdetails?: T;\n\ttimestamp: number;\n}\nexport interface BranchSummaryMessage {\n\trole: \"branchSummary\";\n\tsummary: string;\n\tfromId: string;\n\ttimestamp: number;\n}\nexport interface CompactionSummaryMessage {\n\trole: \"compactionSummary\";\n\tsummary: string;\n\ttokensBefore: number;\n\ttimestamp: number;\n}\ndeclare module \"@mariozechner/pi-agent-core\" {\n\tinterface CustomAgentMessages {\n\t\tbashExecution: BashExecutionMessage;\n\t\tcustom: CustomMessage;\n\t\tbranchSummary: BranchSummaryMessage;\n\t\tcompactionSummary: CompactionSummaryMessage;\n\t}\n}\nexport function bashExecutionToText(msg: BashExecutionMessage): string {\n\tlet text = `Ran \\`${msg.command}\\`\\n`;\n\tif (msg.output) {\n\t\ttext += `\\`\\`\\`\\n${msg.output}\\n\\`\\`\\``;\n\t} else {\n\t\ttext += \"(no output)\";\n\t}\n\tif (msg.cancelled) {\n\t\ttext += \"\\n\\n(command cancelled)\";\n\t} else if (msg.exitCode !== null && msg.exitCode !== undefined && msg.exitCode !== 0) {\n\t\ttext += `\\n\\nCommand exited with code ${msg.exitCode}`;\n\t}\n\tif (msg.truncated && msg.fullOutputPath) {\n\t\ttext += `\\n\\n[Output truncated. Full output: ${msg.fullOutputPath}]`;\n\t}\n\treturn text;\n}\nexport function createBranchSummaryMessage(summary: string, fromId: string, timestamp: string): BranchSummaryMessage {\n\treturn {\n\t\trole: \"branchSummary\",\n\t\tsummary,\n\t\tfromId,\n\t\ttimestamp: new Date(timestamp).getTime(),\n\t};\n}\nexport function createCompactionSummaryMessage(\n\tsummary: string,\n\ttokensBefore: number,\n\ttimestamp: string,\n): CompactionSummaryMessage {\n\treturn {\n\t\trole: \"compactionSummary\",\n\t\tsummary: summary,\n\t\ttokensBefore,\n\t\ttimestamp: new Date(timestamp).getTime(),\n\t};\n}\nexport function createCustomMessage(\n\tcustomType: string,\n\tcontent: string | (TextContent | ImageContent)[],\n\tdisplay: boolean,\n\tdetails: unknown | undefined,\n\ttimestamp: string,\n): CustomMessage {\n\treturn {\n\t\trole: \"custom\",\n\t\tcustomType,\n\t\tcontent,\n\t\tdisplay,\n\t\tdetails,\n\t\ttimestamp: new Date(timestamp).getTime(),\n\t};\n}\nexport function convertToLlm(messages: AgentMessage[]): Message[] {\n\treturn messages\n\t\t.map((m): Message | undefined => {\n\t\t\tswitch (m.role) {\n\t\t\t\tcase \"bashExecution\":\n\t\t\t\t\tif (m.excludeFromContext) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: bashExecutionToText(m) }],\n\t\t\t\t\t\ttimestamp: m.timestamp,\n\t\t\t\t\t};\n\t\t\t\tcase \"custom\": {\n\t\t\t\t\tconst content = typeof m.content === \"string\" ? [{ type: \"text\" as const, text: m.content }] : m.content;\n\t\t\t\t\treturn {\n\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\tcontent,\n\t\t\t\t\t\ttimestamp: m.timestamp,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tcase \"branchSummary\":\n\t\t\t\t\treturn {\n\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\tcontent: [{ type: \"text\" as const, text: BRANCH_SUMMARY_PREFIX + m.summary + BRANCH_SUMMARY_SUFFIX }],\n\t\t\t\t\t\ttimestamp: m.timestamp,\n\t\t\t\t\t};\n\t\t\t\tcase \"compactionSummary\":\n\t\t\t\t\treturn {\n\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{ type: \"text\" as const, text: COMPACTION_SUMMARY_PREFIX + m.summary + COMPACTION_SUMMARY_SUFFIX },\n\t\t\t\t\t\t],\n\t\t\t\t\t\ttimestamp: m.timestamp,\n\t\t\t\t\t};\n\t\t\t\tcase \"user\":\n\t\t\t\tcase \"assistant\":\n\t\t\t\tcase \"toolResult\":\n\t\t\t\t\treturn m;\n\t\t\t\tdefault: {\n\t\t\t\t\tconst _exhaustiveCheck: never = m;\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\t.filter((m) => m !== undefined);\n}\n"]}
@@ -0,0 +1,102 @@
1
+ export const COMPACTION_SUMMARY_PREFIX = `The conversation history before this point was compacted into the following summary:
2
+ <summary>
3
+ `;
4
+ export const COMPACTION_SUMMARY_SUFFIX = `
5
+ </summary>`;
6
+ export const BRANCH_SUMMARY_PREFIX = `The following is a summary of a branch that this conversation came back from:
7
+ <summary>
8
+ `;
9
+ export const BRANCH_SUMMARY_SUFFIX = `</summary>`;
10
+ export function bashExecutionToText(msg) {
11
+ let text = `Ran \`${msg.command}\`\n`;
12
+ if (msg.output) {
13
+ text += `\`\`\`\n${msg.output}\n\`\`\``;
14
+ }
15
+ else {
16
+ text += "(no output)";
17
+ }
18
+ if (msg.cancelled) {
19
+ text += "\n\n(command cancelled)";
20
+ }
21
+ else if (msg.exitCode !== null && msg.exitCode !== undefined && msg.exitCode !== 0) {
22
+ text += `\n\nCommand exited with code ${msg.exitCode}`;
23
+ }
24
+ if (msg.truncated && msg.fullOutputPath) {
25
+ text += `\n\n[Output truncated. Full output: ${msg.fullOutputPath}]`;
26
+ }
27
+ return text;
28
+ }
29
+ export function createBranchSummaryMessage(summary, fromId, timestamp) {
30
+ return {
31
+ role: "branchSummary",
32
+ summary,
33
+ fromId,
34
+ timestamp: new Date(timestamp).getTime(),
35
+ };
36
+ }
37
+ export function createCompactionSummaryMessage(summary, tokensBefore, timestamp) {
38
+ return {
39
+ role: "compactionSummary",
40
+ summary: summary,
41
+ tokensBefore,
42
+ timestamp: new Date(timestamp).getTime(),
43
+ };
44
+ }
45
+ export function createCustomMessage(customType, content, display, details, timestamp) {
46
+ return {
47
+ role: "custom",
48
+ customType,
49
+ content,
50
+ display,
51
+ details,
52
+ timestamp: new Date(timestamp).getTime(),
53
+ };
54
+ }
55
+ export function convertToLlm(messages) {
56
+ return messages
57
+ .map((m) => {
58
+ switch (m.role) {
59
+ case "bashExecution":
60
+ if (m.excludeFromContext) {
61
+ return undefined;
62
+ }
63
+ return {
64
+ role: "user",
65
+ content: [{ type: "text", text: bashExecutionToText(m) }],
66
+ timestamp: m.timestamp,
67
+ };
68
+ case "custom": {
69
+ const content = typeof m.content === "string" ? [{ type: "text", text: m.content }] : m.content;
70
+ return {
71
+ role: "user",
72
+ content,
73
+ timestamp: m.timestamp,
74
+ };
75
+ }
76
+ case "branchSummary":
77
+ return {
78
+ role: "user",
79
+ content: [{ type: "text", text: BRANCH_SUMMARY_PREFIX + m.summary + BRANCH_SUMMARY_SUFFIX }],
80
+ timestamp: m.timestamp,
81
+ };
82
+ case "compactionSummary":
83
+ return {
84
+ role: "user",
85
+ content: [
86
+ { type: "text", text: COMPACTION_SUMMARY_PREFIX + m.summary + COMPACTION_SUMMARY_SUFFIX },
87
+ ],
88
+ timestamp: m.timestamp,
89
+ };
90
+ case "user":
91
+ case "assistant":
92
+ case "toolResult":
93
+ return m;
94
+ default: {
95
+ const _exhaustiveCheck = m;
96
+ return undefined;
97
+ }
98
+ }
99
+ })
100
+ .filter((m) => m !== undefined);
101
+ }
102
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/core/messages.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentMessage } from \"@mariozechner/pi-agent-core\";\nimport type { ImageContent, Message, TextContent } from \"@mariozechner/pi-ai\";\nexport const COMPACTION_SUMMARY_PREFIX = `The conversation history before this point was compacted into the following summary:\n<summary>\n`;\nexport const COMPACTION_SUMMARY_SUFFIX = `\n</summary>`;\nexport const BRANCH_SUMMARY_PREFIX = `The following is a summary of a branch that this conversation came back from:\n<summary>\n`;\nexport const BRANCH_SUMMARY_SUFFIX = `</summary>`;\nexport interface BashExecutionMessage {\n\trole: \"bashExecution\";\n\tcommand: string;\n\toutput: string;\n\texitCode: number | undefined;\n\tcancelled: boolean;\n\ttruncated: boolean;\n\tfullOutputPath?: string;\n\ttimestamp: number;\n\texcludeFromContext?: boolean;\n}\nexport interface CustomMessage<T = unknown> {\n\trole: \"custom\";\n\tcustomType: string;\n\tcontent: string | (TextContent | ImageContent)[];\n\tdisplay: boolean;\n\tdetails?: T;\n\ttimestamp: number;\n}\nexport interface BranchSummaryMessage {\n\trole: \"branchSummary\";\n\tsummary: string;\n\tfromId: string;\n\ttimestamp: number;\n}\nexport interface CompactionSummaryMessage {\n\trole: \"compactionSummary\";\n\tsummary: string;\n\ttokensBefore: number;\n\ttimestamp: number;\n}\ndeclare module \"@mariozechner/pi-agent-core\" {\n\tinterface CustomAgentMessages {\n\t\tbashExecution: BashExecutionMessage;\n\t\tcustom: CustomMessage;\n\t\tbranchSummary: BranchSummaryMessage;\n\t\tcompactionSummary: CompactionSummaryMessage;\n\t}\n}\nexport function bashExecutionToText(msg: BashExecutionMessage): string {\n\tlet text = `Ran \\`${msg.command}\\`\\n`;\n\tif (msg.output) {\n\t\ttext += `\\`\\`\\`\\n${msg.output}\\n\\`\\`\\``;\n\t} else {\n\t\ttext += \"(no output)\";\n\t}\n\tif (msg.cancelled) {\n\t\ttext += \"\\n\\n(command cancelled)\";\n\t} else if (msg.exitCode !== null && msg.exitCode !== undefined && msg.exitCode !== 0) {\n\t\ttext += `\\n\\nCommand exited with code ${msg.exitCode}`;\n\t}\n\tif (msg.truncated && msg.fullOutputPath) {\n\t\ttext += `\\n\\n[Output truncated. Full output: ${msg.fullOutputPath}]`;\n\t}\n\treturn text;\n}\nexport function createBranchSummaryMessage(summary: string, fromId: string, timestamp: string): BranchSummaryMessage {\n\treturn {\n\t\trole: \"branchSummary\",\n\t\tsummary,\n\t\tfromId,\n\t\ttimestamp: new Date(timestamp).getTime(),\n\t};\n}\nexport function createCompactionSummaryMessage(\n\tsummary: string,\n\ttokensBefore: number,\n\ttimestamp: string,\n): CompactionSummaryMessage {\n\treturn {\n\t\trole: \"compactionSummary\",\n\t\tsummary: summary,\n\t\ttokensBefore,\n\t\ttimestamp: new Date(timestamp).getTime(),\n\t};\n}\nexport function createCustomMessage(\n\tcustomType: string,\n\tcontent: string | (TextContent | ImageContent)[],\n\tdisplay: boolean,\n\tdetails: unknown | undefined,\n\ttimestamp: string,\n): CustomMessage {\n\treturn {\n\t\trole: \"custom\",\n\t\tcustomType,\n\t\tcontent,\n\t\tdisplay,\n\t\tdetails,\n\t\ttimestamp: new Date(timestamp).getTime(),\n\t};\n}\nexport function convertToLlm(messages: AgentMessage[]): Message[] {\n\treturn messages\n\t\t.map((m): Message | undefined => {\n\t\t\tswitch (m.role) {\n\t\t\t\tcase \"bashExecution\":\n\t\t\t\t\tif (m.excludeFromContext) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: bashExecutionToText(m) }],\n\t\t\t\t\t\ttimestamp: m.timestamp,\n\t\t\t\t\t};\n\t\t\t\tcase \"custom\": {\n\t\t\t\t\tconst content = typeof m.content === \"string\" ? [{ type: \"text\" as const, text: m.content }] : m.content;\n\t\t\t\t\treturn {\n\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\tcontent,\n\t\t\t\t\t\ttimestamp: m.timestamp,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tcase \"branchSummary\":\n\t\t\t\t\treturn {\n\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\tcontent: [{ type: \"text\" as const, text: BRANCH_SUMMARY_PREFIX + m.summary + BRANCH_SUMMARY_SUFFIX }],\n\t\t\t\t\t\ttimestamp: m.timestamp,\n\t\t\t\t\t};\n\t\t\t\tcase \"compactionSummary\":\n\t\t\t\t\treturn {\n\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{ type: \"text\" as const, text: COMPACTION_SUMMARY_PREFIX + m.summary + COMPACTION_SUMMARY_SUFFIX },\n\t\t\t\t\t\t],\n\t\t\t\t\t\ttimestamp: m.timestamp,\n\t\t\t\t\t};\n\t\t\t\tcase \"user\":\n\t\t\t\tcase \"assistant\":\n\t\t\t\tcase \"toolResult\":\n\t\t\t\t\treturn m;\n\t\t\t\tdefault: {\n\t\t\t\t\tconst _exhaustiveCheck: never = m;\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\t.filter((m) => m !== undefined);\n}\n"]}
@@ -0,0 +1,26 @@
1
+ import { type Api, type AssistantMessageEventStream, type Context, type Model, type SimpleStreamOptions } from "@mariozechner/pi-ai";
2
+ import type { AuthStorage } from "./auth-storage.js";
3
+ import { clearConfigValueCache } from "./resolve-config-value.js";
4
+ export declare const clearApiKeyCache: typeof clearConfigValueCache;
5
+ export declare class ModelRegistry {
6
+ readonly authStorage: AuthStorage;
7
+ private model;
8
+ private apiKey;
9
+ private baseUrl;
10
+ constructor(authStorage: AuthStorage, modelsJsonPath?: string);
11
+ refresh(): void;
12
+ private loadUserConfiguredModel;
13
+ getModel(): Model<Api> | null;
14
+ getApiKey(): string | null;
15
+ getBaseUrl(): string | null;
16
+ isConfigured(): boolean;
17
+ }
18
+ export interface ProviderConfigInput {
19
+ baseUrl?: string;
20
+ apiKey?: string;
21
+ api?: Api;
22
+ streamSimple?: (model: Model<Api>, context: Context, options?: SimpleStreamOptions) => AssistantMessageEventStream;
23
+ headers?: Record<string, string>;
24
+ authHeader?: boolean;
25
+ }
26
+ //# sourceMappingURL=model-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-registry.d.ts","sourceRoot":"","sources":["../../src/core/model-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,GAAG,EACR,KAAK,2BAA2B,EAChC,KAAK,OAAO,EACZ,KAAK,KAAK,EAGV,KAAK,mBAAmB,EACxB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAsC,MAAM,2BAA2B,CAAC;AAGtG,eAAO,MAAM,gBAAgB,8BAAwB,CAAC;AAEtD,qBAAa,aAAa;IAMxB,QAAQ,CAAC,WAAW,EAAE,WAAW;IALlC,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,OAAO,CAAuB;IAEtC,YACU,WAAW,EAAE,WAAW,EACjC,cAAc,CAAC,EAAE,MAAM,EAGvB;IAED,OAAO,IAAI,IAAI,CAGd;IAED,OAAO,CAAC,uBAAuB;IAkC/B,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAE5B;IAED,SAAS,IAAI,MAAM,GAAG,IAAI,CAEzB;IAED,UAAU,IAAI,MAAM,GAAG,IAAI,CAE1B;IAED,YAAY,IAAI,OAAO,CAEtB;CACD;AAED,MAAM,WAAW,mBAAmB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,mBAAmB,KAAK,2BAA2B,CAAC;IACnH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB","sourcesContent":["import {\n\ttype Api,\n\ttype AssistantMessageEventStream,\n\ttype Context,\n\ttype Model,\n\tregisterApiProvider,\n\tresetApiProviders,\n\ttype SimpleStreamOptions,\n} from \"@mariozechner/pi-ai\";\nimport { existsSync, readFileSync } from \"fs\";\nimport { join } from \"path\";\nimport { getAgentDir } from \"../config.js\";\nimport type { AuthStorage } from \"./auth-storage.js\";\nimport { clearConfigValueCache, resolveConfigValue, resolveHeaders } from \"./resolve-config-value.js\";\nimport { loadUserConfig } from \"./user-config.js\";\n\nexport const clearApiKeyCache = clearConfigValueCache;\n\nexport class ModelRegistry {\n\tprivate model: Model<Api> | null = null;\n\tprivate apiKey: string | null = null;\n\tprivate baseUrl: string | null = null;\n\n\tconstructor(\n\t\treadonly authStorage: AuthStorage,\n\t\tmodelsJsonPath?: string,\n\t) {\n\t\tthis.loadUserConfiguredModel();\n\t}\n\n\trefresh(): void {\n\t\tresetApiProviders();\n\t\tthis.loadUserConfiguredModel();\n\t}\n\n\tprivate loadUserConfiguredModel(): void {\n\t\tconst config = loadUserConfig();\n\t\tif (!config.model) {\n\t\t\tthis.model = null;\n\t\t\treturn;\n\t\t}\n\n\t\tconst userModel = config.model;\n\t\tthis.apiKey = userModel.apiKey;\n\t\tthis.baseUrl = userModel.baseUrl;\n\n\t\tthis.model = {\n\t\t\tid: userModel.id,\n\t\t\tname: userModel.name || userModel.id,\n\t\t\tapi: \"openai-completions\" as Api,\n\t\t\tprovider: \"custom\",\n\t\t\tbaseUrl: userModel.baseUrl,\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 4096,\n\t\t};\n\n\t\tif (this.apiKey) {\n\t\t\tthis.authStorage.set(\"custom\", { type: \"api_key\", key: this.apiKey });\n\t\t}\n\t}\n\n\tgetModel(): Model<Api> | null {\n\t\treturn this.model;\n\t}\n\n\tgetApiKey(): string | null {\n\t\treturn this.apiKey;\n\t}\n\n\tgetBaseUrl(): string | null {\n\t\treturn this.baseUrl;\n\t}\n\n\tisConfigured(): boolean {\n\t\treturn this.model !== null && this.apiKey !== null;\n\t}\n}\n\nexport interface ProviderConfigInput {\n\tbaseUrl?: string;\n\tapiKey?: string;\n\tapi?: Api;\n\tstreamSimple?: (model: Model<Api>, context: Context, options?: SimpleStreamOptions) => AssistantMessageEventStream;\n\theaders?: Record<string, string>;\n\tauthHeader?: boolean;\n}\n"]}
@@ -0,0 +1,61 @@
1
+ import { resetApiProviders, } from "@mariozechner/pi-ai";
2
+ import { clearConfigValueCache } from "./resolve-config-value.js";
3
+ import { loadUserConfig } from "./user-config.js";
4
+ export const clearApiKeyCache = clearConfigValueCache;
5
+ export class ModelRegistry {
6
+ authStorage;
7
+ model = null;
8
+ apiKey = null;
9
+ baseUrl = null;
10
+ constructor(authStorage, modelsJsonPath) {
11
+ this.authStorage = authStorage;
12
+ this.loadUserConfiguredModel();
13
+ }
14
+ refresh() {
15
+ resetApiProviders();
16
+ this.loadUserConfiguredModel();
17
+ }
18
+ loadUserConfiguredModel() {
19
+ const config = loadUserConfig();
20
+ if (!config.model) {
21
+ this.model = null;
22
+ return;
23
+ }
24
+ const userModel = config.model;
25
+ this.apiKey = userModel.apiKey;
26
+ this.baseUrl = userModel.baseUrl;
27
+ this.model = {
28
+ id: userModel.id,
29
+ name: userModel.name || userModel.id,
30
+ api: "openai-completions",
31
+ provider: "custom",
32
+ baseUrl: userModel.baseUrl,
33
+ reasoning: false,
34
+ input: ["text", "image"],
35
+ cost: {
36
+ input: 0,
37
+ output: 0,
38
+ cacheRead: 0,
39
+ cacheWrite: 0,
40
+ },
41
+ contextWindow: 128000,
42
+ maxTokens: 4096,
43
+ };
44
+ if (this.apiKey) {
45
+ this.authStorage.set("custom", { type: "api_key", key: this.apiKey });
46
+ }
47
+ }
48
+ getModel() {
49
+ return this.model;
50
+ }
51
+ getApiKey() {
52
+ return this.apiKey;
53
+ }
54
+ getBaseUrl() {
55
+ return this.baseUrl;
56
+ }
57
+ isConfigured() {
58
+ return this.model !== null && this.apiKey !== null;
59
+ }
60
+ }
61
+ //# sourceMappingURL=model-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-registry.js","sourceRoot":"","sources":["../../src/core/model-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAMN,iBAAiB,GAEjB,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAAE,qBAAqB,EAAsC,MAAM,2BAA2B,CAAC;AACtG,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,CAAC,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;AAEtD,MAAM,OAAO,aAAa;IAMf,WAAW;IALb,KAAK,GAAsB,IAAI,CAAC;IAChC,MAAM,GAAkB,IAAI,CAAC;IAC7B,OAAO,GAAkB,IAAI,CAAC;IAEtC,YACU,WAAwB,EACjC,cAAuB,EACtB;2BAFQ,WAAW;QAGpB,IAAI,CAAC,uBAAuB,EAAE,CAAC;IAAA,CAC/B;IAED,OAAO,GAAS;QACf,iBAAiB,EAAE,CAAC;QACpB,IAAI,CAAC,uBAAuB,EAAE,CAAC;IAAA,CAC/B;IAEO,uBAAuB,GAAS;QACvC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,OAAO;QACR,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;QAEjC,IAAI,CAAC,KAAK,GAAG;YACZ,EAAE,EAAE,SAAS,CAAC,EAAE;YAChB,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE;YACpC,GAAG,EAAE,oBAA2B;YAChC,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,SAAS,EAAE,KAAK;YAChB,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;YACxB,IAAI,EAAE;gBACL,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,CAAC;gBACT,SAAS,EAAE,CAAC;gBACZ,UAAU,EAAE,CAAC;aACb;YACD,aAAa,EAAE,MAAM;YACrB,SAAS,EAAE,IAAI;SACf,CAAC;QAEF,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACvE,CAAC;IAAA,CACD;IAED,QAAQ,GAAsB;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC;IAAA,CAClB;IAED,SAAS,GAAkB;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC;IAAA,CACnB;IAED,UAAU,GAAkB;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC;IAAA,CACpB;IAED,YAAY,GAAY;QACvB,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;IAAA,CACnD;CACD","sourcesContent":["import {\n\ttype Api,\n\ttype AssistantMessageEventStream,\n\ttype Context,\n\ttype Model,\n\tregisterApiProvider,\n\tresetApiProviders,\n\ttype SimpleStreamOptions,\n} from \"@mariozechner/pi-ai\";\nimport { existsSync, readFileSync } from \"fs\";\nimport { join } from \"path\";\nimport { getAgentDir } from \"../config.js\";\nimport type { AuthStorage } from \"./auth-storage.js\";\nimport { clearConfigValueCache, resolveConfigValue, resolveHeaders } from \"./resolve-config-value.js\";\nimport { loadUserConfig } from \"./user-config.js\";\n\nexport const clearApiKeyCache = clearConfigValueCache;\n\nexport class ModelRegistry {\n\tprivate model: Model<Api> | null = null;\n\tprivate apiKey: string | null = null;\n\tprivate baseUrl: string | null = null;\n\n\tconstructor(\n\t\treadonly authStorage: AuthStorage,\n\t\tmodelsJsonPath?: string,\n\t) {\n\t\tthis.loadUserConfiguredModel();\n\t}\n\n\trefresh(): void {\n\t\tresetApiProviders();\n\t\tthis.loadUserConfiguredModel();\n\t}\n\n\tprivate loadUserConfiguredModel(): void {\n\t\tconst config = loadUserConfig();\n\t\tif (!config.model) {\n\t\t\tthis.model = null;\n\t\t\treturn;\n\t\t}\n\n\t\tconst userModel = config.model;\n\t\tthis.apiKey = userModel.apiKey;\n\t\tthis.baseUrl = userModel.baseUrl;\n\n\t\tthis.model = {\n\t\t\tid: userModel.id,\n\t\t\tname: userModel.name || userModel.id,\n\t\t\tapi: \"openai-completions\" as Api,\n\t\t\tprovider: \"custom\",\n\t\t\tbaseUrl: userModel.baseUrl,\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 4096,\n\t\t};\n\n\t\tif (this.apiKey) {\n\t\t\tthis.authStorage.set(\"custom\", { type: \"api_key\", key: this.apiKey });\n\t\t}\n\t}\n\n\tgetModel(): Model<Api> | null {\n\t\treturn this.model;\n\t}\n\n\tgetApiKey(): string | null {\n\t\treturn this.apiKey;\n\t}\n\n\tgetBaseUrl(): string | null {\n\t\treturn this.baseUrl;\n\t}\n\n\tisConfigured(): boolean {\n\t\treturn this.model !== null && this.apiKey !== null;\n\t}\n}\n\nexport interface ProviderConfigInput {\n\tbaseUrl?: string;\n\tapiKey?: string;\n\tapi?: Api;\n\tstreamSimple?: (model: Model<Api>, context: Context, options?: SimpleStreamOptions) => AssistantMessageEventStream;\n\theaders?: Record<string, string>;\n\tauthHeader?: boolean;\n}\n"]}
@@ -0,0 +1,20 @@
1
+ import type { ThinkingLevel } from "@mariozechner/pi-agent-core";
2
+ import type { Api, Model } from "@mariozechner/pi-ai";
3
+ import type { ModelRegistry } from "./model-registry.js";
4
+ export interface ScopedModel {
5
+ model: Model<Api>;
6
+ thinkingLevel?: ThinkingLevel;
7
+ }
8
+ export declare class ModelResolver {
9
+ private registry;
10
+ private requestedModelId?;
11
+ private requestedThinkingLevel?;
12
+ private thinkingLevel;
13
+ constructor(registry: ModelRegistry, requestedModelId?: string | undefined, requestedThinkingLevel?: string | undefined);
14
+ private resolveThinkingLevel;
15
+ resolveModel(): ScopedModel | null;
16
+ getThinkingLevel(): ThinkingLevel;
17
+ setThinkingLevel(level: ThinkingLevel): void;
18
+ getModelDisplayName(): string;
19
+ }
20
+ //# sourceMappingURL=model-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-resolver.d.ts","sourceRoot":"","sources":["../../src/core/model-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,MAAM,WAAW,WAAW;IAC3B,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC9B;AAED,qBAAa,aAAa;IAIxB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,gBAAgB,CAAC;IACzB,OAAO,CAAC,sBAAsB,CAAC;IALhC,OAAO,CAAC,aAAa,CAAyC;IAE9D,YACS,QAAQ,EAAE,aAAa,EACvB,gBAAgB,CAAC,oBAAQ,EACzB,sBAAsB,CAAC,oBAAQ,EAGvC;IAED,OAAO,CAAC,oBAAoB;IAQ5B,YAAY,IAAI,WAAW,GAAG,IAAI,CASjC;IAED,gBAAgB,IAAI,aAAa,CAEhC;IAED,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAE3C;IAED,mBAAmB,IAAI,MAAM,CAM5B;CACD","sourcesContent":["import type { ThinkingLevel } from \"@mariozechner/pi-agent-core\";\nimport type { Api, Model } from \"@mariozechner/pi-ai\";\nimport { isValidThinkingLevel } from \"../cli/args.js\";\nimport { DEFAULT_THINKING_LEVEL } from \"./defaults.js\";\nimport type { ModelRegistry } from \"./model-registry.js\";\nimport { loadUserConfig } from \"./user-config.js\";\n\nexport interface ScopedModel {\n\tmodel: Model<Api>;\n\tthinkingLevel?: ThinkingLevel;\n}\n\nexport class ModelResolver {\n\tprivate thinkingLevel: ThinkingLevel = DEFAULT_THINKING_LEVEL;\n\n\tconstructor(\n\t\tprivate registry: ModelRegistry,\n\t\tprivate requestedModelId?: string,\n\t\tprivate requestedThinkingLevel?: string,\n\t) {\n\t\tthis.resolveThinkingLevel();\n\t}\n\n\tprivate resolveThinkingLevel(): void {\n\t\tif (this.requestedThinkingLevel && isValidThinkingLevel(this.requestedThinkingLevel)) {\n\t\t\tthis.thinkingLevel = this.requestedThinkingLevel;\n\t\t} else {\n\t\t\tthis.thinkingLevel = DEFAULT_THINKING_LEVEL;\n\t\t}\n\t}\n\n\tresolveModel(): ScopedModel | null {\n\t\tconst model = this.registry.getModel();\n\t\tif (!model) {\n\t\t\treturn null;\n\t\t}\n\t\treturn {\n\t\t\tmodel,\n\t\t\tthinkingLevel: this.thinkingLevel,\n\t\t};\n\t}\n\n\tgetThinkingLevel(): ThinkingLevel {\n\t\treturn this.thinkingLevel;\n\t}\n\n\tsetThinkingLevel(level: ThinkingLevel): void {\n\t\tthis.thinkingLevel = level;\n\t}\n\n\tgetModelDisplayName(): string {\n\t\tconst config = loadUserConfig();\n\t\tif (config.model) {\n\t\t\treturn config.model.name || config.model.id;\n\t\t}\n\t\treturn \"Unknown Model\";\n\t}\n}\n"]}
@@ -0,0 +1,47 @@
1
+ import { isValidThinkingLevel } from "../cli/args.js";
2
+ import { DEFAULT_THINKING_LEVEL } from "./defaults.js";
3
+ import { loadUserConfig } from "./user-config.js";
4
+ export class ModelResolver {
5
+ registry;
6
+ requestedModelId;
7
+ requestedThinkingLevel;
8
+ thinkingLevel = DEFAULT_THINKING_LEVEL;
9
+ constructor(registry, requestedModelId, requestedThinkingLevel) {
10
+ this.registry = registry;
11
+ this.requestedModelId = requestedModelId;
12
+ this.requestedThinkingLevel = requestedThinkingLevel;
13
+ this.resolveThinkingLevel();
14
+ }
15
+ resolveThinkingLevel() {
16
+ if (this.requestedThinkingLevel && isValidThinkingLevel(this.requestedThinkingLevel)) {
17
+ this.thinkingLevel = this.requestedThinkingLevel;
18
+ }
19
+ else {
20
+ this.thinkingLevel = DEFAULT_THINKING_LEVEL;
21
+ }
22
+ }
23
+ resolveModel() {
24
+ const model = this.registry.getModel();
25
+ if (!model) {
26
+ return null;
27
+ }
28
+ return {
29
+ model,
30
+ thinkingLevel: this.thinkingLevel,
31
+ };
32
+ }
33
+ getThinkingLevel() {
34
+ return this.thinkingLevel;
35
+ }
36
+ setThinkingLevel(level) {
37
+ this.thinkingLevel = level;
38
+ }
39
+ getModelDisplayName() {
40
+ const config = loadUserConfig();
41
+ if (config.model) {
42
+ return config.model.name || config.model.id;
43
+ }
44
+ return "Unknown Model";
45
+ }
46
+ }
47
+ //# sourceMappingURL=model-resolver.js.map