chainlesschain 0.45.76 → 0.45.79
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/README.md +31 -0
- package/package.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{Analytics-sBrYoc3A.js → Analytics-CoH0P1ux.js} +2 -2
- package/src/assets/web-panel/assets/AppLayout-Dk1eV3Xp.js +1 -0
- package/src/assets/web-panel/assets/AppLayout-cxfKLu-m.css +1 -0
- package/src/assets/web-panel/assets/Backup-Cv97eAjW.js +1 -0
- package/src/assets/web-panel/assets/Chat-DSbYaPuD.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-DY0Jcql7.js +48 -0
- package/src/assets/web-panel/assets/{Cron-CNs03iHJ.js → Cron-BcH0ckxq.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-DanoHPSI.js → Dashboard-DSOE-azo.js} +1 -1
- package/src/assets/web-panel/assets/{Git-CCMVr3Y8.js → Git-zd3CuuXJ.js} +2 -2
- package/src/assets/web-panel/assets/{Logs-BY6A0UNG.js → Logs-BUKXg48N.js} +2 -2
- package/src/assets/web-panel/assets/{McpTools-CrBVYlg6.js → McpTools-WVxDlw0C.js} +2 -2
- package/src/assets/web-panel/assets/{Memory-CWx3SpUt.js → Memory-BLFTgTpY.js} +2 -2
- package/src/assets/web-panel/assets/{Notes-1LcGD49x.js → Notes-CFypT876.js} +2 -2
- package/src/assets/web-panel/assets/{Organization-Dx2DhbkM.js → Organization-BOOqeyu_.js} +4 -4
- package/src/assets/web-panel/assets/{P2P-B16fjqfJ.js → P2P-D9xrbb8q.js} +2 -2
- package/src/assets/web-panel/assets/{Permissions-BQbC9FzG.js → Permissions-CidrpFWd.js} +3 -3
- package/src/assets/web-panel/assets/{Projects-CjhZbNYm.js → Projects-D3Ycn8xG.js} +2 -2
- package/src/assets/web-panel/assets/{Providers-ivOAQtHM.js → Providers-D0kMUvHz.js} +2 -2
- package/src/assets/web-panel/assets/{RssFeed-BrsErdrU.js → RssFeed-OQLesJxb.js} +1 -1
- package/src/assets/web-panel/assets/{Security-DnEvJU5h.js → Security-BR4hAAkF.js} +3 -3
- package/src/assets/web-panel/assets/{Services-7jQywNbl.js → Services-BFMDfXE5.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-CLlblJcG.js → Skills-BAf_mFKw.js} +1 -1
- package/src/assets/web-panel/assets/{Tasks-CmJBC1cf.js → Tasks-DuNOWfjU.js} +1 -1
- package/src/assets/web-panel/assets/Templates-buh__Yll.js +1 -0
- package/src/assets/web-panel/assets/{Wallet-3iYASEx_.js → Wallet-vgS5USvW.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-s3Hzd9db.js → WebAuthn-BoL2UJ5Z.js} +5 -5
- package/src/assets/web-panel/assets/{antd-gZyc63Qr.js → antd-BQNxIyr-.js} +82 -82
- package/src/assets/web-panel/assets/chat-BwUxWn7i.js +1 -0
- package/src/assets/web-panel/assets/github-dark-Dfs9RUU9.css +1 -0
- package/src/assets/web-panel/assets/index-CCRLEutJ.js +2 -0
- package/src/assets/web-panel/assets/{markdown-Bv7nG63L.js → markdown-BeVIhIzs.js} +1 -1
- package/src/assets/web-panel/assets/ws-B4fo9ew1.js +1 -0
- 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/session-protocol.js +2 -0
- package/src/gateways/ws/ws-server.js +10 -1
- package/src/gateways/ws/ws-session-gateway.js +6 -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/chat-DWBA4-cl.js +0 -1
- package/src/assets/web-panel/assets/index-CyGtHm63.js +0 -2
- package/src/assets/web-panel/assets/ws-CU7Gvoom.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{V as M,f as g,r as w}from"./vendor-CN0Iv_qZ.js";import{u as f}from"./ws-B4fo9ew1.js";const S="新对话",T="新 Agent",b={"assistant.delta":"response-token","assistant.final":"response-complete","assistant.message":"response-complete","tool.call.started":"tool-executing","tool.call.completed":"tool-result","tool.call.failed":"tool-result","slot.filling":"question","approval.requested":"question",error:"error"},U=M("chat",()=>{const c=g([]),p=g(null),i=w({}),a=w({}),m=w({}),d=g(!1);let q=null;const A=new Set;function h(t){return i[t]||(i[t]=[]),i[t]}function y(t){if(!t?.id)return;const e=c.value.find(n=>n.id===t.id);if(e){Object.assign(e,t);return}c.value.unshift(t)}function C(t,e=f()){i[t]||(i[t]=[]),a[t]||(a[t]={content:"",active:!1}),!A.has(t)&&(A.add(t),e.onSession(t,n=>_(t,n)))}function v(t=f()){q||(q=t.onRuntimeEvent(e=>{const n=e.payload||{},s=n.record||{};if(e.type==="session:start"){const o=n.sessionType||s.type||"chat";y({id:n.sessionId,type:o,provider:s.provider||null,model:s.model||null,projectRoot:s.projectRoot||null,status:s.status||"created",title:o==="chat"?S:T,createdAt:Date.now(),messageCount:s.messageCount??0})}else if(e.type==="session:resume"){const o=n.sessionId;if(!o)return;Array.isArray(n.history)&&(i[o]=n.history.map(r=>({role:r.role,content:r.content,timestamp:r.timestamp||Date.now()}))),a[o]||(a[o]={content:"",active:!1}),y({id:o,type:s.type||null,provider:s.provider||null,model:s.model||null,projectRoot:s.projectRoot||null,status:s.status||"resumed",messageCount:s.messageCount??(Array.isArray(n.history)?n.history.length:0)})}else if(e.type==="session:end"){const o=n.sessionId;c.value=c.value.filter(r=>r.id!==o),p.value===o&&(p.value=c.value[0]?.id||null)}}))}async function D(){const t=f();v(t),c.value=await t.listSessions()}async function E(t="chat",e={}){const n=f();v(n);const s=await n.createSession(t,null,e);return y({id:s,type:t,title:t==="chat"?S:T,createdAt:Date.now(),messageCount:0}),C(s,n),p.value=s,s}function _(t,e){const n=h(t),s=b[e.type]||e.type,o=e.payload||{};if(s==="response-token"){a[t]||(a[t]={content:"",active:!0});const r=e.token||o.token||o.delta||o.content||"";a[t].content+=r,a[t].active=!0}else if(s==="response-complete"){const r=e.content||o.content||a[t]?.content||"";n.push({role:"assistant",content:r,timestamp:Date.now()}),a[t]&&(a[t].content="",a[t].active=!1);const l=c.value.find(u=>u.id===t);if(l&&(l.title===S||l.title===T)){const u=n.find(j=>j.role==="user");u&&(l.title=u.content.slice(0,30))}l&&(l.messageCount=n.filter(u=>u.role!=="tool").length),d.value=!1}else if(s==="tool-executing")n.push({role:"tool",tool:e.tool||o.tool||o.toolName||"unknown",input:e.input||o.input||o.args||null,status:"running",timestamp:Date.now()});else if(s==="tool-result"){const r=e.tool||o.tool||o.toolName||"unknown",l=[...n].reverse().find(u=>u.role==="tool"&&u.tool===r);l&&(l.result=e.result||o.result||o.output||null,l.status="done")}else if(s==="question")m[t]={requestId:e.requestId||o.requestId||e.id,question:e.question||o.question||o.message||"",choices:e.choices||o.choices||o.options||[]};else if(s==="error"){const r=e.message||o.message||"Unknown error";n.push({role:"assistant",content:`Error: ${r}`,timestamp:Date.now()}),d.value=!1,a[t]&&(a[t].active=!1)}}async function k(t,e){const n=f();v(n),h(t).push({role:"user",content:e,timestamp:Date.now()}),a[t]||(a[t]={content:"",active:!1}),a[t].active=!0,d.value=!0,n.sendSessionMessage(t,e)}function R(t,e){const n=f(),s=m[t];s&&(n.answerQuestion(t,s.requestId,e),delete m[t])}async function L(t){const e=f();if(v(e),p.value=t,C(t,e),!i[t]||i[t].length===0)try{await e.resumeSession(t)}catch{}}return{sessions:c,currentSessionId:p,messages:i,streaming:a,pendingQuestion:m,isLoading:d,loadSessions:D,createSession:E,sendMessage:k,answerQuestion:R,switchSession:L,getMessages:h}});export{U as u};
|
|
@@ -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-Dk1eV3Xp.js","./vendor-CN0Iv_qZ.js","./ws-B4fo9ew1.js","./_plugin-vue_export-helper-DlAUqK2U.js","./antd-BQNxIyr-.js","./AppLayout-cxfKLu-m.css","./Dashboard-DSOE-azo.js","./chat-BwUxWn7i.js","./Dashboard-CKeMmCoT.css","./Chat-DSbYaPuD.js","./markdown-BeVIhIzs.js","./Chat-DfR76jyX.css","./github-dark-Dfs9RUU9.css","./Cowork-DY0Jcql7.js","./Cowork-CPqYhoMI.css","./Services-BFMDfXE5.js","./Services-C8Qs6KXv.css","./Logs-BUKXg48N.js","./Logs-Gf_Mv9Nx.css","./Skills-BAf_mFKw.js","./parsers-DftYMnlk.js","./Skills-BdjRyorN.css","./Providers-D0kMUvHz.js","./Providers-BEakqcO5.css","./McpTools-WVxDlw0C.js","./McpTools-CyhSLDwf.css","./Notes-CFypT876.js","./Notes-BG69sJKi.css","./Memory-BLFTgTpY.js","./Memory-DRghrGJr.css","./Cron-BcH0ckxq.js","./Tasks-DuNOWfjU.js","./Tasks-BJjN_YEm.css","./Security-BR4hAAkF.js","./Security-Dwxw7rfP.css","./Permissions-CidrpFWd.js","./Permissions-C9WlkGl-.css","./P2P-D9xrbb8q.js","./P2P-OEzOeMZX.css","./Git-zd3CuuXJ.js","./Git-DGcuBXST.css","./Projects-D3Ycn8xG.js","./Projects-DxKelI5h.css","./Wallet-vgS5USvW.js","./Wallet-DnIumafl.css","./Organization-BOOqeyu_.js","./Organization-DdOOM4ic.css","./Analytics-CoH0P1ux.js","./Analytics-B4OM8S8X.css","./Templates-buh__Yll.js","./Templates-DOY_oZnm.css","./Backup-Cv97eAjW.js","./Backup-fZqtfC1m.css","./RssFeed-OQLesJxb.js","./RssFeed-BlFC20eg.css","./WebAuthn-BoL2UJ5Z.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-Dk1eV3Xp.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url),children:[{path:"",redirect:"/dashboard"},{path:"dashboard",name:"Dashboard",component:()=>e(()=>import("./Dashboard-DSOE-azo.js"),__vite__mapDeps([6,1,2,7,3,4,8]),import.meta.url)},{path:"chat",name:"Chat",component:()=>e(()=>import("./Chat-DSbYaPuD.js"),__vite__mapDeps([9,1,10,4,7,2,3,11,12]),import.meta.url)},{path:"cowork",name:"Cowork",component:()=>e(()=>import("./Cowork-DY0Jcql7.js"),__vite__mapDeps([13,1,10,4,2,7,3,14,12]),import.meta.url)},{path:"services",name:"Services",component:()=>e(()=>import("./Services-BFMDfXE5.js"),__vite__mapDeps([15,2,1,3,4,16]),import.meta.url)},{path:"logs",name:"Logs",component:()=>e(()=>import("./Logs-BUKXg48N.js"),__vite__mapDeps([17,2,1,3,4,18]),import.meta.url)},{path:"skills",name:"Skills",component:()=>e(()=>import("./Skills-BAf_mFKw.js"),__vite__mapDeps([19,1,2,20,7,3,4,21]),import.meta.url)},{path:"providers",name:"Providers",component:()=>e(()=>import("./Providers-D0kMUvHz.js"),__vite__mapDeps([22,1,2,20,3,4,23]),import.meta.url)},{path:"mcp",name:"McpTools",component:()=>e(()=>import("./McpTools-WVxDlw0C.js"),__vite__mapDeps([24,2,1,3,4,25]),import.meta.url)},{path:"notes",name:"Notes",component:()=>e(()=>import("./Notes-CFypT876.js"),__vite__mapDeps([26,2,1,3,4,27]),import.meta.url)},{path:"memory",name:"Memory",component:()=>e(()=>import("./Memory-BLFTgTpY.js"),__vite__mapDeps([28,2,1,3,4,29]),import.meta.url)},{path:"cron",name:"Cron",component:()=>e(()=>import("./Cron-BcH0ckxq.js"),__vite__mapDeps([30,2,1,4]),import.meta.url)},{path:"tasks",name:"Tasks",component:()=>e(()=>import("./Tasks-DuNOWfjU.js"),__vite__mapDeps([31,1,2,3,4,32]),import.meta.url)},{path:"security",name:"Security",component:()=>e(()=>import("./Security-BR4hAAkF.js"),__vite__mapDeps([33,2,1,3,4,34]),import.meta.url)},{path:"permissions",name:"Permissions",component:()=>e(()=>import("./Permissions-CidrpFWd.js"),__vite__mapDeps([35,2,1,3,4,36]),import.meta.url)},{path:"p2p",name:"P2P",component:()=>e(()=>import("./P2P-D9xrbb8q.js"),__vite__mapDeps([37,2,1,3,4,38]),import.meta.url)},{path:"git",name:"Git",component:()=>e(()=>import("./Git-zd3CuuXJ.js"),__vite__mapDeps([39,2,1,3,4,40]),import.meta.url)},{path:"projects",name:"Projects",component:()=>e(()=>import("./Projects-D3Ycn8xG.js"),__vite__mapDeps([41,2,1,3,4,42]),import.meta.url)},{path:"wallet",name:"Wallet",component:()=>e(()=>import("./Wallet-vgS5USvW.js"),__vite__mapDeps([43,2,1,3,4,44]),import.meta.url)},{path:"organization",name:"Organization",component:()=>e(()=>import("./Organization-BOOqeyu_.js"),__vite__mapDeps([45,1,2,3,4,46]),import.meta.url)},{path:"analytics",name:"Analytics",component:()=>e(()=>import("./Analytics-CoH0P1ux.js"),__vite__mapDeps([47,2,1,3,4,48]),import.meta.url)},{path:"templates",name:"Templates",component:()=>e(()=>import("./Templates-buh__Yll.js"),__vite__mapDeps([49,1,2,3,4,50]),import.meta.url)},{path:"backup",name:"Backup",component:()=>e(()=>import("./Backup-Cv97eAjW.js"),__vite__mapDeps([51,2,1,3,4,52]),import.meta.url)},{path:"rssfeed",name:"RssFeed",component:()=>e(()=>import("./RssFeed-OQLesJxb.js"),__vite__mapDeps([53,1,2,3,4,54]),import.meta.url)},{path:"webauthn",name:"WebAuthn",component:()=>e(()=>import("./WebAuthn-BoL2UJ5Z.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,`
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{V as U,f as I,c as B}from"./vendor-CN0Iv_qZ.js";let F=0;const v=()=>`wp-${++F}`,b=new Set;function d(e,r={},n={}){return{type:e,kind:n.kind||"server",sessionId:n.sessionId||r.sessionId||null,timestamp:n.timestamp||Date.now(),payload:r}}function G(e){const r=e?.type,n=e?.payload||{};switch(r){case"task:notification":return d("task:notification",{task:e.task||n.task},{kind:"server"});case"session-created":case"session.started":return d("session:start",{sessionId:e.sessionId||n.sessionId,sessionType:e.sessionType||n.sessionType||null,record:e.record||n.record||{id:e.sessionId||n.sessionId,type:e.sessionType||n.sessionType||null,status:"created",history:[],messageCount:0}},{kind:"server",sessionId:e.sessionId||n.sessionId});case"session-resumed":case"session.resumed":{const u=e.sessionId||n.sessionId,c=e.history||n.history||[];return d("session:resume",{sessionId:u,history:c,historyCount:Array.isArray(c)?c.length:0,record:e.record||n.record||{id:u,type:null,status:"resumed",history:c,messageCount:Array.isArray(c)?c.length:0}},{kind:"server",sessionId:u})}case"worktree-diff":case"worktree.diff":return d("worktree:diff:ready",{requestId:e.requestId||e.id||null,record:e.record||n.record||{branch:e.branch||n.branch||null,summary:e.summary||n.summary||null,previewEntrypoints:[{type:"worktree-diff",branch:e.branch||n.branch||null}]}},{kind:"server"});case"worktree-merged":case"worktree.merged":return d("worktree:merge:completed",{requestId:e.requestId||e.id||null,record:e.record||n.record||{branch:e.branch||n.branch||null,summary:e.summary||n.summary||null,conflicts:e.conflicts||n.conflicts||[],previewEntrypoints:e.previewEntrypoints||n.previewEntrypoints||[]}},{kind:"server"});case"compression-stats":case"context.compaction.completed":return d("compression:summary",{requestId:e.requestId||e.id||null,summary:e.summary||n.summary||{}},{kind:"server"});default:return null}}function P(e,r=null){b.forEach(n=>n(e,r||e))}function Q(e){if(!e)return null;const r=e.record||{id:e.id||null,type:e.type||null,provider:e.provider||null,model:e.model||null,projectRoot:e.projectRoot||null,messageCount:e.messageCount??0,history:e.history||[],status:e.status||null};return{...e,id:e.id||r.id,type:e.type||r.type,provider:e.provider||r.provider,model:e.model||r.model,projectRoot:e.projectRoot||r.projectRoot,messageCount:e.messageCount??r.messageCount??0,status:e.status||r.status||null,record:r}}const K=U("ws",()=>{const e=I(null),r=I("disconnected"),n=I(null),u=new Map,c=new Map;let C=null,m=1e3;const y=window.__CC_CONFIG__||{},R=B(()=>`ws://${y.wsHost||"127.0.0.1"}:${y.wsPort||18800}`);function h(){if(e.value?.readyState!==WebSocket.OPEN){r.value="connecting",n.value=null;try{const t=new WebSocket(R.value);e.value=t,t.onopen=()=>{m=1e3,y.wsToken?l({type:"auth",id:v(),token:y.wsToken}).then(()=>{r.value="connected"}).catch(()=>{r.value="connected"}):r.value="connected"},t.onmessage=o=>{let s;try{s=JSON.parse(o.data)}catch{return}x(s)},t.onerror=()=>{n.value="WebSocket error",r.value="error"},t.onclose=()=>{r.value="disconnected",e.value=null,u.forEach(({reject:o})=>o(new Error("WebSocket closed"))),u.clear(),C=setTimeout(()=>{m=Math.min(m*2,3e4),h()},m)}}catch(t){r.value="error",n.value=t.message}}}function W(){clearTimeout(C),e.value?.close(),e.value=null,r.value="disconnected"}function T(t){if(!t.version&&!t.payload)return t;const o=t.payload||{};return{...t,...o,type:t.type,sessionId:t.sessionId||o.sessionId||null}}function x(t){const{type:o}=t,s=t.requestId||t.id;let i=!1;if(s&&u.has(s)){const{resolve:w,reject:O,timeout:S}=u.get(s);clearTimeout(S),u.delete(s),i=!0;const E=T(t);E.id=s,o==="error"?O(new Error(E.message||"Unknown error")):w(E)}const a=t.sessionId||t.payload&&t.payload.sessionId||null;if(a&&c.has(a)){const w=T(t);c.get(a).forEach(S=>S(w))}k.forEach(w=>w(t));const f=G(t);return f&&P(f,t),i}const k=new Set;function q(t){return k.add(t),()=>k.delete(t)}function J(t){return b.add(t),()=>b.delete(t)}function j(t,o){return c.has(t)||c.set(t,new Set),c.get(t).add(o),()=>{c.get(t)?.delete(o),c.get(t)?.size===0&&c.delete(t)}}function l(t,o=15e3){return new Promise((s,i)=>{if(e.value?.readyState!==WebSocket.OPEN){i(new Error("WebSocket not connected"));return}const a=t.id||v(),f=setTimeout(()=>{u.delete(a),i(new Error("Request timeout"))},o);u.set(a,{resolve:s,reject:i,timeout:f}),e.value.send(JSON.stringify({...t,id:a}))})}function p(t=8e3){return r.value==="connected"?Promise.resolve():new Promise((o,s)=>{const i=Date.now()+t,a=()=>{if(r.value==="connected")return o();if(r.value==="error"||Date.now()>=i)return s(new Error(`WS not ready: ${r.value}`));setTimeout(a,150)};r.value==="disconnected"&&h(),a()})}async function N(t,o=3e4){await p(8e3);const s=await l({type:"execute",command:t},o),i=s.output??s.stdout??"",a=s.stderr??"";return{output:i||a,exitCode:s.exitCode??0}}async function M(t,o=3e4){const{output:s,exitCode:i}=await N(t,o);if(i!==0)throw new Error(`Command failed: ${s}`);try{return JSON.parse(s.trim())}catch{const a=s.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(a)return JSON.parse(a[0]);throw new Error(`Invalid JSON output: ${s.slice(0,200)}`)}}async function _(t="chat",o=null,s={}){await p(8e3);const a={type:"session-create",id:v(),sessionType:t,projectRoot:o||y.projectRoot||null};return s.systemPromptExtension&&(a.systemPromptExtension=s.systemPromptExtension),(await l(a)).sessionId}function $(t,o){e.value?.readyState===WebSocket.OPEN&&e.value.send(JSON.stringify({type:"session-message",id:v(),sessionId:t,content:o}))}function A(t,o,s){e.value?.readyState===WebSocket.OPEN&&e.value.send(JSON.stringify({type:"session-answer",id:v(),sessionId:t,requestId:o,answer:s}))}async function D(){return await p(8e3),((await l({type:"session-list"},1e4)).sessions||[]).map(Q).filter(Boolean)}async function H(t){try{await l({type:"session-close",sessionId:t},5e3),P(d("session:end",{sessionId:t},{kind:"server",sessionId:t}),{type:"result",sessionId:t,success:!0})}catch{}}async function z(t){return await p(8e3),await l({type:"session-resume",sessionId:t},1e4)}return{status:r,error:n,wsUrl:R,connect:h,disconnect:W,waitConnected:p,onMessage:q,onRuntimeEvent:J,onSession:j,sendRaw:l,execute:N,executeJson:M,createSession:_,resumeSession:z,sendSessionMessage:$,answerQuestion:A,listSessions:D,closeSession:H}});export{K as u};
|
|
@@ -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-CCRLEutJ.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),
|
|
@@ -81,6 +81,7 @@ export async function handleSessionCreate(server, id, ws, message) {
|
|
|
81
81
|
enabledToolNames,
|
|
82
82
|
hostManagedToolPolicy,
|
|
83
83
|
worktreeIsolation,
|
|
84
|
+
systemPromptExtension,
|
|
84
85
|
} = message;
|
|
85
86
|
|
|
86
87
|
try {
|
|
@@ -94,6 +95,7 @@ export async function handleSessionCreate(server, id, ws, message) {
|
|
|
94
95
|
enabledToolNames,
|
|
95
96
|
hostManagedToolPolicy,
|
|
96
97
|
worktreeIsolation,
|
|
98
|
+
systemPromptExtension,
|
|
97
99
|
});
|
|
98
100
|
|
|
99
101
|
const session = server.sessionManager.getSession(sessionId);
|
|
@@ -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 {
|
|
@@ -318,7 +318,12 @@ export class WSSessionManager {
|
|
|
318
318
|
}
|
|
319
319
|
|
|
320
320
|
// Build initial system prompt (includes persona + rules.md)
|
|
321
|
-
|
|
321
|
+
let systemPrompt = buildSystemPrompt(projectRoot);
|
|
322
|
+
|
|
323
|
+
// Append optional extension (e.g. cowork template instructions)
|
|
324
|
+
if (options.systemPromptExtension) {
|
|
325
|
+
systemPrompt += "\n\n" + options.systemPromptExtension;
|
|
326
|
+
}
|
|
322
327
|
|
|
323
328
|
const messages = [{ role: "system", content: systemPrompt }];
|
|
324
329
|
|
|
@@ -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
|
+
}
|