circuschief 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/package.json +2 -1
  2. package/packages/server/src/agents/AgentGateway.js +36 -3
  3. package/packages/server/src/agents/BaseAgent.js +15 -1
  4. package/packages/server/src/agents/LoggingAgentWrapper.js +4 -0
  5. package/packages/server/src/agents/adapters/ClaudeCodeAdapter.js +9 -6
  6. package/packages/server/src/agents/adapters/CodexAdapter.js +262 -14
  7. package/packages/server/src/agents/adapters/codexCliRunner.js +185 -0
  8. package/packages/server/src/agents/adapters/codexEventMapper.js +235 -0
  9. package/packages/server/src/agents/types.js +1 -0
  10. package/packages/server/src/agents/vcr/VCRAgentAdapter.js +8 -0
  11. package/packages/server/src/api/agents.js +27 -0
  12. package/packages/server/src/api/canvas.js +20 -0
  13. package/packages/server/src/api/index.js +2 -0
  14. package/packages/server/src/api/projects.js +7 -0
  15. package/packages/server/src/api/providers.js +1 -0
  16. package/packages/server/src/api/sessions-messages.js +6 -0
  17. package/packages/server/src/db/ProviderRepository.js +62 -6
  18. package/packages/server/src/db/SessionRepository.js +67 -11
  19. package/packages/server/src/db/migrations/index.js +2 -0
  20. package/packages/server/src/db/migrations/miscMigrations.js +53 -3
  21. package/packages/server/src/db/session-helpers.js +5 -0
  22. package/packages/server/src/schema.sql +1 -0
  23. package/packages/server/src/services/codexSpawnHelper.js +37 -0
  24. package/packages/server/src/services/conversationContext.js +27 -0
  25. package/packages/server/src/services/draftSessionService.js +13 -2
  26. package/packages/server/src/services/kanbanTriggers.js +3 -0
  27. package/packages/server/src/services/providerTestService.js +115 -15
  28. package/packages/server/src/services/sessionAgentGuard.js +38 -0
  29. package/packages/server/src/services/sessionExecution.js +124 -32
  30. package/packages/server/src/services/sessionManager.js +45 -8
  31. package/packages/server/src/services/sessionPrompts.js +25 -0
  32. package/packages/server/src/services/sessionProvider.js +162 -41
  33. package/packages/server/src/services/streamEventHandler.js +3 -0
  34. package/packages/server/src/services/templateTriggerService.js +2 -0
  35. package/packages/shared/src/contracts/providers.js +24 -7
  36. package/packages/shared/src/contracts/sessions.js +1 -1
  37. package/packages/shared/src/index.js +1 -0
  38. package/packages/shared/src/types.js +28 -0
  39. package/packages/web/dist/assets/{ActiveSessionsView-D1daFFvI.js → ActiveSessionsView-UCbQrF1b.js} +1 -1
  40. package/packages/web/dist/assets/{AgentLogsView-B_NDIx2_.js → AgentLogsView-Cdw4nmvd.js} +1 -1
  41. package/packages/web/dist/assets/ApiClient-CWbXWDUY.js +1 -0
  42. package/packages/web/dist/assets/{ArchiveConfirmModal-BHqbCCX2.js → ArchiveConfirmModal-J48eh3zw.js} +1 -1
  43. package/packages/web/dist/assets/{CommandButtonDetailView-B9crZey8.js → CommandButtonDetailView-DnFhJY5A.js} +1 -1
  44. package/packages/web/dist/assets/EffortLevelSelector-bXbPo4Zw.js +1 -0
  45. package/packages/web/dist/assets/{GeneralSettingsView-CzBagrDs.js → GeneralSettingsView-CQkmdczf.js} +1 -1
  46. package/packages/web/dist/assets/{InputWithButton-Cplkm8Ze.js → InputWithButton-XyM3k6lN.js} +1 -1
  47. package/packages/web/dist/assets/{InterpolationHelp-bG_y10VY.js → InterpolationHelp-PfYR3KJo.js} +1 -1
  48. package/packages/web/dist/assets/MarkdownEditor-P8F5kO-o.js +2 -0
  49. package/packages/web/dist/assets/{ModelSelector-DPPD-92R.css → ModelSelector-BZOT1Jc6.css} +1 -1
  50. package/packages/web/dist/assets/ModelSelector-CowKfGMP.js +1 -0
  51. package/packages/web/dist/assets/{NewSessionView-91V-4qLi.js → NewSessionView-DkjFLvHU.js} +1 -1
  52. package/packages/web/dist/assets/{ProjectEditView-C3bOYnD6.js → ProjectEditView-embVT7NC.js} +1 -1
  53. package/packages/web/dist/assets/{ProjectListView-BEo1p4dO.js → ProjectListView-CuYMmd3O.js} +1 -1
  54. package/packages/web/dist/assets/{ProjectNewView-CXGjy3OL.js → ProjectNewView-CNaA4Maf.js} +1 -1
  55. package/packages/web/dist/assets/ProvidersView-C7rydtOd.js +1 -0
  56. package/packages/web/dist/assets/ProvidersView-DE82G_5W.css +1 -0
  57. package/packages/web/dist/assets/{QuickResponseSettings-Ds4X-J-t.js → QuickResponseSettings-BTQEKhwJ.js} +1 -1
  58. package/packages/web/dist/assets/{QuickResponsesPanel-BY2v23c5.js → QuickResponsesPanel-BqMYSHb0.js} +1 -1
  59. package/packages/web/dist/assets/ResizableTextarea-DsU3TVwF.css +1 -0
  60. package/packages/web/dist/assets/{ResizableTextarea-C2s6_7X9.js → ResizableTextarea-wYF3K2RO.js} +1 -1
  61. package/packages/web/dist/assets/SessionCard-BMGC2HqI.css +1 -0
  62. package/packages/web/dist/assets/SessionCard-bLaQEWWX.js +1 -0
  63. package/packages/web/dist/assets/{SessionDetailView-BL83oPiI.css → SessionDetailView-Cv-xMzXp.css} +1 -1
  64. package/packages/web/dist/assets/{SessionDetailView-D3f0FEV1.js → SessionDetailView-CvQOUsW2.js} +27 -27
  65. package/packages/web/dist/assets/SessionFormOptions-3pzbgI2Q.js +1 -0
  66. package/packages/web/dist/assets/SessionFormOptions-DhhIkjIS.css +1 -0
  67. package/packages/web/dist/assets/SessionListView-Dranfb72.js +1 -0
  68. package/packages/web/dist/assets/{SessionListView-78k6TTz6.css → SessionListView-fHlQyecX.css} +1 -1
  69. package/packages/web/dist/assets/{SessionLogStream-NR-AS676.js → SessionLogStream-DTnDAF95.js} +1 -1
  70. package/packages/web/dist/assets/{SettingsView-DKINDb2z.js → SettingsView-DNLUSsHV.js} +1 -1
  71. package/packages/web/dist/assets/SlashCommandWizard-CRGFaO8t.js +1 -0
  72. package/packages/web/dist/assets/SlashCommandWizard-Dn7sNaBd.css +1 -0
  73. package/packages/web/dist/assets/{SummarySettingsView-D_2bSsYD.js → SummarySettingsView-C7G_suHp.js} +1 -1
  74. package/packages/web/dist/assets/{TemplateDetailView-C5rbgXwU.js → TemplateDetailView-B78_DLMR.js} +1 -1
  75. package/packages/web/dist/assets/{commandButtons-D_-wR8zJ.js → commandButtons-Bbjf3fCt.js} +1 -1
  76. package/packages/web/dist/assets/{index-D9VgH58U.js → index--V7c-VZf.js} +1 -1
  77. package/packages/web/dist/assets/{index-Dp3Eg3c0.js → index-8Q04yd7H.js} +1 -1
  78. package/packages/web/dist/assets/{index-Cs-001Bx.js → index-B47XRBDH.js} +1 -1
  79. package/packages/web/dist/assets/index-BQL_L4gL.js +82 -0
  80. package/packages/web/dist/assets/{index-CcCiJkwz.js → index-BXbgZrhS.js} +1 -1
  81. package/packages/web/dist/assets/{index-DveLfEiG.js → index-Bs7Qf5D6.js} +1 -1
  82. package/packages/web/dist/assets/{index-DaL3nu0U.js → index-CGhDVPen.js} +1 -1
  83. package/packages/web/dist/assets/{index-D9Z6zsGS.js → index-CKcRO1A6.js} +1 -1
  84. package/packages/web/dist/assets/{index-CxiSnR0R.js → index-CTq-SLIW.js} +1 -1
  85. package/packages/web/dist/assets/{index-DP2i58hO.js → index-CYyos3iC.js} +1 -1
  86. package/packages/web/dist/assets/{index-Krfrs3sc.js → index-Cf6vdW-B.js} +3 -3
  87. package/packages/web/dist/assets/{index-Dfy1JGZs.js → index-CsCREAxF.js} +1 -1
  88. package/packages/web/dist/assets/{index-BmQRt229.js → index-DJTTk_8T.js} +1 -1
  89. package/packages/web/dist/assets/{index-D-lQSDZh.js → index-DPqUJ5JK.js} +1 -1
  90. package/packages/web/dist/assets/{index-BCazaXF8.js → index-EwAe1dKg.js} +1 -1
  91. package/packages/web/dist/assets/{index-DyQ22-ut.js → index-JBA8axyA.js} +1 -1
  92. package/packages/web/dist/assets/{index-gylMFbgn.js → index-JkVHFtK5.js} +1 -1
  93. package/packages/web/dist/assets/{index-CCQGqJXX.js → index-gMPUwT55.js} +1 -1
  94. package/packages/web/dist/assets/{index-DgIOe3cM.js → index-wadc_0zT.js} +1 -1
  95. package/packages/web/dist/assets/{projects-CMJJca64.js → projects-CPt3AB7U.js} +1 -1
  96. package/packages/web/dist/assets/providers-ChfeMvUq.js +1 -0
  97. package/packages/web/dist/assets/sessions-CwPsJOb1.js +1 -0
  98. package/packages/web/dist/assets/{settings-BN_W4nwV.js → settings-BOj6wq6t.js} +1 -1
  99. package/packages/web/dist/index.html +1 -1
  100. package/packages/web/dist/assets/ApiClient-CcqJ-GAv.js +0 -1
  101. package/packages/web/dist/assets/EffortLevelSelector-HuOPegKI.js +0 -1
  102. package/packages/web/dist/assets/MarkdownEditor-CXDVTLvp.js +0 -2
  103. package/packages/web/dist/assets/ModelSelector-CgpqdZtV.js +0 -1
  104. package/packages/web/dist/assets/ProvidersView-CMAnPTEX.js +0 -1
  105. package/packages/web/dist/assets/ProvidersView-uD8SKWpA.css +0 -1
  106. package/packages/web/dist/assets/ResizableTextarea-B5nAA0RV.css +0 -1
  107. package/packages/web/dist/assets/SessionCard-C7vFzR16.js +0 -1
  108. package/packages/web/dist/assets/SessionCard-CcqIjL8q.css +0 -1
  109. package/packages/web/dist/assets/SessionFormOptions-3LfqiLiR.js +0 -1
  110. package/packages/web/dist/assets/SessionFormOptions-BuLlDF-7.css +0 -1
  111. package/packages/web/dist/assets/SessionListView-NGW-u434.js +0 -1
  112. package/packages/web/dist/assets/SlashCommandWizard-BB30cSvo.css +0 -1
  113. package/packages/web/dist/assets/SlashCommandWizard-PXipO1yA.js +0 -1
  114. package/packages/web/dist/assets/index-D1Lg5reX.js +0 -82
  115. package/packages/web/dist/assets/providers-BCtNZWYw.js +0 -1
  116. package/packages/web/dist/assets/sessions-CoRS-wuR.js +0 -1
