@mrquake/quakecode-cli 0.64.0

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 (651) hide show
  1. package/CHANGELOG.md +3492 -0
  2. package/README.md +129 -0
  3. package/dist/bun/cli.d.ts +3 -0
  4. package/dist/bun/cli.d.ts.map +1 -0
  5. package/dist/bun/cli.js +7 -0
  6. package/dist/bun/cli.js.map +1 -0
  7. package/dist/bun/register-bedrock.d.ts +2 -0
  8. package/dist/bun/register-bedrock.d.ts.map +1 -0
  9. package/dist/bun/register-bedrock.js +4 -0
  10. package/dist/bun/register-bedrock.js.map +1 -0
  11. package/dist/cli/args.d.ts +49 -0
  12. package/dist/cli/args.d.ts.map +1 -0
  13. package/dist/cli/args.js +304 -0
  14. package/dist/cli/args.js.map +1 -0
  15. package/dist/cli/config-selector.d.ts +14 -0
  16. package/dist/cli/config-selector.d.ts.map +1 -0
  17. package/dist/cli/config-selector.js +31 -0
  18. package/dist/cli/config-selector.js.map +1 -0
  19. package/dist/cli/file-processor.d.ts +15 -0
  20. package/dist/cli/file-processor.d.ts.map +1 -0
  21. package/dist/cli/file-processor.js +83 -0
  22. package/dist/cli/file-processor.js.map +1 -0
  23. package/dist/cli/initial-message.d.ts +18 -0
  24. package/dist/cli/initial-message.d.ts.map +1 -0
  25. package/dist/cli/initial-message.js +22 -0
  26. package/dist/cli/initial-message.js.map +1 -0
  27. package/dist/cli/list-models.d.ts +9 -0
  28. package/dist/cli/list-models.d.ts.map +1 -0
  29. package/dist/cli/list-models.js +92 -0
  30. package/dist/cli/list-models.js.map +1 -0
  31. package/dist/cli/session-picker.d.ts +9 -0
  32. package/dist/cli/session-picker.d.ts.map +1 -0
  33. package/dist/cli/session-picker.js +35 -0
  34. package/dist/cli/session-picker.js.map +1 -0
  35. package/dist/cli.d.ts +3 -0
  36. package/dist/cli.d.ts.map +1 -0
  37. package/dist/cli.js +15 -0
  38. package/dist/cli.js.map +1 -0
  39. package/dist/config.d.ts +73 -0
  40. package/dist/config.d.ts.map +1 -0
  41. package/dist/config.js +212 -0
  42. package/dist/config.js.map +1 -0
  43. package/dist/core/agent-session-runtime.d.ts +136 -0
  44. package/dist/core/agent-session-runtime.d.ts.map +1 -0
  45. package/dist/core/agent-session-runtime.js +267 -0
  46. package/dist/core/agent-session-runtime.js.map +1 -0
  47. package/dist/core/agent-session.d.ts +585 -0
  48. package/dist/core/agent-session.d.ts.map +1 -0
  49. package/dist/core/agent-session.js +2497 -0
  50. package/dist/core/agent-session.js.map +1 -0
  51. package/dist/core/auth-storage.d.ts +132 -0
  52. package/dist/core/auth-storage.d.ts.map +1 -0
  53. package/dist/core/auth-storage.js +422 -0
  54. package/dist/core/auth-storage.js.map +1 -0
  55. package/dist/core/bash-executor.d.ts +46 -0
  56. package/dist/core/bash-executor.d.ts.map +1 -0
  57. package/dist/core/bash-executor.js +113 -0
  58. package/dist/core/bash-executor.js.map +1 -0
  59. package/dist/core/compaction/branch-summarization.d.ts +88 -0
  60. package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  61. package/dist/core/compaction/branch-summarization.js +243 -0
  62. package/dist/core/compaction/branch-summarization.js.map +1 -0
  63. package/dist/core/compaction/compaction.d.ts +121 -0
  64. package/dist/core/compaction/compaction.d.ts.map +1 -0
  65. package/dist/core/compaction/compaction.js +613 -0
  66. package/dist/core/compaction/compaction.js.map +1 -0
  67. package/dist/core/compaction/index.d.ts +7 -0
  68. package/dist/core/compaction/index.d.ts.map +1 -0
  69. package/dist/core/compaction/index.js +7 -0
  70. package/dist/core/compaction/index.js.map +1 -0
  71. package/dist/core/compaction/utils.d.ts +38 -0
  72. package/dist/core/compaction/utils.d.ts.map +1 -0
  73. package/dist/core/compaction/utils.js +153 -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 +29 -0
  88. package/dist/core/exec.d.ts.map +1 -0
  89. package/dist/core/exec.js +75 -0
  90. package/dist/core/exec.js.map +1 -0
  91. package/dist/core/export-html/ansi-to-html.d.ts +22 -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 +249 -0
  94. package/dist/core/export-html/ansi-to-html.js.map +1 -0
  95. package/dist/core/export-html/index.d.ts +37 -0
  96. package/dist/core/export-html/index.d.ts.map +1 -0
  97. package/dist/core/export-html/index.js +224 -0
  98. package/dist/core/export-html/index.js.map +1 -0
  99. package/dist/core/export-html/template.css +1001 -0
  100. package/dist/core/export-html/template.html +55 -0
  101. package/dist/core/export-html/template.js +1690 -0
  102. package/dist/core/export-html/tool-renderer.d.ts +40 -0
  103. package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  104. package/dist/core/export-html/tool-renderer.js +95 -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 +12 -0
  109. package/dist/core/extensions/index.d.ts.map +1 -0
  110. package/dist/core/extensions/index.js +9 -0
  111. package/dist/core/extensions/index.js.map +1 -0
  112. package/dist/core/extensions/loader.d.ts +25 -0
  113. package/dist/core/extensions/loader.d.ts.map +1 -0
  114. package/dist/core/extensions/loader.js +436 -0
  115. package/dist/core/extensions/loader.js.map +1 -0
  116. package/dist/core/extensions/runner.d.ts +148 -0
  117. package/dist/core/extensions/runner.d.ts.map +1 -0
  118. package/dist/core/extensions/runner.js +700 -0
  119. package/dist/core/extensions/runner.js.map +1 -0
  120. package/dist/core/extensions/types.d.ts +1085 -0
  121. package/dist/core/extensions/types.d.ts.map +1 -0
  122. package/dist/core/extensions/types.js +45 -0
  123. package/dist/core/extensions/types.js.map +1 -0
  124. package/dist/core/extensions/wrapper.d.ts +20 -0
  125. package/dist/core/extensions/wrapper.d.ts.map +1 -0
  126. package/dist/core/extensions/wrapper.js +22 -0
  127. package/dist/core/extensions/wrapper.js.map +1 -0
  128. package/dist/core/footer-data-provider.d.ts +48 -0
  129. package/dist/core/footer-data-provider.d.ts.map +1 -0
  130. package/dist/core/footer-data-provider.js +314 -0
  131. package/dist/core/footer-data-provider.js.map +1 -0
  132. package/dist/core/index.d.ts +11 -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 +285 -0
  137. package/dist/core/keybindings.d.ts.map +1 -0
  138. package/dist/core/keybindings.js +251 -0
  139. package/dist/core/keybindings.js.map +1 -0
  140. package/dist/core/messages.d.ts +77 -0
  141. package/dist/core/messages.d.ts.map +1 -0
  142. package/dist/core/messages.js +123 -0
  143. package/dist/core/messages.js.map +1 -0
  144. package/dist/core/model-registry.d.ts +132 -0
  145. package/dist/core/model-registry.d.ts.map +1 -0
  146. package/dist/core/model-registry.js +583 -0
  147. package/dist/core/model-registry.js.map +1 -0
  148. package/dist/core/model-resolver.d.ts +110 -0
  149. package/dist/core/model-resolver.d.ts.map +1 -0
  150. package/dist/core/model-resolver.js +486 -0
  151. package/dist/core/model-resolver.js.map +1 -0
  152. package/dist/core/output-guard.d.ts +6 -0
  153. package/dist/core/output-guard.d.ts.map +1 -0
  154. package/dist/core/output-guard.js +59 -0
  155. package/dist/core/output-guard.js.map +1 -0
  156. package/dist/core/package-manager.d.ts +172 -0
  157. package/dist/core/package-manager.d.ts.map +1 -0
  158. package/dist/core/package-manager.js +1783 -0
  159. package/dist/core/package-manager.js.map +1 -0
  160. package/dist/core/prompt-templates.d.ts +51 -0
  161. package/dist/core/prompt-templates.d.ts.map +1 -0
  162. package/dist/core/prompt-templates.js +249 -0
  163. package/dist/core/prompt-templates.js.map +1 -0
  164. package/dist/core/resolve-config-value.d.ts +23 -0
  165. package/dist/core/resolve-config-value.d.ts.map +1 -0
  166. package/dist/core/resolve-config-value.js +126 -0
  167. package/dist/core/resolve-config-value.js.map +1 -0
  168. package/dist/core/resource-loader.d.ts +185 -0
  169. package/dist/core/resource-loader.d.ts.map +1 -0
  170. package/dist/core/resource-loader.js +698 -0
  171. package/dist/core/resource-loader.js.map +1 -0
  172. package/dist/core/sdk.d.ts +93 -0
  173. package/dist/core/sdk.d.ts.map +1 -0
  174. package/dist/core/sdk.js +236 -0
  175. package/dist/core/sdk.js.map +1 -0
  176. package/dist/core/session-manager.d.ts +332 -0
  177. package/dist/core/session-manager.d.ts.map +1 -0
  178. package/dist/core/session-manager.js +1104 -0
  179. package/dist/core/session-manager.js.map +1 -0
  180. package/dist/core/settings-manager.d.ts +237 -0
  181. package/dist/core/settings-manager.d.ts.map +1 -0
  182. package/dist/core/settings-manager.js +702 -0
  183. package/dist/core/settings-manager.js.map +1 -0
  184. package/dist/core/skills.d.ts +60 -0
  185. package/dist/core/skills.d.ts.map +1 -0
  186. package/dist/core/skills.js +409 -0
  187. package/dist/core/skills.js.map +1 -0
  188. package/dist/core/slash-commands.d.ts +14 -0
  189. package/dist/core/slash-commands.d.ts.map +1 -0
  190. package/dist/core/slash-commands.js +23 -0
  191. package/dist/core/slash-commands.js.map +1 -0
  192. package/dist/core/source-info.d.ts +18 -0
  193. package/dist/core/source-info.d.ts.map +1 -0
  194. package/dist/core/source-info.js +19 -0
  195. package/dist/core/source-info.js.map +1 -0
  196. package/dist/core/system-prompt.d.ts +28 -0
  197. package/dist/core/system-prompt.d.ts.map +1 -0
  198. package/dist/core/system-prompt.js +116 -0
  199. package/dist/core/system-prompt.js.map +1 -0
  200. package/dist/core/timings.d.ts +8 -0
  201. package/dist/core/timings.d.ts.map +1 -0
  202. package/dist/core/timings.js +31 -0
  203. package/dist/core/timings.js.map +1 -0
  204. package/dist/core/tools/bash.d.ts +73 -0
  205. package/dist/core/tools/bash.d.ts.map +1 -0
  206. package/dist/core/tools/bash.js +342 -0
  207. package/dist/core/tools/bash.js.map +1 -0
  208. package/dist/core/tools/edit-diff.d.ts +85 -0
  209. package/dist/core/tools/edit-diff.d.ts.map +1 -0
  210. package/dist/core/tools/edit-diff.js +337 -0
  211. package/dist/core/tools/edit-diff.js.map +1 -0
  212. package/dist/core/tools/edit.d.ts +53 -0
  213. package/dist/core/tools/edit.d.ts.map +1 -0
  214. package/dist/core/tools/edit.js +196 -0
  215. package/dist/core/tools/edit.js.map +1 -0
  216. package/dist/core/tools/file-mutation-queue.d.ts +6 -0
  217. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  218. package/dist/core/tools/file-mutation-queue.js +37 -0
  219. package/dist/core/tools/file-mutation-queue.js.map +1 -0
  220. package/dist/core/tools/find.d.ts +46 -0
  221. package/dist/core/tools/find.d.ts.map +1 -0
  222. package/dist/core/tools/find.js +258 -0
  223. package/dist/core/tools/find.js.map +1 -0
  224. package/dist/core/tools/grep.d.ts +56 -0
  225. package/dist/core/tools/grep.d.ts.map +1 -0
  226. package/dist/core/tools/grep.js +293 -0
  227. package/dist/core/tools/grep.js.map +1 -0
  228. package/dist/core/tools/index.d.ts +115 -0
  229. package/dist/core/tools/index.d.ts.map +1 -0
  230. package/dist/core/tools/index.js +86 -0
  231. package/dist/core/tools/index.js.map +1 -0
  232. package/dist/core/tools/ls.d.ts +46 -0
  233. package/dist/core/tools/ls.d.ts.map +1 -0
  234. package/dist/core/tools/ls.js +172 -0
  235. package/dist/core/tools/ls.js.map +1 -0
  236. package/dist/core/tools/path-utils.d.ts +8 -0
  237. package/dist/core/tools/path-utils.d.ts.map +1 -0
  238. package/dist/core/tools/path-utils.js +81 -0
  239. package/dist/core/tools/path-utils.js.map +1 -0
  240. package/dist/core/tools/read.d.ts +46 -0
  241. package/dist/core/tools/read.d.ts.map +1 -0
  242. package/dist/core/tools/read.js +225 -0
  243. package/dist/core/tools/read.js.map +1 -0
  244. package/dist/core/tools/render-utils.d.ts +21 -0
  245. package/dist/core/tools/render-utils.d.ts.map +1 -0
  246. package/dist/core/tools/render-utils.js +49 -0
  247. package/dist/core/tools/render-utils.js.map +1 -0
  248. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  249. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  250. package/dist/core/tools/tool-definition-wrapper.js +32 -0
  251. package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
  252. package/dist/core/tools/truncate.d.ts +70 -0
  253. package/dist/core/tools/truncate.d.ts.map +1 -0
  254. package/dist/core/tools/truncate.js +205 -0
  255. package/dist/core/tools/truncate.js.map +1 -0
  256. package/dist/core/tools/write.d.ts +35 -0
  257. package/dist/core/tools/write.d.ts.map +1 -0
  258. package/dist/core/tools/write.js +216 -0
  259. package/dist/core/tools/write.js.map +1 -0
  260. package/dist/index.d.ts +28 -0
  261. package/dist/index.d.ts.map +1 -0
  262. package/dist/index.js +43 -0
  263. package/dist/index.js.map +1 -0
  264. package/dist/main.d.ts +8 -0
  265. package/dist/main.d.ts.map +1 -0
  266. package/dist/main.js +807 -0
  267. package/dist/main.js.map +1 -0
  268. package/dist/migrations.d.ts +33 -0
  269. package/dist/migrations.d.ts.map +1 -0
  270. package/dist/migrations.js +261 -0
  271. package/dist/migrations.js.map +1 -0
  272. package/dist/modes/index.d.ts +9 -0
  273. package/dist/modes/index.d.ts.map +1 -0
  274. package/dist/modes/index.js +8 -0
  275. package/dist/modes/index.js.map +1 -0
  276. package/dist/modes/interactive/components/armin.d.ts +34 -0
  277. package/dist/modes/interactive/components/armin.d.ts.map +1 -0
  278. package/dist/modes/interactive/components/armin.js +333 -0
  279. package/dist/modes/interactive/components/armin.js.map +1 -0
  280. package/dist/modes/interactive/components/assistant-message.d.ts +18 -0
  281. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  282. package/dist/modes/interactive/components/assistant-message.js +107 -0
  283. package/dist/modes/interactive/components/assistant-message.js.map +1 -0
  284. package/dist/modes/interactive/components/bash-execution.d.ts +34 -0
  285. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  286. package/dist/modes/interactive/components/bash-execution.js +175 -0
  287. package/dist/modes/interactive/components/bash-execution.js.map +1 -0
  288. package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  289. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  290. package/dist/modes/interactive/components/bordered-loader.js +51 -0
  291. package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  292. package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  293. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  294. package/dist/modes/interactive/components/branch-summary-message.js +44 -0
  295. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  296. package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  297. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  298. package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
  299. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  300. package/dist/modes/interactive/components/config-selector.d.ts +71 -0
  301. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  302. package/dist/modes/interactive/components/config-selector.js +479 -0
  303. package/dist/modes/interactive/components/config-selector.js.map +1 -0
  304. package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  305. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  306. package/dist/modes/interactive/components/countdown-timer.js +33 -0
  307. package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  308. package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  309. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  310. package/dist/modes/interactive/components/custom-editor.js +70 -0
  311. package/dist/modes/interactive/components/custom-editor.js.map +1 -0
  312. package/dist/modes/interactive/components/custom-message.d.ts +20 -0
  313. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  314. package/dist/modes/interactive/components/custom-message.js +79 -0
  315. package/dist/modes/interactive/components/custom-message.js.map +1 -0
  316. package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  317. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
  318. package/dist/modes/interactive/components/daxnuts.js +140 -0
  319. package/dist/modes/interactive/components/daxnuts.js.map +1 -0
  320. package/dist/modes/interactive/components/diff.d.ts +12 -0
  321. package/dist/modes/interactive/components/diff.d.ts.map +1 -0
  322. package/dist/modes/interactive/components/diff.js +133 -0
  323. package/dist/modes/interactive/components/diff.js.map +1 -0
  324. package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  325. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  326. package/dist/modes/interactive/components/dynamic-border.js +21 -0
  327. package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  328. package/dist/modes/interactive/components/extension-editor.d.ts +20 -0
  329. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  330. package/dist/modes/interactive/components/extension-editor.js +111 -0
  331. package/dist/modes/interactive/components/extension-editor.js.map +1 -0
  332. package/dist/modes/interactive/components/extension-input.d.ts +23 -0
  333. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  334. package/dist/modes/interactive/components/extension-input.js +61 -0
  335. package/dist/modes/interactive/components/extension-input.js.map +1 -0
  336. package/dist/modes/interactive/components/extension-selector.d.ts +24 -0
  337. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  338. package/dist/modes/interactive/components/extension-selector.js +78 -0
  339. package/dist/modes/interactive/components/extension-selector.js.map +1 -0
  340. package/dist/modes/interactive/components/footer.d.ts +27 -0
  341. package/dist/modes/interactive/components/footer.d.ts.map +1 -0
  342. package/dist/modes/interactive/components/footer.js +201 -0
  343. package/dist/modes/interactive/components/footer.js.map +1 -0
  344. package/dist/modes/interactive/components/index.d.ts +32 -0
  345. package/dist/modes/interactive/components/index.d.ts.map +1 -0
  346. package/dist/modes/interactive/components/index.js +33 -0
  347. package/dist/modes/interactive/components/index.js.map +1 -0
  348. package/dist/modes/interactive/components/keybinding-hints.d.ts +8 -0
  349. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  350. package/dist/modes/interactive/components/keybinding-hints.js +22 -0
  351. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  352. package/dist/modes/interactive/components/login-dialog.d.ts +42 -0
  353. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  354. package/dist/modes/interactive/components/login-dialog.js +145 -0
  355. package/dist/modes/interactive/components/login-dialog.js.map +1 -0
  356. package/dist/modes/interactive/components/model-selector.d.ts +47 -0
  357. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  358. package/dist/modes/interactive/components/model-selector.js +275 -0
  359. package/dist/modes/interactive/components/model-selector.js.map +1 -0
  360. package/dist/modes/interactive/components/oauth-selector.d.ts +19 -0
  361. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  362. package/dist/modes/interactive/components/oauth-selector.js +97 -0
  363. package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  364. package/dist/modes/interactive/components/scoped-models-selector.d.ts +49 -0
  365. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  366. package/dist/modes/interactive/components/scoped-models-selector.js +275 -0
  367. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  368. package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  369. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  370. package/dist/modes/interactive/components/session-selector-search.js +155 -0
  371. package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  372. package/dist/modes/interactive/components/session-selector.d.ts +95 -0
  373. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  374. package/dist/modes/interactive/components/session-selector.js +848 -0
  375. package/dist/modes/interactive/components/session-selector.js.map +1 -0
  376. package/dist/modes/interactive/components/settings-selector.d.ts +58 -0
  377. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  378. package/dist/modes/interactive/components/settings-selector.js +301 -0
  379. package/dist/modes/interactive/components/settings-selector.js.map +1 -0
  380. package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  381. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  382. package/dist/modes/interactive/components/show-images-selector.js +39 -0
  383. package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  384. package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  385. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  386. package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
  387. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  388. package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  389. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  390. package/dist/modes/interactive/components/theme-selector.js +50 -0
  391. package/dist/modes/interactive/components/theme-selector.js.map +1 -0
  392. package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  393. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  394. package/dist/modes/interactive/components/thinking-selector.js +51 -0
  395. package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  396. package/dist/modes/interactive/components/tool-execution.d.ts +58 -0
  397. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  398. package/dist/modes/interactive/components/tool-execution.js +274 -0
  399. package/dist/modes/interactive/components/tool-execution.js.map +1 -0
  400. package/dist/modes/interactive/components/tree-selector.d.ts +89 -0
  401. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  402. package/dist/modes/interactive/components/tree-selector.js +1084 -0
  403. package/dist/modes/interactive/components/tree-selector.js.map +1 -0
  404. package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  405. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  406. package/dist/modes/interactive/components/user-message-selector.js +113 -0
  407. package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  408. package/dist/modes/interactive/components/user-message.d.ts +9 -0
  409. package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  410. package/dist/modes/interactive/components/user-message.js +28 -0
  411. package/dist/modes/interactive/components/user-message.js.map +1 -0
  412. package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  413. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  414. package/dist/modes/interactive/components/visual-truncate.js +33 -0
  415. package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  416. package/dist/modes/interactive/interactive-mode.d.ts +318 -0
  417. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  418. package/dist/modes/interactive/interactive-mode.js +3921 -0
  419. package/dist/modes/interactive/interactive-mode.js.map +1 -0
  420. package/dist/modes/interactive/theme/dark.json +85 -0
  421. package/dist/modes/interactive/theme/light.json +84 -0
  422. package/dist/modes/interactive/theme/quake.json +84 -0
  423. package/dist/modes/interactive/theme/theme-schema.json +335 -0
  424. package/dist/modes/interactive/theme/theme.d.ts +81 -0
  425. package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  426. package/dist/modes/interactive/theme/theme.js +973 -0
  427. package/dist/modes/interactive/theme/theme.js.map +1 -0
  428. package/dist/modes/print-mode.d.ts +28 -0
  429. package/dist/modes/print-mode.d.ts.map +1 -0
  430. package/dist/modes/print-mode.js +108 -0
  431. package/dist/modes/print-mode.js.map +1 -0
  432. package/dist/modes/rpc/jsonl.d.ts +17 -0
  433. package/dist/modes/rpc/jsonl.d.ts.map +1 -0
  434. package/dist/modes/rpc/jsonl.js +49 -0
  435. package/dist/modes/rpc/jsonl.js.map +1 -0
  436. package/dist/modes/rpc/rpc-client.d.ts +217 -0
  437. package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  438. package/dist/modes/rpc/rpc-client.js +401 -0
  439. package/dist/modes/rpc/rpc-client.js.map +1 -0
  440. package/dist/modes/rpc/rpc-mode.d.ts +20 -0
  441. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  442. package/dist/modes/rpc/rpc-mode.js +542 -0
  443. package/dist/modes/rpc/rpc-mode.js.map +1 -0
  444. package/dist/modes/rpc/rpc-types.d.ts +408 -0
  445. package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  446. package/dist/modes/rpc/rpc-types.js +8 -0
  447. package/dist/modes/rpc/rpc-types.js.map +1 -0
  448. package/dist/utils/changelog.d.ts +21 -0
  449. package/dist/utils/changelog.d.ts.map +1 -0
  450. package/dist/utils/changelog.js +87 -0
  451. package/dist/utils/changelog.js.map +1 -0
  452. package/dist/utils/child-process.d.ts +11 -0
  453. package/dist/utils/child-process.d.ts.map +1 -0
  454. package/dist/utils/child-process.js +78 -0
  455. package/dist/utils/child-process.js.map +1 -0
  456. package/dist/utils/clipboard-image.d.ts +11 -0
  457. package/dist/utils/clipboard-image.d.ts.map +1 -0
  458. package/dist/utils/clipboard-image.js +245 -0
  459. package/dist/utils/clipboard-image.js.map +1 -0
  460. package/dist/utils/clipboard-native.d.ts +8 -0
  461. package/dist/utils/clipboard-native.d.ts.map +1 -0
  462. package/dist/utils/clipboard-native.js +14 -0
  463. package/dist/utils/clipboard-native.js.map +1 -0
  464. package/dist/utils/clipboard.d.ts +2 -0
  465. package/dist/utils/clipboard.d.ts.map +1 -0
  466. package/dist/utils/clipboard.js +78 -0
  467. package/dist/utils/clipboard.js.map +1 -0
  468. package/dist/utils/exif-orientation.d.ts +5 -0
  469. package/dist/utils/exif-orientation.d.ts.map +1 -0
  470. package/dist/utils/exif-orientation.js +158 -0
  471. package/dist/utils/exif-orientation.js.map +1 -0
  472. package/dist/utils/frontmatter.d.ts +8 -0
  473. package/dist/utils/frontmatter.d.ts.map +1 -0
  474. package/dist/utils/frontmatter.js +26 -0
  475. package/dist/utils/frontmatter.js.map +1 -0
  476. package/dist/utils/git.d.ts +26 -0
  477. package/dist/utils/git.d.ts.map +1 -0
  478. package/dist/utils/git.js +163 -0
  479. package/dist/utils/git.js.map +1 -0
  480. package/dist/utils/image-convert.d.ts +9 -0
  481. package/dist/utils/image-convert.d.ts.map +1 -0
  482. package/dist/utils/image-convert.js +39 -0
  483. package/dist/utils/image-convert.js.map +1 -0
  484. package/dist/utils/image-resize.d.ts +36 -0
  485. package/dist/utils/image-resize.d.ts.map +1 -0
  486. package/dist/utils/image-resize.js +137 -0
  487. package/dist/utils/image-resize.js.map +1 -0
  488. package/dist/utils/mime.d.ts +2 -0
  489. package/dist/utils/mime.d.ts.map +1 -0
  490. package/dist/utils/mime.js +26 -0
  491. package/dist/utils/mime.js.map +1 -0
  492. package/dist/utils/photon.d.ts +21 -0
  493. package/dist/utils/photon.d.ts.map +1 -0
  494. package/dist/utils/photon.js +121 -0
  495. package/dist/utils/photon.js.map +1 -0
  496. package/dist/utils/shell.d.ts +26 -0
  497. package/dist/utils/shell.d.ts.map +1 -0
  498. package/dist/utils/shell.js +186 -0
  499. package/dist/utils/shell.js.map +1 -0
  500. package/dist/utils/sleep.d.ts +5 -0
  501. package/dist/utils/sleep.d.ts.map +1 -0
  502. package/dist/utils/sleep.js +17 -0
  503. package/dist/utils/sleep.js.map +1 -0
  504. package/dist/utils/tools-manager.d.ts +3 -0
  505. package/dist/utils/tools-manager.d.ts.map +1 -0
  506. package/dist/utils/tools-manager.js +252 -0
  507. package/dist/utils/tools-manager.js.map +1 -0
  508. package/docs/compaction.md +394 -0
  509. package/docs/custom-provider.md +596 -0
  510. package/docs/development.md +71 -0
  511. package/docs/extensions.md +2286 -0
  512. package/docs/images/doom-extension.png +0 -0
  513. package/docs/images/exy.png +0 -0
  514. package/docs/images/interactive-mode.png +0 -0
  515. package/docs/images/tree-view.png +0 -0
  516. package/docs/json.md +82 -0
  517. package/docs/keybindings.md +175 -0
  518. package/docs/models.md +341 -0
  519. package/docs/packages.md +218 -0
  520. package/docs/prompt-templates.md +67 -0
  521. package/docs/providers.md +195 -0
  522. package/docs/rpc.md +1377 -0
  523. package/docs/sdk.md +1064 -0
  524. package/docs/session.md +412 -0
  525. package/docs/settings.md +246 -0
  526. package/docs/shell-aliases.md +13 -0
  527. package/docs/skills.md +232 -0
  528. package/docs/terminal-setup.md +106 -0
  529. package/docs/termux.md +127 -0
  530. package/docs/themes.md +295 -0
  531. package/docs/tmux.md +61 -0
  532. package/docs/tree.md +231 -0
  533. package/docs/tui.md +887 -0
  534. package/docs/windows.md +17 -0
  535. package/examples/README.md +25 -0
  536. package/examples/extensions/README.md +206 -0
  537. package/examples/extensions/antigravity-image-gen.ts +418 -0
  538. package/examples/extensions/auto-commit-on-exit.ts +49 -0
  539. package/examples/extensions/bash-spawn-hook.ts +30 -0
  540. package/examples/extensions/bookmark.ts +50 -0
  541. package/examples/extensions/built-in-tool-renderer.ts +246 -0
  542. package/examples/extensions/claude-rules.ts +86 -0
  543. package/examples/extensions/commands.ts +72 -0
  544. package/examples/extensions/confirm-destructive.ts +59 -0
  545. package/examples/extensions/custom-compaction.ts +127 -0
  546. package/examples/extensions/custom-footer.ts +64 -0
  547. package/examples/extensions/custom-header.ts +73 -0
  548. package/examples/extensions/custom-provider-anthropic/index.ts +604 -0
  549. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
  550. package/examples/extensions/custom-provider-anthropic/package.json +19 -0
  551. package/examples/extensions/custom-provider-gitlab-duo/index.ts +349 -0
  552. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
  553. package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
  554. package/examples/extensions/custom-provider-qwen-cli/index.ts +345 -0
  555. package/examples/extensions/custom-provider-qwen-cli/package.json +16 -0
  556. package/examples/extensions/dirty-repo-guard.ts +56 -0
  557. package/examples/extensions/doom-overlay/README.md +46 -0
  558. package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
  559. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  560. package/examples/extensions/doom-overlay/doom/build.sh +152 -0
  561. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
  562. package/examples/extensions/doom-overlay/doom-component.ts +132 -0
  563. package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
  564. package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
  565. package/examples/extensions/doom-overlay/index.ts +74 -0
  566. package/examples/extensions/doom-overlay/wad-finder.ts +51 -0
  567. package/examples/extensions/dynamic-resources/SKILL.md +8 -0
  568. package/examples/extensions/dynamic-resources/dynamic.json +79 -0
  569. package/examples/extensions/dynamic-resources/dynamic.md +5 -0
  570. package/examples/extensions/dynamic-resources/index.ts +15 -0
  571. package/examples/extensions/dynamic-tools.ts +74 -0
  572. package/examples/extensions/event-bus.ts +43 -0
  573. package/examples/extensions/file-trigger.ts +41 -0
  574. package/examples/extensions/git-checkpoint.ts +53 -0
  575. package/examples/extensions/handoff.ts +153 -0
  576. package/examples/extensions/hello.ts +26 -0
  577. package/examples/extensions/hidden-thinking-label.ts +53 -0
  578. package/examples/extensions/inline-bash.ts +94 -0
  579. package/examples/extensions/input-transform.ts +43 -0
  580. package/examples/extensions/interactive-shell.ts +196 -0
  581. package/examples/extensions/mac-system-theme.ts +47 -0
  582. package/examples/extensions/message-renderer.ts +59 -0
  583. package/examples/extensions/minimal-mode.ts +426 -0
  584. package/examples/extensions/modal-editor.ts +85 -0
  585. package/examples/extensions/model-status.ts +31 -0
  586. package/examples/extensions/notify.ts +55 -0
  587. package/examples/extensions/overlay-qa-tests.ts +1348 -0
  588. package/examples/extensions/overlay-test.ts +150 -0
  589. package/examples/extensions/permission-gate.ts +34 -0
  590. package/examples/extensions/pirate.ts +47 -0
  591. package/examples/extensions/plan-mode/README.md +65 -0
  592. package/examples/extensions/plan-mode/index.ts +340 -0
  593. package/examples/extensions/plan-mode/utils.ts +168 -0
  594. package/examples/extensions/preset.ts +397 -0
  595. package/examples/extensions/protected-paths.ts +30 -0
  596. package/examples/extensions/provider-payload.ts +14 -0
  597. package/examples/extensions/qna.ts +122 -0
  598. package/examples/extensions/question.ts +264 -0
  599. package/examples/extensions/questionnaire.ts +427 -0
  600. package/examples/extensions/rainbow-editor.ts +88 -0
  601. package/examples/extensions/reload-runtime.ts +37 -0
  602. package/examples/extensions/rpc-demo.ts +118 -0
  603. package/examples/extensions/sandbox/index.ts +321 -0
  604. package/examples/extensions/sandbox/package-lock.json +92 -0
  605. package/examples/extensions/sandbox/package.json +19 -0
  606. package/examples/extensions/send-user-message.ts +97 -0
  607. package/examples/extensions/session-name.ts +27 -0
  608. package/examples/extensions/shutdown-command.ts +63 -0
  609. package/examples/extensions/snake.ts +343 -0
  610. package/examples/extensions/space-invaders.ts +560 -0
  611. package/examples/extensions/ssh.ts +220 -0
  612. package/examples/extensions/status-line.ts +32 -0
  613. package/examples/extensions/subagent/README.md +172 -0
  614. package/examples/extensions/subagent/agents/planner.md +37 -0
  615. package/examples/extensions/subagent/agents/reviewer.md +35 -0
  616. package/examples/extensions/subagent/agents/scout.md +50 -0
  617. package/examples/extensions/subagent/agents/worker.md +24 -0
  618. package/examples/extensions/subagent/agents.ts +126 -0
  619. package/examples/extensions/subagent/index.ts +986 -0
  620. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
  621. package/examples/extensions/subagent/prompts/implement.md +10 -0
  622. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
  623. package/examples/extensions/summarize.ts +206 -0
  624. package/examples/extensions/system-prompt-header.ts +17 -0
  625. package/examples/extensions/timed-confirm.ts +70 -0
  626. package/examples/extensions/titlebar-spinner.ts +58 -0
  627. package/examples/extensions/todo.ts +297 -0
  628. package/examples/extensions/tool-override.ts +144 -0
  629. package/examples/extensions/tools.ts +141 -0
  630. package/examples/extensions/trigger-compact.ts +50 -0
  631. package/examples/extensions/truncated-tool.ts +195 -0
  632. package/examples/extensions/widget-placement.ts +9 -0
  633. package/examples/extensions/with-deps/index.ts +32 -0
  634. package/examples/extensions/with-deps/package-lock.json +31 -0
  635. package/examples/extensions/with-deps/package.json +22 -0
  636. package/examples/rpc-extension-ui.ts +632 -0
  637. package/examples/sdk/01-minimal.ts +22 -0
  638. package/examples/sdk/02-custom-model.ts +49 -0
  639. package/examples/sdk/03-custom-prompt.ts +55 -0
  640. package/examples/sdk/04-skills.ts +52 -0
  641. package/examples/sdk/05-tools.ts +56 -0
  642. package/examples/sdk/06-extensions.ts +88 -0
  643. package/examples/sdk/07-context-files.ts +40 -0
  644. package/examples/sdk/08-prompt-templates.ts +48 -0
  645. package/examples/sdk/09-api-keys-and-oauth.ts +48 -0
  646. package/examples/sdk/10-settings.ts +51 -0
  647. package/examples/sdk/11-sessions.ts +48 -0
  648. package/examples/sdk/12-full-control.ts +81 -0
  649. package/examples/sdk/13-session-runtime.ts +49 -0
  650. package/examples/sdk/README.md +145 -0
  651. package/package.json +96 -0
