circuschief 0.2.1 → 0.3.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 (117) hide show
  1. package/package.json +1 -1
  2. package/packages/server/src/api/git.js +15 -0
  3. package/packages/server/src/api/projects-commandButtons.js +96 -0
  4. package/packages/server/src/api/projects-session-helpers.js +51 -33
  5. package/packages/server/src/api/projects.js +102 -111
  6. package/packages/server/src/api/sessions-archive.js +2 -1
  7. package/packages/server/src/api/sessions-lifecycle.js +2 -1
  8. package/packages/server/src/api/sessions-patch.js +2 -0
  9. package/packages/server/src/config.js +6 -0
  10. package/packages/server/src/db/DatabaseManager.js +1 -1
  11. package/packages/server/src/db/ProjectRepository.js +17 -3
  12. package/packages/server/src/db/migrations/index.js +7 -0
  13. package/packages/server/src/db/migrations/miscMigrations.js +78 -1
  14. package/packages/server/src/db/migrations/projectsMigrations.js +4 -0
  15. package/packages/server/src/index.js +7 -1
  16. package/packages/server/src/services/gitService.js +42 -6
  17. package/packages/server/src/services/gitSessionSetup.js +4 -3
  18. package/packages/server/src/services/kanbanTriggers.js +1 -0
  19. package/packages/server/src/services/sessionExecution.js +2 -2
  20. package/packages/server/src/services/templateTriggerService.js +1 -0
  21. package/packages/shared/src/contracts/projects.js +3 -0
  22. package/packages/shared/src/types.js +4 -3
  23. package/packages/web/dist/assets/ActiveSessionsView-BVco8bPU.css +1 -0
  24. package/packages/web/dist/assets/ActiveSessionsView-HgcjR-fv.js +1 -0
  25. package/packages/web/dist/assets/{AgentLogsView-D4l0N9ZA.js → AgentLogsView-gnpmy7Ck.js} +1 -1
  26. package/packages/web/dist/assets/{ApiClient-Dbs1H78V.js → ApiClient-CcqJ-GAv.js} +1 -1
  27. package/packages/web/dist/assets/{ArchiveConfirmModal-CQZeuYBz.css → ArchiveConfirmModal-BQ-4gI0R.css} +1 -1
  28. package/packages/web/dist/assets/ArchiveConfirmModal-NDLcfHE9.js +1 -0
  29. package/packages/web/dist/assets/CommandButtonDetailView-UGoO1Rhg.js +1 -0
  30. package/packages/web/dist/assets/EffortLevelSelector-B9STpy07.js +1 -0
  31. package/packages/web/dist/assets/{GeneralSettingsView-BqCzCX-z.js → GeneralSettingsView-Bvp1zmeb.js} +1 -1
  32. package/packages/web/dist/assets/InputWithButton-cYdrEmTs.css +1 -0
  33. package/packages/web/dist/assets/{PathChooser-CXFxb8Oj.js → InputWithButton-kjjnlpHt.js} +1 -1
  34. package/packages/web/dist/assets/InterpolationHelp-Cwyt_Kff.js +1 -0
  35. package/packages/web/dist/assets/MarkdownEditor-CfuhardG.js +2 -0
  36. package/packages/web/dist/assets/{ModelSelector-DSxaZWBL.js → ModelSelector-vRSpXjhL.js} +1 -1
  37. package/packages/web/dist/assets/{NewSessionView-BsI7JtO9.js → NewSessionView-CJqnlwjP.js} +2 -2
  38. package/packages/web/dist/assets/{NewSessionView-Byoi1XdQ.css → NewSessionView-D_Hi7M9g.css} +1 -1
  39. package/packages/web/dist/assets/ProjectEditView-I36pvIJH.css +1 -0
  40. package/packages/web/dist/assets/ProjectEditView-LZhWNyZD.js +1 -0
  41. package/packages/web/dist/assets/ProjectListView-CumumZN-.css +1 -0
  42. package/packages/web/dist/assets/ProjectListView-DxpzlBb6.js +1 -0
  43. package/packages/web/dist/assets/ProjectNewView-CaLXfFzd.css +1 -0
  44. package/packages/web/dist/assets/ProjectNewView-X1y2iuaX.js +1 -0
  45. package/packages/web/dist/assets/{ProvidersView-CgAr0qms.js → ProvidersView-DC-v48Oj.js} +1 -1
  46. package/packages/web/dist/assets/{ProvidersView-B_QQF3RM.css → ProvidersView-uD8SKWpA.css} +1 -1
  47. package/packages/web/dist/assets/{QuickResponseSettings-uDDpwaza.js → QuickResponseSettings-DOZUtaRb.js} +1 -1
  48. package/packages/web/dist/assets/{QuickResponsesPanel-D0qs0Fm_.js → QuickResponsesPanel-BboDyvfE.js} +1 -1
  49. package/packages/web/dist/assets/{ResizableTextarea-_kHi1Mg3.js → ResizableTextarea-BIUrLAki.js} +1 -1
  50. package/packages/web/dist/assets/{SessionCard-Be1-bK0C.js → SessionCard-D9a5ABHO.js} +1 -1
  51. package/packages/web/dist/assets/{SessionDetailView-mnGRMaLY.css → SessionDetailView-D_p4QqDv.css} +1 -1
  52. package/packages/web/dist/assets/SessionDetailView-DpnAZfLe.js +36 -0
  53. package/packages/web/dist/assets/{SessionFormOptions-DvhOyP6z.js → SessionFormOptions-16tOEDkt.js} +1 -1
  54. package/packages/web/dist/assets/{SessionListView-CuHsWj85.js → SessionListView-BxayFy5a.js} +1 -1
  55. package/packages/web/dist/assets/{SessionLogStream-Da_GniUZ.js → SessionLogStream-DMUzZOml.js} +6 -6
  56. package/packages/web/dist/assets/SettingsView-IKYDEAFw.js +1 -0
  57. package/packages/web/dist/assets/{SlashCommandWizard-B_8ifpxN.js → SlashCommandWizard-CCEtEF98.js} +1 -1
  58. package/packages/web/dist/assets/{SummarySettingsView-KvgSGHdd.js → SummarySettingsView-Cq_0Bsk4.js} +1 -1
  59. package/packages/web/dist/assets/{TemplateDetailView-BhOjYIvS.js → TemplateDetailView-Vj413FOj.js} +1 -1
  60. package/packages/web/dist/assets/{commandButtons-B4OYZP0J.js → commandButtons-BqI7V84_.js} +1 -1
  61. package/packages/web/dist/assets/index-B0PaFn8J.js +1 -0
  62. package/packages/web/dist/assets/index-B0uKzlP3.js +1 -0
  63. package/packages/web/dist/assets/index-BOj2hM4W.js +1 -0
  64. package/packages/web/dist/assets/index-BVH1Fur5.js +1 -0
  65. package/packages/web/dist/assets/index-Bm4uwnFi.js +1 -0
  66. package/packages/web/dist/assets/index-C82-hypB.js +7 -0
  67. package/packages/web/dist/assets/index-C98wGWOV.js +1 -0
  68. package/packages/web/dist/assets/index-CQt0yAHQ.js +1 -0
  69. package/packages/web/dist/assets/index-CTe3Gmxt.js +1 -0
  70. package/packages/web/dist/assets/{index-BqVgX_Jy.js → index-Crwsqc5t.js} +3 -3
  71. package/packages/web/dist/assets/{index-BHVnr8MO.js → index-CzgbuOA8.js} +2 -2
  72. package/packages/web/dist/assets/index-D8oIVxkt.js +1 -0
  73. package/packages/web/dist/assets/index-DIrFNnos.js +1 -0
  74. package/packages/web/dist/assets/index-DVkCrevC.js +3 -0
  75. package/packages/web/dist/assets/index-DXvlnigm.js +1 -0
  76. package/packages/web/dist/assets/{index-CSOPrlmq.js → index-MnvuyUxj.js} +3 -3
  77. package/packages/web/dist/assets/index-mMvVdgsE.js +1 -0
  78. package/packages/web/dist/assets/index-okhXrCbj.js +1 -0
  79. package/packages/web/dist/assets/index-yghSjW4j.js +1 -0
  80. package/packages/web/dist/assets/{projects-B2du-GX8.js → projects-BpAyb9ba.js} +1 -1
  81. package/packages/web/dist/assets/{providers-B__J6FX0.js → providers-Di1AKmPp.js} +1 -1
  82. package/packages/web/dist/assets/{sessions-VDrd87yA.js → sessions-GqIMf9RF.js} +1 -1
  83. package/packages/web/dist/assets/{settings-CZ7Pc-Pt.js → settings-j6pMR_H2.js} +1 -1
  84. package/packages/web/dist/assets/useSummaryHelpers-GVg7sMWF.js +1 -0
  85. package/packages/web/dist/index.html +1 -1
  86. package/packages/web/dist/assets/ActiveSessionsView-3697sD8N.js +0 -1
  87. package/packages/web/dist/assets/ActiveSessionsView-DfYXc6dz.css +0 -1
  88. package/packages/web/dist/assets/ArchiveConfirmModal-Bv3vGOMM.js +0 -1
  89. package/packages/web/dist/assets/CommandButtonDetailView-Bk_SHxpu.js +0 -1
  90. package/packages/web/dist/assets/EffortLevelSelector-VfBEelvO.js +0 -1
  91. package/packages/web/dist/assets/InterpolationHelp-Dc1Y0T6v.js +0 -1
  92. package/packages/web/dist/assets/MarkdownEditor-DwBQkZbs.js +0 -2
  93. package/packages/web/dist/assets/PathChooser-BoMGzeg2.css +0 -1
  94. package/packages/web/dist/assets/ProjectEditView-Bes4Mib4.js +0 -1
  95. package/packages/web/dist/assets/ProjectEditView-DNwBUNRk.css +0 -1
  96. package/packages/web/dist/assets/ProjectListView-C55H1JHQ.css +0 -1
  97. package/packages/web/dist/assets/ProjectListView-DzEu-C36.js +0 -1
  98. package/packages/web/dist/assets/ProjectNewView-CpgE4R-l.css +0 -1
  99. package/packages/web/dist/assets/ProjectNewView-Cv-iEAgl.js +0 -1
  100. package/packages/web/dist/assets/SessionDetailView-DUYb7qTA.js +0 -36
  101. package/packages/web/dist/assets/SettingsView-5RDCXNUa.js +0 -1
  102. package/packages/web/dist/assets/index-80Qu7W6P.js +0 -1
  103. package/packages/web/dist/assets/index-B8_Iqwcq.js +0 -1
  104. package/packages/web/dist/assets/index-B9JErft2.js +0 -1
  105. package/packages/web/dist/assets/index-BarVnQIj.js +0 -3
  106. package/packages/web/dist/assets/index-BsvRdU0B.js +0 -1
  107. package/packages/web/dist/assets/index-Bugg2M-E.js +0 -1
  108. package/packages/web/dist/assets/index-C2Pjy-M8.js +0 -1
  109. package/packages/web/dist/assets/index-CS_wb_Vj.js +0 -1
  110. package/packages/web/dist/assets/index-ClzNIdCp.js +0 -1
  111. package/packages/web/dist/assets/index-Cn9Ajkye.js +0 -1
  112. package/packages/web/dist/assets/index-CucpVX4L.js +0 -1
  113. package/packages/web/dist/assets/index-D9hZYvW3.js +0 -1
  114. package/packages/web/dist/assets/index-DA0dK_PG.js +0 -7
  115. package/packages/web/dist/assets/index-DgpSn-jR.js +0 -1
  116. package/packages/web/dist/assets/index-HZwIyC9t.js +0 -1
  117. package/packages/web/dist/assets/index-SS3wA2sI.js +0 -1
