@draht/coding-agent 2026.3.2-2

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 (639) hide show
  1. package/CHANGELOG.md +2866 -0
  2. package/README.md +566 -0
  3. package/bin/draht-tools.cjs +912 -0
  4. package/dist/cli/args.d.ts +48 -0
  5. package/dist/cli/args.d.ts.map +1 -0
  6. package/dist/cli/args.js +298 -0
  7. package/dist/cli/args.js.map +1 -0
  8. package/dist/cli/config-selector.d.ts +14 -0
  9. package/dist/cli/config-selector.d.ts.map +1 -0
  10. package/dist/cli/config-selector.js +31 -0
  11. package/dist/cli/config-selector.js.map +1 -0
  12. package/dist/cli/file-processor.d.ts +15 -0
  13. package/dist/cli/file-processor.d.ts.map +1 -0
  14. package/dist/cli/file-processor.js +79 -0
  15. package/dist/cli/file-processor.js.map +1 -0
  16. package/dist/cli/list-models.d.ts +9 -0
  17. package/dist/cli/list-models.d.ts.map +1 -0
  18. package/dist/cli/list-models.js +92 -0
  19. package/dist/cli/list-models.js.map +1 -0
  20. package/dist/cli/session-picker.d.ts +9 -0
  21. package/dist/cli/session-picker.d.ts.map +1 -0
  22. package/dist/cli/session-picker.js +34 -0
  23. package/dist/cli/session-picker.js.map +1 -0
  24. package/dist/cli.d.ts +3 -0
  25. package/dist/cli.d.ts.map +1 -0
  26. package/dist/cli.js +11 -0
  27. package/dist/cli.js.map +1 -0
  28. package/dist/config.d.ts +85 -0
  29. package/dist/config.d.ts.map +1 -0
  30. package/dist/config.js +235 -0
  31. package/dist/config.js.map +1 -0
  32. package/dist/core/agent-session.d.ts +571 -0
  33. package/dist/core/agent-session.d.ts.map +1 -0
  34. package/dist/core/agent-session.js +2343 -0
  35. package/dist/core/agent-session.js.map +1 -0
  36. package/dist/core/auth-storage.d.ts +129 -0
  37. package/dist/core/auth-storage.d.ts.map +1 -0
  38. package/dist/core/auth-storage.js +394 -0
  39. package/dist/core/auth-storage.js.map +1 -0
  40. package/dist/core/bash-executor.d.ts +47 -0
  41. package/dist/core/bash-executor.d.ts.map +1 -0
  42. package/dist/core/bash-executor.js +212 -0
  43. package/dist/core/bash-executor.js.map +1 -0
  44. package/dist/core/compaction/branch-summarization.d.ts +86 -0
  45. package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  46. package/dist/core/compaction/branch-summarization.js +242 -0
  47. package/dist/core/compaction/branch-summarization.js.map +1 -0
  48. package/dist/core/compaction/compaction.d.ts +121 -0
  49. package/dist/core/compaction/compaction.d.ts.map +1 -0
  50. package/dist/core/compaction/compaction.js +607 -0
  51. package/dist/core/compaction/compaction.js.map +1 -0
  52. package/dist/core/compaction/index.d.ts +7 -0
  53. package/dist/core/compaction/index.d.ts.map +1 -0
  54. package/dist/core/compaction/index.js +7 -0
  55. package/dist/core/compaction/index.js.map +1 -0
  56. package/dist/core/compaction/utils.d.ts +35 -0
  57. package/dist/core/compaction/utils.d.ts.map +1 -0
  58. package/dist/core/compaction/utils.js +138 -0
  59. package/dist/core/compaction/utils.js.map +1 -0
  60. package/dist/core/defaults.d.ts +3 -0
  61. package/dist/core/defaults.d.ts.map +1 -0
  62. package/dist/core/defaults.js +2 -0
  63. package/dist/core/defaults.js.map +1 -0
  64. package/dist/core/diagnostics.d.ts +15 -0
  65. package/dist/core/diagnostics.d.ts.map +1 -0
  66. package/dist/core/diagnostics.js +2 -0
  67. package/dist/core/diagnostics.js.map +1 -0
  68. package/dist/core/event-bus.d.ts +9 -0
  69. package/dist/core/event-bus.d.ts.map +1 -0
  70. package/dist/core/event-bus.js +25 -0
  71. package/dist/core/event-bus.js.map +1 -0
  72. package/dist/core/exec.d.ts +29 -0
  73. package/dist/core/exec.d.ts.map +1 -0
  74. package/dist/core/exec.js +71 -0
  75. package/dist/core/exec.js.map +1 -0
  76. package/dist/core/export-html/ansi-to-html.d.ts +22 -0
  77. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  78. package/dist/core/export-html/ansi-to-html.js +249 -0
  79. package/dist/core/export-html/ansi-to-html.js.map +1 -0
  80. package/dist/core/export-html/index.d.ts +34 -0
  81. package/dist/core/export-html/index.d.ts.map +1 -0
  82. package/dist/core/export-html/index.js +222 -0
  83. package/dist/core/export-html/index.js.map +1 -0
  84. package/dist/core/export-html/template.css +971 -0
  85. package/dist/core/export-html/template.html +54 -0
  86. package/dist/core/export-html/template.js +1586 -0
  87. package/dist/core/export-html/tool-renderer.d.ts +35 -0
  88. package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  89. package/dist/core/export-html/tool-renderer.js +57 -0
  90. package/dist/core/export-html/tool-renderer.js.map +1 -0
  91. package/dist/core/export-html/vendor/highlight.min.js +1213 -0
  92. package/dist/core/export-html/vendor/marked.min.js +6 -0
  93. package/dist/core/extensions/index.d.ts +11 -0
  94. package/dist/core/extensions/index.d.ts.map +1 -0
  95. package/dist/core/extensions/index.js +9 -0
  96. package/dist/core/extensions/index.js.map +1 -0
  97. package/dist/core/extensions/loader.d.ts +25 -0
  98. package/dist/core/extensions/loader.d.ts.map +1 -0
  99. package/dist/core/extensions/loader.js +415 -0
  100. package/dist/core/extensions/loader.js.map +1 -0
  101. package/dist/core/extensions/runner.d.ts +146 -0
  102. package/dist/core/extensions/runner.d.ts.map +1 -0
  103. package/dist/core/extensions/runner.js +645 -0
  104. package/dist/core/extensions/runner.js.map +1 -0
  105. package/dist/core/extensions/types.d.ts +1011 -0
  106. package/dist/core/extensions/types.d.ts.map +1 -0
  107. package/dist/core/extensions/types.js +35 -0
  108. package/dist/core/extensions/types.js.map +1 -0
  109. package/dist/core/extensions/wrapper.d.ts +27 -0
  110. package/dist/core/extensions/wrapper.d.ts.map +1 -0
  111. package/dist/core/extensions/wrapper.js +102 -0
  112. package/dist/core/extensions/wrapper.js.map +1 -0
  113. package/dist/core/footer-data-provider.d.ts +32 -0
  114. package/dist/core/footer-data-provider.d.ts.map +1 -0
  115. package/dist/core/footer-data-provider.js +134 -0
  116. package/dist/core/footer-data-provider.js.map +1 -0
  117. package/dist/core/index.d.ts +9 -0
  118. package/dist/core/index.d.ts.map +1 -0
  119. package/dist/core/index.js +9 -0
  120. package/dist/core/index.js.map +1 -0
  121. package/dist/core/keybindings.d.ts +55 -0
  122. package/dist/core/keybindings.d.ts.map +1 -0
  123. package/dist/core/keybindings.js +153 -0
  124. package/dist/core/keybindings.js.map +1 -0
  125. package/dist/core/messages.d.ts +77 -0
  126. package/dist/core/messages.d.ts.map +1 -0
  127. package/dist/core/messages.js +123 -0
  128. package/dist/core/messages.js.map +1 -0
  129. package/dist/core/model-registry.d.ts +112 -0
  130. package/dist/core/model-registry.d.ts.map +1 -0
  131. package/dist/core/model-registry.js +534 -0
  132. package/dist/core/model-registry.js.map +1 -0
  133. package/dist/core/model-resolver.d.ts +104 -0
  134. package/dist/core/model-resolver.d.ts.map +1 -0
  135. package/dist/core/model-resolver.js +432 -0
  136. package/dist/core/model-resolver.js.map +1 -0
  137. package/dist/core/package-manager.d.ts +151 -0
  138. package/dist/core/package-manager.d.ts.map +1 -0
  139. package/dist/core/package-manager.js +1447 -0
  140. package/dist/core/package-manager.js.map +1 -0
  141. package/dist/core/prompt-templates.d.ts +50 -0
  142. package/dist/core/prompt-templates.d.ts.map +1 -0
  143. package/dist/core/prompt-templates.js +268 -0
  144. package/dist/core/prompt-templates.js.map +1 -0
  145. package/dist/core/resolve-config-value.d.ts +17 -0
  146. package/dist/core/resolve-config-value.d.ts.map +1 -0
  147. package/dist/core/resolve-config-value.js +59 -0
  148. package/dist/core/resolve-config-value.js.map +1 -0
  149. package/dist/core/resource-loader.d.ts +184 -0
  150. package/dist/core/resource-loader.d.ts.map +1 -0
  151. package/dist/core/resource-loader.js +670 -0
  152. package/dist/core/resource-loader.js.map +1 -0
  153. package/dist/core/sdk.d.ts +90 -0
  154. package/dist/core/sdk.d.ts.map +1 -0
  155. package/dist/core/sdk.js +235 -0
  156. package/dist/core/sdk.js.map +1 -0
  157. package/dist/core/session-manager.d.ts +323 -0
  158. package/dist/core/session-manager.d.ts.map +1 -0
  159. package/dist/core/session-manager.js +1098 -0
  160. package/dist/core/session-manager.js.map +1 -0
  161. package/dist/core/settings-manager.d.ts +225 -0
  162. package/dist/core/settings-manager.d.ts.map +1 -0
  163. package/dist/core/settings-manager.js +653 -0
  164. package/dist/core/settings-manager.js.map +1 -0
  165. package/dist/core/skills.d.ts +58 -0
  166. package/dist/core/skills.d.ts.map +1 -0
  167. package/dist/core/skills.js +364 -0
  168. package/dist/core/skills.js.map +1 -0
  169. package/dist/core/slash-commands.d.ts +15 -0
  170. package/dist/core/slash-commands.d.ts.map +1 -0
  171. package/dist/core/slash-commands.js +22 -0
  172. package/dist/core/slash-commands.js.map +1 -0
  173. package/dist/core/system-prompt.d.ts +24 -0
  174. package/dist/core/system-prompt.d.ts.map +1 -0
  175. package/dist/core/system-prompt.js +137 -0
  176. package/dist/core/system-prompt.js.map +1 -0
  177. package/dist/core/timings.d.ts +7 -0
  178. package/dist/core/timings.d.ts.map +1 -0
  179. package/dist/core/timings.js +25 -0
  180. package/dist/core/timings.js.map +1 -0
  181. package/dist/core/tools/bash.d.ts +55 -0
  182. package/dist/core/tools/bash.d.ts.map +1 -0
  183. package/dist/core/tools/bash.js +242 -0
  184. package/dist/core/tools/bash.js.map +1 -0
  185. package/dist/core/tools/edit-diff.d.ts +63 -0
  186. package/dist/core/tools/edit-diff.d.ts.map +1 -0
  187. package/dist/core/tools/edit-diff.js +243 -0
  188. package/dist/core/tools/edit-diff.js.map +1 -0
  189. package/dist/core/tools/edit.d.ts +39 -0
  190. package/dist/core/tools/edit.d.ts.map +1 -0
  191. package/dist/core/tools/edit.js +146 -0
  192. package/dist/core/tools/edit.js.map +1 -0
  193. package/dist/core/tools/find.d.ts +39 -0
  194. package/dist/core/tools/find.d.ts.map +1 -0
  195. package/dist/core/tools/find.js +206 -0
  196. package/dist/core/tools/find.js.map +1 -0
  197. package/dist/core/tools/grep.d.ts +45 -0
  198. package/dist/core/tools/grep.d.ts.map +1 -0
  199. package/dist/core/tools/grep.js +239 -0
  200. package/dist/core/tools/grep.js.map +1 -0
  201. package/dist/core/tools/index.d.ts +73 -0
  202. package/dist/core/tools/index.d.ts.map +1 -0
  203. package/dist/core/tools/index.js +61 -0
  204. package/dist/core/tools/index.js.map +1 -0
  205. package/dist/core/tools/ls.d.ts +40 -0
  206. package/dist/core/tools/ls.d.ts.map +1 -0
  207. package/dist/core/tools/ls.js +118 -0
  208. package/dist/core/tools/ls.js.map +1 -0
  209. package/dist/core/tools/path-utils.d.ts +8 -0
  210. package/dist/core/tools/path-utils.d.ts.map +1 -0
  211. package/dist/core/tools/path-utils.js +81 -0
  212. package/dist/core/tools/path-utils.js.map +1 -0
  213. package/dist/core/tools/read.d.ts +39 -0
  214. package/dist/core/tools/read.d.ts.map +1 -0
  215. package/dist/core/tools/read.js +166 -0
  216. package/dist/core/tools/read.js.map +1 -0
  217. package/dist/core/tools/truncate.d.ts +70 -0
  218. package/dist/core/tools/truncate.d.ts.map +1 -0
  219. package/dist/core/tools/truncate.js +205 -0
  220. package/dist/core/tools/truncate.js.map +1 -0
  221. package/dist/core/tools/write.d.ts +29 -0
  222. package/dist/core/tools/write.d.ts.map +1 -0
  223. package/dist/core/tools/write.js +78 -0
  224. package/dist/core/tools/write.js.map +1 -0
  225. package/dist/extensions/gsd-commands.ts +338 -0
  226. package/dist/extensions/subagent.ts +312 -0
  227. package/dist/hooks/gsd/draht-post-phase.js +133 -0
  228. package/dist/hooks/gsd/draht-post-task.js +132 -0
  229. package/dist/hooks/gsd/draht-pre-execute.js +146 -0
  230. package/dist/hooks/gsd/draht-quality-gate.js +210 -0
  231. package/dist/index.d.ts +27 -0
  232. package/dist/index.d.ts.map +1 -0
  233. package/dist/index.js +42 -0
  234. package/dist/index.js.map +1 -0
  235. package/dist/main.d.ts +8 -0
  236. package/dist/main.d.ts.map +1 -0
  237. package/dist/main.js +812 -0
  238. package/dist/main.js.map +1 -0
  239. package/dist/migrations.d.ts +33 -0
  240. package/dist/migrations.d.ts.map +1 -0
  241. package/dist/migrations.js +261 -0
  242. package/dist/migrations.js.map +1 -0
  243. package/dist/modes/index.d.ts +9 -0
  244. package/dist/modes/index.d.ts.map +1 -0
  245. package/dist/modes/index.js +8 -0
  246. package/dist/modes/index.js.map +1 -0
  247. package/dist/modes/interactive/components/armin.d.ts +34 -0
  248. package/dist/modes/interactive/components/armin.d.ts.map +1 -0
  249. package/dist/modes/interactive/components/armin.js +333 -0
  250. package/dist/modes/interactive/components/armin.js.map +1 -0
  251. package/dist/modes/interactive/components/assistant-message.d.ts +16 -0
  252. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  253. package/dist/modes/interactive/components/assistant-message.js +96 -0
  254. package/dist/modes/interactive/components/assistant-message.js.map +1 -0
  255. package/dist/modes/interactive/components/bash-execution.d.ts +35 -0
  256. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  257. package/dist/modes/interactive/components/bash-execution.js +162 -0
  258. package/dist/modes/interactive/components/bash-execution.js.map +1 -0
  259. package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  260. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  261. package/dist/modes/interactive/components/bordered-loader.js +51 -0
  262. package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  263. package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  264. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  265. package/dist/modes/interactive/components/branch-summary-message.js +44 -0
  266. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  267. package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  268. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  269. package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
  270. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  271. package/dist/modes/interactive/components/config-selector.d.ts +71 -0
  272. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  273. package/dist/modes/interactive/components/config-selector.js +479 -0
  274. package/dist/modes/interactive/components/config-selector.js.map +1 -0
  275. package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  276. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  277. package/dist/modes/interactive/components/countdown-timer.js +33 -0
  278. package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  279. package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  280. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  281. package/dist/modes/interactive/components/custom-editor.js +70 -0
  282. package/dist/modes/interactive/components/custom-editor.js.map +1 -0
  283. package/dist/modes/interactive/components/custom-message.d.ts +20 -0
  284. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  285. package/dist/modes/interactive/components/custom-message.js +79 -0
  286. package/dist/modes/interactive/components/custom-message.js.map +1 -0
  287. package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  288. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
  289. package/dist/modes/interactive/components/daxnuts.js +140 -0
  290. package/dist/modes/interactive/components/daxnuts.js.map +1 -0
  291. package/dist/modes/interactive/components/diff.d.ts +12 -0
  292. package/dist/modes/interactive/components/diff.d.ts.map +1 -0
  293. package/dist/modes/interactive/components/diff.js +133 -0
  294. package/dist/modes/interactive/components/diff.js.map +1 -0
  295. package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  296. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  297. package/dist/modes/interactive/components/dynamic-border.js +21 -0
  298. package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  299. package/dist/modes/interactive/components/extension-editor.d.ts +17 -0
  300. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  301. package/dist/modes/interactive/components/extension-editor.js +102 -0
  302. package/dist/modes/interactive/components/extension-editor.js.map +1 -0
  303. package/dist/modes/interactive/components/extension-input.d.ts +23 -0
  304. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  305. package/dist/modes/interactive/components/extension-input.js +61 -0
  306. package/dist/modes/interactive/components/extension-input.js.map +1 -0
  307. package/dist/modes/interactive/components/extension-selector.d.ts +24 -0
  308. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  309. package/dist/modes/interactive/components/extension-selector.js +78 -0
  310. package/dist/modes/interactive/components/extension-selector.js.map +1 -0
  311. package/dist/modes/interactive/components/footer.d.ts +26 -0
  312. package/dist/modes/interactive/components/footer.d.ts.map +1 -0
  313. package/dist/modes/interactive/components/footer.js +213 -0
  314. package/dist/modes/interactive/components/footer.js.map +1 -0
  315. package/dist/modes/interactive/components/index.d.ts +32 -0
  316. package/dist/modes/interactive/components/index.d.ts.map +1 -0
  317. package/dist/modes/interactive/components/index.js +33 -0
  318. package/dist/modes/interactive/components/index.js.map +1 -0
  319. package/dist/modes/interactive/components/keybinding-hints.d.ts +41 -0
  320. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  321. package/dist/modes/interactive/components/keybinding-hints.js +61 -0
  322. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  323. package/dist/modes/interactive/components/login-dialog.d.ts +42 -0
  324. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  325. package/dist/modes/interactive/components/login-dialog.js +145 -0
  326. package/dist/modes/interactive/components/login-dialog.js.map +1 -0
  327. package/dist/modes/interactive/components/model-selector.d.ts +47 -0
  328. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  329. package/dist/modes/interactive/components/model-selector.js +271 -0
  330. package/dist/modes/interactive/components/model-selector.js.map +1 -0
  331. package/dist/modes/interactive/components/oauth-selector.d.ts +19 -0
  332. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  333. package/dist/modes/interactive/components/oauth-selector.js +97 -0
  334. package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  335. package/dist/modes/interactive/components/scoped-models-selector.d.ts +49 -0
  336. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  337. package/dist/modes/interactive/components/scoped-models-selector.js +275 -0
  338. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  339. package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  340. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  341. package/dist/modes/interactive/components/session-selector-search.js +155 -0
  342. package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  343. package/dist/modes/interactive/components/session-selector.d.ts +95 -0
  344. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  345. package/dist/modes/interactive/components/session-selector.js +851 -0
  346. package/dist/modes/interactive/components/session-selector.js.map +1 -0
  347. package/dist/modes/interactive/components/settings-selector.d.ts +56 -0
  348. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  349. package/dist/modes/interactive/components/settings-selector.js +287 -0
  350. package/dist/modes/interactive/components/settings-selector.js.map +1 -0
  351. package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  352. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  353. package/dist/modes/interactive/components/show-images-selector.js +35 -0
  354. package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  355. package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  356. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  357. package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
  358. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  359. package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  360. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  361. package/dist/modes/interactive/components/theme-selector.js +46 -0
  362. package/dist/modes/interactive/components/theme-selector.js.map +1 -0
  363. package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  364. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  365. package/dist/modes/interactive/components/thinking-selector.js +47 -0
  366. package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  367. package/dist/modes/interactive/components/tool-execution.d.ts +75 -0
  368. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  369. package/dist/modes/interactive/components/tool-execution.js +752 -0
  370. package/dist/modes/interactive/components/tool-execution.js.map +1 -0
  371. package/dist/modes/interactive/components/tree-selector.d.ts +68 -0
  372. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  373. package/dist/modes/interactive/components/tree-selector.js +934 -0
  374. package/dist/modes/interactive/components/tree-selector.js.map +1 -0
  375. package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  376. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  377. package/dist/modes/interactive/components/user-message-selector.js +113 -0
  378. package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  379. package/dist/modes/interactive/components/user-message.d.ts +8 -0
  380. package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  381. package/dist/modes/interactive/components/user-message.js +16 -0
  382. package/dist/modes/interactive/components/user-message.js.map +1 -0
  383. package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  384. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  385. package/dist/modes/interactive/components/visual-truncate.js +33 -0
  386. package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  387. package/dist/modes/interactive/interactive-mode.d.ts +315 -0
  388. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  389. package/dist/modes/interactive/interactive-mode.js +3719 -0
  390. package/dist/modes/interactive/interactive-mode.js.map +1 -0
  391. package/dist/modes/interactive/theme/dark.json +85 -0
  392. package/dist/modes/interactive/theme/light.json +84 -0
  393. package/dist/modes/interactive/theme/theme-schema.json +335 -0
  394. package/dist/modes/interactive/theme/theme.d.ts +78 -0
  395. package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  396. package/dist/modes/interactive/theme/theme.js +944 -0
  397. package/dist/modes/interactive/theme/theme.js.map +1 -0
  398. package/dist/modes/print-mode.d.ts +28 -0
  399. package/dist/modes/print-mode.d.ts.map +1 -0
  400. package/dist/modes/print-mode.js +101 -0
  401. package/dist/modes/print-mode.js.map +1 -0
  402. package/dist/modes/rpc/rpc-client.d.ts +217 -0
  403. package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  404. package/dist/modes/rpc/rpc-client.js +405 -0
  405. package/dist/modes/rpc/rpc-client.js.map +1 -0
  406. package/dist/modes/rpc/rpc-mode.d.ts +20 -0
  407. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  408. package/dist/modes/rpc/rpc-mode.js +511 -0
  409. package/dist/modes/rpc/rpc-mode.js.map +1 -0
  410. package/dist/modes/rpc/rpc-types.d.ts +409 -0
  411. package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  412. package/dist/modes/rpc/rpc-types.js +8 -0
  413. package/dist/modes/rpc/rpc-types.js.map +1 -0
  414. package/dist/prompts/agents/build.md +44 -0
  415. package/dist/prompts/agents/plan.md +39 -0
  416. package/dist/prompts/agents/verify.md +33 -0
  417. package/dist/prompts/commands/atomic-commit.md +39 -0
  418. package/dist/prompts/commands/discuss-phase.md +25 -0
  419. package/dist/prompts/commands/execute-phase.md +59 -0
  420. package/dist/prompts/commands/map-codebase.md +32 -0
  421. package/dist/prompts/commands/new-project.md +40 -0
  422. package/dist/prompts/commands/pause-work.md +12 -0
  423. package/dist/prompts/commands/plan-phase.md +61 -0
  424. package/dist/prompts/commands/progress.md +12 -0
  425. package/dist/prompts/commands/quick.md +19 -0
  426. package/dist/prompts/commands/resume-work.md +13 -0
  427. package/dist/prompts/commands/verify-work.md +27 -0
  428. package/dist/utils/changelog.d.ts +21 -0
  429. package/dist/utils/changelog.d.ts.map +1 -0
  430. package/dist/utils/changelog.js +87 -0
  431. package/dist/utils/changelog.js.map +1 -0
  432. package/dist/utils/clipboard-image.d.ts +11 -0
  433. package/dist/utils/clipboard-image.d.ts.map +1 -0
  434. package/dist/utils/clipboard-image.js +162 -0
  435. package/dist/utils/clipboard-image.js.map +1 -0
  436. package/dist/utils/clipboard-native.d.ts +7 -0
  437. package/dist/utils/clipboard-native.d.ts.map +1 -0
  438. package/dist/utils/clipboard-native.js +14 -0
  439. package/dist/utils/clipboard-native.js.map +1 -0
  440. package/dist/utils/clipboard.d.ts +2 -0
  441. package/dist/utils/clipboard.d.ts.map +1 -0
  442. package/dist/utils/clipboard.js +67 -0
  443. package/dist/utils/clipboard.js.map +1 -0
  444. package/dist/utils/frontmatter.d.ts +8 -0
  445. package/dist/utils/frontmatter.d.ts.map +1 -0
  446. package/dist/utils/frontmatter.js +26 -0
  447. package/dist/utils/frontmatter.js.map +1 -0
  448. package/dist/utils/git.d.ts +26 -0
  449. package/dist/utils/git.d.ts.map +1 -0
  450. package/dist/utils/git.js +163 -0
  451. package/dist/utils/git.js.map +1 -0
  452. package/dist/utils/image-convert.d.ts +9 -0
  453. package/dist/utils/image-convert.d.ts.map +1 -0
  454. package/dist/utils/image-convert.js +35 -0
  455. package/dist/utils/image-convert.js.map +1 -0
  456. package/dist/utils/image-resize.d.ts +36 -0
  457. package/dist/utils/image-resize.d.ts.map +1 -0
  458. package/dist/utils/image-resize.js +181 -0
  459. package/dist/utils/image-resize.js.map +1 -0
  460. package/dist/utils/mime.d.ts +2 -0
  461. package/dist/utils/mime.d.ts.map +1 -0
  462. package/dist/utils/mime.js +26 -0
  463. package/dist/utils/mime.js.map +1 -0
  464. package/dist/utils/photon.d.ts +21 -0
  465. package/dist/utils/photon.d.ts.map +1 -0
  466. package/dist/utils/photon.js +121 -0
  467. package/dist/utils/photon.js.map +1 -0
  468. package/dist/utils/shell.d.ts +26 -0
  469. package/dist/utils/shell.d.ts.map +1 -0
  470. package/dist/utils/shell.js +186 -0
  471. package/dist/utils/shell.js.map +1 -0
  472. package/dist/utils/sleep.d.ts +5 -0
  473. package/dist/utils/sleep.d.ts.map +1 -0
  474. package/dist/utils/sleep.js +17 -0
  475. package/dist/utils/sleep.js.map +1 -0
  476. package/dist/utils/tools-manager.d.ts +3 -0
  477. package/dist/utils/tools-manager.d.ts.map +1 -0
  478. package/dist/utils/tools-manager.js +251 -0
  479. package/dist/utils/tools-manager.js.map +1 -0
  480. package/docs/compaction.md +390 -0
  481. package/docs/custom-provider.md +580 -0
  482. package/docs/development.md +69 -0
  483. package/docs/extensions.md +1952 -0
  484. package/docs/images/doom-extension.png +0 -0
  485. package/docs/images/exy.png +0 -0
  486. package/docs/images/interactive-mode.png +0 -0
  487. package/docs/images/tree-view.png +0 -0
  488. package/docs/json.md +79 -0
  489. package/docs/keybindings.md +174 -0
  490. package/docs/models.md +293 -0
  491. package/docs/packages.md +209 -0
  492. package/docs/prompt-templates.md +67 -0
  493. package/docs/providers.md +186 -0
  494. package/docs/rpc.md +1317 -0
  495. package/docs/sdk.md +968 -0
  496. package/docs/session.md +412 -0
  497. package/docs/settings.md +223 -0
  498. package/docs/shell-aliases.md +13 -0
  499. package/docs/skills.md +231 -0
  500. package/docs/terminal-setup.md +70 -0
  501. package/docs/termux.md +127 -0
  502. package/docs/themes.md +295 -0
  503. package/docs/tree.md +219 -0
  504. package/docs/tui.md +887 -0
  505. package/docs/windows.md +17 -0
  506. package/examples/README.md +25 -0
  507. package/examples/extensions/README.md +204 -0
  508. package/examples/extensions/antigravity-image-gen.ts +413 -0
  509. package/examples/extensions/auto-commit-on-exit.ts +49 -0
  510. package/examples/extensions/bash-spawn-hook.ts +30 -0
  511. package/examples/extensions/bookmark.ts +50 -0
  512. package/examples/extensions/built-in-tool-renderer.ts +246 -0
  513. package/examples/extensions/claude-rules.ts +86 -0
  514. package/examples/extensions/commands.ts +72 -0
  515. package/examples/extensions/confirm-destructive.ts +59 -0
  516. package/examples/extensions/custom-compaction.ts +114 -0
  517. package/examples/extensions/custom-footer.ts +64 -0
  518. package/examples/extensions/custom-header.ts +73 -0
  519. package/examples/extensions/custom-provider-anthropic/index.ts +604 -0
  520. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
  521. package/examples/extensions/custom-provider-anthropic/package.json +19 -0
  522. package/examples/extensions/custom-provider-gitlab-duo/index.ts +349 -0
  523. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
  524. package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
  525. package/examples/extensions/custom-provider-qwen-cli/index.ts +345 -0
  526. package/examples/extensions/custom-provider-qwen-cli/package.json +16 -0
  527. package/examples/extensions/dirty-repo-guard.ts +56 -0
  528. package/examples/extensions/doom-overlay/README.md +46 -0
  529. package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
  530. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  531. package/examples/extensions/doom-overlay/doom/build.sh +152 -0
  532. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
  533. package/examples/extensions/doom-overlay/doom-component.ts +132 -0
  534. package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
  535. package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
  536. package/examples/extensions/doom-overlay/index.ts +74 -0
  537. package/examples/extensions/doom-overlay/wad-finder.ts +51 -0
  538. package/examples/extensions/dynamic-resources/SKILL.md +8 -0
  539. package/examples/extensions/dynamic-resources/dynamic.json +79 -0
  540. package/examples/extensions/dynamic-resources/dynamic.md +5 -0
  541. package/examples/extensions/dynamic-resources/index.ts +15 -0
  542. package/examples/extensions/event-bus.ts +43 -0
  543. package/examples/extensions/file-trigger.ts +41 -0
  544. package/examples/extensions/git-checkpoint.ts +53 -0
  545. package/examples/extensions/handoff.ts +150 -0
  546. package/examples/extensions/hello.ts +25 -0
  547. package/examples/extensions/inline-bash.ts +94 -0
  548. package/examples/extensions/input-transform.ts +43 -0
  549. package/examples/extensions/interactive-shell.ts +196 -0
  550. package/examples/extensions/mac-system-theme.ts +47 -0
  551. package/examples/extensions/message-renderer.ts +59 -0
  552. package/examples/extensions/minimal-mode.ts +426 -0
  553. package/examples/extensions/modal-editor.ts +85 -0
  554. package/examples/extensions/model-status.ts +31 -0
  555. package/examples/extensions/notify.ts +55 -0
  556. package/examples/extensions/overlay-qa-tests.ts +881 -0
  557. package/examples/extensions/overlay-test.ts +150 -0
  558. package/examples/extensions/permission-gate.ts +34 -0
  559. package/examples/extensions/pirate.ts +47 -0
  560. package/examples/extensions/plan-mode/README.md +65 -0
  561. package/examples/extensions/plan-mode/index.ts +340 -0
  562. package/examples/extensions/plan-mode/utils.ts +168 -0
  563. package/examples/extensions/preset.ts +398 -0
  564. package/examples/extensions/protected-paths.ts +30 -0
  565. package/examples/extensions/qna.ts +119 -0
  566. package/examples/extensions/question.ts +264 -0
  567. package/examples/extensions/questionnaire.ts +427 -0
  568. package/examples/extensions/rainbow-editor.ts +88 -0
  569. package/examples/extensions/reload-runtime.ts +37 -0
  570. package/examples/extensions/rpc-demo.ts +124 -0
  571. package/examples/extensions/sandbox/index.ts +318 -0
  572. package/examples/extensions/sandbox/package-lock.json +92 -0
  573. package/examples/extensions/sandbox/package.json +19 -0
  574. package/examples/extensions/send-user-message.ts +97 -0
  575. package/examples/extensions/session-name.ts +27 -0
  576. package/examples/extensions/shutdown-command.ts +63 -0
  577. package/examples/extensions/snake.ts +343 -0
  578. package/examples/extensions/space-invaders.ts +560 -0
  579. package/examples/extensions/ssh.ts +220 -0
  580. package/examples/extensions/sst-resource-manager.ts +203 -0
  581. package/examples/extensions/status-line.ts +40 -0
  582. package/examples/extensions/subagent/README.md +172 -0
  583. package/examples/extensions/subagent/agents/planner.md +37 -0
  584. package/examples/extensions/subagent/agents/reviewer.md +35 -0
  585. package/examples/extensions/subagent/agents/scout.md +50 -0
  586. package/examples/extensions/subagent/agents/worker.md +24 -0
  587. package/examples/extensions/subagent/agents.ts +126 -0
  588. package/examples/extensions/subagent/index.ts +964 -0
  589. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
  590. package/examples/extensions/subagent/prompts/implement.md +10 -0
  591. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
  592. package/examples/extensions/summarize.ts +195 -0
  593. package/examples/extensions/system-prompt-header.ts +17 -0
  594. package/examples/extensions/timed-confirm.ts +70 -0
  595. package/examples/extensions/titlebar-spinner.ts +58 -0
  596. package/examples/extensions/todo.ts +299 -0
  597. package/examples/extensions/tool-override.ts +143 -0
  598. package/examples/extensions/tools.ts +146 -0
  599. package/examples/extensions/trigger-compact.ts +40 -0
  600. package/examples/extensions/truncated-tool.ts +192 -0
  601. package/examples/extensions/widget-placement.ts +17 -0
  602. package/examples/extensions/with-deps/index.ts +36 -0
  603. package/examples/extensions/with-deps/package-lock.json +31 -0
  604. package/examples/extensions/with-deps/package.json +22 -0
  605. package/examples/rpc-extension-ui.ts +632 -0
  606. package/examples/sdk/01-minimal.ts +22 -0
  607. package/examples/sdk/02-custom-model.ts +49 -0
  608. package/examples/sdk/03-custom-prompt.ts +55 -0
  609. package/examples/sdk/04-skills.ts +46 -0
  610. package/examples/sdk/05-tools.ts +56 -0
  611. package/examples/sdk/06-extensions.ts +88 -0
  612. package/examples/sdk/07-context-files.ts +40 -0
  613. package/examples/sdk/08-prompt-templates.ts +42 -0
  614. package/examples/sdk/09-api-keys-and-oauth.ts +48 -0
  615. package/examples/sdk/10-settings.ts +51 -0
  616. package/examples/sdk/11-sessions.ts +48 -0
  617. package/examples/sdk/12-full-control.ts +82 -0
  618. package/examples/sdk/README.md +144 -0
  619. package/extensions/gsd-commands.ts +338 -0
  620. package/extensions/subagent.ts +312 -0
  621. package/hooks/gsd/draht-post-phase.js +133 -0
  622. package/hooks/gsd/draht-post-task.js +132 -0
  623. package/hooks/gsd/draht-pre-execute.js +146 -0
  624. package/hooks/gsd/draht-quality-gate.js +210 -0
  625. package/package.json +105 -0
  626. package/prompts/agents/build.md +44 -0
  627. package/prompts/agents/plan.md +39 -0
  628. package/prompts/agents/verify.md +33 -0
  629. package/prompts/commands/atomic-commit.md +39 -0
  630. package/prompts/commands/discuss-phase.md +25 -0
  631. package/prompts/commands/execute-phase.md +59 -0
  632. package/prompts/commands/map-codebase.md +32 -0
  633. package/prompts/commands/new-project.md +40 -0
  634. package/prompts/commands/pause-work.md +12 -0
  635. package/prompts/commands/plan-phase.md +61 -0
  636. package/prompts/commands/progress.md +12 -0
  637. package/prompts/commands/quick.md +19 -0
  638. package/prompts/commands/resume-work.md +13 -0
  639. package/prompts/commands/verify-work.md +27 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Core session management\n\n// Config paths\nexport { getAgentDir, VERSION } from \"./config.js\";\nexport {\n\tAgentSession,\n\ttype AgentSessionConfig,\n\ttype AgentSessionEvent,\n\ttype AgentSessionEventListener,\n\ttype ModelCycleResult,\n\ttype ParsedSkillBlock,\n\ttype PromptOptions,\n\tparseSkillBlock,\n\ttype SessionStats,\n} from \"./core/agent-session.js\";\n// Auth and model registry\nexport {\n\ttype ApiKeyCredential,\n\ttype AuthCredential,\n\tAuthStorage,\n\ttype AuthStorageBackend,\n\tFileAuthStorageBackend,\n\tInMemoryAuthStorageBackend,\n\ttype OAuthCredential,\n} from \"./core/auth-storage.js\";\n// Compaction\nexport {\n\ttype BranchPreparation,\n\ttype BranchSummaryResult,\n\ttype CollectEntriesResult,\n\ttype CompactionResult,\n\ttype CutPointResult,\n\tcalculateContextTokens,\n\tcollectEntriesForBranchSummary,\n\tcompact,\n\tDEFAULT_COMPACTION_SETTINGS,\n\testimateTokens,\n\ttype FileOperations,\n\tfindCutPoint,\n\tfindTurnStartIndex,\n\ttype GenerateBranchSummaryOptions,\n\tgenerateBranchSummary,\n\tgenerateSummary,\n\tgetLastAssistantUsage,\n\tprepareBranchEntries,\n\tserializeConversation,\n\tshouldCompact,\n} from \"./core/compaction/index.js\";\nexport { createEventBus, type EventBus, type EventBusController } from \"./core/event-bus.js\";\n// Extension system\nexport type {\n\tAgentEndEvent,\n\tAgentStartEvent,\n\tAgentToolResult,\n\tAgentToolUpdateCallback,\n\tAppAction,\n\tBashToolCallEvent,\n\tBeforeAgentStartEvent,\n\tCompactOptions,\n\tContextEvent,\n\tContextUsage,\n\tCustomToolCallEvent,\n\tEditToolCallEvent,\n\tExecOptions,\n\tExecResult,\n\tExtension,\n\tExtensionActions,\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionCommandContextActions,\n\tExtensionContext,\n\tExtensionContextActions,\n\tExtensionError,\n\tExtensionEvent,\n\tExtensionFactory,\n\tExtensionFlag,\n\tExtensionHandler,\n\tExtensionRuntime,\n\tExtensionShortcut,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tFindToolCallEvent,\n\tGrepToolCallEvent,\n\tInputEvent,\n\tInputEventResult,\n\tInputSource,\n\tKeybindingsManager,\n\tLoadExtensionsResult,\n\tLsToolCallEvent,\n\tMessageRenderer,\n\tMessageRenderOptions,\n\tProviderConfig,\n\tProviderModelConfig,\n\tReadToolCallEvent,\n\tRegisteredCommand,\n\tRegisteredTool,\n\tSessionBeforeCompactEvent,\n\tSessionBeforeForkEvent,\n\tSessionBeforeSwitchEvent,\n\tSessionBeforeTreeEvent,\n\tSessionCompactEvent,\n\tSessionForkEvent,\n\tSessionShutdownEvent,\n\tSessionStartEvent,\n\tSessionSwitchEvent,\n\tSessionTreeEvent,\n\tSlashCommandInfo,\n\tSlashCommandLocation,\n\tSlashCommandSource,\n\tTerminalInputHandler,\n\tToolCallEvent,\n\tToolDefinition,\n\tToolInfo,\n\tToolRenderResultOptions,\n\tToolResultEvent,\n\tTurnEndEvent,\n\tTurnStartEvent,\n\tUserBashEvent,\n\tUserBashEventResult,\n\tWidgetPlacement,\n\tWriteToolCallEvent,\n} from \"./core/extensions/index.js\";\nexport {\n\tcreateExtensionRuntime,\n\tdiscoverAndLoadExtensions,\n\tExtensionRunner,\n\tisBashToolResult,\n\tisEditToolResult,\n\tisFindToolResult,\n\tisGrepToolResult,\n\tisLsToolResult,\n\tisReadToolResult,\n\tisToolCallEventType,\n\tisWriteToolResult,\n\twrapRegisteredTool,\n\twrapRegisteredTools,\n\twrapToolsWithExtensions,\n\twrapToolWithExtensions,\n} from \"./core/extensions/index.js\";\n// Footer data provider (git branch + extension statuses - data not otherwise available to extensions)\nexport type { ReadonlyFooterDataProvider } from \"./core/footer-data-provider.js\";\nexport { convertToLlm } from \"./core/messages.js\";\nexport { ModelRegistry } from \"./core/model-registry.js\";\nexport type {\n\tPackageManager,\n\tPathMetadata,\n\tProgressCallback,\n\tProgressEvent,\n\tResolvedPaths,\n\tResolvedResource,\n} from \"./core/package-manager.js\";\nexport { DefaultPackageManager } from \"./core/package-manager.js\";\nexport type { ResourceCollision, ResourceDiagnostic, ResourceLoader } from \"./core/resource-loader.js\";\nexport { DefaultResourceLoader } from \"./core/resource-loader.js\";\n// SDK for programmatic usage\nexport {\n\ttype CreateAgentSessionOptions,\n\ttype CreateAgentSessionResult,\n\t// Factory\n\tcreateAgentSession,\n\tcreateBashTool,\n\t// Tool factories (for custom cwd)\n\tcreateCodingTools,\n\tcreateEditTool,\n\tcreateFindTool,\n\tcreateGrepTool,\n\tcreateLsTool,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateWriteTool,\n\ttype PromptTemplate,\n\t// Pre-built tools (use process.cwd())\n\treadOnlyTools,\n} from \"./core/sdk.js\";\nexport {\n\ttype BranchSummaryEntry,\n\tbuildSessionContext,\n\ttype CompactionEntry,\n\tCURRENT_SESSION_VERSION,\n\ttype CustomEntry,\n\ttype CustomMessageEntry,\n\ttype FileEntry,\n\tgetLatestCompactionEntry,\n\ttype ModelChangeEntry,\n\tmigrateSessionEntries,\n\ttype NewSessionOptions,\n\tparseSessionEntries,\n\ttype SessionContext,\n\ttype SessionEntry,\n\ttype SessionEntryBase,\n\ttype SessionHeader,\n\ttype SessionInfo,\n\ttype SessionInfoEntry,\n\tSessionManager,\n\ttype SessionMessageEntry,\n\ttype ThinkingLevelChangeEntry,\n} from \"./core/session-manager.js\";\nexport {\n\ttype CompactionSettings,\n\ttype ImageSettings,\n\ttype PackageSource,\n\ttype RetrySettings,\n\tSettingsManager,\n} from \"./core/settings-manager.js\";\n// Skills\nexport {\n\tformatSkillsForPrompt,\n\ttype LoadSkillsFromDirOptions,\n\ttype LoadSkillsResult,\n\tloadSkills,\n\tloadSkillsFromDir,\n\ttype Skill,\n\ttype SkillFrontmatter,\n} from \"./core/skills.js\";\n// Tools\nexport {\n\ttype BashOperations,\n\ttype BashSpawnContext,\n\ttype BashSpawnHook,\n\ttype BashToolDetails,\n\ttype BashToolInput,\n\ttype BashToolOptions,\n\tbashTool,\n\tcodingTools,\n\tDEFAULT_MAX_BYTES,\n\tDEFAULT_MAX_LINES,\n\ttype EditOperations,\n\ttype EditToolDetails,\n\ttype EditToolInput,\n\ttype EditToolOptions,\n\teditTool,\n\ttype FindOperations,\n\ttype FindToolDetails,\n\ttype FindToolInput,\n\ttype FindToolOptions,\n\tfindTool,\n\tformatSize,\n\ttype GrepOperations,\n\ttype GrepToolDetails,\n\ttype GrepToolInput,\n\ttype GrepToolOptions,\n\tgrepTool,\n\ttype LsOperations,\n\ttype LsToolDetails,\n\ttype LsToolInput,\n\ttype LsToolOptions,\n\tlsTool,\n\ttype ReadOperations,\n\ttype ReadToolDetails,\n\ttype ReadToolInput,\n\ttype ReadToolOptions,\n\treadTool,\n\ttype ToolsOptions,\n\ttype TruncationOptions,\n\ttype TruncationResult,\n\ttruncateHead,\n\ttruncateLine,\n\ttruncateTail,\n\ttype WriteOperations,\n\ttype WriteToolInput,\n\ttype WriteToolOptions,\n\twriteTool,\n} from \"./core/tools/index.js\";\n// Main entry point\nexport { main } from \"./main.js\";\n// Run modes for programmatic SDK usage\nexport {\n\tInteractiveMode,\n\ttype InteractiveModeOptions,\n\ttype PrintModeOptions,\n\trunPrintMode,\n\trunRpcMode,\n} from \"./modes/index.js\";\n// UI components for extensions\nexport {\n\tArminComponent,\n\tAssistantMessageComponent,\n\tappKey,\n\tappKeyHint,\n\tBashExecutionComponent,\n\tBorderedLoader,\n\tBranchSummaryMessageComponent,\n\tCompactionSummaryMessageComponent,\n\tCustomEditor,\n\tCustomMessageComponent,\n\tDynamicBorder,\n\tExtensionEditorComponent,\n\tExtensionInputComponent,\n\tExtensionSelectorComponent,\n\teditorKey,\n\tFooterComponent,\n\tkeyHint,\n\tLoginDialogComponent,\n\tModelSelectorComponent,\n\tOAuthSelectorComponent,\n\ttype RenderDiffOptions,\n\trawKeyHint,\n\trenderDiff,\n\tSessionSelectorComponent,\n\ttype SettingsCallbacks,\n\ttype SettingsConfig,\n\tSettingsSelectorComponent,\n\tShowImagesSelectorComponent,\n\tSkillInvocationMessageComponent,\n\tThemeSelectorComponent,\n\tThinkingSelectorComponent,\n\tToolExecutionComponent,\n\ttype ToolExecutionOptions,\n\tTreeSelectorComponent,\n\ttruncateToVisualLines,\n\tUserMessageComponent,\n\tUserMessageSelectorComponent,\n\ttype VisualTruncateResult,\n} from \"./modes/interactive/components/index.js\";\n// Theme utilities for custom tools and extensions\nexport {\n\tgetLanguageFromPath,\n\tgetMarkdownTheme,\n\tgetSelectListTheme,\n\tgetSettingsListTheme,\n\thighlightCode,\n\tinitTheme,\n\tTheme,\n\ttype ThemeColor,\n} from \"./modes/interactive/theme/theme.js\";\n// Clipboard utilities\nexport { copyToClipboard } from \"./utils/clipboard.js\";\nexport { parseFrontmatter, stripFrontmatter } from \"./utils/frontmatter.js\";\n// Shell utilities\nexport { getShellConfig } from \"./utils/shell.js\";\n"]}
