@m4ike1/ion-coding-agent 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1126) hide show
  1. package/CHANGELOG.md +5747 -0
  2. package/README.md +738 -0
  3. package/dist/bun/cli.d.ts +5 -0
  4. package/dist/bun/cli.d.ts.map +1 -0
  5. package/dist/bun/cli.js +5 -0
  6. package/dist/bun/cli.js.map +1 -0
  7. package/dist/bun/restore-sandbox-env.d.ts +17 -0
  8. package/dist/bun/restore-sandbox-env.d.ts.map +1 -0
  9. package/dist/bun/restore-sandbox-env.js +36 -0
  10. package/dist/bun/restore-sandbox-env.js.map +1 -0
  11. package/dist/bun/runtime-setup.d.ts +2 -0
  12. package/dist/bun/runtime-setup.d.ts.map +1 -0
  13. package/dist/bun/runtime-setup.js +9 -0
  14. package/dist/bun/runtime-setup.js.map +1 -0
  15. package/dist/bun/sandbox-env-setup.d.ts +2 -0
  16. package/dist/bun/sandbox-env-setup.d.ts.map +1 -0
  17. package/dist/bun/sandbox-env-setup.js +4 -0
  18. package/dist/bun/sandbox-env-setup.js.map +1 -0
  19. package/dist/bundle/chunks/anthropic-messages-RPVA4Z4Y.js +6 -0
  20. package/dist/bundle/chunks/anthropic.js +75 -0
  21. package/dist/bundle/chunks/azure-openai-responses-AJS3XTKL.js +2 -0
  22. package/dist/bundle/chunks/bedrock-converse-stream.js +78 -0
  23. package/dist/bundle/chunks/chunk-2MOZ6JBC.js +2 -0
  24. package/dist/bundle/chunks/chunk-3BIJ3AQO.js +12 -0
  25. package/dist/bundle/chunks/chunk-47K3I3YT.js +6 -0
  26. package/dist/bundle/chunks/chunk-4BN67GCJ.js +1664 -0
  27. package/dist/bundle/chunks/chunk-4PN6UIWX.js +2 -0
  28. package/dist/bundle/chunks/chunk-4TQA6ATT.js +4 -0
  29. package/dist/bundle/chunks/chunk-5NVSYJOG.js +2 -0
  30. package/dist/bundle/chunks/chunk-7OJL7DR5.js +2 -0
  31. package/dist/bundle/chunks/chunk-BEER2HEL.js +2 -0
  32. package/dist/bundle/chunks/chunk-CQX3HQAT.js +2 -0
  33. package/dist/bundle/chunks/chunk-FBMFFBV2.js +2 -0
  34. package/dist/bundle/chunks/chunk-GAZIWLQB.js +2 -0
  35. package/dist/bundle/chunks/chunk-HFYRAIWC.js +44 -0
  36. package/dist/bundle/chunks/chunk-IH7HUXWH.js +2 -0
  37. package/dist/bundle/chunks/chunk-LPP2XRBR.js +11 -0
  38. package/dist/bundle/chunks/chunk-LUTYILPM.js +25 -0
  39. package/dist/bundle/chunks/chunk-Q3ZNVFWD.js +42 -0
  40. package/dist/bundle/chunks/chunk-QNBVCBN3.js +2 -0
  41. package/dist/bundle/chunks/chunk-SWVWKUIA.js +2 -0
  42. package/dist/bundle/chunks/chunk-SY4QP6EI.js +2 -0
  43. package/dist/bundle/chunks/chunk-TVAWBPPS.js +2 -0
  44. package/dist/bundle/chunks/chunk-WPN6KEON.js +2 -0
  45. package/dist/bundle/chunks/chunk-WRID246J.js +2 -0
  46. package/dist/bundle/chunks/github-copilot.js +2 -0
  47. package/dist/bundle/chunks/google-generative-ai-S7SD5HC7.js +2 -0
  48. package/dist/bundle/chunks/google-vertex-NUNHA7QM.js +2 -0
  49. package/dist/bundle/chunks/https-proxy-agent-O2332S4O.js +13 -0
  50. package/dist/bundle/chunks/image-resize-worker.js +2 -0
  51. package/dist/bundle/chunks/ion-messages-KTW6MD7U.js +8 -0
  52. package/dist/bundle/chunks/kimi-coding.js +2 -0
  53. package/dist/bundle/chunks/lib-D4EQQPRR.js +9 -0
  54. package/dist/bundle/chunks/mistral-conversations-C7I3G2LA.js +5 -0
  55. package/dist/bundle/chunks/multipart-parser-PL2BXRDT.js +3 -0
  56. package/dist/bundle/chunks/node-7OQEATQA.js +2 -0
  57. package/dist/bundle/chunks/node-QIUI6CIW.js +16 -0
  58. package/dist/bundle/chunks/openai-codex-responses-2KRULDYR.js +10 -0
  59. package/dist/bundle/chunks/openai-codex.js +75 -0
  60. package/dist/bundle/chunks/openai-completions-64KX63FN.js +7 -0
  61. package/dist/bundle/chunks/openai-responses-QF3PPSTS.js +2 -0
  62. package/dist/bundle/chunks/openrouter-images-GQVXT3PO.js +2 -0
  63. package/dist/bundle/chunks/openrouter.js +75 -0
  64. package/dist/bundle/chunks/radius.js +75 -0
  65. package/dist/bundle/chunks/src-AZ7LBHGY.js +4 -0
  66. package/dist/bundle/chunks/xai.js +2 -0
  67. package/dist/bundle/cli.js +3 -0
  68. package/dist/bundle/index.js +2 -0
  69. package/dist/bundle/rpc-entry.js +3 -0
  70. package/dist/cli/args.d.ts +61 -0
  71. package/dist/cli/args.d.ts.map +1 -0
  72. package/dist/cli/args.js +440 -0
  73. package/dist/cli/args.js.map +1 -0
  74. package/dist/cli/auth-check.d.ts +19 -0
  75. package/dist/cli/auth-check.d.ts.map +1 -0
  76. package/dist/cli/auth-check.js +50 -0
  77. package/dist/cli/auth-check.js.map +1 -0
  78. package/dist/cli/auth-command.d.ts +24 -0
  79. package/dist/cli/auth-command.d.ts.map +1 -0
  80. package/dist/cli/auth-command.js +103 -0
  81. package/dist/cli/auth-command.js.map +1 -0
  82. package/dist/cli/config-selector.d.ts +16 -0
  83. package/dist/cli/config-selector.d.ts.map +1 -0
  84. package/dist/cli/config-selector.js +32 -0
  85. package/dist/cli/config-selector.js.map +1 -0
  86. package/dist/cli/credential-print.d.ts +13 -0
  87. package/dist/cli/credential-print.d.ts.map +1 -0
  88. package/dist/cli/credential-print.js +76 -0
  89. package/dist/cli/credential-print.js.map +1 -0
  90. package/dist/cli/file-processor.d.ts +15 -0
  91. package/dist/cli/file-processor.d.ts.map +1 -0
  92. package/dist/cli/file-processor.js +71 -0
  93. package/dist/cli/file-processor.js.map +1 -0
  94. package/dist/cli/initial-message.d.ts +18 -0
  95. package/dist/cli/initial-message.d.ts.map +1 -0
  96. package/dist/cli/initial-message.js +22 -0
  97. package/dist/cli/initial-message.js.map +1 -0
  98. package/dist/cli/list-models.d.ts +9 -0
  99. package/dist/cli/list-models.d.ts.map +1 -0
  100. package/dist/cli/list-models.js +98 -0
  101. package/dist/cli/list-models.js.map +1 -0
  102. package/dist/cli/project-trust.d.ts +10 -0
  103. package/dist/cli/project-trust.d.ts.map +1 -0
  104. package/dist/cli/project-trust.js +48 -0
  105. package/dist/cli/project-trust.js.map +1 -0
  106. package/dist/cli/session-picker.d.ts +10 -0
  107. package/dist/cli/session-picker.d.ts.map +1 -0
  108. package/dist/cli/session-picker.js +36 -0
  109. package/dist/cli/session-picker.js.map +1 -0
  110. package/dist/cli/setup.d.ts +2 -0
  111. package/dist/cli/setup.d.ts.map +1 -0
  112. package/dist/cli/setup.js +12 -0
  113. package/dist/cli/setup.js.map +1 -0
  114. package/dist/cli/startup-ui.d.ts +20 -0
  115. package/dist/cli/startup-ui.d.ts.map +1 -0
  116. package/dist/cli/startup-ui.js +185 -0
  117. package/dist/cli/startup-ui.js.map +1 -0
  118. package/dist/cli.d.ts +3 -0
  119. package/dist/cli.d.ts.map +1 -0
  120. package/dist/cli.js +6 -0
  121. package/dist/cli.js.map +1 -0
  122. package/dist/config.d.ts +122 -0
  123. package/dist/config.d.ts.map +1 -0
  124. package/dist/config.js +609 -0
  125. package/dist/config.js.map +1 -0
  126. package/dist/core/agent-session-runtime.d.ts +119 -0
  127. package/dist/core/agent-session-runtime.d.ts.map +1 -0
  128. package/dist/core/agent-session-runtime.js +317 -0
  129. package/dist/core/agent-session-runtime.js.map +1 -0
  130. package/dist/core/agent-session-services.d.ts +86 -0
  131. package/dist/core/agent-session-services.d.ts.map +1 -0
  132. package/dist/core/agent-session-services.js +134 -0
  133. package/dist/core/agent-session-services.js.map +1 -0
  134. package/dist/core/agent-session.d.ts +725 -0
  135. package/dist/core/agent-session.d.ts.map +1 -0
  136. package/dist/core/agent-session.js +2968 -0
  137. package/dist/core/agent-session.js.map +1 -0
  138. package/dist/core/auth-guidance.d.ts +5 -0
  139. package/dist/core/auth-guidance.d.ts.map +1 -0
  140. package/dist/core/auth-guidance.js +21 -0
  141. package/dist/core/auth-guidance.js.map +1 -0
  142. package/dist/core/auth-storage.d.ts +72 -0
  143. package/dist/core/auth-storage.d.ts.map +1 -0
  144. package/dist/core/auth-storage.js +426 -0
  145. package/dist/core/auth-storage.js.map +1 -0
  146. package/dist/core/bash-executor.d.ts +32 -0
  147. package/dist/core/bash-executor.d.ts.map +1 -0
  148. package/dist/core/bash-executor.js +111 -0
  149. package/dist/core/bash-executor.js.map +1 -0
  150. package/dist/core/cache-stats.d.ts +49 -0
  151. package/dist/core/cache-stats.d.ts.map +1 -0
  152. package/dist/core/cache-stats.js +101 -0
  153. package/dist/core/cache-stats.js.map +1 -0
  154. package/dist/core/compaction/branch-summarization.d.ts +98 -0
  155. package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  156. package/dist/core/compaction/branch-summarization.js +251 -0
  157. package/dist/core/compaction/branch-summarization.js.map +1 -0
  158. package/dist/core/compaction/compaction.d.ts +145 -0
  159. package/dist/core/compaction/compaction.d.ts.map +1 -0
  160. package/dist/core/compaction/compaction.js +690 -0
  161. package/dist/core/compaction/compaction.js.map +1 -0
  162. package/dist/core/compaction/index.d.ts +7 -0
  163. package/dist/core/compaction/index.d.ts.map +1 -0
  164. package/dist/core/compaction/index.js +7 -0
  165. package/dist/core/compaction/index.js.map +1 -0
  166. package/dist/core/compaction/utils.d.ts +38 -0
  167. package/dist/core/compaction/utils.d.ts.map +1 -0
  168. package/dist/core/compaction/utils.js +142 -0
  169. package/dist/core/compaction/utils.js.map +1 -0
  170. package/dist/core/defaults.d.ts +4 -0
  171. package/dist/core/defaults.d.ts.map +1 -0
  172. package/dist/core/defaults.js +11 -0
  173. package/dist/core/defaults.js.map +1 -0
  174. package/dist/core/diagnostics.d.ts +15 -0
  175. package/dist/core/diagnostics.d.ts.map +1 -0
  176. package/dist/core/diagnostics.js +2 -0
  177. package/dist/core/diagnostics.js.map +1 -0
  178. package/dist/core/event-bus.d.ts +9 -0
  179. package/dist/core/event-bus.d.ts.map +1 -0
  180. package/dist/core/event-bus.js +25 -0
  181. package/dist/core/event-bus.js.map +1 -0
  182. package/dist/core/exec.d.ts +29 -0
  183. package/dist/core/exec.d.ts.map +1 -0
  184. package/dist/core/exec.js +75 -0
  185. package/dist/core/exec.js.map +1 -0
  186. package/dist/core/experimental.d.ts +2 -0
  187. package/dist/core/experimental.d.ts.map +1 -0
  188. package/dist/core/experimental.js +4 -0
  189. package/dist/core/experimental.js.map +1 -0
  190. package/dist/core/export-html/ansi-to-html.d.ts +22 -0
  191. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  192. package/dist/core/export-html/ansi-to-html.js +249 -0
  193. package/dist/core/export-html/ansi-to-html.js.map +1 -0
  194. package/dist/core/export-html/index.d.ts +37 -0
  195. package/dist/core/export-html/index.d.ts.map +1 -0
  196. package/dist/core/export-html/index.js +226 -0
  197. package/dist/core/export-html/index.js.map +1 -0
  198. package/dist/core/export-html/template.css +1066 -0
  199. package/dist/core/export-html/template.html +55 -0
  200. package/dist/core/export-html/template.js +1871 -0
  201. package/dist/core/export-html/tool-renderer.d.ts +34 -0
  202. package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  203. package/dist/core/export-html/tool-renderer.js +108 -0
  204. package/dist/core/export-html/tool-renderer.js.map +1 -0
  205. package/dist/core/export-html/vendor/highlight.min.js +1213 -0
  206. package/dist/core/export-html/vendor/marked.min.js +78 -0
  207. package/dist/core/extensions/index.d.ts +12 -0
  208. package/dist/core/extensions/index.d.ts.map +1 -0
  209. package/dist/core/extensions/index.js +9 -0
  210. package/dist/core/extensions/index.js.map +1 -0
  211. package/dist/core/extensions/loader.d.ts +23 -0
  212. package/dist/core/extensions/loader.d.ts.map +1 -0
  213. package/dist/core/extensions/loader.js +655 -0
  214. package/dist/core/extensions/loader.js.map +1 -0
  215. package/dist/core/extensions/runner.d.ts +178 -0
  216. package/dist/core/extensions/runner.d.ts.map +1 -0
  217. package/dist/core/extensions/runner.js +1011 -0
  218. package/dist/core/extensions/runner.js.map +1 -0
  219. package/dist/core/extensions/types.d.ts +1375 -0
  220. package/dist/core/extensions/types.d.ts.map +1 -0
  221. package/dist/core/extensions/types.js +54 -0
  222. package/dist/core/extensions/types.js.map +1 -0
  223. package/dist/core/extensions/wrapper.d.ts +20 -0
  224. package/dist/core/extensions/wrapper.d.ts.map +1 -0
  225. package/dist/core/extensions/wrapper.js +41 -0
  226. package/dist/core/extensions/wrapper.js.map +1 -0
  227. package/dist/core/footer-data-provider.d.ts +64 -0
  228. package/dist/core/footer-data-provider.d.ts.map +1 -0
  229. package/dist/core/footer-data-provider.js +338 -0
  230. package/dist/core/footer-data-provider.js.map +1 -0
  231. package/dist/core/http-dispatcher.d.ts +22 -0
  232. package/dist/core/http-dispatcher.d.ts.map +1 -0
  233. package/dist/core/http-dispatcher.js +98 -0
  234. package/dist/core/http-dispatcher.js.map +1 -0
  235. package/dist/core/index.d.ts +13 -0
  236. package/dist/core/index.d.ts.map +1 -0
  237. package/dist/core/index.js +13 -0
  238. package/dist/core/index.js.map +1 -0
  239. package/dist/core/ion-manifest.d.ts +8 -0
  240. package/dist/core/ion-manifest.d.ts.map +1 -0
  241. package/dist/core/ion-manifest.js +26 -0
  242. package/dist/core/ion-manifest.js.map +1 -0
  243. package/dist/core/keybindings.d.ts +475 -0
  244. package/dist/core/keybindings.d.ts.map +1 -0
  245. package/dist/core/keybindings.js +321 -0
  246. package/dist/core/keybindings.js.map +1 -0
  247. package/dist/core/messages.d.ts +77 -0
  248. package/dist/core/messages.d.ts.map +1 -0
  249. package/dist/core/messages.js +123 -0
  250. package/dist/core/messages.js.map +1 -0
  251. package/dist/core/model-config.d.ts +591 -0
  252. package/dist/core/model-config.d.ts.map +1 -0
  253. package/dist/core/model-config.js +259 -0
  254. package/dist/core/model-config.js.map +1 -0
  255. package/dist/core/model-registry.d.ts +49 -0
  256. package/dist/core/model-registry.d.ts.map +1 -0
  257. package/dist/core/model-registry.js +115 -0
  258. package/dist/core/model-registry.js.map +1 -0
  259. package/dist/core/model-resolver.d.ts +124 -0
  260. package/dist/core/model-resolver.d.ts.map +1 -0
  261. package/dist/core/model-resolver.js +591 -0
  262. package/dist/core/model-resolver.js.map +1 -0
  263. package/dist/core/model-runtime.d.ts +101 -0
  264. package/dist/core/model-runtime.d.ts.map +1 -0
  265. package/dist/core/model-runtime.js +606 -0
  266. package/dist/core/model-runtime.js.map +1 -0
  267. package/dist/core/models-store.d.ts +22 -0
  268. package/dist/core/models-store.d.ts.map +1 -0
  269. package/dist/core/models-store.js +115 -0
  270. package/dist/core/models-store.js.map +1 -0
  271. package/dist/core/output-guard.d.ts +7 -0
  272. package/dist/core/output-guard.d.ts.map +1 -0
  273. package/dist/core/output-guard.js +89 -0
  274. package/dist/core/output-guard.js.map +1 -0
  275. package/dist/core/package-manager.d.ts +216 -0
  276. package/dist/core/package-manager.d.ts.map +1 -0
  277. package/dist/core/package-manager.js +2207 -0
  278. package/dist/core/package-manager.js.map +1 -0
  279. package/dist/core/project-trust.d.ts +15 -0
  280. package/dist/core/project-trust.d.ts.map +1 -0
  281. package/dist/core/project-trust.js +59 -0
  282. package/dist/core/project-trust.js.map +1 -0
  283. package/dist/core/prompt-templates.d.ts +54 -0
  284. package/dist/core/prompt-templates.d.ts.map +1 -0
  285. package/dist/core/prompt-templates.js +236 -0
  286. package/dist/core/prompt-templates.js.map +1 -0
  287. package/dist/core/provider-attribution.d.ts +4 -0
  288. package/dist/core/provider-attribution.d.ts.map +1 -0
  289. package/dist/core/provider-attribution.js +72 -0
  290. package/dist/core/provider-attribution.js.map +1 -0
  291. package/dist/core/provider-composer.d.ts +58 -0
  292. package/dist/core/provider-composer.d.ts.map +1 -0
  293. package/dist/core/provider-composer.js +402 -0
  294. package/dist/core/provider-composer.js.map +1 -0
  295. package/dist/core/radius.d.ts +2 -0
  296. package/dist/core/radius.d.ts.map +1 -0
  297. package/dist/core/radius.js +2 -0
  298. package/dist/core/radius.js.map +1 -0
  299. package/dist/core/remote-catalog-provider.d.ts +5 -0
  300. package/dist/core/remote-catalog-provider.d.ts.map +1 -0
  301. package/dist/core/remote-catalog-provider.js +137 -0
  302. package/dist/core/remote-catalog-provider.js.map +1 -0
  303. package/dist/core/resolve-config-value.d.ts +30 -0
  304. package/dist/core/resolve-config-value.d.ts.map +1 -0
  305. package/dist/core/resolve-config-value.js +247 -0
  306. package/dist/core/resolve-config-value.js.map +1 -0
  307. package/dist/core/resource-loader.d.ts +221 -0
  308. package/dist/core/resource-loader.d.ts.map +1 -0
  309. package/dist/core/resource-loader.js +875 -0
  310. package/dist/core/resource-loader.js.map +1 -0
  311. package/dist/core/runtime-credentials.d.ts +15 -0
  312. package/dist/core/runtime-credentials.d.ts.map +1 -0
  313. package/dist/core/runtime-credentials.js +39 -0
  314. package/dist/core/runtime-credentials.js.map +1 -0
  315. package/dist/core/sdk.d.ts +108 -0
  316. package/dist/core/sdk.d.ts.map +1 -0
  317. package/dist/core/sdk.js +285 -0
  318. package/dist/core/sdk.js.map +1 -0
  319. package/dist/core/session-cwd.d.ts +19 -0
  320. package/dist/core/session-cwd.d.ts.map +1 -0
  321. package/dist/core/session-cwd.js +38 -0
  322. package/dist/core/session-cwd.js.map +1 -0
  323. package/dist/core/session-export.d.ts +4 -0
  324. package/dist/core/session-export.d.ts.map +1 -0
  325. package/dist/core/session-export.js +32 -0
  326. package/dist/core/session-export.js.map +1 -0
  327. package/dist/core/session-index.d.ts +67 -0
  328. package/dist/core/session-index.d.ts.map +1 -0
  329. package/dist/core/session-index.js +376 -0
  330. package/dist/core/session-index.js.map +1 -0
  331. package/dist/core/session-manager.d.ts +376 -0
  332. package/dist/core/session-manager.d.ts.map +1 -0
  333. package/dist/core/session-manager.js +1587 -0
  334. package/dist/core/session-manager.js.map +1 -0
  335. package/dist/core/session-naming-runtime.d.ts +153 -0
  336. package/dist/core/session-naming-runtime.d.ts.map +1 -0
  337. package/dist/core/session-naming-runtime.js +336 -0
  338. package/dist/core/session-naming-runtime.js.map +1 -0
  339. package/dist/core/settings-diagnostics.d.ts +9 -0
  340. package/dist/core/settings-diagnostics.d.ts.map +1 -0
  341. package/dist/core/settings-diagnostics.js +21 -0
  342. package/dist/core/settings-diagnostics.js.map +1 -0
  343. package/dist/core/settings-manager.d.ts +375 -0
  344. package/dist/core/settings-manager.d.ts.map +1 -0
  345. package/dist/core/settings-manager.js +1110 -0
  346. package/dist/core/settings-manager.js.map +1 -0
  347. package/dist/core/skills.d.ts +60 -0
  348. package/dist/core/skills.d.ts.map +1 -0
  349. package/dist/core/skills.js +412 -0
  350. package/dist/core/skills.js.map +1 -0
  351. package/dist/core/slash-commands.d.ts +17 -0
  352. package/dist/core/slash-commands.d.ts.map +1 -0
  353. package/dist/core/slash-commands.js +33 -0
  354. package/dist/core/slash-commands.js.map +1 -0
  355. package/dist/core/source-info.d.ts +18 -0
  356. package/dist/core/source-info.d.ts.map +1 -0
  357. package/dist/core/source-info.js +19 -0
  358. package/dist/core/source-info.js.map +1 -0
  359. package/dist/core/system-prompt.d.ts +28 -0
  360. package/dist/core/system-prompt.d.ts.map +1 -0
  361. package/dist/core/system-prompt.js +118 -0
  362. package/dist/core/system-prompt.js.map +1 -0
  363. package/dist/core/telemetry.d.ts +3 -0
  364. package/dist/core/telemetry.d.ts.map +1 -0
  365. package/dist/core/telemetry.js +9 -0
  366. package/dist/core/telemetry.js.map +1 -0
  367. package/dist/core/timings.d.ts +10 -0
  368. package/dist/core/timings.d.ts.map +1 -0
  369. package/dist/core/timings.js +41 -0
  370. package/dist/core/timings.js.map +1 -0
  371. package/dist/core/tools/bash.d.ts +87 -0
  372. package/dist/core/tools/bash.d.ts.map +1 -0
  373. package/dist/core/tools/bash.js +295 -0
  374. package/dist/core/tools/bash.js.map +1 -0
  375. package/dist/core/tools/edit-diff.d.ts +101 -0
  376. package/dist/core/tools/edit-diff.d.ts.map +1 -0
  377. package/dist/core/tools/edit-diff.js +421 -0
  378. package/dist/core/tools/edit-diff.js.map +1 -0
  379. package/dist/core/tools/edit.d.ts +44 -0
  380. package/dist/core/tools/edit.d.ts.map +1 -0
  381. package/dist/core/tools/edit.js +147 -0
  382. package/dist/core/tools/edit.js.map +1 -0
  383. package/dist/core/tools/file-mutation-queue.d.ts +6 -0
  384. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  385. package/dist/core/tools/file-mutation-queue.js +52 -0
  386. package/dist/core/tools/file-mutation-queue.js.map +1 -0
  387. package/dist/core/tools/find.d.ts +42 -0
  388. package/dist/core/tools/find.d.ts.map +1 -0
  389. package/dist/core/tools/find.js +251 -0
  390. package/dist/core/tools/find.js.map +1 -0
  391. package/dist/core/tools/grep.d.ts +53 -0
  392. package/dist/core/tools/grep.d.ts.map +1 -0
  393. package/dist/core/tools/grep.js +463 -0
  394. package/dist/core/tools/grep.js.map +1 -0
  395. package/dist/core/tools/index.d.ts +49 -0
  396. package/dist/core/tools/index.d.ts.map +1 -0
  397. package/dist/core/tools/index.js +147 -0
  398. package/dist/core/tools/index.js.map +1 -0
  399. package/dist/core/tools/ls.d.ts +48 -0
  400. package/dist/core/tools/ls.d.ts.map +1 -0
  401. package/dist/core/tools/ls.js +224 -0
  402. package/dist/core/tools/ls.js.map +1 -0
  403. package/dist/core/tools/output-accumulator.d.ts +52 -0
  404. package/dist/core/tools/output-accumulator.d.ts.map +1 -0
  405. package/dist/core/tools/output-accumulator.js +184 -0
  406. package/dist/core/tools/output-accumulator.js.map +1 -0
  407. package/dist/core/tools/path-utils.d.ts +10 -0
  408. package/dist/core/tools/path-utils.d.ts.map +1 -0
  409. package/dist/core/tools/path-utils.js +99 -0
  410. package/dist/core/tools/path-utils.js.map +1 -0
  411. package/dist/core/tools/powershell.d.ts +16 -0
  412. package/dist/core/tools/powershell.d.ts.map +1 -0
  413. package/dist/core/tools/powershell.js +39 -0
  414. package/dist/core/tools/powershell.js.map +1 -0
  415. package/dist/core/tools/read.d.ts +39 -0
  416. package/dist/core/tools/read.d.ts.map +1 -0
  417. package/dist/core/tools/read.js +165 -0
  418. package/dist/core/tools/read.js.map +1 -0
  419. package/dist/core/tools/render-utils.d.ts +24 -0
  420. package/dist/core/tools/render-utils.d.ts.map +1 -0
  421. package/dist/core/tools/render-utils.js +65 -0
  422. package/dist/core/tools/render-utils.js.map +1 -0
  423. package/dist/core/tools/renderers/bash.d.ts +12 -0
  424. package/dist/core/tools/renderers/bash.d.ts.map +1 -0
  425. package/dist/core/tools/renderers/bash.js +130 -0
  426. package/dist/core/tools/renderers/bash.js.map +1 -0
  427. package/dist/core/tools/renderers/edit.d.ts +23 -0
  428. package/dist/core/tools/renderers/edit.d.ts.map +1 -0
  429. package/dist/core/tools/renderers/edit.js +167 -0
  430. package/dist/core/tools/renderers/edit.js.map +1 -0
  431. package/dist/core/tools/renderers/find.d.ts +10 -0
  432. package/dist/core/tools/renderers/find.d.ts.map +1 -0
  433. package/dist/core/tools/renderers/find.js +64 -0
  434. package/dist/core/tools/renderers/find.js.map +1 -0
  435. package/dist/core/tools/renderers/grep.d.ts +10 -0
  436. package/dist/core/tools/renderers/grep.d.ts.map +1 -0
  437. package/dist/core/tools/renderers/grep.js +69 -0
  438. package/dist/core/tools/renderers/grep.js.map +1 -0
  439. package/dist/core/tools/renderers/index.d.ts +29 -0
  440. package/dist/core/tools/renderers/index.d.ts.map +1 -0
  441. package/dist/core/tools/renderers/index.js +50 -0
  442. package/dist/core/tools/renderers/index.js.map +1 -0
  443. package/dist/core/tools/renderers/ls.d.ts +10 -0
  444. package/dist/core/tools/renderers/ls.d.ts.map +1 -0
  445. package/dist/core/tools/renderers/ls.js +66 -0
  446. package/dist/core/tools/renderers/ls.js.map +1 -0
  447. package/dist/core/tools/renderers/read.d.ts +11 -0
  448. package/dist/core/tools/renderers/read.d.ts.map +1 -0
  449. package/dist/core/tools/renderers/read.js +129 -0
  450. package/dist/core/tools/renderers/read.js.map +1 -0
  451. package/dist/core/tools/renderers/webfetch.d.ts +11 -0
  452. package/dist/core/tools/renderers/webfetch.d.ts.map +1 -0
  453. package/dist/core/tools/renderers/webfetch.js +89 -0
  454. package/dist/core/tools/renderers/webfetch.js.map +1 -0
  455. package/dist/core/tools/renderers/write.d.ts +10 -0
  456. package/dist/core/tools/renderers/write.d.ts.map +1 -0
  457. package/dist/core/tools/renderers/write.js +153 -0
  458. package/dist/core/tools/renderers/write.js.map +1 -0
  459. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  460. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  461. package/dist/core/tools/tool-definition-wrapper.js +36 -0
  462. package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
  463. package/dist/core/tools/truncate.d.ts +70 -0
  464. package/dist/core/tools/truncate.d.ts.map +1 -0
  465. package/dist/core/tools/truncate.js +215 -0
  466. package/dist/core/tools/truncate.js.map +1 -0
  467. package/dist/core/tools/webextract.d.ts +36 -0
  468. package/dist/core/tools/webextract.d.ts.map +1 -0
  469. package/dist/core/tools/webextract.js +130 -0
  470. package/dist/core/tools/webextract.js.map +1 -0
  471. package/dist/core/tools/webfetch.d.ts +104 -0
  472. package/dist/core/tools/webfetch.d.ts.map +1 -0
  473. package/dist/core/tools/webfetch.js +231 -0
  474. package/dist/core/tools/webfetch.js.map +1 -0
  475. package/dist/core/tools/write.d.ts +30 -0
  476. package/dist/core/tools/write.d.ts.map +1 -0
  477. package/dist/core/tools/write.js +61 -0
  478. package/dist/core/tools/write.js.map +1 -0
  479. package/dist/core/trust-manager.d.ts +36 -0
  480. package/dist/core/trust-manager.d.ts.map +1 -0
  481. package/dist/core/trust-manager.js +203 -0
  482. package/dist/core/trust-manager.js.map +1 -0
  483. package/dist/core/usage-totals.d.ts +19 -0
  484. package/dist/core/usage-totals.d.ts.map +1 -0
  485. package/dist/core/usage-totals.js +52 -0
  486. package/dist/core/usage-totals.js.map +1 -0
  487. package/dist/core/webfetch/backend-exa.d.ts +65 -0
  488. package/dist/core/webfetch/backend-exa.d.ts.map +1 -0
  489. package/dist/core/webfetch/backend-exa.js +282 -0
  490. package/dist/core/webfetch/backend-exa.js.map +1 -0
  491. package/dist/core/webfetch/backend-firecrawl.d.ts +59 -0
  492. package/dist/core/webfetch/backend-firecrawl.d.ts.map +1 -0
  493. package/dist/core/webfetch/backend-firecrawl.js +339 -0
  494. package/dist/core/webfetch/backend-firecrawl.js.map +1 -0
  495. package/dist/core/webfetch/backend-undici.d.ts +21 -0
  496. package/dist/core/webfetch/backend-undici.d.ts.map +1 -0
  497. package/dist/core/webfetch/backend-undici.js +109 -0
  498. package/dist/core/webfetch/backend-undici.js.map +1 -0
  499. package/dist/core/webfetch/backend.d.ts +45 -0
  500. package/dist/core/webfetch/backend.d.ts.map +1 -0
  501. package/dist/core/webfetch/backend.js +9 -0
  502. package/dist/core/webfetch/backend.js.map +1 -0
  503. package/dist/core/webfetch/doc-store.d.ts +45 -0
  504. package/dist/core/webfetch/doc-store.d.ts.map +1 -0
  505. package/dist/core/webfetch/doc-store.js +57 -0
  506. package/dist/core/webfetch/doc-store.js.map +1 -0
  507. package/dist/core/webfetch/guardrails.d.ts +75 -0
  508. package/dist/core/webfetch/guardrails.d.ts.map +1 -0
  509. package/dist/core/webfetch/guardrails.js +195 -0
  510. package/dist/core/webfetch/guardrails.js.map +1 -0
  511. package/dist/core/webfetch/robots.d.ts +46 -0
  512. package/dist/core/webfetch/robots.d.ts.map +1 -0
  513. package/dist/core/webfetch/robots.js +153 -0
  514. package/dist/core/webfetch/robots.js.map +1 -0
  515. package/dist/core/webfetch/search-intent.d.ts +59 -0
  516. package/dist/core/webfetch/search-intent.d.ts.map +1 -0
  517. package/dist/core/webfetch/search-intent.js +89 -0
  518. package/dist/core/webfetch/search-intent.js.map +1 -0
  519. package/dist/core/webfetch/search-tags.d.ts +23 -0
  520. package/dist/core/webfetch/search-tags.d.ts.map +1 -0
  521. package/dist/core/webfetch/search-tags.js +118 -0
  522. package/dist/core/webfetch/search-tags.js.map +1 -0
  523. package/dist/env-compat.d.ts +2 -0
  524. package/dist/env-compat.d.ts.map +1 -0
  525. package/dist/env-compat.js +17 -0
  526. package/dist/env-compat.js.map +1 -0
  527. package/dist/extensions/cue/autocomplete.d.ts +126 -0
  528. package/dist/extensions/cue/autocomplete.d.ts.map +1 -0
  529. package/dist/extensions/cue/autocomplete.js +744 -0
  530. package/dist/extensions/cue/autocomplete.js.map +1 -0
  531. package/dist/extensions/cue/index.d.ts +3 -0
  532. package/dist/extensions/cue/index.d.ts.map +1 -0
  533. package/dist/extensions/cue/index.js +341 -0
  534. package/dist/extensions/cue/index.js.map +1 -0
  535. package/dist/extensions/index.d.ts +13 -0
  536. package/dist/extensions/index.d.ts.map +1 -0
  537. package/dist/extensions/index.js +18 -0
  538. package/dist/extensions/index.js.map +1 -0
  539. package/dist/extensions/llama/client.d.ts +67 -0
  540. package/dist/extensions/llama/client.d.ts.map +1 -0
  541. package/dist/extensions/llama/client.js +309 -0
  542. package/dist/extensions/llama/client.js.map +1 -0
  543. package/dist/extensions/llama/huggingface.d.ts +23 -0
  544. package/dist/extensions/llama/huggingface.d.ts.map +1 -0
  545. package/dist/extensions/llama/huggingface.js +141 -0
  546. package/dist/extensions/llama/huggingface.js.map +1 -0
  547. package/dist/extensions/llama/index.d.ts +3 -0
  548. package/dist/extensions/llama/index.d.ts.map +1 -0
  549. package/dist/extensions/llama/index.js +219 -0
  550. package/dist/extensions/llama/index.js.map +1 -0
  551. package/dist/extensions/llama/provider.d.ts +12 -0
  552. package/dist/extensions/llama/provider.d.ts.map +1 -0
  553. package/dist/extensions/llama/provider.js +146 -0
  554. package/dist/extensions/llama/provider.js.map +1 -0
  555. package/dist/extensions/llama/ui.d.ts +42 -0
  556. package/dist/extensions/llama/ui.d.ts.map +1 -0
  557. package/dist/extensions/llama/ui.js +416 -0
  558. package/dist/extensions/llama/ui.js.map +1 -0
  559. package/dist/index.d.ts +36 -0
  560. package/dist/index.d.ts.map +1 -0
  561. package/dist/index.js +48 -0
  562. package/dist/index.js.map +1 -0
  563. package/dist/main.d.ts +17 -0
  564. package/dist/main.d.ts.map +1 -0
  565. package/dist/main.js +820 -0
  566. package/dist/main.js.map +1 -0
  567. package/dist/migrations.d.ts +33 -0
  568. package/dist/migrations.d.ts.map +1 -0
  569. package/dist/migrations.js +288 -0
  570. package/dist/migrations.js.map +1 -0
  571. package/dist/modes/index.d.ts +10 -0
  572. package/dist/modes/index.d.ts.map +1 -0
  573. package/dist/modes/index.js +8 -0
  574. package/dist/modes/index.js.map +1 -0
  575. package/dist/modes/interactive/assets/clankolas.png +0 -0
  576. package/dist/modes/interactive/chat-viewport.d.ts +20 -0
  577. package/dist/modes/interactive/chat-viewport.d.ts.map +1 -0
  578. package/dist/modes/interactive/chat-viewport.js +28 -0
  579. package/dist/modes/interactive/chat-viewport.js.map +1 -0
  580. package/dist/modes/interactive/components/armin.d.ts +34 -0
  581. package/dist/modes/interactive/components/armin.d.ts.map +1 -0
  582. package/dist/modes/interactive/components/armin.js +333 -0
  583. package/dist/modes/interactive/components/armin.js.map +1 -0
  584. package/dist/modes/interactive/components/assistant-message.d.ts +26 -0
  585. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  586. package/dist/modes/interactive/components/assistant-message.js +171 -0
  587. package/dist/modes/interactive/components/assistant-message.js.map +1 -0
  588. package/dist/modes/interactive/components/bash-execution.d.ts +34 -0
  589. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  590. package/dist/modes/interactive/components/bash-execution.js +175 -0
  591. package/dist/modes/interactive/components/bash-execution.js.map +1 -0
  592. package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  593. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  594. package/dist/modes/interactive/components/bordered-loader.js +54 -0
  595. package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  596. package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  597. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  598. package/dist/modes/interactive/components/branch-summary-message.js +44 -0
  599. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  600. package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  601. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  602. package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
  603. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  604. package/dist/modes/interactive/components/config-selector.d.ts +102 -0
  605. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  606. package/dist/modes/interactive/components/config-selector.js +770 -0
  607. package/dist/modes/interactive/components/config-selector.js.map +1 -0
  608. package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  609. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  610. package/dist/modes/interactive/components/countdown-timer.js +33 -0
  611. package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  612. package/dist/modes/interactive/components/custom-editor.d.ts +30 -0
  613. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  614. package/dist/modes/interactive/components/custom-editor.js +115 -0
  615. package/dist/modes/interactive/components/custom-editor.js.map +1 -0
  616. package/dist/modes/interactive/components/custom-entry.d.ts +19 -0
  617. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -0
  618. package/dist/modes/interactive/components/custom-entry.js +52 -0
  619. package/dist/modes/interactive/components/custom-entry.js.map +1 -0
  620. package/dist/modes/interactive/components/custom-message.d.ts +22 -0
  621. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  622. package/dist/modes/interactive/components/custom-message.js +87 -0
  623. package/dist/modes/interactive/components/custom-message.js.map +1 -0
  624. package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  625. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
  626. package/dist/modes/interactive/components/daxnuts.js +140 -0
  627. package/dist/modes/interactive/components/daxnuts.js.map +1 -0
  628. package/dist/modes/interactive/components/diff.d.ts +12 -0
  629. package/dist/modes/interactive/components/diff.d.ts.map +1 -0
  630. package/dist/modes/interactive/components/diff.js +133 -0
  631. package/dist/modes/interactive/components/diff.js.map +1 -0
  632. package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  633. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  634. package/dist/modes/interactive/components/dynamic-border.js +21 -0
  635. package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  636. package/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
  637. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -0
  638. package/dist/modes/interactive/components/earendil-announcement.js +40 -0
  639. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -0
  640. package/dist/modes/interactive/components/extension-editor.d.ts +21 -0
  641. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  642. package/dist/modes/interactive/components/extension-editor.js +98 -0
  643. package/dist/modes/interactive/components/extension-editor.js.map +1 -0
  644. package/dist/modes/interactive/components/extension-input.d.ts +23 -0
  645. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  646. package/dist/modes/interactive/components/extension-input.js +61 -0
  647. package/dist/modes/interactive/components/extension-input.js.map +1 -0
  648. package/dist/modes/interactive/components/extension-selector.d.ts +26 -0
  649. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  650. package/dist/modes/interactive/components/extension-selector.js +83 -0
  651. package/dist/modes/interactive/components/extension-selector.js.map +1 -0
  652. package/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
  653. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -0
  654. package/dist/modes/interactive/components/first-time-setup.js +103 -0
  655. package/dist/modes/interactive/components/first-time-setup.js.map +1 -0
  656. package/dist/modes/interactive/components/footer.d.ts +32 -0
  657. package/dist/modes/interactive/components/footer.d.ts.map +1 -0
  658. package/dist/modes/interactive/components/footer.js +230 -0
  659. package/dist/modes/interactive/components/footer.js.map +1 -0
  660. package/dist/modes/interactive/components/index.d.ts +34 -0
  661. package/dist/modes/interactive/components/index.d.ts.map +1 -0
  662. package/dist/modes/interactive/components/index.js +35 -0
  663. package/dist/modes/interactive/components/index.js.map +1 -0
  664. package/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
  665. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  666. package/dist/modes/interactive/components/keybinding-hints.js +36 -0
  667. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  668. package/dist/modes/interactive/components/login-dialog.d.ts +52 -0
  669. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  670. package/dist/modes/interactive/components/login-dialog.js +188 -0
  671. package/dist/modes/interactive/components/login-dialog.js.map +1 -0
  672. package/dist/modes/interactive/components/markdown-transform.d.ts +3 -0
  673. package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -0
  674. package/dist/modes/interactive/components/markdown-transform.js +19 -0
  675. package/dist/modes/interactive/components/markdown-transform.js.map +1 -0
  676. package/dist/modes/interactive/components/mermaid.d.ts +11 -0
  677. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
  678. package/dist/modes/interactive/components/mermaid.js +75 -0
  679. package/dist/modes/interactive/components/mermaid.js.map +1 -0
  680. package/dist/modes/interactive/components/model-selector.d.ts +60 -0
  681. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  682. package/dist/modes/interactive/components/model-selector.js +361 -0
  683. package/dist/modes/interactive/components/model-selector.js.map +1 -0
  684. package/dist/modes/interactive/components/oauth-selector.d.ts +33 -0
  685. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  686. package/dist/modes/interactive/components/oauth-selector.js +163 -0
  687. package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  688. package/dist/modes/interactive/components/scoped-models-selector.d.ts +46 -0
  689. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  690. package/dist/modes/interactive/components/scoped-models-selector.js +326 -0
  691. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  692. package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  693. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  694. package/dist/modes/interactive/components/session-selector-search.js +155 -0
  695. package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  696. package/dist/modes/interactive/components/session-selector.d.ts +98 -0
  697. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  698. package/dist/modes/interactive/components/session-selector.js +891 -0
  699. package/dist/modes/interactive/components/session-selector.js.map +1 -0
  700. package/dist/modes/interactive/components/settings-selector.d.ts +98 -0
  701. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  702. package/dist/modes/interactive/components/settings-selector.js +745 -0
  703. package/dist/modes/interactive/components/settings-selector.js.map +1 -0
  704. package/dist/modes/interactive/components/settings-submenu.d.ts +72 -0
  705. package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -0
  706. package/dist/modes/interactive/components/settings-submenu.js +165 -0
  707. package/dist/modes/interactive/components/settings-submenu.js.map +1 -0
  708. package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  709. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  710. package/dist/modes/interactive/components/show-images-selector.js +39 -0
  711. package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  712. package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  713. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  714. package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
  715. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  716. package/dist/modes/interactive/components/status-indicator.d.ts +30 -0
  717. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -0
  718. package/dist/modes/interactive/components/status-indicator.js +67 -0
  719. package/dist/modes/interactive/components/status-indicator.js.map +1 -0
  720. package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  721. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  722. package/dist/modes/interactive/components/theme-selector.js +50 -0
  723. package/dist/modes/interactive/components/theme-selector.js.map +1 -0
  724. package/dist/modes/interactive/components/thinking-selector.d.ts +23 -0
  725. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  726. package/dist/modes/interactive/components/thinking-selector.js +109 -0
  727. package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  728. package/dist/modes/interactive/components/tool-execution.d.ts +80 -0
  729. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  730. package/dist/modes/interactive/components/tool-execution.js +328 -0
  731. package/dist/modes/interactive/components/tool-execution.js.map +1 -0
  732. package/dist/modes/interactive/components/tree-selector.d.ts +94 -0
  733. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  734. package/dist/modes/interactive/components/tree-selector.js +1245 -0
  735. package/dist/modes/interactive/components/tree-selector.js.map +1 -0
  736. package/dist/modes/interactive/components/trust-selector.d.ts +23 -0
  737. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -0
  738. package/dist/modes/interactive/components/trust-selector.js +91 -0
  739. package/dist/modes/interactive/components/trust-selector.js.map +1 -0
  740. package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  741. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  742. package/dist/modes/interactive/components/user-message-selector.js +114 -0
  743. package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  744. package/dist/modes/interactive/components/user-message.d.ts +16 -0
  745. package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  746. package/dist/modes/interactive/components/user-message.js +49 -0
  747. package/dist/modes/interactive/components/user-message.js.map +1 -0
  748. package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  749. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  750. package/dist/modes/interactive/components/visual-truncate.js +33 -0
  751. package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  752. package/dist/modes/interactive/external-editor.d.ts +12 -0
  753. package/dist/modes/interactive/external-editor.d.ts.map +1 -0
  754. package/dist/modes/interactive/external-editor.js +38 -0
  755. package/dist/modes/interactive/external-editor.js.map +1 -0
  756. package/dist/modes/interactive/interactive-mode.d.ts +471 -0
  757. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  758. package/dist/modes/interactive/interactive-mode.js +5735 -0
  759. package/dist/modes/interactive/interactive-mode.js.map +1 -0
  760. package/dist/modes/interactive/model-catalog-refresh.d.ts +7 -0
  761. package/dist/modes/interactive/model-catalog-refresh.d.ts.map +1 -0
  762. package/dist/modes/interactive/model-catalog-refresh.js +34 -0
  763. package/dist/modes/interactive/model-catalog-refresh.js.map +1 -0
  764. package/dist/modes/interactive/model-search.d.ts +12 -0
  765. package/dist/modes/interactive/model-search.d.ts.map +1 -0
  766. package/dist/modes/interactive/model-search.js +15 -0
  767. package/dist/modes/interactive/model-search.js.map +1 -0
  768. package/dist/modes/interactive/session-share.d.ts +16 -0
  769. package/dist/modes/interactive/session-share.d.ts.map +1 -0
  770. package/dist/modes/interactive/session-share.js +184 -0
  771. package/dist/modes/interactive/session-share.js.map +1 -0
  772. package/dist/modes/interactive/theme/dark.json +91 -0
  773. package/dist/modes/interactive/theme/light.json +90 -0
  774. package/dist/modes/interactive/theme/theme-controller.d.ts +41 -0
  775. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -0
  776. package/dist/modes/interactive/theme/theme-controller.js +130 -0
  777. package/dist/modes/interactive/theme/theme-controller.js.map +1 -0
  778. package/dist/modes/interactive/theme/theme-json.d.ts +84 -0
  779. package/dist/modes/interactive/theme/theme-json.d.ts.map +1 -0
  780. package/dist/modes/interactive/theme/theme-json.js +130 -0
  781. package/dist/modes/interactive/theme/theme-json.js.map +1 -0
  782. package/dist/modes/interactive/theme/theme-schema.json +356 -0
  783. package/dist/modes/interactive/theme/theme.d.ts +131 -0
  784. package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  785. package/dist/modes/interactive/theme/theme.js +991 -0
  786. package/dist/modes/interactive/theme/theme.js.map +1 -0
  787. package/dist/modes/interactive/tui-renderer.d.ts +21 -0
  788. package/dist/modes/interactive/tui-renderer.d.ts.map +1 -0
  789. package/dist/modes/interactive/tui-renderer.js +66 -0
  790. package/dist/modes/interactive/tui-renderer.js.map +1 -0
  791. package/dist/modes/json-event.d.ts +34 -0
  792. package/dist/modes/json-event.d.ts.map +1 -0
  793. package/dist/modes/json-event.js +29 -0
  794. package/dist/modes/json-event.js.map +1 -0
  795. package/dist/modes/print-mode.d.ts +28 -0
  796. package/dist/modes/print-mode.d.ts.map +1 -0
  797. package/dist/modes/print-mode.js +142 -0
  798. package/dist/modes/print-mode.js.map +1 -0
  799. package/dist/modes/rpc/jsonl.d.ts +17 -0
  800. package/dist/modes/rpc/jsonl.d.ts.map +1 -0
  801. package/dist/modes/rpc/jsonl.js +49 -0
  802. package/dist/modes/rpc/jsonl.js.map +1 -0
  803. package/dist/modes/rpc/rpc-client.d.ts +254 -0
  804. package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  805. package/dist/modes/rpc/rpc-client.js +495 -0
  806. package/dist/modes/rpc/rpc-client.js.map +1 -0
  807. package/dist/modes/rpc/rpc-mode.d.ts +20 -0
  808. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  809. package/dist/modes/rpc/rpc-mode.js +657 -0
  810. package/dist/modes/rpc/rpc-mode.js.map +1 -0
  811. package/dist/modes/rpc/rpc-types.d.ts +469 -0
  812. package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  813. package/dist/modes/rpc/rpc-types.js +8 -0
  814. package/dist/modes/rpc/rpc-types.js.map +1 -0
  815. package/dist/package-manager-cli.d.ts +9 -0
  816. package/dist/package-manager-cli.d.ts.map +1 -0
  817. package/dist/package-manager-cli.js +961 -0
  818. package/dist/package-manager-cli.js.map +1 -0
  819. package/dist/rpc-entry.d.ts +3 -0
  820. package/dist/rpc-entry.d.ts.map +1 -0
  821. package/dist/rpc-entry.js +12 -0
  822. package/dist/rpc-entry.js.map +1 -0
  823. package/dist/utils/abort.d.ts +5 -0
  824. package/dist/utils/abort.d.ts.map +1 -0
  825. package/dist/utils/abort.js +48 -0
  826. package/dist/utils/abort.js.map +1 -0
  827. package/dist/utils/ansi.d.ts +2 -0
  828. package/dist/utils/ansi.d.ts.map +1 -0
  829. package/dist/utils/ansi.js +52 -0
  830. package/dist/utils/ansi.js.map +1 -0
  831. package/dist/utils/changelog.d.ts +22 -0
  832. package/dist/utils/changelog.d.ts.map +1 -0
  833. package/dist/utils/changelog.js +165 -0
  834. package/dist/utils/changelog.js.map +1 -0
  835. package/dist/utils/child-process.d.ts +18 -0
  836. package/dist/utils/child-process.d.ts.map +1 -0
  837. package/dist/utils/child-process.js +106 -0
  838. package/dist/utils/child-process.js.map +1 -0
  839. package/dist/utils/clipboard-command.d.ts +7 -0
  840. package/dist/utils/clipboard-command.d.ts.map +1 -0
  841. package/dist/utils/clipboard-command.js +45 -0
  842. package/dist/utils/clipboard-command.js.map +1 -0
  843. package/dist/utils/clipboard-image.d.ts +11 -0
  844. package/dist/utils/clipboard-image.d.ts.map +1 -0
  845. package/dist/utils/clipboard-image.js +228 -0
  846. package/dist/utils/clipboard-image.js.map +1 -0
  847. package/dist/utils/clipboard.d.ts +4 -0
  848. package/dist/utils/clipboard.d.ts.map +1 -0
  849. package/dist/utils/clipboard.js +84 -0
  850. package/dist/utils/clipboard.js.map +1 -0
  851. package/dist/utils/deprecation.d.ts +4 -0
  852. package/dist/utils/deprecation.d.ts.map +1 -0
  853. package/dist/utils/deprecation.js +13 -0
  854. package/dist/utils/deprecation.js.map +1 -0
  855. package/dist/utils/exif-orientation.d.ts +5 -0
  856. package/dist/utils/exif-orientation.d.ts.map +1 -0
  857. package/dist/utils/exif-orientation.js +157 -0
  858. package/dist/utils/exif-orientation.js.map +1 -0
  859. package/dist/utils/frontmatter.d.ts +8 -0
  860. package/dist/utils/frontmatter.d.ts.map +1 -0
  861. package/dist/utils/frontmatter.js +27 -0
  862. package/dist/utils/frontmatter.js.map +1 -0
  863. package/dist/utils/fs-watch.d.ts +5 -0
  864. package/dist/utils/fs-watch.d.ts.map +1 -0
  865. package/dist/utils/fs-watch.js +25 -0
  866. package/dist/utils/fs-watch.js.map +1 -0
  867. package/dist/utils/git.d.ts +26 -0
  868. package/dist/utils/git.d.ts.map +1 -0
  869. package/dist/utils/git.js +195 -0
  870. package/dist/utils/git.js.map +1 -0
  871. package/dist/utils/html.d.ts +7 -0
  872. package/dist/utils/html.d.ts.map +1 -0
  873. package/dist/utils/html.js +40 -0
  874. package/dist/utils/html.js.map +1 -0
  875. package/dist/utils/image-convert.d.ts +10 -0
  876. package/dist/utils/image-convert.d.ts.map +1 -0
  877. package/dist/utils/image-convert.js +45 -0
  878. package/dist/utils/image-convert.js.map +1 -0
  879. package/dist/utils/image-process.d.ts +18 -0
  880. package/dist/utils/image-process.d.ts.map +1 -0
  881. package/dist/utils/image-process.js +83 -0
  882. package/dist/utils/image-process.js.map +1 -0
  883. package/dist/utils/image-resize-core.d.ts +30 -0
  884. package/dist/utils/image-resize-core.d.ts.map +1 -0
  885. package/dist/utils/image-resize-core.js +124 -0
  886. package/dist/utils/image-resize-core.js.map +1 -0
  887. package/dist/utils/image-resize-worker.d.ts +2 -0
  888. package/dist/utils/image-resize-worker.d.ts.map +1 -0
  889. package/dist/utils/image-resize-worker.js +31 -0
  890. package/dist/utils/image-resize-worker.js.map +1 -0
  891. package/dist/utils/image-resize.d.ts +16 -0
  892. package/dist/utils/image-resize.d.ts.map +1 -0
  893. package/dist/utils/image-resize.js +97 -0
  894. package/dist/utils/image-resize.js.map +1 -0
  895. package/dist/utils/ion-user-agent.d.ts +2 -0
  896. package/dist/utils/ion-user-agent.d.ts.map +1 -0
  897. package/dist/utils/ion-user-agent.js +5 -0
  898. package/dist/utils/ion-user-agent.js.map +1 -0
  899. package/dist/utils/json.d.ts +3 -0
  900. package/dist/utils/json.d.ts.map +1 -0
  901. package/dist/utils/json.js +7 -0
  902. package/dist/utils/json.js.map +1 -0
  903. package/dist/utils/management-http.d.ts +25 -0
  904. package/dist/utils/management-http.d.ts.map +1 -0
  905. package/dist/utils/management-http.js +54 -0
  906. package/dist/utils/management-http.js.map +1 -0
  907. package/dist/utils/mime.d.ts +3 -0
  908. package/dist/utils/mime.d.ts.map +1 -0
  909. package/dist/utils/mime.js +110 -0
  910. package/dist/utils/mime.js.map +1 -0
  911. package/dist/utils/open-browser.d.ts +9 -0
  912. package/dist/utils/open-browser.d.ts.map +1 -0
  913. package/dist/utils/open-browser.js +22 -0
  914. package/dist/utils/open-browser.js.map +1 -0
  915. package/dist/utils/paths.d.ts +34 -0
  916. package/dist/utils/paths.d.ts.map +1 -0
  917. package/dist/utils/paths.js +114 -0
  918. package/dist/utils/paths.js.map +1 -0
  919. package/dist/utils/photon.d.ts +21 -0
  920. package/dist/utils/photon.d.ts.map +1 -0
  921. package/dist/utils/photon.js +121 -0
  922. package/dist/utils/photon.js.map +1 -0
  923. package/dist/utils/shell.d.ts +34 -0
  924. package/dist/utils/shell.d.ts.map +1 -0
  925. package/dist/utils/shell.js +216 -0
  926. package/dist/utils/shell.js.map +1 -0
  927. package/dist/utils/sleep.d.ts +5 -0
  928. package/dist/utils/sleep.d.ts.map +1 -0
  929. package/dist/utils/sleep.js +17 -0
  930. package/dist/utils/sleep.js.map +1 -0
  931. package/dist/utils/syntax-highlight.d.ts +13 -0
  932. package/dist/utils/syntax-highlight.d.ts.map +1 -0
  933. package/dist/utils/syntax-highlight.js +177 -0
  934. package/dist/utils/syntax-highlight.js.map +1 -0
  935. package/dist/utils/text.d.ts +8 -0
  936. package/dist/utils/text.d.ts.map +1 -0
  937. package/dist/utils/text.js +9 -0
  938. package/dist/utils/text.js.map +1 -0
  939. package/dist/utils/tool-result-images.d.ts +19 -0
  940. package/dist/utils/tool-result-images.d.ts.map +1 -0
  941. package/dist/utils/tool-result-images.js +45 -0
  942. package/dist/utils/tool-result-images.js.map +1 -0
  943. package/dist/utils/tools-manager.d.ts +19 -0
  944. package/dist/utils/tools-manager.d.ts.map +1 -0
  945. package/dist/utils/tools-manager.js +382 -0
  946. package/dist/utils/tools-manager.js.map +1 -0
  947. package/dist/utils/version-check.d.ts +19 -0
  948. package/dist/utils/version-check.d.ts.map +1 -0
  949. package/dist/utils/version-check.js +79 -0
  950. package/dist/utils/version-check.js.map +1 -0
  951. package/dist/utils/windows-self-update.d.ts +3 -0
  952. package/dist/utils/windows-self-update.d.ts.map +1 -0
  953. package/dist/utils/windows-self-update.js +77 -0
  954. package/dist/utils/windows-self-update.js.map +1 -0
  955. package/docs/browser-extension.md +108 -0
  956. package/docs/compaction.md +444 -0
  957. package/docs/containerization.md +156 -0
  958. package/docs/custom-provider.md +777 -0
  959. package/docs/development.md +90 -0
  960. package/docs/docs.json +164 -0
  961. package/docs/environment-variables.md +101 -0
  962. package/docs/extensions.md +3033 -0
  963. package/docs/images/doom-extension.png +0 -0
  964. package/docs/images/exy.png +0 -0
  965. package/docs/images/interactive-mode.png +0 -0
  966. package/docs/images/tree-view.png +0 -0
  967. package/docs/index.md +85 -0
  968. package/docs/json.md +98 -0
  969. package/docs/keybindings.md +239 -0
  970. package/docs/llama-cpp.md +101 -0
  971. package/docs/models.md +574 -0
  972. package/docs/packages.md +228 -0
  973. package/docs/prompt-templates.md +96 -0
  974. package/docs/providers.md +321 -0
  975. package/docs/quickstart.md +168 -0
  976. package/docs/rpc.md +1618 -0
  977. package/docs/sdk.md +1226 -0
  978. package/docs/security.md +59 -0
  979. package/docs/session-format.md +450 -0
  980. package/docs/sessions.md +145 -0
  981. package/docs/settings.md +408 -0
  982. package/docs/shell-aliases.md +13 -0
  983. package/docs/skills.md +241 -0
  984. package/docs/terminal-setup.md +192 -0
  985. package/docs/termux.md +126 -0
  986. package/docs/themes.md +322 -0
  987. package/docs/tmux.md +63 -0
  988. package/docs/tui.md +961 -0
  989. package/docs/usage.md +327 -0
  990. package/docs/webfetch.md +119 -0
  991. package/docs/windows.md +39 -0
  992. package/examples/README.md +28 -0
  993. package/examples/extensions/README.md +213 -0
  994. package/examples/extensions/auto-commit-on-exit.ts +49 -0
  995. package/examples/extensions/bash-spawn-hook.ts +30 -0
  996. package/examples/extensions/bookmark.ts +50 -0
  997. package/examples/extensions/border-status-editor.ts +150 -0
  998. package/examples/extensions/built-in-tool-renderer.ts +249 -0
  999. package/examples/extensions/claude-rules.ts +86 -0
  1000. package/examples/extensions/commands.ts +72 -0
  1001. package/examples/extensions/confirm-destructive.ts +59 -0
  1002. package/examples/extensions/custom-compaction.ts +117 -0
  1003. package/examples/extensions/custom-footer.ts +64 -0
  1004. package/examples/extensions/custom-header.ts +73 -0
  1005. package/examples/extensions/custom-provider-anthropic/index.ts +611 -0
  1006. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
  1007. package/examples/extensions/custom-provider-anthropic/package.json +19 -0
  1008. package/examples/extensions/custom-provider-gitlab-duo/index.ts +405 -0
  1009. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
  1010. package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
  1011. package/examples/extensions/dirty-repo-guard.ts +56 -0
  1012. package/examples/extensions/doom-overlay/README.md +46 -0
  1013. package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
  1014. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  1015. package/examples/extensions/doom-overlay/doom/build.sh +152 -0
  1016. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
  1017. package/examples/extensions/doom-overlay/doom-component.ts +132 -0
  1018. package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
  1019. package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
  1020. package/examples/extensions/doom-overlay/index.ts +74 -0
  1021. package/examples/extensions/doom-overlay/wad-finder.ts +55 -0
  1022. package/examples/extensions/dynamic-resources/SKILL.md +8 -0
  1023. package/examples/extensions/dynamic-resources/dynamic.json +81 -0
  1024. package/examples/extensions/dynamic-resources/dynamic.md +5 -0
  1025. package/examples/extensions/dynamic-resources/index.ts +15 -0
  1026. package/examples/extensions/dynamic-tools.ts +74 -0
  1027. package/examples/extensions/entry-renderer.ts +41 -0
  1028. package/examples/extensions/event-bus.ts +43 -0
  1029. package/examples/extensions/file-trigger.ts +41 -0
  1030. package/examples/extensions/git-checkpoint.ts +53 -0
  1031. package/examples/extensions/git-merge-and-resolve.ts +115 -0
  1032. package/examples/extensions/github-issue-autocomplete.ts +185 -0
  1033. package/examples/extensions/gondolin/index.ts +531 -0
  1034. package/examples/extensions/gondolin/package-lock.json +185 -0
  1035. package/examples/extensions/gondolin/package.json +19 -0
  1036. package/examples/extensions/handoff.ts +190 -0
  1037. package/examples/extensions/hello.ts +26 -0
  1038. package/examples/extensions/hidden-thinking-label.ts +53 -0
  1039. package/examples/extensions/inline-bash.ts +94 -0
  1040. package/examples/extensions/input-transform-streaming.ts +39 -0
  1041. package/examples/extensions/input-transform.ts +43 -0
  1042. package/examples/extensions/interactive-shell.ts +196 -0
  1043. package/examples/extensions/kimi-deferred-tools.ts +61 -0
  1044. package/examples/extensions/mac-system-theme.ts +47 -0
  1045. package/examples/extensions/message-renderer.ts +59 -0
  1046. package/examples/extensions/minimal-mode.ts +426 -0
  1047. package/examples/extensions/modal-editor.ts +85 -0
  1048. package/examples/extensions/model-status.ts +31 -0
  1049. package/examples/extensions/notify.ts +57 -0
  1050. package/examples/extensions/overlay-qa-tests.ts +1450 -0
  1051. package/examples/extensions/overlay-test.ts +153 -0
  1052. package/examples/extensions/permission-gate.ts +34 -0
  1053. package/examples/extensions/pirate.ts +47 -0
  1054. package/examples/extensions/plan-mode/README.md +66 -0
  1055. package/examples/extensions/plan-mode/index.ts +390 -0
  1056. package/examples/extensions/plan-mode/utils.ts +168 -0
  1057. package/examples/extensions/preset.ts +436 -0
  1058. package/examples/extensions/project-trust.ts +64 -0
  1059. package/examples/extensions/prompt-customizer.ts +97 -0
  1060. package/examples/extensions/protected-paths.ts +30 -0
  1061. package/examples/extensions/provider-payload.ts +18 -0
  1062. package/examples/extensions/qna.ts +118 -0
  1063. package/examples/extensions/question.ts +278 -0
  1064. package/examples/extensions/questionnaire.ts +440 -0
  1065. package/examples/extensions/rainbow-editor.ts +88 -0
  1066. package/examples/extensions/reload-runtime.ts +37 -0
  1067. package/examples/extensions/rpc-demo.ts +118 -0
  1068. package/examples/extensions/sandbox/index.ts +321 -0
  1069. package/examples/extensions/sandbox/package-lock.json +92 -0
  1070. package/examples/extensions/sandbox/package.json +19 -0
  1071. package/examples/extensions/send-user-message.ts +97 -0
  1072. package/examples/extensions/session-name.ts +27 -0
  1073. package/examples/extensions/shutdown-command.ts +63 -0
  1074. package/examples/extensions/snake.ts +343 -0
  1075. package/examples/extensions/space-invaders.ts +560 -0
  1076. package/examples/extensions/ssh.ts +220 -0
  1077. package/examples/extensions/status-line.ts +32 -0
  1078. package/examples/extensions/structured-output.ts +65 -0
  1079. package/examples/extensions/subagent/README.md +177 -0
  1080. package/examples/extensions/subagent/agents/planner.md +37 -0
  1081. package/examples/extensions/subagent/agents/reviewer.md +35 -0
  1082. package/examples/extensions/subagent/agents/scout.md +50 -0
  1083. package/examples/extensions/subagent/agents/worker.md +24 -0
  1084. package/examples/extensions/subagent/agents.ts +157 -0
  1085. package/examples/extensions/subagent/index.ts +1038 -0
  1086. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
  1087. package/examples/extensions/subagent/prompts/implement.md +10 -0
  1088. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
  1089. package/examples/extensions/summarize.ts +199 -0
  1090. package/examples/extensions/system-prompt-header.ts +17 -0
  1091. package/examples/extensions/tic-tac-toe.ts +1008 -0
  1092. package/examples/extensions/timed-confirm.ts +70 -0
  1093. package/examples/extensions/titlebar-spinner.ts +58 -0
  1094. package/examples/extensions/todo.ts +297 -0
  1095. package/examples/extensions/tool-override.ts +144 -0
  1096. package/examples/extensions/tools.ts +146 -0
  1097. package/examples/extensions/trigger-compact.ts +50 -0
  1098. package/examples/extensions/truncated-tool.ts +195 -0
  1099. package/examples/extensions/widget-placement.ts +9 -0
  1100. package/examples/extensions/with-deps/index.ts +32 -0
  1101. package/examples/extensions/with-deps/package-lock.json +31 -0
  1102. package/examples/extensions/with-deps/package.json +22 -0
  1103. package/examples/extensions/working-indicator.ts +123 -0
  1104. package/examples/extensions/working-message-test.ts +25 -0
  1105. package/examples/plugins/ion-example-plugin/README.md +38 -0
  1106. package/examples/plugins/ion-example-plugin/package.json +10 -0
  1107. package/examples/plugins/ion-example-plugin/src/contract.ts +13 -0
  1108. package/examples/plugins/ion-example-plugin/src/session.ts +23 -0
  1109. package/examples/plugins/ion-example-plugin/src/tui.ts +31 -0
  1110. package/examples/rpc-extension-ui.ts +641 -0
  1111. package/examples/sdk/01-minimal.ts +26 -0
  1112. package/examples/sdk/02-custom-model.ts +49 -0
  1113. package/examples/sdk/03-custom-prompt.ts +70 -0
  1114. package/examples/sdk/04-skills.ts +55 -0
  1115. package/examples/sdk/05-tools.ts +48 -0
  1116. package/examples/sdk/06-extensions.ts +94 -0
  1117. package/examples/sdk/07-context-files.ts +42 -0
  1118. package/examples/sdk/08-prompt-templates.ts +51 -0
  1119. package/examples/sdk/09-api-keys-and-oauth.ts +34 -0
  1120. package/examples/sdk/10-settings.ts +53 -0
  1121. package/examples/sdk/11-sessions.ts +52 -0
  1122. package/examples/sdk/12-full-control.ts +74 -0
  1123. package/examples/sdk/13-session-runtime.ts +67 -0
  1124. package/examples/sdk/README.md +140 -0
  1125. package/npm-shrinkwrap.json +1912 -0
  1126. package/package.json +108 -0
