circuschief 0.8.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/packages/server/src/agents/AgentGateway.js +2 -0
- package/packages/server/src/agents/adapters/GeminiAdapter.js +105 -0
- package/packages/server/src/agents/adapters/cliUtils.js +15 -0
- package/packages/server/src/agents/adapters/codexCliRunner.js +1 -8
- package/packages/server/src/agents/adapters/geminiCliRunner.js +183 -0
- package/packages/server/src/agents/adapters/geminiEventMapper.js +195 -0
- package/packages/server/src/api/commandButtons.js +16 -15
- package/packages/server/src/api/projects-commandButtons.js +6 -6
- package/packages/server/src/api/projects-session-create.js +109 -0
- package/packages/server/src/api/projects-session-defaults.js +51 -0
- package/packages/server/src/api/projects-session-helpers.js +47 -1
- package/packages/server/src/api/projects-templates.js +38 -0
- package/packages/server/src/api/projects.js +28 -180
- package/packages/server/src/api/sessions-commands.js +21 -18
- package/packages/server/src/api/sessions-patch.js +41 -1
- package/packages/server/src/db/ProviderRepository.js +4 -2
- package/packages/server/src/db/SessionRepository.js +1 -1
- package/packages/server/src/db/SessionTemplateRepository.js +23 -2
- package/packages/server/src/db/migrations/canvasItemsMigrations.js +109 -0
- package/packages/server/src/db/migrations/conversationsMigrations.js +187 -0
- package/packages/server/src/db/migrations/index.js +234 -6
- package/packages/server/src/db/migrations/kanbanMigrations.js +99 -0
- package/packages/server/src/db/migrations/miscMigrations.js +244 -0
- package/packages/server/src/db/migrations/projectsMigrations.js +130 -0
- package/packages/server/src/db/migrations/providerCommitAttributionMigrations.js +30 -0
- package/packages/server/src/db/migrations/providerMigrations.js +250 -0
- package/packages/server/src/db/migrations/sessionTableRecreate.js +136 -0
- package/packages/server/src/db/migrations/sessionsMigrations.js +300 -0
- package/packages/server/src/db/seedBaselineData.js +23 -1
- package/packages/server/src/db/session-helpers.js +26 -1
- package/packages/server/src/schema.sql +5 -1
- package/packages/server/src/services/commandButtonPrompts.js +9 -7
- package/packages/server/src/services/e2eSpawnCapture.js +47 -6
- package/packages/server/src/services/geminiSpawnHelper.js +47 -0
- package/packages/server/src/services/gitCommitAttribution.js +38 -8
- package/packages/server/src/services/gitDiff.js +107 -0
- package/packages/server/src/services/gitRepoUrl.js +174 -0
- package/packages/server/src/services/gitService.js +43 -311
- package/packages/server/src/services/gitWorktree.js +127 -0
- package/packages/server/src/services/providerTestService.js +59 -1
- package/packages/server/src/services/queryParamBuilder.js +33 -1
- package/packages/server/src/services/sessionExecution.js +4 -0
- package/packages/server/src/services/sessionPrompts.js +23 -1
- package/packages/server/src/services/sessionProvider.js +41 -1
- package/packages/shared/src/constants.js +1 -1
- package/packages/shared/src/contracts/providers.js +1 -1
- package/packages/shared/src/contracts/sessions.js +27 -1
- package/packages/shared/src/contracts/templates.js +10 -0
- package/packages/shared/src/types.js +7 -0
- package/packages/web/dist/assets/{ActiveSessionsView-B0XHqLmv.js → ActiveSessionsView-EdNxmPmZ.js} +1 -1
- package/packages/web/dist/assets/{AgentLogsView-DmsjUMlB.js → AgentLogsView-C2wX0JPP.js} +2 -2
- package/packages/web/dist/assets/ApiClient-DfbJwzpz.js +1 -0
- package/packages/web/dist/assets/ArchiveConfirmModal-DJERn5XO.js +1 -0
- package/packages/web/dist/assets/CommandButtonDetailView-CBPI8-US.js +1 -0
- package/packages/web/dist/assets/CommandButtonDetailView-D9zjx9ME.css +1 -0
- package/packages/web/dist/assets/EffortLevelSelector-PaBpUveC.js +1 -0
- package/packages/web/dist/assets/{GeneralSettingsView-D1nI8_zk.js → GeneralSettingsView-Dw-x83R0.js} +1 -1
- package/packages/web/dist/assets/{InputWithButton-CAkttyqx.js → InputWithButton-CHHcpF4I.js} +1 -1
- package/packages/web/dist/assets/{InterpolationHelp-BO1j9Z3_.js → InterpolationHelp-CLNPz8s8.js} +1 -1
- package/packages/web/dist/assets/MarkdownEditor-DYi1igfT.js +2 -0
- package/packages/web/dist/assets/ModelSelector-Cko_yTO5.js +1 -0
- package/packages/web/dist/assets/{ModelSelector-BSxKUSus.css → ModelSelector-Dtwe5xLH.css} +1 -1
- package/packages/web/dist/assets/{NewSessionView-BDPb-1qr.css → NewSessionView-DBl7T2Xp.css} +1 -1
- package/packages/web/dist/assets/NewSessionView-DwUfBg70.js +3 -0
- package/packages/web/dist/assets/ProjectEditView-CSbsea3U.js +1 -0
- package/packages/web/dist/assets/ProjectEditView-DbqTbA0q.css +1 -0
- package/packages/web/dist/assets/{ProjectListView-DcNyuINs.js → ProjectListView-CEc_LWZL.js} +1 -1
- package/packages/web/dist/assets/{ProjectNewView-B5YV62hv.js → ProjectNewView-D4U0uRlp.js} +1 -1
- package/packages/web/dist/assets/ProvidersView-2KCOiY6Q.css +1 -0
- package/packages/web/dist/assets/ProvidersView-CD1j8BOv.js +1 -0
- package/packages/web/dist/assets/QuickResponsesPanel-Dp39f12o.js +1 -0
- package/packages/web/dist/assets/QuickResponsesPanel-dk-Rj8xx.css +1 -0
- package/packages/web/dist/assets/ResizableTextarea-BWywIqOv.js +1 -0
- package/packages/web/dist/assets/ResizableTextarea-DERSH3Wz.css +1 -0
- package/packages/web/dist/assets/SessionCard-B6d5ijDW.js +1 -0
- package/packages/web/dist/assets/SessionDetailView-DWbXdx7A.js +36 -0
- package/packages/web/dist/assets/SessionDetailView-ULeIkWS0.css +1 -0
- package/packages/web/dist/assets/{SessionFormOptions-B6AxyREh.js → SessionFormOptions-Dz9ik4Fo.js} +1 -1
- package/packages/web/dist/assets/{SessionListView-B5_6gW49.css → SessionListView-3-xx6EVs.css} +1 -1
- package/packages/web/dist/assets/SessionListView-C129buBe.js +1 -0
- package/packages/web/dist/assets/{SessionLogStream-LlZ3z_Xj.js → SessionLogStream-BvXUNNBZ.js} +6 -6
- package/packages/web/dist/assets/{SettingsView-CTGiGvR2.js → SettingsView-DW1NvpX_.js} +1 -1
- package/packages/web/dist/assets/SlashCommandWizard-DleYBxrE.js +1 -0
- package/packages/web/dist/assets/{SummarySettingsView-BR2ZjEa3.js → SummarySettingsView-CLUfcWvf.js} +1 -1
- package/packages/web/dist/assets/TemplateDetailView-B5NI2oTR.css +1 -0
- package/packages/web/dist/assets/TemplateDetailView-Cukb205e.js +1 -0
- package/packages/web/dist/assets/{commandButtons-BfqR-fqq.js → commandButtons-DejH0rVN.js} +1 -1
- package/packages/web/dist/assets/index-BD7Y3rBE.js +3 -0
- package/packages/web/dist/assets/{index-BY174HVJ.css → index-Bd20AzX1.css} +1 -1
- package/packages/web/dist/assets/index-BgJiarKe.js +1 -0
- package/packages/web/dist/assets/index-Bk32fSSG.js +1 -0
- package/packages/web/dist/assets/index-BkA6pF2Z.js +1 -0
- package/packages/web/dist/assets/index-Cltr-Ldt.js +7 -0
- package/packages/web/dist/assets/index-Co-46Tp3.js +1 -0
- package/packages/web/dist/assets/index-Cpykk857.js +1 -0
- package/packages/web/dist/assets/index-CtABl0D1.js +1 -0
- package/packages/web/dist/assets/index-Cuqk5m9S.js +1 -0
- package/packages/web/dist/assets/{index-fK8FIZgP.js → index-CvXApbVC.js} +15 -15
- package/packages/web/dist/assets/index-D2gN-xEH.js +1 -0
- package/packages/web/dist/assets/index-Dd3WpmyQ.js +1 -0
- package/packages/web/dist/assets/index-Dk6--9rj.js +1 -0
- package/packages/web/dist/assets/{index-DgkC10TW.js → index-MZf7MlPX.js} +3 -3
- package/packages/web/dist/assets/{index-DtfUt785.js → index-NShCcwfj.js} +1 -1
- package/packages/web/dist/assets/index-hA3VEuSq.js +1 -0
- package/packages/web/dist/assets/index-p0mp3nca.js +1 -0
- package/packages/web/dist/assets/index-qntNa5r_.js +1 -0
- package/packages/web/dist/assets/index-qq9ceNSK.js +1 -0
- package/packages/web/dist/assets/projectDefaults-D9xkp2XR.js +1 -0
- package/packages/web/dist/assets/{projects-DXYQNJIi.js → projects-BvLADGKx.js} +1 -1
- package/packages/web/dist/assets/{providers-1bnH-exJ.js → providers-DZ-fOa4G.js} +1 -1
- package/packages/web/dist/assets/{sessions-6zGUlFrt.js → sessions-DETEyjPI.js} +1 -1
- package/packages/web/dist/assets/{settings-MbfRir0d.js → settings-TWfbahn5.js} +1 -1
- package/packages/web/dist/index.html +2 -2
- package/packages/web/dist/assets/ApiClient-C3ztI9s9.js +0 -1
- package/packages/web/dist/assets/ArchiveConfirmModal-BlCyn5Vt.js +0 -1
- package/packages/web/dist/assets/CommandButtonDetailView-CdSCPp78.js +0 -1
- package/packages/web/dist/assets/CommandButtonDetailView-DBm3rzhw.css +0 -1
- package/packages/web/dist/assets/EffortLevelSelector-hc2MNKg6.js +0 -1
- package/packages/web/dist/assets/MarkdownEditor-ucRAP_UM.js +0 -2
- package/packages/web/dist/assets/ModelSelector-CwTz8ZWO.js +0 -1
- package/packages/web/dist/assets/NewSessionView-BsDrp8mj.js +0 -3
- package/packages/web/dist/assets/ProjectEditView-CwTOeSun.js +0 -1
- package/packages/web/dist/assets/ProjectEditView-J15mcsWz.css +0 -1
- package/packages/web/dist/assets/ProvidersView-bZemq_Rv.css +0 -1
- package/packages/web/dist/assets/ProvidersView-nY9GnDdO.js +0 -1
- package/packages/web/dist/assets/QuickResponseSettings-B352c75l.css +0 -1
- package/packages/web/dist/assets/QuickResponseSettings-BQwQXuL7.js +0 -1
- package/packages/web/dist/assets/QuickResponsesPanel-BlFDvnZ2.css +0 -1
- package/packages/web/dist/assets/QuickResponsesPanel-BzSYcCSP.js +0 -1
- package/packages/web/dist/assets/ResizableTextarea-B3YIdIXv.js +0 -1
- package/packages/web/dist/assets/ResizableTextarea-DsU3TVwF.css +0 -1
- package/packages/web/dist/assets/SessionCard-CjE1tXiT.js +0 -1
- package/packages/web/dist/assets/SessionDetailView-3cPZrbS3.js +0 -36
- package/packages/web/dist/assets/SessionDetailView-CZRZMrfM.css +0 -1
- package/packages/web/dist/assets/SessionListView-CLXBfLcq.js +0 -1
- package/packages/web/dist/assets/SlashCommandWizard-Cy04d7-o.js +0 -1
- package/packages/web/dist/assets/TemplateDetailView-DH6Oswsp.js +0 -1
- package/packages/web/dist/assets/TemplateDetailView-DT2m06W7.css +0 -1
- package/packages/web/dist/assets/index-1zziPL6l.js +0 -1
- package/packages/web/dist/assets/index-7kzHPxSF.js +0 -1
- package/packages/web/dist/assets/index-B0N_obMc.js +0 -1
- package/packages/web/dist/assets/index-BNk_gdfI.js +0 -1
- package/packages/web/dist/assets/index-CSqaAH-0.js +0 -1
- package/packages/web/dist/assets/index-C_q4WlK8.js +0 -1
- package/packages/web/dist/assets/index-D1wpU4y0.js +0 -7
- package/packages/web/dist/assets/index-D5zCA8sD.js +0 -1
- package/packages/web/dist/assets/index-DGR8ELWY.js +0 -1
- package/packages/web/dist/assets/index-DHga8pXo.js +0 -1
- package/packages/web/dist/assets/index-DSby02Wl.js +0 -1
- package/packages/web/dist/assets/index-DqjXJTVI.js +0 -1
- package/packages/web/dist/assets/index-_4S2uLDI.js +0 -1
- package/packages/web/dist/assets/index-gmiZeFXN.js +0 -1
- package/packages/web/dist/assets/index-irD539ZM.js +0 -3
- package/packages/web/dist/assets/index-yq-E1Y00.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{M as I}from"./index-fK8FIZgP.js";import{a as h}from"./ApiClient-C3ztI9s9.js";function R(){return Math.random().toString(16).substring(2,6)}function l(e){return e?(e.inputTokens||0)+(e.outputTokens||0)+(e.thinkingTokens||0)+(e.cacheReadInputTokens||0)+(e.cacheCreationInputTokens||0):0}function v(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 A(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 q(e,t){const s=R();let i;return t&&t.trim()?i=x(A(t.trim())):i="session",i||(i="session"),`circus-chief/${s}-${i}`}const L=I("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){return{input:g(e.inputTokens),output:g(e.outputTokens),thinking:g(e.thinkingTokens),total:g(l(e)),cacheRead:g(e.cacheReadInputTokens),cacheCreation:g(e.cacheCreationInputTokens)}}function T(e){return e.runningUsage?!e.activeConversationId||e.runningUsage.conversationId===e.activeConversationId:!1}function u(e){return e.conversations.find(t=>t.id===e.activeConversationId)}function f(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),thinkingTokens:((e==null?void 0:e.thinkingTokens)||0)+(t.thinkingTokens||0),cacheReadInputTokens:((e==null?void 0:e.cacheReadInputTokens)||0)+(t.cacheReadInputTokens||0),cacheCreationInputTokens:((e==null?void 0:e.cacheCreationInputTokens)||0)+(t.cacheCreationInputTokens||0)}}function p(e){return{inputTokens:e.inputTokens,outputTokens:e.outputTokens,thinkingTokens:e.thinkingTokens,cacheReadInputTokens:e.cacheReadInputTokens,cacheCreationInputTokens:e.cacheCreationInputTokens}}const _={conversationTokens:e=>{const t=e.conversations.find(s=>s.id===e.activeConversationId);return t?{inputTokens:t.inputTokens||0,outputTokens:t.outputTokens||0,thinkingTokens:t.thinkingTokens||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?l(t):e.currentSession?l(e.currentSession):0},formattedTokens:e=>{if(T(e)){const t=f(u(e),e.runningUsage);return C(t)}if(e.activeConversationId&&e.conversations.length>0){const t=u(e);if(t)return C(p(t))}return{input:"-",output:"-",thinking:"-",total:"-",cacheRead:"-",cacheCreation:"-"}},contextPercentage:e=>{if(T(e)){const n=u(e),o=f(n,e.runningUsage),r=l(o),a=e.runningUsage.contextWindow||(n==null?void 0:n.contextWindow)||2e5;return Math.min(100,Math.round(r/a*100))}const s=u(e)||e.currentSession;if(!s)return 0;const i=l(s);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,thinkingTokens:0,total:0};if(e.runningUsage&&e.runningUsage.conversationId===t){const i=f(s,e.runningUsage);return{...i,total:l(i)}}return{inputTokens:s.inputTokens||0,outputTokens:s.outputTokens||0,thinkingTokens:s.thinkingTokens||0,total:l(s)}},tokenTotal:e=>{if(T(e))return l(f(u(e),e.runningUsage));if(e.activeConversationId&&e.conversations.length>0){const t=u(e);if(t)return l(p(t))}return 0},formattedTokenTotal:e=>{if(T(e))return v(l(f(u(e),e.runningUsage)));if(e.activeConversationId&&e.conversations.length>0){const t=u(e);if(t)return v(l(p(t)))}return"-"},getConversationTokenTotal:e=>t=>{const s=e.conversations.find(i=>i.id===t);return s?e.runningUsage&&e.runningUsage.conversationId===t?l(f(s,e.runningUsage)):l(p(s)):0},getFormattedConversationTokenTotal:e=>t=>{const s=e.conversations.find(n=>n.id===t);if(!s)return"-";const i=e.runningUsage&&e.runningUsage.conversationId===t?f(s,e.runningUsage):p(s);return v(l(i))},getSessionTokenTotal:e=>t=>{var a;const s=c=>c?l(c):0,i=e.sessions.find(c=>c.id===t)||(((a=e.currentSession)==null?void 0:a.id)===t?e.currentSession:null);if(!i)return 0;let n=s(i);const o=[t],r=new Set;for(;o.length>0;){const c=o.pop();if(r.has(c))continue;r.add(c);const S=e.sessions.filter(d=>d.parentSessionId===c);for(const d of S)n+=s(d),o.push(d.id)}return n},getFormattedSessionTokenTotal:e=>t=>v(_.getSessionTokenTotal(e)(t))};function k(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 P(e,t,s){try{const o=(await h.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 F(e,t,s){const i=e.find(o=>o.id===s.id),n=i?{...i,...s}:s;return k(t,n,!0),e.filter(o=>o.id!==s.id)}async function U(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 h.getSession(s);e.push(n),s=n.parentSessionId}catch(n){console.error("Failed to fetch parent session:",n);break}}}const b={async fetchActiveSessions(e=!0){e&&(this.loading=!0),this.error=null;try{this.activeSessions=await h.getActiveSessions()}catch(t){this.error=t.message}finally{e&&(this.loading=!1)}},async fetchSessions(e,{silent:t=!1}={}){t||(this.loading=!0),this.error=null;try{this.sessions=await h.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 h.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 h.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 U(this.sessions,this.currentSession.parentSessionId),(i=this.currentSession)!=null&&i.projectId&&await P(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 h.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 h.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 h.stopSession(e),this._updateSessionInAllLists(e,{status:"stopped"})}catch(t){throw this.error=t.message,t}},async restartSession(e){this.error=null;try{await h.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,i=void 0){this.error=null;try{const n=await h.startSession(e,t,s,i);return this._updateSessionInAllLists(e,{status:"starting"}),n}catch(n){throw this.error=n.message,n}},async deleteSession(e){var t;this.error=null;try{await h.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 h.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 h.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 h.duplicateSession(e,t)}catch(s){throw this.error=s.message,s}},async toggleSessionStar(e){this.error=null;try{const t=await h.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 h.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 h.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=F(this.sessions,this.archivedSessions,e),this.activeSessions=this.activeSessions.filter(s=>s.id!==e.id)):e.archived===!1?this.archivedSessions=F(this.archivedSessions,this.sessions,e):(k(this.sessions,e),k(this.archivedSessions,e)),((t=this.currentSession)==null?void 0:t.id)===e.id&&(this.currentSession={...this.currentSession,...e}),k(this.activeSessions,e))},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))}},M={async fetchConversations(e){var t;if(!(this.viewedSessionId&&this.viewedSessionId!==e)){this.error=null;try{const s=await h.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 h.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 h.updateConversation(e,t,{isActive:!0}),this.conversations=this.conversations.map(s=>({...s,isActive:s.id===t})),this.activeConversationId=t,this.messages=await h.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 h.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 h.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 h.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 h.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([h.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}},m=5e3,W={_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 h.getConversationMessages(e,i):await h.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 h.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,thinkingTokens:e.thinkingTokens,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,thinkingTokens:e.thinkingTokens,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,thinkingTokens:t.thinkingTokens,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>=m&&this.clearRecentSend(e)},m))},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={}}}},B={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<m:!1}},$=I("sessions",{state:()=>({sessions:[],archivedSessions:[],activeSessions:[],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,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 c of a)s.push(c),i.push(c.id)}const o=["running","starting"];return s.some(r=>o.includes(r.status))?"running":"idle"}},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 d=i.pop();if(n.has(d))continue;n.add(d);const y=this._findChildren(d);for(const w of y)s.push(w),i.push(w.id)}const o=["running","starting"];let r=0,a=0,c=0,S=0;for(const d of s)o.includes(d.status)?r++:d.status==="scheduled"?a++:d.status==="waiting"?c++:(d.status==="completed"||d.status==="stopped")&&S++;return{effectiveStatus:r>0?"running":"idle",runningCount:r,scheduledCount:a,waitingCount:c,completedCount:S,totalCount:s.length-1,hasScheduledDescendant:s.slice(1).some(d=>d.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},...B,..._},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})},...b,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 L()},_syncFilterToSubStore(e){this._filtersStore()[e]=this[e]},updateSessionCommandRun(e,t,s){const i=r=>{if(!r)return null;const a=[...r.latestCommandRuns||[]],c=a.findIndex(S=>S.buttonId===t);return c>=0?a[c]=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++},...W,...M}});export{B as a,M as c,v as f,q as g,W as p,_ as t,$ as u};
|
|
1
|
+
import{p as I}from"./index-CvXApbVC.js";import{a as c}from"./ApiClient-DfbJwzpz.js";function R(){return Math.random().toString(16).substring(2,6)}function l(e){return e?(e.inputTokens||0)+(e.outputTokens||0)+(e.thinkingTokens||0)+(e.cacheReadInputTokens||0)+(e.cacheCreationInputTokens||0):0}function v(e){return!e||e===0?"0":e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(e)}function A(e,t=30){return e.toLowerCase().replace(/[^a-z0-9\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").substring(0,t)}function x(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 q(e,t){const s=R();let i;return t&&t.trim()?i=A(x(t.trim())):i="session",i||(i="session"),`circus-chief/${s}-${i}`}const L=I("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){return{input:g(e.inputTokens),output:g(e.outputTokens),thinking:g(e.thinkingTokens),total:g(l(e)),cacheRead:g(e.cacheReadInputTokens),cacheCreation:g(e.cacheCreationInputTokens)}}function T(e){return e.runningUsage?!e.activeConversationId||e.runningUsage.conversationId===e.activeConversationId:!1}function u(e){return e.conversations.find(t=>t.id===e.activeConversationId)}function f(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),thinkingTokens:((e==null?void 0:e.thinkingTokens)||0)+(t.thinkingTokens||0),cacheReadInputTokens:((e==null?void 0:e.cacheReadInputTokens)||0)+(t.cacheReadInputTokens||0),cacheCreationInputTokens:((e==null?void 0:e.cacheCreationInputTokens)||0)+(t.cacheCreationInputTokens||0)}}function p(e){return{inputTokens:e.inputTokens,outputTokens:e.outputTokens,thinkingTokens:e.thinkingTokens,cacheReadInputTokens:e.cacheReadInputTokens,cacheCreationInputTokens:e.cacheCreationInputTokens}}const _={conversationTokens:e=>{const t=e.conversations.find(s=>s.id===e.activeConversationId);return t?{inputTokens:t.inputTokens||0,outputTokens:t.outputTokens||0,thinkingTokens:t.thinkingTokens||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?l(t):e.currentSession?l(e.currentSession):0},formattedTokens:e=>{if(T(e)){const t=f(u(e),e.runningUsage);return C(t)}if(e.activeConversationId&&e.conversations.length>0){const t=u(e);if(t)return C(p(t))}return{input:"-",output:"-",thinking:"-",total:"-",cacheRead:"-",cacheCreation:"-"}},contextPercentage:e=>{if(T(e)){const n=u(e),o=f(n,e.runningUsage),r=l(o),a=e.runningUsage.contextWindow||(n==null?void 0:n.contextWindow)||2e5;return Math.min(100,Math.round(r/a*100))}const s=u(e)||e.currentSession;if(!s)return 0;const i=l(s);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,thinkingTokens:0,total:0};if(e.runningUsage&&e.runningUsage.conversationId===t){const i=f(s,e.runningUsage);return{...i,total:l(i)}}return{inputTokens:s.inputTokens||0,outputTokens:s.outputTokens||0,thinkingTokens:s.thinkingTokens||0,total:l(s)}},tokenTotal:e=>{if(T(e))return l(f(u(e),e.runningUsage));if(e.activeConversationId&&e.conversations.length>0){const t=u(e);if(t)return l(p(t))}return 0},formattedTokenTotal:e=>{if(T(e))return v(l(f(u(e),e.runningUsage)));if(e.activeConversationId&&e.conversations.length>0){const t=u(e);if(t)return v(l(p(t)))}return"-"},getConversationTokenTotal:e=>t=>{const s=e.conversations.find(i=>i.id===t);return s?e.runningUsage&&e.runningUsage.conversationId===t?l(f(s,e.runningUsage)):l(p(s)):0},getFormattedConversationTokenTotal:e=>t=>{const s=e.conversations.find(n=>n.id===t);if(!s)return"-";const i=e.runningUsage&&e.runningUsage.conversationId===t?f(s,e.runningUsage):p(s);return v(l(i))},getSessionTokenTotal:e=>t=>{var a;const s=h=>h?l(h):0,i=e.sessions.find(h=>h.id===t)||(((a=e.currentSession)==null?void 0:a.id)===t?e.currentSession:null);if(!i)return 0;let n=s(i);const o=[t],r=new Set;for(;o.length>0;){const h=o.pop();if(r.has(h))continue;r.add(h);const S=e.sessions.filter(d=>d.parentSessionId===h);for(const d of S)n+=s(d),o.push(d.id)}return n},getFormattedSessionTokenTotal:e=>t=>v(_.getSessionTokenTotal(e)(t))};function k(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 P(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 F(e,t,s){const i=e.find(o=>o.id===s.id),n=i?{...i,...s}:s;return k(t,n,!0),e.filter(o=>o.id!==s.id)}async function U(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 b={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 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 U(this.sessions,this.currentSession.parentSessionId),(i=this.currentSession)!=null&&i.projectId&&await P(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,i=void 0){this.error=null;try{const n=await c.startSession(e,t,s,i);return this._updateSessionInAllLists(e,{status:"starting"}),n}catch(n){throw this.error=n.message,n}},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=F(this.sessions,this.archivedSessions,e),this.activeSessions=this.activeSessions.filter(s=>s.id!==e.id)):e.archived===!1?this.archivedSessions=F(this.archivedSessions,this.sessions,e):(k(this.sessions,e),k(this.archivedSessions,e)),((t=this.currentSession)==null?void 0:t.id)===e.id&&(this.currentSession={...this.currentSession,...e}),k(this.activeSessions,e))},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))}},M={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}},m=5e3,W={_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._bumpActivityTimestamps(e),!(this.currentSession&&e.sessionId&&e.sessionId!==this.currentSession.id)&&(this.messages.some(t=>t.id===e.id)||this.messages.push(e))},_bumpActivityTimestamps(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={},n=(s==null?void 0:s.lastActivityAt)??0;(!n||t>n)&&(i.lastActivityAt=t);const o=(s==null?void 0:s.lastMessageAt)??0;(!o||t>o)&&(i.lastMessageAt=t),Object.keys(i).length>0&&this._updateSessionInAllLists(e.sessionId,i)},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,thinkingTokens:e.thinkingTokens,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,thinkingTokens:e.thinkingTokens,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,thinkingTokens:t.thinkingTokens,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>=m&&this.clearRecentSend(e)},m))},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={}}}},B={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<m:!1}},$=I("sessions",{state:()=>({sessions:[],archivedSessions:[],activeSessions:[],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,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,o=[];for(const r of s)n.has(r.id)||(o.push(r),n.add(r.id));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 h of a)s.push(h),i.push(h.id)}const o=["running","starting"];return s.some(r=>o.includes(r.status))?"running":"idle"}},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 d=i.pop();if(n.has(d))continue;n.add(d);const y=this._findChildren(d);for(const w of y)s.push(w),i.push(w.id)}const o=["running","starting"];let r=0,a=0,h=0,S=0;for(const d of s)o.includes(d.status)?r++:d.status==="scheduled"?a++:d.status==="waiting"?h++:(d.status==="completed"||d.status==="stopped")&&S++;return{effectiveStatus:r>0?"running":"idle",runningCount:r,scheduledCount:a,waitingCount:h,completedCount:S,totalCount:s.length-1,hasScheduledDescendant:s.slice(1).some(d=>d.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.sort((i,n)=>{const o=i.parent.starred?1:0;return(n.parent.starred?1:0)-o}),t},...B,..._},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})},...b,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 L()},_syncFilterToSubStore(e){this._filtersStore()[e]=this[e]},updateSessionCommandRun(e,t,s){const i=r=>{if(!r)return null;const a=[...r.latestCommandRuns||[]],h=a.findIndex(S=>S.buttonId===t);return h>=0?a[h]=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++},...W,...M}});export{B as a,M as c,v as f,q as g,W as p,_ as t,$ as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{p as i,ac as r}from"./index-CvXApbVC.js";import{a as s}from"./ApiClient-DfbJwzpz.js";const l=i("settings",{state:()=>({tokenCostWeights:{...r},summarySettings:{disableSessionSummaries:!1,sessionTitlePrompt:"",summaryModel:"",summaryProviderId:null,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:"",summaryModel:"",summaryProviderId:null,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,8 +8,8 @@
|
|
|
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-
|
|
12
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
11
|
+
<script type="module" crossorigin src="/assets/index-CvXApbVC.js"></script>
|
|
12
|
+
<link rel="stylesheet" crossorigin href="/assets/index-Bd20AzX1.css">
|
|
13
13
|
</head>
|
|
14
14
|
<body>
|
|
15
15
|
<div id="app"></div>
|
|
@@ -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 S(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 j(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),j(s,n,["name","mode","model","providerId","effortLevel","gitBranch","gitMode","templateId","parentSessionId"]),k(s,n,["thinkingEnabled","startImmediately","autoRescheduleEnabled","rescheduleOnTokenLimit","rescheduleOnServiceError"]),j(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 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,r){const a={};return s!==void 0&&(a.prompt=s),t!==void 0&&(a.model=t),r!==void 0&&(a.providerId=r),this._post(`/sessions/${e}/start`,Object.keys(a).length>0?a: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 getCanvasItemContent(e,s){return this._get(`/sessions/${e}/canvas/${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 A(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 R(n){Object.assign(n.prototype,{async getAgents(){return this._get("/agents")}})}function I(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 O(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 D(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 F(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 Q(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 B(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 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 c={};return e!=null&&(c.limit=e),s!=null&&(c.offset=s),t&&(c.agentType=t),r&&(c.callType=r),a&&(c.status=a),o&&(c.startDate=o),m&&(c.endDate=m),_&&(c.sessionId=_),$&&(c.model=$),f&&(c.sortBy=f),v&&(c.sortOrder=v),this._get(this._buildQueryPath("/agent-calls",c))},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 L(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 i{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.message||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.message||o.error||`HTTP ${a.status}`)}return a.status===204?null:a.json()};S(i);T(i);w(i);A(i);R(i);I(i);O(i);D(i);F(i);Q(i);B(i);L(i);const E=new i;export{E as a};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as B,k as T,l as I,o as O,A,a as r,c,b as e,t as p,F as j,r as q,E as z,m as L,H as D,i as h,q as N,j as R,x as k,n as g,G,f as $,U as H}from"./index-fK8FIZgP.js";import{u as K}from"./SessionLogStream-LlZ3z_Xj.js";const P={class:"modal-content",role:"dialog","aria-labelledby":"modal-title"},J={class:"modal-body"},Q={class:"moving-info"},W={class:"moving-session-name"},X={key:0,class:"empty-state"},Y={key:1,class:"lanes-list"},Z={class:"lane-label"},ee=["name","value","disabled","aria-disabled","aria-label"],ae={class:"lane-info"},ne={class:"lane-name"},oe={key:0,class:"lane-current-badge"},te={key:1,class:"lane-automation-icon",title:"Automation enabled"},se={key:2,class:"automation-option"},le={class:"checkbox-label"},ie={class:"modal-footer"},de=["disabled"],re=["disabled","aria-label"],ce=["disabled"],ue={__name:"MoveCardModal",props:{isOpen:Boolean,projectId:{type:String,required:!0},cardId:{type:String,required:!0},currentLaneId:{type:String,required:!0},sessionName:{type:String,default:""}},emits:["update:isOpen","close","moved"],setup(n,{emit:_}){const o=n,u=_,v=K(),f=T(),i=g(null),m=g(!0),b=g(!1),d=g(!1),s=k(()=>{var a;return((a=v.board)==null?void 0:a.lanes)||[]}),C=k(()=>o.sessionName?o.sessionName:o.cardId||"Unnamed session"),x=k(()=>i.value&&s.value.find(a=>a.id===i.value)||null),U=k(()=>x.value?w(x.value):!1),E=k(()=>i.value&&i.value!==o.currentLaneId);function w(a){return a?!!(a.onEnterTemplateId||a.onEnterPrompt):!1}function y(){u("update:isOpen",!1),u("close"),i.value=null,m.value=!0}async function V(){if(!(!E.value||!o.cardId)){b.value=!0;try{await v.moveCard(o.projectId,o.cardId,i.value,{runOnEnterTemplate:m.value}),f.success("Card moved successfully"),u("moved"),y()}catch(a){console.error("Failed to move card:",a),f.error(a.message||"Failed to move card")}finally{b.value=!1}}}async function F(){if(confirm("Remove this session from the board?")){d.value=!0;try{await v.removeCard(o.projectId,o.cardId),f.success("Session removed from board"),u("close")}catch(a){console.error("Failed to remove card:",a),f.error(a.message||"Failed to remove session")}finally{d.value=!1}}}I(i,(a,t)=>{if(a!==t){const l=s.value.find(M=>M.id===a);m.value=w(l)}}),I(()=>o.isOpen,a=>{a&&(i.value=null,m.value=!0)});function S(a){a.key==="Escape"&&o.isOpen&&y()}return O(()=>{document.addEventListener("keydown",S)}),A(()=>{document.removeEventListener("keydown",S)}),(a,t)=>n.isOpen?(r(),c("div",{key:0,class:"modal-backdrop",onClick:R(y,["self"])},[e("div",P,[e("div",{class:"modal-header"},[t[2]||(t[2]=e("h2",{id:"modal-title",class:"modal-title"}," Move to Lane ",-1)),e("button",{class:"close-btn","aria-label":"Close modal",onClick:y}," × ")]),e("div",J,[e("div",Q,[t[3]||(t[3]=e("span",{class:"moving-label"},"Moving:",-1)),e("span",W,p(C.value),1)]),s.value.length===0?(r(),c("div",X,[...t[4]||(t[4]=[e("p",null,"No lanes available",-1)])])):(r(),c("div",Y,[(r(!0),c(j,null,q(s.value,l=>(r(),c("div",{key:l.id,class:z(["lane-row",{"lane-row-current":l.id===n.currentLaneId,"lane-row-disabled":l.id===n.currentLaneId}])},[e("label",Z,[L(e("input",{"onUpdate:modelValue":t[0]||(t[0]=M=>i.value=M),type:"radio",name:`lane-${n.cardId}`,value:l.id,disabled:l.id===n.currentLaneId,"aria-disabled":l.id===n.currentLaneId,"aria-label":`Move to ${l.name}`},null,8,ee),[[D,i.value]]),e("span",ae,[e("span",ne,p(l.name),1),l.id===n.currentLaneId?(r(),c("span",oe,"(current)")):h("",!0),w(l)?(r(),c("span",te,[...t[5]||(t[5]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"14",viewBox:"0 0 24 24",fill:"currentColor"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z"})],-1)])])):h("",!0)])])],2))),128))])),U.value?(r(),c("div",se,[e("label",le,[L(e("input",{"onUpdate:modelValue":t[1]||(t[1]=l=>m.value=l),type:"checkbox","aria-label":"Run automation on entry"},null,512),[[N,m.value]]),t[6]||(t[6]=e("span",null,"Run automation on entry",-1))])])):h("",!0)]),e("div",ie,[e("button",{class:"btn btn-secondary",disabled:d.value,onClick:y}," Cancel ",8,de),e("button",{class:"btn btn-danger",disabled:d.value,"aria-label":`Remove ${C.value} from board`,onClick:F},p(d.value?"Removing...":"Remove from Board"),9,re),e("button",{class:"btn btn-primary",disabled:!E.value||b.value||d.value,"aria-label":"Move card to selected lane",onClick:V},p(b.value?"Moving...":"Move"),9,ce)])])])):h("",!0)}},Ie=B(ue,[["__scopeId","data-v-bddc7788"]]),ve={class:"modal-content",role:"dialog","aria-labelledby":"archive-modal-title"},me={class:"modal-header"},be=["disabled"],fe={class:"modal-body"},pe={class:"confirm-message"},he={key:0,class:"cleanup-option"},ye={class:"checkbox-label"},ke={class:"modal-footer"},ge=["disabled"],Ce=["disabled"],_e={__name:"ArchiveConfirmModal",props:{isOpen:{type:Boolean,default:!1},sessionName:{type:String,default:"this session"},hasCleanupScript:{type:Boolean,default:!1},loading:{type:Boolean,default:!1}},emits:["confirm","cancel"],setup(n,{emit:_}){const o=n,u=_,v=g(!0);I(()=>o.isOpen,d=>{d&&(v.value=!0)});function f(){u("confirm",v.value)}function i(){o.loading||u("cancel")}function m(){o.loading||u("cancel")}function b(d){d.key==="Escape"&&o.isOpen&&!o.loading&&u("cancel")}return O(()=>{document.addEventListener("keydown",b)}),A(()=>{document.removeEventListener("keydown",b)}),(d,s)=>(r(),G(H,{to:"body"},[n.isOpen?(r(),c("div",{key:0,class:"modal-backdrop",onClick:R(m,["self"])},[e("div",ve,[e("div",me,[s[1]||(s[1]=e("h2",{id:"archive-modal-title",class:"modal-title"}," Archive Session ",-1)),e("button",{class:"close-btn","aria-label":"Close modal",disabled:n.loading,onClick:i}," × ",8,be)]),e("div",fe,[e("p",pe,[s[2]||(s[2]=$(" Are you sure you want to archive ",-1)),e("strong",null,p(n.sessionName),1),s[3]||(s[3]=$("? ",-1))]),n.hasCleanupScript?(r(),c("div",he,[e("label",ye,[L(e("input",{"onUpdate:modelValue":s[0]||(s[0]=C=>v.value=C),type:"checkbox","aria-label":"Run git worktree cleanup"},null,512),[[N,v.value]]),s[4]||(s[4]=e("span",null,"Run git worktree cleanup",-1))])])):h("",!0)]),e("div",ke,[e("button",{class:"btn btn-secondary",disabled:n.loading,onClick:i}," Cancel ",8,ge),e("button",{class:"btn btn-primary",disabled:n.loading,onClick:f},p(n.loading?"Archiving...":"Archive"),9,Ce)])])])):h("",!0)]))}},Le=B(_e,[["__scopeId","data-v-140e797f"]]);export{Le as A,Ie as M};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as N,k as U,o as V,a as r,c as u,b as t,f as _,d as j,w as P,u as I,t as i,m as k,v as D,i as v,q as J,j as h,x as M,s as $,n as m,g as q,h as A}from"./index-fK8FIZgP.js";import{u as F}from"./commandButtons-BfqR-fqq.js";import{a as W}from"./ApiClient-C3ztI9s9.js";const p={PROJECT_ID:"projectId",PROJECT_ID_ALT:"id",BUTTON_ID:"buttonId",SESSION_ID:"id",SESSION_TAB:"tab"},z={class:"container command-button-detail"},G={key:0,class:"loading-state"},H={key:1,class:"form-container"},K={class:"form-header"},Q={class:"form-group"},X={key:0,class:"form-error"},Y={class:"form-group"},Z={key:0,class:"form-error"},ee={class:"form-group"},te={key:0,class:"form-error"},oe={class:"form-group form-group-checkbox"},se={for:"showOnList",class:"checkbox-label"},ae={class:"form-actions"},le=["disabled"],ne={key:0,class:"form-error-message"},re={class:"modal-body"},ue={class:"modal-footer"},de=["disabled"],ie={__name:"CommandButtonDetailView",setup(me){const d=$(),w=A(),O=F(),b=U(),B=m(!1),C=m(!1),g=m(!1),f=m(!1),c=m(null),a=m({}),o=m({label:"",command:"",sortOrder:0,showOnList:!1}),y=M(()=>!!d.params.buttonId),S=async s=>{B.value=!0;try{const e=d.params[p.PROJECT_ID];let l=O.getButtonById(s);l||(l=await W.getCommandButton(e,s)),l&&(o.value={label:l.label,command:l.command,sortOrder:l.sortOrder||0,showOnList:l.showOnList||!1})}catch(e){c.value=`Failed to load button: ${e.message}`}finally{B.value=!1}},T=()=>(a.value={},o.value.label.trim()||(a.value.label="Label is required"),o.value.command.trim()||(a.value.command="Command is required"),o.value.sortOrder<0&&(a.value.sortOrder="Sort order must be 0 or greater"),Object.keys(a.value).length===0),L=async()=>{if(c.value=null,!!T()){C.value=!0;try{const s=d.params[p.PROJECT_ID],e={label:o.value.label,command:o.value.command,sortOrder:o.value.sortOrder,showOnList:o.value.showOnList};y.value?(await O.updateButton(s,d.params[p.BUTTON_ID],e),b.success("Command button updated")):(await O.createButton(s,e),b.success("Command button created")),w.push(`/projects/${s}/sessions`)}catch(s){c.value=s.message,b.error(s.message)}finally{C.value=!1}}},x=()=>{w.back()},E=()=>{f.value=!0},R=async()=>{g.value=!0;try{const s=d.params[p.PROJECT_ID],e=d.params[p.BUTTON_ID];await O.deleteButton(s,e),b.success("Command button deleted"),f.value=!1,w.push(`/projects/${s}/sessions`)}catch(s){c.value=s.message,b.error(s.message)}finally{g.value=!1}};return V(async()=>{y.value&&await S(d.params.buttonId)}),(s,e)=>{const l=q("router-link");return r(),u("div",z,[B.value?(r(),u("div",G,[...e[7]||(e[7]=[t("span",{class:"loading-spinner"},null,-1),_(" Loading... ",-1)])])):(r(),u("div",H,[t("div",K,[j(l,{to:`/projects/${I(d).params[I(p).PROJECT_ID]}/sessions`,class:"btn btn-outline-secondary"},{default:P(()=>[...e[8]||(e[8]=[_(" ← Back ",-1)])]),_:1},8,["to"]),t("h2",null,i(y.value?"Edit Command Button":"New Command Button"),1)]),t("form",{class:"command-button-form",onSubmit:h(L,["prevent"])},[t("div",Q,[e[9]||(e[9]=t("label",{for:"label"},"Label",-1)),k(t("input",{id:"label","onUpdate:modelValue":e[0]||(e[0]=n=>o.value.label=n),type:"text",class:"form-input",placeholder:"e.g., Run Tests",required:""},null,512),[[D,o.value.label]]),a.value.label?(r(),u("span",X,i(a.value.label),1)):v("",!0)]),t("div",Y,[e[10]||(e[10]=t("label",{for:"command"},"Command",-1)),k(t("textarea",{id:"command","onUpdate:modelValue":e[1]||(e[1]=n=>o.value.command=n),class:"form-input",placeholder:"e.g., npm test",rows:"4",required:""},null,512),[[D,o.value.command]]),a.value.command?(r(),u("span",Z,i(a.value.command),1)):v("",!0)]),t("div",ee,[e[11]||(e[11]=t("label",{for:"sortOrder"},"Sort Order (optional)",-1)),k(t("input",{id:"sortOrder","onUpdate:modelValue":e[2]||(e[2]=n=>o.value.sortOrder=n),type:"number",class:"form-input",placeholder:"0",min:"0"},null,512),[[D,o.value.sortOrder,void 0,{number:!0}]]),a.value.sortOrder?(r(),u("span",te,i(a.value.sortOrder),1)):v("",!0),e[12]||(e[12]=t("span",{class:"form-help"},"Buttons are displayed in ascending order. Leave as 0 for default.",-1))]),t("div",oe,[t("label",se,[k(t("input",{id:"showOnList","onUpdate:modelValue":e[3]||(e[3]=n=>o.value.showOnList=n),type:"checkbox",class:"form-checkbox"},null,512),[[J,o.value.showOnList]]),e[13]||(e[13]=t("span",null,"Show status indicator on session lists",-1))]),e[14]||(e[14]=t("span",{class:"form-help"},"When enabled, the button status will be displayed on session cards",-1))]),t("div",ae,[t("button",{type:"button",class:"btn btn-outline-secondary",onClick:x}," Cancel "),y.value?(r(),u("button",{key:0,type:"button",class:"btn btn-outline-danger",onClick:E}," Delete ")):v("",!0),t("button",{type:"submit",class:"btn btn-primary",disabled:C.value},i(C.value?"Saving...":y.value?"Update":"Create"),9,le)]),c.value?(r(),u("div",ne,i(c.value),1)):v("",!0)],32)])),f.value?(r(),u("div",{key:2,class:"modal-overlay",onClick:e[6]||(e[6]=n=>f.value=!1)},[t("div",{class:"modal-dialog",onClick:e[5]||(e[5]=h(()=>{},["stop"]))},[e[18]||(e[18]=t("div",{class:"modal-header"},[t("h4",null,"Delete Command Button")],-1)),t("div",re,[t("p",null,[e[15]||(e[15]=_('Are you sure you want to delete "',-1)),t("strong",null,i(o.value.label),1),e[16]||(e[16]=_('"?',-1))]),e[17]||(e[17]=t("p",null,"This action cannot be undone.",-1))]),t("div",ue,[t("button",{class:"btn btn-outline-secondary",onClick:e[4]||(e[4]=n=>f.value=!1)}," Cancel "),t("button",{class:"btn btn-danger",disabled:g.value,onClick:R},i(g.value?"Deleting...":"Delete"),9,de)])])])):v("",!0)])}}},be=N(ie,[["__scopeId","data-v-b4855495"]]);export{be as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.command-button-detail[data-v-b4855495]{max-width:600px;margin:0 auto;padding:2rem 0}.loading-state[data-v-b4855495]{display:flex;align-items:center;justify-content:center;gap:.75rem;padding:3rem;color:var(--color-text-soft)}.form-container[data-v-b4855495]{display:flex;flex-direction:column;gap:2rem}.form-header[data-v-b4855495]{display:flex;align-items:center;gap:1rem}.form-header h2[data-v-b4855495]{margin:0;color:var(--color-text);flex:1}.command-button-form[data-v-b4855495]{display:flex;flex-direction:column;gap:1.5rem;background-color:var(--color-background-soft);border:1px solid var(--color-border);border-radius:var(--border-radius);padding:2rem}.form-group[data-v-b4855495]{display:flex;flex-direction:column;gap:.5rem}.form-group label[data-v-b4855495]{font-weight:500;color:var(--color-text);font-size:.95rem}.form-input[data-v-b4855495]{padding:.75rem;background-color:var(--color-background);border:1px solid var(--color-border);border-radius:var(--border-radius);color:var(--color-text);font-family:inherit;font-size:.95rem;transition:border-color .2s}.form-input[data-v-b4855495]:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px #58a6ff1a}.form-input[data-v-b4855495]::placeholder{color:var(--color-text-soft)}textarea.form-input[data-v-b4855495]{font-family:var(--font-mono);font-size:.85rem;resize:vertical;min-height:100px}.form-help[data-v-b4855495]{font-size:.85rem;color:var(--color-text-soft)}.form-error[data-v-b4855495]{font-size:.85rem;color:var(--color-error)}.form-group-checkbox[data-v-b4855495]{gap:.25rem}.checkbox-label[data-v-b4855495]{display:flex;align-items:center;gap:.5rem;font-weight:500;color:var(--color-text);font-size:.95rem;cursor:pointer;-webkit-user-select:none;user-select:none}.form-checkbox[data-v-b4855495]{width:18px;height:18px;cursor:pointer;accent-color:var(--color-primary)}.form-error-message[data-v-b4855495]{padding:.75rem;background-color:#f851491a;border:1px solid var(--color-error);border-radius:var(--border-radius);color:var(--color-error);font-size:.9rem}.form-actions[data-v-b4855495]{display:flex;gap:.75rem;justify-content:flex-end;margin-top:1rem}.form-actions button[data-v-b4855495]:disabled{opacity:.6;cursor:not-allowed}.modal-overlay[data-v-b4855495]{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000}.modal-dialog[data-v-b4855495]{background-color:var(--color-background-soft);border:1px solid var(--color-border);border-radius:var(--border-radius);max-width:400px;width:90%;overflow:hidden}.modal-header[data-v-b4855495]{padding:1rem;border-bottom:1px solid var(--color-border)}.modal-header h4[data-v-b4855495]{margin:0;color:var(--color-text)}.modal-body[data-v-b4855495]{padding:1.5rem 1rem;color:var(--color-text-soft)}.modal-body p[data-v-b4855495]{margin:.5rem 0}.modal-footer[data-v-b4855495]{padding:1rem;border-top:1px solid var(--color-border);display:flex;gap:.5rem;justify-content:flex-end}@media (max-width: 640px){.command-button-detail[data-v-b4855495]{padding:1rem}.form-header[data-v-b4855495]{flex-direction:column;align-items:flex-start}.command-button-form[data-v-b4855495]{padding:1.5rem 1rem}.form-actions[data-v-b4855495]{flex-direction:column-reverse}.form-actions button[data-v-b4855495]{width:100%}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{M as f,a2 as g,_ as b,k as E,n as h,l as _,a as p,c as m,b as I,F as w,r as x,t as j,u as L,x as C,S as O}from"./index-fK8FIZgP.js";import{a as r}from"./ApiClient-C3ztI9s9.js";import{u as P}from"./sessions-6zGUlFrt.js";const k=["low","medium","high","max","auto"],Y=[{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)"}],z="claude-opus-4-7",$=[{id:"gpt-5.5",name:"GPT-5.5",description:"Flagship coding and professional work",seedId:"openai-gpt-5-5"},{id:"gpt-5.4",name:"GPT-5.4",description:"High capability professional work",seedId:"openai-gpt-5-4"},{id:"gpt-5.4-mini",name:"GPT-5.4 mini",description:"Fast lower-cost coding and subagent work",seedId:"openai-gpt-5-4-mini"},{id:"gpt-5.3-codex",name:"GPT-5.3-Codex",description:"Coding-optimized agentic model",seedId:"openai-gpt-5-3-codex"}],q=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}}}}),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}}}),D=Symbol("overlay-sessions-store"),V=Symbol("overlay-todos-store");function B(){return g(D,P())}function J(){return g(V,F())}const G={class:"effort-selector"},M=["value","disabled"],R=["value"],A={__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=B(),T=E(),d=h(!1),S=["auto",...k.filter(a=>a!=="auto")].map(a=>({value:a,label:`${a.charAt(0).toUpperCase()+a.slice(1)} Effort`})),u=C(()=>{var a;return s.sessionId?((a=o.currentSession)==null?void 0:a.effortLevel)||"auto":s.modelValue||"auto"}),i=h(u.value),y=O(s,"modelValue");_([u,y],([a])=>{i.value=a||"auto"},{flush:"sync"});async function v(a){if(!d.value&&i.value!==a)if(i.value=a,s.sessionId){d.value=!0;try{await o.updateSessionFields(s.sessionId,{effortLevel:a==="auto"?null:a})}catch(c){i.value=u.value,T.error(c.message)}finally{d.value=!1}}else l("update:modelValue",a==="auto"?null:a)}return(a,c)=>(p(),m("div",G,[I("select",{id:"effort-select",value:i.value,disabled:t.disabled||d.value,class:"effort-select","aria-label":"Effort level",onChange:c[0]||(c[0]=n=>v(n.target.value))},[(p(!0),m(w,null,x(L(S),n=>(p(),m("option",{key:n.value,value:n.value},j(n.label),9,R))),128))],40,M)]))}},Q=b(A,[["__scopeId","data-v-8bc1fe64"]]);export{Y as C,z as D,Q as E,$ as O,D as S,V as T,F as a,B as b,J as c,q as u};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-DgkC10TW.js","assets/index-fK8FIZgP.js","assets/index-BY174HVJ.css","assets/SessionDetailView-3cPZrbS3.js","assets/sessions-6zGUlFrt.js","assets/ApiClient-C3ztI9s9.js","assets/projects-DXYQNJIi.js","assets/EffortLevelSelector-hc2MNKg6.js","assets/EffortLevelSelector-BQaQmU2d.css","assets/SessionLogStream-LlZ3z_Xj.js","assets/commandButtons-BfqR-fqq.js","assets/SessionLogStream-zPUTiGbe.css","assets/SlashCommandWizard-Cy04d7-o.js","assets/providers-1bnH-exJ.js","assets/SlashCommandWizard-DJzw3LP5.css","assets/useSummaryHelpers-GVg7sMWF.js","assets/ModelSelector-CwTz8ZWO.js","assets/ModelSelector-BSxKUSus.css","assets/ArchiveConfirmModal-BlCyn5Vt.js","assets/ArchiveConfirmModal-DeoCVGXt.css","assets/QuickResponseSettings-BQwQXuL7.js","assets/QuickResponseSettings-B352c75l.css","assets/QuickResponsesPanel-BzSYcCSP.js","assets/QuickResponsesPanel-BlFDvnZ2.css","assets/ResizableTextarea-B3YIdIXv.js","assets/ResizableTextarea-DsU3TVwF.css","assets/SessionDetailView-CZRZMrfM.css","assets/style-BTin-zR_.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{n as E,l as u,A as T,a as l,c as y,G as k,w as d,b as m,f as V,d as h,u as w,a8 as x,P as A,Q as p}from"./index-fK8FIZgP.js";import{u as P}from"./SessionDetailView-3cPZrbS3.js";import"./sessions-6zGUlFrt.js";import"./ApiClient-C3ztI9s9.js";import"./projects-DXYQNJIi.js";import"./EffortLevelSelector-hc2MNKg6.js";import"./SessionLogStream-LlZ3z_Xj.js";import"./commandButtons-BfqR-fqq.js";import"./SlashCommandWizard-Cy04d7-o.js";import"./providers-1bnH-exJ.js";import"./useSummaryHelpers-GVg7sMWF.js";import"./ModelSelector-CwTz8ZWO.js";import"./ArchiveConfirmModal-BlCyn5Vt.js";import"./QuickResponseSettings-BQwQXuL7.js";import"./QuickResponsesPanel-BzSYcCSP.js";import"./ResizableTextarea-B3YIdIXv.js";const b={class:"canvas-md-editor"},H={__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-DgkC10TW.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])).then(async e=>(await p(()=>Promise.resolve({}),__vite__mapDeps([27])),e.MdEditor))),r=c,n=v,g=P(),o=E(r.content||"");let t=null,a=r.content||"";u(o,e=>{e!==a&&(t&&clearTimeout(t),t=setTimeout(()=>{a=e,n("save",e)},1e3))});function s(){t&&(clearTimeout(t),t=null),o.value!==a&&n("save",o.value)}return f({flushPendingSave:s}),u(()=>r.content,e=>{e!==o.value&&(t&&(clearTimeout(t),t=null),a=e||"",o.value=e||"")}),T(()=>{s(),g.endEditing(r.filename)}),(e,i)=>(l(),y("div",b,[(l(),k(x,null,{default:d(()=>[h(w(_),{modelValue:o.value,"onUpdate:modelValue":i[0]||(i[0]=S=>o.value=S),theme:"dark",preview:!1,language:"en-US","no-upload-img":!0,"show-code-row-number":!0},null,8,["modelValue"])]),fallback:d(()=>[...i[1]||(i[1]=[m("div",{class:"editor-loading"},[m("span",{class:"loading-spinner"}),V(" Loading editor... ")],-1)])]),_:1}))]))}};export{H as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{u as J}from"./providers-1bnH-exJ.js";import{_ as Q,o as W,n as b,l as M,a as v,c as p,b as X,t as k,i as Y,F as x,r as P,E as Z,x as i,S as $}from"./index-fK8FIZgP.js";const ee=["data-model","data-provider-id"],te=["value","disabled"],le={key:0,value:""},oe=["label","data-agent-type"],de=["value","data-provider-id","data-model-id","data-agent-type"],ne={__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:""},providerId:{type:String,default:null},hideBuiltInDuplicates:{type:Boolean,default:!0}},emits:["update:modelValue","model-selected","update:providerId"],setup(I,{emit:E}){const n=I,y=E,a=J(),V=i(()=>a.providers.length>0&&a.providers.some(e=>e.models&&e.models.length>0)),F=i(()=>{const e=new Set;for(const t of h.value)if(t.models)for(const l of t.models)e.add(l.modelId);return e});function w(e){return e&&F.value.has(e)}function s(e){return(e==null?void 0:e.kind)==="openai"?"codex":"claude-code"}function L(e){return s(e)==="codex"?"Codex":"Claude Code"}const D=i(()=>{const e=[...a.providers];return e.sort((t,l)=>{const o=s(t),d=s(l);return o!==d?o==="claude-code"?-1:1:t.isBuiltIn!==l.isBuiltIn?t.isBuiltIn?-1:1:(t.name||"").localeCompare(l.name||"")}),e}),h=i(()=>{const e=new Set;for(const t of a.providers)if(!(t.isBuiltIn||!t.models))for(const l of t.models)e.add(l.modelId);return D.value.map(t=>!n.hideBuiltInDuplicates||!t.isBuiltIn?t:N(t,e)).filter(t=>{var l;return(l=t.models)==null?void 0:l.length})}),K=i(()=>{const e=new Map;for(const t of h.value)for(const l of t.models||[])e.set(l.modelId,(e.get(l.modelId)||0)+1);return new Set([...e.entries()].filter(([,t])=>t>1).map(([t])=>t))});function N(e,t){return{...e,models:(e.models||[]).filter(l=>!t.has(l.modelId))}}const c=i(()=>{var o;const e=a.providers.filter(d=>s(d)==="claude-code");if(e.length===0)return null;const l=e.find(d=>d.isBuiltIn)||e[0];if((o=l==null?void 0:l.models)!=null&&o.length){const d=l.models.find(f=>f.tier==="sonnet");return(d==null?void 0:d.modelId)||l.models[0].modelId}return null}),O=b(!1);W(async()=>{(a.providers.length===0||!V.value)&&await a.fetchProviders(),O.value=!0});function S(e){var l;if(!e)return null;if(e.includes("claude-"))return e;const t=a.providers.find(o=>o.isBuiltIn&&s(o)==="claude-code");if((l=t==null?void 0:t.models)!=null&&l.length){const o=t.models.find(d=>d.tier===e);if(o)return o.modelId}return e}const r=b(S(n.modelValue)),m=b(n.providerId),u=i(()=>n.allowEmpty&&(!r.value||r.value==="")?"":r.value&&w(r.value)?r.value:c.value?c.value:r.value),C=i(()=>{if(!u.value)return null;const e=g(u.value,n.providerId||m.value);return(e==null?void 0:e.provider.id)||null}),R=i(()=>{if(n.allowEmpty&&(!u.value||u.value==="")||!u.value)return"";const e=g(u.value,n.providerId||m.value);return e?_(e.provider.id,e.model.modelId):u.value}),T=$(n,"modelValue");M(T,e=>{r.value=S(e)},{flush:"sync"}),M($(n,"providerId"),e=>{m.value=e},{flush:"sync"}),M(()=>a.providers,z,{deep:!0,immediate:!0});function z(){if(!V.value)return;if(n.allowEmpty&&(!n.modelValue||n.modelValue==="")){r.value="";return}const e=n.modelValue?S(n.modelValue):null;if(e&&w(e)){H(e);return}U()}function H(e){var t;r.value!==e&&(r.value=e,m.value=((t=g(e,n.providerId))==null?void 0:t.provider.id)||null,e!==n.modelValue&&y("update:modelValue",e))}function U(){var e;!c.value||r.value===c.value||(r.value=c.value,m.value=((e=g(c.value))==null?void 0:e.provider.id)||null,y("update:modelValue",c.value))}function j(e){const t=e.target.value,l=t?A(t):null,o=l?{modelId:l.modelId,providerId:l.providerId,kind:q(l.providerId)}:{modelId:"",providerId:null,kind:null},d=o.modelId;u.value===d&&C.value===o.providerId||(r.value=d,m.value=o.providerId,y("update:modelValue",d),y("update:providerId",o.providerId),y("model-selected",o))}function q(e){if(!e)return null;const t=a.providers.find(l=>l.id===e);return(t==null?void 0:t.kind)||"anthropic"}function _(e,t){return`${e}::${t}`}function A(e){const t=e.indexOf("::");return t===-1?null:{providerId:e.slice(0,t),modelId:e.slice(t+2)}}function g(e,t=null){var l,o;if(!e)return null;for(const d of h.value){if(t&&d.id!==t)continue;const f=(l=d.models)==null?void 0:l.find(B=>B.modelId===e);if(f)return{provider:d,model:f}}for(const d of h.value){const f=(o=d.models)==null?void 0:o.find(B=>B.modelId===e);if(f)return{provider:d,model:f}}return null}function G(e,t){const l=e.isBuiltIn?t.displayName:t.modelId;return K.value.has(t.modelId)?`${l} (${e.name})`:l}return(e,t)=>(v(),p("div",{class:"model-selector","data-model":u.value,"data-provider-id":C.value||""},[X("select",{id:"model-select",value:R.value,disabled:I.disabled,class:Z(I.selectClass||"model-select"),onChange:t[0]||(t[0]=l=>j(l))},[I.allowEmpty?(v(),p("option",le,k(I.emptyLabel),1)):Y("",!0),(v(!0),p(x,null,P(h.value,l=>(v(),p("optgroup",{key:l.id,label:`${L(l)} · ${l.name}`,"data-agent-type":s(l)},[(v(!0),p(x,null,P(l.models,o=>(v(),p("option",{key:`${l.id}:${o.id}`,value:_(l.id,o.modelId),"data-provider-id":l.id,"data-model-id":o.modelId,"data-agent-type":s(l)},k(G(l,o)),9,de))),128))],8,oe))),128))],42,te)],8,ee))}},ue=Q(ne,[["__scopeId","data-v-e4caddf9"]]);export{ue as M};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{I as re,J as be,n as c,_ as ce,a as r,c as d,b as l,E as ue,i as h,t as V,f as de,F as U,y as Oe,l as R,m as E,v as X,q as ie,p as _,k as xe,A as Le,o as Me,d as A,w as Ue,u as v,L as Z,r as z,G as ge,j as Ne,s as Ge,g as qe,x as $,h as je}from"./index-fK8FIZgP.js";import{g as Fe,u as Pe}from"./sessions-6zGUlFrt.js";import{u as We}from"./EffortLevelSelector-hc2MNKg6.js";import{u as Qe,a as He,Q as ze}from"./QuickResponseSettings-BQwQXuL7.js";import{a as Ke}from"./ApiClient-C3ztI9s9.js";import{F as Ye,Q as Je,u as Xe}from"./QuickResponsesPanel-BzSYcCSP.js";import{S as Ze}from"./SessionFormOptions-B6AxyREh.js";import{R as _e}from"./ResizableTextarea-B3YIdIXv.js";import{S as et,a as tt}from"./SlashCommandWizard-Cy04d7-o.js";import{u as lt}from"./projects-DXYQNJIi.js";import"./ModelSelector-CwTz8ZWO.js";import"./providers-1bnH-exJ.js";function nt(e){const u=c(""),a=c(!1),f=c("yolo"),o=c(null),k=c(null),B=c(!0),C=c(null),g=c(!0),n=c("worktree"),p=c(""),I=c(!1),y=c(""),L=c(null),O=c(null),K=c(null),w=c({scheduledAt:null,autoRescheduleEnabled:!1,rescheduleDelayMinutes:re,rescheduleOnTokenLimit:!0,rescheduleOnServiceError:!0,maxRescheduleCount:null,maxTotalTokens:null,rescheduleAtTokenCount:null}),S=c({mode:!1,model:!1,thinkingEnabled:!1,startImmediately:!1,quickGitMode:!1,quickWorktreeBranch:!1});function N(m){m.mode&&(f.value=m.mode,S.value.mode=!0),m.model?(o.value=m.model,k.value=m.providerId||null,S.value.model=!0):(o.value="sonnet",k.value=null,S.value.model=!0),m.thinkingEnabled!==null&&m.thinkingEnabled!==void 0&&(B.value=m.thinkingEnabled,S.value.thinkingEnabled=!0),m.effortLevel&&(C.value=m.effortLevel),m.startImmediately!==null&&m.startImmediately!==void 0&&(g.value=m.startImmediately,S.value.startImmediately=!0),m.gitMode&&(n.value=m.gitMode,S.value.quickGitMode=!0),m.gitBranch&&(p.value=m.gitBranch,S.value.quickWorktreeBranch=!0)}function ee(m){const T=localStorage.getItem(e.value);T&&(u.value=T,be(()=>{m.value&&(m.value.value=T,a.value=T.trim().length>0)}))}function Y(){w.value={scheduledAt:null,autoRescheduleEnabled:!1,rescheduleDelayMinutes:re,rescheduleOnTokenLimit:!0,rescheduleOnServiceError:!0,maxRescheduleCount:null,maxTotalTokens:null,rescheduleAtTokenCount:null}}function G(){I.value=!0}function x(){I.value=!1,p.value=y.value}function M(m){y.value=Fe("",m),I.value||(p.value=y.value)}return{prompt:u,promptHasContent:a,mode:f,model:o,providerId:k,thinkingEnabled:B,effortLevel:C,startImmediately:g,quickGitMode:n,quickWorktreeBranch:p,editingBranch:I,autoBranchName:y,selectedTemplateId:L,startFromTemplateId:O,parentSessionId:K,schedulingData:w,usingDefaults:S,applyProjectDefaults:N,restoreDraftFromStorage:ee,resetSchedulingData:Y,handleBranchEdit:G,resetBranchName:x,updateAutoBranchName:M}}function ot(e,u){if(!e)return;const a=e.selectionStart,f=e.selectionEnd,o=e.value.substring(0,a),k=e.value.substring(f);e.value=o+u+k,e.selectionStart=e.selectionEnd=a+u.length,e.dispatchEvent(new Event("input",{bubbles:!0})),e.focus()}function st(e,u){if(!e)return;const a=e.value.trim(),f=a?`${a}
|
|
2
|
-
|
|
3
|
-
${u}`:u;e.value=f,e.dispatchEvent(new Event("input",{bubbles:!0}))}function at(e,u,a){e&&(u.prompt.value=e.prompt,a.value&&(a.value.value=e.prompt,a.value.dispatchEvent(new Event("input",{bubbles:!0}))),e.thinkingEnabled!=null&&(u.thinkingEnabled.value=e.thinkingEnabled),e.model&&(u.model.value=e.model),e.mode&&(u.mode.value=e.mode),e.gitBranch&&(u.quickWorktreeBranch.value=e.gitBranch,u.editingBranch.value=!0),e.gitMode&&(u.quickGitMode.value=e.gitMode),e.effortLevel!=null&&(u.effortLevel.value=e.effortLevel),e.nextTemplateId&&(u.selectedTemplateId.value=e.nextTemplateId))}function ut(e,u){const{currentPrompt:a,gitStatus:f,files:o}=u,k=e.quickGitMode.value&&(f!=null&&f.isGitRepo)?e.quickGitMode.value:void 0,B=k==="current";return{prompt:a,mode:e.mode.value,model:e.model.value,providerId:e.providerId.value,thinkingEnabled:e.thinkingEnabled.value,effortLevel:e.effortLevel.value,startImmediately:e.startImmediately.value,gitMode:k,gitBranch:k&&!B?e.quickWorktreeBranch.value:void 0,files:o,templateId:e.selectedTemplateId.value,parentSessionId:e.parentSessionId.value||null,scheduledAt:e.schedulingData.value.scheduledAt,autoRescheduleEnabled:e.schedulingData.value.autoRescheduleEnabled,rescheduleDelayMinutes:e.schedulingData.value.rescheduleDelayMinutes,rescheduleOnTokenLimit:e.schedulingData.value.rescheduleOnTokenLimit,rescheduleOnServiceError:e.schedulingData.value.rescheduleOnServiceError,maxRescheduleCount:e.schedulingData.value.maxRescheduleCount,maxTotalTokens:e.schedulingData.value.maxTotalTokens,rescheduleAtTokenCount:e.schedulingData.value.rescheduleAtTokenCount}}const it={key:0,class:"form-group"},rt={class:"segmented-control"},dt={key:0,class:"branch-input-row"},ct={class:"quick-branch-input"},mt=["value","placeholder"],pt={key:1,class:"current-branch-hint"},vt={key:1,class:"git-loading"},ht={__name:"GitOptionsPanel",props:{gitStatus:{type:Object,default:null},modelValue:{type:String,default:""},branchName:{type:String,default:""},autoBranchName:{type:String,default:""},editingBranch:{type:Boolean,default:!1},loadingGit:{type:Boolean,default:!1}},emits:["update:modelValue","update:branchName","branchEdit","resetBranch"],setup(e){return(u,a)=>{var f;return r(),d(U,null,[(f=e.gitStatus)!=null&&f.isGitRepo?(r(),d("div",it,[a[9]||(a[9]=l("label",{class:"form-label"},"Git Options",-1)),l("div",rt,[l("button",{type:"button",class:ue(["segment-btn",{"segment-btn--active":e.modelValue==="worktree"}]),onClick:a[0]||(a[0]=o=>u.$emit("update:modelValue","worktree"))},[...a[6]||(a[6]=[l("span",{class:"segment-label-full"},"Worktree",-1),l("span",{class:"segment-label-short"},"WT",-1)])],2),l("button",{type:"button",class:ue(["segment-btn",{"segment-btn--active":e.modelValue==="branch"}]),onClick:a[1]||(a[1]=o=>u.$emit("update:modelValue","branch"))}," Branch ",2),l("button",{type:"button",class:ue(["segment-btn",{"segment-btn--active":e.modelValue==="current"}]),onClick:a[2]||(a[2]=o=>u.$emit("update:modelValue","current"))}," Current ",2)]),e.modelValue==="branch"||e.modelValue==="worktree"?(r(),d("div",dt,[a[7]||(a[7]=l("label",{class:"form-label form-label-small"},"Branch Name",-1)),l("div",ct,[l("input",{value:e.branchName,type:"text",class:"form-input",placeholder:e.autoBranchName,onInput:a[3]||(a[3]=o=>u.$emit("update:branchName",o.target.value)),onFocus:a[4]||(a[4]=o=>u.$emit("branchEdit"))},null,40,mt),e.editingBranch?(r(),d("button",{key:0,type:"button",class:"btn btn-small",onClick:a[5]||(a[5]=o=>u.$emit("resetBranch"))}," Reset ")):h("",!0)]),a[8]||(a[8]=l("p",{class:"form-help"}," Auto-generated from prompt ",-1))])):h("",!0),e.modelValue==="current"?(r(),d("p",pt," On: "+V(e.gitStatus.currentBranch),1)):h("",!0)])):h("",!0),e.loadingGit?(r(),d("div",vt,[...a[10]||(a[10]=[l("span",{class:"loading-spinner"},null,-1),de(" Loading git info... ",-1)])])):h("",!0)],64)}}},ft=ce(ht,[["__scopeId","data-v-aec388c0"]]),gt={class:"scheduling-options"},bt={key:0,class:"form-group"},kt={class:"form-group"},yt={class:"toggle-switch"},Tt={key:1,class:"reschedule-settings"},St={class:"form-group"},Et={class:"checkbox-option"},Ct={class:"checkbox-option"},It={class:"form-group"},Rt={class:"limits-section"},wt={class:"form-group"},Bt={class:"form-group"},Dt={class:"form-group"},At={__name:"SchedulingOptions",props:{modelValue:{type:Object,default:()=>({})},hideScheduledAt:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,{emit:u}){const a=e,f=u,o=Oe({scheduledAt:a.modelValue.scheduledAt||null,scheduledAtLocal:"",autoRescheduleEnabled:a.modelValue.autoRescheduleEnabled??!1,rescheduleDelayMinutes:a.modelValue.rescheduleDelayMinutes??re,rescheduleOnTokenLimit:a.modelValue.rescheduleOnTokenLimit??!0,rescheduleOnServiceError:a.modelValue.rescheduleOnServiceError??!0,maxRescheduleCount:a.modelValue.maxRescheduleCount??null,maxTotalTokens:a.modelValue.maxTotalTokens??null,rescheduleAtTokenCount:a.modelValue.rescheduleAtTokenCount??null});function k(){if(o.scheduledAtLocal){const g=new Date(o.scheduledAtLocal);o.scheduledAt=g.getTime()}else o.scheduledAt=null;C()}function B(g){if(!g)return"";const n=new Date(g),p=n.getFullYear(),I=String(n.getMonth()+1).padStart(2,"0"),y=String(n.getDate()).padStart(2,"0"),L=String(n.getHours()).padStart(2,"0"),O=String(n.getMinutes()).padStart(2,"0");return`${p}-${I}-${y}T${L}:${O}`}R(()=>a.modelValue.scheduledAt,g=>{g&&(o.scheduledAtLocal=B(g))},{immediate:!0});function C(){f("update:modelValue",{scheduledAt:o.scheduledAt,autoRescheduleEnabled:o.autoRescheduleEnabled,rescheduleDelayMinutes:o.rescheduleDelayMinutes,rescheduleOnTokenLimit:o.rescheduleOnTokenLimit,rescheduleOnServiceError:o.rescheduleOnServiceError,maxRescheduleCount:o.maxRescheduleCount,maxTotalTokens:o.maxTotalTokens,rescheduleAtTokenCount:o.rescheduleAtTokenCount})}return R(()=>({autoRescheduleEnabled:o.autoRescheduleEnabled,rescheduleDelayMinutes:o.rescheduleDelayMinutes,rescheduleOnTokenLimit:o.rescheduleOnTokenLimit,rescheduleOnServiceError:o.rescheduleOnServiceError,maxRescheduleCount:o.maxRescheduleCount,maxTotalTokens:o.maxTotalTokens,rescheduleAtTokenCount:o.rescheduleAtTokenCount}),()=>{C()},{deep:!0}),(g,n)=>(r(),d("div",gt,[e.hideScheduledAt?h("",!0):(r(),d("div",bt,[n[8]||(n[8]=l("label",{for:"scheduled-at",class:"form-label"},"Schedule Start Time (optional)",-1)),E(l("input",{id:"scheduled-at","onUpdate:modelValue":n[0]||(n[0]=p=>o.scheduledAtLocal=p),type:"datetime-local",class:"form-input",onChange:k},null,544),[[X,o.scheduledAtLocal]]),n[9]||(n[9]=l("p",{class:"form-help"}," Leave empty to start immediately ",-1))])),l("div",kt,[l("label",yt,[E(l("input",{"onUpdate:modelValue":n[1]||(n[1]=p=>o.autoRescheduleEnabled=p),type:"checkbox"},null,512),[[ie,o.autoRescheduleEnabled]]),n[10]||(n[10]=l("span",{class:"toggle-slider"},null,-1)),n[11]||(n[11]=l("span",{class:"toggle-label"},"Auto-reschedule on errors",-1))])]),o.autoRescheduleEnabled?(r(),d("div",Tt,[l("div",St,[n[14]||(n[14]=l("p",{class:"settings-label"}," Reschedule Triggers ",-1)),l("label",Et,[E(l("input",{"onUpdate:modelValue":n[2]||(n[2]=p=>o.rescheduleOnTokenLimit=p),type:"checkbox"},null,512),[[ie,o.rescheduleOnTokenLimit]]),n[12]||(n[12]=l("span",{class:"checkbox-label"},"Token limit errors",-1))]),l("label",Ct,[E(l("input",{"onUpdate:modelValue":n[3]||(n[3]=p=>o.rescheduleOnServiceError=p),type:"checkbox"},null,512),[[ie,o.rescheduleOnServiceError]]),n[13]||(n[13]=l("span",{class:"checkbox-label"},"Service unavailability",-1))])]),l("div",It,[n[16]||(n[16]=l("label",{for:"reschedule-delay",class:"form-label"},"Reschedule Delay",-1)),E(l("select",{id:"reschedule-delay","onUpdate:modelValue":n[4]||(n[4]=p=>o.rescheduleDelayMinutes=p),class:"form-input"},[...n[15]||(n[15]=[l("option",{value:5}," 5 minutes ",-1),l("option",{value:15}," 15 minutes ",-1),l("option",{value:30}," 30 minutes ",-1),l("option",{value:60}," 1 hour ",-1),l("option",{value:120}," 2 hours ",-1)])],512),[[_,o.rescheduleDelayMinutes,void 0,{number:!0}]])]),l("div",Rt,[n[23]||(n[23]=l("p",{class:"settings-label"}," Limits (optional) ",-1)),l("div",wt,[n[17]||(n[17]=l("label",{for:"max-reschedule-count",class:"form-label"},"Max Reschedule Count",-1)),E(l("input",{id:"max-reschedule-count","onUpdate:modelValue":n[5]||(n[5]=p=>o.maxRescheduleCount=p),type:"number",min:"1",max:"100",class:"form-input",placeholder:"Unlimited"},null,512),[[X,o.maxRescheduleCount,void 0,{number:!0}]]),n[18]||(n[18]=l("p",{class:"form-help"}," Stop after N reschedule attempts ",-1))]),l("div",Bt,[n[19]||(n[19]=l("label",{for:"max-total-tokens",class:"form-label"},"Max Total Tokens (Hard Limit)",-1)),E(l("input",{id:"max-total-tokens","onUpdate:modelValue":n[6]||(n[6]=p=>o.maxTotalTokens=p),type:"number",min:"1000",step:"1000",class:"form-input",placeholder:"Unlimited"},null,512),[[X,o.maxTotalTokens,void 0,{number:!0}]]),n[20]||(n[20]=l("p",{class:"form-help"}," Stop rescheduling after consuming this many tokens ",-1))]),l("div",Dt,[n[21]||(n[21]=l("label",{for:"reschedule-at-token-count",class:"form-label"},"Reschedule At Token Count",-1)),E(l("input",{id:"reschedule-at-token-count","onUpdate:modelValue":n[7]||(n[7]=p=>o.rescheduleAtTokenCount=p),type:"number",min:"10000",step:"10000",class:"form-input",placeholder:"None"},null,512),[[X,o.rescheduleAtTokenCount,void 0,{number:!0}]]),n[22]||(n[22]=l("p",{class:"form-help"}," Proactively reschedule when session reaches this token count ",-1))])])])):h("",!0)]))}},$t=ce(At,[["__scopeId","data-v-135d3004"]]),Vt={class:"container"},Ot={key:0,class:"form-group"},xt={key:0,label:"Project Templates"},Lt=["value"],Mt={key:1,label:"Global Templates"},Ut=["value"],Nt={class:"form-group"},Gt={class:"attachment-row"},qt={key:1,class:"error-message"},jt={key:1,class:"form-group"},Ft={key:0,label:"Project Templates"},Pt=["value"],Wt={key:1,label:"Global Templates"},Qt=["value"],Ht={key:2,class:"form-group"},zt=["value"],Kt={class:"form-actions"},Yt=["disabled"],Jt={key:0,class:"loading-spinner"},Xt={__name:"NewSessionView",setup(e){const u=Ge(),a=je(),f=Pe();xe();const o=We(),k=Qe(),B=lt(),C=$(()=>`new-session-draft-${u.params.id}`),g=nt(C),{prompt:n,promptHasContent:p,mode:I,model:y,providerId:L,thinkingEnabled:O,effortLevel:K,startImmediately:w,quickGitMode:S,quickWorktreeBranch:N,editingBranch:ee,autoBranchName:Y,selectedTemplateId:G,startFromTemplateId:x,parentSessionId:M,schedulingData:m,usingDefaults:T,applyProjectDefaults:ke,restoreDraftFromStorage:ye,resetSchedulingData:Te,handleBranchEdit:Se,resetBranchName:Ee,updateAutoBranchName:me}=g,D=c(null);let q=null,j=null,F=null;const P=c(!1),te=c(!1),le=c(!1),Ce=$(()=>window.innerWidth<=480?80:120),Ie=Xe(()=>{var t;const i=((t=D.value)==null?void 0:t.value)||n.value;!P.value&&i.trim()&&ae()}),W=c(null),pe=c([]),ve=c(null),he=c(null),Q=$(()=>o.projectTemplates),H=$(()=>o.globalTemplates),ne=$(()=>[...Q.value,...H.value]),fe=$(()=>{const i=B.getProjectById(u.params.id);return(i==null?void 0:i.workingDirectory)||null}),oe=$(()=>f.sessions.filter(i=>i.status==="completed").sort((i,t)=>new Date(t.createdAt)-new Date(i.createdAt))),Re=$(()=>!w.value||ne.value.length>0||oe.value.length>0),se=c(!1),J=c(null);function we(i){var s;const t=i.target.value,b=t.trim().length>0;p.value!==b&&(p.value=b),q&&clearTimeout(q),q=setTimeout(()=>{n.value=t},150),(s=W.value)!=null&&s.isGitRepo&&(F&&clearTimeout(F),F=setTimeout(()=>me(t),300))}R(()=>W.value,i=>{i!=null&&i.isGitRepo&&!Y.value&&me(n.value)},{immediate:!0}),R(I,()=>{T.value.mode=!1}),R(y,()=>{T.value.model=!1}),R(O,()=>{T.value.thinkingEnabled=!1}),R(w,i=>{T.value.startImmediately=!1,i?Te():be(()=>{var t;(t=he.value)==null||t.scrollIntoView({behavior:"smooth",block:"nearest"})})}),R(S,()=>{T.value.quickGitMode=!1}),R(N,()=>{T.value.quickWorktreeBranch=!1}),R(n,i=>{j&&clearTimeout(j),j=setTimeout(()=>{i.trim()?localStorage.setItem(C.value,i):localStorage.removeItem(C.value)},500)}),Le(()=>{F&&clearTimeout(F),q&&clearTimeout(q),j&&clearTimeout(j)}),Me(async()=>{const i=u.params.id;ye(D);try{await k.fetchDefaults(i);const b=k.getDefaultsForProject(i);b?ke(b):(y.value="sonnet",T.value.model=!0)}catch(b){console.warn("Failed to fetch project defaults:",b),y.value||(y.value="sonnet",T.value.model=!0)}se.value=!0;try{W.value=await Ke.getGitStatus(i)}catch{}finally{se.value=!1}o.fetchProjectTemplates(i),He().fetchForProject(i),u.query.parentSessionId&&(M.value=u.query.parentSessionId)});function Be(){a.push(`/projects/${u.params.id}/sessions`)}function De({text:i}){ot(D.value,i)}function Ae({content:i,autoSubmit:t}){var b;st(D.value,i),t?setTimeout(()=>ae(),0):(b=D.value)==null||b.blur()}function $e(){const i=x.value&&o.getTemplateById(x.value);at(i,g,D)}async function ae(){var t,b;const i=((t=D.value)==null?void 0:t.value)||n.value;if(i.trim()){P.value=!0,J.value=null;try{const s=ut(g,{currentPrompt:i,gitStatus:W.value,files:pe.value}),Ve=await f.createSession(u.params.id,s);(b=ve.value)==null||b.clear(),localStorage.removeItem(C.value),a.push(`/sessions/${Ve.id}?overlay=open`)}catch(s){J.value=s.message}finally{P.value=!1}}}return(i,t)=>{const b=qe("router-link");return r(),d("div",Vt,[A(b,{to:`/projects/${v(u).params.id}/sessions`,class:"back-link"},{default:Ue(()=>[...t[17]||(t[17]=[de(" ← Sessions ",-1)])]),_:1},8,["to"]),t[26]||(t[26]=l("h1",null,"New Session",-1)),l("form",{class:"form card",onSubmit:Ne(ae,["prevent"])},[ne.value.length>0?(r(),d("div",Ot,[t[19]||(t[19]=l("label",{class:"form-label",for:"start-from-template"},"Start From Template",-1)),E(l("select",{id:"start-from-template","onUpdate:modelValue":t[0]||(t[0]=s=>Z(x)?x.value=s:null),class:"form-input",title:"Selecting a template will populate all form fields below. You can still edit before starting.",onChange:$e},[t[18]||(t[18]=l("option",{value:null}," Select a template to pre-fill... ",-1)),Q.value.length?(r(),d("optgroup",xt,[(r(!0),d(U,null,z(Q.value,s=>(r(),d("option",{key:s.id,value:s.id},V(s.name),9,Lt))),128))])):h("",!0),H.value.length?(r(),d("optgroup",Mt,[(r(!0),d(U,null,z(H.value,s=>(r(),d("option",{key:s.id,value:s.id},V(s.name),9,Ut))),128))])):h("",!0)],544),[[_,v(x)]])])):h("",!0),l("div",Nt,[A(_e,{id:"prompt",ref_key:"textareaRef",ref:D,class:"form-input form-textarea",placeholder:"What would you like the agent to help you with?","min-height":Ce.value,required:"",onInput:we,onKeydown:v(Ie)},null,8,["min-height","onKeydown"]),l("div",Gt,[A(Ye,{ref_key:"fileAttachment",ref:ve,"onUpdate:files":t[1]||(t[1]=s=>pe.value=s)},null,512),fe.value?(r(),ge(et,{key:0,onOpen:t[2]||(t[2]=s=>te.value=!0)})):h("",!0)])]),A(Je,{"show-empty":!0,onInsert:Ae,onOpenSettings:t[3]||(t[3]=s=>le.value=!0)}),A(Ze,{mode:v(I),model:v(y),"provider-id":v(L),"effort-level":v(K),"thinking-enabled":v(O),"start-immediately":v(w),"onUpdate:mode":t[4]||(t[4]=s=>I.value=s),"onUpdate:model":t[5]||(t[5]=s=>y.value=s),"onUpdate:providerId":t[6]||(t[6]=s=>L.value=s),"onUpdate:effortLevel":t[7]||(t[7]=s=>K.value=s),"onUpdate:thinkingEnabled":t[8]||(t[8]=s=>O.value=s),"onUpdate:startImmediately":t[9]||(t[9]=s=>w.value=s)},null,8,["mode","model","provider-id","effort-level","thinking-enabled","start-immediately"]),J.value?(r(),d("div",qt,V(J.value),1)):h("",!0),A(ft,{"git-status":W.value,"model-value":v(S),"branch-name":v(N),"auto-branch-name":v(Y),"editing-branch":v(ee),"loading-git":se.value,"onUpdate:modelValue":t[10]||(t[10]=s=>S.value=s),"onUpdate:branchName":t[11]||(t[11]=s=>N.value=s),onBranchEdit:v(Se),onResetBranch:v(Ee)},null,8,["git-status","model-value","branch-name","auto-branch-name","editing-branch","loading-git","onBranchEdit","onResetBranch"]),Re.value?(r(),d("div",{key:2,ref_key:"advancedOptionsRef",ref:he,class:"advanced-options"},[v(w)?h("",!0):(r(),ge($t,{key:0,modelValue:v(m),"onUpdate:modelValue":t[12]||(t[12]=s=>Z(m)?m.value=s:null)},null,8,["modelValue"])),ne.value.length>0?(r(),d("div",jt,[t[21]||(t[21]=l("label",{class:"form-label",for:"template"},"Next Template (optional)",-1)),E(l("select",{id:"template","onUpdate:modelValue":t[13]||(t[13]=s=>Z(G)?G.value=s:null),class:"form-input"},[t[20]||(t[20]=l("option",{value:null}," None - single session ",-1)),Q.value.length?(r(),d("optgroup",Ft,[(r(!0),d(U,null,z(Q.value,s=>(r(),d("option",{key:s.id,value:s.id},V(s.name),9,Pt))),128))])):h("",!0),H.value.length?(r(),d("optgroup",Wt,[(r(!0),d(U,null,z(H.value,s=>(r(),d("option",{key:s.id,value:s.id},V(s.name),9,Qt))),128))])):h("",!0)],512),[[_,v(G)]]),t[22]||(t[22]=l("p",{class:"form-help"}," After this session completes, the selected template will automatically start a new session. ",-1))])):h("",!0),oe.value.length>0?(r(),d("div",Ht,[t[24]||(t[24]=l("label",{class:"form-label",for:"parent-session"},"Parent Session (optional)",-1)),E(l("select",{id:"parent-session","onUpdate:modelValue":t[14]||(t[14]=s=>Z(M)?M.value=s:null),class:"form-input"},[t[23]||(t[23]=l("option",{value:null}," None - create standalone session ",-1)),(r(!0),d(U,null,z(oe.value,s=>(r(),d("option",{key:s.id,value:s.id},V(s.name),9,zt))),128))],512),[[_,v(M)]]),t[25]||(t[25]=l("p",{class:"form-help"}," Choose a parent session to link this as a child session. Child sessions help organize related work. ",-1))])):h("",!0)],512)):h("",!0),l("div",Kt,[l("button",{type:"button",class:"btn btn-secondary",onClick:Be}," Cancel "),l("button",{type:"submit",class:"btn btn-primary btn-submit",disabled:P.value},[P.value?(r(),d("span",Jt)):h("",!0),de(" "+V(v(w)?"Start Session":"Create Draft"),1)],8,Yt)])],32),A(tt,{"is-open":te.value,"onUpdate:isOpen":t[15]||(t[15]=s=>te.value=s),"working-directory":fe.value||"",mode:"insert","hide-builtin":!0,onInsert:De},null,8,["is-open","working-directory"]),A(ze,{"is-open":le.value,"project-id":v(u).params.id,onClose:t[16]||(t[16]=s=>le.value=!1)},null,8,["is-open","project-id"])])}}},dl=ce(Xt,[["__scopeId","data-v-3e37bc7e"]]);export{dl as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as O,k as T,o as B,l as G,a as S,c as w,b as e,m as f,p as j,q as $,f as m,e as q,v as P,d as R,i as V,n as l,u as D,j as K,t as L,D as Y,w as z,s as J,g as X,h as Z}from"./index-fK8FIZgP.js";import{u as _}from"./projects-DXYQNJIi.js";import{u as F,a as ee,Q as te}from"./QuickResponseSettings-BQwQXuL7.js";import{P as se}from"./InputWithButton-CAkttyqx.js";import{M as oe}from"./ModelSelector-CwTz8ZWO.js";import{a as le}from"./ApiClient-C3ztI9s9.js";import"./providers-1bnH-exJ.js";const ae={class:"advanced-settings"},ne={class:"form-group"},re={class:"form-group"},ie={class:"checkbox-label"},ue={class:"form-group"},de={class:"form-group"},pe={class:"checkbox-label"},fe={class:"form-group"},me={class:"form-group"},ve={class:"form-group"},be=["disabled"],ce={key:0,class:"loading-spinner"},ge={__name:"ProjectSessionDefaults",props:{projectId:{type:String,required:!0}},setup(N,{expose:E}){const u=N,h=F(),c=T(),k=l(""),C=l(!1),g=l(""),b=l(!0),r=l(""),d=l(""),v=l(""),p=l(null),y=l(!1);B(()=>{h.fetchDefaults(u.projectId)}),G(()=>h.getDefaultsForProject(u.projectId),o=>{o&&(k.value=o.mode||"",C.value=o.thinkingEnabled||!1,g.value=o.effortLevel??"",b.value=o.startImmediately!==!1,r.value=o.gitMode||"",d.value=o.gitBranch||"",v.value=o.model||"",p.value=o.providerId||null)},{immediate:!0});function I(){const o={};return k.value&&(o.mode=k.value),C.value&&(o.thinkingEnabled=!0),g.value&&(o.effortLevel=g.value),b.value||(o.startImmediately=!1),r.value&&(o.gitMode=r.value),d.value&&(o.gitBranch=d.value),v.value?(o.model=v.value,o.providerId=p.value||null):(o.model=null,o.providerId=null),o}async function x(){if(confirm("Reset all session defaults to system defaults?")){y.value=!0;try{await h.resetDefaults(u.projectId),k.value="",C.value=!1,g.value="",b.value=!0,r.value="",d.value="",v.value="",p.value=null,c.success("Session defaults reset to system defaults")}catch(o){c.error(o.message)}finally{y.value=!1}}}return E({collectNonDefaultValues:I}),(o,s)=>(S(),w("details",ae,[s[25]||(s[25]=e("summary",null,"Session Defaults",-1)),s[26]||(s[26]=e("p",{class:"form-help"}," Set default values for new sessions created in this project. These values can be overridden when creating individual sessions. ",-1)),e("div",ne,[s[9]||(s[9]=e("label",{class:"form-label",for:"defaultMode"},"Mode",-1)),f(e("select",{id:"defaultMode","onUpdate:modelValue":s[0]||(s[0]=a=>k.value=a),class:"form-input"},[...s[8]||(s[8]=[e("option",{value:""}," Use system default (standard) ",-1),e("option",{value:"plan"}," Plan ",-1),e("option",{value:"standard"}," Standard ",-1),e("option",{value:"yolo"}," YOLO ",-1)])],512),[[j,k.value]])]),e("div",re,[e("label",ie,[f(e("input",{"onUpdate:modelValue":s[1]||(s[1]=a=>C.value=a),type:"checkbox"},null,512),[[$,C.value]]),s[10]||(s[10]=m(" Enable thinking (extended thinking) by default ",-1))]),s[11]||(s[11]=e("p",{class:"form-help"}," Enable the agent's extended thinking capability for new sessions. ",-1))]),e("div",ue,[s[13]||(s[13]=e("label",{class:"form-label",for:"defaultEffortLevel"},"Default Effort Level",-1)),f(e("select",{id:"defaultEffortLevel","onUpdate:modelValue":s[2]||(s[2]=a=>g.value=a),class:"form-input"},[...s[12]||(s[12]=[q('<option value="" data-v-44c189d5> Auto (default) </option><option value="low" data-v-44c189d5> Low </option><option value="medium" data-v-44c189d5> Medium </option><option value="high" data-v-44c189d5> High </option><option value="max" data-v-44c189d5> Max </option>',5)])],512),[[j,g.value]]),s[14]||(s[14]=e("p",{class:"form-help"}," Set the default effort level for new sessions. Controls how much effort the agent puts into responses. ",-1))]),e("div",de,[e("label",pe,[f(e("input",{"onUpdate:modelValue":s[3]||(s[3]=a=>b.value=a),type:"checkbox"},null,512),[[$,b.value]]),s[15]||(s[15]=m(" Start sessions immediately ",-1))]),s[16]||(s[16]=e("p",{class:"form-help"},' When enabled, sessions will start automatically. When disabled, sessions will be created in "waiting" state. ',-1))]),e("div",fe,[s[18]||(s[18]=e("label",{class:"form-label",for:"defaultGitMode"},"Git Mode",-1)),f(e("select",{id:"defaultGitMode","onUpdate:modelValue":s[4]||(s[4]=a=>r.value=a),class:"form-input"},[...s[17]||(s[17]=[e("option",{value:""}," No git isolation ",-1),e("option",{value:"branch"}," Create branch for each session ",-1),e("option",{value:"worktree"}," Create worktree for each session ",-1)])],512),[[j,r.value]]),s[19]||(s[19]=e("p",{class:"form-help"}," Controls how git changes are isolated for each session. ",-1))]),e("div",me,[s[20]||(s[20]=e("label",{class:"form-label",for:"defaultGitBranch"},"Default Git Branch",-1)),f(e("input",{id:"defaultGitBranch","onUpdate:modelValue":s[5]||(s[5]=a=>d.value=a),type:"text",class:"form-input",placeholder:"e.g., feature/ai-implementation"},null,512),[[P,d.value]]),s[21]||(s[21]=e("p",{class:"form-help"}," When using git branch mode, this is the branch name pattern for new sessions. ",-1))]),e("div",ve,[s[22]||(s[22]=e("label",{class:"form-label",for:"defaultModel"},"Model",-1)),R(oe,{modelValue:v.value,"onUpdate:modelValue":s[6]||(s[6]=a=>v.value=a),"provider-id":p.value,"onUpdate:providerId":s[7]||(s[7]=a=>p.value=a),"allow-empty":!0,"empty-label":"Use system default","select-class":"form-input"},null,8,["modelValue","provider-id"]),s[23]||(s[23]=e("p",{class:"form-help"}," Choose the default model for new sessions in this project. ",-1))]),e("button",{type:"button",class:"btn btn-secondary",disabled:y.value,onClick:x},[y.value?(S(),w("span",ce)):V("",!0),s[24]||(s[24]=m(" Reset to System Defaults ",-1))],8,be)]))}},ye=O(ge,[["__scopeId","data-v-44c189d5"]]),ke={class:"container"},Se={key:0,class:"loading-state"},we={class:"form-group"},Ce={class:"form-group"},De={class:"form-group"},Pe={class:"input-with-button"},Ee=["placeholder"],he=["disabled"],Ie={class:"form-help"},xe={class:"form-group"},Ue={class:"form-group"},Re={class:"form-label",for:"systemPrompt"},Ve={class:"advanced-settings"},Me={class:"form-group"},je={class:"form-group"},$e={class:"advanced-settings"},Ne={class:"advanced-settings"},Le={class:"form-group"},Oe={class:"checkbox-label"},Te={key:0,class:"error-message"},Be={class:"form-actions"},Ge={class:"form-actions-right"},Fe=["disabled"],He={key:0,class:"loading-spinner"},We={__name:"ProjectEditView",setup(N){const E=Y,u=J(),h=Z(),c=_(),k=F(),C=ee(),g=T(),b=l(""),r=l(""),d=l(""),v=l(""),p=l(""),y=l(""),I=l(""),x=l(!1),o=l(!1),s=l(null),a=l(!1),U=l(null),M=l(!1);B(()=>{c.fetchProject(u.params.id),C.fetchForProject(u.params.id)}),G(()=>c.currentProject,i=>{i&&(b.value=i.name,r.value=i.workingDirectory,d.value=i.worktreePath||"",v.value=i.repoUrl||"",p.value=i.systemPrompt||E,y.value=i.onSessionCreated||"",I.value=i.onSessionDeleted||"",x.value=i.kanbanEnabled||!1)},{immediate:!0});async function H(){if(r.value){o.value=!0;try{const i=await le.detectWorktreePath(r.value);d.value=i.worktreePath}catch{}finally{o.value=!1}}}async function W(){var i;a.value=!0,U.value=null;try{await c.updateProject(u.params.id,{name:b.value,workingDirectory:r.value,worktreePath:d.value||null,repoUrl:v.value||null,systemPrompt:p.value===E?null:p.value,onSessionCreated:y.value||null,onSessionDeleted:I.value||null,kanbanEnabled:x.value});const t=(i=s.value)==null?void 0:i.collectNonDefaultValues();t&&Object.keys(t).length>0&&await k.updateDefaults(u.params.id,t),g.success("Repository updated"),h.push(`/projects/${u.params.id}/sessions`)}catch(t){U.value=t.message}finally{a.value=!1}}async function A(){if(confirm("Are you sure you want to delete this project?"))try{await c.deleteProject(u.params.id),g.success("Repository removed"),h.push("/")}catch(i){U.value=i.message}}return(i,t)=>{const Q=X("router-link");return S(),w("div",ke,[t[34]||(t[34]=e("h1",null,"Edit Project",-1)),D(c).loading?(S(),w("div",Se,[...t[11]||(t[11]=[e("span",{class:"loading-spinner"},null,-1),m(" Loading... ",-1)])])):D(c).currentProject?(S(),w("form",{key:1,class:"form card",onSubmit:K(W,["prevent"])},[e("div",we,[t[12]||(t[12]=e("label",{class:"form-label",for:"name"},"Project Name",-1)),f(e("input",{id:"name","onUpdate:modelValue":t[0]||(t[0]=n=>b.value=n),type:"text",class:"form-input",required:""},null,512),[[P,b.value]])]),e("div",Ce,[t[13]||(t[13]=e("label",{class:"form-label",for:"workingDirectory"},"Working Directory",-1)),R(se,{modelValue:r.value,"onUpdate:modelValue":t[1]||(t[1]=n=>r.value=n)},null,8,["modelValue"])]),e("div",De,[t[17]||(t[17]=e("label",{class:"form-label",for:"worktreePath"},"Worktree Path",-1)),e("div",Pe,[f(e("input",{id:"worktreePath","onUpdate:modelValue":t[2]||(t[2]=n=>d.value=n),type:"text",class:"form-input",placeholder:r.value+"/.worktrees"},null,8,Ee),[[P,d.value]]),e("button",{type:"button",class:"btn btn-secondary btn-sm",disabled:!r.value||o.value,onClick:H}," Detect ",8,he)]),e("p",Ie,[t[14]||(t[14]=m(" Where git worktrees are created for sessions. Changing this only affects new sessions. ",-1)),t[15]||(t[15]=e("br",null,null,-1)),t[16]||(t[16]=m("Effective path: ",-1)),e("code",null,L(d.value||(r.value?`${r.value}/.worktrees`:""))+"/{sessionId}",1)])]),e("div",xe,[t[18]||(t[18]=e("label",{class:"form-label",for:"repoUrl"},"Repository URL",-1)),f(e("input",{id:"repoUrl","onUpdate:modelValue":t[3]||(t[3]=n=>v.value=n),type:"url",class:"form-input",placeholder:"https://github.com/username/repo"},null,512),[[P,v.value]]),t[19]||(t[19]=e("p",{class:"form-help"}," Link to the project's repository (e.g., GitHub, GitLab). This can be automatically populated from session summaries. ",-1))]),e("div",Ue,[e("label",Re,[t[20]||(t[20]=m(" System Prompt ",-1)),p.value!==D(E)?(S(),w("button",{key:0,type:"button",class:"btn-link",onClick:t[4]||(t[4]=n=>p.value=D(E))}," Reset to Default ")):V("",!0)]),f(e("textarea",{id:"systemPrompt","onUpdate:modelValue":t[5]||(t[5]=n=>p.value=n),class:"form-input form-textarea",rows:"8"},null,512),[[P,p.value]]),t[21]||(t[21]=e("p",{class:"form-help"}," Customize the system prompt for the AI agent. The default prompt is pre-filled above. ",-1))]),e("details",Ve,[t[26]||(t[26]=e("summary",null,"Session Lifecycle Hooks",-1)),e("div",Me,[t[22]||(t[22]=e("label",{class:"form-label",for:"onSessionCreated"},"On Session Created",-1)),f(e("textarea",{id:"onSessionCreated","onUpdate:modelValue":t[6]||(t[6]=n=>y.value=n),class:"form-input form-textarea-small",rows:"3",placeholder:"Shell command to run when a session is created..."},null,512),[[P,y.value]]),t[23]||(t[23]=e("p",{class:"form-help"}," Runs in the background after session creation. Environment variables: CIRCUSCHIEF_SESSION_ID, CIRCUSCHIEF_PROJECT_ID, CIRCUSCHIEF_SESSION_NAME ",-1))]),e("div",je,[t[24]||(t[24]=e("label",{class:"form-label",for:"onSessionDeleted"},"On Session Deleted",-1)),f(e("textarea",{id:"onSessionDeleted","onUpdate:modelValue":t[7]||(t[7]=n=>I.value=n),class:"form-input form-textarea-small",rows:"3",placeholder:"Shell command to run when a session is deleted..."},null,512),[[P,I.value]]),t[25]||(t[25]=e("p",{class:"form-help"}," Runs in the background after session deletion. Environment variables: CIRCUSCHIEF_SESSION_ID, CIRCUSCHIEF_PROJECT_ID, CIRCUSCHIEF_SESSION_NAME ",-1))])]),R(ye,{ref_key:"sessionDefaultsRef",ref:s,"project-id":D(u).params.id},null,8,["project-id"]),e("details",$e,[t[27]||(t[27]=e("summary",null,"Quick Responses",-1)),t[28]||(t[28]=e("p",{class:"form-help"}," Quick responses are shortcuts that can be inserted into the chat input. You can create project-specific or global responses. ",-1)),e("button",{type:"button",class:"btn btn-secondary",onClick:t[8]||(t[8]=n=>M.value=!0)}," Manage Quick Responses ")]),e("details",Ne,[t[31]||(t[31]=e("summary",null,[m("Kanban Board "),e("span",{class:"inline-block rounded bg-amber-900/50 px-1.5 py-0.5 text-[10px] font-semibold uppercase text-amber-300 ml-2"},"Experimental")],-1)),e("div",Le,[e("label",Oe,[f(e("input",{"onUpdate:modelValue":t[9]||(t[9]=n=>x.value=n),type:"checkbox"},null,512),[[$,x.value]]),t[29]||(t[29]=m(" Enable Kanban board ",-1))]),t[30]||(t[30]=e("p",{class:"form-help"},[e("strong",null,"Experimental."),m(" This feature is in active development and may change or be removed. Enable a Kanban board to visually organize sessions into lanes. Sessions can be dragged between lanes, and lanes can trigger automated workflows. ")],-1))])]),U.value?(S(),w("div",Te,L(U.value),1)):V("",!0),e("div",Be,[e("button",{type:"button",class:"btn btn-danger",onClick:A}," Delete "),e("div",Ge,[R(Q,{to:`/projects/${D(u).params.id}/sessions`,class:"btn"},{default:z(()=>[...t[32]||(t[32]=[m(" Cancel ",-1)])]),_:1},8,["to"]),e("button",{type:"submit",class:"btn btn-primary",disabled:a.value},[a.value?(S(),w("span",He)):V("",!0),t[33]||(t[33]=m(" Save ",-1))],8,Fe)])])],32)):V("",!0),R(te,{"is-open":M.value,"project-id":D(u).params.id,onClose:t[10]||(t[10]=n=>M.value=!1)},null,8,["is-open","project-id"])])}}},Xe=O(We,[["__scopeId","data-v-756a6ed6"]]);export{Xe as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.advanced-settings[data-v-44c189d5]{margin-bottom:1rem}.advanced-settings summary[data-v-44c189d5]{cursor:pointer;color:var(--color-primary);font-weight:500;margin-bottom:1rem}.advanced-settings[open] summary[data-v-44c189d5]{margin-bottom:1rem}.form-help[data-v-44c189d5]{margin-top:.5rem;font-size:.875rem;color:var(--color-text-muted)}.checkbox-label[data-v-44c189d5]{display:flex;align-items:center;gap:.5rem;cursor:pointer;font-weight:500}.checkbox-label input[type=checkbox][data-v-44c189d5]{width:1rem;height:1rem;cursor:pointer}.form-input[type=select][data-v-44c189d5],select.form-input[data-v-44c189d5]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23999' d='M6 9L1 4h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .75rem center;padding-right:2.5rem}h1[data-v-756a6ed6]{margin-bottom:2rem}.loading-state[data-v-756a6ed6]{display:flex;align-items:center;gap:.5rem;justify-content:center;padding:3rem}.form[data-v-756a6ed6]{max-width:500px}.form-actions[data-v-756a6ed6]{display:flex;justify-content:space-between;align-items:center}.form-actions-right[data-v-756a6ed6]{display:flex;gap:.5rem}.error-message[data-v-756a6ed6]{color:var(--color-error);margin-bottom:1rem}.form-textarea[data-v-756a6ed6]{resize:vertical;min-height:120px;font-family:monospace;font-size:.875rem;line-height:1.5}.form-help[data-v-756a6ed6]{margin-top:.5rem;font-size:.875rem;color:var(--color-text-muted)}.advanced-settings[data-v-756a6ed6]{margin-bottom:1rem}.advanced-settings summary[data-v-756a6ed6]{cursor:pointer;color:var(--color-primary);font-weight:500;margin-bottom:1rem}.advanced-settings[open] summary[data-v-756a6ed6]{margin-bottom:1rem}.form-textarea-small[data-v-756a6ed6]{resize:vertical;min-height:60px;font-family:monospace;font-size:.875rem;line-height:1.5}.checkbox-label[data-v-756a6ed6]{display:flex;align-items:center;gap:.5rem;cursor:pointer;font-weight:500}.checkbox-label input[type=checkbox][data-v-756a6ed6]{width:1rem;height:1rem;cursor:pointer}.form-input[type=select][data-v-756a6ed6],select.form-input[data-v-756a6ed6]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23999' d='M6 9L1 4h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .75rem center;padding-right:2.5rem}.btn-link[data-v-756a6ed6]{background:none;border:none;color:var(--color-primary);font-size:.75rem;padding:0;margin-left:.5rem;cursor:pointer;text-decoration:underline}.btn-link[data-v-756a6ed6]:hover{color:var(--color-primary-hover)}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.models-section[data-v-3aa7217a]{margin-bottom:1.25rem;border:1px solid var(--color-border);border-radius:.25rem;overflow:hidden}.models-header[data-v-3aa7217a]{display:flex;align-items:baseline;gap:.75rem;padding:.75rem 1rem;background:var(--color-background-soft);border-bottom:1px solid var(--color-border)}.models-title[data-v-3aa7217a]{font-weight:500;font-size:.875rem;color:var(--color-text)}.models-hint[data-v-3aa7217a]{font-size:.8125rem;color:var(--color-text-soft)}.models-list[data-v-3aa7217a]{padding:.5rem .75rem}.model-row[data-v-3aa7217a]{display:grid;grid-template-columns:1fr 10rem 6.5rem 2rem;gap:.5rem;align-items:center;margin-bottom:.375rem}.model-row-header[data-v-3aa7217a]{font-size:.75rem;font-weight:500;color:var(--color-text-soft);margin-bottom:.25rem}.model-row-header span[data-v-3aa7217a]{padding:0 .25rem}.model-input[data-v-3aa7217a]{padding:.4rem .6rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:.25rem;color:var(--color-text);font-size:.8125rem}.model-input[data-v-3aa7217a]:focus{outline:none;border-color:var(--color-primary)}.tier-select[data-v-3aa7217a]{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto;cursor:pointer}.remove-model-btn[data-v-3aa7217a]{background:none;border:1px solid var(--color-border);color:var(--color-text-soft);font-size:1.125rem;cursor:pointer;padding:.2rem .4rem;line-height:1;border-radius:.25rem;text-align:center}.remove-model-btn[data-v-3aa7217a]:hover{color:var(--color-danger, #ef4444);border-color:var(--color-danger, #ef4444)}.models-empty[data-v-3aa7217a]{padding:.75rem 1rem;font-size:.8125rem;color:var(--color-text-soft);font-style:italic}.add-model-btn[data-v-3aa7217a]{margin:.5rem .75rem .75rem}.btn[data-v-3aa7217a]{padding:.5rem 1rem;border-radius:.25rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .15s}.btn-sm[data-v-3aa7217a]{padding:.375rem .75rem;font-size:.8125rem}.btn-secondary[data-v-3aa7217a]{background:var(--color-background);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[data-v-3aa7217a]:hover:not(:disabled){border-color:var(--color-primary);background:var(--color-background-soft)}.modal-overlay[data-v-9136dbd9]{position:fixed;top:0;left:0;right:0;bottom:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:1000}.modal[data-v-9136dbd9]{background:var(--color-background);border:1px solid var(--color-border);border-radius:.5rem;width:100%;max-width:680px;max-height:90vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 8px 32px #0000004d}.modal-header[data-v-9136dbd9]{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid var(--color-border)}.modal-header h2[data-v-9136dbd9]{margin:0;font-size:1.125rem;font-weight:600}.close-btn[data-v-9136dbd9]{background:none;border:none;color:var(--color-text-soft);font-size:1.5rem;cursor:pointer;padding:.25rem;line-height:1;border-radius:.25rem}.close-btn[data-v-9136dbd9]:hover{color:var(--color-text);background:var(--color-background-soft)}.modal-body[data-v-9136dbd9]{padding:1.25rem;overflow-y:auto}.form-group[data-v-9136dbd9]{margin-bottom:1.25rem}.form-group label[data-v-9136dbd9]{display:block;margin-bottom:.5rem;font-weight:500;font-size:.875rem;color:var(--color-text)}.label-hint[data-v-9136dbd9]{font-weight:400;color:var(--color-text-soft);font-size:.8125rem}.form-group input[type=text][data-v-9136dbd9],.form-group input[type=url][data-v-9136dbd9],.form-group input[type=password][data-v-9136dbd9],.form-group input[type=number][data-v-9136dbd9],.form-group textarea[data-v-9136dbd9],.form-group select.kind-select[data-v-9136dbd9]{width:100%;padding:.5rem .75rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:.25rem;color:var(--color-text);font-size:.875rem}.form-group textarea[data-v-9136dbd9]{min-height:4.75rem;resize:vertical;line-height:1.45}.form-group input[data-v-9136dbd9]:focus,.form-group textarea[data-v-9136dbd9]:focus,.form-group select.kind-select[data-v-9136dbd9]:focus{outline:none;border-color:var(--color-primary)}.form-group select.kind-select[data-v-9136dbd9]:disabled{opacity:.6;cursor:not-allowed}.field-note[data-v-9136dbd9]{margin:.375rem 0 0;font-size:.75rem;color:var(--color-text-soft);font-style:italic}.field-error[data-v-9136dbd9]{margin:.375rem 0 0;font-size:.75rem;color:var(--color-danger)}.token-input-wrapper[data-v-9136dbd9]{display:flex;gap:.5rem}.token-input-wrapper input[data-v-9136dbd9]{flex:1}.toggle-visibility-btn[data-v-9136dbd9]{padding:.5rem 1rem;background:var(--color-background);border:1px solid var(--color-border);border-radius:.25rem;color:var(--color-text);font-size:.8125rem;cursor:pointer;white-space:nowrap}.toggle-visibility-btn[data-v-9136dbd9]:hover{background:var(--color-background-soft)}.expandable-section[data-v-9136dbd9]{margin-bottom:1.25rem;border:1px solid var(--color-border);border-radius:.25rem}.section-header[data-v-9136dbd9]{padding:.75rem 1rem;background:var(--color-background-soft);cursor:pointer;-webkit-user-select:none;user-select:none;font-weight:500;font-size:.875rem;color:var(--color-text)}.section-header[data-v-9136dbd9]:hover{background:var(--color-background-mute)}.section-content[data-v-9136dbd9]{padding:1rem}.env-vars-list[data-v-9136dbd9]{display:flex;flex-direction:column;gap:.5rem}.env-var-row[data-v-9136dbd9]{display:flex;gap:.5rem}.env-key[data-v-9136dbd9],.env-value[data-v-9136dbd9]{padding:.5rem .75rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:.25rem;color:var(--color-text);font-size:.875rem;font-family:var(--font-mono)}.env-key[data-v-9136dbd9]{flex:0 0 150px}.env-value[data-v-9136dbd9]{flex:1}.env-key[data-v-9136dbd9]:focus,.env-value[data-v-9136dbd9]:focus{outline:none;border-color:var(--color-primary)}.remove-env-btn[data-v-9136dbd9]{background:none;border:1px solid var(--color-border);color:var(--color-text-soft);font-size:1.25rem;cursor:pointer;padding:.25rem .5rem;line-height:1;border-radius:.25rem}.remove-env-btn[data-v-9136dbd9]:hover{color:var(--color-danger, #ef4444);border-color:var(--color-danger, #ef4444)}.error-message[data-v-9136dbd9]{margin-top:1rem;padding:.75rem;background:#ef44441a;border:1px solid rgba(239,68,68,.3);border-radius:.25rem;color:var(--color-danger, #ef4444);font-size:.875rem}.test-result[data-v-9136dbd9]{margin-top:1rem;padding:.75rem;border-radius:.25rem;font-size:.875rem}.test-result.success[data-v-9136dbd9]{background:#22c55e1a;border:1px solid rgba(34,197,94,.3);color:var(--color-success, #22c55e)}.test-result.failure[data-v-9136dbd9]{background:#ef44441a;border:1px solid rgba(239,68,68,.3);color:var(--color-danger, #ef4444)}.test-result-header[data-v-9136dbd9]{display:flex;align-items:center;gap:.5rem;font-weight:500}.test-icon[data-v-9136dbd9]{font-size:1.125rem}.test-details[data-v-9136dbd9]{margin-top:.5rem;padding-top:.5rem;border-top:1px solid currentColor;opacity:.8}.test-detail[data-v-9136dbd9]{margin-top:.25rem}.test-detail code[data-v-9136dbd9]{font-family:var(--font-mono);font-size:.8125rem}.modal-footer[data-v-9136dbd9]{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-top:1px solid var(--color-border);background:var(--color-background-soft)}.footer-actions[data-v-9136dbd9]{display:flex;gap:.75rem}.btn[data-v-9136dbd9]{padding:.5rem 1rem;border-radius:.25rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .15s}.btn[data-v-9136dbd9]:disabled{opacity:.5;cursor:not-allowed}.btn-sm[data-v-9136dbd9]{padding:.375rem .75rem;font-size:.8125rem}.btn-secondary[data-v-9136dbd9]{background:var(--color-background);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[data-v-9136dbd9]:hover:not(:disabled){border-color:var(--color-primary);background:var(--color-background-soft)}.btn-primary[data-v-9136dbd9]{background:var(--color-primary);border:1px solid var(--color-primary);color:#fff}.btn-primary[data-v-9136dbd9]:hover:not(:disabled){filter:brightness(1.1)}@media (max-width: 520px){.modal-overlay[data-v-9136dbd9]{align-items:stretch;justify-content:stretch}.modal[data-v-9136dbd9]{max-width:none;max-height:none;min-height:100vh;border-radius:0;border-left:0;border-right:0}.modal-body[data-v-9136dbd9]{padding:1rem}.modal-footer[data-v-9136dbd9]{align-items:stretch;flex-direction:column;gap:.75rem}.footer-actions[data-v-9136dbd9]{justify-content:space-between;width:100%}.footer-actions .btn[data-v-9136dbd9],.modal-footer>.btn[data-v-9136dbd9]{flex:1}.env-var-row[data-v-9136dbd9],.token-input-wrapper[data-v-9136dbd9]{flex-direction:column}.env-key[data-v-9136dbd9]{flex:1}}.page-header[data-v-1ca2a6ab]{display:flex;justify-content:flex-end;align-items:center;margin-bottom:.5rem}.page-description[data-v-1ca2a6ab]{color:var(--color-text-soft);margin:0 0 1.5rem;font-size:.875rem;line-height:1.5}.skeleton-list[data-v-1ca2a6ab]{display:flex;flex-direction:column;gap:1rem}.error-message[data-v-1ca2a6ab]{color:var(--color-error);padding:1rem;background-color:#f851491a;border-radius:var(--border-radius)}.provider-list[data-v-1ca2a6ab]{display:flex;flex-direction:column;gap:1rem}.provider-card[data-v-1ca2a6ab]{padding:1.25rem}.provider-header[data-v-1ca2a6ab]{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:.75rem;gap:1rem}.provider-title h3[data-v-1ca2a6ab]{margin:0;font-size:1rem;display:flex;align-items:center;gap:.5rem}.built-in-badge[data-v-1ca2a6ab]{display:inline-block;padding:.125rem .5rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:.25rem;font-size:.75rem;font-weight:500;text-transform:uppercase;letter-spacing:0;color:var(--color-text-soft)}.provider-actions[data-v-1ca2a6ab]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.5rem;flex-shrink:0}.provider-details[data-v-1ca2a6ab]{display:flex;flex-direction:column;gap:.5rem}.provider-detail[data-v-1ca2a6ab]{display:flex;gap:.5rem;font-size:.875rem}.detail-label[data-v-1ca2a6ab]{color:var(--color-text-soft);font-weight:500}.detail-value[data-v-1ca2a6ab]{color:var(--color-text);font-family:var(--font-mono);font-size:.8125rem;overflow-wrap:anywhere}.btn-sm[data-v-1ca2a6ab]{padding:.375rem .75rem;font-size:.8125rem}.btn-danger[data-v-1ca2a6ab]{background:var(--color-danger, #ef4444);border:1px solid var(--color-danger, #ef4444);color:#fff}.btn-danger[data-v-1ca2a6ab]:hover:not(:disabled){filter:brightness(1.1)}.modal-overlay[data-v-1ca2a6ab]{position:fixed;top:0;left:0;right:0;bottom:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:1000}.modal[data-v-1ca2a6ab]{background:var(--color-background);border:1px solid var(--color-border);border-radius:.5rem;width:100%;max-width:450px;max-height:90vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 8px 32px #0000004d}.confirm-modal[data-v-1ca2a6ab]{max-width:400px}.modal-header[data-v-1ca2a6ab]{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid var(--color-border)}.modal-header h2[data-v-1ca2a6ab]{margin:0;font-size:1.125rem;font-weight:600}.close-btn[data-v-1ca2a6ab]{background:none;border:none;color:var(--color-text-soft);font-size:1.5rem;cursor:pointer;padding:.25rem;line-height:1;border-radius:.25rem}.close-btn[data-v-1ca2a6ab]:hover{color:var(--color-text);background:var(--color-background-soft)}.modal-body[data-v-1ca2a6ab]{padding:1.25rem}.modal-body p[data-v-1ca2a6ab]{margin:0 0 .75rem}.warning-text[data-v-1ca2a6ab]{color:var(--color-warning, #f59e0b);font-size:.875rem;font-weight:500}.modal-footer[data-v-1ca2a6ab]{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.25rem;border-top:1px solid var(--color-border);background:var(--color-background-soft)}@media (max-width: 520px){.provider-card[data-v-1ca2a6ab]{padding:1rem}.provider-header[data-v-1ca2a6ab],.provider-detail[data-v-1ca2a6ab]{flex-direction:column;align-items:stretch}.provider-actions[data-v-1ca2a6ab]{justify-content:flex-start}.modal-overlay[data-v-1ca2a6ab]{align-items:stretch}.modal[data-v-1ca2a6ab]{max-width:none;max-height:none;min-height:100vh;border-radius:0;border-left:0;border-right:0}.modal-footer[data-v-1ca2a6ab]{justify-content:space-between}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{k as se,l as ae,x,a3 as te,a4 as ie,n as V,_ as Z,a,c as d,b as e,e as de,F as z,r as q,m as I,v as N,p as oe,t as y,u as t,j as X,i as f,f as B,a5 as re,G as ue,E as ce,S as Q,o as ve,d as me}from"./index-fK8FIZgP.js";import{u as ne}from"./providers-1bnH-exJ.js";import"./ApiClient-C3ztI9s9.js";const pe=Object.freeze(["anthropic","openai"]);function le(){return{name:"",kind:"anthropic",baseUrl:null,authToken:null,apiTimeoutMs:null,additionalEnvVars:{},commitAttributionOverride:null}}function be(u){const b={name:u.name,kind:u.kind||"anthropic",baseUrl:u.baseUrl,authToken:u.authToken==="••••••••"?null:u.authToken,apiTimeoutMs:u.apiTimeoutMs,additionalEnvVars:u.additionalEnvVars?{...u.additionalEnvVars}:{},commitAttributionOverride:u.commitAttributionOverride||null},m=Object.keys(b.additionalEnvVars),k=(u.models||[]).map(n=>({_serverId:n.id,modelId:n.modelId,displayName:n.displayName,tier:n.tier||"custom"}));return{formData:b,envKeys:m,models:k,authModified:!1}}function fe(){return{form:V(le()),localModels:V([]),envVarKeys:V([]),showAuthToken:V(!1),saving:V(!1),testing:V(!1),error:V(null),testResult:V(null),authTokenModified:V(!1)}}function ye(u,b,m,k={}){const n=ne(),h=se(),_=k.attributionOnlyRef,A=fe(),{form:l,localModels:M,envVarKeys:$,showAuthToken:C,saving:U,testing:O,error:T,testResult:w,authTokenModified:S}=A,D=x(()=>!!b.value),g=x(()=>{const s=te(l.value.commitAttributionOverride);return s.success?null:s.error}),i=x(()=>g.value?!1:_!=null&&_.value?!0:!(l.value.name.trim().length===0||!D.value&&!pe.includes(l.value.kind))),r=x(()=>l.value.baseUrl||l.value.authToken);ae(()=>[u.value,b.value],([s,c])=>{if(s){if(c){const p=be(c);l.value=p.formData,$.value=p.envKeys,M.value=p.models,S.value=p.authModified}else l.value=le(),$.value=[],M.value=[],S.value=!0;C.value=!1,T.value=null,w.value=null}},{deep:!0});function L(){M.value.push({modelId:"",displayName:"",tier:"custom"})}function j(s){M.value.splice(s,1)}function R(){const s=`ENV_VAR_${Object.keys(l.value.additionalEnvVars).length+1}`;l.value.additionalEnvVars[s]="",$.value.push(s)}function G(s){delete l.value.additionalEnvVars[s],$.value=$.value.filter(c=>c!==s)}function W(s,c){const p=$.value[s];if(p!==c&&p.trim()){const P=l.value.additionalEnvVars[c];delete l.value.additionalEnvVars[c],l.value.additionalEnvVars[p]=P}}async function Y(){O.value=!0,T.value=null,w.value=null;try{const s=M.value.find(p=>p.tier==="sonnet"),c={kind:l.value.kind||"anthropic",baseUrl:l.value.baseUrl||void 0,authToken:l.value.authToken||void 0,defaultSonnetModel:(s==null?void 0:s.modelId)||void 0,apiTimeoutMs:l.value.apiTimeoutMs||void 0};w.value=await n.testConnection(c)}catch(s){T.value=s.message}finally{O.value=!1}}function H(s,c){return s.modelId.trim()!==c.modelId||s.displayName.trim()!==c.displayName||s.tier!==c.tier}function J(s){return{modelId:s.modelId.trim(),displayName:s.displayName.trim()||s.modelId.trim(),tier:s.tier||"custom"}}async function o(s,c,p){if(!s._serverId&&s.modelId.trim()){await n.addModel(c,J(s));return}const P=p.get(s._serverId);P&&H(s,P)&&await n.updateModel(c,s._serverId,J(s))}async function v(s){var ee;const c=new Set(M.value.filter(E=>E._serverId).map(E=>E._serverId)),p=((ee=b.value)==null?void 0:ee.models)||[],P=new Map(p.map(E=>[E.id,E]));for(const E of p)c.has(E.id)||await n.removeModel(s,E.id);for(const E of M.value)await o(E,s,P);await n.fetchProviders()}function F(s){const c=te(s);if(!c.success)throw new Error(ie);return c.value}async function K(){var s,c;U.value=!0,T.value=null;try{const p={name:l.value.name.trim(),baseUrl:((s=l.value.baseUrl)==null?void 0:s.trim())||null,apiTimeoutMs:l.value.apiTimeoutMs||null,additionalEnvVars:Object.keys(l.value.additionalEnvVars).length>0?l.value.additionalEnvVars:null,commitAttributionOverride:F(l.value.commitAttributionOverride)};if(_!=null&&_.value){await n.updateProvider(b.value.id,{commitAttributionOverride:p.commitAttributionOverride}),h.success("Provider updated successfully"),m();return}S.value&&(p.authToken=((c=l.value.authToken)==null?void 0:c.trim())||null);let P;D.value?(P=await n.updateProvider(b.value.id,p),h.success("Provider updated successfully")):(p.kind=l.value.kind||"anthropic",P=await n.createProvider(p),h.success("Provider created successfully")),await v(P.id),m()}catch(p){T.value=p.message}finally{U.value=!1}}return{form:l,localModels:M,envVarKeys:$,showAuthToken:C,saving:U,testing:O,error:T,testResult:w,authTokenModified:S,isEditing:D,attributionValidationError:g,isValid:i,canTest:r,addLocalModel:L,removeLocalModel:j,addEnvVar:R,removeEnvVar:G,updateEnvVarKey:W,testConnection:Y,save:K}}const ke={class:"models-section"},he={key:0,class:"models-list"},_e=["onUpdate:modelValue"],ge=["onUpdate:modelValue"],Ve=["onUpdate:modelValue"],Ce=["onClick"],Me={key:1,class:"models-empty"},Ae={__name:"ProviderModelsList",props:{models:{type:Array,required:!0}},emits:["add","remove"],setup(u){return(b,m)=>(a(),d("div",ke,[m[3]||(m[3]=e("div",{class:"models-header"},[e("span",{class:"models-title"},"Models"),e("span",{class:"models-hint"},"Assign tiers to map provider models to Opus / Sonnet / Haiku roles")],-1)),u.models.length>0?(a(),d("div",he,[m[2]||(m[2]=de('<div class="model-row model-row-header" data-v-3aa7217a><span class="col-model-id" data-v-3aa7217a>Model ID</span><span class="col-display-name" data-v-3aa7217a>Display Name</span><span class="col-tier" data-v-3aa7217a>Tier</span><span class="col-actions" data-v-3aa7217a></span></div>',1)),(a(!0),d(z,null,q(u.models,(k,n)=>(a(),d("div",{key:n,class:"model-row"},[I(e("input",{"onUpdate:modelValue":h=>k.modelId=h,type:"text",placeholder:"anthropic.claude-3-sonnet-…",class:"col-model-id model-input"},null,8,_e),[[N,k.modelId]]),I(e("input",{"onUpdate:modelValue":h=>k.displayName=h,type:"text",placeholder:"My Sonnet",class:"col-display-name model-input"},null,8,ge),[[N,k.displayName]]),I(e("select",{"onUpdate:modelValue":h=>k.tier=h,class:"col-tier model-input tier-select"},[...m[1]||(m[1]=[e("option",{value:"opus"}," Opus ",-1),e("option",{value:"sonnet"}," Sonnet ",-1),e("option",{value:"haiku"}," Haiku ",-1),e("option",{value:"custom"}," Custom ",-1)])],8,Ve),[[oe,k.tier]]),e("button",{type:"button",class:"col-actions remove-model-btn",title:"Remove model",onClick:h=>b.$emit("remove",n)}," × ",8,Ce)]))),128))])):(a(),d("div",Me," No models added yet. ")),e("button",{type:"button",class:"btn btn-sm btn-secondary add-model-btn",onClick:m[0]||(m[0]=k=>b.$emit("add"))}," + Add Model ")]))}},$e=Z(Ae,[["__scopeId","data-v-3aa7217a"]]),Te={class:"modal"},Ee={class:"modal-header"},Ie={class:"modal-body"},Oe={key:0,class:"form-group"},Pe={key:1,class:"form-group"},Ue=["disabled","title"],we={key:0,class:"field-note"},Se={key:2,class:"form-group"},Ne={for:"base-url"},Be={class:"label-hint"},De=["placeholder"],xe={key:3,class:"form-group"},Le={for:"auth-token"},Re={class:"label-hint"},Fe={class:"token-input-wrapper"},Ke=["type"],He=["title"],je={class:"form-group"},ze={key:0,class:"field-error"},qe={key:5,class:"expandable-section"},Ge={class:"section-content"},We={class:"form-group"},Ye={class:"form-group"},Je={class:"env-vars-list"},Qe=["onUpdate:modelValue","onBlur"],Xe=["onUpdate:modelValue"],Ze=["onClick"],et={key:6,class:"error-message"},tt={class:"test-result-header"},st={class:"test-icon"},ot={class:"test-message"},nt={key:0,class:"test-details"},lt={key:0,class:"test-detail"},at={key:1,class:"test-detail"},it={class:"modal-footer"},dt=["disabled"],rt={class:"footer-actions"},ut=["disabled"],ct=["disabled"],vt={__name:"ProviderForm",props:{isOpen:{type:Boolean,default:!1},provider:{type:Object,default:null},attributionOnly:{type:Boolean,default:!1}},emits:["close","saved"],setup(u,{emit:b}){const m=u,k=b,{form:n,localModels:h,envVarKeys:_,showAuthToken:A,saving:l,testing:M,error:$,testResult:C,authTokenModified:U,isEditing:O,attributionValidationError:T,isValid:w,canTest:S,addLocalModel:D,removeLocalModel:g,addEnvVar:i,removeEnvVar:r,updateEnvVarKey:L,testConnection:j,save:R}=ye(Q(m,"isOpen"),Q(m,"provider"),()=>k("saved"),{attributionOnlyRef:Q(m,"attributionOnly")}),G=x(()=>n.value.kind==="openai"?"OPENAI_BASE_URL":"ANTHROPIC_BASE_URL"),W=x(()=>n.value.kind==="openai"?"OPENAI_API_KEY":"ANTHROPIC_AUTH_TOKEN"),Y=x(()=>n.value.kind==="openai"?"https://api.openai.com/v1":"https://bedrock-runtime.us-east-1.amazonaws.com");function H(){k("close")}return(J,o)=>u.isOpen?(a(),d("div",{key:0,class:"modal-overlay",onClick:X(H,["self"])},[e("div",Te,[e("div",Ee,[e("h2",null,y(u.attributionOnly?"Commit Attribution":t(O)?"Edit Provider":"Add Provider"),1),e("button",{type:"button",class:"close-btn",title:"Close",onClick:H}," × ")]),e("div",Ie,[e("form",{onSubmit:o[9]||(o[9]=X((...v)=>t(R)&&t(R)(...v),["prevent"]))},[u.attributionOnly?f("",!0):(a(),d("div",Oe,[o[12]||(o[12]=e("label",{for:"provider-name"},"Provider Name*",-1)),I(e("input",{id:"provider-name","onUpdate:modelValue":o[0]||(o[0]=v=>t(n).name=v),type:"text",placeholder:"e.g., AWS Bedrock",required:"",maxlength:"100"},null,512),[[N,t(n).name]])])),u.attributionOnly?f("",!0):(a(),d("div",Pe,[o[14]||(o[14]=e("label",{for:"provider-kind"},[B(" Compatibility* "),e("span",{class:"label-hint"},"Wire protocol & env-var convention")],-1)),I(e("select",{id:"provider-kind","onUpdate:modelValue":o[1]||(o[1]=v=>t(n).kind=v),disabled:t(O),title:t(O)?"Compatibility cannot be changed after creation":void 0,class:"kind-select",required:""},[...o[13]||(o[13]=[e("option",{value:"anthropic"}," Anthropic (Claude Code) ",-1),e("option",{value:"openai"}," OpenAI / Codex ",-1)])],8,Ue),[[oe,t(n).kind]]),t(O)?(a(),d("p",we," Compatibility cannot be changed after creation. ")):f("",!0)])),u.attributionOnly?f("",!0):(a(),d("div",Se,[e("label",Ne,[o[15]||(o[15]=B(" Base URL ",-1)),e("span",Be,"("+y(G.value)+")",1)]),I(e("input",{id:"base-url","onUpdate:modelValue":o[2]||(o[2]=v=>t(n).baseUrl=v),type:"url",placeholder:Y.value},null,8,De),[[N,t(n).baseUrl]])])),u.attributionOnly?f("",!0):(a(),d("div",xe,[e("label",Le,[o[16]||(o[16]=B(" Auth Token ",-1)),e("span",Re,"("+y(W.value)+")",1)]),e("div",Fe,[I(e("input",{id:"auth-token","onUpdate:modelValue":o[3]||(o[3]=v=>t(n).authToken=v),type:t(A)?"text":"password",placeholder:"Your authentication token",onInput:o[4]||(o[4]=v=>U.value=!0)},null,40,Ke),[[re,t(n).authToken]]),e("button",{type:"button",class:"toggle-visibility-btn",title:t(A)?"Hide":"Show",onClick:o[5]||(o[5]=v=>A.value=!t(A))},y(t(A)?"Hide":"Show"),9,He)])])),e("div",je,[o[17]||(o[17]=e("label",{for:"commit-attribution-override"},"Commit attribution override",-1)),I(e("textarea",{id:"commit-attribution-override","onUpdate:modelValue":o[6]||(o[6]=v=>t(n).commitAttributionOverride=v),rows:"3",placeholder:"Blank uses agent default"},null,512),[[N,t(n).commitAttributionOverride]]),o[18]||(o[18]=e("p",{class:"field-note"}," Blank uses agent default. ",-1)),t(T)?(a(),d("p",ze,y(t(T)),1)):f("",!0)]),u.attributionOnly?f("",!0):(a(),ue($e,{key:4,models:t(h),onAdd:t(D),onRemove:t(g)},null,8,["models","onAdd","onRemove"])),u.attributionOnly?f("",!0):(a(),d("details",qe,[o[21]||(o[21]=e("summary",{class:"section-header"}," Advanced Settings ",-1)),e("div",Ge,[e("div",We,[o[19]||(o[19]=e("label",{for:"api-timeout"},"API Timeout (ms)",-1)),I(e("input",{id:"api-timeout","onUpdate:modelValue":o[7]||(o[7]=v=>t(n).apiTimeoutMs=v),type:"number",placeholder:"120000",min:"1000",step:"1000"},null,512),[[N,t(n).apiTimeoutMs,void 0,{number:!0}]])]),e("div",Ye,[o[20]||(o[20]=e("label",null,"Additional Environment Variables",-1)),e("div",Je,[(a(!0),d(z,null,q(t(n).additionalEnvVars,(v,F,K)=>(a(),d("div",{key:K,class:"env-var-row"},[I(e("input",{"onUpdate:modelValue":s=>t(_)[K]=s,type:"text",placeholder:"KEY",class:"env-key",onBlur:s=>t(L)(K,F)},null,40,Qe),[[N,t(_)[K]]]),I(e("input",{"onUpdate:modelValue":s=>t(n).additionalEnvVars[F]=s,type:"text",placeholder:"value",class:"env-value"},null,8,Xe),[[N,t(n).additionalEnvVars[F]]]),e("button",{type:"button",class:"remove-env-btn",title:"Remove",onClick:s=>t(r)(F)}," × ",8,Ze)]))),128)),e("button",{type:"button",class:"btn btn-sm btn-secondary",onClick:o[8]||(o[8]=(...v)=>t(i)&&t(i)(...v))}," + Add Variable ")])])])])),t($)?(a(),d("div",et,y(t($)),1)):f("",!0),t(C)?(a(),d("div",{key:7,class:ce(["test-result",t(C).success?"success":"failure"])},[e("div",tt,[e("span",st,y(t(C).success?"✓":"✗"),1),e("span",ot,y(t(C).message),1)]),t(C).details?(a(),d("div",nt,[t(C).details.model?(a(),d("div",lt,[o[22]||(o[22]=B(" Model: ",-1)),e("code",null,y(t(C).details.model),1)])):f("",!0),t(C).details.code?(a(),d("div",at,[o[23]||(o[23]=B(" Error Code: ",-1)),e("code",null,y(t(C).details.code),1)])):f("",!0)])):f("",!0)],2)):f("",!0)],32)]),e("div",it,[u.attributionOnly?f("",!0):(a(),d("button",{key:0,type:"button",class:"btn btn-secondary",disabled:t(l)||t(M)||!t(S),onClick:o[10]||(o[10]=(...v)=>t(j)&&t(j)(...v))},y(t(M)?"Testing...":"Test Connection"),9,dt)),e("div",rt,[e("button",{type:"button",class:"btn btn-secondary",disabled:t(l),onClick:H}," Cancel ",8,ut),e("button",{type:"button",class:"btn btn-primary",disabled:t(l)||!t(w),onClick:o[11]||(o[11]=(...v)=>t(R)&&t(R)(...v))},y(t(l)?"Saving...":"Save"),9,ct)])])])])):f("",!0)}},mt=Z(vt,[["__scopeId","data-v-9136dbd9"]]),pt={class:"container"},bt={key:0,class:"skeleton-list"},ft={key:1,class:"error-message"},yt={key:2,class:"provider-list"},kt={class:"provider-header"},ht={class:"provider-title"},_t={key:0,class:"built-in-badge"},gt={class:"provider-actions"},Vt=["disabled","onClick"],Ct=["onClick"],Mt=["onClick"],At={class:"provider-details"},$t={class:"provider-detail"},Tt={class:"detail-value"},Et={key:0,class:"provider-detail"},It={class:"detail-value"},Ot={key:1,class:"provider-detail"},Pt={class:"detail-value"},Ut={key:2,class:"provider-detail"},wt={class:"detail-value"},St={class:"modal confirm-modal"},Nt={class:"modal-header"},Bt={class:"modal-body"},Dt={class:"modal-footer"},xt=["disabled"],Lt={__name:"ProvidersView",setup(u){const b=ne(),m=se(),k=V(!1),n=V(null),h=V(!1),_=V(null),A=V(!1),l=V(null);ve(()=>{b.fetchProviders()});function M(){n.value=null,h.value=!1,k.value=!0}function $(g){n.value=g,h.value=!1,k.value=!0}function C(g){n.value=g,h.value=!0,k.value=!0}function U(){k.value=!1,n.value=null,h.value=!1}function O(){U(),b.fetchProviders()}function T(g){return g.kind==="openai"?"Uses official OpenAI API":"Uses official Anthropic API"}async function w(g){l.value=g;try{const i=await b.testExistingProvider(g);i.success?m.success(`Connection successful (model: ${i.details.model})`):m.error(`Connection failed: ${i.message}`)}catch(i){m.error(`Test failed: ${i.message}`)}finally{l.value=null}}function S(g){_.value=g}async function D(){A.value=!0;try{await b.deleteProvider(_.value.id),m.success("Provider deleted"),_.value=null}catch(g){m.error(`Failed to delete provider: ${g.message}`)}finally{A.value=!1}}return(g,i)=>(a(),d("div",pt,[e("div",{class:"page-header"},[e("button",{class:"btn btn-primary",onClick:M},[...i[3]||(i[3]=[e("span",null,"+ Add Provider",-1)])])]),i[11]||(i[11]=e("p",{class:"page-description"}," Configure custom model providers to use the agent through alternative endpoints like AWS Bedrock, Google Vertex AI, or self-hosted proxies. ",-1)),t(b).loading?(a(),d("div",bt,[(a(),d(z,null,q(3,r=>e("div",{key:r,class:"skeleton card",style:{height:"120px"}})),64))])):t(b).error?(a(),d("div",ft,y(t(b).error),1)):(a(),d("div",yt,[(a(!0),d(z,null,q(t(b).providers,r=>(a(),d("div",{key:r.id,class:"provider-card card"},[e("div",kt,[e("div",ht,[e("h3",null,[B(y(r.name)+" ",1),r.isBuiltIn?(a(),d("span",_t,"Built-in")):f("",!0)])]),e("div",gt,[r.isBuiltIn?f("",!0):(a(),d("button",{key:0,class:"btn btn-sm",disabled:l.value===r.id,title:"Test Connection",onClick:L=>w(r.id)},y(l.value===r.id?"Testing...":"Test"),9,Vt)),e("button",{class:"btn btn-sm",onClick:L=>r.isBuiltIn?C(r):$(r)},y(r.isBuiltIn?"Settings":"Edit"),9,Ct),r.isBuiltIn?f("",!0):(a(),d("button",{key:1,class:"btn btn-sm btn-danger",onClick:L=>S(r)}," Delete ",8,Mt))])]),e("div",At,[e("div",$t,[i[4]||(i[4]=e("span",{class:"detail-label"},"Commit attribution:",-1)),e("span",Tt,y(r.commitAttributionOverride?"Custom attribution":"Agent default"),1)]),r.baseUrl?(a(),d("div",Et,[i[5]||(i[5]=e("span",{class:"detail-label"},"Base URL:",-1)),e("code",It,y(r.baseUrl),1)])):f("",!0),r.defaultSonnetModel?(a(),d("div",Ot,[i[6]||(i[6]=e("span",{class:"detail-label"},"Default Sonnet Model:",-1)),e("code",Pt,y(r.defaultSonnetModel),1)])):f("",!0),!r.baseUrl&&r.isBuiltIn?(a(),d("div",Ut,[e("span",wt,y(T(r)),1)])):f("",!0)])]))),128))])),me(mt,{"is-open":k.value,provider:n.value,"attribution-only":h.value,onClose:U,onSaved:O},null,8,["is-open","provider","attribution-only"]),_.value?(a(),d("div",{key:3,class:"modal-overlay",onClick:i[2]||(i[2]=X(r=>_.value=null,["self"]))},[e("div",St,[e("div",Nt,[i[7]||(i[7]=e("h2",null,"Delete Provider",-1)),e("button",{type:"button",class:"close-btn",onClick:i[0]||(i[0]=r=>_.value=null)}," × ")]),e("div",Bt,[e("p",null,[i[8]||(i[8]=B("Are you sure you want to delete ",-1)),e("strong",null,y(_.value.name),1),i[9]||(i[9]=B("?",-1))]),i[10]||(i[10]=e("p",{class:"warning-text"}," This action cannot be undone. ",-1))]),e("div",Dt,[e("button",{type:"button",class:"btn btn-secondary",onClick:i[1]||(i[1]=r=>_.value=null)}," Cancel "),e("button",{type:"button",class:"btn btn-danger",disabled:A.value,onClick:D},y(A.value?"Deleting...":"Delete"),9,xt)])])])):f("",!0)]))}},Ht=Z(Lt,[["__scopeId","data-v-1ca2a6ab"]]);export{Ht as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.dialog-overlay[data-v-a4f293ca]{position:fixed;top:0;left:0;right:0;bottom:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1260}.dialog[data-v-a4f293ca]{background:var(--color-background);border:1px solid var(--color-border);border-radius:var(--border-radius-lg, 12px);width:100%;max-width:500px;max-height:90vh;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 20px 25px -5px #0000004d}.dialog-header[data-v-a4f293ca]{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid var(--color-border);flex-shrink:0}.dialog-title[data-v-a4f293ca]{margin:0;font-size:1.125rem;font-weight:600;color:var(--color-text)}.close-button[data-v-a4f293ca]{background:none;border:none;font-size:1.5rem;color:var(--color-text-soft);cursor:pointer;padding:.25rem;line-height:1}.close-button[data-v-a4f293ca]:hover{color:var(--color-text)}.dialog-form[data-v-a4f293ca]{display:flex;flex-direction:column;flex:1;min-height:0}.dialog-content[data-v-a4f293ca]{flex:1;overflow-y:auto;padding:1.25rem;display:flex;flex-direction:column;gap:1rem}.form-group[data-v-a4f293ca]{display:flex;flex-direction:column;gap:.25rem}.form-label[data-v-a4f293ca]{font-size:.875rem;font-weight:500;color:var(--color-text)}.form-input[data-v-a4f293ca],.form-textarea[data-v-a4f293ca]{padding:.625rem .75rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:var(--border-radius);color:var(--color-text);font-size:.875rem;font-family:inherit;transition:border-color .15s}.form-input[data-v-a4f293ca]:focus,.form-textarea[data-v-a4f293ca]:focus{outline:none;border-color:var(--color-accent)}.form-textarea[data-v-a4f293ca]{resize:vertical;min-height:80px}.form-help[data-v-a4f293ca]{font-size:.75rem;color:var(--color-text-soft)}.form-help.indent[data-v-a4f293ca]{margin-left:1.5rem}.form-error[data-v-a4f293ca]{font-size:.75rem;color:var(--color-danger, #ef4444)}.checkbox-label[data-v-a4f293ca],.radio-label[data-v-a4f293ca]{display:flex;align-items:center;gap:.5rem;cursor:pointer}.checkbox-input[data-v-a4f293ca],.radio-input[data-v-a4f293ca]{width:1rem;height:1rem;accent-color:var(--color-accent)}.checkbox-text[data-v-a4f293ca],.radio-text[data-v-a4f293ca]{font-size:.875rem;color:var(--color-text)}.radio-group[data-v-a4f293ca]{display:flex;flex-direction:column;gap:.5rem;margin-top:.25rem}.error-message[data-v-a4f293ca]{padding:.75rem;background:#ef44441a;border:1px solid rgba(239,68,68,.3);border-radius:var(--border-radius);color:#ef4444;font-size:.875rem}.dialog-footer[data-v-a4f293ca]{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.25rem;border-top:1px solid var(--color-border);flex-shrink:0}.btn[data-v-a4f293ca]{padding:.625rem 1rem;border-radius:var(--border-radius);font-size:.875rem;font-weight:500;cursor:pointer;transition:all .15s}.btn-secondary[data-v-a4f293ca]{background:var(--color-background-soft);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[data-v-a4f293ca]:hover{background:var(--color-background-mute)}.btn-primary[data-v-a4f293ca]{background:var(--color-accent, #22d3ee);border:1px solid var(--color-accent, #22d3ee);color:var(--color-background, #0d1117)}.btn-primary[data-v-a4f293ca]:hover:not(:disabled){opacity:.9}.btn-primary[data-v-a4f293ca]:disabled{opacity:.5;cursor:not-allowed}.settings-overlay[data-v-63dc5bd1]{position:fixed;top:0;left:0;right:0;bottom:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1250}.settings-panel[data-v-63dc5bd1]{background:var(--color-background);border:1px solid var(--color-border);border-radius:var(--border-radius-lg, 12px);width:100%;max-width:600px;max-height:80vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 20px 25px -5px #0000004d}.settings-header[data-v-63dc5bd1]{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid var(--color-border);flex-shrink:0}.settings-title[data-v-63dc5bd1]{margin:0;font-size:1.25rem;font-weight:600;color:var(--color-text)}.close-button[data-v-63dc5bd1]{background:none;border:none;font-size:1.5rem;color:var(--color-text-soft);cursor:pointer;padding:.25rem;line-height:1}.close-button[data-v-63dc5bd1]:hover{color:var(--color-text)}.settings-content[data-v-63dc5bd1]{flex:1;overflow-y:auto;padding:1rem 1.25rem}.section[data-v-63dc5bd1]{margin-bottom:1.5rem}.section[data-v-63dc5bd1]:last-child{margin-bottom:0}.section-header[data-v-63dc5bd1]{display:flex;align-items:center;justify-content:space-between;margin-bottom:.75rem}.section-title[data-v-63dc5bd1]{margin:0;font-size:1rem;font-weight:600;color:var(--color-text)}.add-button[data-v-63dc5bd1]{background:var(--color-accent, #22d3ee);color:#000;border:none;padding:.5rem 1rem;border-radius:var(--border-radius);font-size:.875rem;font-weight:600;cursor:pointer;transition:all .15s}.add-button[data-v-63dc5bd1]:hover{background:var(--color-accent-hover, #06b6d4);transform:translateY(-1px)}.loading-state[data-v-63dc5bd1],.empty-state[data-v-63dc5bd1]{padding:1rem;text-align:center;color:var(--color-text-soft);font-size:.875rem;background:var(--color-background-soft);border-radius:var(--border-radius)}.response-list[data-v-63dc5bd1]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.5rem}.response-item[data-v-63dc5bd1]{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:var(--border-radius);gap:1rem}.response-info[data-v-63dc5bd1]{flex:1;min-width:0;display:flex;flex-direction:column;gap:.25rem}.response-label[data-v-63dc5bd1]{font-weight:600;color:var(--color-text);font-size:.875rem}.response-content[data-v-63dc5bd1]{font-size:.75rem;color:var(--color-text-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.auto-badge[data-v-63dc5bd1]{display:inline-flex;align-items:center;padding:.125rem .375rem;background:#f59e0b26;color:#f59e0b;border-radius:4px;font-size:.625rem;font-weight:500;text-transform:uppercase;width:fit-content}.response-actions[data-v-63dc5bd1]{display:flex;gap:.375rem;flex-shrink:0}.action-button[data-v-63dc5bd1]{background:var(--color-background-mute);border:1px solid var(--color-border);border-radius:var(--border-radius);padding:.375rem;cursor:pointer;color:var(--color-text-soft);transition:all .15s;display:flex;align-items:center;justify-content:center}.action-button[data-v-63dc5bd1]:hover{color:var(--color-text);background:var(--color-background)}.action-button[data-v-63dc5bd1]:disabled{opacity:.3;cursor:not-allowed;pointer-events:none}.action-button.action-danger[data-v-63dc5bd1]:hover{color:#ef4444;background:#ef44441a;border-color:#ef44444d}.action-icon[data-v-63dc5bd1]{width:1rem;height:1rem}.confirm-overlay[data-v-63dc5bd1]{position:fixed;top:0;left:0;right:0;bottom:0;background:#000c;display:flex;align-items:center;justify-content:center;z-index:1260}.confirm-dialog[data-v-63dc5bd1]{background:var(--color-background);border:1px solid var(--color-border);border-radius:var(--border-radius-lg, 12px);padding:1.5rem;max-width:400px;width:100%}.confirm-message[data-v-63dc5bd1]{margin:0 0 1rem;color:var(--color-text);font-size:.9375rem}.confirm-actions[data-v-63dc5bd1]{display:flex;justify-content:flex-end;gap:.75rem}.btn[data-v-63dc5bd1]{padding:.625rem 1rem;border-radius:var(--border-radius);font-size:.875rem;font-weight:500;cursor:pointer;transition:all .15s}.btn-secondary[data-v-63dc5bd1]{background:var(--color-background-soft);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[data-v-63dc5bd1]:hover{background:var(--color-background-mute)}.btn-danger[data-v-63dc5bd1]{background:#ef4444;border:1px solid #ef4444;color:#fff}.btn-danger[data-v-63dc5bd1]:hover{background:#dc2626;border-color:#dc2626}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{M as F,_ as U,l as V,a as r,G as M,c as d,b as e,t as y,j as G,m as I,v as q,i as R,q as z,H as L,U as O,x as w,n as j,J as H,F as E,r as A,d as J}from"./index-fK8FIZgP.js";import{a as k}from"./ApiClient-C3ztI9s9.js";const Ye=F("projectDefaults",{state:()=>({defaultsByProjectId:{},loading:!1,error:null}),getters:{getDefaultsForProject:l=>o=>l.defaultsByProjectId[o]||null},actions:{async fetchDefaults(l){this.loading=!0,this.error=null;try{const o=await k.getProjectSessionDefaults(l);return this.defaultsByProjectId[l]=o,o}catch(o){throw this.error=o.message,o}finally{this.loading=!1}},async updateDefaults(l,o){this.loading=!0,this.error=null;try{const s=await k.updateProjectSessionDefaults(l,o);return this.defaultsByProjectId[l]=s,s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async resetDefaults(l){this.loading=!0,this.error=null;try{return await k.resetProjectSessionDefaults(l),this.defaultsByProjectId[l]={mode:null,thinkingEnabled:null,effortLevel:null,startImmediately:null,gitMode:null,gitBranch:null,model:null,providerId:null},this.defaultsByProjectId[l]}catch(o){throw this.error=o.message,o}finally{this.loading=!1}},clearProjectDefaults(l){delete this.defaultsByProjectId[l]},clearAllDefaults(){this.defaultsByProjectId={}}}}),T=F("quickResponses",{state:()=>({projectResponses:[],globalResponses:[],loading:!1,error:null,currentProjectId:null}),getters:{allResponses:l=>[...l.projectResponses,...l.globalResponses],hasResponses:l=>l.projectResponses.length>0||l.globalResponses.length>0},actions:{async fetchForProject(l){this.loading=!0,this.error=null,this.currentProjectId=l;try{const o=await k.getQuickResponses(l);return this.projectResponses=o.project,this.globalResponses=o.global,o}catch(o){throw this.error=o.message,o}finally{this.loading=!1}},async createResponse(l,o){this.loading=!0,this.error=null;try{const s=await k.createQuickResponse(l,o);return s.projectId===null?this.globalResponses.push(s):this.projectResponses.push(s),s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async updateResponse(l,o){this.loading=!0,this.error=null;try{const s=await k.updateQuickResponse(l,o),c=this.projectResponses.findIndex(p=>p.id===l);if(c!==-1)this.projectResponses[c]=s;else{const p=this.globalResponses.findIndex(_=>_.id===l);p!==-1&&(this.globalResponses[p]=s)}return s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async deleteResponse(l){this.loading=!0,this.error=null;try{await k.deleteQuickResponse(l);const o=this.projectResponses.findIndex(s=>s.id===l);if(o!==-1)this.projectResponses.splice(o,1);else{const s=this.globalResponses.findIndex(c=>c.id===l);s!==-1&&this.globalResponses.splice(s,1)}}catch(o){throw this.error=o.message,o}finally{this.loading=!1}},async reorderResponses(l,o){this.loading=!0,this.error=null;try{const s=o.map((c,p)=>({id:c,sortOrder:p}));if(l){const c=await k.reorderQuickResponses(l,s);this.projectResponses=c.project,this.globalResponses=c.global}else{const c=await k.reorderGlobalQuickResponses(s);this.globalResponses=c}}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},clearResponses(){this.projectResponses=[],this.globalResponses=[],this.currentProjectId=null,this.error=null}}}),K={class:"dialog-header"},Y={class:"dialog-content"},W={class:"form-group"},X={key:0,class:"form-error"},Z={class:"form-group"},ee={key:0,class:"form-error"},se={class:"form-group"},te={class:"form-group"},le={class:"checkbox-label"},oe={key:0,class:"form-group"},ne={class:"radio-group"},ae={class:"radio-label"},ie={class:"radio-label"},re={key:1,class:"error-message"},ue={class:"dialog-footer"},ce=["disabled"],de={__name:"QuickResponseDialog",props:{isOpen:{type:Boolean,default:!1},projectId:{type:String,required:!0},editingResponse:{type:Object,default:null},defaultIsGlobal:{type:Boolean,default:!1}},emits:["close","saved"],setup(l,{emit:o}){const s=l,c=o,p=T(),_=j(null),g=`dialog-title-${Math.random().toString(36).slice(2)}`,n=j({label:"",content:"",category:"",autoSubmit:!1,isGlobal:!1}),f=j(!1),h=j(null),C=w(()=>!!s.editingResponse),S=w(()=>n.value.label&&n.value.label.length>50?"Label must be 50 characters or less":null),x=w(()=>n.value.content&&n.value.content.length>1e4?"Content must be 10,000 characters or less":null),P=w(()=>n.value.label.trim().length>0&&n.value.label.length<=50&&n.value.content.trim().length>0&&n.value.content.length<=1e4);V(()=>s.isOpen,b=>{b&&(s.editingResponse?n.value={label:s.editingResponse.label||"",content:s.editingResponse.content||"",category:s.editingResponse.category||"",autoSubmit:s.editingResponse.autoSubmit||!1,isGlobal:s.editingResponse.projectId===null}:n.value={label:"",content:"",category:"",autoSubmit:!1,isGlobal:s.defaultIsGlobal},h.value=null,H(()=>{var t;(t=_.value)==null||t.focus()}))}),V(()=>s.isOpen,b=>{if(b){const t=a=>{a.key==="Escape"&&$()};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)}});function $(){c("close")}async function B(){if(!(!P.value||f.value)){f.value=!0,h.value=null;try{const b={label:n.value.label.trim(),content:n.value.content,category:n.value.category.trim()||null,autoSubmit:n.value.autoSubmit};C.value?await p.updateResponse(s.editingResponse.id,b):(b.isGlobal=n.value.isGlobal,await p.createResponse(s.projectId,b)),c("saved"),c("close")}catch(b){h.value=b.message||"Failed to save quick response"}finally{f.value=!1}}}return(b,t)=>(r(),M(O,{to:"body"},[l.isOpen?(r(),d("div",{key:0,class:"dialog-overlay",onClick:G($,["self"])},[e("div",{class:"dialog",role:"dialog","aria-modal":"true","aria-labelledby":g},[e("div",K,[e("h2",{id:g,class:"dialog-title"},y(C.value?"Edit Quick Response":"Add Quick Response"),1),e("button",{class:"close-button","aria-label":"Close dialog",onClick:$}," × ")]),e("form",{class:"dialog-form",onSubmit:G(B,["prevent"])},[e("div",Y,[e("div",W,[t[7]||(t[7]=e("label",{for:"qr-label",class:"form-label"},"Label *",-1)),I(e("input",{id:"qr-label",ref_key:"labelInput",ref:_,"onUpdate:modelValue":t[0]||(t[0]=a=>n.value.label=a),type:"text",class:"form-input",placeholder:"e.g., Yes, LGTM, Run tests",maxlength:"50",required:"",onBlur:t[1]||(t[1]=a=>n.value.label=n.value.label.trim())},null,544),[[q,n.value.label]]),t[8]||(t[8]=e("span",{class:"form-help"},"Short text shown on the button (max 50 characters)",-1)),S.value?(r(),d("span",X,y(S.value),1)):R("",!0)]),e("div",Z,[t[9]||(t[9]=e("label",{for:"qr-content",class:"form-label"},"Content *",-1)),I(e("textarea",{id:"qr-content","onUpdate:modelValue":t[2]||(t[2]=a=>n.value.content=a),class:"form-textarea",placeholder:"The full message that will be inserted into the prompt",rows:"4",maxlength:"10000",required:""},null,512),[[q,n.value.content]]),t[10]||(t[10]=e("span",{class:"form-help"},"The full message that will be inserted (max 10,000 characters)",-1)),x.value?(r(),d("span",ee,y(x.value),1)):R("",!0)]),e("div",se,[t[11]||(t[11]=e("label",{for:"qr-category",class:"form-label"},"Category (optional)",-1)),I(e("input",{id:"qr-category","onUpdate:modelValue":t[3]||(t[3]=a=>n.value.category=a),type:"text",class:"form-input",placeholder:"e.g., feedback, commands",maxlength:"50"},null,512),[[q,n.value.category]]),t[12]||(t[12]=e("span",{class:"form-help"},"Optional grouping for organization",-1))]),e("div",te,[e("label",le,[I(e("input",{"onUpdate:modelValue":t[4]||(t[4]=a=>n.value.autoSubmit=a),type:"checkbox",class:"checkbox-input"},null,512),[[z,n.value.autoSubmit]]),t[13]||(t[13]=e("span",{class:"checkbox-text"},"Auto-submit",-1))]),t[14]||(t[14]=e("span",{class:"form-help indent"},"Send immediately when clicked (no confirmation)",-1))]),C.value?R("",!0):(r(),d("div",oe,[t[17]||(t[17]=e("span",{class:"form-label"},"Scope",-1)),e("div",ne,[e("label",ae,[I(e("input",{"onUpdate:modelValue":t[5]||(t[5]=a=>n.value.isGlobal=a),type:"radio",value:!1,class:"radio-input"},null,512),[[L,n.value.isGlobal]]),t[15]||(t[15]=e("span",{class:"radio-text"},"Project-specific",-1))]),e("label",ie,[I(e("input",{"onUpdate:modelValue":t[6]||(t[6]=a=>n.value.isGlobal=a),type:"radio",value:!0,class:"radio-input"},null,512),[[L,n.value.isGlobal]]),t[16]||(t[16]=e("span",{class:"radio-text"},"Global (all projects)",-1))])])])),h.value?(r(),d("div",re,y(h.value),1)):R("",!0)]),e("div",ue,[e("button",{type:"button",class:"btn btn-secondary",onClick:$}," Cancel "),e("button",{type:"submit",class:"btn btn-primary",disabled:!P.value||f.value},y(f.value?"Saving...":C.value?"Save Changes":"Save Quick Response"),9,ce)])],32)])])):R("",!0)]))}},pe=U(de,[["__scopeId","data-v-a4f293ca"]]),be={class:"settings-panel",role:"dialog","aria-modal":"true"},ve={class:"settings-header"},ge={class:"settings-content"},fe={class:"section"},he={class:"section-header"},me={key:0,class:"loading-state"},ye={key:1,class:"empty-state"},ke={key:2,class:"response-list"},Re={class:"response-info"},_e={class:"response-label"},je={class:"response-content"},Ce={key:0,class:"auto-badge"},we={class:"response-actions"},$e=["disabled","onClick"],Ie=["disabled","onClick"],Se=["onClick"],xe=["onClick"],De={class:"section"},Pe={class:"section-header"},Be={key:0,class:"loading-state"},Ge={key:1,class:"empty-state"},Qe={key:2,class:"response-list"},qe={class:"response-info"},Ee={class:"response-label"},Me={class:"response-content"},Oe={key:0,class:"auto-badge"},Ve={class:"response-actions"},Le=["disabled","onClick"],Ae=["disabled","onClick"],Fe=["onClick"],Ue=["onClick"],Te={class:"confirm-dialog"},Ne={class:"confirm-message"},ze={class:"confirm-actions"},He={__name:"QuickResponseSettings",props:{isOpen:{type:Boolean,default:!1},projectId:{type:String,required:!0}},emits:["close"],setup(l,{expose:o}){const s=T(),c=j(!1),p=j(null),_=j(!1),g=j(null),n=w(()=>s.loading),f=w(()=>s.projectResponses),h=w(()=>s.globalResponses);function C(a){return a.length<=60?a:`${a.substring(0,60)}...`}function S(a){p.value=null,_.value=a,c.value=!0}function x(a){p.value=a,_.value=a.projectId===null,c.value=!0}function P(){c.value=!1,p.value=null}function $(){}function B(a){g.value=a}async function b(){if(g.value)try{await s.deleteResponse(g.value.id),g.value=null}catch(a){console.error("Failed to delete response:",a)}}async function t(a,u,i,m){const v=i+m;if(v<0||v>=u.length)return;const D=[...u];[D[i],D[v]]=[D[v],D[i]];const N=D.map(Q=>Q.id);try{await s.reorderResponses(a,N)}catch(Q){console.error("Failed to reorder responses:",Q)}}return o({moveResponse:t}),(a,u)=>(r(),d(E,null,[(r(),M(O,{to:"body"},[l.isOpen?(r(),d("div",{key:0,class:"settings-overlay",onClick:u[3]||(u[3]=G(i=>a.$emit("close"),["self"]))},[e("div",be,[e("div",ve,[u[6]||(u[6]=e("h2",{class:"settings-title"}," Quick Responses ",-1)),e("button",{class:"close-button","aria-label":"Close settings",onClick:u[0]||(u[0]=i=>a.$emit("close"))}," × ")]),e("div",ge,[e("div",fe,[e("div",he,[u[7]||(u[7]=e("h3",{class:"section-title"}," Project Responses ",-1)),e("button",{class:"add-button",onClick:u[1]||(u[1]=i=>S(!1))}," + Add ")]),n.value?(r(),d("div",me," Loading... ")):f.value.length===0?(r(),d("div",ye," No project-specific quick responses yet. ")):(r(),d("ul",ke,[(r(!0),d(E,null,A(f.value,(i,m)=>(r(),d("li",{key:i.id,class:"response-item"},[e("div",Re,[e("span",_e,y(i.label),1),e("span",je,y(C(i.content)),1),i.autoSubmit?(r(),d("span",Ce,"Auto-submit")):R("",!0)]),e("div",we,[e("button",{class:"action-button",disabled:m===0,title:"Move up",onClick:v=>t(l.projectId,f.value,m,-1)}," ↑ ",8,$e),e("button",{class:"action-button",disabled:m===f.value.length-1,title:"Move down",onClick:v=>t(l.projectId,f.value,m,1)}," ↓ ",8,Ie),e("button",{class:"action-button",title:"Edit","aria-label":"Edit",onClick:v=>x(i)}," ✏️ ",8,Se),e("button",{class:"action-button action-danger",title:"Delete",onClick:v=>B(i)}," 🗑️ ",8,xe)])]))),128))]))]),e("div",De,[e("div",Pe,[u[8]||(u[8]=e("h3",{class:"section-title"}," Global Responses ",-1)),e("button",{class:"add-button",onClick:u[2]||(u[2]=i=>S(!0))}," + Add ")]),n.value?(r(),d("div",Be," Loading... ")):h.value.length===0?(r(),d("div",Ge," No global quick responses yet. Global responses appear in all projects. ")):(r(),d("ul",Qe,[(r(!0),d(E,null,A(h.value,(i,m)=>(r(),d("li",{key:i.id,class:"response-item"},[e("div",qe,[e("span",Ee,y(i.label),1),e("span",Me,y(C(i.content)),1),i.autoSubmit?(r(),d("span",Oe,"Auto-submit")):R("",!0)]),e("div",Ve,[e("button",{class:"action-button",disabled:m===0,title:"Move up",onClick:v=>t(null,h.value,m,-1)}," ↑ ",8,Le),e("button",{class:"action-button",disabled:m===h.value.length-1,title:"Move down",onClick:v=>t(null,h.value,m,1)}," ↓ ",8,Ae),e("button",{class:"action-button",title:"Edit","aria-label":"Edit",onClick:v=>x(i)}," ✏️ ",8,Fe),e("button",{class:"action-button action-danger",title:"Delete",onClick:v=>B(i)}," 🗑️ ",8,Ue)])]))),128))]))])])])])):R("",!0)])),J(pe,{"is-open":c.value,"project-id":l.projectId,"editing-response":p.value,"default-is-global":_.value,onClose:P,onSaved:$},null,8,["is-open","project-id","editing-response","default-is-global"]),(r(),M(O,{to:"body"},[g.value?(r(),d("div",{key:0,class:"confirm-overlay",onClick:u[5]||(u[5]=G(i=>g.value=null,["self"]))},[e("div",Te,[e("p",Ne,' Are you sure you want to delete "'+y(g.value.label)+'"? ',1),e("div",ze,[e("button",{class:"btn btn-secondary",onClick:u[4]||(u[4]=i=>g.value=null)}," Cancel "),e("button",{class:"btn btn-danger",onClick:b}," Delete ")])])])):R("",!0)]))],64))}},We=U(He,[["__scopeId","data-v-63dc5bd1"]]);export{We as Q,T as a,Ye as u};
|