zdashboard 2.8.4 → 2.8.6

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 (38) hide show
  1. package/dist/cli.js +520 -292
  2. package/dist/cli.js.map +1 -1
  3. package/dist/web/assets/CodeViewer-_jAxbWVL.js +10 -0
  4. package/dist/web/assets/{FileIcon-1KBdrfw3.js → FileIcon-68etP2t6.js} +1 -1
  5. package/dist/web/assets/{FilterPills-CCubROoX.js → FilterPills-DGfzMpn_.js} +1 -1
  6. package/dist/web/assets/ImageViewer-ChZdzYPf.js +298 -0
  7. package/dist/web/assets/{Sidebar-DE0UBp9b.js → Sidebar-D83uLTNy.js} +1 -1
  8. package/dist/web/assets/{Sidebar-D4sJtPI_.js → Sidebar-N0HiMJRK.js} +1 -1
  9. package/dist/web/assets/Workspace-BE7p2hNz.js +1 -0
  10. package/dist/web/assets/Workspace-BpSq60xh.js +1 -0
  11. package/dist/web/assets/{Workspace-CvG5lIPT.js → Workspace-DW8xX3Tg.js} +1 -1
  12. package/dist/web/assets/Workspace-DjL1fdji.js +2 -0
  13. package/dist/web/assets/Workspace-DrN9--Je.js +1 -0
  14. package/dist/web/assets/index-DH1Mqw-g.css +1 -0
  15. package/dist/web/assets/{index-Co7MWSFf.js → index-D_uh-zkI.js} +3 -3
  16. package/dist/web/assets/{usePluginData-IoRqReIJ.js → usePluginData-Bk2M7LNj.js} +1 -1
  17. package/dist/web/assets/{web-BZSTgldm.js → web-BZukfmmT.js} +2 -2
  18. package/dist/web/assets/{web-DOEmlI8d.js → web-CEB9kTEr.js} +2 -2
  19. package/dist/web/assets/web-CGvrDSNo.js +2 -0
  20. package/dist/web/assets/{web-DxbVzGf3.js → web-CLKkH6eO.js} +2 -2
  21. package/dist/web/assets/web-CbW9uGDV.js +2 -0
  22. package/dist/web/index.html +2 -2
  23. package/package.json +1 -1
  24. package/dist/web/assets/BatchView-pClKtVa8.js +0 -2
  25. package/dist/web/assets/CheckpointViewer-CAbXbMti.js +0 -1
  26. package/dist/web/assets/CodeViewer-Cs0mG1h6.js +0 -279
  27. package/dist/web/assets/DependencyGraph-Czdg00AM.js +0 -1
  28. package/dist/web/assets/ProgressBar-DVfldtzq.js +0 -1
  29. package/dist/web/assets/SingleChangeView-BYcaGOyR.js +0 -1
  30. package/dist/web/assets/ViewHeader-DPfbaJmK.js +0 -1
  31. package/dist/web/assets/Workspace-B7MhdnwY.js +0 -2
  32. package/dist/web/assets/Workspace-CAcrVL-m.js +0 -1
  33. package/dist/web/assets/Workspace-DWHHR42N.js +0 -1
  34. package/dist/web/assets/Workspace-cXLWoMNL.js +0 -1
  35. package/dist/web/assets/index-CwS-KyOV.css +0 -1
  36. package/dist/web/assets/index-D6EJRHBV.js +0 -29
  37. package/dist/web/assets/web-CX1FEFxC.js +0 -2
  38. package/dist/web/assets/web-DLwxO4fO.js +0 -2
