zen-gitsync 2.19.3 → 2.19.5

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 (71) hide show
  1. package/package.json +1 -1
  2. package/src/aiCommit.js +1 -28
  3. package/src/cli/ai/tools.js +35 -2
  4. package/src/cli/ai/tools.test.js +30 -0
  5. package/src/config.js +35 -3
  6. package/src/peer/store.js +17 -2
  7. package/src/ui/public/assets/AgentView-B4p1C7vE.js +15 -0
  8. package/src/ui/public/assets/{AgentView-DzYcmZ80.css → AgentView-BIehoDwa.css} +1 -1
  9. package/src/ui/public/assets/{AppVersionBadge-Clw0AO_V.js → AppVersionBadge-B-6BT87B.js} +2 -2
  10. package/src/ui/public/assets/{BranchSelector-WG_dzJ1z.js → BranchSelector-C1Kct7NG.js} +1 -1
  11. package/src/ui/public/assets/{CommitForm-Bai-xBwV.js → CommitForm-DoC-6rft.js} +2 -2
  12. package/src/ui/public/assets/{CommonDialog-DTWEVQih.js → CommonDialog-D8XaOcNX.js} +1 -1
  13. package/src/ui/public/assets/{EditorView-6KTavOcm.css → EditorView-B666I1pz.css} +1 -1
  14. package/src/ui/public/assets/EditorView-DrhO2YSI.js +1 -0
  15. package/src/ui/public/assets/{FlowExecutionViewer-D_rQjstg.js → FlowExecutionViewer-CKMH34Br.js} +1 -1
  16. package/src/ui/public/assets/{FlowOrchestrationWorkspace-B982yExF.js → FlowOrchestrationWorkspace-CAFDGDim.js} +1 -1
  17. package/src/ui/public/assets/{LogList-BG9RlR5V.js → LogList-DB6A2R6o.js} +3 -3
  18. package/src/ui/public/assets/{MindmapView-CfF3dnO9.js → MindmapView-C4L5u3S9.js} +1 -1
  19. package/src/ui/public/assets/{MonitorView-C6NkhaTu.js → MonitorView-BjUS__Ze.js} +1 -1
  20. package/src/ui/public/assets/ProjectManagerView-CWX1sSgn.js +1 -0
  21. package/src/ui/public/assets/{ProjectStartupButton-PZDHhzaY.js → ProjectStartupButton-DdMFVPYI.js} +1 -1
  22. package/src/ui/public/assets/{RemoteManagerDialog-CGbTl8Nf.js → RemoteManagerDialog-fSp9IiCs.js} +1 -1
  23. package/src/ui/public/assets/{RemoteRepoCard-DIbrkSSq.js → RemoteRepoCard-Bs01mtmx.js} +1 -1
  24. package/src/ui/public/assets/{SourceMapView-dmFzB7XF.js → SourceMapView-tdQu2qjL.js} +2 -2
  25. package/src/ui/public/assets/{SvgIcon-DqzYKNo_.js → SvgIcon-D5bT7QEj.js} +1 -1
  26. package/src/ui/public/assets/{UserInputNode-DzWmUMwd.js → UserInputNode-DbP3PjQX.js} +1 -1
  27. package/src/ui/public/assets/WorkbenchView-Ahoq6RyI.js +6 -0
  28. package/src/ui/public/assets/{WorkbenchView-sHes69m3.css → WorkbenchView-BcG-GrWp.css} +1 -1
  29. package/src/ui/public/assets/{_plugin-vue_export-helper-DlU9e1mk.js → _plugin-vue_export-helper-BRUY9DoQ.js} +3 -3
  30. package/src/ui/public/assets/clipboard-DTy2aO_N.js +1 -0
  31. package/src/ui/public/assets/{configStore-BNFH8Gjg.js → configStore-1qv5tdrb.js} +1 -1
  32. package/src/ui/public/assets/{dagre-DYyfV0Dg.js → dagre-DcqvOjeb.js} +3 -3
  33. package/src/ui/public/assets/{element-plus-CkMnLwcU.js → element-plus-D8LubGQe.js} +1 -1
  34. package/src/ui/public/assets/{flow-mindmap-DCYEzp78.js → flow-mindmap-DwG2RDXe.js} +1 -1
  35. package/src/ui/public/assets/index-C4masR7z.js +58 -0
  36. package/src/ui/public/assets/index-D9Bza0ac.css +1 -0
  37. package/src/ui/public/assets/{monaco-DpvA3Mh0.js → monaco-CuYd4DgX.js} +1 -1
  38. package/src/ui/public/assets/{office-docx-DoXwhA36.js → office-docx-C4TeE_9M.js} +1 -1
  39. package/src/ui/public/assets/{office-excel-B7HFZyu_.js → office-excel-C7zhprUF.js} +1 -1
  40. package/src/ui/public/assets/{office-pptx-3hKSBbWe.js → office-pptx-DYLwEk0L.js} +1 -1
  41. package/src/ui/public/assets/{relativeTime-DVKGdz_G.js → relativeTime-nh6F0rop.js} +1 -1
  42. package/src/ui/public/assets/taskExecutionExport-PEcuZQo1.js +15 -0
  43. package/src/ui/public/assets/useWorkbenchProjects-CDT0eWCI.js +1 -0
  44. package/src/ui/public/assets/{vendor-2SbNafIY.css → vendor-CHUY5AXG.css} +1 -1
  45. package/src/ui/public/assets/{vendor-LCbsk86d.js → vendor-CUQALT_x.js} +5 -5
  46. package/src/ui/public/assets/{vue-flow-D7nVv56X.js → vue-flow-BEVz6_7M.js} +1 -1
  47. package/src/ui/public/index.html +13 -13
  48. package/src/ui/server/routes/codeAnalysis.js +4 -2
  49. package/src/ui/server/routes/config.js +20 -27
  50. package/src/ui/server/routes/git/aiDiffSummary.js +3 -1
  51. package/src/ui/server/routes/npm.js +4 -44
  52. package/src/ui/server/routes/peerSettings.js +21 -2
  53. package/src/ui/server/routes/projectStartupAi.js +3 -1
  54. package/src/ui/server/routes/projectStartupAi.test.js +7 -4
  55. package/src/ui/server/routes/recentDirectoriesAiSummary.js +3 -1
  56. package/src/ui/server/routes/recentDirectoriesAiSummary.test.js +4 -2
  57. package/src/ui/server/routes/workbench/agentRoutes.js +6 -1
  58. package/src/ui/server/routes/workbench/agentRoutes.test.js +57 -0
  59. package/src/ui/server/routes/workbench/dispatchInstruction.js +4 -2
  60. package/src/ui/server/routes/workbench/imageDescribe.js +4 -2
  61. package/src/ui/server/routes/workbench/index.js +3 -1
  62. package/src/ui/server/routes/workbench/scheduler.js +3 -1
  63. package/src/utils/skipPatterns.js +74 -0
  64. package/src/ui/public/assets/AgentView-DdZB5M3K.js +0 -15
  65. package/src/ui/public/assets/EditorView-DYznT1et.js +0 -1
  66. package/src/ui/public/assets/ProjectManagerView-DfFtI8I9.js +0 -1
  67. package/src/ui/public/assets/WorkbenchView-oGjBJIT6.js +0 -6
  68. package/src/ui/public/assets/index-BVe9erMn.css +0 -1
  69. package/src/ui/public/assets/index-Bz3MwUuu.js +0 -58
  70. package/src/ui/public/assets/taskExecutionExport-0qwbiZRh.js +0 -15
  71. package/src/ui/public/assets/useWorkbenchProjects-flU0ll2K.js +0 -1
