zen-gitsync 2.18.19 → 2.18.20

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 (44) hide show
  1. package/package.json +3 -1
  2. package/src/ui/public/assets/{AgentView-CRkUXGCW.js → AgentView-Du9akUeZ.js} +2 -2
  3. package/src/ui/public/assets/{AppVersionBadge-Dqca8Uoi.js → AppVersionBadge-86tbKU20.js} +2 -2
  4. package/src/ui/public/assets/{BranchSelector-CN2iCCAs.js → BranchSelector-CsrkmTCA.js} +1 -1
  5. package/src/ui/public/assets/{ChatSilenceBadge-ltPjxE4-.js → ChatSilenceBadge-BBoFeSqe.js} +1 -1
  6. package/src/ui/public/assets/{CommitForm-mOWC0Zio.js → CommitForm-DBK0GXEh.js} +1 -1
  7. package/src/ui/public/assets/{CommonDialog-D2f72EzI.js → CommonDialog-BkuDIWro.js} +1 -1
  8. package/src/ui/public/assets/EditorAgentPanel-BMUphuG0.css +1 -0
  9. package/src/ui/public/assets/EditorAgentPanel-KiHbQPJP.js +34 -0
  10. package/src/ui/public/assets/EditorView-B18B4yNJ.js +13 -0
  11. package/src/ui/public/assets/EditorView-CnWsMdHg.css +1 -0
  12. package/src/ui/public/assets/{FlowExecutionViewer-4dAyrq6w.js → FlowExecutionViewer-ClUkAmA2.js} +1 -1
  13. package/src/ui/public/assets/{FlowOrchestrationWorkspace-BYcu7GZu.js → FlowOrchestrationWorkspace-B3sOK3fz.js} +1 -1
  14. package/src/ui/public/assets/{LogList-n-gSd_A8.js → LogList-6aO0-2xh.js} +1 -1
  15. package/src/ui/public/assets/{MindmapView-DZHwQrhd.css → MindmapView-BDI3D_1h.css} +1 -1
  16. package/src/ui/public/assets/MindmapView-aJ9TTijE.js +4 -0
  17. package/src/ui/public/assets/{MonitorView-D0mJlgEJ.js → MonitorView-fcNrgVaU.js} +1 -1
  18. package/src/ui/public/assets/{ProjectManagerView-CuKtgxJg.js → ProjectManagerView-CZfrML6A.js} +1 -1
  19. package/src/ui/public/assets/{ProjectStartupButton-Cx0JvDzM.js → ProjectStartupButton-D5MREz6F.js} +1 -1
  20. package/src/ui/public/assets/{RecentDirectoriesChat-5OEF3wdB.js → RecentDirectoriesChat-wfkSF6NU.js} +1 -1
  21. package/src/ui/public/assets/{RemoteManagerDialog-ItxNmLvY.js → RemoteManagerDialog-BBwNlK9J.js} +1 -1
  22. package/src/ui/public/assets/{RemoteRepoCard-y-GzPZ7M.js → RemoteRepoCard-CTnmfv2y.js} +1 -1
  23. package/src/ui/public/assets/{SourceMapView-DXJUPkaX.js → SourceMapView-B4q5qiE8.js} +1 -1
  24. package/src/ui/public/assets/{SvgIcon-DkU8Uro2.js → SvgIcon-WpEiC1rI.js} +1 -1
  25. package/src/ui/public/assets/{UserInputNode-unSg-ucz.js → UserInputNode-Deoc3UvQ.js} +1 -1
  26. package/src/ui/public/assets/{WorkbenchView-C2-X3Ik_.js → WorkbenchView-CijzpDWN.js} +1 -1
  27. package/src/ui/public/assets/{_plugin-vue_export-helper-Dz34f-q7.js → _plugin-vue_export-helper-BhdsvhKo.js} +2 -2
  28. package/src/ui/public/assets/{agentConversations-DLAC_0wI.js → agentConversations-DaAtF1v4.js} +3 -3
  29. package/src/ui/public/assets/{configStore-BjNspgAX.js → configStore-Drlw8KtR.js} +1 -1
  30. package/src/ui/public/assets/{flow-mindmap-DqCKZUlr.css → flow-mindmap-BwYC4xxV.css} +1 -1
  31. package/src/ui/public/assets/flow-mindmap-cTg78Krq.js +139 -0
  32. package/src/ui/public/assets/{index-BybDOX1D.js → index-cDiVh_ZL.js} +6 -6
  33. package/src/ui/public/assets/{relativeTime-DN4_NV-7.js → relativeTime-CoXAs57j.js} +1 -1
  34. package/src/ui/public/assets/{toolsStore-C5a4cV7b.js → toolsStore-CnX34C96.js} +1 -1
  35. package/src/ui/public/assets/{useOrchestrator-Cd6p-ldI.js → useOrchestrator-BXmxJsRl.js} +1 -1
  36. package/src/ui/public/assets/{useWorkbenchProjects-OkQTFYcp.js → useWorkbenchProjects-BS59r5Rj.js} +1 -1
  37. package/src/ui/public/index.html +8 -8
  38. package/src/ui/server/routes/workbench/agentChat.js +12 -4
  39. package/src/ui/server/routes/workbench/agentChatContext.test.js +22 -0
  40. package/src/ui/server/routes/workbench/agentRoutes.js +12 -0
  41. package/src/ui/public/assets/EditorView-D7tyqaAl.js +0 -46
  42. package/src/ui/public/assets/EditorView-cW_Ax-z8.css +0 -1
  43. package/src/ui/public/assets/MindmapView-msWKbkjo.js +0 -2
  44. package/src/ui/public/assets/flow-mindmap-CpjwoduB.js +0 -259
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zen-gitsync",
3
- "version": "2.18.19",
3
+ "version": "2.18.20",
4
4
  "description": "Auto commit, scheduled sync, and visual GUI for Git. Run `g` in any repo for one-key commit & push, AI commit messages, scheduled background sync, and a drag-and-drop workflow builder.",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -114,6 +114,8 @@
114
114
  "verify:file-search:reverse": "node scripts/verify-file-search.mjs --reverse",
115
115
  "verify:wb-copy-folder-name": "node scripts/verify-copy-folder-name.cjs",
116
116
  "verify:marketplace-panel": "node scripts/verify-marketplace-panel.cjs",
117
+ "verify:mindmap-ai": "node scripts/verify-mindmap-ai.cjs",
118
+ "verify:mindmap-ai:reverse": "node scripts/verify-mindmap-ai.cjs --reverse",
117
119
  "verify:wb-open-with-permission": "node scripts/verify-open-with-permission-menus.cjs",
118
120
  "verify:open-with-permission": "node --test test/open-with-permission.test.mjs",
119
121
  "verify:repo-list": "node scripts/verify-repo-list.cjs",
