xling 0.9.8 → 0.10.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 (203) hide show
  1. package/README.md +1 -1
  2. package/dist/{backend-router-C_Pyt-UU.js → backend-router-aOcWH4J_.js} +1 -1
  3. package/dist/{base-ByMpRYJ8.d.ts → base-BJKUfvQr.d.ts} +2 -2
  4. package/dist/{base-sBAL-g57.js → base-Cb8gvSZx.js} +1 -1
  5. package/dist/{base-DqlrBr6C.d.ts → base-DtqFhVhJ.d.ts} +2 -2
  6. package/dist/{base-BUo37ebo.js → base-Dv8Ajp1w.js} +1 -1
  7. package/dist/{claude-C3HxRfuM.js → claude-CWDwrH2t.js} +1 -1
  8. package/dist/{claude-Bbd3pVuH.js → claude-CgDMZ5NR.js} +1 -1
  9. package/dist/{cli-mode-BAKzBdi-.js → cli-mode-rz6jyP4c.js} +1 -1
  10. package/dist/{codex-Dy_gUG6Z.js → codex-CLx2Yb0G.js} +1 -1
  11. package/dist/{codex-Db_IraH3.js → codex-Czpk7Br1.js} +1 -1
  12. package/dist/commands/council/index.js +1 -1
  13. package/dist/commands/discuss/index.js +1 -1
  14. package/dist/commands/git/prc.js +1 -1
  15. package/dist/commands/git/prr.js +1 -1
  16. package/dist/commands/git/prv.js +1 -1
  17. package/dist/commands/git/worktree.js +1 -1
  18. package/dist/commands/git/wta.js +1 -1
  19. package/dist/commands/git/wtl.js +1 -1
  20. package/dist/commands/git/wtp.js +1 -1
  21. package/dist/commands/git/wtr.js +1 -1
  22. package/dist/commands/git/wts.js +1 -1
  23. package/dist/commands/p/index.js +1 -1
  24. package/dist/commands/proxy/index.js +6 -5
  25. package/dist/commands/settings/auth.js +1 -1
  26. package/dist/commands/settings/get.js +1 -1
  27. package/dist/commands/settings/inspect.js +1 -1
  28. package/dist/commands/settings/list.js +1 -1
  29. package/dist/commands/settings/set.js +1 -1
  30. package/dist/commands/settings/switch.js +11 -6
  31. package/dist/commands/settings/sync.js +1 -1
  32. package/dist/commands/sx/index.js +1 -1
  33. package/dist/commands/version/index.js +1 -1
  34. package/dist/commands/x/index.js +1 -1
  35. package/dist/{config-C87nCAHS.d.ts → config-CT0JigkF.d.ts} +4 -0
  36. package/dist/config-D0b5Ceh4.js +1 -0
  37. package/dist/{create-CffFD_Yh.js → create-C3P6UYhE.js} +1 -1
  38. package/dist/{dispatcher-DBedC9_T.js → dispatcher-Bc9KhwR1.js} +1 -1
  39. package/dist/{dispatcher-BLDVBwMH.js → dispatcher-CPtFZ27f.js} +1 -1
  40. package/dist/{dispatcher-BE4ieOei.js → dispatcher-KWhvzTOg.js} +1 -1
  41. package/dist/domain/git.d.ts +1 -1
  42. package/dist/domain/git.js +1 -1
  43. package/dist/domain/interfaces.d.ts +2 -2
  44. package/dist/domain/types.d.ts +1 -1
  45. package/dist/domain/validators.d.ts +1 -1
  46. package/dist/domain/validators.js +1 -1
  47. package/dist/domain/xling/config.d.ts +1 -1
  48. package/dist/domain/xling/config.js +1 -1
  49. package/dist/domain/xling/template.d.ts +15 -10
  50. package/dist/domain/xling/template.js +1 -1
  51. package/dist/{editor-6Nht_jnv.js → editor-DUx1Sby2.js} +1 -1
  52. package/dist/{engine-Ct7cPezf.d.ts → engine-BDErrHSs.d.ts} +1 -1
  53. package/dist/{errorClassifier-9x1_QQWd.d.ts → errorClassifier-C8_3xWnw.d.ts} +1 -1
  54. package/dist/{fsStore-CwAffYMN.js → fsStore-D1omjK0d.js} +1 -1
  55. package/dist/{gemini-CedK05G6.js → gemini-2eTblTJ_.js} +1 -1
  56. package/dist/{gemini-DmKcVP7x.js → gemini-Bf13TKO0.js} +1 -1
  57. package/dist/{interfaces-DY2ES_Kh.d.ts → interfaces-BZiHBjRr.d.ts} +1 -1
  58. package/dist/{loadBalancer-C2W1fsXN.d.ts → loadBalancer-CZOuqn3y.d.ts} +2 -2
  59. package/dist/{pr-DYOhlKHw.js → pr-BNviK79Q.js} +1 -1
  60. package/dist/{providerRegistry-Dl_IFKMc.js → providerRegistry-Cioo_VTs.js} +1 -1
  61. package/dist/{providerRegistry-CYzkQsVn.d.ts → providerRegistry-qo2LCkm0.d.ts} +1 -1
  62. package/dist/recorder-DkhUPHvu.js +1 -0
  63. package/dist/{router-gcWKPkkX.js → router-DfJrwCH_.js} +1 -1
  64. package/dist/{router-CjYYSU1_.d.ts → router-DhLbvwTS.d.ts} +3 -3
  65. package/dist/{runner-Bpbzwyfd.js → runner-BDDl4-Yr.js} +1 -1
  66. package/dist/{runner-CZA7oPjO.js → runner-CRD0pg6G.js} +1 -1
  67. package/dist/{server-Ba3J3MnR.d.ts → server-BpbYk-ej.d.ts} +3 -3
  68. package/dist/server-CKux2o6V.js +13 -0
  69. package/dist/{server-iGv0zRYN.js → server-CLuWJVwE.js} +1 -1
  70. package/dist/services/council/runner.d.ts +4 -4
  71. package/dist/services/council/runner.js +1 -1
  72. package/dist/services/discuss/cli-mode.d.ts +4 -4
  73. package/dist/services/discuss/cli-mode.js +1 -1
  74. package/dist/services/discuss/engine.d.ts +5 -5
  75. package/dist/services/discuss/engine.js +1 -1
  76. package/dist/services/discuss/interactive-selector.js +1 -1
  77. package/dist/services/discuss/room.d.ts +4 -4
  78. package/dist/services/discuss/server.js +1 -1
  79. package/dist/services/discuss/ui-mode.js +1 -1
  80. package/dist/services/git/create.d.ts +1 -1
  81. package/dist/services/git/create.js +1 -1
  82. package/dist/services/git/dispatcher.d.ts +1 -1
  83. package/dist/services/git/dispatcher.js +1 -1
  84. package/dist/services/git/pr.d.ts +1 -1
  85. package/dist/services/git/pr.js +1 -1
  86. package/dist/services/git/utils.js +1 -1
  87. package/dist/services/git/view.d.ts +1 -1
  88. package/dist/services/git/view.js +1 -1
  89. package/dist/services/git/worktree.d.ts +1 -1
  90. package/dist/services/git/worktree.js +1 -1
  91. package/dist/services/launch/adapters/base.d.ts +3 -3
  92. package/dist/services/launch/adapters/base.js +1 -1
  93. package/dist/services/launch/adapters/claude.d.ts +3 -3
  94. package/dist/services/launch/adapters/claude.js +1 -1
  95. package/dist/services/launch/adapters/codex.d.ts +3 -3
  96. package/dist/services/launch/adapters/codex.js +1 -1
  97. package/dist/services/launch/adapters/gemini.d.ts +3 -3
  98. package/dist/services/launch/adapters/gemini.js +1 -1
  99. package/dist/services/launch/dispatcher.d.ts +2 -2
  100. package/dist/services/launch/dispatcher.js +1 -1
  101. package/dist/services/p/backend-router.d.ts +1 -1
  102. package/dist/services/p/backend-router.js +1 -1
  103. package/dist/services/p/interactive-mode.d.ts +4 -4
  104. package/dist/services/p/interactive-mode.js +1 -1
  105. package/dist/services/p/prompt-builder.js +1 -1
  106. package/dist/services/prompt/client.d.ts +2 -2
  107. package/dist/services/prompt/client.js +1 -1
  108. package/dist/services/prompt/providerRegistry.d.ts +2 -2
  109. package/dist/services/prompt/providerRegistry.js +1 -1
  110. package/dist/services/prompt/router.d.ts +4 -4
  111. package/dist/services/prompt/router.js +1 -1
  112. package/dist/services/prompt/types.d.ts +1 -1
  113. package/dist/services/prompt/types.js +1 -1
  114. package/dist/services/proxy/errorClassifier.d.ts +3 -3
  115. package/dist/services/proxy/errorClassifier.js +1 -1
  116. package/dist/services/proxy/index.d.ts +5 -5
  117. package/dist/services/proxy/index.js +1 -1
  118. package/dist/services/proxy/loadBalancer.d.ts +3 -3
  119. package/dist/services/proxy/loadBalancer.js +1 -1
  120. package/dist/services/proxy/recorder.d.ts +74 -0
  121. package/dist/services/proxy/recorder.js +1 -0
  122. package/dist/services/proxy/server.d.ts +4 -4
  123. package/dist/services/proxy/server.js +1 -1
  124. package/dist/services/proxy/transformer.js +1 -1
  125. package/dist/services/proxy/types.d.ts +2 -2
  126. package/dist/services/settings/adapters/base.d.ts +3 -3
  127. package/dist/services/settings/adapters/base.js +1 -1
  128. package/dist/services/settings/adapters/claude.d.ts +3 -3
  129. package/dist/services/settings/adapters/claude.js +1 -1
  130. package/dist/services/settings/adapters/codex.d.ts +3 -3
  131. package/dist/services/settings/adapters/codex.js +1 -1
  132. package/dist/services/settings/adapters/gemini.d.ts +3 -3
  133. package/dist/services/settings/adapters/gemini.js +1 -1
  134. package/dist/services/settings/adapters/xling.d.ts +21 -5
  135. package/dist/services/settings/adapters/xling.js +1 -1
  136. package/dist/services/settings/dispatcher.d.ts +2 -2
  137. package/dist/services/settings/dispatcher.js +1 -1
  138. package/dist/services/settings/fsStore.d.ts +1 -1
  139. package/dist/services/settings/fsStore.js +1 -1
  140. package/dist/services/settings/sync.d.ts +1 -1
  141. package/dist/services/settings/sync.js +1 -1
  142. package/dist/services/settings/templates/claudeDefault.d.ts +1 -1
  143. package/dist/services/settings/templates/claudeDefault.js +1 -1
  144. package/dist/services/shortcuts/runner.d.ts +2 -2
  145. package/dist/services/shortcuts/runner.js +1 -1
  146. package/dist/services/shortcuts/types.d.ts +2 -2
  147. package/dist/services/shortcuts/types.js +1 -1
  148. package/dist/{sync-LkiPbSTH.js → sync-B6uHJ3Je.js} +1 -1
  149. package/dist/template-DtJFiC8I.js +1 -0
  150. package/dist/transformer-CZsLddVf.js +6 -0
  151. package/dist/{types-Dbw0iBKj.d.ts → types-B-_Rmlk3.d.ts} +6 -1
  152. package/dist/{types-C4lfsI_q.d.ts → types-C8PA-Afs.d.ts} +1 -1
  153. package/dist/types-CSvtSKJm.d.ts +42 -0
  154. package/dist/ui/assets/{StreamdownWrapper-DD8GEORm.js → StreamdownWrapper-DEW9Kqan.js} +45 -45
  155. package/dist/ui/assets/{code-block-JS6V4U2P-rLaKVw8X.js → code-block-QI2IAROF-D9I4gxcj.js} +2 -2
  156. package/dist/ui/assets/index-CKn9OLRC.js +35 -0
  157. package/dist/ui/assets/index-bmDDGNFL.css +1 -0
  158. package/dist/ui/assets/mermaid-NA5CF7SZ-Cd6WiOaB.js +1 -0
  159. package/dist/ui/assets/vendor-ui-uSOZRLLr.js +45 -0
  160. package/dist/ui/index.html +3 -3
  161. package/dist/{ui-mode-DeQ0RdzZ.js → ui-mode-CU4kdvaw.js} +1 -1
  162. package/dist/utils/cli.js +1 -1
  163. package/dist/utils/editor.js +1 -1
  164. package/dist/utils/errors.js +1 -1
  165. package/dist/utils/format.d.ts +1 -1
  166. package/dist/utils/format.js +1 -1
  167. package/dist/utils/logger.js +1 -1
  168. package/dist/utils/runner.d.ts +1 -1
  169. package/dist/utils/runner.js +1 -1
  170. package/dist/{utils-CCoDGqk7.js → utils-DugkWRYo.js} +1 -1
  171. package/dist/{view-4iWEelup.js → view-zF4lc17m.js} +1 -1
  172. package/dist/{worktree-CFMEZX8U.js → worktree-CrkzOfkB.js} +1 -1
  173. package/dist/xling-DxPgM9hF.js +1 -0
  174. package/package.json +13 -14
  175. package/dist/config-Bf-EeKY5.js +0 -1
  176. package/dist/server-CAH57wTY.js +0 -1
  177. package/dist/template-zeZsnoLb.js +0 -1
  178. package/dist/transformer-DTxdVklF.js +0 -6
  179. package/dist/ui/assets/index-dfO7UXF4.css +0 -1
  180. package/dist/ui/assets/index-t5qog9CR.js +0 -28
  181. package/dist/ui/assets/mermaid-ZSTFYFNX-INIPY0sQ.js +0 -1
  182. package/dist/ui/assets/vendor-ui-DfWMXmcH.js +0 -45
  183. package/dist/xling-CMIOhJ6S.js +0 -1
  184. /package/dist/{claudeDefault-D35i6PTj.js → claudeDefault-BP2oPKZC.js} +0 -0
  185. /package/dist/{cli-BQnaBwZZ.js → cli-BevqZj-b.js} +0 -0
  186. /package/dist/{client-BbukhYrN.js → client-BklkqGNW.js} +0 -0
  187. /package/dist/{engine-C0--Is1U.js → engine-Bb22YPU0.js} +0 -0
  188. /package/dist/{errorClassifier-B-lYIh-6.js → errorClassifier-mZXKjKvv.js} +0 -0
  189. /package/dist/{errors-BzZfdKtJ.js → errors-x3Es7YJ3.js} +0 -0
  190. /package/dist/{format-q5VlTrky.js → format-CZL0rRQR.js} +0 -0
  191. /package/dist/{git-CRkoXk-6.d.ts → git-DA5MDlrB.d.ts} +0 -0
  192. /package/dist/{git-CvgdaUQP.js → git-DrTSFbmV.js} +0 -0
  193. /package/dist/{interactive-mode-DG1vxROG.js → interactive-mode-CeP7yLWk.js} +0 -0
  194. /package/dist/{interactive-selector-CrQv5JEK.js → interactive-selector-DcA_muUR.js} +0 -0
  195. /package/dist/{loadBalancer-BUZZKUIh.js → loadBalancer-DNwUsuJG.js} +0 -0
  196. /package/dist/{logger-CTwnEBEm.js → logger-Dbg2P_Wi.js} +0 -0
  197. /package/dist/{prompt-builder-nnOfD-XX.js → prompt-builder-CPDeJ-iv.js} +0 -0
  198. /package/dist/{runner-CCy2YdOv.js → runner-QW_B2Hqh.js} +0 -0
  199. /package/dist/{types-BzkIf_zy.d.ts → types-B6FSmoLE.d.ts} +0 -0
  200. /package/dist/{types-Df-xXIah.js → types-BDgDAGpu.js} +0 -0
  201. /package/dist/{types-B_I-vpIy.d.ts → types-BF7B-ScC.d.ts} +0 -0
  202. /package/dist/{types-DEWc4NEP.js → types-CDh8FKyF.js} +0 -0
  203. /package/dist/{validators-CzOBqk3u.js → validators-kRNHvOZQ.js} +0 -0
package/README.md CHANGED
@@ -102,7 +102,7 @@ place.
102
102
 
103
103
  #### Proxy gateway
104
104
 
105
- - [`proxy` – OpenAI-compatible gateway](docs/proxy.md): run a local API with load balancing, API key rotation, and optional access key.
105
+ - [`proxy` – OpenAI-compatible gateway](docs/proxy.md): run a local API with load balancing, API key rotation, optional access key, and a DevTools-style UI via `--ui`.
106
106
 
107
107
  #### Settings management
108
108
 
@@ -1 +1 @@
1
- import{i as e,t}from"./runner-CCy2YdOv.js";async function n(e){return t(r(e))}function r(e){return e===`codex`?`codex`:e===`gemini`?`gemini`:`claude`}function i(e,t,n){let i=r(e),o=e===`codex`?[`exec`,t]:[`-p`,t];return e===`gemini`&&n.model&&o.unshift(`-m`,n.model),{executable:i,baseArgs:o,yoloArgs:a(e,n.yolo)}}function a(e,t){if(t)switch(e){case`codex`:return[`--dangerously-bypass-approvals-and-sandbox`];case`gemini`:return[`-y`];case`claude`:return[`--dangerously-skip-permissions`]}}async function o(t,n,r){await e(i(t,n,r))}export{r as i,n,o as r,i as t};
1
+ import{i as e,t}from"./runner-QW_B2Hqh.js";async function n(e){return t(r(e))}function r(e){return e===`codex`?`codex`:e===`gemini`?`gemini`:`claude`}function i(e,t,n){let i=r(e),o=e===`codex`?[`exec`,t]:[`-p`,t];return e===`gemini`&&n.model&&o.unshift(`-m`,n.model),{executable:i,baseArgs:o,yoloArgs:a(e,n.yolo)}}function a(e,t){if(t)switch(e){case`codex`:return[`--dangerously-bypass-approvals-and-sandbox`];case`gemini`:return[`-y`];case`claude`:return[`--dangerously-skip-permissions`]}}async function o(t,n,r){await e(i(t,n,r))}export{r as i,n,o as r,i as t};
@@ -1,5 +1,5 @@
1
- import { _ as ToolId, a as InspectResult, g as SwitchOptions, h as SettingsResult, i as EditOptions, n as ConfigObject, p as SettingsListData, u as Scope } from "./types-BzkIf_zy.js";
2
- import { n as SettingsAdapter } from "./interfaces-DY2ES_Kh.js";
1
+ import { _ as ToolId, a as InspectResult, g as SwitchOptions, h as SettingsResult, i as EditOptions, n as ConfigObject, p as SettingsListData, u as Scope } from "./types-B6FSmoLE.js";
2
+ import { n as SettingsAdapter } from "./interfaces-BZiHBjRr.js";
3
3
 
