@akon-labs/nexus-cli 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 (1073) hide show
  1. package/CHANGELOG.md +5342 -0
  2. package/LICENSE +22 -0
  3. package/README.md +677 -0
  4. package/dist/bun/cli.d.ts +3 -0
  5. package/dist/bun/cli.d.ts.map +1 -0
  6. package/dist/bun/cli.js +11 -0
  7. package/dist/bun/cli.js.map +1 -0
  8. package/dist/bun/register-bedrock.d.ts +2 -0
  9. package/dist/bun/register-bedrock.d.ts.map +1 -0
  10. package/dist/bun/register-bedrock.js +4 -0
  11. package/dist/bun/register-bedrock.js.map +1 -0
  12. package/dist/bun/restore-sandbox-env.d.ts +17 -0
  13. package/dist/bun/restore-sandbox-env.d.ts.map +1 -0
  14. package/dist/bun/restore-sandbox-env.js +36 -0
  15. package/dist/bun/restore-sandbox-env.js.map +1 -0
  16. package/dist/cli/args.d.ts +59 -0
  17. package/dist/cli/args.d.ts.map +1 -0
  18. package/dist/cli/args.js +408 -0
  19. package/dist/cli/args.js.map +1 -0
  20. package/dist/cli/config-selector.d.ts +16 -0
  21. package/dist/cli/config-selector.d.ts.map +1 -0
  22. package/dist/cli/config-selector.js +31 -0
  23. package/dist/cli/config-selector.js.map +1 -0
  24. package/dist/cli/credential-print.d.ts +23 -0
  25. package/dist/cli/credential-print.d.ts.map +1 -0
  26. package/dist/cli/credential-print.js +118 -0
  27. package/dist/cli/credential-print.js.map +1 -0
  28. package/dist/cli/experimental/auth.d.ts +16 -0
  29. package/dist/cli/experimental/auth.d.ts.map +1 -0
  30. package/dist/cli/experimental/auth.js +13 -0
  31. package/dist/cli/experimental/auth.js.map +1 -0
  32. package/dist/cli/experimental/cli.d.ts +6 -0
  33. package/dist/cli/experimental/cli.d.ts.map +1 -0
  34. package/dist/cli/experimental/cli.js +5 -0
  35. package/dist/cli/experimental/cli.js.map +1 -0
  36. package/dist/cli/experimental/command-options.d.ts +17 -0
  37. package/dist/cli/experimental/command-options.d.ts.map +1 -0
  38. package/dist/cli/experimental/command-options.js +35 -0
  39. package/dist/cli/experimental/command-options.js.map +1 -0
  40. package/dist/cli/experimental/command.d.ts +63 -0
  41. package/dist/cli/experimental/command.d.ts.map +1 -0
  42. package/dist/cli/experimental/command.js +130 -0
  43. package/dist/cli/experimental/command.js.map +1 -0
  44. package/dist/cli/experimental/commands/client.d.ts +13 -0
  45. package/dist/cli/experimental/commands/client.d.ts.map +1 -0
  46. package/dist/cli/experimental/commands/client.js +25 -0
  47. package/dist/cli/experimental/commands/client.js.map +1 -0
  48. package/dist/cli/experimental/commands/pi.d.ts +15 -0
  49. package/dist/cli/experimental/commands/pi.d.ts.map +1 -0
  50. package/dist/cli/experimental/commands/pi.js +28 -0
  51. package/dist/cli/experimental/commands/pi.js.map +1 -0
  52. package/dist/cli/experimental/commands/server.d.ts +13 -0
  53. package/dist/cli/experimental/commands/server.d.ts.map +1 -0
  54. package/dist/cli/experimental/commands/server.js +25 -0
  55. package/dist/cli/experimental/commands/server.js.map +1 -0
  56. package/dist/cli/experimental/transport-address.d.ts +10 -0
  57. package/dist/cli/experimental/transport-address.d.ts.map +1 -0
  58. package/dist/cli/experimental/transport-address.js +38 -0
  59. package/dist/cli/experimental/transport-address.js.map +1 -0
  60. package/dist/cli/file-processor.d.ts +15 -0
  61. package/dist/cli/file-processor.d.ts.map +1 -0
  62. package/dist/cli/file-processor.js +70 -0
  63. package/dist/cli/file-processor.js.map +1 -0
  64. package/dist/cli/initial-message.d.ts +18 -0
  65. package/dist/cli/initial-message.d.ts.map +1 -0
  66. package/dist/cli/initial-message.js +22 -0
  67. package/dist/cli/initial-message.js.map +1 -0
  68. package/dist/cli/list-models.d.ts +9 -0
  69. package/dist/cli/list-models.d.ts.map +1 -0
  70. package/dist/cli/list-models.js +98 -0
  71. package/dist/cli/list-models.js.map +1 -0
  72. package/dist/cli/project-trust.d.ts +10 -0
  73. package/dist/cli/project-trust.d.ts.map +1 -0
  74. package/dist/cli/project-trust.js +48 -0
  75. package/dist/cli/project-trust.js.map +1 -0
  76. package/dist/cli/require-login.d.ts +30 -0
  77. package/dist/cli/require-login.d.ts.map +1 -0
  78. package/dist/cli/require-login.js +96 -0
  79. package/dist/cli/require-login.js.map +1 -0
  80. package/dist/cli/session-picker.d.ts +10 -0
  81. package/dist/cli/session-picker.d.ts.map +1 -0
  82. package/dist/cli/session-picker.js +36 -0
  83. package/dist/cli/session-picker.js.map +1 -0
  84. package/dist/cli/startup-ui.d.ts +20 -0
  85. package/dist/cli/startup-ui.d.ts.map +1 -0
  86. package/dist/cli/startup-ui.js +185 -0
  87. package/dist/cli/startup-ui.js.map +1 -0
  88. package/dist/cli.d.ts +3 -0
  89. package/dist/cli.d.ts.map +1 -0
  90. package/dist/cli.js +69740 -0
  91. package/dist/cli.js.map +1 -0
  92. package/dist/client/index.d.ts +3 -0
  93. package/dist/client/index.d.ts.map +1 -0
  94. package/dist/client/index.js +425 -0
  95. package/dist/client/index.js.map +1 -0
  96. package/dist/client/remote-session.d.ts +53 -0
  97. package/dist/client/remote-session.d.ts.map +1 -0
  98. package/dist/client/remote-session.js +340 -0
  99. package/dist/client/remote-session.js.map +1 -0
  100. package/dist/client/transcript.d.ts +12 -0
  101. package/dist/client/transcript.d.ts.map +1 -0
  102. package/dist/client/transcript.js +98 -0
  103. package/dist/client/transcript.js.map +1 -0
  104. package/dist/config.d.ts +99 -0
  105. package/dist/config.d.ts.map +1 -0
  106. package/dist/config.js +482 -0
  107. package/dist/config.js.map +1 -0
  108. package/dist/core/agent-session-runtime.d.ts +119 -0
  109. package/dist/core/agent-session-runtime.d.ts.map +1 -0
  110. package/dist/core/agent-session-runtime.js +309 -0
  111. package/dist/core/agent-session-runtime.js.map +1 -0
  112. package/dist/core/agent-session-services.d.ts +86 -0
  113. package/dist/core/agent-session-services.d.ts.map +1 -0
  114. package/dist/core/agent-session-services.js +134 -0
  115. package/dist/core/agent-session-services.js.map +1 -0
  116. package/dist/core/agent-session.d.ts +644 -0
  117. package/dist/core/agent-session.d.ts.map +1 -0
  118. package/dist/core/agent-session.js +2687 -0
  119. package/dist/core/agent-session.js.map +1 -0
  120. package/dist/core/auth-guidance.d.ts +5 -0
  121. package/dist/core/auth-guidance.d.ts.map +1 -0
  122. package/dist/core/auth-guidance.js +39 -0
  123. package/dist/core/auth-guidance.js.map +1 -0
  124. package/dist/core/auth-storage.d.ts +62 -0
  125. package/dist/core/auth-storage.d.ts.map +1 -0
  126. package/dist/core/auth-storage.js +350 -0
  127. package/dist/core/auth-storage.js.map +1 -0
  128. package/dist/core/bash-executor.d.ts +32 -0
  129. package/dist/core/bash-executor.d.ts.map +1 -0
  130. package/dist/core/bash-executor.js +111 -0
  131. package/dist/core/bash-executor.js.map +1 -0
  132. package/dist/core/cache-stats.d.ts +49 -0
  133. package/dist/core/cache-stats.d.ts.map +1 -0
  134. package/dist/core/cache-stats.js +101 -0
  135. package/dist/core/cache-stats.js.map +1 -0
  136. package/dist/core/compaction/branch-summarization.d.ts +98 -0
  137. package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  138. package/dist/core/compaction/branch-summarization.js +246 -0
  139. package/dist/core/compaction/branch-summarization.js.map +1 -0
  140. package/dist/core/compaction/compaction.d.ts +137 -0
  141. package/dist/core/compaction/compaction.d.ts.map +1 -0
  142. package/dist/core/compaction/compaction.js +645 -0
  143. package/dist/core/compaction/compaction.js.map +1 -0
  144. package/dist/core/compaction/index.d.ts +7 -0
  145. package/dist/core/compaction/index.d.ts.map +1 -0
  146. package/dist/core/compaction/index.js +7 -0
  147. package/dist/core/compaction/index.js.map +1 -0
  148. package/dist/core/compaction/utils.d.ts +38 -0
  149. package/dist/core/compaction/utils.d.ts.map +1 -0
  150. package/dist/core/compaction/utils.js +142 -0
  151. package/dist/core/compaction/utils.js.map +1 -0
  152. package/dist/core/defaults.d.ts +3 -0
  153. package/dist/core/defaults.d.ts.map +1 -0
  154. package/dist/core/defaults.js +2 -0
  155. package/dist/core/defaults.js.map +1 -0
  156. package/dist/core/diagnostics.d.ts +15 -0
  157. package/dist/core/diagnostics.d.ts.map +1 -0
  158. package/dist/core/diagnostics.js +2 -0
  159. package/dist/core/diagnostics.js.map +1 -0
  160. package/dist/core/event-bus.d.ts +9 -0
  161. package/dist/core/event-bus.d.ts.map +1 -0
  162. package/dist/core/event-bus.js +25 -0
  163. package/dist/core/event-bus.js.map +1 -0
  164. package/dist/core/exec.d.ts +29 -0
  165. package/dist/core/exec.d.ts.map +1 -0
  166. package/dist/core/exec.js +75 -0
  167. package/dist/core/exec.js.map +1 -0
  168. package/dist/core/experimental.d.ts +2 -0
  169. package/dist/core/experimental.d.ts.map +1 -0
  170. package/dist/core/experimental.js +5 -0
  171. package/dist/core/experimental.js.map +1 -0
  172. package/dist/core/export-html/ansi-to-html.d.ts +22 -0
  173. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  174. package/dist/core/export-html/ansi-to-html.js +249 -0
  175. package/dist/core/export-html/ansi-to-html.js.map +1 -0
  176. package/dist/core/export-html/index.d.ts +37 -0
  177. package/dist/core/export-html/index.d.ts.map +1 -0
  178. package/dist/core/export-html/index.js +226 -0
  179. package/dist/core/export-html/index.js.map +1 -0
  180. package/dist/core/export-html/template.css +1066 -0
  181. package/dist/core/export-html/template.html +55 -0
  182. package/dist/core/export-html/template.js +1864 -0
  183. package/dist/core/export-html/tool-renderer.d.ts +34 -0
  184. package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  185. package/dist/core/export-html/tool-renderer.js +108 -0
  186. package/dist/core/export-html/tool-renderer.js.map +1 -0
  187. package/dist/core/export-html/vendor/highlight.min.js +1213 -0
  188. package/dist/core/export-html/vendor/marked.min.js +78 -0
  189. package/dist/core/extensions/index.d.ts +12 -0
  190. package/dist/core/extensions/index.d.ts.map +1 -0
  191. package/dist/core/extensions/index.js +9 -0
  192. package/dist/core/extensions/index.js.map +1 -0
  193. package/dist/core/extensions/loader.d.ts +23 -0
  194. package/dist/core/extensions/loader.d.ts.map +1 -0
  195. package/dist/core/extensions/loader.js +581 -0
  196. package/dist/core/extensions/loader.js.map +1 -0
  197. package/dist/core/extensions/runner.d.ts +173 -0
  198. package/dist/core/extensions/runner.d.ts.map +1 -0
  199. package/dist/core/extensions/runner.js +967 -0
  200. package/dist/core/extensions/runner.js.map +1 -0
  201. package/dist/core/extensions/types.d.ts +1288 -0
  202. package/dist/core/extensions/types.d.ts.map +1 -0
  203. package/dist/core/extensions/types.js +45 -0
  204. package/dist/core/extensions/types.js.map +1 -0
  205. package/dist/core/extensions/wrapper.d.ts +20 -0
  206. package/dist/core/extensions/wrapper.d.ts.map +1 -0
  207. package/dist/core/extensions/wrapper.js +41 -0
  208. package/dist/core/extensions/wrapper.js.map +1 -0
  209. package/dist/core/footer-data-provider.d.ts +64 -0
  210. package/dist/core/footer-data-provider.d.ts.map +1 -0
  211. package/dist/core/footer-data-provider.js +338 -0
  212. package/dist/core/footer-data-provider.js.map +1 -0
  213. package/dist/core/graph-rail-store.d.ts +94 -0
  214. package/dist/core/graph-rail-store.d.ts.map +1 -0
  215. package/dist/core/graph-rail-store.js +86 -0
  216. package/dist/core/graph-rail-store.js.map +1 -0
  217. package/dist/core/http-dispatcher.d.ts +22 -0
  218. package/dist/core/http-dispatcher.d.ts.map +1 -0
  219. package/dist/core/http-dispatcher.js +96 -0
  220. package/dist/core/http-dispatcher.js.map +1 -0
  221. package/dist/core/index.d.ts +13 -0
  222. package/dist/core/index.d.ts.map +1 -0
  223. package/dist/core/index.js +13 -0
  224. package/dist/core/index.js.map +1 -0
  225. package/dist/core/keybindings.d.ts +395 -0
  226. package/dist/core/keybindings.d.ts.map +1 -0
  227. package/dist/core/keybindings.js +297 -0
  228. package/dist/core/keybindings.js.map +1 -0
  229. package/dist/core/messages.d.ts +77 -0
  230. package/dist/core/messages.d.ts.map +1 -0
  231. package/dist/core/messages.js +123 -0
  232. package/dist/core/messages.js.map +1 -0
  233. package/dist/core/model-config.d.ts +566 -0
  234. package/dist/core/model-config.d.ts.map +1 -0
  235. package/dist/core/model-config.js +253 -0
  236. package/dist/core/model-config.js.map +1 -0
  237. package/dist/core/model-registry.d.ts +45 -0
  238. package/dist/core/model-registry.d.ts.map +1 -0
  239. package/dist/core/model-registry.js +107 -0
  240. package/dist/core/model-registry.js.map +1 -0
  241. package/dist/core/model-resolver.d.ts +127 -0
  242. package/dist/core/model-resolver.d.ts.map +1 -0
  243. package/dist/core/model-resolver.js +541 -0
  244. package/dist/core/model-resolver.js.map +1 -0
  245. package/dist/core/model-runtime.d.ts +97 -0
  246. package/dist/core/model-runtime.d.ts.map +1 -0
  247. package/dist/core/model-runtime.js +594 -0
  248. package/dist/core/model-runtime.js.map +1 -0
  249. package/dist/core/models-dev-catalog.d.ts +63 -0
  250. package/dist/core/models-dev-catalog.d.ts.map +1 -0
  251. package/dist/core/models-dev-catalog.js +105 -0
  252. package/dist/core/models-dev-catalog.js.map +1 -0
  253. package/dist/core/models-store.d.ts +22 -0
  254. package/dist/core/models-store.d.ts.map +1 -0
  255. package/dist/core/models-store.js +114 -0
  256. package/dist/core/models-store.js.map +1 -0
  257. package/dist/core/observatory-cache.d.ts +16 -0
  258. package/dist/core/observatory-cache.d.ts.map +1 -0
  259. package/dist/core/observatory-cache.js +55 -0
  260. package/dist/core/observatory-cache.js.map +1 -0
  261. package/dist/core/output-guard.d.ts +7 -0
  262. package/dist/core/output-guard.d.ts.map +1 -0
  263. package/dist/core/output-guard.js +89 -0
  264. package/dist/core/output-guard.js.map +1 -0
  265. package/dist/core/package-manager.d.ts +213 -0
  266. package/dist/core/package-manager.d.ts.map +1 -0
  267. package/dist/core/package-manager.js +2169 -0
  268. package/dist/core/package-manager.js.map +1 -0
  269. package/dist/core/pi-manifest.d.ts +8 -0
  270. package/dist/core/pi-manifest.d.ts.map +1 -0
  271. package/dist/core/pi-manifest.js +25 -0
  272. package/dist/core/pi-manifest.js.map +1 -0
  273. package/dist/core/project-trust.d.ts +15 -0
  274. package/dist/core/project-trust.d.ts.map +1 -0
  275. package/dist/core/project-trust.js +59 -0
  276. package/dist/core/project-trust.js.map +1 -0
  277. package/dist/core/prompt-templates.d.ts +54 -0
  278. package/dist/core/prompt-templates.d.ts.map +1 -0
  279. package/dist/core/prompt-templates.js +236 -0
  280. package/dist/core/prompt-templates.js.map +1 -0
  281. package/dist/core/provider-attribution.d.ts +4 -0
  282. package/dist/core/provider-attribution.d.ts.map +1 -0
  283. package/dist/core/provider-attribution.js +73 -0
  284. package/dist/core/provider-attribution.js.map +1 -0
  285. package/dist/core/provider-composer.d.ts +56 -0
  286. package/dist/core/provider-composer.d.ts.map +1 -0
  287. package/dist/core/provider-composer.js +395 -0
  288. package/dist/core/provider-composer.js.map +1 -0
  289. package/dist/core/radius.d.ts +2 -0
  290. package/dist/core/radius.d.ts.map +1 -0
  291. package/dist/core/radius.js +2 -0
  292. package/dist/core/radius.js.map +1 -0
  293. package/dist/core/remote-catalog-provider.d.ts +5 -0
  294. package/dist/core/remote-catalog-provider.d.ts.map +1 -0
  295. package/dist/core/remote-catalog-provider.js +106 -0
  296. package/dist/core/remote-catalog-provider.js.map +1 -0
  297. package/dist/core/resolve-config-value.d.ts +30 -0
  298. package/dist/core/resolve-config-value.d.ts.map +1 -0
  299. package/dist/core/resolve-config-value.js +247 -0
  300. package/dist/core/resolve-config-value.js.map +1 -0
  301. package/dist/core/resource-loader.d.ts +221 -0
  302. package/dist/core/resource-loader.d.ts.map +1 -0
  303. package/dist/core/resource-loader.js +874 -0
  304. package/dist/core/resource-loader.js.map +1 -0
  305. package/dist/core/runtime-credentials.d.ts +15 -0
  306. package/dist/core/runtime-credentials.d.ts.map +1 -0
  307. package/dist/core/runtime-credentials.js +39 -0
  308. package/dist/core/runtime-credentials.js.map +1 -0
  309. package/dist/core/sdk.d.ts +106 -0
  310. package/dist/core/sdk.d.ts.map +1 -0
  311. package/dist/core/sdk.js +267 -0
  312. package/dist/core/sdk.js.map +1 -0
  313. package/dist/core/session-cwd.d.ts +19 -0
  314. package/dist/core/session-cwd.d.ts.map +1 -0
  315. package/dist/core/session-cwd.js +38 -0
  316. package/dist/core/session-cwd.js.map +1 -0
  317. package/dist/core/session-manager.d.ts +356 -0
  318. package/dist/core/session-manager.d.ts.map +1 -0
  319. package/dist/core/session-manager.js +1340 -0
  320. package/dist/core/session-manager.js.map +1 -0
  321. package/dist/core/settings-manager.d.ts +304 -0
  322. package/dist/core/settings-manager.d.ts.map +1 -0
  323. package/dist/core/settings-manager.js +912 -0
  324. package/dist/core/settings-manager.js.map +1 -0
  325. package/dist/core/skills.d.ts +60 -0
  326. package/dist/core/skills.d.ts.map +1 -0
  327. package/dist/core/skills.js +387 -0
  328. package/dist/core/skills.js.map +1 -0
  329. package/dist/core/slash-commands.d.ts +21 -0
  330. package/dist/core/slash-commands.d.ts.map +1 -0
  331. package/dist/core/slash-commands.js +39 -0
  332. package/dist/core/slash-commands.js.map +1 -0
  333. package/dist/core/source-info.d.ts +18 -0
  334. package/dist/core/source-info.d.ts.map +1 -0
  335. package/dist/core/source-info.js +19 -0
  336. package/dist/core/source-info.js.map +1 -0
  337. package/dist/core/system-prompt.d.ts +28 -0
  338. package/dist/core/system-prompt.d.ts.map +1 -0
  339. package/dist/core/system-prompt.js +130 -0
  340. package/dist/core/system-prompt.js.map +1 -0
  341. package/dist/core/telemetry.d.ts +3 -0
  342. package/dist/core/telemetry.d.ts.map +1 -0
  343. package/dist/core/telemetry.js +10 -0
  344. package/dist/core/telemetry.js.map +1 -0
  345. package/dist/core/timings.d.ts +6 -0
  346. package/dist/core/timings.d.ts.map +1 -0
  347. package/dist/core/timings.js +42 -0
  348. package/dist/core/timings.js.map +1 -0
  349. package/dist/core/tools/bash.d.ts +70 -0
  350. package/dist/core/tools/bash.d.ts.map +1 -0
  351. package/dist/core/tools/bash.js +389 -0
  352. package/dist/core/tools/bash.js.map +1 -0
  353. package/dist/core/tools/edit-diff.d.ts +106 -0
  354. package/dist/core/tools/edit-diff.d.ts.map +1 -0
  355. package/dist/core/tools/edit-diff.js +424 -0
  356. package/dist/core/tools/edit-diff.js.map +1 -0
  357. package/dist/core/tools/edit.d.ts +51 -0
  358. package/dist/core/tools/edit.d.ts.map +1 -0
  359. package/dist/core/tools/edit.js +284 -0
  360. package/dist/core/tools/edit.js.map +1 -0
  361. package/dist/core/tools/file-mutation-queue.d.ts +6 -0
  362. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  363. package/dist/core/tools/file-mutation-queue.js +52 -0
  364. package/dist/core/tools/file-mutation-queue.js.map +1 -0
  365. package/dist/core/tools/find.d.ts +38 -0
  366. package/dist/core/tools/find.d.ts.map +1 -0
  367. package/dist/core/tools/find.js +298 -0
  368. package/dist/core/tools/find.js.map +1 -0
  369. package/dist/core/tools/grep.d.ts +37 -0
  370. package/dist/core/tools/grep.d.ts.map +1 -0
  371. package/dist/core/tools/grep.js +304 -0
  372. package/dist/core/tools/grep.js.map +1 -0
  373. package/dist/core/tools/index.d.ts +43 -0
  374. package/dist/core/tools/index.d.ts.map +1 -0
  375. package/dist/core/tools/index.js +129 -0
  376. package/dist/core/tools/index.js.map +1 -0
  377. package/dist/core/tools/ls.d.ts +37 -0
  378. package/dist/core/tools/ls.d.ts.map +1 -0
  379. package/dist/core/tools/ls.js +167 -0
  380. package/dist/core/tools/ls.js.map +1 -0
  381. package/dist/core/tools/output-accumulator.d.ts +52 -0
  382. package/dist/core/tools/output-accumulator.d.ts.map +1 -0
  383. package/dist/core/tools/output-accumulator.js +185 -0
  384. package/dist/core/tools/output-accumulator.js.map +1 -0
  385. package/dist/core/tools/path-utils.d.ts +10 -0
  386. package/dist/core/tools/path-utils.d.ts.map +1 -0
  387. package/dist/core/tools/path-utils.js +99 -0
  388. package/dist/core/tools/path-utils.js.map +1 -0
  389. package/dist/core/tools/read.d.ts +35 -0
  390. package/dist/core/tools/read.d.ts.map +1 -0
  391. package/dist/core/tools/read.js +284 -0
  392. package/dist/core/tools/read.js.map +1 -0
  393. package/dist/core/tools/render-utils.d.ts +24 -0
  394. package/dist/core/tools/render-utils.d.ts.map +1 -0
  395. package/dist/core/tools/render-utils.js +65 -0
  396. package/dist/core/tools/render-utils.js.map +1 -0
  397. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  398. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  399. package/dist/core/tools/tool-definition-wrapper.js +36 -0
  400. package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
  401. package/dist/core/tools/truncate.d.ts +70 -0
  402. package/dist/core/tools/truncate.d.ts.map +1 -0
  403. package/dist/core/tools/truncate.js +215 -0
  404. package/dist/core/tools/truncate.js.map +1 -0
  405. package/dist/core/tools/websearch.d.ts +29 -0
  406. package/dist/core/tools/websearch.d.ts.map +1 -0
  407. package/dist/core/tools/websearch.js +145 -0
  408. package/dist/core/tools/websearch.js.map +1 -0
  409. package/dist/core/tools/write.d.ts +26 -0
  410. package/dist/core/tools/write.d.ts.map +1 -0
  411. package/dist/core/tools/write.js +197 -0
  412. package/dist/core/tools/write.js.map +1 -0
  413. package/dist/core/trust-manager.d.ts +36 -0
  414. package/dist/core/trust-manager.d.ts.map +1 -0
  415. package/dist/core/trust-manager.js +202 -0
  416. package/dist/core/trust-manager.js.map +1 -0
  417. package/dist/core/usage-totals.d.ts +19 -0
  418. package/dist/core/usage-totals.d.ts.map +1 -0
  419. package/dist/core/usage-totals.js +52 -0
  420. package/dist/core/usage-totals.js.map +1 -0
  421. package/dist/extensions/gitnexus/augment.d.ts +4 -0
  422. package/dist/extensions/gitnexus/augment.d.ts.map +1 -0
  423. package/dist/extensions/gitnexus/augment.js +60 -0
  424. package/dist/extensions/gitnexus/augment.js.map +1 -0
  425. package/dist/extensions/gitnexus/changes.d.ts +3 -0
  426. package/dist/extensions/gitnexus/changes.d.ts.map +1 -0
  427. package/dist/extensions/gitnexus/changes.js +58 -0
  428. package/dist/extensions/gitnexus/changes.js.map +1 -0
  429. package/dist/extensions/gitnexus/client.d.ts +39 -0
  430. package/dist/extensions/gitnexus/client.d.ts.map +1 -0
  431. package/dist/extensions/gitnexus/client.js +173 -0
  432. package/dist/extensions/gitnexus/client.js.map +1 -0
  433. package/dist/extensions/gitnexus/config.d.ts +25 -0
  434. package/dist/extensions/gitnexus/config.d.ts.map +1 -0
  435. package/dist/extensions/gitnexus/config.js +42 -0
  436. package/dist/extensions/gitnexus/config.js.map +1 -0
  437. package/dist/extensions/gitnexus/device-auth.d.ts +60 -0
  438. package/dist/extensions/gitnexus/device-auth.d.ts.map +1 -0
  439. package/dist/extensions/gitnexus/device-auth.js +130 -0
  440. package/dist/extensions/gitnexus/device-auth.js.map +1 -0
  441. package/dist/extensions/gitnexus/gateway.d.ts +57 -0
  442. package/dist/extensions/gitnexus/gateway.d.ts.map +1 -0
  443. package/dist/extensions/gitnexus/gateway.js +139 -0
  444. package/dist/extensions/gitnexus/gateway.js.map +1 -0
  445. package/dist/extensions/gitnexus/index.d.ts +14 -0
  446. package/dist/extensions/gitnexus/index.d.ts.map +1 -0
  447. package/dist/extensions/gitnexus/index.js +189 -0
  448. package/dist/extensions/gitnexus/index.js.map +1 -0
  449. package/dist/extensions/gitnexus/observatory.d.ts +13 -0
  450. package/dist/extensions/gitnexus/observatory.d.ts.map +1 -0
  451. package/dist/extensions/gitnexus/observatory.js +189 -0
  452. package/dist/extensions/gitnexus/observatory.js.map +1 -0
  453. package/dist/extensions/gitnexus/prompt.d.ts +11 -0
  454. package/dist/extensions/gitnexus/prompt.d.ts.map +1 -0
  455. package/dist/extensions/gitnexus/prompt.js +50 -0
  456. package/dist/extensions/gitnexus/prompt.js.map +1 -0
  457. package/dist/extensions/gitnexus/render.d.ts +61 -0
  458. package/dist/extensions/gitnexus/render.d.ts.map +1 -0
  459. package/dist/extensions/gitnexus/render.js +391 -0
  460. package/dist/extensions/gitnexus/render.js.map +1 -0
  461. package/dist/extensions/gitnexus/resolve.d.ts +22 -0
  462. package/dist/extensions/gitnexus/resolve.d.ts.map +1 -0
  463. package/dist/extensions/gitnexus/resolve.js +54 -0
  464. package/dist/extensions/gitnexus/resolve.js.map +1 -0
  465. package/dist/extensions/gitnexus/skills/gitnexus-debugging/SKILL.md +89 -0
  466. package/dist/extensions/gitnexus/skills/gitnexus-debugging/mcp.json +8 -0
  467. package/dist/extensions/gitnexus/skills/gitnexus-exploring/SKILL.md +78 -0
  468. package/dist/extensions/gitnexus/skills/gitnexus-exploring/mcp.json +8 -0
  469. package/dist/extensions/gitnexus/skills/gitnexus-guide/SKILL.md +64 -0
  470. package/dist/extensions/gitnexus/skills/gitnexus-guide/mcp.json +8 -0
  471. package/dist/extensions/gitnexus/skills/gitnexus-impact-analysis/SKILL.md +97 -0
  472. package/dist/extensions/gitnexus/skills/gitnexus-impact-analysis/mcp.json +8 -0
  473. package/dist/extensions/gitnexus/skills/gitnexus-pr-review/SKILL.md +163 -0
  474. package/dist/extensions/gitnexus/skills/gitnexus-refactoring/SKILL.md +121 -0
  475. package/dist/extensions/gitnexus/skills/gitnexus-refactoring/mcp.json +8 -0
  476. package/dist/extensions/gitnexus/tools.d.ts +15 -0
  477. package/dist/extensions/gitnexus/tools.d.ts.map +1 -0
  478. package/dist/extensions/gitnexus/tools.js +187 -0
  479. package/dist/extensions/gitnexus/tools.js.map +1 -0
  480. package/dist/extensions/index.d.ts +3 -0
  481. package/dist/extensions/index.d.ts.map +1 -0
  482. package/dist/extensions/index.js +10 -0
  483. package/dist/extensions/index.js.map +1 -0
  484. package/dist/extensions/llama/client.d.ts +61 -0
  485. package/dist/extensions/llama/client.d.ts.map +1 -0
  486. package/dist/extensions/llama/client.js +302 -0
  487. package/dist/extensions/llama/client.js.map +1 -0
  488. package/dist/extensions/llama/huggingface.d.ts +23 -0
  489. package/dist/extensions/llama/huggingface.d.ts.map +1 -0
  490. package/dist/extensions/llama/huggingface.js +141 -0
  491. package/dist/extensions/llama/huggingface.js.map +1 -0
  492. package/dist/extensions/llama/index.d.ts +3 -0
  493. package/dist/extensions/llama/index.d.ts.map +1 -0
  494. package/dist/extensions/llama/index.js +217 -0
  495. package/dist/extensions/llama/index.js.map +1 -0
  496. package/dist/extensions/llama/provider.d.ts +10 -0
  497. package/dist/extensions/llama/provider.d.ts.map +1 -0
  498. package/dist/extensions/llama/provider.js +121 -0
  499. package/dist/extensions/llama/provider.js.map +1 -0
  500. package/dist/extensions/llama/ui.d.ts +42 -0
  501. package/dist/extensions/llama/ui.d.ts.map +1 -0
  502. package/dist/extensions/llama/ui.js +416 -0
  503. package/dist/extensions/llama/ui.js.map +1 -0
  504. package/dist/extensions/mcp/client.d.ts +86 -0
  505. package/dist/extensions/mcp/client.d.ts.map +1 -0
  506. package/dist/extensions/mcp/client.js +275 -0
  507. package/dist/extensions/mcp/client.js.map +1 -0
  508. package/dist/extensions/mcp/config.d.ts +41 -0
  509. package/dist/extensions/mcp/config.d.ts.map +1 -0
  510. package/dist/extensions/mcp/config.js +85 -0
  511. package/dist/extensions/mcp/config.js.map +1 -0
  512. package/dist/extensions/mcp/index.d.ts +18 -0
  513. package/dist/extensions/mcp/index.d.ts.map +1 -0
  514. package/dist/extensions/mcp/index.js +95 -0
  515. package/dist/extensions/mcp/index.js.map +1 -0
  516. package/dist/index.d.ts +35 -0
  517. package/dist/index.d.ts.map +1 -0
  518. package/dist/index.js +69874 -0
  519. package/dist/index.js.map +1 -0
  520. package/dist/main.d.ts +12 -0
  521. package/dist/main.d.ts.map +1 -0
  522. package/dist/main.js +792 -0
  523. package/dist/main.js.map +1 -0
  524. package/dist/migrations.d.ts +33 -0
  525. package/dist/migrations.d.ts.map +1 -0
  526. package/dist/migrations.js +281 -0
  527. package/dist/migrations.js.map +1 -0
  528. package/dist/modes/index.d.ts +10 -0
  529. package/dist/modes/index.d.ts.map +1 -0
  530. package/dist/modes/index.js +8 -0
  531. package/dist/modes/index.js.map +1 -0
  532. package/dist/modes/interactive/components/assistant-message.d.ts +32 -0
  533. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  534. package/dist/modes/interactive/components/assistant-message.js +177 -0
  535. package/dist/modes/interactive/components/assistant-message.js.map +1 -0
  536. package/dist/modes/interactive/components/bash-execution.d.ts +34 -0
  537. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  538. package/dist/modes/interactive/components/bash-execution.js +175 -0
  539. package/dist/modes/interactive/components/bash-execution.js.map +1 -0
  540. package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  541. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  542. package/dist/modes/interactive/components/bordered-loader.js +54 -0
  543. package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  544. package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  545. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  546. package/dist/modes/interactive/components/branch-summary-message.js +44 -0
  547. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  548. package/dist/modes/interactive/components/command-palette.d.ts +12 -0
  549. package/dist/modes/interactive/components/command-palette.d.ts.map +1 -0
  550. package/dist/modes/interactive/components/command-palette.js +67 -0
  551. package/dist/modes/interactive/components/command-palette.js.map +1 -0
  552. package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  553. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  554. package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
  555. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  556. package/dist/modes/interactive/components/config-selector.d.ts +102 -0
  557. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  558. package/dist/modes/interactive/components/config-selector.js +761 -0
  559. package/dist/modes/interactive/components/config-selector.js.map +1 -0
  560. package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  561. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  562. package/dist/modes/interactive/components/countdown-timer.js +33 -0
  563. package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  564. package/dist/modes/interactive/components/custom-editor.d.ts +23 -0
  565. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  566. package/dist/modes/interactive/components/custom-editor.js +85 -0
  567. package/dist/modes/interactive/components/custom-editor.js.map +1 -0
  568. package/dist/modes/interactive/components/custom-entry.d.ts +19 -0
  569. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -0
  570. package/dist/modes/interactive/components/custom-entry.js +52 -0
  571. package/dist/modes/interactive/components/custom-entry.js.map +1 -0
  572. package/dist/modes/interactive/components/custom-message.d.ts +22 -0
  573. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  574. package/dist/modes/interactive/components/custom-message.js +87 -0
  575. package/dist/modes/interactive/components/custom-message.js.map +1 -0
  576. package/dist/modes/interactive/components/dialog-frame.d.ts +37 -0
  577. package/dist/modes/interactive/components/dialog-frame.d.ts.map +1 -0
  578. package/dist/modes/interactive/components/dialog-frame.js +53 -0
  579. package/dist/modes/interactive/components/dialog-frame.js.map +1 -0
  580. package/dist/modes/interactive/components/diff.d.ts +12 -0
  581. package/dist/modes/interactive/components/diff.d.ts.map +1 -0
  582. package/dist/modes/interactive/components/diff.js +133 -0
  583. package/dist/modes/interactive/components/diff.js.map +1 -0
  584. package/dist/modes/interactive/components/dynamic-border.d.ts +19 -0
  585. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  586. package/dist/modes/interactive/components/dynamic-border.js +36 -0
  587. package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  588. package/dist/modes/interactive/components/extension-editor.d.ts +21 -0
  589. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  590. package/dist/modes/interactive/components/extension-editor.js +98 -0
  591. package/dist/modes/interactive/components/extension-editor.js.map +1 -0
  592. package/dist/modes/interactive/components/extension-input.d.ts +23 -0
  593. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  594. package/dist/modes/interactive/components/extension-input.js +61 -0
  595. package/dist/modes/interactive/components/extension-input.js.map +1 -0
  596. package/dist/modes/interactive/components/extension-selector.d.ts +26 -0
  597. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  598. package/dist/modes/interactive/components/extension-selector.js +83 -0
  599. package/dist/modes/interactive/components/extension-selector.js.map +1 -0
  600. package/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
  601. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -0
  602. package/dist/modes/interactive/components/first-time-setup.js +103 -0
  603. package/dist/modes/interactive/components/first-time-setup.js.map +1 -0
  604. package/dist/modes/interactive/components/footer.d.ts +30 -0
  605. package/dist/modes/interactive/components/footer.d.ts.map +1 -0
  606. package/dist/modes/interactive/components/footer.js +108 -0
  607. package/dist/modes/interactive/components/footer.js.map +1 -0
  608. package/dist/modes/interactive/components/graph-rail.d.ts +44 -0
  609. package/dist/modes/interactive/components/graph-rail.d.ts.map +1 -0
  610. package/dist/modes/interactive/components/graph-rail.js +332 -0
  611. package/dist/modes/interactive/components/graph-rail.js.map +1 -0
  612. package/dist/modes/interactive/components/index.d.ts +33 -0
  613. package/dist/modes/interactive/components/index.d.ts.map +1 -0
  614. package/dist/modes/interactive/components/index.js +34 -0
  615. package/dist/modes/interactive/components/index.js.map +1 -0
  616. package/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
  617. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  618. package/dist/modes/interactive/components/keybinding-hints.js +36 -0
  619. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  620. package/dist/modes/interactive/components/landing-panel.d.ts +14 -0
  621. package/dist/modes/interactive/components/landing-panel.d.ts.map +1 -0
  622. package/dist/modes/interactive/components/landing-panel.js +141 -0
  623. package/dist/modes/interactive/components/landing-panel.js.map +1 -0
  624. package/dist/modes/interactive/components/login-dialog.d.ts +52 -0
  625. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  626. package/dist/modes/interactive/components/login-dialog.js +188 -0
  627. package/dist/modes/interactive/components/login-dialog.js.map +1 -0
  628. package/dist/modes/interactive/components/markdown-transform.d.ts +3 -0
  629. package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -0
  630. package/dist/modes/interactive/components/markdown-transform.js +19 -0
  631. package/dist/modes/interactive/components/markdown-transform.js.map +1 -0
  632. package/dist/modes/interactive/components/mermaid.d.ts +11 -0
  633. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
  634. package/dist/modes/interactive/components/mermaid.js +80 -0
  635. package/dist/modes/interactive/components/mermaid.js.map +1 -0
  636. package/dist/modes/interactive/components/message-layout.d.ts +4 -0
  637. package/dist/modes/interactive/components/message-layout.d.ts.map +1 -0
  638. package/dist/modes/interactive/components/message-layout.js +4 -0
  639. package/dist/modes/interactive/components/message-layout.js.map +1 -0
  640. package/dist/modes/interactive/components/model-selector.d.ts +54 -0
  641. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  642. package/dist/modes/interactive/components/model-selector.js +325 -0
  643. package/dist/modes/interactive/components/model-selector.js.map +1 -0
  644. package/dist/modes/interactive/components/nexus-logo.d.ts +25 -0
  645. package/dist/modes/interactive/components/nexus-logo.d.ts.map +1 -0
  646. package/dist/modes/interactive/components/nexus-logo.js +115 -0
  647. package/dist/modes/interactive/components/nexus-logo.js.map +1 -0
  648. package/dist/modes/interactive/components/oauth-selector.d.ts +33 -0
  649. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  650. package/dist/modes/interactive/components/oauth-selector.js +163 -0
  651. package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  652. package/dist/modes/interactive/components/panel.d.ts +7 -0
  653. package/dist/modes/interactive/components/panel.d.ts.map +1 -0
  654. package/dist/modes/interactive/components/panel.js +18 -0
  655. package/dist/modes/interactive/components/panel.js.map +1 -0
  656. package/dist/modes/interactive/components/response-separator.d.ts +13 -0
  657. package/dist/modes/interactive/components/response-separator.d.ts.map +1 -0
  658. package/dist/modes/interactive/components/response-separator.js +23 -0
  659. package/dist/modes/interactive/components/response-separator.js.map +1 -0
  660. package/dist/modes/interactive/components/scoped-models-selector.d.ts +46 -0
  661. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  662. package/dist/modes/interactive/components/scoped-models-selector.js +328 -0
  663. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  664. package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  665. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  666. package/dist/modes/interactive/components/session-selector-search.js +155 -0
  667. package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  668. package/dist/modes/interactive/components/session-selector.d.ts +99 -0
  669. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  670. package/dist/modes/interactive/components/session-selector.js +887 -0
  671. package/dist/modes/interactive/components/session-selector.js.map +1 -0
  672. package/dist/modes/interactive/components/settings-selector.d.ts +81 -0
  673. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  674. package/dist/modes/interactive/components/settings-selector.js +613 -0
  675. package/dist/modes/interactive/components/settings-selector.js.map +1 -0
  676. package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  677. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  678. package/dist/modes/interactive/components/show-images-selector.js +39 -0
  679. package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  680. package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  681. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  682. package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
  683. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  684. package/dist/modes/interactive/components/status-indicator.d.ts +37 -0
  685. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -0
  686. package/dist/modes/interactive/components/status-indicator.js +116 -0
  687. package/dist/modes/interactive/components/status-indicator.js.map +1 -0
  688. package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  689. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  690. package/dist/modes/interactive/components/theme-selector.js +50 -0
  691. package/dist/modes/interactive/components/theme-selector.js.map +1 -0
  692. package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  693. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  694. package/dist/modes/interactive/components/thinking-selector.js +52 -0
  695. package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  696. package/dist/modes/interactive/components/tool-execution.d.ts +70 -0
  697. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  698. package/dist/modes/interactive/components/tool-execution.js +384 -0
  699. package/dist/modes/interactive/components/tool-execution.js.map +1 -0
  700. package/dist/modes/interactive/components/tree-selector.d.ts +94 -0
  701. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  702. package/dist/modes/interactive/components/tree-selector.js +1245 -0
  703. package/dist/modes/interactive/components/tree-selector.js.map +1 -0
  704. package/dist/modes/interactive/components/trust-selector.d.ts +23 -0
  705. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -0
  706. package/dist/modes/interactive/components/trust-selector.js +91 -0
  707. package/dist/modes/interactive/components/trust-selector.js.map +1 -0
  708. package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  709. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  710. package/dist/modes/interactive/components/user-message-selector.js +114 -0
  711. package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  712. package/dist/modes/interactive/components/user-message.d.ts +17 -0
  713. package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  714. package/dist/modes/interactive/components/user-message.js +51 -0
  715. package/dist/modes/interactive/components/user-message.js.map +1 -0
  716. package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  717. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  718. package/dist/modes/interactive/components/visual-truncate.js +33 -0
  719. package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  720. package/dist/modes/interactive/external-editor.d.ts +12 -0
  721. package/dist/modes/interactive/external-editor.d.ts.map +1 -0
  722. package/dist/modes/interactive/external-editor.js +37 -0
  723. package/dist/modes/interactive/external-editor.js.map +1 -0
  724. package/dist/modes/interactive/interactive-mode.d.ts +436 -0
  725. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  726. package/dist/modes/interactive/interactive-mode.js +5462 -0
  727. package/dist/modes/interactive/interactive-mode.js.map +1 -0
  728. package/dist/modes/interactive/model-search.d.ts +12 -0
  729. package/dist/modes/interactive/model-search.d.ts.map +1 -0
  730. package/dist/modes/interactive/model-search.js +15 -0
  731. package/dist/modes/interactive/model-search.js.map +1 -0
  732. package/dist/modes/interactive/theme/brand.d.ts +38 -0
  733. package/dist/modes/interactive/theme/brand.d.ts.map +1 -0
  734. package/dist/modes/interactive/theme/brand.js +108 -0
  735. package/dist/modes/interactive/theme/brand.js.map +1 -0
  736. package/dist/modes/interactive/theme/catppuccin-mocha.json +66 -0
  737. package/dist/modes/interactive/theme/dark.json +93 -0
  738. package/dist/modes/interactive/theme/dracula.json +66 -0
  739. package/dist/modes/interactive/theme/ember.json +85 -0
  740. package/dist/modes/interactive/theme/gruvbox.json +66 -0
  741. package/dist/modes/interactive/theme/light.json +91 -0
  742. package/dist/modes/interactive/theme/nord.json +66 -0
  743. package/dist/modes/interactive/theme/theme-controller.d.ts +32 -0
  744. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -0
  745. package/dist/modes/interactive/theme/theme-controller.js +111 -0
  746. package/dist/modes/interactive/theme/theme-controller.js.map +1 -0
  747. package/dist/modes/interactive/theme/theme-schema.json +344 -0
  748. package/dist/modes/interactive/theme/theme.d.ts +129 -0
  749. package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  750. package/dist/modes/interactive/theme/theme.js +1101 -0
  751. package/dist/modes/interactive/theme/theme.js.map +1 -0
  752. package/dist/modes/interactive/theme/tokyonight.json +66 -0
  753. package/dist/modes/json-event.d.ts +28 -0
  754. package/dist/modes/json-event.d.ts.map +1 -0
  755. package/dist/modes/json-event.js +12 -0
  756. package/dist/modes/json-event.js.map +1 -0
  757. package/dist/modes/print-mode.d.ts +28 -0
  758. package/dist/modes/print-mode.d.ts.map +1 -0
  759. package/dist/modes/print-mode.js +153 -0
  760. package/dist/modes/print-mode.js.map +1 -0
  761. package/dist/modes/rpc/jsonl.d.ts +17 -0
  762. package/dist/modes/rpc/jsonl.d.ts.map +1 -0
  763. package/dist/modes/rpc/jsonl.js +49 -0
  764. package/dist/modes/rpc/jsonl.js.map +1 -0
  765. package/dist/modes/rpc/rpc-client.d.ts +247 -0
  766. package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  767. package/dist/modes/rpc/rpc-client.js +488 -0
  768. package/dist/modes/rpc/rpc-client.js.map +1 -0
  769. package/dist/modes/rpc/rpc-mode.d.ts +20 -0
  770. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  771. package/dist/modes/rpc/rpc-mode.js +654 -0
  772. package/dist/modes/rpc/rpc-mode.js.map +1 -0
  773. package/dist/modes/rpc/rpc-types.d.ts +457 -0
  774. package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  775. package/dist/modes/rpc/rpc-types.js +8 -0
  776. package/dist/modes/rpc/rpc-types.js.map +1 -0
  777. package/dist/package-manager-cli.d.ts +8 -0
  778. package/dist/package-manager-cli.d.ts.map +1 -0
  779. package/dist/package-manager-cli.js +777 -0
  780. package/dist/package-manager-cli.js.map +1 -0
  781. package/dist/rpc-entry.d.ts +3 -0
  782. package/dist/rpc-entry.d.ts.map +1 -0
  783. package/dist/rpc-entry.js +69740 -0
  784. package/dist/rpc-entry.js.map +1 -0
  785. package/dist/utils/abort.d.ts +5 -0
  786. package/dist/utils/abort.d.ts.map +1 -0
  787. package/dist/utils/abort.js +48 -0
  788. package/dist/utils/abort.js.map +1 -0
  789. package/dist/utils/ansi.d.ts +2 -0
  790. package/dist/utils/ansi.d.ts.map +1 -0
  791. package/dist/utils/ansi.js +52 -0
  792. package/dist/utils/ansi.js.map +1 -0
  793. package/dist/utils/child-process.d.ts +18 -0
  794. package/dist/utils/child-process.d.ts.map +1 -0
  795. package/dist/utils/child-process.js +106 -0
  796. package/dist/utils/child-process.js.map +1 -0
  797. package/dist/utils/clipboard-image.d.ts +11 -0
  798. package/dist/utils/clipboard-image.d.ts.map +1 -0
  799. package/dist/utils/clipboard-image.js +245 -0
  800. package/dist/utils/clipboard-image.js.map +1 -0
  801. package/dist/utils/clipboard-native.d.ts +11 -0
  802. package/dist/utils/clipboard-native.d.ts.map +1 -0
  803. package/dist/utils/clipboard-native.js +20 -0
  804. package/dist/utils/clipboard-native.js.map +1 -0
  805. package/dist/utils/clipboard.d.ts +4 -0
  806. package/dist/utils/clipboard.d.ts.map +1 -0
  807. package/dist/utils/clipboard.js +161 -0
  808. package/dist/utils/clipboard.js.map +1 -0
  809. package/dist/utils/deprecation.d.ts +4 -0
  810. package/dist/utils/deprecation.d.ts.map +1 -0
  811. package/dist/utils/deprecation.js +13 -0
  812. package/dist/utils/deprecation.js.map +1 -0
  813. package/dist/utils/exif-orientation.d.ts +5 -0
  814. package/dist/utils/exif-orientation.d.ts.map +1 -0
  815. package/dist/utils/exif-orientation.js +158 -0
  816. package/dist/utils/exif-orientation.js.map +1 -0
  817. package/dist/utils/frontmatter.d.ts +8 -0
  818. package/dist/utils/frontmatter.d.ts.map +1 -0
  819. package/dist/utils/frontmatter.js +26 -0
  820. package/dist/utils/frontmatter.js.map +1 -0
  821. package/dist/utils/fs-watch.d.ts +5 -0
  822. package/dist/utils/fs-watch.d.ts.map +1 -0
  823. package/dist/utils/fs-watch.js +25 -0
  824. package/dist/utils/fs-watch.js.map +1 -0
  825. package/dist/utils/git.d.ts +26 -0
  826. package/dist/utils/git.d.ts.map +1 -0
  827. package/dist/utils/git.js +195 -0
  828. package/dist/utils/git.js.map +1 -0
  829. package/dist/utils/html.d.ts +7 -0
  830. package/dist/utils/html.d.ts.map +1 -0
  831. package/dist/utils/html.js +40 -0
  832. package/dist/utils/html.js.map +1 -0
  833. package/dist/utils/image-convert.d.ts +10 -0
  834. package/dist/utils/image-convert.d.ts.map +1 -0
  835. package/dist/utils/image-convert.js +45 -0
  836. package/dist/utils/image-convert.js.map +1 -0
  837. package/dist/utils/image-process.d.ts +18 -0
  838. package/dist/utils/image-process.d.ts.map +1 -0
  839. package/dist/utils/image-process.js +83 -0
  840. package/dist/utils/image-process.js.map +1 -0
  841. package/dist/utils/image-resize-core.d.ts +30 -0
  842. package/dist/utils/image-resize-core.d.ts.map +1 -0
  843. package/dist/utils/image-resize-core.js +124 -0
  844. package/dist/utils/image-resize-core.js.map +1 -0
  845. package/dist/utils/image-resize-worker.d.ts +2 -0
  846. package/dist/utils/image-resize-worker.d.ts.map +1 -0
  847. package/dist/utils/image-resize-worker.js +31 -0
  848. package/dist/utils/image-resize-worker.js.map +1 -0
  849. package/dist/utils/image-resize.d.ts +16 -0
  850. package/dist/utils/image-resize.d.ts.map +1 -0
  851. package/dist/utils/image-resize.js +97 -0
  852. package/dist/utils/image-resize.js.map +1 -0
  853. package/dist/utils/json.d.ts +3 -0
  854. package/dist/utils/json.d.ts.map +1 -0
  855. package/dist/utils/json.js +7 -0
  856. package/dist/utils/json.js.map +1 -0
  857. package/dist/utils/management-http.d.ts +23 -0
  858. package/dist/utils/management-http.d.ts.map +1 -0
  859. package/dist/utils/management-http.js +50 -0
  860. package/dist/utils/management-http.js.map +1 -0
  861. package/dist/utils/mime.d.ts +3 -0
  862. package/dist/utils/mime.d.ts.map +1 -0
  863. package/dist/utils/mime.js +110 -0
  864. package/dist/utils/mime.js.map +1 -0
  865. package/dist/utils/open-browser.d.ts +9 -0
  866. package/dist/utils/open-browser.d.ts.map +1 -0
  867. package/dist/utils/open-browser.js +22 -0
  868. package/dist/utils/open-browser.js.map +1 -0
  869. package/dist/utils/paths.d.ts +34 -0
  870. package/dist/utils/paths.d.ts.map +1 -0
  871. package/dist/utils/paths.js +114 -0
  872. package/dist/utils/paths.js.map +1 -0
  873. package/dist/utils/photon.d.ts +21 -0
  874. package/dist/utils/photon.d.ts.map +1 -0
  875. package/dist/utils/photon.js +121 -0
  876. package/dist/utils/photon.js.map +1 -0
  877. package/dist/utils/pi-user-agent.d.ts +2 -0
  878. package/dist/utils/pi-user-agent.d.ts.map +1 -0
  879. package/dist/utils/pi-user-agent.js +5 -0
  880. package/dist/utils/pi-user-agent.js.map +1 -0
  881. package/dist/utils/shell.d.ts +31 -0
  882. package/dist/utils/shell.d.ts.map +1 -0
  883. package/dist/utils/shell.js +202 -0
  884. package/dist/utils/shell.js.map +1 -0
  885. package/dist/utils/sleep.d.ts +5 -0
  886. package/dist/utils/sleep.d.ts.map +1 -0
  887. package/dist/utils/sleep.js +17 -0
  888. package/dist/utils/sleep.js.map +1 -0
  889. package/dist/utils/syntax-highlight.d.ts +12 -0
  890. package/dist/utils/syntax-highlight.d.ts.map +1 -0
  891. package/dist/utils/syntax-highlight.js +118 -0
  892. package/dist/utils/syntax-highlight.js.map +1 -0
  893. package/dist/utils/tool-result-images.d.ts +19 -0
  894. package/dist/utils/tool-result-images.d.ts.map +1 -0
  895. package/dist/utils/tool-result-images.js +45 -0
  896. package/dist/utils/tool-result-images.js.map +1 -0
  897. package/dist/utils/tools-manager.d.ts +3 -0
  898. package/dist/utils/tools-manager.d.ts.map +1 -0
  899. package/dist/utils/tools-manager.js +326 -0
  900. package/dist/utils/tools-manager.js.map +1 -0
  901. package/dist/utils/version-check.d.ts +19 -0
  902. package/dist/utils/version-check.d.ts.map +1 -0
  903. package/dist/utils/version-check.js +98 -0
  904. package/dist/utils/version-check.js.map +1 -0
  905. package/dist/utils/windows-self-update.d.ts +3 -0
  906. package/dist/utils/windows-self-update.d.ts.map +1 -0
  907. package/dist/utils/windows-self-update.js +77 -0
  908. package/dist/utils/windows-self-update.js.map +1 -0
  909. package/docs/compaction.md +401 -0
  910. package/docs/containerization.md +111 -0
  911. package/docs/custom-provider.md +774 -0
  912. package/docs/development.md +71 -0
  913. package/docs/docs.json +156 -0
  914. package/docs/environment-variables.md +98 -0
  915. package/docs/extensions.md +2987 -0
  916. package/docs/images/doom-extension.png +0 -0
  917. package/docs/images/exy.png +0 -0
  918. package/docs/images/interactive-mode.png +0 -0
  919. package/docs/images/tree-view.png +0 -0
  920. package/docs/index.md +84 -0
  921. package/docs/json.md +91 -0
  922. package/docs/keybindings.md +226 -0
  923. package/docs/llama-cpp.md +99 -0
  924. package/docs/models.md +565 -0
  925. package/docs/packages.md +228 -0
  926. package/docs/prompt-templates.md +96 -0
  927. package/docs/providers.md +310 -0
  928. package/docs/quickstart.md +167 -0
  929. package/docs/rpc.md +1578 -0
  930. package/docs/sdk.md +1205 -0
  931. package/docs/security.md +59 -0
  932. package/docs/session-format.md +438 -0
  933. package/docs/sessions.md +145 -0
  934. package/docs/settings.md +322 -0
  935. package/docs/shell-aliases.md +13 -0
  936. package/docs/skills.md +231 -0
  937. package/docs/terminal-setup.md +142 -0
  938. package/docs/termux.md +127 -0
  939. package/docs/themes.md +299 -0
  940. package/docs/tmux.md +63 -0
  941. package/docs/tui.md +942 -0
  942. package/docs/usage.md +305 -0
  943. package/docs/windows.md +17 -0
  944. package/examples/README.md +25 -0
  945. package/examples/extensions/README.md +213 -0
  946. package/examples/extensions/auto-commit-on-exit.ts +49 -0
  947. package/examples/extensions/bash-spawn-hook.ts +30 -0
  948. package/examples/extensions/bookmark.ts +50 -0
  949. package/examples/extensions/border-status-editor.ts +150 -0
  950. package/examples/extensions/built-in-tool-renderer.ts +249 -0
  951. package/examples/extensions/claude-rules.ts +86 -0
  952. package/examples/extensions/commands.ts +72 -0
  953. package/examples/extensions/confirm-destructive.ts +59 -0
  954. package/examples/extensions/custom-compaction.ts +117 -0
  955. package/examples/extensions/custom-footer.ts +64 -0
  956. package/examples/extensions/custom-header.ts +73 -0
  957. package/examples/extensions/custom-provider-anthropic/index.ts +611 -0
  958. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
  959. package/examples/extensions/custom-provider-anthropic/package.json +19 -0
  960. package/examples/extensions/custom-provider-gitlab-duo/index.ts +405 -0
  961. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
  962. package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
  963. package/examples/extensions/dirty-repo-guard.ts +56 -0
  964. package/examples/extensions/doom-overlay/README.md +46 -0
  965. package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
  966. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  967. package/examples/extensions/doom-overlay/doom/build.sh +152 -0
  968. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
  969. package/examples/extensions/doom-overlay/doom-component.ts +132 -0
  970. package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
  971. package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
  972. package/examples/extensions/doom-overlay/index.ts +74 -0
  973. package/examples/extensions/doom-overlay/wad-finder.ts +55 -0
  974. package/examples/extensions/dynamic-resources/SKILL.md +8 -0
  975. package/examples/extensions/dynamic-resources/dynamic.json +79 -0
  976. package/examples/extensions/dynamic-resources/dynamic.md +5 -0
  977. package/examples/extensions/dynamic-resources/index.ts +15 -0
  978. package/examples/extensions/dynamic-tools.ts +74 -0
  979. package/examples/extensions/entry-renderer.ts +41 -0
  980. package/examples/extensions/event-bus.ts +43 -0
  981. package/examples/extensions/file-trigger.ts +41 -0
  982. package/examples/extensions/git-checkpoint.ts +53 -0
  983. package/examples/extensions/git-merge-and-resolve.ts +115 -0
  984. package/examples/extensions/github-issue-autocomplete.ts +185 -0
  985. package/examples/extensions/gondolin/index.ts +531 -0
  986. package/examples/extensions/gondolin/package-lock.json +185 -0
  987. package/examples/extensions/gondolin/package.json +19 -0
  988. package/examples/extensions/handoff.ts +190 -0
  989. package/examples/extensions/hello.ts +26 -0
  990. package/examples/extensions/hidden-thinking-label.ts +53 -0
  991. package/examples/extensions/inline-bash.ts +94 -0
  992. package/examples/extensions/input-transform-streaming.ts +39 -0
  993. package/examples/extensions/input-transform.ts +43 -0
  994. package/examples/extensions/interactive-shell.ts +196 -0
  995. package/examples/extensions/kimi-deferred-tools.ts +61 -0
  996. package/examples/extensions/mac-system-theme.ts +47 -0
  997. package/examples/extensions/message-renderer.ts +59 -0
  998. package/examples/extensions/minimal-mode.ts +426 -0
  999. package/examples/extensions/modal-editor.ts +85 -0
  1000. package/examples/extensions/model-status.ts +31 -0
  1001. package/examples/extensions/notify.ts +55 -0
  1002. package/examples/extensions/overlay-qa-tests.ts +1450 -0
  1003. package/examples/extensions/overlay-test.ts +153 -0
  1004. package/examples/extensions/permission-gate.ts +34 -0
  1005. package/examples/extensions/pirate.ts +47 -0
  1006. package/examples/extensions/plan-mode/README.md +66 -0
  1007. package/examples/extensions/plan-mode/index.ts +390 -0
  1008. package/examples/extensions/plan-mode/utils.ts +168 -0
  1009. package/examples/extensions/preset.ts +436 -0
  1010. package/examples/extensions/project-trust.ts +64 -0
  1011. package/examples/extensions/prompt-customizer.ts +97 -0
  1012. package/examples/extensions/protected-paths.ts +30 -0
  1013. package/examples/extensions/provider-payload.ts +18 -0
  1014. package/examples/extensions/qna.ts +118 -0
  1015. package/examples/extensions/question.ts +286 -0
  1016. package/examples/extensions/questionnaire.ts +448 -0
  1017. package/examples/extensions/rainbow-editor.ts +88 -0
  1018. package/examples/extensions/reload-runtime.ts +37 -0
  1019. package/examples/extensions/rpc-demo.ts +118 -0
  1020. package/examples/extensions/sandbox/index.ts +321 -0
  1021. package/examples/extensions/sandbox/package-lock.json +92 -0
  1022. package/examples/extensions/sandbox/package.json +19 -0
  1023. package/examples/extensions/send-user-message.ts +97 -0
  1024. package/examples/extensions/session-name.ts +27 -0
  1025. package/examples/extensions/shutdown-command.ts +63 -0
  1026. package/examples/extensions/snake.ts +343 -0
  1027. package/examples/extensions/space-invaders.ts +560 -0
  1028. package/examples/extensions/ssh.ts +220 -0
  1029. package/examples/extensions/status-line.ts +32 -0
  1030. package/examples/extensions/structured-output.ts +65 -0
  1031. package/examples/extensions/subagent/README.md +175 -0
  1032. package/examples/extensions/subagent/agents/planner.md +37 -0
  1033. package/examples/extensions/subagent/agents/reviewer.md +35 -0
  1034. package/examples/extensions/subagent/agents/scout.md +50 -0
  1035. package/examples/extensions/subagent/agents/worker.md +24 -0
  1036. package/examples/extensions/subagent/agents.ts +126 -0
  1037. package/examples/extensions/subagent/index.ts +1015 -0
  1038. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
  1039. package/examples/extensions/subagent/prompts/implement.md +10 -0
  1040. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
  1041. package/examples/extensions/summarize.ts +199 -0
  1042. package/examples/extensions/system-prompt-header.ts +17 -0
  1043. package/examples/extensions/tic-tac-toe.ts +1008 -0
  1044. package/examples/extensions/timed-confirm.ts +70 -0
  1045. package/examples/extensions/titlebar-spinner.ts +58 -0
  1046. package/examples/extensions/todo.ts +297 -0
  1047. package/examples/extensions/tool-override.ts +144 -0
  1048. package/examples/extensions/tools.ts +146 -0
  1049. package/examples/extensions/trigger-compact.ts +50 -0
  1050. package/examples/extensions/truncated-tool.ts +195 -0
  1051. package/examples/extensions/widget-placement.ts +9 -0
  1052. package/examples/extensions/with-deps/index.ts +32 -0
  1053. package/examples/extensions/with-deps/package-lock.json +31 -0
  1054. package/examples/extensions/with-deps/package.json +22 -0
  1055. package/examples/extensions/working-indicator.ts +123 -0
  1056. package/examples/extensions/working-message-test.ts +25 -0
  1057. package/examples/rpc-extension-ui.ts +641 -0
  1058. package/examples/sdk/01-minimal.ts +26 -0
  1059. package/examples/sdk/02-custom-model.ts +49 -0
  1060. package/examples/sdk/03-custom-prompt.ts +75 -0
  1061. package/examples/sdk/04-skills.ts +55 -0
  1062. package/examples/sdk/05-tools.ts +48 -0
  1063. package/examples/sdk/06-extensions.ts +99 -0
  1064. package/examples/sdk/07-context-files.ts +47 -0
  1065. package/examples/sdk/08-prompt-templates.ts +51 -0
  1066. package/examples/sdk/09-api-keys-and-oauth.ts +34 -0
  1067. package/examples/sdk/10-settings.ts +53 -0
  1068. package/examples/sdk/11-sessions.ts +52 -0
  1069. package/examples/sdk/12-full-control.ts +74 -0
  1070. package/examples/sdk/13-session-runtime.ts +67 -0
  1071. package/examples/sdk/README.md +140 -0
  1072. package/npm-shrinkwrap.json +1817 -0
  1073. package/package.json +145 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-resolver.d.ts","sourceRoot":"","sources":["../../src/core/model-resolver.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EACN,KAAK,GAAG,EACR,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,KAAK,EAEV,MAAM,uBAAuB,CAAC;AAK/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,gDAAgD;AAChD,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAwCjE,CAAC;AAEF,MAAM,WAAW,WAAW;IAC3B,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,kGAAkG;IAClG,aAAa,CAAC,EAAE,aAAa,CAAC;CAC9B;AAeD;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC3C,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAC3B,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAuCxB;AAsCD,MAAM,WAAW,iBAAiB;IACjC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAC9B,6EAA6E;IAC7E,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAkBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAC7B,OAAO,CAAC,EAAE;IAAE,iCAAiC,CAAC,EAAE,OAAO,CAAA;CAAE,GACvD,iBAAiB,CAiDnB;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,UAAU,GAAG,wBAAwB,CAAC;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACvC,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACpC;AAED,wBAAgB,2BAA2B,CAC1C,QAAQ,EAAE,MAAM,EAAE,EAClB,MAAM,EAAE,SAAS,KAAK,CAAC,GAAG,CAAC,EAAE,GAC3B,uBAAuB,CA6EzB;AAED,wBAAsB,gCAAgC,CACrD,QAAQ,EAAE,MAAM,EAAE,EAClB,YAAY,EAAE,YAAY,EAC1B,OAAO,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CAElC;AAED,wBAAsB,iBAAiB,CACtC,QAAQ,EAAE,MAAM,EAAE,EAClB,YAAY,EAAE,YAAY,EAC1B,OAAO,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,WAAW,EAAE,CAAC,CAMxB;AAED,MAAM,WAAW,qBAAqB;IACrC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAC9B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,YAAY,EAAE,YAAY,CAAC;CAC3B,GAAG,qBAAqB,CAmMxB;AAED,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAC9B,aAAa,EAAE,aAAa,CAAC;IAC7B,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,aAAa,CAAC;IACrC,YAAY,EAAE,YAAY,CAAC;CAC3B,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA6D9B;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC5C,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,mBAAmB,EAAE,OAAO,EAC5B,YAAY,EAAE,YAAY,GACxB,OAAO,CAAC;IAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,CAiBjF","sourcesContent":["/**\n * Model resolution, scoping, and initial selection\n */\n\nimport type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport {\n\ttype Api,\n\ttype AuthOperationOptions,\n\ttype KnownProvider,\n\ttype Model,\n\tmodelsAreEqual,\n} from \"@earendil-works/pi-ai\";\nimport chalk from \"chalk\";\nimport { minimatch } from \"minimatch\";\nimport { isValidThinkingLevel } from \"../cli/args.ts\";\nimport { DEFAULT_THINKING_LEVEL } from \"./defaults.ts\";\nimport type { ModelRuntime } from \"./model-runtime.ts\";\n\n/** Default model IDs for each known provider */\nexport const defaultModelPerProvider: Record<KnownProvider, string> = {\n\t\"amazon-bedrock\": \"us.anthropic.claude-opus-4-6-v1\",\n\t\"ant-ling\": \"Ring-2.6-1T\",\n\tanthropic: \"claude-opus-4-8\",\n\topenai: \"gpt-5.6-sol\",\n\t\"azure-openai-responses\": \"gpt-5.4\",\n\t\"openai-codex\": \"gpt-5.5\",\n\tradius: \"auto\",\n\tnvidia: \"nvidia/nemotron-3-super-120b-a12b\",\n\tdeepseek: \"deepseek-v4-pro\",\n\tgoogle: \"gemini-3.1-pro-preview\",\n\t\"google-vertex\": \"gemini-3.1-pro-preview\",\n\t\"github-copilot\": \"gpt-5.4\",\n\topenrouter: \"moonshotai/kimi-k2.6\",\n\t\"vercel-ai-gateway\": \"zai/glm-5.1\",\n\txai: \"grok-4.5\",\n\tgroq: \"openai/gpt-oss-120b\",\n\tcerebras: \"zai-glm-4.7\",\n\tzai: \"glm-5.1\",\n\t\"zai-coding-cn\": \"glm-5.1\",\n\tmistral: \"devstral-medium-latest\",\n\tminimax: \"MiniMax-M2.7\",\n\t\"minimax-cn\": \"MiniMax-M2.7\",\n\tmoonshotai: \"kimi-k2.6\",\n\t\"moonshotai-cn\": \"kimi-k2.6\",\n\thuggingface: \"moonshotai/Kimi-K2.6\",\n\tfireworks: \"accounts/fireworks/models/kimi-k2p6\",\n\ttogether: \"moonshotai/Kimi-K2.6\",\n\tbaseten: \"zai-org/GLM-5.2\",\n\topencode: \"kimi-k2.6\",\n\t\"opencode-go\": \"kimi-k2.6\",\n\t\"kimi-coding\": \"kimi-for-coding\",\n\t\"cloudflare-workers-ai\": \"@cf/moonshotai/kimi-k2.6\",\n\t\"cloudflare-ai-gateway\": \"workers-ai/@cf/moonshotai/kimi-k2.6\",\n\t\"qwen-token-plan\": \"qwen3.7-max\",\n\t\"qwen-token-plan-cn\": \"qwen3.7-max\",\n\txiaomi: \"mimo-v2.5-pro\",\n\t\"xiaomi-token-plan-cn\": \"mimo-v2.5-pro\",\n\t\"xiaomi-token-plan-ams\": \"mimo-v2.5-pro\",\n\t\"xiaomi-token-plan-sgp\": \"mimo-v2.5-pro\",\n};\n\nexport interface ScopedModel {\n\tmodel: Model<Api>;\n\t/** Thinking level if explicitly specified in pattern (e.g., \"model:high\"), undefined otherwise */\n\tthinkingLevel?: ThinkingLevel;\n}\n\n/**\n * Helper to check if a model ID looks like an alias (no date suffix)\n * Dates are typically in format: -20241022 or -20250929\n */\nfunction isAlias(id: string): boolean {\n\t// Check if ID ends with -latest\n\tif (id.endsWith(\"-latest\")) return true;\n\n\t// Check if ID ends with a date pattern (-YYYYMMDD)\n\tconst datePattern = /-\\d{8}$/;\n\treturn !datePattern.test(id);\n}\n\n/**\n * Find an exact model reference match.\n * Supports either a bare model id or a canonical provider/modelId reference.\n * When matching by bare id, ambiguous matches across providers are rejected.\n */\nexport function findExactModelReferenceMatch(\n\tmodelReference: string,\n\tavailableModels: Model<Api>[],\n): Model<Api> | undefined {\n\tconst trimmedReference = modelReference.trim();\n\tif (!trimmedReference) {\n\t\treturn undefined;\n\t}\n\n\tconst normalizedReference = trimmedReference.toLowerCase();\n\n\tconst canonicalMatches = availableModels.filter(\n\t\t(model) => `${model.provider}/${model.id}`.toLowerCase() === normalizedReference,\n\t);\n\tif (canonicalMatches.length === 1) {\n\t\treturn canonicalMatches[0];\n\t}\n\tif (canonicalMatches.length > 1) {\n\t\treturn undefined;\n\t}\n\n\tconst slashIndex = trimmedReference.indexOf(\"/\");\n\tif (slashIndex !== -1) {\n\t\tconst provider = trimmedReference.substring(0, slashIndex).trim();\n\t\tconst modelId = trimmedReference.substring(slashIndex + 1).trim();\n\t\tif (provider && modelId) {\n\t\t\tconst providerMatches = availableModels.filter(\n\t\t\t\t(model) =>\n\t\t\t\t\tmodel.provider.toLowerCase() === provider.toLowerCase() &&\n\t\t\t\t\tmodel.id.toLowerCase() === modelId.toLowerCase(),\n\t\t\t);\n\t\t\tif (providerMatches.length === 1) {\n\t\t\t\treturn providerMatches[0];\n\t\t\t}\n\t\t\tif (providerMatches.length > 1) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst idMatches = availableModels.filter((model) => model.id.toLowerCase() === normalizedReference);\n\treturn idMatches.length === 1 ? idMatches[0] : undefined;\n}\n\n/**\n * Try to match a pattern to a model from the available models list.\n * Returns the matched model or undefined if no match found.\n */\nfunction tryMatchModel(modelPattern: string, availableModels: Model<Api>[]): Model<Api> | undefined {\n\tconst exactMatch = findExactModelReferenceMatch(modelPattern, availableModels);\n\tif (exactMatch) {\n\t\treturn exactMatch;\n\t}\n\n\t// No exact match - fall back to partial matching\n\tconst matches = availableModels.filter(\n\t\t(m) =>\n\t\t\tm.id.toLowerCase().includes(modelPattern.toLowerCase()) ||\n\t\t\tm.name?.toLowerCase().includes(modelPattern.toLowerCase()),\n\t);\n\n\tif (matches.length === 0) {\n\t\treturn undefined;\n\t}\n\n\t// Separate into aliases and dated versions\n\tconst aliases = matches.filter((m) => isAlias(m.id));\n\tconst datedVersions = matches.filter((m) => !isAlias(m.id));\n\n\tif (aliases.length > 0) {\n\t\t// Prefer alias - if multiple aliases, pick the one that sorts highest\n\t\taliases.sort((a, b) => b.id.localeCompare(a.id));\n\t\treturn aliases[0];\n\t} else {\n\t\t// No alias found, pick latest dated version\n\t\tdatedVersions.sort((a, b) => b.id.localeCompare(a.id));\n\t\treturn datedVersions[0];\n\t}\n}\n\nexport interface ParsedModelResult {\n\tmodel: Model<Api> | undefined;\n\t/** Thinking level if explicitly specified in pattern, undefined otherwise */\n\tthinkingLevel?: ThinkingLevel;\n\twarning: string | undefined;\n}\n\nfunction buildFallbackModel(provider: string, modelId: string, availableModels: Model<Api>[]): Model<Api> | undefined {\n\tconst providerModels = availableModels.filter((m) => m.provider === provider);\n\tif (providerModels.length === 0) return undefined;\n\n\tconst defaultId = defaultModelPerProvider[provider as KnownProvider];\n\tconst baseModel = defaultId\n\t\t? (providerModels.find((m) => m.id === defaultId) ?? providerModels[0])\n\t\t: providerModels[0];\n\n\treturn {\n\t\t...baseModel,\n\t\tid: modelId,\n\t\tname: modelId,\n\t};\n}\n\n/**\n * Parse a pattern to extract model and thinking level.\n * Handles models with colons in their IDs (e.g., OpenRouter's :exacto suffix).\n *\n * Algorithm:\n * 1. Try to match full pattern as a model\n * 2. If found, return it with \"off\" thinking level\n * 3. If not found and has colons, split on last colon:\n * - If suffix is valid thinking level, use it and recurse on prefix\n * - If suffix is invalid, warn and recurse on prefix with \"off\"\n *\n * @internal Exported for testing\n */\nexport function parseModelPattern(\n\tpattern: string,\n\tavailableModels: Model<Api>[],\n\toptions?: { allowInvalidThinkingLevelFallback?: boolean },\n): ParsedModelResult {\n\t// Try exact match first\n\tconst exactMatch = tryMatchModel(pattern, availableModels);\n\tif (exactMatch) {\n\t\treturn { model: exactMatch, thinkingLevel: undefined, warning: undefined };\n\t}\n\n\t// No match - try splitting on last colon if present\n\tconst lastColonIndex = pattern.lastIndexOf(\":\");\n\tif (lastColonIndex === -1) {\n\t\t// No colons, pattern simply doesn't match any model\n\t\treturn { model: undefined, thinkingLevel: undefined, warning: undefined };\n\t}\n\n\tconst prefix = pattern.substring(0, lastColonIndex);\n\tconst suffix = pattern.substring(lastColonIndex + 1);\n\n\tif (isValidThinkingLevel(suffix)) {\n\t\t// Valid thinking level - recurse on prefix and use this level\n\t\tconst result = parseModelPattern(prefix, availableModels, options);\n\t\tif (result.model) {\n\t\t\t// Only use this thinking level if no warning from inner recursion\n\t\t\treturn {\n\t\t\t\tmodel: result.model,\n\t\t\t\tthinkingLevel: result.warning ? undefined : suffix,\n\t\t\t\twarning: result.warning,\n\t\t\t};\n\t\t}\n\t\treturn result;\n\t} else {\n\t\t// Invalid suffix\n\t\tconst allowFallback = options?.allowInvalidThinkingLevelFallback ?? true;\n\t\tif (!allowFallback) {\n\t\t\t// In strict mode (CLI --model parsing), treat it as part of the model id and fail.\n\t\t\t// This avoids accidentally resolving to a different model.\n\t\t\treturn { model: undefined, thinkingLevel: undefined, warning: undefined };\n\t\t}\n\n\t\t// Scope mode: recurse on prefix and warn\n\t\tconst result = parseModelPattern(prefix, availableModels, options);\n\t\tif (result.model) {\n\t\t\treturn {\n\t\t\t\tmodel: result.model,\n\t\t\t\tthinkingLevel: undefined,\n\t\t\t\twarning: `Invalid thinking level \"${suffix}\" in pattern \"${pattern}\". Using default instead.`,\n\t\t\t};\n\t\t}\n\t\treturn result;\n\t}\n}\n\n/**\n * Resolve model patterns to actual Model objects with optional thinking levels\n * Format: \"pattern:level\" where :level is optional\n * For each pattern, finds all matching models and picks the best version:\n * 1. Prefer alias (e.g., claude-sonnet-4-5) over dated versions (claude-sonnet-4-5-20250929)\n * 2. If no alias, pick the latest dated version\n *\n * Supports models with colons in their IDs (e.g., OpenRouter's model:exacto).\n * The algorithm tries to match the full pattern first, then progressively\n * strips colon-suffixes to find a match.\n */\nexport interface ModelScopeDiagnostic {\n\ttype: \"warning\";\n\tcode: \"no-match\" | \"invalid-thinking-level\";\n\tmessage: string;\n\tpattern: string;\n}\n\nexport interface ResolveModelScopeResult {\n\tscopedModels: ScopedModel[];\n\tdiagnostics: ModelScopeDiagnostic[];\n}\n\nexport function resolveModelScopeFromModels(\n\tpatterns: string[],\n\tmodels: readonly Model<Api>[],\n): ResolveModelScopeResult {\n\tconst availableModels = [...models];\n\tconst scopedModels: ScopedModel[] = [];\n\tconst diagnostics: ModelScopeDiagnostic[] = [];\n\n\tfor (const pattern of patterns) {\n\t\t// Check if pattern contains glob characters\n\t\tif (pattern.includes(\"*\") || pattern.includes(\"?\") || pattern.includes(\"[\")) {\n\t\t\t// Extract optional thinking level suffix (e.g., \"provider/*:high\")\n\t\t\tconst colonIdx = pattern.lastIndexOf(\":\");\n\t\t\tlet globPattern = pattern;\n\t\t\tlet thinkingLevel: ThinkingLevel | undefined;\n\n\t\t\tif (colonIdx !== -1) {\n\t\t\t\tconst suffix = pattern.substring(colonIdx + 1);\n\t\t\t\tif (isValidThinkingLevel(suffix)) {\n\t\t\t\t\tthinkingLevel = suffix;\n\t\t\t\t\tglobPattern = pattern.substring(0, colonIdx);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst exactMatch = findExactModelReferenceMatch(globPattern, availableModels);\n\t\t\tif (exactMatch) {\n\t\t\t\tif (!scopedModels.find((sm) => modelsAreEqual(sm.model, exactMatch))) {\n\t\t\t\t\tscopedModels.push({ model: exactMatch, thinkingLevel });\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Match against \"provider/modelId\" format OR just model ID\n\t\t\t// This allows \"*sonnet*\" to match without requiring \"anthropic/*sonnet*\"\n\t\t\tconst matchingModels = availableModels.filter((m) => {\n\t\t\t\tconst fullId = `${m.provider}/${m.id}`;\n\t\t\t\treturn minimatch(fullId, globPattern, { nocase: true }) || minimatch(m.id, globPattern, { nocase: true });\n\t\t\t});\n\n\t\t\tif (matchingModels.length === 0) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\ttype: \"warning\",\n\t\t\t\t\tcode: \"no-match\",\n\t\t\t\t\tmessage: `No models match pattern \"${pattern}\"`,\n\t\t\t\t\tpattern,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tfor (const model of matchingModels) {\n\t\t\t\tif (!scopedModels.find((sm) => modelsAreEqual(sm.model, model))) {\n\t\t\t\t\tscopedModels.push({ model, thinkingLevel });\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst { model, thinkingLevel, warning } = parseModelPattern(pattern, availableModels);\n\n\t\tif (warning) {\n\t\t\tdiagnostics.push({ type: \"warning\", code: \"invalid-thinking-level\", message: warning, pattern });\n\t\t}\n\n\t\tif (!model) {\n\t\t\tdiagnostics.push({\n\t\t\t\ttype: \"warning\",\n\t\t\t\tcode: \"no-match\",\n\t\t\t\tmessage: `No models match pattern \"${pattern}\"`,\n\t\t\t\tpattern,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Avoid duplicates\n\t\tif (!scopedModels.find((sm) => modelsAreEqual(sm.model, model))) {\n\t\t\tscopedModels.push({ model, thinkingLevel });\n\t\t}\n\t}\n\n\treturn { scopedModels, diagnostics };\n}\n\nexport async function resolveModelScopeWithDiagnostics(\n\tpatterns: string[],\n\tmodelRuntime: ModelRuntime,\n\toptions?: AuthOperationOptions,\n): Promise<ResolveModelScopeResult> {\n\treturn resolveModelScopeFromModels(patterns, await modelRuntime.getAvailable(undefined, options));\n}\n\nexport async function resolveModelScope(\n\tpatterns: string[],\n\tmodelRuntime: ModelRuntime,\n\toptions?: AuthOperationOptions,\n): Promise<ScopedModel[]> {\n\tconst { scopedModels, diagnostics } = await resolveModelScopeWithDiagnostics(patterns, modelRuntime, options);\n\tfor (const diagnostic of diagnostics) {\n\t\tconsole.warn(chalk.yellow(`Warning: ${diagnostic.message}`));\n\t}\n\treturn scopedModels;\n}\n\nexport interface ResolveCliModelResult {\n\tmodel: Model<Api> | undefined;\n\tthinkingLevel?: ThinkingLevel;\n\twarning: string | undefined;\n\t/**\n\t * Error message suitable for CLI display.\n\t * When set, model will be undefined.\n\t */\n\terror: string | undefined;\n}\n\n/**\n * Resolve a single model from CLI flags.\n *\n * Supports:\n * - --provider <provider> --model <pattern>\n * - --model <provider>/<pattern>\n * - Fuzzy matching (same rules as model scoping: exact id, then partial id/name)\n *\n * Note: This does not apply the thinking level by itself, but it may *parse* and\n * return a thinking level from \"<pattern>:<thinking>\" so the caller can apply it.\n */\nexport function resolveCliModel(options: {\n\tcliProvider?: string;\n\tcliModel?: string;\n\tcliThinking?: ThinkingLevel;\n\tmodelRuntime: ModelRuntime;\n}): ResolveCliModelResult {\n\tconst { cliProvider, cliModel, cliThinking, modelRuntime } = options;\n\n\tif (!cliModel) {\n\t\treturn { model: undefined, warning: undefined, error: undefined };\n\t}\n\n\t// Important: use *all* models here, not just models with pre-configured auth.\n\t// This allows \"--api-key\" to be used for first-time setup.\n\tconst availableModels = [...modelRuntime.getModels()];\n\tif (availableModels.length === 0) {\n\t\treturn {\n\t\t\tmodel: undefined,\n\t\t\twarning: undefined,\n\t\t\terror: \"No models available. Check your installation or add models to models.json.\",\n\t\t};\n\t}\n\n\t// Build canonical provider lookup (case-insensitive)\n\tconst providerMap = new Map<string, string>();\n\tfor (const m of availableModels) {\n\t\tproviderMap.set(m.provider.toLowerCase(), m.provider);\n\t}\n\n\tlet provider = cliProvider ? providerMap.get(cliProvider.toLowerCase()) : undefined;\n\tif (cliProvider && !provider) {\n\t\treturn {\n\t\t\tmodel: undefined,\n\t\t\twarning: undefined,\n\t\t\terror: `Unknown provider \"${cliProvider}\". Use --list-models to see available providers/models.`,\n\t\t};\n\t}\n\n\t// If no explicit --provider, try to interpret \"provider/model\" format first.\n\t// When the prefix before the first slash matches a known provider, prefer that\n\t// interpretation over matching models whose IDs literally contain slashes\n\t// (e.g. \"zai/glm-5\" should resolve to provider=zai, model=glm-5, not to a\n\t// vercel-ai-gateway model with id \"zai/glm-5\").\n\tlet pattern = cliModel;\n\tlet inferredProvider = false;\n\n\tif (!provider) {\n\t\tconst slashIndex = cliModel.indexOf(\"/\");\n\t\tif (slashIndex !== -1) {\n\t\t\tconst maybeProvider = cliModel.substring(0, slashIndex);\n\t\t\tconst canonical = providerMap.get(maybeProvider.toLowerCase());\n\t\t\tif (canonical) {\n\t\t\t\tprovider = canonical;\n\t\t\t\tpattern = cliModel.substring(slashIndex + 1);\n\t\t\t\tinferredProvider = true;\n\t\t\t}\n\t\t}\n\t}\n\n\t// If no provider was inferred from the slash, try exact matches without provider inference.\n\t// This handles models whose IDs naturally contain slashes (e.g. OpenRouter-style IDs).\n\t// Bare exact IDs can exist in multiple providers, so do not choose by catalog order.\n\t// Prefer the sole authenticated provider when there is one; otherwise require an\n\t// explicit provider to avoid silently selecting an unusable provider.\n\tif (!provider) {\n\t\tconst lower = cliModel.toLowerCase();\n\t\tconst exactMatches = availableModels.filter(\n\t\t\t(m) => m.id.toLowerCase() === lower || `${m.provider}/${m.id}`.toLowerCase() === lower,\n\t\t);\n\t\tif (exactMatches.length === 1) {\n\t\t\treturn { model: exactMatches[0], warning: undefined, thinkingLevel: undefined, error: undefined };\n\t\t}\n\t\tif (exactMatches.length > 1) {\n\t\t\tconst authenticatedExactMatches = exactMatches.filter((m) => modelRuntime.hasConfiguredAuth(m.provider));\n\t\t\tif (authenticatedExactMatches.length === 1) {\n\t\t\t\treturn {\n\t\t\t\t\tmodel: authenticatedExactMatches[0],\n\t\t\t\t\twarning: undefined,\n\t\t\t\t\tthinkingLevel: undefined,\n\t\t\t\t\terror: undefined,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst matches = exactMatches\n\t\t\t\t.map((m) => `${m.provider}/${m.id}`)\n\t\t\t\t.sort((a, b) => a.localeCompare(b))\n\t\t\t\t.join(\", \");\n\t\t\tconst authHint =\n\t\t\t\tauthenticatedExactMatches.length === 0\n\t\t\t\t\t? \"No matching provider is authenticated.\"\n\t\t\t\t\t: \"More than one matching provider is authenticated.\";\n\t\t\treturn {\n\t\t\t\tmodel: undefined,\n\t\t\t\twarning: undefined,\n\t\t\t\tthinkingLevel: undefined,\n\t\t\t\terror: `Model \"${cliModel}\" is ambiguous across providers: ${matches}. ${authHint} Use --provider or provider/model.`,\n\t\t\t};\n\t\t}\n\t}\n\n\tif (cliProvider && provider) {\n\t\t// If both were provided, tolerate --model <provider>/<pattern> by stripping the provider prefix\n\t\tconst prefix = `${provider}/`;\n\t\tif (cliModel.toLowerCase().startsWith(prefix.toLowerCase())) {\n\t\t\tpattern = cliModel.substring(prefix.length);\n\t\t}\n\t}\n\n\tconst candidates = provider ? availableModels.filter((m) => m.provider === provider) : availableModels;\n\tconst { model, thinkingLevel, warning } = parseModelPattern(pattern, candidates, {\n\t\tallowInvalidThinkingLevelFallback: false,\n\t});\n\n\tif (model) {\n\t\t// If provider inference matched an unauthenticated provider/model pair, prefer\n\t\t// one exact raw model-id match that is authenticated. This keeps\n\t\t// \"provider/model\" syntax preferred when usable, but handles models whose\n\t\t// literal id starts with a known provider name (for example\n\t\t// commandcode model id \"xiaomi/mimo-v2.5-pro\").\n\t\tif (inferredProvider) {\n\t\t\tconst rawExactMatches = availableModels.filter(\n\t\t\t\t(m) => m.id.toLowerCase() === cliModel.toLowerCase() && !modelsAreEqual(m, model),\n\t\t\t);\n\t\t\tif (rawExactMatches.length > 0 && !modelRuntime.hasConfiguredAuth(model.provider)) {\n\t\t\t\tconst authenticatedRawMatches = rawExactMatches.filter((m) => modelRuntime.hasConfiguredAuth(m.provider));\n\t\t\t\tif (authenticatedRawMatches.length === 1) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmodel: authenticatedRawMatches[0],\n\t\t\t\t\t\tthinkingLevel: undefined,\n\t\t\t\t\t\twarning: undefined,\n\t\t\t\t\t\terror: undefined,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn { model, thinkingLevel, warning, error: undefined };\n\t}\n\n\t// If we inferred a provider from the slash but found no match within that provider,\n\t// fall back to matching the full input as a raw model id across all models.\n\t// This handles OpenRouter-style IDs like \"openai/gpt-4o:extended\" where \"openai\"\n\t// looks like a provider but the full string is actually a model id on openrouter.\n\tif (inferredProvider) {\n\t\tconst lower = cliModel.toLowerCase();\n\t\tconst exact = availableModels.find(\n\t\t\t(m) => m.id.toLowerCase() === lower || `${m.provider}/${m.id}`.toLowerCase() === lower,\n\t\t);\n\t\tif (exact) {\n\t\t\treturn { model: exact, warning: undefined, thinkingLevel: undefined, error: undefined };\n\t\t}\n\t\t// Also try parseModelPattern on the full input against all models\n\t\tconst fallback = parseModelPattern(cliModel, availableModels, {\n\t\t\tallowInvalidThinkingLevelFallback: false,\n\t\t});\n\t\tif (fallback.model) {\n\t\t\treturn {\n\t\t\t\tmodel: fallback.model,\n\t\t\t\tthinkingLevel: fallback.thinkingLevel,\n\t\t\t\twarning: fallback.warning,\n\t\t\t\terror: undefined,\n\t\t\t};\n\t\t}\n\t}\n\n\tif (provider) {\n\t\t// Parse thinking level suffix from the pattern before building the fallback model,\n\t\t// but only when --thinking is not explicitly provided.\n\t\t// e.g. \"zai-org/GLM-5.1-FP8:high\" → modelId=\"zai-org/GLM-5.1-FP8\", fallbackThinking=\"high\"\n\t\tlet fallbackPattern = pattern;\n\t\tlet fallbackThinking: ThinkingLevel | undefined;\n\t\tif (!cliThinking) {\n\t\t\tconst lastColon = pattern.lastIndexOf(\":\");\n\t\t\tif (lastColon !== -1) {\n\t\t\t\tconst suffix = pattern.substring(lastColon + 1);\n\t\t\t\tif (isValidThinkingLevel(suffix)) {\n\t\t\t\t\tfallbackPattern = pattern.substring(0, lastColon);\n\t\t\t\t\tfallbackThinking = suffix;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst fallbackModel = buildFallbackModel(provider, fallbackPattern, availableModels);\n\t\tif (fallbackModel) {\n\t\t\tconst requestedThinking = cliThinking ?? fallbackThinking;\n\t\t\tconst model =\n\t\t\t\trequestedThinking && requestedThinking !== \"off\" ? { ...fallbackModel, reasoning: true } : fallbackModel;\n\t\t\tconst fallbackWarning = warning\n\t\t\t\t? `${warning} Model \"${fallbackPattern}\" not found for provider \"${provider}\". Using custom model id.`\n\t\t\t\t: `Model \"${fallbackPattern}\" not found for provider \"${provider}\". Using custom model id.`;\n\t\t\treturn { model, thinkingLevel: fallbackThinking, warning: fallbackWarning, error: undefined };\n\t\t}\n\t}\n\n\tconst display = provider ? `${provider}/${pattern}` : cliModel;\n\treturn {\n\t\tmodel: undefined,\n\t\tthinkingLevel: undefined,\n\t\twarning,\n\t\terror: `Model \"${display}\" not found. Use --list-models to see available models.`,\n\t};\n}\n\nexport interface InitialModelResult {\n\tmodel: Model<Api> | undefined;\n\tthinkingLevel: ThinkingLevel;\n\tfallbackMessage: string | undefined;\n}\n\n/**\n * Find the initial model to use based on priority:\n * 1. CLI args (provider + model)\n * 2. First model from scoped models (if not continuing/resuming)\n * 3. Saved default from settings\n * 4. Auto mode (gitnexus/auto), when the signed-in account is entitled to it\n *\n * Step 4 is not a provider fallback: the Auto entry is nexus's own product\n * surface, registered only for accounts the hub has granted gateway access,\n * and it is the intended out-of-the-box state — sign in, get a working model.\n * Third-party providers are still never selected automatically.\n */\nexport async function findInitialModel(options: {\n\tcliProvider?: string;\n\tcliModel?: string;\n\tscopedModels: ScopedModel[];\n\tisContinuing: boolean;\n\tdefaultProvider?: string;\n\tdefaultModelId?: string;\n\tdefaultThinkingLevel?: ThinkingLevel;\n\tmodelRuntime: ModelRuntime;\n}): Promise<InitialModelResult> {\n\tconst {\n\t\tcliProvider,\n\t\tcliModel,\n\t\tscopedModels,\n\t\tisContinuing,\n\t\tdefaultProvider,\n\t\tdefaultModelId,\n\t\tdefaultThinkingLevel,\n\t\tmodelRuntime,\n\t} = options;\n\n\tlet thinkingLevel: ThinkingLevel = DEFAULT_THINKING_LEVEL;\n\n\t// 1. CLI args take priority\n\tif (cliProvider && cliModel) {\n\t\tconst resolved = resolveCliModel({\n\t\t\tcliProvider,\n\t\t\tcliModel,\n\t\t\tmodelRuntime,\n\t\t});\n\t\tif (resolved.error) {\n\t\t\tconsole.error(chalk.red(resolved.error));\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tif (resolved.model) {\n\t\t\treturn { model: resolved.model, thinkingLevel: DEFAULT_THINKING_LEVEL, fallbackMessage: undefined };\n\t\t}\n\t}\n\n\t// 2. Use first model from scoped models (skip if continuing/resuming)\n\tif (scopedModels.length > 0 && !isContinuing) {\n\t\treturn {\n\t\t\tmodel: scopedModels[0].model,\n\t\t\tthinkingLevel: scopedModels[0].thinkingLevel ?? defaultThinkingLevel ?? DEFAULT_THINKING_LEVEL,\n\t\t\tfallbackMessage: undefined,\n\t\t};\n\t}\n\n\t// 3. Keep the saved default even when its credential is missing. Sending a\n\t// prompt will surface provider setup guidance instead of switching providers.\n\tif (defaultProvider && defaultModelId) {\n\t\tconst found = modelRuntime.getModel(defaultProvider, defaultModelId);\n\t\tif (found) {\n\t\t\tif (defaultThinkingLevel) {\n\t\t\t\tthinkingLevel = defaultThinkingLevel;\n\t\t\t}\n\t\t\treturn { model: found, thinkingLevel, fallbackMessage: undefined };\n\t\t}\n\t}\n\n\t// 4. Auto mode. Registered by the gitnexus extension only when the account\n\t// is signed in and the hub grants gateway access, so its presence is\n\t// already an entitlement check.\n\tconst auto = modelRuntime.getModel(\"gitnexus\", \"auto\");\n\tif (auto) {\n\t\treturn { model: auto, thinkingLevel: DEFAULT_THINKING_LEVEL, fallbackMessage: undefined };\n\t}\n\n\t// No explicit or saved model. BYOK/model setup must choose one.\n\treturn { model: undefined, thinkingLevel: DEFAULT_THINKING_LEVEL, fallbackMessage: undefined };\n}\n\n/**\n * Restore exactly the model saved in a session. Never switch providers.\n */\nexport async function restoreModelFromSession(\n\tsavedProvider: string,\n\tsavedModelId: string,\n\tshouldPrintMessages: boolean,\n\tmodelRuntime: ModelRuntime,\n): Promise<{ model: Model<Api> | undefined; fallbackMessage: string | undefined }> {\n\tconst restoredModel = modelRuntime.getModel(savedProvider, savedModelId);\n\n\tif (restoredModel) {\n\t\tif (shouldPrintMessages) {\n\t\t\tconsole.log(chalk.dim(`Restored model: ${savedProvider}/${savedModelId}`));\n\t\t}\n\t\treturn { model: restoredModel, fallbackMessage: undefined };\n\t}\n\n\tif (shouldPrintMessages) {\n\t\tconsole.error(chalk.yellow(`Warning: Could not restore model ${savedProvider}/${savedModelId}.`));\n\t}\n\treturn {\n\t\tmodel: undefined,\n\t\tfallbackMessage: `Could not restore model ${savedProvider}/${savedModelId}. Select it again with /model or configure BYOK with /byok.`,\n\t};\n}\n"]}
