chainlesschain 0.45.76 → 0.45.77
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/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{Analytics-sBrYoc3A.js → Analytics-Dd2DjBH5.js} +2 -2
- package/src/assets/web-panel/assets/AppLayout-CP9fATUN.js +1 -0
- package/src/assets/web-panel/assets/AppLayout-cxfKLu-m.css +1 -0
- package/src/assets/web-panel/assets/Backup-D6Tc7sf3.js +1 -0
- package/src/assets/web-panel/assets/Chat-DDUJZJ9I.js +1 -0
- package/src/assets/web-panel/assets/Chat-DfR76jyX.css +1 -0
- package/src/assets/web-panel/assets/Cowork-CPqYhoMI.css +1 -0
- package/src/assets/web-panel/assets/Cowork-XRFqGfqJ.js +48 -0
- package/src/assets/web-panel/assets/{Cron-CNs03iHJ.js → Cron-BnWzy_ZB.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-DanoHPSI.js → Dashboard-D2vCkoGu.js} +1 -1
- package/src/assets/web-panel/assets/{Git-CCMVr3Y8.js → Git-DYlvK4sh.js} +2 -2
- package/src/assets/web-panel/assets/{Logs-BY6A0UNG.js → Logs-4VgUbfP0.js} +2 -2
- package/src/assets/web-panel/assets/{McpTools-CrBVYlg6.js → McpTools-ChaiHoWY.js} +2 -2
- package/src/assets/web-panel/assets/{Memory-CWx3SpUt.js → Memory-PFtpuOwf.js} +2 -2
- package/src/assets/web-panel/assets/{Notes-1LcGD49x.js → Notes-wc_n6Rh1.js} +2 -2
- package/src/assets/web-panel/assets/{Organization-Dx2DhbkM.js → Organization-D1qUa8NQ.js} +4 -4
- package/src/assets/web-panel/assets/{P2P-B16fjqfJ.js → P2P-DIG2gnR8.js} +2 -2
- package/src/assets/web-panel/assets/{Permissions-BQbC9FzG.js → Permissions-CpE-Ar1e.js} +3 -3
- package/src/assets/web-panel/assets/{Projects-CjhZbNYm.js → Projects-GjuS-C6U.js} +2 -2
- package/src/assets/web-panel/assets/{Providers-ivOAQtHM.js → Providers-CCfGeqh_.js} +2 -2
- package/src/assets/web-panel/assets/{RssFeed-BrsErdrU.js → RssFeed-5TkrXK7Z.js} +1 -1
- package/src/assets/web-panel/assets/{Security-DnEvJU5h.js → Security-CcfBWT1D.js} +3 -3
- package/src/assets/web-panel/assets/{Services-7jQywNbl.js → Services-Cnm5Zs5h.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-CLlblJcG.js → Skills-BHapMb9h.js} +1 -1
- package/src/assets/web-panel/assets/{Tasks-CmJBC1cf.js → Tasks-DPb9OMck.js} +1 -1
- package/src/assets/web-panel/assets/Templates-Dij5t-rf.js +1 -0
- package/src/assets/web-panel/assets/{Wallet-3iYASEx_.js → Wallet-BJV5KmWA.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-s3Hzd9db.js → WebAuthn-DLkvYwSc.js} +5 -5
- package/src/assets/web-panel/assets/{antd-gZyc63Qr.js → antd-BQNxIyr-.js} +82 -82
- package/src/assets/web-panel/assets/github-dark-Dfs9RUU9.css +1 -0
- package/src/assets/web-panel/assets/index-CB5YlndO.js +2 -0
- package/src/assets/web-panel/assets/{markdown-Bv7nG63L.js → markdown-BeVIhIzs.js} +1 -1
- package/src/assets/web-panel/index.html +2 -2
- package/src/gateways/ws/action-protocol.js +54 -1
- package/src/gateways/ws/message-dispatcher.js +1 -0
- package/src/gateways/ws/ws-server.js +10 -1
- package/src/lib/cowork-task-runner.js +101 -0
- package/src/lib/cowork-task-templates.js +493 -0
- package/src/assets/web-panel/assets/AppLayout-2RCrdXxl.js +0 -1
- package/src/assets/web-panel/assets/AppLayout-D9pBLPC3.css +0 -1
- package/src/assets/web-panel/assets/Backup-D68fenbD.js +0 -1
- package/src/assets/web-panel/assets/Chat-B2nB8o_F.js +0 -1
- package/src/assets/web-panel/assets/Chat-DB46afPg.css +0 -1
- package/src/assets/web-panel/assets/Templates-RXT8-DNk.js +0 -1
- package/src/assets/web-panel/assets/index-CyGtHm63.js +0 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#79c0ff}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-comment,.hljs-code,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./AppLayout-CP9fATUN.js","./vendor-CN0Iv_qZ.js","./ws-CU7Gvoom.js","./_plugin-vue_export-helper-DlAUqK2U.js","./antd-BQNxIyr-.js","./AppLayout-cxfKLu-m.css","./Dashboard-D2vCkoGu.js","./chat-DWBA4-cl.js","./Dashboard-CKeMmCoT.css","./Chat-DDUJZJ9I.js","./markdown-BeVIhIzs.js","./Chat-DfR76jyX.css","./github-dark-Dfs9RUU9.css","./Cowork-XRFqGfqJ.js","./Cowork-CPqYhoMI.css","./Services-Cnm5Zs5h.js","./Services-C8Qs6KXv.css","./Logs-4VgUbfP0.js","./Logs-Gf_Mv9Nx.css","./Skills-BHapMb9h.js","./parsers-DftYMnlk.js","./Skills-BdjRyorN.css","./Providers-CCfGeqh_.js","./Providers-BEakqcO5.css","./McpTools-ChaiHoWY.js","./McpTools-CyhSLDwf.css","./Notes-wc_n6Rh1.js","./Notes-BG69sJKi.css","./Memory-PFtpuOwf.js","./Memory-DRghrGJr.css","./Cron-BnWzy_ZB.js","./Tasks-DPb9OMck.js","./Tasks-BJjN_YEm.css","./Security-CcfBWT1D.js","./Security-Dwxw7rfP.css","./Permissions-CpE-Ar1e.js","./Permissions-C9WlkGl-.css","./P2P-DIG2gnR8.js","./P2P-OEzOeMZX.css","./Git-DYlvK4sh.js","./Git-DGcuBXST.css","./Projects-GjuS-C6U.js","./Projects-DxKelI5h.css","./Wallet-BJV5KmWA.js","./Wallet-DnIumafl.css","./Organization-D1qUa8NQ.js","./Organization-DdOOM4ic.css","./Analytics-Dd2DjBH5.js","./Analytics-B4OM8S8X.css","./Templates-Dij5t-rf.js","./Templates-DOY_oZnm.css","./Backup-D6Tc7sf3.js","./Backup-fZqtfC1m.css","./RssFeed-5TkrXK7Z.js","./RssFeed-BlFC20eg.css","./WebAuthn-DLkvYwSc.js","./WebAuthn-CNPl2VQR.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{S as B,U as L,V as I,f as T,c as E,o as R,W as O,u as k,X as y,Y as V,Z as x,k as D,R as S,_ as w}from"./vendor-CN0Iv_qZ.js";import{a as g,A as M}from"./antd-BQNxIyr-.js";(function(){const a=document.createElement("link").relList;if(a&&a.supports&&a.supports("modulepreload"))return;for(const t of document.querySelectorAll('link[rel="modulepreload"]'))m(t);new MutationObserver(t=>{for(const o of t)if(o.type==="childList")for(const n of o.addedNodes)n.tagName==="LINK"&&n.rel==="modulepreload"&&m(n)}).observe(document,{childList:!0,subtree:!0});function c(t){const o={};return t.integrity&&(o.integrity=t.integrity),t.referrerPolicy&&(o.referrerPolicy=t.referrerPolicy),t.crossOrigin==="use-credentials"?o.credentials="include":t.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function m(t){if(t.ep)return;t.ep=!0;const o=c(t);fetch(t.href,o)}})();const C="modulepreload",N=function(s,a){return new URL(s,a).href},P={},e=function(a,c,m){let t=Promise.resolve();if(c&&c.length>0){let b=function(i){return Promise.all(i.map(d=>Promise.resolve(d).then(p=>({status:"fulfilled",value:p}),p=>({status:"rejected",reason:p}))))};const n=document.getElementsByTagName("link"),r=document.querySelector("meta[property=csp-nonce]"),u=r?.nonce||r?.getAttribute("nonce");t=b(c.map(i=>{if(i=N(i,m),i in P)return;P[i]=!0;const d=i.endsWith(".css"),p=d?'[rel="stylesheet"]':"";if(m)for(let f=n.length-1;f>=0;f--){const _=n[f];if(_.href===i&&(!d||_.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${i}"]${p}`))return;const l=document.createElement("link");if(l.rel=d?"stylesheet":C,d||(l.as="script"),l.crossOrigin="",l.href=i,u&&l.setAttribute("nonce",u),document.head.appendChild(l),d)return new Promise((f,_)=>{l.addEventListener("load",f),l.addEventListener("error",()=>_(new Error(`Unable to preload CSS for ${i}`)))})}))}function o(n){const r=new Event("vite:preloadError",{cancelable:!0});if(r.payload=n,window.dispatchEvent(r),!r.defaultPrevented)throw n}return t.then(n=>{for(const r of n||[])r.status==="rejected"&&o(r.reason);return a().catch(o)})},U=[{path:"/",component:()=>e(()=>import("./AppLayout-CP9fATUN.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url),children:[{path:"",redirect:"/dashboard"},{path:"dashboard",name:"Dashboard",component:()=>e(()=>import("./Dashboard-D2vCkoGu.js"),__vite__mapDeps([6,1,2,7,3,4,8]),import.meta.url)},{path:"chat",name:"Chat",component:()=>e(()=>import("./Chat-DDUJZJ9I.js"),__vite__mapDeps([9,1,10,4,7,2,3,11,12]),import.meta.url)},{path:"cowork",name:"Cowork",component:()=>e(()=>import("./Cowork-XRFqGfqJ.js"),__vite__mapDeps([13,1,10,4,2,7,3,14,12]),import.meta.url)},{path:"services",name:"Services",component:()=>e(()=>import("./Services-Cnm5Zs5h.js"),__vite__mapDeps([15,2,1,3,4,16]),import.meta.url)},{path:"logs",name:"Logs",component:()=>e(()=>import("./Logs-4VgUbfP0.js"),__vite__mapDeps([17,2,1,3,4,18]),import.meta.url)},{path:"skills",name:"Skills",component:()=>e(()=>import("./Skills-BHapMb9h.js"),__vite__mapDeps([19,1,2,20,7,3,4,21]),import.meta.url)},{path:"providers",name:"Providers",component:()=>e(()=>import("./Providers-CCfGeqh_.js"),__vite__mapDeps([22,1,2,20,3,4,23]),import.meta.url)},{path:"mcp",name:"McpTools",component:()=>e(()=>import("./McpTools-ChaiHoWY.js"),__vite__mapDeps([24,2,1,3,4,25]),import.meta.url)},{path:"notes",name:"Notes",component:()=>e(()=>import("./Notes-wc_n6Rh1.js"),__vite__mapDeps([26,2,1,3,4,27]),import.meta.url)},{path:"memory",name:"Memory",component:()=>e(()=>import("./Memory-PFtpuOwf.js"),__vite__mapDeps([28,2,1,3,4,29]),import.meta.url)},{path:"cron",name:"Cron",component:()=>e(()=>import("./Cron-BnWzy_ZB.js"),__vite__mapDeps([30,2,1,4]),import.meta.url)},{path:"tasks",name:"Tasks",component:()=>e(()=>import("./Tasks-DPb9OMck.js"),__vite__mapDeps([31,1,2,3,4,32]),import.meta.url)},{path:"security",name:"Security",component:()=>e(()=>import("./Security-CcfBWT1D.js"),__vite__mapDeps([33,2,1,3,4,34]),import.meta.url)},{path:"permissions",name:"Permissions",component:()=>e(()=>import("./Permissions-CpE-Ar1e.js"),__vite__mapDeps([35,2,1,3,4,36]),import.meta.url)},{path:"p2p",name:"P2P",component:()=>e(()=>import("./P2P-DIG2gnR8.js"),__vite__mapDeps([37,2,1,3,4,38]),import.meta.url)},{path:"git",name:"Git",component:()=>e(()=>import("./Git-DYlvK4sh.js"),__vite__mapDeps([39,2,1,3,4,40]),import.meta.url)},{path:"projects",name:"Projects",component:()=>e(()=>import("./Projects-GjuS-C6U.js"),__vite__mapDeps([41,2,1,3,4,42]),import.meta.url)},{path:"wallet",name:"Wallet",component:()=>e(()=>import("./Wallet-BJV5KmWA.js"),__vite__mapDeps([43,2,1,3,4,44]),import.meta.url)},{path:"organization",name:"Organization",component:()=>e(()=>import("./Organization-D1qUa8NQ.js"),__vite__mapDeps([45,1,2,3,4,46]),import.meta.url)},{path:"analytics",name:"Analytics",component:()=>e(()=>import("./Analytics-Dd2DjBH5.js"),__vite__mapDeps([47,2,1,3,4,48]),import.meta.url)},{path:"templates",name:"Templates",component:()=>e(()=>import("./Templates-Dij5t-rf.js"),__vite__mapDeps([49,1,2,3,4,50]),import.meta.url)},{path:"backup",name:"Backup",component:()=>e(()=>import("./Backup-D6Tc7sf3.js"),__vite__mapDeps([51,2,1,3,4,52]),import.meta.url)},{path:"rssfeed",name:"RssFeed",component:()=>e(()=>import("./RssFeed-5TkrXK7Z.js"),__vite__mapDeps([53,1,2,3,4,54]),import.meta.url)},{path:"webauthn",name:"WebAuthn",component:()=>e(()=>import("./WebAuthn-DLkvYwSc.js"),__vite__mapDeps([55,2,1,3,4,56]),import.meta.url)}]}],F=B({history:L(),routes:U}),A="cc_theme",v={dark:{label:"暗黑",icon:"🌑",antd:{algorithm:g.darkAlgorithm,token:{colorPrimary:"#1677ff",colorBgBase:"#141414",colorBgContainer:"#1f1f1f",colorBgElevated:"#2a2a2a",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#1c1c1c",headerBg:"#1c1c1c",bodyBg:"#141414"},Menu:{darkItemBg:"#1c1c1c",darkSubMenuItemBg:"#171717"}}},vars:{"--bg-base":"#141414","--bg-sidebar":"#1c1c1c","--bg-header":"#1c1c1c","--bg-card":"#1f1f1f","--bg-card-hover":"#262626","--border-color":"#252525","--border-subtle":"#1e1e1e","--text-primary":"#e0e0e0","--text-secondary":"#888","--text-muted":"#444","--logo-text":"#ffffff","--menu-mode":"dark","--shadow-card":"0 2px 8px rgba(0,0,0,.45)","--group-title":"#3a3a3a"}},light:{label:"亮白",icon:"☀️",antd:{algorithm:g.defaultAlgorithm,token:{colorPrimary:"#1677ff",colorBgBase:"#ffffff",colorBgContainer:"#ffffff",colorBgElevated:"#ffffff",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#ffffff",headerBg:"#ffffff",bodyBg:"#f4f6fb"},Menu:{itemBg:"#ffffff"}}},vars:{"--bg-base":"#f4f6fb","--bg-sidebar":"#ffffff","--bg-header":"#ffffff","--bg-card":"#ffffff","--bg-card-hover":"#f0f4ff","--border-color":"#e8edf5","--border-subtle":"#f0f0f0","--text-primary":"#1a1a2e","--text-secondary":"#5a6474","--text-muted":"#b0b8c8","--logo-text":"#1a1a2e","--menu-mode":"light","--shadow-card":"0 2px 12px rgba(0,0,0,.07)","--group-title":"#aab0bc"}},blue:{label:"深蓝",icon:"🌊",antd:{algorithm:g.darkAlgorithm,token:{colorPrimary:"#2f80ed",colorBgBase:"#0d1117",colorBgContainer:"#161b22",colorBgElevated:"#1c2230",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#0f1923",headerBg:"#0f1923",bodyBg:"#0d1117"},Menu:{darkItemBg:"#0f1923",darkSubMenuItemBg:"#0b1520"}}},vars:{"--bg-base":"#0d1117","--bg-sidebar":"#0f1923","--bg-header":"#0f1923","--bg-card":"#161b22","--bg-card-hover":"#1c2230","--border-color":"#21303f","--border-subtle":"#182030","--text-primary":"#c9d8ef","--text-secondary":"#6e8caa","--text-muted":"#2d4060","--logo-text":"#e0eeff","--menu-mode":"dark","--shadow-card":"0 2px 8px rgba(0,40,80,.5)","--group-title":"#2d4060"}},green:{label:"翠绿",icon:"🌿",antd:{algorithm:g.darkAlgorithm,token:{colorPrimary:"#29a270",colorBgBase:"#0a1a12",colorBgContainer:"#0f2318",colorBgElevated:"#152e20",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#0c1e14",headerBg:"#0c1e14",bodyBg:"#0a1a12"},Menu:{darkItemBg:"#0c1e14",darkSubMenuItemBg:"#091810"}}},vars:{"--bg-base":"#0a1a12","--bg-sidebar":"#0c1e14","--bg-header":"#0c1e14","--bg-card":"#0f2318","--bg-card-hover":"#152e20","--border-color":"#1a3828","--border-subtle":"#122a1c","--text-primary":"#c0e8c8","--text-secondary":"#5a9a6a","--text-muted":"#1e4028","--logo-text":"#d8f0e0","--menu-mode":"dark","--shadow-card":"0 2px 8px rgba(0,40,20,.5)","--group-title":"#1e4028"}}},j=I("theme",()=>{const s=T(localStorage.getItem(A)||"light"),a=E(()=>v[s.value]||v.dark),c=E(()=>a.value.antd),m=E(()=>s.value!=="light");function t(){const r=a.value.vars,u=document.documentElement;for(const[b,i]of Object.entries(r))u.style.setProperty(b,i);u.setAttribute("data-theme",s.value)}function o(r){v[r]&&(s.value=r,localStorage.setItem(A,r),t())}function n(){t()}return{current:s,config:a,antdTheme:c,isDark:m,setTheme:o,init:n}}),W={__name:"App",setup(s){const a=j();return R(()=>a.init()),(c,m)=>{const t=y("router-view"),o=y("a-config-provider");return V(),O(o,{theme:k(a).antdTheme},{default:x(()=>[D(t)]),_:1},8,["theme"])}}},h=S(W);h.use(w());h.use(F);h.use(M);h.mount("#app");export{v as T,j as u};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{g as Yc}from"./antd-
|
|
1
|
+
import{g as Yc}from"./antd-BQNxIyr-.js";function Ni(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}let He=Ni();function Mc(a){He=a}const Lc=/[&<>"']/,qc=new RegExp(Lc.source,"g"),xc=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,Hc=new RegExp(xc.source,"g"),Vc={"&":"&","<":"<",">":">",'"':""","'":"'"},$i=a=>Vc[a];function Ne(a,e){if(e){if(Lc.test(a))return a.replace(qc,$i)}else if(xc.test(a))return a.replace(Hc,$i);return a}const zc=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;function Wc(a){return a.replace(zc,(e,t)=>(t=t.toLowerCase(),t==="colon"?":":t.charAt(0)==="#"?t.charAt(1)==="x"?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""))}const $c=/(^|[^\[])\^/g;function Z(a,e){let t=typeof a=="string"?a:a.source;e=e||"";const n={replace:(r,i)=>{let o=typeof i=="string"?i:i.source;return o=o.replace($c,"$1"),t=t.replace(r,o),n},getRegex:()=>new RegExp(t,e)};return n}function Ki(a){try{a=encodeURI(a).replace(/%25/g,"%")}catch{return null}return a}const pt={exec:()=>null};function Qi(a,e){const t=a.replace(/\|/g,(i,o,s)=>{let l=!1,_=o;for(;--_>=0&&s[_]==="\\";)l=!l;return l?"|":" |"}),n=t.split(/ \|/);let r=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push("");for(;r<n.length;r++)n[r]=n[r].trim().replace(/\\\|/g,"|");return n}function yt(a,e,t){const n=a.length;if(n===0)return"";let r=0;for(;r<n&&a.charAt(n-r-1)===e;)r++;return a.slice(0,n-r)}function Kc(a,e){if(a.indexOf(e[1])===-1)return-1;let t=0;for(let n=0;n<a.length;n++)if(a[n]==="\\")n++;else if(a[n]===e[0])t++;else if(a[n]===e[1]&&(t--,t<0))return n;return-1}function Xi(a,e,t,n){const r=e.href,i=e.title?Ne(e.title):null,o=a[1].replace(/\\([\[\]])/g,"$1");if(a[0].charAt(0)!=="!"){n.state.inLink=!0;const s={type:"link",raw:t,href:r,title:i,text:o,tokens:n.inlineTokens(o)};return n.state.inLink=!1,s}return{type:"image",raw:t,href:r,title:i,text:Ne(o)}}function Qc(a,e){const t=a.match(/^(\s+)(?:```)/);if(t===null)return e;const n=t[1];return e.split(`
|
|
2
2
|
`).map(r=>{const i=r.match(/^\s+/);if(i===null)return r;const[o]=i;return o.length>=n.length?r.slice(n.length):r}).join(`
|
|
3
3
|
`)}class Lt{options;rules;lexer;constructor(e){this.options=e||He}space(e){const t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){const t=this.rules.block.code.exec(e);if(t){const n=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?n:yt(n,`
|
|
4
4
|
`)}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const n=t[0],r=Qc(n,t[3]||"");return{type:"code",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:r}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(/#$/.test(n)){const r=yt(n,"#");(this.options.pedantic||!r||/ $/.test(r))&&(n=r.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){let n=t[0].replace(/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,`
|
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
// Injected by web-ui-server.js at serve time
|
|
9
9
|
window.__CC_CONFIG__ = __CC_CONFIG_PLACEHOLDER__;
|
|
10
10
|
</script>
|
|
11
|
-
<script type="module" crossorigin src="./assets/index-
|
|
11
|
+
<script type="module" crossorigin src="./assets/index-CB5YlndO.js"></script>
|
|
12
12
|
<link rel="modulepreload" crossorigin href="./assets/vendor-CN0Iv_qZ.js">
|
|
13
|
-
<link rel="modulepreload" crossorigin href="./assets/antd-
|
|
13
|
+
<link rel="modulepreload" crossorigin href="./assets/antd-BQNxIyr-.js">
|
|
14
14
|
<link rel="stylesheet" crossorigin href="./assets/index-CyGyEIVX.css">
|
|
15
15
|
</head>
|
|
16
16
|
<body>
|
|
@@ -1,3 +1,55 @@
|
|
|
1
|
+
export async function handleCoworkTask(server, id, ws, message) {
|
|
2
|
+
const { templateId = null, userMessage, files = [] } = message;
|
|
3
|
+
|
|
4
|
+
if (!userMessage || typeof userMessage !== "string") {
|
|
5
|
+
server._send(ws, {
|
|
6
|
+
id,
|
|
7
|
+
type: "error",
|
|
8
|
+
code: "INVALID_MESSAGE",
|
|
9
|
+
message: "userMessage field required",
|
|
10
|
+
});
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
try {
|
|
15
|
+
const { runCoworkTask } = await import("../../lib/cowork-task-runner.js");
|
|
16
|
+
|
|
17
|
+
server._send(ws, {
|
|
18
|
+
id,
|
|
19
|
+
type: "cowork:started",
|
|
20
|
+
templateId,
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const result = await runCoworkTask({
|
|
24
|
+
templateId,
|
|
25
|
+
userMessage,
|
|
26
|
+
files,
|
|
27
|
+
cwd: server.projectRoot || process.cwd(),
|
|
28
|
+
llmOptions: {},
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
server._send(ws, {
|
|
32
|
+
id,
|
|
33
|
+
type: "cowork:done",
|
|
34
|
+
taskId: result.taskId,
|
|
35
|
+
status: result.status,
|
|
36
|
+
templateId: result.templateId,
|
|
37
|
+
templateName: result.templateName,
|
|
38
|
+
summary: result.result?.summary || "",
|
|
39
|
+
artifacts: result.result?.artifacts || [],
|
|
40
|
+
toolsUsed: result.result?.toolsUsed || [],
|
|
41
|
+
iterationCount: result.result?.iterationCount || 0,
|
|
42
|
+
});
|
|
43
|
+
} catch (err) {
|
|
44
|
+
server._send(ws, {
|
|
45
|
+
id,
|
|
46
|
+
type: "error",
|
|
47
|
+
code: "COWORK_FAILED",
|
|
48
|
+
message: err.message,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
1
53
|
export function handleSlashCommand(server, id, ws, message) {
|
|
2
54
|
const { sessionId, command } = message;
|
|
3
55
|
const handler = server.sessionHandlers.get(sessionId);
|
|
@@ -36,7 +88,8 @@ export async function handleOrchestrate(server, id, ws, message) {
|
|
|
36
88
|
}
|
|
37
89
|
|
|
38
90
|
try {
|
|
39
|
-
const { Orchestrator, TASK_SOURCE } =
|
|
91
|
+
const { Orchestrator, TASK_SOURCE } =
|
|
92
|
+
await import("../../lib/orchestrator.js");
|
|
40
93
|
|
|
41
94
|
const orch = new Orchestrator({
|
|
42
95
|
cwd: cwd || server.projectRoot || process.cwd(),
|
|
@@ -43,6 +43,7 @@ export function createWsMessageDispatcher(server) {
|
|
|
43
43
|
"session-answer": () => server._handleSessionAnswer(id, ws, message),
|
|
44
44
|
"host-tool-result": () => server._handleHostToolResult(id, ws, message),
|
|
45
45
|
orchestrate: () => server._handleOrchestrate(id, ws, message),
|
|
46
|
+
"cowork-task": () => server._handleCoworkTask(id, ws, message),
|
|
46
47
|
"tasks-list": () => server._handleTasksList(id, ws),
|
|
47
48
|
"tasks-stop": () => server._handleTasksStop(id, ws, message),
|
|
48
49
|
"tasks-detail": () => server._handleTaskDetail(id, ws, message),
|
|
@@ -48,7 +48,11 @@ import {
|
|
|
48
48
|
handleTaskGraphAdvance,
|
|
49
49
|
handleTaskGraphState,
|
|
50
50
|
} from "./session-protocol.js";
|
|
51
|
-
import {
|
|
51
|
+
import {
|
|
52
|
+
handleSlashCommand,
|
|
53
|
+
handleOrchestrate,
|
|
54
|
+
handleCoworkTask,
|
|
55
|
+
} from "./action-protocol.js";
|
|
52
56
|
import {
|
|
53
57
|
handleWorktreeDiff,
|
|
54
58
|
handleWorktreeMerge,
|
|
@@ -294,6 +298,11 @@ export class ChainlessChainWSServer extends EventEmitter {
|
|
|
294
298
|
return handleOrchestrate(this, id, ws, message);
|
|
295
299
|
}
|
|
296
300
|
|
|
301
|
+
/** @private — run a cowork daily task via SubAgentContext */
|
|
302
|
+
async _handleCoworkTask(id, ws, message) {
|
|
303
|
+
return handleCoworkTask(this, id, ws, message);
|
|
304
|
+
}
|
|
305
|
+
|
|
297
306
|
/** @private – list background tasks */
|
|
298
307
|
async _handleTasksList(id, ws) {
|
|
299
308
|
try {
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cowork Task Runner — executes daily tasks using SubAgentContext.
|
|
3
|
+
*
|
|
4
|
+
* Creates an isolated sub-agent with a template-specific system prompt,
|
|
5
|
+
* runs the agent loop, and yields progress events for WS consumers.
|
|
6
|
+
*
|
|
7
|
+
* @module cowork-task-runner
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { SubAgentContext } from "./sub-agent-context.js";
|
|
11
|
+
import { getTemplate } from "./cowork-task-templates.js";
|
|
12
|
+
|
|
13
|
+
// ─── Constants ────────────────────────────────────────────────────────────────
|
|
14
|
+
|
|
15
|
+
const DEFAULT_MAX_ITERATIONS = 50;
|
|
16
|
+
const DEFAULT_TOKEN_BUDGET = 100_000;
|
|
17
|
+
|
|
18
|
+
// ─── Runner ───────────────────────────────────────────────────────────────────
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Run a cowork task using SubAgentContext.
|
|
22
|
+
*
|
|
23
|
+
* @param {object} options
|
|
24
|
+
* @param {string|null} options.templateId - Template ID (null = free mode)
|
|
25
|
+
* @param {string} options.userMessage - User's task description
|
|
26
|
+
* @param {string[]} [options.files] - File paths provided by user
|
|
27
|
+
* @param {string} [options.cwd] - Working directory
|
|
28
|
+
* @param {object} [options.db] - Database instance
|
|
29
|
+
* @param {object} [options.llmOptions] - LLM provider/model/key
|
|
30
|
+
* @param {number} [options.maxIterations] - Override iteration limit
|
|
31
|
+
* @param {number} [options.tokenBudget] - Override token budget
|
|
32
|
+
* @returns {Promise<{ taskId: string, status: string, result: object }>}
|
|
33
|
+
*/
|
|
34
|
+
export async function runCoworkTask(options = {}) {
|
|
35
|
+
const {
|
|
36
|
+
templateId = null,
|
|
37
|
+
userMessage,
|
|
38
|
+
files = [],
|
|
39
|
+
cwd = process.cwd(),
|
|
40
|
+
db = null,
|
|
41
|
+
llmOptions = {},
|
|
42
|
+
maxIterations = DEFAULT_MAX_ITERATIONS,
|
|
43
|
+
tokenBudget = DEFAULT_TOKEN_BUDGET,
|
|
44
|
+
} = options;
|
|
45
|
+
|
|
46
|
+
if (!userMessage || typeof userMessage !== "string") {
|
|
47
|
+
throw new Error("userMessage is required");
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Resolve template
|
|
51
|
+
const template = getTemplate(templateId);
|
|
52
|
+
|
|
53
|
+
// Build the task prompt with template context + files
|
|
54
|
+
const taskParts = [template.systemPromptExtension];
|
|
55
|
+
|
|
56
|
+
if (files.length > 0) {
|
|
57
|
+
taskParts.push(`\n## 用户提供的文件\n${files.join("\n")}`);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const task = taskParts.join("\n");
|
|
61
|
+
|
|
62
|
+
// Create isolated sub-agent context
|
|
63
|
+
const subAgent = SubAgentContext.create({
|
|
64
|
+
role: `cowork-${template.id}`,
|
|
65
|
+
task,
|
|
66
|
+
inheritedContext: null,
|
|
67
|
+
maxIterations,
|
|
68
|
+
tokenBudget,
|
|
69
|
+
db,
|
|
70
|
+
llmOptions,
|
|
71
|
+
cwd,
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
const taskId = subAgent.id;
|
|
75
|
+
|
|
76
|
+
// Run the agent with the user's message
|
|
77
|
+
try {
|
|
78
|
+
const result = await subAgent.run(userMessage);
|
|
79
|
+
return {
|
|
80
|
+
taskId,
|
|
81
|
+
status: subAgent.status,
|
|
82
|
+
templateId: template.id,
|
|
83
|
+
templateName: template.name,
|
|
84
|
+
result,
|
|
85
|
+
};
|
|
86
|
+
} catch (err) {
|
|
87
|
+
return {
|
|
88
|
+
taskId,
|
|
89
|
+
status: "failed",
|
|
90
|
+
templateId: template.id,
|
|
91
|
+
templateName: template.name,
|
|
92
|
+
result: {
|
|
93
|
+
summary: `Task failed: ${err.message}`,
|
|
94
|
+
artifacts: [],
|
|
95
|
+
tokenCount: 0,
|
|
96
|
+
toolsUsed: [],
|
|
97
|
+
iterationCount: 0,
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
}
|