@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,220 @@
1
+ /**
2
+ * SSH Remote Execution Example
3
+ *
4
+ * Demonstrates delegating tool operations to a remote machine via SSH.
5
+ * When --ssh is provided, read/write/edit/bash run on the remote.
6
+ *
7
+ * Usage:
8
+ * scramjet -e ./ssh.ts --ssh user@host
9
+ * scramjet -e ./ssh.ts --ssh user@host:/remote/path
10
+ *
11
+ * Requirements:
12
+ * - SSH key-based auth (no password prompts)
13
+ * - bash on remote
14
+ */
15
+
16
+ import { spawn } from "node:child_process";
17
+ import type { ExtensionAPI } from "@leanandmean/coding-agent";
18
+ import {
19
+ type BashOperations,
20
+ createBashTool,
21
+ createEditTool,
22
+ createReadTool,
23
+ createWriteTool,
24
+ type EditOperations,
25
+ type ReadOperations,
26
+ type WriteOperations,
27
+ } from "@leanandmean/coding-agent";
28
+
29
+ function sshExec(remote: string, command: string): Promise<Buffer> {
30
+ return new Promise((resolve, reject) => {
31
+ const child = spawn("ssh", [remote, command], { stdio: ["ignore", "pipe", "pipe"] });
32
+ const chunks: Buffer[] = [];
33
+ const errChunks: Buffer[] = [];
34
+ child.stdout.on("data", (data) => chunks.push(data));
35
+ child.stderr.on("data", (data) => errChunks.push(data));
36
+ child.on("error", reject);
37
+ child.on("close", (code) => {
38
+ if (code !== 0) {
39
+ reject(new Error(`SSH failed (${code}): ${Buffer.concat(errChunks).toString()}`));
40
+ } else {
41
+ resolve(Buffer.concat(chunks));
42
+ }
43
+ });
44
+ });
45
+ }
46
+
47
+ function createRemoteReadOps(remote: string, remoteCwd: string, localCwd: string): ReadOperations {
48
+ const toRemote = (p: string) => p.replace(localCwd, remoteCwd);
49
+ return {
50
+ readFile: (p) => sshExec(remote, `cat ${JSON.stringify(toRemote(p))}`),
51
+ access: (p) => sshExec(remote, `test -r ${JSON.stringify(toRemote(p))}`).then(() => {}),
52
+ detectImageMimeType: async (p) => {
53
+ try {
54
+ const r = await sshExec(remote, `file --mime-type -b ${JSON.stringify(toRemote(p))}`);
55
+ const m = r.toString().trim();
56
+ return ["image/jpeg", "image/png", "image/gif", "image/webp"].includes(m) ? m : null;
57
+ } catch {
58
+ return null;
59
+ }
60
+ },
61
+ };
62
+ }
63
+
64
+ function createRemoteWriteOps(remote: string, remoteCwd: string, localCwd: string): WriteOperations {
65
+ const toRemote = (p: string) => p.replace(localCwd, remoteCwd);
66
+ return {
67
+ writeFile: async (p, content) => {
68
+ const b64 = Buffer.from(content).toString("base64");
69
+ await sshExec(remote, `echo ${JSON.stringify(b64)} | base64 -d > ${JSON.stringify(toRemote(p))}`);
70
+ },
71
+ mkdir: (dir) => sshExec(remote, `mkdir -p ${JSON.stringify(toRemote(dir))}`).then(() => {}),
72
+ };
73
+ }
74
+
75
+ function createRemoteEditOps(remote: string, remoteCwd: string, localCwd: string): EditOperations {
76
+ const r = createRemoteReadOps(remote, remoteCwd, localCwd);
77
+ const w = createRemoteWriteOps(remote, remoteCwd, localCwd);
78
+ return { readFile: r.readFile, access: r.access, writeFile: w.writeFile };
79
+ }
80
+
81
+ function createRemoteBashOps(remote: string, remoteCwd: string, localCwd: string): BashOperations {
82
+ const toRemote = (p: string) => p.replace(localCwd, remoteCwd);
83
+ return {
84
+ exec: (command, cwd, { onData, signal, timeout }) =>
85
+ new Promise((resolve, reject) => {
86
+ const cmd = `cd ${JSON.stringify(toRemote(cwd))} && ${command}`;
87
+ const child = spawn("ssh", [remote, cmd], { stdio: ["ignore", "pipe", "pipe"] });
88
+ let timedOut = false;
89
+ const timer = timeout
90
+ ? setTimeout(() => {
91
+ timedOut = true;
92
+ child.kill();
93
+ }, timeout * 1000)
94
+ : undefined;
95
+ child.stdout.on("data", onData);
96
+ child.stderr.on("data", onData);
97
+ child.on("error", (e) => {
98
+ if (timer) clearTimeout(timer);
99
+ reject(e);
100
+ });
101
+ const onAbort = () => child.kill();
102
+ signal?.addEventListener("abort", onAbort, { once: true });
103
+ child.on("close", (code) => {
104
+ if (timer) clearTimeout(timer);
105
+ signal?.removeEventListener("abort", onAbort);
106
+ if (signal?.aborted) reject(new Error("aborted"));
107
+ else if (timedOut) reject(new Error(`timeout:${timeout}`));
108
+ else resolve({ exitCode: code });
109
+ });
110
+ }),
111
+ };
112
+ }
113
+
114
+ export default function (pi: ExtensionAPI) {
115
+ pi.registerFlag("ssh", { description: "SSH remote: user@host or user@host:/path", type: "string" });
116
+
117
+ const localCwd = process.cwd();
118
+ const localRead = createReadTool(localCwd);
119
+ const localWrite = createWriteTool(localCwd);
120
+ const localEdit = createEditTool(localCwd);
121
+ const localBash = createBashTool(localCwd);
122
+
123
+ // Resolved lazily on session_start (CLI flags not available during factory)
124
+ let resolvedSsh: { remote: string; remoteCwd: string } | null = null;
125
+
126
+ const getSsh = () => resolvedSsh;
127
+
128
+ pi.registerTool({
129
+ ...localRead,
130
+ async execute(id, params, signal, onUpdate, _ctx) {
131
+ const ssh = getSsh();
132
+ if (ssh) {
133
+ const tool = createReadTool(localCwd, {
134
+ operations: createRemoteReadOps(ssh.remote, ssh.remoteCwd, localCwd),
135
+ });
136
+ return tool.execute(id, params, signal, onUpdate);
137
+ }
138
+ return localRead.execute(id, params, signal, onUpdate);
139
+ },
140
+ });
141
+
142
+ pi.registerTool({
143
+ ...localWrite,
144
+ async execute(id, params, signal, onUpdate, _ctx) {
145
+ const ssh = getSsh();
146
+ if (ssh) {
147
+ const tool = createWriteTool(localCwd, {
148
+ operations: createRemoteWriteOps(ssh.remote, ssh.remoteCwd, localCwd),
149
+ });
150
+ return tool.execute(id, params, signal, onUpdate);
151
+ }
152
+ return localWrite.execute(id, params, signal, onUpdate);
153
+ },
154
+ });
155
+
156
+ pi.registerTool({
157
+ ...localEdit,
158
+ async execute(id, params, signal, onUpdate, _ctx) {
159
+ const ssh = getSsh();
160
+ if (ssh) {
161
+ const tool = createEditTool(localCwd, {
162
+ operations: createRemoteEditOps(ssh.remote, ssh.remoteCwd, localCwd),
163
+ });
164
+ return tool.execute(id, params, signal, onUpdate);
165
+ }
166
+ return localEdit.execute(id, params, signal, onUpdate);
167
+ },
168
+ });
169
+
170
+ pi.registerTool({
171
+ ...localBash,
172
+ async execute(id, params, signal, onUpdate, _ctx) {
173
+ const ssh = getSsh();
174
+ if (ssh) {
175
+ const tool = createBashTool(localCwd, {
176
+ operations: createRemoteBashOps(ssh.remote, ssh.remoteCwd, localCwd),
177
+ });
178
+ return tool.execute(id, params, signal, onUpdate);
179
+ }
180
+ return localBash.execute(id, params, signal, onUpdate);
181
+ },
182
+ });
183
+
184
+ pi.on("session_start", async (_event, ctx) => {
185
+ // Resolve SSH config now that CLI flags are available
186
+ const arg = pi.getFlag("ssh") as string | undefined;
187
+ if (arg) {
188
+ if (arg.includes(":")) {
189
+ const [remote, path] = arg.split(":");
190
+ resolvedSsh = { remote, remoteCwd: path };
191
+ } else {
192
+ // No path given, evaluate pwd on remote
193
+ const remote = arg;
194
+ const pwd = (await sshExec(remote, "pwd")).toString().trim();
195
+ resolvedSsh = { remote, remoteCwd: pwd };
196
+ }
197
+ ctx.ui.setStatus("ssh", ctx.ui.theme.fg("accent", `SSH: ${resolvedSsh.remote}:${resolvedSsh.remoteCwd}`));
198
+ ctx.ui.notify(`SSH mode: ${resolvedSsh.remote}:${resolvedSsh.remoteCwd}`, "info");
199
+ }
200
+ });
201
+
202
+ // Handle user ! commands via SSH
203
+ pi.on("user_bash", (_event) => {
204
+ const ssh = getSsh();
205
+ if (!ssh) return; // No SSH, use local execution
206
+ return { operations: createRemoteBashOps(ssh.remote, ssh.remoteCwd, localCwd) };
207
+ });
208
+
209
+ // Replace local cwd with remote cwd in system prompt
210
+ pi.on("before_agent_start", async (event) => {
211
+ const ssh = getSsh();
212
+ if (ssh) {
213
+ const modified = event.systemPrompt.replace(
214
+ `Current working directory: ${localCwd}`,
215
+ `Current working directory: ${ssh.remoteCwd} (via SSH: ${ssh.remote})`,
216
+ );
217
+ return { systemPrompt: modified };
218
+ }
219
+ });
220
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Status Line Extension
3
+ *
4
+ * Demonstrates ctx.ui.setStatus() for displaying persistent status text in the footer.
5
+ * Shows turn progress with themed colors.
6
+ */
7
+
8
+ import type { ExtensionAPI } from "@leanandmean/coding-agent";
9
+
10
+ export default function (pi: ExtensionAPI) {
11
+ let turnCount = 0;
12
+
13
+ pi.on("session_start", async (_event, ctx) => {
14
+ const theme = ctx.ui.theme;
15
+ ctx.ui.setStatus("status-demo", theme.fg("dim", "Ready"));
16
+ });
17
+
18
+ pi.on("turn_start", async (_event, ctx) => {
19
+ turnCount++;
20
+ const theme = ctx.ui.theme;
21
+ const spinner = theme.fg("accent", "●");
22
+ const text = theme.fg("dim", ` Turn ${turnCount}...`);
23
+ ctx.ui.setStatus("status-demo", spinner + text);
24
+ });
25
+
26
+ pi.on("turn_end", async (_event, ctx) => {
27
+ const theme = ctx.ui.theme;
28
+ const check = theme.fg("success", "✓");
29
+ const text = theme.fg("dim", ` Turn ${turnCount} complete`);
30
+ ctx.ui.setStatus("status-demo", check + text);
31
+ });
32
+ }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Structured Output Tool
3
+ *
4
+ * Demonstrates `terminate: true` so the agent can end on a tool call
5
+ * without paying for an extra follow-up LLM turn.
6
+ */
7
+
8
+ import { defineTool, type ExtensionAPI } from "@leanandmean/coding-agent";
9
+ import { Text } from "@leanandmean/tui";
10
+ import { Type } from "typebox";
11
+
12
+ interface StructuredOutputDetails {
13
+ headline: string;
14
+ summary: string;
15
+ actionItems: string[];
16
+ }
17
+
18
+ const structuredOutputTool = defineTool({
19
+ name: "structured_output",
20
+ label: "Structured Output",
21
+ description:
22
+ "Return a final structured answer. Use this as your last action when the user asks for structured output or a machine-readable summary.",
23
+ promptSnippet: "Emit a final structured answer as a terminating tool result",
24
+ promptGuidelines: [
25
+ "Use structured_output as your final action when the user asks for structured output, JSON-like output, or a machine-readable summary.",
26
+ "After calling structured_output, do not emit another assistant response in the same turn.",
27
+ ],
28
+ parameters: Type.Object({
29
+ headline: Type.String({ description: "Short title for the result" }),
30
+ summary: Type.String({ description: "One-paragraph summary" }),
31
+ actionItems: Type.Array(Type.String(), { description: "Concrete next steps or key bullets" }),
32
+ }),
33
+
34
+ async execute(_toolCallId, params) {
35
+ return {
36
+ content: [{ type: "text", text: `Saved structured output: ${params.headline}` }],
37
+ details: {
38
+ headline: params.headline,
39
+ summary: params.summary,
40
+ actionItems: params.actionItems,
41
+ } satisfies StructuredOutputDetails,
42
+ terminate: true,
43
+ };
44
+ },
45
+
46
+ renderResult(result, _options, theme) {
47
+ const details = result.details as StructuredOutputDetails | undefined;
48
+ if (!details) {
49
+ const text = result.content[0];
50
+ return new Text(text?.type === "text" ? text.text : "", 0, 0);
51
+ }
52
+
53
+ const lines = [
54
+ theme.fg("toolTitle", theme.bold(details.headline)),
55
+ theme.fg("text", details.summary),
56
+ "",
57
+ ...details.actionItems.map((item, index) => theme.fg("muted", `${index + 1}. ${item}`)),
58
+ ];
59
+ return new Text(lines.join("\n"), 0, 0);
60
+ },
61
+ });
62
+
63
+ export default function (pi: ExtensionAPI) {
64
+ pi.registerTool(structuredOutputTool);
65
+ }
@@ -0,0 +1,174 @@
1
+ # Subagent Example
2
+
3
+ > **Deprecated:** The subagent tool is now bundled with Scramjet as a built-in and registered automatically by `initScramjet`. Manual extension installation is no longer needed. If you have an existing symlink at `~/.scramjet/agent/extensions/subagent`, remove it — the postinstall script will do this automatically on the next `npm install`, but leaving it in place produces a duplicate-tool conflict diagnostic.
4
+
5
+ Delegate tasks to specialized subagents with isolated context windows.
6
+
7
+ ## Features
8
+
9
+ - **Isolated context**: Each subagent runs in a separate `scramjet` process
10
+ - **Streaming output**: See tool calls and progress as they happen
11
+ - **Parallel streaming**: All parallel tasks stream updates simultaneously
12
+ - **Markdown rendering**: Final output rendered with proper formatting (expanded view)
13
+ - **Usage tracking**: Shows turns, tokens, cost, and context usage per agent
14
+ - **Abort support**: Ctrl+C propagates to kill subagent processes
15
+
16
+ ## Structure
17
+
18
+ ```
19
+ subagent/
20
+ ├── README.md # This file
21
+ ├── index.ts # The extension (entry point)
22
+ ├── agents.ts # Agent discovery logic
23
+ ├── agents/ # Sample agent definitions
24
+ │ ├── scout.md # Fast recon, returns compressed context
25
+ │ ├── planner.md # Creates implementation plans
26
+ │ ├── reviewer.md # Code review
27
+ │ └── worker.md # General-purpose (full capabilities)
28
+ └── prompts/ # Workflow presets (prompt templates)
29
+ ├── implement.md # scout -> planner -> worker
30
+ ├── scout-and-plan.md # scout -> planner (no implementation)
31
+ └── implement-and-review.md # worker -> reviewer -> worker
32
+ ```
33
+
34
+ ## Installation
35
+
36
+ From the repository root, symlink the files:
37
+
38
+ ```bash
39
+ # Symlink the extension (must be in a subdirectory with index.ts)
40
+ mkdir -p ~/.scramjet/agent/extensions/subagent
41
+ ln -sf "$(pwd)/packages/coding-agent/examples/extensions/subagent/index.ts" ~/.scramjet/agent/extensions/subagent/index.ts
42
+ ln -sf "$(pwd)/packages/coding-agent/examples/extensions/subagent/agents.ts" ~/.scramjet/agent/extensions/subagent/agents.ts
43
+
44
+ # Symlink agents
45
+ mkdir -p ~/.scramjet/agent/agents
46
+ for f in packages/coding-agent/examples/extensions/subagent/agents/*.md; do
47
+ ln -sf "$(pwd)/$f" ~/.scramjet/agent/agents/$(basename "$f")
48
+ done
49
+
50
+ # Symlink workflow prompts
51
+ mkdir -p ~/.scramjet/agent/prompts
52
+ for f in packages/coding-agent/examples/extensions/subagent/prompts/*.md; do
53
+ ln -sf "$(pwd)/$f" ~/.scramjet/agent/prompts/$(basename "$f")
54
+ done
55
+ ```
56
+
57
+ ## Security Model
58
+
59
+ This tool executes a separate `scramjet` subprocess with a delegated system prompt and tool/model configuration.
60
+
61
+ **Project-local agents** (`.scramjet/agents/*.md`) are repo-controlled prompts that can instruct the model to read files, run bash commands, etc.
62
+
63
+ **Default behavior:** Only loads **user-level agents** from `~/.scramjet/agent/agents`.
64
+
65
+ To enable project-local agents, pass `agentScope: "both"` (or `"project"`). Only do this for repositories you trust.
66
+
67
+ When running interactively, the tool prompts for confirmation before running project-local agents. Set `confirmProjectAgents: false` to disable.
68
+
69
+ ## Usage
70
+
71
+ ### Single agent
72
+ ```
73
+ Use scout to find all authentication code
74
+ ```
75
+
76
+ ### Parallel execution
77
+ ```
78
+ Run 2 scouts in parallel: one to find models, one to find providers
79
+ ```
80
+
81
+ ### Chained workflow
82
+ ```
83
+ Use a chain: first have scout find the read tool, then have planner suggest improvements
84
+ ```
85
+
86
+ ### Workflow prompts
87
+ ```
88
+ /implement add Redis caching to the session store
89
+ /scout-and-plan refactor auth to support OAuth
90
+ /implement-and-review add input validation to API endpoints
91
+ ```
92
+
93
+ ## Tool Modes
94
+
95
+ | Mode | Parameter | Description |
96
+ |------|-----------|-------------|
97
+ | Single | `{ agent, task }` | One agent, one task |
98
+ | Parallel | `{ tasks: [...] }` | Multiple agents run concurrently (max 8, 4 concurrent) |
99
+ | Chain | `{ chain: [...] }` | Sequential with `{previous}` placeholder |
100
+
101
+ ## Output Display
102
+
103
+ **Collapsed view** (default):
104
+ - Status icon (✓/✗/⏳) and agent name
105
+ - Last 5-10 items (tool calls and text)
106
+ - Usage stats: `3 turns ↑input ↓output RcacheRead WcacheWrite $cost ctx:contextTokens model`
107
+
108
+ **Expanded view** (Ctrl+O):
109
+ - Full task text
110
+ - All tool calls with formatted arguments
111
+ - Final output rendered as Markdown
112
+ - Per-task usage (for chain/parallel)
113
+
114
+ **Parallel mode streaming**:
115
+ - Shows all tasks with live status (⏳ running, ✓ done, ✗ failed)
116
+ - Updates as each task makes progress
117
+ - Shows "2/3 done, 1 running" status
118
+
119
+ **Tool call formatting** (mimics built-in tools):
120
+ - `$ command` for bash
121
+ - `read ~/path:1-10` for read
122
+ - `grep /pattern/ in ~/path` for grep
123
+ - etc.
124
+
125
+ ## Agent Definitions
126
+
127
+ Agents are markdown files with YAML frontmatter:
128
+
129
+ ```markdown
130
+ ---
131
+ name: my-agent
132
+ description: What this agent does
133
+ tools: read, grep, find, ls
134
+ model: claude-haiku-4-5
135
+ ---
136
+
137
+ System prompt for the agent goes here.
138
+ ```
139
+
140
+ **Locations:**
141
+ - `~/.scramjet/agent/agents/*.md` - User-level (always loaded)
142
+ - `.scramjet/agents/*.md` - Project-level (only with `agentScope: "project"` or `"both"`)
143
+
144
+ Project agents override user agents with the same name when `agentScope: "both"`.
145
+
146
+ ## Sample Agents
147
+
148
+ | Agent | Purpose | Model | Tools |
149
+ |-------|---------|-------|-------|
150
+ | `scout` | Fast codebase recon | Haiku | read, grep, find, ls, bash |
151
+ | `planner` | Implementation plans | Sonnet | read, grep, find, ls |
152
+ | `reviewer` | Code review | Sonnet | read, grep, find, ls, bash |
153
+ | `worker` | General-purpose | Sonnet | (all default) |
154
+
155
+ ## Workflow Prompts
156
+
157
+ | Prompt | Flow |
158
+ |--------|------|
159
+ | `/implement <query>` | scout → planner → worker |
160
+ | `/scout-and-plan <query>` | scout → planner |
161
+ | `/implement-and-review <query>` | worker → reviewer → worker |
162
+
163
+ ## Error Handling
164
+
165
+ - **Exit code != 0**: Tool returns error with stderr/output
166
+ - **stopReason "error"**: LLM error propagated with error message
167
+ - **stopReason "aborted"**: User abort (Ctrl+C) kills subprocess, throws error
168
+ - **Chain mode**: Stops at first failing step, reports which step failed
169
+
170
+ ## Limitations
171
+
172
+ - Output truncated to last 10 items in collapsed view (expand to see all)
173
+ - Agents discovered fresh on each invocation (allows editing mid-session)
174
+ - Parallel mode limited to 8 tasks, 4 concurrent
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: planner
3
+ description: Creates implementation plans from context and requirements
4
+ tools: read, grep, find, ls
5
+ model: claude-sonnet-4-5
6
+ ---
7
+
8
+ You are a planning specialist. You receive context (from a scout) and requirements, then produce a clear implementation plan.
9
+
10
+ You must NOT make any changes. Only read, analyze, and plan.
11
+
12
+ Input format you'll receive:
13
+ - Context/findings from a scout agent
14
+ - Original query or requirements
15
+
16
+ Output format:
17
+
18
+ ## Goal
19
+ One sentence summary of what needs to be done.
20
+
21
+ ## Plan
22
+ Numbered steps, each small and actionable:
23
+ 1. Step one - specific file/function to modify
24
+ 2. Step two - what to add/change
25
+ 3. ...
26
+
27
+ ## Files to Modify
28
+ - `path/to/file.ts` - what changes
29
+ - `path/to/other.ts` - what changes
30
+
31
+ ## New Files (if any)
32
+ - `path/to/new.ts` - purpose
33
+
34
+ ## Risks
35
+ Anything to watch out for.
36
+
37
+ Keep the plan concrete. The worker agent will execute it verbatim.
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: reviewer
3
+ description: Code review specialist for quality and security analysis
4
+ tools: read, grep, find, ls, bash
5
+ model: claude-sonnet-4-5
6
+ ---
7
+
8
+ You are a senior code reviewer. Analyze code for quality, security, and maintainability.
9
+
10
+ Bash is for read-only commands only: `git diff`, `git log`, `git show`. Do NOT modify files or run builds.
11
+ Assume tool permissions are not perfectly enforceable; keep all bash usage strictly read-only.
12
+
13
+ Strategy:
14
+ 1. Run `git diff` to see recent changes (if applicable)
15
+ 2. Read the modified files
16
+ 3. Check for bugs, security issues, code smells
17
+
18
+ Output format:
19
+
20
+ ## Files Reviewed
21
+ - `path/to/file.ts` (lines X-Y)
22
+
23
+ ## Critical (must fix)
24
+ - `file.ts:42` - Issue description
25
+
26
+ ## Warnings (should fix)
27
+ - `file.ts:100` - Issue description
28
+
29
+ ## Suggestions (consider)
30
+ - `file.ts:150` - Improvement idea
31
+
32
+ ## Summary
33
+ Overall assessment in 2-3 sentences.
34
+
35
+ Be specific with file paths and line numbers.
@@ -0,0 +1,50 @@
1
+ ---
2
+ name: scout
3
+ description: Fast codebase recon that returns compressed context for handoff to other agents
4
+ tools: read, grep, find, ls, bash
5
+ model: claude-haiku-4-5
6
+ ---
7
+
8
+ You are a scout. Quickly investigate a codebase and return structured findings that another agent can use without re-reading everything.
9
+
10
+ Your output will be passed to an agent who has NOT seen the files you explored.
11
+
12
+ Thoroughness (infer from task, default medium):
13
+ - Quick: Targeted lookups, key files only
14
+ - Medium: Follow imports, read critical sections
15
+ - Thorough: Trace all dependencies, check tests/types
16
+
17
+ Strategy:
18
+ 1. grep/find to locate relevant code
19
+ 2. Read key sections (not entire files)
20
+ 3. Identify types, interfaces, key functions
21
+ 4. Note dependencies between files
22
+
23
+ Output format:
24
+
25
+ ## Files Retrieved
26
+ List with exact line ranges:
27
+ 1. `path/to/file.ts` (lines 10-50) - Description of what's here
28
+ 2. `path/to/other.ts` (lines 100-150) - Description
29
+ 3. ...
30
+
31
+ ## Key Code
32
+ Critical types, interfaces, or functions:
33
+
34
+ ```typescript
35
+ interface Example {
36
+ // actual code from the files
37
+ }
38
+ ```
39
+
40
+ ```typescript
41
+ function keyFunction() {
42
+ // actual implementation
43
+ }
44
+ ```
45
+
46
+ ## Architecture
47
+ Brief explanation of how the pieces connect.
48
+
49
+ ## Start Here
50
+ Which file to look at first and why.
@@ -0,0 +1,24 @@
1
+ ---
2
+ name: worker
3
+ description: General-purpose subagent with full capabilities, isolated context
4
+ model: claude-sonnet-4-5
5
+ ---
6
+
7
+ You are a worker agent with full capabilities. You operate in an isolated context window to handle delegated tasks without polluting the main conversation.
8
+
9
+ Work autonomously to complete the assigned task. Use all available tools as needed.
10
+
11
+ Output format when finished:
12
+
13
+ ## Completed
14
+ What was done.
15
+
16
+ ## Files Changed
17
+ - `path/to/file.ts` - what changed
18
+
19
+ ## Notes (if any)
20
+ Anything the main agent should know.
21
+
22
+ If handing off to another agent (e.g. reviewer), include:
23
+ - Exact file paths changed
24
+ - Key functions/types touched (short list)