@@ -0,0 +1 @@
1
+ import{_ as N,k as U,o as V,a as r,c as u,b as t,f as _,d as j,w as P,u as I,t as i,m as k,v as D,i as v,q as J,j as h,x as M,s as $,n as m,g as q,h as A}from"./index-MnvuyUxj.js";import{u as F}from"./commandButtons-BqI7V84_.js";import{a as W}from"./ApiClient-CcqJ-GAv.js";const p={PROJECT_ID:"projectId",PROJECT_ID_ALT:"id",BUTTON_ID:"buttonId",SESSION_ID:"id",SESSION_TAB:"tab"},z={class:"container command-button-detail"},G={key:0,class:"loading-state"},H={key:1,class:"form-container"},K={class:"form-header"},Q={class:"form-group"},X={key:0,class:"form-error"},Y={class:"form-group"},Z={key:0,class:"form-error"},ee={class:"form-group"},te={key:0,class:"form-error"},oe={class:"form-group form-group-checkbox"},se={for:"showOnList",class:"checkbox-label"},ae={class:"form-actions"},le=["disabled"],ne={key:0,class:"form-error-message"},re={class:"modal-body"},ue={class:"modal-footer"},de=["disabled"],ie={__name:"CommandButtonDetailView",setup(me){const d=$(),w=A(),O=F(),b=U(),B=m(!1),C=m(!1),g=m(!1),f=m(!1),c=m(null),a=m({}),o=m({label:"",command:"",sortOrder:0,showOnList:!1}),y=M(()=>!!d.params.buttonId),S=async s=>{B.value=!0;try{const e=d.params[p.PROJECT_ID];let l=O.getButtonById(s);l||(l=await W.getCommandButton(e,s)),l&&(o.value={label:l.label,command:l.command,sortOrder:l.sortOrder||0,showOnList:l.showOnList||!1})}catch(e){c.value=`Failed to load button: ${e.message}`}finally{B.value=!1}},T=()=>(a.value={},o.value.label.trim()||(a.value.label="Label is required"),o.value.command.trim()||(a.value.command="Command is required"),o.value.sortOrder<0&&(a.value.sortOrder="Sort order must be 0 or greater"),Object.keys(a.value).length===0),L=async()=>{if(c.value=null,!!T()){C.value=!0;try{const s=d.params[p.PROJECT_ID],e={label:o.value.label,command:o.value.command,sortOrder:o.value.sortOrder,showOnList:o.value.showOnList};y.value?(await O.updateButton(s,d.params[p.BUTTON_ID],e),b.success("Command button updated")):(await O.createButton(s,e),b.success("Command button created")),w.push(`/projects/${s}/sessions`)}catch(s){c.value=s.message,b.error(s.message)}finally{C.value=!1}}},x=()=>{w.back()},E=()=>{f.value=!0},R=async()=>{g.value=!0;try{const s=d.params[p.PROJECT_ID],e=d.params[p.BUTTON_ID];await O.deleteButton(s,e),b.success("Command button deleted"),f.value=!1,w.push(`/projects/${s}/sessions`)}catch(s){c.value=s.message,b.error(s.message)}finally{g.value=!1}};return V(async()=>{y.value&&await S(d.params.buttonId)}),(s,e)=>{const l=q("router-link");return r(),u("div",z,[B.value?(r(),u("div",G,[...e[7]||(e[7]=[t("span",{class:"loading-spinner"},null,-1),_(" Loading... ",-1)])])):(r(),u("div",H,[t("div",K,[j(l,{to:`/projects/${I(d).params[I(p).PROJECT_ID]}/sessions`,class:"btn btn-outline-secondary"},{default:P(()=>[...e[8]||(e[8]=[_(" ← Back ",-1)])]),_:1},8,["to"]),t("h2",null,i(y.value?"Edit Command Button":"New Command Button"),1)]),t("form",{class:"command-button-form",onSubmit:h(L,["prevent"])},[t("div",Q,[e[9]||(e[9]=t("label",{for:"label"},"Label",-1)),k(t("input",{id:"label","onUpdate:modelValue":e[0]||(e[0]=n=>o.value.label=n),type:"text",class:"form-input",placeholder:"e.g., Run Tests",required:""},null,512),[[D,o.value.label]]),a.value.label?(r(),u("span",X,i(a.value.label),1)):v("",!0)]),t("div",Y,[e[10]||(e[10]=t("label",{for:"command"},"Command",-1)),k(t("textarea",{id:"command","onUpdate:modelValue":e[1]||(e[1]=n=>o.value.command=n),class:"form-input",placeholder:"e.g., npm test",rows:"4",required:""},null,512),[[D,o.value.command]]),a.value.command?(r(),u("span",Z,i(a.value.command),1)):v("",!0)]),t("div",ee,[e[11]||(e[11]=t("label",{for:"sortOrder"},"Sort Order (optional)",-1)),k(t("input",{id:"sortOrder","onUpdate:modelValue":e[2]||(e[2]=n=>o.value.sortOrder=n),type:"number",class:"form-input",placeholder:"0",min:"0"},null,512),[[D,o.value.sortOrder,void 0,{number:!0}]]),a.value.sortOrder?(r(),u("span",te,i(a.value.sortOrder),1)):v("",!0),e[12]||(e[12]=t("span",{class:"form-help"},"Buttons are displayed in ascending order. Leave as 0 for default.",-1))]),t("div",oe,[t("label",se,[k(t("input",{id:"showOnList","onUpdate:modelValue":e[3]||(e[3]=n=>o.value.showOnList=n),type:"checkbox",class:"form-checkbox"},null,512),[[J,o.value.showOnList]]),e[13]||(e[13]=t("span",null,"Show status indicator on session lists",-1))]),e[14]||(e[14]=t("span",{class:"form-help"},"When enabled, the button status will be displayed on session cards",-1))]),t("div",ae,[t("button",{type:"button",class:"btn btn-outline-secondary",onClick:x}," Cancel "),y.value?(r(),u("button",{key:0,type:"button",class:"btn btn-outline-danger",onClick:E}," Delete ")):v("",!0),t("button",{type:"submit",class:"btn btn-primary",disabled:C.value},i(C.value?"Saving...":y.value?"Update":"Create"),9,le)]),c.value?(r(),u("div",ne,i(c.value),1)):v("",!0)],32)])),f.value?(r(),u("div",{key:2,class:"modal-overlay",onClick:e[6]||(e[6]=n=>f.value=!1)},[t("div",{class:"modal-dialog",onClick:e[5]||(e[5]=h(()=>{},["stop"]))},[e[18]||(e[18]=t("div",{class:"modal-header"},[t("h4",null,"Delete Command Button")],-1)),t("div",re,[t("p",null,[e[15]||(e[15]=_('Are you sure you want to delete "',-1)),t("strong",null,i(o.value.label),1),e[16]||(e[16]=_('"?',-1))]),e[17]||(e[17]=t("p",null,"This action cannot be undone.",-1))]),t("div",ue,[t("button",{class:"btn btn-outline-secondary",onClick:e[4]||(e[4]=n=>f.value=!1)}," Cancel "),t("button",{class:"btn btn-danger",disabled:g.value,onClick:R},i(g.value?"Deleting...":"Delete"),9,de)])])])):v("",!0)])}}},be=N(ie,[["__scopeId","data-v-b4855495"]]);export{be as default};
@@ -0,0 +1 @@
1
+ import{L as f,a0 as g,_ as b,k as _,n as m,l as E,a as p,c as h,b as j,F as L,r as x,t as w,u as I,x as C,$ as O}from"./index-MnvuyUxj.js";import{a as r}from"./ApiClient-CcqJ-GAv.js";import{u as V}from"./sessions-GqIMf9RF.js";const D=["low","medium","high","max","auto"],$=[{id:"claude-haiku-4-5-20251001",name:"Haiku 4.5",description:"Fast & lightweight"},{id:"claude-sonnet-4-6",name:"Sonnet 4.6",description:"Balanced"},{id:"claude-opus-4-6",name:"Opus 4.6",description:"Previous generation"},{id:"claude-opus-4-7",name:"Opus 4.7",description:"Most capable (default)"}],H="claude-opus-4-7",F=f("todos",{state:()=>({items:[],loading:!1,error:null,expanded:!1,currentConversationId:null}),getters:{hasTodos:t=>t.items.length>0,pendingCount:t=>t.items.filter(e=>e.status==="pending").length,inProgressCount:t=>t.items.filter(e=>e.status==="in_progress").length,completedCount:t=>t.items.filter(e=>e.status==="completed").length},actions:{async fetchTodos(t,e=null){this.loading=!0,this.error=null,this.currentConversationId=e;try{this.items=await r.getSessionTodos(t,e)}catch(s){this.error=s.message}finally{this.loading=!1}},updateTodos(t,e=null){(e===null||this.currentConversationId===null||e===this.currentConversationId)&&(this.items=t)},clearTodos(){this.items=[],this.loading=!1,this.error=null,this.currentConversationId=null,this.expanded=!1},toggleExpanded(){this.expanded=!this.expanded},setExpanded(t){this.expanded=t}}}),k=Symbol("overlay-sessions-store"),B=Symbol("overlay-todos-store");function P(){return g(k,V())}function q(){return g(B,F())}const z=f("templates",{state:()=>({projectTemplates:[],globalTemplates:[],loading:!1,error:null}),getters:{allTemplates:t=>[...t.projectTemplates,...t.globalTemplates],getTemplateById:t=>e=>t.projectTemplates.find(s=>s.id===e)||t.globalTemplates.find(s=>s.id===e)},actions:{async fetchProjectTemplates(t){this.loading=!0,this.error=null;try{const e=await r.getProjectTemplates(t);this.projectTemplates=e.project||[],this.globalTemplates=e.global||[]}catch(e){this.error=e.message}finally{this.loading=!1}},async createProjectTemplate(t,e){this.loading=!0,this.error=null;try{const s=await r.createProjectTemplate(t,e);return this.projectTemplates.unshift(s),s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async createGlobalTemplate(t){this.loading=!0,this.error=null;try{const e=await r.createGlobalTemplate(t);return this.globalTemplates.unshift(e),e}catch(e){throw this.error=e.message,e}finally{this.loading=!1}},async updateTemplate(t,e){this.loading=!0,this.error=null;try{const s=await r.updateTemplate(t,e);let l=this.projectTemplates.findIndex(o=>o.id===t);return l!==-1?this.projectTemplates[l]=s:(l=this.globalTemplates.findIndex(o=>o.id===t),l!==-1&&(this.globalTemplates[l]=s)),s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async deleteTemplate(t){this.loading=!0,this.error=null;try{await r.deleteTemplate(t),this.projectTemplates=this.projectTemplates.filter(e=>e.id!==t),this.globalTemplates=this.globalTemplates.filter(e=>e.id!==t)}catch(e){throw this.error=e.message,e}finally{this.loading=!1}}}}),R={class:"effort-selector"},U=["value","disabled"],A=["value"],M={__name:"EffortLevelSelector",props:{sessionId:{type:String,default:null},modelValue:{type:String,default:null},disabled:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(t,{emit:e}){const s=t,l=e,o=P(),T=_(),u=m(!1),y=["auto",...D.filter(a=>a!=="auto")].map(a=>({value:a,label:`${a.charAt(0).toUpperCase()+a.slice(1)} Effort`})),c=C(()=>{var a;return s.sessionId?((a=o.currentSession)==null?void 0:a.effortLevel)||"auto":s.modelValue||"auto"}),n=m(c.value),S=O(s,"modelValue");E([c,S],([a])=>{n.value=a||"auto"},{flush:"sync"});async function v(a){if(!u.value&&n.value!==a)if(n.value=a,s.sessionId){u.value=!0;try{await o.updateSessionFields(s.sessionId,{effortLevel:a==="auto"?null:a})}catch(d){n.value=c.value,T.error(d.message)}finally{u.value=!1}}else l("update:modelValue",a==="auto"?null:a)}return(a,d)=>(p(),h("div",R,[j("select",{id:"effort-select",value:n.value,disabled:t.disabled||u.value,class:"effort-select","aria-label":"Effort level",onChange:d[0]||(d[0]=i=>v(i.target.value))},[(p(!0),h(L,null,x(I(y),i=>(p(),h("option",{key:i.value,value:i.value},w(i.label),9,A))),128))],40,U)]))}},J=b(M,[["__scopeId","data-v-8bc1fe64"]]);export{$ as C,H as D,J as E,k as S,B as T,F as a,P as b,q as c,z as u};
@@ -1 +1 @@
1
- import{_ as f,i as _,o as b,m as y,u as S,a as i,c as r,b as s,e as c,j as h,p as k,t as d,k as p,h as x,l as u}from"./index-CSOPrlmq.js";import{u as w}from"./settings-CZ7Pc-Pt.js";import"./ApiClient-Dbs1H78V.js";const V={key:0,class:"loading-state"},G={class:"form-group"},A={class:"checkbox-label"},B={key:0,class:"error-message"},C={class:"form-actions"},D=["disabled"],M={key:0,class:"loading-spinner"},N={__name:"GeneralSettingsView",setup(U){const n=w(),v=_(),l=u(!1),a=u(!1),o=u(null);b(()=>{n.fetchGeneralSettings()}),y(()=>n.generalSettings,t=>{t&&(l.value=t.disableAnalytics)},{immediate:!0});async function g(){a.value=!0,o.value=null;try{await n.updateGeneralSettings({disableAnalytics:l.value}),v.success("General settings saved successfully")}catch(t){o.value=t.message}finally{a.value=!1}}return(t,e)=>S(n).loading?(i(),r("div",V,[...e[1]||(e[1]=[s("span",{class:"loading-spinner"},null,-1),c(" Loading... ",-1)])])):(i(),r("form",{key:1,class:"form card",onSubmit:x(g,["prevent"])},[s("div",G,[s("label",A,[h(s("input",{"onUpdate:modelValue":e[0]||(e[0]=m=>l.value=m),type:"checkbox"},null,512),[[k,l.value]]),e[2]||(e[2]=c(" Disable analytics tracking ",-1))]),e[3]||(e[3]=s("p",{class:"form-help"}," When checked, no usage analytics will be collected. Changes take effect on next page load. ",-1))]),o.value?(i(),r("div",B,d(o.value),1)):p("",!0),s("div",C,[s("button",{type:"submit",class:"btn btn-primary",disabled:a.value},[a.value?(i(),r("span",M)):p("",!0),c(" "+d(a.value?"Saving...":"Save Settings"),1)],8,D)])],32))}},L=f(N,[["__scopeId","data-v-0cd79804"]]);export{L as default};
1
+ import{_ as m,k as _,o as b,l as y,u as S,a as i,c as r,b as s,f as c,m as h,q as k,t as d,i as p,j as x,n as u}from"./index-MnvuyUxj.js";import{u as w}from"./settings-j6pMR_H2.js";import"./ApiClient-CcqJ-GAv.js";const V={key:0,class:"loading-state"},G={class:"form-group"},A={class:"checkbox-label"},B={key:0,class:"error-message"},C={class:"form-actions"},D=["disabled"],M={key:0,class:"loading-spinner"},N={__name:"GeneralSettingsView",setup(U){const n=w(),v=_(),l=u(!1),a=u(!1),o=u(null);b(()=>{n.fetchGeneralSettings()}),y(()=>n.generalSettings,t=>{t&&(l.value=t.disableAnalytics)},{immediate:!0});async function f(){a.value=!0,o.value=null;try{await n.updateGeneralSettings({disableAnalytics:l.value}),v.success("General settings saved successfully")}catch(t){o.value=t.message}finally{a.value=!1}}return(t,e)=>S(n).loading?(i(),r("div",V,[...e[1]||(e[1]=[s("span",{class:"loading-spinner"},null,-1),c(" Loading... ",-1)])])):(i(),r("form",{key:1,class:"form card",onSubmit:x(f,["prevent"])},[s("div",G,[s("label",A,[h(s("input",{"onUpdate:modelValue":e[0]||(e[0]=g=>l.value=g),type:"checkbox"},null,512),[[k,l.value]]),e[2]||(e[2]=c(" Disable analytics tracking ",-1))]),e[3]||(e[3]=s("p",{class:"form-help"}," When checked, no usage analytics will be collected. Changes take effect on next page load. ",-1))]),o.value?(i(),r("div",B,d(o.value),1)):p("",!0),s("div",C,[s("button",{type:"submit",class:"btn btn-primary",disabled:a.value},[a.value?(i(),r("span",M)):p("",!0),c(" "+d(a.value?"Saving...":"Save Settings"),1)],8,D)])],32))}},I=m(N,[["__scopeId","data-v-0cd79804"]]);export{I as default};
@@ -0,0 +1 @@
1
+ .path-chooser[data-v-297ad79a]{width:100%}.path-input-group[data-v-297ad79a]{display:flex;gap:.5rem}.path-input-group .form-input[data-v-297ad79a]{flex:1}.path-browser-overlay[data-v-297ad79a]{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000}.path-browser[data-v-297ad79a]{background-color:var(--color-background-soft);border:1px solid var(--color-border);border-radius:var(--border-radius);width:90%;max-width:600px;max-height:80vh;display:flex;flex-direction:column}.browser-header[data-v-297ad79a]{display:flex;justify-content:space-between;align-items:center;padding:1rem;border-bottom:1px solid var(--color-border);background-color:var(--color-background-mute);border-radius:var(--border-radius) var(--border-radius) 0 0}.browser-path[data-v-297ad79a]{font-family:var(--font-mono);font-size:.875rem;color:var(--color-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;margin-right:1rem}.browser-close[data-v-297ad79a]{background:none;border:none;color:var(--color-text-soft);font-size:1.5rem;line-height:1;padding:0;cursor:pointer;width:2rem;height:2rem;display:flex;align-items:center;justify-content:center;border-radius:var(--border-radius)}.browser-close[data-v-297ad79a]:hover{background-color:var(--color-background);color:var(--color-text)}.browser-content[data-v-297ad79a]{flex:1;overflow-y:auto;padding:.5rem;min-height:200px;max-height:400px}.browser-item[data-v-297ad79a]{display:flex;align-items:center;gap:.5rem;padding:.625rem .75rem;cursor:pointer;border-radius:var(--border-radius);color:var(--color-text);font-size:.875rem}.browser-item[data-v-297ad79a]:hover{background-color:var(--color-background-mute)}.browser-item.parent[data-v-297ad79a]{color:var(--color-primary);border-bottom:1px solid var(--color-border);margin-bottom:.5rem;border-radius:0}.browser-item.parent[data-v-297ad79a]:hover{background-color:var(--color-background)}.browser-item-icon[data-v-297ad79a]{flex-shrink:0}.browser-loading[data-v-297ad79a]{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:2rem;color:var(--color-text-soft)}.browser-error[data-v-297ad79a]{padding:1rem;color:var(--color-error);text-align:center}.browser-empty[data-v-297ad79a]{padding:2rem;color:var(--color-text-soft);text-align:center}.browser-footer[data-v-297ad79a]{display:flex;justify-content:flex-end;gap:.5rem;padding:1rem;border-top:1px solid var(--color-border);background-color:var(--color-background-mute);border-radius:0 0 var(--border-radius) var(--border-radius)}@media (max-width: 480px){.path-input-group[data-v-297ad79a]{flex-direction:column}.path-input-group .btn[data-v-297ad79a]{width:100%}}.input-with-button{display:flex;gap:.5rem;align-items:stretch}.input-with-button .form-input{flex:1}.input-with-button .btn{flex-shrink:0}
@@ -1 +1 @@
1
- import{_ as N,l as r,m as $,a as s,c as o,b as t,j as D,v as j,h as F,t as h,e as w,k as f,F as k,r as S}from"./index-CSOPrlmq.js";import{a as T}from"./ApiClient-Dbs1H78V.js";const E={class:"path-chooser"},I={class:"path-input-group"},L={class:"path-browser"},M={class:"browser-header"},U={class:"browser-path"},q={class:"browser-content"},z={key:1,class:"browser-loading"},A={key:2,class:"browser-error"},G=["onClick"],H={key:0,class:"browser-empty"},J={key:1,class:"browser-empty"},K={__name:"PathChooser",props:{modelValue:{type:String,default:""}},emits:["update:modelValue"],setup(g,{emit:C}){const y=g,_=C,l=r(y.modelValue);$(()=>y.modelValue,a=>{l.value=a});function V(){_("update:modelValue",l.value)}const v=r(!1),i=r(""),c=r(null),d=r([]),m=r(!1),u=r(null);async function B(){v.value=!0,await b(l.value||"")}function p(){v.value=!1}async function b(a){m.value=!0,u.value=null;try{const e=await T.browseDirectory(a);i.value=e.path,c.value=e.parent,d.value=e.entries,e.error&&(u.value=e.error)}catch(e){u.value=e.message||"Failed to browse directory"}finally{m.value=!1}}function P(){l.value=i.value,_("update:modelValue",i.value),p()}function x(a,e){return a==="/"?`/${e}`:`${a}/${e}`}return(a,e)=>(s(),o("div",E,[t("div",I,[D(t("input",{"onUpdate:modelValue":e[0]||(e[0]=n=>l.value=n),type:"text",class:"form-input",placeholder:"/path/to/project",onInput:V},null,544),[[j,l.value]]),t("button",{type:"button",class:"btn",onClick:B}," Browse ")]),v.value?(s(),o("div",{key:0,class:"path-browser-overlay",onClick:F(p,["self"])},[t("div",L,[t("div",M,[t("span",U,h(i.value),1),t("button",{type:"button",class:"browser-close",onClick:p}," × ")]),t("div",q,[c.value?(s(),o("div",{key:0,class:"browser-item parent",onClick:e[1]||(e[1]=n=>b(c.value))},[...e[2]||(e[2]=[t("span",{class:"browser-item-icon"},"←",-1),w(" Parent Directory ",-1)])])):f("",!0),m.value?(s(),o("div",z,[...e[3]||(e[3]=[t("span",{class:"loading-spinner"},null,-1),w(" Loading... ",-1)])])):u.value?(s(),o("div",A,h(u.value),1)):(s(),o(k,{key:3},[(s(!0),o(k,null,S(d.value,n=>(s(),o("div",{key:n.name,class:"browser-item",onClick:O=>b(x(i.value,n.name))},[e[4]||(e[4]=t("span",{class:"browser-item-icon"},"📁",-1)),w(" "+h(n.name),1)],8,G))),128)),d.value.length===0&&!c.value?(s(),o("div",H," No subdirectories ")):d.value.length===0?(s(),o("div",J," No subdirectories in this folder ")):f("",!0)],64))]),t("div",{class:"browser-footer"},[t("button",{type:"button",class:"btn",onClick:p}," Cancel "),t("button",{type:"button",class:"btn btn-primary",onClick:P}," Select ")])])])):f("",!0)]))}},W=N(K,[["__scopeId","data-v-26aaee7f"]]);export{W as P};
1
+ import{_ as N,n as r,l as $,a as s,c as o,b as t,m as D,v as j,j as F,t as w,f as h,i as f,F as k,r as S}from"./index-MnvuyUxj.js";import{a as T}from"./ApiClient-CcqJ-GAv.js";const E={class:"path-chooser"},I={class:"path-input-group"},L={class:"path-browser"},M={class:"browser-header"},U={class:"browser-path"},q={class:"browser-content"},z={key:1,class:"browser-loading"},A={key:2,class:"browser-error"},G=["onClick"],H={key:0,class:"browser-empty"},J={key:1,class:"browser-empty"},K={__name:"PathChooser",props:{modelValue:{type:String,default:""}},emits:["update:modelValue"],setup(g,{emit:C}){const y=g,_=C,l=r(y.modelValue);$(()=>y.modelValue,a=>{l.value=a});function V(){_("update:modelValue",l.value)}const v=r(!1),i=r(""),c=r(null),d=r([]),m=r(!1),u=r(null);async function B(){v.value=!0,await b(l.value||"")}function p(){v.value=!1}async function b(a){m.value=!0,u.value=null;try{const e=await T.browseDirectory(a);i.value=e.path,c.value=e.parent,d.value=e.entries,e.error&&(u.value=e.error)}catch(e){u.value=e.message||"Failed to browse directory"}finally{m.value=!1}}function P(){l.value=i.value,_("update:modelValue",i.value),p()}function x(a,e){return a==="/"?`/${e}`:`${a}/${e}`}return(a,e)=>(s(),o("div",E,[t("div",I,[D(t("input",{"onUpdate:modelValue":e[0]||(e[0]=n=>l.value=n),type:"text",class:"form-input",placeholder:"/path/to/project",onInput:V},null,544),[[j,l.value]]),t("button",{type:"button",class:"btn",onClick:B}," Browse ")]),v.value?(s(),o("div",{key:0,class:"path-browser-overlay",onClick:F(p,["self"])},[t("div",L,[t("div",M,[t("span",U,w(i.value),1),t("button",{type:"button",class:"browser-close",onClick:p}," × ")]),t("div",q,[c.value?(s(),o("div",{key:0,class:"browser-item parent",onClick:e[1]||(e[1]=n=>b(c.value))},[...e[2]||(e[2]=[t("span",{class:"browser-item-icon"},"←",-1),h(" Parent Directory ",-1)])])):f("",!0),m.value?(s(),o("div",z,[...e[3]||(e[3]=[t("span",{class:"loading-spinner"},null,-1),h(" Loading... ",-1)])])):u.value?(s(),o("div",A,w(u.value),1)):(s(),o(k,{key:3},[(s(!0),o(k,null,S(d.value,n=>(s(),o("div",{key:n.name,class:"browser-item",onClick:O=>b(x(i.value,n.name))},[e[4]||(e[4]=t("span",{class:"browser-item-icon"},"📁",-1)),h(" "+w(n.name),1)],8,G))),128)),d.value.length===0&&!c.value?(s(),o("div",H," No subdirectories ")):d.value.length===0?(s(),o("div",J," No subdirectories in this folder ")):f("",!0)],64))]),t("div",{class:"browser-footer"},[t("button",{type:"button",class:"btn",onClick:p}," Cancel "),t("button",{type:"button",class:"btn btn-primary",onClick:P}," Select ")])])])):f("",!0)]))}},W=N(K,[["__scopeId","data-v-297ad79a"]]);export{W as P};
@@ -0,0 +1 @@
1
+ import{_ as t,a,c as n,f as e,b as o}from"./index-MnvuyUxj.js";const r={class:"form-help"},l={__name:"InterpolationHelp",setup(c){return(p,s)=>(a(),n("p",r,[...s[0]||(s[0]=[e(" Available variables: ",-1),o("code",null,"{{rootSession.id}}",-1),e(", ",-1),o("code",null,"{{rootSession.name}}",-1),e(", ",-1),o("code",null,"{{rootSession.summary}}",-1),e(", ",-1),o("code",null,"{{rootSession.status}}",-1)])]))}},i=t(l,[["__scopeId","data-v-26718cef"]]);export{i as I};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-Crwsqc5t.js","assets/index-MnvuyUxj.js","assets/index-gmCCsCQ1.css","assets/SessionDetailView-DpnAZfLe.js","assets/sessions-GqIMf9RF.js","assets/ApiClient-CcqJ-GAv.js","assets/settings-j6pMR_H2.js","assets/projects-BpAyb9ba.js","assets/EffortLevelSelector-B9STpy07.js","assets/EffortLevelSelector-BQaQmU2d.css","assets/SessionLogStream-DMUzZOml.js","assets/commandButtons-BqI7V84_.js","assets/SessionLogStream-zPUTiGbe.css","assets/ArchiveConfirmModal-NDLcfHE9.js","assets/ModelSelector-vRSpXjhL.js","assets/providers-Di1AKmPp.js","assets/ModelSelector-DPPD-92R.css","assets/SlashCommandWizard-CCEtEF98.js","assets/SlashCommandWizard-BB30cSvo.css","assets/ArchiveConfirmModal-BQ-4gI0R.css","assets/useSummaryHelpers-GVg7sMWF.js","assets/QuickResponseSettings-DOZUtaRb.js","assets/QuickResponseSettings-B8188A1D.css","assets/QuickResponsesPanel-BboDyvfE.js","assets/QuickResponsesPanel-DIBQFj0W.css","assets/ResizableTextarea-BIUrLAki.js","assets/ResizableTextarea-B5nAA0RV.css","assets/SessionDetailView-D_p4QqDv.css","assets/style-BTin-zR_.css"])))=>i.map(i=>d[i]);
2
+ import{n as E,l as d,A as w,a as l,c as y,G as T,w as u,b as m,f as V,d as k,u as h,a3 as x,O as A,P as p}from"./index-MnvuyUxj.js";import{u as P}from"./SessionDetailView-DpnAZfLe.js";import"./sessions-GqIMf9RF.js";import"./ApiClient-CcqJ-GAv.js";import"./settings-j6pMR_H2.js";import"./projects-BpAyb9ba.js";import"./EffortLevelSelector-B9STpy07.js";import"./SessionLogStream-DMUzZOml.js";import"./commandButtons-BqI7V84_.js";import"./ArchiveConfirmModal-NDLcfHE9.js";import"./ModelSelector-vRSpXjhL.js";import"./providers-Di1AKmPp.js";import"./SlashCommandWizard-CCEtEF98.js";import"./useSummaryHelpers-GVg7sMWF.js";import"./QuickResponseSettings-DOZUtaRb.js";import"./QuickResponsesPanel-BboDyvfE.js";import"./ResizableTextarea-BIUrLAki.js";const b={class:"canvas-md-editor"},K={__name:"MarkdownEditor",props:{content:{type:String,default:""},sessionId:{type:String,required:!0},filename:{type:String,required:!0},itemId:{type:String,required:!0}},emits:["save"],setup(c,{expose:f,emit:v}){const _=A(()=>p(()=>import("./index-Crwsqc5t.js").then(e=>e.w),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27])).then(async e=>(await p(()=>Promise.resolve({}),__vite__mapDeps([28])),e.MdEditor))),r=c,n=v,g=P(),t=E(r.content||"");let o=null,i=r.content||"";d(t,e=>{o&&clearTimeout(o),o=setTimeout(()=>{i=e,n("save",e)},1e3)});function s(){o&&(clearTimeout(o),o=null),t.value!==i&&n("save",t.value)}return f({flushPendingSave:s}),d(()=>r.content,e=>{e!==t.value&&(t.value=e||"")}),w(()=>{s(),g.endEditing(r.filename)}),(e,a)=>(l(),y("div",b,[(l(),T(x,null,{default:u(()=>[k(h(_),{modelValue:t.value,"onUpdate:modelValue":a[0]||(a[0]=S=>t.value=S),theme:"dark",preview:!1,language:"en-US","no-upload-img":!0,"show-code-row-number":!0},null,8,["modelValue"])]),fallback:u(()=>[...a[1]||(a[1]=[m("div",{class:"editor-loading"},[m("span",{class:"loading-spinner"}),V(" Loading editor... ")],-1)])]),_:1}))]))}};export{K as default};
@@ -1 +1 @@
1
- import{u as x}from"./providers-B__J6FX0.js";import{_ as L,o as N,l as M,m as V,a as r,c as n,b as z,t as _,k as F,F as I,r as S,u as R,E as D,x as f,$ as H}from"./index-CSOPrlmq.js";const P=["data-model"],U=["value","disabled"],$={key:0,value:""},j=["label"],q=["value","data-provider-id"],A={__name:"ModelSelector",props:{modelValue:{type:String,default:null},disabled:{type:Boolean,default:!1},allowEmpty:{type:Boolean,default:!1},emptyLabel:{type:String,default:"Use system default"},selectClass:{type:String,default:""}},emits:["update:modelValue"],setup(i,{emit:b}){const d=i,v=b,s=x(),h=f(()=>s.providers.length>0&&s.providers.some(e=>e.models&&e.models.length>0)),B=f(()=>{const e=new Set;for(const t of s.providers)if(t.models)for(const l of t.models)e.add(l.modelId);return e});function g(e){return e&&B.value.has(e)}const u=f(()=>{var l,o,m;const e=s.providers.find(c=>c.isBuiltIn);if((l=e==null?void 0:e.models)!=null&&l.length){const c=e.models.find(E=>E.tier==="sonnet");return(c==null?void 0:c.modelId)||e.models[0].modelId}const t=s.providers[0];return((m=(o=t==null?void 0:t.models)==null?void 0:o[0])==null?void 0:m.modelId)||null}),w=M(!1);N(async()=>{(s.providers.length===0||!h.value)&&await s.fetchProviders(),w.value=!0});function p(e){var l;if(!e)return null;if(e.includes("claude-"))return e;const t=s.providers.find(o=>o.isBuiltIn);if((l=t==null?void 0:t.models)!=null&&l.length){const o=t.models.find(m=>m.tier===e);if(o)return o.modelId}return e}const a=M(p(d.modelValue)),y=f(()=>d.allowEmpty&&(!a.value||a.value==="")?"":a.value&&g(a.value)?a.value:u.value?u.value:a.value),k=H(d,"modelValue");V(k,e=>{a.value=p(e)},{flush:"sync"}),V(()=>s.providers,()=>{if(!h.value)return;if(d.allowEmpty&&(!d.modelValue||d.modelValue==="")){a.value="";return}let e=null;d.modelValue&&(e=p(d.modelValue)),e&&g(e)?a.value!==e&&(a.value=e,e!==d.modelValue&&v("update:modelValue",e)):u.value&&a.value!==u.value&&(a.value=u.value,v("update:modelValue",u.value))},{deep:!0,immediate:!0});function C(e){y.value!==e&&(a.value=e,v("update:modelValue",e))}return(e,t)=>(r(),n("div",{class:"model-selector","data-model":y.value},[z("select",{id:"model-select",value:y.value,disabled:i.disabled,class:D(i.selectClass||"model-select"),onChange:t[0]||(t[0]=l=>C(l.target.value))},[i.allowEmpty?(r(),n("option",$,_(i.emptyLabel),1)):F("",!0),(r(!0),n(I,null,S(R(s).providers,l=>(r(),n("optgroup",{key:l.id,label:l.name},[(r(!0),n(I,null,S(l.models,o=>(r(),n("option",{key:o.id,value:o.modelId,"data-provider-id":l.id},_(l.isBuiltIn?o.displayName:o.modelId),9,q))),128))],8,j))),128))],42,U)],8,P))}},K=L(A,[["__scopeId","data-v-ea265eb4"]]);export{K as M};
1
+ import{u as x}from"./providers-Di1AKmPp.js";import{_ as L,o as N,n as M,l as V,a as n,c as r,b as z,t as _,i as F,F as I,r as S,u as R,E as D,x as f,$ as H}from"./index-MnvuyUxj.js";const P=["data-model"],U=["value","disabled"],$={key:0,value:""},j=["label"],q=["value","data-provider-id"],A={__name:"ModelSelector",props:{modelValue:{type:String,default:null},disabled:{type:Boolean,default:!1},allowEmpty:{type:Boolean,default:!1},emptyLabel:{type:String,default:"Use system default"},selectClass:{type:String,default:""}},emits:["update:modelValue"],setup(i,{emit:b}){const d=i,v=b,s=x(),h=f(()=>s.providers.length>0&&s.providers.some(e=>e.models&&e.models.length>0)),B=f(()=>{const e=new Set;for(const t of s.providers)if(t.models)for(const l of t.models)e.add(l.modelId);return e});function g(e){return e&&B.value.has(e)}const u=f(()=>{var l,o,m;const e=s.providers.find(c=>c.isBuiltIn);if((l=e==null?void 0:e.models)!=null&&l.length){const c=e.models.find(k=>k.tier==="sonnet");return(c==null?void 0:c.modelId)||e.models[0].modelId}const t=s.providers[0];return((m=(o=t==null?void 0:t.models)==null?void 0:o[0])==null?void 0:m.modelId)||null}),w=M(!1);N(async()=>{(s.providers.length===0||!h.value)&&await s.fetchProviders(),w.value=!0});function p(e){var l;if(!e)return null;if(e.includes("claude-"))return e;const t=s.providers.find(o=>o.isBuiltIn);if((l=t==null?void 0:t.models)!=null&&l.length){const o=t.models.find(m=>m.tier===e);if(o)return o.modelId}return e}const a=M(p(d.modelValue)),y=f(()=>d.allowEmpty&&(!a.value||a.value==="")?"":a.value&&g(a.value)?a.value:u.value?u.value:a.value),C=H(d,"modelValue");V(C,e=>{a.value=p(e)},{flush:"sync"}),V(()=>s.providers,()=>{if(!h.value)return;if(d.allowEmpty&&(!d.modelValue||d.modelValue==="")){a.value="";return}let e=null;d.modelValue&&(e=p(d.modelValue)),e&&g(e)?a.value!==e&&(a.value=e,e!==d.modelValue&&v("update:modelValue",e)):u.value&&a.value!==u.value&&(a.value=u.value,v("update:modelValue",u.value))},{deep:!0,immediate:!0});function E(e){y.value!==e&&(a.value=e,v("update:modelValue",e))}return(e,t)=>(n(),r("div",{class:"model-selector","data-model":y.value},[z("select",{id:"model-select",value:y.value,disabled:i.disabled,class:D(i.selectClass||"model-select"),onChange:t[0]||(t[0]=l=>E(l.target.value))},[i.allowEmpty?(n(),r("option",$,_(i.emptyLabel),1)):F("",!0),(n(!0),r(I,null,S(R(s).providers,l=>(n(),r("optgroup",{key:l.id,label:l.name},[(n(!0),r(I,null,S(l.models,o=>(n(),r("option",{key:o.id,value:o.modelId,"data-provider-id":l.id},_(l.isBuiltIn?o.displayName:o.modelId),9,q))),128))],8,j))),128))],42,U)],8,P))}},K=L(A,[["__scopeId","data-v-ea265eb4"]]);export{K as M};
@@ -1,3 +1,3 @@
1
- import{I as ge,l as m,_ as de,a as r,c as d,b as l,E as ue,k as h,t as D,e as re,F as L,y as Ve,m as R,j as C,v as X,p as ie,n as _,i as Oe,A as xe,o as Me,d as $,w as Le,u as v,K as Z,r as H,G as fe,h as Ne,s as Ue,f as Ge,x as A,g as qe}from"./index-CSOPrlmq.js";import{g as je,u as Fe}from"./sessions-VDrd87yA.js";import{u as Pe}from"./EffortLevelSelector-VfBEelvO.js";import{u as We,a as Qe,Q as ze}from"./QuickResponseSettings-uDDpwaza.js";import{a as He}from"./ApiClient-Dbs1H78V.js";import{F as Ke,Q as Ye,u as Je}from"./QuickResponsesPanel-D0qs0Fm_.js";import{S as Xe}from"./SessionFormOptions-DvhOyP6z.js";import{R as Ze}from"./ResizableTextarea-_kHi1Mg3.js";import{S as _e,a as et}from"./SlashCommandWizard-B_8ifpxN.js";import{u as tt}from"./projects-B2du-GX8.js";import"./settings-CZ7Pc-Pt.js";import"./ModelSelector-DSxaZWBL.js";import"./providers-B__J6FX0.js";function lt(t){const u=m(""),a=m(!1),f=m("yolo"),o=m(null),S=m(null),x=m(!0),E=m(null),g=m(!0),n=m("worktree"),c=m(""),I=m(!1),k=m(""),N=m(null),V=m(null),K=m(null),w=m({scheduledAt:null,autoRescheduleEnabled:!1,rescheduleDelayMinutes:15,rescheduleOnTokenLimit:!0,rescheduleOnServiceError:!0,maxRescheduleCount:null,maxTotalTokens:null,rescheduleAtTokenCount:null}),T=m({mode:!1,model:!1,thinkingEnabled:!1,startImmediately:!1,quickGitMode:!1,quickWorktreeBranch:!1});function U(p){p.mode&&(f.value=p.mode,T.value.mode=!0),p.model?(o.value=p.model,T.value.model=!0):(o.value="sonnet",T.value.model=!0),p.thinkingEnabled!==null&&p.thinkingEnabled!==void 0&&(x.value=p.thinkingEnabled,T.value.thinkingEnabled=!0),p.effortLevel&&(E.value=p.effortLevel),p.startImmediately!==null&&p.startImmediately!==void 0&&(g.value=p.startImmediately,T.value.startImmediately=!0),p.gitMode&&(n.value=p.gitMode,T.value.quickGitMode=!0),p.gitBranch&&(c.value=p.gitBranch,T.value.quickWorktreeBranch=!0)}function ee(p){const y=localStorage.getItem(t.value);y&&(u.value=y,ge(()=>{p.value&&(p.value.value=y,a.value=y.trim().length>0)}))}function Y(){w.value={scheduledAt:null,autoRescheduleEnabled:!1,rescheduleDelayMinutes:15,rescheduleOnTokenLimit:!0,rescheduleOnServiceError:!0,maxRescheduleCount:null,maxTotalTokens:null,rescheduleAtTokenCount:null}}function G(){I.value=!0}function O(){I.value=!1,c.value=k.value}function M(p){k.value=je("",p),I.value||(c.value=k.value)}return{prompt:u,promptHasContent:a,mode:f,model:o,providerId:S,thinkingEnabled:x,effortLevel:E,startImmediately:g,quickGitMode:n,quickWorktreeBranch:c,editingBranch:I,autoBranchName:k,selectedTemplateId:N,startFromTemplateId:V,parentSessionId:K,schedulingData:w,usingDefaults:T,applyProjectDefaults:U,restoreDraftFromStorage:ee,resetSchedulingData:Y,handleBranchEdit:G,resetBranchName:O,updateAutoBranchName:M}}function nt(t,u){if(!t)return;const a=t.selectionStart,f=t.selectionEnd,o=t.value.substring(0,a),S=t.value.substring(f);t.value=o+u+S,t.selectionStart=t.selectionEnd=a+u.length,t.dispatchEvent(new Event("input",{bubbles:!0})),t.focus()}function ot(t,u){if(!t)return;const a=t.value.trim(),f=a?`${a}
1
+ import{I as ge,n as m,_ as de,a as r,c as d,b as l,E as ue,i as h,t as D,f as re,F as L,y as Ve,l as R,m as E,v as X,q as ie,p as _,k as Oe,A as xe,o as Me,d as $,w as Le,u as v,K as Z,r as H,G as fe,j as Ne,s as Ue,g as qe,x as A,h as Ge}from"./index-MnvuyUxj.js";import{g as je,u as Fe}from"./sessions-GqIMf9RF.js";import{u as Pe}from"./EffortLevelSelector-B9STpy07.js";import{u as We,a as Qe,Q as ze}from"./QuickResponseSettings-DOZUtaRb.js";import{a as He}from"./ApiClient-CcqJ-GAv.js";import{F as Ke,Q as Ye,u as Je}from"./QuickResponsesPanel-BboDyvfE.js";import{S as Xe}from"./SessionFormOptions-16tOEDkt.js";import{R as Ze}from"./ResizableTextarea-BIUrLAki.js";import{S as _e,a as et}from"./SlashCommandWizard-CCEtEF98.js";import{u as tt}from"./projects-BpAyb9ba.js";import"./settings-j6pMR_H2.js";import"./ModelSelector-vRSpXjhL.js";import"./providers-Di1AKmPp.js";function lt(t){const u=m(""),a=m(!1),f=m("yolo"),o=m(null),S=m(null),x=m(!0),C=m(null),g=m(!0),n=m("worktree"),c=m(""),I=m(!1),k=m(""),N=m(null),V=m(null),K=m(null),w=m({scheduledAt:null,autoRescheduleEnabled:!1,rescheduleDelayMinutes:15,rescheduleOnTokenLimit:!0,rescheduleOnServiceError:!0,maxRescheduleCount:null,maxTotalTokens:null,rescheduleAtTokenCount:null}),T=m({mode:!1,model:!1,thinkingEnabled:!1,startImmediately:!1,quickGitMode:!1,quickWorktreeBranch:!1});function U(p){p.mode&&(f.value=p.mode,T.value.mode=!0),p.model?(o.value=p.model,T.value.model=!0):(o.value="sonnet",T.value.model=!0),p.thinkingEnabled!==null&&p.thinkingEnabled!==void 0&&(x.value=p.thinkingEnabled,T.value.thinkingEnabled=!0),p.effortLevel&&(C.value=p.effortLevel),p.startImmediately!==null&&p.startImmediately!==void 0&&(g.value=p.startImmediately,T.value.startImmediately=!0),p.gitMode&&(n.value=p.gitMode,T.value.quickGitMode=!0),p.gitBranch&&(c.value=p.gitBranch,T.value.quickWorktreeBranch=!0)}function ee(p){const y=localStorage.getItem(t.value);y&&(u.value=y,ge(()=>{p.value&&(p.value.value=y,a.value=y.trim().length>0)}))}function Y(){w.value={scheduledAt:null,autoRescheduleEnabled:!1,rescheduleDelayMinutes:15,rescheduleOnTokenLimit:!0,rescheduleOnServiceError:!0,maxRescheduleCount:null,maxTotalTokens:null,rescheduleAtTokenCount:null}}function q(){I.value=!0}function O(){I.value=!1,c.value=k.value}function M(p){k.value=je("",p),I.value||(c.value=k.value)}return{prompt:u,promptHasContent:a,mode:f,model:o,providerId:S,thinkingEnabled:x,effortLevel:C,startImmediately:g,quickGitMode:n,quickWorktreeBranch:c,editingBranch:I,autoBranchName:k,selectedTemplateId:N,startFromTemplateId:V,parentSessionId:K,schedulingData:w,usingDefaults:T,applyProjectDefaults:U,restoreDraftFromStorage:ee,resetSchedulingData:Y,handleBranchEdit:q,resetBranchName:O,updateAutoBranchName:M}}function nt(t,u){if(!t)return;const a=t.selectionStart,f=t.selectionEnd,o=t.value.substring(0,a),S=t.value.substring(f);t.value=o+u+S,t.selectionStart=t.selectionEnd=a+u.length,t.dispatchEvent(new Event("input",{bubbles:!0})),t.focus()}function ot(t,u){if(!t)return;const a=t.value.trim(),f=a?`${a}
2
2
 
3
- ${u}`:u;t.value=f,t.dispatchEvent(new Event("input",{bubbles:!0}))}function st(t,u,a){t&&(u.prompt.value=t.prompt,a.value&&(a.value.value=t.prompt,a.value.dispatchEvent(new Event("input",{bubbles:!0}))),t.thinkingEnabled!=null&&(u.thinkingEnabled.value=t.thinkingEnabled),t.model&&(u.model.value=t.model),t.mode&&(u.mode.value=t.mode),t.gitBranch&&(u.quickWorktreeBranch.value=t.gitBranch,u.editingBranch.value=!0),t.gitMode&&(u.quickGitMode.value=t.gitMode),t.effortLevel!=null&&(u.effortLevel.value=t.effortLevel),t.nextTemplateId&&(u.selectedTemplateId.value=t.nextTemplateId))}function at(t,u){const{currentPrompt:a,gitStatus:f,files:o}=u,S=t.quickGitMode.value&&(f!=null&&f.isGitRepo)?t.quickGitMode.value:void 0;return{prompt:a,mode:t.mode.value,model:t.model.value,providerId:t.providerId.value,thinkingEnabled:t.thinkingEnabled.value,effortLevel:t.effortLevel.value,startImmediately:t.startImmediately.value,gitMode:S,gitBranch:S?t.quickWorktreeBranch.value:void 0,files:o,templateId:t.selectedTemplateId.value,parentSessionId:t.parentSessionId.value||null,scheduledAt:t.schedulingData.value.scheduledAt,autoRescheduleEnabled:t.schedulingData.value.autoRescheduleEnabled,rescheduleDelayMinutes:t.schedulingData.value.rescheduleDelayMinutes,rescheduleOnTokenLimit:t.schedulingData.value.rescheduleOnTokenLimit,rescheduleOnServiceError:t.schedulingData.value.rescheduleOnServiceError,maxRescheduleCount:t.schedulingData.value.maxRescheduleCount,maxTotalTokens:t.schedulingData.value.maxTotalTokens,rescheduleAtTokenCount:t.schedulingData.value.rescheduleAtTokenCount}}const ut={key:0,class:"form-group"},it={class:"segmented-control"},rt={key:0,class:"branch-input-row"},dt={class:"quick-branch-input"},mt=["value","placeholder"],ct={key:1,class:"current-branch-hint"},pt={key:1,class:"git-loading"},vt={__name:"GitOptionsPanel",props:{gitStatus:{type:Object,default:null},modelValue:{type:String,default:""},branchName:{type:String,default:""},autoBranchName:{type:String,default:""},editingBranch:{type:Boolean,default:!1},loadingGit:{type:Boolean,default:!1}},emits:["update:modelValue","update:branchName","branchEdit","resetBranch"],setup(t){return(u,a)=>{var f;return r(),d(L,null,[(f=t.gitStatus)!=null&&f.isGitRepo?(r(),d("div",ut,[a[9]||(a[9]=l("label",{class:"form-label"},"Git Options",-1)),l("div",it,[l("button",{type:"button",class:ue(["segment-btn",{"segment-btn--active":t.modelValue==="worktree"}]),onClick:a[0]||(a[0]=o=>u.$emit("update:modelValue","worktree"))},[...a[6]||(a[6]=[l("span",{class:"segment-label-full"},"Worktree",-1),l("span",{class:"segment-label-short"},"WT",-1)])],2),l("button",{type:"button",class:ue(["segment-btn",{"segment-btn--active":t.modelValue==="branch"}]),onClick:a[1]||(a[1]=o=>u.$emit("update:modelValue","branch"))}," Branch ",2),l("button",{type:"button",class:ue(["segment-btn",{"segment-btn--active":t.modelValue===""}]),onClick:a[2]||(a[2]=o=>u.$emit("update:modelValue",""))}," Current ",2)]),t.modelValue?(r(),d("div",rt,[a[7]||(a[7]=l("label",{class:"form-label form-label-small"},"Branch Name",-1)),l("div",dt,[l("input",{value:t.branchName,type:"text",class:"form-input",placeholder:t.autoBranchName,onInput:a[3]||(a[3]=o=>u.$emit("update:branchName",o.target.value)),onFocus:a[4]||(a[4]=o=>u.$emit("branchEdit"))},null,40,mt),t.editingBranch?(r(),d("button",{key:0,type:"button",class:"btn btn-small",onClick:a[5]||(a[5]=o=>u.$emit("resetBranch"))}," Reset ")):h("",!0)]),a[8]||(a[8]=l("p",{class:"form-help"}," Auto-generated from prompt ",-1))])):h("",!0),t.modelValue===""?(r(),d("p",ct," On: "+D(t.gitStatus.currentBranch),1)):h("",!0)])):h("",!0),t.loadingGit?(r(),d("div",pt,[...a[10]||(a[10]=[l("span",{class:"loading-spinner"},null,-1),re(" Loading git info... ",-1)])])):h("",!0)],64)}}},ht=de(vt,[["__scopeId","data-v-59edf73d"]]),ft={class:"scheduling-options"},gt={key:0,class:"form-group"},bt={class:"form-group"},kt={class:"toggle-switch"},yt={key:1,class:"reschedule-settings"},Tt={class:"form-group"},St={class:"checkbox-option"},Ct={class:"checkbox-option"},Et={class:"form-group"},It={class:"limits-section"},Rt={class:"form-group"},wt={class:"form-group"},Bt={class:"form-group"},$t={__name:"SchedulingOptions",props:{modelValue:{type:Object,default:()=>({})},hideScheduledAt:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(t,{emit:u}){const a=t,f=u,o=Ve({scheduledAt:a.modelValue.scheduledAt||null,scheduledAtLocal:"",autoRescheduleEnabled:a.modelValue.autoRescheduleEnabled??!1,rescheduleDelayMinutes:a.modelValue.rescheduleDelayMinutes??15,rescheduleOnTokenLimit:a.modelValue.rescheduleOnTokenLimit??!0,rescheduleOnServiceError:a.modelValue.rescheduleOnServiceError??!0,maxRescheduleCount:a.modelValue.maxRescheduleCount??null,maxTotalTokens:a.modelValue.maxTotalTokens??null,rescheduleAtTokenCount:a.modelValue.rescheduleAtTokenCount??null});function S(){if(o.scheduledAtLocal){const g=new Date(o.scheduledAtLocal);o.scheduledAt=g.getTime()}else o.scheduledAt=null;E()}function x(g){if(!g)return"";const n=new Date(g),c=n.getFullYear(),I=String(n.getMonth()+1).padStart(2,"0"),k=String(n.getDate()).padStart(2,"0"),N=String(n.getHours()).padStart(2,"0"),V=String(n.getMinutes()).padStart(2,"0");return`${c}-${I}-${k}T${N}:${V}`}R(()=>a.modelValue.scheduledAt,g=>{g&&(o.scheduledAtLocal=x(g))},{immediate:!0});function E(){f("update:modelValue",{scheduledAt:o.scheduledAt,autoRescheduleEnabled:o.autoRescheduleEnabled,rescheduleDelayMinutes:o.rescheduleDelayMinutes,rescheduleOnTokenLimit:o.rescheduleOnTokenLimit,rescheduleOnServiceError:o.rescheduleOnServiceError,maxRescheduleCount:o.maxRescheduleCount,maxTotalTokens:o.maxTotalTokens,rescheduleAtTokenCount:o.rescheduleAtTokenCount})}return R(()=>({autoRescheduleEnabled:o.autoRescheduleEnabled,rescheduleDelayMinutes:o.rescheduleDelayMinutes,rescheduleOnTokenLimit:o.rescheduleOnTokenLimit,rescheduleOnServiceError:o.rescheduleOnServiceError,maxRescheduleCount:o.maxRescheduleCount,maxTotalTokens:o.maxTotalTokens,rescheduleAtTokenCount:o.rescheduleAtTokenCount}),()=>{E()},{deep:!0}),(g,n)=>(r(),d("div",ft,[t.hideScheduledAt?h("",!0):(r(),d("div",gt,[n[8]||(n[8]=l("label",{for:"scheduled-at",class:"form-label"},"Schedule Start Time (optional)",-1)),C(l("input",{id:"scheduled-at","onUpdate:modelValue":n[0]||(n[0]=c=>o.scheduledAtLocal=c),type:"datetime-local",class:"form-input",onChange:S},null,544),[[X,o.scheduledAtLocal]]),n[9]||(n[9]=l("p",{class:"form-help"}," Leave empty to start immediately ",-1))])),l("div",bt,[l("label",kt,[C(l("input",{"onUpdate:modelValue":n[1]||(n[1]=c=>o.autoRescheduleEnabled=c),type:"checkbox"},null,512),[[ie,o.autoRescheduleEnabled]]),n[10]||(n[10]=l("span",{class:"toggle-slider"},null,-1)),n[11]||(n[11]=l("span",{class:"toggle-label"},"Auto-reschedule on errors",-1))])]),o.autoRescheduleEnabled?(r(),d("div",yt,[l("div",Tt,[n[14]||(n[14]=l("p",{class:"settings-label"}," Reschedule Triggers ",-1)),l("label",St,[C(l("input",{"onUpdate:modelValue":n[2]||(n[2]=c=>o.rescheduleOnTokenLimit=c),type:"checkbox"},null,512),[[ie,o.rescheduleOnTokenLimit]]),n[12]||(n[12]=l("span",{class:"checkbox-label"},"Token limit errors",-1))]),l("label",Ct,[C(l("input",{"onUpdate:modelValue":n[3]||(n[3]=c=>o.rescheduleOnServiceError=c),type:"checkbox"},null,512),[[ie,o.rescheduleOnServiceError]]),n[13]||(n[13]=l("span",{class:"checkbox-label"},"Service unavailability",-1))])]),l("div",Et,[n[16]||(n[16]=l("label",{for:"reschedule-delay",class:"form-label"},"Reschedule Delay",-1)),C(l("select",{id:"reschedule-delay","onUpdate:modelValue":n[4]||(n[4]=c=>o.rescheduleDelayMinutes=c),class:"form-input"},[...n[15]||(n[15]=[l("option",{value:5}," 5 minutes ",-1),l("option",{value:15}," 15 minutes ",-1),l("option",{value:30}," 30 minutes ",-1),l("option",{value:60}," 1 hour ",-1),l("option",{value:120}," 2 hours ",-1)])],512),[[_,o.rescheduleDelayMinutes,void 0,{number:!0}]])]),l("div",It,[n[23]||(n[23]=l("p",{class:"settings-label"}," Limits (optional) ",-1)),l("div",Rt,[n[17]||(n[17]=l("label",{for:"max-reschedule-count",class:"form-label"},"Max Reschedule Count",-1)),C(l("input",{id:"max-reschedule-count","onUpdate:modelValue":n[5]||(n[5]=c=>o.maxRescheduleCount=c),type:"number",min:"1",max:"100",class:"form-input",placeholder:"Unlimited"},null,512),[[X,o.maxRescheduleCount,void 0,{number:!0}]]),n[18]||(n[18]=l("p",{class:"form-help"}," Stop after N reschedule attempts ",-1))]),l("div",wt,[n[19]||(n[19]=l("label",{for:"max-total-tokens",class:"form-label"},"Max Total Tokens (Hard Limit)",-1)),C(l("input",{id:"max-total-tokens","onUpdate:modelValue":n[6]||(n[6]=c=>o.maxTotalTokens=c),type:"number",min:"1000",step:"1000",class:"form-input",placeholder:"Unlimited"},null,512),[[X,o.maxTotalTokens,void 0,{number:!0}]]),n[20]||(n[20]=l("p",{class:"form-help"}," Stop rescheduling after consuming this many tokens ",-1))]),l("div",Bt,[n[21]||(n[21]=l("label",{for:"reschedule-at-token-count",class:"form-label"},"Reschedule At Token Count",-1)),C(l("input",{id:"reschedule-at-token-count","onUpdate:modelValue":n[7]||(n[7]=c=>o.rescheduleAtTokenCount=c),type:"number",min:"10000",step:"10000",class:"form-input",placeholder:"None"},null,512),[[X,o.rescheduleAtTokenCount,void 0,{number:!0}]]),n[22]||(n[22]=l("p",{class:"form-help"}," Proactively reschedule when session reaches this token count ",-1))])])])):h("",!0)]))}},At=de($t,[["__scopeId","data-v-cfbba021"]]),Dt={class:"container"},Vt={key:0,class:"form-group"},Ot={key:0,label:"Project Templates"},xt=["value"],Mt={key:1,label:"Global Templates"},Lt=["value"],Nt={class:"form-group"},Ut={class:"attachment-row"},Gt={key:1,class:"error-message"},qt={key:1,class:"form-group"},jt={key:0,label:"Project Templates"},Ft=["value"],Pt={key:1,label:"Global Templates"},Wt=["value"],Qt={key:2,class:"form-group"},zt=["value"],Ht={class:"form-actions"},Kt=["disabled"],Yt={key:0,class:"loading-spinner"},Jt={__name:"NewSessionView",setup(t){const u=Ue(),a=qe(),f=Fe();Oe();const o=Pe(),S=We(),x=tt(),E=A(()=>`new-session-draft-${u.params.id}`),g=lt(E),{prompt:n,promptHasContent:c,mode:I,model:k,providerId:N,thinkingEnabled:V,effortLevel:K,startImmediately:w,quickGitMode:T,quickWorktreeBranch:U,editingBranch:ee,autoBranchName:Y,selectedTemplateId:G,startFromTemplateId:O,parentSessionId:M,schedulingData:p,usingDefaults:y,applyProjectDefaults:be,restoreDraftFromStorage:ke,resetSchedulingData:ye,handleBranchEdit:Te,resetBranchName:Se,updateAutoBranchName:me}=g,B=m(null);let q=null,j=null,F=null;const P=m(!1),te=m(!1),le=m(!1),Ce=A(()=>window.innerWidth<=480?80:120),Ee=Je(()=>{var e;const i=((e=B.value)==null?void 0:e.value)||n.value;!P.value&&i.trim()&&ae()}),W=m(null),ce=m([]),pe=m(null),ve=m(null),Q=A(()=>o.projectTemplates),z=A(()=>o.globalTemplates),ne=A(()=>[...Q.value,...z.value]),he=A(()=>{const i=x.getProjectById(u.params.id);return(i==null?void 0:i.workingDirectory)||null}),oe=A(()=>f.sessions.filter(i=>i.status==="completed").sort((i,e)=>new Date(e.createdAt)-new Date(i.createdAt))),Ie=A(()=>!w.value||ne.value.length>0||oe.value.length>0),se=m(!1),J=m(null);function Re(i){var s;const e=i.target.value,b=e.trim().length>0;c.value!==b&&(c.value=b),q&&clearTimeout(q),q=setTimeout(()=>{n.value=e},150),(s=W.value)!=null&&s.isGitRepo&&(F&&clearTimeout(F),F=setTimeout(()=>me(e),300))}R(()=>W.value,i=>{i!=null&&i.isGitRepo&&!Y.value&&me(n.value)},{immediate:!0}),R(I,()=>{y.value.mode=!1}),R(k,()=>{y.value.model=!1}),R(V,()=>{y.value.thinkingEnabled=!1}),R(w,i=>{y.value.startImmediately=!1,i?ye():ge(()=>{var e;(e=ve.value)==null||e.scrollIntoView({behavior:"smooth",block:"nearest"})})}),R(T,()=>{y.value.quickGitMode=!1}),R(U,()=>{y.value.quickWorktreeBranch=!1}),R(n,i=>{j&&clearTimeout(j),j=setTimeout(()=>{i.trim()?localStorage.setItem(E.value,i):localStorage.removeItem(E.value)},500)}),xe(()=>{F&&clearTimeout(F),q&&clearTimeout(q),j&&clearTimeout(j)}),Me(async()=>{const i=u.params.id;ke(B);try{await S.fetchDefaults(i);const b=S.getDefaultsForProject(i);b?be(b):(k.value="sonnet",y.value.model=!0)}catch(b){console.warn("Failed to fetch project defaults:",b),k.value||(k.value="sonnet",y.value.model=!0)}se.value=!0;try{W.value=await He.getGitStatus(i)}catch{}finally{se.value=!1}o.fetchProjectTemplates(i),Qe().fetchForProject(i),u.query.parentSessionId&&(M.value=u.query.parentSessionId)});function we(){a.push(`/projects/${u.params.id}/sessions`)}function Be({text:i}){nt(B.value,i)}function $e({content:i,autoSubmit:e}){var b;ot(B.value,i),e?setTimeout(()=>ae(),0):(b=B.value)==null||b.blur()}function Ae(){const i=O.value&&o.getTemplateById(O.value);st(i,g,B)}async function ae(){var e,b;const i=((e=B.value)==null?void 0:e.value)||n.value;if(i.trim()){P.value=!0,J.value=null;try{const s=at(g,{currentPrompt:i,gitStatus:W.value,files:ce.value}),De=await f.createSession(u.params.id,s);(b=pe.value)==null||b.clear(),localStorage.removeItem(E.value),a.push(`/sessions/${De.id}?overlay=open`)}catch(s){J.value=s.message}finally{P.value=!1}}}return(i,e)=>{const b=Ge("router-link");return r(),d("div",Dt,[$(b,{to:`/projects/${v(u).params.id}/sessions`,class:"back-link"},{default:Le(()=>[...e[17]||(e[17]=[re(" ← Sessions ",-1)])]),_:1},8,["to"]),e[26]||(e[26]=l("h1",null,"New Session",-1)),l("form",{class:"form card",onSubmit:Ne(ae,["prevent"])},[ne.value.length>0?(r(),d("div",Vt,[e[19]||(e[19]=l("label",{class:"form-label",for:"start-from-template"},"Start From Template",-1)),C(l("select",{id:"start-from-template","onUpdate:modelValue":e[0]||(e[0]=s=>Z(O)?O.value=s:null),class:"form-input",title:"Selecting a template will populate all form fields below. You can still edit before starting.",onChange:Ae},[e[18]||(e[18]=l("option",{value:null}," Select a template to pre-fill... ",-1)),Q.value.length?(r(),d("optgroup",Ot,[(r(!0),d(L,null,H(Q.value,s=>(r(),d("option",{key:s.id,value:s.id},D(s.name),9,xt))),128))])):h("",!0),z.value.length?(r(),d("optgroup",Mt,[(r(!0),d(L,null,H(z.value,s=>(r(),d("option",{key:s.id,value:s.id},D(s.name),9,Lt))),128))])):h("",!0)],544),[[_,v(O)]])])):h("",!0),l("div",Nt,[$(Ze,{id:"prompt",ref_key:"textareaRef",ref:B,class:"form-input form-textarea",placeholder:"What would you like Claude to help you with?","min-height":Ce.value,required:"",onInput:Re,onKeydown:v(Ee)},null,8,["min-height","onKeydown"]),l("div",Ut,[$(Ke,{ref_key:"fileAttachment",ref:pe,"onUpdate:files":e[1]||(e[1]=s=>ce.value=s)},null,512),he.value?(r(),fe(_e,{key:0,onOpen:e[2]||(e[2]=s=>te.value=!0)})):h("",!0)])]),$(Ye,{"show-empty":!0,onInsert:$e,onOpenSettings:e[3]||(e[3]=s=>le.value=!0)}),$(Xe,{mode:v(I),model:v(k),"effort-level":v(K),"thinking-enabled":v(V),"start-immediately":v(w),"onUpdate:mode":e[4]||(e[4]=s=>I.value=s),"onUpdate:model":e[5]||(e[5]=s=>k.value=s),"onUpdate:providerId":e[6]||(e[6]=s=>N.value=s),"onUpdate:effortLevel":e[7]||(e[7]=s=>K.value=s),"onUpdate:thinkingEnabled":e[8]||(e[8]=s=>V.value=s),"onUpdate:startImmediately":e[9]||(e[9]=s=>w.value=s)},null,8,["mode","model","effort-level","thinking-enabled","start-immediately"]),J.value?(r(),d("div",Gt,D(J.value),1)):h("",!0),$(ht,{"git-status":W.value,"model-value":v(T),"branch-name":v(U),"auto-branch-name":v(Y),"editing-branch":v(ee),"loading-git":se.value,"onUpdate:modelValue":e[10]||(e[10]=s=>T.value=s),"onUpdate:branchName":e[11]||(e[11]=s=>U.value=s),onBranchEdit:v(Te),onResetBranch:v(Se)},null,8,["git-status","model-value","branch-name","auto-branch-name","editing-branch","loading-git","onBranchEdit","onResetBranch"]),Ie.value?(r(),d("div",{key:2,ref_key:"advancedOptionsRef",ref:ve,class:"advanced-options"},[v(w)?h("",!0):(r(),fe(At,{key:0,modelValue:v(p),"onUpdate:modelValue":e[12]||(e[12]=s=>Z(p)?p.value=s:null)},null,8,["modelValue"])),ne.value.length>0?(r(),d("div",qt,[e[21]||(e[21]=l("label",{class:"form-label",for:"template"},"Next Template (optional)",-1)),C(l("select",{id:"template","onUpdate:modelValue":e[13]||(e[13]=s=>Z(G)?G.value=s:null),class:"form-input"},[e[20]||(e[20]=l("option",{value:null}," None - single session ",-1)),Q.value.length?(r(),d("optgroup",jt,[(r(!0),d(L,null,H(Q.value,s=>(r(),d("option",{key:s.id,value:s.id},D(s.name),9,Ft))),128))])):h("",!0),z.value.length?(r(),d("optgroup",Pt,[(r(!0),d(L,null,H(z.value,s=>(r(),d("option",{key:s.id,value:s.id},D(s.name),9,Wt))),128))])):h("",!0)],512),[[_,v(G)]]),e[22]||(e[22]=l("p",{class:"form-help"}," After this session completes, the selected template will automatically start a new session. ",-1))])):h("",!0),oe.value.length>0?(r(),d("div",Qt,[e[24]||(e[24]=l("label",{class:"form-label",for:"parent-session"},"Parent Session (optional)",-1)),C(l("select",{id:"parent-session","onUpdate:modelValue":e[14]||(e[14]=s=>Z(M)?M.value=s:null),class:"form-input"},[e[23]||(e[23]=l("option",{value:null}," None - create standalone session ",-1)),(r(!0),d(L,null,H(oe.value,s=>(r(),d("option",{key:s.id,value:s.id},D(s.name),9,zt))),128))],512),[[_,v(M)]]),e[25]||(e[25]=l("p",{class:"form-help"}," Choose a parent session to link this as a child session. Child sessions help organize related work. ",-1))])):h("",!0)],512)):h("",!0),l("div",Ht,[l("button",{type:"button",class:"btn btn-secondary",onClick:we}," Cancel "),l("button",{type:"submit",class:"btn btn-primary btn-submit",disabled:P.value},[P.value?(r(),d("span",Yt)):h("",!0),re(" "+D(v(w)?"Start Session":"Create Draft"),1)],8,Kt)])],32),$(et,{"is-open":te.value,"onUpdate:isOpen":e[15]||(e[15]=s=>te.value=s),"working-directory":he.value||"",mode:"insert","hide-builtin":!0,onInsert:Be},null,8,["is-open","working-directory"]),$(ze,{"is-open":le.value,"project-id":v(u).params.id,onClose:e[16]||(e[16]=s=>le.value=!1)},null,8,["is-open","project-id"])])}}},dl=de(Jt,[["__scopeId","data-v-058549da"]]);export{dl as default};
3
+ ${u}`:u;t.value=f,t.dispatchEvent(new Event("input",{bubbles:!0}))}function st(t,u,a){t&&(u.prompt.value=t.prompt,a.value&&(a.value.value=t.prompt,a.value.dispatchEvent(new Event("input",{bubbles:!0}))),t.thinkingEnabled!=null&&(u.thinkingEnabled.value=t.thinkingEnabled),t.model&&(u.model.value=t.model),t.mode&&(u.mode.value=t.mode),t.gitBranch&&(u.quickWorktreeBranch.value=t.gitBranch,u.editingBranch.value=!0),t.gitMode&&(u.quickGitMode.value=t.gitMode),t.effortLevel!=null&&(u.effortLevel.value=t.effortLevel),t.nextTemplateId&&(u.selectedTemplateId.value=t.nextTemplateId))}function at(t,u){const{currentPrompt:a,gitStatus:f,files:o}=u,S=t.quickGitMode.value&&(f!=null&&f.isGitRepo)?t.quickGitMode.value:void 0;return{prompt:a,mode:t.mode.value,model:t.model.value,providerId:t.providerId.value,thinkingEnabled:t.thinkingEnabled.value,effortLevel:t.effortLevel.value,startImmediately:t.startImmediately.value,gitMode:S,gitBranch:S?t.quickWorktreeBranch.value:void 0,files:o,templateId:t.selectedTemplateId.value,parentSessionId:t.parentSessionId.value||null,scheduledAt:t.schedulingData.value.scheduledAt,autoRescheduleEnabled:t.schedulingData.value.autoRescheduleEnabled,rescheduleDelayMinutes:t.schedulingData.value.rescheduleDelayMinutes,rescheduleOnTokenLimit:t.schedulingData.value.rescheduleOnTokenLimit,rescheduleOnServiceError:t.schedulingData.value.rescheduleOnServiceError,maxRescheduleCount:t.schedulingData.value.maxRescheduleCount,maxTotalTokens:t.schedulingData.value.maxTotalTokens,rescheduleAtTokenCount:t.schedulingData.value.rescheduleAtTokenCount}}const ut={key:0,class:"form-group"},it={class:"segmented-control"},rt={key:0,class:"branch-input-row"},dt={class:"quick-branch-input"},mt=["value","placeholder"],ct={key:1,class:"current-branch-hint"},pt={key:1,class:"git-loading"},vt={__name:"GitOptionsPanel",props:{gitStatus:{type:Object,default:null},modelValue:{type:String,default:""},branchName:{type:String,default:""},autoBranchName:{type:String,default:""},editingBranch:{type:Boolean,default:!1},loadingGit:{type:Boolean,default:!1}},emits:["update:modelValue","update:branchName","branchEdit","resetBranch"],setup(t){return(u,a)=>{var f;return r(),d(L,null,[(f=t.gitStatus)!=null&&f.isGitRepo?(r(),d("div",ut,[a[9]||(a[9]=l("label",{class:"form-label"},"Git Options",-1)),l("div",it,[l("button",{type:"button",class:ue(["segment-btn",{"segment-btn--active":t.modelValue==="worktree"}]),onClick:a[0]||(a[0]=o=>u.$emit("update:modelValue","worktree"))},[...a[6]||(a[6]=[l("span",{class:"segment-label-full"},"Worktree",-1),l("span",{class:"segment-label-short"},"WT",-1)])],2),l("button",{type:"button",class:ue(["segment-btn",{"segment-btn--active":t.modelValue==="branch"}]),onClick:a[1]||(a[1]=o=>u.$emit("update:modelValue","branch"))}," Branch ",2),l("button",{type:"button",class:ue(["segment-btn",{"segment-btn--active":t.modelValue===""}]),onClick:a[2]||(a[2]=o=>u.$emit("update:modelValue",""))}," Current ",2)]),t.modelValue?(r(),d("div",rt,[a[7]||(a[7]=l("label",{class:"form-label form-label-small"},"Branch Name",-1)),l("div",dt,[l("input",{value:t.branchName,type:"text",class:"form-input",placeholder:t.autoBranchName,onInput:a[3]||(a[3]=o=>u.$emit("update:branchName",o.target.value)),onFocus:a[4]||(a[4]=o=>u.$emit("branchEdit"))},null,40,mt),t.editingBranch?(r(),d("button",{key:0,type:"button",class:"btn btn-small",onClick:a[5]||(a[5]=o=>u.$emit("resetBranch"))}," Reset ")):h("",!0)]),a[8]||(a[8]=l("p",{class:"form-help"}," Auto-generated from prompt ",-1))])):h("",!0),t.modelValue===""?(r(),d("p",ct," On: "+D(t.gitStatus.currentBranch),1)):h("",!0)])):h("",!0),t.loadingGit?(r(),d("div",pt,[...a[10]||(a[10]=[l("span",{class:"loading-spinner"},null,-1),re(" Loading git info... ",-1)])])):h("",!0)],64)}}},ht=de(vt,[["__scopeId","data-v-59edf73d"]]),ft={class:"scheduling-options"},gt={key:0,class:"form-group"},bt={class:"form-group"},kt={class:"toggle-switch"},yt={key:1,class:"reschedule-settings"},Tt={class:"form-group"},St={class:"checkbox-option"},Et={class:"checkbox-option"},Ct={class:"form-group"},It={class:"limits-section"},Rt={class:"form-group"},wt={class:"form-group"},Bt={class:"form-group"},$t={__name:"SchedulingOptions",props:{modelValue:{type:Object,default:()=>({})},hideScheduledAt:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(t,{emit:u}){const a=t,f=u,o=Ve({scheduledAt:a.modelValue.scheduledAt||null,scheduledAtLocal:"",autoRescheduleEnabled:a.modelValue.autoRescheduleEnabled??!1,rescheduleDelayMinutes:a.modelValue.rescheduleDelayMinutes??15,rescheduleOnTokenLimit:a.modelValue.rescheduleOnTokenLimit??!0,rescheduleOnServiceError:a.modelValue.rescheduleOnServiceError??!0,maxRescheduleCount:a.modelValue.maxRescheduleCount??null,maxTotalTokens:a.modelValue.maxTotalTokens??null,rescheduleAtTokenCount:a.modelValue.rescheduleAtTokenCount??null});function S(){if(o.scheduledAtLocal){const g=new Date(o.scheduledAtLocal);o.scheduledAt=g.getTime()}else o.scheduledAt=null;C()}function x(g){if(!g)return"";const n=new Date(g),c=n.getFullYear(),I=String(n.getMonth()+1).padStart(2,"0"),k=String(n.getDate()).padStart(2,"0"),N=String(n.getHours()).padStart(2,"0"),V=String(n.getMinutes()).padStart(2,"0");return`${c}-${I}-${k}T${N}:${V}`}R(()=>a.modelValue.scheduledAt,g=>{g&&(o.scheduledAtLocal=x(g))},{immediate:!0});function C(){f("update:modelValue",{scheduledAt:o.scheduledAt,autoRescheduleEnabled:o.autoRescheduleEnabled,rescheduleDelayMinutes:o.rescheduleDelayMinutes,rescheduleOnTokenLimit:o.rescheduleOnTokenLimit,rescheduleOnServiceError:o.rescheduleOnServiceError,maxRescheduleCount:o.maxRescheduleCount,maxTotalTokens:o.maxTotalTokens,rescheduleAtTokenCount:o.rescheduleAtTokenCount})}return R(()=>({autoRescheduleEnabled:o.autoRescheduleEnabled,rescheduleDelayMinutes:o.rescheduleDelayMinutes,rescheduleOnTokenLimit:o.rescheduleOnTokenLimit,rescheduleOnServiceError:o.rescheduleOnServiceError,maxRescheduleCount:o.maxRescheduleCount,maxTotalTokens:o.maxTotalTokens,rescheduleAtTokenCount:o.rescheduleAtTokenCount}),()=>{C()},{deep:!0}),(g,n)=>(r(),d("div",ft,[t.hideScheduledAt?h("",!0):(r(),d("div",gt,[n[8]||(n[8]=l("label",{for:"scheduled-at",class:"form-label"},"Schedule Start Time (optional)",-1)),E(l("input",{id:"scheduled-at","onUpdate:modelValue":n[0]||(n[0]=c=>o.scheduledAtLocal=c),type:"datetime-local",class:"form-input",onChange:S},null,544),[[X,o.scheduledAtLocal]]),n[9]||(n[9]=l("p",{class:"form-help"}," Leave empty to start immediately ",-1))])),l("div",bt,[l("label",kt,[E(l("input",{"onUpdate:modelValue":n[1]||(n[1]=c=>o.autoRescheduleEnabled=c),type:"checkbox"},null,512),[[ie,o.autoRescheduleEnabled]]),n[10]||(n[10]=l("span",{class:"toggle-slider"},null,-1)),n[11]||(n[11]=l("span",{class:"toggle-label"},"Auto-reschedule on errors",-1))])]),o.autoRescheduleEnabled?(r(),d("div",yt,[l("div",Tt,[n[14]||(n[14]=l("p",{class:"settings-label"}," Reschedule Triggers ",-1)),l("label",St,[E(l("input",{"onUpdate:modelValue":n[2]||(n[2]=c=>o.rescheduleOnTokenLimit=c),type:"checkbox"},null,512),[[ie,o.rescheduleOnTokenLimit]]),n[12]||(n[12]=l("span",{class:"checkbox-label"},"Token limit errors",-1))]),l("label",Et,[E(l("input",{"onUpdate:modelValue":n[3]||(n[3]=c=>o.rescheduleOnServiceError=c),type:"checkbox"},null,512),[[ie,o.rescheduleOnServiceError]]),n[13]||(n[13]=l("span",{class:"checkbox-label"},"Service unavailability",-1))])]),l("div",Ct,[n[16]||(n[16]=l("label",{for:"reschedule-delay",class:"form-label"},"Reschedule Delay",-1)),E(l("select",{id:"reschedule-delay","onUpdate:modelValue":n[4]||(n[4]=c=>o.rescheduleDelayMinutes=c),class:"form-input"},[...n[15]||(n[15]=[l("option",{value:5}," 5 minutes ",-1),l("option",{value:15}," 15 minutes ",-1),l("option",{value:30}," 30 minutes ",-1),l("option",{value:60}," 1 hour ",-1),l("option",{value:120}," 2 hours ",-1)])],512),[[_,o.rescheduleDelayMinutes,void 0,{number:!0}]])]),l("div",It,[n[23]||(n[23]=l("p",{class:"settings-label"}," Limits (optional) ",-1)),l("div",Rt,[n[17]||(n[17]=l("label",{for:"max-reschedule-count",class:"form-label"},"Max Reschedule Count",-1)),E(l("input",{id:"max-reschedule-count","onUpdate:modelValue":n[5]||(n[5]=c=>o.maxRescheduleCount=c),type:"number",min:"1",max:"100",class:"form-input",placeholder:"Unlimited"},null,512),[[X,o.maxRescheduleCount,void 0,{number:!0}]]),n[18]||(n[18]=l("p",{class:"form-help"}," Stop after N reschedule attempts ",-1))]),l("div",wt,[n[19]||(n[19]=l("label",{for:"max-total-tokens",class:"form-label"},"Max Total Tokens (Hard Limit)",-1)),E(l("input",{id:"max-total-tokens","onUpdate:modelValue":n[6]||(n[6]=c=>o.maxTotalTokens=c),type:"number",min:"1000",step:"1000",class:"form-input",placeholder:"Unlimited"},null,512),[[X,o.maxTotalTokens,void 0,{number:!0}]]),n[20]||(n[20]=l("p",{class:"form-help"}," Stop rescheduling after consuming this many tokens ",-1))]),l("div",Bt,[n[21]||(n[21]=l("label",{for:"reschedule-at-token-count",class:"form-label"},"Reschedule At Token Count",-1)),E(l("input",{id:"reschedule-at-token-count","onUpdate:modelValue":n[7]||(n[7]=c=>o.rescheduleAtTokenCount=c),type:"number",min:"10000",step:"10000",class:"form-input",placeholder:"None"},null,512),[[X,o.rescheduleAtTokenCount,void 0,{number:!0}]]),n[22]||(n[22]=l("p",{class:"form-help"}," Proactively reschedule when session reaches this token count ",-1))])])])):h("",!0)]))}},At=de($t,[["__scopeId","data-v-cfbba021"]]),Dt={class:"container"},Vt={key:0,class:"form-group"},Ot={key:0,label:"Project Templates"},xt=["value"],Mt={key:1,label:"Global Templates"},Lt=["value"],Nt={class:"form-group"},Ut={class:"attachment-row"},qt={key:1,class:"error-message"},Gt={key:1,class:"form-group"},jt={key:0,label:"Project Templates"},Ft=["value"],Pt={key:1,label:"Global Templates"},Wt=["value"],Qt={key:2,class:"form-group"},zt=["value"],Ht={class:"form-actions"},Kt=["disabled"],Yt={key:0,class:"loading-spinner"},Jt={__name:"NewSessionView",setup(t){const u=Ue(),a=Ge(),f=Fe();Oe();const o=Pe(),S=We(),x=tt(),C=A(()=>`new-session-draft-${u.params.id}`),g=lt(C),{prompt:n,promptHasContent:c,mode:I,model:k,providerId:N,thinkingEnabled:V,effortLevel:K,startImmediately:w,quickGitMode:T,quickWorktreeBranch:U,editingBranch:ee,autoBranchName:Y,selectedTemplateId:q,startFromTemplateId:O,parentSessionId:M,schedulingData:p,usingDefaults:y,applyProjectDefaults:be,restoreDraftFromStorage:ke,resetSchedulingData:ye,handleBranchEdit:Te,resetBranchName:Se,updateAutoBranchName:me}=g,B=m(null);let G=null,j=null,F=null;const P=m(!1),te=m(!1),le=m(!1),Ee=A(()=>window.innerWidth<=480?80:120),Ce=Je(()=>{var e;const i=((e=B.value)==null?void 0:e.value)||n.value;!P.value&&i.trim()&&ae()}),W=m(null),ce=m([]),pe=m(null),ve=m(null),Q=A(()=>o.projectTemplates),z=A(()=>o.globalTemplates),ne=A(()=>[...Q.value,...z.value]),he=A(()=>{const i=x.getProjectById(u.params.id);return(i==null?void 0:i.workingDirectory)||null}),oe=A(()=>f.sessions.filter(i=>i.status==="completed").sort((i,e)=>new Date(e.createdAt)-new Date(i.createdAt))),Ie=A(()=>!w.value||ne.value.length>0||oe.value.length>0),se=m(!1),J=m(null);function Re(i){var s;const e=i.target.value,b=e.trim().length>0;c.value!==b&&(c.value=b),G&&clearTimeout(G),G=setTimeout(()=>{n.value=e},150),(s=W.value)!=null&&s.isGitRepo&&(F&&clearTimeout(F),F=setTimeout(()=>me(e),300))}R(()=>W.value,i=>{i!=null&&i.isGitRepo&&!Y.value&&me(n.value)},{immediate:!0}),R(I,()=>{y.value.mode=!1}),R(k,()=>{y.value.model=!1}),R(V,()=>{y.value.thinkingEnabled=!1}),R(w,i=>{y.value.startImmediately=!1,i?ye():ge(()=>{var e;(e=ve.value)==null||e.scrollIntoView({behavior:"smooth",block:"nearest"})})}),R(T,()=>{y.value.quickGitMode=!1}),R(U,()=>{y.value.quickWorktreeBranch=!1}),R(n,i=>{j&&clearTimeout(j),j=setTimeout(()=>{i.trim()?localStorage.setItem(C.value,i):localStorage.removeItem(C.value)},500)}),xe(()=>{F&&clearTimeout(F),G&&clearTimeout(G),j&&clearTimeout(j)}),Me(async()=>{const i=u.params.id;ke(B);try{await S.fetchDefaults(i);const b=S.getDefaultsForProject(i);b?be(b):(k.value="sonnet",y.value.model=!0)}catch(b){console.warn("Failed to fetch project defaults:",b),k.value||(k.value="sonnet",y.value.model=!0)}se.value=!0;try{W.value=await He.getGitStatus(i)}catch{}finally{se.value=!1}o.fetchProjectTemplates(i),Qe().fetchForProject(i),u.query.parentSessionId&&(M.value=u.query.parentSessionId)});function we(){a.push(`/projects/${u.params.id}/sessions`)}function Be({text:i}){nt(B.value,i)}function $e({content:i,autoSubmit:e}){var b;ot(B.value,i),e?setTimeout(()=>ae(),0):(b=B.value)==null||b.blur()}function Ae(){const i=O.value&&o.getTemplateById(O.value);st(i,g,B)}async function ae(){var e,b;const i=((e=B.value)==null?void 0:e.value)||n.value;if(i.trim()){P.value=!0,J.value=null;try{const s=at(g,{currentPrompt:i,gitStatus:W.value,files:ce.value}),De=await f.createSession(u.params.id,s);(b=pe.value)==null||b.clear(),localStorage.removeItem(C.value),a.push(`/sessions/${De.id}?overlay=open`)}catch(s){J.value=s.message}finally{P.value=!1}}}return(i,e)=>{const b=qe("router-link");return r(),d("div",Dt,[$(b,{to:`/projects/${v(u).params.id}/sessions`,class:"back-link"},{default:Le(()=>[...e[17]||(e[17]=[re(" ← Sessions ",-1)])]),_:1},8,["to"]),e[26]||(e[26]=l("h1",null,"New Session",-1)),l("form",{class:"form card",onSubmit:Ne(ae,["prevent"])},[ne.value.length>0?(r(),d("div",Vt,[e[19]||(e[19]=l("label",{class:"form-label",for:"start-from-template"},"Start From Template",-1)),E(l("select",{id:"start-from-template","onUpdate:modelValue":e[0]||(e[0]=s=>Z(O)?O.value=s:null),class:"form-input",title:"Selecting a template will populate all form fields below. You can still edit before starting.",onChange:Ae},[e[18]||(e[18]=l("option",{value:null}," Select a template to pre-fill... ",-1)),Q.value.length?(r(),d("optgroup",Ot,[(r(!0),d(L,null,H(Q.value,s=>(r(),d("option",{key:s.id,value:s.id},D(s.name),9,xt))),128))])):h("",!0),z.value.length?(r(),d("optgroup",Mt,[(r(!0),d(L,null,H(z.value,s=>(r(),d("option",{key:s.id,value:s.id},D(s.name),9,Lt))),128))])):h("",!0)],544),[[_,v(O)]])])):h("",!0),l("div",Nt,[$(Ze,{id:"prompt",ref_key:"textareaRef",ref:B,class:"form-input form-textarea",placeholder:"What would you like the agent to help you with?","min-height":Ee.value,required:"",onInput:Re,onKeydown:v(Ce)},null,8,["min-height","onKeydown"]),l("div",Ut,[$(Ke,{ref_key:"fileAttachment",ref:pe,"onUpdate:files":e[1]||(e[1]=s=>ce.value=s)},null,512),he.value?(r(),fe(_e,{key:0,onOpen:e[2]||(e[2]=s=>te.value=!0)})):h("",!0)])]),$(Ye,{"show-empty":!0,onInsert:$e,onOpenSettings:e[3]||(e[3]=s=>le.value=!0)}),$(Xe,{mode:v(I),model:v(k),"effort-level":v(K),"thinking-enabled":v(V),"start-immediately":v(w),"onUpdate:mode":e[4]||(e[4]=s=>I.value=s),"onUpdate:model":e[5]||(e[5]=s=>k.value=s),"onUpdate:providerId":e[6]||(e[6]=s=>N.value=s),"onUpdate:effortLevel":e[7]||(e[7]=s=>K.value=s),"onUpdate:thinkingEnabled":e[8]||(e[8]=s=>V.value=s),"onUpdate:startImmediately":e[9]||(e[9]=s=>w.value=s)},null,8,["mode","model","effort-level","thinking-enabled","start-immediately"]),J.value?(r(),d("div",qt,D(J.value),1)):h("",!0),$(ht,{"git-status":W.value,"model-value":v(T),"branch-name":v(U),"auto-branch-name":v(Y),"editing-branch":v(ee),"loading-git":se.value,"onUpdate:modelValue":e[10]||(e[10]=s=>T.value=s),"onUpdate:branchName":e[11]||(e[11]=s=>U.value=s),onBranchEdit:v(Te),onResetBranch:v(Se)},null,8,["git-status","model-value","branch-name","auto-branch-name","editing-branch","loading-git","onBranchEdit","onResetBranch"]),Ie.value?(r(),d("div",{key:2,ref_key:"advancedOptionsRef",ref:ve,class:"advanced-options"},[v(w)?h("",!0):(r(),fe(At,{key:0,modelValue:v(p),"onUpdate:modelValue":e[12]||(e[12]=s=>Z(p)?p.value=s:null)},null,8,["modelValue"])),ne.value.length>0?(r(),d("div",Gt,[e[21]||(e[21]=l("label",{class:"form-label",for:"template"},"Next Template (optional)",-1)),E(l("select",{id:"template","onUpdate:modelValue":e[13]||(e[13]=s=>Z(q)?q.value=s:null),class:"form-input"},[e[20]||(e[20]=l("option",{value:null}," None - single session ",-1)),Q.value.length?(r(),d("optgroup",jt,[(r(!0),d(L,null,H(Q.value,s=>(r(),d("option",{key:s.id,value:s.id},D(s.name),9,Ft))),128))])):h("",!0),z.value.length?(r(),d("optgroup",Pt,[(r(!0),d(L,null,H(z.value,s=>(r(),d("option",{key:s.id,value:s.id},D(s.name),9,Wt))),128))])):h("",!0)],512),[[_,v(q)]]),e[22]||(e[22]=l("p",{class:"form-help"}," After this session completes, the selected template will automatically start a new session. ",-1))])):h("",!0),oe.value.length>0?(r(),d("div",Qt,[e[24]||(e[24]=l("label",{class:"form-label",for:"parent-session"},"Parent Session (optional)",-1)),E(l("select",{id:"parent-session","onUpdate:modelValue":e[14]||(e[14]=s=>Z(M)?M.value=s:null),class:"form-input"},[e[23]||(e[23]=l("option",{value:null}," None - create standalone session ",-1)),(r(!0),d(L,null,H(oe.value,s=>(r(),d("option",{key:s.id,value:s.id},D(s.name),9,zt))),128))],512),[[_,v(M)]]),e[25]||(e[25]=l("p",{class:"form-help"}," Choose a parent session to link this as a child session. Child sessions help organize related work. ",-1))])):h("",!0)],512)):h("",!0),l("div",Ht,[l("button",{type:"button",class:"btn btn-secondary",onClick:we}," Cancel "),l("button",{type:"submit",class:"btn btn-primary btn-submit",disabled:P.value},[P.value?(r(),d("span",Yt)):h("",!0),re(" "+D(v(w)?"Start Session":"Create Draft"),1)],8,Kt)])],32),$(et,{"is-open":te.value,"onUpdate:isOpen":e[15]||(e[15]=s=>te.value=s),"working-directory":he.value||"",mode:"insert","hide-builtin":!0,onInsert:Be},null,8,["is-open","working-directory"]),$(ze,{"is-open":le.value,"project-id":v(u).params.id,onClose:e[16]||(e[16]=s=>le.value=!1)},null,8,["is-open","project-id"])])}}},dl=de(Jt,[["__scopeId","data-v-7c8773e3"]]);export{dl as default};
@@ -1 +1 @@
1
- .form-help[data-v-59edf73d]{margin:.25rem 0 0;font-size:.75rem;color:var(--color-text-soft)}.git-loading[data-v-59edf73d]{display:flex;align-items:center;gap:.5rem;color:var(--color-text-soft);font-size:.875rem;margin-bottom:1rem}.segmented-control[data-v-59edf73d]{display:flex;background:var(--color-background-mute, var(--color-bg-soft, #2a2a3e));border:1px solid var(--color-border);border-radius:.5rem;padding:.1875rem;gap:.125rem}.segment-btn[data-v-59edf73d]{flex:1;padding:.375rem .75rem;font-size:.8125rem;font-weight:500;color:var(--color-text-soft);background:transparent;border:none;border-radius:.375rem;cursor:pointer;transition:background-color .15s,color .15s;white-space:nowrap}.segment-btn[data-v-59edf73d]:hover{color:var(--color-text)}.segment-btn--active[data-v-59edf73d]{background-color:var(--color-primary, var(--color-accent, #22c55e));color:#fff}.segment-btn--active[data-v-59edf73d]:hover{color:#fff}.segment-label-short[data-v-59edf73d]{display:none}.branch-input-row[data-v-59edf73d]{margin-top:.5rem}.form-label-small[data-v-59edf73d]{font-size:.75rem;margin-bottom:.25rem}.quick-branch-input[data-v-59edf73d]{display:flex;gap:.5rem;align-items:center}.quick-branch-input input[data-v-59edf73d]{flex:1}.btn-small[data-v-59edf73d]{padding:.25rem .5rem;font-size:.75rem}.current-branch-hint[data-v-59edf73d]{margin-top:.375rem;font-size:.75rem;color:var(--color-text-soft)}@media (max-width: 480px){.segment-btn[data-v-59edf73d]{padding:.375rem .5rem;font-size:.75rem}.segment-label-full[data-v-59edf73d]{display:none}.segment-label-short[data-v-59edf73d]{display:inline}}.form-group[data-v-cfbba021]{margin-bottom:1rem}.form-label[data-v-cfbba021]{display:block;margin-bottom:.5rem;font-weight:500;color:var(--color-text)}.form-input[data-v-cfbba021]{width:100%;padding:.5rem;border:1px solid var(--color-border);border-radius:var(--border-radius, 4px);background:var(--color-background);color:var(--color-text);font-size:.95rem}.form-input[data-v-cfbba021]:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px #22c5ff1a}.form-help[data-v-cfbba021]{margin-top:.25rem;font-size:.875rem;color:var(--color-text-soft)}.toggle-switch[data-v-cfbba021]{display:flex;align-items:center;cursor:pointer;gap:.75rem}.toggle-switch input[data-v-cfbba021]{display:none}.toggle-slider[data-v-cfbba021]{position:relative;display:inline-block;width:2.5rem;height:1.25rem;background-color:var(--color-border);border-radius:1rem;transition:background-color .2s}.toggle-slider[data-v-cfbba021]:after{content:"";position:absolute;width:1rem;height:1rem;border-radius:50%;background-color:#fff;top:.125rem;left:.125rem;transition:transform .2s}.toggle-switch input:checked+.toggle-slider[data-v-cfbba021]{background-color:var(--color-primary)}.toggle-switch input:checked+.toggle-slider[data-v-cfbba021]:after{transform:translate(1.25rem)}.toggle-label[data-v-cfbba021]{color:var(--color-text);font-weight:500}.reschedule-settings[data-v-cfbba021]{padding:1rem;margin-top:1rem;border-left:2px solid var(--color-primary);background:var(--color-background, rgba(255, 255, 255, .02))}.settings-label[data-v-cfbba021]{margin-bottom:.75rem;font-weight:500;font-size:.95rem;color:var(--color-text)}.checkbox-option[data-v-cfbba021]{display:flex;align-items:center;gap:.75rem;margin-bottom:.75rem;cursor:pointer}.checkbox-option input[data-v-cfbba021]{width:1rem;height:1rem;cursor:pointer}.checkbox-label[data-v-cfbba021]{color:var(--color-text)}.limits-section[data-v-cfbba021]{margin-top:1.5rem;padding-top:1rem;border-top:1px solid var(--color-border)}@media (max-width: 480px){.form-group[data-v-cfbba021]{margin-bottom:.5rem}}.back-link[data-v-058549da]{font-size:.875rem;color:var(--color-text-soft);display:inline-block;margin-bottom:.25rem;margin-top:0}h1[data-v-058549da]{margin-bottom:.5rem;margin-top:0}.form[data-v-058549da]{width:100%}.form-help[data-v-058549da]{margin:.5rem 0 0;font-size:.75rem;color:var(--color-text-soft)}.attachment-row[data-v-058549da]{margin-top:.5rem;display:flex;gap:.5rem;align-items:center}.form-actions[data-v-058549da]{display:flex;gap:.75rem;align-items:center;margin-top:1rem}.btn-submit[data-v-058549da]{flex:1;justify-content:center;text-align:center;padding-top:.75rem;padding-bottom:.75rem;font-size:1.05rem}.btn-secondary[data-v-058549da]{padding:.75rem 1.25rem;font-size:1.05rem;background:transparent;border:1px solid var(--color-border);color:var(--color-text-soft);border-radius:var(--border-radius, 4px);cursor:pointer;transition:border-color .15s,color .15s}.btn-secondary[data-v-058549da]:hover{border-color:var(--color-border-hover);color:var(--color-text)}.error-message[data-v-058549da]{color:var(--color-error);margin-bottom:1rem}.advanced-options[data-v-058549da]{margin-top:.5rem;margin-bottom:.5rem}@media (max-width: 480px){h1[data-v-058549da]{margin-bottom:.5rem;font-size:1.5rem}.form.card[data-v-058549da]{padding:.75rem}}@media (max-width: 640px){.form-actions[data-v-058549da]{position:sticky;bottom:0;background:var(--color-background-soft, var(--color-bg-soft, #1a1a2e));border-top:1px solid var(--color-border);padding:.75rem 1rem;margin:0 -1rem -1rem;padding-bottom:calc(.75rem + env(safe-area-inset-bottom));z-index:10}}
1
+ .form-help[data-v-59edf73d]{margin:.25rem 0 0;font-size:.75rem;color:var(--color-text-soft)}.git-loading[data-v-59edf73d]{display:flex;align-items:center;gap:.5rem;color:var(--color-text-soft);font-size:.875rem;margin-bottom:1rem}.segmented-control[data-v-59edf73d]{display:flex;background:var(--color-background-mute, var(--color-bg-soft, #2a2a3e));border:1px solid var(--color-border);border-radius:.5rem;padding:.1875rem;gap:.125rem}.segment-btn[data-v-59edf73d]{flex:1;padding:.375rem .75rem;font-size:.8125rem;font-weight:500;color:var(--color-text-soft);background:transparent;border:none;border-radius:.375rem;cursor:pointer;transition:background-color .15s,color .15s;white-space:nowrap}.segment-btn[data-v-59edf73d]:hover{color:var(--color-text)}.segment-btn--active[data-v-59edf73d]{background-color:var(--color-primary, var(--color-accent, #22c55e));color:#fff}.segment-btn--active[data-v-59edf73d]:hover{color:#fff}.segment-label-short[data-v-59edf73d]{display:none}.branch-input-row[data-v-59edf73d]{margin-top:.5rem}.form-label-small[data-v-59edf73d]{font-size:.75rem;margin-bottom:.25rem}.quick-branch-input[data-v-59edf73d]{display:flex;gap:.5rem;align-items:center}.quick-branch-input input[data-v-59edf73d]{flex:1}.btn-small[data-v-59edf73d]{padding:.25rem .5rem;font-size:.75rem}.current-branch-hint[data-v-59edf73d]{margin-top:.375rem;font-size:.75rem;color:var(--color-text-soft)}@media (max-width: 480px){.segment-btn[data-v-59edf73d]{padding:.375rem .5rem;font-size:.75rem}.segment-label-full[data-v-59edf73d]{display:none}.segment-label-short[data-v-59edf73d]{display:inline}}.form-group[data-v-cfbba021]{margin-bottom:1rem}.form-label[data-v-cfbba021]{display:block;margin-bottom:.5rem;font-weight:500;color:var(--color-text)}.form-input[data-v-cfbba021]{width:100%;padding:.5rem;border:1px solid var(--color-border);border-radius:var(--border-radius, 4px);background:var(--color-background);color:var(--color-text);font-size:.95rem}.form-input[data-v-cfbba021]:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px #22c5ff1a}.form-help[data-v-cfbba021]{margin-top:.25rem;font-size:.875rem;color:var(--color-text-soft)}.toggle-switch[data-v-cfbba021]{display:flex;align-items:center;cursor:pointer;gap:.75rem}.toggle-switch input[data-v-cfbba021]{display:none}.toggle-slider[data-v-cfbba021]{position:relative;display:inline-block;width:2.5rem;height:1.25rem;background-color:var(--color-border);border-radius:1rem;transition:background-color .2s}.toggle-slider[data-v-cfbba021]:after{content:"";position:absolute;width:1rem;height:1rem;border-radius:50%;background-color:#fff;top:.125rem;left:.125rem;transition:transform .2s}.toggle-switch input:checked+.toggle-slider[data-v-cfbba021]{background-color:var(--color-primary)}.toggle-switch input:checked+.toggle-slider[data-v-cfbba021]:after{transform:translate(1.25rem)}.toggle-label[data-v-cfbba021]{color:var(--color-text);font-weight:500}.reschedule-settings[data-v-cfbba021]{padding:1rem;margin-top:1rem;border-left:2px solid var(--color-primary);background:var(--color-background, rgba(255, 255, 255, .02))}.settings-label[data-v-cfbba021]{margin-bottom:.75rem;font-weight:500;font-size:.95rem;color:var(--color-text)}.checkbox-option[data-v-cfbba021]{display:flex;align-items:center;gap:.75rem;margin-bottom:.75rem;cursor:pointer}.checkbox-option input[data-v-cfbba021]{width:1rem;height:1rem;cursor:pointer}.checkbox-label[data-v-cfbba021]{color:var(--color-text)}.limits-section[data-v-cfbba021]{margin-top:1.5rem;padding-top:1rem;border-top:1px solid var(--color-border)}@media (max-width: 480px){.form-group[data-v-cfbba021]{margin-bottom:.5rem}}.back-link[data-v-7c8773e3]{font-size:.875rem;color:var(--color-text-soft);display:inline-block;margin-bottom:.25rem;margin-top:0}h1[data-v-7c8773e3]{margin-bottom:.5rem;margin-top:0}.form[data-v-7c8773e3]{width:100%}.form-help[data-v-7c8773e3]{margin:.5rem 0 0;font-size:.75rem;color:var(--color-text-soft)}.attachment-row[data-v-7c8773e3]{margin-top:.5rem;display:flex;gap:.5rem;align-items:center}.form-actions[data-v-7c8773e3]{display:flex;gap:.75rem;align-items:center;margin-top:1rem}.btn-submit[data-v-7c8773e3]{flex:1;justify-content:center;text-align:center;padding-top:.75rem;padding-bottom:.75rem;font-size:1.05rem}.btn-secondary[data-v-7c8773e3]{padding:.75rem 1.25rem;font-size:1.05rem;background:transparent;border:1px solid var(--color-border);color:var(--color-text-soft);border-radius:var(--border-radius, 4px);cursor:pointer;transition:border-color .15s,color .15s}.btn-secondary[data-v-7c8773e3]:hover{border-color:var(--color-border-hover);color:var(--color-text)}.error-message[data-v-7c8773e3]{color:var(--color-error);margin-bottom:1rem}.advanced-options[data-v-7c8773e3]{margin-top:.5rem;margin-bottom:.5rem}@media (max-width: 480px){h1[data-v-7c8773e3]{margin-bottom:.5rem;font-size:1.5rem}.form.card[data-v-7c8773e3]{padding:.75rem}}@media (max-width: 640px){.form-actions[data-v-7c8773e3]{position:sticky;bottom:0;background:var(--color-background-soft, var(--color-bg-soft, #1a1a2e));border-top:1px solid var(--color-border);padding:.75rem 1rem;margin:0 -1rem -1rem;padding-bottom:calc(.75rem + env(safe-area-inset-bottom));z-index:10}}
@@ -0,0 +1 @@
1
+ h1[data-v-5fa533cb]{margin-bottom:2rem}.loading-state[data-v-5fa533cb]{display:flex;align-items:center;gap:.5rem;justify-content:center;padding:3rem}.form[data-v-5fa533cb]{max-width:500px}.form-actions[data-v-5fa533cb]{display:flex;justify-content:space-between;align-items:center}.form-actions-right[data-v-5fa533cb]{display:flex;gap:.5rem}.error-message[data-v-5fa533cb]{color:var(--color-error);margin-bottom:1rem}.form-textarea[data-v-5fa533cb]{resize:vertical;min-height:120px;font-family:monospace;font-size:.875rem;line-height:1.5}.form-help[data-v-5fa533cb]{margin-top:.5rem;font-size:.875rem;color:var(--color-text-muted)}.advanced-settings[data-v-5fa533cb]{margin-bottom:1rem}.advanced-settings summary[data-v-5fa533cb]{cursor:pointer;color:var(--color-primary);font-weight:500;margin-bottom:1rem}.advanced-settings[open] summary[data-v-5fa533cb]{margin-bottom:1rem}.form-textarea-small[data-v-5fa533cb]{resize:vertical;min-height:60px;font-family:monospace;font-size:.875rem;line-height:1.5}.checkbox-label[data-v-5fa533cb]{display:flex;align-items:center;gap:.5rem;cursor:pointer;font-weight:500}.checkbox-label input[type=checkbox][data-v-5fa533cb]{width:1rem;height:1rem;cursor:pointer}.form-input[type=select][data-v-5fa533cb],select.form-input[data-v-5fa533cb]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23999' d='M6 9L1 4h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .75rem center;padding-right:2.5rem}.btn-link[data-v-5fa533cb]{background:none;border:none;color:var(--color-primary);font-size:.75rem;padding:0;margin-left:.5rem;cursor:pointer;text-decoration:underline}.btn-link[data-v-5fa533cb]:hover{color:var(--color-primary-hover)}
@@ -0,0 +1 @@
1
+ import{_ as z,k as J,o as X,l as H,a as f,c as p,b as t,u as S,f as i,j as Z,m as a,v as m,d as L,D as _,i as P,p as B,q as G,e as ee,t as te,w as se,s as oe,n as l,g as le,h as ae}from"./index-MnvuyUxj.js";import{u as ne}from"./projects-BpAyb9ba.js";import{u as re,a as ie,Q as ue}from"./QuickResponseSettings-DOZUtaRb.js";import{P as de}from"./InputWithButton-kjjnlpHt.js";import{M as fe}from"./ModelSelector-vRSpXjhL.js";import{a as pe}from"./ApiClient-CcqJ-GAv.js";import"./providers-Di1AKmPp.js";const me={class:"container"},ve={key:0,class:"loading-state"},be={class:"form-group"},ce={class:"form-group"},ge={class:"form-group"},ye={class:"input-with-button"},ke=["placeholder"],Se=["disabled"],we={class:"form-group"},Ce={class:"form-group"},he={class:"form-label",for:"systemPrompt"},Pe={class:"advanced-settings"},De={class:"form-group"},Ee={class:"form-group"},Ue={class:"advanced-settings"},Me={class:"form-group"},Re={class:"form-group"},Ve={class:"checkbox-label"},xe={class:"form-group"},Ie={class:"form-group"},je={class:"checkbox-label"},Le={class:"form-group"},Ne={class:"form-group"},Oe={class:"form-group"},Te=["disabled"],Be={key:0,class:"loading-spinner"},Ge={class:"advanced-settings"},Fe={class:"advanced-settings"},He={class:"form-group"},We={class:"checkbox-label"},Ae={key:0,class:"error-message"},Qe={class:"form-actions"},$e={class:"form-actions-right"},qe=["disabled"],Ke={key:0,class:"loading-spinner"},Ye={__name:"ProjectEditView",setup(ze){const D=_,n=oe(),F=ae(),v=ne(),E=re(),W=ie(),N=J(),U=l(""),r=l(""),w=l(""),M=l(""),u=l(""),R=l(""),V=l(""),x=l(!1),O=l(!1),b=l(""),C=l(!1),c=l(""),h=l(!0),g=l(""),y=l(""),k=l(""),I=l(!1),j=l(!1),d=l(null),T=l(!1);X(()=>{v.fetchProject(n.params.id),E.fetchDefaults(n.params.id),W.fetchForProject(n.params.id)}),H(()=>v.currentProject,s=>{s&&(U.value=s.name,r.value=s.workingDirectory,w.value=s.worktreePath||"",M.value=s.repoUrl||"",u.value=s.systemPrompt||D,R.value=s.onSessionCreated||"",V.value=s.onSessionDeleted||"",x.value=s.kanbanEnabled||!1)},{immediate:!0}),H(()=>E.getDefaultsForProject(n.params.id),s=>{s&&(b.value=s.mode||"",C.value=s.thinkingEnabled||!1,c.value=s.effortLevel??"",h.value=s.startImmediately!==!1,g.value=s.gitMode||"",y.value=s.gitBranch||"",k.value=s.model||"")},{immediate:!0});async function A(){if(r.value){O.value=!0;try{const s=await pe.detectWorktreePath(r.value);w.value=s.worktreePath}catch{}finally{O.value=!1}}}function Q(){const s={};return b.value&&(s.mode=b.value),C.value&&(s.thinkingEnabled=!0),c.value&&(s.effortLevel=c.value),h.value||(s.startImmediately=!1),g.value&&(s.gitMode=g.value),y.value&&(s.gitBranch=y.value),k.value&&(s.model=k.value),s}async function $(){I.value=!0,d.value=null;try{await v.updateProject(n.params.id,{name:U.value,workingDirectory:r.value,worktreePath:w.value||null,repoUrl:M.value||null,systemPrompt:u.value===D?null:u.value,onSessionCreated:R.value||null,onSessionDeleted:V.value||null,kanbanEnabled:x.value});const s=Q();Object.keys(s).length>0&&await E.updateDefaults(n.params.id,s),N.success("Repository updated"),F.push(`/projects/${n.params.id}/sessions`)}catch(s){d.value=s.message}finally{I.value=!1}}async function q(){if(confirm("Reset all session defaults to system defaults?")){j.value=!0,d.value=null;try{await E.resetDefaults(n.params.id),b.value="",C.value=!1,c.value="",h.value=!0,g.value="",y.value="",k.value="",N.success("Session defaults reset to system defaults")}catch(s){d.value=s.message}finally{j.value=!1}}}async function K(){if(confirm("Are you sure you want to delete this project?"))try{await v.deleteProject(n.params.id),N.success("Repository removed"),F.push("/")}catch(s){d.value=s.message}}return(s,e)=>{const Y=le("router-link");return f(),p("div",me,[e[58]||(e[58]=t("h1",null,"Edit Project",-1)),S(v).loading?(f(),p("div",ve,[...e[18]||(e[18]=[t("span",{class:"loading-spinner"},null,-1),i(" Loading... ",-1)])])):S(v).currentProject?(f(),p("form",{key:1,class:"form card",onSubmit:Z($,["prevent"])},[t("div",be,[e[19]||(e[19]=t("label",{class:"form-label",for:"name"},"Project Name",-1)),a(t("input",{id:"name","onUpdate:modelValue":e[0]||(e[0]=o=>U.value=o),type:"text",class:"form-input",required:""},null,512),[[m,U.value]])]),t("div",ce,[e[20]||(e[20]=t("label",{class:"form-label",for:"workingDirectory"},"Working Directory",-1)),L(de,{modelValue:r.value,"onUpdate:modelValue":e[1]||(e[1]=o=>r.value=o)},null,8,["modelValue"])]),t("div",ge,[e[21]||(e[21]=t("label",{class:"form-label",for:"worktreePath"},"Worktree Path",-1)),t("div",ye,[a(t("input",{id:"worktreePath","onUpdate:modelValue":e[2]||(e[2]=o=>w.value=o),type:"text",class:"form-input",placeholder:r.value+"/.worktrees"},null,8,ke),[[m,w.value]]),t("button",{type:"button",class:"btn btn-secondary btn-sm",disabled:!r.value||O.value,onClick:A}," Detect ",8,Se)]),e[22]||(e[22]=t("p",{class:"form-help"}," Where git worktrees are created for sessions. Changing this only affects new sessions. ",-1))]),t("div",we,[e[23]||(e[23]=t("label",{class:"form-label",for:"repoUrl"},"Repository URL",-1)),a(t("input",{id:"repoUrl","onUpdate:modelValue":e[3]||(e[3]=o=>M.value=o),type:"url",class:"form-input",placeholder:"https://github.com/username/repo"},null,512),[[m,M.value]]),e[24]||(e[24]=t("p",{class:"form-help"}," Link to the project's repository (e.g., GitHub, GitLab). This can be automatically populated from session summaries. ",-1))]),t("div",Ce,[t("label",he,[e[25]||(e[25]=i(" System Prompt ",-1)),u.value!==S(D)?(f(),p("button",{key:0,type:"button",class:"btn-link",onClick:e[4]||(e[4]=o=>u.value=S(D))}," Reset to Default ")):P("",!0)]),a(t("textarea",{id:"systemPrompt","onUpdate:modelValue":e[5]||(e[5]=o=>u.value=o),class:"form-input form-textarea",rows:"8"},null,512),[[m,u.value]]),e[26]||(e[26]=t("p",{class:"form-help"}," Customize the system prompt for the AI agent. The default prompt is pre-filled above. ",-1))]),t("details",Pe,[e[31]||(e[31]=t("summary",null,"Session Lifecycle Hooks",-1)),t("div",De,[e[27]||(e[27]=t("label",{class:"form-label",for:"onSessionCreated"},"On Session Created",-1)),a(t("textarea",{id:"onSessionCreated","onUpdate:modelValue":e[6]||(e[6]=o=>R.value=o),class:"form-input form-textarea-small",rows:"3",placeholder:"Shell command to run when a session is created..."},null,512),[[m,R.value]]),e[28]||(e[28]=t("p",{class:"form-help"}," Runs in the background after session creation. Environment variables: CIRCUSCHIEF_SESSION_ID, CIRCUSCHIEF_PROJECT_ID, CIRCUSCHIEF_SESSION_NAME ",-1))]),t("div",Ee,[e[29]||(e[29]=t("label",{class:"form-label",for:"onSessionDeleted"},"On Session Deleted",-1)),a(t("textarea",{id:"onSessionDeleted","onUpdate:modelValue":e[7]||(e[7]=o=>V.value=o),class:"form-input form-textarea-small",rows:"3",placeholder:"Shell command to run when a session is deleted..."},null,512),[[m,V.value]]),e[30]||(e[30]=t("p",{class:"form-help"}," Runs in the background after session deletion. Environment variables: CIRCUSCHIEF_SESSION_ID, CIRCUSCHIEF_PROJECT_ID, CIRCUSCHIEF_SESSION_NAME ",-1))])]),t("details",Ue,[e[49]||(e[49]=t("summary",null,"Session Defaults",-1)),e[50]||(e[50]=t("p",{class:"form-help"}," Set default values for new sessions created in this project. These values can be overridden when creating individual sessions. ",-1)),t("div",Me,[e[33]||(e[33]=t("label",{class:"form-label",for:"defaultMode"},"Mode",-1)),a(t("select",{id:"defaultMode","onUpdate:modelValue":e[8]||(e[8]=o=>b.value=o),class:"form-input"},[...e[32]||(e[32]=[t("option",{value:""}," Use system default (standard) ",-1),t("option",{value:"plan"}," Plan ",-1),t("option",{value:"standard"}," Standard ",-1),t("option",{value:"yolo"}," YOLO ",-1)])],512),[[B,b.value]])]),t("div",Re,[t("label",Ve,[a(t("input",{"onUpdate:modelValue":e[9]||(e[9]=o=>C.value=o),type:"checkbox"},null,512),[[G,C.value]]),e[34]||(e[34]=i(" Enable thinking (extended thinking) by default ",-1))]),e[35]||(e[35]=t("p",{class:"form-help"}," Enable the agent's extended thinking capability for new sessions. ",-1))]),t("div",xe,[e[37]||(e[37]=t("label",{class:"form-label",for:"defaultEffortLevel"},"Default Effort Level",-1)),a(t("select",{id:"defaultEffortLevel","onUpdate:modelValue":e[10]||(e[10]=o=>c.value=o),class:"form-input"},[...e[36]||(e[36]=[ee('<option value="" data-v-5fa533cb> Auto (default) </option><option value="low" data-v-5fa533cb> Low </option><option value="medium" data-v-5fa533cb> Medium </option><option value="high" data-v-5fa533cb> High </option><option value="max" data-v-5fa533cb> Max </option>',5)])],512),[[B,c.value]]),e[38]||(e[38]=t("p",{class:"form-help"}," Set the default effort level for new sessions. Controls how much effort the agent puts into responses. ",-1))]),t("div",Ie,[t("label",je,[a(t("input",{"onUpdate:modelValue":e[11]||(e[11]=o=>h.value=o),type:"checkbox"},null,512),[[G,h.value]]),e[39]||(e[39]=i(" Start sessions immediately ",-1))]),e[40]||(e[40]=t("p",{class:"form-help"},' When enabled, sessions will start automatically. When disabled, sessions will be created in "waiting" state. ',-1))]),t("div",Le,[e[42]||(e[42]=t("label",{class:"form-label",for:"defaultGitMode"},"Git Mode",-1)),a(t("select",{id:"defaultGitMode","onUpdate:modelValue":e[12]||(e[12]=o=>g.value=o),class:"form-input"},[...e[41]||(e[41]=[t("option",{value:""}," No git isolation ",-1),t("option",{value:"branch"}," Create branch for each session ",-1),t("option",{value:"worktree"}," Create worktree for each session ",-1)])],512),[[B,g.value]]),e[43]||(e[43]=t("p",{class:"form-help"}," Controls how git changes are isolated for each session. ",-1))]),t("div",Ne,[e[44]||(e[44]=t("label",{class:"form-label",for:"defaultGitBranch"},"Default Git Branch",-1)),a(t("input",{id:"defaultGitBranch","onUpdate:modelValue":e[13]||(e[13]=o=>y.value=o),type:"text",class:"form-input",placeholder:"e.g., feature/ai-implementation"},null,512),[[m,y.value]]),e[45]||(e[45]=t("p",{class:"form-help"}," When using git branch mode, this is the branch name pattern for new sessions. ",-1))]),t("div",Oe,[e[46]||(e[46]=t("label",{class:"form-label",for:"defaultModel"},"Model",-1)),L(fe,{modelValue:k.value,"onUpdate:modelValue":e[14]||(e[14]=o=>k.value=o),"allow-empty":!0,"empty-label":"Use system default","select-class":"form-input"},null,8,["modelValue"]),e[47]||(e[47]=t("p",{class:"form-help"}," Choose the default model for new sessions in this project. ",-1))]),t("button",{type:"button",class:"btn btn-secondary",disabled:j.value,onClick:q},[j.value?(f(),p("span",Be)):P("",!0),e[48]||(e[48]=i(" Reset to System Defaults ",-1))],8,Te)]),t("details",Ge,[e[51]||(e[51]=t("summary",null,"Quick Responses",-1)),e[52]||(e[52]=t("p",{class:"form-help"}," Quick responses are shortcuts that can be inserted into the chat input. You can create project-specific or global responses. ",-1)),t("button",{type:"button",class:"btn btn-secondary",onClick:e[15]||(e[15]=o=>T.value=!0)}," Manage Quick Responses ")]),t("details",Fe,[e[55]||(e[55]=t("summary",null,"Kanban Board",-1)),t("div",He,[t("label",We,[a(t("input",{"onUpdate:modelValue":e[16]||(e[16]=o=>x.value=o),type:"checkbox"},null,512),[[G,x.value]]),e[53]||(e[53]=i(" Enable Kanban board ",-1))]),e[54]||(e[54]=t("p",{class:"form-help"}," Enable a Kanban board to visually organize sessions into lanes. Sessions can be dragged between lanes, and lanes can trigger automated workflows. ",-1))])]),d.value?(f(),p("div",Ae,te(d.value),1)):P("",!0),t("div",Qe,[t("button",{type:"button",class:"btn btn-danger",onClick:K}," Delete "),t("div",$e,[L(Y,{to:`/projects/${S(n).params.id}/sessions`,class:"btn"},{default:se(()=>[...e[56]||(e[56]=[i(" Cancel ",-1)])]),_:1},8,["to"]),t("button",{type:"submit",class:"btn btn-primary",disabled:I.value},[I.value?(f(),p("span",Ke)):P("",!0),e[57]||(e[57]=i(" Save ",-1))],8,qe)])])],32)):P("",!0),L(ue,{"is-open":T.value,"project-id":S(n).params.id,onClose:e[17]||(e[17]=o=>T.value=!1)},null,8,["is-open","project-id"])])}}},ot=z(Ye,[["__scopeId","data-v-5fa533cb"]]);export{ot as default};
@@ -0,0 +1 @@
1
+ .page-header[data-v-7bcc5373]{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.page-header h1[data-v-7bcc5373]{margin:0}.add-repo-label-short[data-v-7bcc5373]{display:none}.skeleton-list[data-v-7bcc5373]{display:flex;flex-direction:column;gap:1rem}.error-message[data-v-7bcc5373]{color:var(--color-error);padding:1rem;background-color:#f851491a;border-radius:var(--border-radius)}.empty-state[data-v-7bcc5373]{text-align:center;padding:3rem 1rem}.welcome-hero[data-v-7bcc5373]{padding:2rem;margin-bottom:2rem}.welcome-heading[data-v-7bcc5373]{margin:0 0 .75rem;font-size:1.5rem}.welcome-subtitle[data-v-7bcc5373]{margin:0;color:var(--color-text-soft);font-size:1rem;line-height:1.5}.steps-grid[data-v-7bcc5373]{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;margin-bottom:2rem}.step-card[data-v-7bcc5373]{padding:1.5rem;text-align:center}.step-number[data-v-7bcc5373]{width:2rem;height:2rem;border-radius:50%;background-color:var(--color-primary);color:var(--color-background);display:inline-flex;align-items:center;justify-content:center;font-weight:600;font-size:.875rem;margin-bottom:.75rem}.step-title[data-v-7bcc5373]{margin:0 0 .5rem;font-size:.9375rem}.step-desc[data-v-7bcc5373]{margin:0;color:var(--color-text-soft);font-size:.875rem;line-height:1.4}.cta-button[data-v-7bcc5373]{display:inline-block}.project-list[data-v-7bcc5373]{display:flex;flex-direction:column;gap:1rem}.project-card[data-v-7bcc5373]{display:flex;justify-content:space-between;align-items:center;cursor:pointer;transition:background-color .15s ease}.project-card[data-v-7bcc5373]:hover{background-color:var(--color-background-soft)}.project-info[data-v-7bcc5373]{min-width:0;flex:1}.project-name[data-v-7bcc5373]{margin:0 0 .25rem;font-size:1rem}.project-path[data-v-7bcc5373]{margin:0;font-size:.875rem;color:var(--color-text-soft);font-family:var(--font-mono);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-meta[data-v-7bcc5373]{margin:.25rem 0 0;font-size:.8125rem;color:var(--color-text-soft)}.meta-separator[data-v-7bcc5373]{margin:0 .375rem}.project-actions[data-v-7bcc5373]{display:flex;gap:.5rem;flex-shrink:0;margin-left:1rem}.edit-label-short[data-v-7bcc5373]{display:none}@media (max-width: 640px){.empty-state[data-v-7bcc5373]{padding:2rem .5rem}}@media (max-width: 480px){.add-repo-label-full[data-v-7bcc5373]{display:none}.add-repo-label-short[data-v-7bcc5373]{display:inline}.welcome-hero[data-v-7bcc5373]{padding:1rem}.welcome-heading[data-v-7bcc5373]{font-size:1.25rem}.steps-grid[data-v-7bcc5373]{grid-template-columns:1fr;gap:0}.step-card[data-v-7bcc5373]{border-radius:0;border-bottom:1px solid var(--color-border);text-align:left;display:flex;align-items:center;gap:1rem;padding:1rem}.step-card[data-v-7bcc5373]:first-child{border-radius:var(--border-radius) var(--border-radius) 0 0}.step-card[data-v-7bcc5373]:last-child{border-radius:0 0 var(--border-radius) var(--border-radius);border-bottom:none}.step-number[data-v-7bcc5373]{margin-bottom:0;flex-shrink:0}.step-title[data-v-7bcc5373],.step-desc[data-v-7bcc5373]{text-align:left}.cta-button[data-v-7bcc5373]{width:100%;text-align:center}.project-card[data-v-7bcc5373]{padding:.75rem}.edit-label-full[data-v-7bcc5373]{display:none}.edit-label-short[data-v-7bcc5373]{display:inline}}
@@ -0,0 +1 @@
1
+ import{_ as h,o as y,a as e,c as a,b as o,d as l,w as p,u as c,F as u,r as _,t as d,e as f,f as k,g,h as C,i as n,j as w}from"./index-MnvuyUxj.js";import{u as A}from"./projects-BpAyb9ba.js";import{f as V}from"./useSummaryHelpers-GVg7sMWF.js";import"./ApiClient-CcqJ-GAv.js";const P={class:"container"},j={class:"page-header"},x={key:0,class:"skeleton-list"},S={key:1,class:"error-message"},N={key:2,class:"empty-state"},R={key:3,class:"project-list"},T=["onClick"],B={class:"project-info"},F={class:"project-name"},L={class:"project-path"},$={key:0,class:"project-meta"},D={key:0},E={key:1,class:"meta-separator"},I={key:2},M={class:"project-actions"},Y={__name:"ProjectListView",setup(W){const b=C(),i=A();function m(v){b.push(`/projects/${v}/sessions`)}return y(()=>{i.fetchProjects()}),(v,t)=>{const r=g("router-link");return e(),a("div",P,[o("div",j,[t[2]||(t[2]=o("h1",null,"Repositories",-1)),l(r,{to:"/projects/new",class:"btn btn-primary"},{default:p(()=>[...t[1]||(t[1]=[o("span",{class:"add-repo-label-full"},"Add Repository",-1),o("span",{class:"add-repo-label-short"},"+ Add",-1)])]),_:1})]),c(i).loading?(e(),a("div",x,[(e(),a(u,null,_(3,s=>o("div",{key:s,class:"skeleton card",style:{height:"80px"}})),64))])):c(i).error?(e(),a("div",S,d(c(i).error),1)):c(i).projects.length===0?(e(),a("div",N,[t[4]||(t[4]=f('<div class="welcome-hero card" data-v-7bcc5373><h2 class="welcome-heading" data-v-7bcc5373> Welcome to Circus Chief </h2><p class="welcome-subtitle" data-v-7bcc5373> Your command center for coding agent sessions. Point it at a codebase and start building. </p></div><div class="steps-grid" data-v-7bcc5373><div class="step-card card" data-v-7bcc5373><div class="step-number" data-v-7bcc5373> 1 </div><h3 class="step-title" data-v-7bcc5373> Pick a repo folder </h3><p class="step-desc" data-v-7bcc5373> Point to any codebase on your machine </p></div><div class="step-card card" data-v-7bcc5373><div class="step-number" data-v-7bcc5373> 2 </div><h3 class="step-title" data-v-7bcc5373> Create coding sessions </h3><p class="step-desc" data-v-7bcc5373> Start tasks with your AI coding agent </p></div><div class="step-card card" data-v-7bcc5373><div class="step-number" data-v-7bcc5373> 3 </div><h3 class="step-title" data-v-7bcc5373> Track changes &amp; artifacts </h3><p class="step-desc" data-v-7bcc5373> View diffs, canvas, and conversation history </p></div></div>',2)),l(r,{to:"/projects/new",class:"btn btn-primary cta-button"},{default:p(()=>[...t[3]||(t[3]=[k(" Add Your First Repository ",-1)])]),_:1})])):(e(),a("div",R,[(e(!0),a(u,null,_(c(i).projects,s=>(e(),a("div",{key:s.id,class:"project-card card",onClick:q=>m(s.id)},[o("div",B,[o("h3",F,d(s.name),1),o("p",L,d(s.workingDirectory),1),s.sessionCount>0||s.lastActivityAt?(e(),a("p",$,[s.sessionCount>0?(e(),a("span",D,d(s.sessionCount)+" session"+d(s.sessionCount!==1?"s":""),1)):n("",!0),s.sessionCount>0&&s.lastActivityAt?(e(),a("span",E,"·")):n("",!0),s.lastActivityAt?(e(),a("span",I,d(c(V)(s.lastActivityAt)),1)):n("",!0)])):n("",!0)]),o("div",M,[l(r,{to:`/projects/${s.id}/edit`,class:"btn edit-btn",onClick:t[0]||(t[0]=w(()=>{},["stop"]))},{default:p(()=>[...t[5]||(t[5]=[o("span",{class:"edit-label-full"},"Edit",-1),o("span",{class:"edit-label-short","aria-hidden":"true"},"⚙",-1)])]),_:1},8,["to"])])],8,T))),128))]))])}}},K=h(Y,[["__scopeId","data-v-7bcc5373"]]);export{K as default};
@@ -0,0 +1 @@
1
+ h1[data-v-3fea4262]{margin-bottom:2rem}.form[data-v-3fea4262]{max-width:500px}.form-actions[data-v-3fea4262]{display:flex;gap:.5rem;justify-content:flex-end}.error-message[data-v-3fea4262]{color:var(--color-error);margin-bottom:1rem}.advanced-settings[data-v-3fea4262]{margin-bottom:1rem}.advanced-settings summary[data-v-3fea4262]{cursor:pointer;color:var(--color-primary);font-weight:500;margin-bottom:1rem}.advanced-settings[open] summary[data-v-3fea4262]{margin-bottom:1rem}.form-textarea[data-v-3fea4262]{resize:vertical;min-height:120px;font-family:monospace;font-size:.875rem;line-height:1.5}.form-help[data-v-3fea4262]{margin-top:.5rem;font-size:.875rem;color:var(--color-text-muted)}.form-textarea-small[data-v-3fea4262]{resize:vertical;min-height:60px;font-family:monospace;font-size:.875rem;line-height:1.5}.btn-link[data-v-3fea4262]{background:none;border:none;color:var(--color-primary);font-size:.75rem;padding:0;margin-left:.5rem;cursor:pointer;text-decoration:underline}.btn-link[data-v-3fea4262]:hover{color:var(--color-primary-hover)}@media (max-width: 480px){.form[data-v-3fea4262]{max-width:none}.form-actions[data-v-3fea4262]{flex-direction:column-reverse}.form-actions .btn[data-v-3fea4262]{width:100%;justify-content:center;min-height:44px}}
@@ -0,0 +1 @@
1
+ import{_ as A,k as O,l as T,a as f,c as v,b as t,d as E,m as u,v as d,f as k,u as h,D as R,i as w,t as j,w as H,j as M,n as s,g as W,h as B}from"./index-MnvuyUxj.js";import{u as $}from"./projects-BpAyb9ba.js";import{P as J}from"./InputWithButton-kjjnlpHt.js";import{a as L}from"./ApiClient-CcqJ-GAv.js";const q={class:"container"},z={class:"form-group"},Y={class:"form-group"},G={class:"advanced-settings"},K={class:"form-group"},Q={class:"input-with-button"},X=["disabled"],Z={class:"form-group"},ee={class:"form-label",for:"systemPrompt"},te={class:"form-group"},oe={class:"form-group"},se={key:0,class:"error-message"},le={class:"form-actions"},ae=["disabled"],re={key:0,class:"loading-spinner"},ne={__name:"ProjectNewView",setup(ie,{expose:_}){const x=B(),N=$(),U=O(),c=R,n=s(""),a=s(""),i=s(""),r=s(R),S=s(""),b=s(""),m=s(!1),p=s(null),y=s(!1),I=s(!0),C=s(!0);T(a,l=>{if(l&&I.value){const e=l.replace(/\/+$/,"").split("/");n.value=e[e.length-1]||""}l&&C.value&&D()});function g(){I.value=!1}function P(){C.value=!1}async function D(){if(a.value){y.value=!0;try{const l=await L.detectWorktreePath(a.value);i.value=l.worktreePath,C.value=!0}catch{}finally{y.value=!1}}}_({name:n,workingDirectory:a,worktreePath:i,onNameInput:g,onWorktreePathInput:P});async function V(){m.value=!0,p.value=null;try{const l=await N.createProject({name:n.value,workingDirectory:a.value,systemPrompt:r.value===c?null:r.value,onSessionCreated:S.value||void 0,onSessionDeleted:b.value||void 0,worktreePath:i.value||null});U.success("Repository added"),x.push(`/projects/${l.id}/sessions`)}catch(l){p.value=l.message}finally{m.value=!1}}return(l,e)=>{const F=W("router-link");return f(),v("div",q,[e[21]||(e[21]=t("h1",null,"Add a Repository",-1)),t("form",{class:"form card",onSubmit:M(V,["prevent"])},[t("div",z,[e[7]||(e[7]=t("label",{class:"form-label",for:"workingDirectory"},"Repository Folder",-1)),E(J,{modelValue:a.value,"onUpdate:modelValue":e[0]||(e[0]=o=>a.value=o)},null,8,["modelValue"]),e[8]||(e[8]=t("p",{class:"form-help"}," The root of your codebase — typically a git repository. ",-1))]),t("div",Y,[e[9]||(e[9]=t("label",{class:"form-label",for:"name"},"Display Name",-1)),u(t("input",{id:"name","onUpdate:modelValue":e[1]||(e[1]=o=>n.value=o),type:"text",class:"form-input",placeholder:"my-app",required:"",onInput:g},null,544),[[d,n.value]])]),t("details",G,[e[18]||(e[18]=t("summary",null,"Advanced Settings",-1)),t("div",K,[e[10]||(e[10]=t("label",{class:"form-label",for:"worktreePath"},"Worktree Path",-1)),t("div",Q,[u(t("input",{id:"worktreePath","onUpdate:modelValue":e[2]||(e[2]=o=>i.value=o),type:"text",class:"form-input",placeholder:"/path/to/.worktrees",onInput:P},null,544),[[d,i.value]]),t("button",{type:"button",class:"btn btn-secondary btn-sm",disabled:!a.value||y.value,onClick:D}," Detect ",8,X)]),e[11]||(e[11]=t("p",{class:"form-help"}," Directory where git worktrees will be created for sessions. Leave empty to use the default. ",-1))]),t("div",Z,[t("label",ee,[e[12]||(e[12]=k(" System Prompt ",-1)),r.value!==h(c)?(f(),v("button",{key:0,type:"button",class:"btn-link",onClick:e[3]||(e[3]=o=>r.value=h(c))}," Reset to Default ")):w("",!0)]),u(t("textarea",{id:"systemPrompt","onUpdate:modelValue":e[4]||(e[4]=o=>r.value=o),class:"form-input form-textarea",rows:"8"},null,512),[[d,r.value]]),e[13]||(e[13]=t("p",{class:"form-help"}," Customize the system prompt for the AI agent. The default prompt is pre-filled above. ",-1))]),t("div",te,[e[14]||(e[14]=t("label",{class:"form-label",for:"onSessionCreated"},"On Session Created",-1)),u(t("textarea",{id:"onSessionCreated","onUpdate:modelValue":e[5]||(e[5]=o=>S.value=o),class:"form-input form-textarea-small",rows:"3",placeholder:"Shell command to run when a session is created..."},null,512),[[d,S.value]]),e[15]||(e[15]=t("p",{class:"form-help"}," Runs in the background after session creation. Environment variables: CIRCUSCHIEF_SESSION_ID, CIRCUSCHIEF_PROJECT_ID, CIRCUSCHIEF_SESSION_NAME ",-1))]),t("div",oe,[e[16]||(e[16]=t("label",{class:"form-label",for:"onSessionDeleted"},"On Session Deleted",-1)),u(t("textarea",{id:"onSessionDeleted","onUpdate:modelValue":e[6]||(e[6]=o=>b.value=o),class:"form-input form-textarea-small",rows:"3",placeholder:"Shell command to run when a session is deleted..."},null,512),[[d,b.value]]),e[17]||(e[17]=t("p",{class:"form-help"}," Runs in the background after session deletion. Environment variables: CIRCUSCHIEF_SESSION_ID, CIRCUSCHIEF_PROJECT_ID, CIRCUSCHIEF_SESSION_NAME ",-1))])]),p.value?(f(),v("div",se,j(p.value),1)):w("",!0),t("div",le,[E(F,{to:"/",class:"btn"},{default:H(()=>[...e[19]||(e[19]=[k(" Cancel ",-1)])]),_:1}),t("button",{type:"submit",class:"btn btn-primary",disabled:m.value},[m.value?(f(),v("span",re)):w("",!0),e[20]||(e[20]=k(" Add Repository ",-1))],8,ae)])],32)])}}},fe=A(ne,[["__scopeId","data-v-3fea4262"]]);export{fe as default};
@@ -1 +1 @@
1
- import{i as Q,m as te,x as q,l as M,_ as W,a as n,c as i,b as e,q as se,F as R,r as K,j as P,v as N,n as oe,t as k,u as t,h as z,e as B,a1 as le,d as X,k as $,E as ae,$ as J,o as ne}from"./index-CSOPrlmq.js";import{u as Z}from"./providers-B__J6FX0.js";import"./ApiClient-Dbs1H78V.js";function ee(){return{name:"",baseUrl:null,authToken:null,apiTimeoutMs:null,additionalEnvVars:{}}}function ie(_){const v={name:_.name,baseUrl:_.baseUrl,authToken:_.authToken==="••••••••"?null:_.authToken,apiTimeoutMs:_.apiTimeoutMs,additionalEnvVars:_.additionalEnvVars?{..._.additionalEnvVars}:{}},m=Object.keys(v.additionalEnvVars),u=(_.models||[]).map(d=>({_serverId:d.id,modelId:d.modelId,displayName:d.displayName,tier:d.tier||"custom"}));return{formData:v,envKeys:m,models:u,authModified:!1}}function de(){return{form:M(ee()),localModels:M([]),envVarKeys:M([]),showAuthToken:M(!1),saving:M(!1),testing:M(!1),error:M(null),testResult:M(null),authTokenModified:M(!1)}}function re(_,v,m){const u=Z(),d=Q(),b=de(),{form:a,localModels:y,envVarKeys:g,showAuthToken:S,saving:w,testing:h,error:C,testResult:U,authTokenModified:I}=b,V=q(()=>!!v.value),l=q(()=>a.value.name.trim().length>0),r=q(()=>a.value.baseUrl||a.value.authToken);te(()=>[_.value,v.value],([s,c])=>{if(s){if(c){const p=ie(c);a.value=p.formData,g.value=p.envKeys,y.value=p.models,I.value=p.authModified}else a.value=ee(),g.value=[],y.value=[],I.value=!0;S.value=!1,C.value=null,U.value=null}},{deep:!0});function A(){y.value.push({modelId:"",displayName:"",tier:"custom"})}function H(s){y.value.splice(s,1)}function j(){const s=`ENV_VAR_${Object.keys(a.value.additionalEnvVars).length+1}`;a.value.additionalEnvVars[s]="",g.value.push(s)}function L(s){delete a.value.additionalEnvVars[s],g.value=g.value.filter(c=>c!==s)}function D(s,c){const p=g.value[s];if(p!==c&&p.trim()){const E=a.value.additionalEnvVars[c];delete a.value.additionalEnvVars[c],a.value.additionalEnvVars[p]=E}}async function F(){h.value=!0,C.value=null,U.value=null;try{const s=y.value.find(p=>p.tier==="sonnet"),c={baseUrl:a.value.baseUrl||void 0,authToken:a.value.authToken||void 0,defaultSonnetModel:(s==null?void 0:s.modelId)||void 0,apiTimeoutMs:a.value.apiTimeoutMs||void 0};U.value=await u.testConnection(c)}catch(s){C.value=s.message}finally{h.value=!1}}function Y(s,c){return s.modelId.trim()!==c.modelId||s.displayName.trim()!==c.displayName||s.tier!==c.tier}function o(s){return{modelId:s.modelId.trim(),displayName:s.displayName.trim()||s.modelId.trim(),tier:s.tier||"custom"}}async function f(s,c,p){if(!s._serverId&&s.modelId.trim()){await u.addModel(c,o(s));return}const E=p.get(s._serverId);E&&Y(s,E)&&await u.updateModel(c,s._serverId,o(s))}async function x(s){var G;const c=new Set(y.value.filter(T=>T._serverId).map(T=>T._serverId)),p=((G=v.value)==null?void 0:G.models)||[],E=new Map(p.map(T=>[T.id,T]));for(const T of p)c.has(T.id)||await u.removeModel(s,T.id);for(const T of y.value)await f(T,s,E);await u.fetchProviders()}async function O(){var s,c;w.value=!0,C.value=null;try{const p={name:a.value.name.trim(),baseUrl:((s=a.value.baseUrl)==null?void 0:s.trim())||null,apiTimeoutMs:a.value.apiTimeoutMs||null,additionalEnvVars:Object.keys(a.value.additionalEnvVars).length>0?a.value.additionalEnvVars:null};I.value&&(p.authToken=((c=a.value.authToken)==null?void 0:c.trim())||null);let E;V.value?(E=await u.updateProvider(v.value.id,p),d.success("Provider updated successfully")):(E=await u.createProvider(p),d.success("Provider created successfully")),await x(E.id),m()}catch(p){C.value=p.message}finally{w.value=!1}}return{form:a,localModels:y,envVarKeys:g,showAuthToken:S,saving:w,testing:h,error:C,testResult:U,authTokenModified:I,isEditing:V,isValid:l,canTest:r,addLocalModel:A,removeLocalModel:H,addEnvVar:j,removeEnvVar:L,updateEnvVarKey:D,testConnection:F,save:O}}const ue={class:"models-section"},ce={key:0,class:"models-list"},ve=["onUpdate:modelValue"],me=["onUpdate:modelValue"],pe=["onUpdate:modelValue"],fe=["onClick"],be={key:1,class:"models-empty"},ye={__name:"ProviderModelsList",props:{models:{type:Array,required:!0}},emits:["add","remove"],setup(_){return(v,m)=>(n(),i("div",ue,[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)),_.models.length>0?(n(),i("div",ce,[m[2]||(m[2]=se('<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)),(n(!0),i(R,null,K(_.models,(u,d)=>(n(),i("div",{key:d,class:"model-row"},[P(e("input",{"onUpdate:modelValue":b=>u.modelId=b,type:"text",placeholder:"anthropic.claude-3-sonnet-…",class:"col-model-id model-input"},null,8,ve),[[N,u.modelId]]),P(e("input",{"onUpdate:modelValue":b=>u.displayName=b,type:"text",placeholder:"My Sonnet",class:"col-display-name model-input"},null,8,me),[[N,u.displayName]]),P(e("select",{"onUpdate:modelValue":b=>u.tier=b,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,pe),[[oe,u.tier]]),e("button",{type:"button",class:"col-actions remove-model-btn",title:"Remove model",onClick:b=>v.$emit("remove",d)}," × ",8,fe)]))),128))])):(n(),i("div",be," No models added yet. ")),e("button",{type:"button",class:"btn btn-sm btn-secondary add-model-btn",onClick:m[0]||(m[0]=u=>v.$emit("add"))}," + Add Model ")]))}},_e=W(ye,[["__scopeId","data-v-3aa7217a"]]),ke={class:"modal"},he={class:"modal-header"},ge={class:"modal-body"},Ve={class:"form-group"},Me={class:"form-group"},$e={class:"form-group"},Te={class:"token-input-wrapper"},Ce=["type"],Ee=["title"],we={class:"expandable-section"},Pe={class:"section-content"},Ue={class:"form-group"},Ie={class:"form-group"},Se={class:"env-vars-list"},Ae=["onUpdate:modelValue","onBlur"],Ne=["onUpdate:modelValue"],Be=["onClick"],De={key:0,class:"error-message"},xe={class:"test-result-header"},Oe={class:"test-icon"},Fe={class:"test-message"},Le={key:0,class:"test-details"},Re={key:0,class:"test-detail"},Ke={key:1,class:"test-detail"},He={class:"modal-footer"},je=["disabled"],qe={class:"footer-actions"},ze=["disabled"],We=["disabled"],Ye={__name:"ProviderForm",props:{isOpen:{type:Boolean,default:!1},provider:{type:Object,default:null}},emits:["close","saved"],setup(_,{emit:v}){const m=_,u=v,{form:d,localModels:b,envVarKeys:a,showAuthToken:y,saving:g,testing:S,error:w,testResult:h,authTokenModified:C,isEditing:U,isValid:I,canTest:V,addLocalModel:l,removeLocalModel:r,addEnvVar:A,removeEnvVar:H,updateEnvVarKey:j,testConnection:L,save:D}=re(J(m,"isOpen"),J(m,"provider"),()=>u("saved"));function F(){u("close")}return(Y,o)=>_.isOpen?(n(),i("div",{key:0,class:"modal-overlay",onClick:z(F,["self"])},[e("div",ke,[e("div",he,[e("h2",null,k(t(U)?"Edit Provider":"Add Provider"),1),e("button",{type:"button",class:"close-btn",title:"Close",onClick:F}," × ")]),e("div",ge,[e("form",{onSubmit:o[7]||(o[7]=z((...f)=>t(D)&&t(D)(...f),["prevent"]))},[e("div",Ve,[o[10]||(o[10]=e("label",{for:"provider-name"},"Provider Name*",-1)),P(e("input",{id:"provider-name","onUpdate:modelValue":o[0]||(o[0]=f=>t(d).name=f),type:"text",placeholder:"e.g., AWS Bedrock",required:"",maxlength:"100"},null,512),[[N,t(d).name]])]),e("div",Me,[o[11]||(o[11]=e("label",{for:"base-url"},[B(" Base URL "),e("span",{class:"label-hint"},"(ANTHROPIC_BASE_URL)")],-1)),P(e("input",{id:"base-url","onUpdate:modelValue":o[1]||(o[1]=f=>t(d).baseUrl=f),type:"url",placeholder:"https://bedrock-runtime.us-east-1.amazonaws.com"},null,512),[[N,t(d).baseUrl]])]),e("div",$e,[o[12]||(o[12]=e("label",{for:"auth-token"},[B(" Auth Token "),e("span",{class:"label-hint"},"(ANTHROPIC_AUTH_TOKEN)")],-1)),e("div",Te,[P(e("input",{id:"auth-token","onUpdate:modelValue":o[2]||(o[2]=f=>t(d).authToken=f),type:t(y)?"text":"password",placeholder:"Your authentication token",onInput:o[3]||(o[3]=f=>C.value=!0)},null,40,Ce),[[le,t(d).authToken]]),e("button",{type:"button",class:"toggle-visibility-btn",title:t(y)?"Hide":"Show",onClick:o[4]||(o[4]=f=>y.value=!t(y))},k(t(y)?"Hide":"Show"),9,Ee)])]),X(_e,{models:t(b),onAdd:t(l),onRemove:t(r)},null,8,["models","onAdd","onRemove"]),e("details",we,[o[15]||(o[15]=e("summary",{class:"section-header"}," Advanced Settings ",-1)),e("div",Pe,[e("div",Ue,[o[13]||(o[13]=e("label",{for:"api-timeout"},"API Timeout (ms)",-1)),P(e("input",{id:"api-timeout","onUpdate:modelValue":o[5]||(o[5]=f=>t(d).apiTimeoutMs=f),type:"number",placeholder:"120000",min:"1000",step:"1000"},null,512),[[N,t(d).apiTimeoutMs,void 0,{number:!0}]])]),e("div",Ie,[o[14]||(o[14]=e("label",null,"Additional Environment Variables",-1)),e("div",Se,[(n(!0),i(R,null,K(t(d).additionalEnvVars,(f,x,O)=>(n(),i("div",{key:O,class:"env-var-row"},[P(e("input",{"onUpdate:modelValue":s=>t(a)[O]=s,type:"text",placeholder:"KEY",class:"env-key",onBlur:s=>t(j)(O,x)},null,40,Ae),[[N,t(a)[O]]]),P(e("input",{"onUpdate:modelValue":s=>t(d).additionalEnvVars[x]=s,type:"text",placeholder:"value",class:"env-value"},null,8,Ne),[[N,t(d).additionalEnvVars[x]]]),e("button",{type:"button",class:"remove-env-btn",title:"Remove",onClick:s=>t(H)(x)}," × ",8,Be)]))),128)),e("button",{type:"button",class:"btn btn-sm btn-secondary",onClick:o[6]||(o[6]=(...f)=>t(A)&&t(A)(...f))}," + Add Variable ")])])])]),t(w)?(n(),i("div",De,k(t(w)),1)):$("",!0),t(h)?(n(),i("div",{key:1,class:ae(["test-result",t(h).success?"success":"failure"])},[e("div",xe,[e("span",Oe,k(t(h).success?"✓":"✗"),1),e("span",Fe,k(t(h).message),1)]),t(h).details?(n(),i("div",Le,[t(h).details.model?(n(),i("div",Re,[o[16]||(o[16]=B(" Model: ",-1)),e("code",null,k(t(h).details.model),1)])):$("",!0),t(h).details.code?(n(),i("div",Ke,[o[17]||(o[17]=B(" Error Code: ",-1)),e("code",null,k(t(h).details.code),1)])):$("",!0)])):$("",!0)],2)):$("",!0)],32)]),e("div",He,[e("button",{type:"button",class:"btn btn-secondary",disabled:t(g)||t(S)||!t(V),onClick:o[8]||(o[8]=(...f)=>t(L)&&t(L)(...f))},k(t(S)?"Testing...":"Test Connection"),9,je),e("div",qe,[e("button",{type:"button",class:"btn btn-secondary",disabled:t(g),onClick:F}," Cancel ",8,ze),e("button",{type:"button",class:"btn btn-primary",disabled:t(g)||!t(I),onClick:o[9]||(o[9]=(...f)=>t(D)&&t(D)(...f))},k(t(g)?"Saving...":"Save"),9,We)])])])])):$("",!0)}},Ge=W(Ye,[["__scopeId","data-v-a4048df1"]]),Je={class:"container"},Qe={key:0,class:"skeleton-list"},Xe={key:1,class:"error-message"},Ze={key:2,class:"provider-list"},et={class:"provider-header"},tt={class:"provider-title"},st={key:0,class:"built-in-badge"},ot={class:"provider-actions"},lt=["disabled","onClick"],at=["onClick"],nt=["onClick"],it={class:"provider-details"},dt={key:0,class:"provider-detail"},rt={class:"detail-value"},ut={key:1,class:"provider-detail"},ct={class:"detail-value"},vt={key:2,class:"provider-detail"},mt={class:"modal confirm-modal"},pt={class:"modal-header"},ft={class:"modal-body"},bt={class:"modal-footer"},yt=["disabled"],_t={__name:"ProvidersView",setup(_){const v=Z(),m=Q(),u=M(!1),d=M(null),b=M(null),a=M(!1),y=M(null);ne(()=>{v.fetchProviders()});function g(){d.value=null,u.value=!0}function S(V){d.value=V,u.value=!0}function w(){u.value=!1,d.value=null}function h(){w(),v.fetchProviders()}async function C(V){y.value=V;try{const l=await v.testExistingProvider(V);l.success?m.success(`Connection successful (model: ${l.details.model})`):m.error(`Connection failed: ${l.message}`)}catch(l){m.error(`Test failed: ${l.message}`)}finally{y.value=null}}function U(V){b.value=V}async function I(){a.value=!0;try{await v.deleteProvider(b.value.id),m.success("Provider deleted"),b.value=null}catch(V){m.error(`Failed to delete provider: ${V.message}`)}finally{a.value=!1}}return(V,l)=>(n(),i("div",Je,[e("div",{class:"page-header"},[e("button",{class:"btn btn-primary",onClick:g},[...l[3]||(l[3]=[e("span",null,"+ Add Provider",-1)])])]),l[11]||(l[11]=e("p",{class:"page-description"}," Configure custom model providers to use Claude through alternative endpoints like AWS Bedrock, Google Vertex AI, or self-hosted proxies. ",-1)),t(v).loading?(n(),i("div",Qe,[(n(),i(R,null,K(3,r=>e("div",{key:r,class:"skeleton card",style:{height:"120px"}})),64))])):t(v).error?(n(),i("div",Xe,k(t(v).error),1)):(n(),i("div",Ze,[(n(!0),i(R,null,K(t(v).providers,r=>(n(),i("div",{key:r.id,class:"provider-card card"},[e("div",et,[e("div",tt,[e("h3",null,[B(k(r.name)+" ",1),r.isBuiltIn?(n(),i("span",st,"Built-in")):$("",!0)])]),e("div",ot,[r.isBuiltIn?$("",!0):(n(),i("button",{key:0,class:"btn btn-sm",disabled:y.value===r.id,title:"Test Connection",onClick:A=>C(r.id)},k(y.value===r.id?"Testing...":"Test"),9,lt)),r.isBuiltIn?$("",!0):(n(),i("button",{key:1,class:"btn btn-sm",onClick:A=>S(r)}," Edit ",8,at)),r.isBuiltIn?$("",!0):(n(),i("button",{key:2,class:"btn btn-sm btn-danger",onClick:A=>U(r)}," Delete ",8,nt))])]),e("div",it,[r.baseUrl?(n(),i("div",dt,[l[4]||(l[4]=e("span",{class:"detail-label"},"Base URL:",-1)),e("code",rt,k(r.baseUrl),1)])):$("",!0),r.defaultSonnetModel?(n(),i("div",ut,[l[5]||(l[5]=e("span",{class:"detail-label"},"Default Sonnet Model:",-1)),e("code",ct,k(r.defaultSonnetModel),1)])):$("",!0),!r.baseUrl&&r.isBuiltIn?(n(),i("div",vt,[...l[6]||(l[6]=[e("span",{class:"detail-value"},"Uses official Anthropic API",-1)])])):$("",!0)])]))),128))])),X(Ge,{"is-open":u.value,provider:d.value,onClose:w,onSaved:h},null,8,["is-open","provider"]),b.value?(n(),i("div",{key:3,class:"modal-overlay",onClick:l[2]||(l[2]=z(r=>b.value=null,["self"]))},[e("div",mt,[e("div",pt,[l[7]||(l[7]=e("h2",null,"Delete Provider",-1)),e("button",{type:"button",class:"close-btn",onClick:l[0]||(l[0]=r=>b.value=null)}," × ")]),e("div",ft,[e("p",null,[l[8]||(l[8]=B("Are you sure you want to delete ",-1)),e("strong",null,k(b.value.name),1),l[9]||(l[9]=B("?",-1))]),l[10]||(l[10]=e("p",{class:"warning-text"}," This action cannot be undone. ",-1))]),e("div",bt,[e("button",{type:"button",class:"btn btn-secondary",onClick:l[1]||(l[1]=r=>b.value=null)}," Cancel "),e("button",{type:"button",class:"btn btn-danger",disabled:a.value,onClick:I},k(a.value?"Deleting...":"Delete"),9,yt)])])])):$("",!0)]))}},Vt=W(_t,[["__scopeId","data-v-27d620fd"]]);export{Vt as default};
1
+ import{k as Q,l as te,x as q,n as M,_ as W,a as n,c as i,b as e,e as se,F as R,r as K,m as P,v as N,p as oe,t as k,u as t,j as z,f as B,a1 as le,d as X,i as $,E as ae,$ as J,o as ne}from"./index-MnvuyUxj.js";import{u as Z}from"./providers-Di1AKmPp.js";import"./ApiClient-CcqJ-GAv.js";function ee(){return{name:"",baseUrl:null,authToken:null,apiTimeoutMs:null,additionalEnvVars:{}}}function ie(_){const v={name:_.name,baseUrl:_.baseUrl,authToken:_.authToken==="••••••••"?null:_.authToken,apiTimeoutMs:_.apiTimeoutMs,additionalEnvVars:_.additionalEnvVars?{..._.additionalEnvVars}:{}},m=Object.keys(v.additionalEnvVars),u=(_.models||[]).map(d=>({_serverId:d.id,modelId:d.modelId,displayName:d.displayName,tier:d.tier||"custom"}));return{formData:v,envKeys:m,models:u,authModified:!1}}function de(){return{form:M(ee()),localModels:M([]),envVarKeys:M([]),showAuthToken:M(!1),saving:M(!1),testing:M(!1),error:M(null),testResult:M(null),authTokenModified:M(!1)}}function re(_,v,m){const u=Z(),d=Q(),b=de(),{form:a,localModels:y,envVarKeys:g,showAuthToken:S,saving:w,testing:h,error:C,testResult:U,authTokenModified:I}=b,V=q(()=>!!v.value),l=q(()=>a.value.name.trim().length>0),r=q(()=>a.value.baseUrl||a.value.authToken);te(()=>[_.value,v.value],([s,c])=>{if(s){if(c){const p=ie(c);a.value=p.formData,g.value=p.envKeys,y.value=p.models,I.value=p.authModified}else a.value=ee(),g.value=[],y.value=[],I.value=!0;S.value=!1,C.value=null,U.value=null}},{deep:!0});function A(){y.value.push({modelId:"",displayName:"",tier:"custom"})}function H(s){y.value.splice(s,1)}function j(){const s=`ENV_VAR_${Object.keys(a.value.additionalEnvVars).length+1}`;a.value.additionalEnvVars[s]="",g.value.push(s)}function L(s){delete a.value.additionalEnvVars[s],g.value=g.value.filter(c=>c!==s)}function D(s,c){const p=g.value[s];if(p!==c&&p.trim()){const E=a.value.additionalEnvVars[c];delete a.value.additionalEnvVars[c],a.value.additionalEnvVars[p]=E}}async function F(){h.value=!0,C.value=null,U.value=null;try{const s=y.value.find(p=>p.tier==="sonnet"),c={baseUrl:a.value.baseUrl||void 0,authToken:a.value.authToken||void 0,defaultSonnetModel:(s==null?void 0:s.modelId)||void 0,apiTimeoutMs:a.value.apiTimeoutMs||void 0};U.value=await u.testConnection(c)}catch(s){C.value=s.message}finally{h.value=!1}}function Y(s,c){return s.modelId.trim()!==c.modelId||s.displayName.trim()!==c.displayName||s.tier!==c.tier}function o(s){return{modelId:s.modelId.trim(),displayName:s.displayName.trim()||s.modelId.trim(),tier:s.tier||"custom"}}async function f(s,c,p){if(!s._serverId&&s.modelId.trim()){await u.addModel(c,o(s));return}const E=p.get(s._serverId);E&&Y(s,E)&&await u.updateModel(c,s._serverId,o(s))}async function x(s){var G;const c=new Set(y.value.filter(T=>T._serverId).map(T=>T._serverId)),p=((G=v.value)==null?void 0:G.models)||[],E=new Map(p.map(T=>[T.id,T]));for(const T of p)c.has(T.id)||await u.removeModel(s,T.id);for(const T of y.value)await f(T,s,E);await u.fetchProviders()}async function O(){var s,c;w.value=!0,C.value=null;try{const p={name:a.value.name.trim(),baseUrl:((s=a.value.baseUrl)==null?void 0:s.trim())||null,apiTimeoutMs:a.value.apiTimeoutMs||null,additionalEnvVars:Object.keys(a.value.additionalEnvVars).length>0?a.value.additionalEnvVars:null};I.value&&(p.authToken=((c=a.value.authToken)==null?void 0:c.trim())||null);let E;V.value?(E=await u.updateProvider(v.value.id,p),d.success("Provider updated successfully")):(E=await u.createProvider(p),d.success("Provider created successfully")),await x(E.id),m()}catch(p){C.value=p.message}finally{w.value=!1}}return{form:a,localModels:y,envVarKeys:g,showAuthToken:S,saving:w,testing:h,error:C,testResult:U,authTokenModified:I,isEditing:V,isValid:l,canTest:r,addLocalModel:A,removeLocalModel:H,addEnvVar:j,removeEnvVar:L,updateEnvVarKey:D,testConnection:F,save:O}}const ue={class:"models-section"},ce={key:0,class:"models-list"},ve=["onUpdate:modelValue"],me=["onUpdate:modelValue"],pe=["onUpdate:modelValue"],fe=["onClick"],be={key:1,class:"models-empty"},ye={__name:"ProviderModelsList",props:{models:{type:Array,required:!0}},emits:["add","remove"],setup(_){return(v,m)=>(n(),i("div",ue,[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)),_.models.length>0?(n(),i("div",ce,[m[2]||(m[2]=se('<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)),(n(!0),i(R,null,K(_.models,(u,d)=>(n(),i("div",{key:d,class:"model-row"},[P(e("input",{"onUpdate:modelValue":b=>u.modelId=b,type:"text",placeholder:"anthropic.claude-3-sonnet-…",class:"col-model-id model-input"},null,8,ve),[[N,u.modelId]]),P(e("input",{"onUpdate:modelValue":b=>u.displayName=b,type:"text",placeholder:"My Sonnet",class:"col-display-name model-input"},null,8,me),[[N,u.displayName]]),P(e("select",{"onUpdate:modelValue":b=>u.tier=b,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,pe),[[oe,u.tier]]),e("button",{type:"button",class:"col-actions remove-model-btn",title:"Remove model",onClick:b=>v.$emit("remove",d)}," × ",8,fe)]))),128))])):(n(),i("div",be," No models added yet. ")),e("button",{type:"button",class:"btn btn-sm btn-secondary add-model-btn",onClick:m[0]||(m[0]=u=>v.$emit("add"))}," + Add Model ")]))}},_e=W(ye,[["__scopeId","data-v-3aa7217a"]]),ke={class:"modal"},he={class:"modal-header"},ge={class:"modal-body"},Ve={class:"form-group"},Me={class:"form-group"},$e={class:"form-group"},Te={class:"token-input-wrapper"},Ce=["type"],Ee=["title"],we={class:"expandable-section"},Pe={class:"section-content"},Ue={class:"form-group"},Ie={class:"form-group"},Se={class:"env-vars-list"},Ae=["onUpdate:modelValue","onBlur"],Ne=["onUpdate:modelValue"],Be=["onClick"],De={key:0,class:"error-message"},xe={class:"test-result-header"},Oe={class:"test-icon"},Fe={class:"test-message"},Le={key:0,class:"test-details"},Re={key:0,class:"test-detail"},Ke={key:1,class:"test-detail"},He={class:"modal-footer"},je=["disabled"],qe={class:"footer-actions"},ze=["disabled"],We=["disabled"],Ye={__name:"ProviderForm",props:{isOpen:{type:Boolean,default:!1},provider:{type:Object,default:null}},emits:["close","saved"],setup(_,{emit:v}){const m=_,u=v,{form:d,localModels:b,envVarKeys:a,showAuthToken:y,saving:g,testing:S,error:w,testResult:h,authTokenModified:C,isEditing:U,isValid:I,canTest:V,addLocalModel:l,removeLocalModel:r,addEnvVar:A,removeEnvVar:H,updateEnvVarKey:j,testConnection:L,save:D}=re(J(m,"isOpen"),J(m,"provider"),()=>u("saved"));function F(){u("close")}return(Y,o)=>_.isOpen?(n(),i("div",{key:0,class:"modal-overlay",onClick:z(F,["self"])},[e("div",ke,[e("div",he,[e("h2",null,k(t(U)?"Edit Provider":"Add Provider"),1),e("button",{type:"button",class:"close-btn",title:"Close",onClick:F}," × ")]),e("div",ge,[e("form",{onSubmit:o[7]||(o[7]=z((...f)=>t(D)&&t(D)(...f),["prevent"]))},[e("div",Ve,[o[10]||(o[10]=e("label",{for:"provider-name"},"Provider Name*",-1)),P(e("input",{id:"provider-name","onUpdate:modelValue":o[0]||(o[0]=f=>t(d).name=f),type:"text",placeholder:"e.g., AWS Bedrock",required:"",maxlength:"100"},null,512),[[N,t(d).name]])]),e("div",Me,[o[11]||(o[11]=e("label",{for:"base-url"},[B(" Base URL "),e("span",{class:"label-hint"},"(ANTHROPIC_BASE_URL)")],-1)),P(e("input",{id:"base-url","onUpdate:modelValue":o[1]||(o[1]=f=>t(d).baseUrl=f),type:"url",placeholder:"https://bedrock-runtime.us-east-1.amazonaws.com"},null,512),[[N,t(d).baseUrl]])]),e("div",$e,[o[12]||(o[12]=e("label",{for:"auth-token"},[B(" Auth Token "),e("span",{class:"label-hint"},"(ANTHROPIC_AUTH_TOKEN)")],-1)),e("div",Te,[P(e("input",{id:"auth-token","onUpdate:modelValue":o[2]||(o[2]=f=>t(d).authToken=f),type:t(y)?"text":"password",placeholder:"Your authentication token",onInput:o[3]||(o[3]=f=>C.value=!0)},null,40,Ce),[[le,t(d).authToken]]),e("button",{type:"button",class:"toggle-visibility-btn",title:t(y)?"Hide":"Show",onClick:o[4]||(o[4]=f=>y.value=!t(y))},k(t(y)?"Hide":"Show"),9,Ee)])]),X(_e,{models:t(b),onAdd:t(l),onRemove:t(r)},null,8,["models","onAdd","onRemove"]),e("details",we,[o[15]||(o[15]=e("summary",{class:"section-header"}," Advanced Settings ",-1)),e("div",Pe,[e("div",Ue,[o[13]||(o[13]=e("label",{for:"api-timeout"},"API Timeout (ms)",-1)),P(e("input",{id:"api-timeout","onUpdate:modelValue":o[5]||(o[5]=f=>t(d).apiTimeoutMs=f),type:"number",placeholder:"120000",min:"1000",step:"1000"},null,512),[[N,t(d).apiTimeoutMs,void 0,{number:!0}]])]),e("div",Ie,[o[14]||(o[14]=e("label",null,"Additional Environment Variables",-1)),e("div",Se,[(n(!0),i(R,null,K(t(d).additionalEnvVars,(f,x,O)=>(n(),i("div",{key:O,class:"env-var-row"},[P(e("input",{"onUpdate:modelValue":s=>t(a)[O]=s,type:"text",placeholder:"KEY",class:"env-key",onBlur:s=>t(j)(O,x)},null,40,Ae),[[N,t(a)[O]]]),P(e("input",{"onUpdate:modelValue":s=>t(d).additionalEnvVars[x]=s,type:"text",placeholder:"value",class:"env-value"},null,8,Ne),[[N,t(d).additionalEnvVars[x]]]),e("button",{type:"button",class:"remove-env-btn",title:"Remove",onClick:s=>t(H)(x)}," × ",8,Be)]))),128)),e("button",{type:"button",class:"btn btn-sm btn-secondary",onClick:o[6]||(o[6]=(...f)=>t(A)&&t(A)(...f))}," + Add Variable ")])])])]),t(w)?(n(),i("div",De,k(t(w)),1)):$("",!0),t(h)?(n(),i("div",{key:1,class:ae(["test-result",t(h).success?"success":"failure"])},[e("div",xe,[e("span",Oe,k(t(h).success?"✓":"✗"),1),e("span",Fe,k(t(h).message),1)]),t(h).details?(n(),i("div",Le,[t(h).details.model?(n(),i("div",Re,[o[16]||(o[16]=B(" Model: ",-1)),e("code",null,k(t(h).details.model),1)])):$("",!0),t(h).details.code?(n(),i("div",Ke,[o[17]||(o[17]=B(" Error Code: ",-1)),e("code",null,k(t(h).details.code),1)])):$("",!0)])):$("",!0)],2)):$("",!0)],32)]),e("div",He,[e("button",{type:"button",class:"btn btn-secondary",disabled:t(g)||t(S)||!t(V),onClick:o[8]||(o[8]=(...f)=>t(L)&&t(L)(...f))},k(t(S)?"Testing...":"Test Connection"),9,je),e("div",qe,[e("button",{type:"button",class:"btn btn-secondary",disabled:t(g),onClick:F}," Cancel ",8,ze),e("button",{type:"button",class:"btn btn-primary",disabled:t(g)||!t(I),onClick:o[9]||(o[9]=(...f)=>t(D)&&t(D)(...f))},k(t(g)?"Saving...":"Save"),9,We)])])])])):$("",!0)}},Ge=W(Ye,[["__scopeId","data-v-a4048df1"]]),Je={class:"container"},Qe={key:0,class:"skeleton-list"},Xe={key:1,class:"error-message"},Ze={key:2,class:"provider-list"},et={class:"provider-header"},tt={class:"provider-title"},st={key:0,class:"built-in-badge"},ot={class:"provider-actions"},lt=["disabled","onClick"],at=["onClick"],nt=["onClick"],it={class:"provider-details"},dt={key:0,class:"provider-detail"},rt={class:"detail-value"},ut={key:1,class:"provider-detail"},ct={class:"detail-value"},vt={key:2,class:"provider-detail"},mt={class:"modal confirm-modal"},pt={class:"modal-header"},ft={class:"modal-body"},bt={class:"modal-footer"},yt=["disabled"],_t={__name:"ProvidersView",setup(_){const v=Z(),m=Q(),u=M(!1),d=M(null),b=M(null),a=M(!1),y=M(null);ne(()=>{v.fetchProviders()});function g(){d.value=null,u.value=!0}function S(V){d.value=V,u.value=!0}function w(){u.value=!1,d.value=null}function h(){w(),v.fetchProviders()}async function C(V){y.value=V;try{const l=await v.testExistingProvider(V);l.success?m.success(`Connection successful (model: ${l.details.model})`):m.error(`Connection failed: ${l.message}`)}catch(l){m.error(`Test failed: ${l.message}`)}finally{y.value=null}}function U(V){b.value=V}async function I(){a.value=!0;try{await v.deleteProvider(b.value.id),m.success("Provider deleted"),b.value=null}catch(V){m.error(`Failed to delete provider: ${V.message}`)}finally{a.value=!1}}return(V,l)=>(n(),i("div",Je,[e("div",{class:"page-header"},[e("button",{class:"btn btn-primary",onClick:g},[...l[3]||(l[3]=[e("span",null,"+ Add Provider",-1)])])]),l[11]||(l[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(v).loading?(n(),i("div",Qe,[(n(),i(R,null,K(3,r=>e("div",{key:r,class:"skeleton card",style:{height:"120px"}})),64))])):t(v).error?(n(),i("div",Xe,k(t(v).error),1)):(n(),i("div",Ze,[(n(!0),i(R,null,K(t(v).providers,r=>(n(),i("div",{key:r.id,class:"provider-card card"},[e("div",et,[e("div",tt,[e("h3",null,[B(k(r.name)+" ",1),r.isBuiltIn?(n(),i("span",st,"Built-in")):$("",!0)])]),e("div",ot,[r.isBuiltIn?$("",!0):(n(),i("button",{key:0,class:"btn btn-sm",disabled:y.value===r.id,title:"Test Connection",onClick:A=>C(r.id)},k(y.value===r.id?"Testing...":"Test"),9,lt)),r.isBuiltIn?$("",!0):(n(),i("button",{key:1,class:"btn btn-sm",onClick:A=>S(r)}," Edit ",8,at)),r.isBuiltIn?$("",!0):(n(),i("button",{key:2,class:"btn btn-sm btn-danger",onClick:A=>U(r)}," Delete ",8,nt))])]),e("div",it,[r.baseUrl?(n(),i("div",dt,[l[4]||(l[4]=e("span",{class:"detail-label"},"Base URL:",-1)),e("code",rt,k(r.baseUrl),1)])):$("",!0),r.defaultSonnetModel?(n(),i("div",ut,[l[5]||(l[5]=e("span",{class:"detail-label"},"Default Sonnet Model:",-1)),e("code",ct,k(r.defaultSonnetModel),1)])):$("",!0),!r.baseUrl&&r.isBuiltIn?(n(),i("div",vt,[...l[6]||(l[6]=[e("span",{class:"detail-value"},"Uses official Anthropic API",-1)])])):$("",!0)])]))),128))])),X(Ge,{"is-open":u.value,provider:d.value,onClose:w,onSaved:h},null,8,["is-open","provider"]),b.value?(n(),i("div",{key:3,class:"modal-overlay",onClick:l[2]||(l[2]=z(r=>b.value=null,["self"]))},[e("div",mt,[e("div",pt,[l[7]||(l[7]=e("h2",null,"Delete Provider",-1)),e("button",{type:"button",class:"close-btn",onClick:l[0]||(l[0]=r=>b.value=null)}," × ")]),e("div",ft,[e("p",null,[l[8]||(l[8]=B("Are you sure you want to delete ",-1)),e("strong",null,k(b.value.name),1),l[9]||(l[9]=B("?",-1))]),l[10]||(l[10]=e("p",{class:"warning-text"}," This action cannot be undone. ",-1))]),e("div",bt,[e("button",{type:"button",class:"btn btn-secondary",onClick:l[1]||(l[1]=r=>b.value=null)}," Cancel "),e("button",{type:"button",class:"btn btn-danger",disabled:a.value,onClick:I},k(a.value?"Deleting...":"Delete"),9,yt)])])])):$("",!0)]))}},Vt=W(_t,[["__scopeId","data-v-0bdb2dfd"]]);export{Vt as default};
@@ -1 +1 @@
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-a4048df1]{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-a4048df1]{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-a4048df1]{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-a4048df1]{margin:0;font-size:1.125rem;font-weight:600}.close-btn[data-v-a4048df1]{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-a4048df1]:hover{color:var(--color-text);background:var(--color-background-soft)}.modal-body[data-v-a4048df1]{padding:1.25rem;overflow-y:auto}.form-group[data-v-a4048df1]{margin-bottom:1.25rem}.form-group label[data-v-a4048df1]{display:block;margin-bottom:.5rem;font-weight:500;font-size:.875rem;color:var(--color-text)}.label-hint[data-v-a4048df1]{font-weight:400;color:var(--color-text-soft);font-size:.8125rem}.form-group input[type=text][data-v-a4048df1],.form-group input[type=url][data-v-a4048df1],.form-group input[type=password][data-v-a4048df1],.form-group input[type=number][data-v-a4048df1]{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 input[data-v-a4048df1]:focus{outline:none;border-color:var(--color-primary)}.token-input-wrapper[data-v-a4048df1]{display:flex;gap:.5rem}.token-input-wrapper input[data-v-a4048df1]{flex:1}.toggle-visibility-btn[data-v-a4048df1]{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-a4048df1]:hover{background:var(--color-background-soft)}.expandable-section[data-v-a4048df1]{margin-bottom:1.25rem;border:1px solid var(--color-border);border-radius:.25rem}.section-header[data-v-a4048df1]{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-a4048df1]:hover{background:var(--color-background-mute)}.section-content[data-v-a4048df1]{padding:1rem}.env-vars-list[data-v-a4048df1]{display:flex;flex-direction:column;gap:.5rem}.env-var-row[data-v-a4048df1]{display:flex;gap:.5rem}.env-key[data-v-a4048df1],.env-value[data-v-a4048df1]{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-a4048df1]{flex:0 0 150px}.env-value[data-v-a4048df1]{flex:1}.env-key[data-v-a4048df1]:focus,.env-value[data-v-a4048df1]:focus{outline:none;border-color:var(--color-primary)}.remove-env-btn[data-v-a4048df1]{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-a4048df1]:hover{color:var(--color-danger, #ef4444);border-color:var(--color-danger, #ef4444)}.error-message[data-v-a4048df1]{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-a4048df1]{margin-top:1rem;padding:.75rem;border-radius:.25rem;font-size:.875rem}.test-result.success[data-v-a4048df1]{background:#22c55e1a;border:1px solid rgba(34,197,94,.3);color:var(--color-success, #22c55e)}.test-result.failure[data-v-a4048df1]{background:#ef44441a;border:1px solid rgba(239,68,68,.3);color:var(--color-danger, #ef4444)}.test-result-header[data-v-a4048df1]{display:flex;align-items:center;gap:.5rem;font-weight:500}.test-icon[data-v-a4048df1]{font-size:1.125rem}.test-details[data-v-a4048df1]{margin-top:.5rem;padding-top:.5rem;border-top:1px solid currentColor;opacity:.8}.test-detail[data-v-a4048df1]{margin-top:.25rem}.test-detail code[data-v-a4048df1]{font-family:var(--font-mono);font-size:.8125rem}.modal-footer[data-v-a4048df1]{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-a4048df1]{display:flex;gap:.75rem}.btn[data-v-a4048df1]{padding:.5rem 1rem;border-radius:.25rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .15s}.btn[data-v-a4048df1]:disabled{opacity:.5;cursor:not-allowed}.btn-sm[data-v-a4048df1]{padding:.375rem .75rem;font-size:.8125rem}.btn-secondary[data-v-a4048df1]{background:var(--color-background);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[data-v-a4048df1]:hover:not(:disabled){border-color:var(--color-primary);background:var(--color-background-soft)}.btn-primary[data-v-a4048df1]{background:var(--color-primary);border:1px solid var(--color-primary);color:#fff}.btn-primary[data-v-a4048df1]:hover:not(:disabled){filter:brightness(1.1)}.page-header[data-v-27d620fd]{display:flex;justify-content:flex-end;align-items:center;margin-bottom:.5rem}.page-description[data-v-27d620fd]{color:var(--color-text-soft);margin:0 0 1.5rem;font-size:.875rem;line-height:1.5}.skeleton-list[data-v-27d620fd]{display:flex;flex-direction:column;gap:1rem}.error-message[data-v-27d620fd]{color:var(--color-error);padding:1rem;background-color:#f851491a;border-radius:var(--border-radius)}.provider-list[data-v-27d620fd]{display:flex;flex-direction:column;gap:1rem}.provider-card[data-v-27d620fd]{padding:1.25rem}.provider-header[data-v-27d620fd]{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:.75rem;gap:1rem}.provider-title h3[data-v-27d620fd]{margin:0;font-size:1rem;display:flex;align-items:center;gap:.5rem}.built-in-badge[data-v-27d620fd]{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:.025em;color:var(--color-text-soft)}.provider-actions[data-v-27d620fd]{display:flex;gap:.5rem;flex-shrink:0}.provider-details[data-v-27d620fd]{display:flex;flex-direction:column;gap:.5rem}.provider-detail[data-v-27d620fd]{display:flex;gap:.5rem;font-size:.875rem}.detail-label[data-v-27d620fd]{color:var(--color-text-soft);font-weight:500}.detail-value[data-v-27d620fd]{color:var(--color-text);font-family:var(--font-mono);font-size:.8125rem}.btn-sm[data-v-27d620fd]{padding:.375rem .75rem;font-size:.8125rem}.btn-danger[data-v-27d620fd]{background:var(--color-danger, #ef4444);border:1px solid var(--color-danger, #ef4444);color:#fff}.btn-danger[data-v-27d620fd]:hover:not(:disabled){filter:brightness(1.1)}.modal-overlay[data-v-27d620fd]{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-27d620fd]{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-27d620fd]{max-width:400px}.modal-header[data-v-27d620fd]{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-27d620fd]{margin:0;font-size:1.125rem;font-weight:600}.close-btn[data-v-27d620fd]{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-27d620fd]:hover{color:var(--color-text);background:var(--color-background-soft)}.modal-body[data-v-27d620fd]{padding:1.25rem}.modal-body p[data-v-27d620fd]{margin:0 0 .75rem}.warning-text[data-v-27d620fd]{color:var(--color-warning, #f59e0b);font-size:.875rem;font-weight:500}.modal-footer[data-v-27d620fd]{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.25rem;border-top:1px solid var(--color-border);background:var(--color-background-soft)}
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-a4048df1]{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-a4048df1]{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-a4048df1]{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-a4048df1]{margin:0;font-size:1.125rem;font-weight:600}.close-btn[data-v-a4048df1]{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-a4048df1]:hover{color:var(--color-text);background:var(--color-background-soft)}.modal-body[data-v-a4048df1]{padding:1.25rem;overflow-y:auto}.form-group[data-v-a4048df1]{margin-bottom:1.25rem}.form-group label[data-v-a4048df1]{display:block;margin-bottom:.5rem;font-weight:500;font-size:.875rem;color:var(--color-text)}.label-hint[data-v-a4048df1]{font-weight:400;color:var(--color-text-soft);font-size:.8125rem}.form-group input[type=text][data-v-a4048df1],.form-group input[type=url][data-v-a4048df1],.form-group input[type=password][data-v-a4048df1],.form-group input[type=number][data-v-a4048df1]{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 input[data-v-a4048df1]:focus{outline:none;border-color:var(--color-primary)}.token-input-wrapper[data-v-a4048df1]{display:flex;gap:.5rem}.token-input-wrapper input[data-v-a4048df1]{flex:1}.toggle-visibility-btn[data-v-a4048df1]{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-a4048df1]:hover{background:var(--color-background-soft)}.expandable-section[data-v-a4048df1]{margin-bottom:1.25rem;border:1px solid var(--color-border);border-radius:.25rem}.section-header[data-v-a4048df1]{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-a4048df1]:hover{background:var(--color-background-mute)}.section-content[data-v-a4048df1]{padding:1rem}.env-vars-list[data-v-a4048df1]{display:flex;flex-direction:column;gap:.5rem}.env-var-row[data-v-a4048df1]{display:flex;gap:.5rem}.env-key[data-v-a4048df1],.env-value[data-v-a4048df1]{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-a4048df1]{flex:0 0 150px}.env-value[data-v-a4048df1]{flex:1}.env-key[data-v-a4048df1]:focus,.env-value[data-v-a4048df1]:focus{outline:none;border-color:var(--color-primary)}.remove-env-btn[data-v-a4048df1]{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-a4048df1]:hover{color:var(--color-danger, #ef4444);border-color:var(--color-danger, #ef4444)}.error-message[data-v-a4048df1]{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-a4048df1]{margin-top:1rem;padding:.75rem;border-radius:.25rem;font-size:.875rem}.test-result.success[data-v-a4048df1]{background:#22c55e1a;border:1px solid rgba(34,197,94,.3);color:var(--color-success, #22c55e)}.test-result.failure[data-v-a4048df1]{background:#ef44441a;border:1px solid rgba(239,68,68,.3);color:var(--color-danger, #ef4444)}.test-result-header[data-v-a4048df1]{display:flex;align-items:center;gap:.5rem;font-weight:500}.test-icon[data-v-a4048df1]{font-size:1.125rem}.test-details[data-v-a4048df1]{margin-top:.5rem;padding-top:.5rem;border-top:1px solid currentColor;opacity:.8}.test-detail[data-v-a4048df1]{margin-top:.25rem}.test-detail code[data-v-a4048df1]{font-family:var(--font-mono);font-size:.8125rem}.modal-footer[data-v-a4048df1]{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-a4048df1]{display:flex;gap:.75rem}.btn[data-v-a4048df1]{padding:.5rem 1rem;border-radius:.25rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .15s}.btn[data-v-a4048df1]:disabled{opacity:.5;cursor:not-allowed}.btn-sm[data-v-a4048df1]{padding:.375rem .75rem;font-size:.8125rem}.btn-secondary[data-v-a4048df1]{background:var(--color-background);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[data-v-a4048df1]:hover:not(:disabled){border-color:var(--color-primary);background:var(--color-background-soft)}.btn-primary[data-v-a4048df1]{background:var(--color-primary);border:1px solid var(--color-primary);color:#fff}.btn-primary[data-v-a4048df1]:hover:not(:disabled){filter:brightness(1.1)}.page-header[data-v-0bdb2dfd]{display:flex;justify-content:flex-end;align-items:center;margin-bottom:.5rem}.page-description[data-v-0bdb2dfd]{color:var(--color-text-soft);margin:0 0 1.5rem;font-size:.875rem;line-height:1.5}.skeleton-list[data-v-0bdb2dfd]{display:flex;flex-direction:column;gap:1rem}.error-message[data-v-0bdb2dfd]{color:var(--color-error);padding:1rem;background-color:#f851491a;border-radius:var(--border-radius)}.provider-list[data-v-0bdb2dfd]{display:flex;flex-direction:column;gap:1rem}.provider-card[data-v-0bdb2dfd]{padding:1.25rem}.provider-header[data-v-0bdb2dfd]{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:.75rem;gap:1rem}.provider-title h3[data-v-0bdb2dfd]{margin:0;font-size:1rem;display:flex;align-items:center;gap:.5rem}.built-in-badge[data-v-0bdb2dfd]{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:.025em;color:var(--color-text-soft)}.provider-actions[data-v-0bdb2dfd]{display:flex;gap:.5rem;flex-shrink:0}.provider-details[data-v-0bdb2dfd]{display:flex;flex-direction:column;gap:.5rem}.provider-detail[data-v-0bdb2dfd]{display:flex;gap:.5rem;font-size:.875rem}.detail-label[data-v-0bdb2dfd]{color:var(--color-text-soft);font-weight:500}.detail-value[data-v-0bdb2dfd]{color:var(--color-text);font-family:var(--font-mono);font-size:.8125rem}.btn-sm[data-v-0bdb2dfd]{padding:.375rem .75rem;font-size:.8125rem}.btn-danger[data-v-0bdb2dfd]{background:var(--color-danger, #ef4444);border:1px solid var(--color-danger, #ef4444);color:#fff}.btn-danger[data-v-0bdb2dfd]:hover:not(:disabled){filter:brightness(1.1)}.modal-overlay[data-v-0bdb2dfd]{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-0bdb2dfd]{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-0bdb2dfd]{max-width:400px}.modal-header[data-v-0bdb2dfd]{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-0bdb2dfd]{margin:0;font-size:1.125rem;font-weight:600}.close-btn[data-v-0bdb2dfd]{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-0bdb2dfd]:hover{color:var(--color-text);background:var(--color-background-soft)}.modal-body[data-v-0bdb2dfd]{padding:1.25rem}.modal-body p[data-v-0bdb2dfd]{margin:0 0 .75rem}.warning-text[data-v-0bdb2dfd]{color:var(--color-warning, #f59e0b);font-size:.875rem;font-weight:500}.modal-footer[data-v-0bdb2dfd]{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.25rem;border-top:1px solid var(--color-border);background:var(--color-background-soft)}
@@ -1 +1 @@
1
- import{L as F,_ as T,m as L,a as r,G as M,c as d,b as e,t as y,h as G,j as I,v as q,k as R,p as z,H as O,V,x as w,l as j,I as H,F as E,r as A,d as K}from"./index-CSOPrlmq.js";import{a as k}from"./ApiClient-Dbs1H78V.js";const Je=F("projectDefaults",{state:()=>({defaultsByProjectId:{},loading:!1,error:null}),getters:{getDefaultsForProject:l=>o=>l.defaultsByProjectId[o]||null},actions:{async fetchDefaults(l){this.loading=!0,this.error=null;try{const o=await k.getProjectSessionDefaults(l);return this.defaultsByProjectId[l]=o,o}catch(o){throw this.error=o.message,o}finally{this.loading=!1}},async updateDefaults(l,o){this.loading=!0,this.error=null;try{const s=await k.updateProjectSessionDefaults(l,o);return this.defaultsByProjectId[l]=s,s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async resetDefaults(l){this.loading=!0,this.error=null;try{return await k.resetProjectSessionDefaults(l),this.defaultsByProjectId[l]={mode:null,thinkingEnabled:null,effortLevel:null,startImmediately:null,gitMode:null,gitBranch:null,model:null},this.defaultsByProjectId[l]}catch(o){throw this.error=o.message,o}finally{this.loading=!1}},clearProjectDefaults(l){delete this.defaultsByProjectId[l]},clearAllDefaults(){this.defaultsByProjectId={}}}}),U=F("quickResponses",{state:()=>({projectResponses:[],globalResponses:[],loading:!1,error:null,currentProjectId:null}),getters:{allResponses:l=>[...l.projectResponses,...l.globalResponses],hasResponses:l=>l.projectResponses.length>0||l.globalResponses.length>0},actions:{async fetchForProject(l){this.loading=!0,this.error=null,this.currentProjectId=l;try{const o=await k.getQuickResponses(l);return this.projectResponses=o.project,this.globalResponses=o.global,o}catch(o){throw this.error=o.message,o}finally{this.loading=!1}},async createResponse(l,o){this.loading=!0,this.error=null;try{const s=await k.createQuickResponse(l,o);return s.projectId===null?this.globalResponses.push(s):this.projectResponses.push(s),s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async updateResponse(l,o){this.loading=!0,this.error=null;try{const s=await k.updateQuickResponse(l,o),c=this.projectResponses.findIndex(p=>p.id===l);if(c!==-1)this.projectResponses[c]=s;else{const p=this.globalResponses.findIndex(_=>_.id===l);p!==-1&&(this.globalResponses[p]=s)}return s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async deleteResponse(l){this.loading=!0,this.error=null;try{await k.deleteQuickResponse(l);const o=this.projectResponses.findIndex(s=>s.id===l);if(o!==-1)this.projectResponses.splice(o,1);else{const s=this.globalResponses.findIndex(c=>c.id===l);s!==-1&&this.globalResponses.splice(s,1)}}catch(o){throw this.error=o.message,o}finally{this.loading=!1}},async reorderResponses(l,o){this.loading=!0,this.error=null;try{const s=o.map((c,p)=>({id:c,sortOrder:p}));if(l){const c=await k.reorderQuickResponses(l,s);this.projectResponses=c.project,this.globalResponses=c.global}else{const c=await k.reorderGlobalQuickResponses(s);this.globalResponses=c}}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},clearResponses(){this.projectResponses=[],this.globalResponses=[],this.currentProjectId=null,this.error=null}}}),Y={class:"dialog-header"},J={class:"dialog-content"},W={class:"form-group"},X={key:0,class:"form-error"},Z={class:"form-group"},ee={key:0,class:"form-error"},se={class:"form-group"},te={class:"form-group"},le={class:"checkbox-label"},oe={key:0,class:"form-group"},ne={class:"radio-group"},ae={class:"radio-label"},ie={class:"radio-label"},re={key:1,class:"error-message"},ue={class:"dialog-footer"},ce=["disabled"],de={__name:"QuickResponseDialog",props:{isOpen:{type:Boolean,default:!1},projectId:{type:String,required:!0},editingResponse:{type:Object,default:null},defaultIsGlobal:{type:Boolean,default:!1}},emits:["close","saved"],setup(l,{emit:o}){const s=l,c=o,p=U(),_=j(null),v=`dialog-title-${Math.random().toString(36).slice(2)}`,n=j({label:"",content:"",category:"",autoSubmit:!1,isGlobal:!1}),g=j(!1),h=j(null),C=w(()=>!!s.editingResponse),S=w(()=>n.value.label&&n.value.label.length>50?"Label must be 50 characters or less":null),x=w(()=>n.value.content&&n.value.content.length>1e4?"Content must be 10,000 characters or less":null),P=w(()=>n.value.label.trim().length>0&&n.value.label.length<=50&&n.value.content.trim().length>0&&n.value.content.length<=1e4);L(()=>s.isOpen,b=>{b&&(s.editingResponse?n.value={label:s.editingResponse.label||"",content:s.editingResponse.content||"",category:s.editingResponse.category||"",autoSubmit:s.editingResponse.autoSubmit||!1,isGlobal:s.editingResponse.projectId===null}:n.value={label:"",content:"",category:"",autoSubmit:!1,isGlobal:s.defaultIsGlobal},h.value=null,H(()=>{var t;(t=_.value)==null||t.focus()}))}),L(()=>s.isOpen,b=>{if(b){const t=a=>{a.key==="Escape"&&$()};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)}});function $(){c("close")}async function B(){if(!(!P.value||g.value)){g.value=!0,h.value=null;try{const b={label:n.value.label.trim(),content:n.value.content,category:n.value.category.trim()||null,autoSubmit:n.value.autoSubmit};C.value?await p.updateResponse(s.editingResponse.id,b):(b.isGlobal=n.value.isGlobal,await p.createResponse(s.projectId,b)),c("saved"),c("close")}catch(b){h.value=b.message||"Failed to save quick response"}finally{g.value=!1}}}return(b,t)=>(r(),M(V,{to:"body"},[l.isOpen?(r(),d("div",{key:0,class:"dialog-overlay",onClick:G($,["self"])},[e("div",{class:"dialog",role:"dialog","aria-modal":"true","aria-labelledby":v},[e("div",Y,[e("h2",{id:v,class:"dialog-title"},y(C.value?"Edit Quick Response":"Add Quick Response"),1),e("button",{class:"close-button","aria-label":"Close dialog",onClick:$}," × ")]),e("form",{class:"dialog-form",onSubmit:G(B,["prevent"])},[e("div",J,[e("div",W,[t[7]||(t[7]=e("label",{for:"qr-label",class:"form-label"},"Label *",-1)),I(e("input",{id:"qr-label",ref_key:"labelInput",ref:_,"onUpdate:modelValue":t[0]||(t[0]=a=>n.value.label=a),type:"text",class:"form-input",placeholder:"e.g., Yes, LGTM, Run tests",maxlength:"50",required:"",onBlur:t[1]||(t[1]=a=>n.value.label=n.value.label.trim())},null,544),[[q,n.value.label]]),t[8]||(t[8]=e("span",{class:"form-help"},"Short text shown on the button (max 50 characters)",-1)),S.value?(r(),d("span",X,y(S.value),1)):R("",!0)]),e("div",Z,[t[9]||(t[9]=e("label",{for:"qr-content",class:"form-label"},"Content *",-1)),I(e("textarea",{id:"qr-content","onUpdate:modelValue":t[2]||(t[2]=a=>n.value.content=a),class:"form-textarea",placeholder:"The full message that will be inserted into the prompt",rows:"4",maxlength:"10000",required:""},null,512),[[q,n.value.content]]),t[10]||(t[10]=e("span",{class:"form-help"},"The full message that will be inserted (max 10,000 characters)",-1)),x.value?(r(),d("span",ee,y(x.value),1)):R("",!0)]),e("div",se,[t[11]||(t[11]=e("label",{for:"qr-category",class:"form-label"},"Category (optional)",-1)),I(e("input",{id:"qr-category","onUpdate:modelValue":t[3]||(t[3]=a=>n.value.category=a),type:"text",class:"form-input",placeholder:"e.g., feedback, commands",maxlength:"50"},null,512),[[q,n.value.category]]),t[12]||(t[12]=e("span",{class:"form-help"},"Optional grouping for organization",-1))]),e("div",te,[e("label",le,[I(e("input",{"onUpdate:modelValue":t[4]||(t[4]=a=>n.value.autoSubmit=a),type:"checkbox",class:"checkbox-input"},null,512),[[z,n.value.autoSubmit]]),t[13]||(t[13]=e("span",{class:"checkbox-text"},"Auto-submit",-1))]),t[14]||(t[14]=e("span",{class:"form-help indent"},"Send immediately when clicked (no confirmation)",-1))]),C.value?R("",!0):(r(),d("div",oe,[t[17]||(t[17]=e("span",{class:"form-label"},"Scope",-1)),e("div",ne,[e("label",ae,[I(e("input",{"onUpdate:modelValue":t[5]||(t[5]=a=>n.value.isGlobal=a),type:"radio",value:!1,class:"radio-input"},null,512),[[O,n.value.isGlobal]]),t[15]||(t[15]=e("span",{class:"radio-text"},"Project-specific",-1))]),e("label",ie,[I(e("input",{"onUpdate:modelValue":t[6]||(t[6]=a=>n.value.isGlobal=a),type:"radio",value:!0,class:"radio-input"},null,512),[[O,n.value.isGlobal]]),t[16]||(t[16]=e("span",{class:"radio-text"},"Global (all projects)",-1))])])])),h.value?(r(),d("div",re,y(h.value),1)):R("",!0)]),e("div",ue,[e("button",{type:"button",class:"btn btn-secondary",onClick:$}," Cancel "),e("button",{type:"submit",class:"btn btn-primary",disabled:!P.value||g.value},y(g.value?"Saving...":C.value?"Save Changes":"Save Quick Response"),9,ce)])],32)])])):R("",!0)]))}},pe=T(de,[["__scopeId","data-v-f2c13fd9"]]),be={class:"settings-panel",role:"dialog","aria-modal":"true"},fe={class:"settings-header"},ve={class:"settings-content"},ge={class:"section"},he={class:"section-header"},me={key:0,class:"loading-state"},ye={key:1,class:"empty-state"},ke={key:2,class:"response-list"},Re={class:"response-info"},_e={class:"response-label"},je={class:"response-content"},Ce={key:0,class:"auto-badge"},we={class:"response-actions"},$e=["disabled","onClick"],Ie=["disabled","onClick"],Se=["onClick"],xe=["onClick"],De={class:"section"},Pe={class:"section-header"},Be={key:0,class:"loading-state"},Ge={key:1,class:"empty-state"},Qe={key:2,class:"response-list"},qe={class:"response-info"},Ee={class:"response-label"},Me={class:"response-content"},Ve={key:0,class:"auto-badge"},Le={class:"response-actions"},Oe=["disabled","onClick"],Ae=["disabled","onClick"],Fe=["onClick"],Te=["onClick"],Ue={class:"confirm-dialog"},Ne={class:"confirm-message"},ze={class:"confirm-actions"},He={__name:"QuickResponseSettings",props:{isOpen:{type:Boolean,default:!1},projectId:{type:String,required:!0}},emits:["close"],setup(l,{expose:o}){const s=U(),c=j(!1),p=j(null),_=j(!1),v=j(null),n=w(()=>s.loading),g=w(()=>s.projectResponses),h=w(()=>s.globalResponses);function C(a){return a.length<=60?a:`${a.substring(0,60)}...`}function S(a){p.value=null,_.value=a,c.value=!0}function x(a){p.value=a,_.value=a.projectId===null,c.value=!0}function P(){c.value=!1,p.value=null}function $(){}function B(a){v.value=a}async function b(){if(v.value)try{await s.deleteResponse(v.value.id),v.value=null}catch(a){console.error("Failed to delete response:",a)}}async function t(a,u,i,m){const f=i+m;if(f<0||f>=u.length)return;const D=[...u];[D[i],D[f]]=[D[f],D[i]];const N=D.map(Q=>Q.id);try{await s.reorderResponses(a,N)}catch(Q){console.error("Failed to reorder responses:",Q)}}return o({moveResponse:t}),(a,u)=>(r(),d(E,null,[(r(),M(V,{to:"body"},[l.isOpen?(r(),d("div",{key:0,class:"settings-overlay",onClick:u[3]||(u[3]=G(i=>a.$emit("close"),["self"]))},[e("div",be,[e("div",fe,[u[6]||(u[6]=e("h2",{class:"settings-title"}," Quick Responses ",-1)),e("button",{class:"close-button","aria-label":"Close settings",onClick:u[0]||(u[0]=i=>a.$emit("close"))}," × ")]),e("div",ve,[e("div",ge,[e("div",he,[u[7]||(u[7]=e("h3",{class:"section-title"}," Project Responses ",-1)),e("button",{class:"add-button",onClick:u[1]||(u[1]=i=>S(!1))}," + Add ")]),n.value?(r(),d("div",me," Loading... ")):g.value.length===0?(r(),d("div",ye," No project-specific quick responses yet. ")):(r(),d("ul",ke,[(r(!0),d(E,null,A(g.value,(i,m)=>(r(),d("li",{key:i.id,class:"response-item"},[e("div",Re,[e("span",_e,y(i.label),1),e("span",je,y(C(i.content)),1),i.autoSubmit?(r(),d("span",Ce,"Auto-submit")):R("",!0)]),e("div",we,[e("button",{class:"action-button",disabled:m===0,title:"Move up",onClick:f=>t(l.projectId,g.value,m,-1)}," ↑ ",8,$e),e("button",{class:"action-button",disabled:m===g.value.length-1,title:"Move down",onClick:f=>t(l.projectId,g.value,m,1)}," ↓ ",8,Ie),e("button",{class:"action-button",title:"Edit","aria-label":"Edit",onClick:f=>x(i)}," ✏️ ",8,Se),e("button",{class:"action-button action-danger",title:"Delete",onClick:f=>B(i)}," 🗑️ ",8,xe)])]))),128))]))]),e("div",De,[e("div",Pe,[u[8]||(u[8]=e("h3",{class:"section-title"}," Global Responses ",-1)),e("button",{class:"add-button",onClick:u[2]||(u[2]=i=>S(!0))}," + Add ")]),n.value?(r(),d("div",Be," Loading... ")):h.value.length===0?(r(),d("div",Ge," No global quick responses yet. Global responses appear in all projects. ")):(r(),d("ul",Qe,[(r(!0),d(E,null,A(h.value,(i,m)=>(r(),d("li",{key:i.id,class:"response-item"},[e("div",qe,[e("span",Ee,y(i.label),1),e("span",Me,y(C(i.content)),1),i.autoSubmit?(r(),d("span",Ve,"Auto-submit")):R("",!0)]),e("div",Le,[e("button",{class:"action-button",disabled:m===0,title:"Move up",onClick:f=>t(null,h.value,m,-1)}," ↑ ",8,Oe),e("button",{class:"action-button",disabled:m===h.value.length-1,title:"Move down",onClick:f=>t(null,h.value,m,1)}," ↓ ",8,Ae),e("button",{class:"action-button",title:"Edit","aria-label":"Edit",onClick:f=>x(i)}," ✏️ ",8,Fe),e("button",{class:"action-button action-danger",title:"Delete",onClick:f=>B(i)}," 🗑️ ",8,Te)])]))),128))]))])])])])):R("",!0)])),K(pe,{"is-open":c.value,"project-id":l.projectId,"editing-response":p.value,"default-is-global":_.value,onClose:P,onSaved:$},null,8,["is-open","project-id","editing-response","default-is-global"]),(r(),M(V,{to:"body"},[v.value?(r(),d("div",{key:0,class:"confirm-overlay",onClick:u[5]||(u[5]=G(i=>v.value=null,["self"]))},[e("div",Ue,[e("p",Ne,' Are you sure you want to delete "'+y(v.value.label)+'"? ',1),e("div",ze,[e("button",{class:"btn btn-secondary",onClick:u[4]||(u[4]=i=>v.value=null)}," Cancel "),e("button",{class:"btn btn-danger",onClick:b}," Delete ")])])])):R("",!0)]))],64))}},We=T(He,[["__scopeId","data-v-9fffa8ff"]]);export{We as Q,U as a,Je as u};
1
+ import{L as F,_ as T,l as L,a as r,G as M,c as d,b as e,t as y,j as G,m as I,v as q,i as R,q as z,H as O,V,x as w,n as j,I as H,F as E,r as A,d as K}from"./index-MnvuyUxj.js";import{a as k}from"./ApiClient-CcqJ-GAv.js";const Je=F("projectDefaults",{state:()=>({defaultsByProjectId:{},loading:!1,error:null}),getters:{getDefaultsForProject:l=>o=>l.defaultsByProjectId[o]||null},actions:{async fetchDefaults(l){this.loading=!0,this.error=null;try{const o=await k.getProjectSessionDefaults(l);return this.defaultsByProjectId[l]=o,o}catch(o){throw this.error=o.message,o}finally{this.loading=!1}},async updateDefaults(l,o){this.loading=!0,this.error=null;try{const s=await k.updateProjectSessionDefaults(l,o);return this.defaultsByProjectId[l]=s,s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async resetDefaults(l){this.loading=!0,this.error=null;try{return await k.resetProjectSessionDefaults(l),this.defaultsByProjectId[l]={mode:null,thinkingEnabled:null,effortLevel:null,startImmediately:null,gitMode:null,gitBranch:null,model:null},this.defaultsByProjectId[l]}catch(o){throw this.error=o.message,o}finally{this.loading=!1}},clearProjectDefaults(l){delete this.defaultsByProjectId[l]},clearAllDefaults(){this.defaultsByProjectId={}}}}),U=F("quickResponses",{state:()=>({projectResponses:[],globalResponses:[],loading:!1,error:null,currentProjectId:null}),getters:{allResponses:l=>[...l.projectResponses,...l.globalResponses],hasResponses:l=>l.projectResponses.length>0||l.globalResponses.length>0},actions:{async fetchForProject(l){this.loading=!0,this.error=null,this.currentProjectId=l;try{const o=await k.getQuickResponses(l);return this.projectResponses=o.project,this.globalResponses=o.global,o}catch(o){throw this.error=o.message,o}finally{this.loading=!1}},async createResponse(l,o){this.loading=!0,this.error=null;try{const s=await k.createQuickResponse(l,o);return s.projectId===null?this.globalResponses.push(s):this.projectResponses.push(s),s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async updateResponse(l,o){this.loading=!0,this.error=null;try{const s=await k.updateQuickResponse(l,o),c=this.projectResponses.findIndex(p=>p.id===l);if(c!==-1)this.projectResponses[c]=s;else{const p=this.globalResponses.findIndex(_=>_.id===l);p!==-1&&(this.globalResponses[p]=s)}return s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async deleteResponse(l){this.loading=!0,this.error=null;try{await k.deleteQuickResponse(l);const o=this.projectResponses.findIndex(s=>s.id===l);if(o!==-1)this.projectResponses.splice(o,1);else{const s=this.globalResponses.findIndex(c=>c.id===l);s!==-1&&this.globalResponses.splice(s,1)}}catch(o){throw this.error=o.message,o}finally{this.loading=!1}},async reorderResponses(l,o){this.loading=!0,this.error=null;try{const s=o.map((c,p)=>({id:c,sortOrder:p}));if(l){const c=await k.reorderQuickResponses(l,s);this.projectResponses=c.project,this.globalResponses=c.global}else{const c=await k.reorderGlobalQuickResponses(s);this.globalResponses=c}}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},clearResponses(){this.projectResponses=[],this.globalResponses=[],this.currentProjectId=null,this.error=null}}}),Y={class:"dialog-header"},J={class:"dialog-content"},W={class:"form-group"},X={key:0,class:"form-error"},Z={class:"form-group"},ee={key:0,class:"form-error"},se={class:"form-group"},te={class:"form-group"},le={class:"checkbox-label"},oe={key:0,class:"form-group"},ne={class:"radio-group"},ae={class:"radio-label"},ie={class:"radio-label"},re={key:1,class:"error-message"},ue={class:"dialog-footer"},ce=["disabled"],de={__name:"QuickResponseDialog",props:{isOpen:{type:Boolean,default:!1},projectId:{type:String,required:!0},editingResponse:{type:Object,default:null},defaultIsGlobal:{type:Boolean,default:!1}},emits:["close","saved"],setup(l,{emit:o}){const s=l,c=o,p=U(),_=j(null),v=`dialog-title-${Math.random().toString(36).slice(2)}`,n=j({label:"",content:"",category:"",autoSubmit:!1,isGlobal:!1}),g=j(!1),h=j(null),C=w(()=>!!s.editingResponse),S=w(()=>n.value.label&&n.value.label.length>50?"Label must be 50 characters or less":null),x=w(()=>n.value.content&&n.value.content.length>1e4?"Content must be 10,000 characters or less":null),P=w(()=>n.value.label.trim().length>0&&n.value.label.length<=50&&n.value.content.trim().length>0&&n.value.content.length<=1e4);L(()=>s.isOpen,b=>{b&&(s.editingResponse?n.value={label:s.editingResponse.label||"",content:s.editingResponse.content||"",category:s.editingResponse.category||"",autoSubmit:s.editingResponse.autoSubmit||!1,isGlobal:s.editingResponse.projectId===null}:n.value={label:"",content:"",category:"",autoSubmit:!1,isGlobal:s.defaultIsGlobal},h.value=null,H(()=>{var t;(t=_.value)==null||t.focus()}))}),L(()=>s.isOpen,b=>{if(b){const t=a=>{a.key==="Escape"&&$()};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)}});function $(){c("close")}async function B(){if(!(!P.value||g.value)){g.value=!0,h.value=null;try{const b={label:n.value.label.trim(),content:n.value.content,category:n.value.category.trim()||null,autoSubmit:n.value.autoSubmit};C.value?await p.updateResponse(s.editingResponse.id,b):(b.isGlobal=n.value.isGlobal,await p.createResponse(s.projectId,b)),c("saved"),c("close")}catch(b){h.value=b.message||"Failed to save quick response"}finally{g.value=!1}}}return(b,t)=>(r(),M(V,{to:"body"},[l.isOpen?(r(),d("div",{key:0,class:"dialog-overlay",onClick:G($,["self"])},[e("div",{class:"dialog",role:"dialog","aria-modal":"true","aria-labelledby":v},[e("div",Y,[e("h2",{id:v,class:"dialog-title"},y(C.value?"Edit Quick Response":"Add Quick Response"),1),e("button",{class:"close-button","aria-label":"Close dialog",onClick:$}," × ")]),e("form",{class:"dialog-form",onSubmit:G(B,["prevent"])},[e("div",J,[e("div",W,[t[7]||(t[7]=e("label",{for:"qr-label",class:"form-label"},"Label *",-1)),I(e("input",{id:"qr-label",ref_key:"labelInput",ref:_,"onUpdate:modelValue":t[0]||(t[0]=a=>n.value.label=a),type:"text",class:"form-input",placeholder:"e.g., Yes, LGTM, Run tests",maxlength:"50",required:"",onBlur:t[1]||(t[1]=a=>n.value.label=n.value.label.trim())},null,544),[[q,n.value.label]]),t[8]||(t[8]=e("span",{class:"form-help"},"Short text shown on the button (max 50 characters)",-1)),S.value?(r(),d("span",X,y(S.value),1)):R("",!0)]),e("div",Z,[t[9]||(t[9]=e("label",{for:"qr-content",class:"form-label"},"Content *",-1)),I(e("textarea",{id:"qr-content","onUpdate:modelValue":t[2]||(t[2]=a=>n.value.content=a),class:"form-textarea",placeholder:"The full message that will be inserted into the prompt",rows:"4",maxlength:"10000",required:""},null,512),[[q,n.value.content]]),t[10]||(t[10]=e("span",{class:"form-help"},"The full message that will be inserted (max 10,000 characters)",-1)),x.value?(r(),d("span",ee,y(x.value),1)):R("",!0)]),e("div",se,[t[11]||(t[11]=e("label",{for:"qr-category",class:"form-label"},"Category (optional)",-1)),I(e("input",{id:"qr-category","onUpdate:modelValue":t[3]||(t[3]=a=>n.value.category=a),type:"text",class:"form-input",placeholder:"e.g., feedback, commands",maxlength:"50"},null,512),[[q,n.value.category]]),t[12]||(t[12]=e("span",{class:"form-help"},"Optional grouping for organization",-1))]),e("div",te,[e("label",le,[I(e("input",{"onUpdate:modelValue":t[4]||(t[4]=a=>n.value.autoSubmit=a),type:"checkbox",class:"checkbox-input"},null,512),[[z,n.value.autoSubmit]]),t[13]||(t[13]=e("span",{class:"checkbox-text"},"Auto-submit",-1))]),t[14]||(t[14]=e("span",{class:"form-help indent"},"Send immediately when clicked (no confirmation)",-1))]),C.value?R("",!0):(r(),d("div",oe,[t[17]||(t[17]=e("span",{class:"form-label"},"Scope",-1)),e("div",ne,[e("label",ae,[I(e("input",{"onUpdate:modelValue":t[5]||(t[5]=a=>n.value.isGlobal=a),type:"radio",value:!1,class:"radio-input"},null,512),[[O,n.value.isGlobal]]),t[15]||(t[15]=e("span",{class:"radio-text"},"Project-specific",-1))]),e("label",ie,[I(e("input",{"onUpdate:modelValue":t[6]||(t[6]=a=>n.value.isGlobal=a),type:"radio",value:!0,class:"radio-input"},null,512),[[O,n.value.isGlobal]]),t[16]||(t[16]=e("span",{class:"radio-text"},"Global (all projects)",-1))])])])),h.value?(r(),d("div",re,y(h.value),1)):R("",!0)]),e("div",ue,[e("button",{type:"button",class:"btn btn-secondary",onClick:$}," Cancel "),e("button",{type:"submit",class:"btn btn-primary",disabled:!P.value||g.value},y(g.value?"Saving...":C.value?"Save Changes":"Save Quick Response"),9,ce)])],32)])])):R("",!0)]))}},pe=T(de,[["__scopeId","data-v-f2c13fd9"]]),be={class:"settings-panel",role:"dialog","aria-modal":"true"},fe={class:"settings-header"},ve={class:"settings-content"},ge={class:"section"},he={class:"section-header"},me={key:0,class:"loading-state"},ye={key:1,class:"empty-state"},ke={key:2,class:"response-list"},Re={class:"response-info"},_e={class:"response-label"},je={class:"response-content"},Ce={key:0,class:"auto-badge"},we={class:"response-actions"},$e=["disabled","onClick"],Ie=["disabled","onClick"],Se=["onClick"],xe=["onClick"],De={class:"section"},Pe={class:"section-header"},Be={key:0,class:"loading-state"},Ge={key:1,class:"empty-state"},Qe={key:2,class:"response-list"},qe={class:"response-info"},Ee={class:"response-label"},Me={class:"response-content"},Ve={key:0,class:"auto-badge"},Le={class:"response-actions"},Oe=["disabled","onClick"],Ae=["disabled","onClick"],Fe=["onClick"],Te=["onClick"],Ue={class:"confirm-dialog"},Ne={class:"confirm-message"},ze={class:"confirm-actions"},He={__name:"QuickResponseSettings",props:{isOpen:{type:Boolean,default:!1},projectId:{type:String,required:!0}},emits:["close"],setup(l,{expose:o}){const s=U(),c=j(!1),p=j(null),_=j(!1),v=j(null),n=w(()=>s.loading),g=w(()=>s.projectResponses),h=w(()=>s.globalResponses);function C(a){return a.length<=60?a:`${a.substring(0,60)}...`}function S(a){p.value=null,_.value=a,c.value=!0}function x(a){p.value=a,_.value=a.projectId===null,c.value=!0}function P(){c.value=!1,p.value=null}function $(){}function B(a){v.value=a}async function b(){if(v.value)try{await s.deleteResponse(v.value.id),v.value=null}catch(a){console.error("Failed to delete response:",a)}}async function t(a,u,i,m){const f=i+m;if(f<0||f>=u.length)return;const D=[...u];[D[i],D[f]]=[D[f],D[i]];const N=D.map(Q=>Q.id);try{await s.reorderResponses(a,N)}catch(Q){console.error("Failed to reorder responses:",Q)}}return o({moveResponse:t}),(a,u)=>(r(),d(E,null,[(r(),M(V,{to:"body"},[l.isOpen?(r(),d("div",{key:0,class:"settings-overlay",onClick:u[3]||(u[3]=G(i=>a.$emit("close"),["self"]))},[e("div",be,[e("div",fe,[u[6]||(u[6]=e("h2",{class:"settings-title"}," Quick Responses ",-1)),e("button",{class:"close-button","aria-label":"Close settings",onClick:u[0]||(u[0]=i=>a.$emit("close"))}," × ")]),e("div",ve,[e("div",ge,[e("div",he,[u[7]||(u[7]=e("h3",{class:"section-title"}," Project Responses ",-1)),e("button",{class:"add-button",onClick:u[1]||(u[1]=i=>S(!1))}," + Add ")]),n.value?(r(),d("div",me," Loading... ")):g.value.length===0?(r(),d("div",ye," No project-specific quick responses yet. ")):(r(),d("ul",ke,[(r(!0),d(E,null,A(g.value,(i,m)=>(r(),d("li",{key:i.id,class:"response-item"},[e("div",Re,[e("span",_e,y(i.label),1),e("span",je,y(C(i.content)),1),i.autoSubmit?(r(),d("span",Ce,"Auto-submit")):R("",!0)]),e("div",we,[e("button",{class:"action-button",disabled:m===0,title:"Move up",onClick:f=>t(l.projectId,g.value,m,-1)}," ↑ ",8,$e),e("button",{class:"action-button",disabled:m===g.value.length-1,title:"Move down",onClick:f=>t(l.projectId,g.value,m,1)}," ↓ ",8,Ie),e("button",{class:"action-button",title:"Edit","aria-label":"Edit",onClick:f=>x(i)}," ✏️ ",8,Se),e("button",{class:"action-button action-danger",title:"Delete",onClick:f=>B(i)}," 🗑️ ",8,xe)])]))),128))]))]),e("div",De,[e("div",Pe,[u[8]||(u[8]=e("h3",{class:"section-title"}," Global Responses ",-1)),e("button",{class:"add-button",onClick:u[2]||(u[2]=i=>S(!0))}," + Add ")]),n.value?(r(),d("div",Be," Loading... ")):h.value.length===0?(r(),d("div",Ge," No global quick responses yet. Global responses appear in all projects. ")):(r(),d("ul",Qe,[(r(!0),d(E,null,A(h.value,(i,m)=>(r(),d("li",{key:i.id,class:"response-item"},[e("div",qe,[e("span",Ee,y(i.label),1),e("span",Me,y(C(i.content)),1),i.autoSubmit?(r(),d("span",Ve,"Auto-submit")):R("",!0)]),e("div",Le,[e("button",{class:"action-button",disabled:m===0,title:"Move up",onClick:f=>t(null,h.value,m,-1)}," ↑ ",8,Oe),e("button",{class:"action-button",disabled:m===h.value.length-1,title:"Move down",onClick:f=>t(null,h.value,m,1)}," ↓ ",8,Ae),e("button",{class:"action-button",title:"Edit","aria-label":"Edit",onClick:f=>x(i)}," ✏️ ",8,Fe),e("button",{class:"action-button action-danger",title:"Delete",onClick:f=>B(i)}," 🗑️ ",8,Te)])]))),128))]))])])])])):R("",!0)])),K(pe,{"is-open":c.value,"project-id":l.projectId,"editing-response":p.value,"default-is-global":_.value,onClose:P,onSaved:$},null,8,["is-open","project-id","editing-response","default-is-global"]),(r(),M(V,{to:"body"},[v.value?(r(),d("div",{key:0,class:"confirm-overlay",onClick:u[5]||(u[5]=G(i=>v.value=null,["self"]))},[e("div",Ue,[e("p",Ne,' Are you sure you want to delete "'+y(v.value.label)+'"? ',1),e("div",ze,[e("button",{class:"btn btn-secondary",onClick:u[4]||(u[4]=i=>v.value=null)}," Cancel "),e("button",{class:"btn btn-danger",onClick:b}," Delete ")])])])):R("",!0)]))],64))}},We=T(He,[["__scopeId","data-v-9fffa8ff"]]);export{We as Q,U as a,Je as u};