@leanandmean/coding-agent 0.74.1-scramjet.6

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 (727) hide show
  1. package/CHANGELOG.md +4226 -0
  2. package/README.md +625 -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 +9 -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/bun/restore-sandbox-env.d.ts +13 -0
  12. package/dist/bun/restore-sandbox-env.d.ts.map +1 -0
  13. package/dist/bun/restore-sandbox-env.js +32 -0
  14. package/dist/bun/restore-sandbox-env.js.map +1 -0
  15. package/dist/cli/args.d.ts +59 -0
  16. package/dist/cli/args.d.ts.map +1 -0
  17. package/dist/cli/args.js +358 -0
  18. package/dist/cli/args.js.map +1 -0
  19. package/dist/cli/config-selector.d.ts +14 -0
  20. package/dist/cli/config-selector.d.ts.map +1 -0
  21. package/dist/cli/config-selector.js +31 -0
  22. package/dist/cli/config-selector.js.map +1 -0
  23. package/dist/cli/file-processor.d.ts +15 -0
  24. package/dist/cli/file-processor.d.ts.map +1 -0
  25. package/dist/cli/file-processor.js +83 -0
  26. package/dist/cli/file-processor.js.map +1 -0
  27. package/dist/cli/initial-message.d.ts +18 -0
  28. package/dist/cli/initial-message.d.ts.map +1 -0
  29. package/dist/cli/initial-message.js +22 -0
  30. package/dist/cli/initial-message.js.map +1 -0
  31. package/dist/cli/list-models.d.ts +9 -0
  32. package/dist/cli/list-models.d.ts.map +1 -0
  33. package/dist/cli/list-models.js +98 -0
  34. package/dist/cli/list-models.js.map +1 -0
  35. package/dist/cli/session-picker.d.ts +9 -0
  36. package/dist/cli/session-picker.d.ts.map +1 -0
  37. package/dist/cli/session-picker.js +35 -0
  38. package/dist/cli/session-picker.js.map +1 -0
  39. package/dist/cli.d.ts +3 -0
  40. package/dist/cli.d.ts.map +1 -0
  41. package/dist/cli.js +28 -0
  42. package/dist/cli.js.map +1 -0
  43. package/dist/config.d.ts +90 -0
  44. package/dist/config.d.ts.map +1 -0
  45. package/dist/config.js +403 -0
  46. package/dist/config.js.map +1 -0
  47. package/dist/core/agent-session-runtime.d.ts +117 -0
  48. package/dist/core/agent-session-runtime.d.ts.map +1 -0
  49. package/dist/core/agent-session-runtime.js +300 -0
  50. package/dist/core/agent-session-runtime.js.map +1 -0
  51. package/dist/core/agent-session-services.d.ts +87 -0
  52. package/dist/core/agent-session-services.d.ts.map +1 -0
  53. package/dist/core/agent-session-services.js +118 -0
  54. package/dist/core/agent-session-services.js.map +1 -0
  55. package/dist/core/agent-session.d.ts +614 -0
  56. package/dist/core/agent-session.d.ts.map +1 -0
  57. package/dist/core/agent-session.js +2559 -0
  58. package/dist/core/agent-session.js.map +1 -0
  59. package/dist/core/auth-guidance.d.ts +5 -0
  60. package/dist/core/auth-guidance.d.ts.map +1 -0
  61. package/dist/core/auth-guidance.js +21 -0
  62. package/dist/core/auth-guidance.js.map +1 -0
  63. package/dist/core/auth-storage.d.ts +141 -0
  64. package/dist/core/auth-storage.d.ts.map +1 -0
  65. package/dist/core/auth-storage.js +441 -0
  66. package/dist/core/auth-storage.js.map +1 -0
  67. package/dist/core/bash-executor.d.ts +32 -0
  68. package/dist/core/bash-executor.d.ts.map +1 -0
  69. package/dist/core/bash-executor.js +111 -0
  70. package/dist/core/bash-executor.js.map +1 -0
  71. package/dist/core/compaction/branch-summarization.d.ts +88 -0
  72. package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  73. package/dist/core/compaction/branch-summarization.js +243 -0
  74. package/dist/core/compaction/branch-summarization.js.map +1 -0
  75. package/dist/core/compaction/compaction.d.ts +121 -0
  76. package/dist/core/compaction/compaction.d.ts.map +1 -0
  77. package/dist/core/compaction/compaction.js +615 -0
  78. package/dist/core/compaction/compaction.js.map +1 -0
  79. package/dist/core/compaction/index.d.ts +7 -0
  80. package/dist/core/compaction/index.d.ts.map +1 -0
  81. package/dist/core/compaction/index.js +7 -0
  82. package/dist/core/compaction/index.js.map +1 -0
  83. package/dist/core/compaction/utils.d.ts +38 -0
  84. package/dist/core/compaction/utils.d.ts.map +1 -0
  85. package/dist/core/compaction/utils.js +153 -0
  86. package/dist/core/compaction/utils.js.map +1 -0
  87. package/dist/core/defaults.d.ts +3 -0
  88. package/dist/core/defaults.d.ts.map +1 -0
  89. package/dist/core/defaults.js +2 -0
  90. package/dist/core/defaults.js.map +1 -0
  91. package/dist/core/diagnostics.d.ts +15 -0
  92. package/dist/core/diagnostics.d.ts.map +1 -0
  93. package/dist/core/diagnostics.js +2 -0
  94. package/dist/core/diagnostics.js.map +1 -0
  95. package/dist/core/event-bus.d.ts +9 -0
  96. package/dist/core/event-bus.d.ts.map +1 -0
  97. package/dist/core/event-bus.js +25 -0
  98. package/dist/core/event-bus.js.map +1 -0
  99. package/dist/core/exec.d.ts +29 -0
  100. package/dist/core/exec.d.ts.map +1 -0
  101. package/dist/core/exec.js +75 -0
  102. package/dist/core/exec.js.map +1 -0
  103. package/dist/core/export-html/ansi-to-html.d.ts +22 -0
  104. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  105. package/dist/core/export-html/ansi-to-html.js +249 -0
  106. package/dist/core/export-html/ansi-to-html.js.map +1 -0
  107. package/dist/core/export-html/index.d.ts +37 -0
  108. package/dist/core/export-html/index.d.ts.map +1 -0
  109. package/dist/core/export-html/index.js +225 -0
  110. package/dist/core/export-html/index.js.map +1 -0
  111. package/dist/core/export-html/template.css +1066 -0
  112. package/dist/core/export-html/template.html +55 -0
  113. package/dist/core/export-html/template.js +1834 -0
  114. package/dist/core/export-html/tool-renderer.d.ts +34 -0
  115. package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  116. package/dist/core/export-html/tool-renderer.js +108 -0
  117. package/dist/core/export-html/tool-renderer.js.map +1 -0
  118. package/dist/core/export-html/vendor/highlight.min.js +1213 -0
  119. package/dist/core/export-html/vendor/marked.min.js +6 -0
  120. package/dist/core/extensions/index.d.ts +12 -0
  121. package/dist/core/extensions/index.d.ts.map +1 -0
  122. package/dist/core/extensions/index.js +9 -0
  123. package/dist/core/extensions/index.js.map +1 -0
  124. package/dist/core/extensions/loader.d.ts +24 -0
  125. package/dist/core/extensions/loader.d.ts.map +1 -0
  126. package/dist/core/extensions/loader.js +499 -0
  127. package/dist/core/extensions/loader.js.map +1 -0
  128. package/dist/core/extensions/runner.d.ts +172 -0
  129. package/dist/core/extensions/runner.d.ts.map +1 -0
  130. package/dist/core/extensions/runner.js +927 -0
  131. package/dist/core/extensions/runner.js.map +1 -0
  132. package/dist/core/extensions/types.d.ts +1213 -0
  133. package/dist/core/extensions/types.d.ts.map +1 -0
  134. package/dist/core/extensions/types.js +45 -0
  135. package/dist/core/extensions/types.js.map +1 -0
  136. package/dist/core/extensions/wrapper.d.ts +20 -0
  137. package/dist/core/extensions/wrapper.d.ts.map +1 -0
  138. package/dist/core/extensions/wrapper.js +22 -0
  139. package/dist/core/extensions/wrapper.js.map +1 -0
  140. package/dist/core/footer-data-provider.d.ts +52 -0
  141. package/dist/core/footer-data-provider.d.ts.map +1 -0
  142. package/dist/core/footer-data-provider.js +310 -0
  143. package/dist/core/footer-data-provider.js.map +1 -0
  144. package/dist/core/index.d.ts +12 -0
  145. package/dist/core/index.d.ts.map +1 -0
  146. package/dist/core/index.js +12 -0
  147. package/dist/core/index.js.map +1 -0
  148. package/dist/core/keybindings.d.ts +353 -0
  149. package/dist/core/keybindings.d.ts.map +1 -0
  150. package/dist/core/keybindings.js +295 -0
  151. package/dist/core/keybindings.js.map +1 -0
  152. package/dist/core/messages.d.ts +77 -0
  153. package/dist/core/messages.d.ts.map +1 -0
  154. package/dist/core/messages.js +123 -0
  155. package/dist/core/messages.js.map +1 -0
  156. package/dist/core/model-registry.d.ts +151 -0
  157. package/dist/core/model-registry.d.ts.map +1 -0
  158. package/dist/core/model-registry.js +729 -0
  159. package/dist/core/model-registry.js.map +1 -0
  160. package/dist/core/model-resolver.d.ts +110 -0
  161. package/dist/core/model-resolver.d.ts.map +1 -0
  162. package/dist/core/model-resolver.js +495 -0
  163. package/dist/core/model-resolver.js.map +1 -0
  164. package/dist/core/output-guard.d.ts +6 -0
  165. package/dist/core/output-guard.d.ts.map +1 -0
  166. package/dist/core/output-guard.js +59 -0
  167. package/dist/core/output-guard.js.map +1 -0
  168. package/dist/core/package-manager.d.ts +199 -0
  169. package/dist/core/package-manager.d.ts.map +1 -0
  170. package/dist/core/package-manager.js +1997 -0
  171. package/dist/core/package-manager.js.map +1 -0
  172. package/dist/core/prompt-templates.d.ts +52 -0
  173. package/dist/core/prompt-templates.d.ts.map +1 -0
  174. package/dist/core/prompt-templates.js +252 -0
  175. package/dist/core/prompt-templates.js.map +1 -0
  176. package/dist/core/provider-display-names.d.ts +2 -0
  177. package/dist/core/provider-display-names.d.ts.map +1 -0
  178. package/dist/core/provider-display-names.js +33 -0
  179. package/dist/core/provider-display-names.js.map +1 -0
  180. package/dist/core/resolve-config-value.d.ts +23 -0
  181. package/dist/core/resolve-config-value.d.ts.map +1 -0
  182. package/dist/core/resolve-config-value.js +126 -0
  183. package/dist/core/resolve-config-value.js.map +1 -0
  184. package/dist/core/resource-loader.d.ts +196 -0
  185. package/dist/core/resource-loader.d.ts.map +1 -0
  186. package/dist/core/resource-loader.js +739 -0
  187. package/dist/core/resource-loader.js.map +1 -0
  188. package/dist/core/scramjet-command-parser.d.ts +8 -0
  189. package/dist/core/scramjet-command-parser.d.ts.map +1 -0
  190. package/dist/core/scramjet-command-parser.js +18 -0
  191. package/dist/core/scramjet-command-parser.js.map +1 -0
  192. package/dist/core/sdk.d.ts +114 -0
  193. package/dist/core/sdk.d.ts.map +1 -0
  194. package/dist/core/sdk.js +316 -0
  195. package/dist/core/sdk.js.map +1 -0
  196. package/dist/core/session-cwd.d.ts +19 -0
  197. package/dist/core/session-cwd.d.ts.map +1 -0
  198. package/dist/core/session-cwd.js +38 -0
  199. package/dist/core/session-cwd.js.map +1 -0
  200. package/dist/core/session-manager.d.ts +333 -0
  201. package/dist/core/session-manager.d.ts.map +1 -0
  202. package/dist/core/session-manager.js +1139 -0
  203. package/dist/core/session-manager.js.map +1 -0
  204. package/dist/core/settings-manager.d.ts +261 -0
  205. package/dist/core/settings-manager.d.ts.map +1 -0
  206. package/dist/core/settings-manager.js +782 -0
  207. package/dist/core/settings-manager.js.map +1 -0
  208. package/dist/core/skills.d.ts +60 -0
  209. package/dist/core/skills.d.ts.map +1 -0
  210. package/dist/core/skills.js +401 -0
  211. package/dist/core/skills.js.map +1 -0
  212. package/dist/core/slash-commands.d.ts +14 -0
  213. package/dist/core/slash-commands.d.ts.map +1 -0
  214. package/dist/core/slash-commands.js +25 -0
  215. package/dist/core/slash-commands.js.map +1 -0
  216. package/dist/core/source-info.d.ts +18 -0
  217. package/dist/core/source-info.d.ts.map +1 -0
  218. package/dist/core/source-info.js +19 -0
  219. package/dist/core/source-info.js.map +1 -0
  220. package/dist/core/system-prompt.d.ts +38 -0
  221. package/dist/core/system-prompt.d.ts.map +1 -0
  222. package/dist/core/system-prompt.js +120 -0
  223. package/dist/core/system-prompt.js.map +1 -0
  224. package/dist/core/telemetry.d.ts +3 -0
  225. package/dist/core/telemetry.d.ts.map +1 -0
  226. package/dist/core/telemetry.js +10 -0
  227. package/dist/core/telemetry.js.map +1 -0
  228. package/dist/core/timings.d.ts +8 -0
  229. package/dist/core/timings.d.ts.map +1 -0
  230. package/dist/core/timings.js +31 -0
  231. package/dist/core/timings.js.map +1 -0
  232. package/dist/core/tools/bash.d.ts +68 -0
  233. package/dist/core/tools/bash.d.ts.map +1 -0
  234. package/dist/core/tools/bash.js +335 -0
  235. package/dist/core/tools/bash.js.map +1 -0
  236. package/dist/core/tools/edit-diff.d.ts +85 -0
  237. package/dist/core/tools/edit-diff.d.ts.map +1 -0
  238. package/dist/core/tools/edit-diff.js +338 -0
  239. package/dist/core/tools/edit-diff.js.map +1 -0
  240. package/dist/core/tools/edit.d.ts +49 -0
  241. package/dist/core/tools/edit.d.ts.map +1 -0
  242. package/dist/core/tools/edit.js +324 -0
  243. package/dist/core/tools/edit.js.map +1 -0
  244. package/dist/core/tools/file-mutation-queue.d.ts +6 -0
  245. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  246. package/dist/core/tools/file-mutation-queue.js +37 -0
  247. package/dist/core/tools/file-mutation-queue.js.map +1 -0
  248. package/dist/core/tools/find.d.ts +35 -0
  249. package/dist/core/tools/find.d.ts.map +1 -0
  250. package/dist/core/tools/find.js +298 -0
  251. package/dist/core/tools/find.js.map +1 -0
  252. package/dist/core/tools/grep.d.ts +37 -0
  253. package/dist/core/tools/grep.d.ts.map +1 -0
  254. package/dist/core/tools/grep.js +304 -0
  255. package/dist/core/tools/grep.js.map +1 -0
  256. package/dist/core/tools/index.d.ts +40 -0
  257. package/dist/core/tools/index.d.ts.map +1 -0
  258. package/dist/core/tools/index.js +112 -0
  259. package/dist/core/tools/index.js.map +1 -0
  260. package/dist/core/tools/ls.d.ts +37 -0
  261. package/dist/core/tools/ls.d.ts.map +1 -0
  262. package/dist/core/tools/ls.js +169 -0
  263. package/dist/core/tools/ls.js.map +1 -0
  264. package/dist/core/tools/output-accumulator.d.ts +50 -0
  265. package/dist/core/tools/output-accumulator.d.ts.map +1 -0
  266. package/dist/core/tools/output-accumulator.js +178 -0
  267. package/dist/core/tools/output-accumulator.js.map +1 -0
  268. package/dist/core/tools/path-utils.d.ts +8 -0
  269. package/dist/core/tools/path-utils.d.ts.map +1 -0
  270. package/dist/core/tools/path-utils.js +81 -0
  271. package/dist/core/tools/path-utils.js.map +1 -0
  272. package/dist/core/tools/read.d.ts +35 -0
  273. package/dist/core/tools/read.d.ts.map +1 -0
  274. package/dist/core/tools/read.js +289 -0
  275. package/dist/core/tools/read.js.map +1 -0
  276. package/dist/core/tools/render-utils.d.ts +21 -0
  277. package/dist/core/tools/render-utils.d.ts.map +1 -0
  278. package/dist/core/tools/render-utils.js +49 -0
  279. package/dist/core/tools/render-utils.js.map +1 -0
  280. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  281. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  282. package/dist/core/tools/tool-definition-wrapper.js +34 -0
  283. package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
  284. package/dist/core/tools/truncate.d.ts +70 -0
  285. package/dist/core/tools/truncate.d.ts.map +1 -0
  286. package/dist/core/tools/truncate.js +205 -0
  287. package/dist/core/tools/truncate.js.map +1 -0
  288. package/dist/core/tools/write.d.ts +26 -0
  289. package/dist/core/tools/write.d.ts.map +1 -0
  290. package/dist/core/tools/write.js +213 -0
  291. package/dist/core/tools/write.js.map +1 -0
  292. package/dist/index.d.ts +28 -0
  293. package/dist/index.d.ts.map +1 -0
  294. package/dist/index.js +41 -0
  295. package/dist/index.js.map +1 -0
  296. package/dist/main.d.ts +13 -0
  297. package/dist/main.d.ts.map +1 -0
  298. package/dist/main.js +583 -0
  299. package/dist/main.js.map +1 -0
  300. package/dist/migrations.d.ts +33 -0
  301. package/dist/migrations.d.ts.map +1 -0
  302. package/dist/migrations.js +282 -0
  303. package/dist/migrations.js.map +1 -0
  304. package/dist/modes/index.d.ts +9 -0
  305. package/dist/modes/index.d.ts.map +1 -0
  306. package/dist/modes/index.js +8 -0
  307. package/dist/modes/index.js.map +1 -0
  308. package/dist/modes/interactive/assets/clankolas.png +0 -0
  309. package/dist/modes/interactive/components/armin.d.ts +34 -0
  310. package/dist/modes/interactive/components/armin.d.ts.map +1 -0
  311. package/dist/modes/interactive/components/armin.js +333 -0
  312. package/dist/modes/interactive/components/armin.js.map +1 -0
  313. package/dist/modes/interactive/components/assistant-message.d.ts +20 -0
  314. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  315. package/dist/modes/interactive/components/assistant-message.js +121 -0
  316. package/dist/modes/interactive/components/assistant-message.js.map +1 -0
  317. package/dist/modes/interactive/components/bash-execution.d.ts +34 -0
  318. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  319. package/dist/modes/interactive/components/bash-execution.js +175 -0
  320. package/dist/modes/interactive/components/bash-execution.js.map +1 -0
  321. package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  322. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  323. package/dist/modes/interactive/components/bordered-loader.js +54 -0
  324. package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  325. package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  326. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  327. package/dist/modes/interactive/components/branch-summary-message.js +44 -0
  328. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  329. package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  330. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  331. package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
  332. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  333. package/dist/modes/interactive/components/config-selector.d.ts +71 -0
  334. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  335. package/dist/modes/interactive/components/config-selector.js +503 -0
  336. package/dist/modes/interactive/components/config-selector.js.map +1 -0
  337. package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  338. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  339. package/dist/modes/interactive/components/countdown-timer.js +33 -0
  340. package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  341. package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  342. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  343. package/dist/modes/interactive/components/custom-editor.js +70 -0
  344. package/dist/modes/interactive/components/custom-editor.js.map +1 -0
  345. package/dist/modes/interactive/components/custom-message.d.ts +20 -0
  346. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  347. package/dist/modes/interactive/components/custom-message.js +79 -0
  348. package/dist/modes/interactive/components/custom-message.js.map +1 -0
  349. package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  350. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
  351. package/dist/modes/interactive/components/daxnuts.js +140 -0
  352. package/dist/modes/interactive/components/daxnuts.js.map +1 -0
  353. package/dist/modes/interactive/components/diff.d.ts +12 -0
  354. package/dist/modes/interactive/components/diff.d.ts.map +1 -0
  355. package/dist/modes/interactive/components/diff.js +133 -0
  356. package/dist/modes/interactive/components/diff.js.map +1 -0
  357. package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  358. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  359. package/dist/modes/interactive/components/dynamic-border.js +21 -0
  360. package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  361. package/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
  362. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -0
  363. package/dist/modes/interactive/components/earendil-announcement.js +40 -0
  364. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -0
  365. package/dist/modes/interactive/components/extension-editor.d.ts +20 -0
  366. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  367. package/dist/modes/interactive/components/extension-editor.js +111 -0
  368. package/dist/modes/interactive/components/extension-editor.js.map +1 -0
  369. package/dist/modes/interactive/components/extension-input.d.ts +23 -0
  370. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  371. package/dist/modes/interactive/components/extension-input.js +61 -0
  372. package/dist/modes/interactive/components/extension-input.js.map +1 -0
  373. package/dist/modes/interactive/components/extension-selector.d.ts +26 -0
  374. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  375. package/dist/modes/interactive/components/extension-selector.js +83 -0
  376. package/dist/modes/interactive/components/extension-selector.js.map +1 -0
  377. package/dist/modes/interactive/components/footer.d.ts +27 -0
  378. package/dist/modes/interactive/components/footer.d.ts.map +1 -0
  379. package/dist/modes/interactive/components/footer.js +201 -0
  380. package/dist/modes/interactive/components/footer.js.map +1 -0
  381. package/dist/modes/interactive/components/index.d.ts +32 -0
  382. package/dist/modes/interactive/components/index.d.ts.map +1 -0
  383. package/dist/modes/interactive/components/index.js +33 -0
  384. package/dist/modes/interactive/components/index.js.map +1 -0
  385. package/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
  386. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  387. package/dist/modes/interactive/components/keybinding-hints.js +36 -0
  388. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  389. package/dist/modes/interactive/components/login-dialog.d.ts +46 -0
  390. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  391. package/dist/modes/interactive/components/login-dialog.js +160 -0
  392. package/dist/modes/interactive/components/login-dialog.js.map +1 -0
  393. package/dist/modes/interactive/components/model-selector.d.ts +47 -0
  394. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  395. package/dist/modes/interactive/components/model-selector.js +278 -0
  396. package/dist/modes/interactive/components/model-selector.js.map +1 -0
  397. package/dist/modes/interactive/components/oauth-selector.d.ts +31 -0
  398. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  399. package/dist/modes/interactive/components/oauth-selector.js +165 -0
  400. package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  401. package/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
  402. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  403. package/dist/modes/interactive/components/scoped-models-selector.js +290 -0
  404. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  405. package/dist/modes/interactive/components/scramjet-command-message.d.ts +12 -0
  406. package/dist/modes/interactive/components/scramjet-command-message.d.ts.map +1 -0
  407. package/dist/modes/interactive/components/scramjet-command-message.js +49 -0
  408. package/dist/modes/interactive/components/scramjet-command-message.js.map +1 -0
  409. package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  410. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  411. package/dist/modes/interactive/components/session-selector-search.js +155 -0
  412. package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  413. package/dist/modes/interactive/components/session-selector.d.ts +96 -0
  414. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  415. package/dist/modes/interactive/components/session-selector.js +861 -0
  416. package/dist/modes/interactive/components/session-selector.js.map +1 -0
  417. package/dist/modes/interactive/components/settings-selector.d.ts +67 -0
  418. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  419. package/dist/modes/interactive/components/settings-selector.js +375 -0
  420. package/dist/modes/interactive/components/settings-selector.js.map +1 -0
  421. package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  422. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  423. package/dist/modes/interactive/components/show-images-selector.js +39 -0
  424. package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  425. package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  426. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  427. package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
  428. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  429. package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  430. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  431. package/dist/modes/interactive/components/theme-selector.js +50 -0
  432. package/dist/modes/interactive/components/theme-selector.js.map +1 -0
  433. package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  434. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  435. package/dist/modes/interactive/components/thinking-selector.js +51 -0
  436. package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  437. package/dist/modes/interactive/components/tool-execution.d.ts +63 -0
  438. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  439. package/dist/modes/interactive/components/tool-execution.js +295 -0
  440. package/dist/modes/interactive/components/tool-execution.js.map +1 -0
  441. package/dist/modes/interactive/components/tree-selector.d.ts +89 -0
  442. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  443. package/dist/modes/interactive/components/tree-selector.js +1093 -0
  444. package/dist/modes/interactive/components/tree-selector.js.map +1 -0
  445. package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  446. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  447. package/dist/modes/interactive/components/user-message-selector.js +114 -0
  448. package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  449. package/dist/modes/interactive/components/user-message.d.ts +10 -0
  450. package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  451. package/dist/modes/interactive/components/user-message.js +29 -0
  452. package/dist/modes/interactive/components/user-message.js.map +1 -0
  453. package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  454. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  455. package/dist/modes/interactive/components/visual-truncate.js +33 -0
  456. package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  457. package/dist/modes/interactive/interactive-mode.d.ts +367 -0
  458. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  459. package/dist/modes/interactive/interactive-mode.js +4527 -0
  460. package/dist/modes/interactive/interactive-mode.js.map +1 -0
  461. package/dist/modes/interactive/theme/dark.json +85 -0
  462. package/dist/modes/interactive/theme/light.json +84 -0
  463. package/dist/modes/interactive/theme/theme-schema.json +335 -0
  464. package/dist/modes/interactive/theme/theme.d.ts +81 -0
  465. package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  466. package/dist/modes/interactive/theme/theme.js +973 -0
  467. package/dist/modes/interactive/theme/theme.js.map +1 -0
  468. package/dist/modes/print-mode.d.ts +28 -0
  469. package/dist/modes/print-mode.d.ts.map +1 -0
  470. package/dist/modes/print-mode.js +131 -0
  471. package/dist/modes/print-mode.js.map +1 -0
  472. package/dist/modes/rpc/jsonl.d.ts +17 -0
  473. package/dist/modes/rpc/jsonl.d.ts.map +1 -0
  474. package/dist/modes/rpc/jsonl.js +49 -0
  475. package/dist/modes/rpc/jsonl.js.map +1 -0
  476. package/dist/modes/rpc/rpc-client.d.ts +224 -0
  477. package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  478. package/dist/modes/rpc/rpc-client.js +410 -0
  479. package/dist/modes/rpc/rpc-client.js.map +1 -0
  480. package/dist/modes/rpc/rpc-mode.d.ts +20 -0
  481. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  482. package/dist/modes/rpc/rpc-mode.js +601 -0
  483. package/dist/modes/rpc/rpc-mode.js.map +1 -0
  484. package/dist/modes/rpc/rpc-types.d.ts +419 -0
  485. package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  486. package/dist/modes/rpc/rpc-types.js +8 -0
  487. package/dist/modes/rpc/rpc-types.js.map +1 -0
  488. package/dist/package-manager-cli.d.ts +4 -0
  489. package/dist/package-manager-cli.d.ts.map +1 -0
  490. package/dist/package-manager-cli.js +460 -0
  491. package/dist/package-manager-cli.js.map +1 -0
  492. package/dist/utils/ansi.d.ts +2 -0
  493. package/dist/utils/ansi.d.ts.map +1 -0
  494. package/dist/utils/ansi.js +52 -0
  495. package/dist/utils/ansi.js.map +1 -0
  496. package/dist/utils/changelog.d.ts +21 -0
  497. package/dist/utils/changelog.d.ts.map +1 -0
  498. package/dist/utils/changelog.js +87 -0
  499. package/dist/utils/changelog.js.map +1 -0
  500. package/dist/utils/child-process.d.ts +12 -0
  501. package/dist/utils/child-process.d.ts.map +1 -0
  502. package/dist/utils/child-process.js +86 -0
  503. package/dist/utils/child-process.js.map +1 -0
  504. package/dist/utils/clipboard-image.d.ts +11 -0
  505. package/dist/utils/clipboard-image.d.ts.map +1 -0
  506. package/dist/utils/clipboard-image.js +245 -0
  507. package/dist/utils/clipboard-image.js.map +1 -0
  508. package/dist/utils/clipboard-native.d.ts +8 -0
  509. package/dist/utils/clipboard-native.d.ts.map +1 -0
  510. package/dist/utils/clipboard-native.js +14 -0
  511. package/dist/utils/clipboard-native.js.map +1 -0
  512. package/dist/utils/clipboard.d.ts +2 -0
  513. package/dist/utils/clipboard.d.ts.map +1 -0
  514. package/dist/utils/clipboard.js +117 -0
  515. package/dist/utils/clipboard.js.map +1 -0
  516. package/dist/utils/exif-orientation.d.ts +5 -0
  517. package/dist/utils/exif-orientation.d.ts.map +1 -0
  518. package/dist/utils/exif-orientation.js +158 -0
  519. package/dist/utils/exif-orientation.js.map +1 -0
  520. package/dist/utils/frontmatter.d.ts +8 -0
  521. package/dist/utils/frontmatter.d.ts.map +1 -0
  522. package/dist/utils/frontmatter.js +26 -0
  523. package/dist/utils/frontmatter.js.map +1 -0
  524. package/dist/utils/fs-watch.d.ts +5 -0
  525. package/dist/utils/fs-watch.d.ts.map +1 -0
  526. package/dist/utils/fs-watch.js +25 -0
  527. package/dist/utils/fs-watch.js.map +1 -0
  528. package/dist/utils/git.d.ts +26 -0
  529. package/dist/utils/git.d.ts.map +1 -0
  530. package/dist/utils/git.js +163 -0
  531. package/dist/utils/git.js.map +1 -0
  532. package/dist/utils/html.d.ts +7 -0
  533. package/dist/utils/html.d.ts.map +1 -0
  534. package/dist/utils/html.js +40 -0
  535. package/dist/utils/html.js.map +1 -0
  536. package/dist/utils/image-convert.d.ts +9 -0
  537. package/dist/utils/image-convert.d.ts.map +1 -0
  538. package/dist/utils/image-convert.js +39 -0
  539. package/dist/utils/image-convert.js.map +1 -0
  540. package/dist/utils/image-resize.d.ts +36 -0
  541. package/dist/utils/image-resize.d.ts.map +1 -0
  542. package/dist/utils/image-resize.js +137 -0
  543. package/dist/utils/image-resize.js.map +1 -0
  544. package/dist/utils/mime.d.ts +3 -0
  545. package/dist/utils/mime.d.ts.map +1 -0
  546. package/dist/utils/mime.js +69 -0
  547. package/dist/utils/mime.js.map +1 -0
  548. package/dist/utils/paths.d.ts +16 -0
  549. package/dist/utils/paths.d.ts.map +1 -0
  550. package/dist/utils/paths.js +50 -0
  551. package/dist/utils/paths.js.map +1 -0
  552. package/dist/utils/photon.d.ts +21 -0
  553. package/dist/utils/photon.d.ts.map +1 -0
  554. package/dist/utils/photon.js +121 -0
  555. package/dist/utils/photon.js.map +1 -0
  556. package/dist/utils/shell.d.ts +30 -0
  557. package/dist/utils/shell.d.ts.map +1 -0
  558. package/dist/utils/shell.js +190 -0
  559. package/dist/utils/shell.js.map +1 -0
  560. package/dist/utils/sleep.d.ts +5 -0
  561. package/dist/utils/sleep.d.ts.map +1 -0
  562. package/dist/utils/sleep.js +17 -0
  563. package/dist/utils/sleep.js.map +1 -0
  564. package/dist/utils/syntax-highlight.d.ts +12 -0
  565. package/dist/utils/syntax-highlight.d.ts.map +1 -0
  566. package/dist/utils/syntax-highlight.js +118 -0
  567. package/dist/utils/syntax-highlight.js.map +1 -0
  568. package/dist/utils/tools-manager.d.ts +3 -0
  569. package/dist/utils/tools-manager.d.ts.map +1 -0
  570. package/dist/utils/tools-manager.js +329 -0
  571. package/dist/utils/tools-manager.js.map +1 -0
  572. package/dist/utils/version-check.d.ts +9 -0
  573. package/dist/utils/version-check.d.ts.map +1 -0
  574. package/dist/utils/version-check.js +45 -0
  575. package/dist/utils/version-check.js.map +1 -0
  576. package/docs/compaction.md +394 -0
  577. package/docs/custom-provider.md +705 -0
  578. package/docs/development.md +71 -0
  579. package/docs/docs.json +148 -0
  580. package/docs/extensions.md +2636 -0
  581. package/docs/images/doom-extension.png +0 -0
  582. package/docs/images/exy.png +0 -0
  583. package/docs/images/interactive-mode.png +0 -0
  584. package/docs/images/tree-view.png +0 -0
  585. package/docs/index.md +64 -0
  586. package/docs/json.md +82 -0
  587. package/docs/keybindings.md +197 -0
  588. package/docs/models.md +474 -0
  589. package/docs/packages.md +223 -0
  590. package/docs/prompt-templates.md +88 -0
  591. package/docs/providers.md +243 -0
  592. package/docs/quickstart.md +142 -0
  593. package/docs/rpc.md +1407 -0
  594. package/docs/sdk.md +1163 -0
  595. package/docs/session-format.md +412 -0
  596. package/docs/sessions.md +137 -0
  597. package/docs/settings.md +279 -0
  598. package/docs/shell-aliases.md +13 -0
  599. package/docs/skills.md +231 -0
  600. package/docs/terminal-setup.md +106 -0
  601. package/docs/termux.md +127 -0
  602. package/docs/themes.md +295 -0
  603. package/docs/tmux.md +61 -0
  604. package/docs/tui.md +918 -0
  605. package/docs/usage.md +279 -0
  606. package/docs/windows.md +17 -0
  607. package/examples/README.md +25 -0
  608. package/examples/extensions/README.md +208 -0
  609. package/examples/extensions/auto-commit-on-exit.ts +49 -0
  610. package/examples/extensions/bash-spawn-hook.ts +30 -0
  611. package/examples/extensions/bookmark.ts +50 -0
  612. package/examples/extensions/border-status-editor.ts +150 -0
  613. package/examples/extensions/built-in-tool-renderer.ts +249 -0
  614. package/examples/extensions/claude-rules.ts +86 -0
  615. package/examples/extensions/commands.ts +72 -0
  616. package/examples/extensions/confirm-destructive.ts +59 -0
  617. package/examples/extensions/custom-compaction.ts +127 -0
  618. package/examples/extensions/custom-footer.ts +64 -0
  619. package/examples/extensions/custom-header.ts +73 -0
  620. package/examples/extensions/custom-provider-anthropic/index.ts +606 -0
  621. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
  622. package/examples/extensions/custom-provider-anthropic/package.json +19 -0
  623. package/examples/extensions/custom-provider-gitlab-duo/index.ts +349 -0
  624. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
  625. package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
  626. package/examples/extensions/dirty-repo-guard.ts +56 -0
  627. package/examples/extensions/doom-overlay/README.md +46 -0
  628. package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
  629. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  630. package/examples/extensions/doom-overlay/doom/build.sh +152 -0
  631. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
  632. package/examples/extensions/doom-overlay/doom-component.ts +132 -0
  633. package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
  634. package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
  635. package/examples/extensions/doom-overlay/index.ts +74 -0
  636. package/examples/extensions/doom-overlay/wad-finder.ts +51 -0
  637. package/examples/extensions/dynamic-resources/SKILL.md +8 -0
  638. package/examples/extensions/dynamic-resources/dynamic.json +79 -0
  639. package/examples/extensions/dynamic-resources/dynamic.md +5 -0
  640. package/examples/extensions/dynamic-resources/index.ts +15 -0
  641. package/examples/extensions/dynamic-tools.ts +74 -0
  642. package/examples/extensions/event-bus.ts +43 -0
  643. package/examples/extensions/file-trigger.ts +41 -0
  644. package/examples/extensions/git-checkpoint.ts +53 -0
  645. package/examples/extensions/github-issue-autocomplete.ts +185 -0
  646. package/examples/extensions/handoff.ts +191 -0
  647. package/examples/extensions/hello.ts +26 -0
  648. package/examples/extensions/hidden-thinking-label.ts +53 -0
  649. package/examples/extensions/inline-bash.ts +94 -0
  650. package/examples/extensions/input-transform.ts +43 -0
  651. package/examples/extensions/interactive-shell.ts +196 -0
  652. package/examples/extensions/mac-system-theme.ts +47 -0
  653. package/examples/extensions/message-renderer.ts +59 -0
  654. package/examples/extensions/minimal-mode.ts +426 -0
  655. package/examples/extensions/modal-editor.ts +85 -0
  656. package/examples/extensions/model-status.ts +31 -0
  657. package/examples/extensions/notify.ts +55 -0
  658. package/examples/extensions/overlay-qa-tests.ts +1348 -0
  659. package/examples/extensions/overlay-test.ts +150 -0
  660. package/examples/extensions/permission-gate.ts +34 -0
  661. package/examples/extensions/pirate.ts +47 -0
  662. package/examples/extensions/plan-mode/README.md +65 -0
  663. package/examples/extensions/plan-mode/index.ts +340 -0
  664. package/examples/extensions/plan-mode/utils.ts +168 -0
  665. package/examples/extensions/preset.ts +436 -0
  666. package/examples/extensions/prompt-customizer.ts +97 -0
  667. package/examples/extensions/protected-paths.ts +30 -0
  668. package/examples/extensions/provider-payload.ts +18 -0
  669. package/examples/extensions/qna.ts +122 -0
  670. package/examples/extensions/question.ts +264 -0
  671. package/examples/extensions/questionnaire.ts +427 -0
  672. package/examples/extensions/rainbow-editor.ts +88 -0
  673. package/examples/extensions/reload-runtime.ts +37 -0
  674. package/examples/extensions/rpc-demo.ts +118 -0
  675. package/examples/extensions/sandbox/index.ts +321 -0
  676. package/examples/extensions/sandbox/package-lock.json +92 -0
  677. package/examples/extensions/sandbox/package.json +19 -0
  678. package/examples/extensions/send-user-message.ts +97 -0
  679. package/examples/extensions/session-name.ts +27 -0
  680. package/examples/extensions/shutdown-command.ts +63 -0
  681. package/examples/extensions/snake.ts +343 -0
  682. package/examples/extensions/space-invaders.ts +560 -0
  683. package/examples/extensions/ssh.ts +220 -0
  684. package/examples/extensions/status-line.ts +32 -0
  685. package/examples/extensions/structured-output.ts +65 -0
  686. package/examples/extensions/subagent/README.md +174 -0
  687. package/examples/extensions/subagent/agents/planner.md +37 -0
  688. package/examples/extensions/subagent/agents/reviewer.md +35 -0
  689. package/examples/extensions/subagent/agents/scout.md +50 -0
  690. package/examples/extensions/subagent/agents/worker.md +24 -0
  691. package/examples/extensions/subagent/agents.ts +126 -0
  692. package/examples/extensions/subagent/index.ts +986 -0
  693. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
  694. package/examples/extensions/subagent/prompts/implement.md +10 -0
  695. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
  696. package/examples/extensions/summarize.ts +206 -0
  697. package/examples/extensions/system-prompt-header.ts +17 -0
  698. package/examples/extensions/tic-tac-toe.ts +1008 -0
  699. package/examples/extensions/timed-confirm.ts +70 -0
  700. package/examples/extensions/titlebar-spinner.ts +58 -0
  701. package/examples/extensions/todo.ts +297 -0
  702. package/examples/extensions/tool-override.ts +144 -0
  703. package/examples/extensions/tools.ts +141 -0
  704. package/examples/extensions/trigger-compact.ts +50 -0
  705. package/examples/extensions/truncated-tool.ts +195 -0
  706. package/examples/extensions/widget-placement.ts +9 -0
  707. package/examples/extensions/with-deps/index.ts +32 -0
  708. package/examples/extensions/with-deps/package-lock.json +31 -0
  709. package/examples/extensions/with-deps/package.json +22 -0
  710. package/examples/extensions/working-indicator.ts +123 -0
  711. package/examples/extensions/working-message-test.ts +25 -0
  712. package/examples/rpc-extension-ui.ts +632 -0
  713. package/examples/sdk/01-minimal.ts +26 -0
  714. package/examples/sdk/02-custom-model.ts +53 -0
  715. package/examples/sdk/03-custom-prompt.ts +70 -0
  716. package/examples/sdk/04-skills.ts +55 -0
  717. package/examples/sdk/05-tools.ts +48 -0
  718. package/examples/sdk/06-extensions.ts +94 -0
  719. package/examples/sdk/07-context-files.ts +42 -0
  720. package/examples/sdk/08-prompt-templates.ts +51 -0
  721. package/examples/sdk/09-api-keys-and-oauth.ts +52 -0
  722. package/examples/sdk/10-settings.ts +53 -0
  723. package/examples/sdk/11-sessions.ts +52 -0
  724. package/examples/sdk/12-full-control.ts +77 -0
  725. package/examples/sdk/13-session-runtime.ts +67 -0
  726. package/examples/sdk/README.md +147 -0
  727. package/package.json +60 -0
