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.
Files changed (47) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/.build-hash +1 -1
  3. package/src/assets/web-panel/assets/{Analytics-sBrYoc3A.js → Analytics-Dd2DjBH5.js} +2 -2
  4. package/src/assets/web-panel/assets/AppLayout-CP9fATUN.js +1 -0
  5. package/src/assets/web-panel/assets/AppLayout-cxfKLu-m.css +1 -0
  6. package/src/assets/web-panel/assets/Backup-D6Tc7sf3.js +1 -0
  7. package/src/assets/web-panel/assets/Chat-DDUJZJ9I.js +1 -0
  8. package/src/assets/web-panel/assets/Chat-DfR76jyX.css +1 -0
  9. package/src/assets/web-panel/assets/Cowork-CPqYhoMI.css +1 -0
  10. package/src/assets/web-panel/assets/Cowork-XRFqGfqJ.js +48 -0
  11. package/src/assets/web-panel/assets/{Cron-CNs03iHJ.js → Cron-BnWzy_ZB.js} +2 -2
  12. package/src/assets/web-panel/assets/{Dashboard-DanoHPSI.js → Dashboard-D2vCkoGu.js} +1 -1
  13. package/src/assets/web-panel/assets/{Git-CCMVr3Y8.js → Git-DYlvK4sh.js} +2 -2
  14. package/src/assets/web-panel/assets/{Logs-BY6A0UNG.js → Logs-4VgUbfP0.js} +2 -2
  15. package/src/assets/web-panel/assets/{McpTools-CrBVYlg6.js → McpTools-ChaiHoWY.js} +2 -2
  16. package/src/assets/web-panel/assets/{Memory-CWx3SpUt.js → Memory-PFtpuOwf.js} +2 -2
  17. package/src/assets/web-panel/assets/{Notes-1LcGD49x.js → Notes-wc_n6Rh1.js} +2 -2
  18. package/src/assets/web-panel/assets/{Organization-Dx2DhbkM.js → Organization-D1qUa8NQ.js} +4 -4
  19. package/src/assets/web-panel/assets/{P2P-B16fjqfJ.js → P2P-DIG2gnR8.js} +2 -2
  20. package/src/assets/web-panel/assets/{Permissions-BQbC9FzG.js → Permissions-CpE-Ar1e.js} +3 -3
  21. package/src/assets/web-panel/assets/{Projects-CjhZbNYm.js → Projects-GjuS-C6U.js} +2 -2
  22. package/src/assets/web-panel/assets/{Providers-ivOAQtHM.js → Providers-CCfGeqh_.js} +2 -2
  23. package/src/assets/web-panel/assets/{RssFeed-BrsErdrU.js → RssFeed-5TkrXK7Z.js} +1 -1
  24. package/src/assets/web-panel/assets/{Security-DnEvJU5h.js → Security-CcfBWT1D.js} +3 -3
  25. package/src/assets/web-panel/assets/{Services-7jQywNbl.js → Services-Cnm5Zs5h.js} +1 -1
  26. package/src/assets/web-panel/assets/{Skills-CLlblJcG.js → Skills-BHapMb9h.js} +1 -1
  27. package/src/assets/web-panel/assets/{Tasks-CmJBC1cf.js → Tasks-DPb9OMck.js} +1 -1
  28. package/src/assets/web-panel/assets/Templates-Dij5t-rf.js +1 -0
  29. package/src/assets/web-panel/assets/{Wallet-3iYASEx_.js → Wallet-BJV5KmWA.js} +4 -4
  30. package/src/assets/web-panel/assets/{WebAuthn-s3Hzd9db.js → WebAuthn-DLkvYwSc.js} +5 -5
  31. package/src/assets/web-panel/assets/{antd-gZyc63Qr.js → antd-BQNxIyr-.js} +82 -82
  32. package/src/assets/web-panel/assets/github-dark-Dfs9RUU9.css +1 -0
  33. package/src/assets/web-panel/assets/index-CB5YlndO.js +2 -0
  34. package/src/assets/web-panel/assets/{markdown-Bv7nG63L.js → markdown-BeVIhIzs.js} +1 -1
  35. package/src/assets/web-panel/index.html +2 -2
  36. package/src/gateways/ws/action-protocol.js +54 -1
  37. package/src/gateways/ws/message-dispatcher.js +1 -0
  38. package/src/gateways/ws/ws-server.js +10 -1
  39. package/src/lib/cowork-task-runner.js +101 -0
  40. package/src/lib/cowork-task-templates.js +493 -0
  41. package/src/assets/web-panel/assets/AppLayout-2RCrdXxl.js +0 -1
  42. package/src/assets/web-panel/assets/AppLayout-D9pBLPC3.css +0 -1
  43. package/src/assets/web-panel/assets/Backup-D68fenbD.js +0 -1
  44. package/src/assets/web-panel/assets/Chat-B2nB8o_F.js +0 -1
  45. package/src/assets/web-panel/assets/Chat-DB46afPg.css +0 -1
  46. package/src/assets/web-panel/assets/Templates-RXT8-DNk.js +0 -1
  47. 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-gZyc63Qr.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={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},$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(`
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={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},$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-CyGtHm63.js"></script>
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-gZyc63Qr.js">
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 } = await import("../../lib/orchestrator.js");
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 { handleSlashCommand, handleOrchestrate } from "./action-protocol.js";
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
+ }