circuschief 0.1.2 → 0.1.3
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.
- package/package.json +1 -1
- package/packages/server/bin/cli.js +1 -1
- package/packages/web/dist/assets/{ActiveSessionsView-2qqzd1tM.js → ActiveSessionsView-BryJ-V3f.js} +1 -1
- package/packages/web/dist/assets/{AgentLogsView-DbulYJ7p.js → AgentLogsView-c42v_j_5.js} +1 -1
- package/packages/web/dist/assets/{ArchiveConfirmModal-Byx5Usg6.js → ArchiveConfirmModal-DBuOmtXu.js} +1 -1
- package/packages/web/dist/assets/{CommandButtonDetailView-TMSVeeLH.js → CommandButtonDetailView-CkKJ3Htz.js} +1 -1
- package/packages/web/dist/assets/{EffortLevelSelector-DIj0Wykj.js → EffortLevelSelector-BHJHSqul.js} +1 -1
- package/packages/web/dist/assets/{GeneralSettingsView-1a3MKUwM.js → GeneralSettingsView-CdxfteZ2.js} +1 -1
- package/packages/web/dist/assets/{InterpolationHelp-DX4mjTd3.js → InterpolationHelp-DabnHhE4.js} +1 -1
- package/packages/web/dist/assets/MarkdownEditor-k4zBLGqU.js +2 -0
- package/packages/web/dist/assets/{ModelSelector-C9RlCVhC.js → ModelSelector-BWIU4ud7.js} +1 -1
- package/packages/web/dist/assets/{NewSessionView-B9W_35D0.js → NewSessionView-BIZl8QlH.js} +1 -1
- package/packages/web/dist/assets/{PathChooser-Di96sZpx.js → PathChooser-nhat_Pz4.js} +1 -1
- package/packages/web/dist/assets/{ProjectEditView-ZnWKaSqt.js → ProjectEditView-DD-2_VrW.js} +1 -1
- package/packages/web/dist/assets/{ProjectListView-C_yWe1QB.js → ProjectListView-BOWbfoXQ.js} +1 -1
- package/packages/web/dist/assets/{ProjectNewView-ONPpDPNA.js → ProjectNewView-DC4uvSn2.js} +1 -1
- package/packages/web/dist/assets/{ProvidersView-BPd0xozI.js → ProvidersView-DT5afh1V.js} +1 -1
- package/packages/web/dist/assets/{QuickResponseSettings-DB8MD7dm.js → QuickResponseSettings-Bk9mq96x.js} +1 -1
- package/packages/web/dist/assets/{QuickResponsesPanel-D0B5nzGw.js → QuickResponsesPanel-BRvcnkQr.js} +1 -1
- package/packages/web/dist/assets/{ResizableTextarea-DDChlp5b.js → ResizableTextarea-CwGM4P3c.js} +1 -1
- package/packages/web/dist/assets/{SessionCard-BD6MuoON.js → SessionCard-BGDVHU9u.js} +1 -1
- package/packages/web/dist/assets/{SessionDetailView-BrMG4p2-.css → SessionDetailView-7bWgC7Es.css} +1 -1
- package/packages/web/dist/assets/{SessionDetailView-lNqco-dG.js → SessionDetailView-CHYrx2Ab.js} +24 -24
- package/packages/web/dist/assets/{SessionFormOptions-Doyl_mON.js → SessionFormOptions-8qvL25ca.js} +1 -1
- package/packages/web/dist/assets/{SessionListView-B6emPw4T.js → SessionListView-927Yq6Il.js} +1 -1
- package/packages/web/dist/assets/{SessionLogStream-BFjl4wy7.js → SessionLogStream-B-w3n4c3.js} +1 -1
- package/packages/web/dist/assets/{SettingsView-CJNMi4aJ.js → SettingsView-Dd0ZJ4Nv.js} +1 -1
- package/packages/web/dist/assets/{SlashCommandWizard-CpNLU4vI.js → SlashCommandWizard-CzyLjsdJ.js} +1 -1
- package/packages/web/dist/assets/{SummarySettingsView-DGjXv3Px.js → SummarySettingsView-DTbh7uAF.js} +1 -1
- package/packages/web/dist/assets/{TemplateDetailView-DqA7M5Pe.js → TemplateDetailView-BOnhkdtH.js} +1 -1
- package/packages/web/dist/assets/{commandButtons-CCojrcrv.js → commandButtons-CY87n64i.js} +1 -1
- package/packages/web/dist/assets/{index-Om-y-ZVA.js → index--OtPwBbF.js} +3 -3
- package/packages/web/dist/assets/{index-DGzmo-Vd.js → index-BRUlEEHm.js} +1 -1
- package/packages/web/dist/assets/{index-BGUUMf-N.js → index-BXUcbV4K.js} +1 -1
- package/packages/web/dist/assets/{index-Bs1D4Ibo.js → index-Bi4bQ_UB.js} +1 -1
- package/packages/web/dist/assets/{index-Xz0F6Or0.js → index-BshkV3r5.js} +1 -1
- package/packages/web/dist/assets/{index-D3EUAUMi.js → index-C6m-WfqP.js} +1 -1
- package/packages/web/dist/assets/{index-jHzQFk08.js → index-CO4EBOFw.js} +1 -1
- package/packages/web/dist/assets/{index-DJVf5YvL.js → index-Ce6sL47U.js} +1 -1
- package/packages/web/dist/assets/{index-DZvIqKGE.js → index-CjHb9rXv.js} +1 -1
- package/packages/web/dist/assets/{index-DFFF6QRP.js → index-DPwwgloE.js} +1 -1
- package/packages/web/dist/assets/{index-B0XHqJYv.js → index-DcA6pqXV.js} +1 -1
- package/packages/web/dist/assets/{index-LoOsRfMI.js → index-DkLkDgig.js} +8 -8
- package/packages/web/dist/assets/{index-02CN8N8c.js → index-Dx0sYW7H.js} +1 -1
- package/packages/web/dist/assets/{index-BwySZO9U.js → index-DxboI9i-.js} +1 -1
- package/packages/web/dist/assets/{index-CLVE7KEk.js → index-NzLFVaCi.js} +1 -1
- package/packages/web/dist/assets/{index-DSOHGmA9.js → index-aCw-iXPX.js} +1 -1
- package/packages/web/dist/assets/{index-DZZ8d3HG.js → index-gMpnPf1V.js} +1 -1
- package/packages/web/dist/assets/{index-BN1MywtA.js → index-i1o916sk.js} +1 -1
- package/packages/web/dist/assets/{index-ZKQQ6-mY.js → index-jGjvGBfk.js} +1 -1
- package/packages/web/dist/assets/{projects-DWX5jGcZ.js → projects-C2Y29PSJ.js} +1 -1
- package/packages/web/dist/assets/{providers-CfGxUhUu.js → providers-CeJXuo0Q.js} +1 -1
- package/packages/web/dist/assets/{sessions-i5xO8Qao.js → sessions-CMby7ij3.js} +1 -1
- package/packages/web/dist/assets/{settings-dSK3wckF.js → settings-BplIxCbi.js} +1 -1
- package/packages/web/dist/index.html +1 -1
- package/packages/web/dist/assets/MarkdownEditor-DeCPmMTP.js +0 -2
package/packages/web/dist/assets/{SessionFormOptions-Doyl_mON.js → SessionFormOptions-8qvL25ca.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{M as n}from"./ModelSelector-
|
|
1
|
+
import{M as n}from"./ModelSelector-BWIU4ud7.js";import{M as r}from"./SlashCommandWizard-CzyLjsdJ.js";import{E as m}from"./EffortLevelSelector-BHJHSqul.js";import{_ as p,a,c as i,b as t,d as s,k as u}from"./index-DkLkDgig.js";const g={class:"form-group"},f={class:"options-row"},v={class:"mode-selector-wrapper"},b={class:"model-selector-wrapper"},c={class:"effort-selector-wrapper"},k={class:"thinking-toggle"},y={class:"field-with-badge"},h={class:"toggle-switch"},S=["checked"],I={key:0,class:"thinking-toggle"},w={class:"field-with-badge"},E={class:"toggle-switch"},B=["checked"],V={__name:"SessionFormOptions",props:{mode:{type:String,default:"yolo"},model:{type:String,default:null},effortLevel:{type:String,default:null},thinkingEnabled:{type:Boolean,default:!0},startImmediately:{type:Boolean,default:!0},hideStartImmediately:{type:Boolean,default:!1}},emits:["update:mode","update:model","update:providerId","update:effortLevel","update:thinkingEnabled","update:startImmediately"],setup(o){return(d,e)=>(a(),i("div",g,[e[10]||(e[10]=t("label",{class:"form-label"},"Options",-1)),t("div",f,[t("div",v,[s(r,{"model-value":o.mode,"onUpdate:modelValue":e[0]||(e[0]=l=>d.$emit("update:mode",l))},null,8,["model-value"])]),t("div",b,[s(n,{"model-value":o.model,"onUpdate:modelValue":e[1]||(e[1]=l=>d.$emit("update:model",l)),"onUpdate:providerId":e[2]||(e[2]=l=>d.$emit("update:providerId",l))},null,8,["model-value"])]),t("div",c,[s(m,{"model-value":o.effortLevel,"onUpdate:modelValue":e[3]||(e[3]=l=>d.$emit("update:effortLevel",l))},null,8,["model-value"])]),t("div",k,[t("div",y,[t("label",h,[t("input",{type:"checkbox",checked:o.thinkingEnabled,onChange:e[4]||(e[4]=l=>d.$emit("update:thinkingEnabled",l.target.checked))},null,40,S),e[6]||(e[6]=t("span",{class:"toggle-slider"},null,-1))]),e[7]||(e[7]=t("span",{class:"toggle-label"},"Enable Thinking",-1))])]),o.hideStartImmediately?u("",!0):(a(),i("div",I,[t("div",w,[t("label",E,[t("input",{type:"checkbox",checked:o.startImmediately,onChange:e[5]||(e[5]=l=>d.$emit("update:startImmediately",l.target.checked))},null,40,B),e[8]||(e[8]=t("span",{class:"toggle-slider"},null,-1))]),e[9]||(e[9]=t("span",{class:"toggle-label"},"Start Immediately",-1))])]))])]))}},C=p(V,[["__scopeId","data-v-cbbbb3d9"]]);export{C as S};
|
package/packages/web/dist/assets/{SessionListView-B6emPw4T.js → SessionListView-927Yq6Il.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as de,y as Me,x as U,z as De,l as R,A as Je,B as Qe,C as Xe,_ as ge,a as s,c as o,b as e,F as J,r as Q,u as v,E as ne,t as _,k as S,G as Z,i as _e,f as Te,d as Y,w as ve,o as Oe,j as N,v as fe,n as $e,e as re,h as ae,g as Ne,q as Pe,H as xe,p as Le,I as Ze,J as Ve,s as et}from"./index-LoOsRfMI.js";import{u as Ue}from"./projects-DWX5jGcZ.js";import{u as ye}from"./sessions-i5xO8Qao.js";import{u as je,a as Ge,f as tt,b as st}from"./SessionLogStream-BFjl4wy7.js";import{a as Be}from"./ApiClient-Dbs1H78V.js";import{u as Ke}from"./commandButtons-CCojrcrv.js";import{S as qe}from"./SessionCard-BD6MuoON.js";import{S as nt,M as ot,A as lt}from"./ArchiveConfirmModal-Byx5Usg6.js";import{u as He}from"./EffortLevelSelector-DIj0Wykj.js";import{u as at}from"./providers-CfGxUhUu.js";import{M as rt}from"./ModelSelector-C9RlCVhC.js";import{I as We}from"./InterpolationHelp-DX4mjTd3.js";import{R as it}from"./ResizableTextarea-DDChlp5b.js";import{S as dt}from"./SessionFormOptions-Doyl_mON.js";import{S as ut,a as ct}from"./SlashCommandWizard-CpNLU4vI.js";import"./settings-dSK3wckF.js";function mt(){const c=Me({}),m=Me({}),i=Me({});async function p(a){const n=a.filter(f=>!c[f.id]&&!m[f.id]).map(f=>f.id);if(n.length!==0){for(const f of n)m[f]=!0,i[f]=!1;try{const f=await Be.getSessionSummariesBatch(n);for(const r of n)f[r]&&(c[r]=f[r]),m[r]=!1}catch(f){console.warn("Failed to fetch summaries batch:",f.message);for(const r of n)i[r]=!0,m[r]=!1}}}async function u(a){var n;m[a]=!0,i[a]=!1;try{const f=await Be.getSessionSummary(a);f&&(c[a]=f)}catch(f){((n=f.response)==null?void 0:n.status)!==404&&(console.warn(`Failed to fetch summary for session ${a}:`,f.message),i[a]=!0)}finally{m[a]=!1}}async function y(a){i[a]=!1,await u(a)}function A(a,n){c[a]=n,m[a]=!1,i[a]=!1}function E(a){delete c[a],delete m[a],delete i[a]}function g(a,n=400){let f=null;const r=de(a,()=>{clearTimeout(f),f=setTimeout(()=>{const w=a();p(w)},n)});return()=>{clearTimeout(f),r()}}return{summaries:c,loadingSummaries:m,summaryErrors:i,fetchSummariesBatch:p,fetchSummary:u,retryFetchSummary:y,updateSummary:A,cleanupSummary:E,watchSessionsForSummaries:g}}function ze(){const c=ye();function m(a){c.statusFilter===a?c.setStatusFilter(null):c.setStatusFilter(a)}function i(a){c.starredFilter===a?c.setStarredFilter(null):c.setStarredFilter(a)}function p(){c.starredFilter===null?c.setStarredFilter("starred"):c.starredFilter==="starred"?c.setStarredFilter("unstarred"):c.setStarredFilter(null)}const u=U(()=>c.starredFilter==="starred"?"Showing starred sessions only. Click to filter unstarred.":c.starredFilter==="unstarred"?"Showing unstarred sessions only. Click to show all.":"Showing all sessions. Click to filter by starred.");function y(){c.scheduledFilter===null?c.setScheduledFilter("scheduled"):c.scheduledFilter==="scheduled"?c.setScheduledFilter("not-scheduled"):c.setScheduledFilter(null)}const A=U(()=>c.scheduledFilter==="scheduled"?"Showing workflows with scheduled sessions. Click to filter non-scheduled.":c.scheduledFilter==="not-scheduled"?"Showing workflows without scheduled sessions. Click to show all.":"Showing all workflows. Click to filter by scheduled."),E=U(()=>{let a=c.groupedSessions;c.starredFilter==="starred"?a=a.filter($=>$.parent.starred):c.starredFilter==="unstarred"&&(a=a.filter($=>!$.parent.starred));const n=a.map($=>({group:$,status:c.getWorkflowAggregatedStatus($.parent.id)}));let f=n;c.scheduledFilter&&(f=n.filter(({status:$})=>{const j=$.scheduledCount>0;return c.scheduledFilter==="scheduled"?j:!j}));let r=0,w=0;for(const{status:$}of f)$.effectiveStatus==="running"?r++:w++;return{running:r,idle:w}}),g=U(()=>{let a=c.groupedSessions;return c.statusFilter&&(a=a.filter(n=>{const r=c.getWorkflowAggregatedStatus(n.parent.id).effectiveStatus;return c.statusFilter==="running"&&r==="running"||c.statusFilter==="idle"&&r==="idle"})),c.starredFilter==="starred"?a=a.filter(n=>n.parent.starred):c.starredFilter==="unstarred"&&(a=a.filter(n=>!n.parent.starred)),c.scheduledFilter&&(a=a.filter(n=>{const r=c.getWorkflowAggregatedStatus(n.parent.id).scheduledCount>0;return!!(c.scheduledFilter==="scheduled"&&r||c.scheduledFilter==="not-scheduled"&&!r)})),a});return{toggleFilter:m,toggleStarredFilter:i,toggleStarFilterIcon:p,starFilterTooltip:u,toggleScheduledFilterIcon:y,scheduledFilterTooltip:A,filteredGroupedSessions:g,statusFilterCounts:E}}function pt(c,m){const i=Ue(),p=ye(),u=Ke(),y=je(),{fetchSummariesBatch:A,updateSummary:E,cleanupSummary:g}=m,a=[];let n=null;const f=R(!1);return de(c,async r=>{if(!r)return;f.value=!1,a.forEach(M=>M()),a.length=0,n&&(n(),n=null),await i.fetchProject(r),await p.fetchSessions(r),await u.fetchButtons(r),A(p.sessions);const{subscribe:w,unsubscribe:$,onSessionCreated:j,onSessionUpdated:l,onSessionDeleted:H,onSessionSummaryUpdated:W,onCommandRunOutput:B,onCommandRunComplete:F,onCommandRunError:d,onCommandRunDeleted:z,onKanbanBoardUpdated:b,onKanbanCardMoved:ee,onKanbanCardAdded:oe,onKanbanCardRemoved:te}=Je(r);n=$,w(),a.push(j(M=>{p.addSessionToList(M)})),a.push(l(M=>{p.updateSession(M)})),a.push(H(M=>{p.removeSessionFromList(M),g(M)})),a.push(W((M,P)=>{E(M,P)})),a.push(B((M,P,T,t)=>{var me;const h=u.runs[M],ie=p.sessions.find(he=>he.id===P),le=(me=ie==null?void 0:ie.latestCommandRuns)==null?void 0:me.find(he=>he.runId===M),ce=(h==null?void 0:h.startedAt)||(le==null?void 0:le.startedAt)||Date.now();u.runs[M]||(u.runs[M]={runId:M,buttonId:T,sessionId:P,status:"running",output:"",exitCode:null,startedAt:ce,outputTruncated:!1}),u.appendOutput(M,t),p.updateSessionCommandRun(P,T,{buttonId:T,status:"running",runId:M,startedAt:ce})})),a.push(F(({runId:M,sessionId:P,buttonId:T,exitCode:t,output:h})=>{u.runs[M]||(u.runs[M]={runId:M,buttonId:T,sessionId:P,status:"running",output:"",exitCode:null,startedAt:Date.now(),outputTruncated:!1}),u.completeRun(M,t,h);const G=t===0?"success":"error";p.updateSessionCommandRun(P,T,{buttonId:T,status:G,exitCode:t,runId:M,completedAt:Date.now()})})),a.push(d((M,P,T,t)=>{u.runs[M]||(u.runs[M]={runId:M,buttonId:T,sessionId:P,status:"running",output:"",exitCode:null,startedAt:Date.now(),outputTruncated:!1}),u.errorRun(M,t),p.updateSessionCommandRun(P,T,{buttonId:T,status:"error",runId:M,completedAt:Date.now()})})),a.push(z((M,P,T)=>{u.clearRun(M),p.removeSessionCommandRun(P,T)})),a.push(b(M=>{y.handleBoardUpdated(M)})),a.push(ee((M,P,T,t)=>{y.handleCardMoved(M,P,T,t)})),a.push(oe((M,P)=>{y.handleCardAdded(M,P)})),a.push(te((M,P)=>{y.handleCardRemoved(M,P)}))},{immediate:!0}),De(()=>{a.forEach(r=>r()),n&&n()}),{archivedLoaded:f}}function vt(){const c=ye(),m=Ge(),i=R({}),p={},u=new Map,y=4;function A(r,w=0){fetch(`/api/sessions/${r}/streaming-state`).then($=>$.ok?$.json():null).then($=>{var j;if($&&((j=$.workLogs)!=null&&j.length||$.partialText||$.thinking)){m.hydrateSessionState(r,$);const l=u.get(r);l&&(clearTimeout(l.timeout),u.delete(r))}else E(r,w)}).catch(()=>{E(r,w)})}function E(r,w=0){if(w>=y||!i.value[r])return;const $=c.sessions.find(H=>H.id===r);if(!$||!["running","starting"].includes($.status))return;const j=1500*Math.pow(2,w),l=setTimeout(()=>{u.delete(r),A(r,w+1)},j);u.set(r,{count:w,timeout:l})}function g(r){if(i.value[r])return;const w=Xe(r),$=[];$.push(w.onWorkLog(j=>{m.addSessionWorkLog(r,j)})),$.push(w.onPartial(j=>{j&&m.setSessionPartialText(r,j)})),$.push(w.onThinkingPartial(j=>{j&&m.setPartialThinking(j,r)})),$.push(w.onChangesUpdate(j=>{m.setSessionFileCount(r,j)})),$.push(w.onStatus(j=>{["running","starting"].includes(j)?p[r]&&(clearTimeout(p[r]),delete p[r]):p[r]=setTimeout(()=>{delete p[r],m.clearSessionEphemeralState(r)},2e3)})),w.subscribe(),i.value[r]={subscription:w,cleanup:()=>{$.forEach(j=>j&&j()),w.unsubscribe()}},A(r)}function a(r){const w=i.value[r];w&&(w.cleanup(),delete i.value[r]),p[r]&&(clearTimeout(p[r]),delete p[r]);const $=u.get(r);$&&(clearTimeout($.timeout),u.delete(r))}de(()=>c.sessions.filter(r=>["running","starting"].includes(r.status)).map(r=>r.id),(r,w=[])=>{const $=r.filter(l=>!w.includes(l)),j=w.filter(l=>!r.includes(l));$.forEach(l=>g(l)),j.forEach(l=>a(l))},{immediate:!0});const{onReconnect:n}=Qe(),f=n(()=>{for(const r of Object.keys(i.value))A(r)});return De(()=>{Object.keys(i.value).forEach(r=>a(r)),f()}),{activeSubscriptions:i}}const ft={class:"filters-container"},ht={class:"status-filters"},bt=["aria-label","onClick"],gt={class:"filter-label"},yt={class:"filter-count"},kt=["title"],St={key:0,class:"star-icon"},$t={key:1,class:"star-icon star-crossed"},Et={key:2,class:"star-icon"},Ct=["title"],wt={key:0,class:"schedule-icon"},_t={key:1,class:"schedule-icon schedule-crossed"},Tt={key:2,class:"schedule-icon"},jt={__name:"SessionFiltersPanel",props:{showStatusFilters:{type:Boolean,default:!0},showScheduledFilter:{type:Boolean,default:!0}},setup(c){const m=ye(),{toggleFilter:i,toggleStarFilterIcon:p,starFilterTooltip:u,toggleScheduledFilterIcon:y,scheduledFilterTooltip:A,statusFilterCounts:E}=ze();return(g,a)=>(s(),o("div",ft,[e("div",ht,[c.showStatusFilters?(s(),o(J,{key:0},Q(["running","idle"],n=>e("button",{key:n,class:ne(["filter-btn",{active:v(m).statusFilter===n,"filter-btn-empty":v(E)[n]===0}]),"aria-label":`${n} (${v(E)[n]})`,onClick:f=>v(i)(n)},[e("span",gt,_(n),1),e("span",yt,_(v(E)[n]),1)],10,bt)),64)):S("",!0),e("button",{class:ne(["filter-btn star-btn",{"star-filter-active":v(m).starredFilter==="starred","star-filter-unstarred":v(m).starredFilter==="unstarred","star-filter-all":v(m).starredFilter===null}]),title:v(u),onClick:a[0]||(a[0]=(...n)=>v(p)&&v(p)(...n))},[v(m).starredFilter==="starred"?(s(),o("span",St,"⭐")):v(m).starredFilter==="unstarred"?(s(),o("span",$t,"⭐")):(s(),o("span",Et,"☆"))],10,kt),c.showScheduledFilter?(s(),o("button",{key:1,class:ne(["filter-btn schedule-btn",{"schedule-filter-active":v(m).scheduledFilter==="scheduled","schedule-filter-not-scheduled":v(m).scheduledFilter==="not-scheduled","schedule-filter-all":v(m).scheduledFilter===null}]),title:v(A),onClick:a[1]||(a[1]=(...n)=>v(y)&&v(y)(...n))},[v(m).scheduledFilter==="scheduled"?(s(),o("span",wt,"⏰")):v(m).scheduledFilter==="not-scheduled"?(s(),o("span",_t,"⏰")):(s(),o("span",Tt,"⏰"))],10,Ct)):S("",!0)])]))}},Ie=ge(jt,[["__scopeId","data-v-2c9a63d9"]]),Mt={key:0,class:"skeleton-list"},Ft={key:1,class:"error-message"},Rt={key:2,class:"empty-state"},At={key:3,class:"session-list"},xt={key:0,class:"load-more-container"},Lt=["disabled"],Bt={key:0},Dt={key:1},Ot={__name:"ArchivedTabContent",props:{summaries:{type:Object,required:!0},loadingSummaries:{type:Object,required:!0},summaryErrors:{type:Object,required:!0}},emits:["retrySummary","unarchive","loadMore"],setup(c){const m=ye(),i=U(()=>{const{total:p,offset:u}=m.archivedPagination;return Math.max(0,p-u)});return(p,u)=>(s(),o("div",null,[v(m).archivedPagination.loading&&v(m).archivedSessions.length===0?(s(),o("div",Mt,[(s(),o(J,null,Q(3,y=>e("div",{key:y,class:"skeleton card",style:{height:"120px"}})),64))])):v(m).error?(s(),o("div",Ft,_(v(m).error),1)):v(m).archivedSessions.length===0?(s(),o("div",Rt,[...u[3]||(u[3]=[e("p",null,"No archived sessions. Archive completed sessions to keep your session list tidy.",-1)])])):(s(),o("div",At,[(s(!0),o(J,null,Q(v(m).archivedSessions,y=>(s(),Z(qe,{key:y.id,session:y,"show-summary":!0,summary:c.summaries[y.id],"summary-loading":c.loadingSummaries[y.id],"summary-error":c.summaryErrors[y.id],"show-unarchive":!0,"kanban-enabled":!1,"pr-url":y.prUrl,"pr-summary":c.summaries[y.id],onRetrySummary:u[0]||(u[0]=A=>p.$emit("retrySummary",A)),onUnarchive:u[1]||(u[1]=A=>p.$emit("unarchive",A))},null,8,["session","summary","summary-loading","summary-error","pr-url","pr-summary"]))),128)),v(m).archivedPagination.hasMore?(s(),o("div",xt,[e("button",{class:"btn btn-secondary",disabled:v(m).archivedPagination.loading,onClick:u[2]||(u[2]=y=>p.$emit("loadMore"))},[v(m).archivedPagination.loading?(s(),o("span",Bt,"Loading...")):(s(),o("span",Dt,"Load More ("+_(i.value)+" remaining)",1))],8,Lt)])):S("",!0)]))]))}},Pt=ge(Ot,[["__scopeId","data-v-c0906664"]]),Ut={class:"scheduled-session-card card"},Vt={class:"card-header"},It={class:"session-info"},Nt={class:"session-name"},Gt={class:"timing-info"},Kt={class:"timing-item"},qt={class:"timing-details"},Ht={class:"timing-text"},Wt={class:"timing-absolute"},zt={key:0,class:"timing-item"},Yt={class:"timing-details"},Jt={class:"timing-absolute"},Qt={class:"card-actions"},Xt=["disabled"],Zt=["disabled"],es={__name:"ScheduledSessionCard",props:{session:{type:Object,required:!0}},setup(c){const m=c,i=ye(),p=_e(),u=R(!1),y=R(!1),A=U(()=>{const n=new Date(m.session.scheduledAt);return tt(n,{addSuffix:!0})}),E=U(()=>{const n=new Date(m.session.scheduledAt);return st(n,"MMM d, h:mm a")});async function g(){if(confirm("Cancel this scheduled session?")){u.value=!0;try{await i.updateSessionFields(m.session.id,{status:"stopped"}),p.success("Session cancelled")}catch(n){console.error("Failed to cancel session:",n),p.error(`Failed to cancel session: ${n.message}`)}finally{u.value=!1}}}function a(){}return(n,f)=>{const r=Te("router-link");return s(),o("div",Ut,[e("div",Vt,[e("div",It,[Y(r,{to:`/sessions/${c.session.id}`,class:"session-name-link"},{default:ve(()=>[e("h3",Nt,_(c.session.name),1)]),_:1},8,["to"])]),f[2]||(f[2]=e("div",{class:"status-badge-container"},[e("span",{class:"status-badge status-scheduled"},"scheduled")],-1))]),e("div",Gt,[e("div",Kt,[f[3]||(f[3]=e("span",{class:"timing-icon"},"⏰",-1)),e("div",qt,[e("span",Ht,_(A.value),1),e("span",Wt,_(E.value),1)])]),c.session.autoRescheduleEnabled?(s(),o("div",zt,[f[5]||(f[5]=e("span",{class:"timing-icon"},"🔄",-1)),e("div",Yt,[f[4]||(f[4]=e("span",{class:"timing-text"},"Auto-reschedule",-1)),e("span",Jt," Attempt "+_(c.session.rescheduleCount)+"/"+_(c.session.maxRescheduleCount||"∞"),1)])])):S("",!0)]),e("div",Qt,[e("button",{class:"btn btn-secondary btn-small",disabled:u.value,onClick:f[0]||(f[0]=w=>y.value=!0)}," Edit Schedule ",8,Xt),e("button",{class:"btn btn-danger btn-small",disabled:u.value,onClick:g}," Cancel ",8,Zt)]),Y(nt,{"is-open":y.value,session:c.session,onClose:f[1]||(f[1]=w=>y.value=!1),onSaved:a},null,8,["is-open","session"])])}}},ts=ge(es,[["__scopeId","data-v-d41e6b57"]]),ss={key:0,class:"skeleton-list"},ns={key:1,class:"empty-state"},os={key:2,class:"session-list"},ls={__name:"ScheduledTabContent",props:{sessions:{type:Array,required:!0},loading:{type:Boolean,default:!1}},setup(c){return(m,i)=>(s(),o("div",null,[c.loading?(s(),o("div",ss,[(s(),o(J,null,Q(3,p=>e("div",{key:p,class:"skeleton card",style:{height:"120px"}})),64))])):c.sessions.length===0?(s(),o("div",ns,[...i[0]||(i[0]=[e("p",null,"No scheduled sessions. Use scheduling options when creating a new session to schedule it for later.",-1)])])):(s(),o("div",os,[(s(!0),o(J,null,Q(c.sessions,p=>(s(),Z(ts,{key:p.id,session:p},null,8,["session"]))),128))]))]))}},as=ge(ls,[["__scopeId","data-v-75cf4e60"]]),rs={class:"templates-panel"},is={class:"templates-header"},ds={key:0,class:"template-form card","data-testid":"template-form"},us={class:"form-group"},cs={class:"form-group"},ms={class:"form-group"},ps=["disabled"],vs={class:"form-group"},fs=["value"],hs={class:"form-group"},bs={class:"form-group"},gs={class:"form-group"},ys={class:"form-group"},ks={class:"form-actions"},Ss=["disabled"],$s={key:0,class:"loading-spinner"},Es={key:1,class:"loading-state"},Cs={key:2},ws={key:0,class:"template-section"},_s={class:"templates-list"},Ts={class:"template-header"},js={class:"template-name"},Ms={class:"template-prompt"},Fs={class:"template-meta"},Rs={key:0,class:"meta-badge"},As={key:1,class:"meta-badge"},xs={key:2,class:"meta-badge"},Ls={key:3,class:"meta-badge"},Bs={key:4,class:"meta-badge meta-badge-chain"},Ds={key:1,class:"template-section"},Os={class:"templates-list"},Ps={class:"template-header"},Us={class:"template-name"},Vs={class:"template-prompt"},Is={class:"template-meta"},Ns={key:0,class:"meta-badge"},Gs={key:1,class:"meta-badge"},Ks={key:2,class:"meta-badge"},qs={key:3,class:"meta-badge"},Hs={key:4,class:"meta-badge meta-badge-chain"},Ws={key:2,class:"empty-state"},zs={__name:"TemplatesPanel",props:{projectId:{type:String,required:!0}},setup(c,{expose:m}){const i=c,p=He(),u=_e(),y=at(),A=R(!1),E=R(!1),g=R({name:"",prompt:"",isGlobal:!1,nextTemplateId:null,thinkingEnabled:null,gitBranch:"",model:null,mode:null}),a=U(()=>p.loading),n=U(()=>p.projectTemplates),f=U(()=>p.globalTemplates),r=U(()=>[...p.projectTemplates,...p.globalTemplates]);Oe(async()=>{y.providers.length===0&&await y.fetchProviders(),p.fetchProjectTemplates(i.projectId)}),de(()=>i.projectId,F=>{p.fetchProjectTemplates(F)});function w(F,d=100){return F.length<=d?F:`${F.substring(0,d)}...`}function $(F){const d=p.getTemplateById(F);return(d==null?void 0:d.name)||"Unknown"}function j(F){var d;for(const z of y.providers){const b=(d=z.models)==null?void 0:d.find(ee=>ee.modelId===F);if(b)return z.isBuiltIn?b.displayName:b.modelId}return F}function l(){g.value={name:"",prompt:"",isGlobal:!1,nextTemplateId:null,thinkingEnabled:null,gitBranch:"",model:null,mode:null}}function H(){A.value=!0}function W(){A.value=!1,l()}async function B(){if(!E.value){E.value=!0;try{const F={name:g.value.name,prompt:g.value.prompt,nextTemplateId:g.value.nextTemplateId||void 0,thinkingEnabled:g.value.thinkingEnabled,gitBranch:g.value.gitBranch||void 0,model:g.value.model,mode:g.value.mode};g.value.isGlobal?(await p.createGlobalTemplate(F),u.success("Global template created")):(await p.createProjectTemplate(i.projectId,F),u.success("Template created")),W()}catch(F){u.error(F.message)}finally{E.value=!1}}}return m({formData:g,getModelName:j,resetForm:l}),(F,d)=>{const z=Te("router-link");return s(),o("div",rs,[e("div",is,[d[8]||(d[8]=e("h2",null,"Session Templates",-1)),A.value?S("",!0):(s(),o("button",{key:0,class:"btn btn-primary btn-sm","data-testid":"new-template-btn",onClick:H}," New Template "))]),A.value?(s(),o("div",ds,[d[23]||(d[23]=e("h3",null,"Create Template",-1)),e("form",{onSubmit:ae(B,["prevent"])},[e("div",us,[d[9]||(d[9]=e("label",{class:"form-label"},"Name",-1)),N(e("input",{"onUpdate:modelValue":d[0]||(d[0]=b=>g.value.name=b),type:"text",class:"form-input",placeholder:"Template name",required:""},null,512),[[fe,g.value.name]])]),e("div",cs,[d[10]||(d[10]=e("label",{class:"form-label"},"Prompt",-1)),N(e("textarea",{"onUpdate:modelValue":d[1]||(d[1]=b=>g.value.prompt=b),class:"form-input form-textarea",placeholder:"Session prompt. Use {{rootSession.summary}} to reference root session data.",rows:"4",required:""},null,512),[[fe,g.value.prompt]]),Y(We)]),e("div",ms,[d[12]||(d[12]=e("label",{class:"form-label"},"Scope",-1)),N(e("select",{"onUpdate:modelValue":d[2]||(d[2]=b=>g.value.isGlobal=b),class:"form-input",disabled:F.editingTemplate},[...d[11]||(d[11]=[e("option",{value:!1}," Project Only ",-1),e("option",{value:!0}," Global (all projects) ",-1)])],8,ps),[[$e,g.value.isGlobal]])]),e("div",vs,[d[14]||(d[14]=e("label",{class:"form-label"},"Next Template (Optional)",-1)),N(e("select",{"onUpdate:modelValue":d[3]||(d[3]=b=>g.value.nextTemplateId=b),class:"form-input"},[d[13]||(d[13]=e("option",{value:null}," None ",-1)),(s(!0),o(J,null,Q(r.value,b=>(s(),o("option",{key:b.id,value:b.id},_(b.name)+" "+_(b.projectId?"":"(Global)"),9,fs))),128))],512),[[$e,g.value.nextTemplateId]]),d[15]||(d[15]=e("p",{class:"form-help"}," Chain another template to run after this one completes. ",-1))]),e("div",hs,[d[16]||(d[16]=e("label",{class:"form-label"},"Model",-1)),Y(rt,{modelValue:g.value.model,"onUpdate:modelValue":d[4]||(d[4]=b=>g.value.model=b),"allow-empty":!0,"empty-label":"Inherit from root session"},null,8,["modelValue"])]),e("div",bs,[d[18]||(d[18]=e("label",{class:"form-label",for:"create-mode"},"Mode",-1)),N(e("select",{id:"create-mode","onUpdate:modelValue":d[5]||(d[5]=b=>g.value.mode=b),class:"form-input","data-testid":"mode-select"},[...d[17]||(d[17]=[e("option",{value:null}," Inherit from root session ",-1),e("option",{value:"plan"}," Plan ",-1),e("option",{value:"standard"}," Standard ",-1),e("option",{value:"yolo"}," YOLO ",-1)])],512),[[$e,g.value.mode]])]),e("div",gs,[d[20]||(d[20]=e("label",{class:"form-label",for:"create-thinking"},"Extended Thinking",-1)),N(e("select",{id:"create-thinking","onUpdate:modelValue":d[6]||(d[6]=b=>g.value.thinkingEnabled=b),class:"form-input","data-testid":"thinking-select"},[...d[19]||(d[19]=[e("option",{value:null}," Inherit from root session ",-1),e("option",{value:!0}," Enabled ",-1),e("option",{value:!1}," Disabled ",-1)])],512),[[$e,g.value.thinkingEnabled]])]),e("div",ys,[d[21]||(d[21]=e("label",{class:"form-label"},"Git Branch (Optional)",-1)),N(e("input",{"onUpdate:modelValue":d[7]||(d[7]=b=>g.value.gitBranch=b),type:"text",class:"form-input",placeholder:"Leave empty to inherit from root session"},null,512),[[fe,g.value.gitBranch]])]),e("div",ks,[e("button",{type:"button",class:"btn","data-testid":"cancel-btn",onClick:W}," Cancel "),e("button",{type:"submit",class:"btn btn-primary",disabled:E.value,"data-testid":"submit-btn"},[E.value?(s(),o("span",$s)):S("",!0),d[22]||(d[22]=re(" Create ",-1))],8,Ss)])],32)])):S("",!0),a.value?(s(),o("div",Es,[...d[24]||(d[24]=[e("span",{class:"loading-spinner"},null,-1),re(" Loading templates... ",-1)])])):(s(),o("div",Cs,[n.value.length>0?(s(),o("div",ws,[d[25]||(d[25]=e("h3",{class:"section-title"}," Project Templates ",-1)),e("div",_s,[(s(!0),o(J,null,Q(n.value,b=>(s(),Z(z,{key:b.id,to:`/projects/${c.projectId}/templates/${b.id}`,class:"template-card card","data-testid":`template-card-${b.id}`},{default:ve(()=>[e("div",Ts,[e("h4",js,_(b.name),1)]),e("p",Ms,_(w(b.prompt)),1),e("div",Fs,[b.thinkingEnabled?(s(),o("span",Rs,"Thinking")):S("",!0),b.gitBranch?(s(),o("span",As,_(b.gitBranch),1)):S("",!0),b.model?(s(),o("span",xs,_(j(b.model)),1)):S("",!0),b.mode?(s(),o("span",Ls,_(b.mode),1)):S("",!0),b.nextTemplateId?(s(),o("span",Bs," Chains to: "+_($(b.nextTemplateId)),1)):S("",!0)])]),_:2},1032,["to","data-testid"]))),128))])])):S("",!0),f.value.length>0?(s(),o("div",Ds,[d[27]||(d[27]=e("h3",{class:"section-title"}," Global Templates ",-1)),e("div",Os,[(s(!0),o(J,null,Q(f.value,b=>(s(),Z(z,{key:b.id,to:`/projects/${c.projectId}/templates/${b.id}`,class:"template-card card","data-testid":`template-card-${b.id}`},{default:ve(()=>[e("div",Ps,[e("h4",Us,_(b.name),1)]),e("p",Vs,_(w(b.prompt)),1),e("div",Is,[d[26]||(d[26]=e("span",{class:"meta-badge meta-badge-global"},"Global",-1)),b.thinkingEnabled?(s(),o("span",Ns,"Thinking")):S("",!0),b.gitBranch?(s(),o("span",Gs,_(b.gitBranch),1)):S("",!0),b.model?(s(),o("span",Ks,_(j(b.model)),1)):S("",!0),b.mode?(s(),o("span",qs,_(b.mode),1)):S("",!0),b.nextTemplateId?(s(),o("span",Hs," Chains to: "+_($(b.nextTemplateId)),1)):S("",!0)])]),_:2},1032,["to","data-testid"]))),128))])])):S("",!0),n.value.length===0&&f.value.length===0&&!A.value?(s(),o("div",Ws,[d[28]||(d[28]=e("p",null,"No templates yet. Create a template to automate session workflows.",-1)),e("button",{class:"btn btn-primary","data-testid":"create-template-btn",onClick:H}," Create Template ")])):S("",!0)]))])}}},Ys=ge(zs,[["__scopeId","data-v-d08b4ac0"]]),Js={class:"command-buttons-panel"},Qs={class:"panel-header"},Xs={key:0,class:"loading-state"},Zs={key:1,class:"error-message"},en={key:2,class:"empty-state"},tn={key:3,class:"buttons-table"},sn=["onClick"],nn={class:"col-label"},on={class:"col-command"},ln={class:"col-order"},an=["onClick"],rn={class:"modal-body"},dn={class:"modal-footer"},un={__name:"CommandButtonsPanel",props:{projectId:{type:String,required:!0}},setup(c){const m=c,i=Ne(),p=Ke(),u=R(null),y=a=>a.length>50?`${a.substring(0,50)}...`:a,A=a=>{i.push(`/projects/${m.projectId}/command-buttons/${a.id}`)},E=a=>{u.value=a},g=async()=>{if(u.value)try{await p.deleteButton(m.projectId,u.value.id),u.value=null}catch(a){console.error("Failed to delete button:",a)}};return(a,n)=>{const f=Te("router-link");return s(),o("div",Js,[e("div",Qs,[n[5]||(n[5]=e("h3",null,"Command Buttons",-1)),Y(f,{to:`/projects/${c.projectId}/command-buttons/new`,class:"btn btn-primary btn-sm"},{default:ve(()=>[...n[4]||(n[4]=[re(" + New Command Button ",-1)])]),_:1},8,["to"])]),v(p).loading?(s(),o("div",Xs,[...n[6]||(n[6]=[e("span",{class:"loading-spinner"},null,-1),re(" Loading command buttons... ",-1)])])):v(p).error?(s(),o("div",Zs,_(v(p).error),1)):v(p).buttons.length===0?(s(),o("div",en,[n[8]||(n[8]=e("p",null,"No command buttons configured yet.",-1)),Y(f,{to:`/projects/${c.projectId}/command-buttons/new`,class:"btn btn-primary"},{default:ve(()=>[...n[7]||(n[7]=[re(" Create First Button ",-1)])]),_:1},8,["to"])])):(s(),o("div",tn,[n[9]||(n[9]=Pe('<div class="table-header" data-v-990a48bf><div class="col-label" data-v-990a48bf> Label </div><div class="col-command" data-v-990a48bf> Command </div><div class="col-order" data-v-990a48bf> Sort Order </div><div class="col-actions" data-v-990a48bf> Actions </div></div>',1)),(s(!0),o(J,null,Q(v(p).buttons,r=>(s(),o("div",{key:r.id,class:"table-row",onClick:w=>A(r)},[e("div",nn,_(r.label),1),e("div",on,[e("code",null,_(y(r.command)),1)]),e("div",ln,_(r.sortOrder),1),e("div",{class:"col-actions",onClick:n[0]||(n[0]=ae(()=>{},["stop"]))},[e("button",{class:"btn btn-sm btn-outline-danger",onClick:w=>E(r)}," Delete ",8,an)])],8,sn))),128))])),u.value?(s(),o("div",{key:4,class:"modal-overlay",onClick:n[3]||(n[3]=r=>u.value=null)},[e("div",{class:"modal-dialog",onClick:n[2]||(n[2]=ae(()=>{},["stop"]))},[n[12]||(n[12]=e("div",{class:"modal-header"},[e("h4",null,"Delete Command Button")],-1)),e("div",rn,[e("p",null,[n[10]||(n[10]=re('Are you sure you want to delete the command button "',-1)),e("strong",null,_(u.value.label),1),n[11]||(n[11]=re('"?',-1))])]),e("div",dn,[e("button",{class:"btn btn-outline-secondary",onClick:n[1]||(n[1]=r=>u.value=null)}," Cancel "),e("button",{class:"btn btn-danger",onClick:g}," Delete ")])])])):S("",!0)])}}},cn=ge(un,[["__scopeId","data-v-990a48bf"]]),mn={class:"modal-content"},pn={class:"modal-header"},vn={class:"modal-title"},fn={class:"modal-body"},hn={class:"form-group"},bn={class:"sessions-list"},gn={key:0,class:"loading-state"},yn={key:1,class:"empty-state"},kn={key:0},Sn={key:1},$n=["onClick"],En={class:"session-info"},Cn={class:"session-name"},wn={class:"session-meta"},_n={key:0,class:"session-mode"},Tn={class:"session-date"},jn={class:"modal-footer"},Mn=["disabled"],Fn={__name:"AddSessionToLaneModal",props:{isOpen:{type:Boolean,default:!1},projectId:{type:String,default:""},laneId:{type:String,default:""},laneName:{type:String,default:""}},emits:["close","update:isOpen","added"],setup(c,{emit:m}){const i=c,p=m;ye();const u=je(),y=_e(),A=R(!1),E=R(!1),g=R(""),a=R(null),n=R([]),f=U(()=>{let B=n.value.filter(F=>!u.isSessionOnBoard(F.id));if(B=B.filter(F=>!F.parentSessionId),g.value.trim()){const F=g.value.toLowerCase();B=B.filter(d=>{var z;return(z=d.name)==null?void 0:z.toLowerCase().includes(F)})}return B});function r(B){switch(B){case"running":case"starting":return"●";case"waiting":return"◐";case"completed":return"✓";case"error":return"✕";case"stopped":return"■";case"scheduled":return"⏰";default:return"○"}}function w(B){return B?new Date(B).toLocaleDateString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):""}function $(B){a.value=B}function j(){}function l(){p("update:isOpen",!1),p("close"),g.value="",a.value=null}async function H(){if(i.projectId){A.value=!0;try{const B=await Be.getProjectSessions(i.projectId,!1,null);n.value=Array.isArray(B)?B:(B==null?void 0:B.sessions)||[]}catch(B){console.error("Failed to load sessions:",B),y.error("Failed to load sessions"),n.value=[]}finally{A.value=!1}}}async function W(){if(!(!a.value||!i.laneId)){E.value=!0;try{await u.addSessionToBoard(i.projectId,a.value,i.laneId),y.success("Session added to board"),p("added",a.value),l()}catch(B){console.error("Failed to add session to board:",B),y.error(B.message||"Failed to add session to board")}finally{E.value=!1}}}return de(()=>i.isOpen,B=>{B&&H()},{immediate:!0}),(B,F)=>c.isOpen?(s(),o("div",{key:0,class:"modal-backdrop",onClick:ae(l,["self"])},[e("div",mn,[e("div",pn,[e("h2",vn," Add Session to "+_(c.laneName),1),e("button",{class:"close-btn","aria-label":"Close",onClick:l}," × ")]),e("div",fn,[e("div",hn,[F[1]||(F[1]=e("label",{for:"session-search",class:"form-label"},"Search Sessions",-1)),N(e("input",{id:"session-search","onUpdate:modelValue":F[0]||(F[0]=d=>g.value=d),type:"text",class:"form-input",placeholder:"Search by name...",onInput:j},null,544),[[fe,g.value]])]),e("div",bn,[A.value?(s(),o("div",gn,[...F[2]||(F[2]=[e("span",{class:"loading-spinner"},null,-1),re(" Loading sessions... ",-1)])])):f.value.length===0?(s(),o("div",yn,[g.value?(s(),o("p",kn,' No sessions matching "'+_(g.value)+'" ',1)):(s(),o("p",Sn," No available sessions to add. "))])):(s(!0),o(J,{key:2},Q(f.value,d=>(s(),o("div",{key:d.id,class:ne(["session-item",{selected:a.value===d.id}]),onClick:z=>$(d.id)},[e("div",{class:ne(["session-status",`status-${d.status}`])},_(r(d.status)),3),e("div",En,[e("div",Cn,_(d.name),1),e("div",wn,[d.mode?(s(),o("span",_n,_(d.mode),1)):S("",!0),e("span",Tn,_(w(d.updatedAt||d.createdAt)),1)])])],10,$n))),128))])]),e("div",jn,[e("button",{class:"btn btn-secondary",onClick:l}," Cancel "),e("button",{class:"btn btn-primary",disabled:!a.value||E.value,onClick:W},_(E.value?"Adding...":"Add to Lane"),9,Mn)])])])):S("",!0)}},Ye=ge(Fn,[["__scopeId","data-v-916a53c8"]]),Rn={class:"modal-content"},An={class:"modal-body"},xn={class:"form-group"},Ln={key:0,class:"form-group"},Bn={class:"lane-position-controls"},Dn=["disabled"],On={class:"lane-position-label"},Pn=["disabled"],Un={class:"form-group"},Vn={class:"automation-options"},In={class:"radio-option"},Nn={class:"radio-option"},Gn={class:"radio-option"},Kn={key:1,class:"form-group"},qn={key:0,label:"Project Templates"},Hn=["value"],Wn={key:1,label:"Global Templates"},zn=["value"],Yn={key:2,class:"form-group"},Jn={class:"prompt-actions-row"},Qn={key:4,class:"agent-settings-section"},Xn={key:0,class:"agent-settings-body"},Zn={class:"form-group"},eo={class:"toggle-switch-row"},to={class:"toggle-switch"},so={key:0,class:"reschedule-settings"},no={class:"form-group"},oo={class:"checkbox-option"},lo={class:"checkbox-option"},ao={class:"form-group"},ro={class:"form-group"},io={class:"form-group"},uo={class:"form-group"},co={class:"danger-zone"},mo=["disabled"],po={class:"modal-footer"},vo=["disabled"],fo={__name:"LaneSettingsModal",props:{isOpen:{type:Boolean,default:!1},projectId:{type:String,default:""},lane:{type:Object,default:null}},emits:["close","update:isOpen","updated","deleted"],setup(c,{emit:m}){const i=c,p=m,u=je(),y=He(),A=_e(),E=Ue(),g=R(!1),a=R(!1),n=R("none"),f=R(!1),r=R(!1),w=R(null),$=R(-1),j=R(-1),l=Me({name:"",onEnterTemplateId:null,onEnterPrompt:"",onEnterMode:null,onEnterModel:null,onEnterEffortLevel:null,onEnterThinkingEnabled:null,onEnterAutoRescheduleEnabled:!1,onEnterRescheduleDelayMinutes:15,onEnterRescheduleOnTokenLimit:!0,onEnterRescheduleOnServiceError:!0,onEnterMaxRescheduleCount:null,onEnterMaxTotalTokens:null,onEnterRescheduleAtTokenCount:null}),H=U(()=>y.projectTemplates),W=U(()=>y.globalTemplates),B=U(()=>{const T=E.getProjectById(i.projectId);return(T==null?void 0:T.workingDirectory)||null}),F=U(()=>j.value),d=U(()=>{var T,t;return((t=(T=u.board)==null?void 0:T.lanes)==null?void 0:t.length)||0}),z=U(()=>!(!l.name.trim()||n.value==="template"&&!l.onEnterTemplateId||n.value==="prompt"&&!l.onEnterPrompt.trim()));function b(){var T,t;if(i.lane){l.name=i.lane.name||"",l.onEnterTemplateId=i.lane.onEnterTemplateId||null,l.onEnterPrompt=i.lane.onEnterPrompt||"",l.onEnterMode=i.lane.onEnterMode||null,l.onEnterModel=i.lane.onEnterModel||null,l.onEnterEffortLevel=i.lane.onEnterEffortLevel||null,l.onEnterThinkingEnabled=i.lane.onEnterThinkingEnabled??null,l.onEnterAutoRescheduleEnabled=i.lane.onEnterAutoRescheduleEnabled||!1,l.onEnterRescheduleDelayMinutes=i.lane.onEnterRescheduleDelayMinutes||15,l.onEnterRescheduleOnTokenLimit=i.lane.onEnterRescheduleOnTokenLimit??!0,l.onEnterRescheduleOnServiceError=i.lane.onEnterRescheduleOnServiceError??!0,l.onEnterMaxRescheduleCount=i.lane.onEnterMaxRescheduleCount||null,l.onEnterMaxTotalTokens=i.lane.onEnterMaxTotalTokens||null,l.onEnterRescheduleAtTokenCount=i.lane.onEnterRescheduleAtTokenCount||null,i.lane.onEnterTemplateId?n.value="template":i.lane.onEnterPrompt?n.value="prompt":n.value="none",f.value=!!(l.onEnterMode||l.onEnterModel||l.onEnterEffortLevel||l.onEnterThinkingEnabled!==null||l.onEnterAutoRescheduleEnabled);const h=((t=(T=u.board)==null?void 0:T.lanes)==null?void 0:t.findIndex(G=>G.id===i.lane.id))??-1;$.value=h,j.value=h}else l.name="",l.onEnterTemplateId=null,l.onEnterPrompt="",l.onEnterMode=null,l.onEnterModel=null,l.onEnterEffortLevel=null,l.onEnterThinkingEnabled=null,l.onEnterAutoRescheduleEnabled=!1,l.onEnterRescheduleDelayMinutes=15,l.onEnterRescheduleOnTokenLimit=!0,l.onEnterRescheduleOnServiceError=!0,l.onEnterMaxRescheduleCount=null,l.onEnterMaxTotalTokens=null,l.onEnterRescheduleAtTokenCount=null,n.value="none",f.value=!1,$.value=-1,j.value=-1}function ee(){j.value=$.value,p("update:isOpen",!1),p("close")}function oe({text:T}){const t=w.value;if(t){const h=t.selectionStart,G=t.selectionEnd,ie=l.onEnterPrompt.substring(0,h),le=l.onEnterPrompt.substring(G);l.onEnterPrompt=ie+T+le,Ze(()=>{t.selectionStart=t.selectionEnd=h+T.length,t.focus()})}}function te(T){const t=j.value;t<0||t===T||(j.value=T)}async function M(){var T;if(!(!i.lane||!z.value)){g.value=!0;try{const t={name:l.name.trim()};if(n.value==="template"?(t.onEnterTemplateId=l.onEnterTemplateId,t.onEnterPrompt=null,t.onEnterMode=null,t.onEnterModel=null,t.onEnterEffortLevel=null,t.onEnterThinkingEnabled=null,t.onEnterAutoRescheduleEnabled=!1,t.onEnterRescheduleDelayMinutes=15,t.onEnterRescheduleOnTokenLimit=!0,t.onEnterRescheduleOnServiceError=!0,t.onEnterMaxRescheduleCount=null,t.onEnterMaxTotalTokens=null,t.onEnterRescheduleAtTokenCount=null):n.value==="prompt"?(t.onEnterTemplateId=null,t.onEnterPrompt=l.onEnterPrompt.trim(),t.onEnterMode=l.onEnterMode,t.onEnterModel=l.onEnterModel,t.onEnterEffortLevel=l.onEnterEffortLevel,t.onEnterThinkingEnabled=l.onEnterThinkingEnabled,t.onEnterAutoRescheduleEnabled=l.onEnterAutoRescheduleEnabled,t.onEnterRescheduleDelayMinutes=l.onEnterRescheduleDelayMinutes,t.onEnterRescheduleOnTokenLimit=l.onEnterRescheduleOnTokenLimit,t.onEnterRescheduleOnServiceError=l.onEnterRescheduleOnServiceError,t.onEnterMaxRescheduleCount=l.onEnterMaxRescheduleCount,t.onEnterMaxTotalTokens=l.onEnterMaxTotalTokens,t.onEnterRescheduleAtTokenCount=l.onEnterRescheduleAtTokenCount):(t.onEnterTemplateId=null,t.onEnterPrompt=null,t.onEnterMode=null,t.onEnterModel=null,t.onEnterEffortLevel=null,t.onEnterThinkingEnabled=null,t.onEnterAutoRescheduleEnabled=!1,t.onEnterRescheduleDelayMinutes=15,t.onEnterRescheduleOnTokenLimit=!0,t.onEnterRescheduleOnServiceError=!0,t.onEnterMaxRescheduleCount=null,t.onEnterMaxTotalTokens=null,t.onEnterRescheduleAtTokenCount=null),j.value!==$.value&&j.value>=0){const h=(T=u.board)==null?void 0:T.lanes;if(h&&h.length>1){const G=h.map(ce=>ce.id),ie=i.lane.id,[le]=G.splice($.value,1);G.splice(j.value,0,le),await u.reorderLanes(i.projectId,G)}}await u.updateLane(i.projectId,i.lane.id,t),A.success("Lane settings saved"),p("updated"),ee()}catch(t){console.error("Failed to save lane settings:",t),A.error(t.message||"Failed to save lane settings")}finally{g.value=!1}}}async function P(){if(i.lane&&confirm(`Are you sure you want to delete the "${i.lane.name}" lane? This cannot be undone.`)){a.value=!0;try{await u.deleteLane(i.projectId,i.lane.id),A.success("Lane deleted"),p("deleted"),ee()}catch(T){console.error("Failed to delete lane:",T),A.error(T.message||"Failed to delete lane")}finally{a.value=!1}}}return de(()=>i.isOpen,T=>{T&&(b(),i.projectId&&y.projectTemplates.length===0&&y.globalTemplates.length===0&&y.fetchProjectTemplates(i.projectId))},{immediate:!0}),de(()=>i.lane,()=>{i.isOpen&&b()}),de(()=>{var T;return(T=u.board)==null?void 0:T.lanes},T=>{if(i.isOpen&&i.lane&&T){const t=T.findIndex(h=>h.id===i.lane.id);t>=0&&($.value=t,j.value=t)}},{deep:!0}),(T,t)=>c.isOpen?(s(),o("div",{key:0,class:"modal-backdrop",onClick:ae(ee,["self"])},[e("div",Rn,[e("div",{class:"modal-header"},[t[22]||(t[22]=e("h2",{class:"modal-title"}," Lane Settings ",-1)),e("button",{class:"close-btn","aria-label":"Close",onClick:ee}," × ")]),e("div",An,[e("div",xn,[t[23]||(t[23]=e("label",{for:"lane-name",class:"form-label"},"Lane Name",-1)),N(e("input",{id:"lane-name","onUpdate:modelValue":t[0]||(t[0]=h=>l.name=h),type:"text",class:"form-input",placeholder:"Enter lane name"},null,512),[[fe,l.name]])]),d.value>1?(s(),o("div",Ln,[t[26]||(t[26]=e("label",{class:"form-label"},"Position",-1)),e("div",Bn,[e("button",{class:"btn btn-icon",disabled:F.value<=0,title:"Move left",onClick:t[1]||(t[1]=h=>te(F.value-1))},[...t[24]||(t[24]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round","stroke-linejoin":"round"},[e("polyline",{points:"15 18 9 12 15 6"})],-1)])],8,Dn),e("span",On,_(F.value+1)+" of "+_(d.value),1),e("button",{class:"btn btn-icon",disabled:F.value>=d.value-1,title:"Move right",onClick:t[2]||(t[2]=h=>te(F.value+1))},[...t[25]||(t[25]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round","stroke-linejoin":"round"},[e("polyline",{points:"9 18 15 12 9 6"})],-1)])],8,Pn)])])):S("",!0),e("div",Un,[t[30]||(t[30]=e("label",{class:"form-label"},"On-Enter Automation",-1)),e("div",Vn,[e("label",In,[N(e("input",{"onUpdate:modelValue":t[3]||(t[3]=h=>n.value=h),type:"radio",value:"none",name:"automation"},null,512),[[xe,n.value]]),t[27]||(t[27]=e("span",null,"None",-1))]),e("label",Nn,[N(e("input",{"onUpdate:modelValue":t[4]||(t[4]=h=>n.value=h),type:"radio",value:"template",name:"automation"},null,512),[[xe,n.value]]),t[28]||(t[28]=e("span",null,"Run a template",-1))]),e("label",Gn,[N(e("input",{"onUpdate:modelValue":t[5]||(t[5]=h=>n.value=h),type:"radio",value:"prompt",name:"automation"},null,512),[[xe,n.value]]),t[29]||(t[29]=e("span",null,"Run a custom prompt",-1))])])]),n.value==="template"?(s(),o("div",Kn,[t[32]||(t[32]=e("label",{for:"template-select",class:"form-label"},"Select Template",-1)),N(e("select",{id:"template-select","onUpdate:modelValue":t[6]||(t[6]=h=>l.onEnterTemplateId=h),class:"form-input"},[t[31]||(t[31]=e("option",{value:null}," Select a template... ",-1)),H.value.length?(s(),o("optgroup",qn,[(s(!0),o(J,null,Q(H.value,h=>(s(),o("option",{key:h.id,value:h.id},_(h.name),9,Hn))),128))])):S("",!0),W.value.length?(s(),o("optgroup",Wn,[(s(!0),o(J,null,Q(W.value,h=>(s(),o("option",{key:h.id,value:h.id},_(h.name),9,zn))),128))])):S("",!0)],512),[[$e,l.onEnterTemplateId]]),t[33]||(t[33]=e("p",{class:"form-help"}," When a session enters this lane, the selected template will automatically run. ",-1))])):S("",!0),n.value==="prompt"?(s(),o("div",Yn,[t[34]||(t[34]=e("label",{for:"custom-prompt",class:"form-label"},"Custom Prompt",-1)),Y(it,{id:"custom-prompt",ref_key:"promptTextareaRef",ref:w,modelValue:l.onEnterPrompt,"onUpdate:modelValue":t[7]||(t[7]=h=>l.onEnterPrompt=h),class:"form-input form-textarea",placeholder:"Enter the prompt to run when a session enters this lane...",rows:"4","min-height":80},null,8,["modelValue"]),e("div",Jn,[Y(We),B.value?(s(),Z(ut,{key:0,onOpen:t[8]||(t[8]=h=>r.value=!0)})):S("",!0)])])):S("",!0),n.value==="prompt"?(s(),Z(ct,{key:3,"is-open":r.value,"onUpdate:isOpen":t[9]||(t[9]=h=>r.value=h),"working-directory":B.value||"",mode:"insert","hide-builtin":!0,onInsert:oe},null,8,["is-open","working-directory"])):S("",!0),n.value==="prompt"?(s(),o("div",Qn,[e("button",{type:"button",class:"section-toggle",onClick:t[10]||(t[10]=h=>f.value=!f.value)},[e("span",{class:ne(["toggle-chevron",{open:f.value}])},"▶",2),t[35]||(t[35]=re(" Session Settings ",-1))]),f.value?(s(),o("div",Xn,[Y(dt,{mode:l.onEnterMode||"standard",model:l.onEnterModel,"effort-level":l.onEnterEffortLevel,"thinking-enabled":l.onEnterThinkingEnabled??!1,"hide-start-immediately":!0,"onUpdate:mode":t[11]||(t[11]=h=>l.onEnterMode=h),"onUpdate:model":t[12]||(t[12]=h=>l.onEnterModel=h),"onUpdate:effortLevel":t[13]||(t[13]=h=>l.onEnterEffortLevel=h),"onUpdate:thinkingEnabled":t[14]||(t[14]=h=>l.onEnterThinkingEnabled=h)},null,8,["mode","model","effort-level","thinking-enabled"]),e("div",Zn,[e("label",eo,[e("label",to,[N(e("input",{"onUpdate:modelValue":t[15]||(t[15]=h=>l.onEnterAutoRescheduleEnabled=h),type:"checkbox"},null,512),[[Le,l.onEnterAutoRescheduleEnabled]]),t[36]||(t[36]=e("span",{class:"toggle-slider"},null,-1))]),t[37]||(t[37]=e("span",{class:"toggle-label"},"Auto-reschedule on errors",-1))])]),l.onEnterAutoRescheduleEnabled?(s(),o("div",so,[e("div",no,[t[40]||(t[40]=e("p",{class:"settings-label"}," Reschedule Triggers ",-1)),e("label",oo,[N(e("input",{"onUpdate:modelValue":t[16]||(t[16]=h=>l.onEnterRescheduleOnTokenLimit=h),type:"checkbox"},null,512),[[Le,l.onEnterRescheduleOnTokenLimit]]),t[38]||(t[38]=e("span",null,"Token limit errors",-1))]),e("label",lo,[N(e("input",{"onUpdate:modelValue":t[17]||(t[17]=h=>l.onEnterRescheduleOnServiceError=h),type:"checkbox"},null,512),[[Le,l.onEnterRescheduleOnServiceError]]),t[39]||(t[39]=e("span",null,"Service unavailability",-1))])]),e("div",ao,[t[42]||(t[42]=e("label",{class:"form-label"},"Reschedule Delay",-1)),N(e("select",{"onUpdate:modelValue":t[18]||(t[18]=h=>l.onEnterRescheduleDelayMinutes=h),class:"form-input"},[...t[41]||(t[41]=[e("option",{value:5}," 5 minutes ",-1),e("option",{value:15}," 15 minutes ",-1),e("option",{value:30}," 30 minutes ",-1),e("option",{value:60}," 1 hour ",-1),e("option",{value:120}," 2 hours ",-1)])],512),[[$e,l.onEnterRescheduleDelayMinutes,void 0,{number:!0}]])]),e("div",ro,[t[43]||(t[43]=e("label",{class:"form-label"},"Max Reschedule Count",-1)),N(e("input",{"onUpdate:modelValue":t[19]||(t[19]=h=>l.onEnterMaxRescheduleCount=h),type:"number",min:"1",max:"100",class:"form-input",placeholder:"Unlimited"},null,512),[[fe,l.onEnterMaxRescheduleCount,void 0,{number:!0}]])]),e("div",io,[t[44]||(t[44]=e("label",{class:"form-label"},"Max Total Tokens",-1)),N(e("input",{"onUpdate:modelValue":t[20]||(t[20]=h=>l.onEnterMaxTotalTokens=h),type:"number",min:"1000",step:"1000",class:"form-input",placeholder:"Unlimited"},null,512),[[fe,l.onEnterMaxTotalTokens,void 0,{number:!0}]])]),e("div",uo,[t[45]||(t[45]=e("label",{class:"form-label"},"Reschedule At Token Count",-1)),N(e("input",{"onUpdate:modelValue":t[21]||(t[21]=h=>l.onEnterRescheduleAtTokenCount=h),type:"number",min:"10000",step:"10000",class:"form-input",placeholder:"None"},null,512),[[fe,l.onEnterRescheduleAtTokenCount,void 0,{number:!0}]])])])):S("",!0)])):S("",!0)])):S("",!0),e("div",co,[t[46]||(t[46]=e("h4",{class:"danger-title"}," Danger Zone ",-1)),t[47]||(t[47]=e("p",{class:"danger-description"}," Deleting this lane will remove all cards from it. Sessions will remain in the project. ",-1)),e("button",{class:"btn btn-danger",disabled:a.value,onClick:P},_(a.value?"Deleting...":"Delete Lane"),9,mo)])]),e("div",po,[e("button",{class:"btn btn-secondary",onClick:ee}," Cancel "),e("button",{class:"btn btn-primary",disabled:g.value||!z.value,onClick:M},_(g.value?"Saving...":"Save Changes"),9,vo)])])])):S("",!0)}},ho=ge(fo,[["__scopeId","data-v-114a927d"]]),bo={class:"kanban-board"},go={key:0,class:"kanban-loading"},yo={key:1,class:"kanban-error"},ko={key:2,class:"kanban-empty"},So={key:3,class:"kanban-lanes-container"},$o=["onDragover","onDrop"],Eo={class:"lane-header"},Co={class:"lane-title-row"},wo={class:"lane-title"},_o={key:0,class:"lane-automation-indicator",title:"Automation enabled"},To={class:"lane-header-actions"},jo={class:"lane-count"},Mo=["onClick"],Fo={class:"lane-cards"},Ro={key:0,class:"card-drop-indicator"},Ao=["onDragstart","onDragover"],xo={class:"card-header"},Lo={class:"card-title"},Bo={class:"card-meta"},Do={key:0,class:"card-mode"},Oo={class:"card-reorder-arrows"},Po=["onClick"],Uo=["onClick"],Vo=["onClick"],Io=["onClick"],No={key:0,class:"card-drop-indicator"},Go={key:1,class:"lane-empty"},Ko={class:"lane-footer"},qo={key:0,class:"lane-automation"},Ho={key:1,class:"lane-automation"},Wo=["onClick"],zo={class:"add-lane-container"},Yo={key:1,class:"add-lane-form"},Jo={__name:"KanbanBoard",props:{projectId:{type:String,required:!0}},setup(c){const m=c,i=je(),p=R(!1),u=R(""),y=R(null),A=R(null),E=R(null),g=R(-1),a=R(null),n=R(-1),f=R(!1),r=R(null),w=R(!1),$=R(null),j=R(!1),l=R(null),H=R(null),W=U(()=>i.board),B=U(()=>i.loading),F=U(()=>i.error),d=async()=>{try{await i.fetchBoard(m.projectId)}catch(x){console.error("Failed to fetch kanban board:",x)}},z=x=>{switch(x){case"running":case"starting":return"●";case"waiting":return"◐";case"completed":return"✓";case"error":return"✕";case"stopped":return"■";case"scheduled":return"⏰";default:return"○"}},b=(x,C,K,V)=>{y.value="card",A.value=C,E.value=K,g.value=V;const q=x.dataTransfer;q.effectAllowed="move",q.setData("text/plain",C.id)},ee=(x,C,K)=>{if(y.value!=="card")return;const V=x.currentTarget.getBoundingClientRect(),q=V.top+V.height/2,X=x.clientY<q?K:K+1;C===E.value&&(X===g.value||X===g.value+1)?(a.value=null,n.value=-1):(a.value=C,n.value=X)},oe=()=>{y.value=null,A.value=null,E.value=null,g.value=-1,a.value=null,n.value=-1},te=async(x,C,K)=>{var ue,se;const V=(se=(ue=W.value)==null?void 0:ue.lanes)==null?void 0:se.find(L=>L.id===x);if(!(V!=null&&V.cards))return;let q=K>=0?K:V.cards.length;if(q>C&&q--,q===C)return;const X=V.cards.map(L=>L.id),[pe]=X.splice(C,1);X.splice(q,0,pe);try{await i.reorderCards(m.projectId,x,X)}catch(L){console.error("Failed to reorder cards:",L)}},M=async(x,C)=>{try{await i.moveCard(m.projectId,x,C,{runOnEnterTemplate:!0})}catch(K){console.error("Failed to move card:",K)}},P=async(x,C)=>{if(x.preventDefault(),y.value!=="card"||!A.value){oe();return}const K=x.dataTransfer.getData("text/plain");if(!K){oe();return}E.value===C?await te(C,g.value,n.value):await M(K,C),oe()},T=async(x,C,K)=>{var pe,ue;const V=(ue=(pe=W.value)==null?void 0:pe.lanes)==null?void 0:ue.find(se=>se.id===x);if(!(V!=null&&V.cards))return;const q=V.cards.map(se=>se.id),[X]=q.splice(C,1);q.splice(K,0,X);try{await i.reorderCards(m.projectId,x,q)}catch(se){console.error("Failed to reorder cards:",se)}},t=async x=>{if(confirm("Remove this session from the board?"))try{await i.removeCard(m.projectId,x)}catch(C){console.error("Failed to remove card:",C)}},h=async()=>{if(u.value.trim())try{await i.createLane(m.projectId,{name:u.value.trim()}),G()}catch(x){console.error("Failed to add lane:",x)}},G=()=>{p.value=!1,u.value=""},ie=x=>{r.value=x,f.value=!0},le=()=>{f.value=!1,r.value=null},ce=()=>{},me=x=>{$.value=x,w.value=!0},he=()=>{w.value=!1,$.value=null},Se=()=>{},Fe=()=>{he()},Re=(x,C)=>{l.value=x,H.value=C,j.value=!0},O=()=>{j.value=!1,l.value=null,H.value=null},k=()=>{O()};return de(()=>m.projectId,x=>{x&&d()},{immediate:!0}),Oe(()=>{m.projectId&&d()}),(x,C)=>{var V,q,X,pe,ue,se;const K=Te("router-link");return s(),o("div",bo,[B.value?(s(),o("div",go,[...C[5]||(C[5]=[e("span",{class:"loading-spinner"},null,-1),re(" Loading board... ",-1)])])):F.value?(s(),o("div",yo,[C[6]||(C[6]=e("span",{class:"error-icon"},"!",-1)),re(" "+_(F.value)+" ",1),e("button",{class:"retry-btn",onClick:d}," Retry ")])):W.value?(s(),o("div",So,[(s(!0),o(J,null,Q(W.value.lanes,L=>{var Ee,Ce,we;return s(),o("div",{key:L.id,class:"kanban-lane",onDragover:ae(I=>{var D;return ee(I,L.id,((D=L.cards)==null?void 0:D.length)||0)},["prevent"]),onDrop:I=>P(I,L.id)},[e("div",Eo,[e("div",Co,[e("h3",wo,_(L.name),1),L.onEnterTemplateId||L.onEnterPrompt?(s(),o("span",_o,[...C[8]||(C[8]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"currentColor"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z"})],-1)])])):S("",!0)]),e("div",To,[e("span",jo,_(((Ee=L.cards)==null?void 0:Ee.length)||0),1),e("button",{class:"lane-settings-btn",title:"Lane settings",onClick:I=>me(L)},[...C[9]||(C[9]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e("circle",{cx:"12",cy:"12",r:"3"}),e("path",{d:"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"})],-1)])],8,Mo)])]),e("div",Fo,[(s(!0),o(J,null,Q(L.cards,(I,D)=>{var be,Ae;return s(),o(J,{key:I.id},[y.value==="card"&&a.value===L.id&&n.value===D?(s(),o("div",Ro)):S("",!0),e("div",{class:ne(["kanban-card",{dragging:y.value==="card"&&((be=A.value)==null?void 0:be.id)===I.id}]),draggable:"true",onDragstart:ae(ke=>b(ke,I,L.id,D),["stop"]),onDragover:ae(ke=>ee(ke,L.id,D),["prevent","stop"]),onDragend:oe},[(Ae=I.sessions)!=null&&Ae[0]?(s(),Z(K,{key:0,to:`/sessions/${I.sessions[0].id}`,class:"card-link"},{default:ve(()=>[e("div",xo,[e("span",{class:ne(["card-status",`status-${I.sessions[0].status}`])},_(z(I.sessions[0].status)),3),e("h4",Lo,_(I.sessions[0].name),1)]),e("div",Bo,[I.sessions[0].mode?(s(),o("span",Do,_(I.sessions[0].mode),1)):S("",!0)])]),_:2},1032,["to"])):S("",!0),e("div",Oo,[D>0?(s(),o("button",{key:0,class:"card-reorder-btn",title:"Move card up",onClick:ae(ke=>T(L.id,D,D-1),["prevent"])},[...C[10]||(C[10]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round","stroke-linejoin":"round"},[e("polyline",{points:"18 15 12 9 6 15"})],-1)])],8,Po)):S("",!0),D<L.cards.length-1?(s(),o("button",{key:1,class:"card-reorder-btn",title:"Move card down",onClick:ae(ke=>T(L.id,D,D+1),["prevent"])},[...C[11]||(C[11]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round","stroke-linejoin":"round"},[e("polyline",{points:"6 9 12 15 18 9"})],-1)])],8,Uo)):S("",!0)]),e("button",{class:"card-move-btn",title:"Move to lane",onClick:ae(ke=>Re(I,L.id),["prevent"])},[...C[12]||(C[12]=[Pe('<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 4 19 4 19 8"></polyline><line x1="14" y1="10" x2="19" y2="4"></line><polyline points="9 20 5 20 5 16"></polyline><line x1="10" y1="14" x2="5" y2="20"></line></svg>',1)])],8,Vo),e("button",{class:"card-remove-btn",title:"Remove from board",onClick:ae(ke=>t(I.id),["prevent"])}," × ",8,Io)],42,Ao)],64)}),128)),y.value==="card"&&a.value===L.id&&n.value===(((Ce=L.cards)==null?void 0:Ce.length)||0)?(s(),o("div",No)):S("",!0),(we=L.cards)!=null&&we.length?S("",!0):(s(),o("div",Go,[...C[13]||(C[13]=[e("span",null,"Drop sessions here",-1)])]))]),e("div",Ko,[L.onEnterTemplateId?(s(),o("span",qo," Auto: triggers template on entry ")):L.onEnterPrompt?(s(),o("span",Ho," Auto: runs custom prompt on entry ")):S("",!0),e("button",{class:"add-session-btn",onClick:I=>ie(L)}," + Add Session ",8,Wo)])],40,$o)}),128)),e("div",zo,[p.value?(s(),o("div",Yo,[N(e("input",{"onUpdate:modelValue":C[1]||(C[1]=L=>u.value=L),type:"text",placeholder:"Lane name...",class:"add-lane-input",onKeyup:[Ve(h,["enter"]),Ve(G,["escape"])]},null,544),[[fe,u.value]]),e("div",{class:"add-lane-actions"},[e("button",{class:"add-lane-confirm",onClick:h}," Add "),e("button",{class:"add-lane-cancel",onClick:G}," Cancel ")])])):(s(),o("button",{key:0,class:"add-lane-btn",onClick:C[0]||(C[0]=L=>p.value=!0)}," + Add Lane "))])])):(s(),o("div",ko,[...C[7]||(C[7]=[e("p",null,"Kanban board is not available for this project.",-1)])])),Y(Ye,{"is-open":f.value,"project-id":c.projectId,"lane-id":(V=r.value)==null?void 0:V.id,"lane-name":(q=r.value)==null?void 0:q.name,"onUpdate:isOpen":C[2]||(C[2]=L=>f.value=L),onClose:le,onAdded:ce},null,8,["is-open","project-id","lane-id","lane-name"]),Y(ho,{"is-open":w.value,"project-id":c.projectId,lane:$.value,"onUpdate:isOpen":C[3]||(C[3]=L=>w.value=L),onClose:he,onUpdated:Se,onDeleted:Fe},null,8,["is-open","project-id","lane"]),Y(ot,{"is-open":j.value,"project-id":c.projectId,"card-id":(X=l.value)==null?void 0:X.id,"current-lane-id":H.value,"session-name":(se=(ue=(pe=l.value)==null?void 0:pe.sessions)==null?void 0:ue[0])==null?void 0:se.name,"onUpdate:isOpen":C[4]||(C[4]=L=>j.value=L),onClose:O,onMoved:k},null,8,["is-open","project-id","card-id","current-lane-id","session-name"])])}}},Qo={class:"container"},Xo={class:"page-header"},Zo={class:"project-title"},el=["href"],tl={class:"tabs"},sl={class:"tabs-desktop"},nl={class:"tabs-left"},ol={class:"tabs-mobile"},ll=["value"],al={key:0,value:"kanban"},rl={key:2,class:"tab-spacer"},il={key:3},dl={key:0,class:"skeleton-list"},ul={key:1,class:"error-message"},cl={key:2,class:"empty-state"},ml={key:3,class:"empty-state"},pl={key:4,class:"session-list"},vl={key:5},fl={key:6},hl={class:"modal-content lane-selector-modal"},bl={class:"modal-body"},gl={class:"modal-description"},yl={class:"lane-options"},kl=["onClick"],Sl={class:"lane-option-name"},$l={class:"lane-option-count"},El={key:0,class:"empty-lanes"},Vl={__name:"SessionListView",setup(c){const m=et(),i=Ne(),p=Ue(),u=ye(),y=je(),A=Ge();vt(),A.restoreCollapsedLogState();const E=U(()=>{switch(m.name){case"ArchivedSessions":return"archived";case"ProjectTemplates":return"templates";case"ProjectCommands":return"commands";case"ScheduledSessions":return"scheduled";case"ProjectKanban":return"kanban";default:return"sessions"}});function g(O){const k=m.params.id,x={sessions:`/projects/${k}/sessions`,archived:`/projects/${k}/archived`,templates:`/projects/${k}/templates`,commands:`/projects/${k}/commands`,scheduled:`/projects/${k}/scheduled`,kanban:`/projects/${k}/kanban`};i.push(x[O])}const a=U(()=>m.params.id),{summaries:n,loadingSummaries:f,summaryErrors:r,fetchSummariesBatch:w,retryFetchSummary:$,updateSummary:j,cleanupSummary:l}=mt(),{filteredGroupedSessions:H}=ze(),{archivedLoaded:W}=pt(a,{fetchSummariesBatch:w,updateSummary:j,cleanupSummary:l}),B=U(()=>u.scheduledSessions||[]),F=U(()=>u.loadingScheduled||!1);let d=null;de(()=>u.sessions,()=>{clearTimeout(d),d=setTimeout(()=>{w(u.sessions)},400)}),de(()=>m.name,async O=>{O==="ArchivedSessions"?await z():O==="ScheduledSessions"&&await ee()},{immediate:!0}),de(()=>u.starredFilter,async(O,k)=>{E.value==="archived"&&W.value&&O!==k&&(await u.fetchArchivedSessions(a.value,{reset:!0}),w(u.archivedSessions))});async function z(){W.value||(await u.fetchArchivedSessions(a.value,{reset:!0}),W.value=!0,w(u.archivedSessions))}async function b(){await u.loadMoreArchivedSessions(a.value),w(u.archivedSessions)}async function ee(){await u.fetchScheduledSessions(a.value)}const oe=R(!1),te=R(null),M=R(!1);function P(O){const k=u.sessions.find(x=>x.id===O);te.value=k||{id:O},oe.value=!0}async function T(O){if(te.value){M.value=!0;try{await u.archiveSession(te.value.id,{cleanup:O}),G.success("Session archived")}catch(k){G.error(k.message||"Failed to archive session")}finally{M.value=!1,oe.value=!1,te.value=null}}}function t(){oe.value=!1,te.value=null}async function h(O){try{await u.unarchiveSession(O)}catch(k){console.error("Failed to unarchive session:",k)}}const G=_e(),ie=R(!1),le=R(null),ce=R(!1),me=R(null);function he(O){me.value=O,ce.value=!0}function Se(){ce.value=!1,me.value=null}async function Fe(O){if(!(!me.value||!O))try{await y.addSessionToBoard(m.params.id,me.value.id,O.id),G.success(`Session added to "${O.name}"`),Se()}catch(k){console.error("Failed to add session to board:",k),G.error(k.message||"Failed to add session to board")}}function Re(){ie.value=!1,le.value=null}return Oe(()=>{u.restoreStatusFilter(),u.restoreStarredFilter(),u.restoreScheduledFilter();const O=m.params.id;O&&y.fetchBoard(O).catch(k=>{console.warn("Failed to fetch kanban board:",k)})}),De(()=>{clearTimeout(d)}),(O,k)=>{var C,K,V,q,X,pe,ue,se,L,Ee,Ce,we,I;const x=Te("router-link");return s(),o("div",Qo,[e("div",Xo,[e("div",null,[e("div",Zo,[e("h1",null,_(((C=v(p).currentProject)==null?void 0:C.name)||"Sessions"),1),(K=v(p).currentProject)!=null&&K.repoUrl?(s(),o("a",{key:0,href:v(p).currentProject.repoUrl,target:"_blank",rel:"noopener noreferrer",class:"repo-link",title:"Open repository"},[...k[8]||(k[8]=[e("svg",{class:"repo-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[e("path",{d:"M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6m4-3l6 6m0 0l-6 6m6-6H9"})],-1)])],8,el)):S("",!0),Y(x,{to:`/projects/${v(m).params.id}/edit`,class:"settings-link",title:"Project settings"},{default:ve(()=>[...k[9]||(k[9]=[e("svg",{class:"settings-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[e("path",{d:"M12.22 2h-.44a2 2 0 00-2 2v.18a2 2 0 01-1 1.73l-.43.25a2 2 0 01-2 0l-.15-.08a2 2 0 00-2.73.73l-.22.38a2 2 0 00.73 2.73l.15.1a2 2 0 011 1.72v.51a2 2 0 01-1 1.74l-.15.09a2 2 0 00-.73 2.73l.22.38a2 2 0 002.73.73l.15-.08a2 2 0 012 0l.43.25a2 2 0 011 1.73V20a2 2 0 002 2h.44a2 2 0 002-2v-.18a2 2 0 011-1.73l.43-.25a2 2 0 012 0l.15.08a2 2 0 002.73-.73l.22-.39a2 2 0 00-.73-2.73l-.15-.08a2 2 0 01-1-1.74v-.5a2 2 0 011-1.74l.15-.09a2 2 0 00.73-2.73l-.22-.38a2 2 0 00-2.73-.73l-.15.08a2 2 0 01-2 0l-.43-.25a2 2 0 01-1-1.73V4a2 2 0 00-2-2z"}),e("circle",{cx:"12",cy:"12",r:"3"})],-1)])]),_:1},8,["to"])])]),E.value==="sessions"?(s(),Z(x,{key:0,to:`/projects/${v(m).params.id}/sessions/new`,class:"btn btn-primary mobile-only"},{default:ve(()=>[...k[10]||(k[10]=[re(" + Session ",-1)])]),_:1},8,["to"])):S("",!0)]),e("div",tl,[e("div",sl,[e("div",nl,[e("button",{class:ne(["tab",{active:E.value==="sessions"}]),onClick:k[0]||(k[0]=D=>v(i).push(`/projects/${v(m).params.id}/sessions`))}," Sessions ",2),e("button",{class:ne(["tab",{active:E.value==="archived"}]),onClick:k[1]||(k[1]=D=>v(i).push(`/projects/${v(m).params.id}/archived`))}," Archived ",2),e("button",{class:ne(["tab",{active:E.value==="templates"}]),onClick:k[2]||(k[2]=D=>v(i).push(`/projects/${v(m).params.id}/templates`))}," Templates ",2),e("button",{class:ne(["tab",{active:E.value==="commands"}]),onClick:k[3]||(k[3]=D=>v(i).push(`/projects/${v(m).params.id}/commands`))}," Commands ",2),e("button",{class:ne(["tab",{active:E.value==="scheduled"}]),onClick:k[4]||(k[4]=D=>v(i).push(`/projects/${v(m).params.id}/scheduled`))}," Scheduled ",2),(V=v(p).currentProject)!=null&&V.kanbanEnabled?(s(),o("button",{key:0,class:ne(["tab",{active:E.value==="kanban"}]),onClick:k[5]||(k[5]=D=>v(i).push(`/projects/${v(m).params.id}/kanban`))}," Kanban ",2)):S("",!0)]),E.value==="sessions"?(s(),Z(x,{key:0,to:`/projects/${v(m).params.id}/sessions/new`,class:"btn btn-primary desktop-only","aria-label":"New Session"},{default:ve(()=>[...k[11]||(k[11]=[e("span",{class:"add-session-label-full"},"+ Session",-1),e("span",{class:"add-session-label-short"},"+",-1)])]),_:1},8,["to"])):S("",!0)]),e("div",ol,[e("select",{value:E.value,class:"tab-select",onChange:k[6]||(k[6]=D=>g(D.target.value))},[k[12]||(k[12]=Pe('<option value="sessions"> Sessions </option><option value="archived"> Archived </option><option value="templates"> Templates </option><option value="commands"> Commands </option><option value="scheduled"> Scheduled </option>',5)),(q=v(p).currentProject)!=null&&q.kanbanEnabled?(s(),o("option",al," Kanban ")):S("",!0)],40,ll)])]),E.value==="sessions"?(s(),Z(Ie,{key:0,"show-status-filters":!0,"show-scheduled-filter":!0})):E.value==="archived"?(s(),Z(Ie,{key:1,"show-status-filters":!1,"show-scheduled-filter":!1})):(s(),o("div",rl)),E.value==="sessions"?(s(),o("div",il,[v(u).loading?(s(),o("div",dl,[(s(),o(J,null,Q(3,D=>e("div",{key:D,class:"skeleton card",style:{height:"120px"}})),64))])):v(u).error?(s(),o("div",ul,_(v(u).error),1)):v(u).sessions.length===0?(s(),o("div",cl,[k[14]||(k[14]=e("p",null,"No sessions yet. Start a new session to interact with Claude.",-1)),Y(x,{to:`/projects/${v(m).params.id}/sessions/new`,class:"btn btn-primary"},{default:ve(()=>[...k[13]||(k[13]=[re(" New Session ",-1)])]),_:1},8,["to"])])):v(H).length===0?(s(),o("div",ml,[...k[15]||(k[15]=[e("p",null,"No sessions match the current filter.",-1)])])):(s(),o("div",pl,[(s(!0),o(J,null,Q(v(H),D=>{var be;return s(),Z(qe,{key:D.parent.id,session:D.parent,"show-summary":!0,summary:v(n)[D.parent.id],"summary-loading":v(f)[D.parent.id],"summary-error":v(r)[D.parent.id],"show-archive":!0,"kanban-enabled":((be=v(p).currentProject)==null?void 0:be.kanbanEnabled)??!0,"pr-url":D.parent.prUrl,"pr-summary":v(n)[D.parent.id],onRetrySummary:v($),onArchive:P,onAddToBoard:he},null,8,["session","summary","summary-loading","summary-error","kanban-enabled","pr-url","pr-summary","onRetrySummary"])}),128))]))])):S("",!0),E.value==="archived"?(s(),Z(Pt,{key:4,summaries:v(n),"loading-summaries":v(f),"summary-errors":v(r),onRetrySummary:v($),onUnarchive:h,onLoadMore:b},null,8,["summaries","loading-summaries","summary-errors","onRetrySummary"])):S("",!0),E.value==="templates"?(s(),o("div",vl,[Y(Ys,{"project-id":v(m).params.id},null,8,["project-id"])])):S("",!0),E.value==="commands"?(s(),o("div",fl,[Y(cn,{"project-id":v(m).params.id},null,8,["project-id"])])):S("",!0),E.value==="scheduled"?(s(),Z(as,{key:7,sessions:B.value,loading:F.value},null,8,["sessions","loading"])):S("",!0),E.value==="kanban"?(s(),Z(Jo,{key:8,"project-id":v(m).params.id},null,8,["project-id"])):S("",!0),Y(Ye,{"is-open":ie.value,"project-id":v(m).params.id,"lane-id":(X=le.value)==null?void 0:X.id,"lane-name":(pe=le.value)==null?void 0:pe.name,"onUpdate:isOpen":k[7]||(k[7]=D=>ie.value=D),onClose:Re},null,8,["is-open","project-id","lane-id","lane-name"]),ce.value?(s(),o("div",{key:9,class:"modal-backdrop",onClick:ae(Se,["self"])},[e("div",hl,[e("div",{class:"modal-header"},[k[16]||(k[16]=e("h2",{class:"modal-title"}," Add to Kanban Board ",-1)),e("button",{class:"close-btn","aria-label":"Close",onClick:Se}," × ")]),e("div",bl,[e("p",gl,' Select a lane to add "'+_((ue=me.value)==null?void 0:ue.name)+'" to: ',1),e("div",yl,[(s(!0),o(J,null,Q((se=v(y).board)==null?void 0:se.lanes,D=>{var be;return s(),o("button",{key:D.id,class:"lane-option-btn",onClick:Ae=>Fe(D)},[e("span",Sl,_(D.name),1),e("span",$l,_(((be=D.cards)==null?void 0:be.length)||0)+" cards",1)],8,kl)}),128))]),(Ee=(L=v(y).board)==null?void 0:L.lanes)!=null&&Ee.length?S("",!0):(s(),o("p",El," No lanes available. Go to the Kanban tab to create lanes first. "))]),e("div",{class:"modal-footer"},[e("button",{class:"btn btn-secondary",onClick:Se}," Cancel ")])])])):S("",!0),Y(lt,{"is-open":oe.value,"session-name":((Ce=te.value)==null?void 0:Ce.name)||"this session","has-cleanup-script":!!((we=v(p).currentProject)!=null&&we.onSessionDeleted&&!((I=te.value)!=null&&I.parentSessionId)),loading:M.value,onConfirm:T,onCancel:t},null,8,["is-open","session-name","has-cleanup-script","loading"])])}}};export{Vl as default};
|
|
1
|
+
import{m as de,y as Me,x as U,z as De,l as R,A as Je,B as Qe,C as Xe,_ as ge,a as s,c as o,b as e,F as J,r as Q,u as v,E as ne,t as _,k as S,G as Z,i as _e,f as Te,d as Y,w as ve,o as Oe,j as N,v as fe,n as $e,e as re,h as ae,g as Ne,q as Pe,H as xe,p as Le,I as Ze,J as Ve,s as et}from"./index-DkLkDgig.js";import{u as Ue}from"./projects-C2Y29PSJ.js";import{u as ye}from"./sessions-CMby7ij3.js";import{u as je,a as Ge,f as tt,b as st}from"./SessionLogStream-B-w3n4c3.js";import{a as Be}from"./ApiClient-Dbs1H78V.js";import{u as Ke}from"./commandButtons-CY87n64i.js";import{S as qe}from"./SessionCard-BGDVHU9u.js";import{S as nt,M as ot,A as lt}from"./ArchiveConfirmModal-DBuOmtXu.js";import{u as He}from"./EffortLevelSelector-BHJHSqul.js";import{u as at}from"./providers-CeJXuo0Q.js";import{M as rt}from"./ModelSelector-BWIU4ud7.js";import{I as We}from"./InterpolationHelp-DabnHhE4.js";import{R as it}from"./ResizableTextarea-CwGM4P3c.js";import{S as dt}from"./SessionFormOptions-8qvL25ca.js";import{S as ut,a as ct}from"./SlashCommandWizard-CzyLjsdJ.js";import"./settings-BplIxCbi.js";function mt(){const c=Me({}),m=Me({}),i=Me({});async function p(a){const n=a.filter(f=>!c[f.id]&&!m[f.id]).map(f=>f.id);if(n.length!==0){for(const f of n)m[f]=!0,i[f]=!1;try{const f=await Be.getSessionSummariesBatch(n);for(const r of n)f[r]&&(c[r]=f[r]),m[r]=!1}catch(f){console.warn("Failed to fetch summaries batch:",f.message);for(const r of n)i[r]=!0,m[r]=!1}}}async function u(a){var n;m[a]=!0,i[a]=!1;try{const f=await Be.getSessionSummary(a);f&&(c[a]=f)}catch(f){((n=f.response)==null?void 0:n.status)!==404&&(console.warn(`Failed to fetch summary for session ${a}:`,f.message),i[a]=!0)}finally{m[a]=!1}}async function y(a){i[a]=!1,await u(a)}function A(a,n){c[a]=n,m[a]=!1,i[a]=!1}function E(a){delete c[a],delete m[a],delete i[a]}function g(a,n=400){let f=null;const r=de(a,()=>{clearTimeout(f),f=setTimeout(()=>{const w=a();p(w)},n)});return()=>{clearTimeout(f),r()}}return{summaries:c,loadingSummaries:m,summaryErrors:i,fetchSummariesBatch:p,fetchSummary:u,retryFetchSummary:y,updateSummary:A,cleanupSummary:E,watchSessionsForSummaries:g}}function ze(){const c=ye();function m(a){c.statusFilter===a?c.setStatusFilter(null):c.setStatusFilter(a)}function i(a){c.starredFilter===a?c.setStarredFilter(null):c.setStarredFilter(a)}function p(){c.starredFilter===null?c.setStarredFilter("starred"):c.starredFilter==="starred"?c.setStarredFilter("unstarred"):c.setStarredFilter(null)}const u=U(()=>c.starredFilter==="starred"?"Showing starred sessions only. Click to filter unstarred.":c.starredFilter==="unstarred"?"Showing unstarred sessions only. Click to show all.":"Showing all sessions. Click to filter by starred.");function y(){c.scheduledFilter===null?c.setScheduledFilter("scheduled"):c.scheduledFilter==="scheduled"?c.setScheduledFilter("not-scheduled"):c.setScheduledFilter(null)}const A=U(()=>c.scheduledFilter==="scheduled"?"Showing workflows with scheduled sessions. Click to filter non-scheduled.":c.scheduledFilter==="not-scheduled"?"Showing workflows without scheduled sessions. Click to show all.":"Showing all workflows. Click to filter by scheduled."),E=U(()=>{let a=c.groupedSessions;c.starredFilter==="starred"?a=a.filter($=>$.parent.starred):c.starredFilter==="unstarred"&&(a=a.filter($=>!$.parent.starred));const n=a.map($=>({group:$,status:c.getWorkflowAggregatedStatus($.parent.id)}));let f=n;c.scheduledFilter&&(f=n.filter(({status:$})=>{const j=$.scheduledCount>0;return c.scheduledFilter==="scheduled"?j:!j}));let r=0,w=0;for(const{status:$}of f)$.effectiveStatus==="running"?r++:w++;return{running:r,idle:w}}),g=U(()=>{let a=c.groupedSessions;return c.statusFilter&&(a=a.filter(n=>{const r=c.getWorkflowAggregatedStatus(n.parent.id).effectiveStatus;return c.statusFilter==="running"&&r==="running"||c.statusFilter==="idle"&&r==="idle"})),c.starredFilter==="starred"?a=a.filter(n=>n.parent.starred):c.starredFilter==="unstarred"&&(a=a.filter(n=>!n.parent.starred)),c.scheduledFilter&&(a=a.filter(n=>{const r=c.getWorkflowAggregatedStatus(n.parent.id).scheduledCount>0;return!!(c.scheduledFilter==="scheduled"&&r||c.scheduledFilter==="not-scheduled"&&!r)})),a});return{toggleFilter:m,toggleStarredFilter:i,toggleStarFilterIcon:p,starFilterTooltip:u,toggleScheduledFilterIcon:y,scheduledFilterTooltip:A,filteredGroupedSessions:g,statusFilterCounts:E}}function pt(c,m){const i=Ue(),p=ye(),u=Ke(),y=je(),{fetchSummariesBatch:A,updateSummary:E,cleanupSummary:g}=m,a=[];let n=null;const f=R(!1);return de(c,async r=>{if(!r)return;f.value=!1,a.forEach(M=>M()),a.length=0,n&&(n(),n=null),await i.fetchProject(r),await p.fetchSessions(r),await u.fetchButtons(r),A(p.sessions);const{subscribe:w,unsubscribe:$,onSessionCreated:j,onSessionUpdated:l,onSessionDeleted:H,onSessionSummaryUpdated:W,onCommandRunOutput:B,onCommandRunComplete:F,onCommandRunError:d,onCommandRunDeleted:z,onKanbanBoardUpdated:b,onKanbanCardMoved:ee,onKanbanCardAdded:oe,onKanbanCardRemoved:te}=Je(r);n=$,w(),a.push(j(M=>{p.addSessionToList(M)})),a.push(l(M=>{p.updateSession(M)})),a.push(H(M=>{p.removeSessionFromList(M),g(M)})),a.push(W((M,P)=>{E(M,P)})),a.push(B((M,P,T,t)=>{var me;const h=u.runs[M],ie=p.sessions.find(he=>he.id===P),le=(me=ie==null?void 0:ie.latestCommandRuns)==null?void 0:me.find(he=>he.runId===M),ce=(h==null?void 0:h.startedAt)||(le==null?void 0:le.startedAt)||Date.now();u.runs[M]||(u.runs[M]={runId:M,buttonId:T,sessionId:P,status:"running",output:"",exitCode:null,startedAt:ce,outputTruncated:!1}),u.appendOutput(M,t),p.updateSessionCommandRun(P,T,{buttonId:T,status:"running",runId:M,startedAt:ce})})),a.push(F(({runId:M,sessionId:P,buttonId:T,exitCode:t,output:h})=>{u.runs[M]||(u.runs[M]={runId:M,buttonId:T,sessionId:P,status:"running",output:"",exitCode:null,startedAt:Date.now(),outputTruncated:!1}),u.completeRun(M,t,h);const G=t===0?"success":"error";p.updateSessionCommandRun(P,T,{buttonId:T,status:G,exitCode:t,runId:M,completedAt:Date.now()})})),a.push(d((M,P,T,t)=>{u.runs[M]||(u.runs[M]={runId:M,buttonId:T,sessionId:P,status:"running",output:"",exitCode:null,startedAt:Date.now(),outputTruncated:!1}),u.errorRun(M,t),p.updateSessionCommandRun(P,T,{buttonId:T,status:"error",runId:M,completedAt:Date.now()})})),a.push(z((M,P,T)=>{u.clearRun(M),p.removeSessionCommandRun(P,T)})),a.push(b(M=>{y.handleBoardUpdated(M)})),a.push(ee((M,P,T,t)=>{y.handleCardMoved(M,P,T,t)})),a.push(oe((M,P)=>{y.handleCardAdded(M,P)})),a.push(te((M,P)=>{y.handleCardRemoved(M,P)}))},{immediate:!0}),De(()=>{a.forEach(r=>r()),n&&n()}),{archivedLoaded:f}}function vt(){const c=ye(),m=Ge(),i=R({}),p={},u=new Map,y=4;function A(r,w=0){fetch(`/api/sessions/${r}/streaming-state`).then($=>$.ok?$.json():null).then($=>{var j;if($&&((j=$.workLogs)!=null&&j.length||$.partialText||$.thinking)){m.hydrateSessionState(r,$);const l=u.get(r);l&&(clearTimeout(l.timeout),u.delete(r))}else E(r,w)}).catch(()=>{E(r,w)})}function E(r,w=0){if(w>=y||!i.value[r])return;const $=c.sessions.find(H=>H.id===r);if(!$||!["running","starting"].includes($.status))return;const j=1500*Math.pow(2,w),l=setTimeout(()=>{u.delete(r),A(r,w+1)},j);u.set(r,{count:w,timeout:l})}function g(r){if(i.value[r])return;const w=Xe(r),$=[];$.push(w.onWorkLog(j=>{m.addSessionWorkLog(r,j)})),$.push(w.onPartial(j=>{j&&m.setSessionPartialText(r,j)})),$.push(w.onThinkingPartial(j=>{j&&m.setPartialThinking(j,r)})),$.push(w.onChangesUpdate(j=>{m.setSessionFileCount(r,j)})),$.push(w.onStatus(j=>{["running","starting"].includes(j)?p[r]&&(clearTimeout(p[r]),delete p[r]):p[r]=setTimeout(()=>{delete p[r],m.clearSessionEphemeralState(r)},2e3)})),w.subscribe(),i.value[r]={subscription:w,cleanup:()=>{$.forEach(j=>j&&j()),w.unsubscribe()}},A(r)}function a(r){const w=i.value[r];w&&(w.cleanup(),delete i.value[r]),p[r]&&(clearTimeout(p[r]),delete p[r]);const $=u.get(r);$&&(clearTimeout($.timeout),u.delete(r))}de(()=>c.sessions.filter(r=>["running","starting"].includes(r.status)).map(r=>r.id),(r,w=[])=>{const $=r.filter(l=>!w.includes(l)),j=w.filter(l=>!r.includes(l));$.forEach(l=>g(l)),j.forEach(l=>a(l))},{immediate:!0});const{onReconnect:n}=Qe(),f=n(()=>{for(const r of Object.keys(i.value))A(r)});return De(()=>{Object.keys(i.value).forEach(r=>a(r)),f()}),{activeSubscriptions:i}}const ft={class:"filters-container"},ht={class:"status-filters"},bt=["aria-label","onClick"],gt={class:"filter-label"},yt={class:"filter-count"},kt=["title"],St={key:0,class:"star-icon"},$t={key:1,class:"star-icon star-crossed"},Et={key:2,class:"star-icon"},Ct=["title"],wt={key:0,class:"schedule-icon"},_t={key:1,class:"schedule-icon schedule-crossed"},Tt={key:2,class:"schedule-icon"},jt={__name:"SessionFiltersPanel",props:{showStatusFilters:{type:Boolean,default:!0},showScheduledFilter:{type:Boolean,default:!0}},setup(c){const m=ye(),{toggleFilter:i,toggleStarFilterIcon:p,starFilterTooltip:u,toggleScheduledFilterIcon:y,scheduledFilterTooltip:A,statusFilterCounts:E}=ze();return(g,a)=>(s(),o("div",ft,[e("div",ht,[c.showStatusFilters?(s(),o(J,{key:0},Q(["running","idle"],n=>e("button",{key:n,class:ne(["filter-btn",{active:v(m).statusFilter===n,"filter-btn-empty":v(E)[n]===0}]),"aria-label":`${n} (${v(E)[n]})`,onClick:f=>v(i)(n)},[e("span",gt,_(n),1),e("span",yt,_(v(E)[n]),1)],10,bt)),64)):S("",!0),e("button",{class:ne(["filter-btn star-btn",{"star-filter-active":v(m).starredFilter==="starred","star-filter-unstarred":v(m).starredFilter==="unstarred","star-filter-all":v(m).starredFilter===null}]),title:v(u),onClick:a[0]||(a[0]=(...n)=>v(p)&&v(p)(...n))},[v(m).starredFilter==="starred"?(s(),o("span",St,"⭐")):v(m).starredFilter==="unstarred"?(s(),o("span",$t,"⭐")):(s(),o("span",Et,"☆"))],10,kt),c.showScheduledFilter?(s(),o("button",{key:1,class:ne(["filter-btn schedule-btn",{"schedule-filter-active":v(m).scheduledFilter==="scheduled","schedule-filter-not-scheduled":v(m).scheduledFilter==="not-scheduled","schedule-filter-all":v(m).scheduledFilter===null}]),title:v(A),onClick:a[1]||(a[1]=(...n)=>v(y)&&v(y)(...n))},[v(m).scheduledFilter==="scheduled"?(s(),o("span",wt,"⏰")):v(m).scheduledFilter==="not-scheduled"?(s(),o("span",_t,"⏰")):(s(),o("span",Tt,"⏰"))],10,Ct)):S("",!0)])]))}},Ie=ge(jt,[["__scopeId","data-v-2c9a63d9"]]),Mt={key:0,class:"skeleton-list"},Ft={key:1,class:"error-message"},Rt={key:2,class:"empty-state"},At={key:3,class:"session-list"},xt={key:0,class:"load-more-container"},Lt=["disabled"],Bt={key:0},Dt={key:1},Ot={__name:"ArchivedTabContent",props:{summaries:{type:Object,required:!0},loadingSummaries:{type:Object,required:!0},summaryErrors:{type:Object,required:!0}},emits:["retrySummary","unarchive","loadMore"],setup(c){const m=ye(),i=U(()=>{const{total:p,offset:u}=m.archivedPagination;return Math.max(0,p-u)});return(p,u)=>(s(),o("div",null,[v(m).archivedPagination.loading&&v(m).archivedSessions.length===0?(s(),o("div",Mt,[(s(),o(J,null,Q(3,y=>e("div",{key:y,class:"skeleton card",style:{height:"120px"}})),64))])):v(m).error?(s(),o("div",Ft,_(v(m).error),1)):v(m).archivedSessions.length===0?(s(),o("div",Rt,[...u[3]||(u[3]=[e("p",null,"No archived sessions. Archive completed sessions to keep your session list tidy.",-1)])])):(s(),o("div",At,[(s(!0),o(J,null,Q(v(m).archivedSessions,y=>(s(),Z(qe,{key:y.id,session:y,"show-summary":!0,summary:c.summaries[y.id],"summary-loading":c.loadingSummaries[y.id],"summary-error":c.summaryErrors[y.id],"show-unarchive":!0,"kanban-enabled":!1,"pr-url":y.prUrl,"pr-summary":c.summaries[y.id],onRetrySummary:u[0]||(u[0]=A=>p.$emit("retrySummary",A)),onUnarchive:u[1]||(u[1]=A=>p.$emit("unarchive",A))},null,8,["session","summary","summary-loading","summary-error","pr-url","pr-summary"]))),128)),v(m).archivedPagination.hasMore?(s(),o("div",xt,[e("button",{class:"btn btn-secondary",disabled:v(m).archivedPagination.loading,onClick:u[2]||(u[2]=y=>p.$emit("loadMore"))},[v(m).archivedPagination.loading?(s(),o("span",Bt,"Loading...")):(s(),o("span",Dt,"Load More ("+_(i.value)+" remaining)",1))],8,Lt)])):S("",!0)]))]))}},Pt=ge(Ot,[["__scopeId","data-v-c0906664"]]),Ut={class:"scheduled-session-card card"},Vt={class:"card-header"},It={class:"session-info"},Nt={class:"session-name"},Gt={class:"timing-info"},Kt={class:"timing-item"},qt={class:"timing-details"},Ht={class:"timing-text"},Wt={class:"timing-absolute"},zt={key:0,class:"timing-item"},Yt={class:"timing-details"},Jt={class:"timing-absolute"},Qt={class:"card-actions"},Xt=["disabled"],Zt=["disabled"],es={__name:"ScheduledSessionCard",props:{session:{type:Object,required:!0}},setup(c){const m=c,i=ye(),p=_e(),u=R(!1),y=R(!1),A=U(()=>{const n=new Date(m.session.scheduledAt);return tt(n,{addSuffix:!0})}),E=U(()=>{const n=new Date(m.session.scheduledAt);return st(n,"MMM d, h:mm a")});async function g(){if(confirm("Cancel this scheduled session?")){u.value=!0;try{await i.updateSessionFields(m.session.id,{status:"stopped"}),p.success("Session cancelled")}catch(n){console.error("Failed to cancel session:",n),p.error(`Failed to cancel session: ${n.message}`)}finally{u.value=!1}}}function a(){}return(n,f)=>{const r=Te("router-link");return s(),o("div",Ut,[e("div",Vt,[e("div",It,[Y(r,{to:`/sessions/${c.session.id}`,class:"session-name-link"},{default:ve(()=>[e("h3",Nt,_(c.session.name),1)]),_:1},8,["to"])]),f[2]||(f[2]=e("div",{class:"status-badge-container"},[e("span",{class:"status-badge status-scheduled"},"scheduled")],-1))]),e("div",Gt,[e("div",Kt,[f[3]||(f[3]=e("span",{class:"timing-icon"},"⏰",-1)),e("div",qt,[e("span",Ht,_(A.value),1),e("span",Wt,_(E.value),1)])]),c.session.autoRescheduleEnabled?(s(),o("div",zt,[f[5]||(f[5]=e("span",{class:"timing-icon"},"🔄",-1)),e("div",Yt,[f[4]||(f[4]=e("span",{class:"timing-text"},"Auto-reschedule",-1)),e("span",Jt," Attempt "+_(c.session.rescheduleCount)+"/"+_(c.session.maxRescheduleCount||"∞"),1)])])):S("",!0)]),e("div",Qt,[e("button",{class:"btn btn-secondary btn-small",disabled:u.value,onClick:f[0]||(f[0]=w=>y.value=!0)}," Edit Schedule ",8,Xt),e("button",{class:"btn btn-danger btn-small",disabled:u.value,onClick:g}," Cancel ",8,Zt)]),Y(nt,{"is-open":y.value,session:c.session,onClose:f[1]||(f[1]=w=>y.value=!1),onSaved:a},null,8,["is-open","session"])])}}},ts=ge(es,[["__scopeId","data-v-d41e6b57"]]),ss={key:0,class:"skeleton-list"},ns={key:1,class:"empty-state"},os={key:2,class:"session-list"},ls={__name:"ScheduledTabContent",props:{sessions:{type:Array,required:!0},loading:{type:Boolean,default:!1}},setup(c){return(m,i)=>(s(),o("div",null,[c.loading?(s(),o("div",ss,[(s(),o(J,null,Q(3,p=>e("div",{key:p,class:"skeleton card",style:{height:"120px"}})),64))])):c.sessions.length===0?(s(),o("div",ns,[...i[0]||(i[0]=[e("p",null,"No scheduled sessions. Use scheduling options when creating a new session to schedule it for later.",-1)])])):(s(),o("div",os,[(s(!0),o(J,null,Q(c.sessions,p=>(s(),Z(ts,{key:p.id,session:p},null,8,["session"]))),128))]))]))}},as=ge(ls,[["__scopeId","data-v-75cf4e60"]]),rs={class:"templates-panel"},is={class:"templates-header"},ds={key:0,class:"template-form card","data-testid":"template-form"},us={class:"form-group"},cs={class:"form-group"},ms={class:"form-group"},ps=["disabled"],vs={class:"form-group"},fs=["value"],hs={class:"form-group"},bs={class:"form-group"},gs={class:"form-group"},ys={class:"form-group"},ks={class:"form-actions"},Ss=["disabled"],$s={key:0,class:"loading-spinner"},Es={key:1,class:"loading-state"},Cs={key:2},ws={key:0,class:"template-section"},_s={class:"templates-list"},Ts={class:"template-header"},js={class:"template-name"},Ms={class:"template-prompt"},Fs={class:"template-meta"},Rs={key:0,class:"meta-badge"},As={key:1,class:"meta-badge"},xs={key:2,class:"meta-badge"},Ls={key:3,class:"meta-badge"},Bs={key:4,class:"meta-badge meta-badge-chain"},Ds={key:1,class:"template-section"},Os={class:"templates-list"},Ps={class:"template-header"},Us={class:"template-name"},Vs={class:"template-prompt"},Is={class:"template-meta"},Ns={key:0,class:"meta-badge"},Gs={key:1,class:"meta-badge"},Ks={key:2,class:"meta-badge"},qs={key:3,class:"meta-badge"},Hs={key:4,class:"meta-badge meta-badge-chain"},Ws={key:2,class:"empty-state"},zs={__name:"TemplatesPanel",props:{projectId:{type:String,required:!0}},setup(c,{expose:m}){const i=c,p=He(),u=_e(),y=at(),A=R(!1),E=R(!1),g=R({name:"",prompt:"",isGlobal:!1,nextTemplateId:null,thinkingEnabled:null,gitBranch:"",model:null,mode:null}),a=U(()=>p.loading),n=U(()=>p.projectTemplates),f=U(()=>p.globalTemplates),r=U(()=>[...p.projectTemplates,...p.globalTemplates]);Oe(async()=>{y.providers.length===0&&await y.fetchProviders(),p.fetchProjectTemplates(i.projectId)}),de(()=>i.projectId,F=>{p.fetchProjectTemplates(F)});function w(F,d=100){return F.length<=d?F:`${F.substring(0,d)}...`}function $(F){const d=p.getTemplateById(F);return(d==null?void 0:d.name)||"Unknown"}function j(F){var d;for(const z of y.providers){const b=(d=z.models)==null?void 0:d.find(ee=>ee.modelId===F);if(b)return z.isBuiltIn?b.displayName:b.modelId}return F}function l(){g.value={name:"",prompt:"",isGlobal:!1,nextTemplateId:null,thinkingEnabled:null,gitBranch:"",model:null,mode:null}}function H(){A.value=!0}function W(){A.value=!1,l()}async function B(){if(!E.value){E.value=!0;try{const F={name:g.value.name,prompt:g.value.prompt,nextTemplateId:g.value.nextTemplateId||void 0,thinkingEnabled:g.value.thinkingEnabled,gitBranch:g.value.gitBranch||void 0,model:g.value.model,mode:g.value.mode};g.value.isGlobal?(await p.createGlobalTemplate(F),u.success("Global template created")):(await p.createProjectTemplate(i.projectId,F),u.success("Template created")),W()}catch(F){u.error(F.message)}finally{E.value=!1}}}return m({formData:g,getModelName:j,resetForm:l}),(F,d)=>{const z=Te("router-link");return s(),o("div",rs,[e("div",is,[d[8]||(d[8]=e("h2",null,"Session Templates",-1)),A.value?S("",!0):(s(),o("button",{key:0,class:"btn btn-primary btn-sm","data-testid":"new-template-btn",onClick:H}," New Template "))]),A.value?(s(),o("div",ds,[d[23]||(d[23]=e("h3",null,"Create Template",-1)),e("form",{onSubmit:ae(B,["prevent"])},[e("div",us,[d[9]||(d[9]=e("label",{class:"form-label"},"Name",-1)),N(e("input",{"onUpdate:modelValue":d[0]||(d[0]=b=>g.value.name=b),type:"text",class:"form-input",placeholder:"Template name",required:""},null,512),[[fe,g.value.name]])]),e("div",cs,[d[10]||(d[10]=e("label",{class:"form-label"},"Prompt",-1)),N(e("textarea",{"onUpdate:modelValue":d[1]||(d[1]=b=>g.value.prompt=b),class:"form-input form-textarea",placeholder:"Session prompt. Use {{rootSession.summary}} to reference root session data.",rows:"4",required:""},null,512),[[fe,g.value.prompt]]),Y(We)]),e("div",ms,[d[12]||(d[12]=e("label",{class:"form-label"},"Scope",-1)),N(e("select",{"onUpdate:modelValue":d[2]||(d[2]=b=>g.value.isGlobal=b),class:"form-input",disabled:F.editingTemplate},[...d[11]||(d[11]=[e("option",{value:!1}," Project Only ",-1),e("option",{value:!0}," Global (all projects) ",-1)])],8,ps),[[$e,g.value.isGlobal]])]),e("div",vs,[d[14]||(d[14]=e("label",{class:"form-label"},"Next Template (Optional)",-1)),N(e("select",{"onUpdate:modelValue":d[3]||(d[3]=b=>g.value.nextTemplateId=b),class:"form-input"},[d[13]||(d[13]=e("option",{value:null}," None ",-1)),(s(!0),o(J,null,Q(r.value,b=>(s(),o("option",{key:b.id,value:b.id},_(b.name)+" "+_(b.projectId?"":"(Global)"),9,fs))),128))],512),[[$e,g.value.nextTemplateId]]),d[15]||(d[15]=e("p",{class:"form-help"}," Chain another template to run after this one completes. ",-1))]),e("div",hs,[d[16]||(d[16]=e("label",{class:"form-label"},"Model",-1)),Y(rt,{modelValue:g.value.model,"onUpdate:modelValue":d[4]||(d[4]=b=>g.value.model=b),"allow-empty":!0,"empty-label":"Inherit from root session"},null,8,["modelValue"])]),e("div",bs,[d[18]||(d[18]=e("label",{class:"form-label",for:"create-mode"},"Mode",-1)),N(e("select",{id:"create-mode","onUpdate:modelValue":d[5]||(d[5]=b=>g.value.mode=b),class:"form-input","data-testid":"mode-select"},[...d[17]||(d[17]=[e("option",{value:null}," Inherit from root session ",-1),e("option",{value:"plan"}," Plan ",-1),e("option",{value:"standard"}," Standard ",-1),e("option",{value:"yolo"}," YOLO ",-1)])],512),[[$e,g.value.mode]])]),e("div",gs,[d[20]||(d[20]=e("label",{class:"form-label",for:"create-thinking"},"Extended Thinking",-1)),N(e("select",{id:"create-thinking","onUpdate:modelValue":d[6]||(d[6]=b=>g.value.thinkingEnabled=b),class:"form-input","data-testid":"thinking-select"},[...d[19]||(d[19]=[e("option",{value:null}," Inherit from root session ",-1),e("option",{value:!0}," Enabled ",-1),e("option",{value:!1}," Disabled ",-1)])],512),[[$e,g.value.thinkingEnabled]])]),e("div",ys,[d[21]||(d[21]=e("label",{class:"form-label"},"Git Branch (Optional)",-1)),N(e("input",{"onUpdate:modelValue":d[7]||(d[7]=b=>g.value.gitBranch=b),type:"text",class:"form-input",placeholder:"Leave empty to inherit from root session"},null,512),[[fe,g.value.gitBranch]])]),e("div",ks,[e("button",{type:"button",class:"btn","data-testid":"cancel-btn",onClick:W}," Cancel "),e("button",{type:"submit",class:"btn btn-primary",disabled:E.value,"data-testid":"submit-btn"},[E.value?(s(),o("span",$s)):S("",!0),d[22]||(d[22]=re(" Create ",-1))],8,Ss)])],32)])):S("",!0),a.value?(s(),o("div",Es,[...d[24]||(d[24]=[e("span",{class:"loading-spinner"},null,-1),re(" Loading templates... ",-1)])])):(s(),o("div",Cs,[n.value.length>0?(s(),o("div",ws,[d[25]||(d[25]=e("h3",{class:"section-title"}," Project Templates ",-1)),e("div",_s,[(s(!0),o(J,null,Q(n.value,b=>(s(),Z(z,{key:b.id,to:`/projects/${c.projectId}/templates/${b.id}`,class:"template-card card","data-testid":`template-card-${b.id}`},{default:ve(()=>[e("div",Ts,[e("h4",js,_(b.name),1)]),e("p",Ms,_(w(b.prompt)),1),e("div",Fs,[b.thinkingEnabled?(s(),o("span",Rs,"Thinking")):S("",!0),b.gitBranch?(s(),o("span",As,_(b.gitBranch),1)):S("",!0),b.model?(s(),o("span",xs,_(j(b.model)),1)):S("",!0),b.mode?(s(),o("span",Ls,_(b.mode),1)):S("",!0),b.nextTemplateId?(s(),o("span",Bs," Chains to: "+_($(b.nextTemplateId)),1)):S("",!0)])]),_:2},1032,["to","data-testid"]))),128))])])):S("",!0),f.value.length>0?(s(),o("div",Ds,[d[27]||(d[27]=e("h3",{class:"section-title"}," Global Templates ",-1)),e("div",Os,[(s(!0),o(J,null,Q(f.value,b=>(s(),Z(z,{key:b.id,to:`/projects/${c.projectId}/templates/${b.id}`,class:"template-card card","data-testid":`template-card-${b.id}`},{default:ve(()=>[e("div",Ps,[e("h4",Us,_(b.name),1)]),e("p",Vs,_(w(b.prompt)),1),e("div",Is,[d[26]||(d[26]=e("span",{class:"meta-badge meta-badge-global"},"Global",-1)),b.thinkingEnabled?(s(),o("span",Ns,"Thinking")):S("",!0),b.gitBranch?(s(),o("span",Gs,_(b.gitBranch),1)):S("",!0),b.model?(s(),o("span",Ks,_(j(b.model)),1)):S("",!0),b.mode?(s(),o("span",qs,_(b.mode),1)):S("",!0),b.nextTemplateId?(s(),o("span",Hs," Chains to: "+_($(b.nextTemplateId)),1)):S("",!0)])]),_:2},1032,["to","data-testid"]))),128))])])):S("",!0),n.value.length===0&&f.value.length===0&&!A.value?(s(),o("div",Ws,[d[28]||(d[28]=e("p",null,"No templates yet. Create a template to automate session workflows.",-1)),e("button",{class:"btn btn-primary","data-testid":"create-template-btn",onClick:H}," Create Template ")])):S("",!0)]))])}}},Ys=ge(zs,[["__scopeId","data-v-d08b4ac0"]]),Js={class:"command-buttons-panel"},Qs={class:"panel-header"},Xs={key:0,class:"loading-state"},Zs={key:1,class:"error-message"},en={key:2,class:"empty-state"},tn={key:3,class:"buttons-table"},sn=["onClick"],nn={class:"col-label"},on={class:"col-command"},ln={class:"col-order"},an=["onClick"],rn={class:"modal-body"},dn={class:"modal-footer"},un={__name:"CommandButtonsPanel",props:{projectId:{type:String,required:!0}},setup(c){const m=c,i=Ne(),p=Ke(),u=R(null),y=a=>a.length>50?`${a.substring(0,50)}...`:a,A=a=>{i.push(`/projects/${m.projectId}/command-buttons/${a.id}`)},E=a=>{u.value=a},g=async()=>{if(u.value)try{await p.deleteButton(m.projectId,u.value.id),u.value=null}catch(a){console.error("Failed to delete button:",a)}};return(a,n)=>{const f=Te("router-link");return s(),o("div",Js,[e("div",Qs,[n[5]||(n[5]=e("h3",null,"Command Buttons",-1)),Y(f,{to:`/projects/${c.projectId}/command-buttons/new`,class:"btn btn-primary btn-sm"},{default:ve(()=>[...n[4]||(n[4]=[re(" + New Command Button ",-1)])]),_:1},8,["to"])]),v(p).loading?(s(),o("div",Xs,[...n[6]||(n[6]=[e("span",{class:"loading-spinner"},null,-1),re(" Loading command buttons... ",-1)])])):v(p).error?(s(),o("div",Zs,_(v(p).error),1)):v(p).buttons.length===0?(s(),o("div",en,[n[8]||(n[8]=e("p",null,"No command buttons configured yet.",-1)),Y(f,{to:`/projects/${c.projectId}/command-buttons/new`,class:"btn btn-primary"},{default:ve(()=>[...n[7]||(n[7]=[re(" Create First Button ",-1)])]),_:1},8,["to"])])):(s(),o("div",tn,[n[9]||(n[9]=Pe('<div class="table-header" data-v-990a48bf><div class="col-label" data-v-990a48bf> Label </div><div class="col-command" data-v-990a48bf> Command </div><div class="col-order" data-v-990a48bf> Sort Order </div><div class="col-actions" data-v-990a48bf> Actions </div></div>',1)),(s(!0),o(J,null,Q(v(p).buttons,r=>(s(),o("div",{key:r.id,class:"table-row",onClick:w=>A(r)},[e("div",nn,_(r.label),1),e("div",on,[e("code",null,_(y(r.command)),1)]),e("div",ln,_(r.sortOrder),1),e("div",{class:"col-actions",onClick:n[0]||(n[0]=ae(()=>{},["stop"]))},[e("button",{class:"btn btn-sm btn-outline-danger",onClick:w=>E(r)}," Delete ",8,an)])],8,sn))),128))])),u.value?(s(),o("div",{key:4,class:"modal-overlay",onClick:n[3]||(n[3]=r=>u.value=null)},[e("div",{class:"modal-dialog",onClick:n[2]||(n[2]=ae(()=>{},["stop"]))},[n[12]||(n[12]=e("div",{class:"modal-header"},[e("h4",null,"Delete Command Button")],-1)),e("div",rn,[e("p",null,[n[10]||(n[10]=re('Are you sure you want to delete the command button "',-1)),e("strong",null,_(u.value.label),1),n[11]||(n[11]=re('"?',-1))])]),e("div",dn,[e("button",{class:"btn btn-outline-secondary",onClick:n[1]||(n[1]=r=>u.value=null)}," Cancel "),e("button",{class:"btn btn-danger",onClick:g}," Delete ")])])])):S("",!0)])}}},cn=ge(un,[["__scopeId","data-v-990a48bf"]]),mn={class:"modal-content"},pn={class:"modal-header"},vn={class:"modal-title"},fn={class:"modal-body"},hn={class:"form-group"},bn={class:"sessions-list"},gn={key:0,class:"loading-state"},yn={key:1,class:"empty-state"},kn={key:0},Sn={key:1},$n=["onClick"],En={class:"session-info"},Cn={class:"session-name"},wn={class:"session-meta"},_n={key:0,class:"session-mode"},Tn={class:"session-date"},jn={class:"modal-footer"},Mn=["disabled"],Fn={__name:"AddSessionToLaneModal",props:{isOpen:{type:Boolean,default:!1},projectId:{type:String,default:""},laneId:{type:String,default:""},laneName:{type:String,default:""}},emits:["close","update:isOpen","added"],setup(c,{emit:m}){const i=c,p=m;ye();const u=je(),y=_e(),A=R(!1),E=R(!1),g=R(""),a=R(null),n=R([]),f=U(()=>{let B=n.value.filter(F=>!u.isSessionOnBoard(F.id));if(B=B.filter(F=>!F.parentSessionId),g.value.trim()){const F=g.value.toLowerCase();B=B.filter(d=>{var z;return(z=d.name)==null?void 0:z.toLowerCase().includes(F)})}return B});function r(B){switch(B){case"running":case"starting":return"●";case"waiting":return"◐";case"completed":return"✓";case"error":return"✕";case"stopped":return"■";case"scheduled":return"⏰";default:return"○"}}function w(B){return B?new Date(B).toLocaleDateString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):""}function $(B){a.value=B}function j(){}function l(){p("update:isOpen",!1),p("close"),g.value="",a.value=null}async function H(){if(i.projectId){A.value=!0;try{const B=await Be.getProjectSessions(i.projectId,!1,null);n.value=Array.isArray(B)?B:(B==null?void 0:B.sessions)||[]}catch(B){console.error("Failed to load sessions:",B),y.error("Failed to load sessions"),n.value=[]}finally{A.value=!1}}}async function W(){if(!(!a.value||!i.laneId)){E.value=!0;try{await u.addSessionToBoard(i.projectId,a.value,i.laneId),y.success("Session added to board"),p("added",a.value),l()}catch(B){console.error("Failed to add session to board:",B),y.error(B.message||"Failed to add session to board")}finally{E.value=!1}}}return de(()=>i.isOpen,B=>{B&&H()},{immediate:!0}),(B,F)=>c.isOpen?(s(),o("div",{key:0,class:"modal-backdrop",onClick:ae(l,["self"])},[e("div",mn,[e("div",pn,[e("h2",vn," Add Session to "+_(c.laneName),1),e("button",{class:"close-btn","aria-label":"Close",onClick:l}," × ")]),e("div",fn,[e("div",hn,[F[1]||(F[1]=e("label",{for:"session-search",class:"form-label"},"Search Sessions",-1)),N(e("input",{id:"session-search","onUpdate:modelValue":F[0]||(F[0]=d=>g.value=d),type:"text",class:"form-input",placeholder:"Search by name...",onInput:j},null,544),[[fe,g.value]])]),e("div",bn,[A.value?(s(),o("div",gn,[...F[2]||(F[2]=[e("span",{class:"loading-spinner"},null,-1),re(" Loading sessions... ",-1)])])):f.value.length===0?(s(),o("div",yn,[g.value?(s(),o("p",kn,' No sessions matching "'+_(g.value)+'" ',1)):(s(),o("p",Sn," No available sessions to add. "))])):(s(!0),o(J,{key:2},Q(f.value,d=>(s(),o("div",{key:d.id,class:ne(["session-item",{selected:a.value===d.id}]),onClick:z=>$(d.id)},[e("div",{class:ne(["session-status",`status-${d.status}`])},_(r(d.status)),3),e("div",En,[e("div",Cn,_(d.name),1),e("div",wn,[d.mode?(s(),o("span",_n,_(d.mode),1)):S("",!0),e("span",Tn,_(w(d.updatedAt||d.createdAt)),1)])])],10,$n))),128))])]),e("div",jn,[e("button",{class:"btn btn-secondary",onClick:l}," Cancel "),e("button",{class:"btn btn-primary",disabled:!a.value||E.value,onClick:W},_(E.value?"Adding...":"Add to Lane"),9,Mn)])])])):S("",!0)}},Ye=ge(Fn,[["__scopeId","data-v-916a53c8"]]),Rn={class:"modal-content"},An={class:"modal-body"},xn={class:"form-group"},Ln={key:0,class:"form-group"},Bn={class:"lane-position-controls"},Dn=["disabled"],On={class:"lane-position-label"},Pn=["disabled"],Un={class:"form-group"},Vn={class:"automation-options"},In={class:"radio-option"},Nn={class:"radio-option"},Gn={class:"radio-option"},Kn={key:1,class:"form-group"},qn={key:0,label:"Project Templates"},Hn=["value"],Wn={key:1,label:"Global Templates"},zn=["value"],Yn={key:2,class:"form-group"},Jn={class:"prompt-actions-row"},Qn={key:4,class:"agent-settings-section"},Xn={key:0,class:"agent-settings-body"},Zn={class:"form-group"},eo={class:"toggle-switch-row"},to={class:"toggle-switch"},so={key:0,class:"reschedule-settings"},no={class:"form-group"},oo={class:"checkbox-option"},lo={class:"checkbox-option"},ao={class:"form-group"},ro={class:"form-group"},io={class:"form-group"},uo={class:"form-group"},co={class:"danger-zone"},mo=["disabled"],po={class:"modal-footer"},vo=["disabled"],fo={__name:"LaneSettingsModal",props:{isOpen:{type:Boolean,default:!1},projectId:{type:String,default:""},lane:{type:Object,default:null}},emits:["close","update:isOpen","updated","deleted"],setup(c,{emit:m}){const i=c,p=m,u=je(),y=He(),A=_e(),E=Ue(),g=R(!1),a=R(!1),n=R("none"),f=R(!1),r=R(!1),w=R(null),$=R(-1),j=R(-1),l=Me({name:"",onEnterTemplateId:null,onEnterPrompt:"",onEnterMode:null,onEnterModel:null,onEnterEffortLevel:null,onEnterThinkingEnabled:null,onEnterAutoRescheduleEnabled:!1,onEnterRescheduleDelayMinutes:15,onEnterRescheduleOnTokenLimit:!0,onEnterRescheduleOnServiceError:!0,onEnterMaxRescheduleCount:null,onEnterMaxTotalTokens:null,onEnterRescheduleAtTokenCount:null}),H=U(()=>y.projectTemplates),W=U(()=>y.globalTemplates),B=U(()=>{const T=E.getProjectById(i.projectId);return(T==null?void 0:T.workingDirectory)||null}),F=U(()=>j.value),d=U(()=>{var T,t;return((t=(T=u.board)==null?void 0:T.lanes)==null?void 0:t.length)||0}),z=U(()=>!(!l.name.trim()||n.value==="template"&&!l.onEnterTemplateId||n.value==="prompt"&&!l.onEnterPrompt.trim()));function b(){var T,t;if(i.lane){l.name=i.lane.name||"",l.onEnterTemplateId=i.lane.onEnterTemplateId||null,l.onEnterPrompt=i.lane.onEnterPrompt||"",l.onEnterMode=i.lane.onEnterMode||null,l.onEnterModel=i.lane.onEnterModel||null,l.onEnterEffortLevel=i.lane.onEnterEffortLevel||null,l.onEnterThinkingEnabled=i.lane.onEnterThinkingEnabled??null,l.onEnterAutoRescheduleEnabled=i.lane.onEnterAutoRescheduleEnabled||!1,l.onEnterRescheduleDelayMinutes=i.lane.onEnterRescheduleDelayMinutes||15,l.onEnterRescheduleOnTokenLimit=i.lane.onEnterRescheduleOnTokenLimit??!0,l.onEnterRescheduleOnServiceError=i.lane.onEnterRescheduleOnServiceError??!0,l.onEnterMaxRescheduleCount=i.lane.onEnterMaxRescheduleCount||null,l.onEnterMaxTotalTokens=i.lane.onEnterMaxTotalTokens||null,l.onEnterRescheduleAtTokenCount=i.lane.onEnterRescheduleAtTokenCount||null,i.lane.onEnterTemplateId?n.value="template":i.lane.onEnterPrompt?n.value="prompt":n.value="none",f.value=!!(l.onEnterMode||l.onEnterModel||l.onEnterEffortLevel||l.onEnterThinkingEnabled!==null||l.onEnterAutoRescheduleEnabled);const h=((t=(T=u.board)==null?void 0:T.lanes)==null?void 0:t.findIndex(G=>G.id===i.lane.id))??-1;$.value=h,j.value=h}else l.name="",l.onEnterTemplateId=null,l.onEnterPrompt="",l.onEnterMode=null,l.onEnterModel=null,l.onEnterEffortLevel=null,l.onEnterThinkingEnabled=null,l.onEnterAutoRescheduleEnabled=!1,l.onEnterRescheduleDelayMinutes=15,l.onEnterRescheduleOnTokenLimit=!0,l.onEnterRescheduleOnServiceError=!0,l.onEnterMaxRescheduleCount=null,l.onEnterMaxTotalTokens=null,l.onEnterRescheduleAtTokenCount=null,n.value="none",f.value=!1,$.value=-1,j.value=-1}function ee(){j.value=$.value,p("update:isOpen",!1),p("close")}function oe({text:T}){const t=w.value;if(t){const h=t.selectionStart,G=t.selectionEnd,ie=l.onEnterPrompt.substring(0,h),le=l.onEnterPrompt.substring(G);l.onEnterPrompt=ie+T+le,Ze(()=>{t.selectionStart=t.selectionEnd=h+T.length,t.focus()})}}function te(T){const t=j.value;t<0||t===T||(j.value=T)}async function M(){var T;if(!(!i.lane||!z.value)){g.value=!0;try{const t={name:l.name.trim()};if(n.value==="template"?(t.onEnterTemplateId=l.onEnterTemplateId,t.onEnterPrompt=null,t.onEnterMode=null,t.onEnterModel=null,t.onEnterEffortLevel=null,t.onEnterThinkingEnabled=null,t.onEnterAutoRescheduleEnabled=!1,t.onEnterRescheduleDelayMinutes=15,t.onEnterRescheduleOnTokenLimit=!0,t.onEnterRescheduleOnServiceError=!0,t.onEnterMaxRescheduleCount=null,t.onEnterMaxTotalTokens=null,t.onEnterRescheduleAtTokenCount=null):n.value==="prompt"?(t.onEnterTemplateId=null,t.onEnterPrompt=l.onEnterPrompt.trim(),t.onEnterMode=l.onEnterMode,t.onEnterModel=l.onEnterModel,t.onEnterEffortLevel=l.onEnterEffortLevel,t.onEnterThinkingEnabled=l.onEnterThinkingEnabled,t.onEnterAutoRescheduleEnabled=l.onEnterAutoRescheduleEnabled,t.onEnterRescheduleDelayMinutes=l.onEnterRescheduleDelayMinutes,t.onEnterRescheduleOnTokenLimit=l.onEnterRescheduleOnTokenLimit,t.onEnterRescheduleOnServiceError=l.onEnterRescheduleOnServiceError,t.onEnterMaxRescheduleCount=l.onEnterMaxRescheduleCount,t.onEnterMaxTotalTokens=l.onEnterMaxTotalTokens,t.onEnterRescheduleAtTokenCount=l.onEnterRescheduleAtTokenCount):(t.onEnterTemplateId=null,t.onEnterPrompt=null,t.onEnterMode=null,t.onEnterModel=null,t.onEnterEffortLevel=null,t.onEnterThinkingEnabled=null,t.onEnterAutoRescheduleEnabled=!1,t.onEnterRescheduleDelayMinutes=15,t.onEnterRescheduleOnTokenLimit=!0,t.onEnterRescheduleOnServiceError=!0,t.onEnterMaxRescheduleCount=null,t.onEnterMaxTotalTokens=null,t.onEnterRescheduleAtTokenCount=null),j.value!==$.value&&j.value>=0){const h=(T=u.board)==null?void 0:T.lanes;if(h&&h.length>1){const G=h.map(ce=>ce.id),ie=i.lane.id,[le]=G.splice($.value,1);G.splice(j.value,0,le),await u.reorderLanes(i.projectId,G)}}await u.updateLane(i.projectId,i.lane.id,t),A.success("Lane settings saved"),p("updated"),ee()}catch(t){console.error("Failed to save lane settings:",t),A.error(t.message||"Failed to save lane settings")}finally{g.value=!1}}}async function P(){if(i.lane&&confirm(`Are you sure you want to delete the "${i.lane.name}" lane? This cannot be undone.`)){a.value=!0;try{await u.deleteLane(i.projectId,i.lane.id),A.success("Lane deleted"),p("deleted"),ee()}catch(T){console.error("Failed to delete lane:",T),A.error(T.message||"Failed to delete lane")}finally{a.value=!1}}}return de(()=>i.isOpen,T=>{T&&(b(),i.projectId&&y.projectTemplates.length===0&&y.globalTemplates.length===0&&y.fetchProjectTemplates(i.projectId))},{immediate:!0}),de(()=>i.lane,()=>{i.isOpen&&b()}),de(()=>{var T;return(T=u.board)==null?void 0:T.lanes},T=>{if(i.isOpen&&i.lane&&T){const t=T.findIndex(h=>h.id===i.lane.id);t>=0&&($.value=t,j.value=t)}},{deep:!0}),(T,t)=>c.isOpen?(s(),o("div",{key:0,class:"modal-backdrop",onClick:ae(ee,["self"])},[e("div",Rn,[e("div",{class:"modal-header"},[t[22]||(t[22]=e("h2",{class:"modal-title"}," Lane Settings ",-1)),e("button",{class:"close-btn","aria-label":"Close",onClick:ee}," × ")]),e("div",An,[e("div",xn,[t[23]||(t[23]=e("label",{for:"lane-name",class:"form-label"},"Lane Name",-1)),N(e("input",{id:"lane-name","onUpdate:modelValue":t[0]||(t[0]=h=>l.name=h),type:"text",class:"form-input",placeholder:"Enter lane name"},null,512),[[fe,l.name]])]),d.value>1?(s(),o("div",Ln,[t[26]||(t[26]=e("label",{class:"form-label"},"Position",-1)),e("div",Bn,[e("button",{class:"btn btn-icon",disabled:F.value<=0,title:"Move left",onClick:t[1]||(t[1]=h=>te(F.value-1))},[...t[24]||(t[24]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round","stroke-linejoin":"round"},[e("polyline",{points:"15 18 9 12 15 6"})],-1)])],8,Dn),e("span",On,_(F.value+1)+" of "+_(d.value),1),e("button",{class:"btn btn-icon",disabled:F.value>=d.value-1,title:"Move right",onClick:t[2]||(t[2]=h=>te(F.value+1))},[...t[25]||(t[25]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round","stroke-linejoin":"round"},[e("polyline",{points:"9 18 15 12 9 6"})],-1)])],8,Pn)])])):S("",!0),e("div",Un,[t[30]||(t[30]=e("label",{class:"form-label"},"On-Enter Automation",-1)),e("div",Vn,[e("label",In,[N(e("input",{"onUpdate:modelValue":t[3]||(t[3]=h=>n.value=h),type:"radio",value:"none",name:"automation"},null,512),[[xe,n.value]]),t[27]||(t[27]=e("span",null,"None",-1))]),e("label",Nn,[N(e("input",{"onUpdate:modelValue":t[4]||(t[4]=h=>n.value=h),type:"radio",value:"template",name:"automation"},null,512),[[xe,n.value]]),t[28]||(t[28]=e("span",null,"Run a template",-1))]),e("label",Gn,[N(e("input",{"onUpdate:modelValue":t[5]||(t[5]=h=>n.value=h),type:"radio",value:"prompt",name:"automation"},null,512),[[xe,n.value]]),t[29]||(t[29]=e("span",null,"Run a custom prompt",-1))])])]),n.value==="template"?(s(),o("div",Kn,[t[32]||(t[32]=e("label",{for:"template-select",class:"form-label"},"Select Template",-1)),N(e("select",{id:"template-select","onUpdate:modelValue":t[6]||(t[6]=h=>l.onEnterTemplateId=h),class:"form-input"},[t[31]||(t[31]=e("option",{value:null}," Select a template... ",-1)),H.value.length?(s(),o("optgroup",qn,[(s(!0),o(J,null,Q(H.value,h=>(s(),o("option",{key:h.id,value:h.id},_(h.name),9,Hn))),128))])):S("",!0),W.value.length?(s(),o("optgroup",Wn,[(s(!0),o(J,null,Q(W.value,h=>(s(),o("option",{key:h.id,value:h.id},_(h.name),9,zn))),128))])):S("",!0)],512),[[$e,l.onEnterTemplateId]]),t[33]||(t[33]=e("p",{class:"form-help"}," When a session enters this lane, the selected template will automatically run. ",-1))])):S("",!0),n.value==="prompt"?(s(),o("div",Yn,[t[34]||(t[34]=e("label",{for:"custom-prompt",class:"form-label"},"Custom Prompt",-1)),Y(it,{id:"custom-prompt",ref_key:"promptTextareaRef",ref:w,modelValue:l.onEnterPrompt,"onUpdate:modelValue":t[7]||(t[7]=h=>l.onEnterPrompt=h),class:"form-input form-textarea",placeholder:"Enter the prompt to run when a session enters this lane...",rows:"4","min-height":80},null,8,["modelValue"]),e("div",Jn,[Y(We),B.value?(s(),Z(ut,{key:0,onOpen:t[8]||(t[8]=h=>r.value=!0)})):S("",!0)])])):S("",!0),n.value==="prompt"?(s(),Z(ct,{key:3,"is-open":r.value,"onUpdate:isOpen":t[9]||(t[9]=h=>r.value=h),"working-directory":B.value||"",mode:"insert","hide-builtin":!0,onInsert:oe},null,8,["is-open","working-directory"])):S("",!0),n.value==="prompt"?(s(),o("div",Qn,[e("button",{type:"button",class:"section-toggle",onClick:t[10]||(t[10]=h=>f.value=!f.value)},[e("span",{class:ne(["toggle-chevron",{open:f.value}])},"▶",2),t[35]||(t[35]=re(" Session Settings ",-1))]),f.value?(s(),o("div",Xn,[Y(dt,{mode:l.onEnterMode||"standard",model:l.onEnterModel,"effort-level":l.onEnterEffortLevel,"thinking-enabled":l.onEnterThinkingEnabled??!1,"hide-start-immediately":!0,"onUpdate:mode":t[11]||(t[11]=h=>l.onEnterMode=h),"onUpdate:model":t[12]||(t[12]=h=>l.onEnterModel=h),"onUpdate:effortLevel":t[13]||(t[13]=h=>l.onEnterEffortLevel=h),"onUpdate:thinkingEnabled":t[14]||(t[14]=h=>l.onEnterThinkingEnabled=h)},null,8,["mode","model","effort-level","thinking-enabled"]),e("div",Zn,[e("label",eo,[e("label",to,[N(e("input",{"onUpdate:modelValue":t[15]||(t[15]=h=>l.onEnterAutoRescheduleEnabled=h),type:"checkbox"},null,512),[[Le,l.onEnterAutoRescheduleEnabled]]),t[36]||(t[36]=e("span",{class:"toggle-slider"},null,-1))]),t[37]||(t[37]=e("span",{class:"toggle-label"},"Auto-reschedule on errors",-1))])]),l.onEnterAutoRescheduleEnabled?(s(),o("div",so,[e("div",no,[t[40]||(t[40]=e("p",{class:"settings-label"}," Reschedule Triggers ",-1)),e("label",oo,[N(e("input",{"onUpdate:modelValue":t[16]||(t[16]=h=>l.onEnterRescheduleOnTokenLimit=h),type:"checkbox"},null,512),[[Le,l.onEnterRescheduleOnTokenLimit]]),t[38]||(t[38]=e("span",null,"Token limit errors",-1))]),e("label",lo,[N(e("input",{"onUpdate:modelValue":t[17]||(t[17]=h=>l.onEnterRescheduleOnServiceError=h),type:"checkbox"},null,512),[[Le,l.onEnterRescheduleOnServiceError]]),t[39]||(t[39]=e("span",null,"Service unavailability",-1))])]),e("div",ao,[t[42]||(t[42]=e("label",{class:"form-label"},"Reschedule Delay",-1)),N(e("select",{"onUpdate:modelValue":t[18]||(t[18]=h=>l.onEnterRescheduleDelayMinutes=h),class:"form-input"},[...t[41]||(t[41]=[e("option",{value:5}," 5 minutes ",-1),e("option",{value:15}," 15 minutes ",-1),e("option",{value:30}," 30 minutes ",-1),e("option",{value:60}," 1 hour ",-1),e("option",{value:120}," 2 hours ",-1)])],512),[[$e,l.onEnterRescheduleDelayMinutes,void 0,{number:!0}]])]),e("div",ro,[t[43]||(t[43]=e("label",{class:"form-label"},"Max Reschedule Count",-1)),N(e("input",{"onUpdate:modelValue":t[19]||(t[19]=h=>l.onEnterMaxRescheduleCount=h),type:"number",min:"1",max:"100",class:"form-input",placeholder:"Unlimited"},null,512),[[fe,l.onEnterMaxRescheduleCount,void 0,{number:!0}]])]),e("div",io,[t[44]||(t[44]=e("label",{class:"form-label"},"Max Total Tokens",-1)),N(e("input",{"onUpdate:modelValue":t[20]||(t[20]=h=>l.onEnterMaxTotalTokens=h),type:"number",min:"1000",step:"1000",class:"form-input",placeholder:"Unlimited"},null,512),[[fe,l.onEnterMaxTotalTokens,void 0,{number:!0}]])]),e("div",uo,[t[45]||(t[45]=e("label",{class:"form-label"},"Reschedule At Token Count",-1)),N(e("input",{"onUpdate:modelValue":t[21]||(t[21]=h=>l.onEnterRescheduleAtTokenCount=h),type:"number",min:"10000",step:"10000",class:"form-input",placeholder:"None"},null,512),[[fe,l.onEnterRescheduleAtTokenCount,void 0,{number:!0}]])])])):S("",!0)])):S("",!0)])):S("",!0),e("div",co,[t[46]||(t[46]=e("h4",{class:"danger-title"}," Danger Zone ",-1)),t[47]||(t[47]=e("p",{class:"danger-description"}," Deleting this lane will remove all cards from it. Sessions will remain in the project. ",-1)),e("button",{class:"btn btn-danger",disabled:a.value,onClick:P},_(a.value?"Deleting...":"Delete Lane"),9,mo)])]),e("div",po,[e("button",{class:"btn btn-secondary",onClick:ee}," Cancel "),e("button",{class:"btn btn-primary",disabled:g.value||!z.value,onClick:M},_(g.value?"Saving...":"Save Changes"),9,vo)])])])):S("",!0)}},ho=ge(fo,[["__scopeId","data-v-114a927d"]]),bo={class:"kanban-board"},go={key:0,class:"kanban-loading"},yo={key:1,class:"kanban-error"},ko={key:2,class:"kanban-empty"},So={key:3,class:"kanban-lanes-container"},$o=["onDragover","onDrop"],Eo={class:"lane-header"},Co={class:"lane-title-row"},wo={class:"lane-title"},_o={key:0,class:"lane-automation-indicator",title:"Automation enabled"},To={class:"lane-header-actions"},jo={class:"lane-count"},Mo=["onClick"],Fo={class:"lane-cards"},Ro={key:0,class:"card-drop-indicator"},Ao=["onDragstart","onDragover"],xo={class:"card-header"},Lo={class:"card-title"},Bo={class:"card-meta"},Do={key:0,class:"card-mode"},Oo={class:"card-reorder-arrows"},Po=["onClick"],Uo=["onClick"],Vo=["onClick"],Io=["onClick"],No={key:0,class:"card-drop-indicator"},Go={key:1,class:"lane-empty"},Ko={class:"lane-footer"},qo={key:0,class:"lane-automation"},Ho={key:1,class:"lane-automation"},Wo=["onClick"],zo={class:"add-lane-container"},Yo={key:1,class:"add-lane-form"},Jo={__name:"KanbanBoard",props:{projectId:{type:String,required:!0}},setup(c){const m=c,i=je(),p=R(!1),u=R(""),y=R(null),A=R(null),E=R(null),g=R(-1),a=R(null),n=R(-1),f=R(!1),r=R(null),w=R(!1),$=R(null),j=R(!1),l=R(null),H=R(null),W=U(()=>i.board),B=U(()=>i.loading),F=U(()=>i.error),d=async()=>{try{await i.fetchBoard(m.projectId)}catch(x){console.error("Failed to fetch kanban board:",x)}},z=x=>{switch(x){case"running":case"starting":return"●";case"waiting":return"◐";case"completed":return"✓";case"error":return"✕";case"stopped":return"■";case"scheduled":return"⏰";default:return"○"}},b=(x,C,K,V)=>{y.value="card",A.value=C,E.value=K,g.value=V;const q=x.dataTransfer;q.effectAllowed="move",q.setData("text/plain",C.id)},ee=(x,C,K)=>{if(y.value!=="card")return;const V=x.currentTarget.getBoundingClientRect(),q=V.top+V.height/2,X=x.clientY<q?K:K+1;C===E.value&&(X===g.value||X===g.value+1)?(a.value=null,n.value=-1):(a.value=C,n.value=X)},oe=()=>{y.value=null,A.value=null,E.value=null,g.value=-1,a.value=null,n.value=-1},te=async(x,C,K)=>{var ue,se;const V=(se=(ue=W.value)==null?void 0:ue.lanes)==null?void 0:se.find(L=>L.id===x);if(!(V!=null&&V.cards))return;let q=K>=0?K:V.cards.length;if(q>C&&q--,q===C)return;const X=V.cards.map(L=>L.id),[pe]=X.splice(C,1);X.splice(q,0,pe);try{await i.reorderCards(m.projectId,x,X)}catch(L){console.error("Failed to reorder cards:",L)}},M=async(x,C)=>{try{await i.moveCard(m.projectId,x,C,{runOnEnterTemplate:!0})}catch(K){console.error("Failed to move card:",K)}},P=async(x,C)=>{if(x.preventDefault(),y.value!=="card"||!A.value){oe();return}const K=x.dataTransfer.getData("text/plain");if(!K){oe();return}E.value===C?await te(C,g.value,n.value):await M(K,C),oe()},T=async(x,C,K)=>{var pe,ue;const V=(ue=(pe=W.value)==null?void 0:pe.lanes)==null?void 0:ue.find(se=>se.id===x);if(!(V!=null&&V.cards))return;const q=V.cards.map(se=>se.id),[X]=q.splice(C,1);q.splice(K,0,X);try{await i.reorderCards(m.projectId,x,q)}catch(se){console.error("Failed to reorder cards:",se)}},t=async x=>{if(confirm("Remove this session from the board?"))try{await i.removeCard(m.projectId,x)}catch(C){console.error("Failed to remove card:",C)}},h=async()=>{if(u.value.trim())try{await i.createLane(m.projectId,{name:u.value.trim()}),G()}catch(x){console.error("Failed to add lane:",x)}},G=()=>{p.value=!1,u.value=""},ie=x=>{r.value=x,f.value=!0},le=()=>{f.value=!1,r.value=null},ce=()=>{},me=x=>{$.value=x,w.value=!0},he=()=>{w.value=!1,$.value=null},Se=()=>{},Fe=()=>{he()},Re=(x,C)=>{l.value=x,H.value=C,j.value=!0},O=()=>{j.value=!1,l.value=null,H.value=null},k=()=>{O()};return de(()=>m.projectId,x=>{x&&d()},{immediate:!0}),Oe(()=>{m.projectId&&d()}),(x,C)=>{var V,q,X,pe,ue,se;const K=Te("router-link");return s(),o("div",bo,[B.value?(s(),o("div",go,[...C[5]||(C[5]=[e("span",{class:"loading-spinner"},null,-1),re(" Loading board... ",-1)])])):F.value?(s(),o("div",yo,[C[6]||(C[6]=e("span",{class:"error-icon"},"!",-1)),re(" "+_(F.value)+" ",1),e("button",{class:"retry-btn",onClick:d}," Retry ")])):W.value?(s(),o("div",So,[(s(!0),o(J,null,Q(W.value.lanes,L=>{var Ee,Ce,we;return s(),o("div",{key:L.id,class:"kanban-lane",onDragover:ae(I=>{var D;return ee(I,L.id,((D=L.cards)==null?void 0:D.length)||0)},["prevent"]),onDrop:I=>P(I,L.id)},[e("div",Eo,[e("div",Co,[e("h3",wo,_(L.name),1),L.onEnterTemplateId||L.onEnterPrompt?(s(),o("span",_o,[...C[8]||(C[8]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"currentColor"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z"})],-1)])])):S("",!0)]),e("div",To,[e("span",jo,_(((Ee=L.cards)==null?void 0:Ee.length)||0),1),e("button",{class:"lane-settings-btn",title:"Lane settings",onClick:I=>me(L)},[...C[9]||(C[9]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e("circle",{cx:"12",cy:"12",r:"3"}),e("path",{d:"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"})],-1)])],8,Mo)])]),e("div",Fo,[(s(!0),o(J,null,Q(L.cards,(I,D)=>{var be,Ae;return s(),o(J,{key:I.id},[y.value==="card"&&a.value===L.id&&n.value===D?(s(),o("div",Ro)):S("",!0),e("div",{class:ne(["kanban-card",{dragging:y.value==="card"&&((be=A.value)==null?void 0:be.id)===I.id}]),draggable:"true",onDragstart:ae(ke=>b(ke,I,L.id,D),["stop"]),onDragover:ae(ke=>ee(ke,L.id,D),["prevent","stop"]),onDragend:oe},[(Ae=I.sessions)!=null&&Ae[0]?(s(),Z(K,{key:0,to:`/sessions/${I.sessions[0].id}`,class:"card-link"},{default:ve(()=>[e("div",xo,[e("span",{class:ne(["card-status",`status-${I.sessions[0].status}`])},_(z(I.sessions[0].status)),3),e("h4",Lo,_(I.sessions[0].name),1)]),e("div",Bo,[I.sessions[0].mode?(s(),o("span",Do,_(I.sessions[0].mode),1)):S("",!0)])]),_:2},1032,["to"])):S("",!0),e("div",Oo,[D>0?(s(),o("button",{key:0,class:"card-reorder-btn",title:"Move card up",onClick:ae(ke=>T(L.id,D,D-1),["prevent"])},[...C[10]||(C[10]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round","stroke-linejoin":"round"},[e("polyline",{points:"18 15 12 9 6 15"})],-1)])],8,Po)):S("",!0),D<L.cards.length-1?(s(),o("button",{key:1,class:"card-reorder-btn",title:"Move card down",onClick:ae(ke=>T(L.id,D,D+1),["prevent"])},[...C[11]||(C[11]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round","stroke-linejoin":"round"},[e("polyline",{points:"6 9 12 15 18 9"})],-1)])],8,Uo)):S("",!0)]),e("button",{class:"card-move-btn",title:"Move to lane",onClick:ae(ke=>Re(I,L.id),["prevent"])},[...C[12]||(C[12]=[Pe('<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 4 19 4 19 8"></polyline><line x1="14" y1="10" x2="19" y2="4"></line><polyline points="9 20 5 20 5 16"></polyline><line x1="10" y1="14" x2="5" y2="20"></line></svg>',1)])],8,Vo),e("button",{class:"card-remove-btn",title:"Remove from board",onClick:ae(ke=>t(I.id),["prevent"])}," × ",8,Io)],42,Ao)],64)}),128)),y.value==="card"&&a.value===L.id&&n.value===(((Ce=L.cards)==null?void 0:Ce.length)||0)?(s(),o("div",No)):S("",!0),(we=L.cards)!=null&&we.length?S("",!0):(s(),o("div",Go,[...C[13]||(C[13]=[e("span",null,"Drop sessions here",-1)])]))]),e("div",Ko,[L.onEnterTemplateId?(s(),o("span",qo," Auto: triggers template on entry ")):L.onEnterPrompt?(s(),o("span",Ho," Auto: runs custom prompt on entry ")):S("",!0),e("button",{class:"add-session-btn",onClick:I=>ie(L)}," + Add Session ",8,Wo)])],40,$o)}),128)),e("div",zo,[p.value?(s(),o("div",Yo,[N(e("input",{"onUpdate:modelValue":C[1]||(C[1]=L=>u.value=L),type:"text",placeholder:"Lane name...",class:"add-lane-input",onKeyup:[Ve(h,["enter"]),Ve(G,["escape"])]},null,544),[[fe,u.value]]),e("div",{class:"add-lane-actions"},[e("button",{class:"add-lane-confirm",onClick:h}," Add "),e("button",{class:"add-lane-cancel",onClick:G}," Cancel ")])])):(s(),o("button",{key:0,class:"add-lane-btn",onClick:C[0]||(C[0]=L=>p.value=!0)}," + Add Lane "))])])):(s(),o("div",ko,[...C[7]||(C[7]=[e("p",null,"Kanban board is not available for this project.",-1)])])),Y(Ye,{"is-open":f.value,"project-id":c.projectId,"lane-id":(V=r.value)==null?void 0:V.id,"lane-name":(q=r.value)==null?void 0:q.name,"onUpdate:isOpen":C[2]||(C[2]=L=>f.value=L),onClose:le,onAdded:ce},null,8,["is-open","project-id","lane-id","lane-name"]),Y(ho,{"is-open":w.value,"project-id":c.projectId,lane:$.value,"onUpdate:isOpen":C[3]||(C[3]=L=>w.value=L),onClose:he,onUpdated:Se,onDeleted:Fe},null,8,["is-open","project-id","lane"]),Y(ot,{"is-open":j.value,"project-id":c.projectId,"card-id":(X=l.value)==null?void 0:X.id,"current-lane-id":H.value,"session-name":(se=(ue=(pe=l.value)==null?void 0:pe.sessions)==null?void 0:ue[0])==null?void 0:se.name,"onUpdate:isOpen":C[4]||(C[4]=L=>j.value=L),onClose:O,onMoved:k},null,8,["is-open","project-id","card-id","current-lane-id","session-name"])])}}},Qo={class:"container"},Xo={class:"page-header"},Zo={class:"project-title"},el=["href"],tl={class:"tabs"},sl={class:"tabs-desktop"},nl={class:"tabs-left"},ol={class:"tabs-mobile"},ll=["value"],al={key:0,value:"kanban"},rl={key:2,class:"tab-spacer"},il={key:3},dl={key:0,class:"skeleton-list"},ul={key:1,class:"error-message"},cl={key:2,class:"empty-state"},ml={key:3,class:"empty-state"},pl={key:4,class:"session-list"},vl={key:5},fl={key:6},hl={class:"modal-content lane-selector-modal"},bl={class:"modal-body"},gl={class:"modal-description"},yl={class:"lane-options"},kl=["onClick"],Sl={class:"lane-option-name"},$l={class:"lane-option-count"},El={key:0,class:"empty-lanes"},Vl={__name:"SessionListView",setup(c){const m=et(),i=Ne(),p=Ue(),u=ye(),y=je(),A=Ge();vt(),A.restoreCollapsedLogState();const E=U(()=>{switch(m.name){case"ArchivedSessions":return"archived";case"ProjectTemplates":return"templates";case"ProjectCommands":return"commands";case"ScheduledSessions":return"scheduled";case"ProjectKanban":return"kanban";default:return"sessions"}});function g(O){const k=m.params.id,x={sessions:`/projects/${k}/sessions`,archived:`/projects/${k}/archived`,templates:`/projects/${k}/templates`,commands:`/projects/${k}/commands`,scheduled:`/projects/${k}/scheduled`,kanban:`/projects/${k}/kanban`};i.push(x[O])}const a=U(()=>m.params.id),{summaries:n,loadingSummaries:f,summaryErrors:r,fetchSummariesBatch:w,retryFetchSummary:$,updateSummary:j,cleanupSummary:l}=mt(),{filteredGroupedSessions:H}=ze(),{archivedLoaded:W}=pt(a,{fetchSummariesBatch:w,updateSummary:j,cleanupSummary:l}),B=U(()=>u.scheduledSessions||[]),F=U(()=>u.loadingScheduled||!1);let d=null;de(()=>u.sessions,()=>{clearTimeout(d),d=setTimeout(()=>{w(u.sessions)},400)}),de(()=>m.name,async O=>{O==="ArchivedSessions"?await z():O==="ScheduledSessions"&&await ee()},{immediate:!0}),de(()=>u.starredFilter,async(O,k)=>{E.value==="archived"&&W.value&&O!==k&&(await u.fetchArchivedSessions(a.value,{reset:!0}),w(u.archivedSessions))});async function z(){W.value||(await u.fetchArchivedSessions(a.value,{reset:!0}),W.value=!0,w(u.archivedSessions))}async function b(){await u.loadMoreArchivedSessions(a.value),w(u.archivedSessions)}async function ee(){await u.fetchScheduledSessions(a.value)}const oe=R(!1),te=R(null),M=R(!1);function P(O){const k=u.sessions.find(x=>x.id===O);te.value=k||{id:O},oe.value=!0}async function T(O){if(te.value){M.value=!0;try{await u.archiveSession(te.value.id,{cleanup:O}),G.success("Session archived")}catch(k){G.error(k.message||"Failed to archive session")}finally{M.value=!1,oe.value=!1,te.value=null}}}function t(){oe.value=!1,te.value=null}async function h(O){try{await u.unarchiveSession(O)}catch(k){console.error("Failed to unarchive session:",k)}}const G=_e(),ie=R(!1),le=R(null),ce=R(!1),me=R(null);function he(O){me.value=O,ce.value=!0}function Se(){ce.value=!1,me.value=null}async function Fe(O){if(!(!me.value||!O))try{await y.addSessionToBoard(m.params.id,me.value.id,O.id),G.success(`Session added to "${O.name}"`),Se()}catch(k){console.error("Failed to add session to board:",k),G.error(k.message||"Failed to add session to board")}}function Re(){ie.value=!1,le.value=null}return Oe(()=>{u.restoreStatusFilter(),u.restoreStarredFilter(),u.restoreScheduledFilter();const O=m.params.id;O&&y.fetchBoard(O).catch(k=>{console.warn("Failed to fetch kanban board:",k)})}),De(()=>{clearTimeout(d)}),(O,k)=>{var C,K,V,q,X,pe,ue,se,L,Ee,Ce,we,I;const x=Te("router-link");return s(),o("div",Qo,[e("div",Xo,[e("div",null,[e("div",Zo,[e("h1",null,_(((C=v(p).currentProject)==null?void 0:C.name)||"Sessions"),1),(K=v(p).currentProject)!=null&&K.repoUrl?(s(),o("a",{key:0,href:v(p).currentProject.repoUrl,target:"_blank",rel:"noopener noreferrer",class:"repo-link",title:"Open repository"},[...k[8]||(k[8]=[e("svg",{class:"repo-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[e("path",{d:"M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6m4-3l6 6m0 0l-6 6m6-6H9"})],-1)])],8,el)):S("",!0),Y(x,{to:`/projects/${v(m).params.id}/edit`,class:"settings-link",title:"Project settings"},{default:ve(()=>[...k[9]||(k[9]=[e("svg",{class:"settings-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[e("path",{d:"M12.22 2h-.44a2 2 0 00-2 2v.18a2 2 0 01-1 1.73l-.43.25a2 2 0 01-2 0l-.15-.08a2 2 0 00-2.73.73l-.22.38a2 2 0 00.73 2.73l.15.1a2 2 0 011 1.72v.51a2 2 0 01-1 1.74l-.15.09a2 2 0 00-.73 2.73l.22.38a2 2 0 002.73.73l.15-.08a2 2 0 012 0l.43.25a2 2 0 011 1.73V20a2 2 0 002 2h.44a2 2 0 002-2v-.18a2 2 0 011-1.73l.43-.25a2 2 0 012 0l.15.08a2 2 0 002.73-.73l.22-.39a2 2 0 00-.73-2.73l-.15-.08a2 2 0 01-1-1.74v-.5a2 2 0 011-1.74l.15-.09a2 2 0 00.73-2.73l-.22-.38a2 2 0 00-2.73-.73l-.15.08a2 2 0 01-2 0l-.43-.25a2 2 0 01-1-1.73V4a2 2 0 00-2-2z"}),e("circle",{cx:"12",cy:"12",r:"3"})],-1)])]),_:1},8,["to"])])]),E.value==="sessions"?(s(),Z(x,{key:0,to:`/projects/${v(m).params.id}/sessions/new`,class:"btn btn-primary mobile-only"},{default:ve(()=>[...k[10]||(k[10]=[re(" + Session ",-1)])]),_:1},8,["to"])):S("",!0)]),e("div",tl,[e("div",sl,[e("div",nl,[e("button",{class:ne(["tab",{active:E.value==="sessions"}]),onClick:k[0]||(k[0]=D=>v(i).push(`/projects/${v(m).params.id}/sessions`))}," Sessions ",2),e("button",{class:ne(["tab",{active:E.value==="archived"}]),onClick:k[1]||(k[1]=D=>v(i).push(`/projects/${v(m).params.id}/archived`))}," Archived ",2),e("button",{class:ne(["tab",{active:E.value==="templates"}]),onClick:k[2]||(k[2]=D=>v(i).push(`/projects/${v(m).params.id}/templates`))}," Templates ",2),e("button",{class:ne(["tab",{active:E.value==="commands"}]),onClick:k[3]||(k[3]=D=>v(i).push(`/projects/${v(m).params.id}/commands`))}," Commands ",2),e("button",{class:ne(["tab",{active:E.value==="scheduled"}]),onClick:k[4]||(k[4]=D=>v(i).push(`/projects/${v(m).params.id}/scheduled`))}," Scheduled ",2),(V=v(p).currentProject)!=null&&V.kanbanEnabled?(s(),o("button",{key:0,class:ne(["tab",{active:E.value==="kanban"}]),onClick:k[5]||(k[5]=D=>v(i).push(`/projects/${v(m).params.id}/kanban`))}," Kanban ",2)):S("",!0)]),E.value==="sessions"?(s(),Z(x,{key:0,to:`/projects/${v(m).params.id}/sessions/new`,class:"btn btn-primary desktop-only","aria-label":"New Session"},{default:ve(()=>[...k[11]||(k[11]=[e("span",{class:"add-session-label-full"},"+ Session",-1),e("span",{class:"add-session-label-short"},"+",-1)])]),_:1},8,["to"])):S("",!0)]),e("div",ol,[e("select",{value:E.value,class:"tab-select",onChange:k[6]||(k[6]=D=>g(D.target.value))},[k[12]||(k[12]=Pe('<option value="sessions"> Sessions </option><option value="archived"> Archived </option><option value="templates"> Templates </option><option value="commands"> Commands </option><option value="scheduled"> Scheduled </option>',5)),(q=v(p).currentProject)!=null&&q.kanbanEnabled?(s(),o("option",al," Kanban ")):S("",!0)],40,ll)])]),E.value==="sessions"?(s(),Z(Ie,{key:0,"show-status-filters":!0,"show-scheduled-filter":!0})):E.value==="archived"?(s(),Z(Ie,{key:1,"show-status-filters":!1,"show-scheduled-filter":!1})):(s(),o("div",rl)),E.value==="sessions"?(s(),o("div",il,[v(u).loading?(s(),o("div",dl,[(s(),o(J,null,Q(3,D=>e("div",{key:D,class:"skeleton card",style:{height:"120px"}})),64))])):v(u).error?(s(),o("div",ul,_(v(u).error),1)):v(u).sessions.length===0?(s(),o("div",cl,[k[14]||(k[14]=e("p",null,"No sessions yet. Start a new session to interact with Claude.",-1)),Y(x,{to:`/projects/${v(m).params.id}/sessions/new`,class:"btn btn-primary"},{default:ve(()=>[...k[13]||(k[13]=[re(" New Session ",-1)])]),_:1},8,["to"])])):v(H).length===0?(s(),o("div",ml,[...k[15]||(k[15]=[e("p",null,"No sessions match the current filter.",-1)])])):(s(),o("div",pl,[(s(!0),o(J,null,Q(v(H),D=>{var be;return s(),Z(qe,{key:D.parent.id,session:D.parent,"show-summary":!0,summary:v(n)[D.parent.id],"summary-loading":v(f)[D.parent.id],"summary-error":v(r)[D.parent.id],"show-archive":!0,"kanban-enabled":((be=v(p).currentProject)==null?void 0:be.kanbanEnabled)??!0,"pr-url":D.parent.prUrl,"pr-summary":v(n)[D.parent.id],onRetrySummary:v($),onArchive:P,onAddToBoard:he},null,8,["session","summary","summary-loading","summary-error","kanban-enabled","pr-url","pr-summary","onRetrySummary"])}),128))]))])):S("",!0),E.value==="archived"?(s(),Z(Pt,{key:4,summaries:v(n),"loading-summaries":v(f),"summary-errors":v(r),onRetrySummary:v($),onUnarchive:h,onLoadMore:b},null,8,["summaries","loading-summaries","summary-errors","onRetrySummary"])):S("",!0),E.value==="templates"?(s(),o("div",vl,[Y(Ys,{"project-id":v(m).params.id},null,8,["project-id"])])):S("",!0),E.value==="commands"?(s(),o("div",fl,[Y(cn,{"project-id":v(m).params.id},null,8,["project-id"])])):S("",!0),E.value==="scheduled"?(s(),Z(as,{key:7,sessions:B.value,loading:F.value},null,8,["sessions","loading"])):S("",!0),E.value==="kanban"?(s(),Z(Jo,{key:8,"project-id":v(m).params.id},null,8,["project-id"])):S("",!0),Y(Ye,{"is-open":ie.value,"project-id":v(m).params.id,"lane-id":(X=le.value)==null?void 0:X.id,"lane-name":(pe=le.value)==null?void 0:pe.name,"onUpdate:isOpen":k[7]||(k[7]=D=>ie.value=D),onClose:Re},null,8,["is-open","project-id","lane-id","lane-name"]),ce.value?(s(),o("div",{key:9,class:"modal-backdrop",onClick:ae(Se,["self"])},[e("div",hl,[e("div",{class:"modal-header"},[k[16]||(k[16]=e("h2",{class:"modal-title"}," Add to Kanban Board ",-1)),e("button",{class:"close-btn","aria-label":"Close",onClick:Se}," × ")]),e("div",bl,[e("p",gl,' Select a lane to add "'+_((ue=me.value)==null?void 0:ue.name)+'" to: ',1),e("div",yl,[(s(!0),o(J,null,Q((se=v(y).board)==null?void 0:se.lanes,D=>{var be;return s(),o("button",{key:D.id,class:"lane-option-btn",onClick:Ae=>Fe(D)},[e("span",Sl,_(D.name),1),e("span",$l,_(((be=D.cards)==null?void 0:be.length)||0)+" cards",1)],8,kl)}),128))]),(Ee=(L=v(y).board)==null?void 0:L.lanes)!=null&&Ee.length?S("",!0):(s(),o("p",El," No lanes available. Go to the Kanban tab to create lanes first. "))]),e("div",{class:"modal-footer"},[e("button",{class:"btn btn-secondary",onClick:Se}," Cancel ")])])])):S("",!0),Y(lt,{"is-open":oe.value,"session-name":((Ce=te.value)==null?void 0:Ce.name)||"this session","has-cleanup-script":!!((we=v(p).currentProject)!=null&&we.onSessionDeleted&&!((I=te.value)!=null&&I.parentSessionId)),loading:M.value,onConfirm:T,onCancel:t},null,8,["is-open","session-name","has-cleanup-script","loading"])])}}};export{Vl as default};
|