4
4
  //#region src/services/settings/adapters/base.d.ts
5
5
 
@@ -1 +1 @@
1
- import{n as e,t}from"./runner-CCy2YdOv.js";var n=class{async validateAvailability(){return t(this.executable)}async getVersion(){try{return await e(this.executable)}catch{return`unknown`}}};export{n as t};
1
+ import{n as e,t}from"./runner-QW_B2Hqh.js";var n=class{async validateAvailability(){return t(this.executable)}async getVersion(){try{return await e(this.executable)}catch{return`unknown`}}};export{n as t};
@@ -1,5 +1,5 @@
1
- import { _ as ToolId, o as LaunchCommandSpec } from "./types-BzkIf_zy.js";
2
- import { t as LaunchAdapter } from "./interfaces-DY2ES_Kh.js";
1
+ import { _ as ToolId, o as LaunchCommandSpec } from "./types-B6FSmoLE.js";
2
+ import { t as LaunchAdapter } from "./interfaces-BZiHBjRr.js";
3
3
 
4
4
  //#region src/services/launch/adapters/base.d.ts
5
5
 
@@ -1 +1 @@
1
- import{m as e,u as t}from"./errors-BzZfdKtJ.js";import{c as n,f as r,h as i,o as a}from"./fsStore-CwAffYMN.js";var o=class{validateAndResolvePath(e){if(!this.validateScope(e))throw new t(e);return this.resolvePath(e)}async list(e){let t=this.validateAndResolvePath(e);return{type:`entries`,entries:this.readConfig(t),filePath:t}}async switchProfile(t,n,r){throw new e(`switch-profile`,this.toolId)}async inspect(e,t){let r=this.validateAndResolvePath(e);if(!a(r))return{path:r,exists:!1};let i=n(r),o=this.readConfig(r);return{path:r,exists:!0,content:JSON.stringify(o,null,2),size:i?.size,lastModified:i?.lastModified}}async edit(t,n){throw new e(`edit`,this.toolId)}readConfig(e){return r(e)}writeConfig(e,t,n=!0){i(e,t,n)}};export{o as t};
1
+ import{m as e,u as t}from"./errors-x3Es7YJ3.js";import{c as n,f as r,h as i,o as a}from"./fsStore-D1omjK0d.js";var o=class{validateAndResolvePath(e){if(!this.validateScope(e))throw new t(e);return this.resolvePath(e)}async list(e){let t=this.validateAndResolvePath(e);return{type:`entries`,entries:this.readConfig(t),filePath:t}}async switchProfile(t,n,r){throw new e(`switch-profile`,this.toolId)}async inspect(e,t){let r=this.validateAndResolvePath(e);if(!a(r))return{path:r,exists:!1};let i=n(r),o=this.readConfig(r);return{path:r,exists:!0,content:JSON.stringify(o,null,2),size:i?.size,lastModified:i?.lastModified}}async edit(t,n){throw new e(`edit`,this.toolId)}readConfig(e){return r(e)}writeConfig(e,t,n=!0){i(e,t,n)}};export{o as t};
@@ -1 +1 @@
1
- import{p as e}from"./errors-BzZfdKtJ.js";import{n as t,t as n}from"./editor-6Nht_jnv.js";import{t as r}from"./format-q5VlTrky.js";import{a as i,c as a,h as o,m as s,s as c}from"./fsStore-CwAffYMN.js";import{t as l}from"./base-BUo37ebo.js";import{t as u}from"./claudeDefault-D35i6PTj.js";import*as d from"node:fs";import*as f from"node:path";var p=class extends l{toolId=`claude`;async list(e){let t=s(this.validateAndResolvePath(e)),n=f.dirname(t),r=f.basename(t),i=[this.#e(t,e,!0)];if(d.existsSync(n)){let t=d.readdirSync(n,{withFileTypes:!0});for(let a of t){if(!a.isFile()||a.name===r||!this.#r(a.name))continue;let t=f.join(n,a.name);i.push(this.#e(t,e,!1))}}return{type:`files`,files:this.#i(i)}}resolvePath(e){switch(e){case`user`:return`~/.claude/settings.json`;case`project`:return`.claude/settings.json`;case`local`:return`.claude/settings.local.json`;default:throw Error(`Unsupported scope for Claude: ${e}`)}}validateScope(e){return[`user`,`project`,`local`].includes(e)}async switchProfile(t,n,i){let a=s(this.validateAndResolvePath(t)),o=n.trim();if(!o)throw Error(`Variant name cannot be empty`);let l=c(f.dirname(a),o,a);if(!l)throw new e(o);let u=this.readConfig(l),d={};try{d=this.readConfig(a)}catch{d={}}let p=r(d,u);if(i?.preview)return{success:!0,preview:!0,filePath:a,diff:p??void 0,data:{from:l,to:a,hasChanges:!!p},message:p?`Preview generated. Review diff before applying.`:`Current settings already match the selected variant.`};if(!p)return{success:!0,message:`Current settings already match the selected variant.`,filePath:a};let m=i?.backup??!1;return this.writeConfig(a,u,m),{success:!0,message:`Switched to ${f.basename(l)}`,filePath:a,data:{from:l,to:a}}}async edit(e,r){let a=s(this.validateAndResolvePath(e)),l=f.dirname(a),u=r.name?.trim(),p=t(r.ide);i(l);let m=a,h=`default`;if(u&&u!==``&&u!==`default`){let e=c(l,u,a);if(e)m=e;else if(m=f.join(l,`settings.${u}.json`),!d.existsSync(m)){let e=this.#n(a);o(m,e,!1)}h=u}else if(!d.existsSync(m)){let e=this.#n(a);o(m,e,!1)}return await n(p,m),{success:!0,message:`Opened ${h} settings in ${p}`,filePath:m,data:{variant:h,ide:p}}}#e(e,t,n){let r=a(e);return{filename:f.basename(e),variant:this.#t(e),path:e,scope:t,active:n,exists:!!r,size:r?.size,lastModified:r?.lastModified}}#t(e){let t=f.basename(e),n=t.match(/^settings(?:[._-](.+))?\.json$/);return n?n[1]??`default`:t.replace(/\.json$/,``)}#n(e){try{if(d.existsSync(e)){let t=d.readFileSync(e,`utf-8`);return JSON.parse(t)}}catch{}return{...u}}#r(e){return/^settings[._-].+\.json$/.test(e)}#i(e){return e.sort((e,t)=>e.active&&!t.active?-1:!e.active&&t.active?1:e.variant.localeCompare(t.variant))}};export{p as t};
1
+ import{p as e}from"./errors-x3Es7YJ3.js";import{n as t,t as n}from"./editor-DUx1Sby2.js";import{t as r}from"./format-CZL0rRQR.js";import{a as i,c as a,h as o,m as s,s as c}from"./fsStore-D1omjK0d.js";import{t as l}from"./base-Dv8Ajp1w.js";import{t as u}from"./claudeDefault-BP2oPKZC.js";import*as d from"node:fs";import*as f from"node:path";var p=class extends l{toolId=`claude`;async list(e){let t=s(this.validateAndResolvePath(e)),n=f.dirname(t),r=f.basename(t),i=[this.#e(t,e,!0)];if(d.existsSync(n)){let t=d.readdirSync(n,{withFileTypes:!0});for(let a of t){if(!a.isFile()||a.name===r||!this.#r(a.name))continue;let t=f.join(n,a.name);i.push(this.#e(t,e,!1))}}return{type:`files`,files:this.#i(i)}}resolvePath(e){switch(e){case`user`:return`~/.claude/settings.json`;case`project`:return`.claude/settings.json`;case`local`:return`.claude/settings.local.json`;default:throw Error(`Unsupported scope for Claude: ${e}`)}}validateScope(e){return[`user`,`project`,`local`].includes(e)}async switchProfile(t,n,i){let a=s(this.validateAndResolvePath(t)),o=n.trim();if(!o)throw Error(`Variant name cannot be empty`);let l=c(f.dirname(a),o,a);if(!l)throw new e(o);let u=this.readConfig(l),d={};try{d=this.readConfig(a)}catch{d={}}let p=r(d,u);if(i?.preview)return{success:!0,preview:!0,filePath:a,diff:p??void 0,data:{from:l,to:a,hasChanges:!!p},message:p?`Preview generated. Review diff before applying.`:`Current settings already match the selected variant.`};if(!p)return{success:!0,message:`Current settings already match the selected variant.`,filePath:a};let m=i?.backup??!1;return this.writeConfig(a,u,m),{success:!0,message:`Switched to ${f.basename(l)}`,filePath:a,data:{from:l,to:a}}}async edit(e,r){let a=s(this.validateAndResolvePath(e)),l=f.dirname(a),u=r.name?.trim(),p=t(r.ide);i(l);let m=a,h=`default`;if(u&&u!==``&&u!==`default`){let e=c(l,u,a);if(e)m=e;else if(m=f.join(l,`settings.${u}.json`),!d.existsSync(m)){let e=this.#n(a);o(m,e,!1)}h=u}else if(!d.existsSync(m)){let e=this.#n(a);o(m,e,!1)}return await n(p,m),{success:!0,message:`Opened ${h} settings in ${p}`,filePath:m,data:{variant:h,ide:p}}}#e(e,t,n){let r=a(e);return{filename:f.basename(e),variant:this.#t(e),path:e,scope:t,active:n,exists:!!r,size:r?.size,lastModified:r?.lastModified}}#t(e){let t=f.basename(e),n=t.match(/^settings(?:[._-](.+))?\.json$/);return n?n[1]??`default`:t.replace(/\.json$/,``)}#n(e){try{if(d.existsSync(e)){let t=d.readFileSync(e,`utf-8`);return JSON.parse(t)}}catch{}return{...u}}#r(e){return/^settings[._-].+\.json$/.test(e)}#i(e){return e.sort((e,t)=>e.active&&!t.active?-1:!e.active&&t.active?1:e.variant.localeCompare(t.variant))}};export{p as t};
@@ -1 +1 @@
1
- import{t as e}from"./base-sBAL-g57.js";import*as t from"node:fs";import*as n from"node:path";import*as r from"node:os";var i=class extends e{toolId=`claude`;executable=`claude`;buildCommandSpec(e){let t=[];if(e.continue?t.push(`-c`):e.resume&&t.push(`-r`),e.settings){let n=this.#e(e.settings);t.push(`--settings`,n)}return{executable:this.executable,baseArgs:t,yoloArgs:e.yolo?[`--dangerously-skip-permissions`]:void 0}}#e(e){if(e.trim().startsWith(`{`)||n.isAbsolute(e)||e.endsWith(`.json`))return e;let i=n.join(r.homedir(),`.claude`),a=n.join(i,`settings.${e}.json`);if(t.existsSync(a))return a;let o=n.join(i,`settings-${e}.json`);return t.existsSync(o)?o:a}};export{i as t};
1
+ import{t as e}from"./base-Cb8gvSZx.js";import*as t from"node:fs";import*as n from"node:path";import*as r from"node:os";var i=class extends e{toolId=`claude`;executable=`claude`;buildCommandSpec(e){let t=[];if(e.continue?t.push(`-c`):e.resume&&t.push(`-r`),e.settings){let n=this.#e(e.settings);t.push(`--settings`,n)}return{executable:this.executable,baseArgs:t,yoloArgs:e.yolo?[`--dangerously-skip-permissions`]:void 0}}#e(e){if(e.trim().startsWith(`{`)||n.isAbsolute(e)||e.endsWith(`.json`))return e;let i=n.join(r.homedir(),`.claude`),a=n.join(i,`settings.${e}.json`);if(t.existsSync(a))return a;let o=n.join(i,`settings-${e}.json`);return t.existsSync(o)?o:a}};export{i as t};
@@ -1,4 +1,4 @@
1
- import{i as e,t}from"./cli-BQnaBwZZ.js";import{t as n}from"./engine-C0--Is1U.js";import{t as r}from"./interactive-selector-CrQv5JEK.js";import*as i from"node:readline";async function a(t,i,a,c){let l=i.getRegistry(),u=l.getAllModels(),d=t.topic,f=t.models?t.models.split(`,`).map(e=>e.trim()).filter(Boolean):[];d||=await e(`Enter topic: `),f.length===0&&(f=await r(u));let p=f.filter(e=>!l.isModelSupported(e));p.length>0&&c(`Unsupported model(s): ${p.join(`, `)}. Available: ${u.join(`, `)}`),f.length<2&&c(`At least 2 models are required for a discussion.`);let m=new n(i,{topic:d,strategy:t.strategy,timeoutMs:t.timeout*1e3});return f.forEach((e,t)=>{m.addParticipant({id:`model-${t}`,name:e,model:e,type:`ai`})}),m.addParticipant({id:`user`,name:`User`,type:`human`}),a(`\nStarting discussion on "${d}" with: ${f.join(`, `)}\n`),a(`Controls:`),a(` [Space] Pause/Resume`),a(` [m] Toggle Auto/Manual Mode`),a(` [n] Next Turn (Manual Mode)`),a(` [i] Interrupt / Speak`),a(` [s] Summarize & Stop`),a(` [q] Quit`),a(`
1
+ import{i as e,t}from"./cli-BevqZj-b.js";import{t as n}from"./engine-Bb22YPU0.js";import{t as r}from"./interactive-selector-DcA_muUR.js";import*as i from"node:readline";async function a(t,i,a,c){let l=i.getRegistry(),u=l.getAllModels(),d=t.topic,f=t.models?t.models.split(`,`).map(e=>e.trim()).filter(Boolean):[];d||=await e(`Enter topic: `),f.length===0&&(f=await r(u));let p=f.filter(e=>!l.isModelSupported(e));p.length>0&&c(`Unsupported model(s): ${p.join(`, `)}. Available: ${u.join(`, `)}`),f.length<2&&c(`At least 2 models are required for a discussion.`);let m=new n(i,{topic:d,strategy:t.strategy,timeoutMs:t.timeout*1e3});return f.forEach((e,t)=>{m.addParticipant({id:`model-${t}`,name:e,model:e,type:`ai`})}),m.addParticipant({id:`user`,name:`User`,type:`human`}),a(`\nStarting discussion on "${d}" with: ${f.join(`, `)}\n`),a(`Controls:`),a(` [Space] Pause/Resume`),a(` [m] Toggle Auto/Manual Mode`),a(` [n] Next Turn (Manual Mode)`),a(` [i] Interrupt / Speak`),a(` [s] Summarize & Stop`),a(` [q] Quit`),a(`
2
2
  --------------------------------------------------
3
3
  `),o(m,a),m.start(),s(m,a),new Promise(()=>{})}function o(e,t){e.on(`turn-start`,t=>{let n=e.participants.find(e=>e.id===t);process.stdout.write(`\n\n[${n?.name}]: `)}),e.on(`message-chunk`,({delta:e})=>{process.stdout.write(e)}),e.on(`error`,({participantId:t,error:n})=>{let r=e.participants.find(e=>e.id===t);console.error(`\n[Error] ${r?.name}: ${n.message}`)}),e.on(`participant-dropped`,t=>{let n=e.participants.find(e=>e.id===t);console.error(`\n[System] ${n?.name} has left the chat (too many errors).`)})}function s(e,n){i.emitKeypressEvents(process.stdin),process.stdin.isTTY&&(process.stdin.setRawMode(!0),process.stdin.resume()),process.on(`SIGINT`,()=>{e.stop(),process.exit()}),process.stdin.on(`keypress`,(r,i)=>{(async()=>{if(i.ctrl&&i.name===`c`&&process.exit(),i.name===`q`&&(e.stop(),process.exit()),i.name===`space`&&(e.status===`paused`?e.resume():e.pause(),n(`\n[System] Discussion ${e.status}`)),i.name===`m`){let t=e.mode===`auto`?`manual`:`auto`;e.setMode(t),n(`\n[System] Mode switched to ${t.toUpperCase()}`)}if(i.name===`n`)if(e.mode===`manual`){if(e.status===`discussing`||e.status===`paused`){let t=e.participants.filter(e=>e.type===`ai`),n=t[Math.floor(Math.random()*t.length)];e.setNextSpeaker(n.id)}}else n(`
4
4
  [System] Switch to Manual mode [m] to use Next [n]`);if(i.name===`i`){e.pause(),process.stdin.setRawMode(!1),process.stdout.write(`
@@ -1 +1 @@
1
- import{t as e}from"./errors-BzZfdKtJ.js";import{n as t,t as n}from"./editor-6Nht_jnv.js";import{a as r,c as i,d as a,f as o,g as s,l as c,m as l,o as u,p as d,r as f,t as p}from"./fsStore-CwAffYMN.js";import{t as m}from"./base-BUo37ebo.js";import*as h from"node:path";const g=`~/.codex/auth-profiles`,_=`~/.codex/auth.json`;var v=class extends m{toolId=`codex`;async list(e){let t=this.validateAndResolvePath(e),n=this.readConfig(t),r=this.#c(n),i=this.listAuthProfiles(),a=u(_),o=typeof n.current_auth_profile==`string`?n.current_auth_profile:a||i.length>0?this.#d():null;return{type:`entries`,entries:{current_provider:typeof n.model_provider==`string`?n.model_provider:null,current_profile:typeof n.current_profile==`string`?n.current_profile:null,current_auth_profile:o,providers:r,auth_profiles:i},filePath:t}}async inspect(e,t){let n=this.validateAndResolvePath(e),r=l(n),a=u(n),o=a?this.#s(n):{},s=a?i(n):null,c=t?.trim();if(c){if(this.isAuthProfile(c)){let e=`${g}/${c}.json`,t=this.#u(e),n=i(e);return{path:l(e),exists:u(e),content:JSON.stringify({mode:`auth`,authProfile:c,authFile:l(e),configFile:r,authData:t},null,2),size:n?.size,lastModified:n?.lastModified}}let e=y(o.model_providers)?o.model_providers:{};if(e[c])return{path:r,exists:a,content:JSON.stringify({mode:`provider`,currentProvider:c,config:e[c]??{}},null,2),size:s?.size,lastModified:s?.lastModified};let t=y(o.profiles)?o.profiles:{};return t[c]?{path:r,exists:a,content:JSON.stringify({mode:`profile`,currentProfile:c,config:t[c]??{}},null,2),size:s?.size,lastModified:s?.lastModified}:{path:r,exists:a,content:JSON.stringify({mode:`not_found`,requested:c,availableProviders:Object.keys(e),availableProfiles:Object.keys(t),availableAuthProfiles:this.listAuthProfiles()},null,2),size:s?.size,lastModified:s?.lastModified}}if(!a)return this.#e(r);if(o.current_profile&&typeof o.current_profile==`string`)return this.#t(o,r,s);if(o.model_provider&&typeof o.model_provider==`string`)return this.#n(o,r,s);let d=typeof o.current_auth_profile==`string`?o.current_auth_profile:null;return d||u(_)?this.#r(d,r,s):this.#i(r,s)}#e(e){if(u(_)){let e=this.#l(),t=this.#d();return{path:l(_),exists:!0,content:JSON.stringify({mode:`auth`,currentAuthProfile:t,authFile:l(_),authData:e},null,2)}}return{path:e,exists:!1}}#t(e,t,n){let r=e.current_profile,i=(y(e.profiles)?e.profiles:{})[r];return{path:t,exists:!0,content:JSON.stringify({mode:`profile`,currentProfile:r,config:y(i)?i:{}},null,2),size:n?.size,lastModified:n?.lastModified}}#n(e,t,n){let r=e.model_provider,i=(y(e.model_providers)?e.model_providers:{})[r];return{path:t,exists:!0,content:JSON.stringify({mode:`provider`,currentProvider:r,config:y(i)?i:{}},null,2),size:n?.size,lastModified:n?.lastModified}}#r(e,t,n){let r=this.#l(),i=e||this.#d();return{path:l(_),exists:!0,content:JSON.stringify({mode:`auth`,currentAuthProfile:i,authFile:l(_),configFile:t,authData:r},null,2),size:n?.size,lastModified:n?.lastModified}}#i(e,t){return{path:e,exists:!0,content:JSON.stringify({mode:`none`,message:`No active provider or auth configured. Run 'codex login' or configure a model_provider.`,configFile:e},null,2),size:t?.size,lastModified:t?.lastModified}}resolvePath(e){switch(e){case`user`:return`~/.codex/config.toml`;default:throw Error(`Unsupported scope for Codex: ${e}`)}}validateScope(e){return e===`user`}async switchProfile(e,t,n){return this.validateAndResolvePath(e),this.isAuthProfile(t)?this.#a(t):this.#o(e,t)}async edit(e,i){let a=this.validateAndResolvePath(e);if(!i.provider){let e=l(a);r(h.dirname(e)),u(a)||this.writeConfig(a,{});let o=t(i.ide);return await n(o,e),{success:!0,message:`Opened Codex config in ${o}`,filePath:e}}let o=i.provider.id?.trim()||i.provider.name?.trim();if(!o)throw Error(`Provider name cannot be empty`);let s=i.provider.base_url?.trim();if(!s)throw Error(`Base URL is required for Codex providers`);let c=i.provider.name?.trim()||o,d=i.provider.experimental_bearer_token?.trim();if(!d)throw Error(`Experimental bearer token is required for Codex providers`);let f=this.#s(a),p=y(f.model_providers)?{...f.model_providers}:{};p[o]={name:c,base_url:s,wire_api:`responses`,experimental_bearer_token:d};let m={...f,model_providers:p};return this.writeConfig(a,m),{success:!0,message:`Added model_providers.${o}`,filePath:l(a),data:p[o]}}listAuthProfiles(){return c(g).filter(e=>e.endsWith(`.json`)).map(e=>e.replace(`.json`,``))}isAuthProfile(e){return u(`${g}/${e}.json`)}saveAuthProfile(e,t=!1){let n=`${g}/${e}.json`;return u(_)?!t&&u(n)?{success:!1,message:`Profile "${e}" already exists. Use --force to overwrite.`}:(r(g),p(_,n),f(_),{success:!0,message:`Saved current auth as profile: ${e}\nauth.json has been removed. You can now login with another account.`,filePath:l(n)}):{success:!1,message:`No auth.json found. Please run 'codex login' first.`}}deleteAuthProfile(e){let t=`${g}/${e}.json`;return u(t)?(f(t),{success:!0,message:`Deleted auth profile: ${e}`}):{success:!1,message:`Auth profile "${e}" not found.`}}getAllSwitchableProfiles(e){let t=this.resolvePath(e),n=[];try{let e=this.readConfig(t),r=e.model_providers;y(r)&&(n=Object.keys(r));let i=e.profiles;y(i)&&(n=[...new Set([...n,...Object.keys(i)])])}catch{}let r=this.listAuthProfiles();return{providers:n,authProfiles:r}}#a(e){let t=`${g}/${e}.json`,n=`~/.codex/config.toml`;if(!u(t))return{success:!1,message:`Auth profile "${e}" not found.`};p(t,_);try{let t=this.#s(n);delete t.model_provider,delete t.current_profile,t.current_auth_profile=e,this.writeConfig(n,t)}catch{this.writeConfig(n,{current_auth_profile:e})}return{success:!0,message:`Switched to auth profile: ${e}`,filePath:l(_)}}#o(e,t){let n=this.resolvePath(e);u(_)&&f(_);let r=this.#s(n);delete r.current_auth_profile;let i=r.profiles,a=(y(i)?i:void 0)?.[t];if(y(a)){let e={...r};for(let[t,n]of Object.entries(a))e[t]=n;return e.current_profile=t,delete e.model_provider,this.writeConfig(n,e),{success:!0,message:`Switched to profile: ${t}`,filePath:l(n)}}delete r.current_profile;let o={...r,model_provider:t};return this.writeConfig(n,o),{success:!0,message:`Switched to provider: ${t}`,filePath:l(n)}}readConfig(e){return d(e)}writeConfig(e,t){s(e,t,!1)}#s(t){try{return this.readConfig(t)}catch(t){if(t instanceof e)return{};throw t}}#c(e){let t=e.model_providers;return y(t)?t:{}}#l(){if(!u(_))return null;try{return o(_)}catch{return null}}#u(e){if(!u(e))return null;try{return o(e)}catch{return null}}#d(){if(!u(_))return`default`;let e;try{e=a(_)}catch{return`default`}let t=this.listAuthProfiles();for(let n of t){let t=`${g}/${n}.json`;try{let r=a(t);if(e===r)return n}catch{continue}}return`default`}};const y=e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date);export{y as n,v as t};
1
+ import{t as e}from"./errors-x3Es7YJ3.js";import{n as t,t as n}from"./editor-DUx1Sby2.js";import{a as r,c as i,d as a,f as o,g as s,l as c,m as l,o as u,p as d,r as f,t as p}from"./fsStore-D1omjK0d.js";import{t as m}from"./base-Dv8Ajp1w.js";import*as h from"node:path";const g=`~/.codex/auth-profiles`,_=`~/.codex/auth.json`;var v=class extends m{toolId=`codex`;async list(e){let t=this.validateAndResolvePath(e),n=this.readConfig(t),r=this.#c(n),i=this.listAuthProfiles(),a=u(_),o=typeof n.current_auth_profile==`string`?n.current_auth_profile:a||i.length>0?this.#d():null;return{type:`entries`,entries:{current_provider:typeof n.model_provider==`string`?n.model_provider:null,current_profile:typeof n.current_profile==`string`?n.current_profile:null,current_auth_profile:o,providers:r,auth_profiles:i},filePath:t}}async inspect(e,t){let n=this.validateAndResolvePath(e),r=l(n),a=u(n),o=a?this.#s(n):{},s=a?i(n):null,c=t?.trim();if(c){if(this.isAuthProfile(c)){let e=`${g}/${c}.json`,t=this.#u(e),n=i(e);return{path:l(e),exists:u(e),content:JSON.stringify({mode:`auth`,authProfile:c,authFile:l(e),configFile:r,authData:t},null,2),size:n?.size,lastModified:n?.lastModified}}let e=y(o.model_providers)?o.model_providers:{};if(e[c])return{path:r,exists:a,content:JSON.stringify({mode:`provider`,currentProvider:c,config:e[c]??{}},null,2),size:s?.size,lastModified:s?.lastModified};let t=y(o.profiles)?o.profiles:{};return t[c]?{path:r,exists:a,content:JSON.stringify({mode:`profile`,currentProfile:c,config:t[c]??{}},null,2),size:s?.size,lastModified:s?.lastModified}:{path:r,exists:a,content:JSON.stringify({mode:`not_found`,requested:c,availableProviders:Object.keys(e),availableProfiles:Object.keys(t),availableAuthProfiles:this.listAuthProfiles()},null,2),size:s?.size,lastModified:s?.lastModified}}if(!a)return this.#e(r);if(o.current_profile&&typeof o.current_profile==`string`)return this.#t(o,r,s);if(o.model_provider&&typeof o.model_provider==`string`)return this.#n(o,r,s);let d=typeof o.current_auth_profile==`string`?o.current_auth_profile:null;return d||u(_)?this.#r(d,r,s):this.#i(r,s)}#e(e){if(u(_)){let e=this.#l(),t=this.#d();return{path:l(_),exists:!0,content:JSON.stringify({mode:`auth`,currentAuthProfile:t,authFile:l(_),authData:e},null,2)}}return{path:e,exists:!1}}#t(e,t,n){let r=e.current_profile,i=(y(e.profiles)?e.profiles:{})[r];return{path:t,exists:!0,content:JSON.stringify({mode:`profile`,currentProfile:r,config:y(i)?i:{}},null,2),size:n?.size,lastModified:n?.lastModified}}#n(e,t,n){let r=e.model_provider,i=(y(e.model_providers)?e.model_providers:{})[r];return{path:t,exists:!0,content:JSON.stringify({mode:`provider`,currentProvider:r,config:y(i)?i:{}},null,2),size:n?.size,lastModified:n?.lastModified}}#r(e,t,n){let r=this.#l(),i=e||this.#d();return{path:l(_),exists:!0,content:JSON.stringify({mode:`auth`,currentAuthProfile:i,authFile:l(_),configFile:t,authData:r},null,2),size:n?.size,lastModified:n?.lastModified}}#i(e,t){return{path:e,exists:!0,content:JSON.stringify({mode:`none`,message:`No active provider or auth configured. Run 'codex login' or configure a model_provider.`,configFile:e},null,2),size:t?.size,lastModified:t?.lastModified}}resolvePath(e){switch(e){case`user`:return`~/.codex/config.toml`;default:throw Error(`Unsupported scope for Codex: ${e}`)}}validateScope(e){return e===`user`}async switchProfile(e,t,n){return this.validateAndResolvePath(e),this.isAuthProfile(t)?this.#a(t):this.#o(e,t)}async edit(e,i){let a=this.validateAndResolvePath(e);if(!i.provider){let e=l(a);r(h.dirname(e)),u(a)||this.writeConfig(a,{});let o=t(i.ide);return await n(o,e),{success:!0,message:`Opened Codex config in ${o}`,filePath:e}}let o=i.provider.id?.trim()||i.provider.name?.trim();if(!o)throw Error(`Provider name cannot be empty`);let s=i.provider.base_url?.trim();if(!s)throw Error(`Base URL is required for Codex providers`);let c=i.provider.name?.trim()||o,d=i.provider.experimental_bearer_token?.trim();if(!d)throw Error(`Experimental bearer token is required for Codex providers`);let f=this.#s(a),p=y(f.model_providers)?{...f.model_providers}:{};p[o]={name:c,base_url:s,wire_api:`responses`,experimental_bearer_token:d};let m={...f,model_providers:p};return this.writeConfig(a,m),{success:!0,message:`Added model_providers.${o}`,filePath:l(a),data:p[o]}}listAuthProfiles(){return c(g).filter(e=>e.endsWith(`.json`)).map(e=>e.replace(`.json`,``))}isAuthProfile(e){return u(`${g}/${e}.json`)}saveAuthProfile(e,t=!1){let n=`${g}/${e}.json`;return u(_)?!t&&u(n)?{success:!1,message:`Profile "${e}" already exists. Use --force to overwrite.`}:(r(g),p(_,n),f(_),{success:!0,message:`Saved current auth as profile: ${e}\nauth.json has been removed. You can now login with another account.`,filePath:l(n)}):{success:!1,message:`No auth.json found. Please run 'codex login' first.`}}deleteAuthProfile(e){let t=`${g}/${e}.json`;return u(t)?(f(t),{success:!0,message:`Deleted auth profile: ${e}`}):{success:!1,message:`Auth profile "${e}" not found.`}}getAllSwitchableProfiles(e){let t=this.resolvePath(e),n=[];try{let e=this.readConfig(t),r=e.model_providers;y(r)&&(n=Object.keys(r));let i=e.profiles;y(i)&&(n=[...new Set([...n,...Object.keys(i)])])}catch{}let r=this.listAuthProfiles();return{providers:n,authProfiles:r}}#a(e){let t=`${g}/${e}.json`,n=`~/.codex/config.toml`;if(!u(t))return{success:!1,message:`Auth profile "${e}" not found.`};p(t,_);try{let t=this.#s(n);delete t.model_provider,delete t.current_profile,t.current_auth_profile=e,this.writeConfig(n,t)}catch{this.writeConfig(n,{current_auth_profile:e})}return{success:!0,message:`Switched to auth profile: ${e}`,filePath:l(_)}}#o(e,t){let n=this.resolvePath(e);u(_)&&f(_);let r=this.#s(n);delete r.current_auth_profile;let i=r.profiles,a=(y(i)?i:void 0)?.[t];if(y(a)){let e={...r};for(let[t,n]of Object.entries(a))e[t]=n;return e.current_profile=t,delete e.model_provider,this.writeConfig(n,e),{success:!0,message:`Switched to profile: ${t}`,filePath:l(n)}}delete r.current_profile;let o={...r,model_provider:t};return this.writeConfig(n,o),{success:!0,message:`Switched to provider: ${t}`,filePath:l(n)}}readConfig(e){return d(e)}writeConfig(e,t){s(e,t,!1)}#s(t){try{return this.readConfig(t)}catch(t){if(t instanceof e)return{};throw t}}#c(e){let t=e.model_providers;return y(t)?t:{}}#l(){if(!u(_))return null;try{return o(_)}catch{return null}}#u(e){if(!u(e))return null;try{return o(e)}catch{return null}}#d(){if(!u(_))return`default`;let e;try{e=a(_)}catch{return`default`}let t=this.listAuthProfiles();for(let n of t){let t=`${g}/${n}.json`;try{let r=a(t);if(e===r)return n}catch{continue}}return`default`}};const y=e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date);export{y as n,v as t};
@@ -1 +1 @@
1
- import{t as e}from"./base-sBAL-g57.js";var t=class extends e{toolId=`codex`;executable=`codex`;buildCommandSpec(e){let t=[];if(e.settings){let n=this.#e(e.settings);t.push(...n)}return e.continue?t.push(`resume`,`--last`):e.resume&&t.push(`resume`),{executable:this.executable,baseArgs:t,yoloArgs:e.yolo?[`--dangerously-bypass-approvals-and-sandbox`]:void 0}}#e(e){let t=[];if(e.includes(`=`)){let n=e.split(`;`).map(e=>e.trim());for(let e of n)e&&t.push(`-c`,e)}else t.push(`-c`,`model=${e}`);return t}};export{t};
1
+ import{t as e}from"./base-Cb8gvSZx.js";var t=class extends e{toolId=`codex`;executable=`codex`;buildCommandSpec(e){let t=[];if(e.settings){let n=this.#e(e.settings);t.push(...n)}return e.continue?t.push(`resume`,`--last`):e.resume&&t.push(`resume`),{executable:this.executable,baseArgs:t,yoloArgs:e.yolo?[`--dangerously-bypass-approvals-and-sandbox`]:void 0}}#e(e){let t=[];if(e.includes(`=`)){let n=e.split(`;`).map(e=>e.trim());for(let e of n)e&&t.push(`-c`,e)}else t.push(`-c`,`model=${e}`);return t}};export{t};
@@ -1,4 +1,4 @@
1
- import{i as e}from"../../cli-BQnaBwZZ.js";import"../../errors-BzZfdKtJ.js";import"../../editor-6Nht_jnv.js";import"../../logger-CTwnEBEm.js";import{t}from"../../runner-CZA7oPjO.js";import"../../config-Bf-EeKY5.js";import"../../fsStore-CwAffYMN.js";import"../../base-BUo37ebo.js";import"../../template-zeZsnoLb.js";import"../../xling-CMIOhJ6S.js";import"../../providerRegistry-Dl_IFKMc.js";import"../../client-BbukhYrN.js";import"../../types-DEWc4NEP.js";import"../../loadBalancer-BUZZKUIh.js";import"../../errorClassifier-B-lYIh-6.js";import{n}from"../../router-gcWKPkkX.js";import{t as r}from"../../server-iGv0zRYN.js";import"../../engine-C0--Is1U.js";import{Command as i,Flags as a}from"@oclif/core";import*as o from"open";var s=class s extends i{static summary=`Multi-model council with peer judging and synthesis`;static description=`
1
+ import{i as e}from"../../cli-BevqZj-b.js";import"../../errors-x3Es7YJ3.js";import"../../editor-DUx1Sby2.js";import"../../logger-Dbg2P_Wi.js";import{t}from"../../runner-CRD0pg6G.js";import"../../config-D0b5Ceh4.js";import"../../fsStore-D1omjK0d.js";import"../../base-Dv8Ajp1w.js";import"../../template-DtJFiC8I.js";import"../../xling-DxPgM9hF.js";import"../../providerRegistry-Cioo_VTs.js";import"../../client-BklkqGNW.js";import"../../types-CDh8FKyF.js";import"../../loadBalancer-DNwUsuJG.js";import"../../errorClassifier-mZXKjKvv.js";import{n}from"../../router-DfJrwCH_.js";import{t as r}from"../../server-CLuWJVwE.js";import"../../engine-Bb22YPU0.js";import{Command as i,Flags as a}from"@oclif/core";import*as o from"open";var s=class s extends i{static summary=`Multi-model council with peer judging and synthesis`;static description=`
2
2
  Run a council: ask multiple models the same question, have them judge
3
3
  each other's answers anonymously, and synthesize the best response.
4
4
 
@@ -1,4 +1,4 @@
1
- import"../../cli-BQnaBwZZ.js";import"../../errors-BzZfdKtJ.js";import"../../editor-6Nht_jnv.js";import"../../logger-CTwnEBEm.js";import"../../runner-CZA7oPjO.js";import"../../config-Bf-EeKY5.js";import"../../fsStore-CwAffYMN.js";import"../../base-BUo37ebo.js";import"../../template-zeZsnoLb.js";import"../../xling-CMIOhJ6S.js";import"../../providerRegistry-Dl_IFKMc.js";import"../../client-BbukhYrN.js";import"../../types-DEWc4NEP.js";import"../../loadBalancer-BUZZKUIh.js";import"../../errorClassifier-B-lYIh-6.js";import{n as e}from"../../router-gcWKPkkX.js";import"../../server-iGv0zRYN.js";import"../../engine-C0--Is1U.js";import{t}from"../../ui-mode-DeQ0RdzZ.js";import"../../interactive-selector-CrQv5JEK.js";import{t as n}from"../../cli-mode-BAKzBdi-.js";import{Command as r,Flags as i}from"@oclif/core";var a=class a extends r{static summary=`Run a roundtable between multiple AI models via CLI or Web UI`;static description=`
1
+ import"../../cli-BevqZj-b.js";import"../../errors-x3Es7YJ3.js";import"../../editor-DUx1Sby2.js";import"../../logger-Dbg2P_Wi.js";import"../../runner-CRD0pg6G.js";import"../../config-D0b5Ceh4.js";import"../../fsStore-D1omjK0d.js";import"../../base-Dv8Ajp1w.js";import"../../template-DtJFiC8I.js";import"../../xling-DxPgM9hF.js";import"../../providerRegistry-Cioo_VTs.js";import"../../client-BklkqGNW.js";import"../../types-CDh8FKyF.js";import"../../loadBalancer-DNwUsuJG.js";import"../../errorClassifier-mZXKjKvv.js";import{n as e}from"../../router-DfJrwCH_.js";import"../../server-CLuWJVwE.js";import"../../engine-Bb22YPU0.js";import{t}from"../../ui-mode-CU4kdvaw.js";import"../../interactive-selector-DcA_muUR.js";import{t as n}from"../../cli-mode-rz6jyP4c.js";import{Command as r,Flags as i}from"@oclif/core";var a=class a extends r{static summary=`Run a roundtable between multiple AI models via CLI or Web UI`;static description=`
2
2
  Start a discussion between multiple AI models.
3
3
 
4
4
  In CLI mode, models take turns responding to each other's messages.
@@ -1,4 +1,4 @@
1
- import{t as e}from"../../git-CvgdaUQP.js";import"../../validators-CzOBqk3u.js";import"../../errors-BzZfdKtJ.js";import"../../runner-CCy2YdOv.js";import"../../utils-CCoDGqk7.js";import"../../pr-DYOhlKHw.js";import"../../view-4iWEelup.js";import"../../worktree-CFMEZX8U.js";import"../../create-CffFD_Yh.js";import{t}from"../../dispatcher-BLDVBwMH.js";import{Command as n,Flags as r}from"@oclif/core";var i=class i extends n{static summary=`Create a pull request (PR Create)`;static description=`
1
+ import{t as e}from"../../git-DrTSFbmV.js";import"../../validators-kRNHvOZQ.js";import"../../errors-x3Es7YJ3.js";import"../../runner-QW_B2Hqh.js";import"../../utils-DugkWRYo.js";import"../../pr-BNviK79Q.js";import"../../view-zF4lc17m.js";import"../../worktree-CrkzOfkB.js";import"../../create-C3P6UYhE.js";import{t}from"../../dispatcher-CPtFZ27f.js";import{Command as n,Flags as r}from"@oclif/core";var i=class i extends n{static summary=`Create a pull request (PR Create)`;static description=`
2
2
  Create a pull request using GitHub CLI.
3
3
  Supports automatic browser preview with customizable browser selection.
4
4
  `;static examples=[{description:`Create PR interactively`,command:`<%= config.bin %> <%= command.id %>`},{description:`Create PR with title and body`,command:`<%= config.bin %> <%= command.id %> --title "Feature X" --body "Implements feature X"`},{description:`Create PR and open in browser`,command:`<%= config.bin %> <%= command.id %> --web`},{description:`Create PR and preview in Safari`,command:`<%= config.bin %> <%= command.id %> --web --browser safari`},{description:`Create draft PR`,command:`<%= config.bin %> <%= command.id %> --draft --title "WIP: Feature X"`},{description:`Create PR with reviewers and labels`,command:`<%= config.bin %> <%= command.id %> --reviewer user1 --reviewer user2 --label bug --label urgent`}];static flags={title:r.string({char:`t`,description:`PR title`}),body:r.string({char:`b`,description:`PR body/description`}),base:r.string({description:`Base branch (default: repository default branch)`}),head:r.string({description:`Head branch (default: current branch)`}),draft:r.boolean({char:`d`,description:`Create as draft PR`,default:!1}),web:r.boolean({char:`w`,description:`Open PR in browser after creation`,default:!1}),browser:r.string({description:`Browser to use when --web is enabled`,options:[...e],default:`chrome`}),assignee:r.string({char:`a`,description:`Assign user(s) (can be used multiple times)`,multiple:!0}),reviewer:r.string({char:`r`,description:`Request reviewer(s) (can be used multiple times)`,multiple:!0}),label:r.string({char:`l`,description:`Add label(s) (can be used multiple times)`,multiple:!0})};async run(){let{flags:e}=await this.parse(i),n=new t,r={title:e.title,body:e.body,base:e.base,head:e.head,draft:e.draft,web:e.web,browser:e.browser,assignee:e.assignee,reviewer:e.reviewer,label:e.label};try{let e=await n.execute({command:`prc`,cwd:process.cwd(),data:r});this.log(`✓ ${e.message}`),e.details?.draft&&this.log(` Type: Draft PR`),e.details?.base&&this.log(` Base: ${e.details.base}`),e.details?.head&&this.log(` Head: ${e.details.head}`)}catch(e){this.error(e.message,{exit:1})}}};export{i as default};
@@ -1,4 +1,4 @@
1
- import"../../validators-CzOBqk3u.js";import"../../errors-BzZfdKtJ.js";import"../../runner-CCy2YdOv.js";import"../../utils-CCoDGqk7.js";import"../../pr-DYOhlKHw.js";import"../../view-4iWEelup.js";import"../../worktree-CFMEZX8U.js";import"../../create-CffFD_Yh.js";import{t as e}from"../../dispatcher-BLDVBwMH.js";import{Args as t,Command as n,Flags as r}from"@oclif/core";var i=class i extends n{static summary=`Checkout a PR branch (PR Read/Retrieve)`;static description=`
1
+ import"../../validators-kRNHvOZQ.js";import"../../errors-x3Es7YJ3.js";import"../../runner-QW_B2Hqh.js";import"../../utils-DugkWRYo.js";import"../../pr-BNviK79Q.js";import"../../view-zF4lc17m.js";import"../../worktree-CrkzOfkB.js";import"../../create-C3P6UYhE.js";import{t as e}from"../../dispatcher-CPtFZ27f.js";import{Args as t,Command as n,Flags as r}from"@oclif/core";var i=class i extends n{static summary=`Checkout a PR branch (PR Read/Retrieve)`;static description=`
2
2
  Checkout a pull request branch using GitHub CLI (gh) or git fallback.
3
3
  Automatically detects gh availability and falls back to git fetch if needed.
4
4
  `;static examples=[{description:`Checkout PR using gh or git fallback`,command:`<%= config.bin %> <%= command.id %> 123`},{description:`Checkout PR to specific branch`,command:`<%= config.bin %> <%= command.id %> 456 --branch my-pr-branch`},{description:`Force git fallback with custom remote`,command:`<%= config.bin %> <%= command.id %> 789 --no-gh --remote upstream`},{description:`Checkout a PR from another repo (owner:repo#id)`,command:`<%= config.bin %> <%= command.id %> octo/demo-repo#321 --branch demo-pr`}];static args={id:t.string({description:`PR number or owner:repo#123 format`,required:!0})};static flags={branch:r.string({char:`b`,description:`Branch name (default: pr/<id>)`}),remote:r.string({char:`r`,description:`Remote name`,default:`origin`}),"no-gh":r.boolean({description:`Skip GitHub CLI, use git directly`,default:!1})};async run(){let{args:t,flags:n}=await this.parse(i),r=new e,a={id:t.id,branch:n.branch,strategy:n[`no-gh`]?`git`:`gh`,remote:n.remote};try{let e=await r.execute({command:`prr`,cwd:process.cwd(),data:a});this.log(`✓ ${e.message}`),e.details&&(this.log(` Strategy: ${e.details.strategy}`),this.log(` Branch: ${e.details.branch}`))}catch(e){this.error(e.message,{exit:1})}}};export{i as default};
@@ -1,4 +1,4 @@
1
- import{t as e}from"../../git-CvgdaUQP.js";import"../../validators-CzOBqk3u.js";import"../../errors-BzZfdKtJ.js";import"../../runner-CCy2YdOv.js";import"../../utils-CCoDGqk7.js";import"../../pr-DYOhlKHw.js";import"../../view-4iWEelup.js";import"../../worktree-CFMEZX8U.js";import"../../create-CffFD_Yh.js";import{t}from"../../dispatcher-BLDVBwMH.js";import{Args as n,Command as r,Flags as i}from"@oclif/core";var a=class a extends r{static summary=`Open PR in web browser (PR View)`;static description=`
1
+ import{t as e}from"../../git-DrTSFbmV.js";import"../../validators-kRNHvOZQ.js";import"../../errors-x3Es7YJ3.js";import"../../runner-QW_B2Hqh.js";import"../../utils-DugkWRYo.js";import"../../pr-BNviK79Q.js";import"../../view-zF4lc17m.js";import"../../worktree-CrkzOfkB.js";import"../../create-C3P6UYhE.js";import{t}from"../../dispatcher-CPtFZ27f.js";import{Args as n,Command as r,Flags as i}from"@oclif/core";var a=class a extends r{static summary=`Open PR in web browser (PR View)`;static description=`
2
2
  Open a pull request in your web browser using GitHub CLI.
3
3
  Supports multiple browsers: Chrome (default), Safari, Firefox, Arc, Edge, Dia.
4
4
  `;static examples=[{description:`Open PR in Chrome (default)`,command:`<%= config.bin %> <%= command.id %> 123`},{description:`Open PR in Safari`,command:`<%= config.bin %> <%= command.id %> 456 --browser safari`},{description:`Open PR in Firefox`,command:`<%= config.bin %> <%= command.id %> 789 --browser firefox`},{description:`Open PR in Arc`,command:`<%= config.bin %> <%= command.id %> 999 --browser arc`},{description:`Open a PR from another repo in Edge`,command:`<%= config.bin %> <%= command.id %> octo/demo-repo#42 --browser edge`}];static args={id:n.string({description:`PR number`,required:!0})};static flags={browser:i.string({char:`b`,description:`Browser to use`,options:[...e],default:`chrome`})};async run(){let{args:e,flags:n}=await this.parse(a),r=new t,i={id:e.id,browser:n.browser};try{let e=await r.execute({command:`prv`,cwd:process.cwd(),data:i});this.log(`✓ ${e.message}`)}catch(e){this.error(e.message,{exit:1})}}};export{a as default};
@@ -1,4 +1,4 @@
1
- import"../../validators-CzOBqk3u.js";import"../../errors-BzZfdKtJ.js";import"../../runner-CCy2YdOv.js";import"../../utils-CCoDGqk7.js";import"../../pr-DYOhlKHw.js";import"../../view-4iWEelup.js";import"../../worktree-CFMEZX8U.js";import"../../create-CffFD_Yh.js";import{t as e}from"../../dispatcher-BLDVBwMH.js";import{Command as t,Flags as n}from"@oclif/core";var r=class r extends t{static summary=`Manage git worktrees`;static description=`
1
+ import"../../validators-kRNHvOZQ.js";import"../../errors-x3Es7YJ3.js";import"../../runner-QW_B2Hqh.js";import"../../utils-DugkWRYo.js";import"../../pr-BNviK79Q.js";import"../../view-zF4lc17m.js";import"../../worktree-CrkzOfkB.js";import"../../create-C3P6UYhE.js";import{t as e}from"../../dispatcher-CPtFZ27f.js";import{Command as t,Flags as n}from"@oclif/core";var r=class r extends t{static summary=`Manage git worktrees`;static description=`
2
2
  Manage git worktrees: list existing worktrees, add new ones, remove, or prune stale entries.
3
3
  Git worktrees allow multiple working directories from a single repository.
4
4
  `;static examples=[{description:`List all worktrees in friendly format`,command:`<%= config.bin %> <%= command.id %> --list`},{description:`Add new worktree with auto-generated path`,command:`<%= config.bin %> <%= command.id %> --add --branch feature/login`},{description:`Add worktree with custom path`,command:`<%= config.bin %> <%= command.id %> -a -p ../repo-feature -b feature/login`},{description:`Switch to main worktree (outputs path for cd)`,command:`cd $(<%= config.bin %> <%= command.id %> -s)`},{description:`Switch to specific worktree by branch name`,command:`cd $(<%= config.bin %> <%= command.id %> -s -b feature/login)`},{description:`Remove worktree by branch name`,command:`<%= config.bin %> <%= command.id %> -r -b main`},{description:`Remove worktree by directory name`,command:`<%= config.bin %> <%= command.id %> -r -b xling-feature`},{description:`Remove worktree by path`,command:`<%= config.bin %> <%= command.id %> -r -p ../repo-feature`},{description:`Prune stale worktrees`,command:`<%= config.bin %> <%= command.id %> --prune`}];static flags={list:n.boolean({char:`l`,description:`List worktrees (default)`,default:!1}),add:n.boolean({char:`a`,description:`Add new worktree (auto-generates path if not specified)`,default:!1}),switch:n.boolean({char:`s`,description:`Get worktree path (outputs path only, use with: cd $(xling git:worktree -s -b <branch>))`,default:!1}),remove:n.boolean({char:`r`,description:`Remove worktree`,default:!1}),prune:n.boolean({description:`Prune stale worktrees`,default:!1}),path:n.string({char:`p`,description:`Worktree path (e.g., '../repo-feature' or absolute path). Auto-generated if not specified with --add.`}),branch:n.string({char:`b`,description:`Branch or worktree name. Defaults to main for --add and --switch. For --remove, intelligently matches branch or directory name.`}),force:n.boolean({char:`f`,description:`Force operation`,default:!1}),detach:n.boolean({description:`Detach HEAD in new worktree`,default:!1})};async run(){let{flags:t}=await this.parse(r),n=`list`;t.add?n=`add`:t.switch?n=`switch`:t.remove?n=`remove`:t.prune&&(n=`prune`);let i=new e,a={action:n,path:t.path,branch:t.branch,force:t.force,detach:t.detach};try{let e=await i.execute({command:`worktree`,cwd:process.cwd(),data:a});if(n===`switch`){this.log(e.message);return}this.log(`✓ ${e.message}`),e.details?.output&&this.log(`
@@ -1,4 +1,4 @@
1
- import"../../validators-CzOBqk3u.js";import"../../errors-BzZfdKtJ.js";import"../../runner-CCy2YdOv.js";import"../../utils-CCoDGqk7.js";import"../../pr-DYOhlKHw.js";import"../../view-4iWEelup.js";import"../../worktree-CFMEZX8U.js";import"../../create-CffFD_Yh.js";import{t as e}from"../../dispatcher-BLDVBwMH.js";import{Command as t,Flags as n}from"@oclif/core";var r=class r extends t{static summary=`Add a new git worktree`;static description=`
1
+ import"../../validators-kRNHvOZQ.js";import"../../errors-x3Es7YJ3.js";import"../../runner-QW_B2Hqh.js";import"../../utils-DugkWRYo.js";import"../../pr-BNviK79Q.js";import"../../view-zF4lc17m.js";import"../../worktree-CrkzOfkB.js";import"../../create-C3P6UYhE.js";import{t as e}from"../../dispatcher-CPtFZ27f.js";import{Command as t,Flags as n}from"@oclif/core";var r=class r extends t{static summary=`Add a new git worktree`;static description=`
2
2
  Create a new git worktree with automatic path generation.
3
3
  Defaults to main branch if not specified.
4
4
  Use --select to choose a branch from an interactive list.
@@ -1,4 +1,4 @@
1
- import"../../validators-CzOBqk3u.js";import"../../errors-BzZfdKtJ.js";import"../../runner-CCy2YdOv.js";import"../../utils-CCoDGqk7.js";import"../../pr-DYOhlKHw.js";import"../../view-4iWEelup.js";import"../../worktree-CFMEZX8U.js";import"../../create-CffFD_Yh.js";import{t as e}from"../../dispatcher-BLDVBwMH.js";import{Command as t}from"@oclif/core";var n=class extends t{static summary=`List git worktrees`;static description=`
1
+ import"../../validators-kRNHvOZQ.js";import"../../errors-x3Es7YJ3.js";import"../../runner-QW_B2Hqh.js";import"../../utils-DugkWRYo.js";import"../../pr-BNviK79Q.js";import"../../view-zF4lc17m.js";import"../../worktree-CrkzOfkB.js";import"../../create-C3P6UYhE.js";import{t as e}from"../../dispatcher-CPtFZ27f.js";import{Command as t}from"@oclif/core";var n=class extends t{static summary=`List git worktrees`;static description=`
2
2
  List all git worktrees in a friendly format.
3
3
  Shows the path and branch for each worktree.
4
4
  `;static examples=[{description:`List all worktrees`,command:`<%= config.bin %> <%= command.id %>`},{description:`List worktrees and filter for feature branches`,command:`<%= config.bin %> <%= command.id %> | grep feature/`},{description:`List worktrees from another repo directory`,command:`cd ~/projects/my-repo && <%= config.bin %> <%= command.id %>`}];async run(){let t=new e,n={action:`list`};try{let e=await t.execute({command:`worktree`,cwd:process.cwd(),data:n});this.log(`✓ ${e.message}`),e.details?.output&&this.log(`
@@ -1,4 +1,4 @@
1
- import"../../validators-CzOBqk3u.js";import"../../errors-BzZfdKtJ.js";import"../../runner-CCy2YdOv.js";import"../../utils-CCoDGqk7.js";import"../../pr-DYOhlKHw.js";import"../../view-4iWEelup.js";import"../../worktree-CFMEZX8U.js";import"../../create-CffFD_Yh.js";import{t as e}from"../../dispatcher-BLDVBwMH.js";import{Command as t}from"@oclif/core";var n=class extends t{static summary=`Prune stale git worktrees`;static description=`
1
+ import"../../validators-kRNHvOZQ.js";import"../../errors-x3Es7YJ3.js";import"../../runner-QW_B2Hqh.js";import"../../utils-DugkWRYo.js";import"../../pr-BNviK79Q.js";import"../../view-zF4lc17m.js";import"../../worktree-CrkzOfkB.js";import"../../create-C3P6UYhE.js";import{t as e}from"../../dispatcher-CPtFZ27f.js";import{Command as t}from"@oclif/core";var n=class extends t{static summary=`Prune stale git worktrees`;static description=`
2
2
  Remove stale worktree administrative files.
3
3
  This cleans up worktrees that have been manually deleted from the filesystem.
4
4
  `;static examples=[{description:`Prune stale worktrees`,command:`<%= config.bin %> <%= command.id %>`},{description:`Clean up after manually deleting a worktree folder`,command:`cd ~/repo && <%= config.bin %> <%= command.id %>`},{description:`Prune then list worktrees to verify`,command:`<%= config.bin %> <%= command.id %> && <%= config.bin %> git:wtl`}];async run(){let t=new e,n={action:`prune`};try{let e=await t.execute({command:`worktree`,cwd:process.cwd(),data:n});this.log(`✓ ${e.message}`),e.details?.output&&this.log(`
@@ -1,4 +1,4 @@
1
- import"../../validators-CzOBqk3u.js";import"../../errors-BzZfdKtJ.js";import"../../runner-CCy2YdOv.js";import"../../utils-CCoDGqk7.js";import"../../pr-DYOhlKHw.js";import"../../view-4iWEelup.js";import"../../worktree-CFMEZX8U.js";import"../../create-CffFD_Yh.js";import{t as e}from"../../dispatcher-BLDVBwMH.js";import{Command as t,Flags as n}from"@oclif/core";var r=class r extends t{static summary=`Remove a git worktree`;static description=`
1
+ import"../../validators-kRNHvOZQ.js";import"../../errors-x3Es7YJ3.js";import"../../runner-QW_B2Hqh.js";import"../../utils-DugkWRYo.js";import"../../pr-BNviK79Q.js";import"../../view-zF4lc17m.js";import"../../worktree-CrkzOfkB.js";import"../../create-C3P6UYhE.js";import{t as e}from"../../dispatcher-CPtFZ27f.js";import{Command as t,Flags as n}from"@oclif/core";var r=class r extends t{static summary=`Remove a git worktree`;static description=`
2
2
  Remove a git worktree by branch name, directory name, or path.
3
3
  Intelligently matches branch or directory names.
4
4
  Use --select to pick which worktree to remove from an interactive list.
@@ -1,4 +1,4 @@
1
- import"../../validators-CzOBqk3u.js";import"../../errors-BzZfdKtJ.js";import"../../runner-CCy2YdOv.js";import"../../utils-CCoDGqk7.js";import"../../pr-DYOhlKHw.js";import"../../view-4iWEelup.js";import"../../worktree-CFMEZX8U.js";import"../../create-CffFD_Yh.js";import{t as e}from"../../dispatcher-BLDVBwMH.js";import{Command as t,Flags as n}from"@oclif/core";import{spawn as r}from"node:child_process";var i=class i extends t{static summary=`Switch to a git worktree (opens subshell by default)`;static description=`
1
+ import"../../validators-kRNHvOZQ.js";import"../../errors-x3Es7YJ3.js";import"../../runner-QW_B2Hqh.js";import"../../utils-DugkWRYo.js";import"../../pr-BNviK79Q.js";import"../../view-zF4lc17m.js";import"../../worktree-CrkzOfkB.js";import"../../create-C3P6UYhE.js";import{t as e}from"../../dispatcher-CPtFZ27f.js";import{Command as t,Flags as n}from"@oclif/core";import{spawn as r}from"node:child_process";var i=class i extends t{static summary=`Switch to a git worktree (opens subshell by default)`;static description=`
2
2
  Find a matching worktree, then start a subshell rooted there.
3
3
  Defaults to the main branch if no branch/directory is provided.
4
4
  Use --path-only for scripting (outputs the path for cd $(...)).
@@ -1,4 +1,4 @@
1
- import"../../errors-BzZfdKtJ.js";import"../../editor-6Nht_jnv.js";import"../../runner-CCy2YdOv.js";import"../../config-Bf-EeKY5.js";import"../../fsStore-CwAffYMN.js";import"../../base-BUo37ebo.js";import"../../template-zeZsnoLb.js";import{t as e}from"../../xling-CMIOhJ6S.js";import"../../providerRegistry-Dl_IFKMc.js";import"../../client-BbukhYrN.js";import{n as t,t as n}from"../../types-DEWc4NEP.js";import"../../loadBalancer-BUZZKUIh.js";import"../../errorClassifier-B-lYIh-6.js";import{n as r}from"../../router-gcWKPkkX.js";import{t as i}from"../../prompt-builder-nnOfD-XX.js";import{i as a,n as o,r as s}from"../../backend-router-C_Pyt-UU.js";import{n as c,r as l,t as u}from"../../interactive-mode-DG1vxROG.js";import{Args as d,Command as f,Flags as p}from"@oclif/core";import*as m from"node:fs";var h=class h extends f{static summary=`Execute prompts via xling router or AI CLI tools`;static description=`
1
+ import"../../errors-x3Es7YJ3.js";import"../../editor-DUx1Sby2.js";import"../../runner-QW_B2Hqh.js";import"../../config-D0b5Ceh4.js";import"../../fsStore-D1omjK0d.js";import"../../base-Dv8Ajp1w.js";import"../../template-DtJFiC8I.js";import{t as e}from"../../xling-DxPgM9hF.js";import"../../providerRegistry-Cioo_VTs.js";import"../../client-BklkqGNW.js";import{n as t,t as n}from"../../types-CDh8FKyF.js";import"../../loadBalancer-DNwUsuJG.js";import"../../errorClassifier-mZXKjKvv.js";import{n as r}from"../../router-DfJrwCH_.js";import{t as i}from"../../prompt-builder-CPDeJ-iv.js";import{i as a,n as o,r as s}from"../../backend-router-aOcWH4J_.js";import{n as c,r as l,t as u}from"../../interactive-mode-CeP7yLWk.js";import{Args as d,Command as f,Flags as p}from"@oclif/core";import*as m from"node:fs";var h=class h extends f{static summary=`Execute prompts via xling router or AI CLI tools`;static description=`
2
2
  Send prompts to AI models using xling's built-in router (default) or
3
3
  delegate to CLI tools like codex exec, claude -p, or gemini.
4
4
 
@@ -1,4 +1,4 @@
1
- import{c as e,u as t}from"../../validators-CzOBqk3u.js";import"../../errors-BzZfdKtJ.js";import"../../editor-6Nht_jnv.js";import"../../config-Bf-EeKY5.js";import"../../fsStore-CwAffYMN.js";import"../../base-BUo37ebo.js";import"../../template-zeZsnoLb.js";import"../../xling-CMIOhJ6S.js";import"../../loadBalancer-BUZZKUIh.js";import"../../errorClassifier-B-lYIh-6.js";import"../../transformer-DTxdVklF.js";import{a as n,t as r}from"../../server-CAH57wTY.js";import{Command as i,Flags as a}from"@oclif/core";var o=class o extends i{static summary=`Start an OpenAI-compatible proxy server with load balancing and key rotation`;static description=`Boot a local proxy server that forwards requests to configured upstream AI providers.
1
+ import{c as e,u as t}from"../../validators-kRNHvOZQ.js";import"../../errors-x3Es7YJ3.js";import"../../editor-DUx1Sby2.js";import"../../config-D0b5Ceh4.js";import"../../fsStore-D1omjK0d.js";import"../../base-Dv8Ajp1w.js";import"../../template-DtJFiC8I.js";import"../../xling-DxPgM9hF.js";import"../../providerRegistry-Cioo_VTs.js";import"../../client-BklkqGNW.js";import"../../types-CDh8FKyF.js";import"../../loadBalancer-DNwUsuJG.js";import"../../errorClassifier-mZXKjKvv.js";import"../../router-DfJrwCH_.js";import"../../transformer-CZsLddVf.js";import"../../recorder-DkhUPHvu.js";import{a as n,t as r}from"../../server-CKux2o6V.js";import{Command as i,Flags as a}from"@oclif/core";import*as o from"open";var s=class s extends i{static summary=`Start an OpenAI-compatible proxy server with load balancing and key rotation`;static description=`Boot a local proxy server that forwards requests to configured upstream AI providers.
2
2
 
3
3
  Features:
4
4
  - OpenAI Chat Completions API (/v1/chat/completions)
@@ -9,11 +9,12 @@ Features:
9
9
  - API key rotation with automatic cooldown on errors
10
10
  - Model mapping and aliasing
11
11
  - Optional access key protection
12
+ - Optional DevTools-style UI on the same port (pass --ui)
12
13
 
13
- Configuration is read from ~/.claude/xling.json under the 'proxy' section.`;static examples=[{description:`Start proxy server on default port (4320)`,command:`<%= config.bin %> <%= command.id %>`},{description:`Start on custom port with access key protection`,command:`<%= config.bin %> <%= command.id %> --port 8080 --access-key my-secret-key`},{description:`Bind to all interfaces for external access`,command:`<%= config.bin %> <%= command.id %> --host 0.0.0.0`},{description:`Start with verbose logging disabled`,command:`<%= config.bin %> <%= command.id %> --no-logger`}];static flags={port:a.integer({char:`p`,description:`Port for the proxy server`,default:r}),host:a.string({description:`Host/interface to bind`,default:`127.0.0.1`}),"access-key":a.string({char:`k`,description:`Access key for proxy authentication (overrides config file)`}),logger:a.boolean({description:`Enable request logging`,default:!0,allowNo:!0})};async run(){let{flags:r}=await this.parse(o);try{let i=t(r.port),a=await n({host:e(r.host),port:i,accessKey:r[`access-key`],logger:r.logger});this.#e(a,r[`access-key`]),this.log(`
14
- Press Ctrl+C to stop the proxy server.`),await new Promise(()=>{})}catch(e){this.error(`Failed to start proxy server: ${e.message??e}`)}}#e(e,t){this.log(`Proxy server running at ${e.baseUrl}`),this.log(`Providers: ${e.providers.join(`, `)}`);let n=e.models.length>5?`${e.models.slice(0,5).join(`, `)} ...`:e.models.join(`, `);this.log(e.models.length?`Models: ${n}`:`No models detected.`),t&&(this.log(`
14
+ Configuration is read from ~/.claude/xling.json under the 'proxy' section.`;static examples=[{description:`Start proxy server on default port (4320)`,command:`<%= config.bin %> <%= command.id %>`},{description:`Start on custom port with access key protection`,command:`<%= config.bin %> <%= command.id %> --port 8080 --access-key my-secret-key`},{description:`Bind to all interfaces for external access`,command:`<%= config.bin %> <%= command.id %> --host 0.0.0.0`},{description:`Start with verbose logging disabled`,command:`<%= config.bin %> <%= command.id %> --no-logger`},{description:`Start proxy with DevTools-style UI on the same port`,command:`<%= config.bin %> <%= command.id %> --ui`}];static flags={port:a.integer({char:`p`,description:`Port for the proxy server`,default:r}),host:a.string({description:`Host/interface to bind`,default:`127.0.0.1`}),"access-key":a.string({char:`k`,description:`Access key for proxy authentication (overrides config file)`}),logger:a.boolean({description:`Enable request logging`,default:!0,allowNo:!0}),verbose:a.boolean({char:`v`,description:`Enable verbose logging (full request/response bodies)`,default:!1}),ui:a.boolean({description:`Serve DevTools-style proxy UI on the same host/port`,default:!1})};async run(){let{flags:r}=await this.parse(s);try{let i=t(r.port),a=await n({host:e(r.host),port:i,accessKey:r[`access-key`],logger:r.logger,verbose:r.verbose,ui:r.ui});if(this.#e(a,r[`access-key`],r.ui),r.ui){let e=`${a.baseUrl}/proxy`;this.log(`\nOpening UI at ${e} ...`);try{await o.default(e)}catch(t){this.warn(`Failed to auto-open browser: ${t.message}. Open ${e} manually.`)}}this.log(`
15
+ Press Ctrl+C to stop the proxy server.`),await new Promise(()=>{})}catch(e){this.error(`Failed to start proxy server: ${e.message??e}`)}}#e(e,t,n){this.log(`Proxy server running at ${e.baseUrl}`),this.log(`Providers: ${e.providers.join(`, `)}`);let r=e.models.length>5?`${e.models.slice(0,5).join(`, `)} ...`:e.models.join(`, `);this.log(e.models.length?`Models: ${r}`:`No models detected.`),t&&(this.log(`
15
16
  Access key protection: ENABLED`),this.log(`Include 'Authorization: Bearer <access-key>' in requests.`)),this.log(`
16
- Endpoints:`),this.log(` ${e.baseUrl}/v1/chat/completions - OpenAI Chat API`),this.log(` ${e.baseUrl}/v1/responses - OpenAI Responses API (Codex)`),this.log(` ${e.baseUrl}/v1/messages - Anthropic Messages API`),this.log(` ${e.baseUrl}/v1/completions - OpenAI Completions API`),this.log(` ${e.baseUrl}/health - Health check`),this.log(` ${e.baseUrl}/stats - Provider statistics`),this.log(`
17
+ Endpoints:`),this.log(` ${e.baseUrl}/v1/chat/completions - OpenAI Chat API`),this.log(` ${e.baseUrl}/v1/responses - OpenAI Responses API (Codex)`),this.log(` ${e.baseUrl}/v1/messages - Anthropic Messages API`),this.log(` ${e.baseUrl}/v1/completions - OpenAI Completions API`),this.log(` ${e.baseUrl}/health - Health check`),this.log(` ${e.baseUrl}/stats - Provider statistics`),n&&this.log(` ${e.baseUrl}/proxy - Proxy UI`),this.log(`
17
18
  Usage with Claude Code:`),this.log(` Set ANTHROPIC_BASE_URL=${e.baseUrl} (without /v1 suffix)`),this.log(`
18
19
  Usage with Codex (config.toml):`),this.log(` [model_providers.xling]`),this.log(` name = "xling"`),this.log(` base_url = "${e.baseUrl}"`),this.log(` wire_api = "responses"`),t&&this.log(` experimental_bearer_token = "<your-access-key>"`),this.log(`
19
- Usage with curl:`),this.log(` curl ${e.baseUrl}/v1/chat/completions \\`),this.log(` -H "Content-Type: application/json" \\`),t&&this.log(` -H "Authorization: Bearer <access-key>" \\`),this.log(` -d '{"model": "gpt-4", "messages": [{"role": "user", "content": "Hello"}]}'`)}};export{o as default};
20
+ Usage with curl:`),this.log(` curl ${e.baseUrl}/v1/chat/completions \\`),this.log(` -H "Content-Type: application/json" \\`),t&&this.log(` -H "Authorization: Bearer <access-key>" \\`),this.log(` -d '{"model": "gpt-4", "messages": [{"role": "user", "content": "Hello"}]}'`)}};export{s as default};
@@ -1,4 +1,4 @@
1
- import"../../errors-BzZfdKtJ.js";import"../../editor-6Nht_jnv.js";import{r as e}from"../../format-q5VlTrky.js";import"../../fsStore-CwAffYMN.js";import"../../base-BUo37ebo.js";import{t}from"../../codex-Dy_gUG6Z.js";import{Command as n,Flags as r}from"@oclif/core";var i=class i extends n{static summary=`Manage saved auth profiles`;static description=`
1
+ import"../../errors-x3Es7YJ3.js";import"../../editor-DUx1Sby2.js";import{r as e}from"../../format-CZL0rRQR.js";import"../../fsStore-D1omjK0d.js";import"../../base-Dv8Ajp1w.js";import{t}from"../../codex-CLx2Yb0G.js";import{Command as n,Flags as r}from"@oclif/core";var i=class i extends n{static summary=`Manage saved auth profiles`;static description=`
2
2
  Save, list, and delete auth profiles for Codex.
3
3
  Use settings:switch to switch between auth profiles and providers.
4
4
 
@@ -1,4 +1,4 @@
1
- import"../../errors-BzZfdKtJ.js";import"../../editor-6Nht_jnv.js";import{r as e}from"../../format-q5VlTrky.js";import"../../config-Bf-EeKY5.js";import{m as t,s as n}from"../../fsStore-CwAffYMN.js";import"../../base-BUo37ebo.js";import"../../template-zeZsnoLb.js";import"../../xling-CMIOhJ6S.js";import"../../codex-Dy_gUG6Z.js";import"../../claudeDefault-D35i6PTj.js";import{t as r}from"../../claude-C3HxRfuM.js";import"../../gemini-CedK05G6.js";import{t as i}from"../../dispatcher-DBedC9_T.js";import{Args as a,Command as o,Flags as s}from"@oclif/core";import c from"node:fs";import l from"node:path";var u=class u extends o{static summary=`View configuration file contents`;static description=`
1
+ import"../../errors-x3Es7YJ3.js";import"../../editor-DUx1Sby2.js";import{r as e}from"../../format-CZL0rRQR.js";import"../../config-D0b5Ceh4.js";import{m as t,s as n}from"../../fsStore-D1omjK0d.js";import"../../base-Dv8Ajp1w.js";import"../../template-DtJFiC8I.js";import"../../xling-DxPgM9hF.js";import"../../codex-CLx2Yb0G.js";import"../../claudeDefault-BP2oPKZC.js";import{t as r}from"../../claude-CWDwrH2t.js";import"../../gemini-2eTblTJ_.js";import{t as i}from"../../dispatcher-Bc9KhwR1.js";import{Args as a,Command as o,Flags as s}from"@oclif/core";import c from"node:fs";import l from"node:path";var u=class u extends o{static summary=`View configuration file contents`;static description=`
2
2
  Print the entire configuration file for the selected tool/scope.
3
3
  Output format depends on the file type (JSON, TOML, etc.).
4
4
  `;static examples=[{description:`Print Claude user settings (raw file)`,command:`<%= config.bin %> <%= command.id %> --tool claude --scope user`},{description:`Inspect a Claude variant by name`,command:`<%= config.bin %> <%= command.id %> hxi --tool claude --scope user`},{description:`Dump Codex config as JSON for scripting`,command:`<%= config.bin %> <%= command.id %> --tool codex --json`},{description:`View xling prompt router config (if present)`,command:`<%= config.bin %> <%= command.id %> --tool xling --scope user`}];static args={name:a.string({description:`Claude variant name (optional). Example: settings:get hxi`,required:!1})};static flags={tool:s.string({char:`t`,description:`AI CLI tool to manage`,options:[`claude`,`codex`,`gemini`,`xling`],default:`claude`}),scope:s.string({char:`s`,description:`Configuration scope`,options:[`user`,`project`,`local`,`system`],default:`user`})};async run(){let{args:t,flags:n}=await this.parse(u);try{let r=n.tool,i=n.scope,a=r===`claude`&&t.name?await this.#t(i,t.name):await this.#e(r,i,t.name);if(n.json){this.log(e({success:!0,data:a}));return}if(!a.exists){this.warn(`Config file not found: ${a.path}`);return}a.content?this.log(a.content):this.log(`File is empty.`)}catch(e){this.error(e.message,{exit:1})}}async#e(e,t,n){return(await new i().execute({tool:e,scope:t,action:`inspect`,name:n})).data}async#t(e,i){let a=new r;if(!a.validateScope(e))throw Error(`Invalid scope for Claude: ${e}`);let o=i.trim();if(!o||o===`default`)return this.#e(`claude`,e);let s=t(a.resolvePath(e)),u=l.dirname(s),d=n(u,o)??l.join(u,`settings.${o}.json`);if(!c.existsSync(d))return{path:d,exists:!1};let f=c.statSync(d);return{path:d,exists:!0,content:c.readFileSync(d,`utf-8`),size:f.size,lastModified:f.mtime}}};export{u as default};
@@ -1,4 +1,4 @@
1
- import"../../errors-BzZfdKtJ.js";import"../../editor-6Nht_jnv.js";import{r as e}from"../../format-q5VlTrky.js";import"../../config-Bf-EeKY5.js";import"../../fsStore-CwAffYMN.js";import"../../base-BUo37ebo.js";import"../../template-zeZsnoLb.js";import"../../xling-CMIOhJ6S.js";import"../../codex-Dy_gUG6Z.js";import"../../claudeDefault-D35i6PTj.js";import"../../claude-C3HxRfuM.js";import"../../gemini-CedK05G6.js";import{t}from"../../dispatcher-DBedC9_T.js";import{Command as n,Flags as r}from"@oclif/core";var i=class i extends n{static summary=`Inspect configuration file status`;static description=`
1
+ import"../../errors-x3Es7YJ3.js";import"../../editor-DUx1Sby2.js";import{r as e}from"../../format-CZL0rRQR.js";import"../../config-D0b5Ceh4.js";import"../../fsStore-D1omjK0d.js";import"../../base-Dv8Ajp1w.js";import"../../template-DtJFiC8I.js";import"../../xling-DxPgM9hF.js";import"../../codex-CLx2Yb0G.js";import"../../claudeDefault-BP2oPKZC.js";import"../../claude-CWDwrH2t.js";import"../../gemini-2eTblTJ_.js";import{t}from"../../dispatcher-Bc9KhwR1.js";import{Command as n,Flags as r}from"@oclif/core";var i=class i extends n{static summary=`Inspect configuration file status`;static description=`
2
2
  Display information about the configuration file, including:
3
3
  - File path
4
4
  - Existence status
@@ -1,4 +1,4 @@
1
- import"../../errors-BzZfdKtJ.js";import"../../editor-6Nht_jnv.js";import{i as e,n as t,r as n}from"../../format-q5VlTrky.js";import"../../config-Bf-EeKY5.js";import"../../fsStore-CwAffYMN.js";import"../../base-BUo37ebo.js";import"../../template-zeZsnoLb.js";import"../../xling-CMIOhJ6S.js";import"../../codex-Dy_gUG6Z.js";import"../../claudeDefault-D35i6PTj.js";import"../../claude-C3HxRfuM.js";import"../../gemini-CedK05G6.js";import{t as r}from"../../dispatcher-DBedC9_T.js";import{Command as i,Flags as a}from"@oclif/core";var o=class o extends i{static summary=`List all settings for a tool`;static description=`
1
+ import"../../errors-x3Es7YJ3.js";import"../../editor-DUx1Sby2.js";import{i as e,n as t,r as n}from"../../format-CZL0rRQR.js";import"../../config-D0b5Ceh4.js";import"../../fsStore-D1omjK0d.js";import"../../base-Dv8Ajp1w.js";import"../../template-DtJFiC8I.js";import"../../xling-DxPgM9hF.js";import"../../codex-CLx2Yb0G.js";import"../../claudeDefault-BP2oPKZC.js";import"../../claude-CWDwrH2t.js";import"../../gemini-2eTblTJ_.js";import{t as r}from"../../dispatcher-Bc9KhwR1.js";import{Command as i,Flags as a}from"@oclif/core";var o=class o extends i{static summary=`List all settings for a tool`;static description=`
2
2
  Display all configuration settings for the specified AI CLI tool.
3
3
  Supports multiple scopes (user, project, local, system).
4
4
  For Codex, output includes model providers and saved auth profiles.
@@ -1,4 +1,4 @@
1
- import"../../errors-BzZfdKtJ.js";import"../../editor-6Nht_jnv.js";import{r as e}from"../../format-q5VlTrky.js";import"../../config-Bf-EeKY5.js";import"../../fsStore-CwAffYMN.js";import"../../base-BUo37ebo.js";import"../../template-zeZsnoLb.js";import"../../xling-CMIOhJ6S.js";import"../../codex-Dy_gUG6Z.js";import"../../claudeDefault-D35i6PTj.js";import"../../claude-C3HxRfuM.js";import"../../gemini-CedK05G6.js";import{t}from"../../dispatcher-DBedC9_T.js";import{Command as n,Flags as r}from"@oclif/core";import i from"node:readline/promises";import{stdin as a,stdout as o}from"node:process";var s=class s extends n{static summary=`Edit settings or add model providers`;static description=`
1
+ import"../../errors-x3Es7YJ3.js";import"../../editor-DUx1Sby2.js";import{r as e}from"../../format-CZL0rRQR.js";import"../../config-D0b5Ceh4.js";import"../../fsStore-D1omjK0d.js";import"../../base-Dv8Ajp1w.js";import"../../template-DtJFiC8I.js";import"../../xling-DxPgM9hF.js";import"../../codex-CLx2Yb0G.js";import"../../claudeDefault-BP2oPKZC.js";import"../../claude-CWDwrH2t.js";import"../../gemini-2eTblTJ_.js";import{t}from"../../dispatcher-Bc9KhwR1.js";import{Command as n,Flags as r}from"@oclif/core";import i from"node:readline/promises";import{stdin as a,stdout as o}from"node:process";var s=class s extends n{static summary=`Edit settings or add model providers`;static description=`
2
2
  Create or open settings files for AI CLI tools in your preferred editor,
3
3
  or interactively add Codex model providers.
4
4
 
@@ -1,11 +1,16 @@
1
- import"../../errors-BzZfdKtJ.js";import"../../editor-6Nht_jnv.js";import{r as e}from"../../format-q5VlTrky.js";import"../../config-Bf-EeKY5.js";import"../../fsStore-CwAffYMN.js";import"../../base-BUo37ebo.js";import"../../template-zeZsnoLb.js";import"../../xling-CMIOhJ6S.js";import{t}from"../../codex-Dy_gUG6Z.js";import"../../claudeDefault-D35i6PTj.js";import"../../claude-C3HxRfuM.js";import"../../gemini-CedK05G6.js";import{t as n}from"../../dispatcher-DBedC9_T.js";import{Args as r,Command as i,Flags as a}from"@oclif/core";import o from"node:readline/promises";import{stdin as s,stdout as c}from"node:process";var l=class l extends i{static summary=`Switch between profiles or settings variants`;static description=`
2
- Switch to a different profile configuration for Codex
3
- or activate a specific settings.<variant>.json for Claude.
1
+ import"../../errors-x3Es7YJ3.js";import"../../editor-DUx1Sby2.js";import{r as e}from"../../format-CZL0rRQR.js";import"../../config-D0b5Ceh4.js";import"../../fsStore-D1omjK0d.js";import"../../base-Dv8Ajp1w.js";import"../../template-DtJFiC8I.js";import{t}from"../../xling-DxPgM9hF.js";import{t as n}from"../../codex-CLx2Yb0G.js";import"../../claudeDefault-BP2oPKZC.js";import"../../claude-CWDwrH2t.js";import"../../gemini-2eTblTJ_.js";import{t as r}from"../../dispatcher-Bc9KhwR1.js";import{Args as i,Command as a,Flags as o}from"@oclif/core";import s from"node:readline/promises";import{stdin as c,stdout as l}from"node:process";var u=class u extends a{static summary=`Switch between profiles or settings variants`;static description=`
2
+ Switch to a different profile configuration for Codex,
3
+ activate a specific settings.<variant>.json for Claude,
4
+ or switch the default model for Xling prompt router.
4
5
 
5
6
  For Codex, you can switch between:
6
7
  - Auth profiles (saved login credentials)
7
8
  - Model providers (API endpoints)
8
9
  - Named profiles (from config.toml)
9
- `;static examples=[{description:`Switch Codex to an auth profile (saved login)`,command:`<%= config.bin %> <%= command.id %> personal --tool codex`},{description:`Switch Codex to a provider`,command:`<%= config.bin %> <%= command.id %> my-provider --tool codex`},{description:`Interactive selection for Codex`,command:`<%= config.bin %> <%= command.id %> --tool codex`},{description:`Activate a Claude variant (user scope)`,command:`<%= config.bin %> <%= command.id %> hxi --tool claude --scope user`},{description:`Force-apply Claude variant and emit JSON for scripts`,command:`<%= config.bin %> <%= command.id %> hxi --tool claude --scope user --force --json`},{description:`Keep a backup while switching Claude settings`,command:`<%= config.bin %> <%= command.id %> stable --tool claude --backup`}];static args={profile:r.string({description:`Profile name to switch to`,required:!1})};static flags={tool:a.string({char:`t`,description:`AI CLI tool to manage`,options:[`claude`,`codex`,`gemini`,`xling`],default:`claude`}),scope:a.string({char:`s`,description:`Configuration scope`,options:[`user`,`project`,`local`,`system`],default:`user`}),json:a.boolean({description:`Output JSON instead of interactive text`,default:!1}),force:a.boolean({description:`Skip confirmation prompts (Claude only)`,default:!1}),backup:a.boolean({description:`Create a .bak backup when switching (Claude only)`,default:!1})};async run(){let{args:e,flags:t}=await this.parse(l),r=new n,i=e.profile;i||=(t.json&&this.error(`Profile is required when using --json output.`,{exit:1}),await this.#t(r,t));try{let e=t.tool===`claude`?await this.#e(r,i,t):await r.execute({tool:t.tool,scope:t.scope,action:`switch-profile`,profile:i});if(!e)return;this.#s(e,i,t)}catch(e){this.error(e.message,{exit:1})}}async#e(e,t,n){n.json&&!n.force&&this.error(`--json requires --force when switching Claude settings.`,{exit:1});let r=await e.execute({tool:`claude`,scope:n.scope,action:`switch-profile`,profile:t,switchOptions:{preview:!0}});if(r.diff)this.log(`Proposed changes:
10
- `+r.diff);else return this.log(`No differences detected. Current settings already match the selected variant.`),r;let i=!!n.backup;if(!n.force&&!i){let e=await this.#a();if(e===`cancel`)return this.log(`Switch cancelled.`),null;i=e===`backup`}let a=await e.execute({tool:`claude`,scope:n.scope,action:`switch-profile`,profile:t,switchOptions:{backup:i}});return a.diff=r.diff,a}async#t(e,t){let n=t.tool,r=t.scope,i=[];n===`claude`?i=await this.#n(e,r):n===`codex`?i=await this.#r(r):this.error(`Interactive selection is not supported for tool: ${n}`,{exit:1}),i.length||this.error(`No available profiles found for the selected tool.`,{exit:1}),this.log(`Select a profile to switch to:`),i.forEach((e,t)=>{this.log(` ${t+1}) ${e}`)});let a=o.createInterface({input:s,output:c});try{for(;;){let e=(await a.question(`Enter number or name: `)).trim().toLowerCase(),t=Number.parseInt(e,10);if(Number.isInteger(t)&&t>=1&&t<=i.length){let e=i[t-1];return n===`codex`?this.#i(e):e}let r=i.find(t=>t.toLowerCase()===e);if(r)return n===`codex`?this.#i(r):r;if(n===`codex`){let t=i.find(t=>this.#i(t).toLowerCase()===e);if(t)return this.#i(t)}this.log(`Invalid selection. Please try again.`)}}finally{a.close()}}async#n(e,t){let n=await e.execute({tool:`claude`,scope:t,action:`list`});return this.#o(n.data)?n.data.files.filter(e=>!e.active).map(e=>e.variant).filter(Boolean):[]}async#r(e){let{providers:n,authProfiles:r}=new t().getAllSwitchableProfiles(e),i=[];if(r.length>0)for(let e of r)i.push(`[auth] ${e}`);if(n.length>0)for(let e of n)i.push(`[provider] ${e}`);return i}#i(e){let t=e.match(/^\[(auth|provider)\]\s+(.+)$/);return t?t[2]:e}async#a(){let e=o.createInterface({input:s,output:c});try{for(;;){let t=(await e.question(`Choose action ([o]verwrite/[b]ackup/[c]ancel): `)).trim().toLowerCase();if([`overwrite`,`backup`,`cancel`].includes(t))return t;if([`o`,`b`,`c`].includes(t))return{o:`overwrite`,b:`backup`,c:`cancel`}[t]}}finally{e.close()}}#o(e){return!!(e&&typeof e==`object`&&`type`in e&&e.type===`files`&&`files`in e&&Array.isArray(e.files))}#s(t,n,r){if(r.json){this.log(e(t));return}if(t.preview){this.log(`Preview only. No changes applied.`),t.diff&&this.log(t.diff);return}this.log(t.message??`Switched to profile: ${n}`),t.filePath&&this.log(` File: ${t.filePath}`),t.diff&&this.log(`Applied diff:
11
- `+t.diff)}};export{l as default};
10
+
11
+ For Xling, you can switch between any model from configured providers.
12
+ Run without arguments for interactive selection.
13
+ `;static examples=[{description:`Switch Codex to an auth profile (saved login)`,command:`<%= config.bin %> <%= command.id %> personal --tool codex`},{description:`Switch Codex to a provider`,command:`<%= config.bin %> <%= command.id %> my-provider --tool codex`},{description:`Interactive selection for Codex`,command:`<%= config.bin %> <%= command.id %> --tool codex`},{description:`Activate a Claude variant (user scope)`,command:`<%= config.bin %> <%= command.id %> hxi --tool claude --scope user`},{description:`Force-apply Claude variant and emit JSON for scripts`,command:`<%= config.bin %> <%= command.id %> hxi --tool claude --scope user --force --json`},{description:`Keep a backup while switching Claude settings`,command:`<%= config.bin %> <%= command.id %> stable --tool claude --backup`},{description:`Interactive model selection for Xling`,command:`<%= config.bin %> <%= command.id %> --tool xling`},{description:`Switch Xling default model directly`,command:`<%= config.bin %> <%= command.id %> claude-sonnet-4-20250514 --tool xling`}];static args={profile:i.string({description:`Profile name to switch to`,required:!1})};static flags={tool:o.string({char:`t`,description:`AI CLI tool to manage`,options:[`claude`,`codex`,`gemini`,`xling`],default:`claude`}),scope:o.string({char:`s`,description:`Configuration scope`,options:[`user`,`project`,`local`,`system`],default:`user`}),json:o.boolean({description:`Output JSON instead of interactive text`,default:!1}),force:o.boolean({description:`Skip confirmation prompts (Claude only)`,default:!1}),backup:o.boolean({description:`Create a .bak backup when switching (Claude only)`,default:!1})};async run(){let{args:e,flags:t}=await this.parse(u),n=new r,i=e.profile;i||=(t.json&&this.error(`Profile is required when using --json output.`,{exit:1}),await this.#t(n,t));try{let e=t.tool===`claude`?await this.#e(n,i,t):await n.execute({tool:t.tool,scope:t.scope,action:`switch-profile`,profile:i});if(!e)return;this.#l(e,i,t)}catch(e){this.error(e.message,{exit:1})}}async#e(e,t,n){n.json&&!n.force&&this.error(`--json requires --force when switching Claude settings.`,{exit:1});let r=await e.execute({tool:`claude`,scope:n.scope,action:`switch-profile`,profile:t,switchOptions:{preview:!0}});if(r.diff)this.log(`Proposed changes:
14
+ `+r.diff);else return this.log(`No differences detected. Current settings already match the selected variant.`),r;let i=!!n.backup;if(!n.force&&!i){let e=await this.#s();if(e===`cancel`)return this.log(`Switch cancelled.`),null;i=e===`backup`}let a=await e.execute({tool:`claude`,scope:n.scope,action:`switch-profile`,profile:t,switchOptions:{backup:i}});return a.diff=r.diff,a}async#t(e,t){let n=t.tool,r=t.scope,i=[];n===`claude`?i=await this.#n(e,r):n===`codex`?i=await this.#r(r):n===`xling`?i=await this.#i(r):this.error(`Interactive selection is not supported for tool: ${n}`,{exit:1}),i.length||this.error(`No available profiles found for the selected tool.`,{exit:1}),this.log(`Select a profile to switch to:`),i.forEach((e,t)=>{this.log(` ${t+1}) ${e}`)});let a=s.createInterface({input:c,output:l});try{for(;;){let e=(await a.question(`Enter number or name: `)).trim().toLowerCase(),t=Number.parseInt(e,10);if(Number.isInteger(t)&&t>=1&&t<=i.length){let e=i[t-1];return n===`codex`?this.#a(e):n===`xling`?this.#o(e):e}let r=i.find(t=>t.toLowerCase()===e);if(r)return n===`codex`?this.#a(r):n===`xling`?this.#o(r):r;if(n===`codex`){let t=i.find(t=>this.#a(t).toLowerCase()===e);if(t)return this.#a(t)}if(n===`xling`){let t=i.find(t=>this.#o(t).toLowerCase()===e);if(t)return this.#o(t)}this.log(`Invalid selection. Please try again.`)}}finally{a.close()}}async#n(e,t){let n=await e.execute({tool:`claude`,scope:t,action:`list`});return this.#c(n.data)?n.data.files.filter(e=>!e.active).map(e=>e.variant).filter(Boolean):[]}async#r(e){let{providers:t,authProfiles:r}=new n().getAllSwitchableProfiles(e),i=[];if(r.length>0)for(let e of r)i.push(`[auth] ${e}`);if(t.length>0)for(let e of t)i.push(`[provider] ${e}`);return i}async#i(e){let n=new t,r=n.getAllModels(e);r.length===0&&this.error(`No models found. Please configure providers in ~/.claude/xling.json first.
15
+ Run: xling settings:set --tool xling`,{exit:1});let i=n.getDefaultModel(e);return r.map(e=>e.model===i?`${e.label} (current)`:e.label)}#a(e){let t=e.match(/^\[(auth|provider)\]\s+(.+)$/);return t?t[2]:e}#o(e){let t=e.replace(/ \(current\)$/,``),n=t.match(/^\[.+?\]\s+(.+)$/);return n?n[1]:t}async#s(){let e=s.createInterface({input:c,output:l});try{for(;;){let t=(await e.question(`Choose action ([o]verwrite/[b]ackup/[c]ancel): `)).trim().toLowerCase();if([`overwrite`,`backup`,`cancel`].includes(t))return t;if([`o`,`b`,`c`].includes(t))return{o:`overwrite`,b:`backup`,c:`cancel`}[t]}}finally{e.close()}}#c(e){return!!(e&&typeof e==`object`&&`type`in e&&e.type===`files`&&`files`in e&&Array.isArray(e.files))}#l(t,n,r){if(r.json){this.log(e(t));return}if(t.preview){this.log(`Preview only. No changes applied.`),t.diff&&this.log(t.diff);return}this.log(t.message??`Switched to profile: ${n}`),t.filePath&&this.log(` File: ${t.filePath}`),t.diff&&this.log(`Applied diff:
16
+ `+t.diff)}};export{u as default};
@@ -1,4 +1,4 @@
1
- import"../../errors-BzZfdKtJ.js";import{r as e}from"../../format-q5VlTrky.js";import"../../fsStore-CwAffYMN.js";import{i as t,n,r,t as i}from"../../sync-LkiPbSTH.js";import{Command as a,Flags as o}from"@oclif/core";import s from"node:readline/promises";import{stdin as c,stdout as l}from"node:process";var u=class u extends a{static summary=`Sync config.toml between Claude Code and Codex`;static description=`
1
+ import"../../errors-x3Es7YJ3.js";import{r as e}from"../../format-CZL0rRQR.js";import"../../fsStore-D1omjK0d.js";import{i as t,n,r,t as i}from"../../sync-B6uHJ3Je.js";import{Command as a,Flags as o}from"@oclif/core";import s from"node:readline/promises";import{stdin as c,stdout as l}from"node:process";var u=class u extends a{static summary=`Sync config.toml between Claude Code and Codex`;static description=`
2
2
  Copy Claude Code config.toml into Codex (default) or reverse the direction
3
3
  with --reverse. Shows a diff first, then lets you choose overwrite,
4
4
  backup+overwrite, or cancel (similar to settings:switch).
@@ -1,4 +1,4 @@
1
- import{n as e}from"../../cli-BQnaBwZZ.js";import"../../errors-BzZfdKtJ.js";import"../../editor-6Nht_jnv.js";import"../../config-Bf-EeKY5.js";import"../../fsStore-CwAffYMN.js";import"../../base-BUo37ebo.js";import"../../template-zeZsnoLb.js";import"../../xling-CMIOhJ6S.js";import{n as t,t as n}from"../../types-Df-xXIah.js";import{t as r}from"../../runner-Bpbzwyfd.js";import{Args as i,Command as a,Flags as o}from"@oclif/core";import s from"cli-table3";var c=class c extends a{static summary=`Shortcut eXecute - run predefined command shortcuts`;static description=`
1
+ import{n as e}from"../../cli-BevqZj-b.js";import"../../errors-x3Es7YJ3.js";import"../../editor-DUx1Sby2.js";import"../../config-D0b5Ceh4.js";import"../../fsStore-D1omjK0d.js";import"../../base-Dv8Ajp1w.js";import"../../template-DtJFiC8I.js";import"../../xling-DxPgM9hF.js";import{n as t,t as n}from"../../types-BDgDAGpu.js";import{t as r}from"../../runner-BDDl4-Yr.js";import{Args as i,Command as a,Flags as o}from"@oclif/core";import s from"cli-table3";var c=class c extends a{static summary=`Shortcut eXecute - run predefined command shortcuts`;static description=`
2
2
  Execute predefined command shortcuts configured in ~/.claude/xling.json.
3
3
 
4
4
  Shortcuts allow you to create custom aliases for frequently used xling commands
@@ -1 +1 @@
1
- import{Command as e}from"@oclif/core";var t=`0.9.8`,n=class extends e{static summary=`Show the current xling version`;static description=`Displays the version from package.json.`;static examples=[{description:`Print the installed CLI version`,command:`<%= config.bin %> <%= command.id %>`},{description:`Shortcut using the built-in flag`,command:`<%= config.bin %> --version`}];async run(){this.log(t??`unknown`)}};export{n as default};
1
+ import{Command as e}from"@oclif/core";var t=`0.10.0`,n=class extends e{static summary=`Show the current xling version`;static description=`Displays the version from package.json.`;static examples=[{description:`Print the installed CLI version`,command:`<%= config.bin %> <%= command.id %>`},{description:`Shortcut using the built-in flag`,command:`<%= config.bin %> --version`}];async run(){this.log(t??`unknown`)}};export{n as default};
@@ -1,4 +1,4 @@
1
- import{n as e}from"../../cli-BQnaBwZZ.js";import"../../errors-BzZfdKtJ.js";import"../../runner-CCy2YdOv.js";import"../../base-sBAL-g57.js";import"../../claude-Bbd3pVuH.js";import"../../codex-Db_IraH3.js";import"../../gemini-DmKcVP7x.js";import{t}from"../../dispatcher-BE4ieOei.js";import{Command as n,Flags as r}from"@oclif/core";var i=class i extends n{static summary=`eXecute AI CLI tools (defaults to Claude Code with yolo)`;static description=`
1
+ import{n as e}from"../../cli-BevqZj-b.js";import"../../errors-x3Es7YJ3.js";import"../../runner-QW_B2Hqh.js";import"../../base-Cb8gvSZx.js";import"../../claude-CgDMZ5NR.js";import"../../codex-Czpk7Br1.js";import"../../gemini-Bf13TKO0.js";import{t}from"../../dispatcher-KWhvzTOg.js";import{Command as n,Flags as r}from"@oclif/core";var i=class i extends n{static summary=`eXecute AI CLI tools (defaults to Claude Code with yolo)`;static description=`
2
2
  Quick launcher for Claude Code, Codex, or Gemini CLI with yolo mode enabled by default.
3
3
 
4
4
  Just run "xling x" to start Claude Code instantly!
@@ -16,6 +16,8 @@ interface ProviderConfig {
16
16
  headers?: Record<string, string>;
17
17
  weight?: number;
18
18
  enabled?: boolean;
19
+ /** Tool format expected by this provider: "openai" (default) or "anthropic" */
20
+ toolFormat?: "openai" | "anthropic";
19
21
  }
20
22
  /**
21
23
  * Unified provider configuration schema
@@ -30,6 +32,8 @@ declare function getProviderApiKeys(provider: ProviderConfig): string[];
30
32
  type LoadBalanceStrategy = "round-robin" | "random" | "weighted" | "failover";
31
33
  declare const LoadBalanceStrategySchema: z.ZodType<LoadBalanceStrategy>;
32
34
  interface ProxyConfig {
35
+ /** Override global providers for proxy (when set, proxy uses only these providers) */
36
+ providers?: ProviderConfig[];
33
37
  enabled?: boolean;
34
38
  port?: number;
35
39
  host?: string;
@@ -0,0 +1 @@
1
+ import{z as e}from"zod";const t=e.object({name:e.string().min(1,`Provider name cannot be empty`).describe(`Provider name (unique identifier)`),baseUrl:e.string().url(`Base URL must be a valid URL`).describe(`API base URL`),apiKey:e.string().optional().describe(`Single API key (use apiKey or apiKeys, not both)`),apiKeys:e.array(e.string().min(1)).optional().describe(`Multiple API keys for rotation`),models:e.array(e.string().min(1)).min(1,`Provider must support at least one model`).describe(`List of supported models`),priority:e.number().int().positive().optional().describe(`Provider priority (lower = higher priority)`),timeout:e.number().int().positive().optional().describe(`Request timeout in milliseconds`),headers:e.record(e.string(),e.string()).optional().describe(`Custom headers to include in requests`),weight:e.number().int().positive().optional().describe(`Weight for weighted load balancing`),enabled:e.boolean().default(!0).describe(`Enable or disable the provider without removing it`),toolFormat:e.enum([`openai`,`anthropic`]).optional().describe(`Tool format expected by this provider: openai (default) or anthropic`)}).refine(e=>{if(e.baseUrl.startsWith(`cli:`))return!0;let t=typeof e.apiKey==`string`&&e.apiKey.length>0,n=Array.isArray(e.apiKeys)&&e.apiKeys.length>0;return t||n},{message:`Either apiKey or apiKeys must be provided (except for cli:* providers)`});function n(e){return e.apiKeys&&e.apiKeys.length>0?e.apiKeys:e.apiKey?[e.apiKey]:[]}const r=e.enum([`round-robin`,`random`,`weighted`,`failover`]),i=e.object({providers:e.array(t).min(1,`If proxy.providers is specified, at least one provider is required`).refine(e=>{let t=e.map(e=>e.name);return t.length===new Set(t).size},{message:`Proxy provider names must be unique`}).optional().describe(`Override global providers for proxy (when set, proxy uses only these)`),enabled:e.boolean().default(!0).describe(`Enable proxy server`),port:e.number().int().positive().optional().describe(`Proxy server port (default: 4320)`),host:e.string().optional().describe(`Proxy server host (default: 127.0.0.1)`),accessKey:e.string().optional().describe(`Access key for proxy authentication (optional)`),loadBalance:r.optional().default(`failover`).describe(`Load balancing strategy`),modelMapping:e.record(e.string(),e.string()).optional().describe(`Map client model names to actual models (proxy only)`),passthroughResponsesAPI:e.array(e.string()).optional().describe(`Models that natively support Responses API - skip conversion (e.g., gpt-5.1-codex-max)`),keyRotation:e.object({enabled:e.boolean().default(!0),onError:e.boolean().default(!0),cooldownMs:e.number().int().positive().optional()}).optional().describe(`API key rotation settings`)}),a=e.object({maxRetries:e.number().int().min(0).max(10).default(2).describe(`Maximum number of retries`),backoffMs:e.number().int().positive().default(1e3).describe(`Initial backoff delay in milliseconds`)}),o=e.object({win32:e.string().min(1).optional(),darwin:e.string().min(1).optional(),linux:e.string().min(1).optional(),default:e.string().min(1)}),s=e.object({win32:e.array(e.string()).optional(),darwin:e.array(e.string()).optional(),linux:e.array(e.string()).optional(),default:e.array(e.string())}),c=e.object({command:e.union([e.string().min(1),o]),args:e.union([e.array(e.string()),s]).optional()}),l=e.object({win32:e.string().min(1).optional(),darwin:e.string().min(1).optional(),linux:e.string().min(1).optional(),default:e.string().min(1)}),u=e.object({win32:e.array(c).min(1).optional(),darwin:e.array(c).min(1).optional(),linux:e.array(c).min(1).optional(),default:e.array(c).min(1)}),d=e.object({command:e.string().min(1).optional(),args:e.array(e.string()).optional(),shell:e.union([e.string().min(1),l]).optional(),pipeline:e.union([e.array(c).min(1),u]).optional(),description:e.string().optional()}).refine(e=>[e.command,e.shell,e.pipeline].filter(Boolean).length===1,{message:`Exactly one of 'command', 'shell', or 'pipeline' must be specified`}).refine(e=>!(e.args&&(e.shell||e.pipeline)),{message:`'args' can only be used with 'command'`}),f=e.object({providers:e.array(t).min(1,`At least one provider must be configured`).refine(e=>{let t=e.map(e=>e.name);return t.length===new Set(t).size},{message:`Provider names must be unique`}),defaultModel:e.string().optional(),loadBalance:r.optional().default(`failover`).describe(`Global load balancing strategy (overridden by proxy.loadBalance when set)`),noRetryErrors:e.array(e.string()).optional().default([`401`,`403`,`invalid_api_key`]).describe(`Error patterns or status codes that should not trigger retry/fallback`),cooldownMs:e.number().int().positive().optional().default(6e4).describe(`Global cooldown for failed providers in milliseconds (proxy.keyRotation.cooldownMs overrides)`),proxy:i.optional(),retryPolicy:a.optional(),shortcuts:e.record(e.string(),d).optional()});function p(e){if(typeof e!=`object`||!e)return f.parse(e);let t=e;if(`prompt`in t&&typeof t.prompt==`object`&&t.prompt!==null){let e=t.prompt,n=t.proxy,r=e.providers||[],i=n?.providers||[],a={providers:(i.length>0?i:r).map(e=>e.apiKeys&&e.apiKeys.length>0?e:e.apiKey?{...e,apiKeys:[e.apiKey]}:e),defaultModel:e.defaultModel||n?.defaultModel,loadBalance:t.loadBalance??n?.loadBalance,noRetryErrors:t.noRetryErrors??void 0,cooldownMs:t.cooldownMs??n?.keyRotation?.cooldownMs,proxy:n?{enabled:n.enabled??!0,port:n.port,host:n.host,accessKey:n.accessKey,loadBalance:n.loadBalance,modelMapping:n.modelMapping,keyRotation:n.keyRotation}:void 0,retryPolicy:e.retryPolicy,shortcuts:t.shortcuts};return f.parse(a)}return f.parse(e)}function m(e){return e??2**53-1}export{u as a,i as c,f as d,m as f,o as i,a as l,p as m,c as n,l as o,n as p,s as r,t as s,r as t,d as u};
@@ -1 +1 @@
1
- import{a as e}from"./errors-BzZfdKtJ.js";import{r as t}from"./runner-CCy2YdOv.js";import{t as n}from"./utils-CCoDGqk7.js";const r={chrome:{darwin:`Google Chrome`,linux:`google-chrome`,win32:`chrome`},safari:{darwin:`Safari`},firefox:{darwin:`Firefox`,linux:`firefox`,win32:`firefox`},arc:{darwin:`Arc`,win32:`Arc`},edge:{darwin:`Microsoft Edge`,linux:`microsoft-edge`,win32:`msedge`},dia:{darwin:`Dia`,linux:`dia`,win32:`dia`}};function i(e){let t=process.platform,n=r[e]?.[t];return n?t===`darwin`?`open -a "${n}"`:n:null}async function a(r,a){let{title:o,body:s,base:c,head:l,draft:u=!1,web:d=!1,browser:f=`chrome`,assignee:p=[],reviewer:m=[],label:h=[]}=r;if(!await n())throw new e(`gh`,`Install GitHub CLI: https://cli.github.com/`);let g=[`pr`,`create`];o&&g.push(`--title`,o),s&&g.push(`--body`,s),c&&g.push(`--base`,c),l&&g.push(`--head`,l),u&&g.push(`--draft`);for(let e of p)g.push(`--assignee`,e);for(let e of m)g.push(`--reviewer`,e);for(let e of h)g.push(`--label`,e);let _;if(d){g.push(`--web`);let e=i(f);if(!e)throw Error(`Browser "${f}" is not available on ${process.platform}. Supported browsers: chrome, safari (macOS only), firefox, arc, edge, dia`);_={GH_BROWSER:e}}let v=await t(`gh`,g,{cwd:a,env:_,throwOnError:!1});if(!v.success)throw Error(`Failed to create PR: ${v.stderr}`);return{success:!0,message:d?`Created PR and opened in ${f}`:`Created PR successfully`,details:{title:o,base:c,head:l,draft:u,web:d,browser:d?f:void 0,platform:process.platform}}}export{a as t};
1
+ import{a as e}from"./errors-x3Es7YJ3.js";import{r as t}from"./runner-QW_B2Hqh.js";import{t as n}from"./utils-DugkWRYo.js";const r={chrome:{darwin:`Google Chrome`,linux:`google-chrome`,win32:`chrome`},safari:{darwin:`Safari`},firefox:{darwin:`Firefox`,linux:`firefox`,win32:`firefox`},arc:{darwin:`Arc`,win32:`Arc`},edge:{darwin:`Microsoft Edge`,linux:`microsoft-edge`,win32:`msedge`},dia:{darwin:`Dia`,linux:`dia`,win32:`dia`}};function i(e){let t=process.platform,n=r[e]?.[t];return n?t===`darwin`?`open -a "${n}"`:n:null}async function a(r,a){let{title:o,body:s,base:c,head:l,draft:u=!1,web:d=!1,browser:f=`chrome`,assignee:p=[],reviewer:m=[],label:h=[]}=r;if(!await n())throw new e(`gh`,`Install GitHub CLI: https://cli.github.com/`);let g=[`pr`,`create`];o&&g.push(`--title`,o),s&&g.push(`--body`,s),c&&g.push(`--base`,c),l&&g.push(`--head`,l),u&&g.push(`--draft`);for(let e of p)g.push(`--assignee`,e);for(let e of m)g.push(`--reviewer`,e);for(let e of h)g.push(`--label`,e);let _;if(d){g.push(`--web`);let e=i(f);if(!e)throw Error(`Browser "${f}" is not available on ${process.platform}. Supported browsers: chrome, safari (macOS only), firefox, arc, edge, dia`);_={GH_BROWSER:e}}let v=await t(`gh`,g,{cwd:a,env:_,throwOnError:!1});if(!v.success)throw Error(`Failed to create PR: ${v.stderr}`);return{success:!0,message:d?`Created PR and opened in ${f}`:`Created PR successfully`,details:{title:o,base:c,head:l,draft:u,web:d,browser:d?f:void 0,platform:process.platform}}}export{a as t};
@@ -1 +1 @@
1
- import{h as e,l as t,m as n}from"./errors-BzZfdKtJ.js";import{t as r}from"./xling-CMIOhJ6S.js";import{t as i}from"./codex-Dy_gUG6Z.js";import{t as a}from"./claude-C3HxRfuM.js";import{t as o}from"./gemini-CedK05G6.js";var s=class{#e;constructor(){this.#e=new Map,this.#e.set(`claude`,new a),this.#e.set(`codex`,new i),this.#e.set(`gemini`,new o),this.#e.set(`xling`,new r)}async execute(e){let r=this.#t(e.tool);switch(e.action){case`list`:return{success:!0,data:await r.list(e.scope)};case`switch-profile`:if(!e.profile)throw new t(`Profile is required for switch-profile action`);if(!r.switchProfile)throw new n(`switch-profile`,e.tool);return await r.switchProfile(e.scope,e.profile,e.switchOptions);case`edit`:if(!r.edit)throw new n(`edit`,e.tool);return await r.edit(e.scope,{name:e.name,ide:e.ide,provider:e.provider});case`inspect`:if(!r.inspect)throw new n(`inspect`,e.tool);return{success:!0,data:await r.inspect(e.scope,e.name)};default:throw new n(e.action)}}#t(t){let n=this.#e.get(t);if(!n)throw new e(t);return n}registerAdapter(e){this.#e.set(e.toolId,e)}getSupportedTools(){return Array.from(this.#e.keys())}};export{s as t};
1
+ import{h as e,l as t,m as n}from"./errors-x3Es7YJ3.js";import{t as r}from"./xling-DxPgM9hF.js";import{t as i}from"./codex-CLx2Yb0G.js";import{t as a}from"./claude-CWDwrH2t.js";import{t as o}from"./gemini-2eTblTJ_.js";var s=class{#e;constructor(){this.#e=new Map,this.#e.set(`claude`,new a),this.#e.set(`codex`,new i),this.#e.set(`gemini`,new o),this.#e.set(`xling`,new r)}async execute(e){let r=this.#t(e.tool);switch(e.action){case`list`:return{success:!0,data:await r.list(e.scope)};case`switch-profile`:if(!e.profile)throw new t(`Profile is required for switch-profile action`);if(!r.switchProfile)throw new n(`switch-profile`,e.tool);return await r.switchProfile(e.scope,e.profile,e.switchOptions);case`edit`:if(!r.edit)throw new n(`edit`,e.tool);return await r.edit(e.scope,{name:e.name,ide:e.ide,provider:e.provider});case`inspect`:if(!r.inspect)throw new n(`inspect`,e.tool);return{success:!0,data:await r.inspect(e.scope,e.name)};default:throw new n(e.action)}}#t(t){let n=this.#e.get(t);if(!n)throw new e(t);return n}registerAdapter(e){this.#e.set(e.toolId,e)}getSupportedTools(){return Array.from(this.#e.keys())}};export{s as t};
@@ -1 +1 @@
1
- import{n as e}from"./utils-CCoDGqk7.js";import{t}from"./pr-DYOhlKHw.js";import{t as n}from"./view-4iWEelup.js";import{t as r}from"./worktree-CFMEZX8U.js";import{t as i}from"./create-CffFD_Yh.js";var a=class{async execute(a){if(a.command!==`prv`&&await e(a.cwd),a.command===`worktree`)return r(a.data,a.cwd);if(a.command===`prr`)return t(a.data,a.cwd);if(a.command===`prv`)return n(a.data,a.cwd);if(a.command===`prc`)return i(a.data,a.cwd);throw Error(`Unknown git command: ${a.command}`)}};export{a as t};
1
+ import{n as e}from"./utils-DugkWRYo.js";import{t}from"./pr-BNviK79Q.js";import{t as n}from"./view-zF4lc17m.js";import{t as r}from"./worktree-CrkzOfkB.js";import{t as i}from"./create-C3P6UYhE.js";var a=class{async execute(a){if(a.command!==`prv`&&await e(a.cwd),a.command===`worktree`)return r(a.data,a.cwd);if(a.command===`prr`)return t(a.data,a.cwd);if(a.command===`prv`)return n(a.data,a.cwd);if(a.command===`prc`)return i(a.data,a.cwd);throw Error(`Unknown git command: ${a.command}`)}};export{a as t};
@@ -1 +1 @@
1
- import{h as e}from"./errors-BzZfdKtJ.js";import{i as t}from"./runner-CCy2YdOv.js";import{t as n}from"./claude-Bbd3pVuH.js";import{t as r}from"./codex-Db_IraH3.js";import{t as i}from"./gemini-DmKcVP7x.js";var a=class{#e;constructor(){this.#e=new Map,this.#e.set(`claude`,new n),this.#e.set(`codex`,new r),this.#e.set(`gemini`,new i)}async execute(e){let n=this.#t(e.tool);if(!await n.validateAvailability())return{success:!1,message:`Tool "${e.tool}" is not installed or not found in PATH`};let r=e.yolo??!0,i=n.buildCommandSpec({yolo:r,resume:e.resume,continue:e.continue,settings:e.settings});try{let{pid:n,command:a}=await t(i,{cwd:e.cwd,args:e.args}),o={tool:e.tool,yolo:r,args:e.args??[]};return e.resume!==void 0&&(o.resume=e.resume),e.continue!==void 0&&(o.continue=e.continue),e.cwd&&(o.cwd=e.cwd),{success:!0,pid:n,command:a,message:`Launched ${e.tool} successfully (PID: ${n})`,data:o}}catch(t){return{success:!1,message:`Failed to launch ${e.tool}: ${t.message}`}}}#t(t){let n=this.#e.get(t);if(!n)throw new e(t);return n}registerAdapter(e){this.#e.set(e.toolId,e)}getSupportedTools(){return Array.from(this.#e.keys())}};export{a as t};
1
+ import{h as e}from"./errors-x3Es7YJ3.js";import{i as t}from"./runner-QW_B2Hqh.js";import{t as n}from"./claude-CgDMZ5NR.js";import{t as r}from"./codex-Czpk7Br1.js";import{t as i}from"./gemini-Bf13TKO0.js";var a=class{#e;constructor(){this.#e=new Map,this.#e.set(`claude`,new n),this.#e.set(`codex`,new r),this.#e.set(`gemini`,new i)}async execute(e){let n=this.#t(e.tool);if(!await n.validateAvailability())return{success:!1,message:`Tool "${e.tool}" is not installed or not found in PATH`};let r=e.yolo??!0,i=n.buildCommandSpec({yolo:r,resume:e.resume,continue:e.continue,settings:e.settings});try{let{pid:n,command:a}=await t(i,{cwd:e.cwd,args:e.args}),o={tool:e.tool,yolo:r,args:e.args??[]};return e.resume!==void 0&&(o.resume=e.resume),e.continue!==void 0&&(o.continue=e.continue),e.cwd&&(o.cwd=e.cwd),{success:!0,pid:n,command:a,message:`Launched ${e.tool} successfully (PID: ${n})`,data:o}}catch(t){return{success:!1,message:`Failed to launch ${e.tool}: ${t.message}`}}}#t(t){let n=this.#e.get(t);if(!n)throw new e(t);return n}registerAdapter(e){this.#e.set(e.toolId,e)}getSupportedTools(){return Array.from(this.#e.keys())}};export{a as t};
@@ -1,2 +1,2 @@
1
- import { a as GitPrRequest, c as GitWorktreeRequest, d as WorktreeStatus, i as GitCreatePrRequest, l as SUPPORTED_BROWSERS, n as GitCommandPayload, o as GitViewRequest, r as GitCommandResult, s as GitWorktreeAction, t as GitCommandDetails, u as SupportedBrowser } from "../git-CRkoXk-6.js";
1
+ import { a as GitPrRequest, c as GitWorktreeRequest, d as WorktreeStatus, i as GitCreatePrRequest, l as SUPPORTED_BROWSERS, n as GitCommandPayload, o as GitViewRequest, r as GitCommandResult, s as GitWorktreeAction, t as GitCommandDetails, u as SupportedBrowser } from "../git-DA5MDlrB.js";
2
2
  export { GitCommandDetails, GitCommandPayload, GitCommandResult, GitCreatePrRequest, GitPrRequest, GitViewRequest, GitWorktreeAction, GitWorktreeRequest, SUPPORTED_BROWSERS, SupportedBrowser, WorktreeStatus };
@@ -1 +1 @@
1
- import{t as e}from"../git-CvgdaUQP.js";export{e as SUPPORTED_BROWSERS};
1
+ import{t as e}from"../git-DrTSFbmV.js";export{e as SUPPORTED_BROWSERS};
@@ -1,3 +1,3 @@
1
- import "../types-BzkIf_zy.js";
2
- import { n as SettingsAdapter, t as LaunchAdapter } from "../interfaces-DY2ES_Kh.js";
1
+ import "../types-B6FSmoLE.js";
2
+ import { n as SettingsAdapter, t as LaunchAdapter } from "../interfaces-BZiHBjRr.js";
3
3
  export { LaunchAdapter, SettingsAdapter };
@@ -1,2 +1,2 @@
1
- import { _ as ToolId, a as InspectResult, c as LaunchResult, d as SettingAction, f as SettingsFileEntry, g as SwitchOptions, h as SettingsResult, i as EditOptions, l as OutputFormat, m as SettingsPayload, n as ConfigObject, o as LaunchCommandSpec, p as SettingsListData, r as ConfigValue, s as LaunchPayload, t as CodexProviderInput, u as Scope } from "../types-BzkIf_zy.js";
1
+ import { _ as ToolId, a as InspectResult, c as LaunchResult, d as SettingAction, f as SettingsFileEntry, g as SwitchOptions, h as SettingsResult, i as EditOptions, l as OutputFormat, m as SettingsPayload, n as ConfigObject, o as LaunchCommandSpec, p as SettingsListData, r as ConfigValue, s as LaunchPayload, t as CodexProviderInput, u as Scope } from "../types-B6FSmoLE.js";
2
2
  export { CodexProviderInput, ConfigObject, ConfigValue, EditOptions, InspectResult, LaunchCommandSpec, LaunchPayload, LaunchResult, OutputFormat, Scope, SettingAction, SettingsFileEntry, SettingsListData, SettingsPayload, SettingsResult, SwitchOptions, ToolId };
@@ -1,4 +1,4 @@
1
- import { _ as ToolId, d as SettingAction, m as SettingsPayload, r as ConfigValue, u as Scope } from "../types-BzkIf_zy.js";
1
+ import { _ as ToolId, d as SettingAction, m as SettingsPayload, r as ConfigValue, u as Scope } from "../types-B6FSmoLE.js";
2
2
  import { ZodType, z } from "zod";
3
3
 
4
4
  //#region src/domain/validators.d.ts
@@ -1 +1 @@
1
- import{a as e,c as t,d as n,i as r,l as i,n as a,o,r as s,s as c,t as l,u}from"../validators-CzOBqk3u.js";export{l as HostSchema,a as PortSchema,s as PrIdSchema,r as ScopeSchema,e as SettingActionSchema,o as SettingsPayloadSchema,c as ToolIdSchema,t as validateHost,i as validatePayload,u as validatePort,n as validatePrId};
1
+ import{a as e,c as t,d as n,i as r,l as i,n as a,o,r as s,s as c,t as l,u}from"../validators-kRNHvOZQ.js";export{l as HostSchema,a as PortSchema,s as PrIdSchema,r as ScopeSchema,e as SettingActionSchema,o as SettingsPayloadSchema,c as ToolIdSchema,t as validateHost,i as validatePayload,u as validatePort,n as validatePrId};
@@ -1,2 +1,2 @@
1
- import { C as XlingConfig, D as validateXlingConfig, E as getProviderApiKeys, S as ShortcutConfigSchema, T as getNormalizedPriority, _ as ProxyConfigSchema, a as PlatformArgs, b as RetryPolicySchema, c as PlatformCommandSchema, d as PlatformShell, f as PlatformShellSchema, g as ProxyConfig, h as ProviderConfigSchema, i as PipelineStepSchema, l as PlatformPipeline, m as ProviderConfig, n as LoadBalanceStrategySchema, o as PlatformArgsSchema, p as PromptConfig, r as PipelineStep, s as PlatformCommand, t as LoadBalanceStrategy, u as PlatformPipelineSchema, v as ProxyProviderConfig, w as XlingConfigSchema, x as ShortcutConfig, y as RetryPolicy } from "../../config-C87nCAHS.js";
1
+ import { C as XlingConfig, D as validateXlingConfig, E as getProviderApiKeys, S as ShortcutConfigSchema, T as getNormalizedPriority, _ as ProxyConfigSchema, a as PlatformArgs, b as RetryPolicySchema, c as PlatformCommandSchema, d as PlatformShell, f as PlatformShellSchema, g as ProxyConfig, h as ProviderConfigSchema, i as PipelineStepSchema, l as PlatformPipeline, m as ProviderConfig, n as LoadBalanceStrategySchema, o as PlatformArgsSchema, p as PromptConfig, r as PipelineStep, s as PlatformCommand, t as LoadBalanceStrategy, u as PlatformPipelineSchema, v as ProxyProviderConfig, w as XlingConfigSchema, x as ShortcutConfig, y as RetryPolicy } from "../../config-CT0JigkF.js";
2
2
  export { LoadBalanceStrategy, LoadBalanceStrategySchema, PipelineStep, PipelineStepSchema, PlatformArgs, PlatformArgsSchema, PlatformCommand, PlatformCommandSchema, PlatformPipeline, PlatformPipelineSchema, PlatformShell, PlatformShellSchema, PromptConfig, ProviderConfig, ProviderConfigSchema, ProxyConfig, ProxyConfigSchema, ProxyProviderConfig, RetryPolicy, RetryPolicySchema, ShortcutConfig, ShortcutConfigSchema, XlingConfig, XlingConfigSchema, getNormalizedPriority, getProviderApiKeys, validateXlingConfig };