@@ -1,5 +1,5 @@
1
- import"./rolldown-runtime-C0FnF6B9.js";import{An as e,Bn as t,Cn as n,Dt as r,Et as i,Gn as a,Gt as o,Ht as s,In as c,J as l,Kr as u,M as d,Mn as f,Pn as p,Qn as m,Rt as h,Sn as g,Tn as _,Un as v,Vt as y,W as b,Wr as x,Xr as S,Yn as C,_n as w,a as T,ar as E,ct as D,dn as O,en as ee,et as k,fn as A,gr as j,i as M,ir as N,j as P,jr as F,kn as I,ln as L,lr as R,mr as z,nr as B,on as V,pn as H,pt as te,qn as U,r as ne,wn as W,xn as G,xt as re}from"./element-plus-Bz6lYur-.js";import{c as K,t as ie}from"./vendor-C2k0GBzj.js";import{n as q,t as J}from"./_plugin-vue_export-helper-Dz34f-q7.js";import{t as ae}from"./configStore-BjNspgAX.js";import{t as oe}from"./CommonDialog-D2f72EzI.js";import{ft as se,j as ce,pt as Y,tt as le,ut as ue}from"./index-BybDOX1D.js";import{a as de,c as fe,i as pe,l as me,m as he,n as ge,o as _e,r as ve,s as ye,t as be,u as xe}from"./agentConversations-DLAC_0wI.js";import{c as Se,d as Ce,n as we,t as Te,u as Ee}from"./ChatSilenceBadge-ltPjxE4-.js";import{t as De}from"./useOrchestrator-Cd6p-ldI.js";async function X(e,t){let n=await fetch(e,{headers:{"Content-Type":`application/json`},...t}),r={};try{r=await n.json()}catch{}if(!n.ok||r.success===!1)throw Error(r.error||`请求失败 (${n.status})`);return r}async function Oe(){let e=await X(`/api/schedules`);return Array.isArray(e.tasks)?e.tasks:[]}async function ke(e){return(await X(`/api/schedules`,{method:`POST`,body:JSON.stringify(e)})).task}async function Ae(e,t){return(await X(`/api/schedules/${encodeURIComponent(e)}`,{method:`PUT`,body:JSON.stringify(t)})).task}async function je(e){await X(`/api/schedules/${encodeURIComponent(e)}`,{method:`DELETE`})}async function Me(e){await X(`/api/schedules/${encodeURIComponent(e)}/run`,{method:`POST`})}async function Ne(e){await X(`/api/schedules/${encodeURIComponent(e)}/stop`,{method:`POST`})}function Pe(e){if(typeof EventSource>`u`)return()=>{};let t=new EventSource(`/api/schedules/events`);return t.onmessage=t=>{try{e(JSON.parse(t.data))}catch{}},()=>t.close()}var Z=e=>/^\d+$/.test(e)?Number(e):null;function Fe(e){let t=String(e||``).trim(),n=t.split(/\s+/);if(n.length!==5)return{kind:`custom`,raw:t};let[r,i,a,o,s]=n,c=Z(r),l=Z(i);if(t===`* * * * *`)return{kind:`every-minute`,raw:t};let u=r.match(/^\*\/(\d+)$/);if(u&&i===`*`&&a===`*`&&o===`*`&&s===`*`)return{kind:`every-n-minutes`,n:Number(u[1]),raw:t};if(c!==null&&i===`*`&&a===`*`&&o===`*`&&s===`*`)return{kind:`hourly`,minute:c,raw:t};if(c!==null&&l!==null&&a===`*`&&o===`*`&&s===`*`)return{kind:`daily`,hour:l,minute:c,raw:t};let d=Z(s);if(c!==null&&l!==null&&a===`*`&&o===`*`&&d!==null)return{kind:`weekly`,weekday:d%7,hour:l,minute:c,raw:t};let f=Z(a);return c!==null&&l!==null&&f!==null&&o===`*`&&s===`*`?{kind:`monthly`,day:f,hour:l,minute:c,raw:t}:{kind:`custom`,raw:t}}var Q=e=>String(e).padStart(2,`0`),Ie=e=>new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime();function Le(e,t=new Date){if(!e)return{kind:`none`};let n=new Date(e);if(Number.isNaN(n.getTime()))return{kind:`none`};let r=`${Q(n.getHours())}:${Q(n.getMinutes())}`,i=Math.round((Ie(n)-Ie(t))/864e5);return i<0?{kind:`date`,date:`${n.getMonth()+1}-${Q(n.getDate())}`,time:r}:i===0?{kind:`today`,time:r}:i===1?{kind:`tomorrow`,time:r}:i<7?{kind:`weekday`,weekday:n.getDay(),time:r}:{kind:`date`,date:`${n.getMonth()+1}-${Q(n.getDate())}`,time:r}}function Re(e){switch(e){case`ok`:return`ok`;case`error`:case`timed-out`:return`error`;case`skipped-busy`:case`missed`:case`cancelled`:return`skipped`;default:return`pending`}}function ze(e){let t=Number(e);if(!Number.isFinite(t)||t<0)return``;if(t<1e3)return`<1s`;let n=Math.round(t/1e3);if(n<60)return`${n}s`;let r=Math.floor(n/60);return r<60?`${r}m${Q(n%60)}s`:`${Math.floor(r/60)}h${Q(r%60)}m`}function Be(e){let t=Math.min(59,Math.max(0,Math.floor(e.minute))),n=Math.min(23,Math.max(0,Math.floor(e.hour))),r=(Math.floor(e.weekday)%7+7)%7;switch(e.freq){case`minutes`:return`*/${Math.min(59,Math.max(1,Math.floor(e.everyMinutes??30)))} * * * *`;case`hourly`:return`${t} * * * *`;case`daily`:return`${t} ${n} * * *`;case`weekly`:return`${t} ${n} * * ${r}`;case`custom`:return String(e.custom||``).trim()}}var Ve=`https://cdn.simpleicons.org`;function He(e){return`https://github.com/${e}.png?size=64`}function Ue(e,t){return`${Ve}/${e}${t?`/E8EAED`:``}`}var $=[[/chromedevtools|chrome-dev-tools/,`avatar:ChromeDevTools`],[/googlechrome|\bchrome\b/,`googlechrome`],[/\bfirefox\b/,`firefox`],[/puppeteer/,`puppeteer`],[/playwright/,`avatar:microsoft`],[/selenium/,`selenium`],[/cypress/,`cypress`],[/appium/,`appium`],[/browserstack/,`avatar:browserstack`],[/saucelabs/,`saucelabs`],[/storybook/,`storybook`],[/\bgithub\b|githubcopilot|githubactions/,`github`],[/\bgitlab\b/,`gitlab`],[/\bbitbucket\b/,`bitbucket`],[/context7/,`avatar:upstash`],[/modelcontextprotocol/,`avatar:modelcontextprotocol`],[/claude|anthropic/,`claude`],[/\bopenai\b|chatgpt/,`avatar:openai`],[/gemini|google\s*ai\b/,`googlegemini`],[/hugging\s*face/,`huggingface`],[/\bollama\b/,`ollama`],[/\bdify\b/,`dify`],[/\bn8n\b/,`n8n`],[/langchain/,`langchain`],[/perplexity/,`avatar:perplexityai`],[/\bexa\b/,`avatar:exa-labs`],[/firecrawl/,`avatar:firecrawl`],[/\be2b\b/,`avatar:e2b-dev`],[/browserbase/,`avatar:browserbase`],[/apify/,`avatar:apify`],[/postgres|postgresql/,`postgresql`],[/\bmysql\b|mariadb/,`mysql`],[/\bsqlite\b/,`sqlite`],[/mongodb|\bmongo\b/,`mongodb`],[/\bredis\b/,`redis`],[/elasticsearch|\belastic\b/,`elasticsearch`],[/clickhouse/,`clickhouse`],[/snowflake/,`snowflake`],[/databricks/,`databricks`],[/duckdb/,`duckdb`],[/influxdb/,`influxdb`],[/neo4j/,`neo4j`],[/cassandra/,`apachecassandra`],[/rabbitmq/,`rabbitmq`],[/kafka/,`apachekafka`],[/\bqdrant\b/,`qdrant`],[/weaviate/,`weaviate`],[/pinecone/,`avatar:pinecone`],[/planetscale/,`avatar:planetscale`],[/neondatabase|\bneon\b/,`avatar:neondatabase`],[/supabase/,`supabase`],[/firebase/,`firebase`],[/\bdbt\b/,`avatar:dbt-labs`],[/airflow/,`apacheairflow`],[/dagster/,`avatar:dagster-io`],[/prefect/,`prefect`],[/\bspark\b/,`apachespark`],[/hadoop/,`apachehadoop`],[/airbyte/,`airbyte`],[/bigquery/,`googlebigquery`],[/\baws\b|amazon\s*web\s*services|amazons3|amazondynamodb/,`avatar:aws`],[/azure/,`microsoftazure`],[/google\s*cloud|\bgcp\b/,`googlecloud`],[/cloudflare/,`cloudflare`],[/vercel/,`vercel`],[/netlify/,`netlify`],[/heroku/,`heroku`],[/digitalocean/,`digitalocean`],[/\bdocker\b/,`docker`],[/kubernetes|\bk8s\b|kubectl/,`kubernetes`],[/kubeflow/,`kubeflow`],[/terraform/,`terraform`],[/jenkins/,`jenkins`],[/circleci/,`circleci`],[/\bhelm\b/,`avatar:helm`],[/argocd|argo\s*cd/,`avatar:argoproj`],[/\bnginx\b/,`nginx`],[/\bapache\b/,`apache`],[/caddy/,`caddy`],[/traefik/,`traefikproxy`],[/haproxy/,`haproxy`],[/tailscale/,`tailscale`],[/\bngrok\b/,`ngrok`],[/\bconsul\b|hashicorp/,`hashicorp`],[/vault/,`hashicorp`],[/packer/,`packer`],[/virtualbox/,`virtualbox`],[/vmware/,`vmware`],[/grafana/,`grafana`],[/prometheus/,`prometheus`],[/datadog/,`datadog`],[/\bsentry\b/,`sentry`],[/splunk/,`splunk`],[/new\s*relic/,`newrelic`],[/pagerduty/,`pagerduty`],[/opsgenie/,`opsgenie`],[/home\s*assistant/,`homeassistant`],[/obsidian/,`obsidian`],[/notion/,`notion`],[/figma/,`figma`],[/\blinear\b/,`linear`],[/atlassian/,`atlassian`],[/\bjira\b/,`jira`],[/confluence/,`confluence`],[/airtable/,`airtable`],[/clickup/,`clickup`],[/asana/,`asana`],[/trello/,`trello`],[/basecamp/,`basecamp`],[/todoist/,`todoist`],[/zapier/,`zapier`],[/hubspot/,`hubspot`],[/zendesk/,`zendesk`],[/intercom/,`intercom`],[/mailchimp/,`mailchimp`],[/salesforce/,`avatar:salesforce`],[/slack/,`avatar:slack`],[/discord/,`discord`],[/telegram/,`telegram`],[/whatsapp/,`whatsapp`],[/gmail/,`gmail`],[/google\s*drive/,`googledrive`],[/google\s*sheets/,`googlesheets`],[/google\s*docs/,`googledocs`],[/google\s*maps/,`googlemaps`],[/google\s*calendar/,`googlecalendar`],[/youtube/,`youtube`],[/spotify/,`spotify`],[/twilio/,`avatar:twilio`],[/sendgrid/,`avatar:sendgrid`],[/mailgun/,`mailgun`],[/stripe/,`stripe`],[/paypal/,`paypal`],[/shopify/,`shopify`],[/posthog/,`avatar:posthog`],[/segment\b/,`avatar:segmentio`],[/amplitude/,`avatar:amplitude`],[/mixpanel/,`avatar:mixpanel`],[/contentful/,`contentful`],[/sanity/,`sanity`],[/wordpress|\bwp\b/,`wordpress`],[/ghost\b/,`ghost`],[/webflow/,`webflow`],[/framer/,`framer`],[/bitwarden/,`bitwarden`],[/proton\s*vpn/,`protonvpn`],[/1password/,`1password`],[/auth0/,`auth0`],[/okta/,`okta`],[/keycloak/,`keycloak`],[/clerk/,`avatar:clerk`],[/brave\b/,`brave`],[/duckduckgo/,`duckduckgo`],[/openapi|swagger/,`openapiinitiative`],[/graphql/,`graphql`],[/apollo/,`apollographql`],[/postman/,`postman`],[/insomnia/,`insomnia`],[/hoppscotch/,`hoppscotch`],[/\bcurl\b/,`curl`],[/react/,`react`],[/vue/,`vuedotjs`],[/angular/,`angular`],[/svelte/,`svelte`],[/next\.?js/,`nextdotjs`],[/nuxt/,`nuxtdotjs`],[/\bastro\b/,`astro`],[/tailwind/,`tailwindcss`],[/electron/,`electron`],[/flutter/,`flutter`],[/\bswift\b/,`swift`],[/typescript/,`typescript`],[/javascript/,`javascript`],[/python/,`python`],[/node\.?js/,`nodedotjs`],[/\bdeno\b/,`deno`],[/\bbun\b/,`bun`],[/\brust\b/,`rust`],[/\bgolang\b|\bgo\b/,`go`],[/pytorch|\btorch\b/,`pytorch`],[/tensorflow/,`tensorflow`],[/scikit|sklearn/,`scikitlearn`],[/mlflow/,`mlflow`],[/\bray\b/,`ray`],[/jupyter/,`jupyter`],[/\bvite\b/,`vite`],[/vitest/,`vitest`],[/eslint/,`eslint`],[/prettier/,`prettier`],[/\bjest\b/,`jest`],[/\bnpm\b/,`npm`],[/pnpm/,`pnpm`],[/\byarn\b/,`yarn`],[/homebrew/,`homebrew`],[/docusaurus/,`docusaurus`],[/readthedocs/,`readthedocs`],[/gitbook/,`gitbook`],[/markdown/,`markdown`],[/\blinux\b/,`linux`],[/ubuntu/,`ubuntu`],[/debian/,`debian`],[/apple|macos/,`apple`],[/windows/,`windows`],[/microsoft/,`microsoft`],[/\bteams\b/,`microsoftteams`],[/onedrive/,`onedrive`],[/power\s*bi/,`powerbi`],[/bing\b/,`bing`],[/google/,`google`],[/baidu/,`baidu`],[/bilibili/,`bilibili`],[/wechat|weixin/,`wechat`],[/alibaba|aliyun/,`alibabacloud`]],We={url:``,letter:``,hue:0};function Ge(e){let t=String(e||``).trim();if(!t)return``;let n=t.match(/github\.com\/([^/\s]+)/i),r=n?n[1]:t.split(`/`)[0];return/^[A-Za-z0-9](?:[A-Za-z0-9-]{0,38})$/.test(r)?r:``}function Ke(e){let t=0;for(let n=0;n<e.length;n++)t=(t*31+e.charCodeAt(n))%36e4;return t%360}function qe(e,t=!1){let n=String(e?.name||``).trim();if(!n)return We;let r=[...n][0]?.toUpperCase()||``,i=Ke(n.toLowerCase()),a=`${n} ${e?.package||``} ${e?.repository||``}`.toLowerCase();for(let[e,n]of $)if(e.test(a))return{url:n.startsWith(`avatar:`)?He(n.slice(7)):Ue(n,t),letter:r,hue:i};let o=Ge(e?.repository||``);return o?{url:He(o),letter:r,hue:i}:{url:``,letter:r,hue:i}}c(),R();var Je=4e3,Ye=f({__name:`MarketplacePanel`,props:{type:{type:String,required:!0}},setup(e,{expose:t}){t();let n=e,r=ae(),a=j([]),c=j([]),l=j(!1),u=j(``),d=j(``),f=j([]),p=j(`project`),m=j(new Set),g=j(new Set),_=j(new Set),b=G(()=>r.currentDirectory||``),{theme:x}=le(),S=G(()=>x.value===`dark`),C=j(new Set),w=new Map;function T(e){let t=w.get(e);t&&clearTimeout(t),w.delete(e)}function E(e){let t=H(e);qe(e,S.value).url&&(T(t),w.set(t,setTimeout(()=>{w.delete(t),C.value.add(t)},Je)))}v(()=>{for(let e of w.values())clearTimeout(e);w.clear()});function O(e){let t=qe(e,S.value);return C.value.has(H(e))?{...t,url:``}:t}function A(e){T(H(e))}function N(e){T(H(e)),C.value.add(H(e))}let P=G(()=>a.value.reduce((e,t)=>e+(t.status===`ok`?t.items.length:0),0)),F=null;async function I(){if(!l.value){l.value=!0;try{let e=new URLSearchParams({type:n.type,cwd:b.value});d.value&&e.set(`q`,d.value),f.value.length&&e.set(`sources`,f.value.join(`,`));let t=await(await fetch(`/api/agent/marketplace/catalog?${e}`)).json();if(t?.success){a.value=t.groups||[],c.value=t.installed||[];for(let e of a.value)for(let t of e.items)E(t)}else M.error(t?.error||q(`@MKT:加载失败`))}catch{M.error(q(`@MKT:加载失败`))}finally{l.value=!1}}}B(u,e=>{F&&clearTimeout(F),F=setTimeout(()=>{d.value=e.trim(),I()},400)}),B(f,()=>I()),B(()=>n.type,()=>{f.value=[],d.value=``,u.value=``,I()}),B(b,()=>I()),I();let L=G(()=>{let e=b.value?b.value.split(/[\\/]/).filter(Boolean).pop():``;return p.value===`project`?e||q(`@MKT:当前项目`):q(`@MKT:g ai 智能体`)});function R(e){return e.stars?`${V(e.stars)} ★`:e.downloads?`${V(e.downloads)} ${q(`@MKT:周下载`)}`:e.uses?`${V(e.uses)} ${q(`@MKT:次使用`)}`:``}function V(e){return e>=1e3?`${(e/1e3).toFixed(e>=1e4?0:1)}k`:String(e)}function H(e){return`${e.id}`}function U(e){return m.value.has(H(e))}let W=G(()=>{let e={project:[],global:[]};for(let t of c.value)(e[t.target]||=[]).push(t);return e}),K=z({visible:!1,item:null,env:{},args:``});function ie(e){return n.type===`mcp`&&(!!e.envKeys?.length||!!e.args?.length)}function J(e){K.item=e,K.env=Object.fromEntries((e.envKeys||[]).map(e=>[e,``])),K.args=(e.args||[]).join(` `),K.visible=!0}function se(){let e=K.item;if(K.visible=!1,!e)return;let t=Object.fromEntries(Object.entries(K.env).filter(([,e])=>e.trim()!==``)),n=K.args.trim()?K.args.trim().match(/(?:[^\s"]+|"[^"]*")+/g)?.map(e=>e.replace(/^"|"$/g,``))??void 0:void 0;Y(e,{env:t,...n?{args:n}:{}})}async function ce(e){if(!e.installed||await ue(e)){if(ie(e)){J(e);return}await Y(e,{})}}async function Y(e,t){let r=H(e);m.value.add(r);try{let r=await fetch(`/api/agent/marketplace/install`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({type:n.type,target:p.value,cwd:b.value,item:{...e,...t}})}),i=await r.json().catch(()=>null);if(!r.ok||!i?.success){M.error(i?.error||q(`@MKT:安装失败`));return}i.item?.warning&&M.warning(i.item.warning),i.item?.envKeys?.length?M.warning(`${q(`@MKT:还缺环境变量`)}: ${i.item.envKeys.join(`, `)}`):M.success(q(`@MKT:安装成功`)),await I()}catch{M.error(q(`@MKT:安装失败`))}finally{m.value.delete(r)}}async function ue(e){try{return await ne.confirm(`${e.name} ${q(`@MKT:已安装,要重新安装吗?`)}`,q(`@MKT:重新安装`),{confirmButtonText:q(`@MKT:重装`),cancelButtonText:q(`@MKT:取消`),type:`warning`}),!0}catch{return!1}}async function de(e){let t=`${e.target}:${e.id}`;_.value.add(t);try{let t=await fetch(`/api/agent/marketplace/reveal`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({type:n.type,target:e.target,cwd:b.value,id:e.id})}),r=await t.json().catch(()=>null);(!t.ok||!r?.success)&&M.error(r?.error||q(`@MKT:打开失败`))}catch{M.error(q(`@MKT:打开失败`))}finally{_.value.delete(t)}}async function fe(e){try{await ne.confirm(`${q(`@MKT:确定卸载`)} ${e.name}?`,q(`@MKT:卸载`),{confirmButtonText:q(`@MKT:卸载`),cancelButtonText:q(`@MKT:取消`),type:`warning`})}catch{return}let t=`${e.target}:${e.id}`;g.value.add(t);try{let t=new URLSearchParams({target:e.target,cwd:b.value}),r=await fetch(`/api/agent/marketplace/item/${n.type}/${encodeURIComponent(e.id)}?${t}`,{method:`DELETE`}),i=await r.json().catch(()=>null);if(!r.ok||!i?.success){M.error(i?.error||q(`@MKT:卸载失败`));return}M.success(q(`@MKT:已卸载`)),await I()}catch{M.error(q(`@MKT:卸载失败`))}finally{g.value.delete(t)}}let pe={props:n,configStore:r,groups:a,installed:c,loading:l,searchInput:u,query:d,selectedSources:f,installTarget:p,installing:m,removing:g,revealing:_,cwd:b,currentTheme:x,isDark:S,ICON_FALLBACK_MS:Je,iconErrors:C,iconTimers:w,settleIconTimer:T,scheduleIconFallback:E,iconOf:O,onIconLoad:A,onIconError:N,totalCount:P,get searchTimer(){return F},set searchTimer(e){F=e},loadCatalog:I,targetLabel:L,metricText:R,formatCount:V,cardKey:H,isBusy:U,installedByTarget:W,configDialog:K,needsConfig:ie,openConfigDialog:J,confirmConfig:se,onInstall:ce,doInstall:Y,confirmReinstall:ue,onReveal:de,onRemove:fe,get $t(){return q},get Search(){return y},get Refresh(){return h},get Delete(){return D},get Link(){return i},get Check(){return k},get Select(){return s},get Star(){return o},get Download(){return te},get Warning(){return ee},get FolderOpened(){return re},CommonDialog:oe};return Object.defineProperty(pe,"__isScriptSetup",{enumerable:!1,value:!0}),pe}});c(),F(),V();var Xe={class:`marketplace-panel`},Ze={class:`mp-hero`},Qe={class:`mp-hero-text`},$e={class:`mp-hero-title`},et={class:`mp-hero-sub`},tt={class:`mp-hero-count`},nt={class:`mp-toolbar`},rt={class:`mp-search`},it=[`placeholder`],at={class:`mp-toolbar-sub`},ot={class:`mp-target-hint`},st={class:`mp-source-filter`},ct=[`onClick`],lt={class:`mp-body`},ut={class:`mp-group-header`},dt={class:`mp-group-title`},ft={key:0,class:`mp-group-count`},pt={key:1,class:`mp-group-error`},mt=[`href`,`title`],ht={key:0,class:`mp-grid`},gt=[`src`,`alt`,`onLoad`,`onError`],_t={key:1},vt={class:`mp-card-main`},yt={class:`mp-card-head`},bt=[`title`],xt={key:1,class:`mp-card-metric`},St=[`title`],Ct={class:`mp-card-meta`},wt=[`title`],Tt=[`title`],Et={key:2,class:`mp-tag remote`},Dt={class:`mp-card-foot`},Ot=[`href`],kt={key:1,class:`mp-installed-chip`},At=[`disabled`,`onClick`],jt={key:3,class:`mp-not-installable`},Mt={key:1,class:`mp-empty`},Nt={key:0,class:`mp-group installed`},Pt={class:`mp-group-header`},Ft={class:`mp-group-title`},It={class:`mp-group-count`},Lt={key:0,class:`mp-installed-block`},Rt={class:`mp-installed-target`},zt={class:`mp-installed-list`},Bt=[`title`],Vt=[`title`],Ht={key:1,class:`mp-meta-pkg`},Ut={key:2,class:`mp-tag warn`},Wt=[`disabled`,`title`,`onClick`],Gt=[`disabled`,`onClick`],Kt={key:1,class:`mp-empty all`},qt={key:0,class:`mkt-form`},Jt={class:`mkt-form-name`},Yt=[`onUpdate:modelValue`,`placeholder`],Xt={key:0,class:`mkt-field`},Zt={class:`mkt-hint`};function Qt(t,r,i,a,o,s){let c=l,f=P,p=d,m=b,h=T;return U(),_(`div`,Xe,[W(` ── 页头 ───────────────────────────────── `),g(`header`,Ze,[g(`div`,Qe,[g(`h2`,$e,S(i.type===`skill`?a.$t(`@MKT:Skill 广场`):a.$t(`@MKT:MCP 广场`)),1),g(`p`,et,S(i.type===`skill`?a.$t(`@MKT:Skill 广场副标题`):a.$t(`@MKT:MCP 广场副标题`)),1)]),g(`span`,tt,S(i.type===`skill`?a.$t(`@MKT:共 {n} 个技能`,{n:a.totalCount}):a.$t(`@MKT:共 {n} 个服务`,{n:a.totalCount})),1)]),W(` ── 工具栏 ───────────────────────────────── `),g(`div`,nt,[g(`div`,rt,[e(c,{class:`mp-search-icon`},{default:N(()=>[e(a.Search)]),_:1}),E(g(`input`,{"onUpdate:modelValue":r[0]||=e=>a.searchInput=e,class:`mp-search-input`,type:`text`,placeholder:i.type===`skill`?a.$t(`@MKT:搜索 Skill...`):a.$t(`@MKT:搜索 MCP 服务...`)},null,8,it),[[H,a.searchInput]])]),e(p,{modelValue:a.installTarget,"onUpdate:modelValue":r[1]||=e=>a.installTarget=e,size:`small`,class:`mp-target`},{default:N(()=>[e(f,{value:`project`},{default:N(()=>[I(S(a.$t(`@MKT:当前项目`)),1)]),_:1}),e(f,{value:`global`},{default:N(()=>[I(S(a.$t(`@MKT:g ai 智能体`)),1)]),_:1})]),_:1},8,[`modelValue`]),e(m,{content:a.$t(`@MKT:刷新`),placement:`top`,"show-after":300},{default:N(()=>[g(`button`,{class:x([`mp-refresh`,{spinning:a.loading}]),onClick:a.loadCatalog},[e(c,null,{default:N(()=>[e(a.Refresh)]),_:1})],2)]),_:1},8,[`content`])]),g(`div`,at,[g(`span`,ot,[I(S(a.$t(`@MKT:安装到`))+` `,1),g(`b`,null,S(a.targetLabel),1)]),g(`div`,st,[(U(!0),_(w,null,C(a.groups,e=>(U(),_(`button`,{key:e.id,class:x([`mp-chip`,{active:a.selectedSources.includes(e.id)}]),onClick:()=>{let t=a.selectedSources.indexOf(e.id);t>=0?a.selectedSources.splice(t,1):a.selectedSources.push(e.id)}},S(e.label),11,ct))),128)),a.selectedSources.length?(U(),_(`button`,{key:0,class:`mp-chip clear`,onClick:r[2]||=e=>a.selectedSources=[]},S(a.$t(`@MKT:全部来源`)),1)):W(`v-if`,!0)])]),W(` ── 内容 ─────────────────────────────────── `),E((U(),_(`div`,lt,[(U(!0),_(w,null,C(a.groups,t=>(U(),_(`section`,{key:t.id,class:`mp-group`},[g(`header`,ut,[g(`h3`,dt,S(t.label),1),t.status===`ok`?(U(),_(`span`,ft,S(t.items.length),1)):(U(),_(`span`,pt,[e(c,null,{default:N(()=>[e(a.Warning)]),_:1}),I(` `+S(t.error||a.$t(`@MKT:来源不可用`)),1)])),t.homepage?(U(),_(`a`,{key:2,class:`mp-group-link`,href:t.homepage,target:`_blank`,rel:`noopener noreferrer`,title:t.homepage},[e(c,null,{default:N(()=>[e(a.Link)]),_:1})],8,mt)):W(`v-if`,!0)]),t.status===`ok`&&t.items.length?(U(),_(`div`,ht,[(U(!0),_(w,null,C(t.items,t=>(U(),_(`article`,{key:a.cardKey(t),class:`mp-card`},[W(` 图标:品牌 logo(simple-icons / GitHub 组织头像)→ 首字母砖兜底 `),g(`div`,{class:x([`mp-card-icon`,{tile:!a.iconOf(t).url}]),style:u({"--tile-hue":String(a.iconOf(t).hue)})},[a.iconOf(t).url?(U(),_(`img`,{key:0,src:a.iconOf(t).url,alt:t.name,draggable:`false`,onLoad:e=>a.onIconLoad(t),onError:e=>a.onIconError(t)},null,40,gt)):(U(),_(`span`,_t,S(a.iconOf(t).letter),1))],6),g(`div`,vt,[g(`div`,yt,[g(`span`,{class:`mp-card-name`,title:t.name},S(t.name),9,bt),t.verified?(U(),n(c,{key:0,class:`mp-verified`,title:a.$t(`@MKT:已验证`)},{default:N(()=>[e(a.Select)]),_:1},8,[`title`])):W(`v-if`,!0),a.metricText(t)?(U(),_(`span`,xt,[e(c,null,{default:N(()=>[t.stars?(U(),n(a.Star,{key:0})):(U(),n(a.Download,{key:1}))]),_:2},1024),I(` `+S(a.metricText(t)),1)])):W(`v-if`,!0)]),g(`p`,{class:`mp-card-desc`,title:t.description},S(t.description||a.$t(`@MKT:暂无描述`)),9,St),g(`div`,Ct,[t.package?(U(),_(`code`,{key:0,class:`mp-meta-pkg`,title:t.package},S(t.package),9,wt)):t.repository?(U(),_(`span`,{key:1,class:`mp-meta-repo`,title:t.repository+(t.subpath?` · `+t.subpath:``)},[I(S(t.repository),1),t.subpath?(U(),_(w,{key:0},[I(` · `+S(t.subpath),1)],64)):W(`v-if`,!0)],8,Tt)):W(`v-if`,!0),t.transport===`remote`?(U(),_(`span`,Et,S(a.$t(`@MKT:远程服务`)),1)):W(`v-if`,!0),(U(!0),_(w,null,C((t.tags||[]).slice(0,2),e=>(U(),_(`span`,{key:e,class:`mp-tag`},S(e),1))),128))]),g(`div`,Dt,[t.upstream?(U(),_(`a`,{key:0,class:`mp-card-link`,href:t.upstream,target:`_blank`,rel:`noopener noreferrer`},S(a.$t(`@MKT:查看来源`)),9,Ot)):W(`v-if`,!0),r[6]||=g(`span`,{class:`mp-foot-spacer`},null,-1),t.installed?(U(),_(`span`,kt,[e(c,null,{default:N(()=>[e(a.Check)]),_:1}),I(S(a.$t(`@MKT:已安装`)),1)])):t.installable===!1?(U(),_(`span`,jt,S(a.$t(`@MKT:暂不支持一键安装`)),1)):(U(),_(`button`,{key:2,class:`mp-install-btn`,disabled:a.isBusy(t),onClick:e=>a.onInstall(t)},S(a.isBusy(t)?a.$t(`@MKT:安装中...`):a.$t(`@MKT:安装`)),9,At))])])]))),128))])):t.status===`ok`?(U(),_(`div`,Mt,S(a.$t(`@MKT:该来源暂无结果`)),1)):W(`v-if`,!0)]))),128)),W(` ── 已安装 ─────────────────────────────── `),a.installed.length?(U(),_(`section`,Nt,[g(`header`,Pt,[g(`h3`,Ft,S(a.$t(`@MKT:已安装`)),1),g(`span`,It,S(a.installed.length),1)]),(U(),_(w,null,C([`project`,`global`],t=>g(`div`,{key:t},[a.installedByTarget[t]?.length?(U(),_(`div`,Lt,[g(`div`,Rt,S(t===`project`?a.$t(`@MKT:当前项目`):a.$t(`@MKT:g ai 智能体`)),1),g(`div`,zt,[(U(!0),_(w,null,C(a.installedByTarget[t],n=>(U(),_(`div`,{key:t+n.id,class:`mp-installed-row`},[g(`span`,{class:`mp-installed-name`,title:n.name},S(n.name),9,Bt),W(` 实际落盘的标识:SKILL.md 里的 name 常与仓库名不同(如仓库 taste-skill
2
- 里的 skill 自称 brandkit),不显示这个用户就对不上广场卡片上的名字 `),n.id&&n.id!==n.name?(U(),_(`code`,{key:0,class:`mp-installed-id`,title:n.dir||n.file||n.id},S(n.id),9,Vt)):W(`v-if`,!0),n.package?(U(),_(`code`,Ht,S(n.package),1)):W(`v-if`,!0),n.requiredEnv?.length?(U(),_(`span`,Ut,S(a.$t(`@MKT:待配置`))+`: `+S(n.requiredEnv.join(`, `)),1)):W(`v-if`,!0),r[7]||=g(`span`,{class:`mp-foot-spacer`},null,-1),g(`button`,{class:`mp-reveal-btn`,disabled:a.revealing.has(t+n.id),title:n.dir||n.file||``,onClick:e=>a.onReveal(n)},[e(c,null,{default:N(()=>[e(a.FolderOpened)]),_:1}),I(` `+S(a.$t(`@MKT:打开文件夹`)),1)],8,Wt),g(`button`,{class:`mp-remove-btn`,disabled:a.removing.has(t+n.id),onClick:e=>a.onRemove(n)},[e(c,null,{default:N(()=>[e(a.Delete)]),_:1}),I(` `+S(a.removing.has(t+n.id)?a.$t(`@MKT:卸载中...`):a.$t(`@MKT:卸载`)),1)],8,Gt)]))),128))])])):W(`v-if`,!0)])),64))])):W(`v-if`,!0),!a.loading&&!a.groups.length?(U(),_(`div`,Kt,S(a.$t(`@MKT:加载失败`)),1)):W(`v-if`,!0)])),[[h,a.loading]]),W(` ── MCP 安装前配置 ───────────────────────── `),e(a.CommonDialog,{modelValue:a.configDialog.visible,"onUpdate:modelValue":r[5]||=e=>a.configDialog.visible=e,title:a.$t(`@MKT:配置 MCP`),width:`460px`,type:`flex`,"close-on-click-modal":!1,"append-to-body":``},{footer:N(()=>[g(`button`,{class:`mkt-cancel`,onClick:r[4]||=e=>a.configDialog.visible=!1},S(a.$t(`@MKT:取消`)),1),g(`button`,{class:`mkt-confirm`,onClick:a.confirmConfig},S(a.$t(`@MKT:安装`)),1)]),default:N(()=>[a.configDialog.item?(U(),_(`div`,qt,[g(`p`,Jt,S(a.configDialog.item.name),1),(U(!0),_(w,null,C(Object.keys(a.configDialog.env),e=>(U(),_(`div`,{key:e,class:`mkt-field`},[g(`label`,null,S(e),1),E(g(`input`,{"onUpdate:modelValue":t=>a.configDialog.env[e]=t,type:`text`,autocomplete:`off`,placeholder:a.$t(`@MKT:环境变量值`),spellcheck:`false`},null,8,Yt),[[H,a.configDialog.env[e]]])]))),128)),a.configDialog.item.args?.length?(U(),_(`div`,Xt,[g(`label`,null,S(a.$t(`@MKT:启动参数`)),1),E(g(`input`,{"onUpdate:modelValue":r[3]||=e=>a.configDialog.args=e,type:`text`,autocomplete:`off`,spellcheck:`false`},null,512),[[H,a.configDialog.args]]),g(`p`,Zt,S(a.$t(`@MKT:参数提示`)),1)])):W(`v-if`,!0)])):W(`v-if`,!0)]),_:1},8,[`modelValue`,`title`])])}var $t=J(Ye,[[`render`,Qt],[`__scopeId`,`data-v-e9f9e851`],[`__file`,`D:/workspace/github_workspace/zen-gitsync/src/ui/client/src/components/MarketplacePanel.vue`]]);c(),R();var en=f({__name:`SchedulePanel`,emits:[`open-session`],setup(e,{expose:t,emit:n}){t();let r=n,i=ae(),o=j([]),s=j(!0),c=j(``),l=j({}),u=null,d=null;async function f(){try{o.value=await Oe(),c.value=``}catch(e){c.value=e?.message||String(e)}finally{s.value=!1}}function p(){d===null&&(d=window.setTimeout(()=>{d=null,f()},150))}a(async()=>{await f(),u=Pe(e=>{[`tasks_changed`,`task_started`,`task_finished`,`hello`].includes(e.type)&&p()})}),v(()=>{u?.(),d!==null&&window.clearTimeout(d)});let m=G(()=>{let e=o.value.filter(e=>e.enabled).length,t=o.value.length-e;return o.value.length?q(`@SCHED:{on} 个启用 · {off} 个停用`,{on:e,off:t}):``}),h=[`@SCHED:周日`,`@SCHED:周一`,`@SCHED:周二`,`@SCHED:周三`,`@SCHED:周四`,`@SCHED:周五`,`@SCHED:周六`];function g(e){let t=Fe(e.schedule);switch(t.kind){case`every-minute`:return q(`@SCHED:每分钟`);case`every-n-minutes`:return q(`@SCHED:每 {n} 分钟`,{n:t.n});case`hourly`:return q(`@SCHED:每小时第 {minute} 分钟`,{minute:t.minute});case`daily`:return q(`@SCHED:每天 {time}`,{time:`${String(t.hour).padStart(2,`0`)}:${String(t.minute).padStart(2,`0`)}`});case`weekly`:return q(`@SCHED:每周 {weekday} {time}`,{weekday:q(h[t.weekday]),time:`${String(t.hour).padStart(2,`0`)}:${String(t.minute).padStart(2,`0`)}`});case`monthly`:return q(`@SCHED:每月 {day} 日 {time}`,{day:t.day,time:`${String(t.hour).padStart(2,`0`)}:${String(t.minute).padStart(2,`0`)}`});default:return t.raw}}function _(e){if(!e.enabled)return q(`@SCHED:已停用`);if(e.running)return q(`@SCHED:运行中...`);let t=Le(e.nextRunAt);switch(t.kind){case`none`:return``;case`today`:return q(`@SCHED:下次 今天 {time}`,{time:t.time});case`tomorrow`:return q(`@SCHED:下次 明天 {time}`,{time:t.time});case`weekday`:return q(`@SCHED:下次 {weekday} {time}`,{weekday:q(h[t.weekday]),time:t.time});case`date`:return q(`@SCHED:下次 {date} {time}`,{date:t.date,time:t.time})}}function y(e){let t=e.lastRun;if(!t)return q(`@SCHED:还没执行过`);switch(t.status){case`ok`:return q(`@SCHED:成功`);case`error`:return q(`@SCHED:失败`);case`timed-out`:return q(`@SCHED:超时中止`);case`skipped-busy`:return q(`@SCHED:已跳过(会话忙)`);case`missed`:return q(`@SCHED:已错过(未运行)`);case`cancelled`:return q(`@SCHED:已停止`);default:return t.status}}function b(e){let t=e.lastRun;if(!t)return q(`@SCHED:还没执行过`);let n=ze(t.durationMs),r=q(`@SCHED:上次 {status}`,{status:y(e)});return n?`${r} · ${n}`:r}function x(e){return e.lastRun?`is-${Re(e.lastRun.status)}`:`is-muted`}async function S(e,t){if(!l.value[e.id]){l.value={...l.value,[e.id]:!0};try{await t(),await f()}catch(e){M.error(e?.message||String(e))}finally{let t={...l.value};delete t[e.id],l.value=t}}}function C(e){return S(e,()=>Ae(e.id,{enabled:!e.enabled}))}function w(e){return S(e,()=>Me(e.id))}function T(e){return S(e,()=>Ne(e.id))}let E=j(!1),D=j(null);function O(e){D.value=e,E.value=!0}async function ee(){let e=D.value;if(e)try{await je(e.id),E.value=!1,await f()}catch(e){M.error(e?.message||String(e))}}let k=j(!1),A=j(``),N=j(``),P=j(!1),F=j({name:``,freq:`daily`,everyMinutes:30,minute:0,hour:9,weekday:1,custom:``,cwd:``,prompt:``,onMissed:`run`,enabled:!0}),I=G(()=>[{value:`minutes`,label:q(`@SCHED:每 N 分钟`)},{value:`hourly`,label:q(`@SCHED:每小时`)},{value:`daily`,label:q(`@SCHED:每天`)},{value:`weekly`,label:q(`@SCHED:每周`)},{value:`custom`,label:q(`@SCHED:自定义 cron`)}]),L=G(()=>Be({freq:F.value.freq,everyMinutes:F.value.everyMinutes,minute:F.value.minute,hour:F.value.hour,weekday:F.value.weekday,custom:F.value.custom}));function R(){F.value={name:``,freq:`daily`,everyMinutes:30,minute:0,hour:9,weekday:1,custom:``,cwd:i.currentDirectory||``,prompt:``,onMissed:`run`,enabled:!0},N.value=``}function z(){A.value=``,R(),k.value=!0}function B(e){A.value=e.id;let t=Fe(e.schedule),n={name:e.name,freq:`custom`,everyMinutes:30,minute:0,hour:9,weekday:1,custom:e.schedule,cwd:e.cwd,prompt:e.prompt,onMissed:e.onMissed===`skip`?`skip`:`run`,enabled:e.enabled};switch(t.kind){case`every-n-minutes`:n.freq=`minutes`,n.everyMinutes=t.n;break;case`hourly`:n.freq=`hourly`,n.minute=t.minute;break;case`daily`:n.freq=`daily`,n.minute=t.minute,n.hour=t.hour;break;case`weekly`:n.freq=`weekly`,n.minute=t.minute,n.hour=t.hour,n.weekday=t.weekday;break;default:n.freq=`custom`}F.value=n,N.value=``,k.value=!0}async function V(){let e=F.value;if(!e.name.trim()){N.value=q(`@SCHED:任务名不能为空`);return}if(!e.prompt.trim()){N.value=q(`@SCHED:提示词不能为空`);return}let t=L.value;if(!t){N.value=q(`@SCHED:cron 表达式不能为空`);return}let n={name:e.name.trim(),schedule:t,cwd:e.cwd.trim(),prompt:e.prompt.trim(),enabled:e.enabled,onMissed:e.onMissed};P.value=!0;try{A.value?await Ae(A.value,n):await ke(n),k.value=!1,await f()}catch(e){N.value=e?.message||String(e)}finally{P.value=!1}}let H={emit:r,configStore:i,tasks:o,loading:s,errorMsg:c,pending:l,get disposeEvents(){return u},set disposeEvents(e){u=e},get refreshTimer(){return d},set refreshTimer(e){d=e},refresh:f,scheduleRefresh:p,summaryText:m,WEEKDAY_KEYS:h,descText:g,nextText:_,lastStatusText:y,lastText:b,lastClass:x,withPending:S,toggle:C,runNow:w,stop:T,confirmVisible:E,confirmTarget:D,askRemove:O,confirmRemove:ee,formVisible:k,editingId:A,formError:N,saving:P,form:F,freqOptions:I,cronPreview:L,resetForm:R,openCreate:z,openEdit:B,submitForm:V,get $t(){return q},CommonDialog:oe};return Object.defineProperty(H,"__isScriptSetup",{enumerable:!1,value:!0}),H}});F(),c(),V();var tn={class:`schedule-panel`},nn={class:`schedule-toolbar`},rn={class:`schedule-summary`},an={key:0,class:`schedule-error`},on={key:1,class:`schedule-loading`},sn={key:2,class:`schedule-empty`},cn={class:`schedule-empty-title`},ln={class:`schedule-empty-desc`},un={key:3,class:`schedule-list`},dn={class:`schedule-card-body`},fn={class:`schedule-card-head`},pn={class:`schedule-name`},mn={key:0,class:`schedule-running`},hn=[`aria-checked`,`aria-label`,`onClick`],gn={class:`schedule-card-sub`},_n={class:`schedule-desc`},vn=[`onClick`],yn={class:`schedule-card-side`},bn={class:`schedule-actions`},xn=[`disabled`,`onClick`],Sn=[`disabled`,`onClick`],Cn=[`onClick`],wn=[`onClick`],Tn={class:`sch-form`},En={class:`sch-field`},Dn={class:`sch-field-label`},On=[`placeholder`],kn={class:`sch-field`},An={class:`sch-field-label`},jn={class:`sch-freq-row`},Mn=[`value`],Nn={class:`sch-inline-label`},Pn=[`value`],Fn={class:`sch-inline-label`},In=[`value`],Ln=[`value`],Rn=[`value`],zn={class:`sch-inline-label`},Bn=[`value`],Vn={class:`sch-inline-label`},Hn=[`placeholder`],Un={class:`sch-hint`},Wn={class:`sch-field`},Gn={class:`sch-field-label`},Kn=[`placeholder`],qn={class:`sch-field`},Jn={class:`sch-field-label`},Yn=[`placeholder`],Xn={class:`sch-field`},Zn={class:`sch-field-label`},Qn={class:`sch-radio-row`},$n={class:`sch-radio`},er={class:`sch-radio`},tr={class:`sch-radio`},nr={key:0,class:`sch-form-error`},rr={class:`sch-form-footer`},ir=[`disabled`],ar={class:`sch-confirm-text`},or={class:`sch-form-footer`};function sr(t,n,r,i,a,o){return U(),_(`div`,tn,[g(`div`,nn,[g(`span`,rn,S(i.summaryText),1),g(`button`,{type:`button`,class:`sch-btn sch-btn-primary`,onClick:i.openCreate},S(i.$t(`@SCHED:新建任务`)),1)]),i.errorMsg?(U(),_(`div`,an,S(i.$t(`@SCHED:操作失败:{error}`,{error:i.errorMsg})),1)):W(`v-if`,!0),i.loading?(U(),_(`div`,on,S(i.$t(`@SCHED:加载中...`)),1)):i.tasks.length?(U(),_(`div`,un,[(U(!0),_(w,null,C(i.tasks,e=>(U(),_(`article`,{key:e.id,class:x([`schedule-card`,{"is-disabled":!e.enabled,"is-running":!!e.running}])},[g(`div`,dn,[g(`div`,fn,[g(`span`,pn,S(e.name),1),e.running?(U(),_(`span`,mn,S(i.$t(`@SCHED:运行中`)),1)):W(`v-if`,!0),g(`button`,{type:`button`,class:x([`sch-switch`,{on:e.enabled}]),role:`switch`,"aria-checked":e.enabled,"aria-label":e.enabled?i.$t(`@SCHED:停用`):i.$t(`@SCHED:启用`),onClick:t=>i.toggle(e)},[...n[17]||=[g(`span`,{class:`sch-switch-knob`},null,-1)]],10,hn)]),g(`div`,gn,[g(`span`,_n,S(i.descText(e)),1),n[18]||=g(`span`,{class:`schedule-sep`},`·`,-1),g(`span`,{class:x([`schedule-last`,i.lastClass(e)])},S(i.lastText(e)),3),e.sessionId?(U(),_(`button`,{key:0,type:`button`,class:`sch-link`,onClick:t=>i.emit(`open-session`,e.sessionId)},S(i.$t(`@SCHED:查看会话`)),9,vn)):W(`v-if`,!0)])]),g(`div`,yn,[g(`div`,{class:x([`schedule-next`,{"is-muted":!e.enabled}])},S(i.nextText(e)),3),g(`div`,bn,[e.running?(U(),_(`button`,{key:0,type:`button`,class:`sch-btn`,disabled:!!i.pending[e.id],onClick:t=>i.stop(e)},S(i.$t(`@SCHED:停止`)),9,xn)):(U(),_(`button`,{key:1,type:`button`,class:`sch-btn`,disabled:!!i.pending[e.id],onClick:t=>i.runNow(e)},S(i.$t(`@SCHED:运行`)),9,Sn)),g(`button`,{type:`button`,class:`sch-btn`,onClick:t=>i.openEdit(e)},S(i.$t(`@SCHED:编辑`)),9,Cn),g(`button`,{type:`button`,class:`sch-btn sch-btn-danger`,onClick:t=>i.askRemove(e)},S(i.$t(`@SCHED:删除`)),9,wn)])])],2))),128))])):(U(),_(`div`,sn,[g(`p`,cn,S(i.$t(`@SCHED:还没有定时任务`)),1),g(`p`,ln,S(i.$t(`@SCHED:让 g ai 在指定时间自动做事:定时拉代码、定时巡检、定时汇总。也可以在对话里直接说「每天 9 点帮我…」,让 g ai 来创建。`)),1)])),W(` 新建 / 编辑 `),e(i.CommonDialog,{modelValue:i.formVisible,"onUpdate:modelValue":n[14]||=e=>i.formVisible=e,title:i.editingId?i.$t(`@SCHED:编辑任务`):i.$t(`@SCHED:新建任务`),"close-on-click-modal":!1,"append-to-body":!0,size:`medium`,width:`560px`,"z-index":3e6,"custom-class":`schedule-dialog`},{default:N(()=>[g(`div`,Tn,[g(`label`,En,[g(`span`,Dn,S(i.$t(`@SCHED:任务名`)),1),E(g(`input`,{"onUpdate:modelValue":n[0]||=e=>i.form.name=e,class:`sch-input`,type:`text`,placeholder:i.$t(`@SCHED:如:每日拉代码`)},null,8,On),[[H,i.form.name]])]),g(`div`,kn,[g(`span`,An,S(i.$t(`@SCHED:执行计划`)),1),g(`div`,jn,[E(g(`select`,{"onUpdate:modelValue":n[1]||=e=>i.form.freq=e,class:`sch-input sch-select`},[(U(!0),_(w,null,C(i.freqOptions,e=>(U(),_(`option`,{key:e.value,value:e.value},S(e.label),9,Mn))),128))],512),[[A,i.form.freq]]),i.form.freq===`minutes`?(U(),_(w,{key:0},[g(`span`,Nn,S(i.$t(`@SCHED:每`)),1),E(g(`select`,{"onUpdate:modelValue":n[2]||=e=>i.form.everyMinutes=e,class:`sch-input sch-select sch-select-sm`},[(U(),_(w,null,C([5,10,15,20,30,60],e=>g(`option`,{key:e,value:e},S(e),9,Pn)),64))],512),[[A,i.form.everyMinutes,void 0,{number:!0}]]),g(`span`,Fn,S(i.$t(`@SCHED:分钟`)),1)],64)):i.form.freq===`daily`||i.form.freq===`weekly`?(U(),_(w,{key:1},[i.form.freq===`weekly`?E((U(),_(`select`,{key:0,"onUpdate:modelValue":n[3]||=e=>i.form.weekday=e,class:`sch-input sch-select sch-select-sm`},[(U(),_(w,null,C(i.WEEKDAY_KEYS,(e,t)=>g(`option`,{key:t,value:t},S(i.$t(e)),9,In)),64))],512)),[[A,i.form.weekday,void 0,{number:!0}]]):W(`v-if`,!0),E(g(`select`,{"onUpdate:modelValue":n[4]||=e=>i.form.hour=e,class:`sch-input sch-select sch-select-sm`},[(U(),_(w,null,C(24,e=>g(`option`,{key:e-1,value:e-1},S(String(e-1).padStart(2,`0`)),9,Ln)),64))],512),[[A,i.form.hour,void 0,{number:!0}]]),n[19]||=g(`span`,{class:`sch-inline-label`},`:`,-1),E(g(`select`,{"onUpdate:modelValue":n[5]||=e=>i.form.minute=e,class:`sch-input sch-select sch-select-sm`},[(U(),_(w,null,C(60,e=>g(`option`,{key:e-1,value:e-1},S(String(e-1).padStart(2,`0`)),9,Rn)),64))],512),[[A,i.form.minute,void 0,{number:!0}]])],64)):i.form.freq===`hourly`?(U(),_(w,{key:2},[g(`span`,zn,S(i.$t(`@SCHED:第`)),1),E(g(`select`,{"onUpdate:modelValue":n[6]||=e=>i.form.minute=e,class:`sch-input sch-select sch-select-sm`},[(U(),_(w,null,C(60,e=>g(`option`,{key:e-1,value:e-1},S(String(e-1).padStart(2,`0`)),9,Bn)),64))],512),[[A,i.form.minute,void 0,{number:!0}]]),g(`span`,Vn,S(i.$t(`@SCHED:分钟`)),1)],64)):E((U(),_(`input`,{key:3,"onUpdate:modelValue":n[7]||=e=>i.form.custom=e,class:`sch-input sch-input-cron`,type:`text`,spellcheck:`false`,placeholder:i.$t(`@SCHED:如:0 9 * * 1-5`)},null,8,Hn)),[[H,i.form.custom]])]),g(`span`,Un,S(i.$t(`@SCHED:cron:{cron}(分 时 日 月 周,本地时间)`,{cron:i.cronPreview||`—`})),1)]),g(`label`,Wn,[g(`span`,Gn,S(i.$t(`@SCHED:项目目录`)),1),E(g(`input`,{"onUpdate:modelValue":n[8]||=e=>i.form.cwd=e,class:`sch-input`,type:`text`,spellcheck:`false`,placeholder:i.$t(`@SCHED:任务在该目录下执行(默认当前项目)`)},null,8,Kn),[[H,i.form.cwd]])]),g(`label`,qn,[g(`span`,Jn,S(i.$t(`@SCHED:提示词`)),1),E(g(`textarea`,{"onUpdate:modelValue":n[9]||=e=>i.form.prompt=e,class:`sch-input sch-textarea`,rows:`4`,placeholder:i.$t(`@SCHED:到点后发给 g ai 的完整指令,例如:检查所有仓库远端更新,有变更就 pull;写成一次自足的请求(未来那一轮没有现在的上下文)`)},null,8,Yn),[[H,i.form.prompt]])]),g(`div`,Xn,[g(`span`,Zn,S(i.$t(`@SCHED:错过补偿`)),1),g(`div`,Qn,[g(`label`,$n,[E(g(`input`,{"onUpdate:modelValue":n[10]||=e=>i.form.onMissed=e,type:`radio`,value:`run`},null,512),[[O,i.form.onMissed]]),g(`span`,null,S(i.$t(`@SCHED:补跑一次(g ui 重新运行后)`)),1)]),g(`label`,er,[E(g(`input`,{"onUpdate:modelValue":n[11]||=e=>i.form.onMissed=e,type:`radio`,value:`skip`},null,512),[[O,i.form.onMissed]]),g(`span`,null,S(i.$t(`@SCHED:跳过`)),1)]),g(`label`,tr,[E(g(`input`,{"onUpdate:modelValue":n[12]||=e=>i.form.enabled=e,type:`checkbox`},null,512),[[L,i.form.enabled]]),g(`span`,null,S(i.$t(`@SCHED:创建后启用`)),1)])])]),i.formError?(U(),_(`p`,nr,S(i.formError),1)):W(`v-if`,!0)]),g(`div`,rr,[g(`button`,{type:`button`,class:`sch-btn`,onClick:n[13]||=e=>i.formVisible=!1},S(i.$t(`@SCHED:取消`)),1),g(`button`,{type:`button`,class:`sch-btn sch-btn-primary`,disabled:i.saving,onClick:i.submitForm},S(i.saving?i.$t(`@SCHED:保存中...`):i.$t(`@SCHED:保存`)),9,ir)])]),_:1},8,[`modelValue`,`title`]),W(` 删除确认 `),e(i.CommonDialog,{modelValue:i.confirmVisible,"onUpdate:modelValue":n[16]||=e=>i.confirmVisible=e,title:i.$t(`@SCHED:删除任务`),"close-on-click-modal":!1,"append-to-body":!0,size:`small`,width:`400px`,"z-index":3e6,"custom-class":`schedule-dialog-confirm`},{default:N(()=>[g(`p`,ar,S(i.$t(`@SCHED:确定删除「{name}」吗?已产生的会话会保留,但任务不再执行。`,{name:i.confirmTarget?.name||``})),1),g(`div`,or,[g(`button`,{type:`button`,class:`sch-btn`,onClick:n[15]||=e=>i.confirmVisible=!1},S(i.$t(`@SCHED:取消`)),1),g(`button`,{type:`button`,class:`sch-btn sch-btn-danger`,onClick:i.confirmRemove},S(i.$t(`@SCHED:删除`)),1)])]),_:1},8,[`modelValue`,`title`])])}var cr=J(en,[[`render`,sr],[`__scopeId`,`data-v-63dc658b`],[`__file`,`D:/workspace/github_workspace/zen-gitsync/src/ui/client/src/components/SchedulePanel.vue`]]);c(),R();var lr=4e3,ur=f({__name:`AgentPromptSettings`,setup(e,{expose:t}){t();let n=ae(),{defaultPrompt:r,projectPrompts:i,loadOrchestrator:o,saveDefaultPrompt:s,saveProjectPrompt:c}=De(),l=j(``),u=j(!1),d=j(!1),f=G(()=>n.agentDefaultPrompt||``),p=G(()=>l.value.trim()!==f.value.trim());async function m(){if(!u.value&&p.value){u.value=!0;try{await n.saveAiSettings({agentDefaultPrompt:l.value})&&(l.value=f.value,d.value=!0,M.success(q(`@AGENT:已保存 g ai 默认提示词`)))}finally{u.value=!1}}}let h=G(()=>n.currentDirectory||``),g=G(()=>Y(h.value)||h.value),_=G(()=>{let e=se(h.value);return e&&i.value?.[e]?.prompt||``}),v=j(``),y=j(``),b=j(!1),x=j(!1),S=j(!1),C=G(()=>v.value.trim()!==(r.value||``).trim()||!!h.value&&y.value.trim()!==_.value.trim());function w(){v.value=r.value||``,y.value=_.value}a(async()=>{l.value=f.value,w();let e=await o(!0);S.value=!e,e&&w()});async function T(){if(!b.value&&C.value){b.value=!0;try{let e=!0,t=v.value.trim();t!==(r.value||``).trim()&&(e=await s(t));let n=y.value.trim();e&&h.value&&n!==_.value.trim()&&(e=await c(h.value,n)),e&&(w(),x.value=!0)}finally{b.value=!1}}}let E={configStore:n,defaultPrompt:r,projectPrompts:i,loadOrchestrator:o,saveDefaultPrompt:s,saveProjectPrompt:c,MAX_CHARS:lr,gaiDraft:l,savingGai:u,gaiSaved:d,gaiStored:f,gaiDirty:p,saveGai:m,projectPath:h,projectName:g,projectPrompt:_,globalDraft:v,projectDraft:y,savingDispatch:b,dispatchSaved:x,dispatchLoadFailed:S,dispatchDirty:C,syncDispatchDraft:w,saveDispatch:T,get $t(){return q}};return Object.defineProperty(E,"__isScriptSetup",{enumerable:!1,value:!0}),E}});F(),c(),V();var dr={class:`aps`},fr={class:`aps__scroll`},pr={class:`aps__head`},mr={class:`aps__title`},hr={class:`aps__intro`},gr={class:`aps__card aps__card--gai`},_r={class:`aps__card-head`},vr={class:`aps__card-title`},yr={class:`aps__count`},br={class:`aps__hint`},xr=[`placeholder`],Sr={class:`aps__foot`},Cr={key:0,class:`aps__saved`},wr=[`disabled`],Tr={class:`aps__card aps__card--dispatch`},Er={class:`aps__card-head`},Dr={class:`aps__card-title`},Or={class:`aps__hint`},kr={class:`aps__field`},Ar={class:`aps__card-head`},jr={class:`aps__label`,for:`aps-global`},Mr={class:`aps__count`},Nr=[`placeholder`],Pr={class:`aps__field`},Fr={class:`aps__card-head`},Ir={class:`aps__label`,for:`aps-project`},Lr={key:0,class:`aps__count`},Rr=[`disabled`,`placeholder`],zr={class:`aps__hint`},Br={class:`aps__foot`},Vr={key:0,class:`aps__saved`},Hr={key:1,class:`aps__saved`},Ur=[`disabled`];function Wr(e,t,n,r,i,a){return U(),_(`div`,dr,[g(`div`,fr,[g(`header`,pr,[g(`h3`,mr,S(r.$t(`@AGENT:提示词设置`)),1),g(`p`,hr,S(r.$t(`@AGENT:这里配的两块提示词,和 g ai 对话时每一轮都会自动带上。改完下一次发消息就生效,不用新开会话。`)),1)]),W(` ── ① g ai 智能体的默认提示词 ── `),g(`section`,gr,[g(`div`,_r,[g(`h4`,vr,S(r.$t(`@AGENT:g ai 智能体的默认提示词`)),1),g(`span`,yr,S(r.gaiDraft.length)+` / `+S(r.MAX_CHARS),1)]),g(`p`,br,S(r.$t(`@AGENT:只作用于 g ai 自己:每次对话都会带上(定时任务也一样)。派发出去的任务读不到这一段。`)),1),E(g(`textarea`,{id:`aps-gai`,"onUpdate:modelValue":t[0]||=e=>r.gaiDraft=e,class:`aps__area`,rows:`6`,maxlength:r.MAX_CHARS,placeholder:r.$t(`@AGENT:例如:回答用中文;改完代码先跑一遍验证再汇报;不要动 dist 目录`)},null,8,xr),[[H,r.gaiDraft]]),g(`div`,Sr,[r.gaiSaved&&!r.gaiDirty?(U(),_(`span`,Cr,S(r.$t(`@AGENT:已保存`)),1)):W(`v-if`,!0),t[3]||=g(`span`,{class:`aps__spacer`},null,-1),g(`button`,{type:`button`,class:`aps__btn aps__btn--primary`,disabled:r.savingGai||!r.gaiDirty,onClick:r.saveGai},S(r.savingGai?r.$t(`@AGENT:保存中…`):r.$t(`@AGENT:保存`)),9,wr)])]),W(` ── ② 派发任务的提示词 ── `),g(`section`,Tr,[g(`div`,Er,[g(`h4`,Dr,S(r.$t(`@AGENT:派发任务的提示词`)),1)]),g(`p`,Or,S(r.$t(`@AGENT:与工作台「预设提示词」是同一份设置,在哪边改都一样。派发任务时附加在指令之前,和 g ai 对话时也会带上。`)),1),g(`div`,kr,[g(`div`,Ar,[g(`label`,jr,S(r.$t(`@AGENT:全局提示词`)),1),g(`span`,Mr,S(r.globalDraft.length)+` / `+S(r.MAX_CHARS),1)]),E(g(`textarea`,{id:`aps-global`,"onUpdate:modelValue":t[1]||=e=>r.globalDraft=e,class:`aps__area`,rows:`5`,maxlength:r.MAX_CHARS,placeholder:r.$t(`@AGENT:对所有项目生效。例如:回答用中文;改完代码必须跑一遍测试;不要动 dist 目录`)},null,8,Nr),[[H,r.globalDraft]])]),g(`div`,Pr,[g(`div`,Fr,[g(`label`,Ir,S(r.projectPath?r.$t(`@AGENT:「{name}」的项目提示词`,{name:r.projectName}):r.$t(`@AGENT:项目提示词`)),1),r.projectPath?(U(),_(`span`,Lr,S(r.projectDraft.length)+` / `+S(r.MAX_CHARS),1)):W(`v-if`,!0)]),E(g(`textarea`,{id:`aps-project`,"onUpdate:modelValue":t[2]||=e=>r.projectDraft=e,class:`aps__area`,rows:`5`,maxlength:r.MAX_CHARS,disabled:!r.projectPath,placeholder:r.projectPath?r.$t(`@AGENT:只在这个项目派发/对话时附加。例如:包管理器用 pnpm;改动集中在 src/ui 下`):r.$t(`@AGENT:当前没有打开项目,项目级提示词暂时不能设置`)},null,8,Rr),[[H,r.projectDraft]]),g(`p`,zr,S(r.projectPath?r.$t(`@AGENT:项目提示词追加在全局提示词之后(不覆盖全局),在「{name}」里派发或对话时一起带上`,{name:r.projectName}):r.$t(`@AGENT:先在左上角切到一个项目,才能设置它的提示词`)),1)]),g(`div`,Br,[r.dispatchSaved&&!r.dispatchDirty?(U(),_(`span`,Vr,S(r.$t(`@AGENT:已保存`)),1)):r.dispatchLoadFailed?(U(),_(`span`,Hr,S(r.$t(`@AGENT:读取设置失败,请稍后重试`)),1)):W(`v-if`,!0),t[4]||=g(`span`,{class:`aps__spacer`},null,-1),g(`button`,{type:`button`,class:`aps__btn aps__btn--primary`,disabled:r.savingDispatch||!r.dispatchDirty,onClick:r.saveDispatch},S(r.savingDispatch?r.$t(`@AGENT:保存中…`):r.$t(`@AGENT:保存`)),9,Ur)])])])])}var Gr=J(ur,[[`render`,Wr],[`__scopeId`,`data-v-f9ada51b`],[`__file`,`D:/workspace/github_workspace/zen-gitsync/src/ui/client/src/components/AgentPromptSettings.vue`]]);c(),R();var Kr=1100,qr=40,Jr=f({__name:`AgentView`,setup(e,{expose:n}){n();let i=ae(),o=ue(),s=j(null),{width:c,narrow:u}=Ce(s),d=j(`chat`),m=j(`chat`),h=G(()=>m.value===`mcp`?`mcp`:`skill`),g=(...e)=>f({render:()=>p(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":2,"stroke-linecap":`round`,"stroke-linejoin":`round`},e.map(e=>p(`path`,{d:e})))}),_=G(()=>[{id:`chat`,label:q(`@AGENT:对话`),icon:g(`M12 11v.01`,`M8 11v.01`,`M16 11v.01`,`M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1-3 3h-5l-5 3v-3h-2a3 3 0 0 1-3-3v-8a3 3 0 0 1 3-3l12 0`)},{id:`schedule`,label:q(`@AGENT:定时任务`),icon:g(`M5 13a7 7 0 1 0 14 0a7 7 0 0 0-14 0`,`M14.5 10.5l-2.5 2.5`,`M17 8l1-1`,`M14 3h-4`)},{id:`skill`,label:q(`@AGENT:Skill 广场`),icon:g(`M6.331 8h11.339a2 2 0 0 1 1.977 2.304l-1.255 8.152a3 3 0 0 1-2.966 2.544h-6.852a3 3 0 0 1-2.965-2.544l-1.255-8.152a2 2 0 0 1 1.977-2.304`,`M9 11v-5a3 3 0 0 1 6 0v5`)},{id:`mcp`,label:q(`@AGENT:MCP 广场`),icon:g(`M7 12l5 5l-1.5 1.5a3.536 3.536 0 1 1-5-5l1.5-1.5`,`M17 12l-5-5l1.5-1.5a3.536 3.536 0 1 1 5 5l-1.5 1.5`,`M3 21l2.5-2.5`,`M18.5 5.5l2.5-2.5`,`M10 11l-2 2`,`M13 14l-2 2`)},{id:`settings`,label:q(`@AGENT:设置`),icon:g(`M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 0 0-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 0 0-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 0 0-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 0 0-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 0 0 1.066-2.573c-.94-1.543.826-3.31 2.37-2.37c1 .608 2.296.07 2.572-1.065`,`M9 12a3 3 0 1 0 6 0a3 3 0 0 0-6 0`)}]),{sessions:y,sessionsLoading:b,currentSessionId:x,messages:S,displayMessages:C,isStreaming:w,sessionLoading:T,loadSessions:E,loadSession:D,deleteSession:O,renameSession:ee,newSession:k,sendMessage:A,retryTurn:M,questionPanel:N,answeringQuestion:P,answerQuestion:F,isSessionGenerating:I,currentEngine:L,pendingEngine:R,isEngineLocked:z,pickEngine:V,stop:H,inputContextUsage:te,queuedMessages:U,queuePaused:ne,removeQueuedMessage:W,flushQueued:re,silentMs:J}=xe(),oe=G(()=>z.value?L.value:R.value);function se(e){z.value||V(e)}let Y=G(()=>{let e=i.theme;return e===`dark`||e===`auto`&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`}),le=G(()=>{let e=i.models.find(e=>e.isDefault);return e&&(e.name||e.model)||``}),De=G(()=>fe(y.value,I)),X=de(),Oe=G(()=>De.value.find(e=>e.id===x.value)?.title||q(`@AGENT:对话`)),ke={"--welcome-avatar":`url("${be}")`},Ae=G(()=>ce(i.agentPresetPrompts));async function je(e){await A(e.text,e.files),await t(),Q()}async function Me(e){await A(e.prompt),await t(),Q()}let Ne=_e(),Z=j(null),Fe=ye();function Q(e=!0){Z.value?.scrollToBottom(e)}B(()=>S.value.length,()=>{t(()=>Q(!1))});function Ie(e){D(e),d.value=`chat`}function Le(e){e&&(m.value=`chat`,Ie(e))}function Re(){k(),d.value=`chat`}let ze=j(280),Be=j(!1),{convListCollapsed:Ve,setConvListCollapsed:He}=Ee();function Ue(e){if(Ve.value)return;Be.value=!0;let t=e.clientX,n=ze.value,r=e=>{let r=e.clientX-t,i=Math.max(200,Math.min(500,n+r));ze.value=i},i=()=>{Be.value=!1,document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)}B(u,e=>{e||(d.value=`chat`)}),B(()=>[i.currentDirectory,w.value],async([e,t],n)=>{let r=!n||e!==n[0],i=!!n&&n[1]===!0&&!t;(r||i)&&await E(),x.value&&!w.value&&!y.value.some(e=>e.sessionId===x.value)&&k()},{immediate:!0});let $=null;a(()=>{$=Pe(e=>{e.type===`task_finished`&&E().catch(()=>{})})}),v(()=>{$?.(),$=null});let We={configStore:i,gitStore:o,rootRef:s,width:c,narrow:u,TABS_SILENCE_MIN_WIDTH:Kr,chatPage:d,activeTab:m,marketplaceType:h,tablerIcon:g,tabs:_,sessions:y,sessionsLoading:b,currentSessionId:x,messages:S,displayMessages:C,isStreaming:w,sessionLoading:T,loadSessions:E,loadSession:D,deleteSession:O,renameSession:ee,newSession:k,sendMessage:A,retryTurn:M,questionPanel:N,answeringQuestion:P,answerQuestion:F,isSessionGenerating:I,currentEngine:L,pendingEngine:R,isEngineLocked:z,pickEngine:V,stop:H,inputContextUsage:te,queuedMessages:U,queuePaused:ne,removeQueuedMessage:W,flushQueued:re,silentMs:J,displayEngine:oe,handleEngineSelect:se,chatTheme:Y,inputModelName:le,conversationItems:De,conversationLabels:X,currentSessionTitle:Oe,welcomeAvatarStyle:ke,presetQuestions:Ae,onSend:je,onSelectPreset:Me,questionLabels:Ne,chatContainerRef:Z,queueLabels:Fe,scrollToBottom:Q,selectSession:Ie,handleScheduleOpenSession:Le,handleNewSession:Re,sidebarWidth:ze,isResizing:Be,convListCollapsed:Ve,setConvListCollapsed:He,CONV_RAIL_WIDTH:qr,startResize:Ue,get disposeScheduleEvents(){return $},set disposeScheduleEvents(e){$=e},get $t(){return q},get ElIcon(){return l},get Loading(){return r},get ChatContainer(){return K},get ConversationList(){return ie},get AGENT_UPLOAD_ACCEPT(){return me},get AGENT_ASSISTANT_NAME(){return ge},get AGENT_ASSISTANT_AVATAR(){return be},get MESSAGE_RAIL_CONFIG(){return pe},get MESSAGE_META_CONFIG(){return ve},get agentEngineName(){return he},MarketplacePanel:$t,SchedulePanel:cr,AgentPromptSettings:Gr,AgentEngineSelector:Se,CopySessionButton:we,ChatSilenceBadge:Te};return Object.defineProperty(We,"__isScriptSetup",{enumerable:!1,value:!0}),We}});c(),F();var Yr={ref:`rootRef`,class:`agent-view`},Xr={class:`agent-chat-area`},Zr={class:`agent-tabs`,role:`tablist`},Qr=[`aria-selected`,`onClick`],$r={class:`agent-tab-body`},ei={key:0,class:`agent-chat-pane`},ti={key:0,class:`agent-list-page`},ni={key:0,class:`agent-page-bar`},ri=[`title`,`aria-label`],ii={class:`agent-page-title`},ai={key:0,class:`chat-loading`};function oi(t,r,i,a,o,s){return U(),_(`div`,Yr,[W(` ═══ 宽屏:左侧会话列表(只在「对话」Tab 显示)═══
1
+ import"./rolldown-runtime-C0FnF6B9.js";import{An as e,Bn as t,Cn as n,Dt as r,Et as i,Gn as a,Gt as o,Ht as s,In as c,J as l,Kr as u,M as d,Mn as f,Pn as p,Qn as m,Rt as h,Sn as g,Tn as _,Un as v,Vt as y,W as b,Wr as x,Xr as S,Yn as C,_n as w,a as T,ar as E,ct as D,dn as O,en as ee,et as k,fn as A,gr as j,i as M,ir as N,j as P,jr as F,kn as I,ln as L,lr as R,mr as z,nr as B,on as V,pn as H,pt as te,qn as U,r as ne,wn as W,xn as G,xt as re}from"./element-plus-Bz6lYur-.js";import{c as K,t as ie}from"./vendor-C2k0GBzj.js";import{n as q,t as J}from"./_plugin-vue_export-helper-BhdsvhKo.js";import{t as ae}from"./configStore-Drlw8KtR.js";import{t as oe}from"./CommonDialog-BkuDIWro.js";import{ft as Y,j as se,pt as ce,tt as le,ut as ue}from"./index-cDiVh_ZL.js";import{a as de,c as fe,i as pe,l as me,m as he,n as ge,o as _e,r as ve,s as ye,t as be,u as xe}from"./agentConversations-DaAtF1v4.js";import{c as Se,d as Ce,n as we,t as Te,u as Ee}from"./ChatSilenceBadge-BBoFeSqe.js";import{t as De}from"./useOrchestrator-BXmxJsRl.js";async function X(e,t){let n=await fetch(e,{headers:{"Content-Type":`application/json`},...t}),r={};try{r=await n.json()}catch{}if(!n.ok||r.success===!1)throw Error(r.error||`请求失败 (${n.status})`);return r}async function Oe(){let e=await X(`/api/schedules`);return Array.isArray(e.tasks)?e.tasks:[]}async function ke(e){return(await X(`/api/schedules`,{method:`POST`,body:JSON.stringify(e)})).task}async function Ae(e,t){return(await X(`/api/schedules/${encodeURIComponent(e)}`,{method:`PUT`,body:JSON.stringify(t)})).task}async function je(e){await X(`/api/schedules/${encodeURIComponent(e)}`,{method:`DELETE`})}async function Me(e){await X(`/api/schedules/${encodeURIComponent(e)}/run`,{method:`POST`})}async function Ne(e){await X(`/api/schedules/${encodeURIComponent(e)}/stop`,{method:`POST`})}function Pe(e){if(typeof EventSource>`u`)return()=>{};let t=new EventSource(`/api/schedules/events`);return t.onmessage=t=>{try{e(JSON.parse(t.data))}catch{}},()=>t.close()}var Z=e=>/^\d+$/.test(e)?Number(e):null;function Fe(e){let t=String(e||``).trim(),n=t.split(/\s+/);if(n.length!==5)return{kind:`custom`,raw:t};let[r,i,a,o,s]=n,c=Z(r),l=Z(i);if(t===`* * * * *`)return{kind:`every-minute`,raw:t};let u=r.match(/^\*\/(\d+)$/);if(u&&i===`*`&&a===`*`&&o===`*`&&s===`*`)return{kind:`every-n-minutes`,n:Number(u[1]),raw:t};if(c!==null&&i===`*`&&a===`*`&&o===`*`&&s===`*`)return{kind:`hourly`,minute:c,raw:t};if(c!==null&&l!==null&&a===`*`&&o===`*`&&s===`*`)return{kind:`daily`,hour:l,minute:c,raw:t};let d=Z(s);if(c!==null&&l!==null&&a===`*`&&o===`*`&&d!==null)return{kind:`weekly`,weekday:d%7,hour:l,minute:c,raw:t};let f=Z(a);return c!==null&&l!==null&&f!==null&&o===`*`&&s===`*`?{kind:`monthly`,day:f,hour:l,minute:c,raw:t}:{kind:`custom`,raw:t}}var Q=e=>String(e).padStart(2,`0`),Ie=e=>new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime();function Le(e,t=new Date){if(!e)return{kind:`none`};let n=new Date(e);if(Number.isNaN(n.getTime()))return{kind:`none`};let r=`${Q(n.getHours())}:${Q(n.getMinutes())}`,i=Math.round((Ie(n)-Ie(t))/864e5);return i<0?{kind:`date`,date:`${n.getMonth()+1}-${Q(n.getDate())}`,time:r}:i===0?{kind:`today`,time:r}:i===1?{kind:`tomorrow`,time:r}:i<7?{kind:`weekday`,weekday:n.getDay(),time:r}:{kind:`date`,date:`${n.getMonth()+1}-${Q(n.getDate())}`,time:r}}function Re(e){switch(e){case`ok`:return`ok`;case`error`:case`timed-out`:return`error`;case`skipped-busy`:case`missed`:case`cancelled`:return`skipped`;default:return`pending`}}function ze(e){let t=Number(e);if(!Number.isFinite(t)||t<0)return``;if(t<1e3)return`<1s`;let n=Math.round(t/1e3);if(n<60)return`${n}s`;let r=Math.floor(n/60);return r<60?`${r}m${Q(n%60)}s`:`${Math.floor(r/60)}h${Q(r%60)}m`}function Be(e){let t=Math.min(59,Math.max(0,Math.floor(e.minute))),n=Math.min(23,Math.max(0,Math.floor(e.hour))),r=(Math.floor(e.weekday)%7+7)%7;switch(e.freq){case`minutes`:return`*/${Math.min(59,Math.max(1,Math.floor(e.everyMinutes??30)))} * * * *`;case`hourly`:return`${t} * * * *`;case`daily`:return`${t} ${n} * * *`;case`weekly`:return`${t} ${n} * * ${r}`;case`custom`:return String(e.custom||``).trim()}}var Ve=`https://cdn.simpleicons.org`;function He(e){return`https://github.com/${e}.png?size=64`}function Ue(e,t){return`${Ve}/${e}${t?`/E8EAED`:``}`}var $=[[/chromedevtools|chrome-dev-tools/,`avatar:ChromeDevTools`],[/googlechrome|\bchrome\b/,`googlechrome`],[/\bfirefox\b/,`firefox`],[/puppeteer/,`puppeteer`],[/playwright/,`avatar:microsoft`],[/selenium/,`selenium`],[/cypress/,`cypress`],[/appium/,`appium`],[/browserstack/,`avatar:browserstack`],[/saucelabs/,`saucelabs`],[/storybook/,`storybook`],[/\bgithub\b|githubcopilot|githubactions/,`github`],[/\bgitlab\b/,`gitlab`],[/\bbitbucket\b/,`bitbucket`],[/context7/,`avatar:upstash`],[/modelcontextprotocol/,`avatar:modelcontextprotocol`],[/claude|anthropic/,`claude`],[/\bopenai\b|chatgpt/,`avatar:openai`],[/gemini|google\s*ai\b/,`googlegemini`],[/hugging\s*face/,`huggingface`],[/\bollama\b/,`ollama`],[/\bdify\b/,`dify`],[/\bn8n\b/,`n8n`],[/langchain/,`langchain`],[/perplexity/,`avatar:perplexityai`],[/\bexa\b/,`avatar:exa-labs`],[/firecrawl/,`avatar:firecrawl`],[/\be2b\b/,`avatar:e2b-dev`],[/browserbase/,`avatar:browserbase`],[/apify/,`avatar:apify`],[/postgres|postgresql/,`postgresql`],[/\bmysql\b|mariadb/,`mysql`],[/\bsqlite\b/,`sqlite`],[/mongodb|\bmongo\b/,`mongodb`],[/\bredis\b/,`redis`],[/elasticsearch|\belastic\b/,`elasticsearch`],[/clickhouse/,`clickhouse`],[/snowflake/,`snowflake`],[/databricks/,`databricks`],[/duckdb/,`duckdb`],[/influxdb/,`influxdb`],[/neo4j/,`neo4j`],[/cassandra/,`apachecassandra`],[/rabbitmq/,`rabbitmq`],[/kafka/,`apachekafka`],[/\bqdrant\b/,`qdrant`],[/weaviate/,`weaviate`],[/pinecone/,`avatar:pinecone`],[/planetscale/,`avatar:planetscale`],[/neondatabase|\bneon\b/,`avatar:neondatabase`],[/supabase/,`supabase`],[/firebase/,`firebase`],[/\bdbt\b/,`avatar:dbt-labs`],[/airflow/,`apacheairflow`],[/dagster/,`avatar:dagster-io`],[/prefect/,`prefect`],[/\bspark\b/,`apachespark`],[/hadoop/,`apachehadoop`],[/airbyte/,`airbyte`],[/bigquery/,`googlebigquery`],[/\baws\b|amazon\s*web\s*services|amazons3|amazondynamodb/,`avatar:aws`],[/azure/,`microsoftazure`],[/google\s*cloud|\bgcp\b/,`googlecloud`],[/cloudflare/,`cloudflare`],[/vercel/,`vercel`],[/netlify/,`netlify`],[/heroku/,`heroku`],[/digitalocean/,`digitalocean`],[/\bdocker\b/,`docker`],[/kubernetes|\bk8s\b|kubectl/,`kubernetes`],[/kubeflow/,`kubeflow`],[/terraform/,`terraform`],[/jenkins/,`jenkins`],[/circleci/,`circleci`],[/\bhelm\b/,`avatar:helm`],[/argocd|argo\s*cd/,`avatar:argoproj`],[/\bnginx\b/,`nginx`],[/\bapache\b/,`apache`],[/caddy/,`caddy`],[/traefik/,`traefikproxy`],[/haproxy/,`haproxy`],[/tailscale/,`tailscale`],[/\bngrok\b/,`ngrok`],[/\bconsul\b|hashicorp/,`hashicorp`],[/vault/,`hashicorp`],[/packer/,`packer`],[/virtualbox/,`virtualbox`],[/vmware/,`vmware`],[/grafana/,`grafana`],[/prometheus/,`prometheus`],[/datadog/,`datadog`],[/\bsentry\b/,`sentry`],[/splunk/,`splunk`],[/new\s*relic/,`newrelic`],[/pagerduty/,`pagerduty`],[/opsgenie/,`opsgenie`],[/home\s*assistant/,`homeassistant`],[/obsidian/,`obsidian`],[/notion/,`notion`],[/figma/,`figma`],[/\blinear\b/,`linear`],[/atlassian/,`atlassian`],[/\bjira\b/,`jira`],[/confluence/,`confluence`],[/airtable/,`airtable`],[/clickup/,`clickup`],[/asana/,`asana`],[/trello/,`trello`],[/basecamp/,`basecamp`],[/todoist/,`todoist`],[/zapier/,`zapier`],[/hubspot/,`hubspot`],[/zendesk/,`zendesk`],[/intercom/,`intercom`],[/mailchimp/,`mailchimp`],[/salesforce/,`avatar:salesforce`],[/slack/,`avatar:slack`],[/discord/,`discord`],[/telegram/,`telegram`],[/whatsapp/,`whatsapp`],[/gmail/,`gmail`],[/google\s*drive/,`googledrive`],[/google\s*sheets/,`googlesheets`],[/google\s*docs/,`googledocs`],[/google\s*maps/,`googlemaps`],[/google\s*calendar/,`googlecalendar`],[/youtube/,`youtube`],[/spotify/,`spotify`],[/twilio/,`avatar:twilio`],[/sendgrid/,`avatar:sendgrid`],[/mailgun/,`mailgun`],[/stripe/,`stripe`],[/paypal/,`paypal`],[/shopify/,`shopify`],[/posthog/,`avatar:posthog`],[/segment\b/,`avatar:segmentio`],[/amplitude/,`avatar:amplitude`],[/mixpanel/,`avatar:mixpanel`],[/contentful/,`contentful`],[/sanity/,`sanity`],[/wordpress|\bwp\b/,`wordpress`],[/ghost\b/,`ghost`],[/webflow/,`webflow`],[/framer/,`framer`],[/bitwarden/,`bitwarden`],[/proton\s*vpn/,`protonvpn`],[/1password/,`1password`],[/auth0/,`auth0`],[/okta/,`okta`],[/keycloak/,`keycloak`],[/clerk/,`avatar:clerk`],[/brave\b/,`brave`],[/duckduckgo/,`duckduckgo`],[/openapi|swagger/,`openapiinitiative`],[/graphql/,`graphql`],[/apollo/,`apollographql`],[/postman/,`postman`],[/insomnia/,`insomnia`],[/hoppscotch/,`hoppscotch`],[/\bcurl\b/,`curl`],[/react/,`react`],[/vue/,`vuedotjs`],[/angular/,`angular`],[/svelte/,`svelte`],[/next\.?js/,`nextdotjs`],[/nuxt/,`nuxtdotjs`],[/\bastro\b/,`astro`],[/tailwind/,`tailwindcss`],[/electron/,`electron`],[/flutter/,`flutter`],[/\bswift\b/,`swift`],[/typescript/,`typescript`],[/javascript/,`javascript`],[/python/,`python`],[/node\.?js/,`nodedotjs`],[/\bdeno\b/,`deno`],[/\bbun\b/,`bun`],[/\brust\b/,`rust`],[/\bgolang\b|\bgo\b/,`go`],[/pytorch|\btorch\b/,`pytorch`],[/tensorflow/,`tensorflow`],[/scikit|sklearn/,`scikitlearn`],[/mlflow/,`mlflow`],[/\bray\b/,`ray`],[/jupyter/,`jupyter`],[/\bvite\b/,`vite`],[/vitest/,`vitest`],[/eslint/,`eslint`],[/prettier/,`prettier`],[/\bjest\b/,`jest`],[/\bnpm\b/,`npm`],[/pnpm/,`pnpm`],[/\byarn\b/,`yarn`],[/homebrew/,`homebrew`],[/docusaurus/,`docusaurus`],[/readthedocs/,`readthedocs`],[/gitbook/,`gitbook`],[/markdown/,`markdown`],[/\blinux\b/,`linux`],[/ubuntu/,`ubuntu`],[/debian/,`debian`],[/apple|macos/,`apple`],[/windows/,`windows`],[/microsoft/,`microsoft`],[/\bteams\b/,`microsoftteams`],[/onedrive/,`onedrive`],[/power\s*bi/,`powerbi`],[/bing\b/,`bing`],[/google/,`google`],[/baidu/,`baidu`],[/bilibili/,`bilibili`],[/wechat|weixin/,`wechat`],[/alibaba|aliyun/,`alibabacloud`]],We={url:``,letter:``,hue:0};function Ge(e){let t=String(e||``).trim();if(!t)return``;let n=t.match(/github\.com\/([^/\s]+)/i),r=n?n[1]:t.split(`/`)[0];return/^[A-Za-z0-9](?:[A-Za-z0-9-]{0,38})$/.test(r)?r:``}function Ke(e){let t=0;for(let n=0;n<e.length;n++)t=(t*31+e.charCodeAt(n))%36e4;return t%360}function qe(e,t=!1){let n=String(e?.name||``).trim();if(!n)return We;let r=[...n][0]?.toUpperCase()||``,i=Ke(n.toLowerCase()),a=`${n} ${e?.package||``} ${e?.repository||``}`.toLowerCase();for(let[e,n]of $)if(e.test(a))return{url:n.startsWith(`avatar:`)?He(n.slice(7)):Ue(n,t),letter:r,hue:i};let o=Ge(e?.repository||``);return o?{url:He(o),letter:r,hue:i}:{url:``,letter:r,hue:i}}c(),R();var Je=4e3,Ye=f({__name:`MarketplacePanel`,props:{type:{type:String,required:!0}},setup(e,{expose:t}){t();let n=e,r=ae(),a=j([]),c=j([]),l=j([]),u=j(!1),d=j(``),f=j(``),p=j([]),m=j(`project`),g=j(new Set),_=j(new Set),b=j(new Set),x=G(()=>r.currentDirectory||``),{theme:S}=le(),C=G(()=>S.value===`dark`),w=j(new Set),T=new Map;function E(e){let t=T.get(e);t&&clearTimeout(t),T.delete(e)}function O(e){let t=K(e);qe(e,C.value).url&&(E(t),T.set(t,setTimeout(()=>{T.delete(t),w.value.add(t)},Je)))}v(()=>{for(let e of T.values())clearTimeout(e);T.clear()});function A(e){let t=qe(e,C.value);return w.value.has(K(e))?{...t,url:``}:t}function N(e){E(K(e))}function P(e){E(K(e)),w.value.add(K(e))}let F=G(()=>a.value.reduce((e,t)=>e+(t.status===`ok`?t.items.length:0),0)),I=null;async function L(){try{let e=await(await fetch(`/api/agent/marketplace/sources?type=${n.type}`)).json();e?.success&&(c.value=e.sources||[])}catch{}}let R=!1;async function V(){if(u.value){R=!0;return}u.value=!0;try{let e=new URLSearchParams({type:n.type,cwd:x.value});f.value&&e.set(`q`,f.value),p.value.length&&e.set(`sources`,p.value.join(`,`));let t=await(await fetch(`/api/agent/marketplace/catalog?${e}`)).json();if(t?.success){a.value=t.groups||[],l.value=t.installed||[];for(let e of a.value)for(let t of e.items)O(t)}else M.error(t?.error||q(`@MKT:加载失败`))}catch{M.error(q(`@MKT:加载失败`))}finally{u.value=!1,R&&(R=!1,V())}}B(d,e=>{I&&clearTimeout(I),I=setTimeout(()=>{f.value=e.trim(),V()},400)}),B(p,()=>V(),{deep:!0}),B(()=>n.type,()=>{p.value=[],f.value=``,d.value=``,L(),V()}),B(x,()=>V()),L(),V();let H=G(()=>{let e=x.value?x.value.split(/[\\/]/).filter(Boolean).pop():``;return m.value===`project`?e||q(`@MKT:当前项目`):q(`@MKT:g ai 智能体`)});function U(e){return e.stars?`${W(e.stars)} ★`:e.downloads?`${W(e.downloads)} ${q(`@MKT:周下载`)}`:e.uses?`${W(e.uses)} ${q(`@MKT:次使用`)}`:``}function W(e){return e>=1e3?`${(e/1e3).toFixed(e>=1e4?0:1)}k`:String(e)}function K(e){return`${e.id}`}function ie(e){return g.value.has(K(e))}let J=G(()=>{let e={project:[],global:[]};for(let t of l.value)(e[t.target]||=[]).push(t);return e}),Y=z({visible:!1,item:null,env:{},args:``});function se(e){return n.type===`mcp`&&(!!e.envKeys?.length||!!e.args?.length)}function ce(e){Y.item=e,Y.env=Object.fromEntries((e.envKeys||[]).map(e=>[e,``])),Y.args=(e.args||[]).join(` `),Y.visible=!0}function ue(){let e=Y.item;if(Y.visible=!1,!e)return;let t=Object.fromEntries(Object.entries(Y.env).filter(([,e])=>e.trim()!==``)),n=Y.args.trim()?Y.args.trim().match(/(?:[^\s"]+|"[^"]*")+/g)?.map(e=>e.replace(/^"|"$/g,``))??void 0:void 0;fe(e,{env:t,...n?{args:n}:{}})}async function de(e){if(!e.installed||await pe(e)){if(se(e)){ce(e);return}await fe(e,{})}}async function fe(e,t){let r=K(e);g.value.add(r);try{let r=await fetch(`/api/agent/marketplace/install`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({type:n.type,target:m.value,cwd:x.value,item:{...e,...t}})}),i=await r.json().catch(()=>null);if(!r.ok||!i?.success){M.error(i?.error||q(`@MKT:安装失败`));return}i.item?.warning&&M.warning(i.item.warning),i.item?.envKeys?.length?M.warning(`${q(`@MKT:还缺环境变量`)}: ${i.item.envKeys.join(`, `)}`):M.success(q(`@MKT:安装成功`)),await V()}catch{M.error(q(`@MKT:安装失败`))}finally{g.value.delete(r)}}async function pe(e){try{return await ne.confirm(`${e.name} ${q(`@MKT:已安装,要重新安装吗?`)}`,q(`@MKT:重新安装`),{confirmButtonText:q(`@MKT:重装`),cancelButtonText:q(`@MKT:取消`),type:`warning`}),!0}catch{return!1}}async function me(e){let t=`${e.target}:${e.id}`;b.value.add(t);try{let t=await fetch(`/api/agent/marketplace/reveal`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({type:n.type,target:e.target,cwd:x.value,id:e.id})}),r=await t.json().catch(()=>null);(!t.ok||!r?.success)&&M.error(r?.error||q(`@MKT:打开失败`))}catch{M.error(q(`@MKT:打开失败`))}finally{b.value.delete(t)}}async function he(e){try{await ne.confirm(`${q(`@MKT:确定卸载`)} ${e.name}?`,q(`@MKT:卸载`),{confirmButtonText:q(`@MKT:卸载`),cancelButtonText:q(`@MKT:取消`),type:`warning`})}catch{return}let t=`${e.target}:${e.id}`;_.value.add(t);try{let t=new URLSearchParams({target:e.target,cwd:x.value}),r=await fetch(`/api/agent/marketplace/item/${n.type}/${encodeURIComponent(e.id)}?${t}`,{method:`DELETE`}),i=await r.json().catch(()=>null);if(!r.ok||!i?.success){M.error(i?.error||q(`@MKT:卸载失败`));return}M.success(q(`@MKT:已卸载`)),await V()}catch{M.error(q(`@MKT:卸载失败`))}finally{_.value.delete(t)}}let ge={props:n,configStore:r,groups:a,sources:c,installed:l,loading:u,searchInput:d,query:f,selectedSources:p,installTarget:m,installing:g,removing:_,revealing:b,cwd:x,currentTheme:S,isDark:C,ICON_FALLBACK_MS:Je,iconErrors:w,iconTimers:T,settleIconTimer:E,scheduleIconFallback:O,iconOf:A,onIconLoad:N,onIconError:P,totalCount:F,get searchTimer(){return I},set searchTimer(e){I=e},loadSources:L,get reloadQueued(){return R},set reloadQueued(e){R=e},loadCatalog:V,targetLabel:H,metricText:U,formatCount:W,cardKey:K,isBusy:ie,installedByTarget:J,configDialog:Y,needsConfig:se,openConfigDialog:ce,confirmConfig:ue,onInstall:de,doInstall:fe,confirmReinstall:pe,onReveal:me,onRemove:he,get $t(){return q},get Search(){return y},get Refresh(){return h},get Delete(){return D},get Link(){return i},get Check(){return k},get Select(){return s},get Star(){return o},get Download(){return te},get Warning(){return ee},get FolderOpened(){return re},CommonDialog:oe};return Object.defineProperty(ge,"__isScriptSetup",{enumerable:!1,value:!0}),ge}});c(),F(),V();var Xe={class:`marketplace-panel`},Ze={class:`mp-hero`},Qe={class:`mp-hero-text`},$e={class:`mp-hero-title`},et={class:`mp-hero-sub`},tt={class:`mp-hero-count`},nt={class:`mp-toolbar`},rt={class:`mp-search`},it=[`placeholder`],at={class:`mp-toolbar-sub`},ot={class:`mp-target-hint`},st={class:`mp-source-filter`},ct=[`onClick`],lt={class:`mp-body`},ut={class:`mp-group-header`},dt={class:`mp-group-title`},ft={key:0,class:`mp-group-count`},pt={key:1,class:`mp-group-error`},mt=[`href`,`title`],ht={key:0,class:`mp-grid`},gt=[`src`,`alt`,`onLoad`,`onError`],_t={key:1},vt={class:`mp-card-main`},yt={class:`mp-card-head`},bt=[`title`],xt={key:1,class:`mp-card-metric`},St=[`title`],Ct={class:`mp-card-meta`},wt=[`title`],Tt=[`title`],Et={key:2,class:`mp-tag remote`},Dt={class:`mp-card-foot`},Ot=[`href`],kt={key:1,class:`mp-installed-chip`},At=[`disabled`,`onClick`],jt={key:3,class:`mp-not-installable`},Mt={key:1,class:`mp-empty`},Nt={key:0,class:`mp-group installed`},Pt={class:`mp-group-header`},Ft={class:`mp-group-title`},It={class:`mp-group-count`},Lt={key:0,class:`mp-installed-block`},Rt={class:`mp-installed-target`},zt={class:`mp-installed-list`},Bt=[`title`],Vt=[`title`],Ht={key:1,class:`mp-meta-pkg`},Ut={key:2,class:`mp-tag warn`},Wt=[`disabled`,`title`,`onClick`],Gt=[`disabled`,`onClick`],Kt={key:1,class:`mp-empty all`},qt={key:0,class:`mkt-form`},Jt={class:`mkt-form-name`},Yt=[`onUpdate:modelValue`,`placeholder`],Xt={key:0,class:`mkt-field`},Zt={class:`mkt-hint`};function Qt(t,r,i,a,o,s){let c=l,f=P,p=d,m=b,h=T;return U(),_(`div`,Xe,[W(` ── 页头 ───────────────────────────────── `),g(`header`,Ze,[g(`div`,Qe,[g(`h2`,$e,S(i.type===`skill`?a.$t(`@MKT:Skill 广场`):a.$t(`@MKT:MCP 广场`)),1),g(`p`,et,S(i.type===`skill`?a.$t(`@MKT:Skill 广场副标题`):a.$t(`@MKT:MCP 广场副标题`)),1)]),g(`span`,tt,S(i.type===`skill`?a.$t(`@MKT:共 {n} 个技能`,{n:a.totalCount}):a.$t(`@MKT:共 {n} 个服务`,{n:a.totalCount})),1)]),W(` ── 工具栏 ───────────────────────────────── `),g(`div`,nt,[g(`div`,rt,[e(c,{class:`mp-search-icon`},{default:N(()=>[e(a.Search)]),_:1}),E(g(`input`,{"onUpdate:modelValue":r[0]||=e=>a.searchInput=e,class:`mp-search-input`,type:`text`,placeholder:i.type===`skill`?a.$t(`@MKT:搜索 Skill...`):a.$t(`@MKT:搜索 MCP 服务...`)},null,8,it),[[H,a.searchInput]])]),e(p,{modelValue:a.installTarget,"onUpdate:modelValue":r[1]||=e=>a.installTarget=e,size:`small`,class:`mp-target`},{default:N(()=>[e(f,{value:`project`},{default:N(()=>[I(S(a.$t(`@MKT:当前项目`)),1)]),_:1}),e(f,{value:`global`},{default:N(()=>[I(S(a.$t(`@MKT:g ai 智能体`)),1)]),_:1})]),_:1},8,[`modelValue`]),e(m,{content:a.$t(`@MKT:刷新`),placement:`top`,"show-after":300},{default:N(()=>[g(`button`,{class:x([`mp-refresh`,{spinning:a.loading}]),onClick:a.loadCatalog},[e(c,null,{default:N(()=>[e(a.Refresh)]),_:1})],2)]),_:1},8,[`content`])]),g(`div`,at,[g(`span`,ot,[I(S(a.$t(`@MKT:安装到`))+` `,1),g(`b`,null,S(a.targetLabel),1)]),g(`div`,st,[(U(!0),_(w,null,C(a.sources,e=>(U(),_(`button`,{key:e.id,class:x([`mp-chip`,{active:a.selectedSources.includes(e.id)}]),onClick:()=>{let t=a.selectedSources.indexOf(e.id);t>=0?a.selectedSources.splice(t,1):a.selectedSources.push(e.id)}},S(e.label),11,ct))),128)),a.selectedSources.length?(U(),_(`button`,{key:0,class:`mp-chip clear`,onClick:r[2]||=e=>a.selectedSources=[]},S(a.$t(`@MKT:全部来源`)),1)):W(`v-if`,!0)])]),W(` ── 内容 ─────────────────────────────────── `),E((U(),_(`div`,lt,[(U(!0),_(w,null,C(a.groups,t=>(U(),_(`section`,{key:t.id,class:`mp-group`},[g(`header`,ut,[g(`h3`,dt,S(t.label),1),t.status===`ok`?(U(),_(`span`,ft,S(t.items.length),1)):(U(),_(`span`,pt,[e(c,null,{default:N(()=>[e(a.Warning)]),_:1}),I(` `+S(t.error||a.$t(`@MKT:来源不可用`)),1)])),t.homepage?(U(),_(`a`,{key:2,class:`mp-group-link`,href:t.homepage,target:`_blank`,rel:`noopener noreferrer`,title:t.homepage},[e(c,null,{default:N(()=>[e(a.Link)]),_:1})],8,mt)):W(`v-if`,!0)]),t.status===`ok`&&t.items.length?(U(),_(`div`,ht,[(U(!0),_(w,null,C(t.items,t=>(U(),_(`article`,{key:a.cardKey(t),class:`mp-card`},[W(` 图标:品牌 logo(simple-icons / GitHub 组织头像)→ 首字母砖兜底 `),g(`div`,{class:x([`mp-card-icon`,{tile:!a.iconOf(t).url}]),style:u({"--tile-hue":String(a.iconOf(t).hue)})},[a.iconOf(t).url?(U(),_(`img`,{key:0,src:a.iconOf(t).url,alt:t.name,draggable:`false`,onLoad:e=>a.onIconLoad(t),onError:e=>a.onIconError(t)},null,40,gt)):(U(),_(`span`,_t,S(a.iconOf(t).letter),1))],6),g(`div`,vt,[g(`div`,yt,[g(`span`,{class:`mp-card-name`,title:t.name},S(t.name),9,bt),t.verified?(U(),n(c,{key:0,class:`mp-verified`,title:a.$t(`@MKT:已验证`)},{default:N(()=>[e(a.Select)]),_:1},8,[`title`])):W(`v-if`,!0),a.metricText(t)?(U(),_(`span`,xt,[e(c,null,{default:N(()=>[t.stars?(U(),n(a.Star,{key:0})):(U(),n(a.Download,{key:1}))]),_:2},1024),I(` `+S(a.metricText(t)),1)])):W(`v-if`,!0)]),g(`p`,{class:`mp-card-desc`,title:t.description},S(t.description||a.$t(`@MKT:暂无描述`)),9,St),g(`div`,Ct,[t.package?(U(),_(`code`,{key:0,class:`mp-meta-pkg`,title:t.package},S(t.package),9,wt)):t.repository?(U(),_(`span`,{key:1,class:`mp-meta-repo`,title:t.repository+(t.subpath?` · `+t.subpath:``)},[I(S(t.repository),1),t.subpath?(U(),_(w,{key:0},[I(` · `+S(t.subpath),1)],64)):W(`v-if`,!0)],8,Tt)):W(`v-if`,!0),t.transport===`remote`?(U(),_(`span`,Et,S(a.$t(`@MKT:远程服务`)),1)):W(`v-if`,!0),(U(!0),_(w,null,C((t.tags||[]).slice(0,2),e=>(U(),_(`span`,{key:e,class:`mp-tag`},S(e),1))),128))]),g(`div`,Dt,[t.upstream?(U(),_(`a`,{key:0,class:`mp-card-link`,href:t.upstream,target:`_blank`,rel:`noopener noreferrer`},S(a.$t(`@MKT:查看来源`)),9,Ot)):W(`v-if`,!0),r[6]||=g(`span`,{class:`mp-foot-spacer`},null,-1),t.installed?(U(),_(`span`,kt,[e(c,null,{default:N(()=>[e(a.Check)]),_:1}),I(S(a.$t(`@MKT:已安装`)),1)])):t.installable===!1?(U(),_(`span`,jt,S(a.$t(`@MKT:暂不支持一键安装`)),1)):(U(),_(`button`,{key:2,class:`mp-install-btn`,disabled:a.isBusy(t),onClick:e=>a.onInstall(t)},S(a.isBusy(t)?a.$t(`@MKT:安装中...`):a.$t(`@MKT:安装`)),9,At))])])]))),128))])):t.status===`ok`?(U(),_(`div`,Mt,S(a.$t(`@MKT:该来源暂无结果`)),1)):W(`v-if`,!0)]))),128)),W(` ── 已安装 ─────────────────────────────── `),a.installed.length?(U(),_(`section`,Nt,[g(`header`,Pt,[g(`h3`,Ft,S(a.$t(`@MKT:已安装`)),1),g(`span`,It,S(a.installed.length),1)]),(U(),_(w,null,C([`project`,`global`],t=>g(`div`,{key:t},[a.installedByTarget[t]?.length?(U(),_(`div`,Lt,[g(`div`,Rt,S(t===`project`?a.$t(`@MKT:当前项目`):a.$t(`@MKT:g ai 智能体`)),1),g(`div`,zt,[(U(!0),_(w,null,C(a.installedByTarget[t],n=>(U(),_(`div`,{key:t+n.id,class:`mp-installed-row`},[g(`span`,{class:`mp-installed-name`,title:n.name},S(n.name),9,Bt),W(` 实际落盘的标识:SKILL.md 里的 name 常与仓库名不同(如仓库 taste-skill
2
+ 里的 skill 自称 brandkit),不显示这个用户就对不上广场卡片上的名字 `),n.id&&n.id!==n.name?(U(),_(`code`,{key:0,class:`mp-installed-id`,title:n.dir||n.file||n.id},S(n.id),9,Vt)):W(`v-if`,!0),n.package?(U(),_(`code`,Ht,S(n.package),1)):W(`v-if`,!0),n.requiredEnv?.length?(U(),_(`span`,Ut,S(a.$t(`@MKT:待配置`))+`: `+S(n.requiredEnv.join(`, `)),1)):W(`v-if`,!0),r[7]||=g(`span`,{class:`mp-foot-spacer`},null,-1),g(`button`,{class:`mp-reveal-btn`,disabled:a.revealing.has(t+n.id),title:n.dir||n.file||``,onClick:e=>a.onReveal(n)},[e(c,null,{default:N(()=>[e(a.FolderOpened)]),_:1}),I(` `+S(a.$t(`@MKT:打开文件夹`)),1)],8,Wt),g(`button`,{class:`mp-remove-btn`,disabled:a.removing.has(t+n.id),onClick:e=>a.onRemove(n)},[e(c,null,{default:N(()=>[e(a.Delete)]),_:1}),I(` `+S(a.removing.has(t+n.id)?a.$t(`@MKT:卸载中...`):a.$t(`@MKT:卸载`)),1)],8,Gt)]))),128))])])):W(`v-if`,!0)])),64))])):W(`v-if`,!0),!a.loading&&!a.groups.length?(U(),_(`div`,Kt,S(a.$t(`@MKT:加载失败`)),1)):W(`v-if`,!0)])),[[h,a.loading]]),W(` ── MCP 安装前配置 ───────────────────────── `),e(a.CommonDialog,{modelValue:a.configDialog.visible,"onUpdate:modelValue":r[5]||=e=>a.configDialog.visible=e,title:a.$t(`@MKT:配置 MCP`),width:`460px`,type:`flex`,"close-on-click-modal":!1,"append-to-body":``},{footer:N(()=>[g(`button`,{class:`mkt-cancel`,onClick:r[4]||=e=>a.configDialog.visible=!1},S(a.$t(`@MKT:取消`)),1),g(`button`,{class:`mkt-confirm`,onClick:a.confirmConfig},S(a.$t(`@MKT:安装`)),1)]),default:N(()=>[a.configDialog.item?(U(),_(`div`,qt,[g(`p`,Jt,S(a.configDialog.item.name),1),(U(!0),_(w,null,C(Object.keys(a.configDialog.env),e=>(U(),_(`div`,{key:e,class:`mkt-field`},[g(`label`,null,S(e),1),E(g(`input`,{"onUpdate:modelValue":t=>a.configDialog.env[e]=t,type:`text`,autocomplete:`off`,placeholder:a.$t(`@MKT:环境变量值`),spellcheck:`false`},null,8,Yt),[[H,a.configDialog.env[e]]])]))),128)),a.configDialog.item.args?.length?(U(),_(`div`,Xt,[g(`label`,null,S(a.$t(`@MKT:启动参数`)),1),E(g(`input`,{"onUpdate:modelValue":r[3]||=e=>a.configDialog.args=e,type:`text`,autocomplete:`off`,spellcheck:`false`},null,512),[[H,a.configDialog.args]]),g(`p`,Zt,S(a.$t(`@MKT:参数提示`)),1)])):W(`v-if`,!0)])):W(`v-if`,!0)]),_:1},8,[`modelValue`,`title`])])}var $t=J(Ye,[[`render`,Qt],[`__scopeId`,`data-v-e9f9e851`],[`__file`,`D:/workspace/github_workspace/zen-gitsync/src/ui/client/src/components/MarketplacePanel.vue`]]);c(),R();var en=f({__name:`SchedulePanel`,emits:[`open-session`],setup(e,{expose:t,emit:n}){t();let r=n,i=ae(),o=j([]),s=j(!0),c=j(``),l=j({}),u=null,d=null;async function f(){try{o.value=await Oe(),c.value=``}catch(e){c.value=e?.message||String(e)}finally{s.value=!1}}function p(){d===null&&(d=window.setTimeout(()=>{d=null,f()},150))}a(async()=>{await f(),u=Pe(e=>{[`tasks_changed`,`task_started`,`task_finished`,`hello`].includes(e.type)&&p()})}),v(()=>{u?.(),d!==null&&window.clearTimeout(d)});let m=G(()=>{let e=o.value.filter(e=>e.enabled).length,t=o.value.length-e;return o.value.length?q(`@SCHED:{on} 个启用 · {off} 个停用`,{on:e,off:t}):``}),h=[`@SCHED:周日`,`@SCHED:周一`,`@SCHED:周二`,`@SCHED:周三`,`@SCHED:周四`,`@SCHED:周五`,`@SCHED:周六`];function g(e){let t=Fe(e.schedule);switch(t.kind){case`every-minute`:return q(`@SCHED:每分钟`);case`every-n-minutes`:return q(`@SCHED:每 {n} 分钟`,{n:t.n});case`hourly`:return q(`@SCHED:每小时第 {minute} 分钟`,{minute:t.minute});case`daily`:return q(`@SCHED:每天 {time}`,{time:`${String(t.hour).padStart(2,`0`)}:${String(t.minute).padStart(2,`0`)}`});case`weekly`:return q(`@SCHED:每周 {weekday} {time}`,{weekday:q(h[t.weekday]),time:`${String(t.hour).padStart(2,`0`)}:${String(t.minute).padStart(2,`0`)}`});case`monthly`:return q(`@SCHED:每月 {day} 日 {time}`,{day:t.day,time:`${String(t.hour).padStart(2,`0`)}:${String(t.minute).padStart(2,`0`)}`});default:return t.raw}}function _(e){if(!e.enabled)return q(`@SCHED:已停用`);if(e.running)return q(`@SCHED:运行中...`);let t=Le(e.nextRunAt);switch(t.kind){case`none`:return``;case`today`:return q(`@SCHED:下次 今天 {time}`,{time:t.time});case`tomorrow`:return q(`@SCHED:下次 明天 {time}`,{time:t.time});case`weekday`:return q(`@SCHED:下次 {weekday} {time}`,{weekday:q(h[t.weekday]),time:t.time});case`date`:return q(`@SCHED:下次 {date} {time}`,{date:t.date,time:t.time})}}function y(e){let t=e.lastRun;if(!t)return q(`@SCHED:还没执行过`);switch(t.status){case`ok`:return q(`@SCHED:成功`);case`error`:return q(`@SCHED:失败`);case`timed-out`:return q(`@SCHED:超时中止`);case`skipped-busy`:return q(`@SCHED:已跳过(会话忙)`);case`missed`:return q(`@SCHED:已错过(未运行)`);case`cancelled`:return q(`@SCHED:已停止`);default:return t.status}}function b(e){let t=e.lastRun;if(!t)return q(`@SCHED:还没执行过`);let n=ze(t.durationMs),r=q(`@SCHED:上次 {status}`,{status:y(e)});return n?`${r} · ${n}`:r}function x(e){return e.lastRun?`is-${Re(e.lastRun.status)}`:`is-muted`}async function S(e,t){if(!l.value[e.id]){l.value={...l.value,[e.id]:!0};try{await t(),await f()}catch(e){M.error(e?.message||String(e))}finally{let t={...l.value};delete t[e.id],l.value=t}}}function C(e){return S(e,()=>Ae(e.id,{enabled:!e.enabled}))}function w(e){return S(e,()=>Me(e.id))}function T(e){return S(e,()=>Ne(e.id))}let E=j(!1),D=j(null);function O(e){D.value=e,E.value=!0}async function ee(){let e=D.value;if(e)try{await je(e.id),E.value=!1,await f()}catch(e){M.error(e?.message||String(e))}}let k=j(!1),A=j(``),N=j(``),P=j(!1),F=j({name:``,freq:`daily`,everyMinutes:30,minute:0,hour:9,weekday:1,custom:``,cwd:``,prompt:``,onMissed:`run`,enabled:!0}),I=G(()=>[{value:`minutes`,label:q(`@SCHED:每 N 分钟`)},{value:`hourly`,label:q(`@SCHED:每小时`)},{value:`daily`,label:q(`@SCHED:每天`)},{value:`weekly`,label:q(`@SCHED:每周`)},{value:`custom`,label:q(`@SCHED:自定义 cron`)}]),L=G(()=>Be({freq:F.value.freq,everyMinutes:F.value.everyMinutes,minute:F.value.minute,hour:F.value.hour,weekday:F.value.weekday,custom:F.value.custom}));function R(){F.value={name:``,freq:`daily`,everyMinutes:30,minute:0,hour:9,weekday:1,custom:``,cwd:i.currentDirectory||``,prompt:``,onMissed:`run`,enabled:!0},N.value=``}function z(){A.value=``,R(),k.value=!0}function B(e){A.value=e.id;let t=Fe(e.schedule),n={name:e.name,freq:`custom`,everyMinutes:30,minute:0,hour:9,weekday:1,custom:e.schedule,cwd:e.cwd,prompt:e.prompt,onMissed:e.onMissed===`skip`?`skip`:`run`,enabled:e.enabled};switch(t.kind){case`every-n-minutes`:n.freq=`minutes`,n.everyMinutes=t.n;break;case`hourly`:n.freq=`hourly`,n.minute=t.minute;break;case`daily`:n.freq=`daily`,n.minute=t.minute,n.hour=t.hour;break;case`weekly`:n.freq=`weekly`,n.minute=t.minute,n.hour=t.hour,n.weekday=t.weekday;break;default:n.freq=`custom`}F.value=n,N.value=``,k.value=!0}async function V(){let e=F.value;if(!e.name.trim()){N.value=q(`@SCHED:任务名不能为空`);return}if(!e.prompt.trim()){N.value=q(`@SCHED:提示词不能为空`);return}let t=L.value;if(!t){N.value=q(`@SCHED:cron 表达式不能为空`);return}let n={name:e.name.trim(),schedule:t,cwd:e.cwd.trim(),prompt:e.prompt.trim(),enabled:e.enabled,onMissed:e.onMissed};P.value=!0;try{A.value?await Ae(A.value,n):await ke(n),k.value=!1,await f()}catch(e){N.value=e?.message||String(e)}finally{P.value=!1}}let H={emit:r,configStore:i,tasks:o,loading:s,errorMsg:c,pending:l,get disposeEvents(){return u},set disposeEvents(e){u=e},get refreshTimer(){return d},set refreshTimer(e){d=e},refresh:f,scheduleRefresh:p,summaryText:m,WEEKDAY_KEYS:h,descText:g,nextText:_,lastStatusText:y,lastText:b,lastClass:x,withPending:S,toggle:C,runNow:w,stop:T,confirmVisible:E,confirmTarget:D,askRemove:O,confirmRemove:ee,formVisible:k,editingId:A,formError:N,saving:P,form:F,freqOptions:I,cronPreview:L,resetForm:R,openCreate:z,openEdit:B,submitForm:V,get $t(){return q},CommonDialog:oe};return Object.defineProperty(H,"__isScriptSetup",{enumerable:!1,value:!0}),H}});F(),c(),V();var tn={class:`schedule-panel`},nn={class:`schedule-toolbar`},rn={class:`schedule-summary`},an={key:0,class:`schedule-error`},on={key:1,class:`schedule-loading`},sn={key:2,class:`schedule-empty`},cn={class:`schedule-empty-title`},ln={class:`schedule-empty-desc`},un={key:3,class:`schedule-list`},dn={class:`schedule-card-body`},fn={class:`schedule-card-head`},pn={class:`schedule-name`},mn={key:0,class:`schedule-running`},hn=[`aria-checked`,`aria-label`,`onClick`],gn={class:`schedule-card-sub`},_n={class:`schedule-desc`},vn=[`onClick`],yn={class:`schedule-card-side`},bn={class:`schedule-actions`},xn=[`disabled`,`onClick`],Sn=[`disabled`,`onClick`],Cn=[`onClick`],wn=[`onClick`],Tn={class:`sch-form`},En={class:`sch-field`},Dn={class:`sch-field-label`},On=[`placeholder`],kn={class:`sch-field`},An={class:`sch-field-label`},jn={class:`sch-freq-row`},Mn=[`value`],Nn={class:`sch-inline-label`},Pn=[`value`],Fn={class:`sch-inline-label`},In=[`value`],Ln=[`value`],Rn=[`value`],zn={class:`sch-inline-label`},Bn=[`value`],Vn={class:`sch-inline-label`},Hn=[`placeholder`],Un={class:`sch-hint`},Wn={class:`sch-field`},Gn={class:`sch-field-label`},Kn=[`placeholder`],qn={class:`sch-field`},Jn={class:`sch-field-label`},Yn=[`placeholder`],Xn={class:`sch-field`},Zn={class:`sch-field-label`},Qn={class:`sch-radio-row`},$n={class:`sch-radio`},er={class:`sch-radio`},tr={class:`sch-radio`},nr={key:0,class:`sch-form-error`},rr={class:`sch-form-footer`},ir=[`disabled`],ar={class:`sch-confirm-text`},or={class:`sch-form-footer`};function sr(t,n,r,i,a,o){return U(),_(`div`,tn,[g(`div`,nn,[g(`span`,rn,S(i.summaryText),1),g(`button`,{type:`button`,class:`sch-btn sch-btn-primary`,onClick:i.openCreate},S(i.$t(`@SCHED:新建任务`)),1)]),i.errorMsg?(U(),_(`div`,an,S(i.$t(`@SCHED:操作失败:{error}`,{error:i.errorMsg})),1)):W(`v-if`,!0),i.loading?(U(),_(`div`,on,S(i.$t(`@SCHED:加载中...`)),1)):i.tasks.length?(U(),_(`div`,un,[(U(!0),_(w,null,C(i.tasks,e=>(U(),_(`article`,{key:e.id,class:x([`schedule-card`,{"is-disabled":!e.enabled,"is-running":!!e.running}])},[g(`div`,dn,[g(`div`,fn,[g(`span`,pn,S(e.name),1),e.running?(U(),_(`span`,mn,S(i.$t(`@SCHED:运行中`)),1)):W(`v-if`,!0),g(`button`,{type:`button`,class:x([`sch-switch`,{on:e.enabled}]),role:`switch`,"aria-checked":e.enabled,"aria-label":e.enabled?i.$t(`@SCHED:停用`):i.$t(`@SCHED:启用`),onClick:t=>i.toggle(e)},[...n[17]||=[g(`span`,{class:`sch-switch-knob`},null,-1)]],10,hn)]),g(`div`,gn,[g(`span`,_n,S(i.descText(e)),1),n[18]||=g(`span`,{class:`schedule-sep`},`·`,-1),g(`span`,{class:x([`schedule-last`,i.lastClass(e)])},S(i.lastText(e)),3),e.sessionId?(U(),_(`button`,{key:0,type:`button`,class:`sch-link`,onClick:t=>i.emit(`open-session`,e.sessionId)},S(i.$t(`@SCHED:查看会话`)),9,vn)):W(`v-if`,!0)])]),g(`div`,yn,[g(`div`,{class:x([`schedule-next`,{"is-muted":!e.enabled}])},S(i.nextText(e)),3),g(`div`,bn,[e.running?(U(),_(`button`,{key:0,type:`button`,class:`sch-btn`,disabled:!!i.pending[e.id],onClick:t=>i.stop(e)},S(i.$t(`@SCHED:停止`)),9,xn)):(U(),_(`button`,{key:1,type:`button`,class:`sch-btn`,disabled:!!i.pending[e.id],onClick:t=>i.runNow(e)},S(i.$t(`@SCHED:运行`)),9,Sn)),g(`button`,{type:`button`,class:`sch-btn`,onClick:t=>i.openEdit(e)},S(i.$t(`@SCHED:编辑`)),9,Cn),g(`button`,{type:`button`,class:`sch-btn sch-btn-danger`,onClick:t=>i.askRemove(e)},S(i.$t(`@SCHED:删除`)),9,wn)])])],2))),128))])):(U(),_(`div`,sn,[g(`p`,cn,S(i.$t(`@SCHED:还没有定时任务`)),1),g(`p`,ln,S(i.$t(`@SCHED:让 g ai 在指定时间自动做事:定时拉代码、定时巡检、定时汇总。也可以在对话里直接说「每天 9 点帮我…」,让 g ai 来创建。`)),1)])),W(` 新建 / 编辑 `),e(i.CommonDialog,{modelValue:i.formVisible,"onUpdate:modelValue":n[14]||=e=>i.formVisible=e,title:i.editingId?i.$t(`@SCHED:编辑任务`):i.$t(`@SCHED:新建任务`),"close-on-click-modal":!1,"append-to-body":!0,size:`medium`,width:`560px`,"z-index":3e6,"custom-class":`schedule-dialog`},{default:N(()=>[g(`div`,Tn,[g(`label`,En,[g(`span`,Dn,S(i.$t(`@SCHED:任务名`)),1),E(g(`input`,{"onUpdate:modelValue":n[0]||=e=>i.form.name=e,class:`sch-input`,type:`text`,placeholder:i.$t(`@SCHED:如:每日拉代码`)},null,8,On),[[H,i.form.name]])]),g(`div`,kn,[g(`span`,An,S(i.$t(`@SCHED:执行计划`)),1),g(`div`,jn,[E(g(`select`,{"onUpdate:modelValue":n[1]||=e=>i.form.freq=e,class:`sch-input sch-select`},[(U(!0),_(w,null,C(i.freqOptions,e=>(U(),_(`option`,{key:e.value,value:e.value},S(e.label),9,Mn))),128))],512),[[A,i.form.freq]]),i.form.freq===`minutes`?(U(),_(w,{key:0},[g(`span`,Nn,S(i.$t(`@SCHED:每`)),1),E(g(`select`,{"onUpdate:modelValue":n[2]||=e=>i.form.everyMinutes=e,class:`sch-input sch-select sch-select-sm`},[(U(),_(w,null,C([5,10,15,20,30,60],e=>g(`option`,{key:e,value:e},S(e),9,Pn)),64))],512),[[A,i.form.everyMinutes,void 0,{number:!0}]]),g(`span`,Fn,S(i.$t(`@SCHED:分钟`)),1)],64)):i.form.freq===`daily`||i.form.freq===`weekly`?(U(),_(w,{key:1},[i.form.freq===`weekly`?E((U(),_(`select`,{key:0,"onUpdate:modelValue":n[3]||=e=>i.form.weekday=e,class:`sch-input sch-select sch-select-sm`},[(U(),_(w,null,C(i.WEEKDAY_KEYS,(e,t)=>g(`option`,{key:t,value:t},S(i.$t(e)),9,In)),64))],512)),[[A,i.form.weekday,void 0,{number:!0}]]):W(`v-if`,!0),E(g(`select`,{"onUpdate:modelValue":n[4]||=e=>i.form.hour=e,class:`sch-input sch-select sch-select-sm`},[(U(),_(w,null,C(24,e=>g(`option`,{key:e-1,value:e-1},S(String(e-1).padStart(2,`0`)),9,Ln)),64))],512),[[A,i.form.hour,void 0,{number:!0}]]),n[19]||=g(`span`,{class:`sch-inline-label`},`:`,-1),E(g(`select`,{"onUpdate:modelValue":n[5]||=e=>i.form.minute=e,class:`sch-input sch-select sch-select-sm`},[(U(),_(w,null,C(60,e=>g(`option`,{key:e-1,value:e-1},S(String(e-1).padStart(2,`0`)),9,Rn)),64))],512),[[A,i.form.minute,void 0,{number:!0}]])],64)):i.form.freq===`hourly`?(U(),_(w,{key:2},[g(`span`,zn,S(i.$t(`@SCHED:第`)),1),E(g(`select`,{"onUpdate:modelValue":n[6]||=e=>i.form.minute=e,class:`sch-input sch-select sch-select-sm`},[(U(),_(w,null,C(60,e=>g(`option`,{key:e-1,value:e-1},S(String(e-1).padStart(2,`0`)),9,Bn)),64))],512),[[A,i.form.minute,void 0,{number:!0}]]),g(`span`,Vn,S(i.$t(`@SCHED:分钟`)),1)],64)):E((U(),_(`input`,{key:3,"onUpdate:modelValue":n[7]||=e=>i.form.custom=e,class:`sch-input sch-input-cron`,type:`text`,spellcheck:`false`,placeholder:i.$t(`@SCHED:如:0 9 * * 1-5`)},null,8,Hn)),[[H,i.form.custom]])]),g(`span`,Un,S(i.$t(`@SCHED:cron:{cron}(分 时 日 月 周,本地时间)`,{cron:i.cronPreview||`—`})),1)]),g(`label`,Wn,[g(`span`,Gn,S(i.$t(`@SCHED:项目目录`)),1),E(g(`input`,{"onUpdate:modelValue":n[8]||=e=>i.form.cwd=e,class:`sch-input`,type:`text`,spellcheck:`false`,placeholder:i.$t(`@SCHED:任务在该目录下执行(默认当前项目)`)},null,8,Kn),[[H,i.form.cwd]])]),g(`label`,qn,[g(`span`,Jn,S(i.$t(`@SCHED:提示词`)),1),E(g(`textarea`,{"onUpdate:modelValue":n[9]||=e=>i.form.prompt=e,class:`sch-input sch-textarea`,rows:`4`,placeholder:i.$t(`@SCHED:到点后发给 g ai 的完整指令,例如:检查所有仓库远端更新,有变更就 pull;写成一次自足的请求(未来那一轮没有现在的上下文)`)},null,8,Yn),[[H,i.form.prompt]])]),g(`div`,Xn,[g(`span`,Zn,S(i.$t(`@SCHED:错过补偿`)),1),g(`div`,Qn,[g(`label`,$n,[E(g(`input`,{"onUpdate:modelValue":n[10]||=e=>i.form.onMissed=e,type:`radio`,value:`run`},null,512),[[O,i.form.onMissed]]),g(`span`,null,S(i.$t(`@SCHED:补跑一次(g ui 重新运行后)`)),1)]),g(`label`,er,[E(g(`input`,{"onUpdate:modelValue":n[11]||=e=>i.form.onMissed=e,type:`radio`,value:`skip`},null,512),[[O,i.form.onMissed]]),g(`span`,null,S(i.$t(`@SCHED:跳过`)),1)]),g(`label`,tr,[E(g(`input`,{"onUpdate:modelValue":n[12]||=e=>i.form.enabled=e,type:`checkbox`},null,512),[[L,i.form.enabled]]),g(`span`,null,S(i.$t(`@SCHED:创建后启用`)),1)])])]),i.formError?(U(),_(`p`,nr,S(i.formError),1)):W(`v-if`,!0)]),g(`div`,rr,[g(`button`,{type:`button`,class:`sch-btn`,onClick:n[13]||=e=>i.formVisible=!1},S(i.$t(`@SCHED:取消`)),1),g(`button`,{type:`button`,class:`sch-btn sch-btn-primary`,disabled:i.saving,onClick:i.submitForm},S(i.saving?i.$t(`@SCHED:保存中...`):i.$t(`@SCHED:保存`)),9,ir)])]),_:1},8,[`modelValue`,`title`]),W(` 删除确认 `),e(i.CommonDialog,{modelValue:i.confirmVisible,"onUpdate:modelValue":n[16]||=e=>i.confirmVisible=e,title:i.$t(`@SCHED:删除任务`),"close-on-click-modal":!1,"append-to-body":!0,size:`small`,width:`400px`,"z-index":3e6,"custom-class":`schedule-dialog-confirm`},{default:N(()=>[g(`p`,ar,S(i.$t(`@SCHED:确定删除「{name}」吗?已产生的会话会保留,但任务不再执行。`,{name:i.confirmTarget?.name||``})),1),g(`div`,or,[g(`button`,{type:`button`,class:`sch-btn`,onClick:n[15]||=e=>i.confirmVisible=!1},S(i.$t(`@SCHED:取消`)),1),g(`button`,{type:`button`,class:`sch-btn sch-btn-danger`,onClick:i.confirmRemove},S(i.$t(`@SCHED:删除`)),1)])]),_:1},8,[`modelValue`,`title`])])}var cr=J(en,[[`render`,sr],[`__scopeId`,`data-v-63dc658b`],[`__file`,`D:/workspace/github_workspace/zen-gitsync/src/ui/client/src/components/SchedulePanel.vue`]]);c(),R();var lr=4e3,ur=f({__name:`AgentPromptSettings`,setup(e,{expose:t}){t();let n=ae(),{defaultPrompt:r,projectPrompts:i,loadOrchestrator:o,saveDefaultPrompt:s,saveProjectPrompt:c}=De(),l=j(``),u=j(!1),d=j(!1),f=G(()=>n.agentDefaultPrompt||``),p=G(()=>l.value.trim()!==f.value.trim());async function m(){if(!u.value&&p.value){u.value=!0;try{await n.saveAiSettings({agentDefaultPrompt:l.value})&&(l.value=f.value,d.value=!0,M.success(q(`@AGENT:已保存 g ai 默认提示词`)))}finally{u.value=!1}}}let h=G(()=>n.currentDirectory||``),g=G(()=>ce(h.value)||h.value),_=G(()=>{let e=Y(h.value);return e&&i.value?.[e]?.prompt||``}),v=j(``),y=j(``),b=j(!1),x=j(!1),S=j(!1),C=G(()=>v.value.trim()!==(r.value||``).trim()||!!h.value&&y.value.trim()!==_.value.trim());function w(){v.value=r.value||``,y.value=_.value}a(async()=>{l.value=f.value,w();let e=await o(!0);S.value=!e,e&&w()});async function T(){if(!b.value&&C.value){b.value=!0;try{let e=!0,t=v.value.trim();t!==(r.value||``).trim()&&(e=await s(t));let n=y.value.trim();e&&h.value&&n!==_.value.trim()&&(e=await c(h.value,n)),e&&(w(),x.value=!0)}finally{b.value=!1}}}let E={configStore:n,defaultPrompt:r,projectPrompts:i,loadOrchestrator:o,saveDefaultPrompt:s,saveProjectPrompt:c,MAX_CHARS:lr,gaiDraft:l,savingGai:u,gaiSaved:d,gaiStored:f,gaiDirty:p,saveGai:m,projectPath:h,projectName:g,projectPrompt:_,globalDraft:v,projectDraft:y,savingDispatch:b,dispatchSaved:x,dispatchLoadFailed:S,dispatchDirty:C,syncDispatchDraft:w,saveDispatch:T,get $t(){return q}};return Object.defineProperty(E,"__isScriptSetup",{enumerable:!1,value:!0}),E}});F(),c(),V();var dr={class:`aps`},fr={class:`aps__scroll`},pr={class:`aps__head`},mr={class:`aps__title`},hr={class:`aps__intro`},gr={class:`aps__card aps__card--gai`},_r={class:`aps__card-head`},vr={class:`aps__card-title`},yr={class:`aps__count`},br={class:`aps__hint`},xr=[`placeholder`],Sr={class:`aps__foot`},Cr={key:0,class:`aps__saved`},wr=[`disabled`],Tr={class:`aps__card aps__card--dispatch`},Er={class:`aps__card-head`},Dr={class:`aps__card-title`},Or={class:`aps__hint`},kr={class:`aps__field`},Ar={class:`aps__card-head`},jr={class:`aps__label`,for:`aps-global`},Mr={class:`aps__count`},Nr=[`placeholder`],Pr={class:`aps__field`},Fr={class:`aps__card-head`},Ir={class:`aps__label`,for:`aps-project`},Lr={key:0,class:`aps__count`},Rr=[`disabled`,`placeholder`],zr={class:`aps__hint`},Br={class:`aps__foot`},Vr={key:0,class:`aps__saved`},Hr={key:1,class:`aps__saved`},Ur=[`disabled`];function Wr(e,t,n,r,i,a){return U(),_(`div`,dr,[g(`div`,fr,[g(`header`,pr,[g(`h3`,mr,S(r.$t(`@AGENT:提示词设置`)),1),g(`p`,hr,S(r.$t(`@AGENT:这里配的两块提示词,和 g ai 对话时每一轮都会自动带上。改完下一次发消息就生效,不用新开会话。`)),1)]),W(` ── ① g ai 智能体的默认提示词 ── `),g(`section`,gr,[g(`div`,_r,[g(`h4`,vr,S(r.$t(`@AGENT:g ai 智能体的默认提示词`)),1),g(`span`,yr,S(r.gaiDraft.length)+` / `+S(r.MAX_CHARS),1)]),g(`p`,br,S(r.$t(`@AGENT:只作用于 g ai 自己:每次对话都会带上(定时任务也一样)。派发出去的任务读不到这一段。`)),1),E(g(`textarea`,{id:`aps-gai`,"onUpdate:modelValue":t[0]||=e=>r.gaiDraft=e,class:`aps__area`,rows:`6`,maxlength:r.MAX_CHARS,placeholder:r.$t(`@AGENT:例如:回答用中文;改完代码先跑一遍验证再汇报;不要动 dist 目录`)},null,8,xr),[[H,r.gaiDraft]]),g(`div`,Sr,[r.gaiSaved&&!r.gaiDirty?(U(),_(`span`,Cr,S(r.$t(`@AGENT:已保存`)),1)):W(`v-if`,!0),t[3]||=g(`span`,{class:`aps__spacer`},null,-1),g(`button`,{type:`button`,class:`aps__btn aps__btn--primary`,disabled:r.savingGai||!r.gaiDirty,onClick:r.saveGai},S(r.savingGai?r.$t(`@AGENT:保存中…`):r.$t(`@AGENT:保存`)),9,wr)])]),W(` ── ② 派发任务的提示词 ── `),g(`section`,Tr,[g(`div`,Er,[g(`h4`,Dr,S(r.$t(`@AGENT:派发任务的提示词`)),1)]),g(`p`,Or,S(r.$t(`@AGENT:与工作台「预设提示词」是同一份设置,在哪边改都一样。派发任务时附加在指令之前,和 g ai 对话时也会带上。`)),1),g(`div`,kr,[g(`div`,Ar,[g(`label`,jr,S(r.$t(`@AGENT:全局提示词`)),1),g(`span`,Mr,S(r.globalDraft.length)+` / `+S(r.MAX_CHARS),1)]),E(g(`textarea`,{id:`aps-global`,"onUpdate:modelValue":t[1]||=e=>r.globalDraft=e,class:`aps__area`,rows:`5`,maxlength:r.MAX_CHARS,placeholder:r.$t(`@AGENT:对所有项目生效。例如:回答用中文;改完代码必须跑一遍测试;不要动 dist 目录`)},null,8,Nr),[[H,r.globalDraft]])]),g(`div`,Pr,[g(`div`,Fr,[g(`label`,Ir,S(r.projectPath?r.$t(`@AGENT:「{name}」的项目提示词`,{name:r.projectName}):r.$t(`@AGENT:项目提示词`)),1),r.projectPath?(U(),_(`span`,Lr,S(r.projectDraft.length)+` / `+S(r.MAX_CHARS),1)):W(`v-if`,!0)]),E(g(`textarea`,{id:`aps-project`,"onUpdate:modelValue":t[2]||=e=>r.projectDraft=e,class:`aps__area`,rows:`5`,maxlength:r.MAX_CHARS,disabled:!r.projectPath,placeholder:r.projectPath?r.$t(`@AGENT:只在这个项目派发/对话时附加。例如:包管理器用 pnpm;改动集中在 src/ui 下`):r.$t(`@AGENT:当前没有打开项目,项目级提示词暂时不能设置`)},null,8,Rr),[[H,r.projectDraft]]),g(`p`,zr,S(r.projectPath?r.$t(`@AGENT:项目提示词追加在全局提示词之后(不覆盖全局),在「{name}」里派发或对话时一起带上`,{name:r.projectName}):r.$t(`@AGENT:先在左上角切到一个项目,才能设置它的提示词`)),1)]),g(`div`,Br,[r.dispatchSaved&&!r.dispatchDirty?(U(),_(`span`,Vr,S(r.$t(`@AGENT:已保存`)),1)):r.dispatchLoadFailed?(U(),_(`span`,Hr,S(r.$t(`@AGENT:读取设置失败,请稍后重试`)),1)):W(`v-if`,!0),t[4]||=g(`span`,{class:`aps__spacer`},null,-1),g(`button`,{type:`button`,class:`aps__btn aps__btn--primary`,disabled:r.savingDispatch||!r.dispatchDirty,onClick:r.saveDispatch},S(r.savingDispatch?r.$t(`@AGENT:保存中…`):r.$t(`@AGENT:保存`)),9,Ur)])])])])}var Gr=J(ur,[[`render`,Wr],[`__scopeId`,`data-v-f9ada51b`],[`__file`,`D:/workspace/github_workspace/zen-gitsync/src/ui/client/src/components/AgentPromptSettings.vue`]]);c(),R();var Kr=1100,qr=40,Jr=f({__name:`AgentView`,setup(e,{expose:n}){n();let i=ae(),o=ue(),s=j(null),{width:c,narrow:u}=Ce(s),d=j(`chat`),m=j(`chat`),h=G(()=>m.value===`mcp`?`mcp`:`skill`),g=(...e)=>f({render:()=>p(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":2,"stroke-linecap":`round`,"stroke-linejoin":`round`},e.map(e=>p(`path`,{d:e})))}),_=G(()=>[{id:`chat`,label:q(`@AGENT:对话`),icon:g(`M12 11v.01`,`M8 11v.01`,`M16 11v.01`,`M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1-3 3h-5l-5 3v-3h-2a3 3 0 0 1-3-3v-8a3 3 0 0 1 3-3l12 0`)},{id:`schedule`,label:q(`@AGENT:定时任务`),icon:g(`M5 13a7 7 0 1 0 14 0a7 7 0 0 0-14 0`,`M14.5 10.5l-2.5 2.5`,`M17 8l1-1`,`M14 3h-4`)},{id:`skill`,label:q(`@AGENT:Skill 广场`),icon:g(`M6.331 8h11.339a2 2 0 0 1 1.977 2.304l-1.255 8.152a3 3 0 0 1-2.966 2.544h-6.852a3 3 0 0 1-2.965-2.544l-1.255-8.152a2 2 0 0 1 1.977-2.304`,`M9 11v-5a3 3 0 0 1 6 0v5`)},{id:`mcp`,label:q(`@AGENT:MCP 广场`),icon:g(`M7 12l5 5l-1.5 1.5a3.536 3.536 0 1 1-5-5l1.5-1.5`,`M17 12l-5-5l1.5-1.5a3.536 3.536 0 1 1 5 5l-1.5 1.5`,`M3 21l2.5-2.5`,`M18.5 5.5l2.5-2.5`,`M10 11l-2 2`,`M13 14l-2 2`)},{id:`settings`,label:q(`@AGENT:设置`),icon:g(`M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 0 0-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 0 0-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 0 0-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 0 0-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 0 0 1.066-2.573c-.94-1.543.826-3.31 2.37-2.37c1 .608 2.296.07 2.572-1.065`,`M9 12a3 3 0 1 0 6 0a3 3 0 0 0-6 0`)}]),{sessions:y,sessionsLoading:b,currentSessionId:x,messages:S,displayMessages:C,isStreaming:w,sessionLoading:T,loadSessions:E,loadSession:D,deleteSession:O,renameSession:ee,newSession:k,sendMessage:A,retryTurn:M,questionPanel:N,answeringQuestion:P,answerQuestion:F,isSessionGenerating:I,currentEngine:L,pendingEngine:R,isEngineLocked:z,pickEngine:V,stop:H,inputContextUsage:te,queuedMessages:U,queuePaused:ne,removeQueuedMessage:W,flushQueued:re,silentMs:J}=xe(),oe=G(()=>z.value?L.value:R.value);function Y(e){z.value||V(e)}let ce=G(()=>{let e=i.theme;return e===`dark`||e===`auto`&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`}),le=G(()=>{let e=i.models.find(e=>e.isDefault);return e&&(e.name||e.model)||``}),De=G(()=>fe(y.value,I)),X=de(),Oe=G(()=>De.value.find(e=>e.id===x.value)?.title||q(`@AGENT:对话`)),ke={"--welcome-avatar":`url("${be}")`},Ae=G(()=>se(i.agentPresetPrompts));async function je(e){await A(e.text,e.files),await t(),Q()}async function Me(e){await A(e.prompt),await t(),Q()}let Ne=_e(),Z=j(null),Fe=ye();function Q(e=!0){Z.value?.scrollToBottom(e)}B(()=>S.value.length,()=>{t(()=>Q(!1))});function Ie(e){D(e),d.value=`chat`}function Le(e){e&&(m.value=`chat`,Ie(e))}function Re(){k(),d.value=`chat`}let ze=j(280),Be=j(!1),{convListCollapsed:Ve,setConvListCollapsed:He}=Ee();function Ue(e){if(Ve.value)return;Be.value=!0;let t=e.clientX,n=ze.value,r=e=>{let r=e.clientX-t,i=Math.max(200,Math.min(500,n+r));ze.value=i},i=()=>{Be.value=!1,document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)}B(u,e=>{e||(d.value=`chat`)}),B(()=>[i.currentDirectory,w.value],async([e,t],n)=>{let r=!n||e!==n[0],i=!!n&&n[1]===!0&&!t;(r||i)&&await E(),x.value&&!w.value&&!y.value.some(e=>e.sessionId===x.value)&&k()},{immediate:!0});let $=null;a(()=>{$=Pe(e=>{e.type===`task_finished`&&E().catch(()=>{})})}),v(()=>{$?.(),$=null});let We={configStore:i,gitStore:o,rootRef:s,width:c,narrow:u,TABS_SILENCE_MIN_WIDTH:Kr,chatPage:d,activeTab:m,marketplaceType:h,tablerIcon:g,tabs:_,sessions:y,sessionsLoading:b,currentSessionId:x,messages:S,displayMessages:C,isStreaming:w,sessionLoading:T,loadSessions:E,loadSession:D,deleteSession:O,renameSession:ee,newSession:k,sendMessage:A,retryTurn:M,questionPanel:N,answeringQuestion:P,answerQuestion:F,isSessionGenerating:I,currentEngine:L,pendingEngine:R,isEngineLocked:z,pickEngine:V,stop:H,inputContextUsage:te,queuedMessages:U,queuePaused:ne,removeQueuedMessage:W,flushQueued:re,silentMs:J,displayEngine:oe,handleEngineSelect:Y,chatTheme:ce,inputModelName:le,conversationItems:De,conversationLabels:X,currentSessionTitle:Oe,welcomeAvatarStyle:ke,presetQuestions:Ae,onSend:je,onSelectPreset:Me,questionLabels:Ne,chatContainerRef:Z,queueLabels:Fe,scrollToBottom:Q,selectSession:Ie,handleScheduleOpenSession:Le,handleNewSession:Re,sidebarWidth:ze,isResizing:Be,convListCollapsed:Ve,setConvListCollapsed:He,CONV_RAIL_WIDTH:qr,startResize:Ue,get disposeScheduleEvents(){return $},set disposeScheduleEvents(e){$=e},get $t(){return q},get ElIcon(){return l},get Loading(){return r},get ChatContainer(){return K},get ConversationList(){return ie},get AGENT_UPLOAD_ACCEPT(){return me},get AGENT_ASSISTANT_NAME(){return ge},get AGENT_ASSISTANT_AVATAR(){return be},get MESSAGE_RAIL_CONFIG(){return pe},get MESSAGE_META_CONFIG(){return ve},get agentEngineName(){return he},MarketplacePanel:$t,SchedulePanel:cr,AgentPromptSettings:Gr,AgentEngineSelector:Se,CopySessionButton:we,ChatSilenceBadge:Te};return Object.defineProperty(We,"__isScriptSetup",{enumerable:!1,value:!0}),We}});c(),F();var Yr={ref:`rootRef`,class:`agent-view`},Xr={class:`agent-chat-area`},Zr={class:`agent-tabs`,role:`tablist`},Qr=[`aria-selected`,`onClick`],$r={class:`agent-tab-body`},ei={key:0,class:`agent-chat-pane`},ti={key:0,class:`agent-list-page`},ni={key:0,class:`agent-page-bar`},ri=[`title`,`aria-label`],ii={class:`agent-page-title`},ai={key:0,class:`chat-loading`};function oi(t,r,i,a,o,s){return U(),_(`div`,Yr,[W(` ═══ 宽屏:左侧会话列表(只在「对话」Tab 显示)═══
3
3
  窄屏时这一整块不渲染,会话列表改成 body 里的一个整页(见 .agent-list-page) `),a.activeTab===`chat`&&!a.narrow?(U(),_(w,{key:0},[g(`aside`,{class:x([`agent-sidebar`,{"is-convs-collapsed":a.convListCollapsed}]),style:u({width:(a.convListCollapsed?a.CONV_RAIL_WIDTH:a.sidebarWidth)+`px`})},[W(` 会话列表:UI 与交互都在组件库的 ConversationList 里(含收起 / 展开) `),e(a.ConversationList,{class:`agent-conversations`,items:a.conversationItems,"active-id":a.currentSessionId,loading:a.sessionsLoading,labels:a.conversationLabels,collapsible:``,collapsed:a.convListCollapsed,"onUpdate:collapsed":a.setConvListCollapsed,onSelect:a.selectSession,onNew:a.handleNewSession,onRename:a.renameSession,onDelete:a.deleteSession},null,8,[`items`,`active-id`,`loading`,`labels`,`collapsed`,`onUpdate:collapsed`,`onRename`,`onDelete`])],6),W(` 拖拽分隔条(收起时藏起来:40px 的收纳条没有可拖的余地) `),a.convListCollapsed?W(`v-if`,!0):(U(),_(`div`,{key:0,class:x([`sidebar-resizer`,{active:a.isResizing}]),onMousedown:a.startResize},null,34))],64)):W(`v-if`,!0),W(` ═══ 右侧:Tab 栏 + 内容区 ═══ `),g(`main`,Xr,[g(`nav`,Zr,[(U(!0),_(w,null,C(a.tabs,t=>(U(),_(`button`,{key:t.id,type:`button`,class:x([`agent-tab`,{active:a.activeTab===t.id}]),role:`tab`,"aria-selected":a.activeTab===t.id,onClick:e=>a.activeTab=t.id},[e(a.ElIcon,null,{default:N(()=>[(U(),n(m(t.icon)))]),_:2},1024),g(`span`,null,S(t.label),1)],10,Qr))),128)),W(` ═══ 引擎选择器 ═══
4
4
  与工作台执行器下拉同一套交互(点击展开、未安装标出来、点了直接开安装弹窗)。
5
5
  下拉本体收口在 AgentEngineSelector,文件空间 g ai 面板复用同一份实现。
@@ -1,2 +1,2 @@
1
- import"./rolldown-runtime-C0FnF6B9.js";import{An as e,Bn as t,Cn as n,Dt as r,Gn as i,In as a,J as o,Mn as s,Sn as c,Tn as l,Un as u,W as d,Wr as f,Xr as p,gr as m,i as h,ir as g,jr as _,kn as v,lr as y,nr as b,nt as x,qn as S,r as C,tt as w,wn as T,xn as E,z as D}from"./element-plus-Bz6lYur-.js";import{n as O,t as k}from"./_plugin-vue_export-helper-Dz34f-q7.js";import{t as A}from"./CommonDialog-D2f72EzI.js";async function j(e,t){let n=e.body.getReader(),r=new TextDecoder(`utf-8`),i=``;for(;;){let{done:e,value:a}=await n.read();if(e)break;i+=r.decode(a,{stream:!0});let o=i.split(`
2
- `);i=o.pop()??``;for(let e of o)e.trim()&&t(e)}i.trim()&&t(i)}async function M(){let e=await fetch(`/api/app-version`);return e.ok?e.json():{success:!1,current:``,latest:null,hasUpdate:!1,error:`HTTP ${e.status}`}}async function N(e){let t=await fetch(`/api/app-upgrade`,{method:`POST`});if(!t.ok){let n=`HTTP ${t.status}`;try{let e=await t.json();e?.error&&(n=e.error)}catch{}e({type:`error`,message:n}),e({type:`done`,code:t.status});return}if(!t.body){e({type:`error`,message:`响应无 body`}),e({type:`done`,code:-1});return}await j(t,t=>{try{e(JSON.parse(t))}catch{}})}async function P(){let e=await fetch(`/api/app-restart`,{method:`POST`});if(!e.ok){let t=`HTTP ${e.status}`;try{let n=await e.json();n?.error&&(t=n.error)}catch{}throw Error(t)}if(!e.body)throw Error(`响应无 body`);return new Promise((t,n)=>{let r=!1,i=e=>{r||(r=!0,e())};j(e,e=>{try{let r=JSON.parse(e);r.type===`ready`&&typeof r.port==`number`&&r.port>0?i(()=>t(r.port)):r.type===`timeout`?i(()=>n(Error(`restart.timeout`))):r.type===`error`&&i(()=>n(Error(r.message||`restart.failed`)))}catch{}}).then(()=>{i(()=>n(Error(`restart.stream-closed`)))}).catch(()=>{})})}a(),y();var F=`npm install -g zen-gitsync --registry https://registry.npmjs.org/`,I=s({__name:`UpgradeDialog`,props:{modelValue:{type:Boolean,required:!0},logs:{type:String,required:!0},status:{type:String,required:!0},countdown:{type:Number,required:!1,default:0}},emits:[`update:modelValue`,`retry`,`restart`,`cancel`],setup(e,{expose:n,emit:i}){n();let a=e,o=i,s=m(null);b(()=>a.logs,async()=>{await t(),s.value&&(s.value.scrollTop=s.value.scrollHeight)});function c(){a.status!==`running`&&(a.status===`success`&&a.countdown>0&&o(`cancel`),o(`update:modelValue`,!1))}function l(){o(`retry`)}function u(){o(`restart`)}function d(){o(`cancel`),o(`update:modelValue`,!1)}async function f(){try{await navigator.clipboard.writeText(F),h.success(O(`@F13B4:已复制升级命令`))}catch{h.warning(O(`@F13B4:复制失败,请手动复制`))}}let p={MANUAL_COMMAND:F,props:a,emit:o,logEl:s,close:c,onRetry:l,onRestart:u,onLater:d,onCopyCommand:f,get Loading(){return r},get CircleCheck(){return w},get CircleClose(){return x},get $t(){return O},CommonDialog:A};return Object.defineProperty(p,"__isScriptSetup",{enumerable:!1,value:!0}),p}});a(),_();var L={key:3},R={key:4},z={key:5},B={key:0,class:`upgrade-hint`},V={key:0,class:`upgrade-countdown`},H={key:1,class:`upgrade-manual`},U={class:`upgrade-manual__label`};function W(t,r,i,a,s,u){let d=o,m=D;return S(),n(a.CommonDialog,{"model-value":i.modelValue,"onUpdate:modelValue":r[0]||=e=>a.emit(`update:modelValue`,e),title:a.$t(`@F13B4:升级`),width:`680px`,type:`flex`,"close-on-click-modal":!1,"close-on-press-escape":!1,"show-close":i.status!==`running`,"append-to-body":``,onClose:a.close},{footer:g(()=>[i.status===`failed`?(S(),n(m,{key:0,type:`primary`,onClick:a.onRetry},{default:g(()=>[v(p(a.$t(`@F13B4:重试`)),1)]),_:1})):T(`v-if`,!0),i.status===`failed`?(S(),n(m,{key:1,onClick:a.onCopyCommand},{default:g(()=>[v(p(a.$t(`@F13B4:复制升级命令`)),1)]),_:1})):T(`v-if`,!0),i.status===`success`?(S(),n(m,{key:2,type:`primary`,onClick:a.onRestart},{default:g(()=>[v(p(a.$t(`@F13B4:立即重启并刷新`)),1)]),_:1})):T(`v-if`,!0),i.status===`success`?(S(),n(m,{key:3,onClick:a.onLater},{default:g(()=>[v(p(a.$t(`@F13B4:稍后手动重启`)),1)]),_:1})):T(`v-if`,!0),i.status===`running`?(S(),n(m,{key:4,disabled:``},{default:g(()=>[v(p(a.$t(`@F13B4:升级中`))+`... `,1)]),_:1})):T(`v-if`,!0)]),default:g(()=>[c(`div`,{class:f([`upgrade-status`,`is-${i.status}`])},[i.status===`running`?(S(),n(d,{key:0,class:`is-loading`},{default:g(()=>[e(a.Loading)]),_:1})):i.status===`success`?(S(),n(d,{key:1,color:`var(--color-success)`},{default:g(()=>[e(a.CircleCheck)]),_:1})):(S(),n(d,{key:2,color:`var(--color-danger)`},{default:g(()=>[e(a.CircleClose)]),_:1})),i.status===`running`?(S(),l(`span`,L,p(a.$t(`@F13B4:升级中`)),1)):i.status===`success`?(S(),l(`span`,R,p(a.$t(`@F13B4:升级完成`)),1)):(S(),l(`span`,z,p(a.$t(`@F13B4:升级失败`)),1))],2),i.status===`success`?(S(),l(`p`,B,[v(p(a.$t(`@F13B4:新版本已全局安装,需要重启服务才能生效`))+` `,1),i.countdown>0?(S(),l(`span`,V,p(a.$t(`@F13B4:{seconds} 秒后自动刷新`,{seconds:i.countdown})),1)):T(`v-if`,!0)])):T(`v-if`,!0),i.status===`failed`?(S(),l(`p`,H,[c(`span`,U,p(a.$t(`@F13B4:手动升级命令`)),1),c(`code`,{class:`upgrade-manual__cmd`},p(a.MANUAL_COMMAND))])):T(`v-if`,!0),c(`pre`,{ref:`logEl`,class:`upgrade-log`},p(i.logs||a.$t(`@F13B4:等待日志输出`)),513)]),_:1},8,[`model-value`,`title`,`show-close`])}var G=k(I,[[`render`,W],[`__scopeId`,`data-v-bc566bba`],[`__file`,`D:/workspace/github_workspace/zen-gitsync/src/ui/client/src/components/UpgradeDialog.vue`]]);a(),y();var K=`https://github.com/xz333221/zen-gitsync/tags`,q=5,J=`app-version-check`,Y=36e5,X=s({__name:`AppVersionBadge`,setup(e,{expose:t}){t();let n=`2.18.19`,r=m(n),a=E(()=>r.value||n),o=m(null),s=m(!1),c=m(``),l=m(`running`),d=m(0),f=null,p=m(!1);function g(){try{let e=sessionStorage.getItem(J);if(!e)return null;let{at:t,data:n}=JSON.parse(e);return Date.now()-t>Y?null:n}catch{return null}}function _(e){try{sessionStorage.setItem(J,JSON.stringify({at:Date.now(),data:e}))}catch{}}async function v(e=!1){let t=g();t&&(o.value=t);try{let t=await M();o.value=t,_(t),t.current&&(r.value=t.current),!e&&t.success&&t.hasUpdate&&h({type:`success`,message:O(`@F13B4:发现新版本 {version}`,{version:t.latest??``}),duration:4e3})}catch(t){e||h({type:`warning`,message:O(`@F13B4:检查更新失败 {error}`,{error:t?.message||``})})}}async function y(){if(o.value?.hasUpdate){try{await C.confirm(O(`@F13B4:确定要从 {current} 升级到 {latest} 吗?`,{current:o.value.current,latest:o.value.latest}),O(`@F13B4:升级`),{confirmButtonText:O(`@F13B4:确定升级`),cancelButtonText:O(`@F13B4:取消`),type:`info`})}catch{return}c.value=``,l.value=`running`,s.value=!0,await N(e=>{if(e.type===`done`){if(l.value=e.code===0?`success`:`failed`,e.code===0){try{sessionStorage.removeItem(J)}catch{}o.value?.latest&&(r.value=o.value.latest),b()}}else e.message&&(c.value+=e.message)})}}function b(){x(),d.value=q,f=setInterval(()=>{--d.value,d.value<=0&&(f&&=(clearInterval(f),null),w())},1e3)}function x(){f&&=(clearInterval(f),null),d.value=0}function S(){x()}async function w(){if(x(),!p.value){p.value=!0;try{let e=await P(),{pathname:t,search:n,hash:r}=window.location;window.location.href=`http://localhost:${e}${t}${n}${r}`}catch(e){let t=e?.message||``,n={"restart.timeout":`@F13B4:重启超时`,"restart.stream-closed":`@F13B4:重启失败,请刷新页面重试`,"restart.failed":`@F13B4:重启失败`}[t];h({type:`warning`,message:n?O(n):O(`@F13B4:重启失败 {error}`,{error:t})}),p.value=!1}}}u(()=>{x()}),i(()=>{v(!0)});let T={buildVersion:n,releasesUrl:K,runtimeVersion:r,displayVersion:a,latestInfo:o,upgradeDialogVisible:s,upgradeLogs:c,upgradeStatus:l,AUTO_REFRESH_SECONDS:q,countdown:d,get countdownTimer(){return f},set countdownTimer(e){f=e},restartInFlight:p,CACHE_KEY:J,CACHE_TTL_MS:Y,readCache:g,writeCache:_,checkUpdate:v,handleUpgrade:y,startAutoRefreshCountdown:b,cancelAutoRefreshCountdown:x,handleCancelAutoRefresh:S,handleRestart:w,get $t(){return O},UpgradeDialog:G};return Object.defineProperty(T,"__isScriptSetup",{enumerable:!1,value:!0}),T}});a(),_();var Z={class:`app-version-badge`},Q=[`aria-label`],$=[`aria-label`],ee=[`title`,`aria-label`],te={class:`upgrade-btn__label`},ne={class:`upgrade-btn__version`};function re(t,n,r,i,a,o){let s=d;return S(),l(`div`,Z,[T(` GitHub 链接 `),e(s,{content:i.$t(`@F13B4:在 GitHub 上查看源码`),placement:`top`,effect:`dark`,"show-after":300},{default:g(()=>[c(`a`,{href:`https://github.com/xz333221/zen-gitsync`,target:`_blank`,rel:`noopener noreferrer`,class:`badge-icon-link`,"aria-label":i.$t(`@F13B4:在 GitHub 上查看源码`)},[...n[1]||=[c(`svg`,{viewBox:`0 0 24 24`,width:`15`,height:`15`,"aria-hidden":`true`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[c(`path`,{d:`M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0 1 12 6.844a9.59 9.59 0 0 1 2.504.337c1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.02 10.02 0 0 0 22 12.017C22 6.484 17.522 2 12 2z`})],-1)]],8,Q)]),_:1},8,[`content`]),T(` NPM 链接 `),e(s,{content:i.$t(`@F13B4:在 npm 上查看包`),placement:`top`,effect:`dark`,"show-after":300},{default:g(()=>[c(`a`,{href:`https://www.npmjs.com/package/zen-gitsync`,target:`_blank`,rel:`noopener noreferrer`,class:`badge-icon-link badge-icon-link--npm`,"aria-label":i.$t(`@F13B4:在 npm 上查看包`)},[...n[2]||=[c(`svg`,{viewBox:`0 0 24 24`,width:`15`,height:`15`,"aria-hidden":`true`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[c(`path`,{d:`M2 2v20h20V2H2zm17.167 17.167H12.5v-10h-3.333v10H4.833V4.833h14.334v14.334z`})],-1)]],8,$)]),_:1},8,[`content`]),T(` 版本号 `),e(s,{content:i.$t(`@F13B4:查看更新`),placement:`top`,effect:`dark`,"show-after":300},{default:g(()=>[c(`a`,{href:i.releasesUrl,target:`_blank`,rel:`noopener noreferrer`,class:`version-link`},`v`+p(i.displayVersion),1)]),_:1},8,[`content`]),i.latestInfo?.hasUpdate?(S(),l(`button`,{key:0,type:`button`,class:`upgrade-btn`,title:i.$t(`@F13B4:发现新版本 {version},点击升级`,{version:i.latestInfo.latest??``}),"aria-label":i.$t(`@F13B4:发现新版本 {version},点击升级`,{version:i.latestInfo.latest??``}),onClick:i.handleUpgrade},[n[3]||=c(`span`,{class:`upgrade-btn__dot`,"aria-hidden":`true`},null,-1),c(`span`,te,p(i.$t(`@F13B4:升级`)),1),c(`span`,ne,`v`+p(i.latestInfo.latest),1)],8,ee)):T(`v-if`,!0),e(i.UpgradeDialog,{modelValue:i.upgradeDialogVisible,"onUpdate:modelValue":n[0]||=e=>i.upgradeDialogVisible=e,logs:i.upgradeLogs,status:i.upgradeStatus,countdown:i.countdown,onRetry:i.handleUpgrade,onRestart:i.handleRestart,onCancel:i.handleCancelAutoRefresh},null,8,[`modelValue`,`logs`,`status`,`countdown`])])}var ie=k(X,[[`render`,re],[`__scopeId`,`data-v-7e0300ec`],[`__file`,`D:/workspace/github_workspace/zen-gitsync/src/ui/client/src/components/AppVersionBadge.vue`]]);export{ie as default};
1
+ import"./rolldown-runtime-C0FnF6B9.js";import{An as e,Bn as t,Cn as n,Dt as r,Gn as i,In as a,J as o,Mn as s,Sn as c,Tn as l,Un as u,W as d,Wr as f,Xr as p,gr as m,i as h,ir as g,jr as _,kn as v,lr as y,nr as b,nt as x,qn as S,r as C,tt as w,wn as T,xn as E,z as D}from"./element-plus-Bz6lYur-.js";import{n as O,t as k}from"./_plugin-vue_export-helper-BhdsvhKo.js";import{t as A}from"./CommonDialog-BkuDIWro.js";async function j(e,t){let n=e.body.getReader(),r=new TextDecoder(`utf-8`),i=``;for(;;){let{done:e,value:a}=await n.read();if(e)break;i+=r.decode(a,{stream:!0});let o=i.split(`
2
+ `);i=o.pop()??``;for(let e of o)e.trim()&&t(e)}i.trim()&&t(i)}async function M(){let e=await fetch(`/api/app-version`);return e.ok?e.json():{success:!1,current:``,latest:null,hasUpdate:!1,error:`HTTP ${e.status}`}}async function N(e){let t=await fetch(`/api/app-upgrade`,{method:`POST`});if(!t.ok){let n=`HTTP ${t.status}`;try{let e=await t.json();e?.error&&(n=e.error)}catch{}e({type:`error`,message:n}),e({type:`done`,code:t.status});return}if(!t.body){e({type:`error`,message:`响应无 body`}),e({type:`done`,code:-1});return}await j(t,t=>{try{e(JSON.parse(t))}catch{}})}async function P(){let e=await fetch(`/api/app-restart`,{method:`POST`});if(!e.ok){let t=`HTTP ${e.status}`;try{let n=await e.json();n?.error&&(t=n.error)}catch{}throw Error(t)}if(!e.body)throw Error(`响应无 body`);return new Promise((t,n)=>{let r=!1,i=e=>{r||(r=!0,e())};j(e,e=>{try{let r=JSON.parse(e);r.type===`ready`&&typeof r.port==`number`&&r.port>0?i(()=>t(r.port)):r.type===`timeout`?i(()=>n(Error(`restart.timeout`))):r.type===`error`&&i(()=>n(Error(r.message||`restart.failed`)))}catch{}}).then(()=>{i(()=>n(Error(`restart.stream-closed`)))}).catch(()=>{})})}a(),y();var F=`npm install -g zen-gitsync --registry https://registry.npmjs.org/`,I=s({__name:`UpgradeDialog`,props:{modelValue:{type:Boolean,required:!0},logs:{type:String,required:!0},status:{type:String,required:!0},countdown:{type:Number,required:!1,default:0}},emits:[`update:modelValue`,`retry`,`restart`,`cancel`],setup(e,{expose:n,emit:i}){n();let a=e,o=i,s=m(null);b(()=>a.logs,async()=>{await t(),s.value&&(s.value.scrollTop=s.value.scrollHeight)});function c(){a.status!==`running`&&(a.status===`success`&&a.countdown>0&&o(`cancel`),o(`update:modelValue`,!1))}function l(){o(`retry`)}function u(){o(`restart`)}function d(){o(`cancel`),o(`update:modelValue`,!1)}async function f(){try{await navigator.clipboard.writeText(F),h.success(O(`@F13B4:已复制升级命令`))}catch{h.warning(O(`@F13B4:复制失败,请手动复制`))}}let p={MANUAL_COMMAND:F,props:a,emit:o,logEl:s,close:c,onRetry:l,onRestart:u,onLater:d,onCopyCommand:f,get Loading(){return r},get CircleCheck(){return w},get CircleClose(){return x},get $t(){return O},CommonDialog:A};return Object.defineProperty(p,"__isScriptSetup",{enumerable:!1,value:!0}),p}});a(),_();var L={key:3},R={key:4},z={key:5},B={key:0,class:`upgrade-hint`},V={key:0,class:`upgrade-countdown`},H={key:1,class:`upgrade-manual`},U={class:`upgrade-manual__label`};function W(t,r,i,a,s,u){let d=o,m=D;return S(),n(a.CommonDialog,{"model-value":i.modelValue,"onUpdate:modelValue":r[0]||=e=>a.emit(`update:modelValue`,e),title:a.$t(`@F13B4:升级`),width:`680px`,type:`flex`,"close-on-click-modal":!1,"close-on-press-escape":!1,"show-close":i.status!==`running`,"append-to-body":``,onClose:a.close},{footer:g(()=>[i.status===`failed`?(S(),n(m,{key:0,type:`primary`,onClick:a.onRetry},{default:g(()=>[v(p(a.$t(`@F13B4:重试`)),1)]),_:1})):T(`v-if`,!0),i.status===`failed`?(S(),n(m,{key:1,onClick:a.onCopyCommand},{default:g(()=>[v(p(a.$t(`@F13B4:复制升级命令`)),1)]),_:1})):T(`v-if`,!0),i.status===`success`?(S(),n(m,{key:2,type:`primary`,onClick:a.onRestart},{default:g(()=>[v(p(a.$t(`@F13B4:立即重启并刷新`)),1)]),_:1})):T(`v-if`,!0),i.status===`success`?(S(),n(m,{key:3,onClick:a.onLater},{default:g(()=>[v(p(a.$t(`@F13B4:稍后手动重启`)),1)]),_:1})):T(`v-if`,!0),i.status===`running`?(S(),n(m,{key:4,disabled:``},{default:g(()=>[v(p(a.$t(`@F13B4:升级中`))+`... `,1)]),_:1})):T(`v-if`,!0)]),default:g(()=>[c(`div`,{class:f([`upgrade-status`,`is-${i.status}`])},[i.status===`running`?(S(),n(d,{key:0,class:`is-loading`},{default:g(()=>[e(a.Loading)]),_:1})):i.status===`success`?(S(),n(d,{key:1,color:`var(--color-success)`},{default:g(()=>[e(a.CircleCheck)]),_:1})):(S(),n(d,{key:2,color:`var(--color-danger)`},{default:g(()=>[e(a.CircleClose)]),_:1})),i.status===`running`?(S(),l(`span`,L,p(a.$t(`@F13B4:升级中`)),1)):i.status===`success`?(S(),l(`span`,R,p(a.$t(`@F13B4:升级完成`)),1)):(S(),l(`span`,z,p(a.$t(`@F13B4:升级失败`)),1))],2),i.status===`success`?(S(),l(`p`,B,[v(p(a.$t(`@F13B4:新版本已全局安装,需要重启服务才能生效`))+` `,1),i.countdown>0?(S(),l(`span`,V,p(a.$t(`@F13B4:{seconds} 秒后自动刷新`,{seconds:i.countdown})),1)):T(`v-if`,!0)])):T(`v-if`,!0),i.status===`failed`?(S(),l(`p`,H,[c(`span`,U,p(a.$t(`@F13B4:手动升级命令`)),1),c(`code`,{class:`upgrade-manual__cmd`},p(a.MANUAL_COMMAND))])):T(`v-if`,!0),c(`pre`,{ref:`logEl`,class:`upgrade-log`},p(i.logs||a.$t(`@F13B4:等待日志输出`)),513)]),_:1},8,[`model-value`,`title`,`show-close`])}var G=k(I,[[`render`,W],[`__scopeId`,`data-v-bc566bba`],[`__file`,`D:/workspace/github_workspace/zen-gitsync/src/ui/client/src/components/UpgradeDialog.vue`]]);a(),y();var K=`https://github.com/xz333221/zen-gitsync/tags`,q=5,J=`app-version-check`,Y=36e5,X=s({__name:`AppVersionBadge`,setup(e,{expose:t}){t();let n=`2.18.20`,r=m(n),a=E(()=>r.value||n),o=m(null),s=m(!1),c=m(``),l=m(`running`),d=m(0),f=null,p=m(!1);function g(){try{let e=sessionStorage.getItem(J);if(!e)return null;let{at:t,data:n}=JSON.parse(e);return Date.now()-t>Y?null:n}catch{return null}}function _(e){try{sessionStorage.setItem(J,JSON.stringify({at:Date.now(),data:e}))}catch{}}async function v(e=!1){let t=g();t&&(o.value=t);try{let t=await M();o.value=t,_(t),t.current&&(r.value=t.current),!e&&t.success&&t.hasUpdate&&h({type:`success`,message:O(`@F13B4:发现新版本 {version}`,{version:t.latest??``}),duration:4e3})}catch(t){e||h({type:`warning`,message:O(`@F13B4:检查更新失败 {error}`,{error:t?.message||``})})}}async function y(){if(o.value?.hasUpdate){try{await C.confirm(O(`@F13B4:确定要从 {current} 升级到 {latest} 吗?`,{current:o.value.current,latest:o.value.latest}),O(`@F13B4:升级`),{confirmButtonText:O(`@F13B4:确定升级`),cancelButtonText:O(`@F13B4:取消`),type:`info`})}catch{return}c.value=``,l.value=`running`,s.value=!0,await N(e=>{if(e.type===`done`){if(l.value=e.code===0?`success`:`failed`,e.code===0){try{sessionStorage.removeItem(J)}catch{}o.value?.latest&&(r.value=o.value.latest),b()}}else e.message&&(c.value+=e.message)})}}function b(){x(),d.value=q,f=setInterval(()=>{--d.value,d.value<=0&&(f&&=(clearInterval(f),null),w())},1e3)}function x(){f&&=(clearInterval(f),null),d.value=0}function S(){x()}async function w(){if(x(),!p.value){p.value=!0;try{let e=await P(),{pathname:t,search:n,hash:r}=window.location;window.location.href=`http://localhost:${e}${t}${n}${r}`}catch(e){let t=e?.message||``,n={"restart.timeout":`@F13B4:重启超时`,"restart.stream-closed":`@F13B4:重启失败,请刷新页面重试`,"restart.failed":`@F13B4:重启失败`}[t];h({type:`warning`,message:n?O(n):O(`@F13B4:重启失败 {error}`,{error:t})}),p.value=!1}}}u(()=>{x()}),i(()=>{v(!0)});let T={buildVersion:n,releasesUrl:K,runtimeVersion:r,displayVersion:a,latestInfo:o,upgradeDialogVisible:s,upgradeLogs:c,upgradeStatus:l,AUTO_REFRESH_SECONDS:q,countdown:d,get countdownTimer(){return f},set countdownTimer(e){f=e},restartInFlight:p,CACHE_KEY:J,CACHE_TTL_MS:Y,readCache:g,writeCache:_,checkUpdate:v,handleUpgrade:y,startAutoRefreshCountdown:b,cancelAutoRefreshCountdown:x,handleCancelAutoRefresh:S,handleRestart:w,get $t(){return O},UpgradeDialog:G};return Object.defineProperty(T,"__isScriptSetup",{enumerable:!1,value:!0}),T}});a(),_();var Z={class:`app-version-badge`},Q=[`aria-label`],$=[`aria-label`],ee=[`title`,`aria-label`],te={class:`upgrade-btn__label`},ne={class:`upgrade-btn__version`};function re(t,n,r,i,a,o){let s=d;return S(),l(`div`,Z,[T(` GitHub 链接 `),e(s,{content:i.$t(`@F13B4:在 GitHub 上查看源码`),placement:`top`,effect:`dark`,"show-after":300},{default:g(()=>[c(`a`,{href:`https://github.com/xz333221/zen-gitsync`,target:`_blank`,rel:`noopener noreferrer`,class:`badge-icon-link`,"aria-label":i.$t(`@F13B4:在 GitHub 上查看源码`)},[...n[1]||=[c(`svg`,{viewBox:`0 0 24 24`,width:`15`,height:`15`,"aria-hidden":`true`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[c(`path`,{d:`M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0 1 12 6.844a9.59 9.59 0 0 1 2.504.337c1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.02 10.02 0 0 0 22 12.017C22 6.484 17.522 2 12 2z`})],-1)]],8,Q)]),_:1},8,[`content`]),T(` NPM 链接 `),e(s,{content:i.$t(`@F13B4:在 npm 上查看包`),placement:`top`,effect:`dark`,"show-after":300},{default:g(()=>[c(`a`,{href:`https://www.npmjs.com/package/zen-gitsync`,target:`_blank`,rel:`noopener noreferrer`,class:`badge-icon-link badge-icon-link--npm`,"aria-label":i.$t(`@F13B4:在 npm 上查看包`)},[...n[2]||=[c(`svg`,{viewBox:`0 0 24 24`,width:`15`,height:`15`,"aria-hidden":`true`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[c(`path`,{d:`M2 2v20h20V2H2zm17.167 17.167H12.5v-10h-3.333v10H4.833V4.833h14.334v14.334z`})],-1)]],8,$)]),_:1},8,[`content`]),T(` 版本号 `),e(s,{content:i.$t(`@F13B4:查看更新`),placement:`top`,effect:`dark`,"show-after":300},{default:g(()=>[c(`a`,{href:i.releasesUrl,target:`_blank`,rel:`noopener noreferrer`,class:`version-link`},`v`+p(i.displayVersion),1)]),_:1},8,[`content`]),i.latestInfo?.hasUpdate?(S(),l(`button`,{key:0,type:`button`,class:`upgrade-btn`,title:i.$t(`@F13B4:发现新版本 {version},点击升级`,{version:i.latestInfo.latest??``}),"aria-label":i.$t(`@F13B4:发现新版本 {version},点击升级`,{version:i.latestInfo.latest??``}),onClick:i.handleUpgrade},[n[3]||=c(`span`,{class:`upgrade-btn__dot`,"aria-hidden":`true`},null,-1),c(`span`,te,p(i.$t(`@F13B4:升级`)),1),c(`span`,ne,`v`+p(i.latestInfo.latest),1)],8,ee)):T(`v-if`,!0),e(i.UpgradeDialog,{modelValue:i.upgradeDialogVisible,"onUpdate:modelValue":n[0]||=e=>i.upgradeDialogVisible=e,logs:i.upgradeLogs,status:i.upgradeStatus,countdown:i.countdown,onRetry:i.handleUpgrade,onRestart:i.handleRestart,onCancel:i.handleCancelAutoRefresh},null,8,[`modelValue`,`logs`,`status`,`countdown`])])}var ie=k(X,[[`render`,re],[`__scopeId`,`data-v-7e0300ec`],[`__file`,`D:/workspace/github_workspace/zen-gitsync/src/ui/client/src/components/AppVersionBadge.vue`]]);export{ie as default};
@@ -1,4 +1,4 @@
1
- import"./rolldown-runtime-C0FnF6B9.js";import{An as e,Cn as t,F as n,Ft as r,G as i,I as a,In as o,J as s,K as c,Mn as l,Sn as u,Tn as d,U as f,Wr as p,Xr as m,Yn as h,_ as g,_n as _,et as v,gr as y,hn as b,ir as x,jr as S,jt as C,lr as w,on as T,qn as E,wn as D,xn as O}from"./element-plus-Bz6lYur-.js";import{n as k,t as A}from"./_plugin-vue_export-helper-Dz34f-q7.js";import{t as j}from"./CommonDialog-D2f72EzI.js";import{dt as M,ut as N}from"./index-BybDOX1D.js";o(),w();var P=l({__name:`BranchSelector`,emits:[`branchChanged`],setup(e,{expose:t,emit:n}){t();let i=N(),a=n,o=y(!1),s=y(``),c=O(()=>{let e=s.value.trim().toLowerCase();return e?i.allBranches.filter(t=>t.toLowerCase().includes(e)):i.allBranches});async function l(e){if(e===i.currentBranch){o.value=!1;return}o.value=!1,await i.changeBranch(e)&&(a(`branchChanged`),i.refreshLog())}let u=y(!1),d=y(``),f=y(``);function p(){o.value=!1,f.value=i.currentBranch,u.value=!0}async function m(){await i.createBranch(d.value,f.value)&&(u.value=!1,d.value=``,a(`branchChanged`))}let h=y(!1);async function g(){if(!h.value){h.value=!0;try{await Promise.all([i.getCurrentBranch(!0),i.getBranchStatus(!0),i.getAllBranches()]),a(`branchChanged`),i.refreshLog()}finally{h.value=!1}}}let _={gitStore:i,emit:a,branchPopoverVisible:o,branchFilter:s,filteredBranches:c,selectBranch:l,createBranchDialogVisible:u,newBranchName:d,selectedBaseBranch:f,openCreateBranchDialog:p,createNewBranch:m,isRefreshingBranch:h,refreshCurrentBranch:g,get $t(){return k},get Plus(){return r},get Menu(){return C},get Check(){return v},CommonDialog:j,IconButton:M};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}});o(),S(),T();var F={key:0,class:`branch-info`},I={class:`branch-wrapper`},L={class:`branch-btn`},R={class:`branch-btn-name`},z={class:`branch-btn-caret`},B={class:`branch-popover-inner`},V={class:`branch-search`},H={class:`branch-list`},U=[`onClick`],W={key:1,class:`branch-item-check-placeholder`},G={class:`branch-item-name`},K={key:0,class:`branch-empty`},q={class:`branch-popover-footer`},J={class:`create-branch-content`},Y={class:`form-label`},X={class:`form-label`},Z={class:`dialog-footer`},Q={class:`footer-actions`},$=[`disabled`];function ee(r,o,l,v,y,S){let C=s,w=f,T=g,O=c,k=n,A=a,j=i;return v.gitStore.currentBranch?(E(),d(`div`,F,[u(`div`,I,[D(` VSCode 风格分支按钮 + 弹出列表 `),e(T,{visible:v.branchPopoverVisible,"onUpdate:visible":o[1]||=e=>v.branchPopoverVisible=e,placement:`top-start`,width:260,trigger:`click`,"popper-class":`branch-popover`,"show-arrow":!1,onShow:o[2]||=e=>v.branchFilter=``},{reference:x(()=>[u(`button`,L,[D(` git-branch.svg(Tabler icons,MIT) `),o[8]||=u(`svg`,{class:`branch-btn-icon`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[u(`path`,{d:`M5 18a2 2 0 1 0 4 0a2 2 0 1 0-4 0`}),u(`path`,{d:`M5 6a2 2 0 1 0 4 0a2 2 0 1 0-4 0`}),u(`path`,{d:`M15 6a2 2 0 1 0 4 0a2 2 0 1 0-4 0`}),u(`path`,{d:`M7 8l0 8`}),u(`path`,{d:`M9 18h6a2 2 0 0 0 2-2v-5`}),u(`path`,{d:`M14 14l3-3l3 3`})],-1),u(`span`,R,m(v.gitStore.currentBranch),1),u(`span`,z,[D(` chevron-down.svg(Tabler icons,MIT) `),e(C,null,{default:x(()=>[...o[7]||=[u(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[u(`path`,{d:`M6 9l6 6l6 -6`})],-1)]]),_:1})])])]),default:x(()=>[u(`div`,B,[D(` 搜索框 `),u(`div`,V,[e(w,{modelValue:v.branchFilter,"onUpdate:modelValue":o[0]||=e=>v.branchFilter=e,placeholder:v.$t(`@F13B4:搜索或签出分支`),size:`small`,clearable:``,autofocus:``},null,8,[`modelValue`,`placeholder`])]),D(` 分支列表 `),u(`div`,H,[(E(!0),d(_,null,h(v.filteredBranches,n=>(E(),d(`div`,{key:n,class:p([`branch-item`,{"is-active":n===v.gitStore.currentBranch}]),onClick:e=>v.selectBranch(n)},[n===v.gitStore.currentBranch?(E(),t(C,{key:0,class:`branch-item-check`},{default:x(()=>[e(v.Check)]),_:1})):(E(),d(`span`,W)),D(` git-branch.svg(Tabler icons,MIT) `),o[9]||=u(`svg`,{class:`branch-item-icon`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[u(`path`,{d:`M5 18a2 2 0 1 0 4 0a2 2 0 1 0-4 0`}),u(`path`,{d:`M5 6a2 2 0 1 0 4 0a2 2 0 1 0-4 0`}),u(`path`,{d:`M15 6a2 2 0 1 0 4 0a2 2 0 1 0-4 0`}),u(`path`,{d:`M7 8l0 8`}),u(`path`,{d:`M9 18h6a2 2 0 0 0 2-2v-5`}),u(`path`,{d:`M14 14l3-3l3 3`})],-1),u(`span`,G,m(n),1)],10,U))),128)),v.filteredBranches.length===0?(E(),d(`div`,K,m(v.$t(`@F13B4:没有匹配的分支`)),1)):D(`v-if`,!0)]),D(` 底部:创建新分支 `),u(`div`,q,[u(`button`,{class:`branch-create-btn`,onClick:v.openCreateBranchDialog},[e(C,null,{default:x(()=>[e(v.Plus)]),_:1}),u(`span`,null,m(v.$t(`@F13B4:创建新分支`)),1)])])])]),_:1},8,[`visible`]),D(` 刷新按钮(size=small:与 RemoteRepoCard 状态栏那两颗同档。
1
+ import"./rolldown-runtime-C0FnF6B9.js";import{An as e,Cn as t,F as n,Ft as r,G as i,I as a,In as o,J as s,K as c,Mn as l,Sn as u,Tn as d,U as f,Wr as p,Xr as m,Yn as h,_ as g,_n as _,et as v,gr as y,hn as b,ir as x,jr as S,jt as C,lr as w,on as T,qn as E,wn as D,xn as O}from"./element-plus-Bz6lYur-.js";import{n as k,t as A}from"./_plugin-vue_export-helper-BhdsvhKo.js";import{t as j}from"./CommonDialog-BkuDIWro.js";import{dt as M,ut as N}from"./index-cDiVh_ZL.js";o(),w();var P=l({__name:`BranchSelector`,emits:[`branchChanged`],setup(e,{expose:t,emit:n}){t();let i=N(),a=n,o=y(!1),s=y(``),c=O(()=>{let e=s.value.trim().toLowerCase();return e?i.allBranches.filter(t=>t.toLowerCase().includes(e)):i.allBranches});async function l(e){if(e===i.currentBranch){o.value=!1;return}o.value=!1,await i.changeBranch(e)&&(a(`branchChanged`),i.refreshLog())}let u=y(!1),d=y(``),f=y(``);function p(){o.value=!1,f.value=i.currentBranch,u.value=!0}async function m(){await i.createBranch(d.value,f.value)&&(u.value=!1,d.value=``,a(`branchChanged`))}let h=y(!1);async function g(){if(!h.value){h.value=!0;try{await Promise.all([i.getCurrentBranch(!0),i.getBranchStatus(!0),i.getAllBranches()]),a(`branchChanged`),i.refreshLog()}finally{h.value=!1}}}let _={gitStore:i,emit:a,branchPopoverVisible:o,branchFilter:s,filteredBranches:c,selectBranch:l,createBranchDialogVisible:u,newBranchName:d,selectedBaseBranch:f,openCreateBranchDialog:p,createNewBranch:m,isRefreshingBranch:h,refreshCurrentBranch:g,get $t(){return k},get Plus(){return r},get Menu(){return C},get Check(){return v},CommonDialog:j,IconButton:M};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}});o(),S(),T();var F={key:0,class:`branch-info`},I={class:`branch-wrapper`},L={class:`branch-btn`},R={class:`branch-btn-name`},z={class:`branch-btn-caret`},B={class:`branch-popover-inner`},V={class:`branch-search`},H={class:`branch-list`},U=[`onClick`],W={key:1,class:`branch-item-check-placeholder`},G={class:`branch-item-name`},K={key:0,class:`branch-empty`},q={class:`branch-popover-footer`},J={class:`create-branch-content`},Y={class:`form-label`},X={class:`form-label`},Z={class:`dialog-footer`},Q={class:`footer-actions`},$=[`disabled`];function ee(r,o,l,v,y,S){let C=s,w=f,T=g,O=c,k=n,A=a,j=i;return v.gitStore.currentBranch?(E(),d(`div`,F,[u(`div`,I,[D(` VSCode 风格分支按钮 + 弹出列表 `),e(T,{visible:v.branchPopoverVisible,"onUpdate:visible":o[1]||=e=>v.branchPopoverVisible=e,placement:`top-start`,width:260,trigger:`click`,"popper-class":`branch-popover`,"show-arrow":!1,onShow:o[2]||=e=>v.branchFilter=``},{reference:x(()=>[u(`button`,L,[D(` git-branch.svg(Tabler icons,MIT) `),o[8]||=u(`svg`,{class:`branch-btn-icon`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[u(`path`,{d:`M5 18a2 2 0 1 0 4 0a2 2 0 1 0-4 0`}),u(`path`,{d:`M5 6a2 2 0 1 0 4 0a2 2 0 1 0-4 0`}),u(`path`,{d:`M15 6a2 2 0 1 0 4 0a2 2 0 1 0-4 0`}),u(`path`,{d:`M7 8l0 8`}),u(`path`,{d:`M9 18h6a2 2 0 0 0 2-2v-5`}),u(`path`,{d:`M14 14l3-3l3 3`})],-1),u(`span`,R,m(v.gitStore.currentBranch),1),u(`span`,z,[D(` chevron-down.svg(Tabler icons,MIT) `),e(C,null,{default:x(()=>[...o[7]||=[u(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[u(`path`,{d:`M6 9l6 6l6 -6`})],-1)]]),_:1})])])]),default:x(()=>[u(`div`,B,[D(` 搜索框 `),u(`div`,V,[e(w,{modelValue:v.branchFilter,"onUpdate:modelValue":o[0]||=e=>v.branchFilter=e,placeholder:v.$t(`@F13B4:搜索或签出分支`),size:`small`,clearable:``,autofocus:``},null,8,[`modelValue`,`placeholder`])]),D(` 分支列表 `),u(`div`,H,[(E(!0),d(_,null,h(v.filteredBranches,n=>(E(),d(`div`,{key:n,class:p([`branch-item`,{"is-active":n===v.gitStore.currentBranch}]),onClick:e=>v.selectBranch(n)},[n===v.gitStore.currentBranch?(E(),t(C,{key:0,class:`branch-item-check`},{default:x(()=>[e(v.Check)]),_:1})):(E(),d(`span`,W)),D(` git-branch.svg(Tabler icons,MIT) `),o[9]||=u(`svg`,{class:`branch-item-icon`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[u(`path`,{d:`M5 18a2 2 0 1 0 4 0a2 2 0 1 0-4 0`}),u(`path`,{d:`M5 6a2 2 0 1 0 4 0a2 2 0 1 0-4 0`}),u(`path`,{d:`M15 6a2 2 0 1 0 4 0a2 2 0 1 0-4 0`}),u(`path`,{d:`M7 8l0 8`}),u(`path`,{d:`M9 18h6a2 2 0 0 0 2-2v-5`}),u(`path`,{d:`M14 14l3-3l3 3`})],-1),u(`span`,G,m(n),1)],10,U))),128)),v.filteredBranches.length===0?(E(),d(`div`,K,m(v.$t(`@F13B4:没有匹配的分支`)),1)):D(`v-if`,!0)]),D(` 底部:创建新分支 `),u(`div`,q,[u(`button`,{class:`branch-create-btn`,onClick:v.openCreateBranchDialog},[e(C,null,{default:x(()=>[e(v.Plus)]),_:1}),u(`span`,null,m(v.$t(`@F13B4:创建新分支`)),1)])])])]),_:1},8,[`visible`]),D(` 刷新按钮(size=small:与 RemoteRepoCard 状态栏那两颗同档。
2
2
  IconButton 默认走 medium = 38px 盒 / 20px 字形(--icon-glyph-size-md),
3
3
  比邻居大一整档 —— 用户 2026-10-16 反馈"footer 这枚刷新比其他的都大"。
4
4
  图标本身本来就是 Tabler refresh,不用换。) `),e(v.IconButton,{size:`small`,tooltip:v.$t(`@CMDCON:刷新`),onClick:v.refreshCurrentBranch},{default:x(()=>[D(` refresh.svg(Tabler icons,MIT) `),e(C,{class:p({"is-loading":v.isRefreshingBranch})},{default:x(()=>[...o[10]||=[u(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[u(`path`,{d:`M20 11a8.1 8.1 0 0 0-15.5-2m-.5-4v4h4`}),u(`path`,{d:`M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4`})],-1)]]),_:1},8,[`class`])]),_:1},8,[`tooltip`])]),D(` 创建分支对话框 `),e(v.CommonDialog,{modelValue:v.createBranchDialogVisible,"onUpdate:modelValue":o[6]||=e=>v.createBranchDialogVisible=e,title:v.$t(`@F13B4:创建新分支`),size:`small`,"destroy-on-close":!0,"append-to-body":!0,"custom-class":`create-branch-dialog`},{footer:x(()=>[u(`div`,Z,[u(`div`,Q,[u(`button`,{type:`button`,class:`dialog-cancel-btn`,onClick:o[5]||=e=>v.createBranchDialogVisible=!1},m(v.$t(`@F13B4:取消`)),1),u(`button`,{type:`button`,class:`dialog-confirm-btn`,onClick:v.createNewBranch,disabled:v.gitStore.isCreatingBranch},[v.gitStore.isCreatingBranch?(E(),t(C,{key:1,class:`is-loading`},{default:x(()=>[...o[11]||=[u(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[u(`path`,{fill:`currentColor`,d:`M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32zm0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32zm448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32zm-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32z`})],-1)]]),_:1})):(E(),t(C,{key:0},{default:x(()=>[e(v.Check)]),_:1})),u(`span`,null,m(v.$t(`@F13B4:创建`)),1)],8,$)])])]),default:x(()=>[u(`div`,J,[e(j,{model:{newBranchName:v.newBranchName,selectedBaseBranch:v.selectedBaseBranch},"label-position":`top`},{default:x(()=>[e(O,null,{label:x(()=>[u(`div`,Y,[e(C,{class:`label-icon`},{default:x(()=>[e(v.Plus)]),_:1}),u(`span`,null,m(v.$t(`@F13B4:新分支名称`)),1)])]),default:x(()=>[e(w,{modelValue:v.newBranchName,"onUpdate:modelValue":o[3]||=e=>v.newBranchName=e,placeholder:v.$t(`@F13B4:请输入新分支名称`),class:`modern-input`,size:`large`,onKeyup:b(v.createNewBranch,[`enter`])},null,8,[`modelValue`,`placeholder`])]),_:1}),e(O,null,{label:x(()=>[u(`div`,X,[e(C,{class:`label-icon`},{default:x(()=>[e(v.Menu)]),_:1}),u(`span`,null,m(v.$t(`@F13B4:基于分支`)),1)])]),default:x(()=>[e(A,{modelValue:v.selectedBaseBranch,"onUpdate:modelValue":o[4]||=e=>v.selectedBaseBranch=e,placeholder:v.$t(`@F13B4:选择基础分支`),class:`modern-select`,size:`large`,style:{width:`100%`}},{default:x(()=>[(E(!0),d(_,null,h(v.gitStore.allBranches,e=>(E(),t(k,{key:e,label:e,value:e},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1})]),_:1},8,[`model`])])]),_:1},8,[`modelValue`,`title`])])):D(`v-if`,!0)}var te=A(P,[[`render`,ee],[`__scopeId`,`data-v-9548a76f`],[`__file`,`D:/workspace/github_workspace/zen-gitsync/src/ui/client/src/components/BranchSelector.vue`]]);export{te as default};
@@ -1,4 +1,4 @@
1
- import"./rolldown-runtime-C0FnF6B9.js";import{An as e,Bn as t,C as n,Cn as r,Gn as i,In as a,J as o,Mn as s,S as c,Sn as l,Tn as u,Un as d,Wr as f,Xr as p,Y as m,Yn as h,_n as g,et as ee,gr as _,i as v,ir as y,jr as b,kn as x,lr as S,qn as C,w,wn as T,xn as E}from"./element-plus-Bz6lYur-.js";import{n as D,t as O}from"./_plugin-vue_export-helper-Dz34f-q7.js";import{t as k}from"./SvgIcon-DkU8Uro2.js";import{c as A,l as j,s as te,t as ne}from"./configStore-BjNspgAX.js";import{t as re}from"./toolsStore-C5a4cV7b.js";import{E as ie,G as ae}from"./index-BybDOX1D.js";import{f as oe,h as M,m as se,n as ce,p as le}from"./agentConversations-DLAC_0wI.js";import{n as ue}from"./relativeTime-DN4_NV-7.js";a(),S();function N(e,n=680){let r=_(0),a=null;function o(){let t=e.value;return t?(r.value=t.clientWidth,typeof ResizeObserver>`u`||(a=new ResizeObserver(e=>{let t=e[0]?.contentRect?.width;typeof t==`number`&&(r.value=t)}),a.observe(t),!0)):!1}return i(()=>{o()||t(()=>o())}),d(()=>{a?.disconnect(),a=null}),{width:r,narrow:E(()=>r.value>0&&r.value<n)}}S();var P=`agent.convListCollapsed.v1`;function F(){try{return localStorage.getItem(P)===`1`}catch{return!1}}var I=_(F());function L(){function e(e){I.value=e;try{localStorage.setItem(P,e?`1`:`0`)}catch{}}return{convListCollapsed:I,setConvListCollapsed:e}}a();function R(){let e=ne(),t=re(),n=E({get:()=>e.resolvedTaskExecutor,set:t=>{A(t)&&e.setLastTaskExecutor(t)}}),r=E(()=>({claude:t.claudeAvailable,opencode:t.opencodeAvailable,codex:t.codexAvailable,codebuddy:t.codebuddyAvailable,pi:t.piAvailable})),i=E(()=>te.some(e=>r.value[e.id])),a=E(()=>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)}function s(e){return t.executorModelText(e)}function c(e){return[s(e),t.executorModelDetail(e)].filter(Boolean).join(` · `)}return{selected:n,active:a,availability:r,hasAnyExecutor:i,choose:o,executorModelText:s,executorModelTitle:c}}a(),S();var z=s({__name:`AgentEngineSelector`,props:{engine:{type:String,required:!0},locked:{type:Boolean,required:!1}},emits:[`select`],setup(e,{expose:t,emit:r}){t();let i=e,a=r,{availability:s}=R(),l=E(()=>se(i.engine)),u=E(()=>({gai:!0,...s.value})),d=_(!1),f=_(null);function p(e){if(!i.locked){if(!u.value[e]){if(!M(e))return;f.value=e,d.value=!0;return}a(`select`,e)}}let h={props:i,emit:a,executorAvailability:s,engineName:l,engineAvailability:u,installDialogVisible:d,installTool:f,onCommand:p,get $t(){return D},get ElIcon(){return o},get ElDropdown(){return c},get ElDropdownMenu(){return w},get ElDropdownItem(){return n},get ArrowDown(){return m},get Check(){return ee},get AGENT_ENGINE_OPTIONS(){return oe},get BUILTIN_ENGINE_ICON(){return le},get isExternalAgentEngine(){return M},SvgIcon:k,TaskExecutorIcon:ie,ToolInstallDialog:ae};return Object.defineProperty(h,"__isScriptSetup",{enumerable:!1,value:!0}),h}});a(),b();var B={class:`agent-engine`},V=[`disabled`,`title`,`aria-label`],H={class:`agent-engine__name`},U={class:`agent-engine__item`},de={class:`agent-engine__item-name`},fe={key:3,class:`agent-engine__item-missing`};function pe(t,n,i,a,o,s){return C(),u(g,null,[T(` 单根包一层:父级传下来的 class(Tab 行的 margin-left:auto、面板的 flex:none)
1
+ import"./rolldown-runtime-C0FnF6B9.js";import{An as e,Bn as t,C as n,Cn as r,Gn as i,In as a,J as o,Mn as s,S as c,Sn as l,Tn as u,Un as d,Wr as f,Xr as p,Y as m,Yn as h,_n as g,et as ee,gr as _,i as v,ir as y,jr as b,kn as x,lr as S,qn as C,w,wn as T,xn as E}from"./element-plus-Bz6lYur-.js";import{n as D,t as O}from"./_plugin-vue_export-helper-BhdsvhKo.js";import{t as k}from"./SvgIcon-WpEiC1rI.js";import{c as A,l as j,s as te,t as ne}from"./configStore-Drlw8KtR.js";import{t as re}from"./toolsStore-CnX34C96.js";import{E as ie,G as ae}from"./index-cDiVh_ZL.js";import{f as oe,h as M,m as se,n as ce,p as le}from"./agentConversations-DaAtF1v4.js";import{n as ue}from"./relativeTime-CoXAs57j.js";a(),S();function N(e,n=680){let r=_(0),a=null;function o(){let t=e.value;return t?(r.value=t.clientWidth,typeof ResizeObserver>`u`||(a=new ResizeObserver(e=>{let t=e[0]?.contentRect?.width;typeof t==`number`&&(r.value=t)}),a.observe(t),!0)):!1}return i(()=>{o()||t(()=>o())}),d(()=>{a?.disconnect(),a=null}),{width:r,narrow:E(()=>r.value>0&&r.value<n)}}S();var P=`agent.convListCollapsed.v1`;function F(){try{return localStorage.getItem(P)===`1`}catch{return!1}}var I=_(F());function L(){function e(e){I.value=e;try{localStorage.setItem(P,e?`1`:`0`)}catch{}}return{convListCollapsed:I,setConvListCollapsed:e}}a();function R(){let e=ne(),t=re(),n=E({get:()=>e.resolvedTaskExecutor,set:t=>{A(t)&&e.setLastTaskExecutor(t)}}),r=E(()=>({claude:t.claudeAvailable,opencode:t.opencodeAvailable,codex:t.codexAvailable,codebuddy:t.codebuddyAvailable,pi:t.piAvailable})),i=E(()=>te.some(e=>r.value[e.id])),a=E(()=>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)}function s(e){return t.executorModelText(e)}function c(e){return[s(e),t.executorModelDetail(e)].filter(Boolean).join(` · `)}return{selected:n,active:a,availability:r,hasAnyExecutor:i,choose:o,executorModelText:s,executorModelTitle:c}}a(),S();var z=s({__name:`AgentEngineSelector`,props:{engine:{type:String,required:!0},locked:{type:Boolean,required:!1}},emits:[`select`],setup(e,{expose:t,emit:r}){t();let i=e,a=r,{availability:s}=R(),l=E(()=>se(i.engine)),u=E(()=>({gai:!0,...s.value})),d=_(!1),f=_(null);function p(e){if(!i.locked){if(!u.value[e]){if(!M(e))return;f.value=e,d.value=!0;return}a(`select`,e)}}let h={props:i,emit:a,executorAvailability:s,engineName:l,engineAvailability:u,installDialogVisible:d,installTool:f,onCommand:p,get $t(){return D},get ElIcon(){return o},get ElDropdown(){return c},get ElDropdownMenu(){return w},get ElDropdownItem(){return n},get ArrowDown(){return m},get Check(){return ee},get AGENT_ENGINE_OPTIONS(){return oe},get BUILTIN_ENGINE_ICON(){return le},get isExternalAgentEngine(){return M},SvgIcon:k,TaskExecutorIcon:ie,ToolInstallDialog:ae};return Object.defineProperty(h,"__isScriptSetup",{enumerable:!1,value:!0}),h}});a(),b();var B={class:`agent-engine`},V=[`disabled`,`title`,`aria-label`],H={class:`agent-engine__name`},U={class:`agent-engine__item`},de={class:`agent-engine__item-name`},fe={key:3,class:`agent-engine__item-missing`};function pe(t,n,i,a,o,s){return C(),u(g,null,[T(` 单根包一层:父级传下来的 class(Tab 行的 margin-left:auto、面板的 flex:none)
2
2
  才能可靠落到这里 —— 多根组件会丢掉 fallthrough class。 `),l(`div`,B,[e(a.ElDropdown,{trigger:`click`,onCommand:a.onCommand},{dropdown:y(()=>[e(a.ElDropdownMenu,null,{default:y(()=>[(C(!0),u(g,null,h(a.AGENT_ENGINE_OPTIONS,t=>(C(),r(a.ElDropdownItem,{key:t.id,command:t.id},{default:y(()=>[l(`span`,U,[a.isExternalAgentEngine(t.id)?(C(),r(a.TaskExecutorIcon,{key:0,executor:t.id,class:`agent-engine__item-icon`},null,8,[`executor`])):(C(),r(a.SvgIcon,{key:1,"icon-class":a.BUILTIN_ENGINE_ICON,class:`agent-engine__item-icon`},null,8,[`icon-class`])),l(`span`,de,p(t.name),1),i.engine===t.id?(C(),r(a.ElIcon,{key:2,class:`agent-engine__item-check`},{default:y(()=>[e(a.Check)]),_:1})):a.engineAvailability[t.id]?T(`v-if`,!0):(C(),u(`span`,fe,p(a.$t(`@42BB9:未安装`)),1))])]),_:2},1032,[`command`]))),128))]),_:1})]),default:y(()=>[l(`button`,{type:`button`,class:f([`agent-engine__btn`,{"is-locked":i.locked}]),disabled:i.locked,title:i.locked?a.$t(`@AGENT:本会话的引擎已锁定;要换引擎请新建会话`):a.$t(`@AGENT:新建会话使用的引擎`),"aria-label":a.$t(`@AGENT:智能体引擎`)},[a.isExternalAgentEngine(i.engine)?(C(),r(a.TaskExecutorIcon,{key:0,executor:i.engine,class:`agent-engine__icon`},null,8,[`executor`])):(C(),r(a.SvgIcon,{key:1,"icon-class":a.BUILTIN_ENGINE_ICON,class:`agent-engine__icon`},null,8,[`icon-class`])),l(`span`,H,p(a.engineName),1),e(a.ElIcon,{class:`agent-engine__caret`},{default:y(()=>[e(a.ArrowDown)]),_:1})],10,V)]),_:1}),e(a.ToolInstallDialog,{modelValue:a.installDialogVisible,"onUpdate:modelValue":n[0]||=e=>a.installDialogVisible=e,tool:a.installTool},null,8,[`modelValue`,`tool`])])],2112)}var me=O(z,[[`render`,pe],[`__scopeId`,`data-v-c67a4d14`],[`__file`,`D:/workspace/github_workspace/zen-gitsync/src/ui/client/src/components/AgentEngineSelector.vue`]]),he=8192;function ge(e,t){return e.length>t?`…(前文已截断)\n${e.slice(-t)}`:e}function _e(e,t){let n=e||`done`;return n!==`pending`&&n!==`running`||t===`running`||t===`pending`?n:t===`cancelled`||t===`error`?`error`:`done`}function W(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=_e(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?ge(o,he):``,status:a,error:typeof i.error==`string`&&i.error?i.error:void 0})}return r}var ve=`
3
3
 
4
4
  ---
@@ -1,4 +1,4 @@
1
- import"./rolldown-runtime-C0FnF6B9.js";import{An as e,Bn as t,C as n,Cn as r,Dt as i,F as a,Gn as o,I as s,In as c,J as l,Kr as u,Mn as d,S as f,Sn as p,Tn as m,U as h,V as g,W as _,Wr as v,Xr as y,Y as b,Yn as x,_n as S,ar as C,gn as w,gr as T,i as E,in as D,ir as O,jr as k,lr as A,mn as j,mr as M,mt as N,nr as P,on as F,q as I,qn as L,w as ee,wn as R,xn as z,yn as B,z as V}from"./element-plus-Bz6lYur-.js";import{n as H,t as U}from"./_plugin-vue_export-helper-Dz34f-q7.js";import{t as te}from"./SvgIcon-DkU8Uro2.js";import{o as ne,t as W}from"./configStore-BjNspgAX.js";import{c as re,d as ie,dt as ae,l as oe,lt as G,q as se,s as ce,u as K,ut as q}from"./index-BybDOX1D.js";c();var le=d({__name:`GlobalLoading`,props:{visible:{type:Boolean,required:!1,default:!1},text:{type:String,required:!1,default:H(`@2AEBA:加载中...`)},showProgress:{type:Boolean,required:!1,default:!1},progress:{type:Number,required:!1,default:0},mock:{type:Boolean,required:!1,default:!1}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});c(),k(),F();var ue={class:`loading-container`},J={class:`loading-text`},Y={key:0,class:`loading-progress`};function de(t,n,i,a,o,s){return L(),r(B,{to:`body`},[e(D,{name:`loading-fade`},{default:O(()=>[i.visible||i.mock?(L(),m(`div`,{key:0,class:`global-loading-overlay`,onClick:n[0]||=w(()=>{},[`stop`])},[p(`div`,ue,[R(` 主加载器 `),n[1]||=p(`div`,{class:`loading-spinner`},[p(`div`,{class:`spinner-ring`}),p(`div`,{class:`spinner-ring`}),p(`div`,{class:`spinner-ring`})],-1),R(` 加载文字 `),p(`div`,J,y(i.text),1),R(` 进度条(可选/Mock) `),i.showProgress||i.mock?(L(),m(`div`,Y,[p(`div`,{class:v([`progress-bar`,{"is-mock":i.mock&&!i.showProgress}]),style:u(i.showProgress?{width:i.progress+`%`}:void 0)},null,6)])):R(`v-if`,!0)])])):R(`v-if`,!0)]),_:1})])}var fe=U(le,[[`render`,de],[`__scopeId`,`data-v-77e24a5f`],[`__file`,`D:/workspace/github_workspace/zen-gitsync/src/ui/client/src/components/GlobalLoading.vue`]]);c();var pe=d({__name:`SuccessModal`,props:{visible:{type:Boolean,required:!1,default:!1},text:{type:String,required:!1,default:H(`@71545:操作成功!`)},description:{type:String,required:!1,default:``}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});c(),k(),F();var X={class:`success-container`},me={class:`success-text`},he={key:0,class:`success-description`};function ge(t,n,i,a,o,s){return L(),r(B,{to:`body`},[e(D,{name:`success-fade`},{default:O(()=>[i.visible?(L(),m(`div`,{key:0,class:`success-overlay`,onClick:n[0]||=w(()=>{},[`stop`])},[p(`div`,X,[R(` 成功图标 `),n[1]||=p(`div`,{class:`success-icon`},[p(`svg`,{viewBox:`0 0 52 52`,class:`success-svg`},[p(`circle`,{class:`success-circle`,cx:`26`,cy:`26`,r:`25`,fill:`none`}),p(`path`,{class:`success-check`,fill:`none`,d:`m14.1 27.2l7.1 7.2 16.7-16.8`})])],-1),R(` 成功文字 `),p(`div`,me,y(i.text),1),R(` 描述文字 `),i.description?(L(),m(`div`,he,y(i.description),1)):R(`v-if`,!0)])])):R(`v-if`,!0)]),_:1})])}var _e=U(pe,[[`render`,ge],[`__scopeId`,`data-v-30ab4535`],[`__file`,`D:/workspace/github_workspace/zen-gitsync/src/ui/client/src/components/SuccessModal.vue`]]);A();var Z=M({visible:!1,text:H(`@F2A3A:加载中...`),showProgress:!1,progress:0});function ve(){return{loadingState:Z,show:e=>{Z.visible=!0,Z.text=e?.text||H(`@F2A3A:加载中...`),Z.showProgress=e?.showProgress||!1,Z.progress=e?.progress||0},hide:()=>{Z.visible=!1},updateProgress:e=>{Z.progress=Math.max(0,Math.min(100,e))},updateText:e=>{Z.text=e},setText:e=>{Z.visible&&(Z.text=e)}}}A();var Q=M({visible:!1,text:H(`@B8591:操作成功!`),description:``});function ye(){let e=e=>{Q.visible=!0,Q.text=e?.text||H(`@B8591:操作成功!`),Q.description=e?.description||``;let n=e?.duration||2e3;setTimeout(()=>{t()},n)},t=()=>{Q.visible=!1};return{successState:Q,show:e,hide:t}}c();var be=d({__name:`QuickCommitButton`,props:{from:{type:String,required:!1,default:`form`},hasUserCommitMessage:{type:Boolean,required:!1,default:!1},finalCommitMessage:{type:String,required:!1,default:``},skipHooks:{type:Boolean,required:!1,default:!1}},emits:[`beforeCommit`,`afterCommit`,`clearFields`],setup(e,{expose:t,emit:n}){let r=q(),i=W(),a=e,o=n,s=z(()=>r.fileList.some(e=>!G(e.path,i.lockedFiles))),c=z(()=>r.isSelectionMode&&r.selectedFiles.size>0&&r.selectedUnstagedPaths.length>0),l=z(()=>r.hasConflictedFiles?!0:r.isSelectionMode?!c.value||!a.hasUserCommitMessage:!s.value||!a.hasUserCommitMessage),u=z(()=>r.isAddingFiles||r.isCommiting),d=z(()=>r.hasConflictedFiles?H(`@2E184:存在冲突文件,请先解决冲突`):r.isSelectionMode?r.selectedFiles.size===0?H(`@2E184:请先勾选要提交的文件`):r.selectedUnstagedPaths.length===0?H(`@2E184:所选文件无需暂存或被锁定`):a.hasUserCommitMessage?H(`@2E184:一键完成:仅暂存所选文件 → 提交`):H(`@2E184:请输入提交信息`):s.value?a.hasUserCommitMessage?H(`@2E184:一键完成:暂存所有更改 → 提交`):H(`@2E184:请输入提交信息`):H(`@2E184:没有需要提交的更改`)),f=z(()=>r.isSelectionMode&&c.value?H(`@2E184:一键提交所选`):H(`@2E184:一键提交`)),p=z(()=>a.from===`form`?r.isSelectionMode&&c.value?H(`@2E184:暂存所选 + 提交`):H(`@2E184:暂存 + 提交`):``);async function m(){o(`beforeCommit`);try{let e=await r.stageSelectedAndCommit(a.finalCommitMessage,a.skipHooks);e&&o(`clearFields`),o(`afterCommit`,e)}catch(e){console.error(`一键提交失败:`,e),o(`afterCommit`,!1)}}t({triggerQuickCommit:m,isDisabled:l,isLoading:u,buttonTitle:f,buttonDesc:p,tooltipText:d});let h={gitStore:r,configStore:i,props:a,emit:o,hasAnyChanges:s,hasSelectedToStage:c,isDisabled:l,isLoading:u,tooltipText:d,buttonTitle:f,buttonDesc:p,handleQuickCommit:m,get ElTooltip(){return _},get Edit(){return N}};return Object.defineProperty(h,"__isScriptSetup",{enumerable:!1,value:!0}),h}});c(),k();var xe={class:`one-commit-content`},Se={class:`one-commit-text`},Ce={class:`one-commit-title`},we={key:0,class:`one-commit-desc`};function $(t,n,r,i,a,o){let s=l,c=V;return L(),m(`div`,null,[e(i.ElTooltip,{content:i.tooltipText,placement:`top`,"show-after":200},{default:O(()=>[e(c,{type:`primary`,onClick:i.handleQuickCommit,loading:i.isLoading,disabled:i.isDisabled,class:v([r.from,`one-commit-button`])},{default:O(()=>[p(`div`,xe,[e(s,{class:`one-commit-icon`},{default:O(()=>[e(i.Edit)]),_:1}),p(`div`,Se,[p(`span`,Ce,y(i.buttonTitle),1),r.from===`form`?(L(),m(`span`,we,y(i.buttonDesc),1)):R(`v-if`,!0)])])]),_:1},8,[`loading`,`disabled`,`class`])]),_:1},8,[`content`])])}var Te=U(be,[[`render`,$],[`__scopeId`,`data-v-0c962829`],[`__file`,`D:/workspace/github_workspace/zen-gitsync/src/ui/client/src/components/buttons/QuickCommitButton.vue`]]);c(),A();var Ee=d({__name:`QuickActionsDropdown`,props:{hasUserCommitMessage:{type:Boolean,required:!1,default:!1},finalCommitMessage:{type:String,required:!1,default:``},skipHooks:{type:Boolean,required:!1,default:!1},from:{type:String,required:!1,default:`form`}},emits:[`afterCommit`,`afterPush`,`beforePush`,`pushStart`,`clearFields`],setup(e,{expose:t,emit:n}){let r=e,a=n,o=T(null),s=T(null),c=z(()=>o.value?.isDisabled??!0),l=z(()=>o.value?.isLoading??!1),u=z(()=>o.value?.buttonTitle??H(`@2E184:一键提交`)),d=z(()=>c.value?o.value?.tooltipText??``:o.value?.buttonDesc??``),f=z(()=>o.value?.tooltipText??``),p=z(()=>s.value?.isDisabled??!0),m=z(()=>s.value?.isLoading??!1),h=z(()=>s.value?.buttonTitle??H(`@2E184:一键推送所有`)),g=z(()=>p.value?s.value?.tooltipText??``:s.value?.buttonDesc??``),_=z(()=>s.value?.tooltipText??``),v=z(()=>l.value||m.value),y=z(()=>c.value&&p.value),b=z(()=>s.value?.buttonDesc||H(`@2E184:暂存 + 提交 + 推送`));function x(e){e===`commit`?o.value?.triggerQuickCommit():e===`push`&&s.value?.triggerQuickPush()}t({triggerQuickPush:()=>s.value?.triggerQuickPush()});let S={props:r,emit:a,quickCommitRef:o,quickPushRef:s,commitDisabled:c,commitLoading:l,commitTitle:u,commitDesc:d,commitTooltip:f,pushDisabled:p,pushLoading:m,pushTitle:h,pushDesc:g,pushTooltip:_,busy:v,allDisabled:y,triggerDesc:b,handleCommand:x,get Loading(){return i},get $t(){return H},QuickCommitButton:Te,QuickPushButton:re};return Object.defineProperty(S,"__isScriptSetup",{enumerable:!1,value:!0}),S}});k(),c();var De={class:`qa-wrap`},Oe=[`aria-label`,`title`],ke={class:`qa-trigger__text`},Ae={class:`qa-trigger__title`},je={class:`qa-trigger__desc`},Me={class:`qa-item`},Ne={class:`qa-item__text`},Pe={class:`qa-item__title`},Fe={class:`qa-item__desc`},Ie={class:`qa-item`},Le={class:`qa-item__text`},Re={class:`qa-item__title`},ze={class:`qa-item__desc`},Be={class:`qa-engines`,"aria-hidden":`true`};function Ve(t,i,a,o,s,c){let u=l,d=n,h=ee,g=f;return L(),m(`div`,De,[e(g,{trigger:`click`,placement:`bottom-start`,"popper-class":`qa-dropdown-popper`,onCommand:o.handleCommand},{dropdown:O(()=>[e(h,null,{default:O(()=>[e(d,{disabled:o.commitDisabled,command:`commit`},{default:O(()=>[p(`div`,Me,[R(` git-commit(Tabler icons,MIT) `),i[7]||=p(`svg`,{class:`qa-item__icon`,viewBox:`0 0 24 24`,width:`18`,height:`18`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},[p(`path`,{d:`M9 12a3 3 0 1 0 6 0a3 3 0 1 0 -6 0`}),p(`path`,{d:`M12 3l0 6`}),p(`path`,{d:`M12 15l0 6`})],-1),p(`div`,Ne,[p(`span`,Pe,y(o.commitTitle),1),p(`span`,Fe,y(o.commitDesc||o.commitTooltip),1)])])]),_:1},8,[`disabled`]),e(d,{disabled:o.pushDisabled,command:`push`},{default:O(()=>[p(`div`,Ie,[R(` cloud-upload(Tabler icons,MIT) `),i[8]||=p(`svg`,{class:`qa-item__icon`,viewBox:`0 0 24 24`,width:`18`,height:`18`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},[p(`path`,{d:`M7 18a4.6 4.4 0 0 1 0 -9a5 4.5 0 0 1 11 2h1a3.5 3.5 0 0 1 0 7h-1`}),p(`path`,{d:`M9 15l3 -3l3 3`}),p(`path`,{d:`M12 12l0 9`})],-1),p(`div`,Le,[p(`span`,Re,y(o.pushTitle),1),p(`span`,ze,y(o.pushDesc||o.pushTooltip),1)])])]),_:1},8,[`disabled`])]),_:1})]),default:O(()=>[p(`div`,{class:v([`qa-trigger`,{"is-quiet":o.allDisabled,"is-busy":o.busy}]),role:`button`,tabindex:`0`,"aria-label":o.$t(`@2E184:提交并推送`),title:o.pushTooltip},[p(`div`,ke,[p(`span`,Ae,y(o.$t(`@2E184:提交并推送`)),1),p(`span`,je,y(o.triggerDesc),1)]),o.busy?(L(),r(u,{key:0,class:`is-loading qa-trigger__caret`},{default:O(()=>[e(o.Loading)]),_:1})):(L(),m(S,{key:1},[R(` chevron-down(Tabler icons,MIT) `),i[6]||=p(`svg`,{class:`qa-trigger__caret`,viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},[p(`path`,{d:`M6 9l6 6l6 -6`})],-1)],2112))],10,Oe)]),_:1}),R(` 引擎:口径的唯一出处,只挂载不显示(见文件头注释) `),p(`div`,Be,[e(o.QuickCommitButton,{ref:`quickCommitRef`,from:o.props.from,"has-user-commit-message":o.props.hasUserCommitMessage,"final-commit-message":o.props.finalCommitMessage,"skip-hooks":o.props.skipHooks,onAfterCommit:i[0]||=e=>o.emit(`afterCommit`,e),onClearFields:i[1]||=()=>o.emit(`clearFields`)},null,8,[`from`,`has-user-commit-message`,`final-commit-message`,`skip-hooks`]),e(o.QuickPushButton,{ref:`quickPushRef`,from:o.props.from,"has-user-commit-message":o.props.hasUserCommitMessage,"final-commit-message":o.props.finalCommitMessage,"skip-hooks":o.props.skipHooks,onBeforePush:i[2]||=()=>o.emit(`beforePush`),onPushStart:i[3]||=()=>o.emit(`pushStart`),onAfterPush:i[4]||=e=>o.emit(`afterPush`,e),onClearFields:i[5]||=()=>o.emit(`clearFields`)},null,8,[`from`,`has-user-commit-message`,`final-commit-message`,`skip-hooks`])])])}var He=U(Ee,[[`render`,Ve],[`__scopeId`,`data-v-cf0b4514`],[`__file`,`D:/workspace/github_workspace/zen-gitsync/src/ui/client/src/components/buttons/QuickActionsDropdown.vue`]]);c();var Ue=d({__name:`AiQuickPushButton`,props:{from:{type:String,required:!1,default:`form`},generating:{type:Boolean,required:!1,default:!1}},emits:[`trigger`],setup(e,{expose:t,emit:n}){t();let r=q(),i=W(),a=e,o=n,s=z(()=>r.fileList.some(e=>!G(e.path,i.lockedFiles))),c=z(()=>r.isSelectionMode&&r.selectedFiles.size>0&&r.selectedUnstagedPaths.length>0),l=z(()=>!r.isSelectionMode&&!s.value&&r.branchAhead>0),u=z(()=>r.hasConflictedFiles||!r.hasUpstream?!0:r.isSelectionMode?!c.value:!s.value&&r.branchAhead===0),d=z(()=>a.generating||r.isAddingFiles||r.isCommiting||r.isPushing),f=z(()=>r.hasConflictedFiles?H(`@2E184:存在冲突文件,请先解决冲突`):r.hasUpstream?a.generating?H(`@2E184:AI 正在生成提交信息…`):r.isSelectionMode?c.value?H(`@2E184:一键完成:AI 生成提交信息 → 仅暂存所选文件 → 提交 → 推送`):H(`@2E184:请先勾选要推送的文件`):!s.value&&r.branchAhead===0?H(`@2E184:没有需要提交或推送的更改`):s.value?H(`@2E184:一键完成:AI 生成提交信息 → 暂存所有更改 → 提交 → 推送`):H(`@2E184:本地已提交,AI 将直接推送到远程仓库`):H(`@2E184:当前分支没有上游分支`)),p=z(()=>a.generating?H(`@2E184:AI 正在生成提交信息…`):r.isSelectionMode&&c.value?H(`@2E184:AI 提交并推送所选`):H(`@2E184:AI 提交并推送`)),m=z(()=>a.from!==`form`||a.generating?``:l.value?H(`@2E184:本地已提交,直接推送`):H(`@2E184:AI 生成信息 + 推送`));function h(){u.value||d.value||o(`trigger`)}let g={gitStore:r,configStore:i,props:a,emit:o,hasAnyChanges:s,hasSelectedToStage:c,isPushOnly:l,isDisabled:u,isLoading:d,tooltipText:f,buttonTitle:p,buttonDesc:m,handleClick:h,get ElTooltip(){return _},SvgIcon:te};return Object.defineProperty(g,"__isScriptSetup",{enumerable:!1,value:!0}),g}});c(),k();var We={class:`one-ai-push`},Ge={class:`one-ai-push-content`},Ke={class:`one-ai-push-text`},qe={class:`one-ai-push-title`},Je={key:0,class:`one-ai-push-desc`};function Ye(t,n,r,i,a,o){let s=V;return L(),m(`div`,We,[e(i.ElTooltip,{content:i.tooltipText,placement:`top`,"show-after":200},{default:O(()=>[e(s,{type:`primary`,onClick:i.handleClick,loading:i.isLoading,disabled:i.isDisabled,class:v([r.from,`one-ai-push-button`])},{default:O(()=>[p(`div`,Ge,[R(` message-chatbot(Tabler icons,MIT):2026-10-16 由它替换三连闪光
1
+ import"./rolldown-runtime-C0FnF6B9.js";import{An as e,Bn as t,C as n,Cn as r,Dt as i,F as a,Gn as o,I as s,In as c,J as l,Kr as u,Mn as d,S as f,Sn as p,Tn as m,U as h,V as g,W as _,Wr as v,Xr as y,Y as b,Yn as x,_n as S,ar as C,gn as w,gr as T,i as E,in as D,ir as O,jr as k,lr as A,mn as j,mr as M,mt as N,nr as P,on as F,q as I,qn as L,w as ee,wn as R,xn as z,yn as B,z as V}from"./element-plus-Bz6lYur-.js";import{n as H,t as U}from"./_plugin-vue_export-helper-BhdsvhKo.js";import{t as te}from"./SvgIcon-WpEiC1rI.js";import{o as ne,t as W}from"./configStore-Drlw8KtR.js";import{c as re,d as ie,dt as ae,l as oe,lt as G,q as se,s as ce,u as K,ut as q}from"./index-cDiVh_ZL.js";c();var le=d({__name:`GlobalLoading`,props:{visible:{type:Boolean,required:!1,default:!1},text:{type:String,required:!1,default:H(`@2AEBA:加载中...`)},showProgress:{type:Boolean,required:!1,default:!1},progress:{type:Number,required:!1,default:0},mock:{type:Boolean,required:!1,default:!1}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});c(),k(),F();var ue={class:`loading-container`},J={class:`loading-text`},Y={key:0,class:`loading-progress`};function de(t,n,i,a,o,s){return L(),r(B,{to:`body`},[e(D,{name:`loading-fade`},{default:O(()=>[i.visible||i.mock?(L(),m(`div`,{key:0,class:`global-loading-overlay`,onClick:n[0]||=w(()=>{},[`stop`])},[p(`div`,ue,[R(` 主加载器 `),n[1]||=p(`div`,{class:`loading-spinner`},[p(`div`,{class:`spinner-ring`}),p(`div`,{class:`spinner-ring`}),p(`div`,{class:`spinner-ring`})],-1),R(` 加载文字 `),p(`div`,J,y(i.text),1),R(` 进度条(可选/Mock) `),i.showProgress||i.mock?(L(),m(`div`,Y,[p(`div`,{class:v([`progress-bar`,{"is-mock":i.mock&&!i.showProgress}]),style:u(i.showProgress?{width:i.progress+`%`}:void 0)},null,6)])):R(`v-if`,!0)])])):R(`v-if`,!0)]),_:1})])}var fe=U(le,[[`render`,de],[`__scopeId`,`data-v-77e24a5f`],[`__file`,`D:/workspace/github_workspace/zen-gitsync/src/ui/client/src/components/GlobalLoading.vue`]]);c();var pe=d({__name:`SuccessModal`,props:{visible:{type:Boolean,required:!1,default:!1},text:{type:String,required:!1,default:H(`@71545:操作成功!`)},description:{type:String,required:!1,default:``}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});c(),k(),F();var X={class:`success-container`},me={class:`success-text`},he={key:0,class:`success-description`};function ge(t,n,i,a,o,s){return L(),r(B,{to:`body`},[e(D,{name:`success-fade`},{default:O(()=>[i.visible?(L(),m(`div`,{key:0,class:`success-overlay`,onClick:n[0]||=w(()=>{},[`stop`])},[p(`div`,X,[R(` 成功图标 `),n[1]||=p(`div`,{class:`success-icon`},[p(`svg`,{viewBox:`0 0 52 52`,class:`success-svg`},[p(`circle`,{class:`success-circle`,cx:`26`,cy:`26`,r:`25`,fill:`none`}),p(`path`,{class:`success-check`,fill:`none`,d:`m14.1 27.2l7.1 7.2 16.7-16.8`})])],-1),R(` 成功文字 `),p(`div`,me,y(i.text),1),R(` 描述文字 `),i.description?(L(),m(`div`,he,y(i.description),1)):R(`v-if`,!0)])])):R(`v-if`,!0)]),_:1})])}var _e=U(pe,[[`render`,ge],[`__scopeId`,`data-v-30ab4535`],[`__file`,`D:/workspace/github_workspace/zen-gitsync/src/ui/client/src/components/SuccessModal.vue`]]);A();var Z=M({visible:!1,text:H(`@F2A3A:加载中...`),showProgress:!1,progress:0});function ve(){return{loadingState:Z,show:e=>{Z.visible=!0,Z.text=e?.text||H(`@F2A3A:加载中...`),Z.showProgress=e?.showProgress||!1,Z.progress=e?.progress||0},hide:()=>{Z.visible=!1},updateProgress:e=>{Z.progress=Math.max(0,Math.min(100,e))},updateText:e=>{Z.text=e},setText:e=>{Z.visible&&(Z.text=e)}}}A();var Q=M({visible:!1,text:H(`@B8591:操作成功!`),description:``});function ye(){let e=e=>{Q.visible=!0,Q.text=e?.text||H(`@B8591:操作成功!`),Q.description=e?.description||``;let n=e?.duration||2e3;setTimeout(()=>{t()},n)},t=()=>{Q.visible=!1};return{successState:Q,show:e,hide:t}}c();var be=d({__name:`QuickCommitButton`,props:{from:{type:String,required:!1,default:`form`},hasUserCommitMessage:{type:Boolean,required:!1,default:!1},finalCommitMessage:{type:String,required:!1,default:``},skipHooks:{type:Boolean,required:!1,default:!1}},emits:[`beforeCommit`,`afterCommit`,`clearFields`],setup(e,{expose:t,emit:n}){let r=q(),i=W(),a=e,o=n,s=z(()=>r.fileList.some(e=>!G(e.path,i.lockedFiles))),c=z(()=>r.isSelectionMode&&r.selectedFiles.size>0&&r.selectedUnstagedPaths.length>0),l=z(()=>r.hasConflictedFiles?!0:r.isSelectionMode?!c.value||!a.hasUserCommitMessage:!s.value||!a.hasUserCommitMessage),u=z(()=>r.isAddingFiles||r.isCommiting),d=z(()=>r.hasConflictedFiles?H(`@2E184:存在冲突文件,请先解决冲突`):r.isSelectionMode?r.selectedFiles.size===0?H(`@2E184:请先勾选要提交的文件`):r.selectedUnstagedPaths.length===0?H(`@2E184:所选文件无需暂存或被锁定`):a.hasUserCommitMessage?H(`@2E184:一键完成:仅暂存所选文件 → 提交`):H(`@2E184:请输入提交信息`):s.value?a.hasUserCommitMessage?H(`@2E184:一键完成:暂存所有更改 → 提交`):H(`@2E184:请输入提交信息`):H(`@2E184:没有需要提交的更改`)),f=z(()=>r.isSelectionMode&&c.value?H(`@2E184:一键提交所选`):H(`@2E184:一键提交`)),p=z(()=>a.from===`form`?r.isSelectionMode&&c.value?H(`@2E184:暂存所选 + 提交`):H(`@2E184:暂存 + 提交`):``);async function m(){o(`beforeCommit`);try{let e=await r.stageSelectedAndCommit(a.finalCommitMessage,a.skipHooks);e&&o(`clearFields`),o(`afterCommit`,e)}catch(e){console.error(`一键提交失败:`,e),o(`afterCommit`,!1)}}t({triggerQuickCommit:m,isDisabled:l,isLoading:u,buttonTitle:f,buttonDesc:p,tooltipText:d});let h={gitStore:r,configStore:i,props:a,emit:o,hasAnyChanges:s,hasSelectedToStage:c,isDisabled:l,isLoading:u,tooltipText:d,buttonTitle:f,buttonDesc:p,handleQuickCommit:m,get ElTooltip(){return _},get Edit(){return N}};return Object.defineProperty(h,"__isScriptSetup",{enumerable:!1,value:!0}),h}});c(),k();var xe={class:`one-commit-content`},Se={class:`one-commit-text`},Ce={class:`one-commit-title`},we={key:0,class:`one-commit-desc`};function $(t,n,r,i,a,o){let s=l,c=V;return L(),m(`div`,null,[e(i.ElTooltip,{content:i.tooltipText,placement:`top`,"show-after":200},{default:O(()=>[e(c,{type:`primary`,onClick:i.handleQuickCommit,loading:i.isLoading,disabled:i.isDisabled,class:v([r.from,`one-commit-button`])},{default:O(()=>[p(`div`,xe,[e(s,{class:`one-commit-icon`},{default:O(()=>[e(i.Edit)]),_:1}),p(`div`,Se,[p(`span`,Ce,y(i.buttonTitle),1),r.from===`form`?(L(),m(`span`,we,y(i.buttonDesc),1)):R(`v-if`,!0)])])]),_:1},8,[`loading`,`disabled`,`class`])]),_:1},8,[`content`])])}var Te=U(be,[[`render`,$],[`__scopeId`,`data-v-0c962829`],[`__file`,`D:/workspace/github_workspace/zen-gitsync/src/ui/client/src/components/buttons/QuickCommitButton.vue`]]);c(),A();var Ee=d({__name:`QuickActionsDropdown`,props:{hasUserCommitMessage:{type:Boolean,required:!1,default:!1},finalCommitMessage:{type:String,required:!1,default:``},skipHooks:{type:Boolean,required:!1,default:!1},from:{type:String,required:!1,default:`form`}},emits:[`afterCommit`,`afterPush`,`beforePush`,`pushStart`,`clearFields`],setup(e,{expose:t,emit:n}){let r=e,a=n,o=T(null),s=T(null),c=z(()=>o.value?.isDisabled??!0),l=z(()=>o.value?.isLoading??!1),u=z(()=>o.value?.buttonTitle??H(`@2E184:一键提交`)),d=z(()=>c.value?o.value?.tooltipText??``:o.value?.buttonDesc??``),f=z(()=>o.value?.tooltipText??``),p=z(()=>s.value?.isDisabled??!0),m=z(()=>s.value?.isLoading??!1),h=z(()=>s.value?.buttonTitle??H(`@2E184:一键推送所有`)),g=z(()=>p.value?s.value?.tooltipText??``:s.value?.buttonDesc??``),_=z(()=>s.value?.tooltipText??``),v=z(()=>l.value||m.value),y=z(()=>c.value&&p.value),b=z(()=>s.value?.buttonDesc||H(`@2E184:暂存 + 提交 + 推送`));function x(e){e===`commit`?o.value?.triggerQuickCommit():e===`push`&&s.value?.triggerQuickPush()}t({triggerQuickPush:()=>s.value?.triggerQuickPush()});let S={props:r,emit:a,quickCommitRef:o,quickPushRef:s,commitDisabled:c,commitLoading:l,commitTitle:u,commitDesc:d,commitTooltip:f,pushDisabled:p,pushLoading:m,pushTitle:h,pushDesc:g,pushTooltip:_,busy:v,allDisabled:y,triggerDesc:b,handleCommand:x,get Loading(){return i},get $t(){return H},QuickCommitButton:Te,QuickPushButton:re};return Object.defineProperty(S,"__isScriptSetup",{enumerable:!1,value:!0}),S}});k(),c();var De={class:`qa-wrap`},Oe=[`aria-label`,`title`],ke={class:`qa-trigger__text`},Ae={class:`qa-trigger__title`},je={class:`qa-trigger__desc`},Me={class:`qa-item`},Ne={class:`qa-item__text`},Pe={class:`qa-item__title`},Fe={class:`qa-item__desc`},Ie={class:`qa-item`},Le={class:`qa-item__text`},Re={class:`qa-item__title`},ze={class:`qa-item__desc`},Be={class:`qa-engines`,"aria-hidden":`true`};function Ve(t,i,a,o,s,c){let u=l,d=n,h=ee,g=f;return L(),m(`div`,De,[e(g,{trigger:`click`,placement:`bottom-start`,"popper-class":`qa-dropdown-popper`,onCommand:o.handleCommand},{dropdown:O(()=>[e(h,null,{default:O(()=>[e(d,{disabled:o.commitDisabled,command:`commit`},{default:O(()=>[p(`div`,Me,[R(` git-commit(Tabler icons,MIT) `),i[7]||=p(`svg`,{class:`qa-item__icon`,viewBox:`0 0 24 24`,width:`18`,height:`18`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},[p(`path`,{d:`M9 12a3 3 0 1 0 6 0a3 3 0 1 0 -6 0`}),p(`path`,{d:`M12 3l0 6`}),p(`path`,{d:`M12 15l0 6`})],-1),p(`div`,Ne,[p(`span`,Pe,y(o.commitTitle),1),p(`span`,Fe,y(o.commitDesc||o.commitTooltip),1)])])]),_:1},8,[`disabled`]),e(d,{disabled:o.pushDisabled,command:`push`},{default:O(()=>[p(`div`,Ie,[R(` cloud-upload(Tabler icons,MIT) `),i[8]||=p(`svg`,{class:`qa-item__icon`,viewBox:`0 0 24 24`,width:`18`,height:`18`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},[p(`path`,{d:`M7 18a4.6 4.4 0 0 1 0 -9a5 4.5 0 0 1 11 2h1a3.5 3.5 0 0 1 0 7h-1`}),p(`path`,{d:`M9 15l3 -3l3 3`}),p(`path`,{d:`M12 12l0 9`})],-1),p(`div`,Le,[p(`span`,Re,y(o.pushTitle),1),p(`span`,ze,y(o.pushDesc||o.pushTooltip),1)])])]),_:1},8,[`disabled`])]),_:1})]),default:O(()=>[p(`div`,{class:v([`qa-trigger`,{"is-quiet":o.allDisabled,"is-busy":o.busy}]),role:`button`,tabindex:`0`,"aria-label":o.$t(`@2E184:提交并推送`),title:o.pushTooltip},[p(`div`,ke,[p(`span`,Ae,y(o.$t(`@2E184:提交并推送`)),1),p(`span`,je,y(o.triggerDesc),1)]),o.busy?(L(),r(u,{key:0,class:`is-loading qa-trigger__caret`},{default:O(()=>[e(o.Loading)]),_:1})):(L(),m(S,{key:1},[R(` chevron-down(Tabler icons,MIT) `),i[6]||=p(`svg`,{class:`qa-trigger__caret`,viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},[p(`path`,{d:`M6 9l6 6l6 -6`})],-1)],2112))],10,Oe)]),_:1}),R(` 引擎:口径的唯一出处,只挂载不显示(见文件头注释) `),p(`div`,Be,[e(o.QuickCommitButton,{ref:`quickCommitRef`,from:o.props.from,"has-user-commit-message":o.props.hasUserCommitMessage,"final-commit-message":o.props.finalCommitMessage,"skip-hooks":o.props.skipHooks,onAfterCommit:i[0]||=e=>o.emit(`afterCommit`,e),onClearFields:i[1]||=()=>o.emit(`clearFields`)},null,8,[`from`,`has-user-commit-message`,`final-commit-message`,`skip-hooks`]),e(o.QuickPushButton,{ref:`quickPushRef`,from:o.props.from,"has-user-commit-message":o.props.hasUserCommitMessage,"final-commit-message":o.props.finalCommitMessage,"skip-hooks":o.props.skipHooks,onBeforePush:i[2]||=()=>o.emit(`beforePush`),onPushStart:i[3]||=()=>o.emit(`pushStart`),onAfterPush:i[4]||=e=>o.emit(`afterPush`,e),onClearFields:i[5]||=()=>o.emit(`clearFields`)},null,8,[`from`,`has-user-commit-message`,`final-commit-message`,`skip-hooks`])])])}var He=U(Ee,[[`render`,Ve],[`__scopeId`,`data-v-cf0b4514`],[`__file`,`D:/workspace/github_workspace/zen-gitsync/src/ui/client/src/components/buttons/QuickActionsDropdown.vue`]]);c();var Ue=d({__name:`AiQuickPushButton`,props:{from:{type:String,required:!1,default:`form`},generating:{type:Boolean,required:!1,default:!1}},emits:[`trigger`],setup(e,{expose:t,emit:n}){t();let r=q(),i=W(),a=e,o=n,s=z(()=>r.fileList.some(e=>!G(e.path,i.lockedFiles))),c=z(()=>r.isSelectionMode&&r.selectedFiles.size>0&&r.selectedUnstagedPaths.length>0),l=z(()=>!r.isSelectionMode&&!s.value&&r.branchAhead>0),u=z(()=>r.hasConflictedFiles||!r.hasUpstream?!0:r.isSelectionMode?!c.value:!s.value&&r.branchAhead===0),d=z(()=>a.generating||r.isAddingFiles||r.isCommiting||r.isPushing),f=z(()=>r.hasConflictedFiles?H(`@2E184:存在冲突文件,请先解决冲突`):r.hasUpstream?a.generating?H(`@2E184:AI 正在生成提交信息…`):r.isSelectionMode?c.value?H(`@2E184:一键完成:AI 生成提交信息 → 仅暂存所选文件 → 提交 → 推送`):H(`@2E184:请先勾选要推送的文件`):!s.value&&r.branchAhead===0?H(`@2E184:没有需要提交或推送的更改`):s.value?H(`@2E184:一键完成:AI 生成提交信息 → 暂存所有更改 → 提交 → 推送`):H(`@2E184:本地已提交,AI 将直接推送到远程仓库`):H(`@2E184:当前分支没有上游分支`)),p=z(()=>a.generating?H(`@2E184:AI 正在生成提交信息…`):r.isSelectionMode&&c.value?H(`@2E184:AI 提交并推送所选`):H(`@2E184:AI 提交并推送`)),m=z(()=>a.from!==`form`||a.generating?``:l.value?H(`@2E184:本地已提交,直接推送`):H(`@2E184:AI 生成信息 + 推送`));function h(){u.value||d.value||o(`trigger`)}let g={gitStore:r,configStore:i,props:a,emit:o,hasAnyChanges:s,hasSelectedToStage:c,isPushOnly:l,isDisabled:u,isLoading:d,tooltipText:f,buttonTitle:p,buttonDesc:m,handleClick:h,get ElTooltip(){return _},SvgIcon:te};return Object.defineProperty(g,"__isScriptSetup",{enumerable:!1,value:!0}),g}});c(),k();var We={class:`one-ai-push`},Ge={class:`one-ai-push-content`},Ke={class:`one-ai-push-text`},qe={class:`one-ai-push-title`},Je={key:0,class:`one-ai-push-desc`};function Ye(t,n,r,i,a,o){let s=V;return L(),m(`div`,We,[e(i.ElTooltip,{content:i.tooltipText,placement:`top`,"show-after":200},{default:O(()=>[e(s,{type:`primary`,onClick:i.handleClick,loading:i.isLoading,disabled:i.isDisabled,class:v([r.from,`one-ai-push-button`])},{default:O(()=>[p(`div`,Ge,[R(` message-chatbot(Tabler icons,MIT):2026-10-16 由它替换三连闪光
2
2
  ai-commit.svg —— 与「AI 功能不用星星/闪光」的既定偏好对齐;
3
3
  颜色交给样式层(描边档跟随 --role-ai-ink),别再写死行内白 `),e(i.SvgIcon,{class:`one-ai-push-icon`,"icon-class":`message-chatbot`}),p(`div`,Ke,[p(`span`,qe,y(i.buttonTitle),1),r.from===`form`?(L(),m(`span`,Je,y(i.buttonDesc),1)):R(`v-if`,!0)])])]),_:1},8,[`loading`,`disabled`,`class`])]),_:1},8,[`content`])])}var Xe=U(Ue,[[`render`,Ye],[`__scopeId`,`data-v-0a8120f6`],[`__file`,`D:/workspace/github_workspace/zen-gitsync/src/ui/client/src/components/buttons/AiQuickPushButton.vue`]]);c(),A();var Ze=d({__name:`GitActionButtons`,props:{hasUserCommitMessage:{type:Boolean,required:!1,default:!1},finalCommitMessage:{type:String,required:!1,default:``},skipHooks:{type:Boolean,required:!1,default:!1},from:{type:String,required:!1,default:`form`},aiGenerating:{type:Boolean,required:!1,default:!1}},emits:[`afterCommit`,`afterPush`,`beforePush`,`pushStart`,`clearFields`,`aiQuickPush`],setup(e,{expose:t,emit:n}){let r=n,i=T(null);function a(e){r(`afterCommit`,e)}function o(e){r(`afterPush`,e)}function s(){r(`beforePush`)}function c(){r(`pushStart`)}function l(){r(`clearFields`)}function u(){r(`aiQuickPush`)}async function d(){return i.value?.triggerQuickPush()}t({triggerQuickPush:d});let f={emit:r,quickActionsRef:i,handleAfterCommit:a,handleAfterPush:o,handleBeforePush:s,handlePushStart:c,handleClearFields:l,handleAiQuickPush:u,triggerQuickPush:d,StageButton:ie,CommitButton:K,PushButton:oe,QuickActionsDropdown:He,AiQuickPushButton:Xe};return Object.defineProperty(f,"__isScriptSetup",{enumerable:!1,value:!0}),f}});c();var Qe={class:`form-bottom-actions`},$e={class:`actions-flex-container`},et={class:`left-actions`},tt={class:`button-grid`},nt={class:`right-actions`};function rt(t,n,r,i,a,o){return L(),m(`div`,Qe,[p(`div`,$e,[p(`div`,et,[p(`div`,tt,[e(i.StageButton,{onClick:()=>{},from:r.from},null,8,[`from`]),e(i.CommitButton,{"has-user-commit-message":r.hasUserCommitMessage,"final-commit-message":r.finalCommitMessage,"skip-hooks":r.skipHooks,onBeforeCommit:()=>{},onAfterCommit:i.handleAfterCommit,onClick:()=>{},from:r.from},null,8,[`has-user-commit-message`,`final-commit-message`,`skip-hooks`,`from`]),e(i.PushButton,{onBeforePush:()=>{},onAfterPush:i.handleAfterPush,onClick:()=>{},from:r.from},null,8,[`from`])])]),p(`div`,nt,[R(` 「一键提交 / 一键推送所有」合并进这一颗下拉(2026-10-16 走查 P2-1),
4
4
  动作逻辑与禁用口径在 QuickActionsDropdown 内部的原按钮引擎里,
@@ -1 +1 @@
1
- import"./rolldown-runtime-C0FnF6B9.js";import{An as e,Bn as t,Cn as n,Dn as r,E as i,In as a,Kr as o,Mn as s,Sn as c,Wr as l,Xn as u,Xr as d,er as f,ir as p,jr as m,kn as h,qn as g,wn as _,xn as v,z as y}from"./element-plus-Bz6lYur-.js";import{n as b,t as x}from"./_plugin-vue_export-helper-Dz34f-q7.js";a();var S=s({__name:`CommonDialog`,props:{modelValue:{type:Boolean,required:!0},title:{type:String,required:!0},size:{type:String,required:!1,default:`medium`},type:{type:String,required:!1,default:`default`},width:{type:String,required:!1},height:{type:String,required:!1},top:{type:String,required:!1,default:`50px`},closeOnClickModal:{type:Boolean,required:!1,default:!1},closeOnPressEscape:{type:Boolean,required:!1,default:!0},destroyOnClose:{type:Boolean,required:!1,default:!1},draggable:{type:Boolean,required:!1,default:!1},customClass:{type:String,required:!1},modalClass:{type:String,required:!1},appendToBody:{type:Boolean,required:!1,default:!0},lockScroll:{type:Boolean,required:!1,default:!0},zIndex:{type:Number,required:!1},showClose:{type:Boolean,required:!1,default:!0},heightMode:{type:String,required:!1,default:`max`},heightOffset:{type:String,required:!1,default:`100px`},showFooter:{type:Boolean,required:!1,default:!1},confirmText:{type:String,required:!1,default:b(`@803A9:确定`)},cancelText:{type:String,required:!1,default:b(`@803A9:取消`)},showCancel:{type:Boolean,required:!1,default:!0},confirmLoading:{type:Boolean,required:!1,default:!1}},emits:[`update:modelValue`,`confirm`,`cancel`,`close`,`opened`,`closed`],setup(e,{expose:n,emit:r}){n();let a=e,o=r,s=v(()=>{if(a.width)return a.width;switch(a.size){case`small`:return`30%`;case`medium`:return`50%`;case`large`:return`80%`;case`extra-large`:return`90%`;case`fullscreen`:return`100vw`;default:return`50%`}}),c=f(),l=null;function u(){o(`opened`),t(()=>{let e=document.querySelector(`.el-dialog__wrapper:not([style*="display: none"]) .el-dialog`);e&&(e.querySelector(`button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])`)||e).focus?.()})}function d(){o(`closed`),l&&typeof l.focus==`function`&&(t(()=>l?.focus()),l=null)}function p(e){e&&!a.modelValue&&(l=document.activeElement),o(`update:modelValue`,e)}let m=v(()=>a.size===`fullscreen`?`0`:a.top),h=v(()=>{let e=[];return a.customClass&&e.push(a.customClass),a.type===`flex`&&e.push(`common-dialog--flex`),a.type===`full-height`&&e.push(`common-dialog--full-height`),a.size===`fullscreen`&&e.push(`common-dialog--fullscreen`),e.join(` `)}),g=v(()=>{if(a.size===`fullscreen`)return{height:`100vh`,maxHeight:`100vh`};let e=`calc(100% - ${a.heightOffset})`;return a.heightMode===`fixed`?{height:e}:{maxHeight:e}});function _(){o(`update:modelValue`,!1),o(`close`)}function y(){o(`confirm`)}function b(){o(`cancel`),_()}let x={props:a,emit:o,dialogWidth:s,titleId:c,get previouslyFocused(){return l},set previouslyFocused(e){l=e},handleOpened:u,handleClosed:d,handleUpdateModelValue:p,dialogTop:m,dialogClass:h,dialogStyle:g,handleClose:_,handleConfirm:y,handleCancel:b,get ElDialog(){return i}};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}});a(),m();var C=[`id`],w={class:`common-dialog__footer`};function T(t,i,a,s,f,m){let v=y;return g(),n(s.ElDialog,{"model-value":a.modelValue,title:a.title,width:s.dialogWidth,top:s.dialogTop,style:o(s.dialogStyle),"z-index":a.zIndex,fullscreen:a.size===`fullscreen`,"close-on-click-modal":a.closeOnClickModal,"close-on-press-escape":a.closeOnPressEscape,"destroy-on-close":a.destroyOnClose,draggable:a.draggable,class:l(s.dialogClass),"show-close":a.showClose,"modal-class":a.modalClass,"data-dialog-shell":`common`,"append-to-body":a.appendToBody,"lock-scroll":a.lockScroll,"aria-modal":!0,"aria-labelledby":s.titleId,role:`dialog`,onClose:s.handleClose,"onUpdate:modelValue":s.handleUpdateModelValue,onOpened:s.handleOpened,onClosed:s.handleClosed},r({header:p(({titleClass:e})=>[c(`span`,{id:s.titleId,class:l([`el-dialog__title`,e]),role:`heading`,"aria-level":`2`},d(a.title),11,C)]),default:p(()=>[u(t.$slots,`default`,{},void 0,!0)]),_:2},[a.showFooter||t.$slots.footer?{name:`footer`,fn:p(()=>[u(t.$slots,`footer`,{},()=>[c(`div`,w,[a.showCancel?(g(),n(v,{key:0,type:`button`,onClick:s.handleCancel},{default:p(()=>[h(d(a.cancelText),1)]),_:1})):_(`v-if`,!0),e(v,{type:`primary`,loading:a.confirmLoading,onClick:s.handleConfirm},{default:p(()=>[h(d(a.confirmText),1)]),_:1},8,[`loading`])])],!0)]),key:`0`}:void 0]),1032,[`model-value`,`title`,`width`,`top`,`style`,`z-index`,`fullscreen`,`close-on-click-modal`,`close-on-press-escape`,`destroy-on-close`,`draggable`,`class`,`show-close`,`modal-class`,`append-to-body`,`lock-scroll`,`aria-labelledby`])}var E=x(S,[[`render`,T],[`__scopeId`,`data-v-c5fee217`],[`__file`,`D:/workspace/github_workspace/zen-gitsync/src/ui/client/src/components/CommonDialog.vue`]]);export{E as t};
1
+ import"./rolldown-runtime-C0FnF6B9.js";import{An as e,Bn as t,Cn as n,Dn as r,E as i,In as a,Kr as o,Mn as s,Sn as c,Wr as l,Xn as u,Xr as d,er as f,ir as p,jr as m,kn as h,qn as g,wn as _,xn as v,z as y}from"./element-plus-Bz6lYur-.js";import{n as b,t as x}from"./_plugin-vue_export-helper-BhdsvhKo.js";a();var S=s({__name:`CommonDialog`,props:{modelValue:{type:Boolean,required:!0},title:{type:String,required:!0},size:{type:String,required:!1,default:`medium`},type:{type:String,required:!1,default:`default`},width:{type:String,required:!1},height:{type:String,required:!1},top:{type:String,required:!1,default:`50px`},closeOnClickModal:{type:Boolean,required:!1,default:!1},closeOnPressEscape:{type:Boolean,required:!1,default:!0},destroyOnClose:{type:Boolean,required:!1,default:!1},draggable:{type:Boolean,required:!1,default:!1},customClass:{type:String,required:!1},modalClass:{type:String,required:!1},appendToBody:{type:Boolean,required:!1,default:!0},lockScroll:{type:Boolean,required:!1,default:!0},zIndex:{type:Number,required:!1},showClose:{type:Boolean,required:!1,default:!0},heightMode:{type:String,required:!1,default:`max`},heightOffset:{type:String,required:!1,default:`100px`},showFooter:{type:Boolean,required:!1,default:!1},confirmText:{type:String,required:!1,default:b(`@803A9:确定`)},cancelText:{type:String,required:!1,default:b(`@803A9:取消`)},showCancel:{type:Boolean,required:!1,default:!0},confirmLoading:{type:Boolean,required:!1,default:!1}},emits:[`update:modelValue`,`confirm`,`cancel`,`close`,`opened`,`closed`],setup(e,{expose:n,emit:r}){n();let a=e,o=r,s=v(()=>{if(a.width)return a.width;switch(a.size){case`small`:return`30%`;case`medium`:return`50%`;case`large`:return`80%`;case`extra-large`:return`90%`;case`fullscreen`:return`100vw`;default:return`50%`}}),c=f(),l=null;function u(){o(`opened`),t(()=>{let e=document.querySelector(`.el-dialog__wrapper:not([style*="display: none"]) .el-dialog`);e&&(e.querySelector(`button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])`)||e).focus?.()})}function d(){o(`closed`),l&&typeof l.focus==`function`&&(t(()=>l?.focus()),l=null)}function p(e){e&&!a.modelValue&&(l=document.activeElement),o(`update:modelValue`,e)}let m=v(()=>a.size===`fullscreen`?`0`:a.top),h=v(()=>{let e=[];return a.customClass&&e.push(a.customClass),a.type===`flex`&&e.push(`common-dialog--flex`),a.type===`full-height`&&e.push(`common-dialog--full-height`),a.size===`fullscreen`&&e.push(`common-dialog--fullscreen`),e.join(` `)}),g=v(()=>{if(a.size===`fullscreen`)return{height:`100vh`,maxHeight:`100vh`};let e=`calc(100% - ${a.heightOffset})`;return a.heightMode===`fixed`?{height:e}:{maxHeight:e}});function _(){o(`update:modelValue`,!1),o(`close`)}function y(){o(`confirm`)}function b(){o(`cancel`),_()}let x={props:a,emit:o,dialogWidth:s,titleId:c,get previouslyFocused(){return l},set previouslyFocused(e){l=e},handleOpened:u,handleClosed:d,handleUpdateModelValue:p,dialogTop:m,dialogClass:h,dialogStyle:g,handleClose:_,handleConfirm:y,handleCancel:b,get ElDialog(){return i}};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}});a(),m();var C=[`id`],w={class:`common-dialog__footer`};function T(t,i,a,s,f,m){let v=y;return g(),n(s.ElDialog,{"model-value":a.modelValue,title:a.title,width:s.dialogWidth,top:s.dialogTop,style:o(s.dialogStyle),"z-index":a.zIndex,fullscreen:a.size===`fullscreen`,"close-on-click-modal":a.closeOnClickModal,"close-on-press-escape":a.closeOnPressEscape,"destroy-on-close":a.destroyOnClose,draggable:a.draggable,class:l(s.dialogClass),"show-close":a.showClose,"modal-class":a.modalClass,"data-dialog-shell":`common`,"append-to-body":a.appendToBody,"lock-scroll":a.lockScroll,"aria-modal":!0,"aria-labelledby":s.titleId,role:`dialog`,onClose:s.handleClose,"onUpdate:modelValue":s.handleUpdateModelValue,onOpened:s.handleOpened,onClosed:s.handleClosed},r({header:p(({titleClass:e})=>[c(`span`,{id:s.titleId,class:l([`el-dialog__title`,e]),role:`heading`,"aria-level":`2`},d(a.title),11,C)]),default:p(()=>[u(t.$slots,`default`,{},void 0,!0)]),_:2},[a.showFooter||t.$slots.footer?{name:`footer`,fn:p(()=>[u(t.$slots,`footer`,{},()=>[c(`div`,w,[a.showCancel?(g(),n(v,{key:0,type:`button`,onClick:s.handleCancel},{default:p(()=>[h(d(a.cancelText),1)]),_:1})):_(`v-if`,!0),e(v,{type:`primary`,loading:a.confirmLoading,onClick:s.handleConfirm},{default:p(()=>[h(d(a.confirmText),1)]),_:1},8,[`loading`])])],!0)]),key:`0`}:void 0]),1032,[`model-value`,`title`,`width`,`top`,`style`,`z-index`,`fullscreen`,`close-on-click-modal`,`close-on-press-escape`,`destroy-on-close`,`draggable`,`class`,`show-close`,`modal-class`,`append-to-body`,`lock-scroll`,`aria-labelledby`])}var E=x(S,[[`render`,T],[`__scopeId`,`data-v-c5fee217`],[`__file`,`D:/workspace/github_workspace/zen-gitsync/src/ui/client/src/components/CommonDialog.vue`]]);export{E as t};
@@ -0,0 +1 @@
1
+ .editor-agent-panel[data-v-7cc12c51]{background:var(--bg-panel);border-left:1px solid var(--border-color);flex-direction:column;flex-grow:1;flex-basis:0;min-width:200px;min-height:0;display:flex;overflow:hidden}.editor-agent-panel.is-fullscreen[data-v-7cc12c51]{z-index:20;background:var(--bg-container);border-left:none;flex:none;position:absolute;inset:0}.agent-panel-header[data-v-7cc12c51]{border-bottom:1px solid var(--border-color);flex-shrink:0;align-items:center;gap:8px;height:34px;padding:0 6px 0 12px;display:flex}.agent-panel-title[data-v-7cc12c51]{font-size:var(--font-size-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--text-meta);white-space:nowrap;text-overflow:ellipsis;min-width:0;font-weight:700;overflow:hidden}.agent-panel-spacer[data-v-7cc12c51]{flex:1}.agent-panel-engine[data-v-7cc12c51]{flex:none}.agent-panel-silence[data-v-7cc12c51]{flex:none;margin-right:4px}.agent-panel-icon-btn[data-v-7cc12c51]{border-radius:var(--radius-xs);width:24px;height:24px;color:var(--text-meta);cursor:pointer;transition:var(--transition-ui-fast);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:flex}.agent-panel-icon-btn[data-v-7cc12c51]:hover{background:var(--bg-hover);color:var(--text-secondary)}.agent-panel-body[data-v-7cc12c51]{flex:1;grid-template:"stage"minmax(0,1fr)"composer"/minmax(0,1fr);min-height:0;display:grid}.agent-panel-body.is-wide[data-v-7cc12c51]{transition:grid-template-columns var(--transition-base) var(--ease-custom);grid-template-columns:240px minmax(0,1fr);grid-template-areas:"list chat""list composer"}.agent-panel-body.is-wide.is-convs-collapsed[data-v-7cc12c51]{grid-template-columns:40px minmax(0,1fr)}.agent-panel-body.is-wide.is-convs-collapsed .agent-panel-convs[data-v-7cc12c51]{padding:8px 4px}.agent-panel-convs[data-v-7cc12c51]{grid-area:stage;min-height:0;padding:8px 10px;overflow-y:auto}.agent-panel-chat[data-v-7cc12c51]{grid-area:stage;min-height:0;display:flex}.agent-panel-body.is-wide .agent-panel-convs[data-v-7cc12c51]{grid-area:list}.agent-panel-body.is-wide .agent-panel-chat[data-v-7cc12c51]{grid-area:chat}.agent-panel-composer[data-v-7cc12c51]{padding:var(--acu-space-3) var(--acu-space-4) var(--acu-space-4);background:linear-gradient(to top, var(--acu-bg) 70%, transparent);grid-area:composer}.agent-panel-composer[data-v-7cc12c51] .acu-input-queue{--acu-queue-edge:var(--role-pending-edge);--acu-queue-surface:var(--role-pending-surface);--acu-queue-ink:var(--role-pending-ink);--acu-queue-wash:var(--role-pending-wash)}.agent-panel-chat[data-v-7cc12c51]>.acu-chat{flex:1;min-width:0}.agent-panel-chat[data-v-7cc12c51] .acu-avatar--left{background:0 0}.agent-panel-chat[data-v-7cc12c51] .acu-bubble-row.is-assistant .acu-bubble-main{width:var(--acu-bubble-max-width);max-width:var(--acu-bubble-max-width);position:relative}.agent-panel-chat[data-v-7cc12c51] .acu-bubble-row.is-assistant .acu-bubble{align-self:flex-start}.agent-panel-chat[data-v-7cc12c51] .acu-message-meta{margin:0;position:absolute;top:0;right:0}.agent-panel-composer[data-v-7cc12c51] .acu-input-wrap>.agent-context-slot{gap:var(--acu-space-2,8px);padding:var(--acu-space-2,8px) var(--acu-space-2,8px) 0;flex-wrap:wrap;display:flex}.agent-panel-composer[data-v-7cc12c51] .acu-input-attachments>.agent-context-slot{display:inline-flex}.agent-context-att[data-v-7cc12c51]{align-items:center;gap:var(--acu-space-2,8px);max-width:180px;padding:var(--acu-space-2,8px) var(--acu-space-3,12px);border:1px solid var(--acu-border);border-radius:var(--acu-radius-sm,8px);background:var(--acu-bg,var(--bg-container));color:var(--acu-text-secondary,var(--text-secondary));font-size:var(--acu-font-size-xs,12px);display:inline-flex;position:relative}.agent-context-att-icon[data-v-7cc12c51]{opacity:.75;flex-shrink:0}.agent-context-att-name[data-v-7cc12c51]{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.agent-context-att-remove[data-v-7cc12c51]{border-radius:var(--acu-radius-full,999px);background:var(--acu-text,var(--text-primary));width:18px;height:18px;color:var(--acu-bg,var(--bg-container));cursor:pointer;box-shadow:var(--acu-shadow-sm,0 1px 2px #0003);transition:transform var(--acu-duration-fast,.15s) var(--acu-easing,ease);border:none;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute;top:-6px;right:-6px}.agent-context-att-remove[data-v-7cc12c51]:hover{transform:scale(1.12)}.agent-context-att-remove[data-v-7cc12c51]:active{transform:scale(1.02)}