@@ -0,0 +1 @@
1
+ import{U as R,L as y}from"./index-BQL_L4gL.js";import{a as c}from"./ApiClient-CWbXWDUY.js";import{u as p}from"./settings-BOj6wq6t.js";function A(){return Math.random().toString(16).substring(2,6)}function d(e,t=R){return e?Math.round((e.inputTokens||0)*t.input+(e.outputTokens||0)*t.output+(e.cacheReadInputTokens||0)*t.cacheRead+(e.cacheCreationInputTokens||0)*t.cacheCreation):0}function w(e){return!e||e===0?"0":e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(e)}function x(e,t=30){return e.toLowerCase().replace(/[^a-z0-9\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").substring(0,t)}function L(e){const t=["a","an","the","to","and","or","for","in","on","at","of","with","is","it","this","that","i","me","my","we","our","you","your","can","please","help"];return e.toLowerCase().replace(/[^a-z0-9\s]/g,"").split(/\s+/).filter(i=>i.length>1&&!t.includes(i)).slice(0,4).join("-")||"session"}function N(e,t){const s=A();let i;return t&&t.trim()?i=x(L(t.trim())):i="session",i||(i="session"),`claude-tools/${s}-${i}`}const U=y("sessionFilters",{state:()=>({statusFilter:null,starredFilter:null,scheduledFilter:null}),actions:{setStatusFilter(e){this.statusFilter=e,this.saveStatusFilter()},saveStatusFilter(){try{this.statusFilter?localStorage.setItem("sessionStatusFilter",this.statusFilter):localStorage.removeItem("sessionStatusFilter")}catch(e){console.warn("Failed to save status filter:",e)}},restoreStatusFilter(){try{const e=localStorage.getItem("sessionStatusFilter");(e==="running"||e==="idle")&&(this.statusFilter=e)}catch(e){console.warn("Failed to restore status filter:",e)}},setStarredFilter(e){this.starredFilter=e,this.saveStarredFilter()},saveStarredFilter(){try{this.starredFilter?sessionStorage.setItem("sessionStarredFilter",this.starredFilter):sessionStorage.removeItem("sessionStarredFilter")}catch(e){console.warn("Failed to save starred filter:",e)}},restoreStarredFilter(){try{const e=sessionStorage.getItem("sessionStarredFilter");e==="starred"||e==="unstarred"?this.starredFilter=e:this.starredFilter=null}catch(e){console.warn("Failed to restore starred filter:",e)}},setScheduledFilter(e){this.scheduledFilter=e,this.saveScheduledFilter()},saveScheduledFilter(){try{this.scheduledFilter?sessionStorage.setItem("sessionScheduledFilter",this.scheduledFilter):sessionStorage.removeItem("sessionScheduledFilter")}catch(e){console.warn("Failed to save scheduled filter:",e)}},restoreScheduledFilter(){try{const e=sessionStorage.getItem("sessionScheduledFilter");e==="scheduled"||e==="not-scheduled"?this.scheduledFilter=e:this.scheduledFilter=null}catch(e){console.warn("Failed to restore scheduled filter:",e)}}}});function g(e){return e==null?"-":e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(e)}function C(e,t,s,i){return{input:g(e),output:g(t),total:g((e||0)+(t||0)),cacheRead:g(s),cacheCreation:g(i)}}function v(e){return e.runningUsage?!e.activeConversationId||e.runningUsage.conversationId===e.activeConversationId:!1}function l(e){return e.conversations.find(t=>t.id===e.activeConversationId)}function k(e,t){return{inputTokens:((e==null?void 0:e.inputTokens)||0)+(t.inputTokens||0),outputTokens:((e==null?void 0:e.outputTokens)||0)+(t.outputTokens||0),cacheReadInputTokens:((e==null?void 0:e.cacheReadInputTokens)||0)+(t.cacheReadInputTokens||0),cacheCreationInputTokens:((e==null?void 0:e.cacheCreationInputTokens)||0)+(t.cacheCreationInputTokens||0)}}function F(e){return{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheReadInputTokens:e.cacheReadInputTokens,cacheCreationInputTokens:e.cacheCreationInputTokens}}const P={conversationTokens:e=>{const t=e.conversations.find(s=>s.id===e.activeConversationId);return t?{inputTokens:t.inputTokens||0,outputTokens:t.outputTokens||0,cacheReadInputTokens:t.cacheReadInputTokens||0,cacheCreationInputTokens:t.cacheCreationInputTokens||0,webSearchRequests:t.webSearchRequests||0,contextWindow:t.contextWindow||2e5}:null},totalTokens:e=>{const t=e.conversations.find(s=>s.id===e.activeConversationId);return t?(t.inputTokens||0)+(t.outputTokens||0):e.currentSession?(e.currentSession.inputTokens||0)+(e.currentSession.outputTokens||0):0},formattedTokens:e=>{if(v(e)){const t=k(l(e),e.runningUsage);return C(t.inputTokens,t.outputTokens,t.cacheReadInputTokens,t.cacheCreationInputTokens)}if(e.activeConversationId&&e.conversations.length>0){const t=l(e);if(t)return C(t.inputTokens,t.outputTokens,t.cacheReadInputTokens,t.cacheCreationInputTokens)}return{input:"-",output:"-",total:"-",cacheRead:"-",cacheCreation:"-"}},contextPercentage:e=>{if(v(e)){const n=l(e),o=k(n,e.runningUsage),r=o.inputTokens+o.outputTokens,a=e.runningUsage.contextWindow||(n==null?void 0:n.contextWindow)||2e5;return Math.min(100,Math.round(r/a*100))}const s=l(e)||e.currentSession;if(!s)return 0;const i=(s.inputTokens||0)+(s.outputTokens||0);return Math.min(100,Math.round(i/(s.contextWindow||2e5)*100))},isUsageUpdating:e=>!(!e.runningUsage||e.activeConversationId&&e.runningUsage.conversationId!==e.activeConversationId),getConversationDisplayTokens:e=>t=>{const s=e.conversations.find(i=>i.id===t);if(!s)return{inputTokens:0,outputTokens:0,total:0};if(e.runningUsage&&e.runningUsage.conversationId===t){const i=(s.inputTokens||0)+(e.runningUsage.inputTokens||0),n=(s.outputTokens||0)+(e.runningUsage.outputTokens||0);return{inputTokens:i,outputTokens:n,total:i+n}}return{inputTokens:s.inputTokens||0,outputTokens:s.outputTokens||0,total:(s.inputTokens||0)+(s.outputTokens||0)}},billableTokens:e=>{const s=p().tokenCostWeights;if(v(e))return d(k(l(e),e.runningUsage),s);if(e.activeConversationId&&e.conversations.length>0){const i=l(e);if(i)return d(F(i),s)}return 0},formattedBillableTokens:e=>{const s=p().tokenCostWeights;if(v(e))return w(d(k(l(e),e.runningUsage),s));if(e.activeConversationId&&e.conversations.length>0){const i=l(e);if(i)return w(d(F(i),s))}return"-"},getConversationBillableTokens:e=>t=>{const i=p().tokenCostWeights,n=e.conversations.find(o=>o.id===t);return n?e.runningUsage&&e.runningUsage.conversationId===t?d({inputTokens:(n.inputTokens||0)+(e.runningUsage.inputTokens||0),outputTokens:(n.outputTokens||0)+(e.runningUsage.outputTokens||0),cacheReadInputTokens:(n.cacheReadInputTokens||0)+(e.runningUsage.cacheReadInputTokens||0),cacheCreationInputTokens:(n.cacheCreationInputTokens||0)+(e.runningUsage.cacheCreationInputTokens||0)},i):d({inputTokens:n.inputTokens,outputTokens:n.outputTokens,cacheReadInputTokens:n.cacheReadInputTokens,cacheCreationInputTokens:n.cacheCreationInputTokens},i):0},getFormattedConversationBillableTokens:e=>t=>{const i=p().tokenCostWeights,n=e.conversations.find(r=>r.id===t);if(!n)return"-";let o;return e.runningUsage&&e.runningUsage.conversationId===t?o={inputTokens:(n.inputTokens||0)+(e.runningUsage.inputTokens||0),outputTokens:(n.outputTokens||0)+(e.runningUsage.outputTokens||0),cacheReadInputTokens:(n.cacheReadInputTokens||0)+(e.runningUsage.cacheReadInputTokens||0),cacheCreationInputTokens:(n.cacheCreationInputTokens||0)+(e.runningUsage.cacheCreationInputTokens||0)}:o={inputTokens:n.inputTokens,outputTokens:n.outputTokens,cacheReadInputTokens:n.cacheReadInputTokens,cacheCreationInputTokens:n.cacheCreationInputTokens},w(d(o,i))},getSessionBillableTokens:e=>t=>{var f;const i=p().tokenCostWeights,n=h=>h?d({inputTokens:h.inputTokens||0,outputTokens:h.outputTokens||0,cacheReadInputTokens:h.cacheReadInputTokens||0,cacheCreationInputTokens:h.cacheCreationInputTokens||0},i):0,o=e.sessions.find(h=>h.id===t)||(((f=e.currentSession)==null?void 0:f.id)===t?e.currentSession:null);if(!o)return 0;let r=n(o);const a=[t],u=new Set;for(;a.length>0;){const h=a.pop();if(u.has(h))continue;u.add(h);const m=e.sessions.filter(S=>S.parentSessionId===h);for(const S of m)r+=n(S),a.push(S.id)}return r}};function T(e,t,s=!1){const i=e,n=i.findIndex(o=>o.id===t.id);n!==-1?i[n]={...i[n],...t}:s&&i.unshift(t)}async function b(e,t,s){try{const o=(await c.getProjectSessions(t)).filter(r=>r.parentSessionId===s).filter(r=>!e.find(a=>a.id===r.id));e.push(...o)}catch(i){console.error("Failed to fetch child sessions:",i)}}function _(e,t,s){const i=e.find(o=>o.id===s.id),n=i?{...i,...s}:s;return T(t,n,!0),e.filter(o=>o.id!==s.id)}async function W(e,t){let s=t;for(;s;){const i=e.find(n=>n.id===s);if(i){s=i.parentSessionId;continue}try{const n=await c.getSession(s);e.push(n),s=n.parentSessionId}catch(n){console.error("Failed to fetch parent session:",n);break}}}const M={async fetchActiveSessions(e=!0){e&&(this.loading=!0),this.error=null;try{this.activeSessions=await c.getActiveSessions()}catch(t){this.error=t.message}finally{e&&(this.loading=!1)}},async fetchScheduledSessions(e=null){this.loadingScheduled=!0,this.error=null;try{const t=await c.getScheduledSessions(e);this.scheduledSessions=t.sort((s,i)=>new Date(s.scheduledAt)-new Date(i.scheduledAt))}catch(t){this.error=t.message,console.error("Failed to fetch scheduled sessions:",t)}finally{this.loadingScheduled=!1}},async fetchSessions(e,{silent:t=!1}={}){t||(this.loading=!0),this.error=null;try{this.sessions=await c.getProjectSessions(e,!1,null)}catch(s){this.error=s.message}finally{t||(this.loading=!1)}},async fetchArchivedSessions(e,{reset:t=!0}={}){t&&(this.archivedSessions=[],this.archivedPagination.offset=0),this.archivedPagination.loading=!0,this.error=null;try{const i=await c.getProjectSessions(e,!0,this.starredFilter,{limit:25,offset:this.archivedPagination.offset});this.archivedSessions=t?i.sessions:[...this.archivedSessions,...i.sessions],this.archivedPagination={total:i.pagination.total,offset:this.archivedPagination.offset+i.sessions.length,hasMore:i.pagination.hasMore,loading:!1}}catch(i){this.error=i.message,this.archivedPagination.loading=!1}},async loadMoreArchivedSessions(e){this.archivedPagination.hasMore&&!this.archivedPagination.loading&&await this.fetchArchivedSessions(e,{reset:!1})},async fetchSession(e,t=!0){var s,i;t&&(this.loading=!0),this.error=null;try{const n=await c.getSession(e);if(this.viewedSessionId&&this.viewedSessionId!==e){const r=this.sessions.findIndex(a=>a.id===e);r!==-1&&(this.sessions[r]={...this.sessions[r],...n});return}this.currentSession=n;const o=this.sessions.findIndex(r=>r.id===e);o!==-1?this.sessions[o]=n:this.sessions.push(n),(s=this.currentSession)!=null&&s.parentSessionId&&await W(this.sessions,this.currentSession.parentSessionId),(i=this.currentSession)!=null&&i.projectId&&await b(this.sessions,this.currentSession.projectId,e)}catch(n){this.error=n.message}finally{t&&(this.loading=!1)}},async createSession(e,t){this.loading=!0,this.error=null;try{const s=await c.createSession(e,t);return this.sessions.unshift(s),s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async sendMessage(e,t,s=[],i=null){this.error=null;try{await c.sendMessage(e,t,s,i),this._updateSessionInAllLists(e,{status:"running"})}catch(n){throw this.error=n.message,n}},async stopSession(e){this.error=null;try{await c.stopSession(e),this._updateSessionInAllLists(e,{status:"stopped"})}catch(t){throw this.error=t.message,t}},async restartSession(e){this.error=null;try{await c.restartSession(e),this._updateSessionInAllLists(e,{status:"stopped",error:null})}catch(t){throw this.error=t.message,t}},async startSession(e,t=void 0,s=void 0){this.error=null;try{const i=await c.startSession(e,t,s);return this._updateSessionInAllLists(e,{status:"starting"}),i}catch(i){throw this.error=i.message,i}},async deleteSession(e){var t;this.error=null;try{await c.deleteSession(e),this.sessions=this.sessions.filter(s=>s.id!==e),this.archivedSessions=this.archivedSessions.filter(s=>s.id!==e),((t=this.currentSession)==null?void 0:t.id)===e&&(this.currentSession=null)}catch(s){throw this.error=s.message,s}},async archiveSession(e,{cleanup:t=!1}={}){var s;this.error=null;try{const i=await c.archiveSession(e,{cleanup:t});return this.sessions=this.sessions.filter(n=>n.id!==e),this.archivedSessions.unshift(i),this.activeSessions=this.activeSessions.filter(n=>n.id!==e),((s=this.currentSession)==null?void 0:s.id)===e&&(this.currentSession={...this.currentSession,archived:!0}),i}catch(i){throw this.error=i.message,i}},async unarchiveSession(e){var t;this.error=null;try{const s=await c.unarchiveSession(e);return this.archivedSessions=this.archivedSessions.filter(i=>i.id!==e),this.sessions.unshift(s),((t=this.currentSession)==null?void 0:t.id)===e&&(this.currentSession={...this.currentSession,archived:!1}),s}catch(s){throw this.error=s.message,s}},async duplicateSession(e,t={}){this.error=null;try{return await c.duplicateSession(e,t)}catch(s){throw this.error=s.message,s}},async toggleSessionStar(e){this.error=null;try{const t=await c.toggleSessionStar(e);return this._updateSessionInAllLists(e,{starred:t.starred}),t}catch(t){throw this.error=t.message,t}},updateSessionStatus(e,t){const s=this.sessions.find(o=>o.id===e)||this.currentSession,i=(s==null?void 0:s.status)==="running",n={status:t};i&&(t==="waiting"||t==="completed")&&(n.hasResponses=!0),this._updateSessionInAllLists(e,n)},async updateSessionThinking(e,t){return this.updateSessionFields(e,{thinkingEnabled:t})},async updateSessionMode(e,t){return this.updateSessionFields(e,{mode:t})},async updateSessionModel(e,t,s=void 0){var i;this.error=null;try{const n={model:t};s!==void 0&&(n.providerId=s);const o=this.sessions.find(a=>a.id===e)||(((i=this.currentSession)==null?void 0:i.id)===e?this.currentSession:null);o&&o.status==="waiting"&&(n.pendingModel=t);const r=await c.updateSession(e,n);return this._updateSessionInAllLists(e,n),r}catch(n){throw this.error=n.message,n}},async updateNextTemplate(e,t){return this.updateSessionFields(e,{nextTemplateId:t})},async updateAutoSendPendingPrompt(e,t){return this.updateSessionFields(e,{autoSendPendingPrompt:t})},async updateSessionFields(e,t){this.error=null;try{const s=await c.updateSession(e,t);return this._updateSessionInAllLists(e,t),s}catch(s){throw this.error=s.message,s}},updateSession(e){var t;e!=null&&e.id&&(e.archived===!0?(this.sessions=_(this.sessions,this.archivedSessions,e),this.activeSessions=this.activeSessions.filter(s=>s.id!==e.id)):e.archived===!1?this.archivedSessions=_(this.archivedSessions,this.sessions,e):(T(this.sessions,e),T(this.archivedSessions,e)),((t=this.currentSession)==null?void 0:t.id)===e.id&&(this.currentSession={...this.currentSession,...e}),T(this.activeSessions,e),e.status==="scheduled"?(T(this.scheduledSessions,e,!0),this.scheduledSessions.sort((s,i)=>new Date(s.scheduledAt)-new Date(i.scheduledAt))):this.scheduledSessions=this.scheduledSessions.filter(s=>s.id!==e.id))},addSessionToList(e){e!=null&&e.id&&(this.sessions.some(t=>t.id===e.id)||this.sessions.unshift(e),["running","waiting","starting"].includes(e.status)&&(this.activeSessions.some(t=>t.id===e.id)||this.activeSessions.unshift(e)))},removeSessionFromList(e){var t;e&&(this.sessions=this.sessions.filter(s=>s.id!==e),this.archivedSessions=this.archivedSessions.filter(s=>s.id!==e),this.activeSessions=this.activeSessions.filter(s=>s.id!==e),((t=this.currentSession)==null?void 0:t.id)===e&&(this.currentSession=null))}},B={async fetchConversations(e){var t;if(!(this.viewedSessionId&&this.viewedSessionId!==e)){this.error=null;try{const s=await c.getConversations(e);if(this.viewedSessionId&&this.viewedSessionId!==e)return;this.conversations=s;const i=this.conversations.find(n=>n.isActive);this.activeConversationId=(i==null?void 0:i.id)||((t=this.conversations[0])==null?void 0:t.id)||null}catch(s){this.viewedSessionId&&this.viewedSessionId===e&&(this.error=s.message,this.conversations=[],this.activeConversationId=null)}}},async createConversation(e,t=null){this.error=null;try{const s=await c.createConversation(e,t);return this.conversations.push(s),this.conversations=this.conversations.map(i=>({...i,isActive:i.id===s.id})),this.activeConversationId=s.id,this.messages=[],this.runningUsage=null,s}catch(s){throw this.error=s.message,s}},async switchConversation(e,t){if(this.activeConversationId!==t){this.error=null;try{this.runningUsage=null,this.clearPartialThinking(),this.messages=[],this.workLogs={},await c.updateConversation(e,t,{isActive:!0}),this.conversations=this.conversations.map(s=>({...s,isActive:s.id===t})),this.activeConversationId=t,this.messages=await c.getConversationMessages(e,t),this.clearPartialThinking(e),await this.fetchWorkLogs(e)}catch(s){throw this.error=s.message,s}}},async renameConversation(e,t,s){this.error=null;try{const i=await c.updateConversation(e,t,{name:s}),n=this.conversations.findIndex(o=>o.id===t);return n!==-1&&(this.conversations[n]={...this.conversations[n],...i}),i}catch(i){throw this.error=i.message,i}},async deleteConversation(e,t){this.error=null;try{await c.deleteConversation(e,t),this.conversations=this.conversations.filter(s=>s.id!==t),this.activeConversationId===t&&this.conversations.length>0?(await this.fetchConversations(e),this.activeConversationId&&(this.messages=await c.getConversationMessages(e,this.activeConversationId))):this.activeConversationId===t&&(this.activeConversationId=null,this.messages=[])}catch(s){throw this.error=s.message,s}},async branchConversation(e,t,s={}){const{messageId:i=null,prompt:n=null}=s||{};this.error=null;try{const o=await c.branchConversation(e,t,{messageId:i,prompt:n});return this.conversations.some(r=>r.id===o.id)||this.conversations.push(o),this.conversations=this.conversations.map(r=>({...r,isActive:r.id===o.id})),this.activeConversationId=o.id,this.messages=[],this.workLogs={},this.clearPartialThinking(e),Promise.all([c.getConversationMessages(e,o.id).then(r=>{this.activeConversationId===o.id&&(this.messages=r)}).catch(r=>console.error("Failed to fetch messages for branch:",r)),this.fetchWorkLogs(e).catch(r=>console.error("Failed to fetch work logs for branch:",r))]),o}catch(o){throw this.error=o.message,o}},updateConversation(e){if(!(e!=null&&e.id)||this.currentSession&&e.sessionId&&e.sessionId!==this.currentSession.id)return;const t=this.conversations.findIndex(s=>s.id===e.id);t!==-1&&this.conversations.splice(t,1,{...this.conversations[t],...e}),e.isActive&&(this.conversations=this.conversations.map(s=>({...s,isActive:s.id===e.id})),this.activeConversationId=e.id)},addConversation(e){e!=null&&e.id&&(this.currentSession&&e.sessionId&&e.sessionId!==this.currentSession.id||(this.conversations.some(t=>t.id===e.id)||this.conversations.push(e),e.isActive&&(this.conversations=this.conversations.map(t=>({...t,isActive:t.id===e.id})),this.activeConversationId=e.id)))},removeConversation(e,t=null,s=null){var i;this.currentSession&&s&&s!==this.currentSession.id||(this.conversations=this.conversations.filter(n=>n.id!==e),t?(this.conversations.some(n=>n.id===t.id)||this.conversations.push(t),this.conversations=this.conversations.map(n=>({...n,isActive:n.id===t.id})),this.activeConversationId=t.id):this.activeConversationId===e&&(this.activeConversationId=((i=this.conversations[0])==null?void 0:i.id)||null))},clearConversations(){this.conversations=[],this.activeConversationId=null}},I=5e3,E={_isStaleSession(e){return this.viewedSessionId&&this.viewedSessionId!==e},_isActiveSession(e){return this.viewedSessionId&&this.viewedSessionId===e},async fetchMessages(e,t=!0,s=null){if(!this._isStaleSession(e)){t&&(this.loading=!0),this.error=null;try{const i=s||this.activeConversationId,n=i?await c.getConversationMessages(e,i):await c.getSessionMessages(e);if(this._isStaleSession(e))return;const o=new Set(n.map(a=>a.id)),r=this.messages.filter(a=>a.sessionId===e&&!o.has(a.id));r.length>0?this.messages=[...n,...r]:this.messages=n}catch(i){this._isActiveSession(e)&&(this.error=i.message)}finally{t&&(this.loading=!1)}}},addMessage(e){this._bumpLastActivityAt(e),!(this.currentSession&&e.sessionId&&e.sessionId!==this.currentSession.id)&&(this.messages.some(t=>t.id===e.id)||this.messages.push(e))},_bumpLastActivityAt(e){if(!(e!=null&&e.sessionId)||typeof this._updateSessionInAllLists!="function")return;const t=e.timestamp??Date.now(),s=this._findSessionById?this._findSessionById(e.sessionId):null,i=(s==null?void 0:s.lastActivityAt)??0;(!i||t>i)&&this._updateSessionInAllLists(e.sessionId,{lastActivityAt:t})},async fetchWorkLogs(e){if(!this._isStaleSession(e)){this.error=null;try{const t=await c.getSessionWorkLogs(e);if(this._isStaleSession(e))return;const s=new Set;for(const r of Object.keys(t))for(const a of t[r]||[])s.add(a.id);const n=(this.workLogs._unassociated||[]).filter(r=>!s.has(r.id)),o=t._unassociated||[];this.workLogs={...t,_unassociated:[...o,...n]}}catch(t){this._isActiveSession(e)&&(this.error=t.message)}}},addWorkLog(e){if(this.currentSession&&e.sessionId&&e.sessionId!==this.currentSession.id)return;const t=e.messageId||"_unassociated",s=this.workLogs[t]||[];s.some(i=>i.id===e.id)||(this.workLogs={...this.workLogs,[t]:[...s,e]})},setWorkLogs(e){this.workLogs=e},clearWorkLogs(){this.workLogs={},this.clearAllPartialThinking()},associateWorkLogs(e){const t=this.workLogs._unassociated||[];if(t.length>0){const s=this.workLogs[e]||[],i=new Set(s.map(o=>o.id)),n=t.filter(o=>!i.has(o.id));this.workLogs={...this.workLogs,[e]:[...s,...n],_unassociated:[]}}},setPartialThinking(e,t=null){var i;const s=t||((i=this.currentSession)==null?void 0:i.id);s&&(this.partialThinkingBySession={...this.partialThinkingBySession,[s]:e})},clearPartialThinking(e=null){var s;const t=e||((s=this.currentSession)==null?void 0:s.id);t&&(this.partialThinkingBySession={...this.partialThinkingBySession,[t]:null})},clearAllPartialThinking(){this.partialThinkingBySession={}},setPartialText(e){this._pendingPartialText=e,this._partialThrottleTimer||(this.partialText=e,this._partialThrottleTimer=setTimeout(()=>{this._pendingPartialText!==null&&this._pendingPartialText!==this.partialText&&(this.partialText=this._pendingPartialText),this._partialThrottleTimer=null,this._pendingPartialText=null},150))},clearPartialText(){this.partialText="",this._pendingPartialText=null,this._partialThrottleTimer&&(clearTimeout(this._partialThrottleTimer),this._partialThrottleTimer=null)},updateRunningUsage(e,t=null){this.runningUsage={...e,conversationId:t}},finalizeUsage(e,t=null){if(t){const s=this.conversations.findIndex(i=>i.id===t);s!==-1&&this.conversations.splice(s,1,{...this.conversations[s],inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheReadInputTokens:e.cacheReadInputTokens,cacheCreationInputTokens:e.cacheCreationInputTokens,webSearchRequests:e.webSearchRequests,contextWindow:e.contextWindow,model:e.model})}this.currentSession&&(this.currentSession={...this.currentSession,inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheReadInputTokens:e.cacheReadInputTokens,cacheCreationInputTokens:e.cacheCreationInputTokens,webSearchRequests:e.webSearchRequests,contextWindow:e.contextWindow}),this.runningUsage=null},updateConversationUsage(e,t){const s=this.conversations.findIndex(i=>i.id===e);s!==-1&&this.conversations.splice(s,1,{...this.conversations[s],inputTokens:t.inputTokens,outputTokens:t.outputTokens,cacheReadInputTokens:t.cacheReadInputTokens,cacheCreationInputTokens:t.cacheCreationInputTokens,webSearchRequests:t.webSearchRequests,contextWindow:t.contextWindow,model:t.model})},clearRunningUsage(){this.runningUsage=null,this.clearPartialThinking()},markRecentSend(e){e&&(this.recentSends||(this.recentSends={}),this._recentSendTimers||(this._recentSendTimers={}),this.recentSends={...this.recentSends,[e]:Date.now()},this._recentSendTimers[e]&&clearTimeout(this._recentSendTimers[e]),this._recentSendTimers[e]=setTimeout(()=>{if(this._recentSendTimers[e]=null,!this.recentSends)return;const t=this.recentSends[e];t&&Date.now()-t>=I&&this.clearRecentSend(e)},I))},clearRecentSend(e){if(!e||(this._recentSendTimers&&this._recentSendTimers[e]&&(clearTimeout(this._recentSendTimers[e]),this._recentSendTimers[e]=null),!this.recentSends)||!(e in this.recentSends))return;const t={...this.recentSends};delete t[e],this.recentSends=t},cancelAllRecentSendTimers(){if(this._recentSendTimers){for(const e of Object.keys(this._recentSendTimers))this._recentSendTimers[e]&&(clearTimeout(this._recentSendTimers[e]),this._recentSendTimers[e]=null);this._recentSendTimers={}}}},j={isDraftSession:e=>t=>!t||t.status!=="waiting"?!1:t.hasResponses!==void 0?!t.hasResponses:!e.messages.some(s=>s.role==="assistant"),isScheduledDraft:e=>t=>!t||t.status!=="scheduled"?!1:t.hasResponses!==void 0?!t.hasResponses:!e.messages.some(s=>s.role==="assistant"),getWorkLogsForMessage:e=>t=>e.workLogs[t]||[],getUnassociatedWorkLogs:e=>e.workLogs._unassociated||[],partialThinking:e=>{var t;return(t=e.currentSession)!=null&&t.id&&e.partialThinkingBySession[e.currentSession.id]||null},activeConversation:e=>e.conversations.find(t=>t.id===e.activeConversationId)||null,getConversationById:e=>t=>e.conversations.find(s=>s.id===t),rootConversations:e=>e.conversations.filter(t=>!t.parentConversationId),conversationTree:e=>{const t=(s=null)=>e.conversations.filter(i=>i.parentConversationId===s).map(i=>({...i,children:t(i.id)}));return t(null)},getConversationChildren:e=>t=>e.conversations.filter(s=>s.parentConversationId===t),getConversationParent:e=>t=>{const s=e.conversations.find(i=>i.id===t);return s!=null&&s.parentConversationId?e.conversations.find(i=>i.id===s.parentConversationId):null},hasRecentSend:e=>t=>{if(!t||!e.recentSends)return!1;const s=e.recentSends[t];return s?Date.now()-s<I:!1}},G=y("sessions",{state:()=>({sessions:[],archivedSessions:[],activeSessions:[],scheduledSessions:[],currentSession:null,viewedSessionId:null,messages:[],conversations:[],activeConversationId:null,workLogs:{},partialThinkingBySession:{},partialText:"",_partialThrottleTimer:null,_pendingPartialText:null,statusFilter:null,starredFilter:null,scheduledFilter:null,runningUsage:null,loading:!1,loadingScheduled:!1,error:null,commandRunVersion:0,archivedPagination:{total:0,offset:0,hasMore:!1,loading:!1},recentSends:{}}),getters:{_findSessionById:e=>t=>e.sessions.find(s=>s.id===t)||e.activeSessions.find(s=>s.id===t),_findChildren:e=>t=>{const s=e.sessions.filter(r=>r.parentSessionId===t),i=e.activeSessions.filter(r=>r.parentSessionId===t),n=new Set(s.map(r=>r.id)),o=[...s];for(const r of i)n.has(r.id)||(o.push(r),n.add(r.id));return o},getSessionById:e=>t=>e.sessions.find(s=>s.id===t),getChildSessions(){return e=>this._findChildren(e)},hasChildren(){return e=>this._findChildren(e).length>0},getChildCount(){return e=>this._findChildren(e).length},getAllDescendants(){return e=>{const t=[],s=[e],i=new Set;for(;s.length>0;){const n=s.pop();if(i.has(n))continue;i.add(n);const o=this._findChildren(n);for(const r of o)t.push(r),s.push(r.id)}return t}},getWorkflowEffectiveStatus(){return e=>{const t=this._findSessionById(e);if(!t)return"idle";const s=[t],i=[e],n=new Set;for(;i.length>0;){const r=i.pop();if(n.has(r))continue;n.add(r);const a=this._findChildren(r);for(const u of a)s.push(u),i.push(u.id)}const o=["running","starting"];return s.some(r=>o.includes(r.status))?"running":"idle"}},getSessionPath(){return e=>{const t=[],s=n=>{var o;return((o=this.currentSession)==null?void 0:o.id)===n?this.currentSession:this._findSessionById(n)};let i=s(e);for(;i&&(t.unshift(i),!!i.parentSessionId);)i=s(i.parentSessionId);return t}},getRootSession(){return e=>{let t=this._findSessionById(e);for(;t!=null&&t.parentSessionId;)t=this._findSessionById(t.parentSessionId);return t||null}},getWorkflowAggregatedStatus(){return e=>{const t=this._findSessionById(e);if(!t)return{effectiveStatus:"idle",runningCount:0,scheduledCount:0,waitingCount:0,completedCount:0,totalCount:0,hasScheduledDescendant:!1,rootIsScheduled:!1};const s=[t],i=[e],n=new Set;for(;i.length>0;){const h=i.pop();if(n.has(h))continue;n.add(h);const m=this._findChildren(h);for(const S of m)s.push(S),i.push(S.id)}const o=["running","starting"];let r=0,a=0,u=0,f=0;for(const h of s)o.includes(h.status)?r++:h.status==="scheduled"?a++:h.status==="waiting"?u++:(h.status==="completed"||h.status==="stopped")&&f++;return{effectiveStatus:r>0?"running":"idle",runningCount:r,scheduledCount:a,waitingCount:u,completedCount:f,totalCount:s.length-1,hasScheduledDescendant:s.slice(1).some(h=>h.status==="scheduled"),rootIsScheduled:t.status==="scheduled"}}},getWorkflowSessions(){return e=>{const t=this._findSessionById(e);if(!t)return[];const s=[t],i=[e],n=new Set;for(;i.length>0;){const o=i.pop();if(n.has(o))continue;n.add(o);const r=this._findChildren(o);for(const a of r)s.push(a),i.push(a.id)}return s}},groupedSessions:e=>{const t=[],s=new Set;return e.sessions.forEach(i=>{!i.parentSessionId&&!s.has(i.id)&&(t.push({parent:i,children:e.sessions.filter(n=>n.parentSessionId===i.id)}),s.add(i.id))}),e.sessions.forEach(i=>{!i.parentSessionId&&!t.find(n=>n.parent.id===i.id)&&t.push({parent:i,children:[]})}),t},...j,...P},actions:{_updateSessionInAllLists(e,t){var i;const s=(n,o)=>{const r=n;o!==-1&&(r[o]={...r[o],...t})};s(this.sessions,this.sessions.findIndex(n=>n.id===e)),s(this.archivedSessions,this.archivedSessions.findIndex(n=>n.id===e)),s(this.activeSessions,this.activeSessions.findIndex(n=>n.id===e)),((i=this.currentSession)==null?void 0:i.id)===e&&(this.currentSession={...this.currentSession,...t})},...M,setStatusFilter(e){this.statusFilter=e,this._syncFilterToSubStore("statusFilter"),this._filtersStore().saveStatusFilter()},saveStatusFilter(){this._syncFilterToSubStore("statusFilter"),this._filtersStore().saveStatusFilter()},restoreStatusFilter(){this._filtersStore().restoreStatusFilter(),this.statusFilter=this._filtersStore().statusFilter},setStarredFilter(e){this.starredFilter=e,this._syncFilterToSubStore("starredFilter"),this._filtersStore().saveStarredFilter()},saveStarredFilter(){this._syncFilterToSubStore("starredFilter"),this._filtersStore().saveStarredFilter()},restoreStarredFilter(){this._filtersStore().restoreStarredFilter(),this.starredFilter=this._filtersStore().starredFilter},setScheduledFilter(e){this.scheduledFilter=e,this._syncFilterToSubStore("scheduledFilter"),this._filtersStore().saveScheduledFilter()},saveScheduledFilter(){this._syncFilterToSubStore("scheduledFilter"),this._filtersStore().saveScheduledFilter()},restoreScheduledFilter(){this._filtersStore().restoreScheduledFilter(),this.scheduledFilter=this._filtersStore().scheduledFilter},_filtersStore(){return U()},_syncFilterToSubStore(e){this._filtersStore()[e]=this[e]},updateSessionCommandRun(e,t,s){const i=r=>{if(!r)return null;const a=[...r.latestCommandRuns||[]],u=a.findIndex(f=>f.buttonId===t);return u>=0?a[u]=s:a.push(s),a},n=this.sessions.find(r=>r.id===e)||this.archivedSessions.find(r=>r.id===e)||this.activeSessions.find(r=>r.id===e)||this.currentSession,o=i(n);o&&this._updateSessionInAllLists(e,{latestCommandRuns:o}),this.commandRunVersion++},removeSessionCommandRun(e,t){const s=this.sessions.find(n=>n.id===e)||this.archivedSessions.find(n=>n.id===e)||this.activeSessions.find(n=>n.id===e)||this.currentSession;if(!s)return;const i=(s.latestCommandRuns||[]).filter(n=>n.buttonId!==t);this._updateSessionInAllLists(e,{latestCommandRuns:i}),this.commandRunVersion++},updateSessionCommandRuns(e,t){this._updateSessionInAllLists(e,{latestCommandRuns:t}),this.commandRunVersion++},...E,...B}});export{j as a,B as c,w as f,N as g,E as p,P as t,G as u};
@@ -1 +1 @@
1
- import{L as i,U as r}from"./index-D1Lg5reX.js";import{a as s}from"./ApiClient-CcqJ-GAv.js";const l=i("settings",{state:()=>({tokenCostWeights:{...r},summarySettings:{disableSessionSummaries:!1,sessionTitlePrompt:"",defaultSessionTitlePrompt:""},generalSettings:{disableAnalytics:!1},loading:!1,error:null}),getters:{weights:t=>t.tokenCostWeights},actions:{async fetchTokenCostWeights(){this.loading=!0,this.error=null;try{const t=await s.getTokenCostWeights();this.tokenCostWeights=t}catch(t){this.error=t.message,this.tokenCostWeights={...r}}finally{this.loading=!1}},async updateTokenCostWeights(t){this.loading=!0,this.error=null;try{const e=await s.updateTokenCostWeights(t);return this.tokenCostWeights=e,e}catch(e){throw this.error=e.message,e}finally{this.loading=!1}},async resetTokenCostWeights(){this.loading=!0,this.error=null;try{const t=await s.resetTokenCostWeights();return this.tokenCostWeights=t,t}catch(t){throw this.error=t.message,t}finally{this.loading=!1}},async fetchSummarySettings(){this.loading=!0,this.error=null;try{const t=await s.getSummarySettings();this.summarySettings=t}catch(t){this.error=t.message,this.summarySettings={disableSessionSummaries:!1,sessionTitlePrompt:"",defaultSessionTitlePrompt:""}}finally{this.loading=!1}},async updateSummarySettings(t){this.loading=!0,this.error=null;try{const e=await s.updateSummarySettings(t);return this.summarySettings=e,e}catch(e){throw this.error=e.message,e}finally{this.loading=!1}},async resetSummarySettings(){this.loading=!0,this.error=null;try{const t=await s.resetSummarySettings();return this.summarySettings=t,t}catch(t){throw this.error=t.message,t}finally{this.loading=!1}},async fetchGeneralSettings(){this.loading=!0,this.error=null;try{const t=await s.getGeneralSettings();this.generalSettings=t}catch(t){this.error=t.message,this.generalSettings={disableAnalytics:!1}}finally{this.loading=!1}},async updateGeneralSettings(t){this.loading=!0,this.error=null;try{const e=await s.updateGeneralSettings(t);return this.generalSettings=e,e}catch(e){throw this.error=e.message,e}finally{this.loading=!1}},async resetGeneralSettings(){this.loading=!0,this.error=null;try{const t=await s.resetGeneralSettings();return this.generalSettings=t,t}catch(t){throw this.error=t.message,t}finally{this.loading=!1}}}});export{l as u};
1
+ import{L as i,U as r}from"./index-BQL_L4gL.js";import{a as s}from"./ApiClient-CWbXWDUY.js";const l=i("settings",{state:()=>({tokenCostWeights:{...r},summarySettings:{disableSessionSummaries:!1,sessionTitlePrompt:"",defaultSessionTitlePrompt:""},generalSettings:{disableAnalytics:!1},loading:!1,error:null}),getters:{weights:t=>t.tokenCostWeights},actions:{async fetchTokenCostWeights(){this.loading=!0,this.error=null;try{const t=await s.getTokenCostWeights();this.tokenCostWeights=t}catch(t){this.error=t.message,this.tokenCostWeights={...r}}finally{this.loading=!1}},async updateTokenCostWeights(t){this.loading=!0,this.error=null;try{const e=await s.updateTokenCostWeights(t);return this.tokenCostWeights=e,e}catch(e){throw this.error=e.message,e}finally{this.loading=!1}},async resetTokenCostWeights(){this.loading=!0,this.error=null;try{const t=await s.resetTokenCostWeights();return this.tokenCostWeights=t,t}catch(t){throw this.error=t.message,t}finally{this.loading=!1}},async fetchSummarySettings(){this.loading=!0,this.error=null;try{const t=await s.getSummarySettings();this.summarySettings=t}catch(t){this.error=t.message,this.summarySettings={disableSessionSummaries:!1,sessionTitlePrompt:"",defaultSessionTitlePrompt:""}}finally{this.loading=!1}},async updateSummarySettings(t){this.loading=!0,this.error=null;try{const e=await s.updateSummarySettings(t);return this.summarySettings=e,e}catch(e){throw this.error=e.message,e}finally{this.loading=!1}},async resetSummarySettings(){this.loading=!0,this.error=null;try{const t=await s.resetSummarySettings();return this.summarySettings=t,t}catch(t){throw this.error=t.message,t}finally{this.loading=!1}},async fetchGeneralSettings(){this.loading=!0,this.error=null;try{const t=await s.getGeneralSettings();this.generalSettings=t}catch(t){this.error=t.message,this.generalSettings={disableAnalytics:!1}}finally{this.loading=!1}},async updateGeneralSettings(t){this.loading=!0,this.error=null;try{const e=await s.updateGeneralSettings(t);return this.generalSettings=e,e}catch(e){throw this.error=e.message,e}finally{this.loading=!1}},async resetGeneralSettings(){this.loading=!0,this.error=null;try{const t=await s.resetGeneralSettings();return this.generalSettings=t,t}catch(t){throw this.error=t.message,t}finally{this.loading=!1}}}});export{l as u};
@@ -8,7 +8,7 @@
8
8
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
9
  <link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet">
10
10
  <title>Circus Chief</title>
11
- <script type="module" crossorigin src="/assets/index-D1Lg5reX.js"></script>
11
+ <script type="module" crossorigin src="/assets/index-BQL_L4gL.js"></script>
12
12
  <link rel="stylesheet" crossorigin href="/assets/index-gmCCsCQ1.css">
13
13
  </head>
14
14
  <body>
@@ -1 +0,0 @@
1
- var b=n=>{throw TypeError(n)};var g=(n,e,s)=>e.has(n)||b("Cannot "+s);var h=(n,e,s)=>(g(n,e,"read from private field"),s?s.call(n):e.get(n)),y=(n,e,s)=>e.has(n)?b("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(n):e.set(n,s),C=(n,e,s,t)=>(g(n,e,"write to private field"),t?t.call(n,s):e.set(n,s),s),l=(n,e,s)=>(g(n,e,"access private method"),s);function j(n){Object.assign(n.prototype,{async getProjects(){return this._get("/projects")},async getProject(e){return this._get(`/projects/${e}`)},async createProject(e){return this._post("/projects",e)},async updateProject(e,s){return this._put(`/projects/${e}`,s)},async deleteProject(e){return this._delete(`/projects/${e}`)}})}function S(n,e,s){for(const t of s)e[t]!==void 0&&e[t]!==null&&n.append(t,e[t])}function k(n,e,s){for(const t of s)e[t]!==void 0&&e[t]!==null&&n.append(t,String(e[t]))}function P(n,e){const s=new FormData;s.append("prompt",n.prompt),S(s,n,["name","mode","model","effortLevel","gitBranch","gitMode","templateId","parentSessionId"]),k(s,n,["thinkingEnabled","startImmediately","autoRescheduleEnabled","rescheduleOnTokenLimit","rescheduleOnServiceError"]),S(s,n,["scheduledAt","rescheduleDelayMinutes","maxRescheduleCount","maxTotalTokens","rescheduleAtTokenCount"]);for(const t of e)s.append("files",t);return s}function T(n){Object.assign(n.prototype,{async getActiveSessions(){return this._get("/sessions")},async getScheduledSessions(e=null){return this._get(this._buildQueryPath("/sessions/scheduled",{projectId:e||void 0}))},async getProjectSessions(e,s=null,t=null,{limit:r=null,offset:a=0}={}){const o={};return s!==null&&(o.archived=s),t==="starred"?o.starred=!0:t==="unstarred"&&(o.starred=!1),r!==null&&(o.limit=r,o.offset=a),this._get(this._buildQueryPath(`/projects/${e}/sessions`,o))},async createSession(e,s){const{files:t,...r}=s;if(t&&t.length>0){const a=P(r,t);return this._uploadFormData(`/projects/${e}/sessions`,a)}return this._post(`/projects/${e}/sessions`,r)},async getSession(e){return this._get(`/sessions/${e}`)},async getSessionMessages(e){return this._get(`/sessions/${e}/messages`)},async getSessionWorkLogs(e){return this._get(`/sessions/${e}/work-logs`)},async sendMessage(e,s,t=[],r=null){if(console.log(`[MODEL AUDIT - ApiClient] sendMessage called with model: "${r}"`),t&&t.length>0){const a=new FormData;a.append("content",s),r&&a.append("model",r);for(const o of t)a.append("files",o);return this._uploadFormData(`/sessions/${e}/message`,a)}return this._post(`/sessions/${e}/message`,{content:s,model:r})},async stopSession(e){return this._post(`/sessions/${e}/stop`)},async getSessionChanges(e,s="local",t=null){const r={};return s==="branch"&&(r.compareMode="branch",t&&(r.branch=t)),this._get(this._buildQueryPath(`/sessions/${e}/changes`,r))},async getSessionDefaultBranch(e){return this._get(`/sessions/${e}/default-branch`)},async getSessionFilesCount(e){return this._get(`/sessions/${e}/files-count`)},async getSessionFile(e,s){return this._get(`/sessions/${e}/file?path=${encodeURIComponent(s)}`)},async restartSession(e){return this._post(`/sessions/${e}/restart`)},async startSession(e,s,t){const r={};return s!==void 0&&(r.prompt=s),t!==void 0&&(r.model=t),this._post(`/sessions/${e}/start`,Object.keys(r).length>0?r:void 0)},async updateSessionInitialPrompt(e,s){return this._put(`/sessions/${e}/initial-prompt`,{prompt:s})},async updateSession(e,s){return this._patch(`/sessions/${e}`,s)},async updateSessionPendingPrompt(e,s){return this._patch(`/sessions/${e}/pending-prompt`,{pendingPrompt:s})},async deleteSession(e){return this._delete(`/sessions/${e}`)},async archiveSession(e,{cleanup:s=!1}={}){return this._post(`/sessions/${e}/archive`,{cleanup:s})},async unarchiveSession(e){return this._post(`/sessions/${e}/unarchive`)},async toggleSessionStar(e){return this._post(`/sessions/${e}/star`)},async duplicateSession(e,s={}){return this._post(`/sessions/${e}/duplicate`,s)},async scheduleSession(e,s){return this._post(`/sessions/${e}/schedule`,s)}})}function w(n){Object.assign(n.prototype,{async getCanvasItems(e){return this._get(`/sessions/${e}/canvas`)},async getCanvasFileContent(e,s){return this._get(`/sessions/${e}/canvas/file/${encodeURIComponent(s)}/content`)},async getAllCanvasItems(e){return this._get(`/sessions/${e}/canvas/all`)},async uploadCanvasItem(e,s){const t=new FormData;return t.append("file",s),this._uploadFormData(`/sessions/${e}/canvas`,t)},async createCanvasItem(e,s){return this._post(`/sessions/${e}/canvas`,s)},async updateCanvasItem(e,s,t){return this._put(`/sessions/${e}/canvas/${s}`,t)},async deleteCanvasItem(e,s){return this._delete(`/sessions/${e}/canvas/${s}`)},async getCanvasTrash(e){return this._get(`/sessions/${e}/canvas-trash`)},async recoverCanvasItem(e,s){return this._post(`/sessions/${e}/canvas/${s}/recover`)},async recoverCanvasFile(e,s){return this._post(`/sessions/${e}/canvas-trash/recover-file/${encodeURIComponent(s)}`)},async permanentlyDeleteCanvasItem(e,s){return this._delete(`/sessions/${e}/canvas/${s}/permanent`)},async bulkDeleteCanvasItems(e,s){return this._post(`/sessions/${e}/canvas/bulk-delete`,{itemIds:s})},async bulkRecoverCanvasItems(e,s){return this._post(`/sessions/${e}/canvas/bulk-recover`,{itemIds:s})},async bulkPermanentlyDeleteCanvasItems(e,s){return this._delete(`/sessions/${e}/canvas/bulk-delete-permanent`,{itemIds:s})}})}function R(n){Object.assign(n.prototype,{async getProviders(){return this._get("/providers")},async getProvider(e){return this._get(`/providers/${e}`)},async createProvider(e){return this._post("/providers",e)},async updateProvider(e,s){return this._patch(`/providers/${e}`,s)},async deleteProvider(e){return this._delete(`/providers/${e}`)},async testProviderConnection(e){return this._post("/providers/test",e)},async testExistingProvider(e){return this._post(`/providers/${e}/test`)},async getProviderModels(e){return this._get(`/providers/${e}/models`)},async addProviderModel(e,s){return this._post(`/providers/${e}/models`,s)},async updateProviderModel(e,s,t){return this._patch(`/providers/${e}/models/${s}`,t)},async removeProviderModel(e,s){return this._delete(`/providers/${e}/models/${s}`)}})}function A(n){Object.assign(n.prototype,{async getCommandButtons(e){return this._get(`/projects/${e}/command-buttons`)},async createCommandButton(e,s){return this._post(`/projects/${e}/command-buttons`,s)},async getCommandButton(e,s){return this._get(`/projects/${e}/command-buttons/${s}`)},async updateCommandButton(e,s,t){return this._patch(`/projects/${e}/command-buttons/${s}`,t)},async deleteCommandButton(e,s){return this._delete(`/projects/${e}/command-buttons/${s}`)},async runCommandButton(e,s){return this._post(`/sessions/${e}/command-buttons/${s}/run`)},async getActiveRuns(e){return this._get(`/sessions/${e}/command-buttons/runs`)},async getCommandRun(e,s){return this._get(`/sessions/${e}/command-buttons/runs/${s}`)},async getLatestRunsForProject(e){return this._get(`/projects/${e}/command-buttons/latest-runs`)},async killCommandRun(e,s){return this._post(`/sessions/${e}/command-buttons/runs/${s}/kill`)},async deleteCommandRun(e,s){return this._delete(`/sessions/${e}/command-buttons/runs/${s}`)},async deleteAllRunsForButton(e,s){return this._delete(`/sessions/${e}/command-buttons/${s}/runs/all`)}})}function I(n){Object.assign(n.prototype,{async getTokenCostWeights(){return this._get("/settings/token-weights")},async updateTokenCostWeights(e){return this._put("/settings/token-weights",e)},async resetTokenCostWeights(){return this._delete("/settings/token-weights")},async getSummarySettings(){return this._get("/settings/summary")},async updateSummarySettings(e){return this._put("/settings/summary",e)},async resetSummarySettings(){return this._delete("/settings/summary")},async getGeneralSettings(){return this._get("/settings/general")},async updateGeneralSettings(e){return this._put("/settings/general",e)},async resetGeneralSettings(){return this._delete("/settings/general")}})}function O(n){Object.assign(n.prototype,{async getConversations(e){return this._get(`/sessions/${e}/conversations`)},async createConversation(e,s=null){return this._post(`/sessions/${e}/conversations`,{name:s})},async getConversation(e,s){return this._get(`/sessions/${e}/conversations/${s}`)},async updateConversation(e,s,t){return this._patch(`/sessions/${e}/conversations/${s}`,t)},async deleteConversation(e,s){return this._delete(`/sessions/${e}/conversations/${s}`)},async branchConversation(e,s,t){return this._post(`/sessions/${e}/conversations/${s}/branch`,t)},async getConversationMessages(e,s){return this._get(`/sessions/${e}/messages?conversation_id=${s}`)}})}function D(n){Object.assign(n.prototype,{async getGlobalTemplates(){return this._get("/templates")},async createGlobalTemplate(e){return this._post("/templates",e)},async getTemplate(e){return this._get(`/templates/${e}`)},async updateTemplate(e,s){return this._patch(`/templates/${e}`,s)},async deleteTemplate(e){return this._delete(`/templates/${e}`)},async getProjectTemplates(e){return this._get(`/projects/${e}/templates`)},async createProjectTemplate(e,s){return this._post(`/projects/${e}/templates`,s)}})}function F(n){Object.assign(n.prototype,{async getQuickResponses(e){return this._get(`/projects/${e}/quick-responses`)},async getGlobalQuickResponses(){return this._get("/quick-responses/global")},async createQuickResponse(e,s){return this._post(`/projects/${e}/quick-responses`,s)},async updateQuickResponse(e,s){return this._patch(`/quick-responses/${e}`,s)},async deleteQuickResponse(e){return this._delete(`/quick-responses/${e}`)},async reorderQuickResponses(e,s){return this._post(`/projects/${e}/quick-responses/reorder`,s)},async reorderGlobalQuickResponses(e){return this._post("/quick-responses/global/reorder",e)}})}function Q(n){Object.assign(n.prototype,{async getGitStatus(e){return this._get(`/git/projects/${e}/status`)},async getWorktrees(e){return this._get(`/git/projects/${e}/worktrees`)},async detectWorktreePath(e){return this._get(this._buildQueryPath("/git/detect-worktree-path",{directory:e}))},async getSessionTodos(e,s=null){return this._get(this._buildQueryPath(`/sessions/${e}/todos`,{conversation_id:s||void 0}))},async getSessionSummary(e,s=!1){const t=s?this._buildQueryPath(`/sessions/${e}/summary`,{generate:"true"}):`/sessions/${e}/summary`;try{return await this._get(t)}catch(r){if(r.message.includes("404")||r.message.includes("not found"))return null;throw r}},async getSessionSummariesBatch(e){return!e||e.length===0?{}:this._post("/sessions/summaries/batch",{ids:e})},async generateSessionSummary(e){return this._post(`/sessions/${e}/summary`)},async getWorkflowLatestResponse(e){try{return await this._get(`/sessions/${e}/workflow-latest-response`)}catch(s){if(s.message.includes("404"))return null;throw s}},async getSessionNotes(e){return this._get(`/sessions/${e}/notes`)},async createNote(e,s){return this._post(`/sessions/${e}/notes`,{content:s})},async updateNote(e,s,t){return this._put(`/sessions/${e}/notes/${s}`,{content:t})},async deleteNote(e,s){return this._delete(`/sessions/${e}/notes/${s}`)},async browseDirectory(e=""){return this._get(this._buildQueryPath("/filesystem/browse",{path:e||void 0}))},async getSlashCommands(e){return this._get(`/commands?directory=${encodeURIComponent(e)}`)},async getSlashCommand(e,s){return this._get(`/commands/${encodeURIComponent(s)}?directory=${encodeURIComponent(e)}`)},async executeSlashCommand(e,s,t={}){return this._post(`/commands/${encodeURIComponent(s)}/execute`,{sessionId:e,args:t})},async getAgentCallLogs({limit:e,offset:s,agentType:t,callType:r,status:a,startDate:o,endDate:m,sessionId:_,model:$,sortBy:f,sortOrder:v}={}){const i={};return e!=null&&(i.limit=e),s!=null&&(i.offset=s),t&&(i.agentType=t),r&&(i.callType=r),a&&(i.status=a),o&&(i.startDate=o),m&&(i.endDate=m),_&&(i.sessionId=_),$&&(i.model=$),f&&(i.sortBy=f),v&&(i.sortOrder=v),this._get(this._buildQueryPath("/agent-calls",i))},async getAgentCallFilterOptions(){return this._get("/agent-calls/filter-options")},async deleteAllAgentCallLogs(){return this._delete("/agent-calls")},async getProjectSessionDefaults(e){return this._get(`/projects/${e}/session-defaults`)},async updateProjectSessionDefaults(e,s){return this._post(`/projects/${e}/session-defaults`,s)},async resetProjectSessionDefaults(e){return this._delete(`/projects/${e}/session-defaults`)}})}function B(n){Object.assign(n.prototype,{async getKanbanBoard(e){return this._get(`/projects/${e}/kanban`)},async deleteKanbanBoard(e){return this._delete(`/projects/${e}/kanban`)},async createKanbanLane(e,s){return this._post(`/projects/${e}/kanban/lanes`,s)},async updateKanbanLane(e,s,t){return this._patch(`/projects/${e}/kanban/lanes/${s}`,t)},async deleteKanbanLane(e,s){return this._delete(`/projects/${e}/kanban/lanes/${s}`)},async reorderKanbanLanes(e,s){return this._put(`/projects/${e}/kanban/lanes/reorder`,s)},async createKanbanCard(e,s){return this._post(`/projects/${e}/kanban/cards`,s)},async moveKanbanCard(e,s,t){return this._patch(`/projects/${e}/kanban/cards/${s}/move`,t)},async deleteKanbanCard(e,s){return this._delete(`/projects/${e}/kanban/cards/${s}`)},async reorderKanbanCards(e,s,t){return this._put(`/projects/${e}/kanban/lanes/${s}/cards/reorder`,t)}})}var p,u,d;class c{constructor(e="/api"){y(this,u);y(this,p);C(this,p,e)}get baseUrl(){return h(this,p)}async _uploadFormData(e,s){const t=await fetch(`${h(this,p)}${e}`,{method:"POST",body:s});if(!t.ok){const r=await t.json().catch(()=>({}));throw new Error(r.error||`HTTP ${t.status}`)}return t.json()}_buildQueryPath(e,s){const t=new URLSearchParams;for(const[a,o]of Object.entries(s))o!=null&&t.append(a,o);const r=t.toString();return r?`${e}?${r}`:e}_get(e){return l(this,u,d).call(this,"GET",e)}_post(e,s){return l(this,u,d).call(this,"POST",e,s)}_put(e,s){return l(this,u,d).call(this,"PUT",e,s)}_patch(e,s){return l(this,u,d).call(this,"PATCH",e,s)}_delete(e,s){return l(this,u,d).call(this,"DELETE",e,s)}}p=new WeakMap,u=new WeakSet,d=async function(e,s,t=null){const r={method:e,headers:{"Content-Type":"application/json"}};t&&e!=="GET"&&(r.body=JSON.stringify(t));const a=await fetch(`${h(this,p)}${s}`,r);if(!a.ok){const o=await a.json().catch(()=>({}));throw new Error(o.error||`HTTP ${a.status}`)}return a.status===204?null:a.json()};j(c);T(c);w(c);R(c);A(c);I(c);O(c);D(c);F(c);Q(c);B(c);const M=new c;export{M as a};
@@ -1 +0,0 @@
1
- import{L as f,a0 as g,_ as b,k as _,n as m,l as E,a as p,c as h,b as j,F as L,r as x,t as w,u as I,x as C,$ as O}from"./index-D1Lg5reX.js";import{a as r}from"./ApiClient-CcqJ-GAv.js";import{u as V}from"./sessions-CoRS-wuR.js";const D=["low","medium","high","max","auto"],$=[{id:"claude-haiku-4-5-20251001",name:"Haiku 4.5",description:"Fast & lightweight"},{id:"claude-sonnet-4-6",name:"Sonnet 4.6",description:"Balanced"},{id:"claude-opus-4-6",name:"Opus 4.6",description:"Previous generation"},{id:"claude-opus-4-7",name:"Opus 4.7",description:"Most capable (default)"}],H="claude-opus-4-7",F=f("todos",{state:()=>({items:[],loading:!1,error:null,expanded:!1,currentConversationId:null}),getters:{hasTodos:t=>t.items.length>0,pendingCount:t=>t.items.filter(e=>e.status==="pending").length,inProgressCount:t=>t.items.filter(e=>e.status==="in_progress").length,completedCount:t=>t.items.filter(e=>e.status==="completed").length},actions:{async fetchTodos(t,e=null){this.loading=!0,this.error=null,this.currentConversationId=e;try{this.items=await r.getSessionTodos(t,e)}catch(s){this.error=s.message}finally{this.loading=!1}},updateTodos(t,e=null){(e===null||this.currentConversationId===null||e===this.currentConversationId)&&(this.items=t)},clearTodos(){this.items=[],this.loading=!1,this.error=null,this.currentConversationId=null,this.expanded=!1},toggleExpanded(){this.expanded=!this.expanded},setExpanded(t){this.expanded=t}}}),k=Symbol("overlay-sessions-store"),B=Symbol("overlay-todos-store");function P(){return g(k,V())}function q(){return g(B,F())}const z=f("templates",{state:()=>({projectTemplates:[],globalTemplates:[],loading:!1,error:null}),getters:{allTemplates:t=>[...t.projectTemplates,...t.globalTemplates],getTemplateById:t=>e=>t.projectTemplates.find(s=>s.id===e)||t.globalTemplates.find(s=>s.id===e)},actions:{async fetchProjectTemplates(t){this.loading=!0,this.error=null;try{const e=await r.getProjectTemplates(t);this.projectTemplates=e.project||[],this.globalTemplates=e.global||[]}catch(e){this.error=e.message}finally{this.loading=!1}},async createProjectTemplate(t,e){this.loading=!0,this.error=null;try{const s=await r.createProjectTemplate(t,e);return this.projectTemplates.unshift(s),s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async createGlobalTemplate(t){this.loading=!0,this.error=null;try{const e=await r.createGlobalTemplate(t);return this.globalTemplates.unshift(e),e}catch(e){throw this.error=e.message,e}finally{this.loading=!1}},async updateTemplate(t,e){this.loading=!0,this.error=null;try{const s=await r.updateTemplate(t,e);let l=this.projectTemplates.findIndex(o=>o.id===t);return l!==-1?this.projectTemplates[l]=s:(l=this.globalTemplates.findIndex(o=>o.id===t),l!==-1&&(this.globalTemplates[l]=s)),s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async deleteTemplate(t){this.loading=!0,this.error=null;try{await r.deleteTemplate(t),this.projectTemplates=this.projectTemplates.filter(e=>e.id!==t),this.globalTemplates=this.globalTemplates.filter(e=>e.id!==t)}catch(e){throw this.error=e.message,e}finally{this.loading=!1}}}}),R={class:"effort-selector"},U=["value","disabled"],A=["value"],M={__name:"EffortLevelSelector",props:{sessionId:{type:String,default:null},modelValue:{type:String,default:null},disabled:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(t,{emit:e}){const s=t,l=e,o=P(),T=_(),u=m(!1),y=["auto",...D.filter(a=>a!=="auto")].map(a=>({value:a,label:`${a.charAt(0).toUpperCase()+a.slice(1)} Effort`})),c=C(()=>{var a;return s.sessionId?((a=o.currentSession)==null?void 0:a.effortLevel)||"auto":s.modelValue||"auto"}),n=m(c.value),S=O(s,"modelValue");E([c,S],([a])=>{n.value=a||"auto"},{flush:"sync"});async function v(a){if(!u.value&&n.value!==a)if(n.value=a,s.sessionId){u.value=!0;try{await o.updateSessionFields(s.sessionId,{effortLevel:a==="auto"?null:a})}catch(d){n.value=c.value,T.error(d.message)}finally{u.value=!1}}else l("update:modelValue",a==="auto"?null:a)}return(a,d)=>(p(),h("div",R,[j("select",{id:"effort-select",value:n.value,disabled:t.disabled||u.value,class:"effort-select","aria-label":"Effort level",onChange:d[0]||(d[0]=i=>v(i.target.value))},[(p(!0),h(L,null,x(I(y),i=>(p(),h("option",{key:i.value,value:i.value},w(i.label),9,A))),128))],40,U)]))}},J=b(M,[["__scopeId","data-v-8bc1fe64"]]);export{$ as C,H as D,J as E,k as S,B as T,F as a,P as b,q as c,z as u};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-Krfrs3sc.js","assets/index-D1Lg5reX.js","assets/index-gmCCsCQ1.css","assets/SessionDetailView-D3f0FEV1.js","assets/sessions-CoRS-wuR.js","assets/ApiClient-CcqJ-GAv.js","assets/settings-BN_W4nwV.js","assets/projects-CMJJca64.js","assets/EffortLevelSelector-HuOPegKI.js","assets/EffortLevelSelector-BQaQmU2d.css","assets/SessionLogStream-NR-AS676.js","assets/commandButtons-D_-wR8zJ.js","assets/SessionLogStream-zPUTiGbe.css","assets/ArchiveConfirmModal-BHqbCCX2.js","assets/ModelSelector-CgpqdZtV.js","assets/providers-BCtNZWYw.js","assets/ModelSelector-DPPD-92R.css","assets/SlashCommandWizard-PXipO1yA.js","assets/SlashCommandWizard-BB30cSvo.css","assets/ArchiveConfirmModal-BQ-4gI0R.css","assets/useSummaryHelpers-GVg7sMWF.js","assets/QuickResponseSettings-Ds4X-J-t.js","assets/QuickResponseSettings-B8188A1D.css","assets/QuickResponsesPanel-BY2v23c5.js","assets/QuickResponsesPanel-DIBQFj0W.css","assets/ResizableTextarea-C2s6_7X9.js","assets/ResizableTextarea-B5nAA0RV.css","assets/SessionDetailView-BL83oPiI.css","assets/style-BTin-zR_.css"])))=>i.map(i=>d[i]);
2
- import{n as E,l as d,A as w,a as l,c as y,G as T,w as u,b as m,f as V,d as k,u as h,a3 as x,O as A,P as p}from"./index-D1Lg5reX.js";import{u as P}from"./SessionDetailView-D3f0FEV1.js";import"./sessions-CoRS-wuR.js";import"./ApiClient-CcqJ-GAv.js";import"./settings-BN_W4nwV.js";import"./projects-CMJJca64.js";import"./EffortLevelSelector-HuOPegKI.js";import"./SessionLogStream-NR-AS676.js";import"./commandButtons-D_-wR8zJ.js";import"./ArchiveConfirmModal-BHqbCCX2.js";import"./ModelSelector-CgpqdZtV.js";import"./providers-BCtNZWYw.js";import"./SlashCommandWizard-PXipO1yA.js";import"./useSummaryHelpers-GVg7sMWF.js";import"./QuickResponseSettings-Ds4X-J-t.js";import"./QuickResponsesPanel-BY2v23c5.js";import"./ResizableTextarea-C2s6_7X9.js";const b={class:"canvas-md-editor"},K={__name:"MarkdownEditor",props:{content:{type:String,default:""},sessionId:{type:String,required:!0},filename:{type:String,required:!0},itemId:{type:String,required:!0}},emits:["save"],setup(c,{expose:f,emit:v}){const _=A(()=>p(()=>import("./index-Krfrs3sc.js").then(e=>e.w),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27])).then(async e=>(await p(()=>Promise.resolve({}),__vite__mapDeps([28])),e.MdEditor))),r=c,n=v,g=P(),t=E(r.content||"");let o=null,i=r.content||"";d(t,e=>{o&&clearTimeout(o),o=setTimeout(()=>{i=e,n("save",e)},1e3)});function s(){o&&(clearTimeout(o),o=null),t.value!==i&&n("save",t.value)}return f({flushPendingSave:s}),d(()=>r.content,e=>{e!==t.value&&(t.value=e||"")}),w(()=>{s(),g.endEditing(r.filename)}),(e,a)=>(l(),y("div",b,[(l(),T(x,null,{default:u(()=>[k(h(_),{modelValue:t.value,"onUpdate:modelValue":a[0]||(a[0]=S=>t.value=S),theme:"dark",preview:!1,language:"en-US","no-upload-img":!0,"show-code-row-number":!0},null,8,["modelValue"])]),fallback:u(()=>[...a[1]||(a[1]=[m("div",{class:"editor-loading"},[m("span",{class:"loading-spinner"}),V(" Loading editor... ")],-1)])]),_:1}))]))}};export{K as default};
@@ -1 +0,0 @@
1
- import{u as x}from"./providers-BCtNZWYw.js";import{_ as L,o as N,n as M,l as V,a as n,c as r,b as z,t as _,i as F,F as I,r as S,u as R,E as D,x as f,$ as H}from"./index-D1Lg5reX.js";const P=["data-model"],U=["value","disabled"],$={key:0,value:""},j=["label"],q=["value","data-provider-id"],A={__name:"ModelSelector",props:{modelValue:{type:String,default:null},disabled:{type:Boolean,default:!1},allowEmpty:{type:Boolean,default:!1},emptyLabel:{type:String,default:"Use system default"},selectClass:{type:String,default:""}},emits:["update:modelValue"],setup(i,{emit:b}){const d=i,v=b,s=x(),h=f(()=>s.providers.length>0&&s.providers.some(e=>e.models&&e.models.length>0)),B=f(()=>{const e=new Set;for(const t of s.providers)if(t.models)for(const l of t.models)e.add(l.modelId);return e});function g(e){return e&&B.value.has(e)}const u=f(()=>{var l,o,m;const e=s.providers.find(c=>c.isBuiltIn);if((l=e==null?void 0:e.models)!=null&&l.length){const c=e.models.find(k=>k.tier==="sonnet");return(c==null?void 0:c.modelId)||e.models[0].modelId}const t=s.providers[0];return((m=(o=t==null?void 0:t.models)==null?void 0:o[0])==null?void 0:m.modelId)||null}),w=M(!1);N(async()=>{(s.providers.length===0||!h.value)&&await s.fetchProviders(),w.value=!0});function p(e){var l;if(!e)return null;if(e.includes("claude-"))return e;const t=s.providers.find(o=>o.isBuiltIn);if((l=t==null?void 0:t.models)!=null&&l.length){const o=t.models.find(m=>m.tier===e);if(o)return o.modelId}return e}const a=M(p(d.modelValue)),y=f(()=>d.allowEmpty&&(!a.value||a.value==="")?"":a.value&&g(a.value)?a.value:u.value?u.value:a.value),C=H(d,"modelValue");V(C,e=>{a.value=p(e)},{flush:"sync"}),V(()=>s.providers,()=>{if(!h.value)return;if(d.allowEmpty&&(!d.modelValue||d.modelValue==="")){a.value="";return}let e=null;d.modelValue&&(e=p(d.modelValue)),e&&g(e)?a.value!==e&&(a.value=e,e!==d.modelValue&&v("update:modelValue",e)):u.value&&a.value!==u.value&&(a.value=u.value,v("update:modelValue",u.value))},{deep:!0,immediate:!0});function E(e){y.value!==e&&(a.value=e,v("update:modelValue",e))}return(e,t)=>(n(),r("div",{class:"model-selector","data-model":y.value},[z("select",{id:"model-select",value:y.value,disabled:i.disabled,class:D(i.selectClass||"model-select"),onChange:t[0]||(t[0]=l=>E(l.target.value))},[i.allowEmpty?(n(),r("option",$,_(i.emptyLabel),1)):F("",!0),(n(!0),r(I,null,S(R(s).providers,l=>(n(),r("optgroup",{key:l.id,label:l.name},[(n(!0),r(I,null,S(l.models,o=>(n(),r("option",{key:o.id,value:o.modelId,"data-provider-id":l.id},_(l.isBuiltIn?o.displayName:o.modelId),9,q))),128))],8,j))),128))],42,U)],8,P))}},K=L(A,[["__scopeId","data-v-ea265eb4"]]);export{K as M};
@@ -1 +0,0 @@
1
- import{k as Q,l as te,x as q,n as M,_ as W,a as n,c as i,b as e,e as se,F as R,r as K,m as P,v as N,p as oe,t as k,u as t,j as z,f as B,a1 as le,d as X,i as $,E as ae,$ as J,o as ne}from"./index-D1Lg5reX.js";import{u as Z}from"./providers-BCtNZWYw.js";import"./ApiClient-CcqJ-GAv.js";function ee(){return{name:"",baseUrl:null,authToken:null,apiTimeoutMs:null,additionalEnvVars:{}}}function ie(_){const v={name:_.name,baseUrl:_.baseUrl,authToken:_.authToken==="••••••••"?null:_.authToken,apiTimeoutMs:_.apiTimeoutMs,additionalEnvVars:_.additionalEnvVars?{..._.additionalEnvVars}:{}},m=Object.keys(v.additionalEnvVars),u=(_.models||[]).map(d=>({_serverId:d.id,modelId:d.modelId,displayName:d.displayName,tier:d.tier||"custom"}));return{formData:v,envKeys:m,models:u,authModified:!1}}function de(){return{form:M(ee()),localModels:M([]),envVarKeys:M([]),showAuthToken:M(!1),saving:M(!1),testing:M(!1),error:M(null),testResult:M(null),authTokenModified:M(!1)}}function re(_,v,m){const u=Z(),d=Q(),b=de(),{form:a,localModels:y,envVarKeys:g,showAuthToken:S,saving:w,testing:h,error:C,testResult:U,authTokenModified:I}=b,V=q(()=>!!v.value),l=q(()=>a.value.name.trim().length>0),r=q(()=>a.value.baseUrl||a.value.authToken);te(()=>[_.value,v.value],([s,c])=>{if(s){if(c){const p=ie(c);a.value=p.formData,g.value=p.envKeys,y.value=p.models,I.value=p.authModified}else a.value=ee(),g.value=[],y.value=[],I.value=!0;S.value=!1,C.value=null,U.value=null}},{deep:!0});function A(){y.value.push({modelId:"",displayName:"",tier:"custom"})}function H(s){y.value.splice(s,1)}function j(){const s=`ENV_VAR_${Object.keys(a.value.additionalEnvVars).length+1}`;a.value.additionalEnvVars[s]="",g.value.push(s)}function L(s){delete a.value.additionalEnvVars[s],g.value=g.value.filter(c=>c!==s)}function D(s,c){const p=g.value[s];if(p!==c&&p.trim()){const E=a.value.additionalEnvVars[c];delete a.value.additionalEnvVars[c],a.value.additionalEnvVars[p]=E}}async function F(){h.value=!0,C.value=null,U.value=null;try{const s=y.value.find(p=>p.tier==="sonnet"),c={baseUrl:a.value.baseUrl||void 0,authToken:a.value.authToken||void 0,defaultSonnetModel:(s==null?void 0:s.modelId)||void 0,apiTimeoutMs:a.value.apiTimeoutMs||void 0};U.value=await u.testConnection(c)}catch(s){C.value=s.message}finally{h.value=!1}}function Y(s,c){return s.modelId.trim()!==c.modelId||s.displayName.trim()!==c.displayName||s.tier!==c.tier}function o(s){return{modelId:s.modelId.trim(),displayName:s.displayName.trim()||s.modelId.trim(),tier:s.tier||"custom"}}async function f(s,c,p){if(!s._serverId&&s.modelId.trim()){await u.addModel(c,o(s));return}const E=p.get(s._serverId);E&&Y(s,E)&&await u.updateModel(c,s._serverId,o(s))}async function x(s){var G;const c=new Set(y.value.filter(T=>T._serverId).map(T=>T._serverId)),p=((G=v.value)==null?void 0:G.models)||[],E=new Map(p.map(T=>[T.id,T]));for(const T of p)c.has(T.id)||await u.removeModel(s,T.id);for(const T of y.value)await f(T,s,E);await u.fetchProviders()}async function O(){var s,c;w.value=!0,C.value=null;try{const p={name:a.value.name.trim(),baseUrl:((s=a.value.baseUrl)==null?void 0:s.trim())||null,apiTimeoutMs:a.value.apiTimeoutMs||null,additionalEnvVars:Object.keys(a.value.additionalEnvVars).length>0?a.value.additionalEnvVars:null};I.value&&(p.authToken=((c=a.value.authToken)==null?void 0:c.trim())||null);let E;V.value?(E=await u.updateProvider(v.value.id,p),d.success("Provider updated successfully")):(E=await u.createProvider(p),d.success("Provider created successfully")),await x(E.id),m()}catch(p){C.value=p.message}finally{w.value=!1}}return{form:a,localModels:y,envVarKeys:g,showAuthToken:S,saving:w,testing:h,error:C,testResult:U,authTokenModified:I,isEditing:V,isValid:l,canTest:r,addLocalModel:A,removeLocalModel:H,addEnvVar:j,removeEnvVar:L,updateEnvVarKey:D,testConnection:F,save:O}}const ue={class:"models-section"},ce={key:0,class:"models-list"},ve=["onUpdate:modelValue"],me=["onUpdate:modelValue"],pe=["onUpdate:modelValue"],fe=["onClick"],be={key:1,class:"models-empty"},ye={__name:"ProviderModelsList",props:{models:{type:Array,required:!0}},emits:["add","remove"],setup(_){return(v,m)=>(n(),i("div",ue,[m[3]||(m[3]=e("div",{class:"models-header"},[e("span",{class:"models-title"},"Models"),e("span",{class:"models-hint"},"Assign tiers to map provider models to Opus / Sonnet / Haiku roles")],-1)),_.models.length>0?(n(),i("div",ce,[m[2]||(m[2]=se('<div class="model-row model-row-header" data-v-3aa7217a><span class="col-model-id" data-v-3aa7217a>Model ID</span><span class="col-display-name" data-v-3aa7217a>Display Name</span><span class="col-tier" data-v-3aa7217a>Tier</span><span class="col-actions" data-v-3aa7217a></span></div>',1)),(n(!0),i(R,null,K(_.models,(u,d)=>(n(),i("div",{key:d,class:"model-row"},[P(e("input",{"onUpdate:modelValue":b=>u.modelId=b,type:"text",placeholder:"anthropic.claude-3-sonnet-…",class:"col-model-id model-input"},null,8,ve),[[N,u.modelId]]),P(e("input",{"onUpdate:modelValue":b=>u.displayName=b,type:"text",placeholder:"My Sonnet",class:"col-display-name model-input"},null,8,me),[[N,u.displayName]]),P(e("select",{"onUpdate:modelValue":b=>u.tier=b,class:"col-tier model-input tier-select"},[...m[1]||(m[1]=[e("option",{value:"opus"}," Opus ",-1),e("option",{value:"sonnet"}," Sonnet ",-1),e("option",{value:"haiku"}," Haiku ",-1),e("option",{value:"custom"}," Custom ",-1)])],8,pe),[[oe,u.tier]]),e("button",{type:"button",class:"col-actions remove-model-btn",title:"Remove model",onClick:b=>v.$emit("remove",d)}," × ",8,fe)]))),128))])):(n(),i("div",be," No models added yet. ")),e("button",{type:"button",class:"btn btn-sm btn-secondary add-model-btn",onClick:m[0]||(m[0]=u=>v.$emit("add"))}," + Add Model ")]))}},_e=W(ye,[["__scopeId","data-v-3aa7217a"]]),ke={class:"modal"},he={class:"modal-header"},ge={class:"modal-body"},Ve={class:"form-group"},Me={class:"form-group"},$e={class:"form-group"},Te={class:"token-input-wrapper"},Ce=["type"],Ee=["title"],we={class:"expandable-section"},Pe={class:"section-content"},Ue={class:"form-group"},Ie={class:"form-group"},Se={class:"env-vars-list"},Ae=["onUpdate:modelValue","onBlur"],Ne=["onUpdate:modelValue"],Be=["onClick"],De={key:0,class:"error-message"},xe={class:"test-result-header"},Oe={class:"test-icon"},Fe={class:"test-message"},Le={key:0,class:"test-details"},Re={key:0,class:"test-detail"},Ke={key:1,class:"test-detail"},He={class:"modal-footer"},je=["disabled"],qe={class:"footer-actions"},ze=["disabled"],We=["disabled"],Ye={__name:"ProviderForm",props:{isOpen:{type:Boolean,default:!1},provider:{type:Object,default:null}},emits:["close","saved"],setup(_,{emit:v}){const m=_,u=v,{form:d,localModels:b,envVarKeys:a,showAuthToken:y,saving:g,testing:S,error:w,testResult:h,authTokenModified:C,isEditing:U,isValid:I,canTest:V,addLocalModel:l,removeLocalModel:r,addEnvVar:A,removeEnvVar:H,updateEnvVarKey:j,testConnection:L,save:D}=re(J(m,"isOpen"),J(m,"provider"),()=>u("saved"));function F(){u("close")}return(Y,o)=>_.isOpen?(n(),i("div",{key:0,class:"modal-overlay",onClick:z(F,["self"])},[e("div",ke,[e("div",he,[e("h2",null,k(t(U)?"Edit Provider":"Add Provider"),1),e("button",{type:"button",class:"close-btn",title:"Close",onClick:F}," × ")]),e("div",ge,[e("form",{onSubmit:o[7]||(o[7]=z((...f)=>t(D)&&t(D)(...f),["prevent"]))},[e("div",Ve,[o[10]||(o[10]=e("label",{for:"provider-name"},"Provider Name*",-1)),P(e("input",{id:"provider-name","onUpdate:modelValue":o[0]||(o[0]=f=>t(d).name=f),type:"text",placeholder:"e.g., AWS Bedrock",required:"",maxlength:"100"},null,512),[[N,t(d).name]])]),e("div",Me,[o[11]||(o[11]=e("label",{for:"base-url"},[B(" Base URL "),e("span",{class:"label-hint"},"(ANTHROPIC_BASE_URL)")],-1)),P(e("input",{id:"base-url","onUpdate:modelValue":o[1]||(o[1]=f=>t(d).baseUrl=f),type:"url",placeholder:"https://bedrock-runtime.us-east-1.amazonaws.com"},null,512),[[N,t(d).baseUrl]])]),e("div",$e,[o[12]||(o[12]=e("label",{for:"auth-token"},[B(" Auth Token "),e("span",{class:"label-hint"},"(ANTHROPIC_AUTH_TOKEN)")],-1)),e("div",Te,[P(e("input",{id:"auth-token","onUpdate:modelValue":o[2]||(o[2]=f=>t(d).authToken=f),type:t(y)?"text":"password",placeholder:"Your authentication token",onInput:o[3]||(o[3]=f=>C.value=!0)},null,40,Ce),[[le,t(d).authToken]]),e("button",{type:"button",class:"toggle-visibility-btn",title:t(y)?"Hide":"Show",onClick:o[4]||(o[4]=f=>y.value=!t(y))},k(t(y)?"Hide":"Show"),9,Ee)])]),X(_e,{models:t(b),onAdd:t(l),onRemove:t(r)},null,8,["models","onAdd","onRemove"]),e("details",we,[o[15]||(o[15]=e("summary",{class:"section-header"}," Advanced Settings ",-1)),e("div",Pe,[e("div",Ue,[o[13]||(o[13]=e("label",{for:"api-timeout"},"API Timeout (ms)",-1)),P(e("input",{id:"api-timeout","onUpdate:modelValue":o[5]||(o[5]=f=>t(d).apiTimeoutMs=f),type:"number",placeholder:"120000",min:"1000",step:"1000"},null,512),[[N,t(d).apiTimeoutMs,void 0,{number:!0}]])]),e("div",Ie,[o[14]||(o[14]=e("label",null,"Additional Environment Variables",-1)),e("div",Se,[(n(!0),i(R,null,K(t(d).additionalEnvVars,(f,x,O)=>(n(),i("div",{key:O,class:"env-var-row"},[P(e("input",{"onUpdate:modelValue":s=>t(a)[O]=s,type:"text",placeholder:"KEY",class:"env-key",onBlur:s=>t(j)(O,x)},null,40,Ae),[[N,t(a)[O]]]),P(e("input",{"onUpdate:modelValue":s=>t(d).additionalEnvVars[x]=s,type:"text",placeholder:"value",class:"env-value"},null,8,Ne),[[N,t(d).additionalEnvVars[x]]]),e("button",{type:"button",class:"remove-env-btn",title:"Remove",onClick:s=>t(H)(x)}," × ",8,Be)]))),128)),e("button",{type:"button",class:"btn btn-sm btn-secondary",onClick:o[6]||(o[6]=(...f)=>t(A)&&t(A)(...f))}," + Add Variable ")])])])]),t(w)?(n(),i("div",De,k(t(w)),1)):$("",!0),t(h)?(n(),i("div",{key:1,class:ae(["test-result",t(h).success?"success":"failure"])},[e("div",xe,[e("span",Oe,k(t(h).success?"✓":"✗"),1),e("span",Fe,k(t(h).message),1)]),t(h).details?(n(),i("div",Le,[t(h).details.model?(n(),i("div",Re,[o[16]||(o[16]=B(" Model: ",-1)),e("code",null,k(t(h).details.model),1)])):$("",!0),t(h).details.code?(n(),i("div",Ke,[o[17]||(o[17]=B(" Error Code: ",-1)),e("code",null,k(t(h).details.code),1)])):$("",!0)])):$("",!0)],2)):$("",!0)],32)]),e("div",He,[e("button",{type:"button",class:"btn btn-secondary",disabled:t(g)||t(S)||!t(V),onClick:o[8]||(o[8]=(...f)=>t(L)&&t(L)(...f))},k(t(S)?"Testing...":"Test Connection"),9,je),e("div",qe,[e("button",{type:"button",class:"btn btn-secondary",disabled:t(g),onClick:F}," Cancel ",8,ze),e("button",{type:"button",class:"btn btn-primary",disabled:t(g)||!t(I),onClick:o[9]||(o[9]=(...f)=>t(D)&&t(D)(...f))},k(t(g)?"Saving...":"Save"),9,We)])])])])):$("",!0)}},Ge=W(Ye,[["__scopeId","data-v-a4048df1"]]),Je={class:"container"},Qe={key:0,class:"skeleton-list"},Xe={key:1,class:"error-message"},Ze={key:2,class:"provider-list"},et={class:"provider-header"},tt={class:"provider-title"},st={key:0,class:"built-in-badge"},ot={class:"provider-actions"},lt=["disabled","onClick"],at=["onClick"],nt=["onClick"],it={class:"provider-details"},dt={key:0,class:"provider-detail"},rt={class:"detail-value"},ut={key:1,class:"provider-detail"},ct={class:"detail-value"},vt={key:2,class:"provider-detail"},mt={class:"modal confirm-modal"},pt={class:"modal-header"},ft={class:"modal-body"},bt={class:"modal-footer"},yt=["disabled"],_t={__name:"ProvidersView",setup(_){const v=Z(),m=Q(),u=M(!1),d=M(null),b=M(null),a=M(!1),y=M(null);ne(()=>{v.fetchProviders()});function g(){d.value=null,u.value=!0}function S(V){d.value=V,u.value=!0}function w(){u.value=!1,d.value=null}function h(){w(),v.fetchProviders()}async function C(V){y.value=V;try{const l=await v.testExistingProvider(V);l.success?m.success(`Connection successful (model: ${l.details.model})`):m.error(`Connection failed: ${l.message}`)}catch(l){m.error(`Test failed: ${l.message}`)}finally{y.value=null}}function U(V){b.value=V}async function I(){a.value=!0;try{await v.deleteProvider(b.value.id),m.success("Provider deleted"),b.value=null}catch(V){m.error(`Failed to delete provider: ${V.message}`)}finally{a.value=!1}}return(V,l)=>(n(),i("div",Je,[e("div",{class:"page-header"},[e("button",{class:"btn btn-primary",onClick:g},[...l[3]||(l[3]=[e("span",null,"+ Add Provider",-1)])])]),l[11]||(l[11]=e("p",{class:"page-description"}," Configure custom model providers to use the agent through alternative endpoints like AWS Bedrock, Google Vertex AI, or self-hosted proxies. ",-1)),t(v).loading?(n(),i("div",Qe,[(n(),i(R,null,K(3,r=>e("div",{key:r,class:"skeleton card",style:{height:"120px"}})),64))])):t(v).error?(n(),i("div",Xe,k(t(v).error),1)):(n(),i("div",Ze,[(n(!0),i(R,null,K(t(v).providers,r=>(n(),i("div",{key:r.id,class:"provider-card card"},[e("div",et,[e("div",tt,[e("h3",null,[B(k(r.name)+" ",1),r.isBuiltIn?(n(),i("span",st,"Built-in")):$("",!0)])]),e("div",ot,[r.isBuiltIn?$("",!0):(n(),i("button",{key:0,class:"btn btn-sm",disabled:y.value===r.id,title:"Test Connection",onClick:A=>C(r.id)},k(y.value===r.id?"Testing...":"Test"),9,lt)),r.isBuiltIn?$("",!0):(n(),i("button",{key:1,class:"btn btn-sm",onClick:A=>S(r)}," Edit ",8,at)),r.isBuiltIn?$("",!0):(n(),i("button",{key:2,class:"btn btn-sm btn-danger",onClick:A=>U(r)}," Delete ",8,nt))])]),e("div",it,[r.baseUrl?(n(),i("div",dt,[l[4]||(l[4]=e("span",{class:"detail-label"},"Base URL:",-1)),e("code",rt,k(r.baseUrl),1)])):$("",!0),r.defaultSonnetModel?(n(),i("div",ut,[l[5]||(l[5]=e("span",{class:"detail-label"},"Default Sonnet Model:",-1)),e("code",ct,k(r.defaultSonnetModel),1)])):$("",!0),!r.baseUrl&&r.isBuiltIn?(n(),i("div",vt,[...l[6]||(l[6]=[e("span",{class:"detail-value"},"Uses official Anthropic API",-1)])])):$("",!0)])]))),128))])),X(Ge,{"is-open":u.value,provider:d.value,onClose:w,onSaved:h},null,8,["is-open","provider"]),b.value?(n(),i("div",{key:3,class:"modal-overlay",onClick:l[2]||(l[2]=z(r=>b.value=null,["self"]))},[e("div",mt,[e("div",pt,[l[7]||(l[7]=e("h2",null,"Delete Provider",-1)),e("button",{type:"button",class:"close-btn",onClick:l[0]||(l[0]=r=>b.value=null)}," × ")]),e("div",ft,[e("p",null,[l[8]||(l[8]=B("Are you sure you want to delete ",-1)),e("strong",null,k(b.value.name),1),l[9]||(l[9]=B("?",-1))]),l[10]||(l[10]=e("p",{class:"warning-text"}," This action cannot be undone. ",-1))]),e("div",bt,[e("button",{type:"button",class:"btn btn-secondary",onClick:l[1]||(l[1]=r=>b.value=null)}," Cancel "),e("button",{type:"button",class:"btn btn-danger",disabled:a.value,onClick:I},k(a.value?"Deleting...":"Delete"),9,yt)])])])):$("",!0)]))}},Vt=W(_t,[["__scopeId","data-v-0bdb2dfd"]]);export{Vt as default};
@@ -1 +0,0 @@
1
- .models-section[data-v-3aa7217a]{margin-bottom:1.25rem;border:1px solid var(--color-border);border-radius:.25rem;overflow:hidden}.models-header[data-v-3aa7217a]{display:flex;align-items:baseline;gap:.75rem;padding:.75rem 1rem;background:var(--color-background-soft);border-bottom:1px solid var(--color-border)}.models-title[data-v-3aa7217a]{font-weight:500;font-size:.875rem;color:var(--color-text)}.models-hint[data-v-3aa7217a]{font-size:.8125rem;color:var(--color-text-soft)}.models-list[data-v-3aa7217a]{padding:.5rem .75rem}.model-row[data-v-3aa7217a]{display:grid;grid-template-columns:1fr 10rem 6.5rem 2rem;gap:.5rem;align-items:center;margin-bottom:.375rem}.model-row-header[data-v-3aa7217a]{font-size:.75rem;font-weight:500;color:var(--color-text-soft);margin-bottom:.25rem}.model-row-header span[data-v-3aa7217a]{padding:0 .25rem}.model-input[data-v-3aa7217a]{padding:.4rem .6rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:.25rem;color:var(--color-text);font-size:.8125rem}.model-input[data-v-3aa7217a]:focus{outline:none;border-color:var(--color-primary)}.tier-select[data-v-3aa7217a]{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto;cursor:pointer}.remove-model-btn[data-v-3aa7217a]{background:none;border:1px solid var(--color-border);color:var(--color-text-soft);font-size:1.125rem;cursor:pointer;padding:.2rem .4rem;line-height:1;border-radius:.25rem;text-align:center}.remove-model-btn[data-v-3aa7217a]:hover{color:var(--color-danger, #ef4444);border-color:var(--color-danger, #ef4444)}.models-empty[data-v-3aa7217a]{padding:.75rem 1rem;font-size:.8125rem;color:var(--color-text-soft);font-style:italic}.add-model-btn[data-v-3aa7217a]{margin:.5rem .75rem .75rem}.btn[data-v-3aa7217a]{padding:.5rem 1rem;border-radius:.25rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .15s}.btn-sm[data-v-3aa7217a]{padding:.375rem .75rem;font-size:.8125rem}.btn-secondary[data-v-3aa7217a]{background:var(--color-background);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[data-v-3aa7217a]:hover:not(:disabled){border-color:var(--color-primary);background:var(--color-background-soft)}.modal-overlay[data-v-a4048df1]{position:fixed;top:0;left:0;right:0;bottom:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:1000}.modal[data-v-a4048df1]{background:var(--color-background);border:1px solid var(--color-border);border-radius:.5rem;width:100%;max-width:680px;max-height:90vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 8px 32px #0000004d}.modal-header[data-v-a4048df1]{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid var(--color-border)}.modal-header h2[data-v-a4048df1]{margin:0;font-size:1.125rem;font-weight:600}.close-btn[data-v-a4048df1]{background:none;border:none;color:var(--color-text-soft);font-size:1.5rem;cursor:pointer;padding:.25rem;line-height:1;border-radius:.25rem}.close-btn[data-v-a4048df1]:hover{color:var(--color-text);background:var(--color-background-soft)}.modal-body[data-v-a4048df1]{padding:1.25rem;overflow-y:auto}.form-group[data-v-a4048df1]{margin-bottom:1.25rem}.form-group label[data-v-a4048df1]{display:block;margin-bottom:.5rem;font-weight:500;font-size:.875rem;color:var(--color-text)}.label-hint[data-v-a4048df1]{font-weight:400;color:var(--color-text-soft);font-size:.8125rem}.form-group input[type=text][data-v-a4048df1],.form-group input[type=url][data-v-a4048df1],.form-group input[type=password][data-v-a4048df1],.form-group input[type=number][data-v-a4048df1]{width:100%;padding:.5rem .75rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:.25rem;color:var(--color-text);font-size:.875rem}.form-group input[data-v-a4048df1]:focus{outline:none;border-color:var(--color-primary)}.token-input-wrapper[data-v-a4048df1]{display:flex;gap:.5rem}.token-input-wrapper input[data-v-a4048df1]{flex:1}.toggle-visibility-btn[data-v-a4048df1]{padding:.5rem 1rem;background:var(--color-background);border:1px solid var(--color-border);border-radius:.25rem;color:var(--color-text);font-size:.8125rem;cursor:pointer;white-space:nowrap}.toggle-visibility-btn[data-v-a4048df1]:hover{background:var(--color-background-soft)}.expandable-section[data-v-a4048df1]{margin-bottom:1.25rem;border:1px solid var(--color-border);border-radius:.25rem}.section-header[data-v-a4048df1]{padding:.75rem 1rem;background:var(--color-background-soft);cursor:pointer;-webkit-user-select:none;user-select:none;font-weight:500;font-size:.875rem;color:var(--color-text)}.section-header[data-v-a4048df1]:hover{background:var(--color-background-mute)}.section-content[data-v-a4048df1]{padding:1rem}.env-vars-list[data-v-a4048df1]{display:flex;flex-direction:column;gap:.5rem}.env-var-row[data-v-a4048df1]{display:flex;gap:.5rem}.env-key[data-v-a4048df1],.env-value[data-v-a4048df1]{padding:.5rem .75rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:.25rem;color:var(--color-text);font-size:.875rem;font-family:var(--font-mono)}.env-key[data-v-a4048df1]{flex:0 0 150px}.env-value[data-v-a4048df1]{flex:1}.env-key[data-v-a4048df1]:focus,.env-value[data-v-a4048df1]:focus{outline:none;border-color:var(--color-primary)}.remove-env-btn[data-v-a4048df1]{background:none;border:1px solid var(--color-border);color:var(--color-text-soft);font-size:1.25rem;cursor:pointer;padding:.25rem .5rem;line-height:1;border-radius:.25rem}.remove-env-btn[data-v-a4048df1]:hover{color:var(--color-danger, #ef4444);border-color:var(--color-danger, #ef4444)}.error-message[data-v-a4048df1]{margin-top:1rem;padding:.75rem;background:#ef44441a;border:1px solid rgba(239,68,68,.3);border-radius:.25rem;color:var(--color-danger, #ef4444);font-size:.875rem}.test-result[data-v-a4048df1]{margin-top:1rem;padding:.75rem;border-radius:.25rem;font-size:.875rem}.test-result.success[data-v-a4048df1]{background:#22c55e1a;border:1px solid rgba(34,197,94,.3);color:var(--color-success, #22c55e)}.test-result.failure[data-v-a4048df1]{background:#ef44441a;border:1px solid rgba(239,68,68,.3);color:var(--color-danger, #ef4444)}.test-result-header[data-v-a4048df1]{display:flex;align-items:center;gap:.5rem;font-weight:500}.test-icon[data-v-a4048df1]{font-size:1.125rem}.test-details[data-v-a4048df1]{margin-top:.5rem;padding-top:.5rem;border-top:1px solid currentColor;opacity:.8}.test-detail[data-v-a4048df1]{margin-top:.25rem}.test-detail code[data-v-a4048df1]{font-family:var(--font-mono);font-size:.8125rem}.modal-footer[data-v-a4048df1]{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-top:1px solid var(--color-border);background:var(--color-background-soft)}.footer-actions[data-v-a4048df1]{display:flex;gap:.75rem}.btn[data-v-a4048df1]{padding:.5rem 1rem;border-radius:.25rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .15s}.btn[data-v-a4048df1]:disabled{opacity:.5;cursor:not-allowed}.btn-sm[data-v-a4048df1]{padding:.375rem .75rem;font-size:.8125rem}.btn-secondary[data-v-a4048df1]{background:var(--color-background);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[data-v-a4048df1]:hover:not(:disabled){border-color:var(--color-primary);background:var(--color-background-soft)}.btn-primary[data-v-a4048df1]{background:var(--color-primary);border:1px solid var(--color-primary);color:#fff}.btn-primary[data-v-a4048df1]:hover:not(:disabled){filter:brightness(1.1)}.page-header[data-v-0bdb2dfd]{display:flex;justify-content:flex-end;align-items:center;margin-bottom:.5rem}.page-description[data-v-0bdb2dfd]{color:var(--color-text-soft);margin:0 0 1.5rem;font-size:.875rem;line-height:1.5}.skeleton-list[data-v-0bdb2dfd]{display:flex;flex-direction:column;gap:1rem}.error-message[data-v-0bdb2dfd]{color:var(--color-error);padding:1rem;background-color:#f851491a;border-radius:var(--border-radius)}.provider-list[data-v-0bdb2dfd]{display:flex;flex-direction:column;gap:1rem}.provider-card[data-v-0bdb2dfd]{padding:1.25rem}.provider-header[data-v-0bdb2dfd]{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:.75rem;gap:1rem}.provider-title h3[data-v-0bdb2dfd]{margin:0;font-size:1rem;display:flex;align-items:center;gap:.5rem}.built-in-badge[data-v-0bdb2dfd]{display:inline-block;padding:.125rem .5rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:.25rem;font-size:.75rem;font-weight:500;text-transform:uppercase;letter-spacing:.025em;color:var(--color-text-soft)}.provider-actions[data-v-0bdb2dfd]{display:flex;gap:.5rem;flex-shrink:0}.provider-details[data-v-0bdb2dfd]{display:flex;flex-direction:column;gap:.5rem}.provider-detail[data-v-0bdb2dfd]{display:flex;gap:.5rem;font-size:.875rem}.detail-label[data-v-0bdb2dfd]{color:var(--color-text-soft);font-weight:500}.detail-value[data-v-0bdb2dfd]{color:var(--color-text);font-family:var(--font-mono);font-size:.8125rem}.btn-sm[data-v-0bdb2dfd]{padding:.375rem .75rem;font-size:.8125rem}.btn-danger[data-v-0bdb2dfd]{background:var(--color-danger, #ef4444);border:1px solid var(--color-danger, #ef4444);color:#fff}.btn-danger[data-v-0bdb2dfd]:hover:not(:disabled){filter:brightness(1.1)}.modal-overlay[data-v-0bdb2dfd]{position:fixed;top:0;left:0;right:0;bottom:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:1000}.modal[data-v-0bdb2dfd]{background:var(--color-background);border:1px solid var(--color-border);border-radius:.5rem;width:100%;max-width:450px;max-height:90vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 8px 32px #0000004d}.confirm-modal[data-v-0bdb2dfd]{max-width:400px}.modal-header[data-v-0bdb2dfd]{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid var(--color-border)}.modal-header h2[data-v-0bdb2dfd]{margin:0;font-size:1.125rem;font-weight:600}.close-btn[data-v-0bdb2dfd]{background:none;border:none;color:var(--color-text-soft);font-size:1.5rem;cursor:pointer;padding:.25rem;line-height:1;border-radius:.25rem}.close-btn[data-v-0bdb2dfd]:hover{color:var(--color-text);background:var(--color-background-soft)}.modal-body[data-v-0bdb2dfd]{padding:1.25rem}.modal-body p[data-v-0bdb2dfd]{margin:0 0 .75rem}.warning-text[data-v-0bdb2dfd]{color:var(--color-warning, #f59e0b);font-size:.875rem;font-weight:500}.modal-footer[data-v-0bdb2dfd]{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.25rem;border-top:1px solid var(--color-border);background:var(--color-background-soft)}
@@ -1 +0,0 @@
1
- .resizable-textarea-wrapper[data-v-4771ec67]{position:relative;display:flex;flex-direction:column}.resizable-textarea-wrapper textarea[data-v-4771ec67]{resize:none;padding-bottom:24px;width:100%;box-sizing:border-box}.resize-handle[data-v-4771ec67]{position:absolute;bottom:4px;right:4px;width:24px;height:24px;cursor:ns-resize;display:flex;align-items:center;justify-content:center;color:var(--color-text-soft, #6b7280);opacity:.5;transition:opacity .15s;touch-action:none;user-select:none;-webkit-user-select:none;border-radius:4px}.resize-handle[data-v-4771ec67]:hover,.resize-handle[data-v-4771ec67]:active{opacity:1;background:#ffffff0d}@media (pointer: coarse){.resize-handle[data-v-4771ec67]{width:32px;height:32px;bottom:2px;right:2px;opacity:.6}}
@@ -1 +0,0 @@
1
- import{_ as j,o as H,a as t,c as o,b as e,t as S,i as c,j as k,n as R,u as q,e as W,x as y,g as z,d as D,w as G,f as K,G as C,F as E,r as J,E as L}from"./index-D1Lg5reX.js";import{u as Q}from"./sessions-CoRS-wuR.js";import{u as X}from"./commandButtons-D_-wR8zJ.js";import{u as Y,P as Z,S as _,B as ss,g as es,f as ts,b as ns}from"./SessionLogStream-NR-AS676.js";import{a as os}from"./ApiClient-CcqJ-GAv.js";const as={key:0,class:"session-summary"},is={class:"summary-text"},rs={class:"summary-meta"},ls={key:0,class:"summary-files"},us={key:1,class:"session-summary session-summary-loading"},ds={key:2,class:"session-summary session-summary-error"},cs={__name:"SessionCardSummary",props:{sessionId:{type:String,required:!0},summary:{type:Object,default:null},summaryLoading:{type:Boolean,default:!1},summaryError:{type:Boolean,default:!1}},emits:["retrySummary"],setup(s){const g=s,m=R(0);return H(async()=>{var f,l;try{const u=await os.getSessionFilesCount(g.sessionId);m.value=u.count||0}catch(u){console.warn("Failed to fetch files count:",u),(l=(f=g.summary)==null?void 0:f.filesModified)!=null&&l.length&&(m.value=g.summary.filesModified.length)}}),(f,l)=>s.summary?(t(),o("div",as,[e("p",is,S(s.summary.shortSummary),1),e("div",rs,[m.value>0?(t(),o("span",ls,S(m.value)+" "+S(m.value===1?"file":"files")+" modified ",1)):c("",!0)])])):s.summaryLoading?(t(),o("div",us,[...l[1]||(l[1]=[e("span",{class:"loading-spinner-small"},null,-1),e("span",null,"Loading summary...",-1)])])):s.summaryError?(t(),o("div",ds,[l[2]||(l[2]=e("span",{class:"error-icon"},"!",-1)),l[3]||(l[3]=e("span",null,"Summary unavailable",-1)),e("button",{class:"retry-btn",onClick:l[0]||(l[0]=k(u=>f.$emit("retrySummary"),["prevent"]))}," Retry ")])):c("",!0)}},ms=j(cs,[["__scopeId","data-v-a9b445b6"]]);function hs(s){return new Date(s).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}const vs={class:"session-header-actions"},ys={class:"session-date"},fs={key:0,class:"archive-actions"},ws=["title"],gs={key:0,xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},ks={key:1,xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},Ss={__name:"SessionCardHeaderActions",props:{dateToShow:{type:String,default:null},isChild:{type:Boolean,default:!1},isOnBoard:{type:Boolean,default:!1},kanbanEnabled:{type:Boolean,default:!0},showArchive:{type:Boolean,default:!1},showUnarchive:{type:Boolean,default:!1},sessionStatus:{type:String,default:""},starred:{type:Boolean,default:!1}},emits:["archive","unarchive","star","addToBoard"],setup(s,{emit:g}){const m=s,f=g,l=y(()=>m.sessionStatus!=="running"&&m.sessionStatus!=="starting"),u=()=>{f("archive")},i=()=>{confirm("Restore this session to active?")&&f("unarchive")};return(b,r)=>(t(),o("div",vs,[e("div",ys,S(q(hs)(s.dateToShow)),1),s.isChild?c("",!0):(t(),o("div",fs,[s.kanbanEnabled&&!s.isOnBoard?(t(),o("button",{key:0,class:"add-to-board-btn",title:"Add to kanban board",onClick:r[0]||(r[0]=k(B=>b.$emit("addToBoard"),["stop","prevent"]))},[...r[2]||(r[2]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2",ry:"2"}),e("line",{x1:"9",y1:"3",x2:"9",y2:"21"}),e("line",{x1:"15",y1:"3",x2:"15",y2:"21"})],-1)])])):c("",!0),s.showArchive&&l.value?(t(),o("button",{key:1,class:"archive-btn",title:"Archive session",onClick:k(u,["stop","prevent"])},[...r[3]||(r[3]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e("rect",{x:"2",y:"4",width:"20",height:"5",rx:"1",ry:"1"}),e("path",{d:"M4 9v9a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9"}),e("path",{d:"M10 13h4"})],-1)])])):c("",!0),s.showUnarchive?(t(),o("button",{key:2,class:"archive-btn",title:"Unarchive session",onClick:k(i,["stop","prevent"])},[...r[4]||(r[4]=[W('<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-c4a198a4><rect x="2" y="4" width="20" height="5" rx="1" ry="1" data-v-c4a198a4></rect><path d="M4 9v9a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9" data-v-c4a198a4></path><path d="M12 11v6" data-v-c4a198a4></path><path d="M9 14l3-3 3 3" data-v-c4a198a4></path></svg>',1)])])):c("",!0),e("button",{class:"star-btn star-btn-mobile",title:s.starred?"Unstar session":"Star session",onClick:r[1]||(r[1]=k(B=>b.$emit("star"),["stop","prevent"]))},[s.starred?(t(),o("svg",gs,[...r[5]||(r[5]=[e("polygon",{points:"12 2 15.09 10.26 24 10.5 17.18 16.34 19.34 24.5 12 18.92 4.66 24.5 6.82 16.34 0 10.5 8.91 10.26 12 2"},null,-1)])])):(t(),o("svg",ks,[...r[6]||(r[6]=[e("polygon",{points:"12 2 15.09 10.26 24 10.5 17.18 16.34 19.34 24.5 12 18.92 4.66 24.5 6.82 16.34 0 10.5 8.91 10.26 12 2"},null,-1)])]))],8,ws)]))]))}},bs=j(Ss,[["__scopeId","data-v-c4a198a4"]]),ps={class:"workflow-card-wrapper"},Cs={class:"session-header-row"},Bs=["title"],xs={key:0,xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},$s={key:1,xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},js={class:"session-info"},As={class:"session-name"},Is={class:"session-meta"},Ms={key:0,class:"status-badge status-running"},Ts={key:1,class:"status-badge status-scheduled"},Us=["title"],Ds=["title","aria-label","onClick","innerHTML"],Es={key:0,class:"session-project"},Ls={class:"project-name"},Rs={__name:"SessionCard",props:{session:{type:Object,required:!0},showSummary:{type:Boolean,default:!1},showProject:{type:Boolean,default:!1},summary:{type:Object,default:null},summaryLoading:{type:Boolean,default:!1},summaryError:{type:Boolean,default:!1},isChild:{type:Boolean,default:!1},showArchive:{type:Boolean,default:!1},showUnarchive:{type:Boolean,default:!1},prUrl:{type:String,default:null},prSummary:{type:Object,default:null},kanbanEnabled:{type:Boolean,default:!0}},emits:["retrySummary","archive","unarchive","addToBoard"],setup(s,{emit:g}){const m=Q(),f=X(),l=Y(),u=R(null),i=s,b=g,r=y(()=>l.isSessionOnBoard(i.session.id)),B=()=>{b("addToBoard",i.session)},O=y(()=>i.session.lastActivityAt||i.session.updatedAt||i.session.createdAt);function x(){return m.getWorkflowSessions(i.session.id)}const A=y(()=>{const d=x(),n=["running","starting"];let h=0,a=0;for(const w of d)n.includes(w.status)&&h++,w.status==="scheduled"&&a++;return{runningCount:h,scheduledCount:a,totalCount:d.length,effectiveStatus:i.session.status}}),I=y(()=>{const d=["running","starting"];return x().filter(n=>d.includes(n.status)).map(n=>n.id)}),N=y(()=>I.value.length>0),p=y(()=>{const d=Date.now();if(i.session.status==="scheduled"&&i.session.scheduledAt)return i.session.scheduledAt;const n=x();let h=null;for(const a of n)if(a.id!==i.session.id&&a.status==="scheduled"&&a.scheduledAt){const w=new Date(a.scheduledAt).getTime();w>=d&&(h===null||w<h)&&(h=w)}return h}),M=y(()=>p.value?ts(new Date(p.value),{addSuffix:!0}):null),V=y(()=>p.value?ns(new Date(p.value),"MMM d, h:mm a"):null),F=y(()=>{const d=i.session.projectId;if(!d)return[];m.commandRunVersion;const n=f.getButtonsByProjectId(d),h=Object.fromEntries(n.map(v=>[v.id,v])),a=i.session.id,$=m.sessions.find(v=>v.id===a);return(($==null?void 0:$.latestCommandRuns)||i.session.latestCommandRuns||[]).filter(v=>{var U;return(U=h[v.buttonId])==null?void 0:U.showOnList}).map(v=>({buttonId:v.buttonId,label:h[v.buttonId].label,command:h[v.buttonId].command,status:v.status,latestRun:v}))}),P=d=>es(d),T=()=>{m.toggleSessionStar(i.session.id)};return(d,n)=>{const h=z("router-link");return t(),o(E,null,[e("div",ps,[D(h,{to:`/sessions/${s.session.id}`,class:L(["session-card card",{"is-child":s.isChild}])},{default:G(()=>[e("div",Cs,[s.isChild?c("",!0):(t(),o("button",{key:0,class:"star-btn",title:s.session.starred?"Unstar session":"Star session",onClick:k(T,["stop","prevent"])},[s.session.starred?(t(),o("svg",xs,[...n[4]||(n[4]=[e("polygon",{points:"12 2 15.09 10.26 24 10.5 17.18 16.34 19.34 24.5 12 18.92 4.66 24.5 6.82 16.34 0 10.5 8.91 10.26 12 2"},null,-1)])])):(t(),o("svg",$s,[...n[5]||(n[5]=[e("polygon",{points:"12 2 15.09 10.26 24 10.5 17.18 16.34 19.34 24.5 12 18.92 4.66 24.5 6.82 16.34 0 10.5 8.91 10.26 12 2"},null,-1)])]))],8,Bs)),e("div",js,[e("h3",As,S(s.session.name),1),e("p",Is,[A.value.runningCount>0?(t(),o("span",Ms," ● running ")):c("",!0),A.value.scheduledCount>0?(t(),o("span",Ts,[...n[6]||(n[6]=[e("svg",{class:"schedule-icon-inline",xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",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:"10"}),e("polyline",{points:"12 6 12 12 16 14"})],-1),K(" scheduled ",-1)])])):c("",!0),M.value?(t(),o("span",{key:2,class:"scheduled-time",title:V.value},S(M.value),9,Us)):c("",!0),s.prUrl&&!s.isChild?(t(),C(Z,{key:3,"pr-url":s.prUrl,summary:s.prSummary,"data-testid":"session-card-pr-indicators"},null,8,["pr-url","summary"])):c("",!0),(t(!0),o(E,null,J(F.value,a=>(t(),o("span",{key:a.buttonId,class:L(["button-status-indicator",`button-status-${a.status}`]),title:a.label,"aria-label":a.status,onClick:k(w=>u.value=a,["stop","prevent"]),innerHTML:P(a.status)},null,10,Ds))),128))]),s.showProject&&s.session.projectName?(t(),o("p",Es,[e("span",Ls,S(s.session.projectName),1)])):c("",!0)]),D(bs,{"date-to-show":O.value,"is-child":s.isChild,"is-on-board":r.value,"kanban-enabled":s.kanbanEnabled,"show-archive":s.showArchive,"show-unarchive":s.showUnarchive,"session-status":s.session.status,starred:!!s.session.starred,onArchive:n[0]||(n[0]=a=>d.$emit("archive",s.session.id)),onUnarchive:n[1]||(n[1]=a=>d.$emit("unarchive",s.session.id)),onStar:T,onAddToBoard:B},null,8,["date-to-show","is-child","is-on-board","kanban-enabled","show-archive","show-unarchive","session-status","starred"])]),s.showSummary?(t(),C(ms,{key:0,"session-id":s.session.id,summary:s.summary,"summary-loading":s.summaryLoading,"summary-error":s.summaryError,onRetrySummary:n[2]||(n[2]=a=>d.$emit("retrySummary",s.session.id))},null,8,["session-id","summary","summary-loading","summary-error"])):c("",!0),N.value?(t(),C(_,{key:1,"session-ids":I.value,"data-testid":"session-log-stream"},null,8,["session-ids"])):c("",!0)]),_:1},8,["to","class"])]),u.value?(t(),C(ss,{key:0,button:{id:u.value.buttonId,label:u.value.label,command:u.value.command},"latest-run":u.value.latestRun,"is-open":!!u.value,"session-id":s.session.id,onClose:n[3]||(n[3]=a=>u.value=null)},null,8,["button","latest-run","is-open","session-id"])):c("",!0)],64)}}},qs=j(Rs,[["__scopeId","data-v-01177dae"]]);export{qs as S};
@@ -1 +0,0 @@
1
- .session-summary[data-v-a9b445b6]{padding-top:.5rem;border-top:1px solid var(--color-border)}.session-summary-loading[data-v-a9b445b6],.session-summary-error[data-v-a9b445b6]{display:flex;align-items:center;gap:.5rem;color:var(--color-text-soft);font-size:.75rem}.error-icon[data-v-a9b445b6]{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;background-color:var(--color-warning);color:#fff;border-radius:50%;font-size:.625rem;font-weight:700}.retry-btn[data-v-a9b445b6]{background:none;border:none;color:var(--color-primary);font-size:.75rem;cursor:pointer;padding:0;margin-left:auto}.retry-btn[data-v-a9b445b6]:hover{text-decoration:underline}.summary-text[data-v-a9b445b6]{margin:0 0 .5rem;font-size:.875rem;color:var(--color-text-soft);line-height:1.4;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.summary-meta[data-v-a9b445b6]{display:flex;gap:1rem;font-size:.75rem;color:var(--color-text-soft)}.summary-files[data-v-a9b445b6]{opacity:.8}.loading-spinner-small[data-v-a9b445b6]{width:12px;height:12px;border:2px solid var(--color-border);border-top-color:var(--color-primary);border-radius:50%;animation:spin-a9b445b6 1s linear infinite}@keyframes spin-a9b445b6{to{transform:rotate(360deg)}}.session-header-actions[data-v-c4a198a4]{display:flex;flex-direction:column;align-items:flex-end;gap:.5rem;flex-shrink:0}.session-date[data-v-c4a198a4]{font-size:.875rem;color:var(--color-text-soft)}.archive-actions[data-v-c4a198a4]{display:flex;gap:.25rem}.archive-btn[data-v-c4a198a4]{background:none;border:none;padding:.25rem;cursor:pointer;color:var(--color-text-soft);border-radius:var(--border-radius);transition:color .15s,background-color .15s;display:flex;align-items:center;justify-content:center}.archive-btn[data-v-c4a198a4]:hover{color:var(--color-primary);background-color:var(--color-bg-soft)}.add-to-board-btn[data-v-c4a198a4]{background:none;border:none;padding:.25rem;cursor:pointer;color:var(--color-text-soft);border-radius:var(--border-radius);transition:color .15s,background-color .15s;display:flex;align-items:center;justify-content:center}.add-to-board-btn[data-v-c4a198a4]:hover{color:var(--color-primary);background-color:var(--color-bg-soft)}.star-btn[data-v-c4a198a4]{background:none;border:none;padding:.25rem;cursor:pointer;color:var(--color-text-soft);border-radius:var(--border-radius);transition:color .15s,background-color .15s;display:flex;align-items:center;justify-content:center}.star-btn[data-v-c4a198a4]:hover{color:var(--color-primary);background-color:var(--color-bg-soft)}.star-btn-mobile[data-v-c4a198a4]{display:none}@media (max-width: 480px){.archive-actions[data-v-c4a198a4]{display:flex;align-items:center;gap:.25rem}.star-btn-mobile[data-v-c4a198a4]{display:flex!important}.session-date[data-v-c4a198a4]{font-size:.75rem}.session-header-actions[data-v-c4a198a4]{flex-direction:row;align-items:center;width:100%;justify-content:space-between}}.workflow-card-wrapper[data-v-01177dae]{display:flex;flex-direction:column}.session-card[data-v-01177dae]{display:flex;flex-direction:column;gap:.75rem;color:var(--color-text);text-decoration:none;transition:border-color .2s}.session-card[data-v-01177dae]:hover{border-color:var(--color-primary);text-decoration:none}.session-card.is-child[data-v-01177dae]{margin-left:1rem;opacity:.9;background:var(--color-background-secondary, rgba(0, 0, 0, .2))}.session-header-row[data-v-01177dae]{display:flex;gap:.75rem;justify-content:space-between;align-items:flex-start}.session-info[data-v-01177dae]{flex:1;min-width:0}.session-name[data-v-01177dae]{margin:0 0 .5rem;font-size:1rem;overflow:auto;word-break:break-word;line-height:1.4}.session-meta[data-v-01177dae]{margin:0;display:flex;align-items:center;gap:.75rem}.session-project[data-v-01177dae]{margin:.5rem 0 0}.project-name[data-v-01177dae]{font-size:.75rem;color:var(--color-text-soft)}.star-btn[data-v-01177dae]{background:none;border:none;padding:.25rem;cursor:pointer;color:var(--color-text-soft);border-radius:var(--border-radius);transition:color .15s,background-color .15s;display:flex;align-items:center;justify-content:center}.star-btn[data-v-01177dae]:hover{color:var(--color-primary);background-color:var(--color-bg-soft)}.schedule-icon-inline[data-v-01177dae]{display:inline-block;vertical-align:middle;margin-right:.25rem}.scheduled-time[data-v-01177dae]{font-size:.75rem;color:var(--color-text-soft)}.button-status-indicator[data-v-01177dae]{display:inline-flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;border-radius:50%;margin-left:.5rem;cursor:pointer;transition:transform .2s ease,box-shadow .2s ease;border:1px solid transparent}.button-status-indicator[data-v-01177dae] svg{width:.75rem;height:.75rem}.button-status-indicator[data-v-01177dae]:hover{transform:scale(1.15);box-shadow:0 0 8px #fff3}.button-status-running[data-v-01177dae]{background-color:#d299224d;color:#d29922;border-color:#d29922;animation:hourglass-flip-01177dae 2s ease-in-out infinite}.button-status-success[data-v-01177dae]{background-color:#3fb9504d;color:#3fb950;border-color:#3fb950}.button-status-success[data-v-01177dae] svg{animation:pop-in-01177dae .3s ease-out}.button-status-error[data-v-01177dae]{background-color:#f851494d;color:#f85149;border-color:#f85149}.button-status-error[data-v-01177dae] svg{animation:shake-01177dae .4s ease-in-out}.button-status-killed[data-v-01177dae]{background-color:#f851494d;color:#f85149;border-color:#f85149}@keyframes hourglass-flip-01177dae{0%,80%{transform:rotate(0)}90%{transform:rotate(180deg)}to{transform:rotate(180deg)}}@keyframes pop-in-01177dae{0%{transform:scale(0)}70%{transform:scale(1.2)}to{transform:scale(1)}}@keyframes shake-01177dae{0%,to{transform:translate(0)}25%{transform:translate(-2px)}75%{transform:translate(2px)}}@media (max-width: 480px){.session-header-row[data-v-01177dae]{flex-wrap:wrap;gap:.5rem}.session-header-row>.star-btn[data-v-01177dae]{display:none}.session-card[data-v-01177dae]{padding:.75rem;gap:.5rem}.session-meta[data-v-01177dae]{flex-wrap:wrap;gap:.5rem}.status-badge[data-v-01177dae]{font-size:.7rem}.session-info[data-v-01177dae]{min-width:0;flex:1 1 100%}.summary-text[data-v-01177dae]{-webkit-line-clamp:3}.session-card.is-child[data-v-01177dae]{margin-left:.5rem}}
@@ -1 +0,0 @@
1
- import{M as n}from"./ModelSelector-CgpqdZtV.js";import{M as r}from"./SlashCommandWizard-PXipO1yA.js";import{E as m}from"./EffortLevelSelector-HuOPegKI.js";import{_ as p,a,c as i,b as t,d as s,i as u}from"./index-D1Lg5reX.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};
@@ -1 +0,0 @@
1
- .options-row[data-v-cbbbb3d9]{display:flex;flex-wrap:wrap;gap:1.5rem;align-items:flex-start}.thinking-toggle[data-v-cbbbb3d9]{display:flex;align-items:center;gap:.5rem}.toggle-label[data-v-cbbbb3d9]{font-size:.875rem;color:var(--color-text-soft)}.mode-selector-wrapper[data-v-cbbbb3d9],.model-selector-wrapper[data-v-cbbbb3d9],.effort-selector-wrapper[data-v-cbbbb3d9],.field-with-badge[data-v-cbbbb3d9]{display:flex;align-items:center;gap:.5rem}.toggle-switch[data-v-cbbbb3d9]{position:relative;display:inline-block;width:40px;height:22px}.toggle-switch input[data-v-cbbbb3d9]{opacity:0;width:0;height:0}.toggle-slider[data-v-cbbbb3d9]{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:var(--color-background-mute);border:1px solid var(--color-border);border-radius:22px;transition:.2s}.toggle-slider[data-v-cbbbb3d9]:before{position:absolute;content:"";height:16px;width:16px;left:2px;bottom:2px;background-color:var(--color-text-soft);border-radius:50%;transition:.2s}.toggle-switch input:checked+.toggle-slider[data-v-cbbbb3d9]{background-color:var(--color-primary);border-color:var(--color-primary)}.toggle-switch input:checked+.toggle-slider[data-v-cbbbb3d9]:before{transform:translate(18px);background-color:#fff}@media (max-width: 480px){.options-row[data-v-cbbbb3d9]{display:grid;grid-template-columns:1fr 1fr;gap:.75rem}.options-row[data-v-cbbbb3d9]>:last-child{grid-column:1 / -1}}
@@ -1 +0,0 @@
1
- import{l as me,y as Ae,x as V,z as Ie,A as Be,n as A,B as Qe,C as Xe,_ as Ce,a as t,c as o,b as e,F as X,r as Z,u as v,E as ie,t as F,i as C,G as oe,k as Fe,g as Me,d as Q,w as ye,o as Pe,m as G,v as ke,p as Ee,f as de,j as ce,h as Ke,e as Ue,H as xe,q as Le,I as Ze,J as Ve,s as et}from"./index-D1Lg5reX.js";import{u as De}from"./projects-CMJJca64.js";import{u as we}from"./sessions-CoRS-wuR.js";import{u as Re,a as Ge,f as tt,b as st}from"./SessionLogStream-NR-AS676.js";import{a as Oe}from"./ApiClient-CcqJ-GAv.js";import{u as He}from"./commandButtons-D_-wR8zJ.js";import{S as qe}from"./SessionCard-C7vFzR16.js";import{S as nt,M as ot,A as at}from"./ArchiveConfirmModal-BHqbCCX2.js";import{u as We}from"./EffortLevelSelector-HuOPegKI.js";import{u as lt}from"./providers-BCtNZWYw.js";import{M as rt}from"./ModelSelector-CgpqdZtV.js";import{I as ze}from"./InterpolationHelp-bG_y10VY.js";import{R as it}from"./ResizableTextarea-C2s6_7X9.js";import{S as dt}from"./SessionFormOptions-3LfqiLiR.js";import{S as ut,a as ct}from"./SlashCommandWizard-PXipO1yA.js";import"./settings-BN_W4nwV.js";function mt(){const u=Ae({}),c=Ae({}),m=Ae({});async function p(r){const a=r.filter(g=>!u[g.id]&&!c[g.id]).map(g=>g.id);if(a.length!==0){for(const g of a)c[g]=!0,m[g]=!1;try{const g=await Oe.getSessionSummariesBatch(a);for(const i of a)g[i]&&(u[i]=g[i]),c[i]=!1}catch(g){console.warn("Failed to fetch summaries batch:",g.message);for(const i of a)m[i]=!0,c[i]=!1}}}async function l(r){var a;c[r]=!0,m[r]=!1;try{const g=await Oe.getSessionSummary(r);g&&(u[r]=g)}catch(g){((a=g.response)==null?void 0:a.status)!==404&&(console.warn(`Failed to fetch summary for session ${r}:`,g.message),m[r]=!0)}finally{c[r]=!1}}async function E(r){m[r]=!1,await l(r)}function R(r,a){u[r]=a,c[r]=!1,m[r]=!1}function _(r){delete u[r],delete c[r],delete m[r]}function S(r,a=400){let g=null;const i=me(r,()=>{clearTimeout(g),g=setTimeout(()=>{const j=r();p(j)},a)});return()=>{clearTimeout(g),i()}}return{summaries:u,loadingSummaries:c,summaryErrors:m,fetchSummariesBatch:p,fetchSummary:l,retryFetchSummary:E,updateSummary:R,cleanupSummary:_,watchSessionsForSummaries:S}}function Ye(){const u=we();function c(r){u.statusFilter===r?u.setStatusFilter(null):u.setStatusFilter(r)}function m(r){u.starredFilter===r?u.setStarredFilter(null):u.setStarredFilter(r)}function p(){u.starredFilter===null?u.setStarredFilter("starred"):u.starredFilter==="starred"?u.setStarredFilter("unstarred"):u.setStarredFilter(null)}const l=V(()=>u.starredFilter==="starred"?"Showing starred sessions only. Click to filter unstarred.":u.starredFilter==="unstarred"?"Showing unstarred sessions only. Click to show all.":"Showing all sessions. Click to filter by starred.");function E(){u.scheduledFilter===null?u.setScheduledFilter("scheduled"):u.scheduledFilter==="scheduled"?u.setScheduledFilter("not-scheduled"):u.setScheduledFilter(null)}const R=V(()=>u.scheduledFilter==="scheduled"?"Showing workflows with scheduled sessions. Click to filter non-scheduled.":u.scheduledFilter==="not-scheduled"?"Showing workflows without scheduled sessions. Click to show all.":"Showing all workflows. Click to filter by scheduled."),_=V(()=>{let r=u.groupedSessions;u.starredFilter==="starred"?r=r.filter($=>$.parent.starred):u.starredFilter==="unstarred"&&(r=r.filter($=>!$.parent.starred));const a=r.map($=>({group:$,status:u.getWorkflowAggregatedStatus($.parent.id)}));let g=a;u.scheduledFilter&&(g=a.filter(({status:$})=>{const T=$.scheduledCount>0;return u.scheduledFilter==="scheduled"?T:!T}));let i=0,j=0;for(const{status:$}of g)$.effectiveStatus==="running"?i++:j++;return{running:i,idle:j}}),S=V(()=>{let r=u.groupedSessions;return u.statusFilter&&(r=r.filter(a=>{const i=u.getWorkflowAggregatedStatus(a.parent.id).effectiveStatus;return u.statusFilter==="running"&&i==="running"||u.statusFilter==="idle"&&i==="idle"})),u.starredFilter==="starred"?r=r.filter(a=>a.parent.starred):u.starredFilter==="unstarred"&&(r=r.filter(a=>!a.parent.starred)),u.scheduledFilter&&(r=r.filter(a=>{const i=u.getWorkflowAggregatedStatus(a.parent.id).scheduledCount>0;return!!(u.scheduledFilter==="scheduled"&&i||u.scheduledFilter==="not-scheduled"&&!i)})),r});return{toggleFilter:c,toggleStarredFilter:m,toggleStarFilterIcon:p,starFilterTooltip:l,toggleScheduledFilterIcon:E,scheduledFilterTooltip:R,filteredGroupedSessions:S,statusFilterCounts:_}}function pt(u,c){const m=De(),p=we(),l=He(),E=Re(),{fetchSummariesBatch:R,updateSummary:_,cleanupSummary:S}=c,{onReconnect:r}=Ie();function a(f,n,B,b){var ue;const q=l.runs[f],H=p.sessions.find(ae=>ae.id===n),ee=(ue=H==null?void 0:H.latestCommandRuns)==null?void 0:ue.find(ae=>ae.runId===f),te=(q==null?void 0:q.startedAt)||(ee==null?void 0:ee.startedAt)||Date.now();l.runs[f]||(l.runs[f]={runId:f,buttonId:B,sessionId:n,status:"running",output:"",exitCode:null,startedAt:te,outputTruncated:!1}),l.appendOutput(f,b),p.updateSessionCommandRun(n,B,{buttonId:B,status:"running",runId:f,startedAt:te})}function g({runId:f,sessionId:n,buttonId:B,exitCode:b,output:q}){l.runs[f]||(l.runs[f]={runId:f,buttonId:B,sessionId:n,status:"running",output:"",exitCode:null,startedAt:Date.now(),outputTruncated:!1}),l.completeRun(f,b,q);const J=b===0?"success":"error";p.updateSessionCommandRun(n,B,{buttonId:B,status:J,exitCode:b,runId:f,completedAt:Date.now()})}function i(f,n,B,b){l.runs[f]||(l.runs[f]={runId:f,buttonId:B,sessionId:n,status:"running",output:"",exitCode:null,startedAt:Date.now(),outputTruncated:!1}),l.errorRun(f,b),p.updateSessionCommandRun(n,B,{buttonId:B,status:"error",runId:f,completedAt:Date.now()})}function j(f,n,B){const{onSessionCreated:b,onSessionUpdated:q,onSessionDeleted:J,onSessionSummaryUpdated:H,onCommandRunOutput:ee,onCommandRunComplete:te,onCommandRunError:ue,onCommandRunDeleted:ae,onKanbanBoardUpdated:pe,onKanbanCardMoved:le,onKanbanCardAdded:ve,onKanbanCardRemoved:fe}=f,D=[];return D.push(b(P=>{n.sessionsStore.addSessionToList(P)})),D.push(q(P=>{n.sessionsStore.updateSession(P)})),D.push(J(P=>{n.sessionsStore.removeSessionFromList(P),B.cleanupSummary(P)})),D.push(H((P,d)=>{B.updateSummary(P,d)})),D.push(ee(a)),D.push(te(g)),D.push(ue(i)),D.push(ae((P,d,s)=>{n.commandButtonsStore.clearRun(P),n.sessionsStore.removeSessionCommandRun(d,s)})),D.push(pe(P=>{n.kanbanStore.handleBoardUpdated(P)})),D.push(le((P,d,s,y)=>{n.kanbanStore.handleCardMoved(P,d,s,y)})),D.push(ve((P,d)=>{n.kanbanStore.handleCardAdded(P,d)})),D.push(fe((P,d)=>{n.kanbanStore.handleCardRemoved(P,d)})),D}const $=[];let T=null;const h=A(!1);let I=0;const Y=3e4,O=async()=>{if(document.visibilityState!=="visible")return;const f=Date.now();if(f-I<Y)return;I=f;const n=u.value;n&&(await p.fetchSessions(n,{silent:!0}),R(p.sessions))};return document.addEventListener("visibilitychange",O),me(u,async f=>{if(!f)return;h.value=!1,$.forEach(D=>D()),$.length=0,T&&(T(),T=null),await m.fetchProject(f),await p.fetchSessions(f),await l.fetchButtons(f),R(p.sessions),I=Date.now();const{subscribe:n,unsubscribe:B,onSessionCreated:b,onSessionUpdated:q,onSessionDeleted:J,onSessionSummaryUpdated:H,onCommandRunOutput:ee,onCommandRunComplete:te,onCommandRunError:ue,onCommandRunDeleted:ae,onKanbanBoardUpdated:pe,onKanbanCardMoved:le,onKanbanCardAdded:ve,onKanbanCardRemoved:fe}=Qe(f);T=B,n(),$.push(...j({onSessionCreated:b,onSessionUpdated:q,onSessionDeleted:J,onSessionSummaryUpdated:H,onCommandRunOutput:ee,onCommandRunComplete:te,onCommandRunError:ue,onCommandRunDeleted:ae,onKanbanBoardUpdated:pe,onKanbanCardMoved:le,onKanbanCardAdded:ve,onKanbanCardRemoved:fe},{sessionsStore:p,commandButtonsStore:l,kanbanStore:E},{updateSummary:_,cleanupSummary:S})),$.push(r(async()=>{const D=u.value;D&&(I=Date.now(),await p.fetchSessions(D,{silent:!0}),R(p.sessions))}))},{immediate:!0}),Be(()=>{$.forEach(f=>f()),T&&T(),document.removeEventListener("visibilitychange",O)}),{archivedLoaded:h}}function vt(){const u=we(),c=Ge(),m=A({}),p={},l=new Map,E=4;function R(i,j=0){fetch(`/api/sessions/${i}/streaming-state`).then($=>$.ok?$.json():null).then($=>{var T;if($&&((T=$.workLogs)!=null&&T.length||$.partialText||$.thinking)){c.hydrateSessionState(i,$);const h=l.get(i);h&&(clearTimeout(h.timeout),l.delete(i))}else _(i,j)}).catch(()=>{_(i,j)})}function _(i,j=0){if(j>=E||!m.value[i])return;const $=u.sessions.find(I=>I.id===i);if(!$||!["running","starting"].includes($.status))return;const T=1500*Math.pow(2,j),h=setTimeout(()=>{l.delete(i),R(i,j+1)},T);l.set(i,{count:j,timeout:h})}function S(i){if(m.value[i])return;const j=Xe(i),$=[];$.push(j.onWorkLog(T=>{c.addSessionWorkLog(i,T)})),$.push(j.onPartial(T=>{T&&c.setSessionPartialText(i,T)})),$.push(j.onThinkingPartial(T=>{T&&c.setPartialThinking(T,i)})),$.push(j.onChangesUpdate(T=>{c.setSessionFileCount(i,T)})),$.push(j.onStatus(T=>{["running","starting"].includes(T)?p[i]&&(clearTimeout(p[i]),delete p[i]):p[i]=setTimeout(()=>{delete p[i],c.clearSessionEphemeralState(i)},2e3)})),j.subscribe(),m.value[i]={subscription:j,cleanup:()=>{$.forEach(T=>T&&T()),j.unsubscribe()}},R(i)}function r(i){const j=m.value[i];j&&(j.cleanup(),delete m.value[i]),p[i]&&(clearTimeout(p[i]),delete p[i]);const $=l.get(i);$&&(clearTimeout($.timeout),l.delete(i))}me(()=>u.sessions.filter(i=>["running","starting"].includes(i.status)).map(i=>i.id),(i,j=[])=>{const $=i.filter(h=>!j.includes(h)),T=j.filter(h=>!i.includes(h));$.forEach(h=>S(h)),T.forEach(h=>r(h))},{immediate:!0});const{onReconnect:a}=Ie(),g=a(()=>{for(const i of Object.keys(m.value))R(i)});return Be(()=>{Object.keys(m.value).forEach(i=>r(i)),g()}),{activeSubscriptions:m}}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"},Ct={key:2,class:"star-icon"},wt=["title"],Et={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(u){const c=we(),{toggleFilter:m,toggleStarFilterIcon:p,starFilterTooltip:l,toggleScheduledFilterIcon:E,scheduledFilterTooltip:R,statusFilterCounts:_}=Ye();return(S,r)=>(t(),o("div",ft,[e("div",ht,[u.showStatusFilters?(t(),o(X,{key:0},Z(["running","idle"],a=>e("button",{key:a,class:ie(["filter-btn",{active:v(c).statusFilter===a,"filter-btn-empty":v(_)[a]===0}]),"aria-label":`${a} (${v(_)[a]})`,onClick:g=>v(m)(a)},[e("span",gt,F(a),1),e("span",yt,F(v(_)[a]),1)],10,bt)),64)):C("",!0),e("button",{class:ie(["filter-btn star-btn",{"star-filter-active":v(c).starredFilter==="starred","star-filter-unstarred":v(c).starredFilter==="unstarred","star-filter-all":v(c).starredFilter===null}]),title:v(l),onClick:r[0]||(r[0]=(...a)=>v(p)&&v(p)(...a))},[v(c).starredFilter==="starred"?(t(),o("span",St,"⭐")):v(c).starredFilter==="unstarred"?(t(),o("span",$t,"⭐")):(t(),o("span",Ct,"☆"))],10,kt),u.showScheduledFilter?(t(),o("button",{key:1,class:ie(["filter-btn schedule-btn",{"schedule-filter-active":v(c).scheduledFilter==="scheduled","schedule-filter-not-scheduled":v(c).scheduledFilter==="not-scheduled","schedule-filter-all":v(c).scheduledFilter===null}]),title:v(R),onClick:r[1]||(r[1]=(...a)=>v(E)&&v(E)(...a))},[v(c).scheduledFilter==="scheduled"?(t(),o("span",Et,"⏰")):v(c).scheduledFilter==="not-scheduled"?(t(),o("span",_t,"⏰")):(t(),o("span",Tt,"⏰"))],10,wt)):C("",!0)])]))}},Ne=Ce(jt,[["__scopeId","data-v-2c9a63d9"]]),Ft={key:0,class:"skeleton-list"},Mt={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"],Ot={key:0},Bt={key:1},Pt={__name:"ArchivedTabContent",props:{summaries:{type:Object,required:!0},loadingSummaries:{type:Object,required:!0},summaryErrors:{type:Object,required:!0}},emits:["retrySummary","unarchive","loadMore"],setup(u){const c=we(),m=V(()=>{const{total:p,offset:l}=c.archivedPagination;return Math.max(0,p-l)});return(p,l)=>(t(),o("div",null,[v(c).archivedPagination.loading&&v(c).archivedSessions.length===0?(t(),o("div",Ft,[(t(),o(X,null,Z(3,E=>e("div",{key:E,class:"skeleton card",style:{height:"120px"}})),64))])):v(c).error?(t(),o("div",Mt,F(v(c).error),1)):v(c).archivedSessions.length===0?(t(),o("div",Rt,[...l[3]||(l[3]=[e("p",null,"No archived sessions. Archive completed sessions to keep your session list tidy.",-1)])])):(t(),o("div",At,[(t(!0),o(X,null,Z(v(c).archivedSessions,E=>(t(),oe(qe,{key:E.id,session:E,"show-summary":!0,summary:u.summaries[E.id],"summary-loading":u.loadingSummaries[E.id],"summary-error":u.summaryErrors[E.id],"show-unarchive":!0,"kanban-enabled":!1,"pr-url":E.prUrl,"pr-summary":u.summaries[E.id],onRetrySummary:l[0]||(l[0]=R=>p.$emit("retrySummary",R)),onUnarchive:l[1]||(l[1]=R=>p.$emit("unarchive",R))},null,8,["session","summary","summary-loading","summary-error","pr-url","pr-summary"]))),128)),v(c).archivedPagination.hasMore?(t(),o("div",xt,[e("button",{class:"btn btn-secondary",disabled:v(c).archivedPagination.loading,onClick:l[2]||(l[2]=E=>p.$emit("loadMore"))},[v(c).archivedPagination.loading?(t(),o("span",Ot,"Loading...")):(t(),o("span",Bt,"Load More ("+F(m.value)+" remaining)",1))],8,Lt)])):C("",!0)]))]))}},Ut=Ce(Pt,[["__scopeId","data-v-c0906664"]]),Dt={class:"scheduled-session-card card"},Vt={class:"card-header"},Nt={class:"session-info"},It={class:"session-name"},Kt={class:"timing-info"},Gt={class:"timing-item"},Ht={class:"timing-details"},qt={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(u){const c=u,m=we(),p=Fe(),l=A(!1),E=A(!1),R=V(()=>{const a=new Date(c.session.scheduledAt);return tt(a,{addSuffix:!0})}),_=V(()=>{const a=new Date(c.session.scheduledAt);return st(a,"MMM d, h:mm a")});async function S(){if(confirm("Cancel this scheduled session?")){l.value=!0;try{await m.updateSessionFields(c.session.id,{status:"stopped"}),p.success("Session cancelled")}catch(a){console.error("Failed to cancel session:",a),p.error(`Failed to cancel session: ${a.message}`)}finally{l.value=!1}}}function r(){}return(a,g)=>{const i=Me("router-link");return t(),o("div",Dt,[e("div",Vt,[e("div",Nt,[Q(i,{to:`/sessions/${u.session.id}`,class:"session-name-link"},{default:ye(()=>[e("h3",It,F(u.session.name),1)]),_:1},8,["to"])]),g[2]||(g[2]=e("div",{class:"status-badge-container"},[e("span",{class:"status-badge status-scheduled"},"scheduled")],-1))]),e("div",Kt,[e("div",Gt,[g[3]||(g[3]=e("span",{class:"timing-icon"},"⏰",-1)),e("div",Ht,[e("span",qt,F(R.value),1),e("span",Wt,F(_.value),1)])]),u.session.autoRescheduleEnabled?(t(),o("div",zt,[g[5]||(g[5]=e("span",{class:"timing-icon"},"🔄",-1)),e("div",Yt,[g[4]||(g[4]=e("span",{class:"timing-text"},"Auto-reschedule",-1)),e("span",Jt," Attempt "+F(u.session.rescheduleCount)+"/"+F(u.session.maxRescheduleCount||"∞"),1)])])):C("",!0)]),e("div",Qt,[e("button",{class:"btn btn-secondary btn-small",disabled:l.value,onClick:g[0]||(g[0]=j=>E.value=!0)}," Edit Schedule ",8,Xt),e("button",{class:"btn btn-danger btn-small",disabled:l.value,onClick:S}," Cancel ",8,Zt)]),Q(nt,{"is-open":E.value,session:u.session,onClose:g[1]||(g[1]=j=>E.value=!1),onSaved:r},null,8,["is-open","session"])])}}},ts=Ce(es,[["__scopeId","data-v-d41e6b57"]]),ss={key:0,class:"skeleton-list"},ns={key:1,class:"empty-state"},os={key:2,class:"session-list"},as={__name:"ScheduledTabContent",props:{sessions:{type:Array,required:!0},loading:{type:Boolean,default:!1}},setup(u){return(c,m)=>(t(),o("div",null,[u.loading?(t(),o("div",ss,[(t(),o(X,null,Z(3,p=>e("div",{key:p,class:"skeleton card",style:{height:"120px"}})),64))])):u.sessions.length===0?(t(),o("div",ns,[...m[0]||(m[0]=[e("p",null,"No scheduled sessions. Use scheduling options when creating a new session to schedule it for later.",-1)])])):(t(),o("div",os,[(t(!0),o(X,null,Z(u.sessions,p=>(t(),oe(ts,{key:p.id,session:p},null,8,["session"]))),128))]))]))}},ls=Ce(as,[["__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"},Cs={key:1,class:"loading-state"},ws={key:2},Es={key:0,class:"template-section"},_s={class:"templates-list"},Ts={class:"template-header"},js={class:"template-name"},Fs={class:"template-prompt"},Ms={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"},Os={key:4,class:"meta-badge meta-badge-chain"},Bs={key:1,class:"template-section"},Ps={class:"templates-list"},Us={class:"template-header"},Ds={class:"template-name"},Vs={class:"template-prompt"},Ns={class:"template-meta"},Is={key:0,class:"meta-badge"},Ks={key:1,class:"meta-badge"},Gs={key:2,class:"meta-badge"},Hs={key:3,class:"meta-badge"},qs={key:4,class:"meta-badge meta-badge-chain"},Ws={key:2,class:"empty-state"},zs={__name:"TemplatesPanel",props:{projectId:{type:String,required:!0}},setup(u,{expose:c}){const m=u,p=We(),l=Fe(),E=lt(),R=A(!1),_=A(!1),S=A({name:"",prompt:"",isGlobal:!1,nextTemplateId:null,thinkingEnabled:null,gitBranch:"",model:null,mode:null}),r=V(()=>p.loading),a=V(()=>p.projectTemplates),g=V(()=>p.globalTemplates),i=V(()=>[...p.projectTemplates,...p.globalTemplates]);Pe(async()=>{E.providers.length===0&&await E.fetchProviders(),p.fetchProjectTemplates(m.projectId)}),me(()=>m.projectId,f=>{p.fetchProjectTemplates(f)});function j(f,n=100){return f.length<=n?f:`${f.substring(0,n)}...`}function $(f){const n=p.getTemplateById(f);return(n==null?void 0:n.name)||"Unknown"}function T(f){var n;for(const B of E.providers){const b=(n=B.models)==null?void 0:n.find(q=>q.modelId===f);if(b)return B.isBuiltIn?b.displayName:b.modelId}return f}function h(){S.value={name:"",prompt:"",isGlobal:!1,nextTemplateId:null,thinkingEnabled:null,gitBranch:"",model:null,mode:null}}function I(){R.value=!0}function Y(){R.value=!1,h()}async function O(){if(!_.value){_.value=!0;try{const f={name:S.value.name,prompt:S.value.prompt,nextTemplateId:S.value.nextTemplateId||void 0,thinkingEnabled:S.value.thinkingEnabled,gitBranch:S.value.gitBranch||void 0,model:S.value.model,mode:S.value.mode};S.value.isGlobal?(await p.createGlobalTemplate(f),l.success("Global template created")):(await p.createProjectTemplate(m.projectId,f),l.success("Template created")),Y()}catch(f){l.error(f.message)}finally{_.value=!1}}}return c({formData:S,getModelName:T,resetForm:h}),(f,n)=>{const B=Me("router-link");return t(),o("div",rs,[e("div",is,[n[8]||(n[8]=e("h2",null,"Session Templates",-1)),R.value?C("",!0):(t(),o("button",{key:0,class:"btn btn-primary btn-sm","data-testid":"new-template-btn",onClick:I}," New Template "))]),R.value?(t(),o("div",ds,[n[23]||(n[23]=e("h3",null,"Create Template",-1)),e("form",{onSubmit:ce(O,["prevent"])},[e("div",us,[n[9]||(n[9]=e("label",{class:"form-label"},"Name",-1)),G(e("input",{"onUpdate:modelValue":n[0]||(n[0]=b=>S.value.name=b),type:"text",class:"form-input",placeholder:"Template name",required:""},null,512),[[ke,S.value.name]])]),e("div",cs,[n[10]||(n[10]=e("label",{class:"form-label"},"Prompt",-1)),G(e("textarea",{"onUpdate:modelValue":n[1]||(n[1]=b=>S.value.prompt=b),class:"form-input form-textarea",placeholder:"Session prompt. Use {{rootSession.summary}} to reference root session data.",rows:"4",required:""},null,512),[[ke,S.value.prompt]]),Q(ze)]),e("div",ms,[n[12]||(n[12]=e("label",{class:"form-label"},"Scope",-1)),G(e("select",{"onUpdate:modelValue":n[2]||(n[2]=b=>S.value.isGlobal=b),class:"form-input",disabled:f.editingTemplate},[...n[11]||(n[11]=[e("option",{value:!1}," Project Only ",-1),e("option",{value:!0}," Global (all projects) ",-1)])],8,ps),[[Ee,S.value.isGlobal]])]),e("div",vs,[n[14]||(n[14]=e("label",{class:"form-label"},"Next Template (Optional)",-1)),G(e("select",{"onUpdate:modelValue":n[3]||(n[3]=b=>S.value.nextTemplateId=b),class:"form-input"},[n[13]||(n[13]=e("option",{value:null}," None ",-1)),(t(!0),o(X,null,Z(i.value,b=>(t(),o("option",{key:b.id,value:b.id},F(b.name)+" "+F(b.projectId?"":"(Global)"),9,fs))),128))],512),[[Ee,S.value.nextTemplateId]]),n[15]||(n[15]=e("p",{class:"form-help"}," Chain another template to run after this one completes. ",-1))]),e("div",hs,[n[16]||(n[16]=e("label",{class:"form-label"},"Model",-1)),Q(rt,{modelValue:S.value.model,"onUpdate:modelValue":n[4]||(n[4]=b=>S.value.model=b),"allow-empty":!0,"empty-label":"Inherit from root session"},null,8,["modelValue"])]),e("div",bs,[n[18]||(n[18]=e("label",{class:"form-label",for:"create-mode"},"Mode",-1)),G(e("select",{id:"create-mode","onUpdate:modelValue":n[5]||(n[5]=b=>S.value.mode=b),class:"form-input","data-testid":"mode-select"},[...n[17]||(n[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),[[Ee,S.value.mode]])]),e("div",gs,[n[20]||(n[20]=e("label",{class:"form-label",for:"create-thinking"},"Extended Thinking",-1)),G(e("select",{id:"create-thinking","onUpdate:modelValue":n[6]||(n[6]=b=>S.value.thinkingEnabled=b),class:"form-input","data-testid":"thinking-select"},[...n[19]||(n[19]=[e("option",{value:null}," Inherit from root session ",-1),e("option",{value:!0}," Enabled ",-1),e("option",{value:!1}," Disabled ",-1)])],512),[[Ee,S.value.thinkingEnabled]])]),e("div",ys,[n[21]||(n[21]=e("label",{class:"form-label"},"Git Branch (Optional)",-1)),G(e("input",{"onUpdate:modelValue":n[7]||(n[7]=b=>S.value.gitBranch=b),type:"text",class:"form-input",placeholder:"Leave empty to inherit from root session"},null,512),[[ke,S.value.gitBranch]])]),e("div",ks,[e("button",{type:"button",class:"btn","data-testid":"cancel-btn",onClick:Y}," Cancel "),e("button",{type:"submit",class:"btn btn-primary",disabled:_.value,"data-testid":"submit-btn"},[_.value?(t(),o("span",$s)):C("",!0),n[22]||(n[22]=de(" Create ",-1))],8,Ss)])],32)])):C("",!0),r.value?(t(),o("div",Cs,[...n[24]||(n[24]=[e("span",{class:"loading-spinner"},null,-1),de(" Loading templates... ",-1)])])):(t(),o("div",ws,[a.value.length>0?(t(),o("div",Es,[n[25]||(n[25]=e("h3",{class:"section-title"}," Project Templates ",-1)),e("div",_s,[(t(!0),o(X,null,Z(a.value,b=>(t(),oe(B,{key:b.id,to:`/projects/${u.projectId}/templates/${b.id}`,class:"template-card card","data-testid":`template-card-${b.id}`},{default:ye(()=>[e("div",Ts,[e("h4",js,F(b.name),1)]),e("p",Fs,F(j(b.prompt)),1),e("div",Ms,[b.thinkingEnabled?(t(),o("span",Rs,"Thinking")):C("",!0),b.gitBranch?(t(),o("span",As,F(b.gitBranch),1)):C("",!0),b.model?(t(),o("span",xs,F(T(b.model)),1)):C("",!0),b.mode?(t(),o("span",Ls,F(b.mode),1)):C("",!0),b.nextTemplateId?(t(),o("span",Os," Chains to: "+F($(b.nextTemplateId)),1)):C("",!0)])]),_:2},1032,["to","data-testid"]))),128))])])):C("",!0),g.value.length>0?(t(),o("div",Bs,[n[27]||(n[27]=e("h3",{class:"section-title"}," Global Templates ",-1)),e("div",Ps,[(t(!0),o(X,null,Z(g.value,b=>(t(),oe(B,{key:b.id,to:`/projects/${u.projectId}/templates/${b.id}`,class:"template-card card","data-testid":`template-card-${b.id}`},{default:ye(()=>[e("div",Us,[e("h4",Ds,F(b.name),1)]),e("p",Vs,F(j(b.prompt)),1),e("div",Ns,[n[26]||(n[26]=e("span",{class:"meta-badge meta-badge-global"},"Global",-1)),b.thinkingEnabled?(t(),o("span",Is,"Thinking")):C("",!0),b.gitBranch?(t(),o("span",Ks,F(b.gitBranch),1)):C("",!0),b.model?(t(),o("span",Gs,F(T(b.model)),1)):C("",!0),b.mode?(t(),o("span",Hs,F(b.mode),1)):C("",!0),b.nextTemplateId?(t(),o("span",qs," Chains to: "+F($(b.nextTemplateId)),1)):C("",!0)])]),_:2},1032,["to","data-testid"]))),128))])])):C("",!0),a.value.length===0&&g.value.length===0&&!R.value?(t(),o("div",Ws,[n[28]||(n[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:I}," Create Template ")])):C("",!0)]))])}}},Ys=Ce(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"},an={class:"col-order"},ln=["onClick"],rn={class:"modal-body"},dn={class:"modal-footer"},un={__name:"CommandButtonsPanel",props:{projectId:{type:String,required:!0}},setup(u){const c=u,m=Ke(),p=He(),l=A(null),E=r=>r.length>50?`${r.substring(0,50)}...`:r,R=r=>{m.push(`/projects/${c.projectId}/command-buttons/${r.id}`)},_=r=>{l.value=r},S=async()=>{if(l.value)try{await p.deleteButton(c.projectId,l.value.id),l.value=null}catch(r){console.error("Failed to delete button:",r)}};return(r,a)=>{const g=Me("router-link");return t(),o("div",Js,[e("div",Qs,[a[5]||(a[5]=e("h3",null,"Command Buttons",-1)),Q(g,{to:`/projects/${u.projectId}/command-buttons/new`,class:"btn btn-primary btn-sm"},{default:ye(()=>[...a[4]||(a[4]=[de(" + New Command Button ",-1)])]),_:1},8,["to"])]),v(p).loading?(t(),o("div",Xs,[...a[6]||(a[6]=[e("span",{class:"loading-spinner"},null,-1),de(" Loading command buttons... ",-1)])])):v(p).error?(t(),o("div",Zs,F(v(p).error),1)):v(p).buttons.length===0?(t(),o("div",en,[a[8]||(a[8]=e("p",null,"No command buttons configured yet.",-1)),Q(g,{to:`/projects/${u.projectId}/command-buttons/new`,class:"btn btn-primary"},{default:ye(()=>[...a[7]||(a[7]=[de(" Create First Button ",-1)])]),_:1},8,["to"])])):(t(),o("div",tn,[a[9]||(a[9]=Ue('<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)),(t(!0),o(X,null,Z(v(p).buttons,i=>(t(),o("div",{key:i.id,class:"table-row",onClick:j=>R(i)},[e("div",nn,F(i.label),1),e("div",on,[e("code",null,F(E(i.command)),1)]),e("div",an,F(i.sortOrder),1),e("div",{class:"col-actions",onClick:a[0]||(a[0]=ce(()=>{},["stop"]))},[e("button",{class:"btn btn-sm btn-outline-danger",onClick:j=>_(i)}," Delete ",8,ln)])],8,sn))),128))])),l.value?(t(),o("div",{key:4,class:"modal-overlay",onClick:a[3]||(a[3]=i=>l.value=null)},[e("div",{class:"modal-dialog",onClick:a[2]||(a[2]=ce(()=>{},["stop"]))},[a[12]||(a[12]=e("div",{class:"modal-header"},[e("h4",null,"Delete Command Button")],-1)),e("div",rn,[e("p",null,[a[10]||(a[10]=de('Are you sure you want to delete the command button "',-1)),e("strong",null,F(l.value.label),1),a[11]||(a[11]=de('"?',-1))])]),e("div",dn,[e("button",{class:"btn btn-outline-secondary",onClick:a[1]||(a[1]=i=>l.value=null)}," Cancel "),e("button",{class:"btn btn-danger",onClick:S}," Delete ")])])])):C("",!0)])}}},cn=Ce(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"],Cn={class:"session-info"},wn={class:"session-name"},En={class:"session-meta"},_n={key:0,class:"session-mode"},Tn={class:"session-date"},jn={class:"modal-footer"},Fn=["disabled"],Mn={__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(u,{emit:c}){const m=u,p=c;we();const l=Re(),E=Fe(),R=A(!1),_=A(!1),S=A(""),r=A(null),a=A([]),g=V(()=>{let O=a.value.filter(f=>!l.isSessionOnBoard(f.id));if(O=O.filter(f=>!f.parentSessionId),S.value.trim()){const f=S.value.toLowerCase();O=O.filter(n=>{var B;return(B=n.name)==null?void 0:B.toLowerCase().includes(f)})}return O});function i(O){switch(O){case"running":case"starting":return"●";case"waiting":return"◐";case"completed":return"✓";case"error":return"✕";case"stopped":return"■";case"scheduled":return"⏰";default:return"○"}}function j(O){return O?new Date(O).toLocaleDateString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):""}function $(O){r.value=O}function T(){}function h(){p("update:isOpen",!1),p("close"),S.value="",r.value=null}async function I(){if(m.projectId){R.value=!0;try{const O=await Oe.getProjectSessions(m.projectId,!1,null);a.value=Array.isArray(O)?O:(O==null?void 0:O.sessions)||[]}catch(O){console.error("Failed to load sessions:",O),E.error("Failed to load sessions"),a.value=[]}finally{R.value=!1}}}async function Y(){if(!(!r.value||!m.laneId)){_.value=!0;try{await l.addSessionToBoard(m.projectId,r.value,m.laneId),E.success("Session added to board"),p("added",r.value),h()}catch(O){console.error("Failed to add session to board:",O),E.error(O.message||"Failed to add session to board")}finally{_.value=!1}}}return me(()=>m.isOpen,O=>{O&&I()},{immediate:!0}),(O,f)=>u.isOpen?(t(),o("div",{key:0,class:"modal-backdrop",onClick:ce(h,["self"])},[e("div",mn,[e("div",pn,[e("h2",vn," Add Session to "+F(u.laneName),1),e("button",{class:"close-btn","aria-label":"Close",onClick:h}," × ")]),e("div",fn,[e("div",hn,[f[1]||(f[1]=e("label",{for:"session-search",class:"form-label"},"Search Sessions",-1)),G(e("input",{id:"session-search","onUpdate:modelValue":f[0]||(f[0]=n=>S.value=n),type:"text",class:"form-input",placeholder:"Search by name...",onInput:T},null,544),[[ke,S.value]])]),e("div",bn,[R.value?(t(),o("div",gn,[...f[2]||(f[2]=[e("span",{class:"loading-spinner"},null,-1),de(" Loading sessions... ",-1)])])):g.value.length===0?(t(),o("div",yn,[S.value?(t(),o("p",kn,' No sessions matching "'+F(S.value)+'" ',1)):(t(),o("p",Sn," No available sessions to add. "))])):(t(!0),o(X,{key:2},Z(g.value,n=>(t(),o("div",{key:n.id,class:ie(["session-item",{selected:r.value===n.id}]),onClick:B=>$(n.id)},[e("div",{class:ie(["session-status",`status-${n.status}`])},F(i(n.status)),3),e("div",Cn,[e("div",wn,F(n.name),1),e("div",En,[n.mode?(t(),o("span",_n,F(n.mode),1)):C("",!0),e("span",Tn,F(j(n.updatedAt||n.createdAt)),1)])])],10,$n))),128))])]),e("div",jn,[e("button",{class:"btn btn-secondary",onClick:h}," Cancel "),e("button",{class:"btn btn-primary",disabled:!r.value||_.value,onClick:Y},F(_.value?"Adding...":"Add to Lane"),9,Fn)])])])):C("",!0)}},Je=Ce(Mn,[["__scopeId","data-v-916a53c8"]]),Rn={class:"modal-content"},An={class:"modal-body"},xn={class:"form-group"},Ln={key:0,class:"form-group"},On={class:"lane-position-controls"},Bn=["disabled"],Pn={class:"lane-position-label"},Un=["disabled"],Dn={class:"form-group"},Vn={class:"automation-options"},Nn={class:"radio-option"},In={class:"radio-option"},Kn={class:"radio-option"},Gn={key:1,class:"form-group"},Hn={key:0,label:"Project Templates"},qn=["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"},ao={class:"checkbox-option"},lo={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(u,{emit:c}){const m=u,p=c,l=Re(),E=We(),R=Fe(),_=De(),S=A(!1),r=A(!1),a=A("none"),g=A(!1),i=A(!1),j=A(null),$=A(-1),T=A(-1),h=Ae({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}),I=V(()=>E.projectTemplates),Y=V(()=>E.globalTemplates),O=V(()=>{const d=_.getProjectById(m.projectId);return(d==null?void 0:d.workingDirectory)||null}),f=V(()=>T.value),n=V(()=>{var d,s;return((s=(d=l.board)==null?void 0:d.lanes)==null?void 0:s.length)||0}),B=V(()=>!(!h.name.trim()||a.value==="template"&&!h.onEnterTemplateId||a.value==="prompt"&&!h.onEnterPrompt.trim()));function b(d){return{onEnterAutoRescheduleEnabled:d.onEnterAutoRescheduleEnabled||!1,onEnterRescheduleDelayMinutes:d.onEnterRescheduleDelayMinutes||15,onEnterRescheduleOnTokenLimit:d.onEnterRescheduleOnTokenLimit??!0,onEnterRescheduleOnServiceError:d.onEnterRescheduleOnServiceError??!0,onEnterMaxRescheduleCount:d.onEnterMaxRescheduleCount||null,onEnterMaxTotalTokens:d.onEnterMaxTotalTokens||null,onEnterRescheduleAtTokenCount:d.onEnterRescheduleAtTokenCount||null}}function q(d){return{name:d.name||"",onEnterTemplateId:d.onEnterTemplateId||null,onEnterPrompt:d.onEnterPrompt||"",onEnterMode:d.onEnterMode||null,onEnterModel:d.onEnterModel||null,onEnterEffortLevel:d.onEnterEffortLevel||null,onEnterThinkingEnabled:d.onEnterThinkingEnabled??null,...b(d)}}function J(d){return d.onEnterTemplateId?"template":d.onEnterPrompt?"prompt":"none"}function H(d){return!!(d.onEnterMode||d.onEnterModel||d.onEnterEffortLevel||d.onEnterThinkingEnabled!==null||d.onEnterAutoRescheduleEnabled)}function ee(){var d,s;if(m.lane){const y=q(m.lane);Object.assign(h,y),a.value=J(m.lane),g.value=H(h);const be=((s=(d=l.board)==null?void 0:d.lanes)==null?void 0:s.findIndex(L=>L.id===m.lane.id))??-1;$.value=be,T.value=be}else{const y=q({});Object.assign(h,y),a.value="none",g.value=!1,$.value=-1,T.value=-1}}function te(){T.value=$.value,p("update:isOpen",!1),p("close")}function ue({text:d}){const s=j.value;if(s){const y=s.selectionStart,be=s.selectionEnd,L=h.onEnterPrompt.substring(0,y),k=h.onEnterPrompt.substring(be);h.onEnterPrompt=L+d+k,Ze(()=>{s.selectionStart=s.selectionEnd=y+d.length,s.focus()})}}function ae(d){const s=T.value;s<0||s===d||(T.value=d)}function pe(){return{onEnterTemplateId:null,onEnterPrompt:null,onEnterMode:null,onEnterModel:null,onEnterEffortLevel:null,onEnterThinkingEnabled:null,onEnterAutoRescheduleEnabled:!1,onEnterRescheduleDelayMinutes:15,onEnterRescheduleOnTokenLimit:!0,onEnterRescheduleOnServiceError:!0,onEnterMaxRescheduleCount:null,onEnterMaxTotalTokens:null,onEnterRescheduleAtTokenCount:null}}function le(d){return{...pe(),onEnterTemplateId:d.onEnterTemplateId,onEnterPrompt:null}}function ve(d){return{onEnterTemplateId:null,onEnterPrompt:d.onEnterPrompt.trim(),onEnterMode:d.onEnterMode,onEnterModel:d.onEnterModel,onEnterEffortLevel:d.onEnterEffortLevel,onEnterThinkingEnabled:d.onEnterThinkingEnabled,onEnterAutoRescheduleEnabled:d.onEnterAutoRescheduleEnabled,onEnterRescheduleDelayMinutes:d.onEnterRescheduleDelayMinutes,onEnterRescheduleOnTokenLimit:d.onEnterRescheduleOnTokenLimit,onEnterRescheduleOnServiceError:d.onEnterRescheduleOnServiceError,onEnterMaxRescheduleCount:d.onEnterMaxRescheduleCount,onEnterMaxTotalTokens:d.onEnterMaxTotalTokens,onEnterRescheduleAtTokenCount:d.onEnterRescheduleAtTokenCount}}async function fe(d,s,y,be){var M;if(y===s||y<0)return;const L=(M=l.board)==null?void 0:M.lanes;if(!L||L.length<=1)return;const k=L.map(w=>w.id);k.splice(s,1),k.splice(y,0,d.id),await l.reorderLanes(be,k)}async function D(){if(!(!m.lane||!B.value)){S.value=!0;try{const d={name:h.name.trim()};a.value==="template"?Object.assign(d,le(h)):a.value==="prompt"?Object.assign(d,ve(h)):Object.assign(d,pe()),await fe(m.lane,$.value,T.value,m.projectId),await l.updateLane(m.projectId,m.lane.id,d),R.success("Lane settings saved"),p("updated"),te()}catch(d){console.error("Failed to save lane settings:",d),R.error(d.message||"Failed to save lane settings")}finally{S.value=!1}}}async function P(){if(m.lane&&confirm(`Are you sure you want to delete the "${m.lane.name}" lane? This cannot be undone.`)){r.value=!0;try{await l.deleteLane(m.projectId,m.lane.id),R.success("Lane deleted"),p("deleted"),te()}catch(d){console.error("Failed to delete lane:",d),R.error(d.message||"Failed to delete lane")}finally{r.value=!1}}}return me(()=>m.isOpen,d=>{d&&(ee(),m.projectId&&E.projectTemplates.length===0&&E.globalTemplates.length===0&&E.fetchProjectTemplates(m.projectId))},{immediate:!0}),me(()=>m.lane,()=>{m.isOpen&&ee()}),me(()=>{var d;return(d=l.board)==null?void 0:d.lanes},d=>{if(m.isOpen&&m.lane&&d){const s=d.findIndex(y=>y.id===m.lane.id);s>=0&&($.value=s,T.value=s)}},{deep:!0}),(d,s)=>u.isOpen?(t(),o("div",{key:0,class:"modal-backdrop",onClick:ce(te,["self"])},[e("div",Rn,[e("div",{class:"modal-header"},[s[22]||(s[22]=e("h2",{class:"modal-title"}," Lane Settings ",-1)),e("button",{class:"close-btn","aria-label":"Close",onClick:te}," × ")]),e("div",An,[e("div",xn,[s[23]||(s[23]=e("label",{for:"lane-name",class:"form-label"},"Lane Name",-1)),G(e("input",{id:"lane-name","onUpdate:modelValue":s[0]||(s[0]=y=>h.name=y),type:"text",class:"form-input",placeholder:"Enter lane name"},null,512),[[ke,h.name]])]),n.value>1?(t(),o("div",Ln,[s[26]||(s[26]=e("label",{class:"form-label"},"Position",-1)),e("div",On,[e("button",{class:"btn btn-icon",disabled:f.value<=0,title:"Move left",onClick:s[1]||(s[1]=y=>ae(f.value-1))},[...s[24]||(s[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,Bn),e("span",Pn,F(f.value+1)+" of "+F(n.value),1),e("button",{class:"btn btn-icon",disabled:f.value>=n.value-1,title:"Move right",onClick:s[2]||(s[2]=y=>ae(f.value+1))},[...s[25]||(s[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,Un)])])):C("",!0),e("div",Dn,[s[30]||(s[30]=e("label",{class:"form-label"},"On-Enter Automation",-1)),e("div",Vn,[e("label",Nn,[G(e("input",{"onUpdate:modelValue":s[3]||(s[3]=y=>a.value=y),type:"radio",value:"none",name:"automation"},null,512),[[xe,a.value]]),s[27]||(s[27]=e("span",null,"None",-1))]),e("label",In,[G(e("input",{"onUpdate:modelValue":s[4]||(s[4]=y=>a.value=y),type:"radio",value:"template",name:"automation"},null,512),[[xe,a.value]]),s[28]||(s[28]=e("span",null,"Run a template",-1))]),e("label",Kn,[G(e("input",{"onUpdate:modelValue":s[5]||(s[5]=y=>a.value=y),type:"radio",value:"prompt",name:"automation"},null,512),[[xe,a.value]]),s[29]||(s[29]=e("span",null,"Run a custom prompt",-1))])])]),a.value==="template"?(t(),o("div",Gn,[s[32]||(s[32]=e("label",{for:"template-select",class:"form-label"},"Select Template",-1)),G(e("select",{id:"template-select","onUpdate:modelValue":s[6]||(s[6]=y=>h.onEnterTemplateId=y),class:"form-input"},[s[31]||(s[31]=e("option",{value:null}," Select a template... ",-1)),I.value.length?(t(),o("optgroup",Hn,[(t(!0),o(X,null,Z(I.value,y=>(t(),o("option",{key:y.id,value:y.id},F(y.name),9,qn))),128))])):C("",!0),Y.value.length?(t(),o("optgroup",Wn,[(t(!0),o(X,null,Z(Y.value,y=>(t(),o("option",{key:y.id,value:y.id},F(y.name),9,zn))),128))])):C("",!0)],512),[[Ee,h.onEnterTemplateId]]),s[33]||(s[33]=e("p",{class:"form-help"}," When a session enters this lane, the selected template will automatically run. ",-1))])):C("",!0),a.value==="prompt"?(t(),o("div",Yn,[s[34]||(s[34]=e("label",{for:"custom-prompt",class:"form-label"},"Custom Prompt",-1)),Q(it,{id:"custom-prompt",ref_key:"promptTextareaRef",ref:j,modelValue:h.onEnterPrompt,"onUpdate:modelValue":s[7]||(s[7]=y=>h.onEnterPrompt=y),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,[Q(ze),O.value?(t(),oe(ut,{key:0,onOpen:s[8]||(s[8]=y=>i.value=!0)})):C("",!0)])])):C("",!0),a.value==="prompt"?(t(),oe(ct,{key:3,"is-open":i.value,"onUpdate:isOpen":s[9]||(s[9]=y=>i.value=y),"working-directory":O.value||"",mode:"insert","hide-builtin":!0,onInsert:ue},null,8,["is-open","working-directory"])):C("",!0),a.value==="prompt"?(t(),o("div",Qn,[e("button",{type:"button",class:"section-toggle",onClick:s[10]||(s[10]=y=>g.value=!g.value)},[e("span",{class:ie(["toggle-chevron",{open:g.value}])},"▶",2),s[35]||(s[35]=de(" Session Settings ",-1))]),g.value?(t(),o("div",Xn,[Q(dt,{mode:h.onEnterMode||"standard",model:h.onEnterModel,"effort-level":h.onEnterEffortLevel,"thinking-enabled":h.onEnterThinkingEnabled??!1,"hide-start-immediately":!0,"onUpdate:mode":s[11]||(s[11]=y=>h.onEnterMode=y),"onUpdate:model":s[12]||(s[12]=y=>h.onEnterModel=y),"onUpdate:effortLevel":s[13]||(s[13]=y=>h.onEnterEffortLevel=y),"onUpdate:thinkingEnabled":s[14]||(s[14]=y=>h.onEnterThinkingEnabled=y)},null,8,["mode","model","effort-level","thinking-enabled"]),e("div",Zn,[e("label",eo,[e("label",to,[G(e("input",{"onUpdate:modelValue":s[15]||(s[15]=y=>h.onEnterAutoRescheduleEnabled=y),type:"checkbox"},null,512),[[Le,h.onEnterAutoRescheduleEnabled]]),s[36]||(s[36]=e("span",{class:"toggle-slider"},null,-1))]),s[37]||(s[37]=e("span",{class:"toggle-label"},"Auto-reschedule on errors",-1))])]),h.onEnterAutoRescheduleEnabled?(t(),o("div",so,[e("div",no,[s[40]||(s[40]=e("p",{class:"settings-label"}," Reschedule Triggers ",-1)),e("label",oo,[G(e("input",{"onUpdate:modelValue":s[16]||(s[16]=y=>h.onEnterRescheduleOnTokenLimit=y),type:"checkbox"},null,512),[[Le,h.onEnterRescheduleOnTokenLimit]]),s[38]||(s[38]=e("span",null,"Token limit errors",-1))]),e("label",ao,[G(e("input",{"onUpdate:modelValue":s[17]||(s[17]=y=>h.onEnterRescheduleOnServiceError=y),type:"checkbox"},null,512),[[Le,h.onEnterRescheduleOnServiceError]]),s[39]||(s[39]=e("span",null,"Service unavailability",-1))])]),e("div",lo,[s[42]||(s[42]=e("label",{class:"form-label"},"Reschedule Delay",-1)),G(e("select",{"onUpdate:modelValue":s[18]||(s[18]=y=>h.onEnterRescheduleDelayMinutes=y),class:"form-input"},[...s[41]||(s[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),[[Ee,h.onEnterRescheduleDelayMinutes,void 0,{number:!0}]])]),e("div",ro,[s[43]||(s[43]=e("label",{class:"form-label"},"Max Reschedule Count",-1)),G(e("input",{"onUpdate:modelValue":s[19]||(s[19]=y=>h.onEnterMaxRescheduleCount=y),type:"number",min:"1",max:"100",class:"form-input",placeholder:"Unlimited"},null,512),[[ke,h.onEnterMaxRescheduleCount,void 0,{number:!0}]])]),e("div",io,[s[44]||(s[44]=e("label",{class:"form-label"},"Max Total Tokens",-1)),G(e("input",{"onUpdate:modelValue":s[20]||(s[20]=y=>h.onEnterMaxTotalTokens=y),type:"number",min:"1000",step:"1000",class:"form-input",placeholder:"Unlimited"},null,512),[[ke,h.onEnterMaxTotalTokens,void 0,{number:!0}]])]),e("div",uo,[s[45]||(s[45]=e("label",{class:"form-label"},"Reschedule At Token Count",-1)),G(e("input",{"onUpdate:modelValue":s[21]||(s[21]=y=>h.onEnterRescheduleAtTokenCount=y),type:"number",min:"10000",step:"10000",class:"form-input",placeholder:"None"},null,512),[[ke,h.onEnterRescheduleAtTokenCount,void 0,{number:!0}]])])])):C("",!0)])):C("",!0)])):C("",!0),e("div",co,[s[46]||(s[46]=e("h4",{class:"danger-title"}," Danger Zone ",-1)),s[47]||(s[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:r.value,onClick:P},F(r.value?"Deleting...":"Delete Lane"),9,mo)])]),e("div",po,[e("button",{class:"btn btn-secondary",onClick:te}," Cancel "),e("button",{class:"btn btn-primary",disabled:S.value||!B.value,onClick:D},F(S.value?"Saving...":"Save Changes"),9,vo)])])])):C("",!0)}},ho=Ce(fo,[["__scopeId","data-v-93f5604f"]]),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"],Co={class:"lane-header"},wo={class:"lane-title-row"},Eo={class:"lane-title"},_o={key:0,class:"lane-automation-indicator",title:"Automation enabled"},To={class:"lane-header-actions"},jo={class:"lane-count"},Fo=["onClick"],Mo={class:"lane-cards"},Ro={key:0,class:"card-drop-indicator"},Ao=["onDragstart","onDragover"],xo={class:"card-header"},Lo={class:"card-title"},Oo={class:"card-meta"},Bo={key:0,class:"card-mode"},Po={class:"card-reorder-arrows"},Uo=["onClick"],Do=["onClick"],Vo=["onClick"],No=["onClick"],Io={key:0,class:"card-drop-indicator"},Ko={key:1,class:"lane-empty"},Go={class:"lane-footer"},Ho={key:0,class:"lane-automation"},qo={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(u){const c=u,m=Re(),p=A(!1),l=A(""),E=A(null),R=A(null),_=A(null),S=A(-1),r=A(null),a=A(-1),g=A(!1),i=A(null),j=A(!1),$=A(null),T=A(!1),h=A(null),I=A(null),Y=V(()=>m.board),O=V(()=>m.loading),f=V(()=>m.error),n=async()=>{try{await m.fetchBoard(c.projectId)}catch(M){console.error("Failed to fetch kanban board:",M)}},B=M=>{switch(M){case"running":case"starting":return"●";case"waiting":return"◐";case"completed":return"✓";case"error":return"✕";case"stopped":return"■";case"scheduled":return"⏰";default:return"○"}},b=(M,w,W,N)=>{E.value="card",R.value=w,_.value=W,S.value=N;const z=M.dataTransfer;z.effectAllowed="move",z.setData("text/plain",w.id)},q=(M,w,W)=>{if(E.value!=="card")return;const N=M.currentTarget.getBoundingClientRect(),z=N.top+N.height/2,se=M.clientY<z?W:W+1;w===_.value&&(se===S.value||se===S.value+1)?(r.value=null,a.value=-1):(r.value=w,a.value=se)},J=()=>{E.value=null,R.value=null,_.value=null,S.value=-1,r.value=null,a.value=-1},H=async(M,w,W)=>{var he,re;const N=(re=(he=Y.value)==null?void 0:he.lanes)==null?void 0:re.find(x=>x.id===M);if(!(N!=null&&N.cards))return;let z=W>=0?W:N.cards.length;if(z>w&&z--,z===w)return;const se=N.cards.map(x=>x.id),[ge]=se.splice(w,1);se.splice(z,0,ge);try{await m.reorderCards(c.projectId,M,se)}catch(x){console.error("Failed to reorder cards:",x)}},ee=async(M,w)=>{try{await m.moveCard(c.projectId,M,w,{runOnEnterTemplate:!0})}catch(W){console.error("Failed to move card:",W)}},te=async(M,w)=>{if(M.preventDefault(),E.value!=="card"||!R.value){J();return}const W=M.dataTransfer.getData("text/plain");if(!W){J();return}_.value===w?await H(w,S.value,a.value):await ee(W,w),J()},ue=async(M,w,W)=>{var ge,he;const N=(he=(ge=Y.value)==null?void 0:ge.lanes)==null?void 0:he.find(re=>re.id===M);if(!(N!=null&&N.cards))return;const z=N.cards.map(re=>re.id),[se]=z.splice(w,1);z.splice(W,0,se);try{await m.reorderCards(c.projectId,M,z)}catch(re){console.error("Failed to reorder cards:",re)}},ae=async M=>{if(confirm("Remove this session from the board?"))try{await m.removeCard(c.projectId,M)}catch(w){console.error("Failed to remove card:",w)}},pe=async()=>{if(l.value.trim())try{await m.createLane(c.projectId,{name:l.value.trim()}),le()}catch(M){console.error("Failed to add lane:",M)}},le=()=>{p.value=!1,l.value=""},ve=M=>{i.value=M,g.value=!0},fe=()=>{g.value=!1,i.value=null},D=()=>{},P=M=>{$.value=M,j.value=!0},d=()=>{j.value=!1,$.value=null},s=()=>{},y=()=>{d()},be=(M,w)=>{h.value=M,I.value=w,T.value=!0},L=()=>{T.value=!1,h.value=null,I.value=null},k=()=>{L()};return me(()=>c.projectId,M=>{M&&n()},{immediate:!0}),Pe(()=>{c.projectId&&n()}),(M,w)=>{var N,z,se,ge,he,re;const W=Me("router-link");return t(),o("div",bo,[O.value?(t(),o("div",go,[...w[5]||(w[5]=[e("span",{class:"loading-spinner"},null,-1),de(" Loading board... ",-1)])])):f.value?(t(),o("div",yo,[w[6]||(w[6]=e("span",{class:"error-icon"},"!",-1)),de(" "+F(f.value)+" ",1),e("button",{class:"retry-btn",onClick:n}," Retry ")])):Y.value?(t(),o("div",So,[(t(!0),o(X,null,Z(Y.value.lanes,x=>{var _e,Te,je;return t(),o("div",{key:x.id,class:"kanban-lane",onDragover:ce(K=>{var ne;return q(K,x.id,((ne=x.cards)==null?void 0:ne.length)||0)},["prevent"]),onDrop:K=>te(K,x.id)},[e("div",Co,[e("div",wo,[e("h3",Eo,F(x.name),1),x.onEnterTemplateId||x.onEnterPrompt?(t(),o("span",_o,[...w[8]||(w[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)])])):C("",!0)]),e("div",To,[e("span",jo,F(((_e=x.cards)==null?void 0:_e.length)||0),1),e("button",{class:"lane-settings-btn",title:"Lane settings",onClick:K=>P(x)},[...w[9]||(w[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,Fo)])]),e("div",Mo,[(t(!0),o(X,null,Z(x.cards,(K,ne)=>{var U,Se;return t(),o(X,{key:K.id},[E.value==="card"&&r.value===x.id&&a.value===ne?(t(),o("div",Ro)):C("",!0),e("div",{class:ie(["kanban-card",{dragging:E.value==="card"&&((U=R.value)==null?void 0:U.id)===K.id}]),draggable:"true",onDragstart:ce($e=>b($e,K,x.id,ne),["stop"]),onDragover:ce($e=>q($e,x.id,ne),["prevent","stop"]),onDragend:J},[(Se=K.sessions)!=null&&Se[0]?(t(),oe(W,{key:0,to:`/sessions/${K.sessions[0].id}`,class:"card-link"},{default:ye(()=>[e("div",xo,[e("span",{class:ie(["card-status",`status-${K.sessions[0].status}`])},F(B(K.sessions[0].status)),3),e("h4",Lo,F(K.sessions[0].name),1)]),e("div",Oo,[K.sessions[0].mode?(t(),o("span",Bo,F(K.sessions[0].mode),1)):C("",!0)])]),_:2},1032,["to"])):C("",!0),e("div",Po,[ne>0?(t(),o("button",{key:0,class:"card-reorder-btn",title:"Move card up",onClick:ce($e=>ue(x.id,ne,ne-1),["prevent"])},[...w[10]||(w[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,Uo)):C("",!0),ne<x.cards.length-1?(t(),o("button",{key:1,class:"card-reorder-btn",title:"Move card down",onClick:ce($e=>ue(x.id,ne,ne+1),["prevent"])},[...w[11]||(w[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,Do)):C("",!0)]),e("button",{class:"card-move-btn",title:"Move to lane",onClick:ce($e=>be(K,x.id),["prevent"])},[...w[12]||(w[12]=[Ue('<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:ce($e=>ae(K.id),["prevent"])}," × ",8,No)],42,Ao)],64)}),128)),E.value==="card"&&r.value===x.id&&a.value===(((Te=x.cards)==null?void 0:Te.length)||0)?(t(),o("div",Io)):C("",!0),(je=x.cards)!=null&&je.length?C("",!0):(t(),o("div",Ko,[...w[13]||(w[13]=[e("span",null,"Drop sessions here",-1)])]))]),e("div",Go,[x.onEnterTemplateId?(t(),o("span",Ho," Auto: triggers template on entry ")):x.onEnterPrompt?(t(),o("span",qo," Auto: runs custom prompt on entry ")):C("",!0),e("button",{class:"add-session-btn",onClick:K=>ve(x)}," + Add Session ",8,Wo)])],40,$o)}),128)),e("div",zo,[p.value?(t(),o("div",Yo,[G(e("input",{"onUpdate:modelValue":w[1]||(w[1]=x=>l.value=x),type:"text",placeholder:"Lane name...",class:"add-lane-input",onKeyup:[Ve(pe,["enter"]),Ve(le,["escape"])]},null,544),[[ke,l.value]]),e("div",{class:"add-lane-actions"},[e("button",{class:"add-lane-confirm",onClick:pe}," Add "),e("button",{class:"add-lane-cancel",onClick:le}," Cancel ")])])):(t(),o("button",{key:0,class:"add-lane-btn",onClick:w[0]||(w[0]=x=>p.value=!0)}," + Add Lane "))])])):(t(),o("div",ko,[...w[7]||(w[7]=[e("p",null,"Kanban board is not available for this project.",-1)])])),Q(Je,{"is-open":g.value,"project-id":u.projectId,"lane-id":(N=i.value)==null?void 0:N.id,"lane-name":(z=i.value)==null?void 0:z.name,"onUpdate:isOpen":w[2]||(w[2]=x=>g.value=x),onClose:fe,onAdded:D},null,8,["is-open","project-id","lane-id","lane-name"]),Q(ho,{"is-open":j.value,"project-id":u.projectId,lane:$.value,"onUpdate:isOpen":w[3]||(w[3]=x=>j.value=x),onClose:d,onUpdated:s,onDeleted:y},null,8,["is-open","project-id","lane"]),Q(ot,{"is-open":T.value,"project-id":u.projectId,"card-id":(se=h.value)==null?void 0:se.id,"current-lane-id":I.value,"session-name":(re=(he=(ge=h.value)==null?void 0:ge.sessions)==null?void 0:he[0])==null?void 0:re.name,"onUpdate:isOpen":w[4]||(w[4]=x=>T.value=x),onClose:L,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"},ea=["href"],ta={class:"tabs"},sa={class:"tabs-desktop"},na={class:"tabs-left"},oa={class:"tabs-mobile"},aa=["value"],la={key:0,value:"kanban"},ra={key:2,class:"tab-spacer"},ia={key:3},da={key:0,class:"skeleton-list"},ua={key:1,class:"error-message"},ca={key:2,class:"empty-state"},ma={key:3,class:"empty-state"},pa={key:4,class:"session-list"},va={key:5},fa={key:6},ha={class:"modal-content lane-selector-modal"},ba={class:"modal-body"},ga={class:"modal-description"},ya={class:"lane-options"},ka=["onClick"],Sa={class:"lane-option-name"},$a={class:"lane-option-count"},Ca={key:0,class:"empty-lanes"},Va={__name:"SessionListView",setup(u){const c=et(),m=Ke(),p=De(),l=we(),E=Re(),R=Ge();vt(),R.restoreCollapsedLogState();const _=V(()=>{switch(c.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 S(L){const k=c.params.id,M={sessions:`/projects/${k}/sessions`,archived:`/projects/${k}/archived`,templates:`/projects/${k}/templates`,commands:`/projects/${k}/commands`,scheduled:`/projects/${k}/scheduled`,kanban:`/projects/${k}/kanban`};m.push(M[L])}const r=V(()=>c.params.id),{summaries:a,loadingSummaries:g,summaryErrors:i,fetchSummariesBatch:j,retryFetchSummary:$,updateSummary:T,cleanupSummary:h}=mt(),{filteredGroupedSessions:I}=Ye(),{archivedLoaded:Y}=pt(r,{fetchSummariesBatch:j,updateSummary:T,cleanupSummary:h}),O=V(()=>l.scheduledSessions||[]),f=V(()=>l.loadingScheduled||!1);let n=null;me(()=>l.sessions,()=>{clearTimeout(n),n=setTimeout(()=>{j(l.sessions)},400)}),me(()=>c.name,async L=>{L==="ArchivedSessions"?await B():L==="ScheduledSessions"&&await q()},{immediate:!0}),me([_,()=>{var L;return(L=p.currentProject)==null?void 0:L.kanbanEnabled}],([L,k])=>{L==="kanban"&&k===!1&&m.replace(`/projects/${c.params.id}/sessions`)},{immediate:!0}),me(()=>l.starredFilter,async(L,k)=>{_.value==="archived"&&Y.value&&L!==k&&(await l.fetchArchivedSessions(r.value,{reset:!0}),j(l.archivedSessions))});async function B(){Y.value||(await l.fetchArchivedSessions(r.value,{reset:!0}),Y.value=!0,j(l.archivedSessions))}async function b(){await l.loadMoreArchivedSessions(r.value),j(l.archivedSessions)}async function q(){await l.fetchScheduledSessions(r.value)}const J=A(!1),H=A(null),ee=A(!1);function te(L){const k=l.sessions.find(M=>M.id===L);H.value=k||{id:L},J.value=!0}async function ue(L){if(H.value){ee.value=!0;try{await l.archiveSession(H.value.id,{cleanup:L}),le.success("Session archived")}catch(k){le.error(k.message||"Failed to archive session")}finally{ee.value=!1,J.value=!1,H.value=null}}}function ae(){J.value=!1,H.value=null}async function pe(L){try{await l.unarchiveSession(L)}catch(k){console.error("Failed to unarchive session:",k)}}const le=Fe(),ve=A(!1),fe=A(null),D=A(!1),P=A(null);function d(L){P.value=L,D.value=!0}function s(){D.value=!1,P.value=null}async function y(L){if(!(!P.value||!L))try{await E.addSessionToBoard(c.params.id,P.value.id,L.id),le.success(`Session added to "${L.name}"`),s()}catch(k){console.error("Failed to add session to board:",k),le.error(k.message||"Failed to add session to board")}}function be(){ve.value=!1,fe.value=null}return Pe(()=>{l.restoreStatusFilter(),l.restoreStarredFilter(),l.restoreScheduledFilter();const L=c.params.id;L&&E.fetchBoard(L).catch(k=>{console.warn("Failed to fetch kanban board:",k)})}),Be(()=>{clearTimeout(n)}),(L,k)=>{var w,W,N,z,se,ge,he,re,x,_e,Te,je,K,ne;const M=Me("router-link");return t(),o("div",Qo,[e("div",Xo,[e("div",null,[e("div",Zo,[e("h1",null,F(((w=v(p).currentProject)==null?void 0:w.name)||"Sessions"),1),(W=v(p).currentProject)!=null&&W.repoUrl?(t(),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,ea)):C("",!0),Q(M,{to:`/projects/${v(c).params.id}/edit`,class:"settings-link",title:"Project settings"},{default:ye(()=>[...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"])])]),_.value==="sessions"?(t(),oe(M,{key:0,to:`/projects/${v(c).params.id}/sessions/new`,class:"btn btn-primary mobile-only"},{default:ye(()=>[...k[10]||(k[10]=[de(" + Session ",-1)])]),_:1},8,["to"])):C("",!0)]),e("div",ta,[e("div",sa,[e("div",na,[e("button",{class:ie(["tab",{active:_.value==="sessions"}]),onClick:k[0]||(k[0]=U=>v(m).push(`/projects/${v(c).params.id}/sessions`))}," Sessions ",2),e("button",{class:ie(["tab",{active:_.value==="archived"}]),onClick:k[1]||(k[1]=U=>v(m).push(`/projects/${v(c).params.id}/archived`))}," Archived ",2),e("button",{class:ie(["tab",{active:_.value==="templates"}]),onClick:k[2]||(k[2]=U=>v(m).push(`/projects/${v(c).params.id}/templates`))}," Templates ",2),e("button",{class:ie(["tab",{active:_.value==="commands"}]),onClick:k[3]||(k[3]=U=>v(m).push(`/projects/${v(c).params.id}/commands`))}," Commands ",2),e("button",{class:ie(["tab",{active:_.value==="scheduled"}]),onClick:k[4]||(k[4]=U=>v(m).push(`/projects/${v(c).params.id}/scheduled`))}," Scheduled ",2),(N=v(p).currentProject)!=null&&N.kanbanEnabled?(t(),o("button",{key:0,class:ie(["tab",{active:_.value==="kanban"}]),onClick:k[5]||(k[5]=U=>v(m).push(`/projects/${v(c).params.id}/kanban`))},[...k[11]||(k[11]=[de(" Kanban ",-1),e("span",{class:"ml-1 rounded bg-amber-900/50 px-1.5 py-0.5 text-[10px] font-semibold uppercase text-amber-300"}," Experimental ",-1)])],2)):C("",!0)]),_.value==="sessions"?(t(),oe(M,{key:0,to:`/projects/${v(c).params.id}/sessions/new`,class:"btn btn-primary desktop-only","aria-label":"New Session"},{default:ye(()=>[...k[12]||(k[12]=[e("span",{class:"add-session-label-full"},"+ Session",-1),e("span",{class:"add-session-label-short"},"+",-1)])]),_:1},8,["to"])):C("",!0)]),e("div",oa,[e("select",{value:_.value,class:"tab-select",onChange:k[6]||(k[6]=U=>S(U.target.value))},[k[13]||(k[13]=Ue('<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)),(z=v(p).currentProject)!=null&&z.kanbanEnabled?(t(),o("option",la," Kanban (experimental) ")):C("",!0)],40,aa)])]),_.value==="sessions"?(t(),oe(Ne,{key:0,"show-status-filters":!0,"show-scheduled-filter":!0})):_.value==="archived"?(t(),oe(Ne,{key:1,"show-status-filters":!1,"show-scheduled-filter":!1})):(t(),o("div",ra)),_.value==="sessions"?(t(),o("div",ia,[v(l).loading?(t(),o("div",da,[(t(),o(X,null,Z(3,U=>e("div",{key:U,class:"skeleton card",style:{height:"120px"}})),64))])):v(l).error?(t(),o("div",ua,F(v(l).error),1)):v(l).sessions.length===0?(t(),o("div",ca,[k[15]||(k[15]=e("p",null,"No sessions yet. Start a new session to interact with the agent.",-1)),Q(M,{to:`/projects/${v(c).params.id}/sessions/new`,class:"btn btn-primary"},{default:ye(()=>[...k[14]||(k[14]=[de(" New Session ",-1)])]),_:1},8,["to"])])):v(I).length===0?(t(),o("div",ma,[...k[16]||(k[16]=[e("p",null,"No sessions match the current filter.",-1)])])):(t(),o("div",pa,[(t(!0),o(X,null,Z(v(I),U=>{var Se;return t(),oe(qe,{key:U.parent.id,session:U.parent,"show-summary":!0,summary:v(a)[U.parent.id],"summary-loading":v(g)[U.parent.id],"summary-error":v(i)[U.parent.id],"show-archive":!0,"kanban-enabled":((Se=v(p).currentProject)==null?void 0:Se.kanbanEnabled)??!1,"pr-url":U.parent.prUrl,"pr-summary":v(a)[U.parent.id],onRetrySummary:v($),onArchive:te,onAddToBoard:d},null,8,["session","summary","summary-loading","summary-error","kanban-enabled","pr-url","pr-summary","onRetrySummary"])}),128))]))])):C("",!0),_.value==="archived"?(t(),oe(Ut,{key:4,summaries:v(a),"loading-summaries":v(g),"summary-errors":v(i),onRetrySummary:v($),onUnarchive:pe,onLoadMore:b},null,8,["summaries","loading-summaries","summary-errors","onRetrySummary"])):C("",!0),_.value==="templates"?(t(),o("div",va,[Q(Ys,{"project-id":v(c).params.id},null,8,["project-id"])])):C("",!0),_.value==="commands"?(t(),o("div",fa,[Q(cn,{"project-id":v(c).params.id},null,8,["project-id"])])):C("",!0),_.value==="scheduled"?(t(),oe(ls,{key:7,sessions:O.value,loading:f.value},null,8,["sessions","loading"])):C("",!0),_.value==="kanban"?(t(),oe(Jo,{key:8,"project-id":v(c).params.id},null,8,["project-id"])):C("",!0),Q(Je,{"is-open":ve.value,"project-id":v(c).params.id,"lane-id":(se=fe.value)==null?void 0:se.id,"lane-name":(ge=fe.value)==null?void 0:ge.name,"onUpdate:isOpen":k[7]||(k[7]=U=>ve.value=U),onClose:be},null,8,["is-open","project-id","lane-id","lane-name"]),D.value?(t(),o("div",{key:9,class:"modal-backdrop",onClick:ce(s,["self"])},[e("div",ha,[e("div",{class:"modal-header"},[k[17]||(k[17]=e("h2",{class:"modal-title"}," Add to Kanban Board ",-1)),e("button",{class:"close-btn","aria-label":"Close",onClick:s}," × ")]),e("div",ba,[e("p",ga,' Select a lane to add "'+F((he=P.value)==null?void 0:he.name)+'" to: ',1),e("div",ya,[(t(!0),o(X,null,Z((re=v(E).board)==null?void 0:re.lanes,U=>{var Se;return t(),o("button",{key:U.id,class:"lane-option-btn",onClick:$e=>y(U)},[e("span",Sa,F(U.name),1),e("span",$a,F(((Se=U.cards)==null?void 0:Se.length)||0)+" cards",1)],8,ka)}),128))]),(_e=(x=v(E).board)==null?void 0:x.lanes)!=null&&_e.length?C("",!0):(t(),o("p",Ca," No lanes available. Go to the Kanban tab to create lanes first. "))]),e("div",{class:"modal-footer"},[e("button",{class:"btn btn-secondary",onClick:s}," Cancel ")])])])):C("",!0),Q(at,{"is-open":J.value,"session-name":((Te=H.value)==null?void 0:Te.name)||"this session","has-cleanup-script":!!((je=v(p).currentProject)!=null&&je.onSessionDeleted&&((K=H.value)!=null&&K.gitWorktree)&&!((ne=H.value)!=null&&ne.parentSessionId)),loading:ee.value,onConfirm:ue,onCancel:ae},null,8,["is-open","session-name","has-cleanup-script","loading"])])}}};export{Va as default};
@@ -1 +0,0 @@
1
- .mode-selector[data-v-224ea1e6]{display:flex;align-items:center;gap:.5rem}.mode-select[data-v-224ea1e6]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:.375rem 2rem .375rem .5rem;font-size:.75rem;font-weight:500;background-color:var(--color-background);border:1px solid var(--color-border);border-radius:.375rem;color:var(--color-text-soft);cursor:pointer;transition:all .15s;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%239ca3af' d='M1.5 4.5l4.5 4 4.5-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .5rem center;background-size:12px}.mode-select[data-v-224ea1e6]:hover:not(:disabled){border-color:var(--color-border-hover);background-color:var(--color-bg-hover)}.mode-select[data-v-224ea1e6]:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px #06b6d41a}.mode-select[data-v-224ea1e6]:disabled{opacity:.5;cursor:not-allowed}.mode-select option[data-v-224ea1e6]{background-color:var(--color-background);color:var(--color-text)}.slash-command-btn[data-v-63f59216]{display:flex;align-items:center;gap:.25rem;padding:.375rem .625rem;font-size:.875rem;background:var(--color-background);border:1px solid var(--color-border);border-radius:.375rem;color:var(--color-text-soft);cursor:pointer;transition:background-color .15s,border-color .15s,color .15s}.slash-command-btn[data-v-63f59216]:hover{background:var(--color-bg-hover);border-color:var(--color-accent);color:var(--color-accent)}.slash-icon[data-v-63f59216]{font-size:1rem;font-weight:600;font-family:ui-monospace,monospace}.slash-text[data-v-63f59216]{font-size:.75rem}@media (max-width: 480px){.slash-text[data-v-63f59216]{display:none}.slash-command-btn[data-v-63f59216]{padding:.375rem}}.command-grid[data-v-5da1571d]{display:flex;flex-direction:column;gap:1rem;max-height:60vh;overflow-y:auto}.search-box[data-v-5da1571d]{position:sticky;top:0;z-index:1;background:var(--color-background);padding-bottom:.5rem}.search-input[data-v-5da1571d]{width:100%;padding:.75rem 1rem;font-size:.875rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:.5rem;color:var(--color-text);outline:none;transition:border-color .15s}.search-input[data-v-5da1571d]:focus{border-color:var(--color-accent)}.search-input[data-v-5da1571d]::placeholder{color:var(--color-text-soft)}.loading-state[data-v-5da1571d],.error-state[data-v-5da1571d],.empty-state[data-v-5da1571d]{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:2rem;color:var(--color-text-soft);text-align:center}.error-state[data-v-5da1571d]{color:var(--color-danger, #ef4444)}.loading-spinner[data-v-5da1571d]{width:1.25rem;height:1.25rem;border:2px solid var(--color-border);border-top-color:var(--color-accent);border-radius:50%;animation:spin-5da1571d .6s linear infinite}@keyframes spin-5da1571d{to{transform:rotate(360deg)}}.command-sections[data-v-5da1571d]{display:flex;flex-direction:column;gap:1.5rem}.command-section[data-v-5da1571d]{display:flex;flex-direction:column;gap:.5rem}.section-title[data-v-5da1571d]{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-soft);margin:0;padding:0 .25rem}.command-cards[data-v-5da1571d]{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:.5rem}.command-card[data-v-5da1571d]{display:flex;flex-direction:column;gap:.25rem;padding:.75rem 1rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:.5rem;text-align:left;cursor:pointer;transition:background-color .15s,border-color .15s,transform .1s}.command-card[data-v-5da1571d]:hover{background:var(--color-bg-hover);border-color:var(--color-accent)}.command-card[data-v-5da1571d]:active{transform:scale(.98)}.command-name[data-v-5da1571d]{font-size:.875rem;font-weight:600;color:var(--color-accent);font-family:ui-monospace,monospace}.command-description[data-v-5da1571d]{font-size:.75rem;color:var(--color-text-soft);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.command-args-badge[data-v-5da1571d]{display:inline-block;margin-top:.25rem;padding:.125rem .375rem;font-size:.625rem;font-weight:500;text-transform:uppercase;background:rgba(var(--color-accent-rgb, 88, 166, 255),.15);color:var(--color-accent);border-radius:.25rem;width:fit-content}@media (max-width: 480px){.command-cards[data-v-5da1571d]{grid-template-columns:1fr}}.arguments-form[data-v-e56eba15]{display:flex;flex-direction:column;gap:1.5rem}.form-header[data-v-e56eba15]{display:flex;flex-direction:column;gap:.25rem}.command-title[data-v-e56eba15]{margin:0;font-size:1.25rem;font-weight:600;color:var(--color-accent);font-family:ui-monospace,monospace}.command-description[data-v-e56eba15]{margin:0;font-size:.875rem;color:var(--color-text-soft)}.form-fields[data-v-e56eba15]{display:flex;flex-direction:column;gap:1rem}.form-field[data-v-e56eba15]{display:flex;flex-direction:column;gap:.375rem}.field-label[data-v-e56eba15]{font-size:.875rem;font-weight:500;color:var(--color-text)}.required-indicator[data-v-e56eba15]{color:var(--color-danger, #ef4444);margin-left:.125rem}.hint[data-v-e56eba15]{margin-left:.5rem;font-size:.75rem;font-weight:400;color:var(--color-text-soft);font-family:ui-monospace,monospace}.field-input[data-v-e56eba15],.field-select[data-v-e56eba15],.field-textarea[data-v-e56eba15]{padding:.625rem .875rem;font-size:.875rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:.5rem;color:var(--color-text);outline:none;transition:border-color .15s}.field-input[data-v-e56eba15]:focus,.field-select[data-v-e56eba15]:focus,.field-textarea[data-v-e56eba15]:focus{border-color:var(--color-accent)}.field-input[data-v-e56eba15]::placeholder,.field-textarea[data-v-e56eba15]::placeholder{color:var(--color-text-soft)}.field-textarea[data-v-e56eba15]{resize:vertical;min-height:100px}.field-select[data-v-e56eba15]{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%236b7280' d='M6 8L1 3h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .75rem center;padding-right:2.5rem}.form-actions[data-v-e56eba15]{display:flex;justify-content:flex-end;gap:.75rem;margin-top:.5rem;padding-top:1rem;border-top:1px solid var(--color-border)}.btn[data-v-e56eba15]{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:.625rem 1.25rem;font-size:.875rem;font-weight:500;border-radius:.5rem;cursor:pointer;transition:background-color .15s,border-color .15s}.btn-primary[data-v-e56eba15]{background:var(--color-primary, #3b82f6);border:1px solid var(--color-primary, #3b82f6);color:#fff}.btn-primary[data-v-e56eba15]:hover:not(:disabled){background:var(--color-primary-hover, #2563eb);border-color:var(--color-primary-hover, #2563eb)}.btn-primary[data-v-e56eba15]:disabled{opacity:.6;cursor:not-allowed}.btn-secondary[data-v-e56eba15]{background:var(--color-background-soft);border:1px solid var(--color-border);color:var(--color-text-soft)}.btn-secondary[data-v-e56eba15]:hover{background:var(--color-bg-hover);border-color:var(--color-border-hover)}.loading-spinner[data-v-e56eba15]{width:1rem;height:1rem;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin-e56eba15 .6s linear infinite}@keyframes spin-e56eba15{to{transform:rotate(360deg)}}@media (max-width: 480px){.form-actions[data-v-e56eba15]{flex-direction:column-reverse}.btn[data-v-e56eba15]{width:100%}}.wizard-overlay[data-v-138fa079]{position:fixed;top:0;left:0;right:0;bottom:0;display:flex;align-items:center;justify-content:center;background:#0009;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:1000}.wizard-modal[data-v-138fa079]{width:100%;max-width:600px;max-height:80vh;display:flex;flex-direction:column;background:var(--color-background);border:1px solid var(--color-border);border-radius:.75rem;box-shadow:0 20px 50px #0006;overflow:hidden}.wizard-header[data-v-138fa079]{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid var(--color-border);flex-shrink:0}.wizard-title[data-v-138fa079]{margin:0;font-size:1.125rem;font-weight:600;color:var(--color-text)}.close-btn[data-v-138fa079]{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;font-size:1.5rem;font-weight:400;background:transparent;border:none;border-radius:.375rem;color:var(--color-text-soft);cursor:pointer;transition:background-color .15s,color .15s}.close-btn[data-v-138fa079]:hover{background:var(--color-background-soft);color:var(--color-text)}.wizard-content[data-v-138fa079]{flex:1;padding:1.25rem;overflow-y:auto}.modal-enter-active[data-v-138fa079],.modal-leave-active[data-v-138fa079]{transition:opacity .2s ease}.modal-enter-active .wizard-modal[data-v-138fa079],.modal-leave-active .wizard-modal[data-v-138fa079]{transition:transform .2s ease}.modal-enter-from[data-v-138fa079],.modal-leave-to[data-v-138fa079]{opacity:0}.modal-enter-from .wizard-modal[data-v-138fa079]{transform:scale(.95) translateY(-10px)}.modal-leave-to .wizard-modal[data-v-138fa079]{transform:scale(.95) translateY(10px)}@media (max-width: 640px){.wizard-modal[data-v-138fa079]{margin:1rem;max-height:calc(100vh - 2rem)}}