leaf-coding-agent 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (598) hide show
  1. package/dist/cli/args.d.ts +55 -0
  2. package/dist/cli/args.d.ts.map +1 -0
  3. package/dist/cli/args.js +356 -0
  4. package/dist/cli/args.js.map +1 -0
  5. package/dist/cli/config-selector.d.ts +14 -0
  6. package/dist/cli/config-selector.d.ts.map +1 -0
  7. package/dist/cli/config-selector.js +31 -0
  8. package/dist/cli/config-selector.js.map +1 -0
  9. package/dist/cli/file-processor.d.ts +15 -0
  10. package/dist/cli/file-processor.d.ts.map +1 -0
  11. package/dist/cli/file-processor.js +82 -0
  12. package/dist/cli/file-processor.js.map +1 -0
  13. package/dist/cli/initial-message.d.ts +18 -0
  14. package/dist/cli/initial-message.d.ts.map +1 -0
  15. package/dist/cli/initial-message.js +22 -0
  16. package/dist/cli/initial-message.js.map +1 -0
  17. package/dist/cli/list-models.d.ts +9 -0
  18. package/dist/cli/list-models.d.ts.map +1 -0
  19. package/dist/cli/list-models.js +98 -0
  20. package/dist/cli/list-models.js.map +1 -0
  21. package/dist/cli/session-picker.d.ts +9 -0
  22. package/dist/cli/session-picker.d.ts.map +1 -0
  23. package/dist/cli/session-picker.js +35 -0
  24. package/dist/cli/session-picker.js.map +1 -0
  25. package/dist/cli.d.ts +3 -0
  26. package/dist/cli.d.ts.map +1 -0
  27. package/dist/cli.js +18 -0
  28. package/dist/cli.js.map +1 -0
  29. package/dist/config.d.ts +92 -0
  30. package/dist/config.d.ts.map +1 -0
  31. package/dist/config.js +428 -0
  32. package/dist/config.js.map +1 -0
  33. package/dist/core/agent-session-runtime.d.ts +117 -0
  34. package/dist/core/agent-session-runtime.d.ts.map +1 -0
  35. package/dist/core/agent-session-runtime.js +300 -0
  36. package/dist/core/agent-session-runtime.js.map +1 -0
  37. package/dist/core/agent-session-services.d.ts +87 -0
  38. package/dist/core/agent-session-services.d.ts.map +1 -0
  39. package/dist/core/agent-session-services.js +119 -0
  40. package/dist/core/agent-session-services.js.map +1 -0
  41. package/dist/core/agent-session.d.ts +602 -0
  42. package/dist/core/agent-session.d.ts.map +1 -0
  43. package/dist/core/agent-session.js +2523 -0
  44. package/dist/core/agent-session.js.map +1 -0
  45. package/dist/core/auth-guidance.d.ts +5 -0
  46. package/dist/core/auth-guidance.d.ts.map +1 -0
  47. package/dist/core/auth-guidance.js +21 -0
  48. package/dist/core/auth-guidance.js.map +1 -0
  49. package/dist/core/auth-storage.d.ts +141 -0
  50. package/dist/core/auth-storage.d.ts.map +1 -0
  51. package/dist/core/auth-storage.js +442 -0
  52. package/dist/core/auth-storage.js.map +1 -0
  53. package/dist/core/bash-executor.d.ts +32 -0
  54. package/dist/core/bash-executor.d.ts.map +1 -0
  55. package/dist/core/bash-executor.js +111 -0
  56. package/dist/core/bash-executor.js.map +1 -0
  57. package/dist/core/compaction/branch-summarization.d.ts +88 -0
  58. package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  59. package/dist/core/compaction/branch-summarization.js +243 -0
  60. package/dist/core/compaction/branch-summarization.js.map +1 -0
  61. package/dist/core/compaction/compaction.d.ts +121 -0
  62. package/dist/core/compaction/compaction.d.ts.map +1 -0
  63. package/dist/core/compaction/compaction.js +619 -0
  64. package/dist/core/compaction/compaction.js.map +1 -0
  65. package/dist/core/compaction/index.d.ts +7 -0
  66. package/dist/core/compaction/index.d.ts.map +1 -0
  67. package/dist/core/compaction/index.js +7 -0
  68. package/dist/core/compaction/index.js.map +1 -0
  69. package/dist/core/compaction/utils.d.ts +38 -0
  70. package/dist/core/compaction/utils.d.ts.map +1 -0
  71. package/dist/core/compaction/utils.js +153 -0
  72. package/dist/core/compaction/utils.js.map +1 -0
  73. package/dist/core/defaults.d.ts +3 -0
  74. package/dist/core/defaults.d.ts.map +1 -0
  75. package/dist/core/defaults.js +2 -0
  76. package/dist/core/defaults.js.map +1 -0
  77. package/dist/core/diagnostics.d.ts +15 -0
  78. package/dist/core/diagnostics.d.ts.map +1 -0
  79. package/dist/core/diagnostics.js +2 -0
  80. package/dist/core/diagnostics.js.map +1 -0
  81. package/dist/core/event-bus.d.ts +9 -0
  82. package/dist/core/event-bus.d.ts.map +1 -0
  83. package/dist/core/event-bus.js +25 -0
  84. package/dist/core/event-bus.js.map +1 -0
  85. package/dist/core/exec.d.ts +29 -0
  86. package/dist/core/exec.d.ts.map +1 -0
  87. package/dist/core/exec.js +75 -0
  88. package/dist/core/exec.js.map +1 -0
  89. package/dist/core/export-html/ansi-to-html.d.ts +22 -0
  90. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  91. package/dist/core/export-html/ansi-to-html.js +249 -0
  92. package/dist/core/export-html/ansi-to-html.js.map +1 -0
  93. package/dist/core/export-html/index.d.ts +37 -0
  94. package/dist/core/export-html/index.d.ts.map +1 -0
  95. package/dist/core/export-html/index.js +226 -0
  96. package/dist/core/export-html/index.js.map +1 -0
  97. package/dist/core/export-html/template.css +1066 -0
  98. package/dist/core/export-html/template.html +55 -0
  99. package/dist/core/export-html/template.js +1851 -0
  100. package/dist/core/export-html/tool-renderer.d.ts +34 -0
  101. package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  102. package/dist/core/export-html/tool-renderer.js +108 -0
  103. package/dist/core/export-html/tool-renderer.js.map +1 -0
  104. package/dist/core/export-html/vendor/highlight.min.js +1213 -0
  105. package/dist/core/export-html/vendor/marked.min.js +6 -0
  106. package/dist/core/extensions/index.d.ts +12 -0
  107. package/dist/core/extensions/index.d.ts.map +1 -0
  108. package/dist/core/extensions/index.js +9 -0
  109. package/dist/core/extensions/index.js.map +1 -0
  110. package/dist/core/extensions/loader.d.ts +24 -0
  111. package/dist/core/extensions/loader.d.ts.map +1 -0
  112. package/dist/core/extensions/loader.js +481 -0
  113. package/dist/core/extensions/loader.js.map +1 -0
  114. package/dist/core/extensions/runner.d.ts +159 -0
  115. package/dist/core/extensions/runner.d.ts.map +1 -0
  116. package/dist/core/extensions/runner.js +830 -0
  117. package/dist/core/extensions/runner.js.map +1 -0
  118. package/dist/core/extensions/types.d.ts +1175 -0
  119. package/dist/core/extensions/types.d.ts.map +1 -0
  120. package/dist/core/extensions/types.js +45 -0
  121. package/dist/core/extensions/types.js.map +1 -0
  122. package/dist/core/extensions/wrapper.d.ts +20 -0
  123. package/dist/core/extensions/wrapper.d.ts.map +1 -0
  124. package/dist/core/extensions/wrapper.js +22 -0
  125. package/dist/core/extensions/wrapper.js.map +1 -0
  126. package/dist/core/footer-data-provider.d.ts +52 -0
  127. package/dist/core/footer-data-provider.d.ts.map +1 -0
  128. package/dist/core/footer-data-provider.js +310 -0
  129. package/dist/core/footer-data-provider.js.map +1 -0
  130. package/dist/core/http-dispatcher.d.ts +21 -0
  131. package/dist/core/http-dispatcher.d.ts.map +1 -0
  132. package/dist/core/http-dispatcher.js +48 -0
  133. package/dist/core/http-dispatcher.js.map +1 -0
  134. package/dist/core/index.d.ts +12 -0
  135. package/dist/core/index.d.ts.map +1 -0
  136. package/dist/core/index.js +12 -0
  137. package/dist/core/index.js.map +1 -0
  138. package/dist/core/keybindings.d.ts +353 -0
  139. package/dist/core/keybindings.d.ts.map +1 -0
  140. package/dist/core/keybindings.js +295 -0
  141. package/dist/core/keybindings.js.map +1 -0
  142. package/dist/core/messages.d.ts +77 -0
  143. package/dist/core/messages.d.ts.map +1 -0
  144. package/dist/core/messages.js +123 -0
  145. package/dist/core/messages.js.map +1 -0
  146. package/dist/core/model-registry.d.ts +150 -0
  147. package/dist/core/model-registry.d.ts.map +1 -0
  148. package/dist/core/model-registry.js +784 -0
  149. package/dist/core/model-registry.js.map +1 -0
  150. package/dist/core/model-resolver.d.ts +110 -0
  151. package/dist/core/model-resolver.d.ts.map +1 -0
  152. package/dist/core/model-resolver.js +495 -0
  153. package/dist/core/model-resolver.js.map +1 -0
  154. package/dist/core/output-guard.d.ts +7 -0
  155. package/dist/core/output-guard.d.ts.map +1 -0
  156. package/dist/core/output-guard.js +89 -0
  157. package/dist/core/output-guard.js.map +1 -0
  158. package/dist/core/package-manager.d.ts +204 -0
  159. package/dist/core/package-manager.d.ts.map +1 -0
  160. package/dist/core/package-manager.js +2040 -0
  161. package/dist/core/package-manager.js.map +1 -0
  162. package/dist/core/prompt-templates.d.ts +52 -0
  163. package/dist/core/prompt-templates.d.ts.map +1 -0
  164. package/dist/core/prompt-templates.js +238 -0
  165. package/dist/core/prompt-templates.js.map +1 -0
  166. package/dist/core/provider-display-names.d.ts +2 -0
  167. package/dist/core/provider-display-names.d.ts.map +1 -0
  168. package/dist/core/provider-display-names.js +33 -0
  169. package/dist/core/provider-display-names.js.map +1 -0
  170. package/dist/core/resolve-config-value.d.ts +31 -0
  171. package/dist/core/resolve-config-value.d.ts.map +1 -0
  172. package/dist/core/resolve-config-value.js +249 -0
  173. package/dist/core/resolve-config-value.js.map +1 -0
  174. package/dist/core/resource-loader.d.ts +194 -0
  175. package/dist/core/resource-loader.d.ts.map +1 -0
  176. package/dist/core/resource-loader.js +734 -0
  177. package/dist/core/resource-loader.js.map +1 -0
  178. package/dist/core/sdk.d.ts +109 -0
  179. package/dist/core/sdk.d.ts.map +1 -0
  180. package/dist/core/sdk.js +291 -0
  181. package/dist/core/sdk.js.map +1 -0
  182. package/dist/core/session-cwd.d.ts +19 -0
  183. package/dist/core/session-cwd.d.ts.map +1 -0
  184. package/dist/core/session-cwd.js +38 -0
  185. package/dist/core/session-cwd.js.map +1 -0
  186. package/dist/core/session-manager.d.ts +332 -0
  187. package/dist/core/session-manager.d.ts.map +1 -0
  188. package/dist/core/session-manager.js +1194 -0
  189. package/dist/core/session-manager.js.map +1 -0
  190. package/dist/core/settings-manager.d.ts +266 -0
  191. package/dist/core/settings-manager.d.ts.map +1 -0
  192. package/dist/core/settings-manager.js +800 -0
  193. package/dist/core/settings-manager.js.map +1 -0
  194. package/dist/core/skills.d.ts +60 -0
  195. package/dist/core/skills.d.ts.map +1 -0
  196. package/dist/core/skills.js +387 -0
  197. package/dist/core/skills.js.map +1 -0
  198. package/dist/core/slash-commands.d.ts +14 -0
  199. package/dist/core/slash-commands.d.ts.map +1 -0
  200. package/dist/core/slash-commands.js +25 -0
  201. package/dist/core/slash-commands.js.map +1 -0
  202. package/dist/core/source-info.d.ts +18 -0
  203. package/dist/core/source-info.d.ts.map +1 -0
  204. package/dist/core/source-info.js +19 -0
  205. package/dist/core/source-info.js.map +1 -0
  206. package/dist/core/system-prompt.d.ts +30 -0
  207. package/dist/core/system-prompt.d.ts.map +1 -0
  208. package/dist/core/system-prompt.js +117 -0
  209. package/dist/core/system-prompt.js.map +1 -0
  210. package/dist/core/telemetry.d.ts +3 -0
  211. package/dist/core/telemetry.d.ts.map +1 -0
  212. package/dist/core/telemetry.js +9 -0
  213. package/dist/core/telemetry.js.map +1 -0
  214. package/dist/core/timings.d.ts +8 -0
  215. package/dist/core/timings.d.ts.map +1 -0
  216. package/dist/core/timings.js +31 -0
  217. package/dist/core/timings.js.map +1 -0
  218. package/dist/core/tools/bash.d.ts +68 -0
  219. package/dist/core/tools/bash.d.ts.map +1 -0
  220. package/dist/core/tools/bash.js +337 -0
  221. package/dist/core/tools/bash.js.map +1 -0
  222. package/dist/core/tools/edit-diff.d.ts +87 -0
  223. package/dist/core/tools/edit-diff.d.ts.map +1 -0
  224. package/dist/core/tools/edit-diff.js +345 -0
  225. package/dist/core/tools/edit-diff.js.map +1 -0
  226. package/dist/core/tools/edit.d.ts +51 -0
  227. package/dist/core/tools/edit.d.ts.map +1 -0
  228. package/dist/core/tools/edit.js +287 -0
  229. package/dist/core/tools/edit.js.map +1 -0
  230. package/dist/core/tools/file-mutation-queue.d.ts +6 -0
  231. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  232. package/dist/core/tools/file-mutation-queue.js +52 -0
  233. package/dist/core/tools/file-mutation-queue.js.map +1 -0
  234. package/dist/core/tools/find.d.ts +35 -0
  235. package/dist/core/tools/find.d.ts.map +1 -0
  236. package/dist/core/tools/find.js +297 -0
  237. package/dist/core/tools/find.js.map +1 -0
  238. package/dist/core/tools/grep.d.ts +37 -0
  239. package/dist/core/tools/grep.d.ts.map +1 -0
  240. package/dist/core/tools/grep.js +304 -0
  241. package/dist/core/tools/grep.js.map +1 -0
  242. package/dist/core/tools/index.d.ts +40 -0
  243. package/dist/core/tools/index.d.ts.map +1 -0
  244. package/dist/core/tools/index.js +112 -0
  245. package/dist/core/tools/index.js.map +1 -0
  246. package/dist/core/tools/ls.d.ts +37 -0
  247. package/dist/core/tools/ls.d.ts.map +1 -0
  248. package/dist/core/tools/ls.js +169 -0
  249. package/dist/core/tools/ls.js.map +1 -0
  250. package/dist/core/tools/output-accumulator.d.ts +52 -0
  251. package/dist/core/tools/output-accumulator.d.ts.map +1 -0
  252. package/dist/core/tools/output-accumulator.js +184 -0
  253. package/dist/core/tools/output-accumulator.js.map +1 -0
  254. package/dist/core/tools/path-utils.d.ts +10 -0
  255. package/dist/core/tools/path-utils.d.ts.map +1 -0
  256. package/dist/core/tools/path-utils.js +99 -0
  257. package/dist/core/tools/path-utils.js.map +1 -0
  258. package/dist/core/tools/read.d.ts +35 -0
  259. package/dist/core/tools/read.d.ts.map +1 -0
  260. package/dist/core/tools/read.js +290 -0
  261. package/dist/core/tools/read.js.map +1 -0
  262. package/dist/core/tools/render-utils.d.ts +21 -0
  263. package/dist/core/tools/render-utils.d.ts.map +1 -0
  264. package/dist/core/tools/render-utils.js +49 -0
  265. package/dist/core/tools/render-utils.js.map +1 -0
  266. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  267. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  268. package/dist/core/tools/tool-definition-wrapper.js +34 -0
  269. package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
  270. package/dist/core/tools/truncate.d.ts +70 -0
  271. package/dist/core/tools/truncate.d.ts.map +1 -0
  272. package/dist/core/tools/truncate.js +215 -0
  273. package/dist/core/tools/truncate.js.map +1 -0
  274. package/dist/core/tools/worker.d.ts +23 -0
  275. package/dist/core/tools/worker.d.ts.map +1 -0
  276. package/dist/core/tools/worker.js +150 -0
  277. package/dist/core/tools/worker.js.map +1 -0
  278. package/dist/core/tools/write.d.ts +26 -0
  279. package/dist/core/tools/write.d.ts.map +1 -0
  280. package/dist/core/tools/write.js +198 -0
  281. package/dist/core/tools/write.js.map +1 -0
  282. package/dist/core/worker-integration.d.ts +79 -0
  283. package/dist/core/worker-integration.d.ts.map +1 -0
  284. package/dist/core/worker-integration.js +108 -0
  285. package/dist/core/worker-integration.js.map +1 -0
  286. package/dist/index.d.ts +29 -0
  287. package/dist/index.d.ts.map +1 -0
  288. package/dist/index.js +42 -0
  289. package/dist/index.js.map +1 -0
  290. package/dist/main.d.ts +12 -0
  291. package/dist/main.d.ts.map +1 -0
  292. package/dist/main.js +623 -0
  293. package/dist/main.js.map +1 -0
  294. package/dist/migrations.d.ts +33 -0
  295. package/dist/migrations.d.ts.map +1 -0
  296. package/dist/migrations.js +398 -0
  297. package/dist/migrations.js.map +1 -0
  298. package/dist/modes/index.d.ts +9 -0
  299. package/dist/modes/index.d.ts.map +1 -0
  300. package/dist/modes/index.js +8 -0
  301. package/dist/modes/index.js.map +1 -0
  302. package/dist/modes/interactive/assets/clankolas.png +0 -0
  303. package/dist/modes/interactive/components/armin.d.ts +34 -0
  304. package/dist/modes/interactive/components/armin.d.ts.map +1 -0
  305. package/dist/modes/interactive/components/armin.js +333 -0
  306. package/dist/modes/interactive/components/armin.js.map +1 -0
  307. package/dist/modes/interactive/components/assistant-message.d.ts +20 -0
  308. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  309. package/dist/modes/interactive/components/assistant-message.js +121 -0
  310. package/dist/modes/interactive/components/assistant-message.js.map +1 -0
  311. package/dist/modes/interactive/components/bash-execution.d.ts +34 -0
  312. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  313. package/dist/modes/interactive/components/bash-execution.js +175 -0
  314. package/dist/modes/interactive/components/bash-execution.js.map +1 -0
  315. package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  316. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  317. package/dist/modes/interactive/components/bordered-loader.js +54 -0
  318. package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  319. package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  320. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  321. package/dist/modes/interactive/components/branch-summary-message.js +44 -0
  322. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  323. package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  324. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  325. package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
  326. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  327. package/dist/modes/interactive/components/config-selector.d.ts +71 -0
  328. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  329. package/dist/modes/interactive/components/config-selector.js +506 -0
  330. package/dist/modes/interactive/components/config-selector.js.map +1 -0
  331. package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  332. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  333. package/dist/modes/interactive/components/countdown-timer.js +33 -0
  334. package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  335. package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  336. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  337. package/dist/modes/interactive/components/custom-editor.js +70 -0
  338. package/dist/modes/interactive/components/custom-editor.js.map +1 -0
  339. package/dist/modes/interactive/components/custom-message.d.ts +20 -0
  340. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  341. package/dist/modes/interactive/components/custom-message.js +79 -0
  342. package/dist/modes/interactive/components/custom-message.js.map +1 -0
  343. package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  344. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
  345. package/dist/modes/interactive/components/daxnuts.js +140 -0
  346. package/dist/modes/interactive/components/daxnuts.js.map +1 -0
  347. package/dist/modes/interactive/components/diff.d.ts +12 -0
  348. package/dist/modes/interactive/components/diff.d.ts.map +1 -0
  349. package/dist/modes/interactive/components/diff.js +133 -0
  350. package/dist/modes/interactive/components/diff.js.map +1 -0
  351. package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  352. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  353. package/dist/modes/interactive/components/dynamic-border.js +21 -0
  354. package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  355. package/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
  356. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -0
  357. package/dist/modes/interactive/components/earendil-announcement.js +40 -0
  358. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -0
  359. package/dist/modes/interactive/components/extension-editor.d.ts +20 -0
  360. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  361. package/dist/modes/interactive/components/extension-editor.js +119 -0
  362. package/dist/modes/interactive/components/extension-editor.js.map +1 -0
  363. package/dist/modes/interactive/components/extension-input.d.ts +23 -0
  364. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  365. package/dist/modes/interactive/components/extension-input.js +61 -0
  366. package/dist/modes/interactive/components/extension-input.js.map +1 -0
  367. package/dist/modes/interactive/components/extension-selector.d.ts +26 -0
  368. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  369. package/dist/modes/interactive/components/extension-selector.js +83 -0
  370. package/dist/modes/interactive/components/extension-selector.js.map +1 -0
  371. package/dist/modes/interactive/components/footer.d.ts +28 -0
  372. package/dist/modes/interactive/components/footer.d.ts.map +1 -0
  373. package/dist/modes/interactive/components/footer.js +210 -0
  374. package/dist/modes/interactive/components/footer.js.map +1 -0
  375. package/dist/modes/interactive/components/index.d.ts +32 -0
  376. package/dist/modes/interactive/components/index.d.ts.map +1 -0
  377. package/dist/modes/interactive/components/index.js +33 -0
  378. package/dist/modes/interactive/components/index.js.map +1 -0
  379. package/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
  380. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  381. package/dist/modes/interactive/components/keybinding-hints.js +36 -0
  382. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  383. package/dist/modes/interactive/components/login-dialog.d.ts +52 -0
  384. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  385. package/dist/modes/interactive/components/login-dialog.js +183 -0
  386. package/dist/modes/interactive/components/login-dialog.js.map +1 -0
  387. package/dist/modes/interactive/components/model-selector.d.ts +47 -0
  388. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  389. package/dist/modes/interactive/components/model-selector.js +278 -0
  390. package/dist/modes/interactive/components/model-selector.js.map +1 -0
  391. package/dist/modes/interactive/components/oauth-selector.d.ts +31 -0
  392. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  393. package/dist/modes/interactive/components/oauth-selector.js +165 -0
  394. package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  395. package/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
  396. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  397. package/dist/modes/interactive/components/scoped-models-selector.js +290 -0
  398. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  399. package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  400. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  401. package/dist/modes/interactive/components/session-selector-search.js +155 -0
  402. package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  403. package/dist/modes/interactive/components/session-selector.d.ts +96 -0
  404. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  405. package/dist/modes/interactive/components/session-selector.js +861 -0
  406. package/dist/modes/interactive/components/session-selector.js.map +1 -0
  407. package/dist/modes/interactive/components/settings-selector.d.ts +69 -0
  408. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  409. package/dist/modes/interactive/components/settings-selector.js +390 -0
  410. package/dist/modes/interactive/components/settings-selector.js.map +1 -0
  411. package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  412. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  413. package/dist/modes/interactive/components/show-images-selector.js +39 -0
  414. package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  415. package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  416. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  417. package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
  418. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  419. package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  420. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  421. package/dist/modes/interactive/components/theme-selector.js +50 -0
  422. package/dist/modes/interactive/components/theme-selector.js.map +1 -0
  423. package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  424. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  425. package/dist/modes/interactive/components/thinking-selector.js +51 -0
  426. package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  427. package/dist/modes/interactive/components/tool-execution.d.ts +63 -0
  428. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  429. package/dist/modes/interactive/components/tool-execution.js +295 -0
  430. package/dist/modes/interactive/components/tool-execution.js.map +1 -0
  431. package/dist/modes/interactive/components/tree-selector.d.ts +89 -0
  432. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  433. package/dist/modes/interactive/components/tree-selector.js +1093 -0
  434. package/dist/modes/interactive/components/tree-selector.js.map +1 -0
  435. package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  436. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  437. package/dist/modes/interactive/components/user-message-selector.js +114 -0
  438. package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  439. package/dist/modes/interactive/components/user-message.d.ts +10 -0
  440. package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  441. package/dist/modes/interactive/components/user-message.js +29 -0
  442. package/dist/modes/interactive/components/user-message.js.map +1 -0
  443. package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  444. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  445. package/dist/modes/interactive/components/visual-truncate.js +33 -0
  446. package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  447. package/dist/modes/interactive/components/worker-status.d.ts +23 -0
  448. package/dist/modes/interactive/components/worker-status.d.ts.map +1 -0
  449. package/dist/modes/interactive/components/worker-status.js +77 -0
  450. package/dist/modes/interactive/components/worker-status.js.map +1 -0
  451. package/dist/modes/interactive/interactive-mode.d.ts +370 -0
  452. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  453. package/dist/modes/interactive/interactive-mode.js +4674 -0
  454. package/dist/modes/interactive/interactive-mode.js.map +1 -0
  455. package/dist/modes/interactive/theme/dark.json +86 -0
  456. package/dist/modes/interactive/theme/light.json +85 -0
  457. package/dist/modes/interactive/theme/theme-schema.json +335 -0
  458. package/dist/modes/interactive/theme/theme.d.ts +100 -0
  459. package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  460. package/dist/modes/interactive/theme/theme.js +1034 -0
  461. package/dist/modes/interactive/theme/theme.js.map +1 -0
  462. package/dist/modes/interactive/worker-ui-integration.d.ts +102 -0
  463. package/dist/modes/interactive/worker-ui-integration.d.ts.map +1 -0
  464. package/dist/modes/interactive/worker-ui-integration.js +147 -0
  465. package/dist/modes/interactive/worker-ui-integration.js.map +1 -0
  466. package/dist/modes/print-mode.d.ts +28 -0
  467. package/dist/modes/print-mode.d.ts.map +1 -0
  468. package/dist/modes/print-mode.js +131 -0
  469. package/dist/modes/print-mode.js.map +1 -0
  470. package/dist/modes/rpc/jsonl.d.ts +17 -0
  471. package/dist/modes/rpc/jsonl.d.ts.map +1 -0
  472. package/dist/modes/rpc/jsonl.js +49 -0
  473. package/dist/modes/rpc/jsonl.js.map +1 -0
  474. package/dist/modes/rpc/rpc-client.d.ts +227 -0
  475. package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  476. package/dist/modes/rpc/rpc-client.js +467 -0
  477. package/dist/modes/rpc/rpc-client.js.map +1 -0
  478. package/dist/modes/rpc/rpc-mode.d.ts +20 -0
  479. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  480. package/dist/modes/rpc/rpc-mode.js +615 -0
  481. package/dist/modes/rpc/rpc-mode.js.map +1 -0
  482. package/dist/modes/rpc/rpc-types.d.ts +420 -0
  483. package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  484. package/dist/modes/rpc/rpc-types.js +8 -0
  485. package/dist/modes/rpc/rpc-types.js.map +1 -0
  486. package/dist/package-manager-cli.d.ts +4 -0
  487. package/dist/package-manager-cli.d.ts.map +1 -0
  488. package/dist/package-manager-cli.js +515 -0
  489. package/dist/package-manager-cli.js.map +1 -0
  490. package/dist/utils/ansi.d.ts +2 -0
  491. package/dist/utils/ansi.d.ts.map +1 -0
  492. package/dist/utils/ansi.js +52 -0
  493. package/dist/utils/ansi.js.map +1 -0
  494. package/dist/utils/changelog.d.ts +21 -0
  495. package/dist/utils/changelog.d.ts.map +1 -0
  496. package/dist/utils/changelog.js +87 -0
  497. package/dist/utils/changelog.js.map +1 -0
  498. package/dist/utils/child-process.d.ts +15 -0
  499. package/dist/utils/child-process.d.ts.map +1 -0
  500. package/dist/utils/child-process.js +88 -0
  501. package/dist/utils/child-process.js.map +1 -0
  502. package/dist/utils/clipboard-image.d.ts +11 -0
  503. package/dist/utils/clipboard-image.d.ts.map +1 -0
  504. package/dist/utils/clipboard-image.js +245 -0
  505. package/dist/utils/clipboard-image.js.map +1 -0
  506. package/dist/utils/clipboard-native.d.ts +10 -0
  507. package/dist/utils/clipboard-native.d.ts.map +1 -0
  508. package/dist/utils/clipboard-native.js +20 -0
  509. package/dist/utils/clipboard-native.js.map +1 -0
  510. package/dist/utils/clipboard.d.ts +2 -0
  511. package/dist/utils/clipboard.d.ts.map +1 -0
  512. package/dist/utils/clipboard.js +117 -0
  513. package/dist/utils/clipboard.js.map +1 -0
  514. package/dist/utils/deprecation.d.ts +4 -0
  515. package/dist/utils/deprecation.d.ts.map +1 -0
  516. package/dist/utils/deprecation.js +13 -0
  517. package/dist/utils/deprecation.js.map +1 -0
  518. package/dist/utils/exif-orientation.d.ts +5 -0
  519. package/dist/utils/exif-orientation.d.ts.map +1 -0
  520. package/dist/utils/exif-orientation.js +158 -0
  521. package/dist/utils/exif-orientation.js.map +1 -0
  522. package/dist/utils/frontmatter.d.ts +8 -0
  523. package/dist/utils/frontmatter.d.ts.map +1 -0
  524. package/dist/utils/frontmatter.js +26 -0
  525. package/dist/utils/frontmatter.js.map +1 -0
  526. package/dist/utils/fs-watch.d.ts +5 -0
  527. package/dist/utils/fs-watch.d.ts.map +1 -0
  528. package/dist/utils/fs-watch.js +25 -0
  529. package/dist/utils/fs-watch.js.map +1 -0
  530. package/dist/utils/git.d.ts +26 -0
  531. package/dist/utils/git.d.ts.map +1 -0
  532. package/dist/utils/git.js +163 -0
  533. package/dist/utils/git.js.map +1 -0
  534. package/dist/utils/html.d.ts +7 -0
  535. package/dist/utils/html.d.ts.map +1 -0
  536. package/dist/utils/html.js +40 -0
  537. package/dist/utils/html.js.map +1 -0
  538. package/dist/utils/image-convert.d.ts +9 -0
  539. package/dist/utils/image-convert.d.ts.map +1 -0
  540. package/dist/utils/image-convert.js +39 -0
  541. package/dist/utils/image-convert.js.map +1 -0
  542. package/dist/utils/image-resize-core.d.ts +30 -0
  543. package/dist/utils/image-resize-core.d.ts.map +1 -0
  544. package/dist/utils/image-resize-core.js +124 -0
  545. package/dist/utils/image-resize-core.js.map +1 -0
  546. package/dist/utils/image-resize-worker.d.ts +2 -0
  547. package/dist/utils/image-resize-worker.d.ts.map +1 -0
  548. package/dist/utils/image-resize-worker.js +31 -0
  549. package/dist/utils/image-resize-worker.js.map +1 -0
  550. package/dist/utils/image-resize.d.ts +16 -0
  551. package/dist/utils/image-resize.d.ts.map +1 -0
  552. package/dist/utils/image-resize.js +97 -0
  553. package/dist/utils/image-resize.js.map +1 -0
  554. package/dist/utils/json.d.ts +3 -0
  555. package/dist/utils/json.d.ts.map +1 -0
  556. package/dist/utils/json.js +7 -0
  557. package/dist/utils/json.js.map +1 -0
  558. package/dist/utils/leaf-user-agent.d.ts +2 -0
  559. package/dist/utils/leaf-user-agent.d.ts.map +1 -0
  560. package/dist/utils/leaf-user-agent.js +5 -0
  561. package/dist/utils/leaf-user-agent.js.map +1 -0
  562. package/dist/utils/mime.d.ts +3 -0
  563. package/dist/utils/mime.d.ts.map +1 -0
  564. package/dist/utils/mime.js +69 -0
  565. package/dist/utils/mime.js.map +1 -0
  566. package/dist/utils/paths.d.ts +31 -0
  567. package/dist/utils/paths.d.ts.map +1 -0
  568. package/dist/utils/paths.js +92 -0
  569. package/dist/utils/paths.js.map +1 -0
  570. package/dist/utils/photon.d.ts +21 -0
  571. package/dist/utils/photon.d.ts.map +1 -0
  572. package/dist/utils/photon.js +121 -0
  573. package/dist/utils/photon.js.map +1 -0
  574. package/dist/utils/shell.d.ts +30 -0
  575. package/dist/utils/shell.d.ts.map +1 -0
  576. package/dist/utils/shell.js +195 -0
  577. package/dist/utils/shell.js.map +1 -0
  578. package/dist/utils/sleep.d.ts +5 -0
  579. package/dist/utils/sleep.d.ts.map +1 -0
  580. package/dist/utils/sleep.js +17 -0
  581. package/dist/utils/sleep.js.map +1 -0
  582. package/dist/utils/syntax-highlight.d.ts +12 -0
  583. package/dist/utils/syntax-highlight.d.ts.map +1 -0
  584. package/dist/utils/syntax-highlight.js +118 -0
  585. package/dist/utils/syntax-highlight.js.map +1 -0
  586. package/dist/utils/tools-manager.d.ts +3 -0
  587. package/dist/utils/tools-manager.d.ts.map +1 -0
  588. package/dist/utils/tools-manager.js +328 -0
  589. package/dist/utils/tools-manager.js.map +1 -0
  590. package/dist/utils/version-check.d.ts +15 -0
  591. package/dist/utils/version-check.d.ts.map +1 -0
  592. package/dist/utils/version-check.js +82 -0
  593. package/dist/utils/version-check.js.map +1 -0
  594. package/dist/utils/windows-self-update.d.ts +3 -0
  595. package/dist/utils/windows-self-update.d.ts.map +1 -0
  596. package/dist/utils/windows-self-update.js +77 -0
  597. package/dist/utils/windows-self-update.js.map +1 -0
  598. package/package.json +100 -0