@@ -0,0 +1,267 @@
1
+ import { copyFileSync, existsSync, mkdirSync } from "node:fs";
2
+ import { basename, join, resolve } from "node:path";
3
+ import { getAgentDir } from "../config.js";
4
+ import { AuthStorage } from "./auth-storage.js";
5
+ import { emitSessionShutdownEvent } from "./extensions/runner.js";
6
+ import { ModelRegistry } from "./model-registry.js";
7
+ import { DefaultResourceLoader } from "./resource-loader.js";
8
+ import { createAgentSession } from "./sdk.js";
9
+ import { SessionManager } from "./session-manager.js";
10
+ import { SettingsManager } from "./settings-manager.js";
11
+ /**
12
+ * Create one runtime instance containing an AgentSession plus the cwd-bound
13
+ * services it depends on.
14
+ *
15
+ * Most SDK callers should keep the returned value wrapped in an
16
+ * AgentSessionRuntimeHost instead of holding it directly. The host owns
17
+ * replacing the runtime when switching sessions across files or working
18
+ * directories.
19
+ */
20
+ export async function createAgentSessionRuntime(bootstrap, options) {
21
+ const cwd = options.cwd;
22
+ const agentDir = bootstrap.agentDir ?? getAgentDir();
23
+ const authStorage = bootstrap.authStorage ?? AuthStorage.create(join(agentDir, "auth.json"));
24
+ const settingsManager = SettingsManager.create(cwd, agentDir);
25
+ const modelRegistry = ModelRegistry.create(authStorage, join(agentDir, "models.json"));
26
+ const resourceLoader = options.resourceLoader ??
27
+ (typeof bootstrap.resourceLoader === "function"
28
+ ? await bootstrap.resourceLoader(cwd, agentDir)
29
+ : new DefaultResourceLoader({
30
+ ...(bootstrap.resourceLoader ?? {}),
31
+ cwd,
32
+ agentDir,
33
+ settingsManager,
34
+ }));
35
+ if (!options.resourceLoader) {
36
+ await resourceLoader.reload();
37
+ }
38
+ const extensionsResult = resourceLoader.getExtensions();
39
+ for (const { name, config } of extensionsResult.runtime.pendingProviderRegistrations) {
40
+ modelRegistry.registerProvider(name, config);
41
+ }
42
+ extensionsResult.runtime.pendingProviderRegistrations = [];
43
+ const created = await createAgentSession({
44
+ cwd,
45
+ agentDir,
46
+ authStorage,
47
+ modelRegistry,
48
+ settingsManager,
49
+ resourceLoader,
50
+ sessionManager: options.sessionManager,
51
+ model: bootstrap.model,
52
+ thinkingLevel: bootstrap.thinkingLevel,
53
+ scopedModels: bootstrap.scopedModels,
54
+ tools: bootstrap.tools,
55
+ customTools: bootstrap.customTools,
56
+ sessionStartEvent: options.sessionStartEvent,
57
+ });
58
+ return {
59
+ ...created,
60
+ cwd,
61
+ agentDir,
62
+ authStorage,
63
+ modelRegistry,
64
+ settingsManager,
65
+ resourceLoader,
66
+ sessionManager: created.session.sessionManager,
67
+ };
68
+ }
69
+ function extractUserMessageText(content) {
70
+ if (typeof content === "string") {
71
+ return content;
72
+ }
73
+ return content
74
+ .filter((part) => part.type === "text" && typeof part.text === "string")
75
+ .map((part) => part.text)
76
+ .join("");
77
+ }
78
+ /**
79
+ * Stable wrapper around a replaceable AgentSession runtime.
80
+ *
81
+ * Use this when your application needs `/new`, `/resume`, `/fork`, or import
82
+ * behavior. After replacement, read `session` again and rebind any
83
+ * session-local subscriptions or extension bindings.
84
+ */
85
+ export class AgentSessionRuntimeHost {
86
+ bootstrap;
87
+ runtime;
88
+ constructor(bootstrap, runtime) {
89
+ this.bootstrap = bootstrap;
90
+ this.runtime = runtime;
91
+ }
92
+ /** The currently active session instance. Re-read this after runtime replacement. */
93
+ get session() {
94
+ return this.runtime.session;
95
+ }
96
+ async emitBeforeSwitch(reason, targetSessionFile) {
97
+ const runner = this.runtime.session.extensionRunner;
98
+ if (!runner?.hasHandlers("session_before_switch")) {
99
+ return { cancelled: false };
100
+ }
101
+ const result = await runner.emit({
102
+ type: "session_before_switch",
103
+ reason,
104
+ targetSessionFile,
105
+ });
106
+ return { cancelled: result?.cancel === true };
107
+ }
108
+ async emitBeforeFork(entryId) {
109
+ const runner = this.runtime.session.extensionRunner;
110
+ if (!runner?.hasHandlers("session_before_fork")) {
111
+ return { cancelled: false };
112
+ }
113
+ const result = await runner.emit({
114
+ type: "session_before_fork",
115
+ entryId,
116
+ });
117
+ return { cancelled: result?.cancel === true };
118
+ }
119
+ async replace(options) {
120
+ const nextRuntime = await createAgentSessionRuntime(this.bootstrap, options);
121
+ await emitSessionShutdownEvent(this.runtime.session.extensionRunner);
122
+ this.runtime.session.dispose();
123
+ if (process.cwd() !== nextRuntime.cwd) {
124
+ process.chdir(nextRuntime.cwd);
125
+ }
126
+ this.runtime = nextRuntime;
127
+ }
128
+ /**
129
+ * Replace the active runtime with one opened from an existing session file.
130
+ *
131
+ * Emits `session_before_switch` before replacement and returns
132
+ * `{ cancelled: true }` if an extension vetoes the switch.
133
+ */
134
+ async switchSession(sessionPath) {
135
+ const beforeResult = await this.emitBeforeSwitch("resume", sessionPath);
136
+ if (beforeResult.cancelled) {
137
+ return beforeResult;
138
+ }
139
+ const previousSessionFile = this.runtime.session.sessionFile;
140
+ const sessionManager = SessionManager.open(sessionPath);
141
+ await this.replace({
142
+ cwd: sessionManager.getCwd(),
143
+ sessionManager,
144
+ sessionStartEvent: { type: "session_start", reason: "resume", previousSessionFile },
145
+ });
146
+ return { cancelled: false };
147
+ }
148
+ /**
149
+ * Replace the active runtime with a fresh session in the current cwd.
150
+ *
151
+ * `setup` runs after replacement against the new session manager, which lets
152
+ * callers seed entries before normal use begins.
153
+ */
154
+ async newSession(options) {
155
+ const beforeResult = await this.emitBeforeSwitch("new");
156
+ if (beforeResult.cancelled) {
157
+ return beforeResult;
158
+ }
159
+ const previousSessionFile = this.runtime.session.sessionFile;
160
+ const sessionDir = this.runtime.sessionManager.getSessionDir();
161
+ const sessionManager = SessionManager.create(this.runtime.cwd, sessionDir);
162
+ if (options?.parentSession) {
163
+ sessionManager.newSession({ parentSession: options.parentSession });
164
+ }
165
+ await this.replace({
166
+ cwd: this.runtime.cwd,
167
+ sessionManager,
168
+ sessionStartEvent: { type: "session_start", reason: "new", previousSessionFile },
169
+ });
170
+ if (options?.setup) {
171
+ await options.setup(this.runtime.sessionManager);
172
+ this.runtime.session.agent.state.messages = this.runtime.sessionManager.buildSessionContext().messages;
173
+ }
174
+ return { cancelled: false };
175
+ }
176
+ /**
177
+ * Replace the active runtime with a fork rooted at the given user-message
178
+ * entry.
179
+ *
180
+ * Returns the selected user text so UIs can restore it into the editor after
181
+ * the fork completes.
182
+ */
183
+ async fork(entryId) {
184
+ const beforeResult = await this.emitBeforeFork(entryId);
185
+ if (beforeResult.cancelled) {
186
+ return { cancelled: true };
187
+ }
188
+ const selectedEntry = this.runtime.sessionManager.getEntry(entryId);
189
+ if (!selectedEntry || selectedEntry.type !== "message" || selectedEntry.message.role !== "user") {
190
+ throw new Error("Invalid entry ID for forking");
191
+ }
192
+ const previousSessionFile = this.runtime.session.sessionFile;
193
+ const selectedText = extractUserMessageText(selectedEntry.message.content);
194
+ if (this.runtime.sessionManager.isPersisted()) {
195
+ const currentSessionFile = this.runtime.session.sessionFile;
196
+ const sessionDir = this.runtime.sessionManager.getSessionDir();
197
+ if (!selectedEntry.parentId) {
198
+ const sessionManager = SessionManager.create(this.runtime.cwd, sessionDir);
199
+ sessionManager.newSession({ parentSession: currentSessionFile });
200
+ await this.replace({
201
+ cwd: this.runtime.cwd,
202
+ sessionManager,
203
+ sessionStartEvent: { type: "session_start", reason: "fork", previousSessionFile },
204
+ });
205
+ return { cancelled: false, selectedText };
206
+ }
207
+ const sourceManager = SessionManager.open(currentSessionFile, sessionDir);
208
+ const forkedSessionPath = sourceManager.createBranchedSession(selectedEntry.parentId);
209
+ const sessionManager = SessionManager.open(forkedSessionPath, sessionDir);
210
+ await this.replace({
211
+ cwd: sessionManager.getCwd(),
212
+ sessionManager,
213
+ sessionStartEvent: { type: "session_start", reason: "fork", previousSessionFile },
214
+ });
215
+ return { cancelled: false, selectedText };
216
+ }
217
+ const sessionManager = this.runtime.sessionManager;
218
+ if (!selectedEntry.parentId) {
219
+ sessionManager.newSession({ parentSession: this.runtime.session.sessionFile });
220
+ }
221
+ else {
222
+ sessionManager.createBranchedSession(selectedEntry.parentId);
223
+ }
224
+ await this.replace({
225
+ cwd: this.runtime.cwd,
226
+ sessionManager,
227
+ sessionStartEvent: { type: "session_start", reason: "fork", previousSessionFile },
228
+ });
229
+ return { cancelled: false, selectedText };
230
+ }
231
+ /**
232
+ * Import a JSONL session file into the current session directory and replace
233
+ * the active runtime with the imported session.
234
+ */
235
+ async importFromJsonl(inputPath) {
236
+ const resolvedPath = resolve(inputPath);
237
+ if (!existsSync(resolvedPath)) {
238
+ throw new Error(`File not found: ${resolvedPath}`);
239
+ }
240
+ const sessionDir = this.runtime.sessionManager.getSessionDir();
241
+ if (!existsSync(sessionDir)) {
242
+ mkdirSync(sessionDir, { recursive: true });
243
+ }
244
+ const destinationPath = join(sessionDir, basename(resolvedPath));
245
+ const beforeResult = await this.emitBeforeSwitch("resume", destinationPath);
246
+ if (beforeResult.cancelled) {
247
+ return beforeResult;
248
+ }
249
+ const previousSessionFile = this.runtime.session.sessionFile;
250
+ if (resolve(destinationPath) !== resolvedPath) {
251
+ copyFileSync(resolvedPath, destinationPath);
252
+ }
253
+ const sessionManager = SessionManager.open(destinationPath, sessionDir);
254
+ await this.replace({
255
+ cwd: sessionManager.getCwd(),
256
+ sessionManager,
257
+ sessionStartEvent: { type: "session_start", reason: "resume", previousSessionFile },
258
+ });
259
+ return { cancelled: false };
260
+ }
261
+ /** Emit session shutdown for the active runtime and dispose it permanently. */
262
+ async dispose() {
263
+ await emitSessionShutdownEvent(this.runtime.session.extensionRunner);
264
+ this.runtime.session.dispose();
265
+ }
266
+ }
267
+ //# sourceMappingURL=agent-session-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-session-runtime.js","sourceRoot":"","sources":["../../src/core/agent-session-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { copyFileSync, existsSync, mkdirSync } from \"node:fs\";\nimport { basename, join, resolve } from \"node:path\";\nimport type { ThinkingLevel } from \"@mariozechner/pi-agent-core\";\nimport type { Model } from \"@mariozechner/pi-ai\";\nimport { getAgentDir } from \"../config.js\";\nimport { AuthStorage } from \"./auth-storage.js\";\nimport type { SessionStartEvent, ToolDefinition } from \"./extensions/index.js\";\nimport { emitSessionShutdownEvent } from \"./extensions/runner.js\";\nimport { ModelRegistry } from \"./model-registry.js\";\nimport { DefaultResourceLoader, type DefaultResourceLoaderOptions, type ResourceLoader } from \"./resource-loader.js\";\nimport { type CreateAgentSessionResult, createAgentSession } from \"./sdk.js\";\nimport { SessionManager } from \"./session-manager.js\";\nimport { SettingsManager } from \"./settings-manager.js\";\nimport type { Tool } from \"./tools/index.js\";\n\n/**\n * Stable bootstrap inputs reused whenever the active runtime is replaced.\n *\n * Use this for process-level wiring that should survive `/new`, `/resume`,\n * `/fork`, and import flows. Session-local state belongs in the session file\n * or in settings, not here.\n */\nexport interface AgentSessionRuntimeBootstrap {\n\t/** Agent directory used for auth, models, settings, sessions, and resource discovery. */\n\tagentDir?: string;\n\t/** Optional shared auth storage. If omitted, file-backed storage under agentDir is used. */\n\tauthStorage?: AuthStorage;\n\t/** Initial model for the first created session runtime. */\n\tmodel?: Model<any>;\n\t/** Initial thinking level for the first created session runtime. */\n\tthinkingLevel?: ThinkingLevel;\n\t/** Optional scoped model list for model cycling and selection. */\n\tscopedModels?: Array<{ model: Model<any>; thinkingLevel?: ThinkingLevel }>;\n\t/** Built-in tool set override. */\n\ttools?: Tool[];\n\t/** Additional custom tools registered directly through the SDK. */\n\tcustomTools?: ToolDefinition[];\n\t/**\n\t * Resource loader input used for each created runtime.\n\t *\n\t * Pass either a factory that creates a fully custom ResourceLoader for the\n\t * target cwd, or DefaultResourceLoader options without cwd/agentDir/\n\t * settingsManager, which are supplied by the runtime.\n\t */\n\tresourceLoader?:\n\t\t| ((cwd: string, agentDir: string) => Promise<ResourceLoader>)\n\t\t| Omit<DefaultResourceLoaderOptions, \"cwd\" | \"agentDir\" | \"settingsManager\">;\n}\n\n/** Options for creating one concrete runtime instance. */\nexport interface CreateAgentSessionRuntimeOptions {\n\t/** Working directory for this runtime instance. */\n\tcwd: string;\n\t/** Optional preselected session manager. If omitted, normal session resolution applies. */\n\tsessionManager?: SessionManager;\n\t/** Optional preloaded resource loader to reuse instead of creating and reloading one. */\n\tresourceLoader?: ResourceLoader;\n\t/** Optional session_start metadata to emit when the runtime binds extensions. */\n\tsessionStartEvent?: SessionStartEvent;\n}\n\ntype AgentSessionRuntime = CreateAgentSessionResult & {\n\tcwd: string;\n\tagentDir: string;\n\tauthStorage: AuthStorage;\n\tmodelRegistry: ModelRegistry;\n\tsettingsManager: SettingsManager;\n\tresourceLoader: ResourceLoader;\n\tsessionManager: SessionManager;\n};\n\n/**\n * Create one runtime instance containing an AgentSession plus the cwd-bound\n * services it depends on.\n *\n * Most SDK callers should keep the returned value wrapped in an\n * AgentSessionRuntimeHost instead of holding it directly. The host owns\n * replacing the runtime when switching sessions across files or working\n * directories.\n */\nexport async function createAgentSessionRuntime(\n\tbootstrap: AgentSessionRuntimeBootstrap,\n\toptions: CreateAgentSessionRuntimeOptions,\n): Promise<AgentSessionRuntime> {\n\tconst cwd = options.cwd;\n\tconst agentDir = bootstrap.agentDir ?? getAgentDir();\n\tconst authStorage = bootstrap.authStorage ?? AuthStorage.create(join(agentDir, \"auth.json\"));\n\tconst settingsManager = SettingsManager.create(cwd, agentDir);\n\tconst modelRegistry = ModelRegistry.create(authStorage, join(agentDir, \"models.json\"));\n\tconst resourceLoader =\n\t\toptions.resourceLoader ??\n\t\t(typeof bootstrap.resourceLoader === \"function\"\n\t\t\t? await bootstrap.resourceLoader(cwd, agentDir)\n\t\t\t: new DefaultResourceLoader({\n\t\t\t\t\t...(bootstrap.resourceLoader ?? {}),\n\t\t\t\t\tcwd,\n\t\t\t\t\tagentDir,\n\t\t\t\t\tsettingsManager,\n\t\t\t\t}));\n\tif (!options.resourceLoader) {\n\t\tawait resourceLoader.reload();\n\t}\n\n\tconst extensionsResult = resourceLoader.getExtensions();\n\tfor (const { name, config } of extensionsResult.runtime.pendingProviderRegistrations) {\n\t\tmodelRegistry.registerProvider(name, config);\n\t}\n\textensionsResult.runtime.pendingProviderRegistrations = [];\n\n\tconst created = await createAgentSession({\n\t\tcwd,\n\t\tagentDir,\n\t\tauthStorage,\n\t\tmodelRegistry,\n\t\tsettingsManager,\n\t\tresourceLoader,\n\t\tsessionManager: options.sessionManager,\n\t\tmodel: bootstrap.model,\n\t\tthinkingLevel: bootstrap.thinkingLevel,\n\t\tscopedModels: bootstrap.scopedModels,\n\t\ttools: bootstrap.tools,\n\t\tcustomTools: bootstrap.customTools,\n\t\tsessionStartEvent: options.sessionStartEvent,\n\t});\n\n\treturn {\n\t\t...created,\n\t\tcwd,\n\t\tagentDir,\n\t\tauthStorage,\n\t\tmodelRegistry,\n\t\tsettingsManager,\n\t\tresourceLoader,\n\t\tsessionManager: created.session.sessionManager,\n\t};\n}\n\nfunction extractUserMessageText(content: string | Array<{ type: string; text?: string }>): string {\n\tif (typeof content === \"string\") {\n\t\treturn content;\n\t}\n\n\treturn content\n\t\t.filter((part): part is { type: \"text\"; text: string } => part.type === \"text\" && typeof part.text === \"string\")\n\t\t.map((part) => part.text)\n\t\t.join(\"\");\n}\n\n/**\n * Stable wrapper around a replaceable AgentSession runtime.\n *\n * Use this when your application needs `/new`, `/resume`, `/fork`, or import\n * behavior. After replacement, read `session` again and rebind any\n * session-local subscriptions or extension bindings.\n */\nexport class AgentSessionRuntimeHost {\n\tconstructor(\n\t\tprivate readonly bootstrap: AgentSessionRuntimeBootstrap,\n\t\tprivate runtime: AgentSessionRuntime,\n\t) {}\n\n\t/** The currently active session instance. Re-read this after runtime replacement. */\n\tget session() {\n\t\treturn this.runtime.session;\n\t}\n\n\tprivate async emitBeforeSwitch(\n\t\treason: \"new\" | \"resume\",\n\t\ttargetSessionFile?: string,\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst runner = this.runtime.session.extensionRunner;\n\t\tif (!runner?.hasHandlers(\"session_before_switch\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_switch\",\n\t\t\treason,\n\t\t\ttargetSessionFile,\n\t\t});\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate async emitBeforeFork(entryId: string): Promise<{ cancelled: boolean }> {\n\t\tconst runner = this.runtime.session.extensionRunner;\n\t\tif (!runner?.hasHandlers(\"session_before_fork\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_fork\",\n\t\t\tentryId,\n\t\t});\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate async replace(options: CreateAgentSessionRuntimeOptions): Promise<void> {\n\t\tconst nextRuntime = await createAgentSessionRuntime(this.bootstrap, options);\n\t\tawait emitSessionShutdownEvent(this.runtime.session.extensionRunner);\n\t\tthis.runtime.session.dispose();\n\t\tif (process.cwd() !== nextRuntime.cwd) {\n\t\t\tprocess.chdir(nextRuntime.cwd);\n\t\t}\n\t\tthis.runtime = nextRuntime;\n\t}\n\n\t/**\n\t * Replace the active runtime with one opened from an existing session file.\n\t *\n\t * Emits `session_before_switch` before replacement and returns\n\t * `{ cancelled: true }` if an extension vetoes the switch.\n\t */\n\tasync switchSession(sessionPath: string): Promise<{ cancelled: boolean }> {\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", sessionPath);\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn beforeResult;\n\t\t}\n\n\t\tconst previousSessionFile = this.runtime.session.sessionFile;\n\t\tconst sessionManager = SessionManager.open(sessionPath);\n\t\tawait this.replace({\n\t\t\tcwd: sessionManager.getCwd(),\n\t\t\tsessionManager,\n\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"resume\", previousSessionFile },\n\t\t});\n\t\treturn { cancelled: false };\n\t}\n\n\t/**\n\t * Replace the active runtime with a fresh session in the current cwd.\n\t *\n\t * `setup` runs after replacement against the new session manager, which lets\n\t * callers seed entries before normal use begins.\n\t */\n\tasync newSession(options?: {\n\t\t/** Optional parent session path recorded in the new session header. */\n\t\tparentSession?: string;\n\t\t/** Optional callback for seeding the new session manager after replacement. */\n\t\tsetup?: (sessionManager: SessionManager) => Promise<void>;\n\t}): Promise<{ cancelled: boolean }> {\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"new\");\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn beforeResult;\n\t\t}\n\n\t\tconst previousSessionFile = this.runtime.session.sessionFile;\n\t\tconst sessionDir = this.runtime.sessionManager.getSessionDir();\n\t\tconst sessionManager = SessionManager.create(this.runtime.cwd, sessionDir);\n\t\tif (options?.parentSession) {\n\t\t\tsessionManager.newSession({ parentSession: options.parentSession });\n\t\t}\n\t\tawait this.replace({\n\t\t\tcwd: this.runtime.cwd,\n\t\t\tsessionManager,\n\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"new\", previousSessionFile },\n\t\t});\n\t\tif (options?.setup) {\n\t\t\tawait options.setup(this.runtime.sessionManager);\n\t\t\tthis.runtime.session.agent.state.messages = this.runtime.sessionManager.buildSessionContext().messages;\n\t\t}\n\t\treturn { cancelled: false };\n\t}\n\n\t/**\n\t * Replace the active runtime with a fork rooted at the given user-message\n\t * entry.\n\t *\n\t * Returns the selected user text so UIs can restore it into the editor after\n\t * the fork completes.\n\t */\n\tasync fork(entryId: string): Promise<{ cancelled: boolean; selectedText?: string }> {\n\t\tconst beforeResult = await this.emitBeforeFork(entryId);\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn { cancelled: true };\n\t\t}\n\n\t\tconst selectedEntry = this.runtime.sessionManager.getEntry(entryId);\n\t\tif (!selectedEntry || selectedEntry.type !== \"message\" || selectedEntry.message.role !== \"user\") {\n\t\t\tthrow new Error(\"Invalid entry ID for forking\");\n\t\t}\n\n\t\tconst previousSessionFile = this.runtime.session.sessionFile;\n\t\tconst selectedText = extractUserMessageText(selectedEntry.message.content);\n\t\tif (this.runtime.sessionManager.isPersisted()) {\n\t\t\tconst currentSessionFile = this.runtime.session.sessionFile!;\n\t\t\tconst sessionDir = this.runtime.sessionManager.getSessionDir();\n\t\t\tif (!selectedEntry.parentId) {\n\t\t\t\tconst sessionManager = SessionManager.create(this.runtime.cwd, sessionDir);\n\t\t\t\tsessionManager.newSession({ parentSession: currentSessionFile });\n\t\t\t\tawait this.replace({\n\t\t\t\t\tcwd: this.runtime.cwd,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"fork\", previousSessionFile },\n\t\t\t\t});\n\t\t\t\treturn { cancelled: false, selectedText };\n\t\t\t}\n\n\t\t\tconst sourceManager = SessionManager.open(currentSessionFile, sessionDir);\n\t\t\tconst forkedSessionPath = sourceManager.createBranchedSession(selectedEntry.parentId)!;\n\t\t\tconst sessionManager = SessionManager.open(forkedSessionPath, sessionDir);\n\t\t\tawait this.replace({\n\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\tsessionManager,\n\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"fork\", previousSessionFile },\n\t\t\t});\n\t\t\treturn { cancelled: false, selectedText };\n\t\t}\n\n\t\tconst sessionManager = this.runtime.sessionManager;\n\t\tif (!selectedEntry.parentId) {\n\t\t\tsessionManager.newSession({ parentSession: this.runtime.session.sessionFile });\n\t\t} else {\n\t\t\tsessionManager.createBranchedSession(selectedEntry.parentId);\n\t\t}\n\t\tawait this.replace({\n\t\t\tcwd: this.runtime.cwd,\n\t\t\tsessionManager,\n\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"fork\", previousSessionFile },\n\t\t});\n\t\treturn { cancelled: false, selectedText };\n\t}\n\n\t/**\n\t * Import a JSONL session file into the current session directory and replace\n\t * the active runtime with the imported session.\n\t */\n\tasync importFromJsonl(inputPath: string): Promise<{ cancelled: boolean }> {\n\t\tconst resolvedPath = resolve(inputPath);\n\t\tif (!existsSync(resolvedPath)) {\n\t\t\tthrow new Error(`File not found: ${resolvedPath}`);\n\t\t}\n\n\t\tconst sessionDir = this.runtime.sessionManager.getSessionDir();\n\t\tif (!existsSync(sessionDir)) {\n\t\t\tmkdirSync(sessionDir, { recursive: true });\n\t\t}\n\n\t\tconst destinationPath = join(sessionDir, basename(resolvedPath));\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", destinationPath);\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn beforeResult;\n\t\t}\n\n\t\tconst previousSessionFile = this.runtime.session.sessionFile;\n\t\tif (resolve(destinationPath) !== resolvedPath) {\n\t\t\tcopyFileSync(resolvedPath, destinationPath);\n\t\t}\n\n\t\tconst sessionManager = SessionManager.open(destinationPath, sessionDir);\n\t\tawait this.replace({\n\t\t\tcwd: sessionManager.getCwd(),\n\t\t\tsessionManager,\n\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"resume\", previousSessionFile },\n\t\t});\n\t\treturn { cancelled: false };\n\t}\n\n\t/** Emit session shutdown for the active runtime and dispose it permanently. */\n\tasync dispose(): Promise<void> {\n\t\tawait emitSessionShutdownEvent(this.runtime.session.extensionRunner);\n\t\tthis.runtime.session.dispose();\n\t}\n}\n"]}