@@ -0,0 +1,541 @@
1
+ /**
2
+ * Model resolution, scoping, and initial selection
3
+ */
4
+ import { modelsAreEqual, } from "@earendil-works/pi-ai";
5
+ import chalk from "chalk";
6
+ import { minimatch } from "minimatch";
7
+ import { isValidThinkingLevel } from "../cli/args.js";
8
+ import { DEFAULT_THINKING_LEVEL } from "./defaults.js";
9
+ /** Default model IDs for each known provider */
10
+ export const defaultModelPerProvider = {
11
+ "amazon-bedrock": "us.anthropic.claude-opus-4-6-v1",
12
+ "ant-ling": "Ring-2.6-1T",
13
+ anthropic: "claude-opus-4-8",
14
+ openai: "gpt-5.6-sol",
15
+ "azure-openai-responses": "gpt-5.4",
16
+ "openai-codex": "gpt-5.5",
17
+ radius: "auto",
18
+ nvidia: "nvidia/nemotron-3-super-120b-a12b",
19
+ deepseek: "deepseek-v4-pro",
20
+ google: "gemini-3.1-pro-preview",
21
+ "google-vertex": "gemini-3.1-pro-preview",
22
+ "github-copilot": "gpt-5.4",
23
+ openrouter: "moonshotai/kimi-k2.6",
24
+ "vercel-ai-gateway": "zai/glm-5.1",
25
+ xai: "grok-4.5",
26
+ groq: "openai/gpt-oss-120b",
27
+ cerebras: "zai-glm-4.7",
28
+ zai: "glm-5.1",
29
+ "zai-coding-cn": "glm-5.1",
30
+ mistral: "devstral-medium-latest",
31
+ minimax: "MiniMax-M2.7",
32
+ "minimax-cn": "MiniMax-M2.7",
33
+ moonshotai: "kimi-k2.6",
34
+ "moonshotai-cn": "kimi-k2.6",
35
+ huggingface: "moonshotai/Kimi-K2.6",
36
+ fireworks: "accounts/fireworks/models/kimi-k2p6",
37
+ together: "moonshotai/Kimi-K2.6",
38
+ baseten: "zai-org/GLM-5.2",
39
+ opencode: "kimi-k2.6",
40
+ "opencode-go": "kimi-k2.6",
41
+ "kimi-coding": "kimi-for-coding",
42
+ "cloudflare-workers-ai": "@cf/moonshotai/kimi-k2.6",
43
+ "cloudflare-ai-gateway": "workers-ai/@cf/moonshotai/kimi-k2.6",
44
+ "qwen-token-plan": "qwen3.7-max",
45
+ "qwen-token-plan-cn": "qwen3.7-max",
46
+ xiaomi: "mimo-v2.5-pro",
47
+ "xiaomi-token-plan-cn": "mimo-v2.5-pro",
48
+ "xiaomi-token-plan-ams": "mimo-v2.5-pro",
49
+ "xiaomi-token-plan-sgp": "mimo-v2.5-pro",
50
+ };
51
+ /**
52
+ * Helper to check if a model ID looks like an alias (no date suffix)
53
+ * Dates are typically in format: -20241022 or -20250929
54
+ */
55
+ function isAlias(id) {
56
+ // Check if ID ends with -latest
57
+ if (id.endsWith("-latest"))
58
+ return true;
59
+ // Check if ID ends with a date pattern (-YYYYMMDD)
60
+ const datePattern = /-\d{8}$/;
61
+ return !datePattern.test(id);
62
+ }
63
+ /**
64
+ * Find an exact model reference match.
65
+ * Supports either a bare model id or a canonical provider/modelId reference.
66
+ * When matching by bare id, ambiguous matches across providers are rejected.
67
+ */
68
+ export function findExactModelReferenceMatch(modelReference, availableModels) {
69
+ const trimmedReference = modelReference.trim();
70
+ if (!trimmedReference) {
71
+ return undefined;
72
+ }
73
+ const normalizedReference = trimmedReference.toLowerCase();
74
+ const canonicalMatches = availableModels.filter((model) => `${model.provider}/${model.id}`.toLowerCase() === normalizedReference);
75
+ if (canonicalMatches.length === 1) {
76
+ return canonicalMatches[0];
77
+ }
78
+ if (canonicalMatches.length > 1) {
79
+ return undefined;
80
+ }
81
+ const slashIndex = trimmedReference.indexOf("/");
82
+ if (slashIndex !== -1) {
83
+ const provider = trimmedReference.substring(0, slashIndex).trim();
84
+ const modelId = trimmedReference.substring(slashIndex + 1).trim();
85
+ if (provider && modelId) {
86
+ const providerMatches = availableModels.filter((model) => model.provider.toLowerCase() === provider.toLowerCase() &&
87
+ model.id.toLowerCase() === modelId.toLowerCase());
88
+ if (providerMatches.length === 1) {
89
+ return providerMatches[0];
90
+ }
91
+ if (providerMatches.length > 1) {
92
+ return undefined;
93
+ }
94
+ }
95
+ }
96
+ const idMatches = availableModels.filter((model) => model.id.toLowerCase() === normalizedReference);
97
+ return idMatches.length === 1 ? idMatches[0] : undefined;
98
+ }
99
+ /**
100
+ * Try to match a pattern to a model from the available models list.
101
+ * Returns the matched model or undefined if no match found.
102
+ */
103
+ function tryMatchModel(modelPattern, availableModels) {
104
+ const exactMatch = findExactModelReferenceMatch(modelPattern, availableModels);
105
+ if (exactMatch) {
106
+ return exactMatch;
107
+ }
108
+ // No exact match - fall back to partial matching
109
+ const matches = availableModels.filter((m) => m.id.toLowerCase().includes(modelPattern.toLowerCase()) ||
110
+ m.name?.toLowerCase().includes(modelPattern.toLowerCase()));
111
+ if (matches.length === 0) {
112
+ return undefined;
113
+ }
114
+ // Separate into aliases and dated versions
115
+ const aliases = matches.filter((m) => isAlias(m.id));
116
+ const datedVersions = matches.filter((m) => !isAlias(m.id));
117
+ if (aliases.length > 0) {
118
+ // Prefer alias - if multiple aliases, pick the one that sorts highest
119
+ aliases.sort((a, b) => b.id.localeCompare(a.id));
120
+ return aliases[0];
121
+ }
122
+ else {
123
+ // No alias found, pick latest dated version
124
+ datedVersions.sort((a, b) => b.id.localeCompare(a.id));
125
+ return datedVersions[0];
126
+ }
127
+ }
128
+ function buildFallbackModel(provider, modelId, availableModels) {
129
+ const providerModels = availableModels.filter((m) => m.provider === provider);
130
+ if (providerModels.length === 0)
131
+ return undefined;
132
+ const defaultId = defaultModelPerProvider[provider];
133
+ const baseModel = defaultId
134
+ ? (providerModels.find((m) => m.id === defaultId) ?? providerModels[0])
135
+ : providerModels[0];
136
+ return {
137
+ ...baseModel,
138
+ id: modelId,
139
+ name: modelId,
140
+ };
141
+ }
142
+ /**
143
+ * Parse a pattern to extract model and thinking level.
144
+ * Handles models with colons in their IDs (e.g., OpenRouter's :exacto suffix).
145
+ *
146
+ * Algorithm:
147
+ * 1. Try to match full pattern as a model
148
+ * 2. If found, return it with "off" thinking level
149
+ * 3. If not found and has colons, split on last colon:
150
+ * - If suffix is valid thinking level, use it and recurse on prefix
151
+ * - If suffix is invalid, warn and recurse on prefix with "off"
152
+ *
153
+ * @internal Exported for testing
154
+ */
155
+ export function parseModelPattern(pattern, availableModels, options) {
156
+ // Try exact match first
157
+ const exactMatch = tryMatchModel(pattern, availableModels);
158
+ if (exactMatch) {
159
+ return { model: exactMatch, thinkingLevel: undefined, warning: undefined };
160
+ }
161
+ // No match - try splitting on last colon if present
162
+ const lastColonIndex = pattern.lastIndexOf(":");
163
+ if (lastColonIndex === -1) {
164
+ // No colons, pattern simply doesn't match any model
165
+ return { model: undefined, thinkingLevel: undefined, warning: undefined };
166
+ }
167
+ const prefix = pattern.substring(0, lastColonIndex);
168
+ const suffix = pattern.substring(lastColonIndex + 1);
169
+ if (isValidThinkingLevel(suffix)) {
170
+ // Valid thinking level - recurse on prefix and use this level
171
+ const result = parseModelPattern(prefix, availableModels, options);
172
+ if (result.model) {
173
+ // Only use this thinking level if no warning from inner recursion
174
+ return {
175
+ model: result.model,
176
+ thinkingLevel: result.warning ? undefined : suffix,
177
+ warning: result.warning,
178
+ };
179
+ }
180
+ return result;
181
+ }
182
+ else {
183
+ // Invalid suffix
184
+ const allowFallback = options?.allowInvalidThinkingLevelFallback ?? true;
185
+ if (!allowFallback) {
186
+ // In strict mode (CLI --model parsing), treat it as part of the model id and fail.
187
+ // This avoids accidentally resolving to a different model.
188
+ return { model: undefined, thinkingLevel: undefined, warning: undefined };
189
+ }
190
+ // Scope mode: recurse on prefix and warn
191
+ const result = parseModelPattern(prefix, availableModels, options);
192
+ if (result.model) {
193
+ return {
194
+ model: result.model,
195
+ thinkingLevel: undefined,
196
+ warning: `Invalid thinking level "${suffix}" in pattern "${pattern}". Using default instead.`,
197
+ };
198
+ }
199
+ return result;
200
+ }
201
+ }
202
+ export function resolveModelScopeFromModels(patterns, models) {
203
+ const availableModels = [...models];
204
+ const scopedModels = [];
205
+ const diagnostics = [];
206
+ for (const pattern of patterns) {
207
+ // Check if pattern contains glob characters
208
+ if (pattern.includes("*") || pattern.includes("?") || pattern.includes("[")) {
209
+ // Extract optional thinking level suffix (e.g., "provider/*:high")
210
+ const colonIdx = pattern.lastIndexOf(":");
211
+ let globPattern = pattern;
212
+ let thinkingLevel;
213
+ if (colonIdx !== -1) {
214
+ const suffix = pattern.substring(colonIdx + 1);
215
+ if (isValidThinkingLevel(suffix)) {
216
+ thinkingLevel = suffix;
217
+ globPattern = pattern.substring(0, colonIdx);
218
+ }
219
+ }
220
+ const exactMatch = findExactModelReferenceMatch(globPattern, availableModels);
221
+ if (exactMatch) {
222
+ if (!scopedModels.find((sm) => modelsAreEqual(sm.model, exactMatch))) {
223
+ scopedModels.push({ model: exactMatch, thinkingLevel });
224
+ }
225
+ continue;
226
+ }
227
+ // Match against "provider/modelId" format OR just model ID
228
+ // This allows "*sonnet*" to match without requiring "anthropic/*sonnet*"
229
+ const matchingModels = availableModels.filter((m) => {
230
+ const fullId = `${m.provider}/${m.id}`;
231
+ return minimatch(fullId, globPattern, { nocase: true }) || minimatch(m.id, globPattern, { nocase: true });
232
+ });
233
+ if (matchingModels.length === 0) {
234
+ diagnostics.push({
235
+ type: "warning",
236
+ code: "no-match",
237
+ message: `No models match pattern "${pattern}"`,
238
+ pattern,
239
+ });
240
+ continue;
241
+ }
242
+ for (const model of matchingModels) {
243
+ if (!scopedModels.find((sm) => modelsAreEqual(sm.model, model))) {
244
+ scopedModels.push({ model, thinkingLevel });
245
+ }
246
+ }
247
+ continue;
248
+ }
249
+ const { model, thinkingLevel, warning } = parseModelPattern(pattern, availableModels);
250
+ if (warning) {
251
+ diagnostics.push({ type: "warning", code: "invalid-thinking-level", message: warning, pattern });
252
+ }
253
+ if (!model) {
254
+ diagnostics.push({
255
+ type: "warning",
256
+ code: "no-match",
257
+ message: `No models match pattern "${pattern}"`,
258
+ pattern,
259
+ });
260
+ continue;
261
+ }
262
+ // Avoid duplicates
263
+ if (!scopedModels.find((sm) => modelsAreEqual(sm.model, model))) {
264
+ scopedModels.push({ model, thinkingLevel });
265
+ }
266
+ }
267
+ return { scopedModels, diagnostics };
268
+ }
269
+ export async function resolveModelScopeWithDiagnostics(patterns, modelRuntime, options) {
270
+ return resolveModelScopeFromModels(patterns, await modelRuntime.getAvailable(undefined, options));
271
+ }
272
+ export async function resolveModelScope(patterns, modelRuntime, options) {
273
+ const { scopedModels, diagnostics } = await resolveModelScopeWithDiagnostics(patterns, modelRuntime, options);
274
+ for (const diagnostic of diagnostics) {
275
+ console.warn(chalk.yellow(`Warning: ${diagnostic.message}`));
276
+ }
277
+ return scopedModels;
278
+ }
279
+ /**
280
+ * Resolve a single model from CLI flags.
281
+ *
282
+ * Supports:
283
+ * - --provider <provider> --model <pattern>
284
+ * - --model <provider>/<pattern>
285
+ * - Fuzzy matching (same rules as model scoping: exact id, then partial id/name)
286
+ *
287
+ * Note: This does not apply the thinking level by itself, but it may *parse* and
288
+ * return a thinking level from "<pattern>:<thinking>" so the caller can apply it.
289
+ */
290
+ export function resolveCliModel(options) {
291
+ const { cliProvider, cliModel, cliThinking, modelRuntime } = options;
292
+ if (!cliModel) {
293
+ return { model: undefined, warning: undefined, error: undefined };
294
+ }
295
+ // Important: use *all* models here, not just models with pre-configured auth.
296
+ // This allows "--api-key" to be used for first-time setup.
297
+ const availableModels = [...modelRuntime.getModels()];
298
+ if (availableModels.length === 0) {
299
+ return {
300
+ model: undefined,
301
+ warning: undefined,
302
+ error: "No models available. Check your installation or add models to models.json.",
303
+ };
304
+ }
305
+ // Build canonical provider lookup (case-insensitive)
306
+ const providerMap = new Map();
307
+ for (const m of availableModels) {
308
+ providerMap.set(m.provider.toLowerCase(), m.provider);
309
+ }
310
+ let provider = cliProvider ? providerMap.get(cliProvider.toLowerCase()) : undefined;
311
+ if (cliProvider && !provider) {
312
+ return {
313
+ model: undefined,
314
+ warning: undefined,
315
+ error: `Unknown provider "${cliProvider}". Use --list-models to see available providers/models.`,
316
+ };
317
+ }
318
+ // If no explicit --provider, try to interpret "provider/model" format first.
319
+ // When the prefix before the first slash matches a known provider, prefer that
320
+ // interpretation over matching models whose IDs literally contain slashes
321
+ // (e.g. "zai/glm-5" should resolve to provider=zai, model=glm-5, not to a
322
+ // vercel-ai-gateway model with id "zai/glm-5").
323
+ let pattern = cliModel;
324
+ let inferredProvider = false;
325
+ if (!provider) {
326
+ const slashIndex = cliModel.indexOf("/");
327
+ if (slashIndex !== -1) {
328
+ const maybeProvider = cliModel.substring(0, slashIndex);
329
+ const canonical = providerMap.get(maybeProvider.toLowerCase());
330
+ if (canonical) {
331
+ provider = canonical;
332
+ pattern = cliModel.substring(slashIndex + 1);
333
+ inferredProvider = true;
334
+ }
335
+ }
336
+ }
337
+ // If no provider was inferred from the slash, try exact matches without provider inference.
338
+ // This handles models whose IDs naturally contain slashes (e.g. OpenRouter-style IDs).
339
+ // Bare exact IDs can exist in multiple providers, so do not choose by catalog order.
340
+ // Prefer the sole authenticated provider when there is one; otherwise require an
341
+ // explicit provider to avoid silently selecting an unusable provider.
342
+ if (!provider) {
343
+ const lower = cliModel.toLowerCase();
344
+ const exactMatches = availableModels.filter((m) => m.id.toLowerCase() === lower || `${m.provider}/${m.id}`.toLowerCase() === lower);
345
+ if (exactMatches.length === 1) {
346
+ return { model: exactMatches[0], warning: undefined, thinkingLevel: undefined, error: undefined };
347
+ }
348
+ if (exactMatches.length > 1) {
349
+ const authenticatedExactMatches = exactMatches.filter((m) => modelRuntime.hasConfiguredAuth(m.provider));
350
+ if (authenticatedExactMatches.length === 1) {
351
+ return {
352
+ model: authenticatedExactMatches[0],
353
+ warning: undefined,
354
+ thinkingLevel: undefined,
355
+ error: undefined,
356
+ };
357
+ }
358
+ const matches = exactMatches
359
+ .map((m) => `${m.provider}/${m.id}`)
360
+ .sort((a, b) => a.localeCompare(b))
361
+ .join(", ");
362
+ const authHint = authenticatedExactMatches.length === 0
363
+ ? "No matching provider is authenticated."
364
+ : "More than one matching provider is authenticated.";
365
+ return {
366
+ model: undefined,
367
+ warning: undefined,
368
+ thinkingLevel: undefined,
369
+ error: `Model "${cliModel}" is ambiguous across providers: ${matches}. ${authHint} Use --provider or provider/model.`,
370
+ };
371
+ }
372
+ }
373
+ if (cliProvider && provider) {
374
+ // If both were provided, tolerate --model <provider>/<pattern> by stripping the provider prefix
375
+ const prefix = `${provider}/`;
376
+ if (cliModel.toLowerCase().startsWith(prefix.toLowerCase())) {
377
+ pattern = cliModel.substring(prefix.length);
378
+ }
379
+ }
380
+ const candidates = provider ? availableModels.filter((m) => m.provider === provider) : availableModels;
381
+ const { model, thinkingLevel, warning } = parseModelPattern(pattern, candidates, {
382
+ allowInvalidThinkingLevelFallback: false,
383
+ });
384
+ if (model) {
385
+ // If provider inference matched an unauthenticated provider/model pair, prefer
386
+ // one exact raw model-id match that is authenticated. This keeps
387
+ // "provider/model" syntax preferred when usable, but handles models whose
388
+ // literal id starts with a known provider name (for example
389
+ // commandcode model id "xiaomi/mimo-v2.5-pro").
390
+ if (inferredProvider) {
391
+ const rawExactMatches = availableModels.filter((m) => m.id.toLowerCase() === cliModel.toLowerCase() && !modelsAreEqual(m, model));
392
+ if (rawExactMatches.length > 0 && !modelRuntime.hasConfiguredAuth(model.provider)) {
393
+ const authenticatedRawMatches = rawExactMatches.filter((m) => modelRuntime.hasConfiguredAuth(m.provider));
394
+ if (authenticatedRawMatches.length === 1) {
395
+ return {
396
+ model: authenticatedRawMatches[0],
397
+ thinkingLevel: undefined,
398
+ warning: undefined,
399
+ error: undefined,
400
+ };
401
+ }
402
+ }
403
+ }
404
+ return { model, thinkingLevel, warning, error: undefined };
405
+ }
406
+ // If we inferred a provider from the slash but found no match within that provider,
407
+ // fall back to matching the full input as a raw model id across all models.
408
+ // This handles OpenRouter-style IDs like "openai/gpt-4o:extended" where "openai"
409
+ // looks like a provider but the full string is actually a model id on openrouter.
410
+ if (inferredProvider) {
411
+ const lower = cliModel.toLowerCase();
412
+ const exact = availableModels.find((m) => m.id.toLowerCase() === lower || `${m.provider}/${m.id}`.toLowerCase() === lower);
413
+ if (exact) {
414
+ return { model: exact, warning: undefined, thinkingLevel: undefined, error: undefined };
415
+ }
416
+ // Also try parseModelPattern on the full input against all models
417
+ const fallback = parseModelPattern(cliModel, availableModels, {
418
+ allowInvalidThinkingLevelFallback: false,
419
+ });
420
+ if (fallback.model) {
421
+ return {
422
+ model: fallback.model,
423
+ thinkingLevel: fallback.thinkingLevel,
424
+ warning: fallback.warning,
425
+ error: undefined,
426
+ };
427
+ }
428
+ }
429
+ if (provider) {
430
+ // Parse thinking level suffix from the pattern before building the fallback model,
431
+ // but only when --thinking is not explicitly provided.
432
+ // e.g. "zai-org/GLM-5.1-FP8:high" → modelId="zai-org/GLM-5.1-FP8", fallbackThinking="high"
433
+ let fallbackPattern = pattern;
434
+ let fallbackThinking;
435
+ if (!cliThinking) {
436
+ const lastColon = pattern.lastIndexOf(":");
437
+ if (lastColon !== -1) {
438
+ const suffix = pattern.substring(lastColon + 1);
439
+ if (isValidThinkingLevel(suffix)) {
440
+ fallbackPattern = pattern.substring(0, lastColon);
441
+ fallbackThinking = suffix;
442
+ }
443
+ }
444
+ }
445
+ const fallbackModel = buildFallbackModel(provider, fallbackPattern, availableModels);
446
+ if (fallbackModel) {
447
+ const requestedThinking = cliThinking ?? fallbackThinking;
448
+ const model = requestedThinking && requestedThinking !== "off" ? { ...fallbackModel, reasoning: true } : fallbackModel;
449
+ const fallbackWarning = warning
450
+ ? `${warning} Model "${fallbackPattern}" not found for provider "${provider}". Using custom model id.`
451
+ : `Model "${fallbackPattern}" not found for provider "${provider}". Using custom model id.`;
452
+ return { model, thinkingLevel: fallbackThinking, warning: fallbackWarning, error: undefined };
453
+ }
454
+ }
455
+ const display = provider ? `${provider}/${pattern}` : cliModel;
456
+ return {
457
+ model: undefined,
458
+ thinkingLevel: undefined,
459
+ warning,
460
+ error: `Model "${display}" not found. Use --list-models to see available models.`,
461
+ };
462
+ }
463
+ /**
464
+ * Find the initial model to use based on priority:
465
+ * 1. CLI args (provider + model)
466
+ * 2. First model from scoped models (if not continuing/resuming)
467
+ * 3. Saved default from settings
468
+ * 4. Auto mode (gitnexus/auto), when the signed-in account is entitled to it
469
+ *
470
+ * Step 4 is not a provider fallback: the Auto entry is nexus's own product
471
+ * surface, registered only for accounts the hub has granted gateway access,
472
+ * and it is the intended out-of-the-box state — sign in, get a working model.
473
+ * Third-party providers are still never selected automatically.
474
+ */
475
+ export async function findInitialModel(options) {
476
+ const { cliProvider, cliModel, scopedModels, isContinuing, defaultProvider, defaultModelId, defaultThinkingLevel, modelRuntime, } = options;
477
+ let thinkingLevel = DEFAULT_THINKING_LEVEL;
478
+ // 1. CLI args take priority
479
+ if (cliProvider && cliModel) {
480
+ const resolved = resolveCliModel({
481
+ cliProvider,
482
+ cliModel,
483
+ modelRuntime,
484
+ });
485
+ if (resolved.error) {
486
+ console.error(chalk.red(resolved.error));
487
+ process.exit(1);
488
+ }
489
+ if (resolved.model) {
490
+ return { model: resolved.model, thinkingLevel: DEFAULT_THINKING_LEVEL, fallbackMessage: undefined };
491
+ }
492
+ }
493
+ // 2. Use first model from scoped models (skip if continuing/resuming)
494
+ if (scopedModels.length > 0 && !isContinuing) {
495
+ return {
496
+ model: scopedModels[0].model,
497
+ thinkingLevel: scopedModels[0].thinkingLevel ?? defaultThinkingLevel ?? DEFAULT_THINKING_LEVEL,
498
+ fallbackMessage: undefined,
499
+ };
500
+ }
501
+ // 3. Keep the saved default even when its credential is missing. Sending a
502
+ // prompt will surface provider setup guidance instead of switching providers.
503
+ if (defaultProvider && defaultModelId) {
504
+ const found = modelRuntime.getModel(defaultProvider, defaultModelId);
505
+ if (found) {
506
+ if (defaultThinkingLevel) {
507
+ thinkingLevel = defaultThinkingLevel;
508
+ }
509
+ return { model: found, thinkingLevel, fallbackMessage: undefined };
510
+ }
511
+ }
512
+ // 4. Auto mode. Registered by the gitnexus extension only when the account
513
+ // is signed in and the hub grants gateway access, so its presence is
514
+ // already an entitlement check.
515
+ const auto = modelRuntime.getModel("gitnexus", "auto");
516
+ if (auto) {
517
+ return { model: auto, thinkingLevel: DEFAULT_THINKING_LEVEL, fallbackMessage: undefined };
518
+ }
519
+ // No explicit or saved model. BYOK/model setup must choose one.
520
+ return { model: undefined, thinkingLevel: DEFAULT_THINKING_LEVEL, fallbackMessage: undefined };
521
+ }
522
+ /**
523
+ * Restore exactly the model saved in a session. Never switch providers.
524
+ */
525
+ export async function restoreModelFromSession(savedProvider, savedModelId, shouldPrintMessages, modelRuntime) {
526
+ const restoredModel = modelRuntime.getModel(savedProvider, savedModelId);
527
+ if (restoredModel) {
528
+ if (shouldPrintMessages) {
529
+ console.log(chalk.dim(`Restored model: ${savedProvider}/${savedModelId}`));
530
+ }
531
+ return { model: restoredModel, fallbackMessage: undefined };
532
+ }
533
+ if (shouldPrintMessages) {
534
+ console.error(chalk.yellow(`Warning: Could not restore model ${savedProvider}/${savedModelId}.`));
535
+ }
536
+ return {
537
+ model: undefined,
538
+ fallbackMessage: `Could not restore model ${savedProvider}/${savedModelId}. Select it again with /model or configure BYOK with /byok.`,
539
+ };
540
+ }
541
+ //# sourceMappingURL=model-resolver.js.map