@@ -1,15 +0,0 @@
1
- import"./rolldown-runtime-C0FnF6B9.js";import{An as e,Ar as t,C as n,Cn as r,Gn as i,In as a,J as o,Jr as s,Mn as c,S as l,Sn as u,Sr as d,Tn as f,Y as p,Yn as m,_n as h,et as g,gr as _,i as v,ir as y,lr as b,qn as x,w as ee,wn as S,xn as C}from"./element-plus-CkMnLwcU.js";import{n as w,t as T}from"./_plugin-vue_export-helper-DlU9e1mk.js";import{d as E,f as D,m as O,p as k,t as A}from"./configStore-BNFH8Gjg.js";import{A as j,E as M,L as N,T as P,xt as F}from"./index-Bz3MwUuu.js";var te=[`png`,`jpg`,`jpeg`,`gif`,`webp`,`bmp`,`svg`],ne=/!\[([^\]]*)\]\(\s*(?:<([^<>\n]+)>|([^()\s]+))(\s+["'][^"']*["'])?\s*\)/g,re=/^\s*(`{3,}|~{3,})/,ie=/\.([a-z0-9]+)$/;function I(e){let t=e.trim().toLowerCase().match(ie);return!!t&&te.includes(t[1])}function ae(e){let t=String(e||``).trim();if(!t)return!1;if(/^[a-zA-Z]:[\\/]/.test(t))return I(t);let n=t.match(/^([a-z][a-z0-9+.-]+):/i);return n&&n[1].toLowerCase()!==`file`||t.startsWith(`//`)||t.startsWith(`/`)?!1:I(t)}function oe(e,t){return`/api/workbench/jobs/${encodeURIComponent(e)}/image?path=${encodeURIComponent(t)}`}function se(e,t){return`/api/agent/sessions/${encodeURIComponent(e)}/image?path=${encodeURIComponent(t)}`}function L(e,t){return e.includes(`![`)?e.replace(ne,(e,n,r,i,a)=>{let o=(r??i??``).trim();return ae(o)?`![${n}](${t(o)}${a||``})`:e}):e}function R(e,t){let n=typeof e==`string`?e:``;if(!n||!t||!n.includes(`![`))return n;let r=n.split(`
2
- `),i=null,a=[];for(let e of r){let n=e.match(re);if(n){let t=n[1][0];i===null?i=t:i===t&&(i=null),a.push(e);continue}a.push(i===null?L(e,t):e)}return a.join(`
3
- `)}function z(e,t){return R(e,t?e=>oe(t,e):null)}function B(e,t){return R(e,t?e=>se(t,e):null)}b();var V=1e5;function H(){let e=_([]),t=_([]),n=_(V),r=_([]),i=_(null),a=_(!1),o=_(!1),s=_(``),c=_({}),l=_([]),u=_(!1),d=_(!1),f=_(M);async function p(o=!1){try{let l=await fetch(`/api/workbench/orchestrator`,{cache:`no-store`}).then(e=>e.json());return l?.success?(Number.isInteger(l.maxInstructionChars)&&l.maxInstructionChars>0&&(n.value=l.maxInstructionChars),e.value=Array.isArray(l.instructions)?l.instructions:[],t.value=Array.isArray(l.activity)?l.activity:[],r.value=Array.isArray(l.running)?l.running:[],P().setRunning(r.value.length),i.value=l.updatedAt||null,s.value=typeof l.defaultPrompt==`string`?l.defaultPrompt:``,c.value=l.projectPrompts&&typeof l.projectPrompts==`object`?l.projectPrompts:{},f.value=j(l.reportIntervalMs),a.value=!0,!0):(o||v.error(l?.error||w(`@WORKBENCH:读取编排状态失败`)),!1)}catch(e){return o||v.error(w(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}}async function m(e=!1){if(u.value)return!1;u.value=!0;try{let t=await fetch(`/api/workbench/orchestrator/reports`,{cache:`no-store`}).then(e=>e.json());return t?.success?(l.value=Array.isArray(t.reports)?t.reports:[],!0):(e||v.error(t?.error||w(`@WORKBENCH:读取进度报告失败`)),!1)}catch(t){return e||v.error(w(`@WORKBENCH:网络错误: `)+(t?.message||t)),!1}finally{u.value=!1}}async function h(){if(d.value)return null;d.value=!0;try{let e=String(A().locale||``).startsWith(`en`)?`en`:`zh`,t=await fetch(`/api/workbench/orchestrator/report`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({locale:e})}).then(e=>e.json());return t?.success?t.report?(l.value=[t.report,...l.value].slice(0,20),t.report):(v.info(w(`@WORKBENCH:当前没有正在执行的任务,没有可汇报的进度`)),null):(v.error(t?.error||w(`@WORKBENCH:生成进度报告失败`)),null)}catch(e){return v.error(w(`@WORKBENCH:网络错误: `)+(e?.message||e)),null}finally{d.value=!1}}async function g(e){try{let t=await fetch(`/api/workbench/orchestrator/report-interval`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({intervalMs:e})}).then(e=>e.json());return t?.success?(f.value=j(t.reportIntervalMs),!0):(v.error(t?.error||w(`@WORKBENCH:保存失败`)),!1)}catch(e){return v.error(w(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}}async function y(e){try{let t=await fetch(`/api/workbench/orchestrator/default-prompt`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({prompt:e})}).then(e=>e.json());return t?.success?(s.value=typeof t.defaultPrompt==`string`?t.defaultPrompt:``,v.success(w(`@WORKBENCH:已保存全局预设提示词`)),!0):(v.error(t?.error||w(`@WORKBENCH:保存失败`)),!1)}catch(e){return v.error(w(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}}async function b(e,t){try{let n=await fetch(`/api/workbench/orchestrator/project-prompt`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({projectPath:e,prompt:t})}).then(e=>e.json());return n?.success?(c.value=n.projectPrompts&&typeof n.projectPrompts==`object`?n.projectPrompts:{},v.success(w(`@WORKBENCH:已保存项目预设提示词`)),!0):(v.error(n?.error||w(`@WORKBENCH:保存失败`)),!1)}catch(e){return v.error(w(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}}async function x(e){if(o.value)return null;o.value=!0;try{let t=await fetch(`/api/workbench/orchestrator/dispatch`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({text:e.text,projectPath:e.projectPath||``,autoRun:e.autoRun!==!1,useDefaultPrompt:e.useDefaultPrompt!==!1,executor:e.executor,imageText:e.imageText,attachments:(e.attachments||[]).map(e=>({id:e.id,ext:e.ext,originalName:e.originalName}))})}).then(e=>e.json());return t?.success?(await p(!0),{task:t.task||null,ran:!!t.ran}):(v.error(t?.error||w(`@WORKBENCH:派发失败`)),null)}catch(e){return v.error(w(`@WORKBENCH:网络错误: `)+(e?.message||e)),null}finally{o.value=!1}}return{instructions:e,activity:t,running:r,updatedAt:i,loaded:a,dispatching:o,maxInstructionChars:n,defaultPrompt:s,projectPrompts:c,reports:l,loadingReports:u,generatingReport:d,reportIntervalMs:f,loadOrchestrator:p,dispatch:x,saveDefaultPrompt:y,saveProjectPrompt:b,loadReports:m,generateReport:h,setReportInterval:g}}a();function U(){let e=A(),t=F(),n=C({get:()=>e.resolvedTaskExecutor,set:t=>{D(t)&&e.setLastTaskExecutor(t)}}),r=C(()=>({claude:t.claudeAvailable,opencode:t.opencodeAvailable,codex:t.codexAvailable,codebuddy:t.codebuddyAvailable,pi:t.piAvailable,codearts:t.codeartsAvailable})),i=C(()=>E.some(e=>r.value[e.id])),a=C(()=>r.value[n.value]?n.value:Object.keys(r.value).find(e=>r.value[e])??n.value);function o(e){r.value[e]&&(n.value=e)}let s=C(()=>e.ui.dispatchExecutorPriority??[]),c=C(()=>s.value.length>0),l=C(()=>c.value?k(s.value,r.value,a.value):a.value);function u(e){return t.executorModelText(e)}function d(e){return[u(e),t.executorModelDetail(e)].filter(Boolean).join(` · `)}return{selected:n,active:a,priority:s,hasPriority:c,dispatchTarget:l,availability:r,hasAnyExecutor:i,choose:o,executorModelText:u,executorModelTitle:d}}a(),b(),t();var W={key:0,class:`tep tep--static`},G=[`title`,`aria-label`],K={class:`tep__btn-name`},ce={class:`tep__btn-tag`},le=[`title`,`aria-label`],ue={class:`tep__btn-name`},de={class:`tep__item`},fe={class:`tep__item-name`},pe=[`title`],me={key:2,class:`tep__item-missing`},he=T(c({__name:`TaskExecutorPicker`,props:{title:{},readonly:{type:Boolean},value:{}},setup(t){let a=t,{active:c,availability:_,choose:v,executorModelText:b,executorModelTitle:T}=U(),D=C(()=>a.readonly&&a.value?a.value:c.value),k=F();i(()=>{k.fetchExecutorModels()});function A(){return[a.title,T(D.value)].filter(Boolean).join(` · `)}return(i,a)=>{let c=o,C=n,k=ee,j=l;return t.readonly?(x(),f(`span`,W,[u(`span`,{class:`tep__btn`,title:A(),"aria-label":d(w)(`@WORKBENCH:任务执行器`)},[e(N,{executor:D.value,class:`tep__btn-icon`},null,8,[`executor`]),u(`span`,K,s(d(O)(D.value)),1),u(`span`,ce,s(d(w)(`@AGENT:按优先级`)),1)],8,G)])):(x(),r(j,{key:1,trigger:`click`,class:`tep`,onCommand:d(v)},{dropdown:y(()=>[e(k,null,{default:y(()=>[(x(!0),f(h,null,m(d(E),t=>(x(),r(C,{key:t.id,command:t.id,disabled:!d(_)[t.id]},{default:y(()=>[u(`span`,de,[e(N,{executor:t.id,class:`tep__item-icon`},null,8,[`executor`]),u(`span`,fe,s(t.name),1),d(b)(t.id)?(x(),f(`span`,{key:0,class:`tep__item-model`,title:d(T)(t.id)},s(d(b)(t.id)),9,pe)):S(``,!0),D.value===t.id?(x(),r(c,{key:1,class:`tep__item-check`},{default:y(()=>[e(d(g))]),_:1})):d(_)[t.id]?S(``,!0):(x(),f(`span`,me,s(d(w)(`@42BB9:未安装`)),1))])]),_:2},1032,[`command`,`disabled`]))),128))]),_:1})]),default:y(()=>[u(`button`,{type:`button`,class:`tep__btn`,title:A(),"aria-label":d(w)(`@WORKBENCH:任务执行器`)},[e(N,{executor:D.value,class:`tep__btn-icon`},null,8,[`executor`]),u(`span`,ue,s(d(O)(D.value)),1),e(c,{class:`tep__btn-caret`},{default:y(()=>[e(d(p))]),_:1})],8,le)]),_:1},8,[`onCommand`]))}}}),[[`__scopeId`,`data-v-52969d85`]]),ge=8192;function _e(e,t){return e.length>t?`…(前文已截断)\n${e.slice(-t)}`:e}function ve(e,t){let n=e||`done`;return n!==`pending`&&n!==`running`||t===`running`||t===`pending`?n:t===`cancelled`||t===`error`?`error`:`done`}function q(e){let t=e?.toolCalls;if(!Array.isArray(t)||t.length===0)return[];let n=e?.status||`done`,r=[];for(let e=0;e<t.length;e++){let i=t[e];if(!i||typeof i!=`object`)continue;let a=ve(i.status,n),o=typeof i.result==`string`?i.result:``;r.push({id:typeof i.id==`string`&&i.id?i.id:`tool-${e}`,name:typeof i.name==`string`?i.name:``,argsPreview:typeof i.argsPreview==`string`?i.argsPreview:``,arguments:typeof i.arguments==`string`?i.arguments:``,result:o?_e(o,ge):``,status:a,error:typeof i.error==`string`&&i.error?i.error:void 0})}return r}var ye=`
4
-
5
- ---
6
-
7
- `,be=`[运行环境 ·`,xe=`## 跨会话记忆库`,Se=/\n\n---\n本任务包含 \d+ 个附件(请按文件路径读取[\s\S]*$/,Ce=/\n\n续接 #\d+\s*$/;function J(e){let t=e.indexOf(ye);return t===-1?0:t+7}function Y(e){let t=typeof e==`string`?e:``;return t?(t.startsWith(be)&&(t=t.slice(J(t))),t.startsWith(xe)&&(t=t.slice(J(t))),t=t.replace(Se,``).replace(Ce,``),t.trim()):``}function X(e){switch(e){case`todo`:return w(`@WORKBENCH:待执行`);case`running`:return w(`@WORKBENCH:执行中`);case`done`:return w(`@WORKBENCH:已完成`);case`error`:return w(`@WORKBENCH:出错`);case`cancelled`:return w(`@WORKBENCH:已取消`);case`pending`:return w(`@WORKBENCH:排队中`);default:return e}}function we(e){switch(e){case`running`:return`var(--color-primary)`;case`done`:return`#22c55e`;case`error`:return`#ef4444`;case`cancelled`:return`#9ca3af`;case`pending`:return`#f59e0b`;default:return`var(--text-tertiary)`}}function Z(e){let t=e?new Date(e):new Date;if(Number.isNaN(t.getTime()))return``;let n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}`}function Q(e,t=120){let n=e.replace(/\s+/g,` `).trim();return n.length>t?`${n.slice(0,t-1)}…`:n}function Te(e){let t=(e.match(/`+/g)||[]).reduce((e,t)=>Math.max(e,t.length),0),n="`".repeat(Math.max(3,t+1));return`${n}\n${e}\n${n}`}function $(e,t){return`### ${e}\n\n${t.trim()}`}function Ee(e){let t=[];return e.forEach((e,n)=>{let r=e.name||w(`@WORKBENCH:工具`),i=Q(e.argsPreview||``);t.push(`${n+1}. **${r}**${i?` — \`${i}\``:``}`);let a=(e.status===`error`?e.error:e.result)||e.result||e.error||``;a.trim()&&t.push(``,Te(a.trim()))}),t.join(`
8
- `)}function De(e,t={},n={}){let r=Array.isArray(e)?e.filter(Boolean):[],i=n.scope===`brief`,a=[];if(r.forEach((e,t)=>{let n=[],r=Y(e.prompt);if(r&&n.push($(w(`@WORKBENCH:用户提示词`),r)),!i){let t=(e.thinking||``).trim();t&&n.push($(w(`@WORKBENCH:Claude 思考`),t));let r=Ee(q(e));r&&n.push($(w(`@WORKBENCH:工具调用`),r))}let o=(e.output||``).trim();o&&n.push($(w(`@WORKBENCH:模型返回`),o));let s=(e.error||e.agentError||``).trim();if(s&&n.push($(w(`@WORKBENCH:出错`),s)),n.length===0)return;let c=[O(e.agent),X(e.status),Z(e.startedAt)].filter(Boolean);a.push(`## ${w(`@WORKBENCH:第 {n} 轮`,{n:t+1})}\n\n*${c.join(` · `)}*\n\n${n.join(`
9
-
10
- `)}`)}),a.length===0)return``;let o=[`# ${(t.title||``).trim()||w(`@WORKBENCH:未命名任务`)}`],s=(t.projectName||``).trim();return s&&o.push(``,`- ${w(`@WORKBENCH:项目:{name}`,{name:s})}`),o.push(`- ${w(`@WORKBENCH:导出时间:{time}`,{time:Z((t.now||new Date).toISOString())})}`),`${o.join(`
11
- `)}\n\n---\n\n${a.join(`
12
-
13
- ---
14
-
15
- `)}\n`}export{Y as a,U as c,z as d,X as i,H as l,Z as n,q as o,we as r,he as s,De as t,B as u};
@@ -1 +0,0 @@
1
- import"./rolldown-runtime-C0FnF6B9.js";import{An as e,Ar as t,Cn as n,In as r,J as i,Jr as a,Lt as o,Mn as s,Nt as ee,Sn as c,Sr as l,Tn as u,Ur as d,Yn as f,_n as p,gn as m,gr as h,hn as g,i as _,ir as v,lr as y,on as b,qn as x,st as S,wn as C,xn as te,xt as ne}from"./element-plus-CkMnLwcU.js";import{n as w,t as T}from"./_plugin-vue_export-helper-DlU9e1mk.js";import{t as E}from"./SvgIcon-DqzYKNo_.js";import{$ as re,G as D,J as ie,K as O,Q as ae,U as k,W as oe,X as se,Y as A,Z as ce,et as j,nt as le,q as ue,tt as M,xt as N}from"./index-Bz3MwUuu.js";function P(){let e=N();function t(t){return e.lastCheckedAt!==null&&!e.isToolAvailable(t)}async function n(t,n,r){if(!n)return`no-dir`;if(!await A())return _.warning(w(`@67CE7:工具检测失败,请稍后重试`)),`failed`;if(!e.isToolAvailable(t))return`install`;let i=await j(t,n,r);return i.success?(_.success(i.message||w(`@67CE7:已用 {tool} 打开目录`,{tool:O[t]})),`opened`):(_.error(`${w(`@67CE7:打开失败: `)}${i.error??``}`),`failed`)}return{toolMissing:t,tryOpenWithTool:n}}r(),y(),t(),b();var F=[`aria-label`],I=[`onKeydown`],L={class:`proj-menu__icon`},R={class:`proj-menu__label`},z=[`onKeydown`],B={class:`proj-menu__icon`},V={class:`proj-menu__label`},H=[`onKeydown`],U={class:`proj-menu__icon`},de={class:`proj-menu__label`},fe=[`onKeydown`],pe={class:`proj-menu__icon`},me={class:`proj-menu__label`},he=[`onKeydown`],ge={class:`proj-menu__icon`},_e={class:`proj-menu__label`},ve={class:`proj-menu__title`,role:`presentation`},ye=[`onClick`,`onKeydown`],be={class:`proj-menu__icon`},xe={class:`proj-menu__label`},Se={key:0,class:`proj-menu__hint`},Ce={class:`proj-menu__icon`},we=[`src`],Te={class:`proj-menu__label`},Ee={class:`proj-menu__hint`},De={class:`proj-menu__icon`},Oe=[`src`],ke={class:`proj-menu__label`},Ae={class:`proj-menu__icon`},je={class:`proj-menu__label`},Me={class:`proj-menu__icon`},Ne={class:`proj-menu__label`},Pe={key:0,class:`proj-menu__hint`},Fe={key:1,class:`proj-menu__hint`},Ie={class:`proj-menu__icon`},Le={class:`proj-menu__label`},Re={class:`proj-menu__icon`},ze={class:`proj-menu__label`},Be={class:`proj-menu__icon`},Ve={class:`proj-menu__label`},He={class:`proj-menu__title`,role:`presentation`},Ue=[`onClick`,`onKeydown`],W={class:`proj-menu__icon`},We=[`src`],Ge={class:`proj-menu__label`},Ke={class:`proj-menu__hint`},G=T(s({__name:`ProjectOpenMenuList`,props:{path:{},name:{}},emits:[`done`],setup(t,{emit:r}){let s=t,y=r,{toolMissing:b,tryOpenWithTool:T}=P(),A=N(),j=h(!1),G=h(null),K=te(()=>oe.filter(e=>A.desktopAppOf(e)).map(e=>({id:e,name:O[e],icon:D.find(t=>t.id===e)?.icon??``})));async function q(e){let t=A.desktopAppOf(e);if(!t)return;if(y(`done`),!t.installed){window.open(t.downloadUrl,`_blank`,`noopener,noreferrer`);return}let n=await ce(e);n.success?_.success(n.message||w(`@67CE7:已打开 {app}`,{app:t.name})):_.error(n.error||w(`@WORKBENCH:打开桌面端失败`))}async function J(){y(`done`);let e=await ae(s.path);e.success?_.success(e.message||w(`@WORKBENCH:已在文件管理器中打开文件夹`)):_.error(e.error||w(`@WORKBENCH:打开文件夹失败`))}async function Y(){y(`done`);let e=await re(s.path);e.success?_.success(e.message||w(`@67CE7:已在终端中打开目录`)):_.error(e.error||w(`@WORKBENCH:打开终端失败`))}async function X(){y(`done`);let e=await se(s.path);e.success?_.success(w(`@WORKBENCH:已在新标签页启动 g ui`)):_.error(e.error||w(`@WORKBENCH:启动 g ui 失败`))}async function Z(){if(y(`done`),s.name)try{await navigator.clipboard.writeText(s.name),_.success(w(`@67CE7:已复制文件夹名称`))}catch{_.error(w(`@67CE7:复制失败`))}}async function Q(){if(y(`done`),s.path)try{await navigator.clipboard.writeText(s.path),_.success(w(`@67CE7:已复制文件夹路径`))}catch{_.error(w(`@67CE7:复制失败`))}}async function $(e,t){if(await T(e,s.path,t)===`install`){G.value=e,j.value=!0;return}y(`done`)}return(t,r)=>{let s=i;return x(),u(p,null,[c(`ul`,{class:`proj-menu`,role:`menu`,"aria-label":l(w)(`@WORKBENCH:打开方式`)},[c(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:J,onKeydown:[g(m(J,[`prevent`]),[`enter`]),g(m(J,[`prevent`]),[`space`])]},[c(`span`,L,[e(s,{"aria-hidden":`true`},{default:v(()=>[e(l(ne))]),_:1})]),c(`span`,R,a(l(w)(`@WORKBENCH:在文件管理器中打开`)),1)],40,I),c(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:Y,onKeydown:[g(m(Y,[`prevent`]),[`enter`]),g(m(Y,[`prevent`]),[`space`])]},[c(`span`,B,[e(s,{"aria-hidden":`true`},{default:v(()=>[e(l(ee))]),_:1})]),c(`span`,V,a(l(w)(`@WORKBENCH:在终端中打开`)),1)],40,z),c(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:X,onKeydown:[g(m(X,[`prevent`]),[`enter`]),g(m(X,[`prevent`]),[`space`])]},[c(`span`,U,[e(s,{"aria-hidden":`true`},{default:v(()=>[e(l(o))]),_:1})]),c(`span`,de,a(l(w)(`@WORKBENCH:在新标签页启动 g ui`)),1)],40,H),c(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:Z,onKeydown:[g(m(Z,[`prevent`]),[`enter`]),g(m(Z,[`prevent`]),[`space`])]},[c(`span`,pe,[e(s,{"aria-hidden":`true`},{default:v(()=>[e(l(S))]),_:1})]),c(`span`,me,a(l(w)(`@67CE7:复制文件夹名称`)),1)],40,fe),c(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:Q,onKeydown:[g(m(Q,[`prevent`]),[`enter`]),g(m(Q,[`prevent`]),[`space`])]},[c(`span`,ge,[e(s,{"aria-hidden":`true`},{default:v(()=>[e(l(S))]),_:1})]),c(`span`,_e,a(l(w)(`@67CE7:复制文件夹路径`)),1)],40,he),r[23]||=c(`li`,{class:`proj-menu__sep`,role:`separator`},null,-1),c(`li`,ve,a(l(w)(`@WORKBENCH:用工具打开`)),1),(x(!0),u(p,null,f(l(D),t=>(x(),u(`li`,{key:t.id,class:d([`proj-menu__item`,{"is-missing":l(b)(t.id)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>$(t.id),onKeydown:[g(m(e=>$(t.id),[`prevent`]),[`enter`]),g(m(e=>$(t.id),[`prevent`]),[`space`])]},[c(`span`,be,[e(E,{"icon-class":t.icon,class:d({"icon-invert-dark":t.id===`codex`,"icon-outline-dark":l(k).has(t.id)})},null,8,[`icon-class`,`class`])]),c(`span`,xe,a(l(w)(t.labelKey)),1),l(b)(t.id)?(x(),u(`span`,Se,a(l(w)(`@67CE7:未安装`)),1)):C(``,!0)],42,ye))),128)),c(`li`,{class:d([`proj-menu__item`,{"is-missing":l(b)(`claude`)}]),role:`menuitem`,tabindex:`-1`,onClick:r[0]||=e=>$(`claude`),onKeydown:[r[1]||=g(m(e=>$(`claude`),[`prevent`]),[`enter`]),r[2]||=g(m(e=>$(`claude`),[`prevent`]),[`space`])]},[c(`span`,Ce,[c(`img`,{src:l(M),alt:``,class:`proj-menu__img`},null,8,we)]),c(`span`,Te,a(l(w)(`@67CE7:用 Claude Code 打开`)),1),c(`span`,Ee,a(l(b)(`claude`)?l(w)(`@67CE7:未安装`):l(w)(`@67CE7:默认权限`)),1)],34),c(`li`,{class:d([`proj-menu__item proj-menu__item--danger`,{"is-missing":l(b)(`claude`)}]),role:`menuitem`,tabindex:`-1`,onClick:r[3]||=e=>$(`claude`,`bypassPermissions`),onKeydown:[r[4]||=g(m(e=>$(`claude`,`bypassPermissions`),[`prevent`]),[`enter`]),r[5]||=g(m(e=>$(`claude`,`bypassPermissions`),[`prevent`]),[`space`])]},[c(`span`,De,[c(`img`,{src:l(M),alt:``,class:`proj-menu__img`},null,8,Oe)]),c(`span`,ke,a(l(w)(`@67CE7:用 Claude Code 打开(完全批准)`)),1)],34),c(`li`,{class:d([`proj-menu__item proj-menu__item--danger`,{"is-missing":l(b)(`opencode`)}]),role:`menuitem`,tabindex:`-1`,onClick:r[6]||=e=>$(`opencode`,`auto`),onKeydown:[r[7]||=g(m(e=>$(`opencode`,`auto`),[`prevent`]),[`enter`]),r[8]||=g(m(e=>$(`opencode`,`auto`),[`prevent`]),[`space`])]},[c(`span`,Ae,[e(E,{"icon-class":`opencode`})]),c(`span`,je,a(l(w)(`@67CE7:用 OpenCode 打开(完全批准)`)),1)],34),c(`li`,{class:d([`proj-menu__item`,{"is-missing":l(b)(`codex`)}]),role:`menuitem`,tabindex:`-1`,onClick:r[9]||=e=>$(`codex`,`sandboxed`),onKeydown:[r[10]||=g(m(e=>$(`codex`,`sandboxed`),[`prevent`]),[`enter`]),r[11]||=g(m(e=>$(`codex`,`sandboxed`),[`prevent`]),[`space`])]},[c(`span`,Me,[e(E,{"icon-class":`codex`,class:`icon-invert-dark`})]),c(`span`,Ne,a(l(w)(`@67CE7:用 Codex 打开(自动批准)`)),1),l(b)(`codex`)?(x(),u(`span`,Fe,a(l(w)(`@67CE7:未安装`)),1)):(x(),u(`span`,Pe,a(l(w)(`@67CE7:沙箱内`)),1))],34),c(`li`,{class:d([`proj-menu__item proj-menu__item--danger`,{"is-missing":l(b)(`codex`)}]),role:`menuitem`,tabindex:`-1`,onClick:r[12]||=e=>$(`codex`,`bypass`),onKeydown:[r[13]||=g(m(e=>$(`codex`,`bypass`),[`prevent`]),[`enter`]),r[14]||=g(m(e=>$(`codex`,`bypass`),[`prevent`]),[`space`])]},[c(`span`,Ie,[e(E,{"icon-class":`codex`,class:`icon-invert-dark`})]),c(`span`,Le,a(l(w)(`@67CE7:用 Codex 打开(完全批准)`)),1)],34),c(`li`,{class:d([`proj-menu__item proj-menu__item--danger`,{"is-missing":l(b)(`codebuddy`)}]),role:`menuitem`,tabindex:`-1`,onClick:r[15]||=e=>$(`codebuddy`,`bypassPermissions`),onKeydown:[r[16]||=g(m(e=>$(`codebuddy`,`bypassPermissions`),[`prevent`]),[`enter`]),r[17]||=g(m(e=>$(`codebuddy`,`bypassPermissions`),[`prevent`]),[`space`])]},[c(`span`,Re,[e(E,{"icon-class":`codebuddy`})]),c(`span`,ze,a(l(w)(`@67CE7:用 CodeBuddy Code 打开(完全批准)`)),1)],34),c(`li`,{class:d([`proj-menu__item proj-menu__item--danger`,{"is-missing":l(b)(`kimi`)}]),role:`menuitem`,tabindex:`-1`,onClick:r[18]||=e=>$(`kimi`,`auto`),onKeydown:[r[19]||=g(m(e=>$(`kimi`,`auto`),[`prevent`]),[`enter`]),r[20]||=g(m(e=>$(`kimi`,`auto`),[`prevent`]),[`space`])]},[c(`span`,Be,[e(E,{"icon-class":`kimi`})]),c(`span`,Ve,a(l(w)(`@67CE7:用 Kimi Code 打开(完全批准)`)),1)],34),K.value.length?(x(),u(p,{key:0},[r[22]||=c(`li`,{class:`proj-menu__sep`,role:`separator`},null,-1),c(`li`,He,a(l(w)(`@WORKBENCH:桌面端`)),1),(x(!0),u(p,null,f(K.value,e=>(x(),u(`li`,{key:`desktop-${e.id}`,class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:t=>q(e.id),onKeydown:[g(m(t=>q(e.id),[`prevent`]),[`enter`]),g(m(t=>q(e.id),[`prevent`]),[`space`])]},[c(`span`,W,[e.id===`claude`?(x(),u(`img`,{key:0,src:l(M),alt:``,class:`proj-menu__img`},null,8,We)):(x(),n(E,{key:1,"icon-class":e.icon,class:d({"icon-invert-dark":e.id===`codex`,"icon-outline-dark":l(k).has(e.id)})},null,8,[`icon-class`,`class`]))]),c(`span`,Ge,a(l(ie)(l(A).desktopAppOf(e.id))),1),c(`span`,Ke,a(l(ue)(l(A).desktopAppOf(e.id))),1)],40,Ue))),128))],64)):C(``,!0)],8,F),e(le,{modelValue:j.value,"onUpdate:modelValue":r[21]||=e=>j.value=e,tool:G.value},null,8,[`modelValue`,`tool`])],64)}}}),[[`__scopeId`,`data-v-80fde3fe`]]);y();function K(){let e=h([]),t=h([]),n=h(``),r=h(!1),i=h(!1);async function a(a=!1){a||(r.value=!0);try{let r=await fetch(`/api/workbench/projects`,{cache:`no-store`}).then(e=>e.json());return r?.success?(e.value=Array.isArray(r.projects)?r.projects:[],t.value=Array.isArray(r.tasks)?r.tasks:[],n.value=r.currentProjectPath||``,i.value=!0,!0):(a||_.error(r?.error||w(`@WORKBENCH:读取项目列表失败`)),!1)}catch(e){return a||_.error(w(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}finally{r.value=!1}}async function o(e){if(!e)return{ok:!1,keptTasks:0};try{let t=await fetch(`/api/workbench/projects/remove`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e})}).then(e=>e.json()).catch(()=>null);return t?.success?{ok:!0,keptTasks:Number.isFinite(t.keptTasks)?t.keptTasks:0}:(_.error(t?.error||w(`@WORKBENCH:移除项目失败`)),{ok:!1,keptTasks:0})}catch(e){return _.error(w(`@WORKBENCH:网络错误: `)+(e?.message||e)),{ok:!1,keptTasks:0}}}async function s(e){if(!e)return{ok:!1,alreadyKnown:!1};try{let t=await fetch(`/api/workbench/projects/add`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e})}).then(e=>e.json()).catch(()=>null);return t?.success?{ok:!0,alreadyKnown:!!t.alreadyKnown}:(_.error(t?.error||w(`@PROJM:添加项目失败`)),{ok:!1,alreadyKnown:!1})}catch(e){return _.error(w(`@WORKBENCH:网络错误: `)+(e?.message||e)),{ok:!1,alreadyKnown:!1}}}return{projects:e,boardTasks:t,currentProjectPath:n,loading:r,loaded:i,loadProjects:a,removeProject:o,addProject:s}}export{G as n,K as t};