@@ -1 +1 @@
1
- import{r as a,i as S}from"./index-Co7MWSFf.js";const f=new Map,s=new Map,d=new Set;function v(e){for(const i of[...d])i.event===e&&i.cb()}function m(e){return e instanceof Error?e.message:String(e)}function M(e,i,r){const o=a.useRef(i);a.useEffect(()=>{o.current=i}),S((r==null?void 0:r.subscribe)??"",()=>v((r==null?void 0:r.subscribe)??""));const[b,g]=a.useState(0),[h,c]=a.useState(()=>{const t=f.get(e);return t?{data:t.data,error:null,loading:!1}:{data:null,error:null,loading:!0}}),l=a.useCallback(t=>{if(t)f.delete(e),s.delete(e);else{const n=f.get(e);if(n){c({data:n.data,error:null,loading:!1});return}}let u=s.get(e);u||(u=Promise.resolve().then(()=>o.current()),s.set(e,u),u.then(n=>{f.set(e,{data:n,error:null})},()=>{}).finally(()=>{s.get(e)===u&&s.delete(e)})),c(n=>({...n,loading:n.loading||t,error:null})),u.then(n=>c({data:n,error:null,loading:!1}),n=>c({data:null,error:m(n),loading:!1}))},[e]);a.useEffect(()=>{l(!1)},[e,b,l]),a.useEffect(()=>{if(!(r!=null&&r.subscribe))return;const t={event:r.subscribe,cb:()=>{l(!0)}};return d.add(t),()=>{d.delete(t)}},[r==null?void 0:r.subscribe,l]);const E=a.useCallback(()=>{g(t=>t+1),l(!0)},[l]);return{...h,reload:E}}export{M as u};
1
+ import{r as a,h as S}from"./index-D_uh-zkI.js";const f=new Map,s=new Map,d=new Set;function v(e){for(const i of[...d])i.event===e&&i.cb()}function m(e){return e instanceof Error?e.message:String(e)}function M(e,i,r){const o=a.useRef(i);a.useEffect(()=>{o.current=i}),S((r==null?void 0:r.subscribe)??"",()=>v((r==null?void 0:r.subscribe)??""));const[b,g]=a.useState(0),[h,c]=a.useState(()=>{const t=f.get(e);return t?{data:t.data,error:null,loading:!1}:{data:null,error:null,loading:!0}}),l=a.useCallback(t=>{if(t)f.delete(e),s.delete(e);else{const n=f.get(e);if(n){c({data:n.data,error:null,loading:!1});return}}let u=s.get(e);u||(u=Promise.resolve().then(()=>o.current()),s.set(e,u),u.then(n=>{f.set(e,{data:n,error:null})},()=>{}).finally(()=>{s.get(e)===u&&s.delete(e)})),c(n=>({...n,loading:n.loading||t,error:null})),u.then(n=>c({data:n,error:null,loading:!1}),n=>c({data:null,error:m(n),loading:!1}))},[e]);a.useEffect(()=>{l(!1)},[e,b,l]),a.useEffect(()=>{if(!(r!=null&&r.subscribe))return;const t={event:r.subscribe,cb:()=>{l(!0)}};return d.add(t),()=>{d.delete(t)}},[r==null?void 0:r.subscribe,l]);const E=a.useCallback(()=>{g(t=>t+1),l(!0)},[l]);return{...h,reload:E}}export{M as u};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Workspace-DWHHR42N.js","assets/index-Co7MWSFf.js","assets/index-CwS-KyOV.css","assets/FilterPills-CCubROoX.js","assets/CodeViewer-Cs0mG1h6.js","assets/index-D6EJRHBV.js","assets/CodeViewer-BTcE7LSd.css","assets/client-Cw4K1Nx3.js","assets/Sidebar-DE0UBp9b.js","assets/FileIcon-1KBdrfw3.js","assets/usePluginData-IoRqReIJ.js"])))=>i.map(i=>d[i]);
2
- import{r as e,_ as o}from"./index-Co7MWSFf.js";import{d as t}from"./client-Cw4K1Nx3.js";const r={mode:"design",label:"设计资产",icon:"🎨",description:"设计资产分类浏览 · zdesign",order:30},i=[{name:"type",label:"资产类型",type:"string",description:"page/component/icon/token/md/video/audio/pdf/font"},{name:"asset",label:"选中资产",type:"string",description:"资产相对路径"},{name:"folder",label:"当前文件夹",type:"string",description:"限定展示的资产路径前缀"}],n=t({manifest:r,params:i,workspace:e.lazy(()=>o(()=>import("./Workspace-DWHHR42N.js"),__vite__mapDeps([0,1,2,3,4,5,6,7]))),sidebar:e.lazy(()=>o(()=>import("./Sidebar-DE0UBp9b.js"),__vite__mapDeps([8,1,2,9,10])))}),d=Object.freeze(Object.defineProperty({__proto__:null,default:n},Symbol.toStringTag,{value:"Module"}));export{r as m,d as w};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Workspace-DrN9--Je.js","assets/index-D_uh-zkI.js","assets/index-DH1Mqw-g.css","assets/FilterPills-DGfzMpn_.js","assets/ImageViewer-ChZdzYPf.js","assets/CodeViewer-_jAxbWVL.js","assets/CodeViewer-BTcE7LSd.css","assets/client-Cw4K1Nx3.js","assets/Sidebar-D83uLTNy.js","assets/FileIcon-68etP2t6.js","assets/usePluginData-Bk2M7LNj.js"])))=>i.map(i=>d[i]);
2
+ import{r as e,_ as o}from"./index-D_uh-zkI.js";import{d as t}from"./client-Cw4K1Nx3.js";const r={mode:"design",label:"设计资产",icon:"🎨",description:"设计资产分类浏览 · zdesign",order:30},i=[{name:"type",label:"资产类型",type:"string",description:"page/component/icon/token/md/video/audio/pdf/font"},{name:"asset",label:"选中资产",type:"string",description:"资产相对路径"},{name:"folder",label:"当前文件夹",type:"string",description:"限定展示的资产路径前缀"}],n=t({manifest:r,params:i,workspace:e.lazy(()=>o(()=>import("./Workspace-DrN9--Je.js"),__vite__mapDeps([0,1,2,3,4,5,6,7]))),sidebar:e.lazy(()=>o(()=>import("./Sidebar-D83uLTNy.js"),__vite__mapDeps([8,1,2,9,10])))}),d=Object.freeze(Object.defineProperty({__proto__:null,default:n},Symbol.toStringTag,{value:"Module"}));export{r as m,d as w};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Workspace-CvG5lIPT.js","assets/index-Co7MWSFf.js","assets/index-CwS-KyOV.css","assets/FilterPills-CCubROoX.js","assets/usePluginData-IoRqReIJ.js","assets/client-Cw4K1Nx3.js"])))=>i.map(i=>d[i]);
2
- import{r as e,_ as t}from"./index-Co7MWSFf.js";import{d as r}from"./client-Cw4K1Nx3.js";const o={mode:"just",label:"Just Runner",icon:"📜",description:"Just 任务日志与执行",order:50},i=[{name:"recipe",label:"Recipe",type:"string",description:"选中的 recipe 名"},{name:"task",label:"任务",type:"string",description:"活跃任务 id"}],s=r({manifest:o,params:i,workspace:e.lazy(()=>t(()=>import("./Workspace-CvG5lIPT.js"),__vite__mapDeps([0,1,2,3,4,5])))}),p=Object.freeze(Object.defineProperty({__proto__:null,default:s},Symbol.toStringTag,{value:"Module"}));export{o as m,p as w};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Workspace-DW8xX3Tg.js","assets/index-D_uh-zkI.js","assets/index-DH1Mqw-g.css","assets/FilterPills-DGfzMpn_.js","assets/usePluginData-Bk2M7LNj.js","assets/client-Cw4K1Nx3.js"])))=>i.map(i=>d[i]);
2
+ import{r as e,_ as t}from"./index-D_uh-zkI.js";import{d as r}from"./client-Cw4K1Nx3.js";const o={mode:"just",label:"Just Runner",icon:"📜",description:"Just 任务日志与执行",order:50},i=[{name:"recipe",label:"Recipe",type:"string",description:"选中的 recipe 名"},{name:"task",label:"任务",type:"string",description:"活跃任务 id"}],s=r({manifest:o,params:i,workspace:e.lazy(()=>t(()=>import("./Workspace-DW8xX3Tg.js"),__vite__mapDeps([0,1,2,3,4,5])))}),p=Object.freeze(Object.defineProperty({__proto__:null,default:s},Symbol.toStringTag,{value:"Module"}));export{o as m,p as w};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Workspace-DjL1fdji.js","assets/index-D_uh-zkI.js","assets/index-DH1Mqw-g.css","assets/FilterPills-DGfzMpn_.js","assets/CodeViewer-_jAxbWVL.js","assets/CodeViewer-BTcE7LSd.css","assets/usePluginData-Bk2M7LNj.js","assets/client-Cw4K1Nx3.js"])))=>i.map(i=>d[i]);
2
+ import{r as e,_ as t}from"./index-D_uh-zkI.js";import{d as o}from"./client-Cw4K1Nx3.js";const r={mode:"market",label:"灵感市场",icon:"✨",description:"Logo / 动效 / 设计灵感浏览 · 转提示词闭环",order:40},i=[{name:"tab",label:"当前市场",type:"string",description:"logos/motions/inspirations"},{name:"q",label:"搜索词",type:"string",description:"当前市场内搜索/过滤"},{name:"entry",label:"选中条目",type:"string",description:"目录项 id,直达详情"}],a=o({manifest:r,params:i,workspace:e.lazy(()=>t(()=>import("./Workspace-DjL1fdji.js"),__vite__mapDeps([0,1,2,3,4,5,6,7])))}),l=Object.freeze(Object.defineProperty({__proto__:null,default:a},Symbol.toStringTag,{value:"Module"}));export{r as m,l as w};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Workspace-cXLWoMNL.js","assets/index-Co7MWSFf.js","assets/index-CwS-KyOV.css","assets/CodeViewer-Cs0mG1h6.js","assets/index-D6EJRHBV.js","assets/CodeViewer-BTcE7LSd.css","assets/client-Cw4K1Nx3.js","assets/Sidebar-D4sJtPI_.js","assets/FileIcon-1KBdrfw3.js","assets/usePluginData-IoRqReIJ.js"])))=>i.map(i=>d[i]);
2
- import{r as e,_ as t}from"./index-Co7MWSFf.js";import{d as r}from"./client-Cw4K1Nx3.js";const o={mode:"view",label:"项目浏览",icon:"👁️",description:"openspec / docs / 文档预览",order:20},i=[{name:"wt",label:"Worktree 路径",type:"string",description:"worktree 绝对路径"},{name:"file",label:"文件路径",type:"string",description:"预览文件相对路径"},{name:"filter",label:"过滤词",type:"string",description:"文件树过滤词"}],a=r({manifest:o,params:i,workspace:e.lazy(()=>t(()=>import("./Workspace-cXLWoMNL.js"),__vite__mapDeps([0,1,2,3,4,5,6]))),sidebar:e.lazy(()=>t(()=>import("./Sidebar-D4sJtPI_.js"),__vite__mapDeps([7,1,2,8,9])))}),l=Object.freeze(Object.defineProperty({__proto__:null,default:a},Symbol.toStringTag,{value:"Module"}));export{o as m,l as w};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Workspace-BE7p2hNz.js","assets/index-D_uh-zkI.js","assets/index-DH1Mqw-g.css","assets/ImageViewer-ChZdzYPf.js","assets/CodeViewer-_jAxbWVL.js","assets/CodeViewer-BTcE7LSd.css","assets/client-Cw4K1Nx3.js","assets/Sidebar-N0HiMJRK.js","assets/FileIcon-68etP2t6.js","assets/usePluginData-Bk2M7LNj.js"])))=>i.map(i=>d[i]);
2
+ import{r as e,_ as t}from"./index-D_uh-zkI.js";import{d as r}from"./client-Cw4K1Nx3.js";const o={mode:"view",label:"项目浏览",icon:"👁️",description:"openspec / docs / 文档预览",order:20},i=[{name:"wt",label:"Worktree 路径",type:"string",description:"worktree 绝对路径"},{name:"file",label:"文件路径",type:"string",description:"预览文件相对路径"},{name:"filter",label:"过滤词",type:"string",description:"文件树过滤词"}],a=r({manifest:o,params:i,workspace:e.lazy(()=>t(()=>import("./Workspace-BE7p2hNz.js"),__vite__mapDeps([0,1,2,3,4,5,6]))),sidebar:e.lazy(()=>t(()=>import("./Sidebar-N0HiMJRK.js"),__vite__mapDeps([7,1,2,8,9])))}),l=Object.freeze(Object.defineProperty({__proto__:null,default:a},Symbol.toStringTag,{value:"Module"}));export{o as m,l as w};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Workspace-BpSq60xh.js","assets/index-D_uh-zkI.js","assets/index-DH1Mqw-g.css","assets/usePluginData-Bk2M7LNj.js","assets/client-Cw4K1Nx3.js"])))=>i.map(i=>d[i]);
2
+ import{r as e,_ as t}from"./index-D_uh-zkI.js";import{d as r}from"./client-Cw4K1Nx3.js";const o={mode:"stats",label:"项目统计",icon:"📊",description:"项目文件统计 · 扫描生成",order:10},a=[{name:"card",label:"钻取来源",type:"string",description:"钻取来源(worktree/dirty),view 侧读取后高亮"}],i=r({manifest:o,params:a,workspace:e.lazy(()=>t(()=>import("./Workspace-BpSq60xh.js"),__vite__mapDeps([0,1,2,3,4])))}),d=Object.freeze(Object.defineProperty({__proto__:null,default:i},Symbol.toStringTag,{value:"Module"}));export{o as m,d as w};
@@ -5,8 +5,8 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1" />
6
6
  <link rel="icon" href="/favicon.svg" type="image/svg+xml" />
