circuschief 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/package.json +1 -1
  2. package/packages/server/src/agents/AgentGateway.js +2 -0
  3. package/packages/server/src/agents/adapters/GeminiAdapter.js +105 -0
  4. package/packages/server/src/agents/adapters/cliUtils.js +15 -0
  5. package/packages/server/src/agents/adapters/codexCliRunner.js +1 -8
  6. package/packages/server/src/agents/adapters/geminiCliRunner.js +183 -0
  7. package/packages/server/src/agents/adapters/geminiEventMapper.js +195 -0
  8. package/packages/server/src/db/ProviderRepository.js +4 -2
  9. package/packages/server/src/db/migrations/index.js +9 -0
  10. package/packages/server/src/db/migrations/providerMigrations.js +88 -3
  11. package/packages/server/src/db/seedBaselineData.js +23 -1
  12. package/packages/server/src/schema.sql +1 -1
  13. package/packages/server/src/services/e2eSpawnCapture.js +47 -6
  14. package/packages/server/src/services/geminiSpawnHelper.js +47 -0
  15. package/packages/server/src/services/gitDiff.js +22 -47
  16. package/packages/server/src/services/gitService.js +6 -2
  17. package/packages/server/src/services/providerTestService.js +59 -1
  18. package/packages/server/src/services/queryParamBuilder.js +33 -1
  19. package/packages/server/src/services/sessionExecution.js +4 -0
  20. package/packages/server/src/services/sessionPrompts.js +22 -0
  21. package/packages/server/src/services/sessionProvider.js +41 -1
  22. package/packages/shared/src/constants.js +1 -1
  23. package/packages/shared/src/contracts/providers.js +1 -1
  24. package/packages/shared/src/types.js +7 -0
  25. package/packages/web/dist/assets/{ActiveSessionsView-Cxh8mHmB.js → ActiveSessionsView-EdNxmPmZ.js} +1 -1
  26. package/packages/web/dist/assets/{AgentLogsView-xdfI2bR6.js → AgentLogsView-C2wX0JPP.js} +1 -1
  27. package/packages/web/dist/assets/{ArchiveConfirmModal-DXZYdzHR.js → ArchiveConfirmModal-DJERn5XO.js} +1 -1
  28. package/packages/web/dist/assets/{CommandButtonDetailView-D8xfqLAp.js → CommandButtonDetailView-CBPI8-US.js} +1 -1
  29. package/packages/web/dist/assets/EffortLevelSelector-PaBpUveC.js +1 -0
  30. package/packages/web/dist/assets/{GeneralSettingsView-sPXkLlLy.js → GeneralSettingsView-Dw-x83R0.js} +1 -1
  31. package/packages/web/dist/assets/{InputWithButton-B-o0DgMH.js → InputWithButton-CHHcpF4I.js} +1 -1
  32. package/packages/web/dist/assets/{InterpolationHelp-Dxn1li4l.js → InterpolationHelp-CLNPz8s8.js} +1 -1
  33. package/packages/web/dist/assets/MarkdownEditor-DYi1igfT.js +2 -0
  34. package/packages/web/dist/assets/ModelSelector-Cko_yTO5.js +1 -0
  35. package/packages/web/dist/assets/{ModelSelector-BNYKujL-.css → ModelSelector-Dtwe5xLH.css} +1 -1
  36. package/packages/web/dist/assets/{NewSessionView-BR_COfgW.js → NewSessionView-DwUfBg70.js} +1 -1
  37. package/packages/web/dist/assets/{ProjectEditView-WImU7sNd.js → ProjectEditView-CSbsea3U.js} +1 -1
  38. package/packages/web/dist/assets/{ProjectListView-CYmmAcBD.js → ProjectListView-CEc_LWZL.js} +1 -1
  39. package/packages/web/dist/assets/{ProjectNewView-DEhqw3Jv.js → ProjectNewView-D4U0uRlp.js} +1 -1
  40. package/packages/web/dist/assets/ProvidersView-2KCOiY6Q.css +1 -0
  41. package/packages/web/dist/assets/ProvidersView-CD1j8BOv.js +1 -0
  42. package/packages/web/dist/assets/{QuickResponsesPanel-BqmnTd-D.js → QuickResponsesPanel-Dp39f12o.js} +1 -1
  43. package/packages/web/dist/assets/ResizableTextarea-BWywIqOv.js +1 -0
  44. package/packages/web/dist/assets/ResizableTextarea-DERSH3Wz.css +1 -0
  45. package/packages/web/dist/assets/{SessionCard-Bw77-KwD.js → SessionCard-B6d5ijDW.js} +1 -1
  46. package/packages/web/dist/assets/{SessionDetailView-B59TEkr-.js → SessionDetailView-DWbXdx7A.js} +19 -19
  47. package/packages/web/dist/assets/{SessionDetailView-CKVBnR4T.css → SessionDetailView-ULeIkWS0.css} +1 -1
  48. package/packages/web/dist/assets/{SessionFormOptions-hqijxc0S.js → SessionFormOptions-Dz9ik4Fo.js} +1 -1
  49. package/packages/web/dist/assets/{SessionListView-DYXHM9I-.js → SessionListView-C129buBe.js} +1 -1
  50. package/packages/web/dist/assets/{SessionLogStream-5NfVr9pF.js → SessionLogStream-BvXUNNBZ.js} +1 -1
  51. package/packages/web/dist/assets/{SettingsView-DI8ncOAV.js → SettingsView-DW1NvpX_.js} +1 -1
  52. package/packages/web/dist/assets/SlashCommandWizard-DleYBxrE.js +1 -0
  53. package/packages/web/dist/assets/{SummarySettingsView-C2Qs35mm.js → SummarySettingsView-CLUfcWvf.js} +1 -1
  54. package/packages/web/dist/assets/{TemplateDetailView-zVkIvgtu.js → TemplateDetailView-Cukb205e.js} +1 -1
  55. package/packages/web/dist/assets/{commandButtons-CoU3G4zK.js → commandButtons-DejH0rVN.js} +1 -1
  56. package/packages/web/dist/assets/{index-CLRsVASf.js → index-BD7Y3rBE.js} +1 -1
  57. package/packages/web/dist/assets/{index-uySCcnA_.css → index-Bd20AzX1.css} +1 -1
  58. package/packages/web/dist/assets/{index-CslU0psO.js → index-BgJiarKe.js} +1 -1
  59. package/packages/web/dist/assets/{index-9yF1uCCA.js → index-Bk32fSSG.js} +1 -1
  60. package/packages/web/dist/assets/{index-CAGdsDh7.js → index-BkA6pF2Z.js} +1 -1
  61. package/packages/web/dist/assets/{index-DsjWqc6R.js → index-Cltr-Ldt.js} +1 -1
  62. package/packages/web/dist/assets/{index-DI4NxaWD.js → index-Co-46Tp3.js} +1 -1
  63. package/packages/web/dist/assets/{index-DUa7adFh.js → index-Cpykk857.js} +1 -1
  64. package/packages/web/dist/assets/{index-C7Ww2auW.js → index-CtABl0D1.js} +1 -1
  65. package/packages/web/dist/assets/{index-BKstCaYU.js → index-Cuqk5m9S.js} +1 -1
  66. package/packages/web/dist/assets/{index-C2QFVD7d.js → index-CvXApbVC.js} +15 -15
  67. package/packages/web/dist/assets/{index-BhbH7eOk.js → index-D2gN-xEH.js} +1 -1
  68. package/packages/web/dist/assets/{index-Bo7PdwM5.js → index-Dd3WpmyQ.js} +1 -1
  69. package/packages/web/dist/assets/{index-c99Bo3JV.js → index-Dk6--9rj.js} +1 -1
  70. package/packages/web/dist/assets/{index-BjuRttEY.js → index-MZf7MlPX.js} +3 -3
  71. package/packages/web/dist/assets/{index-CP-SxOlV.js → index-NShCcwfj.js} +1 -1
  72. package/packages/web/dist/assets/{index-rkQx2tso.js → index-hA3VEuSq.js} +1 -1
  73. package/packages/web/dist/assets/{index-DOzONENy.js → index-p0mp3nca.js} +1 -1
  74. package/packages/web/dist/assets/{index-mT1JpxDc.js → index-qntNa5r_.js} +1 -1
  75. package/packages/web/dist/assets/{index-DZBpETI5.js → index-qq9ceNSK.js} +1 -1
  76. package/packages/web/dist/assets/{projectDefaults-B8esIcYq.js → projectDefaults-D9xkp2XR.js} +1 -1
  77. package/packages/web/dist/assets/{projects-C-8PSxKi.js → projects-BvLADGKx.js} +1 -1
  78. package/packages/web/dist/assets/{providers-oXifvvqN.js → providers-DZ-fOa4G.js} +1 -1
  79. package/packages/web/dist/assets/{sessions-Nq5VafSf.js → sessions-DETEyjPI.js} +1 -1
  80. package/packages/web/dist/assets/{settings-DtpuiyT6.js → settings-TWfbahn5.js} +1 -1
  81. package/packages/web/dist/index.html +2 -2
  82. package/packages/web/dist/assets/EffortLevelSelector-D2Hdzc_8.js +0 -1
  83. package/packages/web/dist/assets/MarkdownEditor-D4Kbb-9l.js +0 -2
  84. package/packages/web/dist/assets/ModelSelector-72C7MUH4.js +0 -1
  85. package/packages/web/dist/assets/ProvidersView-XZh3jkmH.js +0 -1
  86. package/packages/web/dist/assets/ProvidersView-bZemq_Rv.css +0 -1
  87. package/packages/web/dist/assets/ResizableTextarea-BQNw5e0C.css +0 -1
  88. package/packages/web/dist/assets/ResizableTextarea-DpWdIAP6.js +0 -1
  89. package/packages/web/dist/assets/SlashCommandWizard-BQ_rMzn-.js +0 -1