package/dist/index.js ADDED
@@ -0,0 +1,42 @@
1
+ // Core session management
2
+ // Config paths
3
+ export { getAgentDir, VERSION } from "./config.js";
4
+ export { AgentSession, parseSkillBlock, } from "./core/agent-session.js";
5
+ // Auth and model registry
6
+ export { AuthStorage, FileAuthStorageBackend, InMemoryAuthStorageBackend, } from "./core/auth-storage.js";
7
+ // Compaction
8
+ export { calculateContextTokens, collectEntriesForBranchSummary, compact, DEFAULT_COMPACTION_SETTINGS, estimateTokens, findCutPoint, findTurnStartIndex, generateBranchSummary, generateSummary, getLastAssistantUsage, prepareBranchEntries, serializeConversation, shouldCompact, } from "./core/compaction/index.js";
9
+ export { createEventBus } from "./core/event-bus.js";
10
+ export { createExtensionRuntime, discoverAndLoadExtensions, ExtensionRunner, isBashToolResult, isEditToolResult, isFindToolResult, isGrepToolResult, isLsToolResult, isReadToolResult, isToolCallEventType, isWriteToolResult, wrapRegisteredTool, wrapRegisteredTools, wrapToolsWithExtensions, wrapToolWithExtensions, } from "./core/extensions/index.js";
11
+ export { convertToLlm } from "./core/messages.js";
12
+ export { ModelRegistry } from "./core/model-registry.js";
13
+ export { DefaultPackageManager } from "./core/package-manager.js";
14
+ export { DefaultResourceLoader } from "./core/resource-loader.js";
15
+ // SDK for programmatic usage
16
+ export {
17
+ // Factory
18
+ createAgentSession, createBashTool,
19
+ // Tool factories (for custom cwd)
20
+ createCodingTools, createEditTool, createFindTool, createGrepTool, createLsTool, createReadOnlyTools, createReadTool, createWriteTool,
21
+ // Pre-built tools (use process.cwd())
22
+ readOnlyTools, } from "./core/sdk.js";
23
+ export { buildSessionContext, CURRENT_SESSION_VERSION, getLatestCompactionEntry, migrateSessionEntries, parseSessionEntries, SessionManager, } from "./core/session-manager.js";
24
+ export { SettingsManager, } from "./core/settings-manager.js";
25
+ // Skills
26
+ export { formatSkillsForPrompt, loadSkills, loadSkillsFromDir, } from "./core/skills.js";
27
+ // Tools
28
+ export { bashTool, codingTools, DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, editTool, findTool, formatSize, grepTool, lsTool, readTool, truncateHead, truncateLine, truncateTail, writeTool, } from "./core/tools/index.js";
29
+ // Main entry point
30
+ export { main } from "./main.js";
31
+ // Run modes for programmatic SDK usage
32
+ export { InteractiveMode, runPrintMode, runRpcMode, } from "./modes/index.js";
33
+ // UI components for extensions
34
+ export { ArminComponent, AssistantMessageComponent, appKey, appKeyHint, BashExecutionComponent, BorderedLoader, BranchSummaryMessageComponent, CompactionSummaryMessageComponent, CustomEditor, CustomMessageComponent, DynamicBorder, ExtensionEditorComponent, ExtensionInputComponent, ExtensionSelectorComponent, editorKey, FooterComponent, keyHint, LoginDialogComponent, ModelSelectorComponent, OAuthSelectorComponent, rawKeyHint, renderDiff, SessionSelectorComponent, SettingsSelectorComponent, ShowImagesSelectorComponent, SkillInvocationMessageComponent, ThemeSelectorComponent, ThinkingSelectorComponent, ToolExecutionComponent, TreeSelectorComponent, truncateToVisualLines, UserMessageComponent, UserMessageSelectorComponent, } from "./modes/interactive/components/index.js";
35
+ // Theme utilities for custom tools and extensions
36
+ export { getLanguageFromPath, getMarkdownTheme, getSelectListTheme, getSettingsListTheme, highlightCode, initTheme, Theme, } from "./modes/interactive/theme/theme.js";
37
+ // Clipboard utilities
38
+ export { copyToClipboard } from "./utils/clipboard.js";
39
+ export { parseFrontmatter, stripFrontmatter } from "./utils/frontmatter.js";
40
+ // Shell utilities
41
+ export { getShellConfig } from "./utils/shell.js";
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Core session management\n\n// Config paths\nexport { getAgentDir, VERSION } from \"./config.js\";\nexport {\n\tAgentSession,\n\ttype AgentSessionConfig,\n\ttype AgentSessionEvent,\n\ttype AgentSessionEventListener,\n\ttype ModelCycleResult,\n\ttype ParsedSkillBlock,\n\ttype PromptOptions,\n\tparseSkillBlock,\n\ttype SessionStats,\n} from \"./core/agent-session.js\";\n// Auth and model registry\nexport {\n\ttype ApiKeyCredential,\n\ttype AuthCredential,\n\tAuthStorage,\n\ttype AuthStorageBackend,\n\tFileAuthStorageBackend,\n\tInMemoryAuthStorageBackend,\n\ttype OAuthCredential,\n} from \"./core/auth-storage.js\";\n// Compaction\nexport {\n\ttype BranchPreparation,\n\ttype BranchSummaryResult,\n\ttype CollectEntriesResult,\n\ttype CompactionResult,\n\ttype CutPointResult,\n\tcalculateContextTokens,\n\tcollectEntriesForBranchSummary,\n\tcompact,\n\tDEFAULT_COMPACTION_SETTINGS,\n\testimateTokens,\n\ttype FileOperations,\n\tfindCutPoint,\n\tfindTurnStartIndex,\n\ttype GenerateBranchSummaryOptions,\n\tgenerateBranchSummary,\n\tgenerateSummary,\n\tgetLastAssistantUsage,\n\tprepareBranchEntries,\n\tserializeConversation,\n\tshouldCompact,\n} from \"./core/compaction/index.js\";\nexport { createEventBus, type EventBus, type EventBusController } from \"./core/event-bus.js\";\n// Extension system\nexport type {\n\tAgentEndEvent,\n\tAgentStartEvent,\n\tAgentToolResult,\n\tAgentToolUpdateCallback,\n\tAppAction,\n\tBashToolCallEvent,\n\tBeforeAgentStartEvent,\n\tCompactOptions,\n\tContextEvent,\n\tContextUsage,\n\tCustomToolCallEvent,\n\tEditToolCallEvent,\n\tExecOptions,\n\tExecResult,\n\tExtension,\n\tExtensionActions,\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionCommandContextActions,\n\tExtensionContext,\n\tExtensionContextActions,\n\tExtensionError,\n\tExtensionEvent,\n\tExtensionFactory,\n\tExtensionFlag,\n\tExtensionHandler,\n\tExtensionRuntime,\n\tExtensionShortcut,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tFindToolCallEvent,\n\tGrepToolCallEvent,\n\tInputEvent,\n\tInputEventResult,\n\tInputSource,\n\tKeybindingsManager,\n\tLoadExtensionsResult,\n\tLsToolCallEvent,\n\tMessageRenderer,\n\tMessageRenderOptions,\n\tProviderConfig,\n\tProviderModelConfig,\n\tReadToolCallEvent,\n\tRegisteredCommand,\n\tRegisteredTool,\n\tSessionBeforeCompactEvent,\n\tSessionBeforeForkEvent,\n\tSessionBeforeSwitchEvent,\n\tSessionBeforeTreeEvent,\n\tSessionCompactEvent,\n\tSessionForkEvent,\n\tSessionShutdownEvent,\n\tSessionStartEvent,\n\tSessionSwitchEvent,\n\tSessionTreeEvent,\n\tSlashCommandInfo,\n\tSlashCommandLocation,\n\tSlashCommandSource,\n\tTerminalInputHandler,\n\tToolCallEvent,\n\tToolDefinition,\n\tToolInfo,\n\tToolRenderResultOptions,\n\tToolResultEvent,\n\tTurnEndEvent,\n\tTurnStartEvent,\n\tUserBashEvent,\n\tUserBashEventResult,\n\tWidgetPlacement,\n\tWriteToolCallEvent,\n} from \"./core/extensions/index.js\";\nexport {\n\tcreateExtensionRuntime,\n\tdiscoverAndLoadExtensions,\n\tExtensionRunner,\n\tisBashToolResult,\n\tisEditToolResult,\n\tisFindToolResult,\n\tisGrepToolResult,\n\tisLsToolResult,\n\tisReadToolResult,\n\tisToolCallEventType,\n\tisWriteToolResult,\n\twrapRegisteredTool,\n\twrapRegisteredTools,\n\twrapToolsWithExtensions,\n\twrapToolWithExtensions,\n} from \"./core/extensions/index.js\";\n// Footer data provider (git branch + extension statuses - data not otherwise available to extensions)\nexport type { ReadonlyFooterDataProvider } from \"./core/footer-data-provider.js\";\nexport { convertToLlm } from \"./core/messages.js\";\nexport { ModelRegistry } from \"./core/model-registry.js\";\nexport type {\n\tPackageManager,\n\tPathMetadata,\n\tProgressCallback,\n\tProgressEvent,\n\tResolvedPaths,\n\tResolvedResource,\n} from \"./core/package-manager.js\";\nexport { DefaultPackageManager } from \"./core/package-manager.js\";\nexport type { ResourceCollision, ResourceDiagnostic, ResourceLoader } from \"./core/resource-loader.js\";\nexport { DefaultResourceLoader } from \"./core/resource-loader.js\";\n// SDK for programmatic usage\nexport {\n\ttype CreateAgentSessionOptions,\n\ttype CreateAgentSessionResult,\n\t// Factory\n\tcreateAgentSession,\n\tcreateBashTool,\n\t// Tool factories (for custom cwd)\n\tcreateCodingTools,\n\tcreateEditTool,\n\tcreateFindTool,\n\tcreateGrepTool,\n\tcreateLsTool,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateWriteTool,\n\ttype PromptTemplate,\n\t// Pre-built tools (use process.cwd())\n\treadOnlyTools,\n} from \"./core/sdk.js\";\nexport {\n\ttype BranchSummaryEntry,\n\tbuildSessionContext,\n\ttype CompactionEntry,\n\tCURRENT_SESSION_VERSION,\n\ttype CustomEntry,\n\ttype CustomMessageEntry,\n\ttype FileEntry,\n\tgetLatestCompactionEntry,\n\ttype ModelChangeEntry,\n\tmigrateSessionEntries,\n\ttype NewSessionOptions,\n\tparseSessionEntries,\n\ttype SessionContext,\n\ttype SessionEntry,\n\ttype SessionEntryBase,\n\ttype SessionHeader,\n\ttype SessionInfo,\n\ttype SessionInfoEntry,\n\tSessionManager,\n\ttype SessionMessageEntry,\n\ttype ThinkingLevelChangeEntry,\n} from \"./core/session-manager.js\";\nexport {\n\ttype CompactionSettings,\n\ttype ImageSettings,\n\ttype PackageSource,\n\ttype RetrySettings,\n\tSettingsManager,\n} from \"./core/settings-manager.js\";\n// Skills\nexport {\n\tformatSkillsForPrompt,\n\ttype LoadSkillsFromDirOptions,\n\ttype LoadSkillsResult,\n\tloadSkills,\n\tloadSkillsFromDir,\n\ttype Skill,\n\ttype SkillFrontmatter,\n} from \"./core/skills.js\";\n// Tools\nexport {\n\ttype BashOperations,\n\ttype BashSpawnContext,\n\ttype BashSpawnHook,\n\ttype BashToolDetails,\n\ttype BashToolInput,\n\ttype BashToolOptions,\n\tbashTool,\n\tcodingTools,\n\tDEFAULT_MAX_BYTES,\n\tDEFAULT_MAX_LINES,\n\ttype EditOperations,\n\ttype EditToolDetails,\n\ttype EditToolInput,\n\ttype EditToolOptions,\n\teditTool,\n\ttype FindOperations,\n\ttype FindToolDetails,\n\ttype FindToolInput,\n\ttype FindToolOptions,\n\tfindTool,\n\tformatSize,\n\ttype GrepOperations,\n\ttype GrepToolDetails,\n\ttype GrepToolInput,\n\ttype GrepToolOptions,\n\tgrepTool,\n\ttype LsOperations,\n\ttype LsToolDetails,\n\ttype LsToolInput,\n\ttype LsToolOptions,\n\tlsTool,\n\ttype ReadOperations,\n\ttype ReadToolDetails,\n\ttype ReadToolInput,\n\ttype ReadToolOptions,\n\treadTool,\n\ttype ToolsOptions,\n\ttype TruncationOptions,\n\ttype TruncationResult,\n\ttruncateHead,\n\ttruncateLine,\n\ttruncateTail,\n\ttype WriteOperations,\n\ttype WriteToolInput,\n\ttype WriteToolOptions,\n\twriteTool,\n} from \"./core/tools/index.js\";\n// Main entry point\nexport { main } from \"./main.js\";\n// Run modes for programmatic SDK usage\nexport {\n\tInteractiveMode,\n\ttype InteractiveModeOptions,\n\ttype PrintModeOptions,\n\trunPrintMode,\n\trunRpcMode,\n} from \"./modes/index.js\";\n// UI components for extensions\nexport {\n\tArminComponent,\n\tAssistantMessageComponent,\n\tappKey,\n\tappKeyHint,\n\tBashExecutionComponent,\n\tBorderedLoader,\n\tBranchSummaryMessageComponent,\n\tCompactionSummaryMessageComponent,\n\tCustomEditor,\n\tCustomMessageComponent,\n\tDynamicBorder,\n\tExtensionEditorComponent,\n\tExtensionInputComponent,\n\tExtensionSelectorComponent,\n\teditorKey,\n\tFooterComponent,\n\tkeyHint,\n\tLoginDialogComponent,\n\tModelSelectorComponent,\n\tOAuthSelectorComponent,\n\ttype RenderDiffOptions,\n\trawKeyHint,\n\trenderDiff,\n\tSessionSelectorComponent,\n\ttype SettingsCallbacks,\n\ttype SettingsConfig,\n\tSettingsSelectorComponent,\n\tShowImagesSelectorComponent,\n\tSkillInvocationMessageComponent,\n\tThemeSelectorComponent,\n\tThinkingSelectorComponent,\n\tToolExecutionComponent,\n\ttype ToolExecutionOptions,\n\tTreeSelectorComponent,\n\ttruncateToVisualLines,\n\tUserMessageComponent,\n\tUserMessageSelectorComponent,\n\ttype VisualTruncateResult,\n} from \"./modes/interactive/components/index.js\";\n// Theme utilities for custom tools and extensions\nexport {\n\tgetLanguageFromPath,\n\tgetMarkdownTheme,\n\tgetSelectListTheme,\n\tgetSettingsListTheme,\n\thighlightCode,\n\tinitTheme,\n\tTheme,\n\ttype ThemeColor,\n} from \"./modes/interactive/theme/theme.js\";\n// Clipboard utilities\nexport { copyToClipboard } from \"./utils/clipboard.js\";\nexport { parseFrontmatter, stripFrontmatter } from \"./utils/frontmatter.js\";\n// Shell utilities\nexport { getShellConfig } from \"./utils/shell.js\";\n"]}
package/dist/main.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Main entry point for the coding agent CLI.
3
+ *
4
+ * This file handles CLI argument parsing and translates them into
5
+ * createAgentSession() options. The SDK does the heavy lifting.
6
+ */
7
+ export declare function main(args: string[]): Promise<void>;
8
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6rBH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,iBAmPxC","sourcesContent":["/**\n * Main entry point for the coding agent CLI.\n *\n * This file handles CLI argument parsing and translates them into\n * createAgentSession() options. The SDK does the heavy lifting.\n */\n\nimport { type ImageContent, modelsAreEqual, supportsXhigh } from \"@draht/ai\";\nimport chalk from \"chalk\";\nimport { createInterface } from \"readline\";\nimport { type Args, parseArgs, printHelp } from \"./cli/args.js\";\nimport { selectConfig } from \"./cli/config-selector.js\";\nimport { processFileArguments } from \"./cli/file-processor.js\";\nimport { listModels } from \"./cli/list-models.js\";\nimport { selectSession } from \"./cli/session-picker.js\";\nimport { APP_NAME, getAgentDir, getModelsPath, VERSION } from \"./config.js\";\nimport { AuthStorage } from \"./core/auth-storage.js\";\nimport { DEFAULT_THINKING_LEVEL } from \"./core/defaults.js\";\nimport { exportFromFile } from \"./core/export-html/index.js\";\nimport type { LoadExtensionsResult } from \"./core/extensions/index.js\";\nimport { KeybindingsManager } from \"./core/keybindings.js\";\nimport { ModelRegistry } from \"./core/model-registry.js\";\nimport { resolveCliModel, resolveModelScope, type ScopedModel } from \"./core/model-resolver.js\";\nimport { DefaultPackageManager } from \"./core/package-manager.js\";\nimport { DefaultResourceLoader } from \"./core/resource-loader.js\";\nimport { type CreateAgentSessionOptions, createAgentSession } from \"./core/sdk.js\";\nimport { SessionManager } from \"./core/session-manager.js\";\nimport { SettingsManager } from \"./core/settings-manager.js\";\nimport { printTimings, time } from \"./core/timings.js\";\nimport { allTools } from \"./core/tools/index.js\";\nimport { runMigrations, showDeprecationWarnings } from \"./migrations.js\";\nimport { InteractiveMode, runPrintMode, runRpcMode } from \"./modes/index.js\";\nimport { initTheme, stopThemeWatcher } from \"./modes/interactive/theme/theme.js\";\n\n/**\n * Read all content from piped stdin.\n * Returns undefined if stdin is a TTY (interactive terminal).\n */\nasync function readPipedStdin(): Promise<string | undefined> {\n\t// If stdin is a TTY, we're running interactively - don't read stdin\n\tif (process.stdin.isTTY) {\n\t\treturn undefined;\n\t}\n\n\treturn new Promise((resolve) => {\n\t\tlet data = \"\";\n\t\tprocess.stdin.setEncoding(\"utf8\");\n\t\tprocess.stdin.on(\"data\", (chunk) => {\n\t\t\tdata += chunk;\n\t\t});\n\t\tprocess.stdin.on(\"end\", () => {\n\t\t\tresolve(data.trim() || undefined);\n\t\t});\n\t\tprocess.stdin.resume();\n\t});\n}\n\nfunction reportSettingsErrors(settingsManager: SettingsManager, context: string): void {\n\tconst errors = settingsManager.drainErrors();\n\tfor (const { scope, error } of errors) {\n\t\tconsole.error(chalk.yellow(`Warning (${context}, ${scope} settings): ${error.message}`));\n\t\tif (error.stack) {\n\t\t\tconsole.error(chalk.dim(error.stack));\n\t\t}\n\t}\n}\n\nfunction isTruthyEnvFlag(value: string | undefined): boolean {\n\tif (!value) return false;\n\treturn value === \"1\" || value.toLowerCase() === \"true\" || value.toLowerCase() === \"yes\";\n}\n\ntype PackageCommand = \"install\" | \"remove\" | \"update\" | \"list\";\n\ninterface PackageCommandOptions {\n\tcommand: PackageCommand;\n\tsource?: string;\n\tlocal: boolean;\n\thelp: boolean;\n\tinvalidOption?: string;\n}\n\nfunction getPackageCommandUsage(command: PackageCommand): string {\n\tswitch (command) {\n\t\tcase \"install\":\n\t\t\treturn `${APP_NAME} install <source> [-l]`;\n\t\tcase \"remove\":\n\t\t\treturn `${APP_NAME} remove <source> [-l]`;\n\t\tcase \"update\":\n\t\t\treturn `${APP_NAME} update [source]`;\n\t\tcase \"list\":\n\t\t\treturn `${APP_NAME} list`;\n\t}\n}\n\nfunction printPackageCommandHelp(command: PackageCommand): void {\n\tswitch (command) {\n\t\tcase \"install\":\n\t\t\tconsole.log(`${chalk.bold(\"Usage:\")}\n ${getPackageCommandUsage(\"install\")}\n\nInstall a package and add it to settings.\n\nOptions:\n -l, --local Install project-locally (.draht/settings.json)\n\nExamples:\n ${APP_NAME} install npm:@foo/bar\n ${APP_NAME} install git:github.com/user/repo\n ${APP_NAME} install git:git@github.com:user/repo\n ${APP_NAME} install https://github.com/user/repo\n ${APP_NAME} install ssh://git@github.com/user/repo\n ${APP_NAME} install ./local/path\n`);\n\t\t\treturn;\n\n\t\tcase \"remove\":\n\t\t\tconsole.log(`${chalk.bold(\"Usage:\")}\n ${getPackageCommandUsage(\"remove\")}\n\nRemove a package and its source from settings.\n\nOptions:\n -l, --local Remove from project settings (.draht/settings.json)\n\nExample:\n ${APP_NAME} remove npm:@foo/bar\n`);\n\t\t\treturn;\n\n\t\tcase \"update\":\n\t\t\tconsole.log(`${chalk.bold(\"Usage:\")}\n ${getPackageCommandUsage(\"update\")}\n\nUpdate installed packages.\nIf <source> is provided, only that package is updated.\n`);\n\t\t\treturn;\n\n\t\tcase \"list\":\n\t\t\tconsole.log(`${chalk.bold(\"Usage:\")}\n ${getPackageCommandUsage(\"list\")}\n\nList installed packages from user and project settings.\n`);\n\t\t\treturn;\n\t}\n}\n\nfunction parsePackageCommand(args: string[]): PackageCommandOptions | undefined {\n\tconst [command, ...rest] = args;\n\tif (command !== \"install\" && command !== \"remove\" && command !== \"update\" && command !== \"list\") {\n\t\treturn undefined;\n\t}\n\n\tlet local = false;\n\tlet help = false;\n\tlet invalidOption: string | undefined;\n\tlet source: string | undefined;\n\n\tfor (const arg of rest) {\n\t\tif (arg === \"-h\" || arg === \"--help\") {\n\t\t\thelp = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (arg === \"-l\" || arg === \"--local\") {\n\t\t\tif (command === \"install\" || command === \"remove\") {\n\t\t\t\tlocal = true;\n\t\t\t} else {\n\t\t\t\tinvalidOption = invalidOption ?? arg;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (arg.startsWith(\"-\")) {\n\t\t\tinvalidOption = invalidOption ?? arg;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!source) {\n\t\t\tsource = arg;\n\t\t}\n\t}\n\n\treturn { command, source, local, help, invalidOption };\n}\n\nasync function handlePackageCommand(args: string[]): Promise<boolean> {\n\tconst options = parsePackageCommand(args);\n\tif (!options) {\n\t\treturn false;\n\t}\n\n\tif (options.help) {\n\t\tprintPackageCommandHelp(options.command);\n\t\treturn true;\n\t}\n\n\tif (options.invalidOption) {\n\t\tconsole.error(chalk.red(`Unknown option ${options.invalidOption} for \"${options.command}\".`));\n\t\tconsole.error(chalk.dim(`Use \"${APP_NAME} --help\" or \"${getPackageCommandUsage(options.command)}\".`));\n\t\tprocess.exitCode = 1;\n\t\treturn true;\n\t}\n\n\tconst source = options.source;\n\tif ((options.command === \"install\" || options.command === \"remove\") && !source) {\n\t\tconsole.error(chalk.red(`Missing ${options.command} source.`));\n\t\tconsole.error(chalk.dim(`Usage: ${getPackageCommandUsage(options.command)}`));\n\t\tprocess.exitCode = 1;\n\t\treturn true;\n\t}\n\n\tconst cwd = process.cwd();\n\tconst agentDir = getAgentDir();\n\tconst settingsManager = SettingsManager.create(cwd, agentDir);\n\treportSettingsErrors(settingsManager, \"package command\");\n\tconst packageManager = new DefaultPackageManager({ cwd, agentDir, settingsManager });\n\n\tpackageManager.setProgressCallback((event) => {\n\t\tif (event.type === \"start\") {\n\t\t\tprocess.stdout.write(chalk.dim(`${event.message}\\n`));\n\t\t}\n\t});\n\n\ttry {\n\t\tswitch (options.command) {\n\t\t\tcase \"install\":\n\t\t\t\tawait packageManager.install(source!, { local: options.local });\n\t\t\t\tpackageManager.addSourceToSettings(source!, { local: options.local });\n\t\t\t\tconsole.log(chalk.green(`Installed ${source}`));\n\t\t\t\treturn true;\n\n\t\t\tcase \"remove\": {\n\t\t\t\tawait packageManager.remove(source!, { local: options.local });\n\t\t\t\tconst removed = packageManager.removeSourceFromSettings(source!, { local: options.local });\n\t\t\t\tif (!removed) {\n\t\t\t\t\tconsole.error(chalk.red(`No matching package found for ${source}`));\n\t\t\t\t\tprocess.exitCode = 1;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tconsole.log(chalk.green(`Removed ${source}`));\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tcase \"list\": {\n\t\t\t\tconst globalSettings = settingsManager.getGlobalSettings();\n\t\t\t\tconst projectSettings = settingsManager.getProjectSettings();\n\t\t\t\tconst globalPackages = globalSettings.packages ?? [];\n\t\t\t\tconst projectPackages = projectSettings.packages ?? [];\n\n\t\t\t\tif (globalPackages.length === 0 && projectPackages.length === 0) {\n\t\t\t\t\tconsole.log(chalk.dim(\"No packages installed.\"));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tconst formatPackage = (pkg: (typeof globalPackages)[number], scope: \"user\" | \"project\") => {\n\t\t\t\t\tconst source = typeof pkg === \"string\" ? pkg : pkg.source;\n\t\t\t\t\tconst filtered = typeof pkg === \"object\";\n\t\t\t\t\tconst display = filtered ? `${source} (filtered)` : source;\n\t\t\t\t\tconsole.log(` ${display}`);\n\t\t\t\t\tconst path = packageManager.getInstalledPath(source, scope);\n\t\t\t\t\tif (path) {\n\t\t\t\t\t\tconsole.log(chalk.dim(` ${path}`));\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tif (globalPackages.length > 0) {\n\t\t\t\t\tconsole.log(chalk.bold(\"User packages:\"));\n\t\t\t\t\tfor (const pkg of globalPackages) {\n\t\t\t\t\t\tformatPackage(pkg, \"user\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (projectPackages.length > 0) {\n\t\t\t\t\tif (globalPackages.length > 0) console.log();\n\t\t\t\t\tconsole.log(chalk.bold(\"Project packages:\"));\n\t\t\t\t\tfor (const pkg of projectPackages) {\n\t\t\t\t\t\tformatPackage(pkg, \"project\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tcase \"update\":\n\t\t\t\tawait packageManager.update(source);\n\t\t\t\tif (source) {\n\t\t\t\t\tconsole.log(chalk.green(`Updated ${source}`));\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log(chalk.green(\"Updated packages\"));\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t}\n\t} catch (error: unknown) {\n\t\tconst message = error instanceof Error ? error.message : \"Unknown package command error\";\n\t\tconsole.error(chalk.red(`Error: ${message}`));\n\t\tprocess.exitCode = 1;\n\t\treturn true;\n\t}\n}\n\nasync function prepareInitialMessage(\n\tparsed: Args,\n\tautoResizeImages: boolean,\n): Promise<{\n\tinitialMessage?: string;\n\tinitialImages?: ImageContent[];\n}> {\n\tif (parsed.fileArgs.length === 0) {\n\t\treturn {};\n\t}\n\n\tconst { text, images } = await processFileArguments(parsed.fileArgs, { autoResizeImages });\n\n\tlet initialMessage: string;\n\tif (parsed.messages.length > 0) {\n\t\tinitialMessage = text + parsed.messages[0];\n\t\tparsed.messages.shift();\n\t} else {\n\t\tinitialMessage = text;\n\t}\n\n\treturn {\n\t\tinitialMessage,\n\t\tinitialImages: images.length > 0 ? images : undefined,\n\t};\n}\n\n/** Result from resolving a session argument */\ntype ResolvedSession =\n\t| { type: \"path\"; path: string } // Direct file path\n\t| { type: \"local\"; path: string } // Found in current project\n\t| { type: \"global\"; path: string; cwd: string } // Found in different project\n\t| { type: \"not_found\"; arg: string }; // Not found anywhere\n\n/**\n * Resolve a session argument to a file path.\n * If it looks like a path, use as-is. Otherwise try to match as session ID prefix.\n */\nasync function resolveSessionPath(sessionArg: string, cwd: string, sessionDir?: string): Promise<ResolvedSession> {\n\t// If it looks like a file path, use as-is\n\tif (sessionArg.includes(\"/\") || sessionArg.includes(\"\\\\\") || sessionArg.endsWith(\".jsonl\")) {\n\t\treturn { type: \"path\", path: sessionArg };\n\t}\n\n\t// Try to match as session ID in current project first\n\tconst localSessions = await SessionManager.list(cwd, sessionDir);\n\tconst localMatches = localSessions.filter((s) => s.id.startsWith(sessionArg));\n\n\tif (localMatches.length >= 1) {\n\t\treturn { type: \"local\", path: localMatches[0].path };\n\t}\n\n\t// Try global search across all projects\n\tconst allSessions = await SessionManager.listAll();\n\tconst globalMatches = allSessions.filter((s) => s.id.startsWith(sessionArg));\n\n\tif (globalMatches.length >= 1) {\n\t\tconst match = globalMatches[0];\n\t\treturn { type: \"global\", path: match.path, cwd: match.cwd };\n\t}\n\n\t// Not found anywhere\n\treturn { type: \"not_found\", arg: sessionArg };\n}\n\n/** Prompt user for yes/no confirmation */\nasync function promptConfirm(message: string): Promise<boolean> {\n\treturn new Promise((resolve) => {\n\t\tconst rl = createInterface({\n\t\t\tinput: process.stdin,\n\t\t\toutput: process.stdout,\n\t\t});\n\t\trl.question(`${message} [y/N] `, (answer) => {\n\t\t\trl.close();\n\t\t\tresolve(answer.toLowerCase() === \"y\" || answer.toLowerCase() === \"yes\");\n\t\t});\n\t});\n}\n\nasync function createSessionManager(parsed: Args, cwd: string): Promise<SessionManager | undefined> {\n\tif (parsed.noSession) {\n\t\treturn SessionManager.inMemory();\n\t}\n\tif (parsed.session) {\n\t\tconst resolved = await resolveSessionPath(parsed.session, cwd, parsed.sessionDir);\n\n\t\tswitch (resolved.type) {\n\t\t\tcase \"path\":\n\t\t\tcase \"local\":\n\t\t\t\treturn SessionManager.open(resolved.path, parsed.sessionDir);\n\n\t\t\tcase \"global\": {\n\t\t\t\t// Session found in different project - ask user if they want to fork\n\t\t\t\tconsole.log(chalk.yellow(`Session found in different project: ${resolved.cwd}`));\n\t\t\t\tconst shouldFork = await promptConfirm(\"Fork this session into current directory?\");\n\t\t\t\tif (!shouldFork) {\n\t\t\t\t\tconsole.log(chalk.dim(\"Aborted.\"));\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\t\t\t\treturn SessionManager.forkFrom(resolved.path, cwd, parsed.sessionDir);\n\t\t\t}\n\n\t\t\tcase \"not_found\":\n\t\t\t\tconsole.error(chalk.red(`No session found matching '${resolved.arg}'`));\n\t\t\t\tprocess.exit(1);\n\t\t}\n\t}\n\tif (parsed.continue) {\n\t\treturn SessionManager.continueRecent(cwd, parsed.sessionDir);\n\t}\n\t// --resume is handled separately (needs picker UI)\n\t// If --session-dir provided without --continue/--resume, create new session there\n\tif (parsed.sessionDir) {\n\t\treturn SessionManager.create(cwd, parsed.sessionDir);\n\t}\n\t// Default case (new session) returns undefined, SDK will create one\n\treturn undefined;\n}\n\nfunction buildSessionOptions(\n\tparsed: Args,\n\tscopedModels: ScopedModel[],\n\tsessionManager: SessionManager | undefined,\n\tmodelRegistry: ModelRegistry,\n\tsettingsManager: SettingsManager,\n): { options: CreateAgentSessionOptions; cliThinkingFromModel: boolean } {\n\tconst options: CreateAgentSessionOptions = {};\n\tlet cliThinkingFromModel = false;\n\n\tif (sessionManager) {\n\t\toptions.sessionManager = sessionManager;\n\t}\n\n\t// Model from CLI\n\t// - supports --provider <name> --model <pattern>\n\t// - supports --model <provider>/<pattern>\n\tif (parsed.model) {\n\t\tconst resolved = resolveCliModel({\n\t\t\tcliProvider: parsed.provider,\n\t\t\tcliModel: parsed.model,\n\t\t\tmodelRegistry,\n\t\t});\n\t\tif (resolved.warning) {\n\t\t\tconsole.warn(chalk.yellow(`Warning: ${resolved.warning}`));\n\t\t}\n\t\tif (resolved.error) {\n\t\t\tconsole.error(chalk.red(resolved.error));\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tif (resolved.model) {\n\t\t\toptions.model = resolved.model;\n\t\t\t// Allow \"--model <pattern>:<thinking>\" as a shorthand.\n\t\t\t// Explicit --thinking still takes precedence (applied later).\n\t\t\tif (!parsed.thinking && resolved.thinkingLevel) {\n\t\t\t\toptions.thinkingLevel = resolved.thinkingLevel;\n\t\t\t\tcliThinkingFromModel = true;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!options.model && scopedModels.length > 0 && !parsed.continue && !parsed.resume) {\n\t\t// Check if saved default is in scoped models - use it if so, otherwise first scoped model\n\t\tconst savedProvider = settingsManager.getDefaultProvider();\n\t\tconst savedModelId = settingsManager.getDefaultModel();\n\t\tconst savedModel = savedProvider && savedModelId ? modelRegistry.find(savedProvider, savedModelId) : undefined;\n\t\tconst savedInScope = savedModel ? scopedModels.find((sm) => modelsAreEqual(sm.model, savedModel)) : undefined;\n\n\t\tif (savedInScope) {\n\t\t\toptions.model = savedInScope.model;\n\t\t\t// Use thinking level from scoped model config if explicitly set\n\t\t\tif (!parsed.thinking && savedInScope.thinkingLevel) {\n\t\t\t\toptions.thinkingLevel = savedInScope.thinkingLevel;\n\t\t\t}\n\t\t} else {\n\t\t\toptions.model = scopedModels[0].model;\n\t\t\t// Use thinking level from first scoped model if explicitly set\n\t\t\tif (!parsed.thinking && scopedModels[0].thinkingLevel) {\n\t\t\t\toptions.thinkingLevel = scopedModels[0].thinkingLevel;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Thinking level from CLI (takes precedence over scoped model thinking levels set above)\n\tif (parsed.thinking) {\n\t\toptions.thinkingLevel = parsed.thinking;\n\t}\n\n\t// Scoped models for Ctrl+P cycling - fill in default thinking level for models without explicit level\n\tif (scopedModels.length > 0) {\n\t\tconst defaultThinkingLevel = settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;\n\t\toptions.scopedModels = scopedModels.map((sm) => ({\n\t\t\tmodel: sm.model,\n\t\t\tthinkingLevel: sm.thinkingLevel ?? defaultThinkingLevel,\n\t\t}));\n\t}\n\n\t// API key from CLI - set in authStorage\n\t// (handled by caller before createAgentSession)\n\n\t// Tools\n\tif (parsed.noTools) {\n\t\t// --no-tools: start with no built-in tools\n\t\t// --tools can still add specific ones back\n\t\tif (parsed.tools && parsed.tools.length > 0) {\n\t\t\toptions.tools = parsed.tools.map((name) => allTools[name]);\n\t\t} else {\n\t\t\toptions.tools = [];\n\t\t}\n\t} else if (parsed.tools) {\n\t\toptions.tools = parsed.tools.map((name) => allTools[name]);\n\t}\n\n\treturn { options, cliThinkingFromModel };\n}\n\nasync function handleConfigCommand(args: string[]): Promise<boolean> {\n\tif (args[0] !== \"config\") {\n\t\treturn false;\n\t}\n\n\tconst cwd = process.cwd();\n\tconst agentDir = getAgentDir();\n\tconst settingsManager = SettingsManager.create(cwd, agentDir);\n\treportSettingsErrors(settingsManager, \"config command\");\n\tconst packageManager = new DefaultPackageManager({ cwd, agentDir, settingsManager });\n\n\tconst resolvedPaths = await packageManager.resolve();\n\n\tawait selectConfig({\n\t\tresolvedPaths,\n\t\tsettingsManager,\n\t\tcwd,\n\t\tagentDir,\n\t});\n\n\tprocess.exit(0);\n}\n\nasync function handleLoginCommand(args: string[]): Promise<boolean> {\n\tif (args[0] !== \"login\" && args[0] !== \"--login\") {\n\t\treturn false;\n\t}\n\n\tconst { getOAuthProviders } = await import(\"@draht/ai\");\n\tconst authMod = await import(\"./core/auth-storage.js\");\n\tconst AuthStorageClass = authMod.AuthStorage;\n\t// open browser - use dynamic import, fallback to exec\n\tconst openBrowser = async (url: string) => {\n\t\ttry {\n\t\t\tconst { exec } = await import(\"child_process\");\n\t\t\texec(`open \"${url}\" 2>/dev/null || xdg-open \"${url}\" 2>/dev/null`);\n\t\t} catch {\n\t\t\t/* ignore */\n\t\t}\n\t};\n\n\tconst providers = getOAuthProviders();\n\tconst requestedProvider = args[1]?.toLowerCase();\n\n\t// Map friendly names to provider IDs\n\tconst PROVIDER_ALIASES: Record<string, string> = {\n\t\tanthropic: \"anthropic\",\n\t\tclaude: \"anthropic\",\n\t\tgoogle: \"google-gemini-cli\",\n\t\tgemini: \"google-gemini-cli\",\n\t\topenai: \"openai-codex\",\n\t\tcodex: \"openai-codex\",\n\t\tcopilot: \"github-copilot\",\n\t\tgithub: \"github-copilot\",\n\t\tantigravity: \"google-antigravity\",\n\t};\n\n\tif (requestedProvider === \"--help\" || requestedProvider === \"-h\" || requestedProvider === \"help\") {\n\t\tconsole.log(chalk.bold(\"\\nšŸ”Œ draht login\\n\"));\n\t\tconsole.log(\"Authenticate with AI providers.\\n\");\n\t\tconsole.log(\"Usage:\");\n\t\tconsole.log(\" draht login Interactive provider selection\");\n\t\tconsole.log(\" draht login anthropic Login to Anthropic (Claude Pro/Max)\");\n\t\tconsole.log(\" draht login gemini Login to Google Gemini CLI\");\n\t\tconsole.log(\" draht login openai Login to OpenAI (ChatGPT/Codex)\");\n\t\tconsole.log(\" draht login copilot Login to GitHub Copilot\");\n\t\tconsole.log(\" draht login all Login to all providers\\n\");\n\t\tconsole.log(\"Aliases: claude, google, codex, github\\n\");\n\t\tprocess.exit(0);\n\t}\n\n\tif (requestedProvider && requestedProvider !== \"all\") {\n\t\tconst providerId = PROVIDER_ALIASES[requestedProvider] ?? requestedProvider;\n\t\tconst provider = providers.find((p) => p.id === providerId);\n\t\tif (!provider) {\n\t\t\tconsole.log(chalk.red(`Unknown provider: ${requestedProvider}`));\n\t\t\tconsole.log(`\\nAvailable providers:`);\n\t\t\tfor (const p of providers) {\n\t\t\t\tconst aliases = Object.entries(PROVIDER_ALIASES)\n\t\t\t\t\t.filter(([_, v]) => v === p.id)\n\t\t\t\t\t.map(([k]) => k);\n\t\t\t\tconsole.log(` ${chalk.bold(p.name)} (${p.id}) — aliases: ${aliases.join(\", \")}`);\n\t\t\t}\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tawait loginProvider(provider, openBrowser);\n\t\tprocess.exit(0);\n\t}\n\n\t// Interactive: show menu\n\tconsole.log(chalk.bold(\"\\nšŸ”Œ Draht Login\\n\"));\n\tconsole.log(\"Select a provider to authenticate:\\n\");\n\n\tconst providerList = providers.filter((p) =>\n\t\t[\"anthropic\", \"gemini-cli\", \"openai-codex\", \"github-copilot\"].includes(p.id),\n\t);\n\n\tfor (let i = 0; i < providerList.length; i++) {\n\t\tconst p = providerList[i];\n\t\tconst as = AuthStorageClass.create();\n\t\tconst hasCredentials = as.has(p.id);\n\t\tconst status = hasCredentials ? chalk.green(\"āœ“ logged in\") : chalk.dim(\"not connected\");\n\t\tconsole.log(` ${chalk.bold(i + 1)}. ${p.name} ${status}`);\n\t}\n\tconsole.log(` ${chalk.bold(\"a\")}. Login to all`);\n\tconsole.log(` ${chalk.bold(\"q\")}. Cancel\\n`);\n\n\tconst rl = createInterface({ input: process.stdin, output: process.stdout });\n\tconst answer = await new Promise<string>((resolve) => {\n\t\trl.question(\"Choice: \", (ans) => {\n\t\t\trl.close();\n\t\t\tresolve(ans.trim());\n\t\t});\n\t});\n\n\tif (answer === \"q\" || answer === \"\") {\n\t\tprocess.exit(0);\n\t}\n\n\tif (answer === \"a\") {\n\t\tfor (const p of providerList) {\n\t\t\tawait loginProvider(p, openBrowser);\n\t\t}\n\t} else {\n\t\tconst idx = parseInt(answer, 10) - 1;\n\t\tif (idx >= 0 && idx < providerList.length) {\n\t\t\tawait loginProvider(providerList[idx], openBrowser);\n\t\t} else {\n\t\t\tconsole.log(chalk.red(\"Invalid choice\"));\n\t\t}\n\t}\n\n\tprocess.exit(0);\n}\n\nasync function loginProvider(\n\tprovider: { id: string; name: string; login: (cb: any) => Promise<any>; usesCallbackServer?: boolean },\n\topenBrowser: (url: string) => Promise<any>,\n): Promise<void> {\n\tconst { AuthStorage } = await import(\"./core/auth-storage.js\");\n\tconst authStorage = AuthStorage.create();\n\n\tconsole.log(`\\n${chalk.bold(`Logging in to ${provider.name}...`)}`);\n\n\ttry {\n\t\tconst credentials = await provider.login({\n\t\t\tonAuth: (info: { url: string; instructions?: string }) => {\n\t\t\t\tconsole.log(`\\n${chalk.blue(\"→\")} Opening browser for authentication...`);\n\t\t\t\tif (info.instructions) console.log(chalk.dim(info.instructions));\n\t\t\t\topenBrowser(info.url).catch(() => {\n\t\t\t\t\tconsole.log(`\\n${chalk.yellow(\"Could not open browser. Visit manually:\")}`);\n\t\t\t\t\tconsole.log(chalk.underline(info.url));\n\t\t\t\t});\n\t\t\t},\n\t\t\tonPrompt: async (prompt: { message: string; placeholder?: string }) => {\n\t\t\t\tconst { createInterface } = await import(\"readline\");\n\t\t\t\tconst rl = createInterface({ input: process.stdin, output: process.stdout });\n\t\t\t\treturn new Promise<string>((resolve) => {\n\t\t\t\t\trl.question(`${prompt.message} `, (ans: string) => {\n\t\t\t\t\t\trl.close();\n\t\t\t\t\t\tresolve(ans.trim());\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tonProgress: (message: string) => {\n\t\t\t\tconsole.log(chalk.dim(` ${message}`));\n\t\t\t},\n\t\t\tonManualCodeInput: provider.usesCallbackServer\n\t\t\t\t? async () => {\n\t\t\t\t\t\tconst { createInterface } = await import(\"readline\");\n\t\t\t\t\t\tconst rl = createInterface({ input: process.stdin, output: process.stdout });\n\t\t\t\t\t\treturn new Promise<string>((resolve) => {\n\t\t\t\t\t\t\trl.question(\"Enter the authorization code: \", (ans: string) => {\n\t\t\t\t\t\t\t\trl.close();\n\t\t\t\t\t\t\t\tresolve(ans.trim());\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t\t});\n\n\t\tauthStorage.set(provider.id, { type: \"oauth\", ...credentials });\n\t\tconsole.log(chalk.green(`āœ“ ${provider.name} — logged in successfully`));\n\t} catch (error) {\n\t\tconsole.log(chalk.red(`āœ— ${provider.name} — login failed: ${error instanceof Error ? error.message : error}`));\n\t}\n}\n\nexport async function main(args: string[]) {\n\tconst offlineMode = args.includes(\"--offline\") || isTruthyEnvFlag(process.env.DRAHT_OFFLINE);\n\tif (offlineMode) {\n\t\tprocess.env.DRAHT_OFFLINE = \"1\";\n\t\tprocess.env.DRAHT_SKIP_VERSION_CHECK = \"1\";\n\t}\n\n\tif (await handlePackageCommand(args)) {\n\t\treturn;\n\t}\n\n\tif (await handleConfigCommand(args)) {\n\t\treturn;\n\t}\n\n\tif (await handleLoginCommand(args)) {\n\t\treturn;\n\t}\n\n\t// Run migrations (pass cwd for project-local migrations)\n\tconst { migratedAuthProviders: migratedProviders, deprecationWarnings } = runMigrations(process.cwd());\n\n\t// First pass: parse args to get --extension paths\n\tconst firstPass = parseArgs(args);\n\n\t// Early load extensions to discover their CLI flags\n\tconst cwd = process.cwd();\n\tconst agentDir = getAgentDir();\n\tconst settingsManager = SettingsManager.create(cwd, agentDir);\n\treportSettingsErrors(settingsManager, \"startup\");\n\tconst authStorage = AuthStorage.create();\n\tconst modelRegistry = new ModelRegistry(authStorage, getModelsPath());\n\n\tconst resourceLoader = new DefaultResourceLoader({\n\t\tcwd,\n\t\tagentDir,\n\t\tsettingsManager,\n\t\tadditionalExtensionPaths: firstPass.extensions,\n\t\tadditionalSkillPaths: firstPass.skills,\n\t\tadditionalPromptTemplatePaths: firstPass.promptTemplates,\n\t\tadditionalThemePaths: firstPass.themes,\n\t\tnoExtensions: firstPass.noExtensions,\n\t\tnoSkills: firstPass.noSkills,\n\t\tnoPromptTemplates: firstPass.noPromptTemplates,\n\t\tnoThemes: firstPass.noThemes,\n\t\tsystemPrompt: firstPass.systemPrompt,\n\t\tappendSystemPrompt: firstPass.appendSystemPrompt,\n\t});\n\tawait resourceLoader.reload();\n\ttime(\"resourceLoader.reload\");\n\n\tconst extensionsResult: LoadExtensionsResult = resourceLoader.getExtensions();\n\tfor (const { path, error } of extensionsResult.errors) {\n\t\tconsole.error(chalk.red(`Failed to load extension \"${path}\": ${error}`));\n\t}\n\n\t// Apply pending provider registrations from extensions immediately\n\t// so they're available for model resolution before AgentSession is created\n\tfor (const { name, config } of extensionsResult.runtime.pendingProviderRegistrations) {\n\t\tmodelRegistry.registerProvider(name, config);\n\t}\n\textensionsResult.runtime.pendingProviderRegistrations = [];\n\n\tconst extensionFlags = new Map<string, { type: \"boolean\" | \"string\" }>();\n\tfor (const ext of extensionsResult.extensions) {\n\t\tfor (const [name, flag] of ext.flags) {\n\t\t\textensionFlags.set(name, { type: flag.type });\n\t\t}\n\t}\n\n\t// Second pass: parse args with extension flags\n\tconst parsed = parseArgs(args, extensionFlags);\n\n\t// Pass flag values to extensions via runtime\n\tfor (const [name, value] of parsed.unknownFlags) {\n\t\textensionsResult.runtime.flagValues.set(name, value);\n\t}\n\n\tif (parsed.version) {\n\t\tconsole.log(VERSION);\n\t\tprocess.exit(0);\n\t}\n\n\tif (parsed.help) {\n\t\tprintHelp();\n\t\tprocess.exit(0);\n\t}\n\n\tif (parsed.listModels !== undefined) {\n\t\tconst searchPattern = typeof parsed.listModels === \"string\" ? parsed.listModels : undefined;\n\t\tawait listModels(modelRegistry, searchPattern);\n\t\tprocess.exit(0);\n\t}\n\n\t// Read piped stdin content (if any) - skip for RPC mode which uses stdin for JSON-RPC\n\tif (parsed.mode !== \"rpc\") {\n\t\tconst stdinContent = await readPipedStdin();\n\t\tif (stdinContent !== undefined) {\n\t\t\t// Force print mode since interactive mode requires a TTY for keyboard input\n\t\t\tparsed.print = true;\n\t\t\t// Prepend stdin content to messages\n\t\t\tparsed.messages.unshift(stdinContent);\n\t\t}\n\t}\n\n\tif (parsed.export) {\n\t\tlet result: string;\n\t\ttry {\n\t\t\tconst outputPath = parsed.messages.length > 0 ? parsed.messages[0] : undefined;\n\t\t\tresult = await exportFromFile(parsed.export, outputPath);\n\t\t} catch (error: unknown) {\n\t\t\tconst message = error instanceof Error ? error.message : \"Failed to export session\";\n\t\t\tconsole.error(chalk.red(`Error: ${message}`));\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tconsole.log(`Exported to: ${result}`);\n\t\tprocess.exit(0);\n\t}\n\n\tif (parsed.mode === \"rpc\" && parsed.fileArgs.length > 0) {\n\t\tconsole.error(chalk.red(\"Error: @file arguments are not supported in RPC mode\"));\n\t\tprocess.exit(1);\n\t}\n\n\tconst { initialMessage, initialImages } = await prepareInitialMessage(parsed, settingsManager.getImageAutoResize());\n\tconst isInteractive = !parsed.print && parsed.mode === undefined;\n\tconst mode = parsed.mode || \"text\";\n\tinitTheme(settingsManager.getTheme(), isInteractive);\n\n\t// Show deprecation warnings in interactive mode\n\tif (isInteractive && deprecationWarnings.length > 0) {\n\t\tawait showDeprecationWarnings(deprecationWarnings);\n\t}\n\n\tlet scopedModels: ScopedModel[] = [];\n\tconst modelPatterns = parsed.models ?? settingsManager.getEnabledModels();\n\tif (modelPatterns && modelPatterns.length > 0) {\n\t\tscopedModels = await resolveModelScope(modelPatterns, modelRegistry);\n\t}\n\n\t// Create session manager based on CLI flags\n\tlet sessionManager = await createSessionManager(parsed, cwd);\n\n\t// Handle --resume: show session picker\n\tif (parsed.resume) {\n\t\t// Initialize keybindings so session picker respects user config\n\t\tKeybindingsManager.create();\n\n\t\tconst selectedPath = await selectSession(\n\t\t\t(onProgress) => SessionManager.list(cwd, parsed.sessionDir, onProgress),\n\t\t\tSessionManager.listAll,\n\t\t);\n\t\tif (!selectedPath) {\n\t\t\tconsole.log(chalk.dim(\"No session selected\"));\n\t\t\tstopThemeWatcher();\n\t\t\tprocess.exit(0);\n\t\t}\n\t\tsessionManager = SessionManager.open(selectedPath);\n\t}\n\n\tconst { options: sessionOptions, cliThinkingFromModel } = buildSessionOptions(\n\t\tparsed,\n\t\tscopedModels,\n\t\tsessionManager,\n\t\tmodelRegistry,\n\t\tsettingsManager,\n\t);\n\tsessionOptions.authStorage = authStorage;\n\tsessionOptions.modelRegistry = modelRegistry;\n\tsessionOptions.resourceLoader = resourceLoader;\n\n\t// Handle CLI --api-key as runtime override (not persisted)\n\tif (parsed.apiKey) {\n\t\tif (!sessionOptions.model) {\n\t\t\tconsole.error(\n\t\t\t\tchalk.red(\"--api-key requires a model to be specified via --model, --provider/--model, or --models\"),\n\t\t\t);\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tauthStorage.setRuntimeApiKey(sessionOptions.model.provider, parsed.apiKey);\n\t}\n\n\tconst { session, modelFallbackMessage } = await createAgentSession(sessionOptions);\n\n\tif (!isInteractive && !session.model) {\n\t\tconsole.error(chalk.red(\"No models available.\"));\n\t\tconsole.error(chalk.yellow(\"\\nSet an API key environment variable:\"));\n\t\tconsole.error(\" ANTHROPIC_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY, etc.\");\n\t\tconsole.error(chalk.yellow(`\\nOr create ${getModelsPath()}`));\n\t\tprocess.exit(1);\n\t}\n\n\t// Clamp thinking level to model capabilities for CLI-provided thinking levels.\n\t// This covers both --thinking <level> and --model <pattern>:<thinking>.\n\tconst cliThinkingOverride = parsed.thinking !== undefined || cliThinkingFromModel;\n\tif (session.model && cliThinkingOverride) {\n\t\tlet effectiveThinking = session.thinkingLevel;\n\t\tif (!session.model.reasoning) {\n\t\t\teffectiveThinking = \"off\";\n\t\t} else if (effectiveThinking === \"xhigh\" && !supportsXhigh(session.model)) {\n\t\t\teffectiveThinking = \"high\";\n\t\t}\n\t\tif (effectiveThinking !== session.thinkingLevel) {\n\t\t\tsession.setThinkingLevel(effectiveThinking);\n\t\t}\n\t}\n\n\tif (mode === \"rpc\") {\n\t\tawait runRpcMode(session);\n\t} else if (isInteractive) {\n\t\tif (scopedModels.length > 0 && (parsed.verbose || !settingsManager.getQuietStartup())) {\n\t\t\tconst modelList = scopedModels\n\t\t\t\t.map((sm) => {\n\t\t\t\t\tconst thinkingStr = sm.thinkingLevel ? `:${sm.thinkingLevel}` : \"\";\n\t\t\t\t\treturn `${sm.model.id}${thinkingStr}`;\n\t\t\t\t})\n\t\t\t\t.join(\", \");\n\t\t\tconsole.log(chalk.dim(`Model scope: ${modelList} ${chalk.gray(\"(Ctrl+P to cycle)\")}`));\n\t\t}\n\n\t\tprintTimings();\n\t\tconst mode = new InteractiveMode(session, {\n\t\t\tmigratedProviders,\n\t\t\tmodelFallbackMessage,\n\t\t\tinitialMessage,\n\t\t\tinitialImages,\n\t\t\tinitialMessages: parsed.messages,\n\t\t\tverbose: parsed.verbose,\n\t\t});\n\t\tawait mode.run();\n\t} else {\n\t\tawait runPrintMode(session, {\n\t\t\tmode,\n\t\t\tmessages: parsed.messages,\n\t\t\tinitialMessage,\n\t\t\tinitialImages,\n\t\t});\n\t\tstopThemeWatcher();\n\t\tif (process.stdout.writableLength > 0) {\n\t\t\tawait new Promise<void>((resolve) => process.stdout.once(\"drain\", resolve));\n\t\t}\n\t\tprocess.exit(0);\n\t}\n}\n"]}