circuschief 0.1.4 → 0.2.1
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/api/commands.js +50 -55
- package/packages/server/src/api/projects-helpers.js +13 -4
- package/packages/server/src/api/projects.js +33 -18
- package/packages/server/src/cli.js +82 -0
- package/packages/server/src/db/AgentCallLogRepository.js +30 -31
- package/packages/server/src/db/ConversationRepository.js +27 -16
- package/packages/server/src/db/ProjectRepository.js +21 -31
- package/packages/server/src/db/QuickResponseRepository.js +14 -19
- package/packages/server/src/db/migrations/sessionsMigrations.js +61 -61
- package/packages/server/src/index.js +42 -29
- package/packages/server/src/services/commandRunner.js +52 -99
- package/packages/server/src/services/kanbanTriggers.js +83 -56
- package/packages/server/src/services/schedulerService.js +68 -44
- package/packages/server/src/services/sessionExecution.js +102 -61
- package/packages/server/src/services/sessionManager.js +63 -37
- package/packages/server/src/services/summaryService.js +56 -53
- package/packages/server/src/services/templateTriggerService.js +58 -31
- package/packages/server/src/ws/WebSocketManager.js +5 -0
- package/packages/web/dist/assets/ActiveSessionsView-3697sD8N.js +1 -0
- package/packages/web/dist/assets/ActiveSessionsView-DfYXc6dz.css +1 -0
- package/packages/web/dist/assets/{AgentLogsView-c42v_j_5.js → AgentLogsView-D4l0N9ZA.js} +1 -1
- package/packages/web/dist/assets/{ArchiveConfirmModal-DBuOmtXu.js → ArchiveConfirmModal-Bv3vGOMM.js} +1 -1
- package/packages/web/dist/assets/{CommandButtonDetailView-CkKJ3Htz.js → CommandButtonDetailView-Bk_SHxpu.js} +1 -1
- package/packages/web/dist/assets/{EffortLevelSelector-BHJHSqul.js → EffortLevelSelector-VfBEelvO.js} +1 -1
- package/packages/web/dist/assets/{GeneralSettingsView-CdxfteZ2.js → GeneralSettingsView-BqCzCX-z.js} +1 -1
- package/packages/web/dist/assets/{InterpolationHelp-DabnHhE4.js → InterpolationHelp-Dc1Y0T6v.js} +1 -1
- package/packages/web/dist/assets/MarkdownEditor-DwBQkZbs.js +2 -0
- package/packages/web/dist/assets/{ModelSelector-BWIU4ud7.js → ModelSelector-DSxaZWBL.js} +1 -1
- package/packages/web/dist/assets/{NewSessionView-BIZl8QlH.js → NewSessionView-BsI7JtO9.js} +2 -2
- package/packages/web/dist/assets/{PathChooser-nhat_Pz4.js → PathChooser-CXFxb8Oj.js} +1 -1
- package/packages/web/dist/assets/{ProjectEditView-DD-2_VrW.js → ProjectEditView-Bes4Mib4.js} +1 -1
- package/packages/web/dist/assets/{ProjectListView-BOWbfoXQ.js → ProjectListView-DzEu-C36.js} +1 -1
- package/packages/web/dist/assets/{ProjectNewView-DC4uvSn2.js → ProjectNewView-Cv-iEAgl.js} +1 -1
- package/packages/web/dist/assets/ProvidersView-CgAr0qms.js +1 -0
- package/packages/web/dist/assets/{QuickResponseSettings-Bk9mq96x.js → QuickResponseSettings-uDDpwaza.js} +1 -1
- package/packages/web/dist/assets/{QuickResponsesPanel-BRvcnkQr.js → QuickResponsesPanel-D0qs0Fm_.js} +1 -1
- package/packages/web/dist/assets/{ResizableTextarea-CwGM4P3c.js → ResizableTextarea-_kHi1Mg3.js} +1 -1
- package/packages/web/dist/assets/{SessionCard-BGDVHU9u.js → SessionCard-Be1-bK0C.js} +1 -1
- package/packages/web/dist/assets/{SessionCard-D20G3bX8.css → SessionCard-CcqIjL8q.css} +1 -1
- package/packages/web/dist/assets/{SessionDetailView-CHYrx2Ab.js → SessionDetailView-DUYb7qTA.js} +17 -17
- package/packages/web/dist/assets/{SessionDetailView-7bWgC7Es.css → SessionDetailView-mnGRMaLY.css} +1 -1
- package/packages/web/dist/assets/{SessionFormOptions-8qvL25ca.js → SessionFormOptions-DvhOyP6z.js} +1 -1
- package/packages/web/dist/assets/{SessionListView-BAIBtJF7.css → SessionListView-78k6TTz6.css} +1 -1
- package/packages/web/dist/assets/SessionListView-CuHsWj85.js +1 -0
- package/packages/web/dist/assets/{SessionLogStream-B-w3n4c3.js → SessionLogStream-Da_GniUZ.js} +1 -1
- package/packages/web/dist/assets/{SettingsView-Dd0ZJ4Nv.js → SettingsView-5RDCXNUa.js} +1 -1
- package/packages/web/dist/assets/{SlashCommandWizard-CzyLjsdJ.js → SlashCommandWizard-B_8ifpxN.js} +1 -1
- package/packages/web/dist/assets/{SummarySettingsView-DTbh7uAF.js → SummarySettingsView-KvgSGHdd.js} +1 -1
- package/packages/web/dist/assets/{TemplateDetailView-BOnhkdtH.js → TemplateDetailView-BhOjYIvS.js} +1 -1
- package/packages/web/dist/assets/{commandButtons-CY87n64i.js → commandButtons-B4OYZP0J.js} +1 -1
- package/packages/web/dist/assets/{index-DxboI9i-.js → index-80Qu7W6P.js} +1 -1
- package/packages/web/dist/assets/{index-NzLFVaCi.js → index-B8_Iqwcq.js} +1 -1
- package/packages/web/dist/assets/{index-aCw-iXPX.js → index-B9JErft2.js} +1 -1
- package/packages/web/dist/assets/{index-Ce6sL47U.js → index-BHVnr8MO.js} +1 -1
- package/packages/web/dist/assets/{index-BXUcbV4K.js → index-BarVnQIj.js} +1 -1
- package/packages/web/dist/assets/{index--OtPwBbF.js → index-BqVgX_Jy.js} +3 -3
- package/packages/web/dist/assets/{index-gMpnPf1V.js → index-BsvRdU0B.js} +1 -1
- package/packages/web/dist/assets/{index-BRUlEEHm.js → index-Bugg2M-E.js} +1 -1
- package/packages/web/dist/assets/{index-Dx0sYW7H.js → index-C2Pjy-M8.js} +1 -1
- package/packages/web/dist/assets/{index-DkLkDgig.js → index-CSOPrlmq.js} +23 -23
- package/packages/web/dist/assets/{index-CO4EBOFw.js → index-CS_wb_Vj.js} +1 -1
- package/packages/web/dist/assets/{index-CjHb9rXv.js → index-ClzNIdCp.js} +1 -1
- package/packages/web/dist/assets/{index-DPwwgloE.js → index-Cn9Ajkye.js} +1 -1
- package/packages/web/dist/assets/{index-i1o916sk.js → index-CucpVX4L.js} +1 -1
- package/packages/web/dist/assets/{index-C6m-WfqP.js → index-D9hZYvW3.js} +1 -1
- package/packages/web/dist/assets/{index-jGjvGBfk.js → index-DA0dK_PG.js} +1 -1
- package/packages/web/dist/assets/{index-Bi4bQ_UB.js → index-DgpSn-jR.js} +1 -1
- package/packages/web/dist/assets/{index-DcA6pqXV.js → index-HZwIyC9t.js} +1 -1
- package/packages/web/dist/assets/{index-BshkV3r5.js → index-SS3wA2sI.js} +1 -1
- package/packages/web/dist/assets/{projects-C2Y29PSJ.js → projects-B2du-GX8.js} +1 -1
- package/packages/web/dist/assets/{providers-CeJXuo0Q.js → providers-B__J6FX0.js} +1 -1
- package/packages/web/dist/assets/sessions-VDrd87yA.js +1 -0
- package/packages/web/dist/assets/{settings-BplIxCbi.js → settings-CZ7Pc-Pt.js} +1 -1
- package/packages/web/dist/index.html +1 -1
- package/packages/web/dist/assets/ActiveSessionsView-BryJ-V3f.js +0 -1
- package/packages/web/dist/assets/ActiveSessionsView-ofSvx-K1.css +0 -1
- package/packages/web/dist/assets/MarkdownEditor-k4zBLGqU.js +0 -2
- package/packages/web/dist/assets/ProvidersView-DT5afh1V.js +0 -1
- package/packages/web/dist/assets/SessionListView-927Yq6Il.js +0 -1
- package/packages/web/dist/assets/sessions-CMby7ij3.js +0 -1
package/packages/web/dist/assets/{SlashCommandWizard-CzyLjsdJ.js → SlashCommandWizard-B_8ifpxN.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as R}from"./EffortLevelSelector-BHJHSqul.js";import{_ as L,i as K,l as j,m as T,a as s,c as o,b as a,F as B,r as V,t as d,x as v,$ as J,L as Q,o as G,I as Y,j as F,v as M,J as W,k as g,e as O,h as A,n as X,G as P,d as Z,w as ee,u as E,T as te,V as se}from"./index-DkLkDgig.js";import{a as H}from"./ApiClient-Dbs1H78V.js";const ne={class:"mode-selector"},ae=["value","disabled"],oe=["value"],le={__name:"ModeSelector",props:{sessionId:{type:String,default:null},modelValue:{type:String,default:null},disabled:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,{emit:n}){const l=e,y=n,r=R(),b=K(),_=j(!1),p=[{value:"plan",label:"Plan",description:"Agent plans before implementing"},{value:"standard",label:"Standard",description:"Balanced approach"},{value:"yolo",label:"YOLO",description:"Auto-approve mode"}],$=v(()=>{var m;return l.sessionId?(m=r.currentSession)==null?void 0:m.mode:l.modelValue}),k=j($.value),u=J(l,"modelValue");T([$,u],([m])=>{k.value=m},{flush:"sync"});async function i(m){if(!_.value&&k.value!==m)if(k.value=m,l.sessionId){_.value=!0;try{await r.updateSessionMode(l.sessionId,m)}catch(C){k.value=$.value,b.error(C.message)}finally{_.value=!1}}else y("update:modelValue",m)}return(m,C)=>(s(),o("div",ne,[a("select",{id:"mode-select",value:k.value,disabled:e.disabled||_.value,class:"mode-select",onChange:C[0]||(C[0]=x=>i(x.target.value))},[(s(),o(B,null,V(p,x=>a("option",{key:x.value,value:x.value},d(x.label),9,oe)),64))],40,ae)]))}},Dt=L(le,[["__scopeId","data-v-224ea1e6"]]),ie={__name:"SlashCommandButton",emits:["open"],setup(e,{emit:n}){const l=n;return(y,r)=>(s(),o("button",{type:"button",class:"slash-command-btn",title:"Slash Commands","data-testid":"slash-command-button",onClick:r[0]||(r[0]=b=>l("open"))},[...r[1]||(r[1]=[a("span",{class:"slash-icon"},"/",-1),a("span",{class:"slash-text"},"Commands",-1)])]))}},qt=L(ie,[["__scopeId","data-v-63f59216"]]),de=Q("slashCommands",{state:()=>({commands:[],loading:!1,error:null,lastFetchedDirectory:null,executing:!1}),getters:{builtinCommands:e=>e.commands.filter(n=>n.source==="builtin"),projectCommands:e=>e.commands.filter(n=>n.source==="project"),userCommands:e=>e.commands.filter(n=>n.source==="user"),pluginCommands:e=>e.commands.filter(n=>n.source==="plugin"),customCommands:e=>e.commands.filter(n=>n.source!=="builtin"),projectSkills:e=>e.commands.filter(n=>n.source==="project-skill"),userSkills:e=>e.commands.filter(n=>n.source==="user-skill"),pluginSkills:e=>e.commands.filter(n=>n.source==="plugin-skill"),allSkills:e=>e.commands.filter(n=>n.isSkill===!0),hasSkills:e=>e.commands.some(n=>n.isSkill===!0),allProjectItems:e=>e.commands.filter(n=>n.source==="project"||n.source==="project-skill"),allUserItems:e=>e.commands.filter(n=>n.source==="user"||n.source==="user-skill"),hasCommands:e=>e.commands.length>0,hasCustomCommands:e=>e.commands.some(n=>n.source==="project"||n.source==="user")},actions:{async fetchCommandsFromSession(e){this.loading=!0,this.error=null;try{const n=await H.getSession(e),l=n.slashCommands?JSON.parse(n.slashCommands):[];return this.commands=l,l}catch(n){throw this.error=n.message,n}finally{this.loading=!1}},async fetchCommands(e,n=!1){if(!n&&this.lastFetchedDirectory===e&&this.commands.length>0)return this.commands;this.loading=!0,this.error=null;try{const l=await H.getSlashCommands(e);return this.commands=l,this.lastFetchedDirectory=e,l}catch(l){throw this.error=l.message,l}finally{this.loading=!1}},async executeCommand(e,n,l={}){this.executing=!0,this.error=null;try{return await H.executeSlashCommand(e,n,l)}catch(y){throw this.error=y.message,y}finally{this.executing=!1}},getCommandByName(e){return this.commands.find(n=>n.name===e)||null},searchCommands(e){if(!e||!e.trim())return this.commands;const n=e.toLowerCase();return this.commands.filter(l=>l.name.toLowerCase().includes(n)||l.description&&l.description.toLowerCase().includes(n))},clearCommands(){this.commands=[],this.lastFetchedDirectory=null,this.error=null}}}),re={class:"command-grid"},ce={class:"search-box"},me={key:0,class:"loading-state"},ue={key:1,class:"error-state"},he={key:2,class:"empty-state"},pe={key:0},fe={key:1},ve={key:3,class:"command-sections"},ge={key:0,class:"command-section"},_e={class:"command-cards"},ye=["data-testid","onClick"],ke={class:"command-name"},Ce={class:"command-description"},be={key:1,class:"command-section"},Se={class:"command-cards"},$e=["data-testid","onClick"],xe={class:"command-name"},we={class:"command-description"},Be={key:0,class:"command-args-badge"},Ve={key:2,class:"command-section"},je={class:"command-cards"},Ie=["data-testid","onClick"],Ne={class:"command-name"},ze={class:"command-description"},De={key:0,class:"command-args-badge"},qe={key:3,class:"command-section"},Ue={class:"command-cards"},Fe=["data-testid","onClick"],Le={class:"command-name"},Me={class:"command-description"},Oe={key:0,class:"command-args-badge"},Pe={key:4,class:"command-section"},He={class:"command-cards"},Ae=["data-testid","onClick"],Te={class:"command-name"},We={class:"command-description"},Ee={key:0,class:"command-args-badge"},Ke={key:5,class:"command-section"},Ge={class:"command-cards"},Re=["data-testid","onClick"],Je={class:"command-name"},Qe={class:"command-description"},Ye={key:0,class:"command-args-badge"},Xe={key:6,class:"command-section"},Ze={class:"command-cards"},et=["data-testid","onClick"],tt={class:"command-name"},st={class:"command-description"},nt={key:0,class:"command-args-badge"},at={__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:n}){const l=e,y=n,r=j(""),b=j(null),_=v(()=>l.commands.filter(h=>h.source==="builtin")),p=v(()=>l.commands.filter(h=>h.source==="project")),$=v(()=>l.commands.filter(h=>h.source==="user")),k=v(()=>l.commands.filter(h=>h.source==="plugin")),u=v(()=>l.commands.filter(h=>h.source==="project-skill")),i=v(()=>l.commands.filter(h=>h.source==="user-skill")),m=v(()=>l.commands.filter(h=>h.source==="plugin-skill"));function C(h){if(!r.value.trim())return h;const c=r.value.toLowerCase();return h.filter(t=>t.name.toLowerCase().includes(c)||t.description&&t.description.toLowerCase().includes(c))}const x=v(()=>C(_.value)),U=v(()=>C(p.value)),f=v(()=>C($.value)),S=v(()=>C(k.value)),w=v(()=>C(u.value)),I=v(()=>C(i.value)),N=v(()=>C(m.value)),z=v(()=>[...x.value,...U.value,...f.value,...S.value,...w.value,...I.value,...N.value]);function D(h){y("select",h)}return G(()=>{Y(()=>{var h;(h=b.value)==null||h.focus()})}),(h,c)=>(s(),o("div",re,[a("div",ce,[F(a("input",{ref_key:"searchInput",ref:b,"onUpdate:modelValue":c[0]||(c[0]=t=>r.value=t),type:"text",placeholder:"Search commands...",class:"search-input","data-testid":"command-search",onKeydown:c[1]||(c[1]=W(t=>y("close"),["escape"]))},null,544),[[M,r.value]])]),e.loading?(s(),o("div",me,[...c[2]||(c[2]=[a("span",{class:"loading-spinner"},null,-1),a("span",null,"Loading commands...",-1)])])):e.error?(s(),o("div",ue,[c[3]||(c[3]=a("span",{class:"error-icon"},"⚠️",-1)),a("span",null,d(e.error),1)])):z.value.length===0?(s(),o("div",he,[r.value?(s(),o("span",pe,'No commands match "'+d(r.value)+'"',1)):(s(),o("span",fe,"No slash commands available"))])):(s(),o("div",ve,[x.value.length>0&&!e.hideBuiltin?(s(),o("div",ge,[c[4]||(c[4]=a("h3",{class:"section-title"}," Built-in Commands ",-1)),a("div",_e,[(s(!0),o(B,null,V(x.value,t=>(s(),o("button",{key:t.name,type:"button",class:"command-card","data-testid":`command-${t.name}`,onClick:q=>D(t)},[a("span",ke,"/"+d(t.name),1),a("span",Ce,d(t.description||"No description"),1)],8,ye))),128))])])):g("",!0),U.value.length>0?(s(),o("div",be,[c[5]||(c[5]=a("h3",{class:"section-title"}," Project Commands ",-1)),a("div",Se,[(s(!0),o(B,null,V(U.value,t=>(s(),o("button",{key:t.name,type:"button",class:"command-card","data-testid":`command-${t.name}`,onClick:q=>D(t)},[a("span",xe,"/"+d(t.name),1),a("span",we,d(t.description||"No description"),1),t.arguments.length>0?(s(),o("span",Be,d(t.arguments.length)+" arg"+d(t.arguments.length>1?"s":""),1)):g("",!0)],8,$e))),128))])])):g("",!0),f.value.length>0?(s(),o("div",Ve,[c[6]||(c[6]=a("h3",{class:"section-title"}," User Commands ",-1)),a("div",je,[(s(!0),o(B,null,V(f.value,t=>(s(),o("button",{key:t.name,type:"button",class:"command-card","data-testid":`command-${t.name}`,onClick:q=>D(t)},[a("span",Ne,"/"+d(t.name),1),a("span",ze,d(t.description||"No description"),1),t.arguments.length>0?(s(),o("span",De,d(t.arguments.length)+" arg"+d(t.arguments.length>1?"s":""),1)):g("",!0)],8,Ie))),128))])])):g("",!0),S.value.length>0?(s(),o("div",qe,[c[7]||(c[7]=a("h3",{class:"section-title"}," Plugin Commands ",-1)),a("div",Ue,[(s(!0),o(B,null,V(S.value,t=>(s(),o("button",{key:t.name,type:"button",class:"command-card","data-testid":`command-${t.name}`,onClick:q=>D(t)},[a("span",Le,"/"+d(t.name),1),a("span",Me,d(t.description||"No description"),1),t.arguments.length>0?(s(),o("span",Oe,d(t.arguments.length)+" arg"+d(t.arguments.length>1?"s":""),1)):g("",!0)],8,Fe))),128))])])):g("",!0),w.value.length>0?(s(),o("div",Pe,[c[8]||(c[8]=a("h3",{class:"section-title"}," Project Skills ",-1)),a("div",He,[(s(!0),o(B,null,V(w.value,t=>(s(),o("button",{key:t.name,type:"button",class:"command-card","data-testid":`skill-${t.name}`,onClick:q=>D(t)},[a("span",Te,"/"+d(t.name),1),a("span",We,d(t.description||"No description"),1),t.argumentHint?(s(),o("span",Ee,d(t.argumentHint),1)):g("",!0)],8,Ae))),128))])])):g("",!0),I.value.length>0?(s(),o("div",Ke,[c[9]||(c[9]=a("h3",{class:"section-title"}," User Skills ",-1)),a("div",Ge,[(s(!0),o(B,null,V(I.value,t=>(s(),o("button",{key:t.name,type:"button",class:"command-card","data-testid":`skill-${t.name}`,onClick:q=>D(t)},[a("span",Je,"/"+d(t.name),1),a("span",Qe,d(t.description||"No description"),1),t.argumentHint?(s(),o("span",Ye,d(t.argumentHint),1)):g("",!0)],8,Re))),128))])])):g("",!0),N.value.length>0?(s(),o("div",Xe,[c[10]||(c[10]=a("h3",{class:"section-title"}," Plugin Skills ",-1)),a("div",Ze,[(s(!0),o(B,null,V(N.value,t=>(s(),o("button",{key:t.name,type:"button",class:"command-card","data-testid":`skill-${t.name}`,onClick:q=>D(t)},[a("span",tt,"/"+d(t.name),1),a("span",st,d(t.description||"No description"),1),t.argumentHint?(s(),o("span",nt,d(t.argumentHint),1)):g("",!0)],8,et))),128))])])):g("",!0)]))]))}},ot=L(at,[["__scopeId","data-v-5da1571d"]]),lt={class:"arguments-form"},it={class:"form-header"},dt={class:"command-title"},rt={key:0,class:"command-description"},ct={key:0,class:"form-field"},mt={for:"skill-args",class:"field-label"},ut={key:0,class:"hint"},ht=["placeholder","onKeydown"],pt=["for"],ft={key:0,class:"required-indicator"},vt=["id","onUpdate:modelValue","required","data-testid"],gt=["value"],_t=["id","onUpdate:modelValue","required","placeholder","data-testid"],yt=["id","onUpdate:modelValue","required","placeholder","data-testid"],kt={class:"form-actions"},Ct=["disabled"],bt={key:0,class:"loading-spinner"},St={__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:n}){const l=e,y=n,r=j({}),b=j("");function _(){const k={};for(const u of l.command.arguments||[])k[u.name]=u.default!==void 0?u.default:"";r.value=k}G(()=>{_()}),T(()=>l.command,()=>{_()});const p=v(()=>{if(l.command.isSkill)return!0;for(const k of l.command.arguments||[])if(k.required){const u=r.value[k.name];if(u==null||u==="")return!1}return!0});function $(){if(!(!p.value||l.executing)){if(l.command.isSkill){y("submit",{_raw:b.value});return}y("submit",r.value)}}return(k,u)=>(s(),o("div",lt,[a("div",it,[a("h3",dt," /"+d(e.command.name),1),e.command.description?(s(),o("p",rt,d(e.command.description),1)):g("",!0)]),a("form",{class:"form-fields",onSubmit:A($,["prevent"])},[e.command.isSkill?(s(),o("div",ct,[a("label",mt,[u[2]||(u[2]=O(" Arguments ",-1)),e.command.argumentHint?(s(),o("span",ut,d(e.command.argumentHint),1)):g("",!0)]),F(a("input",{id:"skill-args","onUpdate:modelValue":u[0]||(u[0]=i=>b.value=i),type:"text",placeholder:e.command.argumentHint||"Enter arguments...",class:"field-input","data-testid":"skill-args-input",onKeydown:W(A($,["prevent"]),["enter"])},null,40,ht),[[M,b.value]])])):(s(!0),o(B,{key:1},V(e.command.arguments,i=>(s(),o("div",{key:i.name,class:"form-field"},[a("label",{for:`arg-${i.name}`,class:"field-label"},[O(d(i.label)+" ",1),i.required?(s(),o("span",ft,"*")):g("",!0)],8,pt),i.type==="select"?F((s(),o("select",{key:0,id:`arg-${i.name}`,"onUpdate:modelValue":m=>r.value[i.name]=m,required:i.required,class:"field-select","data-testid":`arg-${i.name}`},[u[3]||(u[3]=a("option",{value:"",disabled:""}," Select an option... ",-1)),(s(!0),o(B,null,V(i.options||[],m=>(s(),o("option",{key:m.value,value:m.value},d(m.label),9,gt))),128))],8,vt)),[[X,r.value[i.name]]]):i.type==="multiline"?F((s(),o("textarea",{key:1,id:`arg-${i.name}`,"onUpdate:modelValue":m=>r.value[i.name]=m,required:i.required,placeholder:i.placeholder||"",class:"field-textarea",rows:"4","data-testid":`arg-${i.name}`},null,8,_t)),[[M,r.value[i.name]]]):F((s(),o("input",{key:2,id:`arg-${i.name}`,"onUpdate:modelValue":m=>r.value[i.name]=m,type:"text",required:i.required,placeholder:i.placeholder||"",class:"field-input","data-testid":`arg-${i.name}`},null,8,yt)),[[M,r.value[i.name]]])]))),128)),a("div",kt,[a("button",{type:"button",class:"btn btn-secondary",onClick:u[1]||(u[1]=i=>y("back"))}," Back "),a("button",{type:"submit",class:"btn btn-primary",disabled:!p.value||e.executing,"data-testid":"execute-command-btn"},[e.executing?(s(),o("span",bt)):g("",!0),O(" "+d(e.executeLabel),1)],8,Ct)])],32)]))}},$t=L(St,[["__scopeId","data-v-e56eba15"]]),xt={class:"wizard-modal",role:"dialog","aria-labelledby":"wizard-title"},wt={class:"wizard-header"},Bt={id:"wizard-title",class:"wizard-title"},Vt={class:"wizard-content"},jt={__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:n}){const l=e,y=n,r=de(),b=K(),_=j(1),p=j(null),$=j(!1),k=v(()=>l.hideBuiltin?r.customCommands:r.commands),u=v(()=>l.mode==="insert"?"Insert Command":"Execute Command");T(()=>l.isOpen,async f=>{if(f){_.value=1,p.value=null,console.log("[SlashCommandWizard] Opening wizard, workingDirectory:",l.workingDirectory);try{l.workingDirectory?(await r.fetchCommands(l.workingDirectory),console.log("[SlashCommandWizard] Fetched commands:",r.commands.length,"commands")):console.warn("[SlashCommandWizard] No workingDirectory provided, skipping command fetch")}catch(S){console.error("[SlashCommandWizard] Failed to fetch commands:",S)}}});function i(){y("update:isOpen",!1),_.value=1,p.value=null}function m(f){if(p.value=f,f.isSkill){_.value=2;return}!f.arguments||f.arguments.length===0?x({}):_.value=2}function C(){_.value=1,p.value=null}async function x(f){if(p.value){if(l.mode==="insert"){const S=U(p.value,f);y("insert",{command:p.value,args:f,text:S}),i();return}if(!l.sessionId){b.error("No session available to execute command");return}$.value=!0;try{await r.executeCommand(l.sessionId,p.value.name,f),y("executed",{command:p.value,args:f}),b.success(`Command /${p.value.name} executed`),i()}catch(S){b.error(`Failed to execute command: ${S.message}`)}finally{$.value=!1}}}function U(f,S){let w=`/${f.name}`;if(f.isSkill){const N=S._raw||"";return N&&(w+=` ${N}`),w}const I=[];for(const N of f.arguments||[]){const z=S[N.name];z!==void 0&&z!==""&&(typeof z=="string"&&z.includes(" ")?I.push(`"${z}"`):I.push(String(z)))}return I.length>0&&(w+=` ${I.join(" ")}`),w}return(f,S)=>(s(),P(se,{to:"body"},[Z(te,{name:"modal"},{default:ee(()=>{var w;return[e.isOpen?(s(),o("div",{key:0,class:"wizard-overlay","data-testid":"slash-command-wizard",onClick:A(i,["self"]),onKeydown:W(i,["escape"])},[a("div",xt,[a("header",wt,[a("h2",Bt,d(_.value===1?"Slash Commands":`Configure /${(w=p.value)==null?void 0:w.name}`),1),a("button",{type:"button",class:"close-btn","aria-label":"Close wizard",onClick:i}," × ")]),a("div",Vt,[_.value===1?(s(),P(ot,{key:0,commands:k.value,loading:E(r).loading,error:E(r).error,"hide-builtin":e.hideBuiltin,onSelect:m,onClose:i},null,8,["commands","loading","error","hide-builtin"])):_.value===2&&p.value?(s(),P($t,{key:1,command:p.value,executing:$.value,"execute-label":u.value,onBack:C,onSubmit:x},null,8,["command","executing","execute-label"])):g("",!0)])])],32)):g("",!0)]}),_:1})]))}},Ut=L(jt,[["__scopeId","data-v-138fa079"]]);export{Dt as M,qt as S,Ut as a};
|
|
1
|
+
import{b as R}from"./EffortLevelSelector-VfBEelvO.js";import{_ as L,i as K,l as j,m as T,a as s,c as o,b as a,F as B,r as V,t as d,x as v,$ as J,L as Q,o as G,I as Y,j as F,v as M,J as W,k as g,e as O,h as A,n as X,G as P,d as Z,w as ee,u as E,T as te,V as se}from"./index-CSOPrlmq.js";import{a as H}from"./ApiClient-Dbs1H78V.js";const ne={class:"mode-selector"},ae=["value","disabled"],oe=["value"],le={__name:"ModeSelector",props:{sessionId:{type:String,default:null},modelValue:{type:String,default:null},disabled:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,{emit:n}){const l=e,y=n,r=R(),b=K(),_=j(!1),p=[{value:"plan",label:"Plan",description:"Agent plans before implementing"},{value:"standard",label:"Standard",description:"Balanced approach"},{value:"yolo",label:"YOLO",description:"Auto-approve mode"}],$=v(()=>{var m;return l.sessionId?(m=r.currentSession)==null?void 0:m.mode:l.modelValue}),k=j($.value),u=J(l,"modelValue");T([$,u],([m])=>{k.value=m},{flush:"sync"});async function i(m){if(!_.value&&k.value!==m)if(k.value=m,l.sessionId){_.value=!0;try{await r.updateSessionMode(l.sessionId,m)}catch(C){k.value=$.value,b.error(C.message)}finally{_.value=!1}}else y("update:modelValue",m)}return(m,C)=>(s(),o("div",ne,[a("select",{id:"mode-select",value:k.value,disabled:e.disabled||_.value,class:"mode-select",onChange:C[0]||(C[0]=x=>i(x.target.value))},[(s(),o(B,null,V(p,x=>a("option",{key:x.value,value:x.value},d(x.label),9,oe)),64))],40,ae)]))}},Dt=L(le,[["__scopeId","data-v-224ea1e6"]]),ie={__name:"SlashCommandButton",emits:["open"],setup(e,{emit:n}){const l=n;return(y,r)=>(s(),o("button",{type:"button",class:"slash-command-btn",title:"Slash Commands","data-testid":"slash-command-button",onClick:r[0]||(r[0]=b=>l("open"))},[...r[1]||(r[1]=[a("span",{class:"slash-icon"},"/",-1),a("span",{class:"slash-text"},"Commands",-1)])]))}},qt=L(ie,[["__scopeId","data-v-63f59216"]]),de=Q("slashCommands",{state:()=>({commands:[],loading:!1,error:null,lastFetchedDirectory:null,executing:!1}),getters:{builtinCommands:e=>e.commands.filter(n=>n.source==="builtin"),projectCommands:e=>e.commands.filter(n=>n.source==="project"),userCommands:e=>e.commands.filter(n=>n.source==="user"),pluginCommands:e=>e.commands.filter(n=>n.source==="plugin"),customCommands:e=>e.commands.filter(n=>n.source!=="builtin"),projectSkills:e=>e.commands.filter(n=>n.source==="project-skill"),userSkills:e=>e.commands.filter(n=>n.source==="user-skill"),pluginSkills:e=>e.commands.filter(n=>n.source==="plugin-skill"),allSkills:e=>e.commands.filter(n=>n.isSkill===!0),hasSkills:e=>e.commands.some(n=>n.isSkill===!0),allProjectItems:e=>e.commands.filter(n=>n.source==="project"||n.source==="project-skill"),allUserItems:e=>e.commands.filter(n=>n.source==="user"||n.source==="user-skill"),hasCommands:e=>e.commands.length>0,hasCustomCommands:e=>e.commands.some(n=>n.source==="project"||n.source==="user")},actions:{async fetchCommandsFromSession(e){this.loading=!0,this.error=null;try{const n=await H.getSession(e),l=n.slashCommands?JSON.parse(n.slashCommands):[];return this.commands=l,l}catch(n){throw this.error=n.message,n}finally{this.loading=!1}},async fetchCommands(e,n=!1){if(!n&&this.lastFetchedDirectory===e&&this.commands.length>0)return this.commands;this.loading=!0,this.error=null;try{const l=await H.getSlashCommands(e);return this.commands=l,this.lastFetchedDirectory=e,l}catch(l){throw this.error=l.message,l}finally{this.loading=!1}},async executeCommand(e,n,l={}){this.executing=!0,this.error=null;try{return await H.executeSlashCommand(e,n,l)}catch(y){throw this.error=y.message,y}finally{this.executing=!1}},getCommandByName(e){return this.commands.find(n=>n.name===e)||null},searchCommands(e){if(!e||!e.trim())return this.commands;const n=e.toLowerCase();return this.commands.filter(l=>l.name.toLowerCase().includes(n)||l.description&&l.description.toLowerCase().includes(n))},clearCommands(){this.commands=[],this.lastFetchedDirectory=null,this.error=null}}}),re={class:"command-grid"},ce={class:"search-box"},me={key:0,class:"loading-state"},ue={key:1,class:"error-state"},he={key:2,class:"empty-state"},pe={key:0},fe={key:1},ve={key:3,class:"command-sections"},ge={key:0,class:"command-section"},_e={class:"command-cards"},ye=["data-testid","onClick"],ke={class:"command-name"},Ce={class:"command-description"},be={key:1,class:"command-section"},Se={class:"command-cards"},$e=["data-testid","onClick"],xe={class:"command-name"},we={class:"command-description"},Be={key:0,class:"command-args-badge"},Ve={key:2,class:"command-section"},je={class:"command-cards"},Ie=["data-testid","onClick"],Ne={class:"command-name"},ze={class:"command-description"},De={key:0,class:"command-args-badge"},qe={key:3,class:"command-section"},Ue={class:"command-cards"},Fe=["data-testid","onClick"],Le={class:"command-name"},Me={class:"command-description"},Oe={key:0,class:"command-args-badge"},Pe={key:4,class:"command-section"},He={class:"command-cards"},Ae=["data-testid","onClick"],Te={class:"command-name"},We={class:"command-description"},Ee={key:0,class:"command-args-badge"},Ke={key:5,class:"command-section"},Ge={class:"command-cards"},Re=["data-testid","onClick"],Je={class:"command-name"},Qe={class:"command-description"},Ye={key:0,class:"command-args-badge"},Xe={key:6,class:"command-section"},Ze={class:"command-cards"},et=["data-testid","onClick"],tt={class:"command-name"},st={class:"command-description"},nt={key:0,class:"command-args-badge"},at={__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:n}){const l=e,y=n,r=j(""),b=j(null),_=v(()=>l.commands.filter(h=>h.source==="builtin")),p=v(()=>l.commands.filter(h=>h.source==="project")),$=v(()=>l.commands.filter(h=>h.source==="user")),k=v(()=>l.commands.filter(h=>h.source==="plugin")),u=v(()=>l.commands.filter(h=>h.source==="project-skill")),i=v(()=>l.commands.filter(h=>h.source==="user-skill")),m=v(()=>l.commands.filter(h=>h.source==="plugin-skill"));function C(h){if(!r.value.trim())return h;const c=r.value.toLowerCase();return h.filter(t=>t.name.toLowerCase().includes(c)||t.description&&t.description.toLowerCase().includes(c))}const x=v(()=>C(_.value)),U=v(()=>C(p.value)),f=v(()=>C($.value)),S=v(()=>C(k.value)),w=v(()=>C(u.value)),I=v(()=>C(i.value)),N=v(()=>C(m.value)),z=v(()=>[...x.value,...U.value,...f.value,...S.value,...w.value,...I.value,...N.value]);function D(h){y("select",h)}return G(()=>{Y(()=>{var h;(h=b.value)==null||h.focus()})}),(h,c)=>(s(),o("div",re,[a("div",ce,[F(a("input",{ref_key:"searchInput",ref:b,"onUpdate:modelValue":c[0]||(c[0]=t=>r.value=t),type:"text",placeholder:"Search commands...",class:"search-input","data-testid":"command-search",onKeydown:c[1]||(c[1]=W(t=>y("close"),["escape"]))},null,544),[[M,r.value]])]),e.loading?(s(),o("div",me,[...c[2]||(c[2]=[a("span",{class:"loading-spinner"},null,-1),a("span",null,"Loading commands...",-1)])])):e.error?(s(),o("div",ue,[c[3]||(c[3]=a("span",{class:"error-icon"},"⚠️",-1)),a("span",null,d(e.error),1)])):z.value.length===0?(s(),o("div",he,[r.value?(s(),o("span",pe,'No commands match "'+d(r.value)+'"',1)):(s(),o("span",fe,"No slash commands available"))])):(s(),o("div",ve,[x.value.length>0&&!e.hideBuiltin?(s(),o("div",ge,[c[4]||(c[4]=a("h3",{class:"section-title"}," Built-in Commands ",-1)),a("div",_e,[(s(!0),o(B,null,V(x.value,t=>(s(),o("button",{key:t.name,type:"button",class:"command-card","data-testid":`command-${t.name}`,onClick:q=>D(t)},[a("span",ke,"/"+d(t.name),1),a("span",Ce,d(t.description||"No description"),1)],8,ye))),128))])])):g("",!0),U.value.length>0?(s(),o("div",be,[c[5]||(c[5]=a("h3",{class:"section-title"}," Project Commands ",-1)),a("div",Se,[(s(!0),o(B,null,V(U.value,t=>(s(),o("button",{key:t.name,type:"button",class:"command-card","data-testid":`command-${t.name}`,onClick:q=>D(t)},[a("span",xe,"/"+d(t.name),1),a("span",we,d(t.description||"No description"),1),t.arguments.length>0?(s(),o("span",Be,d(t.arguments.length)+" arg"+d(t.arguments.length>1?"s":""),1)):g("",!0)],8,$e))),128))])])):g("",!0),f.value.length>0?(s(),o("div",Ve,[c[6]||(c[6]=a("h3",{class:"section-title"}," User Commands ",-1)),a("div",je,[(s(!0),o(B,null,V(f.value,t=>(s(),o("button",{key:t.name,type:"button",class:"command-card","data-testid":`command-${t.name}`,onClick:q=>D(t)},[a("span",Ne,"/"+d(t.name),1),a("span",ze,d(t.description||"No description"),1),t.arguments.length>0?(s(),o("span",De,d(t.arguments.length)+" arg"+d(t.arguments.length>1?"s":""),1)):g("",!0)],8,Ie))),128))])])):g("",!0),S.value.length>0?(s(),o("div",qe,[c[7]||(c[7]=a("h3",{class:"section-title"}," Plugin Commands ",-1)),a("div",Ue,[(s(!0),o(B,null,V(S.value,t=>(s(),o("button",{key:t.name,type:"button",class:"command-card","data-testid":`command-${t.name}`,onClick:q=>D(t)},[a("span",Le,"/"+d(t.name),1),a("span",Me,d(t.description||"No description"),1),t.arguments.length>0?(s(),o("span",Oe,d(t.arguments.length)+" arg"+d(t.arguments.length>1?"s":""),1)):g("",!0)],8,Fe))),128))])])):g("",!0),w.value.length>0?(s(),o("div",Pe,[c[8]||(c[8]=a("h3",{class:"section-title"}," Project Skills ",-1)),a("div",He,[(s(!0),o(B,null,V(w.value,t=>(s(),o("button",{key:t.name,type:"button",class:"command-card","data-testid":`skill-${t.name}`,onClick:q=>D(t)},[a("span",Te,"/"+d(t.name),1),a("span",We,d(t.description||"No description"),1),t.argumentHint?(s(),o("span",Ee,d(t.argumentHint),1)):g("",!0)],8,Ae))),128))])])):g("",!0),I.value.length>0?(s(),o("div",Ke,[c[9]||(c[9]=a("h3",{class:"section-title"}," User Skills ",-1)),a("div",Ge,[(s(!0),o(B,null,V(I.value,t=>(s(),o("button",{key:t.name,type:"button",class:"command-card","data-testid":`skill-${t.name}`,onClick:q=>D(t)},[a("span",Je,"/"+d(t.name),1),a("span",Qe,d(t.description||"No description"),1),t.argumentHint?(s(),o("span",Ye,d(t.argumentHint),1)):g("",!0)],8,Re))),128))])])):g("",!0),N.value.length>0?(s(),o("div",Xe,[c[10]||(c[10]=a("h3",{class:"section-title"}," Plugin Skills ",-1)),a("div",Ze,[(s(!0),o(B,null,V(N.value,t=>(s(),o("button",{key:t.name,type:"button",class:"command-card","data-testid":`skill-${t.name}`,onClick:q=>D(t)},[a("span",tt,"/"+d(t.name),1),a("span",st,d(t.description||"No description"),1),t.argumentHint?(s(),o("span",nt,d(t.argumentHint),1)):g("",!0)],8,et))),128))])])):g("",!0)]))]))}},ot=L(at,[["__scopeId","data-v-5da1571d"]]),lt={class:"arguments-form"},it={class:"form-header"},dt={class:"command-title"},rt={key:0,class:"command-description"},ct={key:0,class:"form-field"},mt={for:"skill-args",class:"field-label"},ut={key:0,class:"hint"},ht=["placeholder","onKeydown"],pt=["for"],ft={key:0,class:"required-indicator"},vt=["id","onUpdate:modelValue","required","data-testid"],gt=["value"],_t=["id","onUpdate:modelValue","required","placeholder","data-testid"],yt=["id","onUpdate:modelValue","required","placeholder","data-testid"],kt={class:"form-actions"},Ct=["disabled"],bt={key:0,class:"loading-spinner"},St={__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:n}){const l=e,y=n,r=j({}),b=j("");function _(){const k={};for(const u of l.command.arguments||[])k[u.name]=u.default!==void 0?u.default:"";r.value=k}G(()=>{_()}),T(()=>l.command,()=>{_()});const p=v(()=>{if(l.command.isSkill)return!0;for(const k of l.command.arguments||[])if(k.required){const u=r.value[k.name];if(u==null||u==="")return!1}return!0});function $(){if(!(!p.value||l.executing)){if(l.command.isSkill){y("submit",{_raw:b.value});return}y("submit",r.value)}}return(k,u)=>(s(),o("div",lt,[a("div",it,[a("h3",dt," /"+d(e.command.name),1),e.command.description?(s(),o("p",rt,d(e.command.description),1)):g("",!0)]),a("form",{class:"form-fields",onSubmit:A($,["prevent"])},[e.command.isSkill?(s(),o("div",ct,[a("label",mt,[u[2]||(u[2]=O(" Arguments ",-1)),e.command.argumentHint?(s(),o("span",ut,d(e.command.argumentHint),1)):g("",!0)]),F(a("input",{id:"skill-args","onUpdate:modelValue":u[0]||(u[0]=i=>b.value=i),type:"text",placeholder:e.command.argumentHint||"Enter arguments...",class:"field-input","data-testid":"skill-args-input",onKeydown:W(A($,["prevent"]),["enter"])},null,40,ht),[[M,b.value]])])):(s(!0),o(B,{key:1},V(e.command.arguments,i=>(s(),o("div",{key:i.name,class:"form-field"},[a("label",{for:`arg-${i.name}`,class:"field-label"},[O(d(i.label)+" ",1),i.required?(s(),o("span",ft,"*")):g("",!0)],8,pt),i.type==="select"?F((s(),o("select",{key:0,id:`arg-${i.name}`,"onUpdate:modelValue":m=>r.value[i.name]=m,required:i.required,class:"field-select","data-testid":`arg-${i.name}`},[u[3]||(u[3]=a("option",{value:"",disabled:""}," Select an option... ",-1)),(s(!0),o(B,null,V(i.options||[],m=>(s(),o("option",{key:m.value,value:m.value},d(m.label),9,gt))),128))],8,vt)),[[X,r.value[i.name]]]):i.type==="multiline"?F((s(),o("textarea",{key:1,id:`arg-${i.name}`,"onUpdate:modelValue":m=>r.value[i.name]=m,required:i.required,placeholder:i.placeholder||"",class:"field-textarea",rows:"4","data-testid":`arg-${i.name}`},null,8,_t)),[[M,r.value[i.name]]]):F((s(),o("input",{key:2,id:`arg-${i.name}`,"onUpdate:modelValue":m=>r.value[i.name]=m,type:"text",required:i.required,placeholder:i.placeholder||"",class:"field-input","data-testid":`arg-${i.name}`},null,8,yt)),[[M,r.value[i.name]]])]))),128)),a("div",kt,[a("button",{type:"button",class:"btn btn-secondary",onClick:u[1]||(u[1]=i=>y("back"))}," Back "),a("button",{type:"submit",class:"btn btn-primary",disabled:!p.value||e.executing,"data-testid":"execute-command-btn"},[e.executing?(s(),o("span",bt)):g("",!0),O(" "+d(e.executeLabel),1)],8,Ct)])],32)]))}},$t=L(St,[["__scopeId","data-v-e56eba15"]]),xt={class:"wizard-modal",role:"dialog","aria-labelledby":"wizard-title"},wt={class:"wizard-header"},Bt={id:"wizard-title",class:"wizard-title"},Vt={class:"wizard-content"},jt={__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:n}){const l=e,y=n,r=de(),b=K(),_=j(1),p=j(null),$=j(!1),k=v(()=>l.hideBuiltin?r.customCommands:r.commands),u=v(()=>l.mode==="insert"?"Insert Command":"Execute Command");T(()=>l.isOpen,async f=>{if(f){_.value=1,p.value=null,console.log("[SlashCommandWizard] Opening wizard, workingDirectory:",l.workingDirectory);try{l.workingDirectory?(await r.fetchCommands(l.workingDirectory),console.log("[SlashCommandWizard] Fetched commands:",r.commands.length,"commands")):console.warn("[SlashCommandWizard] No workingDirectory provided, skipping command fetch")}catch(S){console.error("[SlashCommandWizard] Failed to fetch commands:",S)}}});function i(){y("update:isOpen",!1),_.value=1,p.value=null}function m(f){if(p.value=f,f.isSkill){_.value=2;return}!f.arguments||f.arguments.length===0?x({}):_.value=2}function C(){_.value=1,p.value=null}async function x(f){if(p.value){if(l.mode==="insert"){const S=U(p.value,f);y("insert",{command:p.value,args:f,text:S}),i();return}if(!l.sessionId){b.error("No session available to execute command");return}$.value=!0;try{await r.executeCommand(l.sessionId,p.value.name,f),y("executed",{command:p.value,args:f}),b.success(`Command /${p.value.name} executed`),i()}catch(S){b.error(`Failed to execute command: ${S.message}`)}finally{$.value=!1}}}function U(f,S){let w=`/${f.name}`;if(f.isSkill){const N=S._raw||"";return N&&(w+=` ${N}`),w}const I=[];for(const N of f.arguments||[]){const z=S[N.name];z!==void 0&&z!==""&&(typeof z=="string"&&z.includes(" ")?I.push(`"${z}"`):I.push(String(z)))}return I.length>0&&(w+=` ${I.join(" ")}`),w}return(f,S)=>(s(),P(se,{to:"body"},[Z(te,{name:"modal"},{default:ee(()=>{var w;return[e.isOpen?(s(),o("div",{key:0,class:"wizard-overlay","data-testid":"slash-command-wizard",onClick:A(i,["self"]),onKeydown:W(i,["escape"])},[a("div",xt,[a("header",wt,[a("h2",Bt,d(_.value===1?"Slash Commands":`Configure /${(w=p.value)==null?void 0:w.name}`),1),a("button",{type:"button",class:"close-btn","aria-label":"Close wizard",onClick:i}," × ")]),a("div",Vt,[_.value===1?(s(),P(ot,{key:0,commands:k.value,loading:E(r).loading,error:E(r).error,"hide-builtin":e.hideBuiltin,onSelect:m,onClose:i},null,8,["commands","loading","error","hide-builtin"])):_.value===2&&p.value?(s(),P($t,{key:1,command:p.value,executing:$.value,"execute-label":u.value,onBack:C,onSubmit:x},null,8,["command","executing","execute-label"])):g("",!0)])])],32)):g("",!0)]}),_:1})]))}},Ut=L(jt,[["__scopeId","data-v-138fa079"]]);export{Dt as M,qt as S,Ut as a};
|
package/packages/web/dist/assets/{SummarySettingsView-DTbh7uAF.js → SummarySettingsView-KvgSGHdd.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as g,i as y,o as h,m as _,u as w,a as r,c as u,b as s,e as c,j as k,p as x,d as V,t as f,k as v,h as T,l as m}from"./index-
|
|
1
|
+
import{_ as g,i as y,o as h,m as _,u as w,a as r,c as u,b as s,e as c,j as k,p as x,d as V,t as f,k as v,h as T,l as m}from"./index-CSOPrlmq.js";import{u as P}from"./settings-CZ7Pc-Pt.js";import{R as C}from"./ResizableTextarea-_kHi1Mg3.js";import"./ApiClient-Dbs1H78V.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"},E=["disabled"],I={__name:"SummarySettingsView",setup(L){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,E)])],32))}},G=g(I,[["__scopeId","data-v-f7c13593"]]);export{G as default};
|
package/packages/web/dist/assets/{TemplateDetailView-BOnhkdtH.js → TemplateDetailView-BhOjYIvS.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as N,i as $,o as G,a as s,c as r,b as t,e as y,d as p,w as O,j as v,v as S,n as V,F as R,r as F,t as i,k as B,h as C,l as d,x as I,f as q,g as P,s as z}from"./index-
|
|
1
|
+
import{_ as N,i as $,o as G,a as s,c as r,b as t,e as y,d as p,w as O,j as v,v as S,n as V,F as R,r as F,t as i,k as B,h as C,l as d,x as I,f as q,g as P,s as z}from"./index-CSOPrlmq.js";import{u as A,E as H}from"./EffortLevelSelector-VfBEelvO.js";import{a as Y}from"./ApiClient-Dbs1H78V.js";import{M as J}from"./ModelSelector-DSxaZWBL.js";import{I as K}from"./InterpolationHelp-Dc1Y0T6v.js";import{R as Q}from"./ResizableTextarea-_kHi1Mg3.js";import"./sessions-VDrd87yA.js";import"./settings-CZ7Pc-Pt.js";import"./providers-B__J6FX0.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-CSOPrlmq.js";import{a as o}from"./ApiClient-Dbs1H78V.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};
|