circuschief 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -1
- package/packages/server/src/agents/AgentGateway.js +36 -3
- package/packages/server/src/agents/BaseAgent.js +15 -1
- package/packages/server/src/agents/LoggingAgentWrapper.js +4 -0
- package/packages/server/src/agents/adapters/ClaudeCodeAdapter.js +9 -6
- package/packages/server/src/agents/adapters/CodexAdapter.js +262 -14
- package/packages/server/src/agents/adapters/codexCliRunner.js +185 -0
- package/packages/server/src/agents/adapters/codexEventMapper.js +235 -0
- package/packages/server/src/agents/types.js +1 -0
- package/packages/server/src/agents/vcr/VCRAgentAdapter.js +8 -0
- package/packages/server/src/api/agents.js +27 -0
- package/packages/server/src/api/canvas.js +20 -0
- package/packages/server/src/api/index.js +2 -0
- package/packages/server/src/api/projects.js +7 -0
- package/packages/server/src/api/providers.js +1 -0
- package/packages/server/src/api/sessions-messages.js +6 -0
- package/packages/server/src/db/ProviderRepository.js +62 -6
- package/packages/server/src/db/SessionRepository.js +67 -11
- package/packages/server/src/db/migrations/index.js +2 -0
- package/packages/server/src/db/migrations/miscMigrations.js +53 -3
- package/packages/server/src/db/session-helpers.js +5 -0
- package/packages/server/src/schema.sql +1 -0
- package/packages/server/src/services/codexSpawnHelper.js +37 -0
- package/packages/server/src/services/conversationContext.js +27 -0
- package/packages/server/src/services/draftSessionService.js +13 -2
- package/packages/server/src/services/kanbanTriggers.js +3 -0
- package/packages/server/src/services/providerTestService.js +115 -15
- package/packages/server/src/services/sessionAgentGuard.js +38 -0
- package/packages/server/src/services/sessionExecution.js +124 -32
- package/packages/server/src/services/sessionManager.js +45 -8
- package/packages/server/src/services/sessionPrompts.js +25 -0
- package/packages/server/src/services/sessionProvider.js +162 -41
- package/packages/server/src/services/streamEventHandler.js +3 -0
- package/packages/server/src/services/templateTriggerService.js +2 -0
- package/packages/shared/src/contracts/providers.js +24 -7
- package/packages/shared/src/contracts/sessions.js +1 -1
- package/packages/shared/src/index.js +1 -0
- package/packages/shared/src/types.js +28 -0
- package/packages/web/dist/assets/{ActiveSessionsView-BafIafEu.js → ActiveSessionsView-UCbQrF1b.js} +1 -1
- package/packages/web/dist/assets/{AgentLogsView-DCF2WvP2.js → AgentLogsView-Cdw4nmvd.js} +1 -1
- package/packages/web/dist/assets/ApiClient-CWbXWDUY.js +1 -0
- package/packages/web/dist/assets/{ArchiveConfirmModal-fgoEQhfq.js → ArchiveConfirmModal-J48eh3zw.js} +1 -1
- package/packages/web/dist/assets/{CommandButtonDetailView-DAg07cDQ.js → CommandButtonDetailView-DnFhJY5A.js} +1 -1
- package/packages/web/dist/assets/EffortLevelSelector-bXbPo4Zw.js +1 -0
- package/packages/web/dist/assets/{GeneralSettingsView-Cn9VI2du.js → GeneralSettingsView-CQkmdczf.js} +1 -1
- package/packages/web/dist/assets/{InputWithButton-BvboBGbz.js → InputWithButton-XyM3k6lN.js} +1 -1
- package/packages/web/dist/assets/{InterpolationHelp-0GoSBPgf.js → InterpolationHelp-PfYR3KJo.js} +1 -1
- package/packages/web/dist/assets/MarkdownEditor-P8F5kO-o.js +2 -0
- package/packages/web/dist/assets/{ModelSelector-DPPD-92R.css → ModelSelector-BZOT1Jc6.css} +1 -1
- package/packages/web/dist/assets/ModelSelector-CowKfGMP.js +1 -0
- package/packages/web/dist/assets/{NewSessionView-C77YVqgY.js → NewSessionView-DkjFLvHU.js} +1 -1
- package/packages/web/dist/assets/{ProjectEditView-BBHOsgBV.js → ProjectEditView-embVT7NC.js} +1 -1
- package/packages/web/dist/assets/{ProjectListView-CLwtuJ0J.js → ProjectListView-CuYMmd3O.js} +1 -1
- package/packages/web/dist/assets/{ProjectNewView-CzDtVibO.js → ProjectNewView-CNaA4Maf.js} +1 -1
- package/packages/web/dist/assets/ProvidersView-C7rydtOd.js +1 -0
- package/packages/web/dist/assets/ProvidersView-DE82G_5W.css +1 -0
- package/packages/web/dist/assets/{QuickResponseSettings-BBHMapcA.js → QuickResponseSettings-BTQEKhwJ.js} +1 -1
- package/packages/web/dist/assets/{QuickResponsesPanel-CTXYjMF-.js → QuickResponsesPanel-BqMYSHb0.js} +1 -1
- package/packages/web/dist/assets/ResizableTextarea-DsU3TVwF.css +1 -0
- package/packages/web/dist/assets/{ResizableTextarea-Cw6aL4rp.js → ResizableTextarea-wYF3K2RO.js} +1 -1
- package/packages/web/dist/assets/SessionCard-BMGC2HqI.css +1 -0
- package/packages/web/dist/assets/SessionCard-bLaQEWWX.js +1 -0
- package/packages/web/dist/assets/{SessionDetailView-BL83oPiI.css → SessionDetailView-Cv-xMzXp.css} +1 -1
- package/packages/web/dist/assets/{SessionDetailView-CrZvMb3j.js → SessionDetailView-CvQOUsW2.js} +27 -27
- package/packages/web/dist/assets/SessionFormOptions-3pzbgI2Q.js +1 -0
- package/packages/web/dist/assets/SessionFormOptions-DhhIkjIS.css +1 -0
- package/packages/web/dist/assets/SessionListView-Dranfb72.js +1 -0
- package/packages/web/dist/assets/{SessionListView-DVhoZHN9.css → SessionListView-fHlQyecX.css} +1 -1
- package/packages/web/dist/assets/{SessionLogStream-DIndOyFR.js → SessionLogStream-DTnDAF95.js} +1 -1
- package/packages/web/dist/assets/{SettingsView-CmJ5JPd5.js → SettingsView-DNLUSsHV.js} +1 -1
- package/packages/web/dist/assets/SlashCommandWizard-CRGFaO8t.js +1 -0
- package/packages/web/dist/assets/SlashCommandWizard-Dn7sNaBd.css +1 -0
- package/packages/web/dist/assets/{SummarySettingsView-DQM1n3bc.js → SummarySettingsView-C7G_suHp.js} +1 -1
- package/packages/web/dist/assets/{TemplateDetailView-B8clSBPk.js → TemplateDetailView-B78_DLMR.js} +1 -1
- package/packages/web/dist/assets/{commandButtons-D74TkPNU.js → commandButtons-Bbjf3fCt.js} +1 -1
- package/packages/web/dist/assets/{index-CefzeYRE.js → index--V7c-VZf.js} +1 -1
- package/packages/web/dist/assets/{index-BELtFs3n.js → index-8Q04yd7H.js} +1 -1
- package/packages/web/dist/assets/{index-rjbX81sm.js → index-B47XRBDH.js} +1 -1
- package/packages/web/dist/assets/index-BQL_L4gL.js +82 -0
- package/packages/web/dist/assets/{index-BsDR4w2c.js → index-BXbgZrhS.js} +1 -1
- package/packages/web/dist/assets/{index-DQMHi05L.js → index-Bs7Qf5D6.js} +1 -1
- package/packages/web/dist/assets/{index-Dz7jFUYU.js → index-CGhDVPen.js} +1 -1
- package/packages/web/dist/assets/{index-f315nDFm.js → index-CKcRO1A6.js} +1 -1
- package/packages/web/dist/assets/{index-Gre8tUfC.js → index-CTq-SLIW.js} +1 -1
- package/packages/web/dist/assets/{index-_Lv79l46.js → index-CYyos3iC.js} +1 -1
- package/packages/web/dist/assets/{index-DMZZCi2u.js → index-Cf6vdW-B.js} +3 -3
- package/packages/web/dist/assets/{index-DIvveuSK.js → index-CsCREAxF.js} +1 -1
- package/packages/web/dist/assets/{index-CVozYqQ-.js → index-DJTTk_8T.js} +1 -1
- package/packages/web/dist/assets/{index-DPt6qBRK.js → index-DPqUJ5JK.js} +1 -1
- package/packages/web/dist/assets/{index-B5ocUoPf.js → index-EwAe1dKg.js} +1 -1
- package/packages/web/dist/assets/{index-CrLh8vw5.js → index-JBA8axyA.js} +1 -1
- package/packages/web/dist/assets/{index-DrlwE0Zo.js → index-JkVHFtK5.js} +1 -1
- package/packages/web/dist/assets/{index-DuXChAe-.js → index-gMPUwT55.js} +1 -1
- package/packages/web/dist/assets/{index-DYWZ8lD-.js → index-wadc_0zT.js} +1 -1
- package/packages/web/dist/assets/{projects-D_C9dE9s.js → projects-CPt3AB7U.js} +1 -1
- package/packages/web/dist/assets/providers-ChfeMvUq.js +1 -0
- package/packages/web/dist/assets/sessions-CwPsJOb1.js +1 -0
- package/packages/web/dist/assets/{settings-6Rw9xt-G.js → settings-BOj6wq6t.js} +1 -1
- package/packages/web/dist/index.html +1 -1
- package/packages/web/dist/assets/ApiClient-CcqJ-GAv.js +0 -1
- package/packages/web/dist/assets/EffortLevelSelector-xE3gidpq.js +0 -1
- package/packages/web/dist/assets/MarkdownEditor-HCKnwRye.js +0 -2
- package/packages/web/dist/assets/ModelSelector-B0RdlCHT.js +0 -1
- package/packages/web/dist/assets/ProvidersView-Eg93KbyC.js +0 -1
- package/packages/web/dist/assets/ProvidersView-uD8SKWpA.css +0 -1
- package/packages/web/dist/assets/ResizableTextarea-B5nAA0RV.css +0 -1
- package/packages/web/dist/assets/SessionCard-CCapYVjy.js +0 -1
- package/packages/web/dist/assets/SessionCard-CcqIjL8q.css +0 -1
- package/packages/web/dist/assets/SessionFormOptions-BuLlDF-7.css +0 -1
- package/packages/web/dist/assets/SessionFormOptions-Em7sQCGb.js +0 -1
- package/packages/web/dist/assets/SessionListView-3zdDtqhw.js +0 -1
- package/packages/web/dist/assets/SlashCommandWizard-BB30cSvo.css +0 -1
- package/packages/web/dist/assets/SlashCommandWizard-C_cSgF-P.js +0 -1
- package/packages/web/dist/assets/index-BGAW2Nqa.js +0 -82
- package/packages/web/dist/assets/providers-BdvbPVdE.js +0 -1
- package/packages/web/dist/assets/sessions-Bs5FA6JZ.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as ae,C as X,D as oe,O as le}from"./EffortLevelSelector-bXbPo4Zw.js";import{_ as T,k as Z,n as D,l as K,a as o,c as i,b as l,F as B,r as N,t as m,x as _,$ as ie,L as re,o as ee,I as ce,m as z,v as A,J as G,i as k,f as q,j as W,p as de,G as E,d as ue,w as me,u as R,T as fe,V as pe}from"./index-BQL_L4gL.js";import{u as te}from"./providers-ChfeMvUq.js";import{a as F}from"./ApiClient-CWbXWDUY.js";const he={class:"mode-selector"},ge=["value","disabled"],ve=["value"],ye={__name:"ModeSelector",props:{sessionId:{type:String,default:null},modelValue:{type:String,default:null},disabled:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,c=t,a=ae(),u=Z(),d=D(!1),h=[{value:"plan",label:"Plan",description:"Agent plans before implementing"},{value:"standard",label:"Standard",description:"Balanced approach"},{value:"yolo",label:"YOLO",description:"Auto-approve mode"}],b=_(()=>{var p;return n.sessionId?(p=a.currentSession)==null?void 0:p.mode:n.modelValue}),C=D(b.value),g=ie(n,"modelValue");K([b,g],([p])=>{C.value=p},{flush:"sync"});async function r(p){if(!d.value&&C.value!==p)if(C.value=p,n.sessionId){d.value=!0;try{await a.updateSessionMode(n.sessionId,p)}catch(S){C.value=b.value,u.error(S.message)}finally{d.value=!1}}else c("update:modelValue",p)}return(p,S)=>(o(),i("div",he,[l("select",{id:"mode-select",value:C.value,disabled:e.disabled||d.value,class:"mode-select",onChange:S[0]||(S[0]=w=>r(w.target.value))},[(o(),i(B,null,N(h,w=>l("option",{key:w.value,value:w.value},m(w.label),9,ve)),64))],40,ge)]))}},Gt=T(ye,[["__scopeId","data-v-224ea1e6"]]),se=Object.freeze({streaming:!1,thinking:!1,reasoningEffort:!1,toolUse:!1,resume:!1}),I={byAgentType:new Map,fetchPromise:null,fetched:!1};async function J(){return I.fetched?I.byAgentType:(I.fetchPromise||(I.fetchPromise=(async()=>{try{const e=await F.getAgents();for(const t of e||[])t&&t.agentType&&I.byAgentType.set(t.agentType,t.capabilities||se)}catch{}finally{I.fetched=!0,I.fetchPromise=null}return I.byAgentType})()),I.fetchPromise)}function _e(e){return I.byAgentType.get(e)||{...se}}function ne(e){return(e==null?void 0:e.kind)==="openai"?"codex":"claude-code"}function Q(e,t){return(t==null?void 0:t.kind)==="openai"?le.find(n=>n.id===e)||null:(!t||ne(t)==="claude-code")&&X.find(n=>n.id===e)||null}function H(e){try{const n=te().allModels.filter(c=>c.modelId===e);return n.length<=1?n[0]||null:n.sort((c,a)=>{const u=O(c.providerId),d=O(a.providerId);return(u==null?void 0:u.isBuiltIn)!==(d==null?void 0:d.isBuiltIn)?u!=null&&u.isBuiltIn?1:-1:((u==null?void 0:u.name)||"").localeCompare((d==null?void 0:d.name)||"")})[0]||null}catch{return null}}function O(e){try{return te().getById(e)||null}catch{return null}}function Y(e){if(!e)return"Unknown";let t=e.replace(/^(.*\/)?models\//,"");return t=t.replace(/^accounts\/[^/]+\/models\//,""),t=t.replace(/-\d{8}$/,""),t=t.replace(/[-_]/g," "),t=t.split(" ").map(n=>n.charAt(0).toUpperCase()+n.slice(1).toLowerCase()).join(" "),t||"Unknown"}function Rt(){function e(c){if(!c)return"Default";const a=H(c),u=a?O(a.providerId):null,d=Q(c,u);return d?d.name:a!=null&&a.displayName?a.displayName:Y(c)}function t(c){if(!c){const h=X.find(b=>b.id===oe);return h?h.description:""}const a=H(c),u=a?O(a.providerId):null,d=Q(c,u);return d?d.description:a!=null&&a.description?a.description:c}function n(c){J();const a=H(c),u=a?O(a.providerId):null,d=u?ne(u):"claude-code";return{name:e(c),description:t(c),providerId:(a==null?void 0:a.providerId)||null,providerName:(a==null?void 0:a.providerName)||(u==null?void 0:u.name)||null,agentType:d,capabilities:_e(d)}}return{getModelDisplayName:e,getModelDescription:t,getModelInfo:n,formatModelId:Y,fetchAgentCapabilities:J}}const ke={__name:"SlashCommandButton",emits:["open"],setup(e,{emit:t}){const n=t;return(c,a)=>(o(),i("button",{type:"button",class:"slash-command-btn",title:"Slash Commands","data-testid":"slash-command-button",onClick:a[0]||(a[0]=u=>n("open"))},[...a[1]||(a[1]=[l("span",{class:"slash-icon"},"/",-1),l("span",{class:"slash-text"},"Commands",-1)])]))}},Jt=T(ke,[["__scopeId","data-v-63f59216"]]),Ce=re("slashCommands",{state:()=>({commands:[],loading:!1,error:null,lastFetchedDirectory:null,executing:!1}),getters:{builtinCommands:e=>e.commands.filter(t=>t.source==="builtin"),projectCommands:e=>e.commands.filter(t=>t.source==="project"),userCommands:e=>e.commands.filter(t=>t.source==="user"),pluginCommands:e=>e.commands.filter(t=>t.source==="plugin"),customCommands:e=>e.commands.filter(t=>t.source!=="builtin"),projectSkills:e=>e.commands.filter(t=>t.source==="project-skill"),userSkills:e=>e.commands.filter(t=>t.source==="user-skill"),pluginSkills:e=>e.commands.filter(t=>t.source==="plugin-skill"),allSkills:e=>e.commands.filter(t=>t.isSkill===!0),hasSkills:e=>e.commands.some(t=>t.isSkill===!0),allProjectItems:e=>e.commands.filter(t=>t.source==="project"||t.source==="project-skill"),allUserItems:e=>e.commands.filter(t=>t.source==="user"||t.source==="user-skill"),hasCommands:e=>e.commands.length>0,hasCustomCommands:e=>e.commands.some(t=>t.source==="project"||t.source==="user")},actions:{async fetchCommandsFromSession(e){this.loading=!0,this.error=null;try{const t=await F.getSession(e),n=t.slashCommands?JSON.parse(t.slashCommands):[];return this.commands=n,n}catch(t){throw this.error=t.message,t}finally{this.loading=!1}},async fetchCommands(e,t=!1){if(!t&&this.lastFetchedDirectory===e&&this.commands.length>0)return this.commands;this.loading=!0,this.error=null;try{const n=await F.getSlashCommands(e);return this.commands=n,this.lastFetchedDirectory=e,n}catch(n){throw this.error=n.message,n}finally{this.loading=!1}},async executeCommand(e,t,n={}){this.executing=!0,this.error=null;try{return await F.executeSlashCommand(e,t,n)}catch(c){throw this.error=c.message,c}finally{this.executing=!1}},getCommandByName(e){return this.commands.find(t=>t.name===e)||null},searchCommands(e){if(!e||!e.trim())return this.commands;const t=e.toLowerCase();return this.commands.filter(n=>n.name.toLowerCase().includes(t)||n.description&&n.description.toLowerCase().includes(t))},clearCommands(){this.commands=[],this.lastFetchedDirectory=null,this.error=null}}}),be={class:"command-grid"},Se={class:"search-box"},$e={key:0,class:"loading-state"},we={key:1,class:"error-state"},xe={key:2,class:"empty-state"},Ie={key:0},Be={key:1},Ne={key:3,class:"command-sections"},De={key:0,class:"command-section"},je={class:"command-cards"},Pe=["data-testid","onClick"],Ue={class:"command-name"},Ve={class:"command-description"},Le={key:1,class:"command-section"},Me={class:"command-cards"},ze=["data-testid","onClick"],Oe={class:"command-name"},Te={class:"command-description"},Ae={key:0,class:"command-args-badge"},Fe={key:2,class:"command-section"},qe={class:"command-cards"},Ee=["data-testid","onClick"],He={class:"command-name"},We={class:"command-description"},Ke={key:0,class:"command-args-badge"},Ge={key:3,class:"command-section"},Re={class:"command-cards"},Je=["data-testid","onClick"],Qe={class:"command-name"},Ye={class:"command-description"},Xe={key:0,class:"command-args-badge"},Ze={key:4,class:"command-section"},et={class:"command-cards"},tt=["data-testid","onClick"],st={class:"command-name"},nt={class:"command-description"},at={key:0,class:"command-args-badge"},ot={key:5,class:"command-section"},lt={class:"command-cards"},it=["data-testid","onClick"],rt={class:"command-name"},ct={class:"command-description"},dt={key:0,class:"command-args-badge"},ut={key:6,class:"command-section"},mt={class:"command-cards"},ft=["data-testid","onClick"],pt={class:"command-name"},ht={class:"command-description"},gt={key:0,class:"command-args-badge"},vt={__name:"CommandGrid",props:{commands:{type:Array,required:!0},loading:{type:Boolean,default:!1},error:{type:String,default:null},hideBuiltin:{type:Boolean,default:!1}},emits:["select","close"],setup(e,{emit:t}){const n=e,c=t,a=D(""),u=D(null),d=_(()=>n.commands.filter(v=>v.source==="builtin")),h=_(()=>n.commands.filter(v=>v.source==="project")),b=_(()=>n.commands.filter(v=>v.source==="user")),C=_(()=>n.commands.filter(v=>v.source==="plugin")),g=_(()=>n.commands.filter(v=>v.source==="project-skill")),r=_(()=>n.commands.filter(v=>v.source==="user-skill")),p=_(()=>n.commands.filter(v=>v.source==="plugin-skill"));function S(v){if(!a.value.trim())return v;const f=a.value.toLowerCase();return v.filter(s=>s.name.toLowerCase().includes(f)||s.description&&s.description.toLowerCase().includes(f))}const w=_(()=>S(d.value)),M=_(()=>S(h.value)),y=_(()=>S(b.value)),$=_(()=>S(C.value)),x=_(()=>S(g.value)),j=_(()=>S(r.value)),P=_(()=>S(p.value)),U=_(()=>[...w.value,...M.value,...y.value,...$.value,...x.value,...j.value,...P.value]);function V(v){c("select",v)}return ee(()=>{ce(()=>{var v;(v=u.value)==null||v.focus()})}),(v,f)=>(o(),i("div",be,[l("div",Se,[z(l("input",{ref_key:"searchInput",ref:u,"onUpdate:modelValue":f[0]||(f[0]=s=>a.value=s),type:"text",placeholder:"Search commands...",class:"search-input","data-testid":"command-search",onKeydown:f[1]||(f[1]=G(s=>c("close"),["escape"]))},null,544),[[A,a.value]])]),e.loading?(o(),i("div",$e,[...f[2]||(f[2]=[l("span",{class:"loading-spinner"},null,-1),l("span",null,"Loading commands...",-1)])])):e.error?(o(),i("div",we,[f[3]||(f[3]=l("span",{class:"error-icon"},"⚠️",-1)),l("span",null,m(e.error),1)])):U.value.length===0?(o(),i("div",xe,[a.value?(o(),i("span",Ie,'No commands match "'+m(a.value)+'"',1)):(o(),i("span",Be,"No slash commands available"))])):(o(),i("div",Ne,[w.value.length>0&&!e.hideBuiltin?(o(),i("div",De,[f[4]||(f[4]=l("h3",{class:"section-title"}," Built-in Commands ",-1)),l("div",je,[(o(!0),i(B,null,N(w.value,s=>(o(),i("button",{key:s.name,type:"button",class:"command-card","data-testid":`command-${s.name}`,onClick:L=>V(s)},[l("span",Ue,"/"+m(s.name),1),l("span",Ve,m(s.description||"No description"),1)],8,Pe))),128))])])):k("",!0),M.value.length>0?(o(),i("div",Le,[f[5]||(f[5]=l("h3",{class:"section-title"}," Project Commands ",-1)),l("div",Me,[(o(!0),i(B,null,N(M.value,s=>(o(),i("button",{key:s.name,type:"button",class:"command-card","data-testid":`command-${s.name}`,onClick:L=>V(s)},[l("span",Oe,"/"+m(s.name),1),l("span",Te,m(s.description||"No description"),1),s.arguments.length>0?(o(),i("span",Ae,m(s.arguments.length)+" arg"+m(s.arguments.length>1?"s":""),1)):k("",!0)],8,ze))),128))])])):k("",!0),y.value.length>0?(o(),i("div",Fe,[f[6]||(f[6]=l("h3",{class:"section-title"}," User Commands ",-1)),l("div",qe,[(o(!0),i(B,null,N(y.value,s=>(o(),i("button",{key:s.name,type:"button",class:"command-card","data-testid":`command-${s.name}`,onClick:L=>V(s)},[l("span",He,"/"+m(s.name),1),l("span",We,m(s.description||"No description"),1),s.arguments.length>0?(o(),i("span",Ke,m(s.arguments.length)+" arg"+m(s.arguments.length>1?"s":""),1)):k("",!0)],8,Ee))),128))])])):k("",!0),$.value.length>0?(o(),i("div",Ge,[f[7]||(f[7]=l("h3",{class:"section-title"}," Plugin Commands ",-1)),l("div",Re,[(o(!0),i(B,null,N($.value,s=>(o(),i("button",{key:s.name,type:"button",class:"command-card","data-testid":`command-${s.name}`,onClick:L=>V(s)},[l("span",Qe,"/"+m(s.name),1),l("span",Ye,m(s.description||"No description"),1),s.arguments.length>0?(o(),i("span",Xe,m(s.arguments.length)+" arg"+m(s.arguments.length>1?"s":""),1)):k("",!0)],8,Je))),128))])])):k("",!0),x.value.length>0?(o(),i("div",Ze,[f[8]||(f[8]=l("h3",{class:"section-title"}," Project Skills ",-1)),l("div",et,[(o(!0),i(B,null,N(x.value,s=>(o(),i("button",{key:s.name,type:"button",class:"command-card","data-testid":`skill-${s.name}`,onClick:L=>V(s)},[l("span",st,"/"+m(s.name),1),l("span",nt,m(s.description||"No description"),1),s.argumentHint?(o(),i("span",at,m(s.argumentHint),1)):k("",!0)],8,tt))),128))])])):k("",!0),j.value.length>0?(o(),i("div",ot,[f[9]||(f[9]=l("h3",{class:"section-title"}," User Skills ",-1)),l("div",lt,[(o(!0),i(B,null,N(j.value,s=>(o(),i("button",{key:s.name,type:"button",class:"command-card","data-testid":`skill-${s.name}`,onClick:L=>V(s)},[l("span",rt,"/"+m(s.name),1),l("span",ct,m(s.description||"No description"),1),s.argumentHint?(o(),i("span",dt,m(s.argumentHint),1)):k("",!0)],8,it))),128))])])):k("",!0),P.value.length>0?(o(),i("div",ut,[f[10]||(f[10]=l("h3",{class:"section-title"}," Plugin Skills ",-1)),l("div",mt,[(o(!0),i(B,null,N(P.value,s=>(o(),i("button",{key:s.name,type:"button",class:"command-card","data-testid":`skill-${s.name}`,onClick:L=>V(s)},[l("span",pt,"/"+m(s.name),1),l("span",ht,m(s.description||"No description"),1),s.argumentHint?(o(),i("span",gt,m(s.argumentHint),1)):k("",!0)],8,ft))),128))])])):k("",!0)]))]))}},yt=T(vt,[["__scopeId","data-v-8ec2a6ee"]]),_t={class:"arguments-form"},kt={class:"form-header"},Ct={class:"command-title"},bt={key:0,class:"command-description"},St={key:0,class:"form-field"},$t={for:"skill-args",class:"field-label"},wt={key:0,class:"hint"},xt=["placeholder","onKeydown"],It=["for"],Bt={key:0,class:"required-indicator"},Nt=["id","onUpdate:modelValue","required","data-testid"],Dt=["value"],jt=["id","onUpdate:modelValue","required","placeholder","data-testid"],Pt=["id","onUpdate:modelValue","required","placeholder","data-testid"],Ut={class:"form-actions"},Vt=["disabled"],Lt={key:0,class:"loading-spinner"},Mt={__name:"ArgumentsForm",props:{command:{type:Object,required:!0},executing:{type:Boolean,default:!1},executeLabel:{type:String,default:"Execute Command"}},emits:["back","submit"],setup(e,{emit:t}){const n=e,c=t,a=D({}),u=D("");function d(){const C={};for(const g of n.command.arguments||[])C[g.name]=g.default!==void 0?g.default:"";a.value=C}ee(()=>{d()}),K(()=>n.command,()=>{d()});const h=_(()=>{if(n.command.isSkill)return!0;for(const C of n.command.arguments||[])if(C.required){const g=a.value[C.name];if(g==null||g==="")return!1}return!0});function b(){if(!(!h.value||n.executing)){if(n.command.isSkill){c("submit",{_raw:u.value});return}c("submit",a.value)}}return(C,g)=>(o(),i("div",_t,[l("div",kt,[l("h3",Ct," /"+m(e.command.name),1),e.command.description?(o(),i("p",bt,m(e.command.description),1)):k("",!0)]),l("form",{class:"form-fields",onSubmit:W(b,["prevent"])},[e.command.isSkill?(o(),i("div",St,[l("label",$t,[g[2]||(g[2]=q(" Arguments ",-1)),e.command.argumentHint?(o(),i("span",wt,m(e.command.argumentHint),1)):k("",!0)]),z(l("input",{id:"skill-args","onUpdate:modelValue":g[0]||(g[0]=r=>u.value=r),type:"text",placeholder:e.command.argumentHint||"Enter arguments...",class:"field-input","data-testid":"skill-args-input",onKeydown:G(W(b,["prevent"]),["enter"])},null,40,xt),[[A,u.value]])])):(o(!0),i(B,{key:1},N(e.command.arguments,r=>(o(),i("div",{key:r.name,class:"form-field"},[l("label",{for:`arg-${r.name}`,class:"field-label"},[q(m(r.label)+" ",1),r.required?(o(),i("span",Bt,"*")):k("",!0)],8,It),r.type==="select"?z((o(),i("select",{key:0,id:`arg-${r.name}`,"onUpdate:modelValue":p=>a.value[r.name]=p,required:r.required,class:"field-select","data-testid":`arg-${r.name}`},[g[3]||(g[3]=l("option",{value:"",disabled:""}," Select an option... ",-1)),(o(!0),i(B,null,N(r.options||[],p=>(o(),i("option",{key:p.value,value:p.value},m(p.label),9,Dt))),128))],8,Nt)),[[de,a.value[r.name]]]):r.type==="multiline"?z((o(),i("textarea",{key:1,id:`arg-${r.name}`,"onUpdate:modelValue":p=>a.value[r.name]=p,required:r.required,placeholder:r.placeholder||"",class:"field-textarea",rows:"4","data-testid":`arg-${r.name}`},null,8,jt)),[[A,a.value[r.name]]]):z((o(),i("input",{key:2,id:`arg-${r.name}`,"onUpdate:modelValue":p=>a.value[r.name]=p,type:"text",required:r.required,placeholder:r.placeholder||"",class:"field-input","data-testid":`arg-${r.name}`},null,8,Pt)),[[A,a.value[r.name]]])]))),128)),l("div",Ut,[l("button",{type:"button",class:"btn btn-secondary",onClick:g[1]||(g[1]=r=>c("back"))}," Back "),l("button",{type:"submit",class:"btn btn-primary",disabled:!h.value||e.executing,"data-testid":"execute-command-btn"},[e.executing?(o(),i("span",Lt)):k("",!0),q(" "+m(e.executeLabel),1)],8,Vt)])],32)]))}},zt=T(Mt,[["__scopeId","data-v-aaa3cc39"]]),Ot={class:"wizard-modal",role:"dialog","aria-labelledby":"wizard-title"},Tt={class:"wizard-header"},At={id:"wizard-title",class:"wizard-title"},Ft={class:"wizard-content"},qt={__name:"SlashCommandWizard",props:{isOpen:{type:Boolean,required:!0},sessionId:{type:String,default:null},workingDirectory:{type:String,default:null},hideBuiltin:{type:Boolean,default:!1},mode:{type:String,default:"execute",validator:e=>["execute","insert"].includes(e)}},emits:["update:isOpen","executed","insert"],setup(e,{emit:t}){const n=e,c=t,a=Ce(),u=Z(),d=D(1),h=D(null),b=D(!1),C=_(()=>n.hideBuiltin?a.customCommands:a.commands),g=_(()=>n.mode==="insert"?"Insert Command":"Execute Command");K(()=>n.isOpen,async y=>{if(y){d.value=1,h.value=null,console.log("[SlashCommandWizard] Opening wizard, workingDirectory:",n.workingDirectory);try{n.workingDirectory?(await a.fetchCommands(n.workingDirectory),console.log("[SlashCommandWizard] Fetched commands:",a.commands.length,"commands")):console.warn("[SlashCommandWizard] No workingDirectory provided, skipping command fetch")}catch($){console.error("[SlashCommandWizard] Failed to fetch commands:",$)}}});function r(){c("update:isOpen",!1),d.value=1,h.value=null}function p(y){if(h.value=y,y.isSkill){d.value=2;return}!y.arguments||y.arguments.length===0?w({}):d.value=2}function S(){d.value=1,h.value=null}async function w(y){if(h.value){if(n.mode==="insert"){const $=M(h.value,y);c("insert",{command:h.value,args:y,text:$}),r();return}if(!n.sessionId){u.error("No session available to execute command");return}b.value=!0;try{await a.executeCommand(n.sessionId,h.value.name,y),c("executed",{command:h.value,args:y}),u.success(`Command /${h.value.name} executed`),r()}catch($){u.error(`Failed to execute command: ${$.message}`)}finally{b.value=!1}}}function M(y,$){let x=`/${y.name}`;if(y.isSkill){const P=$._raw||"";return P&&(x+=` ${P}`),x}const j=[];for(const P of y.arguments||[]){const U=$[P.name];U!==void 0&&U!==""&&(typeof U=="string"&&U.includes(" ")?j.push(`"${U}"`):j.push(String(U)))}return j.length>0&&(x+=` ${j.join(" ")}`),x}return(y,$)=>(o(),E(pe,{to:"body"},[ue(fe,{name:"modal"},{default:me(()=>{var x;return[e.isOpen?(o(),i("div",{key:0,class:"wizard-overlay","data-testid":"slash-command-wizard",onClick:W(r,["self"]),onKeydown:G(r,["escape"])},[l("div",Ot,[l("header",Tt,[l("h2",At,m(d.value===1?"Slash Commands":`Configure /${(x=h.value)==null?void 0:x.name}`),1),l("button",{type:"button",class:"close-btn","aria-label":"Close wizard",onClick:r}," × ")]),l("div",Ft,[d.value===1?(o(),E(yt,{key:0,commands:C.value,loading:R(a).loading,error:R(a).error,"hide-builtin":e.hideBuiltin,onSelect:p,onClose:r},null,8,["commands","loading","error","hide-builtin"])):d.value===2&&h.value?(o(),E(zt,{key:1,command:h.value,executing:b.value,"execute-label":g.value,onBack:S,onSubmit:w},null,8,["command","executing","execute-label"])):k("",!0)])])],32)):k("",!0)]}),_:1})]))}},Qt=T(qt,[["__scopeId","data-v-138fa079"]]);export{Gt as M,Jt as S,Qt as a,Rt as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.mode-selector[data-v-224ea1e6]{display:flex;align-items:center;gap:.5rem}.mode-select[data-v-224ea1e6]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:.375rem 2rem .375rem .5rem;font-size:.75rem;font-weight:500;background-color:var(--color-background);border:1px solid var(--color-border);border-radius:.375rem;color:var(--color-text-soft);cursor:pointer;transition:all .15s;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%239ca3af' d='M1.5 4.5l4.5 4 4.5-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .5rem center;background-size:12px}.mode-select[data-v-224ea1e6]:hover:not(:disabled){border-color:var(--color-border-hover);background-color:var(--color-bg-hover)}.mode-select[data-v-224ea1e6]:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px #06b6d41a}.mode-select[data-v-224ea1e6]:disabled{opacity:.5;cursor:not-allowed}.mode-select option[data-v-224ea1e6]{background-color:var(--color-background);color:var(--color-text)}.slash-command-btn[data-v-63f59216]{display:flex;align-items:center;gap:.25rem;padding:.375rem .625rem;font-size:.875rem;background:var(--color-background);border:1px solid var(--color-border);border-radius:.375rem;color:var(--color-text-soft);cursor:pointer;transition:background-color .15s,border-color .15s,color .15s}.slash-command-btn[data-v-63f59216]:hover{background:var(--color-bg-hover);border-color:var(--color-accent);color:var(--color-accent)}.slash-icon[data-v-63f59216]{font-size:1rem;font-weight:600;font-family:ui-monospace,monospace}.slash-text[data-v-63f59216]{font-size:.75rem}@media (max-width: 480px){.slash-text[data-v-63f59216]{display:none}.slash-command-btn[data-v-63f59216]{padding:.375rem}}.command-grid[data-v-8ec2a6ee]{display:flex;flex-direction:column;gap:1rem;max-height:60vh;overflow-y:auto}.search-box[data-v-8ec2a6ee]{position:sticky;top:0;z-index:1;background:var(--color-background);padding-bottom:.5rem}.search-input[data-v-8ec2a6ee]{width:100%;padding:.75rem 1rem;font-size:.875rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:.5rem;color:var(--color-text);outline:none;transition:border-color .15s}.search-input[data-v-8ec2a6ee]:focus{border-color:var(--color-primary)}.search-input[data-v-8ec2a6ee]::placeholder{color:var(--color-text-soft)}.loading-state[data-v-8ec2a6ee],.error-state[data-v-8ec2a6ee],.empty-state[data-v-8ec2a6ee]{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:2rem;color:var(--color-text-soft);text-align:center}.error-state[data-v-8ec2a6ee]{color:var(--color-danger, #ef4444)}.loading-spinner[data-v-8ec2a6ee]{width:1.25rem;height:1.25rem;border:2px solid var(--color-border);border-top-color:var(--color-primary);border-radius:50%;animation:spin-8ec2a6ee .6s linear infinite}@keyframes spin-8ec2a6ee{to{transform:rotate(360deg)}}.command-sections[data-v-8ec2a6ee]{display:flex;flex-direction:column;gap:1.5rem}.command-section[data-v-8ec2a6ee]{display:flex;flex-direction:column;gap:.5rem}.section-title[data-v-8ec2a6ee]{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-soft);margin:0;padding:0 .25rem}.command-cards[data-v-8ec2a6ee]{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:.5rem}.command-card[data-v-8ec2a6ee]{display:flex;flex-direction:column;gap:.25rem;padding:.75rem 1rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:.5rem;text-align:left;cursor:pointer;transition:background-color .15s,border-color .15s,transform .1s}.command-card[data-v-8ec2a6ee]:hover{background:var(--color-background-mute);border-color:var(--color-primary)}.command-card[data-v-8ec2a6ee]:active{transform:scale(.98)}.command-name[data-v-8ec2a6ee]{font-size:.875rem;font-weight:600;color:var(--color-primary);font-family:ui-monospace,monospace}.command-description[data-v-8ec2a6ee]{font-size:.75rem;color:var(--color-text-soft);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.command-args-badge[data-v-8ec2a6ee]{display:inline-block;margin-top:.25rem;padding:.125rem .375rem;font-size:.625rem;font-weight:500;text-transform:uppercase;background:#58a6ff26;color:var(--color-primary);border-radius:.25rem;width:fit-content}@media (max-width: 480px){.command-cards[data-v-8ec2a6ee]{grid-template-columns:1fr}}.arguments-form[data-v-aaa3cc39]{display:flex;flex-direction:column;gap:1.5rem}.form-header[data-v-aaa3cc39]{display:flex;flex-direction:column;gap:.25rem}.command-title[data-v-aaa3cc39]{margin:0;font-size:1.25rem;font-weight:600;color:var(--color-primary);font-family:ui-monospace,monospace}.command-description[data-v-aaa3cc39]{margin:0;font-size:.875rem;color:var(--color-text-soft)}.form-fields[data-v-aaa3cc39]{display:flex;flex-direction:column;gap:1rem}.form-field[data-v-aaa3cc39]{display:flex;flex-direction:column;gap:.375rem}.field-label[data-v-aaa3cc39]{font-size:.875rem;font-weight:500;color:var(--color-text)}.required-indicator[data-v-aaa3cc39]{color:var(--color-danger, #ef4444);margin-left:.125rem}.hint[data-v-aaa3cc39]{margin-left:.5rem;font-size:.75rem;font-weight:400;color:var(--color-text-soft);font-family:ui-monospace,monospace}.field-input[data-v-aaa3cc39],.field-select[data-v-aaa3cc39],.field-textarea[data-v-aaa3cc39]{padding:.625rem .875rem;font-size:.875rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:.5rem;color:var(--color-text);outline:none;transition:border-color .15s}.field-input[data-v-aaa3cc39]:focus,.field-select[data-v-aaa3cc39]:focus,.field-textarea[data-v-aaa3cc39]:focus{border-color:var(--color-primary)}.field-input[data-v-aaa3cc39]::placeholder,.field-textarea[data-v-aaa3cc39]::placeholder{color:var(--color-text-soft)}.field-textarea[data-v-aaa3cc39]{resize:vertical;min-height:100px}.field-select[data-v-aaa3cc39]{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%236b7280' d='M6 8L1 3h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .75rem center;padding-right:2.5rem}.form-actions[data-v-aaa3cc39]{display:flex;justify-content:flex-end;gap:.75rem;margin-top:.5rem;padding-top:1rem;border-top:1px solid var(--color-border)}.btn[data-v-aaa3cc39]{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:.625rem 1.25rem;font-size:.875rem;font-weight:500;border-radius:.5rem;cursor:pointer;transition:background-color .15s,border-color .15s}.btn-primary[data-v-aaa3cc39]{background:var(--color-primary, #3b82f6);border:1px solid var(--color-primary, #3b82f6);color:#fff}.btn-primary[data-v-aaa3cc39]:hover:not(:disabled){background:var(--color-primary-soft);border-color:var(--color-primary-soft)}.btn-primary[data-v-aaa3cc39]:disabled{opacity:.6;cursor:not-allowed}.btn-secondary[data-v-aaa3cc39]{background:var(--color-background-soft);border:1px solid var(--color-border);color:var(--color-text-soft)}.btn-secondary[data-v-aaa3cc39]:hover{background:var(--color-background-mute);border-color:var(--color-border)}.loading-spinner[data-v-aaa3cc39]{width:1rem;height:1rem;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin-aaa3cc39 .6s linear infinite}@keyframes spin-aaa3cc39{to{transform:rotate(360deg)}}@media (max-width: 480px){.form-actions[data-v-aaa3cc39]{flex-direction:column-reverse}.btn[data-v-aaa3cc39]{width:100%}}.wizard-overlay[data-v-138fa079]{position:fixed;top:0;left:0;right:0;bottom:0;display:flex;align-items:center;justify-content:center;background:#0009;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:1000}.wizard-modal[data-v-138fa079]{width:100%;max-width:600px;max-height:80vh;display:flex;flex-direction:column;background:var(--color-background);border:1px solid var(--color-border);border-radius:.75rem;box-shadow:0 20px 50px #0006;overflow:hidden}.wizard-header[data-v-138fa079]{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid var(--color-border);flex-shrink:0}.wizard-title[data-v-138fa079]{margin:0;font-size:1.125rem;font-weight:600;color:var(--color-text)}.close-btn[data-v-138fa079]{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;font-size:1.5rem;font-weight:400;background:transparent;border:none;border-radius:.375rem;color:var(--color-text-soft);cursor:pointer;transition:background-color .15s,color .15s}.close-btn[data-v-138fa079]:hover{background:var(--color-background-soft);color:var(--color-text)}.wizard-content[data-v-138fa079]{flex:1;padding:1.25rem;overflow-y:auto}.modal-enter-active[data-v-138fa079],.modal-leave-active[data-v-138fa079]{transition:opacity .2s ease}.modal-enter-active .wizard-modal[data-v-138fa079],.modal-leave-active .wizard-modal[data-v-138fa079]{transition:transform .2s ease}.modal-enter-from[data-v-138fa079],.modal-leave-to[data-v-138fa079]{opacity:0}.modal-enter-from .wizard-modal[data-v-138fa079]{transform:scale(.95) translateY(-10px)}.modal-leave-to .wizard-modal[data-v-138fa079]{transform:scale(.95) translateY(10px)}@media (max-width: 640px){.wizard-modal[data-v-138fa079]{margin:1rem;max-height:calc(100vh - 2rem)}}
|
package/packages/web/dist/assets/{SummarySettingsView-DQM1n3bc.js → SummarySettingsView-C7G_suHp.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as g,k as y,o as h,l as _,u as w,a as r,c as u,b as s,f as c,m as k,q as x,d as V,t as f,i as v,j as T,n as m}from"./index-
|
|
1
|
+
import{_ as g,k as y,o as h,l as _,u as w,a as r,c as u,b as s,f as c,m as k,q as x,d as V,t as f,i as v,j as T,n as m}from"./index-BQL_L4gL.js";import{u as P}from"./settings-BOj6wq6t.js";import{R as C}from"./ResizableTextarea-wYF3K2RO.js";import"./ApiClient-CWbXWDUY.js";const R={key:0,class:"loading-state"},D={class:"form-group"},N={class:"checkbox-label"},B={class:"form-group"},M={key:0,class:"error-message"},U={class:"form-actions"},z=["disabled"],j={key:0,class:"loading-spinner"},q=["disabled"],E={__name:"SummarySettingsView",setup(I){const l=P(),p=y(),i=m(!1),n=m(""),a=m(!1),o=m(null);h(()=>{l.fetchSummarySettings()}),_(()=>l.summarySettings,t=>{t&&(i.value=t.disableSessionSummaries,n.value=t.sessionTitlePrompt||t.defaultSessionTitlePrompt||"")},{immediate:!0});async function S(){a.value=!0,o.value=null;try{await l.updateSummarySettings({disableSessionSummaries:i.value,sessionTitlePrompt:n.value}),p.success("Summary settings saved successfully")}catch(t){o.value=t.message}finally{a.value=!1}}async function b(){if(confirm("Reset all summary settings to defaults?")){a.value=!0,o.value=null;try{await l.resetSummarySettings(),p.success("Summary settings reset to defaults")}catch(t){o.value=t.message}finally{a.value=!1}}}return(t,e)=>w(l).loading?(r(),u("div",R,[...e[2]||(e[2]=[s("span",{class:"loading-spinner"},null,-1),c(" Loading... ",-1)])])):(r(),u("form",{key:1,class:"form card",onSubmit:T(S,["prevent"])},[s("div",D,[s("label",N,[k(s("input",{"onUpdate:modelValue":e[0]||(e[0]=d=>i.value=d),type:"checkbox"},null,512),[[x,i.value]]),e[3]||(e[3]=c(" Disable session summaries ",-1))]),e[4]||(e[4]=s("p",{class:"form-help"}," When enabled, automatic session summaries will not be generated. Session summaries provide an overview of what was accomplished. ",-1))]),s("div",B,[e[5]||(e[5]=s("label",{class:"form-label",for:"sessionTitlePrompt"},"Custom Session Title Prompt",-1)),V(C,{id:"sessionTitlePrompt",modelValue:n.value,"onUpdate:modelValue":e[1]||(e[1]=d=>n.value=d),class:"form-input form-textarea-small","min-height":120,"max-height":400},null,8,["modelValue"]),e[6]||(e[6]=s("p",{class:"form-help"}," Customize how session titles are generated. ",-1))]),o.value?(r(),u("div",M,f(o.value),1)):v("",!0),s("div",U,[s("button",{type:"submit",class:"btn btn-primary",disabled:a.value},[a.value?(r(),u("span",j)):v("",!0),c(" "+f(a.value?"Saving...":"Save Settings"),1)],8,z),s("button",{type:"button",class:"btn btn-secondary",disabled:a.value,onClick:b}," Reset to Defaults ",8,q)])],32))}},G=g(E,[["__scopeId","data-v-f7c13593"]]);export{G as default};
|
package/packages/web/dist/assets/{TemplateDetailView-B8clSBPk.js → TemplateDetailView-B78_DLMR.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as N,k as $,o as G,a as s,c as r,b as t,f as y,d as p,w as O,m as v,v as S,p as V,F as R,r as F,t as i,i as B,j as C,n as d,x as I,g as q,h as P,s as z}from"./index-
|
|
1
|
+
import{_ as N,k as $,o as G,a as s,c as r,b as t,f as y,d as p,w as O,m as v,v as S,p as V,F as R,r as F,t as i,i as B,j as C,n as d,x as I,g as q,h as P,s as z}from"./index-BQL_L4gL.js";import{u as A,E as H}from"./EffortLevelSelector-bXbPo4Zw.js";import{a as Y}from"./ApiClient-CWbXWDUY.js";import{M as J}from"./ModelSelector-CowKfGMP.js";import{I as K}from"./InterpolationHelp-PfYR3KJo.js";import{R as Q}from"./ResizableTextarea-wYF3K2RO.js";import"./sessions-CwPsJOb1.js";import"./settings-BOj6wq6t.js";import"./providers-ChfeMvUq.js";const W={class:"container template-detail"},X={key:0,class:"loading-state"},Z={key:1,class:"form-container"},_={class:"form-header"},ee={class:"form-group"},te={class:"form-group"},le={class:"form-group"},oe=["value"],ae={class:"form-group"},ne={class:"form-group"},se={class:"form-group"},re={class:"form-group"},ie={class:"form-group"},de={class:"form-actions"},ue=["disabled"],me={key:0,class:"form-error-message"},pe={class:"modal-body"},ve={class:"modal-footer"},fe=["disabled"],be={__name:"TemplateDetailView",setup(ge){const E=z(),T=P(),f=A(),u=$(),k=d(!1),b=d(!1),g=d(!1),m=d(!1),n=d(null),l=d({name:"",prompt:"",isGlobal:!1,nextTemplateId:null,thinkingEnabled:null,gitBranch:"",model:null,mode:null,effortLevel:null}),x=I(()=>E.params.projectId),c=I(()=>E.params.templateId),D=I(()=>[...f.projectTemplates,...f.globalTemplates].filter(e=>e.id!==c.value)),L=async()=>{k.value=!0,n.value=null;try{const o=await Y.getTemplate(c.value);o&&(l.value={name:o.name,prompt:o.prompt,isGlobal:!o.projectId,nextTemplateId:o.nextTemplateId||null,thinkingEnabled:o.thinkingEnabled,gitBranch:o.gitBranch||"",model:o.model,mode:o.mode,effortLevel:o.effortLevel??null})}catch(o){n.value=`Failed to load template: ${o.message}`,u.error(o.message)}finally{k.value=!1}},w=async()=>{n.value=null,b.value=!0;try{const o={name:l.value.name,prompt:l.value.prompt,nextTemplateId:l.value.nextTemplateId||void 0,thinkingEnabled:l.value.thinkingEnabled,gitBranch:l.value.gitBranch||void 0,model:l.value.model,mode:l.value.mode,effortLevel:l.value.effortLevel};await f.updateTemplate(c.value,o),u.success("Template updated"),T.push(`/projects/${x.value}/templates`)}catch(o){n.value=o.message,u.error(o.message)}finally{b.value=!1}},U=()=>{T.back()},j=()=>{m.value=!0},h=async()=>{g.value=!0,n.value=null;try{await f.deleteTemplate(c.value),u.success("Template deleted"),m.value=!1,T.push(`/projects/${x.value}/templates`)}catch(o){n.value=o.message,u.error(o.message)}finally{g.value=!1}};return G(async()=>{await L()}),(o,e)=>{const M=q("router-link");return s(),r("div",W,[k.value?(s(),r("div",X,[...e[11]||(e[11]=[t("span",{class:"loading-spinner"},null,-1),y(" Loading... ",-1)])])):(s(),r("div",Z,[t("div",_,[p(M,{to:`/projects/${x.value}/templates`,class:"btn btn-outline-secondary"},{default:O(()=>[...e[12]||(e[12]=[y(" ← Back ",-1)])]),_:1},8,["to"]),e[13]||(e[13]=t("h2",null,"Edit Template",-1))]),t("form",{class:"template-form",onSubmit:C(w,["prevent"])},[t("div",ee,[e[14]||(e[14]=t("label",{for:"name"},"Name",-1)),v(t("input",{id:"name","onUpdate:modelValue":e[0]||(e[0]=a=>l.value.name=a),type:"text",class:"form-input",placeholder:"Template name",required:""},null,512),[[S,l.value.name]])]),t("div",te,[e[15]||(e[15]=t("label",{for:"prompt"},"Prompt",-1)),p(Q,{id:"prompt",modelValue:l.value.prompt,"onUpdate:modelValue":e[1]||(e[1]=a=>l.value.prompt=a),class:"form-input form-textarea",placeholder:"Session prompt. Use {{rootSession.summary}} to reference root session data.","min-height":120,required:""},null,8,["modelValue"]),p(K)]),t("div",le,[e[17]||(e[17]=t("label",{for:"nextTemplate"},"Next Template (Optional)",-1)),v(t("select",{id:"nextTemplate","onUpdate:modelValue":e[2]||(e[2]=a=>l.value.nextTemplateId=a),class:"form-input"},[e[16]||(e[16]=t("option",{value:null}," None ",-1)),(s(!0),r(R,null,F(D.value,a=>(s(),r("option",{key:a.id,value:a.id},i(a.name)+" "+i(a.projectId?"":"(Global)"),9,oe))),128))],512),[[V,l.value.nextTemplateId]]),e[18]||(e[18]=t("p",{class:"form-help"}," Chain another template to run after this one completes. ",-1))]),t("div",ae,[e[20]||(e[20]=t("label",{for:"thinkingEnabled"},"Extended Thinking",-1)),v(t("select",{id:"thinkingEnabled","onUpdate:modelValue":e[3]||(e[3]=a=>l.value.thinkingEnabled=a),class:"form-input"},[...e[19]||(e[19]=[t("option",{value:null}," Inherit from root session ",-1),t("option",{value:!0}," Enabled ",-1),t("option",{value:!1}," Disabled ",-1)])],512),[[V,l.value.thinkingEnabled]])]),t("div",ne,[e[21]||(e[21]=t("label",{for:"model"},"Model",-1)),p(J,{modelValue:l.value.model,"onUpdate:modelValue":e[4]||(e[4]=a=>l.value.model=a),"allow-empty":!0,"empty-label":"Inherit from root session"},null,8,["modelValue"])]),t("div",se,[e[23]||(e[23]=t("label",{for:"mode"},"Mode",-1)),v(t("select",{id:"mode","onUpdate:modelValue":e[5]||(e[5]=a=>l.value.mode=a),class:"form-input"},[...e[22]||(e[22]=[t("option",{value:null}," Inherit from root session ",-1),t("option",{value:"plan"}," Plan ",-1),t("option",{value:"standard"}," Standard ",-1),t("option",{value:"yolo"}," YOLO ",-1)])],512),[[V,l.value.mode]])]),t("div",re,[e[24]||(e[24]=t("label",{for:"effort-level"},"Effort Level",-1)),p(H,{modelValue:l.value.effortLevel,"onUpdate:modelValue":e[6]||(e[6]=a=>l.value.effortLevel=a)},null,8,["modelValue"])]),t("div",ie,[e[25]||(e[25]=t("label",{for:"gitBranch"},"Git Branch (Optional)",-1)),v(t("input",{id:"gitBranch","onUpdate:modelValue":e[7]||(e[7]=a=>l.value.gitBranch=a),type:"text",class:"form-input",placeholder:"Leave empty to inherit from root session"},null,512),[[S,l.value.gitBranch]])]),t("div",de,[t("button",{type:"button",class:"btn btn-outline-secondary",onClick:U}," Cancel "),t("button",{type:"button",class:"btn btn-outline-danger",onClick:j}," Delete "),t("button",{type:"submit",class:"btn btn-primary",disabled:b.value},i(b.value?"Saving...":"Save"),9,ue)]),n.value?(s(),r("div",me,i(n.value),1)):B("",!0)],32)])),m.value?(s(),r("div",{key:2,class:"modal-overlay",onClick:e[10]||(e[10]=a=>m.value=!1)},[t("div",{class:"modal-dialog",onClick:e[9]||(e[9]=C(()=>{},["stop"]))},[e[29]||(e[29]=t("div",{class:"modal-header"},[t("h4",null,"Delete Template")],-1)),t("div",pe,[t("p",null,[e[26]||(e[26]=y('Are you sure you want to delete "',-1)),t("strong",null,i(l.value.name),1),e[27]||(e[27]=y('"?',-1))]),e[28]||(e[28]=t("p",null,"This action cannot be undone.",-1))]),t("div",ve,[t("button",{class:"btn btn-outline-secondary",onClick:e[8]||(e[8]=a=>m.value=!1)}," Cancel "),t("button",{class:"btn btn-danger",disabled:g.value,onClick:h},i(g.value?"Deleting...":"Delete"),9,fe)])])])):B("",!0)])}}},Be=N(be,[["__scopeId","data-v-f2f40f55"]]);export{Be as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{L as h}from"./index-
|
|
1
|
+
import{L as h}from"./index-BQL_L4gL.js";import{a as o}from"./ApiClient-CWbXWDUY.js";const i=2e3,p=300;function a(t){const e=t.split(`
|
|
2
2
|
`);return e.length<=i?{output:t,truncated:!1}:{output:e.slice(-i).join(`
|
|
3
3
|
`),truncated:!0}}function f(t,e,u){const{output:s,truncated:n}=a(t.output||""),r=!s&&(u==null?void 0:u.output);return{runId:e,buttonId:t.buttonId,sessionId:t.sessionId,status:t.status||"running",output:r?u.output:s,exitCode:t.exitCode??null,startedAt:t.startedAt,completedAt:t.completedAt,outputTruncated:r?u.outputTruncated:n}}function l(t,e){const u=t._outputBuffers[e];if(!u||!t.runs[e]){delete t._outputBuffers[e],delete t._flushTimers[e];return}if(t.runs[e].status!=="running"){delete t._outputBuffers[e],delete t._flushTimers[e];return}const s=t.runs[e].output+u,{output:n,truncated:r}=a(s);t.$patch({runs:{[e]:{...t.runs[e],output:n,outputTruncated:t.runs[e].outputTruncated||r}}}),delete t._outputBuffers[e],delete t._flushTimers[e]}function d(t,e,u){if(!t.runs[e]||t.runs[e].status!=="running")return;const s=Date.now(),n=t._lastAppendedText[e];n&&n.text===u&&s-n.timestamp<100||(t._lastAppendedText[e]={text:u,timestamp:s},t._outputBuffers[e]=(t._outputBuffers[e]||"")+u,t._flushTimers[e]||(t._flushTimers[e]=setTimeout(()=>{l(t,e)},p)))}function m(t,e){t._flushTimers[e]&&(clearTimeout(t._flushTimers[e]),delete t._flushTimers[e]),t._outputBuffers[e]&&l(t,e)}function T(t,e,u){const{output:s,truncated:n}=a(t.output||""),r=!s&&(u!=null&&u.output)?u.output:s,c=!s&&(u!=null&&u.output)?u.outputTruncated:n;return{runId:t.runId,buttonId:t.buttonId,sessionId:e,status:t.status||"running",output:r,exitCode:t.exitCode!==void 0?t.exitCode:null,startedAt:t.startedAt,completedAt:t.completedAt,outputTruncated:c}}function _(t,e,u){let s=t.output,n=t.outputTruncated;if(u&&u.length>t.output.length){const r=a(u);s=r.output,n=r.truncated}return{...t,exitCode:e,completedAt:Date.now(),output:s,outputTruncated:n,status:e===0?"success":"error"}}function B(t,e){const u=`${t.output}
|
|
4
4
|
[Error] ${e}`,{output:s,truncated:n}=a(u);return{...t,status:"error",output:s,outputTruncated:t.outputTruncated||n}}const b=h("commandButtons",{state:()=>({buttons:[],runs:{},collapsedStates:{},loading:!1,error:null,_outputBuffers:{},_flushTimers:{},_lastAppendedText:{}}),getters:{getButtonById:t=>e=>t.buttons.find(u=>u.id===e),getRun:t=>e=>t.runs[e],activeRuns:t=>Object.values(t.runs).filter(e=>e.status==="running"),getButtonsByProjectId:t=>e=>t.buttons.filter(u=>u.projectId===e),getLatestRunForButton:t=>(e,u)=>{const s=Object.values(t.runs).filter(n=>n.buttonId===e&&n.sessionId===u).sort((n,r)=>(r.startedAt||0)-(n.startedAt||0));return s.length>0?s[0]:null},isOutputCollapsed:t=>e=>t.collapsedStates[e]!==void 0?t.collapsedStates[e]:!0},actions:{async fetchButtons(t){this.loading=!0,this.error=null;try{const e=await o.getCommandButtons(t);this.buttons=this.buttons.filter(u=>u.projectId!==t),this.buttons.push(...e)}catch(e){this.error=e.message}finally{this.loading=!1}},async createButton(t,e){this.error=null;try{const u=await o.createCommandButton(t,e);return this.buttons.push(u),u}catch(u){throw this.error=u.message,u}},async updateButton(t,e,u){this.error=null;try{const s=await o.updateCommandButton(t,e,u),n=this.buttons.findIndex(r=>r.id===e);return n>=0&&(this.buttons[n]=s),s}catch(s){throw this.error=s.message,s}},async deleteButton(t,e){this.error=null;try{await o.deleteCommandButton(t,e),this.buttons=this.buttons.filter(u=>u.id!==e)}catch(u){throw this.error=u.message,u}},async runButton(t,e){this.error=null;try{const u=await o.runCommandButton(t,e),s=u.runId;return this.runs[s]={runId:s,buttonId:e,sessionId:t,status:"running",output:u.output||"",exitCode:null,startedAt:Date.now(),outputTruncated:!1},s}catch(u){throw this.error=u.message,u}},async killRun(t,e){try{await o.killCommandRun(t,e)}catch(u){if(this.runs[e]&&this.runs[e].status==="running"){this.runs[e]={...this.runs[e],status:"error",exitCode:-1,completedAt:Date.now()},console.log(`[killRun] Process ${e} not found on server, updated UI state to error`);return}throw u}},async fetchActiveRuns(t){this.error=null;try{const e=await o.getActiveRuns(t);for(const u of e)this.runs[u.runId]=T(u,t,this.runs[u.runId]);return e}catch(e){return this.error=`Failed to fetch active runs: ${e.message}`,console.error(this.error,e),[]}},async fetchLatestRunsForProject(t){var e;this.error=null;try{const u=await o.getLatestRunsForProject(t);for(const s of u){const n=s.id||s.runId;((e=this.runs[n])==null?void 0:e.status)!=="running"&&(this.runs[n]=f(s,n,this.runs[n]))}return u}catch(u){return this.error=`Failed to fetch latest runs: ${u.message}`,console.error(this.error,u),[]}},appendOutput(t,e){d(this,t,e)},flushPendingOutput(t){m(this,t)},completeRun(t,e,u){this.runs[t]&&(this.flushPendingOutput(t),delete this._lastAppendedText[t],this.$patch({runs:{[t]:_(this.runs[t],e,u)}}))},errorRun(t,e){this.runs[t]&&(this.flushPendingOutput(t),this.$patch({runs:{[t]:B(this.runs[t],e)}}))},async fetchRunOutput(t,e){const u=this.runs[e];if(!(!u||u.status==="running")&&!(u.output&&u.output.length>0))try{const s=await o.getCommandRun(t,e);if(s.output&&this.runs[e]){const{output:n,truncated:r}=a(s.output);this.runs[e]={...this.runs[e],output:n,outputTruncated:r}}}catch(s){console.warn(`[commandButtons] Failed to fetch output for run ${e}:`,s.message)}},setOutputCollapsed(t,e){this.collapsedStates[t]=e},async deleteRun(t,e){await o.deleteCommandRun(t,e),this.clearRun(e)},async deleteAllRunsForButton(t,e){await o.deleteAllRunsForButton(t,e);for(const u of Object.keys(this.runs))this.runs[u].buttonId===e&&this.runs[u].sessionId===t&&this.clearRun(u)},clearRun(t){this._flushTimers[t]&&(clearTimeout(this._flushTimers[t]),delete this._flushTimers[t]),delete this._outputBuffers[t],delete this._lastAppendedText[t],delete this.runs[t],delete this.collapsedStates[t]},clearAllRuns(){for(const t of Object.keys(this._flushTimers))clearTimeout(this._flushTimers[t]);this._flushTimers={},this._outputBuffers={},this._lastAppendedText={},this.runs={},this.collapsedStates={}}}});export{b as u};
|