zen-gitsync 2.18.16 → 2.18.18

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 (64) hide show
  1. package/README.md +44 -6
  2. package/package.json +3 -2
  3. package/src/ui/public/assets/AgentView-BE7GD8rc.css +1 -0
  4. package/src/ui/public/assets/AgentView-fJbuH0N-.js +12 -0
  5. package/src/ui/public/assets/{AppVersionBadge-C8aeLqSe.js → AppVersionBadge-BfgAvMQg.js} +2 -2
  6. package/src/ui/public/assets/BranchSelector-B55Ta_HD.js +4 -0
  7. package/src/ui/public/assets/{ChatSilenceBadge-CX-Q1BK4.js → ChatSilenceBadge-BDltHrA2.js} +1 -1
  8. package/src/ui/public/assets/{CommitForm-5QT3698o.js → CommitForm-C1Jql1he.js} +3 -3
  9. package/src/ui/public/assets/{CommonDialog-DcXSTg3n.js → CommonDialog-lhBO3OFL.js} +1 -1
  10. package/src/ui/public/assets/EditorView-Dvi9Js01.css +1 -0
  11. package/src/ui/public/assets/EditorView-nJTaLq6D.js +46 -0
  12. package/src/ui/public/assets/{FlowExecutionViewer-CJQEtP0d.js → FlowExecutionViewer-BPMqArlZ.js} +1 -1
  13. package/src/ui/public/assets/{FlowOrchestrationWorkspace-DxclUFA_.js → FlowOrchestrationWorkspace-Cq-1Knnp.js} +1 -1
  14. package/src/ui/public/assets/{LogList-BXIbzGgN.js → LogList-Bk7GAfle.js} +4 -4
  15. package/src/ui/public/assets/{MindmapView-Cp8DqQ1U.js → MindmapView-CBOfycTa.js} +1 -1
  16. package/src/ui/public/assets/MindmapView-DZHwQrhd.css +1 -0
  17. package/src/ui/public/assets/MonitorView-3g87o1gD.js +3 -0
  18. package/src/ui/public/assets/MonitorView-DFLZjKpz.css +1 -0
  19. package/src/ui/public/assets/ProjectManagerView-DgMq7Jed.js +10 -0
  20. package/src/ui/public/assets/{ProjectManagerView-DVIx9AVp.css → ProjectManagerView-DhC-Y5PR.css} +1 -1
  21. package/src/ui/public/assets/ProjectStartupButton-CkJEFz-S.js +1 -0
  22. package/src/ui/public/assets/{RecentDirectoriesChat-CYvrKZJ0.js → RecentDirectoriesChat-CQ6vjPkE.js} +1 -1
  23. package/src/ui/public/assets/RemoteManagerDialog-D9arrFOG.js +4 -0
  24. package/src/ui/public/assets/{RemoteRepoCard-Bf19DvWd.js → RemoteRepoCard-ZQ_SMlQZ.js} +1 -1
  25. package/src/ui/public/assets/{SourceMapView-BeVBU82G.js → SourceMapView-1q3TRufj.js} +1 -1
  26. package/src/ui/public/assets/{SvgIcon-kIrDXBzK.js → SvgIcon-CfjWD31j.js} +1 -1
  27. package/src/ui/public/assets/{UserInputNode-DdStei_J.js → UserInputNode-BdU3sSVR.js} +1 -1
  28. package/src/ui/public/assets/WorkbenchView-D6orzzEp.css +1 -0
  29. package/src/ui/public/assets/WorkbenchView-D8WdRklc.js +360 -0
  30. package/src/ui/public/assets/_plugin-vue_export-helper-D4DL0jyB.js +19 -0
  31. package/src/ui/public/assets/agentConversations-DJ8rPauy.js +10 -0
  32. package/src/ui/public/assets/{configStore-Bo0r1aq6.js → configStore-BmWis0h4.js} +1 -1
  33. package/src/ui/public/assets/{index-9h6sH4q0.js → index-DRDito6l.js} +106 -97
  34. package/src/ui/public/assets/index-DSQ6mp_N.css +1 -0
  35. package/src/ui/public/assets/{relativeTime-BzT7yFma.js → relativeTime-BpGKkKiW.js} +1 -1
  36. package/src/ui/public/assets/toolsStore-CmVXtAw_.js +1 -0
  37. package/src/ui/public/assets/useOrchestrator-DKr4ShyB.js +1 -0
  38. package/src/ui/public/assets/useWorkbenchProjects-D169QQnx.js +9 -0
  39. package/src/ui/public/index.html +7 -7
  40. package/src/ui/server/routes/fileOpen.js +277 -0
  41. package/src/ui/server/routes/workbench/agentMarketplace.js +17 -1
  42. package/src/ui/server/routes/workbench/runExternalTurn.js +9 -0
  43. package/src/ui/server/routes/workbench/runExternalTurn.test.js +20 -0
  44. package/src/ui/server/routes/workbench/taskRunner.codebuddy.test.js +42 -0
  45. package/src/ui/server/routes/workbench/taskRunner.js +34 -3
  46. package/src/ui/public/assets/AgentView-C-6_QbmJ.css +0 -1
  47. package/src/ui/public/assets/AgentView-CW4NHZhG.js +0 -12
  48. package/src/ui/public/assets/BranchSelector-B1qhhHaR.js +0 -4
  49. package/src/ui/public/assets/EditorView-DkXHZdKh.css +0 -1
  50. package/src/ui/public/assets/EditorView-eCxdCV3J.js +0 -38
  51. package/src/ui/public/assets/MindmapView-B2Oz9nCS.css +0 -1
  52. package/src/ui/public/assets/MonitorView-BDHs5wki.js +0 -3
  53. package/src/ui/public/assets/MonitorView-CTtuMls4.css +0 -1
  54. package/src/ui/public/assets/ProjectManagerView-BN-Rk3dE.js +0 -10
  55. package/src/ui/public/assets/ProjectStartupButton-B0UZ1c5m.js +0 -1
  56. package/src/ui/public/assets/RemoteManagerDialog-ByB-9iUe.js +0 -4
  57. package/src/ui/public/assets/WorkbenchView-DK2vT3Dr.css +0 -1
  58. package/src/ui/public/assets/WorkbenchView-DtOjBTLw.js +0 -358
  59. package/src/ui/public/assets/_plugin-vue_export-helper-BhoBCXbu.js +0 -19
  60. package/src/ui/public/assets/agentConversations-DYws7uRd.js +0 -10
  61. package/src/ui/public/assets/index-mEFBooIF.css +0 -1
  62. package/src/ui/public/assets/toolsStore-Dw93cKG_.js +0 -1
  63. package/src/ui/public/assets/useOrchestrator-5ZwvNS0V.js +0 -1
  64. package/src/ui/public/assets/useWorkbenchProjects-CQY-iTuV.js +0 -7