@@ -0,0 +1,316 @@
1
+ import { join } from "node:path";
2
+ import { Agent } from "@leanandmean/agent";
3
+ import { clampThinkingLevel, streamSimple } from "@leanandmean/ai";
4
+ import { getAgentDir } from "../config.js";
5
+ import { AgentSession } from "./agent-session.js";
6
+ import { formatNoModelsAvailableMessage } from "./auth-guidance.js";
7
+ import { AuthStorage } from "./auth-storage.js";
8
+ import { DEFAULT_THINKING_LEVEL } from "./defaults.js";
9
+ import { convertToLlm } from "./messages.js";
10
+ import { ModelRegistry } from "./model-registry.js";
11
+ import { findInitialModel } from "./model-resolver.js";
12
+ import { DefaultResourceLoader } from "./resource-loader.js";
13
+ import { getDefaultSessionDir, SessionManager } from "./session-manager.js";
14
+ import { SettingsManager } from "./settings-manager.js";
15
+ import { isInstallTelemetryEnabled } from "./telemetry.js";
16
+ import { time } from "./timings.js";
17
+ import { createBashTool, createCodingTools, createEditTool, createFindTool, createGrepTool, createLsTool, createReadOnlyTools, createReadTool, createWriteTool, withFileMutationQueue, } from "./tools/index.js";
18
+ // Re-exports
19
+ export * from "./agent-session-runtime.js";
20
+ export { withFileMutationQueue,
21
+ // Tool factories (for custom cwd)
22
+ createCodingTools, createReadOnlyTools, createReadTool, createBashTool, createEditTool, createWriteTool, createGrepTool, createFindTool, createLsTool, };
23
+ // Helper Functions
24
+ function getDefaultAgentDir() {
25
+ return getAgentDir();
26
+ }
27
+ function isCacheRetention(value) {
28
+ return value === "none" || value === "short" || value === "long";
29
+ }
30
+ // resolveCacheRetention runs on every createAgentSession call (including /new),
31
+ // so warn about a bad env var only once per process to keep it out of the TUI.
32
+ //
33
+ // Defaults to "long" (1h tier). NOTE: the Anthropic adapter has a same-named
34
+ // resolveCacheRetention (packages/ai/src/providers/anthropic.ts) that defaults
35
+ // to "short" for backward compatibility. The divergence is intentional: this
36
+ // SDK resolver runs first and passes a concrete value down, so the adapter's
37
+ // "short" default is effectively shadowed in the coding-agent path. Keep both
38
+ // in mind when changing either default.
39
+ let warnedInvalidCacheRetention = false;
40
+ function resolveCacheRetention(option) {
41
+ if (option) {
42
+ return option;
43
+ }
44
+ // SCRAMJET-DIVERGENCE: prefer SCRAMJET_CACHE_RETENTION, fall back to PI_CACHE_RETENTION.
45
+ const env = process.env.SCRAMJET_CACHE_RETENTION || process.env.PI_CACHE_RETENTION;
46
+ if (env) {
47
+ if (isCacheRetention(env)) {
48
+ return env;
49
+ }
50
+ if (!warnedInvalidCacheRetention) {
51
+ warnedInvalidCacheRetention = true;
52
+ console.warn(`Invalid SCRAMJET_CACHE_RETENTION "${env}". Valid values: none, short, long. Using "long".`);
53
+ }
54
+ }
55
+ return "long";
56
+ }
57
+ function getAttributionHeaders(model, settingsManager) {
58
+ if (!isInstallTelemetryEnabled(settingsManager)) {
59
+ return undefined;
60
+ }
61
+ if (model.provider === "openrouter" || model.baseUrl.includes("openrouter.ai")) {
62
+ // SCRAMJET-DIVERGENCE: Identify as Scramjet to OpenRouter
63
+ return {
64
+ "HTTP-Referer": "https://github.com/LeanAndMean/scramjet",
65
+ "X-OpenRouter-Title": "scramjet",
66
+ "X-OpenRouter-Categories": "cli-agent",
67
+ };
68
+ }
69
+ if (model.provider === "cloudflare-workers-ai" ||
70
+ model.provider === "cloudflare-ai-gateway" ||
71
+ model.baseUrl.includes("api.cloudflare.com") ||
72
+ model.baseUrl.includes("gateway.ai.cloudflare.com")) {
73
+ // SCRAMJET-DIVERGENCE: Identify as Scramjet to Cloudflare
74
+ return {
75
+ "User-Agent": "scramjet-coding-agent",
76
+ };
77
+ }
78
+ return undefined;
79
+ }
80
+ /**
81
+ * Create an AgentSession with the specified options.
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * // Minimal - uses defaults
86
+ * const { session } = await createAgentSession();
87
+ *
88
+ * // With explicit model
89
+ * import { getModel } from '@leanandmean/ai';
90
+ * const { session } = await createAgentSession({
91
+ * model: getModel('anthropic', 'claude-opus-4-5'),
92
+ * thinkingLevel: 'high',
93
+ * });
94
+ *
95
+ * // Continue previous session
96
+ * const { session, modelFallbackMessage } = await createAgentSession({
97
+ * continueSession: true,
98
+ * });
99
+ *
100
+ * // Full control
101
+ * const loader = new DefaultResourceLoader({
102
+ * cwd: process.cwd(),
103
+ * agentDir: getAgentDir(),
104
+ * settingsManager: SettingsManager.create(),
105
+ * });
106
+ * await loader.reload();
107
+ * const { session } = await createAgentSession({
108
+ * model: myModel,
109
+ * tools: ["read", "bash"],
110
+ * resourceLoader: loader,
111
+ * sessionManager: SessionManager.inMemory(),
112
+ * });
113
+ * ```
114
+ */
115
+ export async function createAgentSession(options = {}) {
116
+ const cwd = options.cwd ?? options.sessionManager?.getCwd() ?? process.cwd();
117
+ const agentDir = options.agentDir ?? getDefaultAgentDir();
118
+ const cacheRetention = resolveCacheRetention(options.cacheRetention);
119
+ let resourceLoader = options.resourceLoader;
120
+ // Use provided or create AuthStorage and ModelRegistry
121
+ const authPath = options.agentDir ? join(agentDir, "auth.json") : undefined;
122
+ const modelsPath = options.agentDir ? join(agentDir, "models.json") : undefined;
123
+ const authStorage = options.authStorage ?? AuthStorage.create(authPath);
124
+ const modelRegistry = options.modelRegistry ?? ModelRegistry.create(authStorage, modelsPath);
125
+ const settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);
126
+ const sessionManager = options.sessionManager ?? SessionManager.create(cwd, getDefaultSessionDir(cwd, agentDir));
127
+ if (!resourceLoader) {
128
+ resourceLoader = new DefaultResourceLoader({ cwd, agentDir, settingsManager });
129
+ await resourceLoader.reload();
130
+ time("resourceLoader.reload");
131
+ }
132
+ // Check if session has existing data to restore
133
+ const existingSession = sessionManager.buildSessionContext();
134
+ const hasExistingSession = existingSession.messages.length > 0;
135
+ const hasThinkingEntry = sessionManager.getBranch().some((entry) => entry.type === "thinking_level_change");
136
+ let model = options.model;
137
+ let modelFallbackMessage;
138
+ // If session has data, try to restore model from it
139
+ if (!model && hasExistingSession && existingSession.model) {
140
+ const restoredModel = modelRegistry.find(existingSession.model.provider, existingSession.model.modelId);
141
+ if (restoredModel && modelRegistry.hasConfiguredAuth(restoredModel)) {
142
+ model = restoredModel;
143
+ }
144
+ if (!model) {
145
+ modelFallbackMessage = `Could not restore model ${existingSession.model.provider}/${existingSession.model.modelId}`;
146
+ }
147
+ }
148
+ // If still no model, use findInitialModel (checks settings default, then provider defaults)
149
+ if (!model) {
150
+ const result = await findInitialModel({
151
+ scopedModels: [],
152
+ isContinuing: hasExistingSession,
153
+ defaultProvider: settingsManager.getDefaultProvider(),
154
+ defaultModelId: settingsManager.getDefaultModel(),
155
+ defaultThinkingLevel: settingsManager.getDefaultThinkingLevel(),
156
+ modelRegistry,
157
+ });
158
+ model = result.model;
159
+ if (!model) {
160
+ modelFallbackMessage = formatNoModelsAvailableMessage();
161
+ }
162
+ else if (modelFallbackMessage) {
163
+ modelFallbackMessage += `. Using ${model.provider}/${model.id}`;
164
+ }
165
+ }
166
+ let thinkingLevel = options.thinkingLevel;
167
+ // If session has data, restore thinking level from it
168
+ if (thinkingLevel === undefined && hasExistingSession) {
169
+ thinkingLevel = hasThinkingEntry
170
+ ? existingSession.thinkingLevel
171
+ : (settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL);
172
+ }
173
+ // Fall back to settings default
174
+ if (thinkingLevel === undefined) {
175
+ thinkingLevel = settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;
176
+ }
177
+ // Clamp to model capabilities
178
+ if (!model) {
179
+ thinkingLevel = "off";
180
+ }
181
+ else {
182
+ thinkingLevel = clampThinkingLevel(model, thinkingLevel);
183
+ }
184
+ const defaultActiveToolNames = ["read", "bash", "edit", "write"];
185
+ const allowedToolNames = options.tools ?? (options.noTools === "all" ? [] : undefined);
186
+ const initialActiveToolNames = options.tools
187
+ ? [...options.tools]
188
+ : options.noTools
189
+ ? []
190
+ : defaultActiveToolNames;
191
+ let agent;
192
+ // Create convertToLlm wrapper that filters images if blockImages is enabled (defense-in-depth)
193
+ const convertToLlmWithBlockImages = (messages) => {
194
+ const converted = convertToLlm(messages);
195
+ // Check setting dynamically so mid-session changes take effect
196
+ if (!settingsManager.getBlockImages()) {
197
+ return converted;
198
+ }
199
+ // Filter out ImageContent from all messages, replacing with text placeholder
200
+ return converted.map((msg) => {
201
+ if (msg.role === "user" || msg.role === "toolResult") {
202
+ const content = msg.content;
203
+ if (Array.isArray(content)) {
204
+ const hasImages = content.some((c) => c.type === "image");
205
+ if (hasImages) {
206
+ const filteredContent = content
207
+ .map((c) => c.type === "image" ? { type: "text", text: "Image reading is disabled." } : c)
208
+ .filter((c, i, arr) =>
209
+ // Dedupe consecutive "Image reading is disabled." texts
210
+ !(c.type === "text" &&
211
+ c.text === "Image reading is disabled." &&
212
+ i > 0 &&
213
+ arr[i - 1].type === "text" &&
214
+ arr[i - 1].text === "Image reading is disabled."));
215
+ return { ...msg, content: filteredContent };
216
+ }
217
+ }
218
+ }
219
+ return msg;
220
+ });
221
+ };
222
+ const extensionRunnerRef = {};
223
+ agent = new Agent({
224
+ initialState: {
225
+ systemPrompt: "",
226
+ model,
227
+ thinkingLevel,
228
+ tools: [],
229
+ },
230
+ convertToLlm: convertToLlmWithBlockImages,
231
+ streamFn: async (model, context, options) => {
232
+ const auth = await modelRegistry.getApiKeyAndHeaders(model);
233
+ if (!auth.ok) {
234
+ throw new Error(auth.error);
235
+ }
236
+ const providerRetrySettings = settingsManager.getProviderRetrySettings();
237
+ const attributionHeaders = getAttributionHeaders(model, settingsManager);
238
+ return streamSimple(model, context, {
239
+ ...options,
240
+ apiKey: auth.apiKey,
241
+ cacheRetention: options?.cacheRetention ?? cacheRetention,
242
+ timeoutMs: options?.timeoutMs ?? providerRetrySettings.timeoutMs,
243
+ maxRetries: options?.maxRetries ?? providerRetrySettings.maxRetries,
244
+ maxRetryDelayMs: options?.maxRetryDelayMs ?? providerRetrySettings.maxRetryDelayMs,
245
+ headers: attributionHeaders || auth.headers || options?.headers
246
+ ? { ...attributionHeaders, ...auth.headers, ...options?.headers }
247
+ : undefined,
248
+ });
249
+ },
250
+ onPayload: async (payload, _model) => {
251
+ const runner = extensionRunnerRef.current;
252
+ if (!runner?.hasHandlers("before_provider_request")) {
253
+ return payload;
254
+ }
255
+ return runner.emitBeforeProviderRequest(payload);
256
+ },
257
+ onResponse: async (response, _model) => {
258
+ const runner = extensionRunnerRef.current;
259
+ if (!runner?.hasHandlers("after_provider_response")) {
260
+ return;
261
+ }
262
+ await runner.emit({
263
+ type: "after_provider_response",
264
+ status: response.status,
265
+ headers: response.headers,
266
+ });
267
+ },
268
+ sessionId: sessionManager.getSessionId(),
269
+ transformContext: async (messages) => {
270
+ const runner = extensionRunnerRef.current;
271
+ if (!runner)
272
+ return messages;
273
+ return runner.emitContext(messages);
274
+ },
275
+ steeringMode: settingsManager.getSteeringMode(),
276
+ followUpMode: settingsManager.getFollowUpMode(),
277
+ transport: settingsManager.getTransport(),
278
+ thinkingBudgets: settingsManager.getThinkingBudgets(),
279
+ maxRetryDelayMs: settingsManager.getProviderRetrySettings().maxRetryDelayMs,
280
+ });
281
+ // Restore messages if session has existing data
282
+ if (hasExistingSession) {
283
+ agent.state.messages = existingSession.messages;
284
+ if (!hasThinkingEntry) {
285
+ sessionManager.appendThinkingLevelChange(thinkingLevel);
286
+ }
287
+ }
288
+ else {
289
+ // Save initial model and thinking level for new sessions so they can be restored on resume
290
+ if (model) {
291
+ sessionManager.appendModelChange(model.provider, model.id);
292
+ }
293
+ sessionManager.appendThinkingLevelChange(thinkingLevel);
294
+ }
295
+ const session = new AgentSession({
296
+ agent,
297
+ sessionManager,
298
+ settingsManager,
299
+ cwd,
300
+ scopedModels: options.scopedModels,
301
+ resourceLoader,
302
+ customTools: options.customTools,
303
+ modelRegistry,
304
+ initialActiveToolNames,
305
+ allowedToolNames,
306
+ extensionRunnerRef,
307
+ sessionStartEvent: options.sessionStartEvent,
308
+ });
309
+ const extensionsResult = resourceLoader.getExtensions();
310
+ return {
311
+ session,
312
+ extensionsResult,
313
+ modelFallbackMessage,
314
+ };
315
+ }
316
+ //# sourceMappingURL=sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["import { join } from \"node:path\";\nimport { Agent, type AgentMessage, type ThinkingLevel } from \"@leanandmean/agent\";\nimport { type CacheRetention, clampThinkingLevel, type Message, type Model, streamSimple } from \"@leanandmean/ai\";\nimport { getAgentDir } from \"../config.js\";\nimport { AgentSession } from \"./agent-session.js\";\nimport { formatNoModelsAvailableMessage } from \"./auth-guidance.js\";\nimport { AuthStorage } from \"./auth-storage.js\";\nimport { DEFAULT_THINKING_LEVEL } from \"./defaults.js\";\nimport type { ExtensionRunner, LoadExtensionsResult, SessionStartEvent, ToolDefinition } from \"./extensions/index.js\";\nimport { convertToLlm } from \"./messages.js\";\nimport { ModelRegistry } from \"./model-registry.js\";\nimport { findInitialModel } from \"./model-resolver.js\";\nimport type { ResourceLoader } from \"./resource-loader.js\";\nimport { DefaultResourceLoader } from \"./resource-loader.js\";\nimport { getDefaultSessionDir, SessionManager } from \"./session-manager.js\";\nimport { SettingsManager } from \"./settings-manager.js\";\nimport { isInstallTelemetryEnabled } from \"./telemetry.js\";\nimport { time } from \"./timings.js\";\nimport {\n\tcreateBashTool,\n\tcreateCodingTools,\n\tcreateEditTool,\n\tcreateFindTool,\n\tcreateGrepTool,\n\tcreateLsTool,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateWriteTool,\n\ttype ToolName,\n\twithFileMutationQueue,\n} from \"./tools/index.js\";\n\nexport interface CreateAgentSessionOptions {\n\t/** Working directory for project-local discovery. Default: process.cwd() */\n\tcwd?: string;\n\t/** Global config directory. Default: ~/.scramjet/agent */\n\tagentDir?: string;\n\n\t/** Auth storage for credentials. Default: AuthStorage.create(agentDir/auth.json) */\n\tauthStorage?: AuthStorage;\n\t/** Model registry. Default: ModelRegistry.create(authStorage, agentDir/models.json) */\n\tmodelRegistry?: ModelRegistry;\n\n\t/** Model to use. Default: from settings, else first available */\n\tmodel?: Model<any>;\n\t/** Thinking level. Default: from settings, else 'medium' (clamped to model capabilities) */\n\tthinkingLevel?: ThinkingLevel;\n\t/** Models available for cycling (Ctrl+P in interactive mode) */\n\tscopedModels?: Array<{ model: Model<any>; thinkingLevel?: ThinkingLevel }>;\n\t/**\n\t * Prompt-cache retention for provider requests.\n\t *\n\t * Precedence: this option, then the PI_CACHE_RETENTION environment variable,\n\t * then \"long\". Pass \"short\" for short-lived sessions such as subagents.\n\t */\n\tcacheRetention?: CacheRetention;\n\n\t/**\n\t * Optional default tool suppression mode when no explicit allowlist is provided.\n\t *\n\t * - \"all\": start with no tools enabled\n\t * - \"builtin\": disable the default built-in tools (read, bash, edit, write)\n\t * but keep extension/custom tools enabled\n\t */\n\tnoTools?: \"all\" | \"builtin\";\n\t/**\n\t * Optional allowlist of tool names.\n\t *\n\t * When omitted, pi enables the default built-in tools (read, bash, edit, write)\n\t * and leaves extension/custom tools enabled unless `noTools` changes that default.\n\t * When provided, only the listed tool names are enabled.\n\t */\n\ttools?: string[];\n\t/** Custom tools to register (in addition to built-in tools). */\n\tcustomTools?: ToolDefinition[];\n\n\t/** Resource loader. When omitted, DefaultResourceLoader is used. */\n\tresourceLoader?: ResourceLoader;\n\n\t/** Session manager. Default: SessionManager.create(cwd) */\n\tsessionManager?: SessionManager;\n\n\t/** Settings manager. Default: SettingsManager.create(cwd, agentDir) */\n\tsettingsManager?: SettingsManager;\n\t/** Session start event metadata for extension runtime startup. */\n\tsessionStartEvent?: SessionStartEvent;\n}\n\n/** Result from createAgentSession */\nexport interface CreateAgentSessionResult {\n\t/** The created session */\n\tsession: AgentSession;\n\t/** Extensions result (for UI context setup in interactive mode) */\n\textensionsResult: LoadExtensionsResult;\n\t/** Warning if session was restored with a different model than saved */\n\tmodelFallbackMessage?: string;\n}\n\n// Re-exports\n\nexport * from \"./agent-session-runtime.js\";\nexport type {\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionContext,\n\tExtensionFactory,\n\tSlashCommandInfo,\n\tSlashCommandSource,\n\tToolDefinition,\n} from \"./extensions/index.js\";\nexport type { PromptTemplate } from \"./prompt-templates.js\";\nexport type { Skill } from \"./skills.js\";\nexport type { Tool } from \"./tools/index.js\";\n\nexport {\n\twithFileMutationQueue,\n\t// Tool factories (for custom cwd)\n\tcreateCodingTools,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateBashTool,\n\tcreateEditTool,\n\tcreateWriteTool,\n\tcreateGrepTool,\n\tcreateFindTool,\n\tcreateLsTool,\n};\n\n// Helper Functions\n\nfunction getDefaultAgentDir(): string {\n\treturn getAgentDir();\n}\n\nfunction isCacheRetention(value: string): value is CacheRetention {\n\treturn value === \"none\" || value === \"short\" || value === \"long\";\n}\n\n// resolveCacheRetention runs on every createAgentSession call (including /new),\n// so warn about a bad env var only once per process to keep it out of the TUI.\n//\n// Defaults to \"long\" (1h tier). NOTE: the Anthropic adapter has a same-named\n// resolveCacheRetention (packages/ai/src/providers/anthropic.ts) that defaults\n// to \"short\" for backward compatibility. The divergence is intentional: this\n// SDK resolver runs first and passes a concrete value down, so the adapter's\n// \"short\" default is effectively shadowed in the coding-agent path. Keep both\n// in mind when changing either default.\nlet warnedInvalidCacheRetention = false;\n\nfunction resolveCacheRetention(option: CacheRetention | undefined): CacheRetention {\n\tif (option) {\n\t\treturn option;\n\t}\n\t// SCRAMJET-DIVERGENCE: prefer SCRAMJET_CACHE_RETENTION, fall back to PI_CACHE_RETENTION.\n\tconst env = process.env.SCRAMJET_CACHE_RETENTION || process.env.PI_CACHE_RETENTION;\n\tif (env) {\n\t\tif (isCacheRetention(env)) {\n\t\t\treturn env;\n\t\t}\n\t\tif (!warnedInvalidCacheRetention) {\n\t\t\twarnedInvalidCacheRetention = true;\n\t\t\tconsole.warn(`Invalid SCRAMJET_CACHE_RETENTION \"${env}\". Valid values: none, short, long. Using \"long\".`);\n\t\t}\n\t}\n\treturn \"long\";\n}\n\nfunction getAttributionHeaders(\n\tmodel: Model<any>,\n\tsettingsManager: SettingsManager,\n): Record<string, string> | undefined {\n\tif (!isInstallTelemetryEnabled(settingsManager)) {\n\t\treturn undefined;\n\t}\n\n\tif (model.provider === \"openrouter\" || model.baseUrl.includes(\"openrouter.ai\")) {\n\t\t// SCRAMJET-DIVERGENCE: Identify as Scramjet to OpenRouter\n\t\treturn {\n\t\t\t\"HTTP-Referer\": \"https://github.com/LeanAndMean/scramjet\",\n\t\t\t\"X-OpenRouter-Title\": \"scramjet\",\n\t\t\t\"X-OpenRouter-Categories\": \"cli-agent\",\n\t\t};\n\t}\n\n\tif (\n\t\tmodel.provider === \"cloudflare-workers-ai\" ||\n\t\tmodel.provider === \"cloudflare-ai-gateway\" ||\n\t\tmodel.baseUrl.includes(\"api.cloudflare.com\") ||\n\t\tmodel.baseUrl.includes(\"gateway.ai.cloudflare.com\")\n\t) {\n\t\t// SCRAMJET-DIVERGENCE: Identify as Scramjet to Cloudflare\n\t\treturn {\n\t\t\t\"User-Agent\": \"scramjet-coding-agent\",\n\t\t};\n\t}\n\n\treturn undefined;\n}\n\n/**\n * Create an AgentSession with the specified options.\n *\n * @example\n * ```typescript\n * // Minimal - uses defaults\n * const { session } = await createAgentSession();\n *\n * // With explicit model\n * import { getModel } from '@leanandmean/ai';\n * const { session } = await createAgentSession({\n * model: getModel('anthropic', 'claude-opus-4-5'),\n * thinkingLevel: 'high',\n * });\n *\n * // Continue previous session\n * const { session, modelFallbackMessage } = await createAgentSession({\n * continueSession: true,\n * });\n *\n * // Full control\n * const loader = new DefaultResourceLoader({\n * cwd: process.cwd(),\n * agentDir: getAgentDir(),\n * settingsManager: SettingsManager.create(),\n * });\n * await loader.reload();\n * const { session } = await createAgentSession({\n * model: myModel,\n * tools: [\"read\", \"bash\"],\n * resourceLoader: loader,\n * sessionManager: SessionManager.inMemory(),\n * });\n * ```\n */\nexport async function createAgentSession(options: CreateAgentSessionOptions = {}): Promise<CreateAgentSessionResult> {\n\tconst cwd = options.cwd ?? options.sessionManager?.getCwd() ?? process.cwd();\n\tconst agentDir = options.agentDir ?? getDefaultAgentDir();\n\tconst cacheRetention = resolveCacheRetention(options.cacheRetention);\n\tlet resourceLoader = options.resourceLoader;\n\n\t// Use provided or create AuthStorage and ModelRegistry\n\tconst authPath = options.agentDir ? join(agentDir, \"auth.json\") : undefined;\n\tconst modelsPath = options.agentDir ? join(agentDir, \"models.json\") : undefined;\n\tconst authStorage = options.authStorage ?? AuthStorage.create(authPath);\n\tconst modelRegistry = options.modelRegistry ?? ModelRegistry.create(authStorage, modelsPath);\n\n\tconst settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n\tconst sessionManager = options.sessionManager ?? SessionManager.create(cwd, getDefaultSessionDir(cwd, agentDir));\n\n\tif (!resourceLoader) {\n\t\tresourceLoader = new DefaultResourceLoader({ cwd, agentDir, settingsManager });\n\t\tawait resourceLoader.reload();\n\t\ttime(\"resourceLoader.reload\");\n\t}\n\n\t// Check if session has existing data to restore\n\tconst existingSession = sessionManager.buildSessionContext();\n\tconst hasExistingSession = existingSession.messages.length > 0;\n\tconst hasThinkingEntry = sessionManager.getBranch().some((entry) => entry.type === \"thinking_level_change\");\n\n\tlet model = options.model;\n\tlet modelFallbackMessage: string | undefined;\n\n\t// If session has data, try to restore model from it\n\tif (!model && hasExistingSession && existingSession.model) {\n\t\tconst restoredModel = modelRegistry.find(existingSession.model.provider, existingSession.model.modelId);\n\t\tif (restoredModel && modelRegistry.hasConfiguredAuth(restoredModel)) {\n\t\t\tmodel = restoredModel;\n\t\t}\n\t\tif (!model) {\n\t\t\tmodelFallbackMessage = `Could not restore model ${existingSession.model.provider}/${existingSession.model.modelId}`;\n\t\t}\n\t}\n\n\t// If still no model, use findInitialModel (checks settings default, then provider defaults)\n\tif (!model) {\n\t\tconst result = await findInitialModel({\n\t\t\tscopedModels: [],\n\t\t\tisContinuing: hasExistingSession,\n\t\t\tdefaultProvider: settingsManager.getDefaultProvider(),\n\t\t\tdefaultModelId: settingsManager.getDefaultModel(),\n\t\t\tdefaultThinkingLevel: settingsManager.getDefaultThinkingLevel(),\n\t\t\tmodelRegistry,\n\t\t});\n\t\tmodel = result.model;\n\t\tif (!model) {\n\t\t\tmodelFallbackMessage = formatNoModelsAvailableMessage();\n\t\t} else if (modelFallbackMessage) {\n\t\t\tmodelFallbackMessage += `. Using ${model.provider}/${model.id}`;\n\t\t}\n\t}\n\n\tlet thinkingLevel = options.thinkingLevel;\n\n\t// If session has data, restore thinking level from it\n\tif (thinkingLevel === undefined && hasExistingSession) {\n\t\tthinkingLevel = hasThinkingEntry\n\t\t\t? (existingSession.thinkingLevel as ThinkingLevel)\n\t\t\t: (settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL);\n\t}\n\n\t// Fall back to settings default\n\tif (thinkingLevel === undefined) {\n\t\tthinkingLevel = settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;\n\t}\n\n\t// Clamp to model capabilities\n\tif (!model) {\n\t\tthinkingLevel = \"off\";\n\t} else {\n\t\tthinkingLevel = clampThinkingLevel(model, thinkingLevel) as ThinkingLevel;\n\t}\n\n\tconst defaultActiveToolNames: ToolName[] = [\"read\", \"bash\", \"edit\", \"write\"];\n\tconst allowedToolNames = options.tools ?? (options.noTools === \"all\" ? [] : undefined);\n\tconst initialActiveToolNames: string[] = options.tools\n\t\t? [...options.tools]\n\t\t: options.noTools\n\t\t\t? []\n\t\t\t: defaultActiveToolNames;\n\n\tlet agent: Agent;\n\n\t// Create convertToLlm wrapper that filters images if blockImages is enabled (defense-in-depth)\n\tconst convertToLlmWithBlockImages = (messages: AgentMessage[]): Message[] => {\n\t\tconst converted = convertToLlm(messages);\n\t\t// Check setting dynamically so mid-session changes take effect\n\t\tif (!settingsManager.getBlockImages()) {\n\t\t\treturn converted;\n\t\t}\n\t\t// Filter out ImageContent from all messages, replacing with text placeholder\n\t\treturn converted.map((msg) => {\n\t\t\tif (msg.role === \"user\" || msg.role === \"toolResult\") {\n\t\t\t\tconst content = msg.content;\n\t\t\t\tif (Array.isArray(content)) {\n\t\t\t\t\tconst hasImages = content.some((c) => c.type === \"image\");\n\t\t\t\t\tif (hasImages) {\n\t\t\t\t\t\tconst filteredContent = content\n\t\t\t\t\t\t\t.map((c) =>\n\t\t\t\t\t\t\t\tc.type === \"image\" ? { type: \"text\" as const, text: \"Image reading is disabled.\" } : c,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t(c, i, arr) =>\n\t\t\t\t\t\t\t\t\t// Dedupe consecutive \"Image reading is disabled.\" texts\n\t\t\t\t\t\t\t\t\t!(\n\t\t\t\t\t\t\t\t\t\tc.type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\tc.text === \"Image reading is disabled.\" &&\n\t\t\t\t\t\t\t\t\t\ti > 0 &&\n\t\t\t\t\t\t\t\t\t\tarr[i - 1].type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\t(arr[i - 1] as { type: \"text\"; text: string }).text === \"Image reading is disabled.\"\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn { ...msg, content: filteredContent };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn msg;\n\t\t});\n\t};\n\n\tconst extensionRunnerRef: { current?: ExtensionRunner } = {};\n\n\tagent = new Agent({\n\t\tinitialState: {\n\t\t\tsystemPrompt: \"\",\n\t\t\tmodel,\n\t\t\tthinkingLevel,\n\t\t\ttools: [],\n\t\t},\n\t\tconvertToLlm: convertToLlmWithBlockImages,\n\t\tstreamFn: async (model, context, options) => {\n\t\t\tconst auth = await modelRegistry.getApiKeyAndHeaders(model);\n\t\t\tif (!auth.ok) {\n\t\t\t\tthrow new Error(auth.error);\n\t\t\t}\n\t\t\tconst providerRetrySettings = settingsManager.getProviderRetrySettings();\n\t\t\tconst attributionHeaders = getAttributionHeaders(model, settingsManager);\n\t\t\treturn streamSimple(model, context, {\n\t\t\t\t...options,\n\t\t\t\tapiKey: auth.apiKey,\n\t\t\t\tcacheRetention: options?.cacheRetention ?? cacheRetention,\n\t\t\t\ttimeoutMs: options?.timeoutMs ?? providerRetrySettings.timeoutMs,\n\t\t\t\tmaxRetries: options?.maxRetries ?? providerRetrySettings.maxRetries,\n\t\t\t\tmaxRetryDelayMs: options?.maxRetryDelayMs ?? providerRetrySettings.maxRetryDelayMs,\n\t\t\t\theaders:\n\t\t\t\t\tattributionHeaders || auth.headers || options?.headers\n\t\t\t\t\t\t? { ...attributionHeaders, ...auth.headers, ...options?.headers }\n\t\t\t\t\t\t: undefined,\n\t\t\t});\n\t\t},\n\t\tonPayload: async (payload, _model) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner?.hasHandlers(\"before_provider_request\")) {\n\t\t\t\treturn payload;\n\t\t\t}\n\t\t\treturn runner.emitBeforeProviderRequest(payload);\n\t\t},\n\t\tonResponse: async (response, _model) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner?.hasHandlers(\"after_provider_response\")) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait runner.emit({\n\t\t\t\ttype: \"after_provider_response\",\n\t\t\t\tstatus: response.status,\n\t\t\t\theaders: response.headers,\n\t\t\t});\n\t\t},\n\t\tsessionId: sessionManager.getSessionId(),\n\t\ttransformContext: async (messages) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner) return messages;\n\t\t\treturn runner.emitContext(messages);\n\t\t},\n\t\tsteeringMode: settingsManager.getSteeringMode(),\n\t\tfollowUpMode: settingsManager.getFollowUpMode(),\n\t\ttransport: settingsManager.getTransport(),\n\t\tthinkingBudgets: settingsManager.getThinkingBudgets(),\n\t\tmaxRetryDelayMs: settingsManager.getProviderRetrySettings().maxRetryDelayMs,\n\t});\n\n\t// Restore messages if session has existing data\n\tif (hasExistingSession) {\n\t\tagent.state.messages = existingSession.messages;\n\t\tif (!hasThinkingEntry) {\n\t\t\tsessionManager.appendThinkingLevelChange(thinkingLevel);\n\t\t}\n\t} else {\n\t\t// Save initial model and thinking level for new sessions so they can be restored on resume\n\t\tif (model) {\n\t\t\tsessionManager.appendModelChange(model.provider, model.id);\n\t\t}\n\t\tsessionManager.appendThinkingLevelChange(thinkingLevel);\n\t}\n\n\tconst session = new AgentSession({\n\t\tagent,\n\t\tsessionManager,\n\t\tsettingsManager,\n\t\tcwd,\n\t\tscopedModels: options.scopedModels,\n\t\tresourceLoader,\n\t\tcustomTools: options.customTools,\n\t\tmodelRegistry,\n\t\tinitialActiveToolNames,\n\t\tallowedToolNames,\n\t\textensionRunnerRef,\n\t\tsessionStartEvent: options.sessionStartEvent,\n\t});\n\tconst extensionsResult = resourceLoader.getExtensions();\n\n\treturn {\n\t\tsession,\n\t\textensionsResult,\n\t\tmodelFallbackMessage,\n\t};\n}\n"]}
@@ -0,0 +1,19 @@
1
+ export interface SessionCwdIssue {
2
+ sessionFile?: string;
3
+ sessionCwd: string;
4
+ fallbackCwd: string;
5
+ }
6
+ interface SessionCwdSource {
7
+ getCwd(): string;
8
+ getSessionFile(): string | undefined;
9
+ }
10
+ export declare function getMissingSessionCwdIssue(sessionManager: SessionCwdSource, fallbackCwd: string): SessionCwdIssue | undefined;
11
+ export declare function formatMissingSessionCwdError(issue: SessionCwdIssue): string;
12
+ export declare function formatMissingSessionCwdPrompt(issue: SessionCwdIssue): string;
13
+ export declare class MissingSessionCwdError extends Error {
14
+ readonly issue: SessionCwdIssue;
15
+ constructor(issue: SessionCwdIssue);
16
+ }
17
+ export declare function assertSessionCwdExists(sessionManager: SessionCwdSource, fallbackCwd: string): void;
18
+ export {};
19
+ //# sourceMappingURL=session-cwd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-cwd.d.ts","sourceRoot":"","sources":["../../src/core/session-cwd.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,gBAAgB;IACzB,MAAM,IAAI,MAAM,CAAC;IACjB,cAAc,IAAI,MAAM,GAAG,SAAS,CAAC;CACrC;AAED,wBAAgB,yBAAyB,CACxC,cAAc,EAAE,gBAAgB,EAChC,WAAW,EAAE,MAAM,GACjB,eAAe,GAAG,SAAS,CAgB7B;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAG3E;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAE5E;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAChD,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAEhC,YAAY,KAAK,EAAE,eAAe,EAIjC;CACD;AAED,wBAAgB,sBAAsB,CAAC,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAKlG","sourcesContent":["import { existsSync } from \"node:fs\";\n\nexport interface SessionCwdIssue {\n\tsessionFile?: string;\n\tsessionCwd: string;\n\tfallbackCwd: string;\n}\n\ninterface SessionCwdSource {\n\tgetCwd(): string;\n\tgetSessionFile(): string | undefined;\n}\n\nexport function getMissingSessionCwdIssue(\n\tsessionManager: SessionCwdSource,\n\tfallbackCwd: string,\n): SessionCwdIssue | undefined {\n\tconst sessionFile = sessionManager.getSessionFile();\n\tif (!sessionFile) {\n\t\treturn undefined;\n\t}\n\n\tconst sessionCwd = sessionManager.getCwd();\n\tif (!sessionCwd || existsSync(sessionCwd)) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tsessionFile,\n\t\tsessionCwd,\n\t\tfallbackCwd,\n\t};\n}\n\nexport function formatMissingSessionCwdError(issue: SessionCwdIssue): string {\n\tconst sessionFile = issue.sessionFile ? `\\nSession file: ${issue.sessionFile}` : \"\";\n\treturn `Stored session working directory does not exist: ${issue.sessionCwd}${sessionFile}\\nCurrent working directory: ${issue.fallbackCwd}`;\n}\n\nexport function formatMissingSessionCwdPrompt(issue: SessionCwdIssue): string {\n\treturn `cwd from session file does not exist\\n${issue.sessionCwd}\\n\\ncontinue in current cwd\\n${issue.fallbackCwd}`;\n}\n\nexport class MissingSessionCwdError extends Error {\n\treadonly issue: SessionCwdIssue;\n\n\tconstructor(issue: SessionCwdIssue) {\n\t\tsuper(formatMissingSessionCwdError(issue));\n\t\tthis.name = \"MissingSessionCwdError\";\n\t\tthis.issue = issue;\n\t}\n}\n\nexport function assertSessionCwdExists(sessionManager: SessionCwdSource, fallbackCwd: string): void {\n\tconst issue = getMissingSessionCwdIssue(sessionManager, fallbackCwd);\n\tif (issue) {\n\t\tthrow new MissingSessionCwdError(issue);\n\t}\n}\n"]}
@@ -0,0 +1,38 @@
1
+ import { existsSync } from "node:fs";
2
+ export function getMissingSessionCwdIssue(sessionManager, fallbackCwd) {
3
+ const sessionFile = sessionManager.getSessionFile();
4
+ if (!sessionFile) {
5
+ return undefined;
6
+ }
7
+ const sessionCwd = sessionManager.getCwd();
8
+ if (!sessionCwd || existsSync(sessionCwd)) {
9
+ return undefined;
10
+ }
11
+ return {
12
+ sessionFile,
13
+ sessionCwd,
14
+ fallbackCwd,
15
+ };
16
+ }
17
+ export function formatMissingSessionCwdError(issue) {
18
+ const sessionFile = issue.sessionFile ? `\nSession file: ${issue.sessionFile}` : "";
19
+ return `Stored session working directory does not exist: ${issue.sessionCwd}${sessionFile}\nCurrent working directory: ${issue.fallbackCwd}`;
20
+ }
21
+ export function formatMissingSessionCwdPrompt(issue) {
22
+ return `cwd from session file does not exist\n${issue.sessionCwd}\n\ncontinue in current cwd\n${issue.fallbackCwd}`;
23
+ }
24
+ export class MissingSessionCwdError extends Error {
25
+ issue;
26
+ constructor(issue) {
27
+ super(formatMissingSessionCwdError(issue));
28
+ this.name = "MissingSessionCwdError";
29
+ this.issue = issue;
30
+ }
31
+ }
32
+ export function assertSessionCwdExists(sessionManager, fallbackCwd) {
33
+ const issue = getMissingSessionCwdIssue(sessionManager, fallbackCwd);
34
+ if (issue) {
35
+ throw new MissingSessionCwdError(issue);
36
+ }
37
+ }
38
+ //# sourceMappingURL=session-cwd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-cwd.js","sourceRoot":"","sources":["../../src/core/session-cwd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAarC,MAAM,UAAU,yBAAyB,CACxC,cAAgC,EAChC,WAAmB,EACW;IAC9B,MAAM,WAAW,GAAG,cAAc,CAAC,cAAc,EAAE,CAAC;IACpD,IAAI,CAAC,WAAW,EAAE,CAAC;QAClB,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC;IAC3C,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3C,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,OAAO;QACN,WAAW;QACX,UAAU;QACV,WAAW;KACX,CAAC;AAAA,CACF;AAED,MAAM,UAAU,4BAA4B,CAAC,KAAsB,EAAU;IAC5E,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,mBAAmB,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACpF,OAAO,oDAAoD,KAAK,CAAC,UAAU,GAAG,WAAW,gCAAgC,KAAK,CAAC,WAAW,EAAE,CAAC;AAAA,CAC7I;AAED,MAAM,UAAU,6BAA6B,CAAC,KAAsB,EAAU;IAC7E,OAAO,yCAAyC,KAAK,CAAC,UAAU,gCAAgC,KAAK,CAAC,WAAW,EAAE,CAAC;AAAA,CACpH;AAED,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IACvC,KAAK,CAAkB;IAEhC,YAAY,KAAsB,EAAE;QACnC,KAAK,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAAA,CACnB;CACD;AAED,MAAM,UAAU,sBAAsB,CAAC,cAAgC,EAAE,WAAmB,EAAQ;IACnG,MAAM,KAAK,GAAG,yBAAyB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IACrE,IAAI,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;AAAA,CACD","sourcesContent":["import { existsSync } from \"node:fs\";\n\nexport interface SessionCwdIssue {\n\tsessionFile?: string;\n\tsessionCwd: string;\n\tfallbackCwd: string;\n}\n\ninterface SessionCwdSource {\n\tgetCwd(): string;\n\tgetSessionFile(): string | undefined;\n}\n\nexport function getMissingSessionCwdIssue(\n\tsessionManager: SessionCwdSource,\n\tfallbackCwd: string,\n): SessionCwdIssue | undefined {\n\tconst sessionFile = sessionManager.getSessionFile();\n\tif (!sessionFile) {\n\t\treturn undefined;\n\t}\n\n\tconst sessionCwd = sessionManager.getCwd();\n\tif (!sessionCwd || existsSync(sessionCwd)) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tsessionFile,\n\t\tsessionCwd,\n\t\tfallbackCwd,\n\t};\n}\n\nexport function formatMissingSessionCwdError(issue: SessionCwdIssue): string {\n\tconst sessionFile = issue.sessionFile ? `\\nSession file: ${issue.sessionFile}` : \"\";\n\treturn `Stored session working directory does not exist: ${issue.sessionCwd}${sessionFile}\\nCurrent working directory: ${issue.fallbackCwd}`;\n}\n\nexport function formatMissingSessionCwdPrompt(issue: SessionCwdIssue): string {\n\treturn `cwd from session file does not exist\\n${issue.sessionCwd}\\n\\ncontinue in current cwd\\n${issue.fallbackCwd}`;\n}\n\nexport class MissingSessionCwdError extends Error {\n\treadonly issue: SessionCwdIssue;\n\n\tconstructor(issue: SessionCwdIssue) {\n\t\tsuper(formatMissingSessionCwdError(issue));\n\t\tthis.name = \"MissingSessionCwdError\";\n\t\tthis.issue = issue;\n\t}\n}\n\nexport function assertSessionCwdExists(sessionManager: SessionCwdSource, fallbackCwd: string): void {\n\tconst issue = getMissingSessionCwdIssue(sessionManager, fallbackCwd);\n\tif (issue) {\n\t\tthrow new MissingSessionCwdError(issue);\n\t}\n}\n"]}