@@ -0,0 +1,615 @@
1
+ /**
2
+ * RPC mode: Headless operation with JSON stdin/stdout protocol.
3
+ *
4
+ * Used for embedding the agent in other applications.
5
+ * Receives commands as JSON on stdin, outputs events and responses as JSON on stdout.
6
+ *
7
+ * Protocol:
8
+ * - Commands: JSON objects with `type` field, optional `id` for correlation
9
+ * - Responses: JSON objects with `type: "response"`, `command`, `success`, and optional `data`/`error`
10
+ * - Events: AgentSessionEvent objects streamed as they occur
11
+ * - Extension UI: Extension UI requests are emitted, client responds with extension_ui_response
12
+ */
13
+ import * as crypto from "node:crypto";
14
+ import { flushRawStdout, takeOverStdout, waitForRawStdoutBackpressure, writeRawStdout, } from "../../core/output-guard.js";
15
+ import { killTrackedDetachedChildren } from "../../utils/shell.js";
16
+ import { theme } from "../interactive/theme/theme.js";
17
+ import { attachJsonlLineReader, serializeJsonLine } from "./jsonl.js";
18
+ /**
19
+ * Run in RPC mode.
20
+ * Listens for JSON commands on stdin, outputs events and responses on stdout.
21
+ */
22
+ export async function runRpcMode(runtimeHost) {
23
+ takeOverStdout();
24
+ let session = runtimeHost.session;
25
+ let unsubscribe;
26
+ let unsubscribeBackpressure;
27
+ const output = (obj) => {
28
+ writeRawStdout(serializeJsonLine(obj));
29
+ };
30
+ const success = (id, command, data) => {
31
+ if (data === undefined) {
32
+ return { id, type: "response", command, success: true };
33
+ }
34
+ return { id, type: "response", command, success: true, data };
35
+ };
36
+ const error = (id, command, message) => {
37
+ return { id, type: "response", command, success: false, error: message };
38
+ };
39
+ // Pending extension UI requests waiting for response
40
+ const pendingExtensionRequests = new Map();
41
+ // Shutdown request flag
42
+ let shutdownRequested = false;
43
+ let shuttingDown = false;
44
+ const signalCleanupHandlers = [];
45
+ /** Helper for dialog methods with signal/timeout support */
46
+ function createDialogPromise(opts, defaultValue, request, parseResponse) {
47
+ if (opts?.signal?.aborted)
48
+ return Promise.resolve(defaultValue);
49
+ const id = crypto.randomUUID();
50
+ return new Promise((resolve, reject) => {
51
+ let timeoutId;
52
+ const cleanup = () => {
53
+ if (timeoutId)
54
+ clearTimeout(timeoutId);
55
+ opts?.signal?.removeEventListener("abort", onAbort);
56
+ pendingExtensionRequests.delete(id);
57
+ };
58
+ const onAbort = () => {
59
+ cleanup();
60
+ resolve(defaultValue);
61
+ };
62
+ opts?.signal?.addEventListener("abort", onAbort, { once: true });
63
+ if (opts?.timeout) {
64
+ timeoutId = setTimeout(() => {
65
+ cleanup();
66
+ resolve(defaultValue);
67
+ }, opts.timeout);
68
+ }
69
+ pendingExtensionRequests.set(id, {
70
+ resolve: (response) => {
71
+ cleanup();
72
+ resolve(parseResponse(response));
73
+ },
74
+ reject,
75
+ });
76
+ output({ type: "extension_ui_request", id, ...request });
77
+ });
78
+ }
79
+ /**
80
+ * Create an extension UI context that uses the RPC protocol.
81
+ */
82
+ const createExtensionUIContext = () => ({
83
+ select: (title, options, opts) => createDialogPromise(opts, undefined, { method: "select", title, options, timeout: opts?.timeout }, (r) => "cancelled" in r && r.cancelled ? undefined : "value" in r ? r.value : undefined),
84
+ confirm: (title, message, opts) => createDialogPromise(opts, false, { method: "confirm", title, message, timeout: opts?.timeout }, (r) => "cancelled" in r && r.cancelled ? false : "confirmed" in r ? r.confirmed : false),
85
+ input: (title, placeholder, opts) => createDialogPromise(opts, undefined, { method: "input", title, placeholder, timeout: opts?.timeout }, (r) => "cancelled" in r && r.cancelled ? undefined : "value" in r ? r.value : undefined),
86
+ notify(message, type) {
87
+ // Fire and forget - no response needed
88
+ output({
89
+ type: "extension_ui_request",
90
+ id: crypto.randomUUID(),
91
+ method: "notify",
92
+ message,
93
+ notifyType: type,
94
+ });
95
+ },
96
+ onTerminalInput() {
97
+ // Raw terminal input not supported in RPC mode
98
+ return () => { };
99
+ },
100
+ setStatus(key, text) {
101
+ // Fire and forget - no response needed
102
+ output({
103
+ type: "extension_ui_request",
104
+ id: crypto.randomUUID(),
105
+ method: "setStatus",
106
+ statusKey: key,
107
+ statusText: text,
108
+ });
109
+ },
110
+ setWorkingMessage(_message) {
111
+ // Working message not supported in RPC mode - requires TUI loader access
112
+ },
113
+ setWorkingVisible(_visible) {
114
+ // Working visibility not supported in RPC mode - requires TUI loader access
115
+ },
116
+ setWorkingIndicator(_options) {
117
+ // Working indicator customization not supported in RPC mode - requires TUI loader access
118
+ },
119
+ setHiddenThinkingLabel(_label) {
120
+ // Hidden thinking label not supported in RPC mode - requires TUI message rendering access
121
+ },
122
+ setWidget(key, content, options) {
123
+ // Only support string arrays in RPC mode - factory functions are ignored
124
+ if (content === undefined || Array.isArray(content)) {
125
+ output({
126
+ type: "extension_ui_request",
127
+ id: crypto.randomUUID(),
128
+ method: "setWidget",
129
+ widgetKey: key,
130
+ widgetLines: content,
131
+ widgetPlacement: options?.placement,
132
+ });
133
+ }
134
+ // Component factories are not supported in RPC mode - would need TUI access
135
+ },
136
+ setFooter(_factory) {
137
+ // Custom footer not supported in RPC mode - requires TUI access
138
+ },
139
+ setHeader(_factory) {
140
+ // Custom header not supported in RPC mode - requires TUI access
141
+ },
142
+ setTitle(title) {
143
+ // Fire and forget - host can implement terminal title control
144
+ output({
145
+ type: "extension_ui_request",
146
+ id: crypto.randomUUID(),
147
+ method: "setTitle",
148
+ title,
149
+ });
150
+ },
151
+ async custom() {
152
+ // Custom UI not supported in RPC mode
153
+ return undefined;
154
+ },
155
+ pasteToEditor(text) {
156
+ // Paste handling not supported in RPC mode - falls back to setEditorText
157
+ this.setEditorText(text);
158
+ },
159
+ setEditorText(text) {
160
+ // Fire and forget - host can implement editor control
161
+ output({
162
+ type: "extension_ui_request",
163
+ id: crypto.randomUUID(),
164
+ method: "set_editor_text",
165
+ text,
166
+ });
167
+ },
168
+ getEditorText() {
169
+ // Synchronous method can't wait for RPC response
170
+ // Host should track editor state locally if needed
171
+ return "";
172
+ },
173
+ async editor(title, prefill) {
174
+ const id = crypto.randomUUID();
175
+ return new Promise((resolve, reject) => {
176
+ pendingExtensionRequests.set(id, {
177
+ resolve: (response) => {
178
+ if ("cancelled" in response && response.cancelled) {
179
+ resolve(undefined);
180
+ }
181
+ else if ("value" in response) {
182
+ resolve(response.value);
183
+ }
184
+ else {
185
+ resolve(undefined);
186
+ }
187
+ },
188
+ reject,
189
+ });
190
+ output({ type: "extension_ui_request", id, method: "editor", title, prefill });
191
+ });
192
+ },
193
+ addAutocompleteProvider() {
194
+ // Autocomplete provider composition is not supported in RPC mode
195
+ },
196
+ setEditorComponent() {
197
+ // Custom editor components not supported in RPC mode
198
+ },
199
+ getEditorComponent() {
200
+ // Custom editor components not supported in RPC mode
201
+ return undefined;
202
+ },
203
+ get theme() {
204
+ return theme;
205
+ },
206
+ getAllThemes() {
207
+ return [];
208
+ },
209
+ getTheme(_name) {
210
+ return undefined;
211
+ },
212
+ setTheme(_theme) {
213
+ // Theme switching not supported in RPC mode
214
+ return { success: false, error: "Theme switching not supported in RPC mode" };
215
+ },
216
+ getToolsExpanded() {
217
+ // Tool expansion not supported in RPC mode - no TUI
218
+ return false;
219
+ },
220
+ setToolsExpanded(_expanded) {
221
+ // Tool expansion not supported in RPC mode - no TUI
222
+ },
223
+ });
224
+ runtimeHost.setRebindSession(async () => {
225
+ await rebindSession();
226
+ });
227
+ const rebindSession = async () => {
228
+ session = runtimeHost.session;
229
+ await session.bindExtensions({
230
+ uiContext: createExtensionUIContext(),
231
+ commandContextActions: {
232
+ waitForIdle: () => session.agent.waitForIdle(),
233
+ newSession: async (options) => runtimeHost.newSession(options),
234
+ fork: async (entryId, forkOptions) => {
235
+ const result = await runtimeHost.fork(entryId, forkOptions);
236
+ return { cancelled: result.cancelled };
237
+ },
238
+ navigateTree: async (targetId, options) => {
239
+ const result = await session.navigateTree(targetId, {
240
+ summarize: options?.summarize,
241
+ customInstructions: options?.customInstructions,
242
+ replaceInstructions: options?.replaceInstructions,
243
+ label: options?.label,
244
+ });
245
+ return { cancelled: result.cancelled };
246
+ },
247
+ switchSession: async (sessionPath, options) => {
248
+ return runtimeHost.switchSession(sessionPath, options);
249
+ },
250
+ reload: async () => {
251
+ await session.reload();
252
+ },
253
+ },
254
+ shutdownHandler: () => {
255
+ shutdownRequested = true;
256
+ },
257
+ onError: (err) => {
258
+ output({ type: "extension_error", extensionPath: err.extensionPath, event: err.event, error: err.error });
259
+ },
260
+ });
261
+ unsubscribe?.();
262
+ unsubscribeBackpressure?.();
263
+ unsubscribe = session.subscribe((event) => {
264
+ output(event);
265
+ });
266
+ unsubscribeBackpressure = session.agent.subscribe(async () => {
267
+ await waitForRawStdoutBackpressure();
268
+ });
269
+ };
270
+ const registerSignalHandlers = () => {
271
+ const signals = ["SIGTERM"];
272
+ if (process.platform !== "win32") {
273
+ signals.push("SIGHUP");
274
+ }
275
+ for (const signal of signals) {
276
+ const handler = () => {
277
+ killTrackedDetachedChildren();
278
+ void shutdown(signal === "SIGHUP" ? 129 : 143, signal);
279
+ };
280
+ process.on(signal, handler);
281
+ signalCleanupHandlers.push(() => process.off(signal, handler));
282
+ }
283
+ };
284
+ await rebindSession();
285
+ registerSignalHandlers();
286
+ // Handle a single command
287
+ const handleCommand = async (command) => {
288
+ const id = command.id;
289
+ switch (command.type) {
290
+ // =================================================================
291
+ // Prompting
292
+ // =================================================================
293
+ case "prompt": {
294
+ // Start prompt handling immediately, but emit the authoritative response only after
295
+ // prompt preflight succeeds. Queued and immediately handled prompts also count as success.
296
+ let preflightSucceeded = false;
297
+ void session
298
+ .prompt(command.message, {
299
+ images: command.images,
300
+ streamingBehavior: command.streamingBehavior,
301
+ source: "rpc",
302
+ preflightResult: (didSucceed) => {
303
+ if (didSucceed) {
304
+ preflightSucceeded = true;
305
+ output(success(id, "prompt"));
306
+ }
307
+ },
308
+ })
309
+ .catch((e) => {
310
+ if (!preflightSucceeded) {
311
+ output(error(id, "prompt", e.message));
312
+ }
313
+ });
314
+ return undefined;
315
+ }
316
+ case "steer": {
317
+ await session.steer(command.message, command.images);
318
+ return success(id, "steer");
319
+ }
320
+ case "follow_up": {
321
+ await session.followUp(command.message, command.images);
322
+ return success(id, "follow_up");
323
+ }
324
+ case "abort": {
325
+ await session.abort();
326
+ return success(id, "abort");
327
+ }
328
+ case "new_session": {
329
+ const options = command.parentSession ? { parentSession: command.parentSession } : undefined;
330
+ const result = await runtimeHost.newSession(options);
331
+ if (!result.cancelled) {
332
+ await rebindSession();
333
+ }
334
+ return success(id, "new_session", result);
335
+ }
336
+ // =================================================================
337
+ // State
338
+ // =================================================================
339
+ case "get_state": {
340
+ const state = {
341
+ model: session.model,
342
+ thinkingLevel: session.thinkingLevel,
343
+ isStreaming: session.isStreaming,
344
+ isCompacting: session.isCompacting,
345
+ steeringMode: session.steeringMode,
346
+ followUpMode: session.followUpMode,
347
+ sessionFile: session.sessionFile,
348
+ sessionId: session.sessionId,
349
+ sessionName: session.sessionName,
350
+ autoCompactionEnabled: session.autoCompactionEnabled,
351
+ messageCount: session.messages.length,
352
+ pendingMessageCount: session.pendingMessageCount,
353
+ };
354
+ return success(id, "get_state", state);
355
+ }
356
+ // =================================================================
357
+ // Model
358
+ // =================================================================
359
+ case "set_model": {
360
+ const models = await session.modelRegistry.getAvailable();
361
+ const model = models.find((m) => m.provider === command.provider && m.id === command.modelId);
362
+ if (!model) {
363
+ return error(id, "set_model", `Model not found: ${command.provider}/${command.modelId}`);
364
+ }
365
+ await session.setModel(model);
366
+ return success(id, "set_model", model);
367
+ }
368
+ case "cycle_model": {
369
+ const result = await session.cycleModel();
370
+ if (!result) {
371
+ return success(id, "cycle_model", null);
372
+ }
373
+ return success(id, "cycle_model", result);
374
+ }
375
+ case "get_available_models": {
376
+ const models = await session.modelRegistry.getAvailable();
377
+ return success(id, "get_available_models", { models });
378
+ }
379
+ // =================================================================
380
+ // Thinking
381
+ // =================================================================
382
+ case "set_thinking_level": {
383
+ session.setThinkingLevel(command.level);
384
+ return success(id, "set_thinking_level");
385
+ }
386
+ case "cycle_thinking_level": {
387
+ const level = session.cycleThinkingLevel();
388
+ if (!level) {
389
+ return success(id, "cycle_thinking_level", null);
390
+ }
391
+ return success(id, "cycle_thinking_level", { level });
392
+ }
393
+ // =================================================================
394
+ // Queue Modes
395
+ // =================================================================
396
+ case "set_steering_mode": {
397
+ session.setSteeringMode(command.mode);
398
+ return success(id, "set_steering_mode");
399
+ }
400
+ case "set_follow_up_mode": {
401
+ session.setFollowUpMode(command.mode);
402
+ return success(id, "set_follow_up_mode");
403
+ }
404
+ // =================================================================
405
+ // Compaction
406
+ // =================================================================
407
+ case "compact": {
408
+ const result = await session.compact(command.customInstructions);
409
+ return success(id, "compact", result);
410
+ }
411
+ case "set_auto_compaction": {
412
+ session.setAutoCompactionEnabled(command.enabled);
413
+ return success(id, "set_auto_compaction");
414
+ }
415
+ // =================================================================
416
+ // Retry
417
+ // =================================================================
418
+ case "set_auto_retry": {
419
+ session.setAutoRetryEnabled(command.enabled);
420
+ return success(id, "set_auto_retry");
421
+ }
422
+ case "abort_retry": {
423
+ session.abortRetry();
424
+ return success(id, "abort_retry");
425
+ }
426
+ // =================================================================
427
+ // Bash
428
+ // =================================================================
429
+ case "bash": {
430
+ const result = await session.executeBash(command.command, undefined, {
431
+ excludeFromContext: command.excludeFromContext,
432
+ });
433
+ return success(id, "bash", result);
434
+ }
435
+ case "abort_bash": {
436
+ session.abortBash();
437
+ return success(id, "abort_bash");
438
+ }
439
+ // =================================================================
440
+ // Session
441
+ // =================================================================
442
+ case "get_session_stats": {
443
+ const stats = session.getSessionStats();
444
+ return success(id, "get_session_stats", stats);
445
+ }
446
+ case "export_html": {
447
+ const path = await session.exportToHtml(command.outputPath);
448
+ return success(id, "export_html", { path });
449
+ }
450
+ case "switch_session": {
451
+ const result = await runtimeHost.switchSession(command.sessionPath);
452
+ if (!result.cancelled) {
453
+ await rebindSession();
454
+ }
455
+ return success(id, "switch_session", result);
456
+ }
457
+ case "fork": {
458
+ const result = await runtimeHost.fork(command.entryId);
459
+ if (!result.cancelled) {
460
+ await rebindSession();
461
+ }
462
+ return success(id, "fork", { text: result.selectedText, cancelled: result.cancelled });
463
+ }
464
+ case "clone": {
465
+ const leafId = session.sessionManager.getLeafId();
466
+ if (!leafId) {
467
+ return error(id, "clone", "Cannot clone session: no current entry selected");
468
+ }
469
+ const result = await runtimeHost.fork(leafId, { position: "at" });
470
+ if (!result.cancelled) {
471
+ await rebindSession();
472
+ }
473
+ return success(id, "clone", { cancelled: result.cancelled });
474
+ }
475
+ case "get_fork_messages": {
476
+ const messages = session.getUserMessagesForForking();
477
+ return success(id, "get_fork_messages", { messages });
478
+ }
479
+ case "get_last_assistant_text": {
480
+ const text = session.getLastAssistantText();
481
+ return success(id, "get_last_assistant_text", { text });
482
+ }
483
+ case "set_session_name": {
484
+ const name = command.name.trim();
485
+ if (!name) {
486
+ return error(id, "set_session_name", "Session name cannot be empty");
487
+ }
488
+ session.setSessionName(name);
489
+ return success(id, "set_session_name");
490
+ }
491
+ // =================================================================
492
+ // Messages
493
+ // =================================================================
494
+ case "get_messages": {
495
+ return success(id, "get_messages", { messages: session.messages });
496
+ }
497
+ // =================================================================
498
+ // Commands (available for invocation via prompt)
499
+ // =================================================================
500
+ case "get_commands": {
501
+ const commands = [];
502
+ for (const command of session.extensionRunner.getRegisteredCommands()) {
503
+ commands.push({
504
+ name: command.invocationName,
505
+ description: command.description,
506
+ source: "extension",
507
+ sourceInfo: command.sourceInfo,
508
+ });
509
+ }
510
+ for (const template of session.promptTemplates) {
511
+ commands.push({
512
+ name: template.name,
513
+ description: template.description,
514
+ source: "prompt",
515
+ sourceInfo: template.sourceInfo,
516
+ });
517
+ }
518
+ for (const skill of session.resourceLoader.getSkills().skills) {
519
+ commands.push({
520
+ name: `skill:${skill.name}`,
521
+ description: skill.description,
522
+ source: "skill",
523
+ sourceInfo: skill.sourceInfo,
524
+ });
525
+ }
526
+ return success(id, "get_commands", { commands });
527
+ }
528
+ default: {
529
+ const unknownCommand = command;
530
+ return error(undefined, unknownCommand.type, `Unknown command: ${unknownCommand.type}`);
531
+ }
532
+ }
533
+ };
534
+ /**
535
+ * Check if shutdown was requested and perform shutdown if so.
536
+ * Called after handling each command when waiting for the next command.
537
+ */
538
+ let detachInput = () => { };
539
+ async function shutdown(exitCode = 0, signal) {
540
+ if (shuttingDown) {
541
+ process.exit(exitCode);
542
+ }
543
+ shuttingDown = true;
544
+ for (const cleanup of signalCleanupHandlers) {
545
+ cleanup();
546
+ }
547
+ unsubscribe?.();
548
+ unsubscribeBackpressure?.();
549
+ await runtimeHost.dispose();
550
+ detachInput();
551
+ process.stdin.pause();
552
+ if (signal !== "SIGTERM") {
553
+ await flushRawStdout();
554
+ }
555
+ process.exit(exitCode);
556
+ }
557
+ async function checkShutdownRequested() {
558
+ if (!shutdownRequested)
559
+ return;
560
+ await shutdown();
561
+ }
562
+ const handleInputLine = async (line) => {
563
+ let parsed;
564
+ try {
565
+ parsed = JSON.parse(line);
566
+ }
567
+ catch (parseError) {
568
+ output(error(undefined, "parse", `Failed to parse command: ${parseError instanceof Error ? parseError.message : String(parseError)}`));
569
+ await waitForRawStdoutBackpressure();
570
+ return;
571
+ }
572
+ // Handle extension UI responses
573
+ if (typeof parsed === "object" &&
574
+ parsed !== null &&
575
+ "type" in parsed &&
576
+ parsed.type === "extension_ui_response") {
577
+ const response = parsed;
578
+ const pending = pendingExtensionRequests.get(response.id);
579
+ if (pending) {
580
+ pendingExtensionRequests.delete(response.id);
581
+ pending.resolve(response);
582
+ }
583
+ return;
584
+ }
585
+ const command = parsed;
586
+ try {
587
+ const response = await handleCommand(command);
588
+ if (response) {
589
+ output(response);
590
+ await waitForRawStdoutBackpressure();
591
+ }
592
+ await checkShutdownRequested();
593
+ }
594
+ catch (commandError) {
595
+ output(error(command.id, command.type, commandError instanceof Error ? commandError.message : String(commandError)));
596
+ await waitForRawStdoutBackpressure();
597
+ }
598
+ };
599
+ const onInputEnd = () => {
600
+ void shutdown();
601
+ };
602
+ process.stdin.on("end", onInputEnd);
603
+ detachInput = (() => {
604
+ const detachJsonl = attachJsonlLineReader(process.stdin, (line) => {
605
+ void handleInputLine(line);
606
+ });
607
+ return () => {
608
+ detachJsonl();
609
+ process.stdin.off("end", onInputEnd);
610
+ };
611
+ })();
612
+ // Keep process alive forever
613
+ return new Promise(() => { });
614
+ }
615
+ //# sourceMappingURL=rpc-mode.js.map