@loicngr/kobo 1.6.6 → 1.6.7
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/dist/server/db/migrations.js +13 -0
- package/dist/server/db/schema.js +8 -0
- package/dist/server/index.js +3 -1
- package/dist/server/routes/workspaces.js +30 -0
- package/dist/server/services/agent/orchestrator.js +18 -0
- package/dist/server/services/wakeup-service.js +154 -0
- package/dist/server/services/workspace-service.js +7 -0
- package/package.json +1 -1
- package/src/client/dist/spa/assets/{ActivityFeed-BmGNYNux.js → ActivityFeed-yFyT9xvb.js} +1 -1
- package/src/client/dist/spa/assets/{CreatePage-BC4P1Xq2.js → CreatePage-DRaf5RN1.js} +1 -1
- package/src/client/dist/spa/assets/{DiffViewer-C6d1h3-o.js → DiffViewer-DQvXQTEa.js} +2 -2
- package/src/client/dist/spa/assets/{HealthPage-usVzGjv-.js → HealthPage-Bme28RgK.js} +1 -1
- package/src/client/dist/spa/assets/{MainLayout-DcltT6j8.js → MainLayout-DbElmr1D.js} +2 -2
- package/src/client/dist/spa/assets/{SearchPage-DqVwM-Nw.js → SearchPage-C-WJxRPe.js} +1 -1
- package/src/client/dist/spa/assets/{SettingsPage-BKKAIJXH.js → SettingsPage-BfJMIJnY.js} +1 -1
- package/src/client/dist/spa/assets/{WorkspacePage-BIquds-p.css → WorkspacePage-CM676R3B.css} +1 -1
- package/src/client/dist/spa/assets/WorkspacePage-CjPLcpSW.js +4 -0
- package/src/client/dist/spa/assets/{build-path-tree-BaiH1Val.js → build-path-tree-DuCsR4mF.js} +1 -1
- package/src/client/dist/spa/assets/{cssMode-DV77SXAp.js → cssMode-Du10lHBq.js} +1 -1
- package/src/client/dist/spa/assets/{documents-DLpLMq-0.js → documents-AXuTuYab.js} +1 -1
- package/src/client/dist/spa/assets/{editor.api-BGhylbsn.js → editor.api-rtN9xKX_.js} +1 -1
- package/src/client/dist/spa/assets/{editor.main-qZAJW6DY.js → editor.main-Bjkd_T6v.js} +3 -3
- package/src/client/dist/spa/assets/{freemarker2-BKAXCv8N.js → freemarker2-A3kMxtRq.js} +1 -1
- package/src/client/dist/spa/assets/{handlebars-v0nKPEWi.js → handlebars-D_rpe5yL.js} +1 -1
- package/src/client/dist/spa/assets/{html-BRupIzA4.js → html-DXwQospq.js} +1 -1
- package/src/client/dist/spa/assets/{htmlMode-BihW-P2O.js → htmlMode-D5FQHZJa.js} +1 -1
- package/src/client/dist/spa/assets/i18n-ByXz1S2J.js +1 -0
- package/src/client/dist/spa/assets/index-C-IVb0lG.js +2 -0
- package/src/client/dist/spa/assets/{javascript-BJDZ_NcB.js → javascript-Co6I4XSh.js} +1 -1
- package/src/client/dist/spa/assets/{jsonMode-C9JdqFNv.js → jsonMode-Bp7yDKPn.js} +1 -1
- package/src/client/dist/spa/assets/{liquid-Lk-oZkkL.js → liquid-DNcFzYOe.js} +1 -1
- package/src/client/dist/spa/assets/{mdx-DXTW2dI0.js → mdx-DBavZVIR.js} +1 -1
- package/src/client/dist/spa/assets/{models-D_Rq_B4d.js → models-CBrNFRtB.js} +1 -1
- package/src/client/dist/spa/assets/{monaco.contribution-sDg_eF3E.js → monaco.contribution-DUmoyOMN.js} +2 -2
- package/src/client/dist/spa/assets/{python-DWz3NVjv.js → python-DmL-S2ZK.js} +1 -1
- package/src/client/dist/spa/assets/{razor-BwkYCkDS.js → razor-Bpa1oEQM.js} +1 -1
- package/src/client/dist/spa/assets/{tsMode-C0izvBnL.js → tsMode-LSHCraGE.js} +1 -1
- package/src/client/dist/spa/assets/{typescript-CKsF3o2F.js → typescript-2KSBXoSD.js} +1 -1
- package/src/client/dist/spa/assets/{xml-D2KHAqfG.js → xml-CCjUFDf8.js} +1 -1
- package/src/client/dist/spa/assets/{yaml-Bh60Z-Sr.js → yaml-w5memWnS.js} +1 -1
- package/src/client/dist/spa/index.html +1 -1
- package/src/client/dist/spa/assets/WorkspacePage-B-iEkrN1.js +0 -4
- package/src/client/dist/spa/assets/i18n-B4u2URrK.js +0 -1
- package/src/client/dist/spa/assets/index-CDTpNA2L.js +0 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><title>Kōbō</title><link rel=icon type=image/svg+xml href=/favicon.svg><meta charset=utf-8><meta name=description content="Kōbō — multi-workspace agent manager for Claude Code"><meta name=format-detection content="telephone=no"><meta name=msapplication-tap-highlight content=no><meta name=viewport content="user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-width,height=device-height"> <script type="module" crossorigin src="/assets/index-
|
|
1
|
+
<!DOCTYPE html><html><head><title>Kōbō</title><link rel=icon type=image/svg+xml href=/favicon.svg><meta charset=utf-8><meta name=description content="Kōbō — multi-workspace agent manager for Claude Code"><meta name=format-detection content="telephone=no"><meta name=msapplication-tap-highlight content=no><meta name=viewport content="user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-width,height=device-height"> <script type="module" crossorigin src="/assets/index-C-IVb0lG.js"></script>
|
|
2
2
|
<link rel="modulepreload" crossorigin href="/assets/runtime-core.esm-bundler-C3IgBgY5.js">
|
|
3
3
|
<link rel="modulepreload" crossorigin href="/assets/vue-i18n-eUDnMrPl.js">
|
|
4
4
|
<link rel="modulepreload" crossorigin href="/assets/QIcon-B0-pH3Qs.js">
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ActivityFeed-BmGNYNux.js","assets/index-CDTpNA2L.js","assets/vue-i18n-eUDnMrPl.js","assets/runtime-core.esm-bundler-C3IgBgY5.js","assets/QIcon-B0-pH3Qs.js","assets/use-id-BmXMngYX.js","assets/QSeparator-DNSiXYrN.js","assets/QBtn-CyzfM9-_.js","assets/use-checkbox-BduGd8xg.js","assets/private.use-form-C5G_3nU5.js","assets/QDialog-G448EJG4.js","assets/scroll-C-Vz5BD9.js","assets/symbols-DCYodwb2.js","assets/index-eX_lKHSg.css","assets/_plugin-vue_export-helper-Cj6tcsj6.js","assets/documents-DLpLMq-0.js","assets/QExpansionItem-HLBjHx-0.js","assets/QItemSection-BzWLL-V-.js","assets/QItemLabel-Czw5g0px.js","assets/QSlideTransition-s6ZkYsLs.js","assets/QScrollArea-CBW6shMb.js","assets/touch-B2uuAH_y.js","assets/TouchPan-Y_Bxzun2.js","assets/QTooltip-DbEBexRN.js","assets/QSpinnerDots-By20ptst.js","assets/ActivityFeed-ZLFD0ABF.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{E as e,F as t,H as n,L as r,M as i,Q as a,S as o,T as s,U as c,W as l,_ as u,_t as d,a as f,bt as p,d as m,f as h,g,h as _,l as v,p as y,r as b,rt as x,u as S,v as C,w,y as T}from"./runtime-core.esm-bundler-C3IgBgY5.js";import{I as ee,L as te,O as E,n as ne,r as D,s as O,t as k}from"./QIcon-B0-pH3Qs.js";import{t as re}from"./QSeparator-DNSiXYrN.js";import{t as ie}from"./QDialog-G448EJG4.js";import{t as A}from"./QBtn-CyzfM9-_.js";import{n as ae}from"./vue-i18n-eUDnMrPl.js";import{C as j,E as oe,O as M,T as se,b as N,d as P,f as F,g as ce,i as le,m as I,p as ue,v as de}from"./index-CDTpNA2L.js";import{t as fe}from"./QSpinnerDots-By20ptst.js";import{n as pe,t as me}from"./QItemSection-BzWLL-V-.js";import{t as he}from"./QItemLabel-Czw5g0px.js";import{t as L}from"./QTooltip-DbEBexRN.js";import{t as R}from"./_plugin-vue_export-helper-Cj6tcsj6.js";import{t as ge}from"./QBadge-Di02fu2H.js";import{t as _e}from"./QSpace-0zdF1m5x.js";import{t as ve}from"./QChip-1nQ_KMFF.js";import{n as z,t as B}from"./rate-limit-labels-Su-L56A2.js";import{t as ye}from"./use-quasar-BBrzedjR.js";import{t as be}from"./ClosePopup-DTgXzcoa.js";import{t as xe}from"./formatters-D7eTm7uK.js";import{n as Se,t as Ce}from"./models-D_Rq_B4d.js";import{t as we}from"./QPage-BTzNQlb1.js";var V={key:0,class:`row items-center q-pa-xs q-px-sm bg-dark text-grey-5 text-caption`},H={key:0,class:`q-ml-xs`},Te=C({__name:`AgentBusyBanner`,setup(e){let{t:n}=ae(),r=de(),i=w(`openDrawerTab`),a=v(()=>r.currentSubagents.filter(e=>e.status===`running`).length),o=v(()=>{let e=r.selectedWorkspace;return e?N(e.status)||a.value>0:!1});function s(){i?.(`subagents`)}return(e,r)=>o.value?(t(),y(`div`,V,[g(fe,{size:`14px`,color:`indigo-4`,class:`q-mr-sm`}),S(`span`,null,p(x(n)(`agentBusy.banner`)),1),a.value>0?(t(),y(`span`,H,` — `+p(x(n)(`agentBusy.subagentsRunning`,{n:a.value},a.value)),1)):h(``,!0),a.value>0?(t(),y(b,{key:1},[g(_e),S(`span`,{class:`text-indigo-4 cursor-pointer`,style:{"text-decoration":`underline`},onClick:s},p(x(n)(`agentBusy.viewSubagents`)),1)],64)):h(``,!0)])):h(``,!0)}}),U=E({name:`QBanner`,props:{...D,inlineActions:Boolean,dense:Boolean,rounded:Boolean},setup(e,{slots:t}){let{proxy:{$q:n}}=T(),r=ne(e,n),i=v(()=>`q-banner row items-center`+(e.dense===!0?` q-banner--dense`:``)+(r.value===!0?` q-banner--dark q-dark`:``)+(e.rounded===!0?` rounded-borders`:``)),a=v(()=>`q-banner__actions row items-center justify-end col-${e.inlineActions===!0?`auto`:`all`}`);return()=>{let n=[o(`div`,{class:`q-banner__avatar col-auto row items-center self-start`},O(t.avatar)),o(`div`,{class:`q-banner__content col text-body2`},O(t.default))],r=O(t.action);return r!==void 0&&n.push(o(`div`,{class:a.value},r)),o(`div`,{class:i.value+(e.inlineActions===!1&&r!==void 0?` q-banner--top-padding`:``),role:`alert`},n)}}}),W={class:`text-subtitle2`},G={class:`text-caption`},Ee=C({__name:`AgentErrorBanner`,props:{workspaceId:{}},setup(e){let n=e,{t:r}=ae(),i=j();function a(e){let t=e.replace(/\u001b\[\d+m/g,``).trim();return/^warning:/i.test(t)}let o=v(()=>{let e=i.eventsFor(n.workspaceId);for(let t=e.length-1;t>=0;t--){let n=e[t];if(!(n.kind!==`error`||n.category===`quota`)&&!(n.category===`other`&&a(n.message)))return n}return null});return(e,n)=>o.value?(t(),m(U,{key:0,class:`bg-negative text-white q-ma-sm`},{avatar:c(()=>[g(k,{name:`error_outline`})]),default:c(()=>[S(`div`,W,p(x(r)(`agent.error.${o.value.category}`)),1),S(`div`,G,p(o.value.message),1)]),_:1})):h(``,!0)}}),K={class:`text-weight-medium`},q={key:0,class:`text-caption`},J={key:1,class:`text-caption`},Y={class:`text-caption q-mt-sm`},X=R(C({__name:`QuotaFooter`,setup(e){let n=de(),{t:i}=ae(),a=v(()=>n.globalRateLimitUsage);function o(e,t){return!e||e.trim().length===0?i(`stats.usageBucket`,{n:t+1}):B(e,i)}let s=v(()=>{let e=a.value;return!e||e.buckets.length===0?`${i(`quotaFooter.placeholder`)} 0%`:e.buckets.map((e,t)=>`${o(e.label,t)} ${e.usedPct.toFixed(0)}%`).join(` · `)}),l=v(()=>{let e=a.value;if(!e)return``;try{return new Date(e.updatedAt).toLocaleTimeString()}catch{return e.updatedAt}});return(e,n)=>(t(),y(`span`,{class:d([`quota-footer`,{"quota-footer--empty":!a.value}])},[_(p(s.value)+` `,1),a.value?(t(),m(L,{key:0},{default:c(()=>[S(`div`,K,p(e.$t(`quotaFooter.tooltipTitle`)),1),(t(!0),y(b,null,r(a.value.buckets,(n,r)=>(t(),y(`div`,{key:n.id,class:`q-mt-xs`},[S(`div`,null,p(o(n.label,r))+` — `+p(n.usedPct.toFixed(0))+`% `+p(e.$t(`stats.used`)),1),n.details?(t(),y(`div`,q,p(n.details),1)):h(``,!0),n.resetAt?(t(),y(`div`,J,p(e.$t(`stats.resetsAt`,{value:n.resetAt})),1)):h(``,!0)]))),128)),S(`div`,Y,p(e.$t(`quotaFooter.lastUpdated`,{time:l.value})),1)]),_:1})):(t(),m(L,{key:1},{default:c(()=>[_(p(e.$t(`quotaFooter.noData`)),1)]),_:1}))],2))}}),[[`__scopeId`,`data-v-0c047f57`]]);function Z(e,t){return e.replace(/\{(\w+)\}/g,(e,n)=>{let r=t[n];return r==null?e:String(r)})}function De(e){let t={};return e.workspace&&(t.workspace_name=e.workspace.name,t.working_branch=e.workspace.workingBranch,t.source_branch=e.workspace.sourceBranch,t.project_path=e.workspace.projectPath,t.worktree_path=`${e.workspace.projectPath}/.worktrees/${e.workspace.workingBranch}`),e.gitStats&&(t.commit_count=e.gitStats.commitCount,t.unpushed_count=e.gitStats.unpushedCount,t.files_changed=e.gitStats.filesChanged,t.insertions=e.gitStats.insertions,t.deletions=e.gitStats.deletions,e.gitStats.prNumber!=null&&(t.pr_number=e.gitStats.prNumber),e.gitStats.prUrl&&(t.pr_url=e.gitStats.prUrl),e.gitStats.prState&&(t.pr_state=e.gitStats.prState)),e.sessionName&&(t.session_name=e.sessionName),t}var Oe={key:0,class:`row items-center q-gutter-xs q-mb-xs q-px-xs`,style:{"flex-wrap":`wrap`}},ke={class:`text-caption image-tag-label`},Ae={key:1,class:`skills-popup rounded-borders`},je={class:`skills-section-header`},Q=[`onMousedown`],Me={class:`skill-name text-caption`},Ne={class:`skills-section-header`},Pe=[`onMousedown`],Fe={class:`skill-name text-caption`},Ie={key:0,class:`skill-description text-caption text-grey-7 q-ml-xs`},Le={class:`skills-section-header`},Re=[`onMousedown`],ze={class:`skill-name text-caption`},Be={key:0,class:`skill-description text-caption text-grey-7 q-ml-xs`},Ve={key:2,class:`queue-banner row items-center q-pa-xs q-px-sm text-caption text-amber-6`},He={class:`row items-center q-gutter-sm`},Ue={class:`chat-hint row items-center text-caption text-grey-8`},$=R(C({__name:`ChatInput`,props:{workspaceId:{}},setup(o){let s=o,{t:l}=ae(),u=ye(),f=de(),x=ce(),C=se(),w=a(``),T=a(!1),ee=v(()=>N(f.selectedWorkspace?.status));async function E(){if(s.workspaceId){T.value=!0;try{await f.interruptAgent(s.workspaceId),u.notify({type:`info`,message:l(`workspacePage.interrupted`),position:`top`,timeout:3e3})}catch(e){let t=e instanceof Error?e.message:l(`workspacePage.interruptFailed`);u.notify({type:`negative`,message:t,position:`top`,timeout:6e3})}finally{T.value=!1}}}let ne=v(()=>N(f.selectedWorkspace?.status)),D=v(()=>!!f.queuedMessages[s.workspaceId]),O=a(null);function re(){let e=O.value;return e?e.getNativeElement?.()??null:null}let ie=a([]),j=a(!1),oe=a(``),M=a(0),P=v(()=>{let e=oe.value.toLowerCase(),t=t=>e===``?!0:t.toLowerCase().includes(e);return{skills:ie.value.filter(e=>t(e)).map(e=>({type:`skill`,name:e})),kobo:Object.keys(z).map(e=>e.replace(/^\//,``)).filter(e=>t(e)).map(e=>({type:`kobo`,name:e})),templates:C.templates.filter(e=>t(e.slug)).map(e=>({type:`template`,name:e.slug,description:e.description}))}}),F=v(()=>[...P.value.skills,...P.value.kobo,...P.value.templates]);n(()=>F.value.length,e=>{if(e===0){M.value=0;return}M.value>=e&&(M.value=e-1)});let I=a([]),ue=a(null),pe=a(!1),me=[`image/png`,`image/jpeg`,`image/gif`,`image/webp`];function he(t){let n=re(),r=n?.selectionStart??w.value.length,i=w.value.slice(0,r),a=w.value.slice(r);w.value=i+t+a,e(()=>{if(n){let e=r+t.length;n.focus(),n.setSelectionRange(e,e)}})}function R(){let e=`[image: ${l(`chatInput.uploading`)}]`,t=new Set(I.value.map(e=>e.placeholder));if(!t.has(e))return e;let n=2;for(;t.has(`[image: ${l(`chatInput.uploading`)} ${n}]`);)n++;return`[image: ${l(`chatInput.uploading`)} ${n}]`}async function ge(e){if(!me.includes(e.type))return;let t=crypto.randomUUID(),n=e.name||`pasted-image.png`,r=R(),i={tempId:t,originalName:n,placeholder:r,status:`uploading`};I.value.push(i),he(r);try{let n=new FormData;n.append(`image`,e);let r=await fetch(`/api/workspaces/${s.workspaceId}/images`,{method:`POST`,body:n});if(!r.ok){let e=await r.json();throw Error(e.error||`Upload failed`)}let i=await r.json(),a=I.value.find(e=>e.tempId===t);if(a){a.uid=i.uid,a.path=i.path,a.status=`ready`;let e=`[image: ${i.path}]`;e!==a.placeholder&&(w.value=w.value.split(a.placeholder).join(e),a.placeholder=e)}}catch{let e=I.value.find(e=>e.tempId===t);e&&(e.status=`error`)}}function ve(e,t){fetch(`/api/workspaces/${e}/images/${t}`,{method:`DELETE`}).catch(()=>{})}function B(e){let t=I.value.find(t=>t.tempId===e);if(t){I.value=I.value.filter(t=>t.tempId!==e);{let e=t.placeholder.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);w.value=w.value.replace(RegExp(`${e}\\s?`,`g`),``)}t.uid&&ve(s.workspaceId,t.uid)}}function be(e){if(e.clipboardData){for(let t of Array.from(e.clipboardData.items))if(t.type.startsWith(`image/`)){let e=t.getAsFile();e&&ge(e)}}}function xe(e){if(e.preventDefault(),pe.value=!1,e.dataTransfer)for(let t of Array.from(e.dataTransfer.files))me.includes(t.type)&&ge(t)}function Se(e){e.preventDefault(),pe.value=!0}function Ce(){pe.value=!1}function we(e){let t=e.target;if(t.files){for(let e of Array.from(t.files))ge(e);t.value=``}}let V=v(()=>I.value.some(e=>e.status===`uploading`)),H=v(()=>f.sessions.find(e=>e.id===f.selectedSessionId)??null),Te=0;async function U(){let e=Date.now();if(!(e-Te<5e3)){Te=e;try{let e=await fetch(`/api/skills`);e.ok&&(ie.value=await e.json())}catch{}}}i(U),n(()=>f.chatDraft,e=>{e&&(w.value=w.value?`${w.value}\n${e}`:e,f.chatDraft=``)});let W=!1;function G(){W=!0,f.cancelQueuedMessage(s.workspaceId)}n(D,(e,t)=>{t&&!e&&!W&&(w.value=``),W=!1}),n(()=>s.workspaceId,e=>{let t=f.queuedMessages[e];w.value=t?t.content:``});function Ee(){let e=re();if(!e)return null;let t=e.selectionStart??w.value.length,n=w.value.slice(0,t).match(/\/([\w:.-]*)$/);return n?n[1]:null}n(w,async()=>{await e();let t=Ee();t===null?j.value=!1:(await U(),oe.value=t,j.value=!0,M.value=0);let n=[];for(let e of I.value)w.value.includes(e.placeholder)||n.push(e.tempId);for(let e of n)B(e)});function K(t){let n=re();if(!n){w.value=t;return}let r=n.selectionStart??w.value.length,i=w.value.slice(0,r),a=w.value.slice(r),o=i.match(/\/[\w-]*$/);if(!o){w.value=t;return}let s=o.index??r;w.value=w.value.slice(0,s)+t+a,e(()=>{let e=s+t.length;n.focus(),n.setSelectionRange(e,e)})}function q(e){if(!e)return;if(e.type===`template`){let t=C.templates.find(t=>t.slug===e.name);if(!t)return;let n=f.workspaces.find(e=>e.id===s.workspaceId)??null,r=f.gitStatsCache[s.workspaceId]??null,i=f.sessions.find(e=>e.id===f.selectedSessionId)??null,a=null;if(i)if(i.name)a=i.name;else{let e=f.sessions.findIndex(e=>e.id===i.id);a=l(`workspacePage.session`,{n:f.sessions.length-e})}let o;if(r?.prUrl){let e=r.prUrl.match(/\/pull\/(\d+)/);e&&(o=parseInt(e[1],10))}let c=De({workspace:n?{name:n.name,workingBranch:n.workingBranch,sourceBranch:n.sourceBranch,projectPath:n.projectPath}:null,gitStats:r?{commitCount:r.commitCount,unpushedCount:r.unpushedCount,filesChanged:r.filesChanged,insertions:r.insertions,deletions:r.deletions,prNumber:o,prUrl:r.prUrl,prState:r.prState}:null,sessionName:a});K(Z(t.content,c)),j.value=!1;return}let t=`/${e.name}`;if(e.type===`kobo`&&z[t]){w.value=t,j.value=!1,Je();return}K(`${t} `),j.value=!1}let J=v(()=>!s.workspaceId),Y=a(JSON.parse(localStorage.getItem(`kobo:chatHistory`)??`[]`)),$=a(-1),We=a(``);function Ge(e){e&&Y.value[0]!==e&&(Y.value.unshift(e),Y.value.length>50&&Y.value.pop(),localStorage.setItem(`kobo:chatHistory`,JSON.stringify(Y.value)))}function Ke(){$.value=-1,We.value=``}function qe(e){let t=z[`/${e}`]?.descriptionKey;return t?l(t):``}async function Je(){let e=w.value.trim();if(!e&&I.value.length===0||J.value||V.value)return;let t=H.value,n=z[e];if(n){x.sendChatMessage(s.workspaceId,n.prompt,f.selectedSessionId??void 0),f.markRead(s.workspaceId),f.addActivityItem(s.workspaceId,{id:`user-${Date.now()}`,type:`text`,content:n.prompt,timestamp:new Date().toISOString(),sessionId:f.selectedSessionId??void 0,meta:{sender:`user`,pending:!0}}),Ge(e),Ke(),w.value=``;return}if(ne.value){f.queueMessage(s.workspaceId,e,f.selectedSessionId??void 0);return}f.cancelQueuedMessage(s.workspaceId);let r=e,i=I.value.filter(e=>e.status===`ready`&&e.path&&!r.includes(`[image: ${e.path}]`)).map(e=>`[image: ${e.path}]`).join(` `);i&&(r=`${r} ${i}`.trim());let a=f.selectedSessionId??void 0;if((t?.status===`completed`||t?.status===`error`)&&!t.engineSessionId){u.notify({type:`warning`,message:l(`workspacePage.sessionEndedNotice`),position:`top`,timeout:5e3});return}let o=`user-${Date.now()}`;f.markRead(s.workspaceId),f.addActivityItem(s.workspaceId,{id:o,type:`text`,content:r,timestamp:new Date().toISOString(),sessionId:a,meta:{sender:`user`,pending:!0}});let c=e;Ge(e),Ke(),w.value=``,I.value=[];let d=(e,t)=>{console.error(`[ChatInput] ${t} failed:`,e),f.removeActivityItem(s.workspaceId,o),w.value=c;let n=e instanceof Error?e.message:null;u.notify({type:`negative`,message:n??l(`workspacePage.startFailed`),position:`top`,timeout:6e3})};if(t?.status===`idle`)try{await f.startWorkspace(s.workspaceId,r,t.id),await f.fetchSessions(s.workspaceId)}catch(e){d(e,`startWorkspace`)}else if(t?.status===`completed`||t?.status===`error`)try{await f.startWorkspace(s.workspaceId,r,t.id,!0),await f.fetchSessions(s.workspaceId)}catch(e){d(e,`resume session`)}else x.sendChatMessage(s.workspaceId,r,f.selectedSessionId??void 0)}function Ye(e){if(j.value&&F.value.length>0){if(e.key===`ArrowDown`){e.preventDefault(),M.value=Math.min(M.value+1,F.value.length-1);return}if(e.key===`ArrowUp`){e.preventDefault(),M.value=Math.max(M.value-1,0);return}if(e.key===`Tab`||e.key===`Enter`&&!e.shiftKey){e.preventDefault(),q(F.value[M.value]);return}if(e.key===`Escape`){e.preventDefault(),j.value=!1;return}}if(e.key===`ArrowUp`&&Y.value.length>0){let t=e.target;if(!(!t||t.selectionStart<=(w.value.indexOf(`
|
|
3
|
-
`)===-1?w.value.length:w.value.indexOf(`
|
|
4
|
-
`)))&&$.value===-1)return;e.preventDefault(),$.value===-1&&(We.value=w.value),$.value<Y.value.length-1&&($.value++,w.value=Y.value[$.value]);return}if(e.key===`ArrowDown`&&$.value>=0){e.preventDefault(),$.value--,w.value=$.value>=0?Y.value[$.value]:We.value;return}e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),Je())}return(e,n)=>(t(),y(`div`,{class:d([`chat-input-container column q-pa-sm`,{"chat-input-dragging":pe.value}]),onDragover:Se,onDragleave:Ce,onDrop:xe},[I.value.length>0?(t(),y(`div`,Oe,[(t(!0),y(b,null,r(I.value,n=>(t(),y(`div`,{key:n.tempId,class:d([`image-tag row items-center q-px-sm q-py-xs rounded-borders`,{"image-tag--uploading":n.status===`uploading`,"image-tag--ready":n.status===`ready`,"image-tag--error":n.status===`error`}])},[n.status===`uploading`?(t(),m(fe,{key:0,size:`14px`,color:`grey-6`,class:`q-mr-xs`})):n.status===`ready`?(t(),m(k,{key:1,name:`image`,size:`14px`,color:`green-6`,class:`q-mr-xs`})):(t(),m(k,{key:2,name:`error`,size:`14px`,color:`red-6`,class:`q-mr-xs`})),S(`span`,ke,p(n.status===`uploading`?e.$t(`chatInput.uploading`):n.path||n.originalName),1),g(A,{flat:``,dense:``,round:``,size:`xs`,icon:`close`,class:`q-ml-xs image-tag-close`,onClick:e=>B(n.tempId)},{default:c(()=>[g(L,null,{default:c(()=>[_(p(e.$t(`tooltip.removeImage`)),1)]),_:1})]),_:1},8,[`onClick`])],2))),128))])):h(``,!0),j.value&&F.value.length>0?(t(),y(`div`,Ae,[P.value.skills.length>0?(t(),y(b,{key:0},[S(`div`,je,p(e.$t(`chatInput.dropdownSkills`)),1),(t(!0),y(b,null,r(P.value.skills,e=>(t(),y(`div`,{key:`skill-${e.name}`,class:d([`skill-item row items-center q-px-sm q-py-xs cursor-pointer`,{"skill-item--active":F.value.indexOf(e)===M.value}]),onMousedown:te(t=>q(e),[`prevent`])},[g(k,{name:`bolt`,size:`12px`,color:`indigo-4`,class:`q-mr-xs`}),S(`span`,Me,p(e.name),1)],42,Q))),128))],64)):h(``,!0),P.value.kobo.length>0?(t(),y(b,{key:1},[S(`div`,Ne,p(e.$t(`chatInput.dropdownKobo`)),1),(t(!0),y(b,null,r(P.value.kobo,e=>(t(),y(`div`,{key:`kobo-${e.name}`,class:d([`skill-item row items-center q-px-sm q-py-xs cursor-pointer`,{"skill-item--active":F.value.indexOf(e)===M.value}]),onMousedown:te(t=>q(e),[`prevent`])},[g(k,{name:`terminal`,size:`12px`,color:`teal-4`,class:`q-mr-xs`}),S(`span`,Fe,`/`+p(e.name),1),qe(e.name)?(t(),y(`span`,Ie,`— `+p(qe(e.name)),1)):h(``,!0)],42,Pe))),128))],64)):h(``,!0),P.value.templates.length>0?(t(),y(b,{key:2},[S(`div`,Le,p(e.$t(`chatInput.dropdownTemplates`)),1),(t(!0),y(b,null,r(P.value.templates,e=>(t(),y(`div`,{key:`tpl-${e.name}`,class:d([`skill-item row items-center q-px-sm q-py-xs cursor-pointer`,{"skill-item--active":F.value.indexOf(e)===M.value}]),onMousedown:te(t=>q(e),[`prevent`])},[g(k,{name:`description`,size:`12px`,color:`amber-4`,class:`q-mr-xs`}),S(`span`,ze,`/`+p(e.name),1),e.description?(t(),y(`span`,Be,`— `+p(e.description),1)):h(``,!0)],42,Re))),128))],64)):h(``,!0)])):h(``,!0),D.value?(t(),y(`div`,Ve,[g(k,{name:`schedule`,size:`14px`,color:`amber-6`,class:`q-mr-sm`}),S(`span`,null,p(e.$t(`chatInput.queueBanner`)),1)])):h(``,!0),S(`div`,He,[g(le,{ref_key:`chatInputRef`,ref:O,modelValue:w.value,"onUpdate:modelValue":n[0]||=e=>w.value=e,dense:``,dark:``,borderless:``,autogrow:``,readonly:D.value,placeholder:e.$t(`chatInput.placeholder`),class:`chat-input col rounded-borders`,disable:J.value,onKeydown:Ye,onPaste:be},null,8,[`modelValue`,`readonly`,`placeholder`,`disable`]),S(`input`,{ref_key:`fileInputRef`,ref:ue,type:`file`,accept:`image/png,image/jpeg,image/gif,image/webp`,multiple:``,style:{display:`none`},onChange:we},null,544),g(A,{flat:``,dense:``,icon:`attach_file`,color:`grey-6`,disable:J.value,onClick:n[1]||=e=>ue.value?.click()},{default:c(()=>[g(L,null,{default:c(()=>[_(p(e.$t(`chatInput.attachImage`)),1)]),_:1})]),_:1},8,[`disable`]),D.value?(t(),m(A,{key:0,flat:``,dense:``,icon:`cancel`,color:`orange`,onClick:G},{default:c(()=>[g(L,null,{default:c(()=>[_(p(e.$t(`chatInput.cancelQueue`)),1)]),_:1})]),_:1})):(t(),m(A,{key:1,flat:``,dense:``,icon:`send`,color:`primary`,disable:J.value||!w.value.trim()&&I.value.length===0||V.value,onClick:Je},{default:c(()=>[g(L,null,{default:c(()=>[_(p(e.$t(`tooltip.sendMessage`)),1)]),_:1})]),_:1},8,[`disable`]))]),S(`div`,Ue,[S(`div`,null,[n[2]||=S(`kbd`,null,`Enter`,-1),_(` `+p(e.$t(`common.send`))+` `,1),n[3]||=S(`span`,{class:`q-mx-xs`},`·`,-1),n[4]||=_(),n[5]||=S(`kbd`,null,`Shift+Enter`,-1),_(` `+p(e.$t(`common.newLine`))+` `,1),n[6]||=S(`span`,{class:`q-mx-xs`},`·`,-1),n[7]||=_(),n[8]||=S(`kbd`,null,`↑↓`,-1),_(` `+p(e.$t(`common.history`)),1)]),g(_e),g(X,{class:`q-mr-md`}),ee.value?(t(),m(A,{key:0,flat:``,dense:``,"no-caps":``,size:`sm`,color:`orange-4`,icon:`pause`,label:e.$t(`workspacePage.interrupt`),loading:T.value,disable:T.value,onClick:E},{default:c(()=>[g(L,null,{default:c(()=>[_(p(e.$t(`workspacePage.interruptTooltip`)),1)]),_:1})]),_:1},8,[`label`,`loading`,`disable`])):h(``,!0)])],34))}}),[[`__scopeId`,`data-v-ada81eb7`]]),We={class:`wp-header row items-center q-px-md q-py-sm no-wrap`},Ge={class:`text-body1 text-weight-medium text-grey-3 ellipsis`,style:{"max-width":`480px`}},Ke={class:`row items-center no-wrap text-caption text-grey-5`},qe={class:`row items-center no-wrap text-caption text-grey-5`},Je={class:`row items-center no-wrap text-caption text-grey-5`},Ye={key:1,class:`text-body2 text-grey-8`},Xe={class:`col column items-center justify-center`},Ze={class:`text-grey-6 text-caption q-mt-sm`},Qe={class:`text-subtitle1`},$e=R(C({__name:`WorkspacePage`,setup(e){let r=u(()=>Promise.all([F(()=>import(`./ActivityFeed-BmGNYNux.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25])),new Promise(e=>setTimeout(e,500))]).then(([e])=>e)),o=ye(),C=de(),{t:w}=ae(),{timeAgo:T}=xe();a(!1);let E=a(!1),ne=new Set,D=a(new Set),O=v(()=>N(C.selectedWorkspace?.status));n(O,e=>{e||(D.value=new Set)}),n(()=>C.selectedWorkspaceId,()=>{D.value=new Set});function j(e){if(!O.value)return;let t=new Set(D.value);t.add(e),D.value=t}function se(e){ne.add(e),e.finally(()=>{ne.delete(e)})}a(!1);async function ce(){if(C.selectedWorkspaceId){E.value=!0;try{await C.stopWorkspace(C.selectedWorkspaceId)}catch(e){let t=e instanceof Error?e.message:w(`workspacePage.stopFailed`);o.notify({type:`negative`,message:t,position:`top`,timeout:6e3})}finally{E.value=!1}}}let R=v(()=>[...Ce.map(e=>({label:w(e.i18nLabelKey),value:e.value}))]),z=v(()=>[{label:U(w(`reasoning.auto`)),value:`auto`},{label:U(w(`reasoning.low`)),value:`low`},{label:U(w(`reasoning.medium`)),value:`medium`},{label:U(w(`reasoning.high`)),value:`high`},{label:U(w(`reasoning.xhigh`)),value:`xhigh`},{label:U(w(`reasoning.max`)),value:`max`}]),B=v(()=>[{label:w(`permissionMode.autoAccept`),value:`auto-accept`},{label:w(`permissionMode.plan`),value:`plan`}]),V=v({get:()=>C.selectedWorkspace?.model??`auto`,set:e=>{C.selectedWorkspaceId&&(j(`model`),se(C.updateModel(C.selectedWorkspaceId,e)))}}),H=v({get:()=>C.selectedWorkspace?.reasoningEffort??`auto`,set:e=>{C.selectedWorkspaceId&&(j(`reasoningEffort`),se(C.updateReasoningEffort(C.selectedWorkspaceId,e)))}});function U(e){let t=e.indexOf(`:`);return t>=0?e.slice(t+1).trim():e}function W(e){return z.value.find(t=>t.value===e)?.label??e}let G=v({get:()=>C.selectedWorkspace?.permissionMode??`auto-accept`,set:e=>{C.selectedWorkspaceId&&(j(`permissionMode`),se(C.updatePermissionMode(C.selectedWorkspaceId,e)))}}),K=v(()=>{let e=C.selectedWorkspaceId;if(!e)return{inputTokens:0,outputTokens:0,costUsd:0,totalTokens:0};let t=C.usageStats[e]??{inputTokens:0,outputTokens:0,costUsd:0};return{inputTokens:t.inputTokens,outputTokens:t.outputTokens,costUsd:t.costUsd,totalTokens:t.inputTokens+t.outputTokens}});function q(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}let J=ue(),Y=I(),X=v(()=>C.selectedWorkspaceId),Z=v(()=>C.selectedWorkspace),De=v(()=>C.sessions),Oe=v({get:()=>C.selectedSessionId,set:e=>{if(e===`__new__`){Fe();return}if(!e)return;C.selectSession(e);let t={...J.query};t.session=e,Y.replace({query:t})}}),ke=v(()=>[...C.sessions.map((e,t)=>({label:e.name??w(`workspacePage.session`,{n:C.sessions.length-t}),value:e.id,caption:T(e.startedAt),isSession:!0})),{label:w(`workspacePage.newSession`),value:`__new__`,caption:``,isSession:!1}]),Ae=a(!1),je=a(null),Q=a(``),Me=a(!1);function Ne(e,t){let n=C.sessions.find(t=>t.id===e);n&&(je.value={id:e},Q.value=n.name??t,Ae.value=!0)}async function Pe(){if(!(!je.value||!C.selectedWorkspaceId))try{await C.renameSession(C.selectedWorkspaceId,je.value.id,Q.value.trim())}catch(e){console.error(`[WorkspacePage] renameSession failed:`,e),o.notify({type:`negative`,message:w(`workspacePage.renameFailed`),position:`top`})}finally{Ae.value=!1}}async function Fe(){if(C.selectedWorkspaceId){Me.value=!0;try{await C.createSession(C.selectedWorkspaceId)}catch(e){console.error(`[WorkspacePage] createSession failed:`,e);let t=e instanceof Error?e.message:null;o.notify({type:`negative`,message:t??w(`workspacePage.createSessionFailed`),position:`top`,timeout:6e3})}finally{Me.value=!1}}}return i(()=>{let e=J.params.id;e&&C.selectWorkspace(e);let t=J.query.session;t&&C.selectSession(t)}),n(()=>J.params.id,e=>{e&&e!==C.selectedWorkspaceId&&C.selectWorkspace(e)}),(e,n)=>(t(),m(we,{class:`column no-wrap`,style:{height:`100vh`}},{default:c(()=>[S(`div`,We,[Z.value?(t(),y(b,{key:0},[S(`span`,Ge,[_(p(Z.value.name)+` `,1),g(L,null,{default:c(()=>[_(p(Z.value.name),1)]),_:1})]),g(ge,{label:Z.value.status,color:[`error`,`quota`].includes(Z.value.status)?`red-9`:x(N)(Z.value.status)?`green-9`:`grey-8`,class:`q-ml-sm`,style:{"font-size":`10px`}},null,8,[`label`,`color`]),K.value.totalTokens>0?(t(),m(ve,{key:0,dense:``,color:`grey-9`,"text-color":`grey-3`,class:`q-ml-sm`,style:{"font-size":`10px`}},{default:c(()=>[g(k,{name:`toll`,size:`12px`,class:`q-mr-xs`}),S(`span`,null,p(e.$t(`stats.tokens`))+`: `+p(q(K.value.totalTokens)),1),g(L,null,{default:c(()=>[_(p(e.$t(`stats.inputTokens`))+`: `+p(q(K.value.inputTokens)),1),n[6]||=S(`br`,null,null,-1),_(` `+p(e.$t(`stats.outputTokens`))+`: `+p(q(K.value.outputTokens)),1)]),_:1})]),_:1})):h(``,!0),K.value.costUsd>0?(t(),m(ve,{key:1,dense:``,color:`grey-9`,"text-color":`grey-3`,class:`q-ml-xs`,style:{"font-size":`10px`}},{default:c(()=>[g(k,{name:`attach_money`,size:`12px`,class:`q-mr-xs`}),S(`span`,null,p(e.$t(`stats.cost`))+`: $`+p(K.value.costUsd.toFixed(4)),1)]),_:1})):h(``,!0),De.value.length>0?(t(),m(Se,{key:2,modelValue:Oe.value,"onUpdate:modelValue":n[0]||=e=>Oe.value=e,options:ke.value,"emit-value":``,"map-options":``,dense:``,dark:``,borderless:``,"options-dense":``,loading:Me.value,disable:Me.value,class:`q-ml-sm`,style:{"min-width":`160px`,"max-width":`220px`,"font-size":`11px`}},{option:c(e=>[e.opt.isSession?h(``,!0):(t(),m(re,{key:0,spaced:``})),g(pe,s(e.itemProps,{clickable:``,dense:``,class:`row items-center no-wrap`}),{default:c(()=>[g(me,null,{default:c(()=>[g(he,{class:d(e.opt.isSession?``:`text-grey-5`)},{default:c(()=>[_(p(e.opt.label),1)]),_:2},1032,[`class`]),e.opt.caption?(t(),m(he,{key:0,caption:``},{default:c(()=>[_(p(e.opt.caption),1)]),_:2},1024)):h(``,!0)]),_:2},1024),e.opt.isSession?(t(),m(me,{key:0,side:``},{default:c(()=>[g(A,{icon:`more_vert`,flat:``,dense:``,round:``,size:`xs`,color:`grey-6`,onClick:te(t=>Ne(e.opt.value,e.opt.label),[`stop`])},null,8,[`onClick`])]),_:2},1024)):h(``,!0)]),_:2},1040)]),_:1},8,[`modelValue`,`options`,`loading`,`disable`])):h(``,!0),g(_e),g(Se,{modelValue:G.value,"onUpdate:modelValue":n[1]||=e=>G.value=e,options:B.value,"emit-value":``,"map-options":``,dense:``,dark:``,borderless:``,"options-dense":``,class:`q-mr-xs`,style:{"min-width":`80px`,"max-width":`140px`,"font-size":`11px`}},{selected:c(()=>[S(`span`,Ke,[g(k,{name:G.value===`plan`?`visibility`:`flash_on`,size:`12px`,color:`amber-6`,class:`q-mr-xs`},null,8,[`name`]),_(` `+p(B.value.find(e=>e.value===G.value)?.label??G.value)+` `,1),D.value.has(`permissionMode`)?(t(),m(k,{key:0,name:`schedule`,size:`11px`,color:`orange-6`,class:`q-ml-xs`},{default:c(()=>[g(L,null,{default:c(()=>[_(p(e.$t(`workspacePage.pendingNextRun`)),1)]),_:1})]),_:1})):h(``,!0)])]),_:1},8,[`modelValue`,`options`]),g(Se,{modelValue:V.value,"onUpdate:modelValue":n[2]||=e=>V.value=e,options:R.value,"emit-value":``,"map-options":``,dense:``,dark:``,borderless:``,"options-dense":``,class:`q-mr-sm model-select`,style:{"min-width":`100px`,"max-width":`160px`,"font-size":`11px`}},{selected:c(()=>[S(`span`,qe,[g(k,{name:`auto_awesome`,size:`12px`,color:`indigo-4`,class:`q-mr-xs`}),_(` `+p(R.value.find(e=>e.value===V.value)?.label??V.value)+` `,1),D.value.has(`model`)?(t(),m(k,{key:0,name:`schedule`,size:`11px`,color:`orange-6`,class:`q-ml-xs`},{default:c(()=>[g(L,null,{default:c(()=>[_(p(e.$t(`workspacePage.pendingNextRun`)),1)]),_:1})]),_:1})):h(``,!0)])]),_:1},8,[`modelValue`,`options`]),g(Se,{modelValue:H.value,"onUpdate:modelValue":n[3]||=e=>H.value=e,options:z.value,"emit-value":``,"map-options":``,dense:``,dark:``,borderless:``,"options-dense":``,class:`q-mr-sm`,style:{"min-width":`90px`,"max-width":`140px`,"font-size":`11px`}},{selected:c(()=>[S(`span`,Je,[g(k,{name:`psychology`,size:`12px`,color:`amber-6`,class:`q-mr-xs`}),_(` `+p(W(H.value))+` `,1),D.value.has(`reasoningEffort`)?(t(),m(k,{key:0,name:`schedule`,size:`11px`,color:`orange-6`,class:`q-ml-xs`},{default:c(()=>[g(L,null,{default:c(()=>[_(p(e.$t(`workspacePage.pendingNextRun`)),1)]),_:1})]),_:1})):h(``,!0)])]),_:1},8,[`modelValue`,`options`]),x(N)(Z.value.status)?(t(),m(A,{key:3,dense:``,"no-caps":``,size:`sm`,color:`negative`,icon:`stop`,label:e.$t(`common.stop`),class:`q-mr-xs`,loading:E.value,disable:E.value,onClick:ce},null,8,[`label`,`loading`,`disable`])):h(``,!0)],64)):(t(),y(`span`,Ye,p(e.$t(`workspacePage.selectWorkspace`)),1))]),g(re,{dark:``}),X.value?(t(),m(Ee,{key:0,"workspace-id":X.value},null,8,[`workspace-id`])):h(``,!0),X.value?(t(),m(f,{key:1},{fallback:c(()=>[S(`div`,Xe,[g(fe,{size:`40px`,color:`indigo-4`}),S(`div`,Ze,p(e.$t(`common.loading`)),1)])]),default:c(()=>[g(x(r),{class:`col`,style:{"min-height":`0`},"workspace-id":X.value},null,8,[`workspace-id`])]),_:1})):h(``,!0),g(Te),X.value?(t(),m($,{key:2,"workspace-id":X.value},null,8,[`workspace-id`])):h(``,!0),g(ie,{modelValue:Ae.value,"onUpdate:modelValue":n[5]||=e=>Ae.value=e,persistent:``},{default:c(()=>[g(oe,{dark:``,style:{"min-width":`320px`}},{default:c(()=>[g(M,null,{default:c(()=>[S(`div`,Qe,p(x(w)(`workspacePage.renameSessionTitle`)),1)]),_:1}),g(M,null,{default:c(()=>[g(le,{modelValue:Q.value,"onUpdate:modelValue":n[4]||=e=>Q.value=e,label:x(w)(`workspacePage.sessionNameLabel`),dark:``,dense:``,autofocus:``,onKeyup:ee(Pe,[`enter`])},null,8,[`modelValue`,`label`])]),_:1}),g(P,{align:`right`},{default:c(()=>[l(g(A,{flat:``,label:x(w)(`common.cancel`)},null,8,[`label`]),[[be]]),g(A,{flat:``,color:`primary`,label:x(w)(`workspacePage.renameSession`),disable:!Q.value.trim(),onClick:Pe},null,8,[`label`,`disable`])]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),_:1}))}}),[[`__scopeId`,`data-v-3e0db603`]]);export{$e as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{h as e,w as t}from"./index-CDTpNA2L.js";var n=e(({app:e})=>{e.use(t)});export{n as default};
|