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.
- package/README.md +44 -6
- package/package.json +3 -2
- package/src/ui/public/assets/AgentView-BE7GD8rc.css +1 -0
- package/src/ui/public/assets/AgentView-fJbuH0N-.js +12 -0
- package/src/ui/public/assets/{AppVersionBadge-C8aeLqSe.js → AppVersionBadge-BfgAvMQg.js} +2 -2
- package/src/ui/public/assets/BranchSelector-B55Ta_HD.js +4 -0
- package/src/ui/public/assets/{ChatSilenceBadge-CX-Q1BK4.js → ChatSilenceBadge-BDltHrA2.js} +1 -1
- package/src/ui/public/assets/{CommitForm-5QT3698o.js → CommitForm-C1Jql1he.js} +3 -3
- package/src/ui/public/assets/{CommonDialog-DcXSTg3n.js → CommonDialog-lhBO3OFL.js} +1 -1
- package/src/ui/public/assets/EditorView-Dvi9Js01.css +1 -0
- package/src/ui/public/assets/EditorView-nJTaLq6D.js +46 -0
- package/src/ui/public/assets/{FlowExecutionViewer-CJQEtP0d.js → FlowExecutionViewer-BPMqArlZ.js} +1 -1
- package/src/ui/public/assets/{FlowOrchestrationWorkspace-DxclUFA_.js → FlowOrchestrationWorkspace-Cq-1Knnp.js} +1 -1
- package/src/ui/public/assets/{LogList-BXIbzGgN.js → LogList-Bk7GAfle.js} +4 -4
- package/src/ui/public/assets/{MindmapView-Cp8DqQ1U.js → MindmapView-CBOfycTa.js} +1 -1
- package/src/ui/public/assets/MindmapView-DZHwQrhd.css +1 -0
- package/src/ui/public/assets/MonitorView-3g87o1gD.js +3 -0
- package/src/ui/public/assets/MonitorView-DFLZjKpz.css +1 -0
- package/src/ui/public/assets/ProjectManagerView-DgMq7Jed.js +10 -0
- package/src/ui/public/assets/{ProjectManagerView-DVIx9AVp.css → ProjectManagerView-DhC-Y5PR.css} +1 -1
- package/src/ui/public/assets/ProjectStartupButton-CkJEFz-S.js +1 -0
- package/src/ui/public/assets/{RecentDirectoriesChat-CYvrKZJ0.js → RecentDirectoriesChat-CQ6vjPkE.js} +1 -1
- package/src/ui/public/assets/RemoteManagerDialog-D9arrFOG.js +4 -0
- package/src/ui/public/assets/{RemoteRepoCard-Bf19DvWd.js → RemoteRepoCard-ZQ_SMlQZ.js} +1 -1
- package/src/ui/public/assets/{SourceMapView-BeVBU82G.js → SourceMapView-1q3TRufj.js} +1 -1
- package/src/ui/public/assets/{SvgIcon-kIrDXBzK.js → SvgIcon-CfjWD31j.js} +1 -1
- package/src/ui/public/assets/{UserInputNode-DdStei_J.js → UserInputNode-BdU3sSVR.js} +1 -1
- package/src/ui/public/assets/WorkbenchView-D6orzzEp.css +1 -0
- package/src/ui/public/assets/WorkbenchView-D8WdRklc.js +360 -0
- package/src/ui/public/assets/_plugin-vue_export-helper-D4DL0jyB.js +19 -0
- package/src/ui/public/assets/agentConversations-DJ8rPauy.js +10 -0
- package/src/ui/public/assets/{configStore-Bo0r1aq6.js → configStore-BmWis0h4.js} +1 -1
- package/src/ui/public/assets/{index-9h6sH4q0.js → index-DRDito6l.js} +106 -97
- package/src/ui/public/assets/index-DSQ6mp_N.css +1 -0
- package/src/ui/public/assets/{relativeTime-BzT7yFma.js → relativeTime-BpGKkKiW.js} +1 -1
- package/src/ui/public/assets/toolsStore-CmVXtAw_.js +1 -0
- package/src/ui/public/assets/useOrchestrator-DKr4ShyB.js +1 -0
- package/src/ui/public/assets/useWorkbenchProjects-D169QQnx.js +9 -0
- package/src/ui/public/index.html +7 -7
- package/src/ui/server/routes/fileOpen.js +277 -0
- package/src/ui/server/routes/workbench/agentMarketplace.js +17 -1
- package/src/ui/server/routes/workbench/runExternalTurn.js +9 -0
- package/src/ui/server/routes/workbench/runExternalTurn.test.js +20 -0
- package/src/ui/server/routes/workbench/taskRunner.codebuddy.test.js +42 -0
- package/src/ui/server/routes/workbench/taskRunner.js +34 -3
- package/src/ui/public/assets/AgentView-C-6_QbmJ.css +0 -1
- package/src/ui/public/assets/AgentView-CW4NHZhG.js +0 -12
- package/src/ui/public/assets/BranchSelector-B1qhhHaR.js +0 -4
- package/src/ui/public/assets/EditorView-DkXHZdKh.css +0 -1
- package/src/ui/public/assets/EditorView-eCxdCV3J.js +0 -38
- package/src/ui/public/assets/MindmapView-B2Oz9nCS.css +0 -1
- package/src/ui/public/assets/MonitorView-BDHs5wki.js +0 -3
- package/src/ui/public/assets/MonitorView-CTtuMls4.css +0 -1
- package/src/ui/public/assets/ProjectManagerView-BN-Rk3dE.js +0 -10
- package/src/ui/public/assets/ProjectStartupButton-B0UZ1c5m.js +0 -1
- package/src/ui/public/assets/RemoteManagerDialog-ByB-9iUe.js +0 -4
- package/src/ui/public/assets/WorkbenchView-DK2vT3Dr.css +0 -1
- package/src/ui/public/assets/WorkbenchView-DtOjBTLw.js +0 -358
- package/src/ui/public/assets/_plugin-vue_export-helper-BhoBCXbu.js +0 -19
- package/src/ui/public/assets/agentConversations-DYws7uRd.js +0 -10
- package/src/ui/public/assets/index-mEFBooIF.css +0 -1
- package/src/ui/public/assets/toolsStore-Dw93cKG_.js +0 -1
- package/src/ui/public/assets/useOrchestrator-5ZwvNS0V.js +0 -1
- package/src/ui/public/assets/useWorkbenchProjects-CQY-iTuV.js +0 -7
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{gr as e,lr as t}from"./element-plus-Bz6lYur-.js";import{S as n}from"./vendor-C2k0GBzj.js";import{n as r}from"./_plugin-vue_export-helper-BhoBCXbu.js";import{c as i,s as a}from"./configStore-Bo0r1aq6.js";t();var o=6e5;function s(e){if(!e||typeof e!=`object`)return null;let t=e;return typeof t.name!=`string`||!t.name?null:{name:t.name,detail:typeof t.detail==`string`&&t.detail?t.detail:null,provider:typeof t.provider==`string`&&t.provider?t.provider:null,source:t.source===`config`||t.source===`state`?t.source:null}}var c=n(`tools`,()=>{let t=e(!1),n=e(!1),c=e(!1),l=e(!1),u=e(!1),d=e(!1),f=e(!1),p=e(!1),m=e(!1),h=e(null),g=e(!1),_=e(``),v=e({}),y=e({}),b=e({}),x=e(!1),S=0,C=null;function w(e=!1){return!e&&Date.now()-S<3e5?Promise.resolve():C||(x.value=!0,C=(async()=>{try{let e=await(await fetch(`/api/latest-tool-versions`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({})})).json();e.success&&e.latest&&typeof e.latest==`object`&&(b.value=e.latest,S=Date.now())}catch{}finally{x.value=!1,C=null}})(),C)}let T=null;function E(){return T||(g.value=!0,T=(async()=>{try{let e=await(await fetch(`/api/check-tools`)).json();e.success&&(t.value=!!e.vscode,n.value=!!e.claude,c.value=!!e.codex,l.value=!!e.opencode,u.value=!!e.codebuddy,d.value=!!e.pi,f.value=!!e.kimi,p.value=!!e.zcode,m.value=!!e.dsh,_.value=typeof e.platform==`string`?e.platform:``,v.value=e.installers&&typeof e.installers==`object`?e.installers:{},y.value=e.versions&&typeof e.versions==`object`?e.versions:{},h.value=Date.now())}catch{}finally{g.value=!1,T=null}})(),T)}function D(e){switch(e){case`vscode`:return t.value;case`claude`:return n.value;case`codex`:return c.value;case`opencode`:return l.value;case`codebuddy`:return u.value;case`pi`:return d.value;case`kimi`:return f.value;case`zcode`:return p.value;case`dsh`:return m.value}}let O=e({}),k=e(!1),A=0,j=null;function M(e){if(!k.value)return{status:`unknown`};if(!i(e))return{status:`unset`};let t=O.value[e];return t?{status:`set`,info:t}:{status:`unset`}}function N(e=!1){return!e&&k.value&&Date.now()-A<6e5?Promise.resolve():j||(j=(async()=>{try{let e=await(await fetch(`/api/workbench/executor-models`)).json();if(e?.success&&e.models&&typeof e.models==`object`){let t={};for(let n of a)t[n.id]=s(e.models[n.id]);O.value=t,k.value=!0,A=Date.now()}}catch{}finally{j=null}})(),j)}function P(e){let t=M(e);return t.status===`unknown`?``:t.status===`set`?t.info.name:r(`@42BB9:未在配置中指定`)}function F(e){let t=M(e);return t.status===`set`?[t.info.source===`state`?r(`@42BB9:CLI 内最近使用`):``,t.info.detail,t.info.provider].filter(Boolean).join(` · `):``}let I=null;function L(){I||=(E(),N(),setInterval(()=>{E(),N()},o))}function R(){I&&=(clearInterval(I),null)}return{vscodeAvailable:t,claudeAvailable:n,codexAvailable:c,opencodeAvailable:l,codebuddyAvailable:u,piAvailable:d,kimiAvailable:f,zcodeAvailable:p,dshAvailable:m,lastCheckedAt:h,isChecking:g,platform:_,installers:v,versions:y,latestVersions:b,isFetchingLatest:x,isToolAvailable:D,executorModels:O,executorModelsReady:k,executorModelState:M,executorModelText:P,executorModelDetail:F,fetchExecutorModels:N,checkTools:E,fetchLatestVersions:w,startPolling:L,stopPolling:R}});export{c as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./rolldown-runtime-C0FnF6B9.js";import{gr as e,i as t,lr as n}from"./element-plus-Bz6lYur-.js";import{n as r}from"./_plugin-vue_export-helper-BhoBCXbu.js";import{t as i}from"./configStore-Bo0r1aq6.js";import{m as a}from"./index-9h6sH4q0.js";var o=[0,5,10,15,30,60].map(e=>e*60*1e3),s=6e5;function c(e){let t=Number(e);return o.includes(t)?t:s}function l(e){return e?e>=36e5?`@WORKBENCH:每 {n} 小时报告`:`@WORKBENCH:每 {n} 分钟报告`:`@WORKBENCH:关闭自动报告`}function u(e){return e?{n:Math.round(e>=36e5?e/36e5:e/6e4)}:{}}function d(e){switch(e){case`NO_MODEL`:return`@WORKBENCH:没有可用的 AI 模型,只记录了任务事实`;case`LLM_TIMEOUT`:return`@WORKBENCH:生成超时,只记录了任务事实`;case`LLM_EMPTY`:return`@WORKBENCH:模型没有返回正文,只记录了任务事实`;case`LLM_FAILED`:return`@WORKBENCH:生成失败,只记录了任务事实`;default:return`@WORKBENCH:生成失败,只记录了任务事实`}}function f(e){if(e==null||e===``)return null;let t=Number(e);if(!Number.isFinite(t))return null;let n=Math.round(t);return n>=0&&n<=100?n:null}function p(e,t){let n=new Map,r=new Map;for(let t of e||[])for(let e of t?.tasks||[]){let t=f(e.percent);t!==null&&(e.jobId?n.has(e.jobId)||n.set(e.jobId,t):e.taskId&&!r.has(e.taskId)&&r.set(e.taskId,t))}let i={};for(let e of t||[]){if(!e||!e.id||!e.live)continue;let t=(e.live.jobId?n.get(e.live.jobId):void 0)??r.get(e.id);t!==void 0&&(i[e.id]=t)}return i}function m(e){return typeof e!=`number`||!Number.isFinite(e)||e<=0?null:Math.floor(e)}var h=`@WORKBENCH:AI 估计`,g=`@WORKBENCH:百分比是主 Agent 根据任务思考与工具调用推测的大致估计,不是精确进度`;n();var _=1e5;function v(){let n=e([]),o=e([]),l=e(_),u=e([]),d=e(null),f=e(!1),p=e(!1),m=e(``),h=e({}),g=e([]),v=e(!1),y=e(!1),b=e(s);async function x(e=!1){try{let i=await fetch(`/api/workbench/orchestrator`,{cache:`no-store`}).then(e=>e.json());return i?.success?(Number.isInteger(i.maxInstructionChars)&&i.maxInstructionChars>0&&(l.value=i.maxInstructionChars),n.value=Array.isArray(i.instructions)?i.instructions:[],o.value=Array.isArray(i.activity)?i.activity:[],u.value=Array.isArray(i.running)?i.running:[],a().setRunning(u.value.length),d.value=i.updatedAt||null,m.value=typeof i.defaultPrompt==`string`?i.defaultPrompt:``,h.value=i.projectPrompts&&typeof i.projectPrompts==`object`?i.projectPrompts:{},b.value=c(i.reportIntervalMs),f.value=!0,!0):(e||t.error(i?.error||r(`@WORKBENCH:读取编排状态失败`)),!1)}catch(n){return e||t.error(r(`@WORKBENCH:网络错误: `)+(n?.message||n)),!1}}async function S(e=!1){if(v.value)return!1;v.value=!0;try{let n=await fetch(`/api/workbench/orchestrator/reports`,{cache:`no-store`}).then(e=>e.json());return n?.success?(g.value=Array.isArray(n.reports)?n.reports:[],!0):(e||t.error(n?.error||r(`@WORKBENCH:读取进度报告失败`)),!1)}catch(n){return e||t.error(r(`@WORKBENCH:网络错误: `)+(n?.message||n)),!1}finally{v.value=!1}}async function C(){if(y.value)return null;y.value=!0;try{let e=String(i().locale||``).startsWith(`en`)?`en`:`zh`,n=await fetch(`/api/workbench/orchestrator/report`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({locale:e})}).then(e=>e.json());return n?.success?n.report?(g.value=[n.report,...g.value].slice(0,20),n.report):(t.info(r(`@WORKBENCH:当前没有正在执行的任务,没有可汇报的进度`)),null):(t.error(n?.error||r(`@WORKBENCH:生成进度报告失败`)),null)}catch(e){return t.error(r(`@WORKBENCH:网络错误: `)+(e?.message||e)),null}finally{y.value=!1}}async function w(e){try{let n=await fetch(`/api/workbench/orchestrator/report-interval`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({intervalMs:e})}).then(e=>e.json());return n?.success?(b.value=c(n.reportIntervalMs),!0):(t.error(n?.error||r(`@WORKBENCH:保存失败`)),!1)}catch(e){return t.error(r(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}}async function T(e){try{let n=await fetch(`/api/workbench/orchestrator/default-prompt`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({prompt:e})}).then(e=>e.json());return n?.success?(m.value=typeof n.defaultPrompt==`string`?n.defaultPrompt:``,t.success(r(`@WORKBENCH:已保存全局预设提示词`)),!0):(t.error(n?.error||r(`@WORKBENCH:保存失败`)),!1)}catch(e){return t.error(r(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}}async function E(e,n){try{let i=await fetch(`/api/workbench/orchestrator/project-prompt`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({projectPath:e,prompt:n})}).then(e=>e.json());return i?.success?(h.value=i.projectPrompts&&typeof i.projectPrompts==`object`?i.projectPrompts:{},t.success(r(`@WORKBENCH:已保存项目预设提示词`)),!0):(t.error(i?.error||r(`@WORKBENCH:保存失败`)),!1)}catch(e){return t.error(r(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}}async function D(e){if(p.value)return null;p.value=!0;try{let n=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,attachments:(e.attachments||[]).map(e=>({id:e.id,ext:e.ext,originalName:e.originalName}))})}).then(e=>e.json());return n?.success?(await x(!0),{task:n.task||null,ran:!!n.ran}):(t.error(n?.error||r(`@WORKBENCH:派发失败`)),null)}catch(e){return t.error(r(`@WORKBENCH:网络错误: `)+(e?.message||e)),null}finally{p.value=!1}}return{instructions:n,activity:o,running:u,updatedAt:d,loaded:f,dispatching:p,maxInstructionChars:l,defaultPrompt:m,projectPrompts:h,reports:g,loadingReports:v,generatingReport:y,reportIntervalMs:b,loadOrchestrator:x,dispatch:D,saveDefaultPrompt:T,saveProjectPrompt:E,loadReports:S,generateReport:C,setReportInterval:w}}export{d as a,f as c,h as i,m as l,o as n,l as o,g as r,u as s,v as t,p as u};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import"./rolldown-runtime-C0FnF6B9.js";import{An as e,In as t,J as n,Lt as r,Mn as i,Nt as a,Sn as o,Tn as s,Wr as c,Xr as l,Yn as u,_n as d,gn as f,gr as p,hn as m,i as h,ir as g,jr as _,lr as v,on as y,qn as b,st as x,wn as S,xt as ee}from"./element-plus-Bz6lYur-.js";import{n as C,t as w}from"./_plugin-vue_export-helper-BhoBCXbu.js";import{t as T}from"./SvgIcon-kIrDXBzK.js";import{t as E}from"./toolsStore-Dw93cKG_.js";import{C as D,D as O,E as k,O as A,S as j,T as M,k as N,w as P,x as F}from"./index-9h6sH4q0.js";function I(){let e=E();function t(t){return e.lastCheckedAt!==null&&!e.isToolAvailable(t)}async function n(t,n,r){if(!n)return`no-dir`;if(!await D())return h.warning(C(`@67CE7:工具检测失败,请稍后重试`)),`failed`;if(!e.isToolAvailable(t))return`install`;let i=await O(t,n,r);return i.success?(h.success(i.message||C(`@67CE7:已用 {tool} 打开目录`,{tool:j[t]})),`opened`):(h.error(`${C(`@67CE7:打开失败: `)}${i.error??``}`),`failed`)}return{toolMissing:t,tryOpenWithTool:n}}t(),v();var L=i({__name:`ProjectOpenMenuList`,props:{path:{type:String,required:!0},name:{type:String,required:!0}},emits:[`done`],setup(e,{expose:t,emit:n}){t();let i=e,o=n,{toolMissing:s,tryOpenWithTool:c}=I(),l=p(!1),u=p(null);async function d(){o(`done`);let e=await M(i.path);e.success?h.success(e.message||C(`@WORKBENCH:已在文件管理器中打开文件夹`)):h.error(e.error||C(`@WORKBENCH:打开文件夹失败`))}async function f(){o(`done`);let e=await k(i.path);e.success?h.success(e.message||C(`@67CE7:已在终端中打开目录`)):h.error(e.error||C(`@WORKBENCH:打开终端失败`))}async function m(){o(`done`);let e=await P(i.path);e.success?h.success(C(`@WORKBENCH:已在新标签页启动 g ui`)):h.error(e.error||C(`@WORKBENCH:启动 g ui 失败`))}async function g(){if(o(`done`),i.name)try{await navigator.clipboard.writeText(i.name),h.success(C(`@67CE7:已复制文件夹名称`))}catch{h.error(C(`@67CE7:复制失败`))}}async function _(){if(o(`done`),i.path)try{await navigator.clipboard.writeText(i.path),h.success(C(`@67CE7:已复制文件夹路径`))}catch{h.error(C(`@67CE7:复制失败`))}}async function v(e,t){if(await c(e,i.path,t)===`install`){u.value=e,l.value=!0;return}o(`done`)}let y={props:i,emit:o,toolMissing:s,tryOpenWithTool:c,installVisible:l,installTool:u,openInFileManager:d,openInTerminal:f,launchGui:m,copyFolderName:g,copyFolderPath:_,openWithTool:v,get CopyDocument(){return x},get FolderOpened(){return ee},get Monitor(){return a},get Promotion(){return r},SvgIcon:T,ToolInstallDialog:N,get claudeCodeIcon(){return A},get $t(){return C},get OPEN_WITH_TOOLS(){return F}};return Object.defineProperty(y,"__isScriptSetup",{enumerable:!1,value:!0}),y}});t(),_(),y();var R=[`aria-label`],z=[`onKeydown`],B={class:`proj-menu__icon`},V={class:`proj-menu__label`},H=[`onKeydown`],U={class:`proj-menu__icon`},W={class:`proj-menu__label`},G=[`onKeydown`],K={class:`proj-menu__icon`},q={class:`proj-menu__label`},J=[`onKeydown`],Y={class:`proj-menu__icon`},X={class:`proj-menu__label`},te=[`onKeydown`],Z={class:`proj-menu__icon`},Q={class:`proj-menu__label`},ne={class:`proj-menu__title`,role:`presentation`},re=[`onClick`,`onKeydown`],ie={class:`proj-menu__icon`},ae={class:`proj-menu__label`},oe={key:0,class:`proj-menu__hint`},se={class:`proj-menu__icon`},ce=[`src`],le={class:`proj-menu__label`},ue={class:`proj-menu__hint`},de={class:`proj-menu__icon`},fe=[`src`],pe={class:`proj-menu__label`},me={class:`proj-menu__icon`},he={class:`proj-menu__label`},ge={class:`proj-menu__icon`},_e={class:`proj-menu__label`},ve={key:0,class:`proj-menu__hint`},ye={key:1,class:`proj-menu__hint`},be={class:`proj-menu__icon`},$={class:`proj-menu__label`},xe={class:`proj-menu__icon`},Se={class:`proj-menu__label`},Ce={class:`proj-menu__icon`},we={class:`proj-menu__label`};function Te(t,r,i,a,p,h){let _=n;return b(),s(d,null,[o(`ul`,{class:`proj-menu`,role:`menu`,"aria-label":a.$t(`@WORKBENCH:打开方式`)},[o(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:a.openInFileManager,onKeydown:[m(f(a.openInFileManager,[`prevent`]),[`enter`]),m(f(a.openInFileManager,[`prevent`]),[`space`])]},[o(`span`,B,[e(_,{"aria-hidden":`true`},{default:g(()=>[e(a.FolderOpened)]),_:1})]),o(`span`,V,l(a.$t(`@WORKBENCH:在文件管理器中打开`)),1)],40,z),o(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:a.openInTerminal,onKeydown:[m(f(a.openInTerminal,[`prevent`]),[`enter`]),m(f(a.openInTerminal,[`prevent`]),[`space`])]},[o(`span`,U,[e(_,{"aria-hidden":`true`},{default:g(()=>[e(a.Monitor)]),_:1})]),o(`span`,W,l(a.$t(`@WORKBENCH:在终端中打开`)),1)],40,H),o(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:a.launchGui,onKeydown:[m(f(a.launchGui,[`prevent`]),[`enter`]),m(f(a.launchGui,[`prevent`]),[`space`])]},[o(`span`,K,[e(_,{"aria-hidden":`true`},{default:g(()=>[e(a.Promotion)]),_:1})]),o(`span`,q,l(a.$t(`@WORKBENCH:在新标签页启动 g ui`)),1)],40,G),S(` 复制文件夹名称:放在"打开"这一组里,因为它操作的是项目目录本身,
|
|
2
|
-
而不是"用哪个工具打开"(下面那组有独立标题)。 `),o(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:a.copyFolderName,onKeydown:[m(f(a.copyFolderName,[`prevent`]),[`enter`]),m(f(a.copyFolderName,[`prevent`]),[`space`])]},[o(`span`,Y,[e(_,{"aria-hidden":`true`},{default:g(()=>[e(a.CopyDocument)]),_:1})]),o(`span`,X,l(a.$t(`@67CE7:复制文件夹名称`)),1)],40,J),S(` 复制文件夹路径:与名称成对(名称=最后一级目录名,路径=完整绝对路径,
|
|
3
|
-
粘进终端 cd 用)。同属"操作目录本身"的一组,排在名称下面。 `),o(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:a.copyFolderPath,onKeydown:[m(f(a.copyFolderPath,[`prevent`]),[`enter`]),m(f(a.copyFolderPath,[`prevent`]),[`space`])]},[o(`span`,Z,[e(_,{"aria-hidden":`true`},{default:g(()=>[e(a.CopyDocument)]),_:1})]),o(`span`,Q,l(a.$t(`@67CE7:复制文件夹路径`)),1)],40,te),r[22]||=o(`li`,{class:`proj-menu__sep`,role:`separator`},null,-1),o(`li`,ne,l(a.$t(`@WORKBENCH:用工具打开`)),1),(b(!0),s(d,null,u(a.OPEN_WITH_TOOLS,t=>(b(),s(`li`,{key:t.id,class:c([`proj-menu__item`,{"is-missing":a.toolMissing(t.id)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>a.openWithTool(t.id),onKeydown:[m(f(e=>a.openWithTool(t.id),[`prevent`]),[`enter`]),m(f(e=>a.openWithTool(t.id),[`prevent`]),[`space`])]},[o(`span`,ie,[e(a.SvgIcon,{"icon-class":t.icon,class:c({"icon-invert-dark":t.id===`codex`})},null,8,[`icon-class`,`class`])]),o(`span`,ae,l(a.$t(t.labelKey)),1),a.toolMissing(t.id)?(b(),s(`span`,oe,l(a.$t(`@67CE7:未安装`)),1)):S(`v-if`,!0)],42,re))),128)),S(` claude 有两种权限模式,不混进上面的工具列表(顶栏也是单独排布的) `),o(`li`,{class:c([`proj-menu__item`,{"is-missing":a.toolMissing(`claude`)}]),role:`menuitem`,tabindex:`-1`,onClick:r[0]||=e=>a.openWithTool(`claude`),onKeydown:[r[1]||=m(f(e=>a.openWithTool(`claude`),[`prevent`]),[`enter`]),r[2]||=m(f(e=>a.openWithTool(`claude`),[`prevent`]),[`space`])]},[o(`span`,se,[o(`img`,{src:a.claudeCodeIcon,alt:``,class:`proj-menu__img`},null,8,ce)]),o(`span`,le,l(a.$t(`@67CE7:用 Claude Code 打开`)),1),o(`span`,ue,l(a.toolMissing(`claude`)?a.$t(`@67CE7:未安装`):a.$t(`@67CE7:默认权限`)),1)],34),o(`li`,{class:c([`proj-menu__item proj-menu__item--danger`,{"is-missing":a.toolMissing(`claude`)}]),role:`menuitem`,tabindex:`-1`,onClick:r[3]||=e=>a.openWithTool(`claude`,`bypassPermissions`),onKeydown:[r[4]||=m(f(e=>a.openWithTool(`claude`,`bypassPermissions`),[`prevent`]),[`enter`]),r[5]||=m(f(e=>a.openWithTool(`claude`,`bypassPermissions`),[`prevent`]),[`space`])]},[o(`span`,de,[o(`img`,{src:a.claudeCodeIcon,alt:``,class:`proj-menu__img`},null,8,fe)]),o(`span`,pe,l(a.$t(`@67CE7:用 Claude Code 打开(完全批准)`)),1)],34),S(` opencode 的「完全批准」(\`--auto\`)与 claude 的 bypass 档并列收在末尾:
|
|
4
|
-
它带警示色,混进上面的普通工具列表会把"一行一个工具"的节奏打乱,
|
|
5
|
-
而它又确实得单独成项(默认档已经在上面那条 v-for 里了)。 `),o(`li`,{class:c([`proj-menu__item proj-menu__item--danger`,{"is-missing":a.toolMissing(`opencode`)}]),role:`menuitem`,tabindex:`-1`,onClick:r[6]||=e=>a.openWithTool(`opencode`,`auto`),onKeydown:[r[7]||=m(f(e=>a.openWithTool(`opencode`,`auto`),[`prevent`]),[`enter`]),r[8]||=m(f(e=>a.openWithTool(`opencode`,`auto`),[`prevent`]),[`space`])]},[o(`span`,me,[e(a.SvgIcon,{"icon-class":`opencode`})]),o(`span`,he,l(a.$t(`@67CE7:用 OpenCode 打开(完全批准)`)),1)],34),S(` codex 天然有三档(默认档已在上面那条 v-for 里):自动批准但仍有沙箱 →
|
|
6
|
-
免批准 + 免沙箱。两档都单独成项,理由同 claude / opencode 那两项。 `),o(`li`,{class:c([`proj-menu__item`,{"is-missing":a.toolMissing(`codex`)}]),role:`menuitem`,tabindex:`-1`,onClick:r[9]||=e=>a.openWithTool(`codex`,`sandboxed`),onKeydown:[r[10]||=m(f(e=>a.openWithTool(`codex`,`sandboxed`),[`prevent`]),[`enter`]),r[11]||=m(f(e=>a.openWithTool(`codex`,`sandboxed`),[`prevent`]),[`space`])]},[o(`span`,ge,[e(a.SvgIcon,{"icon-class":`codex`,class:`icon-invert-dark`})]),o(`span`,_e,l(a.$t(`@67CE7:用 Codex 打开(自动批准)`)),1),a.toolMissing(`codex`)?(b(),s(`span`,ye,l(a.$t(`@67CE7:未安装`)),1)):(b(),s(`span`,ve,l(a.$t(`@67CE7:沙箱内`)),1))],34),o(`li`,{class:c([`proj-menu__item proj-menu__item--danger`,{"is-missing":a.toolMissing(`codex`)}]),role:`menuitem`,tabindex:`-1`,onClick:r[12]||=e=>a.openWithTool(`codex`,`bypass`),onKeydown:[r[13]||=m(f(e=>a.openWithTool(`codex`,`bypass`),[`prevent`]),[`enter`]),r[14]||=m(f(e=>a.openWithTool(`codex`,`bypass`),[`prevent`]),[`space`])]},[o(`span`,be,[e(a.SvgIcon,{"icon-class":`codex`,class:`icon-invert-dark`})]),o(`span`,$,l(a.$t(`@67CE7:用 Codex 打开(完全批准)`)),1)],34),S(" codebuddy / kimi 的「完全批准」档(默认档已在上面那条 v-for 里)。\n token 与服务端 buildCodebuddyArgs / buildKimiArgs 对齐:\n codebuddy 'bypassPermissions' → `--permission-mode bypassPermissions`\n kimi 'auto' → `--auto`(Never Ask:从不打断) "),o(`li`,{class:c([`proj-menu__item proj-menu__item--danger`,{"is-missing":a.toolMissing(`codebuddy`)}]),role:`menuitem`,tabindex:`-1`,onClick:r[15]||=e=>a.openWithTool(`codebuddy`,`bypassPermissions`),onKeydown:[r[16]||=m(f(e=>a.openWithTool(`codebuddy`,`bypassPermissions`),[`prevent`]),[`enter`]),r[17]||=m(f(e=>a.openWithTool(`codebuddy`,`bypassPermissions`),[`prevent`]),[`space`])]},[o(`span`,xe,[e(a.SvgIcon,{"icon-class":`codebuddy`})]),o(`span`,Se,l(a.$t(`@67CE7:用 CodeBuddy Code 打开(完全批准)`)),1)],34),o(`li`,{class:c([`proj-menu__item proj-menu__item--danger`,{"is-missing":a.toolMissing(`kimi`)}]),role:`menuitem`,tabindex:`-1`,onClick:r[18]||=e=>a.openWithTool(`kimi`,`auto`),onKeydown:[r[19]||=m(f(e=>a.openWithTool(`kimi`,`auto`),[`prevent`]),[`enter`]),r[20]||=m(f(e=>a.openWithTool(`kimi`,`auto`),[`prevent`]),[`space`])]},[o(`span`,Ce,[e(a.SvgIcon,{"icon-class":`kimi`})]),o(`span`,we,l(a.$t(`@67CE7:用 Kimi Code 打开(完全批准)`)),1)],34)],8,R),S(` 未安装的工具:复用顶栏那套安装引导(同一个组件),不在这里另写一份说明。
|
|
7
|
-
跟着菜单内容一起挂载,所以同时最多只有一份(宿主只渲染打开的那一行)。 `),e(a.ToolInstallDialog,{modelValue:a.installVisible,"onUpdate:modelValue":r[21]||=e=>a.installVisible=e,tool:a.installTool},null,8,[`modelValue`,`tool`])],64)}var Ee=w(L,[[`render`,Te],[`__scopeId`,`data-v-9d06f50a`],[`__file`,`D:/workspace/github_workspace/zen-gitsync/src/ui/client/src/components/ProjectOpenMenuList.vue`]]);v();function De(){let e=p([]),t=p([]),n=p(``),r=p(!1),i=p(!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||h.error(r?.error||C(`@WORKBENCH:读取项目列表失败`)),!1)}catch(e){return a||h.error(C(`@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}:(h.error(t?.error||C(`@WORKBENCH:移除项目失败`)),{ok:!1,keptTasks:0})}catch(e){return h.error(C(`@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}:(h.error(t?.error||C(`@PROJM:添加项目失败`)),{ok:!1,alreadyKnown:!1})}catch(e){return h.error(C(`@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{Ee as n,De as t};
|