@@ -0,0 +1,126 @@
1
+ import type { CueRegistry } from "@m4ike1/ion-cue";
2
+ import type { AutocompleteItem, AutocompleteProvider, AutocompleteSuggestions } from "@m4ike1/ion-tui";
3
+ /** Extended autocomplete item with Cue-specific metadata */
4
+ export interface CueAutocompleteItem extends AutocompleteItem {
5
+ _cueType: "element" | "tag" | "flow" | "scope" | "scopePrefix" | "scopeFlow" | "alias";
6
+ _scopeType?: "file" | "dir" | "glob";
7
+ }
8
+ /**
9
+ * Autocomplete provider for Cue directives.
10
+ *
11
+ * Triggers:
12
+ * - `[` at line start or after whitespace -> element name suggestions
13
+ * - `[Element: ` -> tag suggestions for that element
14
+ * - `[Element: tag` (complete tag) -> `>` or `]` flow suggestions
15
+ * - `[Element: tag1>tag2>` -> smart tag suggestions (no override conflicts)
16
+ * - `{@` -> file/dir path suggestions from disk
17
+ * - `{@path:` -> line range suggestions
18
+ *
19
+ * Bare `@path` outside braces is handled by the base provider, which inserts
20
+ * a standalone `{@path}` scope statement.
21
+ */
22
+ export declare class CueAutocompleteProvider implements AutocompleteProvider {
23
+ triggerCharacters: string[];
24
+ private registry;
25
+ private projectRoot;
26
+ constructor(registry: CueRegistry, projectRoot?: string);
27
+ /** Get override dimensions for a tag, checking element-local then shared tags. */
28
+ private getTagOverrides;
29
+ getSuggestions(lines: string[], cursorLine: number, cursorCol: number, _options: {
30
+ signal: AbortSignal;
31
+ force?: boolean;
32
+ }): Promise<AutocompleteSuggestions | null>;
33
+ applyCompletion(lines: string[], cursorLine: number, cursorCol: number, item: AutocompleteItem, prefix: string): {
34
+ lines: string[];
35
+ cursorLine: number;
36
+ cursorCol: number;
37
+ };
38
+ /** Extract `[` prefix for element completion */
39
+ private extractBracketPrefix;
40
+ /** Extract element name when we have `[Element` but no colon yet */
41
+ private extractElementNoColon;
42
+ /**
43
+ * Extract tag context from the text before cursor.
44
+ * Returns null if not in a tag context.
45
+ */
46
+ private extractTagContext;
47
+ /**
48
+ * Extract scope prefix from text before cursor.
49
+ * Matches `{` anywhere (standalone scope statement).
50
+ * Returns null if not in scope context.
51
+ * Returns { type: null, partial } for just `{`
52
+ * Returns { type: "file", partial } for `{@`
53
+ * Returns { type: "skill", partial } for `{$`
54
+ */
55
+ private extractScopePrefix;
56
+ /**
57
+ * Extract an alias partial: `/name` alone on its line (mirrors the
58
+ * dispatcher's first-line alias form). Returns null for bare `/` so
59
+ * the slash-command menu keeps working, and for non-first-line `/`
60
+ * uses like `/skill:name`.
61
+ */
62
+ private extractAliasPrefix;
63
+ /** Get element name suggestions */
64
+ private getElementSuggestions;
65
+ /** Get flow suggestions after element selected: `:` (add tags) or `]` (close) */
66
+ private getElementFlowSuggestions;
67
+ /**
68
+ * Get flow suggestions after a complete tag: `>` (chain) or `]` (close).
69
+ * Only shows `>` if there are non-conflicting tags remaining.
70
+ */
71
+ private getFlowSuggestions;
72
+ /** Get close-only suggestion when no more tags can be chained */
73
+ private getCloseOnlySuggestions;
74
+ /**
75
+ * Get smart tag suggestions that don't conflict with already-selected tags.
76
+ * Filters out tags whose `overrides` dimensions overlap with selected tags.
77
+ */
78
+ private getSmartTagSuggestions;
79
+ /** Get all tag suggestions for a specific element (first tag, no filtering) */
80
+ private getTagSuggestions;
81
+ /**
82
+ * Get scope starter suggestions for just `{`.
83
+ * Shows @ for file scope and $ for skill scope.
84
+ */
85
+ private getScopePrefixSuggestions;
86
+ /**
87
+ * Get alias suggestions for `/partial` from cue.toml shortcuts.
88
+ * Returns null when nothing matches so slash commands keep working.
89
+ */
90
+ private getAliasSuggestions;
91
+ /**
92
+ * Get scoped suggestions after `{@`.
93
+ * - `{@partial` → file/dir suggestions from disk (relative to projectRoot)
94
+ * - `{@path:r` → line range suggestions for that file
95
+ */
96
+ private getScopedSuggestions;
97
+ /** List files/dirs from disk under projectRoot matching the partial path. */
98
+ private getPathSuggestions;
99
+ /**
100
+ * Suggest line numbers and range ends for a `{@file:` scope.
101
+ *
102
+ * With an empty range part each suggestion is one file line rendered as
103
+ * `<line number> <line content>`; picking one keeps the brace open
104
+ * (`{@file:N`) so a range can be extended. After a start line N (typed or
105
+ * picked) the suggestions become the range ends (`{@file:N-M`), and
106
+ * picking one closes the scope (`{@file:N-M} `). Lines longer than
107
+ * MAX_LINE are truncated with `...`.
108
+ */
109
+ private getRangeSuggestions;
110
+ private applyElementCompletion;
111
+ private applyTagCompletion;
112
+ private applyFlowCompletion;
113
+ private applyScopeCompletion;
114
+ /**
115
+ * Apply a scope ending: `:` opens a line range (brace stays open),
116
+ * `}` closes the scope statement.
117
+ */
118
+ private applyScopeFlowCompletion;
119
+ private applyScopePrefixCompletion;
120
+ /**
121
+ * Apply an alias pick: replace the `/partial` with `/name` plus a
122
+ * trailing space so the alias submits as its own message.
123
+ */
124
+ private applyAliasCompletion;
125
+ }
126
+ //# sourceMappingURL=autocomplete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../../../src/extensions/cue/autocomplete.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,WAAW,EAAc,MAAM,iBAAiB,CAAC;AACpF,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAKvG,4DAA4D;AAC5D,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC5D,QAAQ,EAAE,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,aAAa,GAAG,WAAW,GAAG,OAAO,CAAC;IACvF,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;CACrC;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,uBAAwB,YAAW,oBAAoB;IACnE,iBAAiB,WAAwB;IAEzC,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,WAAW,CAAS;IAE5B,YAAY,QAAQ,EAAE,WAAW,EAAE,WAAW,GAAE,MAAsB,EAGrE;IAED,kFAAkF;IAClF,OAAO,CAAC,eAAe;IASjB,cAAc,CACnB,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAChD,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CA0DzC;IAED,eAAe,CACd,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,MAAM,GACZ;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAwC5D;IAID,gDAAgD;IAChD,OAAO,CAAC,oBAAoB;IAc5B,oEAAoE;IACpE,OAAO,CAAC,qBAAqB;IAU7B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAoFzB;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAQ1B,mCAAmC;IACnC,OAAO,CAAC,qBAAqB;IAe7B,iFAAiF;IACjF,OAAO,CAAC,yBAAyB;IA0BjC;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAyC1B,iEAAiE;IACjE,OAAO,CAAC,uBAAuB;IAY/B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IA6C9B,+EAA+E;IAC/E,OAAO,CAAC,iBAAiB;IAkCzB;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAwBjC;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAe3B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAiC5B,6EAA6E;IAC7E,OAAO,CAAC,kBAAkB;IAyC1B;;;;;;;;;OASG;IACH,OAAO,CAAC,mBAAmB;IA4C3B,OAAO,CAAC,sBAAsB;IAiB9B,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,mBAAmB;IAoC3B,OAAO,CAAC,oBAAoB;IAuC5B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAiChC,OAAO,CAAC,0BAA0B;IA6BlC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;CAwB5B","sourcesContent":["import type { BehavioralDimension, CueRegistry, ElementDef } from \"@m4ike1/ion-cue\";\nimport type { AutocompleteItem, AutocompleteProvider, AutocompleteSuggestions } from \"@m4ike1/ion-tui\";\nimport { fuzzyFilter } from \"@m4ike1/ion-tui\";\nimport { existsSync, readdirSync, readFileSync, statSync } from \"fs\";\nimport { join } from \"path\";\n\n/** Extended autocomplete item with Cue-specific metadata */\nexport interface CueAutocompleteItem extends AutocompleteItem {\n\t_cueType: \"element\" | \"tag\" | \"flow\" | \"scope\" | \"scopePrefix\" | \"scopeFlow\" | \"alias\";\n\t_scopeType?: \"file\" | \"dir\" | \"glob\";\n}\n\n/**\n * Autocomplete provider for Cue directives.\n *\n * Triggers:\n * - `[` at line start or after whitespace -> element name suggestions\n * - `[Element: ` -> tag suggestions for that element\n * - `[Element: tag` (complete tag) -> `>` or `]` flow suggestions\n * - `[Element: tag1>tag2>` -> smart tag suggestions (no override conflicts)\n * - `{@` -> file/dir path suggestions from disk\n * - `{@path:` -> line range suggestions\n *\n * Bare `@path` outside braces is handled by the base provider, which inserts\n * a standalone `{@path}` scope statement.\n */\nexport class CueAutocompleteProvider implements AutocompleteProvider {\n\ttriggerCharacters = [\"[\", \">\", \"]\", \"{\"];\n\n\tprivate registry: CueRegistry;\n\tprivate projectRoot: string;\n\n\tconstructor(registry: CueRegistry, projectRoot: string = process.cwd()) {\n\t\tthis.registry = registry;\n\t\tthis.projectRoot = projectRoot;\n\t}\n\n\t/** Get override dimensions for a tag, checking element-local then shared tags. */\n\tprivate getTagOverrides(element: ElementDef, tagName: string): BehavioralDimension[] {\n\t\tconst normalized = tagName.toLowerCase();\n\t\tconst tagDef = element.tags[normalized];\n\t\tif (tagDef) return tagDef.overrides;\n\n\t\tconst shared = this.registry.getSharedTagOverrides(normalized);\n\t\treturn shared ?? [];\n\t}\n\n\tasync getSuggestions(\n\t\tlines: string[],\n\t\tcursorLine: number,\n\t\tcursorCol: number,\n\t\t_options: { signal: AbortSignal; force?: boolean },\n\t): Promise<AutocompleteSuggestions | null> {\n\t\tconst currentLine = lines[cursorLine] || \"\";\n\t\tconst textBeforeCursor = currentLine.slice(0, cursorCol);\n\n\t\t// 0. Alias completion: `/name` on its own line suggests cue.toml shortcuts.\n\t\t// Bare `/` returns null so the slash-command menu keeps working.\n\t\tconst aliasPrefix = this.extractAliasPrefix(textBeforeCursor);\n\t\tif (aliasPrefix !== null) {\n\t\t\treturn this.getAliasSuggestions(aliasPrefix);\n\t\t}\n\n\t\t// 1. Element name completion: `[` at line start or after whitespace\n\t\tconst bracketPrefix = this.extractBracketPrefix(textBeforeCursor);\n\t\tif (bracketPrefix !== null) {\n\t\t\treturn this.getElementSuggestions(bracketPrefix);\n\t\t}\n\n\t\t// 2. After element selected but no colon yet: `[Element` -> suggest `:` or `]`\n\t\tconst elementNoColon = this.extractElementNoColon(textBeforeCursor);\n\t\tif (elementNoColon !== null) {\n\t\t\treturn this.getElementFlowSuggestions(elementNoColon);\n\t\t}\n\n\t\t// 3. Tag context extraction\n\t\tconst tagContext = this.extractTagContext(textBeforeCursor);\n\t\tif (tagContext) {\n\t\t\t// 2a. If we have a complete tag (not partial), suggest flow: `>` or `]`\n\t\t\tif (tagContext.isComplete && tagContext.lastTag) {\n\t\t\t\treturn this.getFlowSuggestions(tagContext.element, tagContext.selectedTags);\n\t\t\t}\n\n\t\t\t// 2b. If we have tags already selected, filter by non-conflicting overrides\n\t\t\tif (tagContext.selectedTags.length > 0) {\n\t\t\t\tconst smart = this.getSmartTagSuggestions(tagContext.element, tagContext.partial, tagContext.selectedTags);\n\t\t\t\tif (smart && smart.items.length > 0) return smart;\n\t\t\t\t// No more valid tags -- only `]` left\n\t\t\t\treturn this.getCloseOnlySuggestions();\n\t\t\t}\n\n\t\t\t// 2c. First tag - show all available tags\n\t\t\treturn this.getTagSuggestions(tagContext.element, tagContext.partial);\n\t\t}\n\n\t\t// 5. Scope completion: `{` anywhere (standalone scope statements)\n\t\tconst scopePrefix = this.extractScopePrefix(textBeforeCursor);\n\t\tif (scopePrefix !== null) {\n\t\t\tif (scopePrefix.type === \"file\") {\n\t\t\t\treturn this.getScopedSuggestions(scopePrefix.partial);\n\t\t\t}\n\t\t\tif (scopePrefix.type === \"skill\") {\n\t\t\t\t// Delegate to base provider for skill name completions (e.g. {$commit})\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\t// Just `{` - suggest the `@` / `$` scope starters\n\t\t\treturn this.getScopePrefixSuggestions(scopePrefix.partial);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tapplyCompletion(\n\t\tlines: string[],\n\t\tcursorLine: number,\n\t\tcursorCol: number,\n\t\titem: AutocompleteItem,\n\t\tprefix: string,\n\t): { lines: string[]; cursorLine: number; cursorCol: number } {\n\t\tconst currentLine = lines[cursorLine] || \"\";\n\t\tconst textBeforeCursor = currentLine.slice(0, cursorCol);\n\t\tconst textAfterCursor = currentLine.slice(cursorCol);\n\t\tconst cueItem = item as CueAutocompleteItem;\n\n\t\tif (cueItem._cueType === \"element\") {\n\t\t\treturn this.applyElementCompletion(lines, cursorLine, cursorCol, item, textBeforeCursor, textAfterCursor);\n\t\t}\n\n\t\tif (cueItem._cueType === \"tag\") {\n\t\t\treturn this.applyTagCompletion(lines, cursorLine, cursorCol, item, textBeforeCursor, textAfterCursor);\n\t\t}\n\n\t\tif (cueItem._cueType === \"flow\") {\n\t\t\treturn this.applyFlowCompletion(lines, cursorLine, cursorCol, item, textBeforeCursor, textAfterCursor);\n\t\t}\n\n\t\tif (cueItem._cueType === \"scope\") {\n\t\t\treturn this.applyScopeCompletion(lines, cursorLine, cursorCol, item, textBeforeCursor, textAfterCursor);\n\t\t}\n\n\t\tif (cueItem._cueType === \"scopeFlow\") {\n\t\t\treturn this.applyScopeFlowCompletion(lines, cursorLine, cursorCol, item, textBeforeCursor, textAfterCursor);\n\t\t}\n\n\t\tif (cueItem._cueType === \"scopePrefix\") {\n\t\t\treturn this.applyScopePrefixCompletion(lines, cursorLine, cursorCol, item, textBeforeCursor, textAfterCursor);\n\t\t}\n\n\t\tif (cueItem._cueType === \"alias\") {\n\t\t\treturn this.applyAliasCompletion(lines, cursorLine, cursorCol, item, textBeforeCursor, textAfterCursor);\n\t\t}\n\n\t\t// Fallback: just insert the value\n\t\tconst beforePrefix = textBeforeCursor.slice(0, textBeforeCursor.length - prefix.length);\n\t\tconst newLine = beforePrefix + item.value + textAfterCursor;\n\t\tconst newLines = [...lines];\n\t\tnewLines[cursorLine] = newLine;\n\t\treturn { lines: newLines, cursorLine, cursorCol: beforePrefix.length + item.value.length };\n\t}\n\n\t// ─── Extraction Methods ────────────────────────────────────────────────────\n\n\t/** Extract `[` prefix for element completion */\n\tprivate extractBracketPrefix(text: string): string | null {\n\t\tconst match = text.match(/(?:^|\\s)\\[([A-Za-z][A-Za-z0-9_-]*)?$/);\n\t\tif (match) {\n\t\t\tconst partial = match[1] || \"\";\n\t\t\t// If the partial matches a real element, let extractElementNoColon handle it\n\t\t\tif (partial && this.registry.get(partial)) return null;\n\t\t\treturn partial;\n\t\t}\n\t\tif (text.endsWith(\"[\") && (text.length === 1 || /\\s/.test(text[text.length - 2] ?? \"\"))) {\n\t\t\treturn \"\";\n\t\t}\n\t\treturn null;\n\t}\n\n\t/** Extract element name when we have `[Element` but no colon yet */\n\tprivate extractElementNoColon(text: string): string | null {\n\t\t// Don't match if the bracket is closed\n\t\tif (text.endsWith(\"]\")) return null;\n\t\tconst match = text.match(/\\[([A-Za-z][A-Za-z0-9_-]*)$/);\n\t\tif (!match) return null;\n\t\tconst element = match[1] ?? \"\";\n\t\tif (!this.registry.get(element)) return null;\n\t\treturn element;\n\t}\n\n\t/**\n\t * Extract tag context from the text before cursor.\n\t * Returns null if not in a tag context.\n\t */\n\tprivate extractTagContext(text: string): {\n\t\telement: string;\n\t\tpartial: string;\n\t\tselectedTags: string[];\n\t\tlastTag: string | null;\n\t\tisComplete: boolean;\n\t} | null {\n\t\t// Check if we're inside a `[Element: ...]` directive\n\t\t// Use [^]]*$ to match only up to the LAST unclosed bracket\n\t\tconst bracketMatch = text.match(/\\[([A-Za-z][A-Za-z0-9_-]*):\\s*([^\\]]*)$/);\n\t\tif (!bracketMatch) return null;\n\n\t\tconst element = bracketMatch[1] ?? \"\";\n\t\tconst afterColon = bracketMatch[2] ?? \"\";\n\n\t\t// If directive is closed, not in tag context\n\t\tif (afterColon.includes(\"]\")) return null;\n\n\t\t// Parse tag chain by splitting on `>`\n\t\tconst parts = afterColon.split(\">\").map((p) => p.trim());\n\t\tconst selectedTags: string[] = [];\n\t\tlet partial = \"\";\n\t\tlet isComplete = false;\n\n\t\tfor (let i = 0; i < parts.length; i++) {\n\t\t\tconst part = parts[i] ?? \"\";\n\t\t\tconst isLast = i === parts.length - 1;\n\n\t\t\tif (isLast) {\n\t\t\t\tif (afterColon.includes(\">\")) {\n\t\t\t\t\t// There's a `>` in the chain -- after `> `, user wants to chain more tags\n\t\t\t\t\tif (part === \"\") {\n\t\t\t\t\t\t// Empty after `> ` -- ready for next tag, show tag suggestions\n\t\t\t\t\t\tisComplete = false;\n\t\t\t\t\t} else if (afterColon.endsWith(\" \")) {\n\t\t\t\t\t\t// Tag followed by space after `>` -- complete tag, show tag suggestions\n\t\t\t\t\t\tselectedTags.push(part);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Tag at end without space -- partial (user still typing)\n\t\t\t\t\t\tpartial = part;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// No `>` in chain yet\n\t\t\t\t\tif (part === \"\") {\n\t\t\t\t\t\t// Empty after `: ` -- ready for first tag\n\t\t\t\t\t\tisComplete = true;\n\t\t\t\t\t} else if (afterColon.endsWith(\" \")) {\n\t\t\t\t\t\t// Tag followed by space -- complete, show flow (`>`/`]`)\n\t\t\t\t\t\tselectedTags.push(part);\n\t\t\t\t\t\tisComplete = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Tag being typed\n\t\t\t\t\t\tpartial = part;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Not last part -- must be a complete selected tag\n\t\t\t\tif (part) selectedTags.push(part);\n\t\t\t}\n\t\t}\n\n\t\tconst lastTag = selectedTags.length > 0 ? (selectedTags[selectedTags.length - 1] ?? null) : null;\n\n\t\t// If partial exactly matches a valid tag, treat it as complete\n\t\tif (!isComplete && partial) {\n\t\t\tconst elementDef = this.registry.get(element);\n\t\t\tconst isLocal = elementDef?.tags[partial.toLowerCase()];\n\t\t\tconst isShared = this.registry.getSharedTagDefs().has(partial.toLowerCase());\n\t\t\tif (isLocal || isShared) {\n\t\t\t\tselectedTags.push(partial);\n\t\t\t\tpartial = \"\";\n\t\t\t\tisComplete = true;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\telement,\n\t\t\tpartial,\n\t\t\tselectedTags,\n\t\t\tlastTag: isComplete && selectedTags.length > 0 ? (selectedTags[selectedTags.length - 1] ?? null) : lastTag,\n\t\t\tisComplete,\n\t\t};\n\t}\n\n\t/**\n\t * Extract scope prefix from text before cursor.\n\t * Matches `{` anywhere (standalone scope statement).\n\t * Returns null if not in scope context.\n\t * Returns { type: null, partial } for just `{`\n\t * Returns { type: \"file\", partial } for `{@`\n\t * Returns { type: \"skill\", partial } for `{$`\n\t */\n\tprivate extractScopePrefix(text: string): { type: \"file\" | \"skill\" | null; partial: string } | null {\n\t\t// Match `{` anywhere, followed by optional scope prefix and content\n\t\tconst match = text.match(/\\{([@$]?)([^}]*)$/);\n\t\tif (!match) return null;\n\n\t\tconst prefix = match[1] ?? \"\";\n\t\tconst partial = match[2] ?? \"\";\n\n\t\tif (prefix === \"@\") return { type: \"file\", partial };\n\t\tif (prefix === \"$\") return { type: \"skill\", partial };\n\t\treturn { type: null, partial };\n\t}\n\n\t/**\n\t * Extract an alias partial: `/name` alone on its line (mirrors the\n\t * dispatcher's first-line alias form). Returns null for bare `/` so\n\t * the slash-command menu keeps working, and for non-first-line `/`\n\t * uses like `/skill:name`.\n\t */\n\tprivate extractAliasPrefix(text: string): string | null {\n\t\tconst match = text.match(/^\\s*\\/(\\w+)$/);\n\t\tif (!match) return null;\n\t\treturn match[1] ?? \"\";\n\t}\n\n\t// ─── Suggestion Methods ────────────────────────────────────────────────────\n\n\t/** Get element name suggestions */\n\tprivate getElementSuggestions(partial: string): AutocompleteSuggestions | null {\n\t\tconst elements = this.registry.list();\n\t\tconst items: CueAutocompleteItem[] = elements.map((el: ElementDef) => ({\n\t\t\tvalue: el.name,\n\t\t\tlabel: el.name,\n\t\t\tdescription: el.description,\n\t\t\t_cueType: \"element\",\n\t\t}));\n\n\t\tconst filtered = fuzzyFilter(items, partial, (item) => item.value);\n\t\tif (filtered.length === 0) return null;\n\n\t\treturn { items: filtered, prefix: `[${partial}` };\n\t}\n\n\t/** Get flow suggestions after element selected: `:` (add tags) or `]` (close) */\n\tprivate getElementFlowSuggestions(elementName: string): AutocompleteSuggestions | null {\n\t\tconst element = this.registry.get(elementName);\n\t\tif (!element) return null;\n\n\t\tconst hasTags = Object.keys(element.tags).length > 0;\n\t\tconst items: CueAutocompleteItem[] = [];\n\n\t\tif (hasTags) {\n\t\t\titems.push({\n\t\t\t\tvalue: \":\",\n\t\t\t\tlabel: \": tag\",\n\t\t\t\tdescription: `Add a tag to ${elementName}`,\n\t\t\t\t_cueType: \"flow\",\n\t\t\t});\n\t\t}\n\n\t\titems.push({\n\t\t\tvalue: \"]\",\n\t\t\tlabel: \"] close\",\n\t\t\tdescription: \"Close the directive\",\n\t\t\t_cueType: \"flow\",\n\t\t});\n\n\t\treturn { items, prefix: \"\" };\n\t}\n\n\t/**\n\t * Get flow suggestions after a complete tag: `>` (chain) or `]` (close).\n\t * Only shows `>` if there are non-conflicting tags remaining.\n\t */\n\tprivate getFlowSuggestions(elementName: string, selectedTags: string[]): AutocompleteSuggestions | null {\n\t\tconst element = this.registry.get(elementName);\n\t\tif (!element) return null;\n\n\t\t// Collect override dimensions from all selected tags (including shared tags)\n\t\tconst usedDimensions = new Set<BehavioralDimension>();\n\t\tfor (const tag of selectedTags) {\n\t\t\tfor (const dim of this.getTagOverrides(element, tag)) {\n\t\t\t\tusedDimensions.add(dim);\n\t\t\t}\n\t\t}\n\n\t\t// Check if any tag can still be chained (doesn't conflict with used dimensions)\n\t\tconst hasNonConflictingTag = Object.entries(element.tags).some(([name, tag]) => {\n\t\t\t// Skip already-selected tags\n\t\t\tif (selectedTags.some((t) => t.toLowerCase() === name)) return false;\n\t\t\t// Tag is valid if none of its overrides are already used\n\t\t\treturn !tag.overrides.some((dim) => usedDimensions.has(dim));\n\t\t});\n\n\t\tconst items: CueAutocompleteItem[] = [];\n\n\t\tif (hasNonConflictingTag) {\n\t\t\titems.push({\n\t\t\t\tvalue: \">\",\n\t\t\t\tlabel: \"> chain\",\n\t\t\t\tdescription: \"Chain another tag\",\n\t\t\t\t_cueType: \"flow\",\n\t\t\t});\n\t\t}\n\n\t\titems.push({\n\t\t\tvalue: \"]\",\n\t\t\tlabel: \"] close\",\n\t\t\tdescription: \"Close the directive\",\n\t\t\t_cueType: \"flow\",\n\t\t});\n\n\t\treturn { items, prefix: \"\" };\n\t}\n\n\t/** Get close-only suggestion when no more tags can be chained */\n\tprivate getCloseOnlySuggestions(): AutocompleteSuggestions | null {\n\t\tconst items: CueAutocompleteItem[] = [\n\t\t\t{\n\t\t\t\tvalue: \"]\",\n\t\t\t\tlabel: \"] close\",\n\t\t\t\tdescription: \"Close the directive\",\n\t\t\t\t_cueType: \"flow\",\n\t\t\t},\n\t\t];\n\t\treturn { items, prefix: \"\" };\n\t}\n\n\t/**\n\t * Get smart tag suggestions that don't conflict with already-selected tags.\n\t * Filters out tags whose `overrides` dimensions overlap with selected tags.\n\t */\n\tprivate getSmartTagSuggestions(\n\t\telementName: string,\n\t\tpartial: string,\n\t\tselectedTags: string[],\n\t): AutocompleteSuggestions | null {\n\t\tconst element = this.registry.get(elementName);\n\t\tif (!element) return null;\n\n\t\t// Collect all override dimensions from selected tags (including shared tags)\n\t\tconst usedDimensions = new Set<BehavioralDimension>();\n\t\tfor (const tag of selectedTags) {\n\t\t\tfor (const dim of this.getTagOverrides(element, tag)) {\n\t\t\t\tusedDimensions.add(dim);\n\t\t\t}\n\t\t}\n\n\t\t// Filter tags: exclude those that override already-used dimensions\n\t\tconst items: CueAutocompleteItem[] = [];\n\t\tfor (const [name, tag] of Object.entries(element.tags)) {\n\t\t\t// Skip already-selected tags\n\t\t\tif (selectedTags.some((t) => t.toLowerCase() === name)) continue;\n\n\t\t\t// Check for override conflicts\n\t\t\tconst conflicts = tag.overrides.filter((dim) => usedDimensions.has(dim));\n\t\t\tif (conflicts.length > 0) {\n\t\t\t} else {\n\t\t\t\t// No conflict - clean composition\n\t\t\t\titems.push({\n\t\t\t\t\tvalue: name,\n\t\t\t\t\tlabel: name,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\ttag.overrides.length > 0\n\t\t\t\t\t\t\t? `${tag.description} (overrides: ${tag.overrides.join(\", \")})`\n\t\t\t\t\t\t\t: tag.description,\n\t\t\t\t\t_cueType: \"tag\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tconst filtered = fuzzyFilter(items, partial, (item) => item.value);\n\t\tif (filtered.length === 0) return null;\n\n\t\treturn { items: filtered, prefix: partial };\n\t}\n\n\t/** Get all tag suggestions for a specific element (first tag, no filtering) */\n\tprivate getTagSuggestions(elementName: string, partial: string): AutocompleteSuggestions | null {\n\t\tconst element = this.registry.get(elementName);\n\t\tif (!element) return null;\n\n\t\tconst items: CueAutocompleteItem[] = Object.entries(element.tags).map(([name, tag]) => ({\n\t\t\tvalue: name,\n\t\t\tlabel: name,\n\t\t\tdescription:\n\t\t\t\ttag.overrides.length > 0 ? `${tag.description} (overrides: ${tag.overrides.join(\", \")})` : tag.description,\n\t\t\t_cueType: \"tag\",\n\t\t}));\n\n\t\t// Add shared tags that aren't already defined locally\n\t\tconst localNames = new Set(Object.keys(element.tags));\n\t\tconst sharedDefs = this.registry.getSharedTagDefs();\n\t\tfor (const [name, def] of sharedDefs) {\n\t\t\tif (localNames.has(name)) continue;\n\t\t\titems.push({\n\t\t\t\tvalue: name,\n\t\t\t\tlabel: name,\n\t\t\t\tdescription:\n\t\t\t\t\tdef.overrides.length > 0\n\t\t\t\t\t\t? `${def.description} (overrides: ${def.overrides.join(\", \")})`\n\t\t\t\t\t\t: def.description,\n\t\t\t\t_cueType: \"tag\",\n\t\t\t});\n\t\t}\n\n\t\tconst filtered = fuzzyFilter(items, partial, (item) => item.value);\n\t\tif (filtered.length === 0) return null;\n\n\t\treturn { items: filtered, prefix: partial };\n\t}\n\n\t/**\n\t * Get scope starter suggestions for just `{`.\n\t * Shows @ for file scope and $ for skill scope.\n\t */\n\tprivate getScopePrefixSuggestions(partial: string): AutocompleteSuggestions | null {\n\t\tconst items: CueAutocompleteItem[] = [\n\t\t\t{\n\t\t\t\tvalue: \"@\",\n\t\t\t\tlabel: \"@ file\",\n\t\t\t\tdescription: \"Scope to a file or directory\",\n\t\t\t\t_cueType: \"scopePrefix\",\n\t\t\t\t_scopeType: \"file\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: \"$\",\n\t\t\t\tlabel: \"$ skill\",\n\t\t\t\tdescription: \"Reference a skill\",\n\t\t\t\t_cueType: \"scopePrefix\",\n\t\t\t\t_scopeType: \"file\",\n\t\t\t},\n\t\t];\n\n\t\tconst filtered = fuzzyFilter(items, partial, (item) => item.value);\n\t\tif (filtered.length === 0) return null;\n\n\t\treturn { items: filtered, prefix: partial };\n\t}\n\n\t/**\n\t * Get alias suggestions for `/partial` from cue.toml shortcuts.\n\t * Returns null when nothing matches so slash commands keep working.\n\t */\n\tprivate getAliasSuggestions(partial: string): AutocompleteSuggestions | null {\n\t\tconst aliases = this.registry.loadAliases(this.projectRoot);\n\t\tconst items: CueAutocompleteItem[] = Object.entries(aliases).map(([name, expansion]) => ({\n\t\t\tvalue: `/${name}`,\n\t\t\tlabel: `/${name}`,\n\t\t\tdescription: `→ ${expansion.length > 60 ? `${expansion.slice(0, 60)}...` : expansion}`,\n\t\t\t_cueType: \"alias\",\n\t\t}));\n\n\t\tconst filtered = fuzzyFilter(items, partial, (item) => item.value);\n\t\tif (filtered.length === 0) return null;\n\n\t\treturn { items: filtered, prefix: `/${partial}` };\n\t}\n\n\t/**\n\t * Get scoped suggestions after `{@`.\n\t * - `{@partial` → file/dir suggestions from disk (relative to projectRoot)\n\t * - `{@path:r` → line range suggestions for that file\n\t */\n\tprivate getScopedSuggestions(partial: string): AutocompleteSuggestions | null {\n\t\tconst colonIndex = partial.indexOf(\":\");\n\t\tif (colonIndex !== -1) {\n\t\t\tconst items = this.getRangeSuggestions(partial.slice(0, colonIndex), partial.slice(colonIndex + 1));\n\t\t\tif (items.length === 0) return null;\n\t\t\treturn { items, prefix: partial };\n\t\t}\n\n\t\tconst filtered = this.getPathSuggestions(partial);\n\t\tconst items: CueAutocompleteItem[] = [];\n\t\t// A fully typed file path offers two endings: open a line range or close the scope\n\t\tconst isCompleteFile = filtered.some((f) => f.value === partial && f._scopeType === \"file\");\n\t\tif (isCompleteFile) {\n\t\t\titems.push(\n\t\t\t\t{\n\t\t\t\t\tvalue: \":\",\n\t\t\t\t\tlabel: \": range\",\n\t\t\t\t\tdescription: \"Add a line range (e.g. :3-5)\",\n\t\t\t\t\t_cueType: \"scopeFlow\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: \"}\",\n\t\t\t\t\tlabel: \"} end scope\",\n\t\t\t\t\tdescription: \"Close the scope statement\",\n\t\t\t\t\t_cueType: \"scopeFlow\",\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\titems.push(...filtered.filter((f) => !(f.value === partial && f._scopeType === \"file\")));\n\t\tif (items.length === 0) return null;\n\t\treturn { items, prefix: partial };\n\t}\n\n\t/** List files/dirs from disk under projectRoot matching the partial path. */\n\tprivate getPathSuggestions(partial: string): CueAutocompleteItem[] {\n\t\tconst hasTrailingSlash = partial.endsWith(\"/\");\n\t\tconst segments = partial.split(\"/\").filter((s) => s !== \"\" && s !== \".\");\n\t\tconst lastSegment = hasTrailingSlash ? \"\" : (segments.pop() ?? \"\");\n\t\tconst base = join(this.projectRoot, ...segments);\n\n\t\tlet entries: string[] = [];\n\t\ttry {\n\t\t\tif (!existsSync(base) || !statSync(base).isDirectory()) return [];\n\t\t\tentries = readdirSync(base);\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst MAX_ITEMS = 100;\n\t\tconst items: CueAutocompleteItem[] = [];\n\t\tfor (const entry of entries) {\n\t\t\tif (entry.startsWith(\".\")) continue;\n\t\t\tif (items.length >= MAX_ITEMS) break;\n\n\t\t\tconst full = join(base, entry);\n\t\t\tlet isDir = false;\n\t\t\ttry {\n\t\t\t\tisDir = statSync(full).isDirectory();\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst rel = segments.length > 0 ? `${segments.join(\"/\")}/${entry}` : entry;\n\t\t\titems.push({\n\t\t\t\tvalue: isDir ? `${rel}/` : rel,\n\t\t\t\tlabel: isDir ? `${rel}/` : rel,\n\t\t\t\tdescription: isDir ? \"directory\" : \"file\",\n\t\t\t\t_cueType: \"scope\",\n\t\t\t\t_scopeType: isDir ? \"dir\" : \"file\",\n\t\t\t});\n\t\t}\n\n\t\treturn fuzzyFilter(items, lastSegment, (item) => item.value);\n\t}\n\n\t/**\n\t * Suggest line numbers and range ends for a `{@file:` scope.\n\t *\n\t * With an empty range part each suggestion is one file line rendered as\n\t * `<line number> <line content>`; picking one keeps the brace open\n\t * (`{@file:N`) so a range can be extended. After a start line N (typed or\n\t * picked) the suggestions become the range ends (`{@file:N-M`), and\n\t * picking one closes the scope (`{@file:N-M} `). Lines longer than\n\t * MAX_LINE are truncated with `...`.\n\t */\n\tprivate getRangeSuggestions(pathPart: string, rangePart: string): CueAutocompleteItem[] {\n\t\tconst full = join(this.projectRoot, pathPart);\n\t\tlet content = \"\";\n\t\ttry {\n\t\t\tcontent = readFileSync(full, \"utf-8\");\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst lines = content.split(\"\\n\");\n\t\tif (lines[lines.length - 1] === \"\") lines.pop();\n\t\tconst totalLines = lines.length;\n\t\tconst MAX_LINE = 100;\n\t\tconst MAX_ITEMS = 50;\n\t\tconst CHUNK = 10;\n\n\t\tconst truncate = (s: string) => (s.length > MAX_LINE ? `${s.slice(0, MAX_LINE)}...` : s);\n\t\tconst width = String(totalLines).length;\n\t\tconst lineLabel = (n: number) => `${String(n).padStart(width)} ${truncate(lines[n - 1] ?? \"\")}`;\n\n\t\tconst items: CueAutocompleteItem[] = [];\n\t\tconst pushLine = (n: number, value: string) => {\n\t\t\tif (n < 1 || n > totalLines) return;\n\t\t\titems.push({ value, label: lineLabel(n), _cueType: \"scope\" });\n\t\t};\n\n\t\tif (rangePart === \"\") {\n\t\t\tfor (let n = 1; n <= totalLines && items.length < MAX_ITEMS; n++) {\n\t\t\t\tpushLine(n, `${pathPart}:${n}`);\n\t\t\t}\n\t\t} else if (/^(\\d+)-?$/.test(rangePart)) {\n\t\t\tconst start = parseInt(rangePart, 10);\n\t\t\tif (start < 1 || start > totalLines) return [];\n\t\t\tfor (let end = start + 1; end <= Math.min(start + CHUNK, totalLines); end++) {\n\t\t\t\tpushLine(end, `${pathPart}:${start}-${end}`);\n\t\t\t}\n\t\t} else {\n\t\t\treturn [];\n\t\t}\n\t\treturn items;\n\t}\n\n\t// ─── Apply Completion Methods ──────────────────────────────────────────────\n\n\tprivate applyElementCompletion(\n\t\tlines: string[],\n\t\tcursorLine: number,\n\t\t_cursorCol: number,\n\t\titem: AutocompleteItem,\n\t\ttextBeforeCursor: string,\n\t\ttextAfterCursor: string,\n\t): { lines: string[]; cursorLine: number; cursorCol: number } {\n\t\tconst bracketPos = textBeforeCursor.lastIndexOf(\"[\");\n\t\tconst beforeBracket = textBeforeCursor.slice(0, bracketPos);\n\t\tconst insertText = `[${item.value}`;\n\t\tconst newLine = beforeBracket + insertText + textAfterCursor;\n\t\tconst newLines = [...lines];\n\t\tnewLines[cursorLine] = newLine;\n\t\treturn { lines: newLines, cursorLine, cursorCol: bracketPos + insertText.length };\n\t}\n\n\tprivate applyTagCompletion(\n\t\tlines: string[],\n\t\tcursorLine: number,\n\t\t_cursorCol: number,\n\t\titem: AutocompleteItem,\n\t\ttextBeforeCursor: string,\n\t\ttextAfterCursor: string,\n\t): { lines: string[]; cursorLine: number; cursorCol: number } {\n\t\t// Find the last `>` or `:` to determine where to insert\n\t\tconst colonPos = textBeforeCursor.lastIndexOf(\":\");\n\t\tconst beforeColon = textBeforeCursor.slice(0, colonPos + 1);\n\t\tconst afterColon = textBeforeCursor.slice(colonPos + 1);\n\t\tconst lastTagStart = afterColon.lastIndexOf(\">\");\n\t\tconst beforeTag = afterColon.slice(0, lastTagStart + 1);\n\n\t\t// Insert the tag with a single space after the `:` or `>` separator.\n\t\t// Everything between the separator and the cursor (a partial tag) is\n\t\t// replaced by the picked tag. User types `>` or `]` to continue.\n\t\tconst newLine = `${beforeColon + beforeTag} ${item.value}${textAfterCursor}`;\n\t\tconst newLines = [...lines];\n\t\tnewLines[cursorLine] = newLine;\n\t\tconst newCursorCol = colonPos + 1 + beforeTag.length + 1 + item.value.length;\n\t\treturn { lines: newLines, cursorLine, cursorCol: newCursorCol };\n\t}\n\n\tprivate applyFlowCompletion(\n\t\tlines: string[],\n\t\tcursorLine: number,\n\t\t_cursorCol: number,\n\t\titem: AutocompleteItem,\n\t\ttextBeforeCursor: string,\n\t\ttextAfterCursor: string,\n\t): { lines: string[]; cursorLine: number; cursorCol: number } {\n\t\tif (item.value === \":\") {\n\t\t\tconst newLine = `${textBeforeCursor}: ${textAfterCursor}`;\n\t\t\tconst newLines = [...lines];\n\t\t\tnewLines[cursorLine] = newLine;\n\t\t\treturn { lines: newLines, cursorLine, cursorCol: textBeforeCursor.length + 2 };\n\t\t}\n\n\t\tif (item.value === \">\") {\n\t\t\tconst newLine = `${textBeforeCursor} > ${textAfterCursor}`;\n\t\t\tconst newLines = [...lines];\n\t\t\tnewLines[cursorLine] = newLine;\n\t\t\treturn { lines: newLines, cursorLine, cursorCol: textBeforeCursor.length + 3 };\n\t\t}\n\n\t\tif (item.value === \"]\") {\n\t\t\tconst newLine = `${textBeforeCursor}]${textAfterCursor}`;\n\t\t\tconst newLines = [...lines];\n\t\t\tnewLines[cursorLine] = newLine;\n\t\t\treturn { lines: newLines, cursorLine, cursorCol: textBeforeCursor.length + 1 };\n\t\t}\n\n\t\t// Fallback\n\t\tconst newLine = textBeforeCursor + item.value + textAfterCursor;\n\t\tconst newLines = [...lines];\n\t\tnewLines[cursorLine] = newLine;\n\t\treturn { lines: newLines, cursorLine, cursorCol: textBeforeCursor.length + item.value.length };\n\t}\n\n\tprivate applyScopeCompletion(\n\t\tlines: string[],\n\t\tcursorLine: number,\n\t\t_cursorCol: number,\n\t\titem: AutocompleteItem,\n\t\ttextBeforeCursor: string,\n\t\ttextAfterCursor: string,\n\t): { lines: string[]; cursorLine: number; cursorCol: number } {\n\t\t// Find the `{@` or `{#` prefix and replace the partial\n\t\tconst scopeMatch = textBeforeCursor.match(/\\{([@#])([^}]*)$/);\n\t\tif (!scopeMatch) {\n\t\t\t// Fallback: just insert\n\t\t\tconst newLine = textBeforeCursor + item.value + textAfterCursor;\n\t\t\tconst newLines = [...lines];\n\t\t\tnewLines[cursorLine] = newLine;\n\t\t\treturn { lines: newLines, cursorLine, cursorCol: textBeforeCursor.length + item.value.length };\n\t\t}\n\n\t\tconst typeChar = scopeMatch[1] ?? \"@\";\n\t\tconst scopeStart = textBeforeCursor.lastIndexOf(`{${typeChar}`);\n\t\tconst beforeScope = textBeforeCursor.slice(0, scopeStart);\n\t\tconst insertText = `{${typeChar}${item.value}`;\n\n\t\t// Directories and completed ranges close the scope (`{@dir/} `,\n\t\t// `{@file:N-M} `); a file pick leaves the brace open so the `:` range\n\t\t// and `}` close flow items can be picked next, and a bare line number\n\t\t// leaves it open so a range end can be picked next\n\t\tconst isDir = (item as CueAutocompleteItem)._scopeType === \"dir\";\n\t\tconst rangePart = item.value.slice(item.value.indexOf(\":\") + 1);\n\t\tconst isRangeEnd = rangePart.includes(\"-\");\n\t\tconst suffix = isDir || isRangeEnd ? \"} \" : \"\";\n\n\t\tconst newLine = beforeScope + insertText + suffix + textAfterCursor;\n\t\tconst newLines = [...lines];\n\t\tnewLines[cursorLine] = newLine;\n\t\tconst newCursorCol = beforeScope.length + insertText.length + suffix.length;\n\t\treturn { lines: newLines, cursorLine, cursorCol: newCursorCol };\n\t}\n\n\t/**\n\t * Apply a scope ending: `:` opens a line range (brace stays open),\n\t * `}` closes the scope statement.\n\t */\n\tprivate applyScopeFlowCompletion(\n\t\tlines: string[],\n\t\tcursorLine: number,\n\t\t_cursorCol: number,\n\t\titem: AutocompleteItem,\n\t\ttextBeforeCursor: string,\n\t\ttextAfterCursor: string,\n\t): { lines: string[]; cursorLine: number; cursorCol: number } {\n\t\tconst scopeMatch = textBeforeCursor.match(/\\{([@#])([^}]*)$/);\n\t\tif (!scopeMatch) {\n\t\t\t// Fallback: just insert\n\t\t\tconst newLine = textBeforeCursor + item.value + textAfterCursor;\n\t\t\tconst newLines = [...lines];\n\t\t\tnewLines[cursorLine] = newLine;\n\t\t\treturn { lines: newLines, cursorLine, cursorCol: textBeforeCursor.length + item.value.length };\n\t\t}\n\n\t\tconst typeChar = scopeMatch[1] ?? \"@\";\n\t\tconst scopeStart = textBeforeCursor.lastIndexOf(`{${typeChar}`);\n\t\tconst beforeScope = textBeforeCursor.slice(0, scopeStart);\n\t\tconst partial = scopeMatch[2] ?? \"\";\n\n\t\tconst isRange = item.value === \":\";\n\t\tconst insertText = isRange ? `{${typeChar}${partial}:` : `{${typeChar}${partial}}`;\n\t\tconst suffix = isRange ? \"\" : \" \";\n\n\t\tconst newLine = beforeScope + insertText + suffix + textAfterCursor;\n\t\tconst newLines = [...lines];\n\t\tnewLines[cursorLine] = newLine;\n\t\tconst newCursorCol = beforeScope.length + insertText.length + suffix.length;\n\t\treturn { lines: newLines, cursorLine, cursorCol: newCursorCol };\n\t}\n\n\tprivate applyScopePrefixCompletion(\n\t\tlines: string[],\n\t\tcursorLine: number,\n\t\t_cursorCol: number,\n\t\titem: AutocompleteItem,\n\t\ttextBeforeCursor: string,\n\t\ttextAfterCursor: string,\n\t): { lines: string[]; cursorLine: number; cursorCol: number } {\n\t\t// Find the `{` prefix and insert the scope prefix\n\t\tconst scopeMatch = textBeforeCursor.match(/\\{([@#$]?)([^}]*)$/);\n\t\tif (!scopeMatch) {\n\t\t\t// Fallback: just insert\n\t\t\tconst newLine = textBeforeCursor + item.value + textAfterCursor;\n\t\t\tconst newLines = [...lines];\n\t\t\tnewLines[cursorLine] = newLine;\n\t\t\treturn { lines: newLines, cursorLine, cursorCol: textBeforeCursor.length + item.value.length };\n\t\t}\n\n\t\tconst scopeStart = textBeforeCursor.lastIndexOf(\"{\");\n\t\tconst beforeScope = textBeforeCursor.slice(0, scopeStart);\n\t\tconst insertText = `{${item.value}`;\n\n\t\tconst newLine = beforeScope + insertText + textAfterCursor;\n\t\tconst newLines = [...lines];\n\t\tnewLines[cursorLine] = newLine;\n\t\tconst newCursorCol = beforeScope.length + insertText.length;\n\t\treturn { lines: newLines, cursorLine, cursorCol: newCursorCol };\n\t}\n\n\t/**\n\t * Apply an alias pick: replace the `/partial` with `/name` plus a\n\t * trailing space so the alias submits as its own message.\n\t */\n\tprivate applyAliasCompletion(\n\t\tlines: string[],\n\t\tcursorLine: number,\n\t\t_cursorCol: number,\n\t\titem: AutocompleteItem,\n\t\ttextBeforeCursor: string,\n\t\ttextAfterCursor: string,\n\t): { lines: string[]; cursorLine: number; cursorCol: number } {\n\t\tconst aliasMatch = textBeforeCursor.match(/^(\\s*)\\/(\\w*)$/);\n\t\tif (!aliasMatch) {\n\t\t\t// Fallback: just insert\n\t\t\tconst newLine = textBeforeCursor + item.value + textAfterCursor;\n\t\t\tconst newLines = [...lines];\n\t\t\tnewLines[cursorLine] = newLine;\n\t\t\treturn { lines: newLines, cursorLine, cursorCol: textBeforeCursor.length + item.value.length };\n\t\t}\n\n\t\tconst beforeAlias = aliasMatch[1] ?? \"\";\n\t\tconst insertText = `${item.value} `;\n\t\tconst newLine = beforeAlias + insertText + textAfterCursor;\n\t\tconst newLines = [...lines];\n\t\tnewLines[cursorLine] = newLine;\n\t\treturn { lines: newLines, cursorLine, cursorCol: beforeAlias.length + insertText.length };\n\t}\n}\n"]}