7
7
  <title>zdashboard · 项目洞察</title>
8
- <script type="module" crossorigin src="/assets/index-Co7MWSFf.js"></script>
9
- <link rel="stylesheet" crossorigin href="/assets/index-CwS-KyOV.css">
8
+ <script type="module" crossorigin src="/assets/index-D_uh-zkI.js"></script>
9
+ <link rel="stylesheet" crossorigin href="/assets/index-DH1Mqw-g.css">
10
10
  </head>
11
11
  <body>
12
12
  <div id="root"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zdashboard",
3
- "version": "2.8.4",
3
+ "version": "2.8.6",
4
4
  "description": "ZCode skill dashboard platform — pluggable viewers for zdesign/zview/zreview/zgoal",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/DependencyGraph-Czdg00AM.js","assets/index-Co7MWSFf.js","assets/index-CwS-KyOV.css","assets/CheckpointViewer-CAbXbMti.js"])))=>i.map(i=>d[i]);
2
- import{b as $,a as C,r as o,j as e,C as V,E as A,_}from"./index-Co7MWSFf.js";import{V as B,B as I}from"./ViewHeader-DPfbaJmK.js";import{u as f}from"./usePluginData-IoRqReIJ.js";import{M as S,t as R}from"./index-D6EJRHBV.js";const z=o.lazy(()=>_(()=>import("./DependencyGraph-Czdg00AM.js"),__vite__mapDeps([0,1,2]))),P=o.lazy(()=>_(()=>import("./CheckpointViewer-CAbXbMti.js"),__vite__mapDeps([3,1,2]))),T=["graph","checkpoint"],D={graph:"依赖图",checkpoint:"进度"},L={idle:"neutral",analyzing:"info","pending-approval":"warning",running:"info",paused:"warning",completed:"success",failed:"destructive"};function U(a){return a==="error"?"text-destructive":a==="warn"?"text-warning":"text-muted-foreground"}function O(a){const r=a?`?run=${encodeURIComponent(a)}`:"",i=f(`apply:/__apply/batch${r}`,()=>fetch(`/__apply/batch${r}`,{cache:"no-store"}).then(n=>n.json()),{subscribe:"files"}),x=f(`apply:/__apply/batch/graph${r}`,()=>fetch(`/__apply/batch/graph${r}`,{cache:"no-store"}).then(n=>n.json()),{subscribe:"files"}),b=f(`apply:/__apply/batch/logs${r}`,()=>fetch(`/__apply/batch/logs${r}`,{cache:"no-store"}).then(n=>n.json()),{subscribe:"files"}),c=f(`apply:/__apply/batch/plan${r}`,()=>fetch(`/__apply/batch/plan${r}`,{cache:"no-store"}).then(n=>n.ok?n.json().then(d=>d.plan):null).catch(()=>null),{subscribe:"files"});return{snapshot:i,graph:x,logs:b,plan:c}}function G({run:a,hasError:r}){return e.jsxs("div",{className:"flex-1 flex flex-col items-center justify-center p-6 gap-2",children:[e.jsx(A,{title:"暂无批量执行数据",hint:"在 zapply batch 中启动批量执行后,状态会出现在这里"}),e.jsxs("div",{className:"text-center text-xs text-muted-foreground space-y-1",children:[e.jsxs("p",{children:["状态文件:",e.jsx("code",{className:"font-mono",children:".zdev/apply/runs/<runId>/state.json"}),"(由 zapply 写入,本页只读)"]}),a!==null&&e.jsx("p",{children:"CURRENT 指向的 run 状态缺失或损坏(历史 run 只读)"}),r&&e.jsx("p",{children:"数据加载失败,请稍后重试或刷新页面"})]})]})}function H({onStatus:a}={}){var y,v;const{icon:r}=$(),i=C(),x=i.params.get("sel"),b=i.params.get("run"),[c,n]=o.useState("graph"),[d,N]=o.useState(!0),{snapshot:p,graph:w,logs:k,plan:g}=O(b),t=((y=p.data)==null?void 0:y.state)??null,u=((v=p.data)==null?void 0:v.run)??null,h=Array.isArray(t==null?void 0:t.changes)?t==null?void 0:t.changes:[],l={completed:h.filter(s=>s.status==="completed").length,failed:h.filter(s=>s.status==="failed").length,parked:h.filter(s=>s.status==="parked").length,running:h.filter(s=>s.status==="running").length},m=h.length;if(o.useEffect(()=>{a==null||a(m?{label:`${l.completed+l.failed}/${m}`,tone:l.failed?"warning":"info"}:void 0)},[m,l.completed,l.failed,a]),!t)return e.jsx("div",{"data-testid":"batch-view",className:"h-full flex flex-col bg-background border rounded-lg shadow-sm overflow-hidden",children:p.data===null&&!p.error?e.jsx("div",{className:"flex items-center justify-center h-full",children:"加载中..."}):e.jsx(G,{run:u,hasError:!!p.error})});const j=s=>i.navigate({sel:s});return e.jsxs("div",{"data-testid":"batch-view",className:"h-full flex flex-col bg-background border rounded-lg shadow-sm overflow-hidden",children:[e.jsx(B,{title:"zapply batch"}),e.jsxs("div",{"data-testid":"batch-overview",className:"flex-none px-4 py-2 border-b border-border flex items-center gap-3 text-sm text-muted-foreground flex-wrap",children:[e.jsx(I,{variant:L[t.status]??"default",children:t.status}),e.jsxs("span",{children:["第 ",Number(t.currentBatchIndex??0)+1,"/",(Array.isArray(t.batches)?t.batches.length:0)||"?"," 批"]}),e.jsxs("span",{children:[l.completed,"/",m," 完成"]}),Number.isFinite(Number(t.parallelism))&&e.jsxs("span",{children:["并行度: ",t.parallelism]}),e.jsxs("span",{children:["🔄 ",l.running," 运行中"]}),e.jsxs("span",{children:["❌ ",l.failed," 失败"]}),e.jsxs("span",{children:["⏸️ ",l.parked," parked"]}),g.data&&e.jsx("button",{type:"button","aria-pressed":d,onClick:()=>N(s=>!s),className:`px-2 py-0.5 text-xs rounded-md border transition-colors ${d?"bg-primary text-primary-foreground border-primary":"border-border hover:bg-accent"}`,children:"执行计划"}),e.jsxs("span",{className:"ml-auto inline-flex items-center gap-1.5 text-xs font-mono",children:[t.front&&e.jsx(V,{tone:"info",children:e.jsx("span",{className:"max-w-40 truncate",title:t.front,children:t.front})}),e.jsxs("span",{children:["run: ",(u==null?void 0:u.id)??"-"," · 只读"]})]})]}),e.jsx("div",{className:"flex-none px-4 py-1.5 border-b border-border flex items-center gap-2",children:T.map(s=>e.jsx("button",{type:"button",onClick:()=>n(s),className:`px-3 py-1 text-xs rounded-md ${c===s?"bg-primary text-primary-foreground":"border border-border hover:bg-accent"}`,children:D[s]},s))}),e.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:e.jsx(o.Suspense,{fallback:e.jsx("div",{className:"flex items-center justify-center h-full",children:"加载中..."}),children:e.jsxs("div",{"data-testid":`batch-subview-${c}`,className:"h-full",children:[c==="graph"&&e.jsx(z,{graph:w.data??{changes:[],batches:[],conflicts:[]},selectedChange:x,onSelectChange:j}),c==="checkpoint"&&e.jsx(P,{state:t,selectedChange:x,onSelectChange:j})]})})}),g.data&&d&&e.jsxs("div",{className:"flex-none border-t border-border px-6 py-3 max-h-48 overflow-y-auto",children:[e.jsxs("h4",{className:"text-xs font-medium text-muted-foreground mb-2 flex items-center gap-1",children:[r("file-text","h-3 w-3")," 执行计划 plan.md(只读)"]}),e.jsx("div",{className:"prose dark:prose-invert max-w-none text-xs bg-card border rounded-lg p-3",children:e.jsx(S,{remarkPlugins:[R],children:g.data})})]}),e.jsx("footer",{"data-testid":"batch-logs",className:"h-48 shrink-0 overflow-auto border-t border-border px-6 py-2",children:e.jsx("div",{className:"text-xs font-mono space-y-1",children:(k.data??[]).slice(-20).reverse().map((s,E)=>e.jsxs("div",{className:U(s.level),children:[e.jsxs("span",{className:"text-muted-foreground/60",children:["[",new Date(s.timestamp).toLocaleTimeString(),"]"]}),s.changeName&&e.jsxs("span",{className:"text-info ml-2",children:["[",s.changeName,"]"]}),e.jsx("span",{className:"ml-2",children:s.message})]},E))})})]})}export{H as default};
@@ -1 +0,0 @@
1
- import{j as e}from"./index-Co7MWSFf.js";function x({state:c,selectedChange:r,onSelectChange:a}){const t=c.changes.filter(s=>s.checkpoint&&s.status==="running");return e.jsxs("div",{className:"flex h-full",children:[e.jsxs("aside",{className:"w-80 border-r border-border overflow-y-auto p-4",children:[e.jsx("h3",{className:"text-sm font-medium mb-3",children:"执行中的变更"}),e.jsxs("div",{className:"space-y-2",children:[t.length===0&&e.jsx("p",{className:"text-sm text-muted-foreground",children:"暂无执行中的变更"}),t.map(s=>e.jsxs("div",{onClick:()=>a(r===s.name?null:s.name),className:`p-3 rounded-lg border cursor-pointer transition-colors ${r===s.name?"border-primary bg-primary/5":"border-border hover:border-primary/50"}`,children:[e.jsx("div",{className:"font-medium text-sm",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground mt-1",children:[s.checkpoint.completedTasks,"/",s.checkpoint.totalTasks," 任务"]})]},s.name))]})]}),e.jsx("main",{className:"flex-1 overflow-y-auto p-6",children:r&&t.find(s=>s.name===r)?e.jsxs("div",{children:[e.jsx("h3",{className:"text-lg font-semibold mb-4",children:r}),e.jsx("div",{className:"space-y-3",children:Array.from({length:t.find(s=>s.name===r).checkpoint.totalTasks}).map((s,n)=>{const d=t.find(l=>l.name===r),i=n<d.checkpoint.completedTasks,o=n===d.checkpoint.currentTaskIndex;return e.jsx("div",{className:`p-4 rounded-lg border ${i?"border-success/30 bg-success/5":o?"border-info/30 bg-info/5":"border-border bg-card"}`,children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:`w-6 h-6 rounded-full flex items-center justify-center text-xs ${i?"bg-success text-success-foreground":o?"bg-info text-info-foreground":"bg-muted text-muted-foreground"}`,children:i?"✓":o?"↻":n+1}),e.jsxs("div",{className:"flex-1",children:[e.jsx("div",{className:`text-sm ${i?"line-through text-muted-foreground":"font-medium"}`,children:o?d.checkpoint.currentTask:`任务 #${n+1}`}),o&&e.jsx("div",{className:"text-xs text-info mt-1",children:"执行中..."})]})]})},n)})})]}):e.jsx("div",{className:"flex items-center justify-center h-full text-muted-foreground",children:"选择一个变更查看任务进度"})})]})}export{x as default};