@@ -1 +0,0 @@
1
- import{k as se,l as ae,z as x,a7 as te,a8 as ie,n as V,_ as Z,a,c as d,b as e,e as de,F as z,r as q,m as I,v as N,q as oe,t as y,u as t,j as X,i as f,f as B,a9 as re,x as ue,J as ce,U as Q,o as ve,d as me}from"./index-C2QFVD7d.js";import{u as ne}from"./providers-oXifvvqN.js";import"./ApiClient-DfbJwzpz.js";const pe=Object.freeze(["anthropic","openai"]);function le(){return{name:"",kind:"anthropic",baseUrl:null,authToken:null,apiTimeoutMs:null,additionalEnvVars:{},commitAttributionOverride:null}}function be(u){const b={name:u.name,kind:u.kind||"anthropic",baseUrl:u.baseUrl,authToken:u.authToken==="••••••••"?null:u.authToken,apiTimeoutMs:u.apiTimeoutMs,additionalEnvVars:u.additionalEnvVars?{...u.additionalEnvVars}:{},commitAttributionOverride:u.commitAttributionOverride||null},m=Object.keys(b.additionalEnvVars),k=(u.models||[]).map(n=>({_serverId:n.id,modelId:n.modelId,displayName:n.displayName,tier:n.tier||"custom"}));return{formData:b,envKeys:m,models:k,authModified:!1}}function fe(){return{form:V(le()),localModels:V([]),envVarKeys:V([]),showAuthToken:V(!1),saving:V(!1),testing:V(!1),error:V(null),testResult:V(null),authTokenModified:V(!1)}}function ye(u,b,m,k={}){const n=ne(),h=se(),_=k.attributionOnlyRef,A=fe(),{form:l,localModels:M,envVarKeys:$,showAuthToken:C,saving:U,testing:O,error:T,testResult:w,authTokenModified:S}=A,D=x(()=>!!b.value),g=x(()=>{const s=te(l.value.commitAttributionOverride);return s.success?null:s.error}),i=x(()=>g.value?!1:_!=null&&_.value?!0:!(l.value.name.trim().length===0||!D.value&&!pe.includes(l.value.kind))),r=x(()=>l.value.baseUrl||l.value.authToken);ae(()=>[u.value,b.value],([s,c])=>{if(s){if(c){const p=be(c);l.value=p.formData,$.value=p.envKeys,M.value=p.models,S.value=p.authModified}else l.value=le(),$.value=[],M.value=[],S.value=!0;C.value=!1,T.value=null,w.value=null}},{deep:!0});function L(){M.value.push({modelId:"",displayName:"",tier:"custom"})}function j(s){M.value.splice(s,1)}function R(){const s=`ENV_VAR_${Object.keys(l.value.additionalEnvVars).length+1}`;l.value.additionalEnvVars[s]="",$.value.push(s)}function W(s){delete l.value.additionalEnvVars[s],$.value=$.value.filter(c=>c!==s)}function Y(s,c){const p=$.value[s];if(p!==c&&p.trim()){const P=l.value.additionalEnvVars[c];delete l.value.additionalEnvVars[c],l.value.additionalEnvVars[p]=P}}async function G(){O.value=!0,T.value=null,w.value=null;try{const s=M.value.find(p=>p.tier==="sonnet"),c={kind:l.value.kind||"anthropic",baseUrl:l.value.baseUrl||void 0,authToken:l.value.authToken||void 0,defaultSonnetModel:(s==null?void 0:s.modelId)||void 0,apiTimeoutMs:l.value.apiTimeoutMs||void 0};w.value=await n.testConnection(c)}catch(s){T.value=s.message}finally{O.value=!1}}function H(s,c){return s.modelId.trim()!==c.modelId||s.displayName.trim()!==c.displayName||s.tier!==c.tier}function J(s){return{modelId:s.modelId.trim(),displayName:s.displayName.trim()||s.modelId.trim(),tier:s.tier||"custom"}}async function o(s,c,p){if(!s._serverId&&s.modelId.trim()){await n.addModel(c,J(s));return}const P=p.get(s._serverId);P&&H(s,P)&&await n.updateModel(c,s._serverId,J(s))}async function v(s){var ee;const c=new Set(M.value.filter(E=>E._serverId).map(E=>E._serverId)),p=((ee=b.value)==null?void 0:ee.models)||[],P=new Map(p.map(E=>[E.id,E]));for(const E of p)c.has(E.id)||await n.removeModel(s,E.id);for(const E of M.value)await o(E,s,P);await n.fetchProviders()}function F(s){const c=te(s);if(!c.success)throw new Error(ie);return c.value}async function K(){var s,c;U.value=!0,T.value=null;try{const p={name:l.value.name.trim(),baseUrl:((s=l.value.baseUrl)==null?void 0:s.trim())||null,apiTimeoutMs:l.value.apiTimeoutMs||null,additionalEnvVars:Object.keys(l.value.additionalEnvVars).length>0?l.value.additionalEnvVars:null,commitAttributionOverride:F(l.value.commitAttributionOverride)};if(_!=null&&_.value){await n.updateProvider(b.value.id,{commitAttributionOverride:p.commitAttributionOverride}),h.success("Provider updated successfully"),m();return}S.value&&(p.authToken=((c=l.value.authToken)==null?void 0:c.trim())||null);let P;D.value?(P=await n.updateProvider(b.value.id,p),h.success("Provider updated successfully")):(p.kind=l.value.kind||"anthropic",P=await n.createProvider(p),h.success("Provider created successfully")),await v(P.id),m()}catch(p){T.value=p.message}finally{U.value=!1}}return{form:l,localModels:M,envVarKeys:$,showAuthToken:C,saving:U,testing:O,error:T,testResult:w,authTokenModified:S,isEditing:D,attributionValidationError:g,isValid:i,canTest:r,addLocalModel:L,removeLocalModel:j,addEnvVar:R,removeEnvVar:W,updateEnvVarKey:Y,testConnection:G,save:K}}const ke={class:"models-section"},he={key:0,class:"models-list"},_e=["onUpdate:modelValue"],ge=["onUpdate:modelValue"],Ve=["onUpdate:modelValue"],Ce=["onClick"],Me={key:1,class:"models-empty"},Ae={__name:"ProviderModelsList",props:{models:{type:Array,required:!0}},emits:["add","remove"],setup(u){return(b,m)=>(a(),d("div",ke,[m[3]||(m[3]=e("div",{class:"models-header"},[e("span",{class:"models-title"},"Models"),e("span",{class:"models-hint"},"Assign tiers to map provider models to Opus / Sonnet / Haiku roles")],-1)),u.models.length>0?(a(),d("div",he,[m[2]||(m[2]=de('<div class="model-row model-row-header" data-v-3aa7217a><span class="col-model-id" data-v-3aa7217a>Model ID</span><span class="col-display-name" data-v-3aa7217a>Display Name</span><span class="col-tier" data-v-3aa7217a>Tier</span><span class="col-actions" data-v-3aa7217a></span></div>',1)),(a(!0),d(z,null,q(u.models,(k,n)=>(a(),d("div",{key:n,class:"model-row"},[I(e("input",{"onUpdate:modelValue":h=>k.modelId=h,type:"text",placeholder:"anthropic.claude-3-sonnet-…",class:"col-model-id model-input"},null,8,_e),[[N,k.modelId]]),I(e("input",{"onUpdate:modelValue":h=>k.displayName=h,type:"text",placeholder:"My Sonnet",class:"col-display-name model-input"},null,8,ge),[[N,k.displayName]]),I(e("select",{"onUpdate:modelValue":h=>k.tier=h,class:"col-tier model-input tier-select"},[...m[1]||(m[1]=[e("option",{value:"opus"}," Opus ",-1),e("option",{value:"sonnet"}," Sonnet ",-1),e("option",{value:"haiku"}," Haiku ",-1),e("option",{value:"custom"}," Custom ",-1)])],8,Ve),[[oe,k.tier]]),e("button",{type:"button",class:"col-actions remove-model-btn",title:"Remove model",onClick:h=>b.$emit("remove",n)}," × ",8,Ce)]))),128))])):(a(),d("div",Me," No models added yet. ")),e("button",{type:"button",class:"btn btn-sm btn-secondary add-model-btn",onClick:m[0]||(m[0]=k=>b.$emit("add"))}," + Add Model ")]))}},$e=Z(Ae,[["__scopeId","data-v-3aa7217a"]]),Te={class:"modal"},Ee={class:"modal-header"},Ie={class:"modal-body"},Oe={key:0,class:"form-group"},Pe={key:1,class:"form-group"},Ue=["disabled","title"],we={key:0,class:"field-note"},Se={key:2,class:"form-group"},Ne={for:"base-url"},Be={class:"label-hint"},De=["placeholder"],xe={key:3,class:"form-group"},Le={for:"auth-token"},Re={class:"label-hint"},Fe={class:"token-input-wrapper"},Ke=["type"],He=["title"],je={class:"form-group"},ze={key:0,class:"field-error"},qe={key:5,class:"expandable-section"},We={class:"section-content"},Ye={class:"form-group"},Ge={class:"form-group"},Je={class:"env-vars-list"},Qe=["onUpdate:modelValue","onBlur"],Xe=["onUpdate:modelValue"],Ze=["onClick"],et={key:6,class:"error-message"},tt={class:"test-result-header"},st={class:"test-icon"},ot={class:"test-message"},nt={key:0,class:"test-details"},lt={key:0,class:"test-detail"},at={key:1,class:"test-detail"},it={class:"modal-footer"},dt=["disabled"],rt={class:"footer-actions"},ut=["disabled"],ct=["disabled"],vt={__name:"ProviderForm",props:{isOpen:{type:Boolean,default:!1},provider:{type:Object,default:null},attributionOnly:{type:Boolean,default:!1}},emits:["close","saved"],setup(u,{emit:b}){const m=u,k=b,{form:n,localModels:h,envVarKeys:_,showAuthToken:A,saving:l,testing:M,error:$,testResult:C,authTokenModified:U,isEditing:O,attributionValidationError:T,isValid:w,canTest:S,addLocalModel:D,removeLocalModel:g,addEnvVar:i,removeEnvVar:r,updateEnvVarKey:L,testConnection:j,save:R}=ye(Q(m,"isOpen"),Q(m,"provider"),()=>k("saved"),{attributionOnlyRef:Q(m,"attributionOnly")}),W=x(()=>n.value.kind==="openai"?"OPENAI_BASE_URL":"ANTHROPIC_BASE_URL"),Y=x(()=>n.value.kind==="openai"?"OPENAI_API_KEY":"ANTHROPIC_AUTH_TOKEN"),G=x(()=>n.value.kind==="openai"?"https://api.openai.com/v1":"https://bedrock-runtime.us-east-1.amazonaws.com");function H(){k("close")}return(J,o)=>u.isOpen?(a(),d("div",{key:0,class:"modal-overlay",onClick:X(H,["self"])},[e("div",Te,[e("div",Ee,[e("h2",null,y(u.attributionOnly?"Commit Attribution":t(O)?"Edit Provider":"Add Provider"),1),e("button",{type:"button",class:"close-btn",title:"Close",onClick:H}," × ")]),e("div",Ie,[e("form",{onSubmit:o[9]||(o[9]=X((...v)=>t(R)&&t(R)(...v),["prevent"]))},[u.attributionOnly?f("",!0):(a(),d("div",Oe,[o[12]||(o[12]=e("label",{for:"provider-name"},"Provider Name*",-1)),I(e("input",{id:"provider-name","onUpdate:modelValue":o[0]||(o[0]=v=>t(n).name=v),type:"text",placeholder:"e.g., AWS Bedrock",required:"",maxlength:"100"},null,512),[[N,t(n).name]])])),u.attributionOnly?f("",!0):(a(),d("div",Pe,[o[14]||(o[14]=e("label",{for:"provider-kind"},[B(" Compatibility* "),e("span",{class:"label-hint"},"Wire protocol & env-var convention")],-1)),I(e("select",{id:"provider-kind","onUpdate:modelValue":o[1]||(o[1]=v=>t(n).kind=v),disabled:t(O),title:t(O)?"Compatibility cannot be changed after creation":void 0,class:"kind-select",required:""},[...o[13]||(o[13]=[e("option",{value:"anthropic"}," Anthropic (Claude Code) ",-1),e("option",{value:"openai"}," OpenAI / Codex ",-1)])],8,Ue),[[oe,t(n).kind]]),t(O)?(a(),d("p",we," Compatibility cannot be changed after creation. ")):f("",!0)])),u.attributionOnly?f("",!0):(a(),d("div",Se,[e("label",Ne,[o[15]||(o[15]=B(" Base URL ",-1)),e("span",Be,"("+y(W.value)+")",1)]),I(e("input",{id:"base-url","onUpdate:modelValue":o[2]||(o[2]=v=>t(n).baseUrl=v),type:"url",placeholder:G.value},null,8,De),[[N,t(n).baseUrl]])])),u.attributionOnly?f("",!0):(a(),d("div",xe,[e("label",Le,[o[16]||(o[16]=B(" Auth Token ",-1)),e("span",Re,"("+y(Y.value)+")",1)]),e("div",Fe,[I(e("input",{id:"auth-token","onUpdate:modelValue":o[3]||(o[3]=v=>t(n).authToken=v),type:t(A)?"text":"password",placeholder:"Your authentication token",onInput:o[4]||(o[4]=v=>U.value=!0)},null,40,Ke),[[re,t(n).authToken]]),e("button",{type:"button",class:"toggle-visibility-btn",title:t(A)?"Hide":"Show",onClick:o[5]||(o[5]=v=>A.value=!t(A))},y(t(A)?"Hide":"Show"),9,He)])])),e("div",je,[o[17]||(o[17]=e("label",{for:"commit-attribution-override"},"Commit attribution override",-1)),I(e("textarea",{id:"commit-attribution-override","onUpdate:modelValue":o[6]||(o[6]=v=>t(n).commitAttributionOverride=v),rows:"3",placeholder:"Blank uses agent default"},null,512),[[N,t(n).commitAttributionOverride]]),o[18]||(o[18]=e("p",{class:"field-note"}," Blank uses agent default. ",-1)),t(T)?(a(),d("p",ze,y(t(T)),1)):f("",!0)]),u.attributionOnly?f("",!0):(a(),ue($e,{key:4,models:t(h),onAdd:t(D),onRemove:t(g)},null,8,["models","onAdd","onRemove"])),u.attributionOnly?f("",!0):(a(),d("details",qe,[o[21]||(o[21]=e("summary",{class:"section-header"}," Advanced Settings ",-1)),e("div",We,[e("div",Ye,[o[19]||(o[19]=e("label",{for:"api-timeout"},"API Timeout (ms)",-1)),I(e("input",{id:"api-timeout","onUpdate:modelValue":o[7]||(o[7]=v=>t(n).apiTimeoutMs=v),type:"number",placeholder:"120000",min:"1000",step:"1000"},null,512),[[N,t(n).apiTimeoutMs,void 0,{number:!0}]])]),e("div",Ge,[o[20]||(o[20]=e("label",null,"Additional Environment Variables",-1)),e("div",Je,[(a(!0),d(z,null,q(t(n).additionalEnvVars,(v,F,K)=>(a(),d("div",{key:K,class:"env-var-row"},[I(e("input",{"onUpdate:modelValue":s=>t(_)[K]=s,type:"text",placeholder:"KEY",class:"env-key",onBlur:s=>t(L)(K,F)},null,40,Qe),[[N,t(_)[K]]]),I(e("input",{"onUpdate:modelValue":s=>t(n).additionalEnvVars[F]=s,type:"text",placeholder:"value",class:"env-value"},null,8,Xe),[[N,t(n).additionalEnvVars[F]]]),e("button",{type:"button",class:"remove-env-btn",title:"Remove",onClick:s=>t(r)(F)}," × ",8,Ze)]))),128)),e("button",{type:"button",class:"btn btn-sm btn-secondary",onClick:o[8]||(o[8]=(...v)=>t(i)&&t(i)(...v))}," + Add Variable ")])])])])),t($)?(a(),d("div",et,y(t($)),1)):f("",!0),t(C)?(a(),d("div",{key:7,class:ce(["test-result",t(C).success?"success":"failure"])},[e("div",tt,[e("span",st,y(t(C).success?"✓":"✗"),1),e("span",ot,y(t(C).message),1)]),t(C).details?(a(),d("div",nt,[t(C).details.model?(a(),d("div",lt,[o[22]||(o[22]=B(" Model: ",-1)),e("code",null,y(t(C).details.model),1)])):f("",!0),t(C).details.code?(a(),d("div",at,[o[23]||(o[23]=B(" Error Code: ",-1)),e("code",null,y(t(C).details.code),1)])):f("",!0)])):f("",!0)],2)):f("",!0)],32)]),e("div",it,[u.attributionOnly?f("",!0):(a(),d("button",{key:0,type:"button",class:"btn btn-secondary",disabled:t(l)||t(M)||!t(S),onClick:o[10]||(o[10]=(...v)=>t(j)&&t(j)(...v))},y(t(M)?"Testing...":"Test Connection"),9,dt)),e("div",rt,[e("button",{type:"button",class:"btn btn-secondary",disabled:t(l),onClick:H}," Cancel ",8,ut),e("button",{type:"button",class:"btn btn-primary",disabled:t(l)||!t(w),onClick:o[11]||(o[11]=(...v)=>t(R)&&t(R)(...v))},y(t(l)?"Saving...":"Save"),9,ct)])])])])):f("",!0)}},mt=Z(vt,[["__scopeId","data-v-9136dbd9"]]),pt={class:"container"},bt={key:0,class:"skeleton-list"},ft={key:1,class:"error-message"},yt={key:2,class:"provider-list"},kt={class:"provider-header"},ht={class:"provider-title"},_t={key:0,class:"built-in-badge"},gt={class:"provider-actions"},Vt=["disabled","onClick"],Ct=["onClick"],Mt=["onClick"],At={class:"provider-details"},$t={class:"provider-detail"},Tt={class:"detail-value"},Et={key:0,class:"provider-detail"},It={class:"detail-value"},Ot={key:1,class:"provider-detail"},Pt={class:"detail-value"},Ut={key:2,class:"provider-detail"},wt={class:"detail-value"},St={class:"modal confirm-modal"},Nt={class:"modal-header"},Bt={class:"modal-body"},Dt={class:"modal-footer"},xt=["disabled"],Lt={__name:"ProvidersView",setup(u){const b=ne(),m=se(),k=V(!1),n=V(null),h=V(!1),_=V(null),A=V(!1),l=V(null);ve(()=>{b.fetchProviders()});function M(){n.value=null,h.value=!1,k.value=!0}function $(g){n.value=g,h.value=!1,k.value=!0}function C(g){n.value=g,h.value=!0,k.value=!0}function U(){k.value=!1,n.value=null,h.value=!1}function O(){U(),b.fetchProviders()}function T(g){return g.kind==="openai"?"Uses official OpenAI API":"Uses official Anthropic API"}async function w(g){l.value=g;try{const i=await b.testExistingProvider(g);i.success?m.success(`Connection successful (model: ${i.details.model})`):m.error(`Connection failed: ${i.message}`)}catch(i){m.error(`Test failed: ${i.message}`)}finally{l.value=null}}function S(g){_.value=g}async function D(){A.value=!0;try{await b.deleteProvider(_.value.id),m.success("Provider deleted"),_.value=null}catch(g){m.error(`Failed to delete provider: ${g.message}`)}finally{A.value=!1}}return(g,i)=>(a(),d("div",pt,[e("div",{class:"page-header"},[e("button",{class:"btn btn-primary",onClick:M},[...i[3]||(i[3]=[e("span",null,"+ Add Provider",-1)])])]),i[11]||(i[11]=e("p",{class:"page-description"}," Configure custom model providers to use the agent through alternative endpoints like AWS Bedrock, Google Vertex AI, or self-hosted proxies. ",-1)),t(b).loading?(a(),d("div",bt,[(a(),d(z,null,q(3,r=>e("div",{key:r,class:"skeleton card",style:{height:"120px"}})),64))])):t(b).error?(a(),d("div",ft,y(t(b).error),1)):(a(),d("div",yt,[(a(!0),d(z,null,q(t(b).providers,r=>(a(),d("div",{key:r.id,class:"provider-card card"},[e("div",kt,[e("div",ht,[e("h3",null,[B(y(r.name)+" ",1),r.isBuiltIn?(a(),d("span",_t,"Built-in")):f("",!0)])]),e("div",gt,[r.isBuiltIn?f("",!0):(a(),d("button",{key:0,class:"btn btn-sm",disabled:l.value===r.id,title:"Test Connection",onClick:L=>w(r.id)},y(l.value===r.id?"Testing...":"Test"),9,Vt)),e("button",{class:"btn btn-sm",onClick:L=>r.isBuiltIn?C(r):$(r)},y(r.isBuiltIn?"Settings":"Edit"),9,Ct),r.isBuiltIn?f("",!0):(a(),d("button",{key:1,class:"btn btn-sm btn-danger",onClick:L=>S(r)}," Delete ",8,Mt))])]),e("div",At,[e("div",$t,[i[4]||(i[4]=e("span",{class:"detail-label"},"Commit attribution:",-1)),e("span",Tt,y(r.commitAttributionOverride?"Custom attribution":"Agent default"),1)]),r.baseUrl?(a(),d("div",Et,[i[5]||(i[5]=e("span",{class:"detail-label"},"Base URL:",-1)),e("code",It,y(r.baseUrl),1)])):f("",!0),r.defaultSonnetModel?(a(),d("div",Ot,[i[6]||(i[6]=e("span",{class:"detail-label"},"Default Sonnet Model:",-1)),e("code",Pt,y(r.defaultSonnetModel),1)])):f("",!0),!r.baseUrl&&r.isBuiltIn?(a(),d("div",Ut,[e("span",wt,y(T(r)),1)])):f("",!0)])]))),128))])),me(mt,{"is-open":k.value,provider:n.value,"attribution-only":h.value,onClose:U,onSaved:O},null,8,["is-open","provider","attribution-only"]),_.value?(a(),d("div",{key:3,class:"modal-overlay",onClick:i[2]||(i[2]=X(r=>_.value=null,["self"]))},[e("div",St,[e("div",Nt,[i[7]||(i[7]=e("h2",null,"Delete Provider",-1)),e("button",{type:"button",class:"close-btn",onClick:i[0]||(i[0]=r=>_.value=null)}," × ")]),e("div",Bt,[e("p",null,[i[8]||(i[8]=B("Are you sure you want to delete ",-1)),e("strong",null,y(_.value.name),1),i[9]||(i[9]=B("?",-1))]),i[10]||(i[10]=e("p",{class:"warning-text"}," This action cannot be undone. ",-1))]),e("div",Dt,[e("button",{type:"button",class:"btn btn-secondary",onClick:i[1]||(i[1]=r=>_.value=null)}," Cancel "),e("button",{type:"button",class:"btn btn-danger",disabled:A.value,onClick:D},y(A.value?"Deleting...":"Delete"),9,xt)])])])):f("",!0)]))}},Ht=Z(Lt,[["__scopeId","data-v-1ca2a6ab"]]);export{Ht as default};
@@ -1 +0,0 @@
1
- .models-section[data-v-3aa7217a]{margin-bottom:1.25rem;border:1px solid var(--color-border);border-radius:.25rem;overflow:hidden}.models-header[data-v-3aa7217a]{display:flex;align-items:baseline;gap:.75rem;padding:.75rem 1rem;background:var(--color-background-soft);border-bottom:1px solid var(--color-border)}.models-title[data-v-3aa7217a]{font-weight:500;font-size:.875rem;color:var(--color-text)}.models-hint[data-v-3aa7217a]{font-size:.8125rem;color:var(--color-text-soft)}.models-list[data-v-3aa7217a]{padding:.5rem .75rem}.model-row[data-v-3aa7217a]{display:grid;grid-template-columns:1fr 10rem 6.5rem 2rem;gap:.5rem;align-items:center;margin-bottom:.375rem}.model-row-header[data-v-3aa7217a]{font-size:.75rem;font-weight:500;color:var(--color-text-soft);margin-bottom:.25rem}.model-row-header span[data-v-3aa7217a]{padding:0 .25rem}.model-input[data-v-3aa7217a]{padding:.4rem .6rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:.25rem;color:var(--color-text);font-size:.8125rem}.model-input[data-v-3aa7217a]:focus{outline:none;border-color:var(--color-primary)}.tier-select[data-v-3aa7217a]{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto;cursor:pointer}.remove-model-btn[data-v-3aa7217a]{background:none;border:1px solid var(--color-border);color:var(--color-text-soft);font-size:1.125rem;cursor:pointer;padding:.2rem .4rem;line-height:1;border-radius:.25rem;text-align:center}.remove-model-btn[data-v-3aa7217a]:hover{color:var(--color-danger, #ef4444);border-color:var(--color-danger, #ef4444)}.models-empty[data-v-3aa7217a]{padding:.75rem 1rem;font-size:.8125rem;color:var(--color-text-soft);font-style:italic}.add-model-btn[data-v-3aa7217a]{margin:.5rem .75rem .75rem}.btn[data-v-3aa7217a]{padding:.5rem 1rem;border-radius:.25rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .15s}.btn-sm[data-v-3aa7217a]{padding:.375rem .75rem;font-size:.8125rem}.btn-secondary[data-v-3aa7217a]{background:var(--color-background);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[data-v-3aa7217a]:hover:not(:disabled){border-color:var(--color-primary);background:var(--color-background-soft)}.modal-overlay[data-v-9136dbd9]{position:fixed;top:0;left:0;right:0;bottom:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:1000}.modal[data-v-9136dbd9]{background:var(--color-background);border:1px solid var(--color-border);border-radius:.5rem;width:100%;max-width:680px;max-height:90vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 8px 32px #0000004d}.modal-header[data-v-9136dbd9]{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid var(--color-border)}.modal-header h2[data-v-9136dbd9]{margin:0;font-size:1.125rem;font-weight:600}.close-btn[data-v-9136dbd9]{background:none;border:none;color:var(--color-text-soft);font-size:1.5rem;cursor:pointer;padding:.25rem;line-height:1;border-radius:.25rem}.close-btn[data-v-9136dbd9]:hover{color:var(--color-text);background:var(--color-background-soft)}.modal-body[data-v-9136dbd9]{padding:1.25rem;overflow-y:auto}.form-group[data-v-9136dbd9]{margin-bottom:1.25rem}.form-group label[data-v-9136dbd9]{display:block;margin-bottom:.5rem;font-weight:500;font-size:.875rem;color:var(--color-text)}.label-hint[data-v-9136dbd9]{font-weight:400;color:var(--color-text-soft);font-size:.8125rem}.form-group input[type=text][data-v-9136dbd9],.form-group input[type=url][data-v-9136dbd9],.form-group input[type=password][data-v-9136dbd9],.form-group input[type=number][data-v-9136dbd9],.form-group textarea[data-v-9136dbd9],.form-group select.kind-select[data-v-9136dbd9]{width:100%;padding:.5rem .75rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:.25rem;color:var(--color-text);font-size:.875rem}.form-group textarea[data-v-9136dbd9]{min-height:4.75rem;resize:vertical;line-height:1.45}.form-group input[data-v-9136dbd9]:focus,.form-group textarea[data-v-9136dbd9]:focus,.form-group select.kind-select[data-v-9136dbd9]:focus{outline:none;border-color:var(--color-primary)}.form-group select.kind-select[data-v-9136dbd9]:disabled{opacity:.6;cursor:not-allowed}.field-note[data-v-9136dbd9]{margin:.375rem 0 0;font-size:.75rem;color:var(--color-text-soft);font-style:italic}.field-error[data-v-9136dbd9]{margin:.375rem 0 0;font-size:.75rem;color:var(--color-danger)}.token-input-wrapper[data-v-9136dbd9]{display:flex;gap:.5rem}.token-input-wrapper input[data-v-9136dbd9]{flex:1}.toggle-visibility-btn[data-v-9136dbd9]{padding:.5rem 1rem;background:var(--color-background);border:1px solid var(--color-border);border-radius:.25rem;color:var(--color-text);font-size:.8125rem;cursor:pointer;white-space:nowrap}.toggle-visibility-btn[data-v-9136dbd9]:hover{background:var(--color-background-soft)}.expandable-section[data-v-9136dbd9]{margin-bottom:1.25rem;border:1px solid var(--color-border);border-radius:.25rem}.section-header[data-v-9136dbd9]{padding:.75rem 1rem;background:var(--color-background-soft);cursor:pointer;-webkit-user-select:none;user-select:none;font-weight:500;font-size:.875rem;color:var(--color-text)}.section-header[data-v-9136dbd9]:hover{background:var(--color-background-mute)}.section-content[data-v-9136dbd9]{padding:1rem}.env-vars-list[data-v-9136dbd9]{display:flex;flex-direction:column;gap:.5rem}.env-var-row[data-v-9136dbd9]{display:flex;gap:.5rem}.env-key[data-v-9136dbd9],.env-value[data-v-9136dbd9]{padding:.5rem .75rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:.25rem;color:var(--color-text);font-size:.875rem;font-family:var(--font-mono)}.env-key[data-v-9136dbd9]{flex:0 0 150px}.env-value[data-v-9136dbd9]{flex:1}.env-key[data-v-9136dbd9]:focus,.env-value[data-v-9136dbd9]:focus{outline:none;border-color:var(--color-primary)}.remove-env-btn[data-v-9136dbd9]{background:none;border:1px solid var(--color-border);color:var(--color-text-soft);font-size:1.25rem;cursor:pointer;padding:.25rem .5rem;line-height:1;border-radius:.25rem}.remove-env-btn[data-v-9136dbd9]:hover{color:var(--color-danger, #ef4444);border-color:var(--color-danger, #ef4444)}.error-message[data-v-9136dbd9]{margin-top:1rem;padding:.75rem;background:#ef44441a;border:1px solid rgba(239,68,68,.3);border-radius:.25rem;color:var(--color-danger, #ef4444);font-size:.875rem}.test-result[data-v-9136dbd9]{margin-top:1rem;padding:.75rem;border-radius:.25rem;font-size:.875rem}.test-result.success[data-v-9136dbd9]{background:#22c55e1a;border:1px solid rgba(34,197,94,.3);color:var(--color-success, #22c55e)}.test-result.failure[data-v-9136dbd9]{background:#ef44441a;border:1px solid rgba(239,68,68,.3);color:var(--color-danger, #ef4444)}.test-result-header[data-v-9136dbd9]{display:flex;align-items:center;gap:.5rem;font-weight:500}.test-icon[data-v-9136dbd9]{font-size:1.125rem}.test-details[data-v-9136dbd9]{margin-top:.5rem;padding-top:.5rem;border-top:1px solid currentColor;opacity:.8}.test-detail[data-v-9136dbd9]{margin-top:.25rem}.test-detail code[data-v-9136dbd9]{font-family:var(--font-mono);font-size:.8125rem}.modal-footer[data-v-9136dbd9]{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-top:1px solid var(--color-border);background:var(--color-background-soft)}.footer-actions[data-v-9136dbd9]{display:flex;gap:.75rem}.btn[data-v-9136dbd9]{padding:.5rem 1rem;border-radius:.25rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .15s}.btn[data-v-9136dbd9]:disabled{opacity:.5;cursor:not-allowed}.btn-sm[data-v-9136dbd9]{padding:.375rem .75rem;font-size:.8125rem}.btn-secondary[data-v-9136dbd9]{background:var(--color-background);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[data-v-9136dbd9]:hover:not(:disabled){border-color:var(--color-primary);background:var(--color-background-soft)}.btn-primary[data-v-9136dbd9]{background:var(--color-primary);border:1px solid var(--color-primary);color:#fff}.btn-primary[data-v-9136dbd9]:hover:not(:disabled){filter:brightness(1.1)}@media (max-width: 520px){.modal-overlay[data-v-9136dbd9]{align-items:stretch;justify-content:stretch}.modal[data-v-9136dbd9]{max-width:none;max-height:none;min-height:100vh;border-radius:0;border-left:0;border-right:0}.modal-body[data-v-9136dbd9]{padding:1rem}.modal-footer[data-v-9136dbd9]{align-items:stretch;flex-direction:column;gap:.75rem}.footer-actions[data-v-9136dbd9]{justify-content:space-between;width:100%}.footer-actions .btn[data-v-9136dbd9],.modal-footer>.btn[data-v-9136dbd9]{flex:1}.env-var-row[data-v-9136dbd9],.token-input-wrapper[data-v-9136dbd9]{flex-direction:column}.env-key[data-v-9136dbd9]{flex:1}}.page-header[data-v-1ca2a6ab]{display:flex;justify-content:flex-end;align-items:center;margin-bottom:.5rem}.page-description[data-v-1ca2a6ab]{color:var(--color-text-soft);margin:0 0 1.5rem;font-size:.875rem;line-height:1.5}.skeleton-list[data-v-1ca2a6ab]{display:flex;flex-direction:column;gap:1rem}.error-message[data-v-1ca2a6ab]{color:var(--color-error);padding:1rem;background-color:#f851491a;border-radius:var(--border-radius)}.provider-list[data-v-1ca2a6ab]{display:flex;flex-direction:column;gap:1rem}.provider-card[data-v-1ca2a6ab]{padding:1.25rem}.provider-header[data-v-1ca2a6ab]{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:.75rem;gap:1rem}.provider-title h3[data-v-1ca2a6ab]{margin:0;font-size:1rem;display:flex;align-items:center;gap:.5rem}.built-in-badge[data-v-1ca2a6ab]{display:inline-block;padding:.125rem .5rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:.25rem;font-size:.75rem;font-weight:500;text-transform:uppercase;letter-spacing:0;color:var(--color-text-soft)}.provider-actions[data-v-1ca2a6ab]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.5rem;flex-shrink:0}.provider-details[data-v-1ca2a6ab]{display:flex;flex-direction:column;gap:.5rem}.provider-detail[data-v-1ca2a6ab]{display:flex;gap:.5rem;font-size:.875rem}.detail-label[data-v-1ca2a6ab]{color:var(--color-text-soft);font-weight:500}.detail-value[data-v-1ca2a6ab]{color:var(--color-text);font-family:var(--font-mono);font-size:.8125rem;overflow-wrap:anywhere}.btn-sm[data-v-1ca2a6ab]{padding:.375rem .75rem;font-size:.8125rem}.btn-danger[data-v-1ca2a6ab]{background:var(--color-danger, #ef4444);border:1px solid var(--color-danger, #ef4444);color:#fff}.btn-danger[data-v-1ca2a6ab]:hover:not(:disabled){filter:brightness(1.1)}.modal-overlay[data-v-1ca2a6ab]{position:fixed;top:0;left:0;right:0;bottom:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:1000}.modal[data-v-1ca2a6ab]{background:var(--color-background);border:1px solid var(--color-border);border-radius:.5rem;width:100%;max-width:450px;max-height:90vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 8px 32px #0000004d}.confirm-modal[data-v-1ca2a6ab]{max-width:400px}.modal-header[data-v-1ca2a6ab]{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid var(--color-border)}.modal-header h2[data-v-1ca2a6ab]{margin:0;font-size:1.125rem;font-weight:600}.close-btn[data-v-1ca2a6ab]{background:none;border:none;color:var(--color-text-soft);font-size:1.5rem;cursor:pointer;padding:.25rem;line-height:1;border-radius:.25rem}.close-btn[data-v-1ca2a6ab]:hover{color:var(--color-text);background:var(--color-background-soft)}.modal-body[data-v-1ca2a6ab]{padding:1.25rem}.modal-body p[data-v-1ca2a6ab]{margin:0 0 .75rem}.warning-text[data-v-1ca2a6ab]{color:var(--color-warning, #f59e0b);font-size:.875rem;font-weight:500}.modal-footer[data-v-1ca2a6ab]{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.25rem;border-top:1px solid var(--color-border);background:var(--color-background-soft)}@media (max-width: 520px){.provider-card[data-v-1ca2a6ab]{padding:1rem}.provider-header[data-v-1ca2a6ab],.provider-detail[data-v-1ca2a6ab]{flex-direction:column;align-items:stretch}.provider-actions[data-v-1ca2a6ab]{justify-content:flex-start}.modal-overlay[data-v-1ca2a6ab]{align-items:stretch}.modal[data-v-1ca2a6ab]{max-width:none;max-height:none;min-height:100vh;border-radius:0;border-left:0;border-right:0}.modal-footer[data-v-1ca2a6ab]{justify-content:space-between}}
@@ -1 +0,0 @@
1
- .resizable-textarea-wrapper[data-v-0fb71bd2]{position:relative;display:flex;flex-direction:column}.resizable-textarea-wrapper textarea[data-v-0fb71bd2]{resize:none;padding-bottom:24px;width:100%;box-sizing:border-box}.resize-handle[data-v-0fb71bd2]{position:absolute;bottom:4px;right:4px;width:24px;height:24px;cursor:ns-resize;display:flex;align-items:center;justify-content:center;color:var(--color-text-soft, #6b7280);opacity:.5;transition:opacity .15s;touch-action:none;user-select:none;-webkit-user-select:none;border-radius:4px}.resize-handle[data-v-0fb71bd2]:hover,.resize-handle[data-v-0fb71bd2]:active{opacity:1;background:#ffffff0d}@media (pointer: coarse){.resize-handle[data-v-0fb71bd2]{width:32px;height:32px;bottom:2px;right:2px;opacity:.6}}
@@ -1 +0,0 @@
1
- import{_ as x,l as b,G as _,o as R,a as z,c as H,b as i,aa as w,j as y,n as M}from"./index-C2QFVD7d.js";const k={class:"resizable-textarea-wrapper"},Y=["value"],B={__name:"ResizableTextarea",props:{modelValue:{type:String,default:""},minHeight:{type:Number,default:80},maxHeight:{type:Number,default:null}},emits:["update:modelValue","input","focus","blur"],setup(d,{expose:f,emit:p}){const u=d,o=p;function E(e){o("update:modelValue",e.target.value),o("input",e)}function v(e){o("focus",e)}function m(e){o("blur",e)}const t=M(null);let l=!1;b(()=>u.modelValue,e=>{t.value&&t.value.value!==e&&(t.value.value=e)});function h(e){if(!t.value)return;l=!0;const n=e.type.startsWith("touch")?e.touches[0].clientY:e.clientY,g=t.value.offsetHeight,r=c=>{if(!l)return;const L=c.type.startsWith("touch")?c.touches[0].clientY:c.clientY;let s=g+(L-n);s=Math.max(u.minHeight,s),u.maxHeight&&(s=Math.min(u.maxHeight,s)),t.value.style.height=`${s}px`},a=()=>{l=!1,document.removeEventListener("mousemove",r),document.removeEventListener("mouseup",a),document.removeEventListener("touchmove",r),document.removeEventListener("touchend",a),document.removeEventListener("touchcancel",a)};document.addEventListener("mousemove",r),document.addEventListener("mouseup",a),document.addEventListener("touchmove",r,{passive:!1}),document.addEventListener("touchend",a),document.addEventListener("touchcancel",a)}return f({get value(){var e;return((e=t.value)==null?void 0:e.value)||""},set value(e){t.value&&(t.value.value=e)},focus(){var e;(e=t.value)==null||e.focus()},blur(){var e;(e=t.value)==null||e.blur()},select(){var e;(e=t.value)==null||e.select()},get selectionStart(){var e;return((e=t.value)==null?void 0:e.selectionStart)||0},set selectionStart(e){t.value&&(t.value.selectionStart=e)},get selectionEnd(){var e;return((e=t.value)==null?void 0:e.selectionEnd)||0},set selectionEnd(e){t.value&&(t.value.selectionEnd=e)},dispatchEvent(e){var n;return(n=t.value)==null?void 0:n.dispatchEvent(e)}}),_(()=>{var e,n;l=!1,(e=t.value)==null||e.removeEventListener("focus",v),(n=t.value)==null||n.removeEventListener("blur",m)}),R(()=>{var e,n;(e=t.value)==null||e.addEventListener("focus",v),(n=t.value)==null||n.addEventListener("blur",m)}),(e,n)=>(z(),H("div",k,[i("textarea",w({ref_key:"textareaRef",ref:t},e.$attrs,{value:d.modelValue,onInput:E}),null,16,Y),i("div",{class:"resize-handle","aria-hidden":"true",onMousedown:h,onTouchstart:y(h,["prevent"])},[...n[0]||(n[0]=[i("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none"},[i("path",{d:"M14 10L10 14M14 6L6 14",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round"})],-1)])],32)]))}},V=x(B,[["__scopeId","data-v-0fb71bd2"]]);export{V as R};
@@ -1 +0,0 @@
1
- import{b as ae,C as X,D as oe,O as le}from"./EffortLevelSelector-D2Hdzc_8.js";import{_ as A,k as Z,n as D,l as K,a as o,c as i,b as l,F as B,r as N,t as m,z as _,U as ie,p as re,o as ee,A as ce,m as z,v as T,L as R,i as k,f as q,j as W,q as de,x as E,d as ue,w as me,u as G,O as fe,T as pe}from"./index-C2QFVD7d.js";import{u as te}from"./providers-oXifvvqN.js";import{a as F}from"./ApiClient-DfbJwzpz.js";const he={class:"mode-selector"},ge=["value","disabled"],ve=["value"],ye={__name:"ModeSelector",props:{sessionId:{type:String,default:null},modelValue:{type:String,default:null},disabled:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,c=t,a=ae(),u=Z(),d=D(!1),h=[{value:"plan",label:"Plan",description:"Agent plans before implementing"},{value:"standard",label:"Standard",description:"Balanced approach"},{value:"yolo",label:"YOLO",description:"Auto-approve mode"}],b=_(()=>{var p;return n.sessionId?(p=a.currentSession)==null?void 0:p.mode:n.modelValue}),C=D(b.value),g=ie(n,"modelValue");K([b,g],([p])=>{C.value=p},{flush:"sync"});async function r(p){if(!d.value&&C.value!==p)if(C.value=p,n.sessionId){d.value=!0;try{await a.updateSessionMode(n.sessionId,p)}catch(S){C.value=b.value,u.error(S.message)}finally{d.value=!1}}else c("update:modelValue",p)}return(p,S)=>(o(),i("div",he,[l("select",{id:"mode-select",value:C.value,disabled:e.disabled||d.value,class:"mode-select",onChange:S[0]||(S[0]=w=>r(w.target.value))},[(o(),i(B,null,N(h,w=>l("option",{key:w.value,value:w.value},m(w.label),9,ve)),64))],40,ge)]))}},Rt=A(ye,[["__scopeId","data-v-224ea1e6"]]),se=Object.freeze({streaming:!1,thinking:!1,reasoningEffort:!1,toolUse:!1,resume:!1}),I={byAgentType:new Map,fetchPromise:null,fetched:!1};async function Q(){return I.fetched?I.byAgentType:(I.fetchPromise||(I.fetchPromise=(async()=>{try{const e=await F.getAgents();for(const t of e||[])t&&t.agentType&&I.byAgentType.set(t.agentType,t.capabilities||se)}catch{}finally{I.fetched=!0,I.fetchPromise=null}return I.byAgentType})()),I.fetchPromise)}function _e(e){return I.byAgentType.get(e)||{...se}}function ne(e){return(e==null?void 0:e.kind)==="openai"?"codex":"claude-code"}function J(e,t){return(t==null?void 0:t.kind)==="openai"?le.find(n=>n.id===e)||null:(!t||ne(t)==="claude-code")&&X.find(n=>n.id===e)||null}function H(e){try{const n=te().allModels.filter(c=>c.modelId===e);return n.length<=1?n[0]||null:n.sort((c,a)=>{const u=O(c.providerId),d=O(a.providerId);return(u==null?void 0:u.isBuiltIn)!==(d==null?void 0:d.isBuiltIn)?u!=null&&u.isBuiltIn?1:-1:((u==null?void 0:u.name)||"").localeCompare((d==null?void 0:d.name)||"")})[0]||null}catch{return null}}function O(e){try{return te().getById(e)||null}catch{return null}}function Y(e){if(!e)return"Unknown";let t=e.replace(/^(.*\/)?models\//,"");return t=t.replace(/^accounts\/[^/]+\/models\//,""),t=t.replace(/-\d{8}$/,""),t=t.replace(/[-_]/g," "),t=t.split(" ").map(n=>n.charAt(0).toUpperCase()+n.slice(1).toLowerCase()).join(" "),t||"Unknown"}function Gt(){function e(c){if(!c)return"Default";const a=H(c),u=a?O(a.providerId):null,d=J(c,u);return d?d.name:a!=null&&a.displayName?a.displayName:Y(c)}function t(c){if(!c){const h=X.find(b=>b.id===oe);return h?h.description:""}const a=H(c),u=a?O(a.providerId):null,d=J(c,u);return d?d.description:a!=null&&a.description?a.description:c}function n(c){Q();const a=H(c),u=a?O(a.providerId):null,d=u?ne(u):"claude-code";return{name:e(c),description:t(c),providerId:(a==null?void 0:a.providerId)||null,providerName:(a==null?void 0:a.providerName)||(u==null?void 0:u.name)||null,agentType:d,capabilities:_e(d)}}return{getModelDisplayName:e,getModelDescription:t,getModelInfo:n,formatModelId:Y,fetchAgentCapabilities:Q}}const ke={__name:"SlashCommandButton",emits:["open"],setup(e,{emit:t}){const n=t;return(c,a)=>(o(),i("button",{type:"button",class:"slash-command-btn",title:"Slash Commands","data-testid":"slash-command-button",onClick:a[0]||(a[0]=u=>n("open"))},[...a[1]||(a[1]=[l("span",{class:"slash-icon"},"/",-1),l("span",{class:"slash-text"},"Commands",-1)])]))}},Qt=A(ke,[["__scopeId","data-v-63f59216"]]),Ce=re("slashCommands",{state:()=>({commands:[],loading:!1,error:null,lastFetchedDirectory:null,executing:!1}),getters:{builtinCommands:e=>e.commands.filter(t=>t.source==="builtin"),projectCommands:e=>e.commands.filter(t=>t.source==="project"),userCommands:e=>e.commands.filter(t=>t.source==="user"),pluginCommands:e=>e.commands.filter(t=>t.source==="plugin"),customCommands:e=>e.commands.filter(t=>t.source!=="builtin"),projectSkills:e=>e.commands.filter(t=>t.source==="project-skill"),userSkills:e=>e.commands.filter(t=>t.source==="user-skill"),pluginSkills:e=>e.commands.filter(t=>t.source==="plugin-skill"),allSkills:e=>e.commands.filter(t=>t.isSkill===!0),hasSkills:e=>e.commands.some(t=>t.isSkill===!0),allProjectItems:e=>e.commands.filter(t=>t.source==="project"||t.source==="project-skill"),allUserItems:e=>e.commands.filter(t=>t.source==="user"||t.source==="user-skill"),hasCommands:e=>e.commands.length>0,hasCustomCommands:e=>e.commands.some(t=>t.source==="project"||t.source==="user")},actions:{async fetchCommandsFromSession(e){this.loading=!0,this.error=null;try{const t=await F.getSession(e),n=t.slashCommands?JSON.parse(t.slashCommands):[];return this.commands=n,n}catch(t){throw this.error=t.message,t}finally{this.loading=!1}},async fetchCommands(e,t=!1){if(!t&&this.lastFetchedDirectory===e&&this.commands.length>0)return this.commands;this.loading=!0,this.error=null;try{const n=await F.getSlashCommands(e);return this.commands=n,this.lastFetchedDirectory=e,n}catch(n){throw this.error=n.message,n}finally{this.loading=!1}},async executeCommand(e,t,n={}){this.executing=!0,this.error=null;try{return await F.executeSlashCommand(e,t,n)}catch(c){throw this.error=c.message,c}finally{this.executing=!1}},getCommandByName(e){return this.commands.find(t=>t.name===e)||null},searchCommands(e){if(!e||!e.trim())return this.commands;const t=e.toLowerCase();return this.commands.filter(n=>n.name.toLowerCase().includes(t)||n.description&&n.description.toLowerCase().includes(t))},clearCommands(){this.commands=[],this.lastFetchedDirectory=null,this.error=null}}}),be={class:"command-grid"},Se={class:"search-box"},$e={key:0,class:"loading-state"},we={key:1,class:"error-state"},xe={key:2,class:"empty-state"},Ie={key:0},Be={key:1},Ne={key:3,class:"command-sections"},De={key:0,class:"command-section"},je={class:"command-cards"},Pe=["data-testid","onClick"],Ue={class:"command-name"},Le={class:"command-description"},Me={key:1,class:"command-section"},Ve={class:"command-cards"},ze=["data-testid","onClick"],Oe={class:"command-name"},Ae={class:"command-description"},Te={key:0,class:"command-args-badge"},Fe={key:2,class:"command-section"},qe={class:"command-cards"},Ee=["data-testid","onClick"],He={class:"command-name"},We={class:"command-description"},Ke={key:0,class:"command-args-badge"},Re={key:3,class:"command-section"},Ge={class:"command-cards"},Qe=["data-testid","onClick"],Je={class:"command-name"},Ye={class:"command-description"},Xe={key:0,class:"command-args-badge"},Ze={key:4,class:"command-section"},et={class:"command-cards"},tt=["data-testid","onClick"],st={class:"command-name"},nt={class:"command-description"},at={key:0,class:"command-args-badge"},ot={key:5,class:"command-section"},lt={class:"command-cards"},it=["data-testid","onClick"],rt={class:"command-name"},ct={class:"command-description"},dt={key:0,class:"command-args-badge"},ut={key:6,class:"command-section"},mt={class:"command-cards"},ft=["data-testid","onClick"],pt={class:"command-name"},ht={class:"command-description"},gt={key:0,class:"command-args-badge"},vt={__name:"CommandGrid",props:{commands:{type:Array,required:!0},loading:{type:Boolean,default:!1},error:{type:String,default:null},hideBuiltin:{type:Boolean,default:!1}},emits:["select","close"],setup(e,{emit:t}){const n=e,c=t,a=D(""),u=D(null),d=_(()=>n.commands.filter(v=>v.source==="builtin")),h=_(()=>n.commands.filter(v=>v.source==="project")),b=_(()=>n.commands.filter(v=>v.source==="user")),C=_(()=>n.commands.filter(v=>v.source==="plugin")),g=_(()=>n.commands.filter(v=>v.source==="project-skill")),r=_(()=>n.commands.filter(v=>v.source==="user-skill")),p=_(()=>n.commands.filter(v=>v.source==="plugin-skill"));function S(v){if(!a.value.trim())return v;const f=a.value.toLowerCase();return v.filter(s=>s.name.toLowerCase().includes(f)||s.description&&s.description.toLowerCase().includes(f))}const w=_(()=>S(d.value)),V=_(()=>S(h.value)),y=_(()=>S(b.value)),$=_(()=>S(C.value)),x=_(()=>S(g.value)),j=_(()=>S(r.value)),P=_(()=>S(p.value)),U=_(()=>[...w.value,...V.value,...y.value,...$.value,...x.value,...j.value,...P.value]);function L(v){c("select",v)}return ee(()=>{ce(()=>{var v;(v=u.value)==null||v.focus()})}),(v,f)=>(o(),i("div",be,[l("div",Se,[z(l("input",{ref_key:"searchInput",ref:u,"onUpdate:modelValue":f[0]||(f[0]=s=>a.value=s),type:"text",placeholder:"Search commands...",class:"search-input","data-testid":"command-search",onKeydown:f[1]||(f[1]=R(s=>c("close"),["escape"]))},null,544),[[T,a.value]])]),e.loading?(o(),i("div",$e,[...f[2]||(f[2]=[l("span",{class:"loading-spinner"},null,-1),l("span",null,"Loading commands...",-1)])])):e.error?(o(),i("div",we,[f[3]||(f[3]=l("span",{class:"error-icon"},"⚠️",-1)),l("span",null,m(e.error),1)])):U.value.length===0?(o(),i("div",xe,[a.value?(o(),i("span",Ie,'No commands match "'+m(a.value)+'"',1)):(o(),i("span",Be,"No slash commands available"))])):(o(),i("div",Ne,[w.value.length>0&&!e.hideBuiltin?(o(),i("div",De,[f[4]||(f[4]=l("h3",{class:"section-title"}," Built-in Commands ",-1)),l("div",je,[(o(!0),i(B,null,N(w.value,s=>(o(),i("button",{key:s.name,type:"button",class:"command-card","data-testid":`command-${s.name}`,onClick:M=>L(s)},[l("span",Ue,"/"+m(s.name),1),l("span",Le,m(s.description||"No description"),1)],8,Pe))),128))])])):k("",!0),V.value.length>0?(o(),i("div",Me,[f[5]||(f[5]=l("h3",{class:"section-title"}," Project Commands ",-1)),l("div",Ve,[(o(!0),i(B,null,N(V.value,s=>(o(),i("button",{key:s.name,type:"button",class:"command-card","data-testid":`command-${s.name}`,onClick:M=>L(s)},[l("span",Oe,"/"+m(s.name),1),l("span",Ae,m(s.description||"No description"),1),s.arguments.length>0?(o(),i("span",Te,m(s.arguments.length)+" arg"+m(s.arguments.length>1?"s":""),1)):k("",!0)],8,ze))),128))])])):k("",!0),y.value.length>0?(o(),i("div",Fe,[f[6]||(f[6]=l("h3",{class:"section-title"}," User Commands ",-1)),l("div",qe,[(o(!0),i(B,null,N(y.value,s=>(o(),i("button",{key:s.name,type:"button",class:"command-card","data-testid":`command-${s.name}`,onClick:M=>L(s)},[l("span",He,"/"+m(s.name),1),l("span",We,m(s.description||"No description"),1),s.arguments.length>0?(o(),i("span",Ke,m(s.arguments.length)+" arg"+m(s.arguments.length>1?"s":""),1)):k("",!0)],8,Ee))),128))])])):k("",!0),$.value.length>0?(o(),i("div",Re,[f[7]||(f[7]=l("h3",{class:"section-title"}," Plugin Commands ",-1)),l("div",Ge,[(o(!0),i(B,null,N($.value,s=>(o(),i("button",{key:s.name,type:"button",class:"command-card","data-testid":`command-${s.name}`,onClick:M=>L(s)},[l("span",Je,"/"+m(s.name),1),l("span",Ye,m(s.description||"No description"),1),s.arguments.length>0?(o(),i("span",Xe,m(s.arguments.length)+" arg"+m(s.arguments.length>1?"s":""),1)):k("",!0)],8,Qe))),128))])])):k("",!0),x.value.length>0?(o(),i("div",Ze,[f[8]||(f[8]=l("h3",{class:"section-title"}," Project Skills ",-1)),l("div",et,[(o(!0),i(B,null,N(x.value,s=>(o(),i("button",{key:s.name,type:"button",class:"command-card","data-testid":`skill-${s.name}`,onClick:M=>L(s)},[l("span",st,"/"+m(s.name),1),l("span",nt,m(s.description||"No description"),1),s.argumentHint?(o(),i("span",at,m(s.argumentHint),1)):k("",!0)],8,tt))),128))])])):k("",!0),j.value.length>0?(o(),i("div",ot,[f[9]||(f[9]=l("h3",{class:"section-title"}," User Skills ",-1)),l("div",lt,[(o(!0),i(B,null,N(j.value,s=>(o(),i("button",{key:s.name,type:"button",class:"command-card","data-testid":`skill-${s.name}`,onClick:M=>L(s)},[l("span",rt,"/"+m(s.name),1),l("span",ct,m(s.description||"No description"),1),s.argumentHint?(o(),i("span",dt,m(s.argumentHint),1)):k("",!0)],8,it))),128))])])):k("",!0),P.value.length>0?(o(),i("div",ut,[f[10]||(f[10]=l("h3",{class:"section-title"}," Plugin Skills ",-1)),l("div",mt,[(o(!0),i(B,null,N(P.value,s=>(o(),i("button",{key:s.name,type:"button",class:"command-card","data-testid":`skill-${s.name}`,onClick:M=>L(s)},[l("span",pt,"/"+m(s.name),1),l("span",ht,m(s.description||"No description"),1),s.argumentHint?(o(),i("span",gt,m(s.argumentHint),1)):k("",!0)],8,ft))),128))])])):k("",!0)]))]))}},yt=A(vt,[["__scopeId","data-v-8ec2a6ee"]]),_t={class:"arguments-form"},kt={class:"form-header"},Ct={class:"command-title"},bt={key:0,class:"command-description"},St={key:0,class:"form-field"},$t={for:"skill-args",class:"field-label"},wt={key:0,class:"hint"},xt=["placeholder","onKeydown"],It=["for"],Bt={key:0,class:"required-indicator"},Nt=["id","onUpdate:modelValue","required","data-testid"],Dt=["value"],jt=["id","onUpdate:modelValue","required","placeholder","data-testid"],Pt=["id","onUpdate:modelValue","required","placeholder","data-testid"],Ut={class:"form-actions"},Lt=["disabled"],Mt={key:0,class:"loading-spinner"},Vt={__name:"ArgumentsForm",props:{command:{type:Object,required:!0},executing:{type:Boolean,default:!1},executeLabel:{type:String,default:"Execute Command"}},emits:["back","submit"],setup(e,{emit:t}){const n=e,c=t,a=D({}),u=D("");function d(){const C={};for(const g of n.command.arguments||[])C[g.name]=g.default!==void 0?g.default:"";a.value=C}ee(()=>{d()}),K(()=>n.command,()=>{d()});const h=_(()=>{if(n.command.isSkill)return!0;for(const C of n.command.arguments||[])if(C.required){const g=a.value[C.name];if(g==null||g==="")return!1}return!0});function b(){if(!(!h.value||n.executing)){if(n.command.isSkill){c("submit",{_raw:u.value});return}c("submit",a.value)}}return(C,g)=>(o(),i("div",_t,[l("div",kt,[l("h3",Ct," /"+m(e.command.name),1),e.command.description?(o(),i("p",bt,m(e.command.description),1)):k("",!0)]),l("form",{class:"form-fields",onSubmit:W(b,["prevent"])},[e.command.isSkill?(o(),i("div",St,[l("label",$t,[g[2]||(g[2]=q(" Arguments ",-1)),e.command.argumentHint?(o(),i("span",wt,m(e.command.argumentHint),1)):k("",!0)]),z(l("input",{id:"skill-args","onUpdate:modelValue":g[0]||(g[0]=r=>u.value=r),type:"text",placeholder:e.command.argumentHint||"Enter arguments...",class:"field-input","data-testid":"skill-args-input",onKeydown:R(W(b,["prevent"]),["enter"])},null,40,xt),[[T,u.value]])])):(o(!0),i(B,{key:1},N(e.command.arguments,r=>(o(),i("div",{key:r.name,class:"form-field"},[l("label",{for:`arg-${r.name}`,class:"field-label"},[q(m(r.label)+" ",1),r.required?(o(),i("span",Bt,"*")):k("",!0)],8,It),r.type==="select"?z((o(),i("select",{key:0,id:`arg-${r.name}`,"onUpdate:modelValue":p=>a.value[r.name]=p,required:r.required,class:"field-select","data-testid":`arg-${r.name}`},[g[3]||(g[3]=l("option",{value:"",disabled:""}," Select an option... ",-1)),(o(!0),i(B,null,N(r.options||[],p=>(o(),i("option",{key:p.value,value:p.value},m(p.label),9,Dt))),128))],8,Nt)),[[de,a.value[r.name]]]):r.type==="multiline"?z((o(),i("textarea",{key:1,id:`arg-${r.name}`,"onUpdate:modelValue":p=>a.value[r.name]=p,required:r.required,placeholder:r.placeholder||"",class:"field-textarea",rows:"4","data-testid":`arg-${r.name}`},null,8,jt)),[[T,a.value[r.name]]]):z((o(),i("input",{key:2,id:`arg-${r.name}`,"onUpdate:modelValue":p=>a.value[r.name]=p,type:"text",required:r.required,placeholder:r.placeholder||"",class:"field-input","data-testid":`arg-${r.name}`},null,8,Pt)),[[T,a.value[r.name]]])]))),128)),l("div",Ut,[l("button",{type:"button",class:"btn btn-secondary",onClick:g[1]||(g[1]=r=>c("back"))}," Back "),l("button",{type:"submit",class:"btn btn-primary",disabled:!h.value||e.executing,"data-testid":"execute-command-btn"},[e.executing?(o(),i("span",Mt)):k("",!0),q(" "+m(e.executeLabel),1)],8,Lt)])],32)]))}},zt=A(Vt,[["__scopeId","data-v-aaa3cc39"]]),Ot={class:"wizard-modal",role:"dialog","aria-labelledby":"wizard-title"},At={class:"wizard-header"},Tt={id:"wizard-title",class:"wizard-title"},Ft={class:"wizard-content"},qt={__name:"SlashCommandWizard",props:{isOpen:{type:Boolean,required:!0},sessionId:{type:String,default:null},workingDirectory:{type:String,default:null},hideBuiltin:{type:Boolean,default:!1},mode:{type:String,default:"execute",validator:e=>["execute","insert"].includes(e)}},emits:["update:isOpen","executed","insert"],setup(e,{emit:t}){const n=e,c=t,a=Ce(),u=Z(),d=D(1),h=D(null),b=D(!1),C=_(()=>n.hideBuiltin?a.customCommands:a.commands),g=_(()=>n.mode==="insert"?"Insert Command":"Execute Command");K(()=>n.isOpen,async y=>{if(y){d.value=1,h.value=null,console.log("[SlashCommandWizard] Opening wizard, workingDirectory:",n.workingDirectory);try{n.workingDirectory?(await a.fetchCommands(n.workingDirectory),console.log("[SlashCommandWizard] Fetched commands:",a.commands.length,"commands")):console.warn("[SlashCommandWizard] No workingDirectory provided, skipping command fetch")}catch($){console.error("[SlashCommandWizard] Failed to fetch commands:",$)}}});function r(){c("update:isOpen",!1),d.value=1,h.value=null}function p(y){if(h.value=y,y.isSkill){d.value=2;return}!y.arguments||y.arguments.length===0?w({}):d.value=2}function S(){d.value=1,h.value=null}async function w(y){if(h.value){if(n.mode==="insert"){const $=V(h.value,y);c("insert",{command:h.value,args:y,text:$}),r();return}if(!n.sessionId){u.error("No session available to execute command");return}b.value=!0;try{await a.executeCommand(n.sessionId,h.value.name,y),c("executed",{command:h.value,args:y}),u.success(`Command /${h.value.name} executed`),r()}catch($){u.error(`Failed to execute command: ${$.message}`)}finally{b.value=!1}}}function V(y,$){let x=`/${y.name}`;if(y.isSkill){const P=$._raw||"";return P&&(x+=` ${P}`),x}const j=[];for(const P of y.arguments||[]){const U=$[P.name];U!==void 0&&U!==""&&(typeof U=="string"&&U.includes(" ")?j.push(`"${U}"`):j.push(String(U)))}return j.length>0&&(x+=` ${j.join(" ")}`),x}return(y,$)=>(o(),E(pe,{to:"body"},[ue(fe,{name:"modal"},{default:me(()=>{var x;return[e.isOpen?(o(),i("div",{key:0,class:"wizard-overlay","data-testid":"slash-command-wizard",onClick:W(r,["self"]),onKeydown:R(r,["escape"])},[l("div",Ot,[l("header",At,[l("h2",Tt,m(d.value===1?"Slash Commands":`Configure /${(x=h.value)==null?void 0:x.name}`),1),l("button",{type:"button",class:"close-btn","aria-label":"Close wizard",onClick:r}," × ")]),l("div",Ft,[d.value===1?(o(),E(yt,{key:0,commands:C.value,loading:G(a).loading,error:G(a).error,"hide-builtin":e.hideBuiltin,onSelect:p,onClose:r},null,8,["commands","loading","error","hide-builtin"])):d.value===2&&h.value?(o(),E(zt,{key:1,command:h.value,executing:b.value,"execute-label":g.value,onBack:S,onSubmit:w},null,8,["command","executing","execute-label"])):k("",!0)])])],32)):k("",!0)]}),_:1})]))}},Jt=A(qt,[["__scopeId","data-v-0f2f2245"]]);export{Rt as M,Qt as S,Jt as a,Gt as u};