@@ -1,10 +0,0 @@
1
- import"./rolldown-runtime-C0FnF6B9.js";import{In as e,cr as t,gr as n,i as r,lr as i,mr as a,nr as o,pr as s,r as c,xn as l}from"./element-plus-Bz6lYur-.js";import{a as u,i as d,o as f,r as p}from"./vendor-C2k0GBzj.js";import{n as m}from"./_plugin-vue_export-helper-BhoBCXbu.js";import{c as h,s as g,t as _}from"./configStore-Bo0r1aq6.js";import{n as v,p as y,r as b,t as x,v as S,y as C}from"./index-9h6sH4q0.js";function w(e,t=200){let n=typeof e==`string`?e:``;if(!n.trim())return``;let r=n.split(`
2
- `).map(e=>e.trim()).filter(Boolean),i=(r.length?r[r.length-1]:``).replace(/\s+/g,` `);return i.length>t?`${i.slice(0,t-1)}…`:i}function T(e){return m(e===`done`?`@AGENT:对话已完成`:`@AGENT:对话出错`)}function E(){let e={page:!1,browser:!1,sound:!1};try{let t=_();e.page=!!t.notifyPageOnTaskDone,e.browser=!!t.notifyBrowserOnTaskDone,e.sound=!!t.notifySoundOnTaskDone}catch{}return e}function ee(){return E().sound?b():!1}function te(e){let t=E();if(!x(t))return!1;let n=String(e.title||``).trim()||m(`@AGENT:无标题`),i=w(e.detail),a=e.tag||`zen-gitsync-agent`,o=i?`${n}\n${i}`:n;return t.sound&&v(e.kind),C(t)&&S({title:T(e.kind),body:o,tag:a})||!t.page||e.alreadyToast||(e.kind===`done`?r.success(m(`@AGENT:对话完成:{name}`,{name:n})):r.error(m(`@AGENT:对话出错:{name}`,{name:n}))),!0}var ne=`g ai`,D=`g-ai`,O=[{id:`gai`,name:ne},...g.map(e=>({id:e.id,name:e.name}))],k=`zen-gitsync-agent-engine`;function A(e){return e===`gai`||h(e)}function re(e){return O.find(t=>t.id===e)?.name||`g ai`}function j(e){return h(e)}function ie(){try{let e=localStorage.getItem(k);if(A(e))return e}catch{}return`gai`}function ae(e){try{localStorage.setItem(k,e)}catch{}}var M=[`png`,`jpg`,`jpeg`,`gif`,`webp`,`bmp`,`svg`],N=/!\[([^\]]*)\]\(\s*(?:<([^<>\n]+)>|([^()\s]+))(\s+["'][^"']*["'])?\s*\)/g,oe=/^\s*(`{3,}|~{3,})/,P=/\.([a-z0-9]+)$/;function F(e){let t=e.trim().toLowerCase().match(P);return!!t&&M.includes(t[1])}function I(e){let t=String(e||``).trim();if(!t)return!1;if(/^[a-zA-Z]:[\\/]/.test(t))return F(t);let n=t.match(/^([a-z][a-z0-9+.-]+):/i);return n&&n[1].toLowerCase()!==`file`||t.startsWith(`//`)||t.startsWith(`/`)?!1:F(t)}function L(e,t){return`/api/workbench/jobs/${encodeURIComponent(e)}/image?path=${encodeURIComponent(t)}`}function R(e,t){return`/api/agent/sessions/${encodeURIComponent(e)}/image?path=${encodeURIComponent(t)}`}function z(e,t){return e.includes(`![`)?e.replace(N,(e,n,r,i,a)=>{let o=(r??i??``).trim();return I(o)?`![${n}](${t(o)}${a||``})`:e}):e}function B(e,t){let n=typeof e==`string`?e:``;if(!n||!t||!n.includes(`![`))return n;let r=n.split(`
3
- `),i=null,a=[];for(let e of r){let n=e.match(oe);if(n){let t=n[1][0];i===null?i=t:i===t&&(i=null),a.push(e);continue}a.push(i===null?z(e,t):e)}return a.join(`
4
- `)}function V(e,t){return B(e,t?e=>L(t,e):null)}function se(e,t){return B(e,t?e=>R(t,e):null)}e(),i();var H=[`image/*`,`.pdf`,`.txt`,`.md`,`.json`,`.csv`,`.log`,`.yml`,`.yaml`,`.xml`,`.toml`,`.ini`,`.html`,`.css`,`.js`,`.ts`,`.tsx`,`.vue`,`.py`,`.java`,`.go`,`.rs`,`.sql`,`.sh`].join(`,`),U=65536,W=`local-`,ce=0;function le(e){if(!e||!Array.isArray(e.messages))return[];let t=[],n=e.messages.length,r=new Map;for(let t of e.turnTimings||[])typeof t?.turnIndex==`number`&&Number.isFinite(t?.durationMs)&&r.set(t.turnIndex,t);let i=-1;for(let a=0;a<n;a++){let o=e.messages[a];if(o.role!==`system`){if(o.role===`user`){i+=1;let e=``,n;if(typeof o.content==`string`)e=o.content;else if(Array.isArray(o.content)){e=o.content.filter(e=>e?.type===`text`).map(e=>e.text||``).join(` `);let t=o.content.filter(e=>e?.type===`image_url`&&typeof e.image_url?.url==`string`).map((e,t)=>({id:`att-${a}-${t}`,name:`image`,size:0,type:q(e.image_url?.url||``)||`image/*`,preview:e.image_url?.url}));t.length>0&&(n=t)}(e||n)&&t.push({id:`msg-${a}`,role:`user`,content:e,attachments:n,status:`done`,createdAt:Date.now()})}else if(o.role===`assistant`){let o=`msg-${a}`,s=``,c=[],l=a;for(;l<n;){let t=e.messages[l];if(t.role!==`assistant`&&t.role!==`tool`)break;if(t.role===`assistant`){if(typeof t.content==`string`&&(s+=t.content),t.tool_calls&&t.tool_calls.length>0)for(let e of t.tool_calls)c.push({id:e.id||e.function?.name||d(),name:e.function?.name||``,arguments:e.function?.arguments||``,argsPreview:G(e.function?.name||``,e.function?.arguments||``),status:`done`,result:``})}else{let e=t.tool_call_id||t.name||``,n=c.find(t=>t.id===e);if(n){let e;e=typeof t.content==`string`?t.content:Array.isArray(t.content)&&t.content.filter(e=>e?.type===`text`).map(e=>e.text||``).join(`
5
- `)||`(non-text result)`,e.length>U&&(e=`…(前文已截断)\n${e.slice(-65536)}`),n.result=e}}l++}a=l-1,s.length>U&&(s=`…(前文已截断)\n${s.slice(-65536)}`);let u=!!s,f=c.length>0;if(u||f){let e=r.get(i),n=e?.finishedAt?Date.parse(e.finishedAt):NaN;t.push({id:o,role:`assistant`,content:s,toolCalls:f?c:void 0,status:`done`,createdAt:Number.isFinite(n)&&e?n-e.durationMs:Date.now(),finishedAt:Number.isFinite(n)?n:void 0,meta:e?{durationMs:e.durationMs}:void 0})}}}}return t}function G(e,t){try{let n=JSON.parse(t);switch(e){case`run_command`:return String(n.command||``).slice(0,200);case`read_file`:case`write_file`:case`edit_file`:return String(n.path||``);case`list_files`:return String(n.path||`.`);case`search_text`:return String(n.pattern||``);case`update_plan`:{let e=f(t,`update_plan`);if(!e)return``;let{total:r,done:i}=p(e),a=String(n.explanation||``).replace(/\s+/g,` `).trim();return[`${i}/${r}`,a].filter(Boolean).join(` — `).slice(0,200)}default:return JSON.stringify(n).slice(0,200)}}catch{return t.slice(0,200)}}function K(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(String(r.result||``)),r.onerror=()=>n(r.error||Error(`FileReader failed`)),r.readAsDataURL(e)})}function q(e){let t=/^data:([^;,]+)/.exec(e);return t?t[1]:``}function J(){let e=_(),i=y(),f=++ce,p=n([]),h=n(!1),g=n(ie());function v(e){A(e)&&(g.value=e,ae(e))}let b=a(new Map),x=n(null),S=n(!1),C=0,w=0,T=new Set,E=new Map;function ne(e){return{key:e,sessionId:e.startsWith(W)?null:e,title:``,messages:[],isStreaming:!1,abortController:null,nonce:0,pendingQuestion:null,answeringQuestion:!1,contextUsage:null,queue:[],queuePaused:!1,lastEventAt:null}}function D(e){let t=b.get(e);return t||=(b.set(e,ne(e)),b.get(e)),t}let O=l(()=>x.value?b.get(x.value)??null:null),k=l(()=>O.value?.messages??[]),re=l(()=>{let e=k.value,t=O.value?.sessionId??null;if(!t)return e;let n=!1,r=e.map(e=>{if(!e.content||!e.content.includes(`![`))return e;let r=se(e.content,t);return r===e.content?e:(n=!0,{...e,content:r})});return n?r:e}),j=l(()=>O.value?.isStreaming??!1),M=n(Date.now()),N=null,oe=l(()=>{let e=O.value;return!e||!e.isStreaming||!e.lastEventAt?null:Math.max(0,M.value-e.lastEventAt)});o(j,e=>{e?(M.value=Date.now(),N||=setInterval(()=>{M.value=Date.now()},1e3)):N&&=(clearInterval(N),null)},{immediate:!0}),t()&&s(()=>{N&&=(clearInterval(N),null)});let P=l(()=>O.value?.contextUsage??null),F=l(()=>{let e=P.value;return e?{ratio:Math.min(Math.max(e.tokenRatio,e.messageRatio),1),current:e.tokens,total:e.maxTokens,unit:`K`,suffix:`上下文已使用`,detail:[`${e.messages} / ${e.maxMessages} 条消息`,typeof e.actualInputTokens==`number`&&e.actualInputTokens>0?`实测 ${e.actualInputTokens.toLocaleString()} token`:`估算 ${Math.round(e.estTokens).toLocaleString()} token`,e.droppedMessages>0?`会话共 ${e.transcriptMessages} 条,本次只带入 ${e.messages} 条(其余已摘成梗概)`:``].filter(Boolean).join(`
6
- `)}:null}),I=l(()=>{let e=p.value.find(e=>e.sessionId===x.value);return A(e?.engine)?e.engine:g.value}),L=l(()=>p.value.some(e=>e.sessionId===x.value)),R=l(()=>O.value?.pendingQuestion??null),z=l(()=>O.value?.answeringQuestion??!1),B=l(()=>O.value?.pendingQuestion??null),V=l(()=>O.value?.queuePaused??!1),H=l(()=>(O.value?.queue??[]).map(e=>({id:e.id,text:e.text,attachmentNames:e.files.map(e=>e.file.name)})));function G(e){let t=O.value;if(!t)return;let n=t.queue.findIndex(t=>t.id===e);n<0||(t.queue.splice(n,1),t.queue.length===0&&(t.queuePaused=!1))}function q(e){if(e.isStreaming)return;let t=e.queue.shift();t&&_e(t.text,t.files,{...t.options,targetKey:e.key,background:!0})}function J(){let e=O.value;e&&!e.isStreaming&&e.queue.length!==0&&(e.queuePaused=!1,q(e))}function Y(e){return!!b.get(e)?.isStreaming}function X(t){let n=[...t];for(let t of b.values()){if(!t.sessionId)continue;let r=n.findIndex(e=>e.sessionId===t.sessionId);if(r!==-1){T.delete(t.sessionId),t.isStreaming&&(n[r]={...n[r],isGenerating:!0});continue}if(!t.isStreaming&&!T.has(t.sessionId))continue;let i=new Date().toISOString();n.unshift({sessionId:t.sessionId,title:t.title||m(`@AGENT:无标题`),source:`web`,cwd:e.currentDirectory||``,model:``,engine:g.value,createdAt:i,updatedAt:i,messageCount:t.messages.filter(e=>e.role===`user`).length||1,size:0,isGenerating:t.isStreaming})}return n}function Z(e,t){return(t.updatedAt||``).localeCompare(e.updatedAt||``)}function ue(t){if(!t?.sessionId||p.value.some(e=>e.sessionId===t.sessionId))return;let n={sessionId:t.sessionId,title:t.title||m(`@AGENT:无标题`),source:t.source||`web`,cwd:t.cwd||``,model:t.model||``,engine:t.engine,createdAt:t.createdAt||``,updatedAt:t.updatedAt||``,messageCount:Array.isArray(t.messages)?t.messages.length:0,size:0};E.set(t.sessionId,{meta:n,cwd:e.currentDirectory||``}),p.value=[...p.value,n].sort(Z)}function Q(){if(E.size===0)return;let t=e.currentDirectory||``,n=[];for(let[e,r]of[...E]){if(r.cwd!==t||p.value.some(t=>t.sessionId===e)){E.delete(e);continue}n.push(r.meta)}n.length&&(p.value=[...p.value,...n].sort(Z))}async function $(){let t=++C,n=e.currentDirectory||``;if(!n){p.value=[],h.value=!1;return}h.value=!0;try{let e=`/api/agent/sessions?cwd=${encodeURIComponent(n)}`,i=await fetch(e).then(e=>e.json());if(t!==C)return;if(!i.success){r.error(i.error||m(`@AGENT:加载会话列表失败`));return}let a=Array.isArray(i.sessions)?i.sessions:[];p.value=X(a),Q()}catch(e){if(t!==C)return;r.error(m(`@AGENT:加载会话列表失败`)+`: `+(e?.message||e))}finally{t===C&&(h.value=!1)}}function de(t,n){let r=new Date().toISOString(),i=p.value.find(e=>e.sessionId===t);if(i){i.isGenerating=!0,i.updatedAt=r;return}p.value=[{sessionId:t,title:n||m(`@AGENT:无标题`),source:`web`,cwd:e.currentDirectory||``,model:``,engine:g.value,createdAt:r,updatedAt:r,messageCount:1,size:0,isGenerating:!0},...p.value]}function fe(e){let t=p.value.find(t=>t.sessionId===e);t&&(t.isGenerating=!1)}async function pe(e){if(b.get(e)?.isStreaming){x.value=e;return}S.value=!0,x.value=e;try{let t=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`).then(e=>e.json());if(!t.success){r.error(t.error||m(`@AGENT:加载会话失败`));return}let n=D(e);n.sessionId=e,n.messages=le(t.session),t.session?.title&&(n.title=t.session.title),ue(t.session)}catch(e){r.error(m(`@AGENT:加载会话失败`)+`: `+(e?.message||e))}finally{S.value=!1}}async function me(e){try{await c.confirm(m(`@AGENT:确认删除该会话`),m(`@AGENT:删除后无法恢复`),{type:`warning`})}catch{return}let t=b.get(e);if(t?.abortController)try{t.abortController.abort()}catch{}b.delete(e);try{let t=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`,{method:`DELETE`}).then(e=>e.json());if(!t.success){r.error(t.error||m(`@AGENT:删除失败`));return}p.value=p.value.filter(t=>t.sessionId!==e),E.delete(e),x.value===e&&(x.value=null),r.success(m(`@AGENT:已删除`))}catch(e){r.error(m(`@AGENT:删除失败`)+`: `+(e?.message||e))}}async function he(e,t){try{let n=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:t})}).then(e=>e.json());if(!n.success){r.error(n.error||m(`@AGENT:重命名失败`));return}let i=p.value.find(t=>t.sessionId===e);i&&(i.title=t);let a=b.get(e);a&&(a.title=t),r.success(m(`@AGENT:已重命名`))}catch(e){r.error(m(`@AGENT:重命名失败`)+`: `+(e?.message||e))}}function ge(){x.value=null}async function _e(t,n=[],o={}){let s=n.filter(e=>e?.file?.type?.startsWith(`image/`)),c=n.filter(e=>!e?.file?.type?.startsWith(`image/`)),l=[],u=0;for(let e of c){let t=e.file.size||0;if(!(t>10485760)){if(l.length>=10||u+t>20971520)break;u+=t,l.push(e)}}let p=c.filter(e=>!l.includes(e));p.length>0&&r.warning(`${m(`@AGENT:以下附件超过大小或数量上限,已忽略:`)}${p.map(e=>e.file.name).join(`、`)}`);let h=o.targetKey||x.value||`${W}${Date.now()}-${++w}`,g=D(h);if(!t.trim()&&s.length===0&&l.length===0)return;if(g.isStreaming){g.queue.push({id:d(),text:t,files:[...s,...l],options:o});return}let _=(await Promise.allSettled(s.map(e=>K(e.file)))).map(e=>e.status===`fulfilled`?e.value:``).filter(e=>e.startsWith(`data:image/`)),v=(await Promise.allSettled(l.map(async e=>({name:e.file.name||`file`,dataUrl:await K(e.file)})))).map(e=>e.status===`fulfilled`?e.value:null).filter(e=>!!e&&typeof e.dataUrl==`string`&&e.dataUrl.startsWith(`data:`));o.background||(x.value=g.key),g.nonce+=1;let y=g.nonce;g.abortController=new AbortController;let b=g.abortController;g.pendingQuestion=null,g.answeringQuestion=!1;let S={id:d(),role:`user`,content:t,status:`done`,createdAt:Date.now()},C=[...s,...l];C.length>0&&(S.attachments=C.map(e=>({id:e.id,name:e.file.name||`image`,size:e.file.size||0,type:e.file.type||``,preview:e.preview}))),g.messages.push(S);let T=a({id:d(),role:`assistant`,content:``,status:`pending`,createdAt:Date.now()});g.messages.push(T),g.isStreaming=!0,g.lastEventAt=Date.now(),g.lastSendOptions=o;let E=`${f}:${h}:${y}`;i.begin(E),await ve(g,y,b,T,E,{sessionId:g.sessionId||``,userMessage:t,cwd:e.currentDirectory||``,engine:o.engine??I.value,..._.length>0?{images:_}:{},...v.length>0?{attachments:v}:{},...o.openFilePath?{openFilePath:o.openFilePath}:{},...o.dirStatus?.length?{dirStatus:o.dirStatus}:{},...o.dirSummary?{dirSummary:o.dirSummary}:{},...o.allowDispatch?{allowDispatch:!0,dispatchExecutor:o.dispatchExecutor||``,dispatchUseDefaultPrompt:o.dispatchUseDefaultPrompt!==!1}:{}})}async function ve(e,t,n,o,s,c){let l=String(c.userMessage||``),f=[],p=e.sessionId,h=!1,g=null;try{let i=await fetch(`/api/agent/chat`,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`text/event-stream`},body:JSON.stringify(c),signal:n.signal});if(t!==e.nonce)return;if(!i.ok||!i.body){let e=await i.text().catch(()=>``);throw Error(e||`HTTP ${i.status}`)}let s=i.body.getReader(),h=new TextDecoder(`utf-8`),_=``;for(;;){let{value:n,done:i}=await s.read();if(t!==e.nonce)return;if(i)break;_+=h.decode(n,{stream:!0});let c=_.split(`
7
- `);_=c.pop()??``;for(let t of c){let n=t.trim();if(!n.startsWith(`data:`))continue;let i=n.slice(5).trim();if(!i)continue;let s;try{s=JSON.parse(i)}catch{continue}switch(e.lastEventAt=Date.now(),s.type){case`context`:s.usage&&(e.contextUsage={...e.contextUsage||{},...s.usage});break;case`meta`:if(s.sessionId){let t=String(s.sessionId);if(p=t,e.sessionId!==t){let n=e.key;e.sessionId=t,e.key=t,n!==t&&(b.delete(n),b.set(t,e),x.value===n&&(x.value=t))}let n=String(s.title||``).trim()||l.trim().split(`
8
- `)[0].trim().slice(0,40)||m(`@AGENT:无标题`);e.title||=n,de(t,n)}break;case`attempt`:g={content:(o.content||``).length,reasoning:(o.reasoning||``).length,tools:o.toolCalls?.length??0};break;case`retry`:g&&(o.content=(o.content||``).slice(0,g.content),o.reasoning&&=o.reasoning.slice(0,g.reasoning),o.toolCalls&&o.toolCalls.length>g.tools&&(o.toolCalls.length=g.tools,f=[...o.toolCalls])),o.status=`pending`,o.error=``,o.finishedAt=void 0,o.reasoningStatus===`streaming`&&(o.reasoningStatus=`done`),r.info(m(`@AGENT:连接中断,正在自动重试({attempt}/{max}):{reason}`,{attempt:Number(s.attempt)||0,max:Number(s.maxRetries)||0,reason:String(s.reason||``)}));break;case`thinking`:o.reasoning||(o.reasoning=``,o.reasoningStatus=`streaming`),typeof o.reasoningStartedAt!=`number`&&(o.reasoningStartedAt=Date.now()),o.reasoningEndedAt=Date.now(),o.reasoning+=String(s.delta||``),o.status=`streaming`;break;case`content`:o.status===`pending`&&(o.status=`streaming`);{let e=String(s.delta||``);o.content+=e;let t=u(o.content);t.reasoning&&(o.reasoning||(o.reasoning=``,o.reasoningStatus=`streaming`),o.reasoning=t.reasoning,o.content=t.content)}break;case`tool_call_start`:{let e=a({id:s.toolCallId||d(),name:s.name||``,argsPreview:s.argsPreview||``,arguments:s.arguments||s.argsPreview||``,status:`running`,result:``});f.push(e),o.toolCalls||=[],o.toolCalls.push(e),o.status===`pending`&&(o.status=`streaming`);break}case`tool_output`:{let e=f.find(e=>e.id===s.toolCallId);if(e){let t=`${e.result||``}${String(s.chunk||``)}`;e.result=t.length>U?`…(前文已截断)\n${t.slice(-65536)}`:t}break}case`tool_result`:{let t=f.find(e=>e.id===s.toolCallId);t&&(t.result=String(s.result||``),t.status=`done`,t.name===`ask_user`&&(e.pendingQuestion=null));break}case`ask_user`:e.pendingQuestion={interactionId:String(s.interactionId||``),question:String(s.question||``),options:Array.isArray(s.options)?s.options.map(e=>String(e)):[],allowFreeText:s.allowFreeText!==!1,multiple:s.multiple===!0},ee();break;case`done`:{let e=s.content||o.content,t=u(e);t.reasoning&&!o.reasoning&&(o.reasoning=t.reasoning),o.content=t.content,o.status=`done`,o.reasoningStatus===`streaming`&&(o.reasoningStatus=`done`);break}case`turn_done`:{let e=Number(s.durationMs);if(!Number.isFinite(e)||e<0||o.meta?.durationMs!==void 0)break;o.finishedAt=Date.now(),o.meta={...o.meta||{},durationMs:e};break}case`error`:o.status=`error`,o.error=String(s.error||m(`@AGENT:未知错误`)),o.reasoningStatus===`streaming`&&(o.reasoningStatus=`done`)}}}if(t!==e.nonce)return;o.status===`pending`&&(o.status=`done`)}catch(i){if(t!==e.nonce)return;if(i?.name===`AbortError`||n.signal.aborted)h=!0,o.content=(o.content||``)+`
9
-
10
- [`+m(`@AGENT:已停止`)+`]`,o.status=`done`,o.reasoningStatus===`streaming`&&(o.reasoningStatus=`done`),o.meta?.durationMs===void 0&&(o.finishedAt=Date.now(),o.meta={...o.meta||{},durationMs:o.finishedAt-(o.createdAt||o.finishedAt)});else{o.status=`error`;let e=i?.message||String(i);o.error=m(`@AGENT:连接中断,本轮进度已保留;点「重试」接着跑。原因:{reason}`,{reason:e}),o.reasoningStatus===`streaming`&&(o.reasoningStatus=`done`),r.error(o.error||m(`@AGENT:对话失败`))}}finally{let n=!!e.pendingQuestion,r=o.status===`error`?`error`:`done`;i.end(s),t===e.nonce&&(e.isStreaming=!1,e.pendingQuestion=null,e.answeringQuestion=!1,e.abortController=null,!h&&!n&&te({kind:r,title:e.title,detail:r===`error`&&o.error||o.content,tag:`zen-gitsync-agent-${p||e.key}`,alreadyToast:r===`error`}),e.queue.length>0&&(h||o.status===`error`?e.queuePaused=!0:n||q(e))),p&&(h&&T.add(p),fe(p)),$().catch(()=>{})}}async function ye(t){let n=O.value;if(!n||n.isStreaming)return!1;let a=[...n.messages].reverse().find(e=>e.role===`assistant`),o=(t?.id?n.messages.find(e=>e.id===t.id):null)||a;if(!o||o.role!==`assistant`)return!1;if(a&&o.id!==a.id)return r.warning(m(`@AGENT:只能重试最后一轮`)),!1;if(!n.sessionId)return r.warning(m(`@AGENT:这条会话还没在服务端建立,请重新发送消息`)),!1;let s=p.value.find(e=>e.sessionId===n.sessionId)?.engine||I.value;if(s!==`gai`)return r.warning(m(`@AGENT:该会话由外部 CLI 引擎运行,不支持重试上一轮,请重新发送`)),!1;o.content=``,o.reasoning=void 0,o.reasoningStatus=void 0,o.reasoningStartedAt=void 0,o.reasoningEndedAt=void 0,o.error=``,o.status=`pending`,o.finishedAt=void 0,o.meta&&={...o.meta,durationMs:void 0},n.nonce+=1;let c=n.nonce;n.abortController=new AbortController;let l=n.abortController;n.pendingQuestion=null,n.answeringQuestion=!1,n.isStreaming=!0,n.lastEventAt=Date.now();let u=`${f}:${n.key}:${c}`;return i.begin(u),await ve(n,c,l,o,u,{sessionId:n.sessionId||``,resume:!0,cwd:e.currentDirectory||``,engine:s,...n.lastSendOptions?.openFilePath?{openFilePath:n.lastSendOptions.openFilePath}:{},...n.lastSendOptions?.dirStatus?.length?{dirStatus:n.lastSendOptions.dirStatus}:{},...n.lastSendOptions?.dirSummary?{dirSummary:n.lastSendOptions.dirSummary}:{},...n.lastSendOptions?.allowDispatch?{allowDispatch:!0,dispatchExecutor:n.lastSendOptions.dispatchExecutor||``,dispatchUseDefaultPrompt:n.lastSendOptions.dispatchUseDefaultPrompt!==!1}:{}}),!0}async function be(e){let t=O.value,n=t?.pendingQuestion,i=t?.sessionId,a=(Array.isArray(e)?e:[e]).map(e=>String(e??``).trim()).filter(Boolean);if(!t||!n||!i||!a.length||t.answeringQuestion)return!1;t.answeringQuestion=!0;try{let e=await fetch(`/api/agent/respond`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({sessionId:i,interactionId:n.interactionId,answer:n.multiple?a:a[0]})}).then(e=>e.json());if(!e.success)throw Error(e.error||m(`@AGENT:回答提交失败`));return t.pendingQuestion=null,!0}catch(e){return r.error(e?.message||m(`@AGENT:回答提交失败`)),!1}finally{t.answeringQuestion=!1}}function xe(){let e=O.value;e?.abortController&&(e.abortController.abort(),e.abortController=null)}return{sessions:p,sessionsLoading:h,currentSessionId:x,messages:k,displayMessages:re,isStreaming:j,silentMs:oe,sessionLoading:S,pendingQuestion:R,questionPanel:B,answeringQuestion:z,isSessionGenerating:Y,contextUsage:P,inputContextUsage:F,queuedMessages:H,queuePaused:V,removeQueuedMessage:G,flushQueued:J,currentEngine:I,pendingEngine:g,isEngineLocked:L,pickEngine:v,loadSessions:$,loadSession:pe,deleteSession:me,renameSession:he,newSession:ge,sendMessage:_e,retryTurn:ye,answerQuestion:be,stop:xe}}var Y=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2032%2032'%20fill='none'%3e%3crect%20x='2'%20y='6'%20width='27'%20height='23'%20rx='6'%20fill='%235364E8'/%3e%3cpath%20d='M9.419%2012.581a1.3%201.3%200%200%200-1.838%201.838L11.162%2018l-3.581%203.581a1.3%201.3%200%200%200%201.838%201.838l4.5-4.5a1.3%201.3%200%200%200%200-1.838Z'%20fill='%23FFFFFF'/%3e%3crect%20x='15.7'%20y='21.2'%20width='7.6'%20height='2.6'%20rx='1.3'%20fill='%23FFFFFF'/%3e%3cpath%20d='M25%20.4%2027.115%204.885%2031.6%207l-4.485%202.115L25%2013.6l-2.115-4.485L18.4%207l4.485-2.115Z'%20fill='%23FFFFFF'/%3e%3cpath%20d='M25%202.5%2026.22%205.78%2029.5%207l-3.28%201.22L25%2011.5l-1.22-3.28L20.5%207l3.28-1.22Z'%20fill='%2339D7B5'/%3e%3c/svg%3e`;function X(e){if(!e)return``;try{let t=new Date(e);if(Number.isNaN(t.getTime()))return e;let n=new Date,r=n.getTime()-t.getTime(),i=e=>String(e).padStart(2,`0`);if(t.toDateString()===n.toDateString())return`${i(t.getHours())}:${i(t.getMinutes())}`;if(r<6048e5){let e=Math.floor(r/864e5);return e===0?m(`@AGENT:今天`):`${e}${m(`@AGENT:天前`)}`}return`${t.getFullYear()}-${i(t.getMonth()+1)}-${i(t.getDate())}`}catch{return e}}function Z(e,t){return e.map(e=>({id:e.sessionId,title:e.title||m(`@AGENT:无标题`),meta:`${X(e.updatedAt)} · ${e.messageCount??0} ${m(`@AGENT:条`)}`,generatingText:e.isGenerating||t(e.sessionId)?m(`@AGENT:正在生成中...`):``,badge:e.source===`cli`?`CLI`:``,searchText:e.model}))}function ue(){return{newConversation:m(`@AGENT:新建会话`),searchPlaceholder:m(`@AGENT:搜索会话...`),empty:m(`@AGENT:暂无会话`),emptyHint:m(`@AGENT:点击上方按钮开始对话`),noResult:m(`@AGENT:未找到匹配的会话`),loading:m(`@AGENT:加载会话中...`),rename:m(`@AGENT:重命名`),delete:m(`@AGENT:删除`),untitled:m(`@AGENT:无标题`),collapse:m(`@AGENT:收起会话列表`),expand:m(`@AGENT:展开会话列表`)}}var Q=`g ai`,$=Y,de={enable:!0},fe={enable:!0,items:[`duration`],visibility:`always`};function pe(){return{title:m(`@AGENT:等待你的回答`),placeholder:m(`@AGENT:输入回答`),submit:m(`@AGENT:提交回答`),answered:m(`@AGENT:已回答`),expand:m(`@AGENT:展开完整问答`),collapse:m(`@AGENT:收起完整问答`)}}function me(){return{title:m(`@AGENT:排队中`),hint:m(`@AGENT:本轮结束后依次发送`),pausedHint:m(`@AGENT:已暂停,点「立即发送」继续`),send:m(`@AGENT:加入队列`),flush:m(`@AGENT:立即发送`),remove:m(`@AGENT:移出队列`)}}export{ue as a,Z as c,V as d,O as f,j as h,de as i,H as l,re as m,Q as n,pe as o,D as p,fe as r,me as s,$ as t,J as u};