@baique/pi-web-sky 0.1.40 → 0.1.41

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 (60) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +6 -6
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/react-loadable-manifest.json +2 -2
  6. package/.next/required-server-files.js +1 -1
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/_global-error.html +1 -1
  10. package/.next/server/app/_global-error.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  15. package/.next/server/app/_not-found.html +1 -1
  16. package/.next/server/app/_not-found.rsc +2 -2
  17. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  18. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  19. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  20. package/.next/server/app/api/agent/running/route.js +1 -1
  21. package/.next/server/app/api/app-update/route.js +1 -1
  22. package/.next/server/app/api/boards/[id]/reconcile/route.js +1 -1
  23. package/.next/server/app/api/boards/[id]/route.js +1 -1
  24. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  25. package/.next/server/app/api/task-cards/[id]/route.js +1 -1
  26. package/.next/server/app/api/task-cards/route.js +1 -1
  27. package/.next/server/app/api/task-scheduler/status/route.js +1 -1
  28. package/.next/server/app/api/tasks/[id]/board/route.js +1 -1
  29. package/.next/server/app/api/tasks/[id]/route.js +1 -1
  30. package/.next/server/app/index.html +1 -1
  31. package/.next/server/app/index.rsc +4 -4
  32. package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
  33. package/.next/server/app/index.segments/_full.segment.rsc +4 -4
  34. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  35. package/.next/server/app/page.js +2 -2
  36. package/.next/server/app/page_client-reference-manifest.js +1 -1
  37. package/.next/server/app-paths-manifest.json +6 -6
  38. package/.next/server/chunks/4226.js +2 -2
  39. package/.next/server/chunks/7128.js +1 -1
  40. package/.next/server/chunks/861.js +1 -1
  41. package/.next/server/middleware-build-manifest.js +1 -1
  42. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  43. package/.next/server/pages/404.html +1 -1
  44. package/.next/server/pages/500.html +1 -1
  45. package/.next/server/server-reference-manifest.json +1 -1
  46. package/.next/static/chunks/{6582.efef0ed269bacae2.js → 6582.fb2c709abc2c5981.js} +1 -1
  47. package/.next/static/chunks/752.a05a2904b96af4d0.js +1 -0
  48. package/.next/static/chunks/app/{layout-702d3c97d297c42d.js → layout-2bec2662143a3d1b.js} +1 -1
  49. package/.next/static/chunks/app/{page-fd18462c3c937a50.js → page-e38c6cf3174fa143.js} +2 -2
  50. package/.next/static/chunks/{webpack-d17b4dde91b96c63.js → webpack-b4924d2a22ad3650.js} +1 -1
  51. package/.next/trace +8 -43
  52. package/.next/trace-build +1 -1
  53. package/lib/board-reconcile.ts +0 -1
  54. package/lib/board-types.ts +7 -2
  55. package/lib/task-card-store.test.mjs +16 -1
  56. package/lib/task-card-store.ts +11 -0
  57. package/package.json +1 -1
  58. package/.next/static/chunks/752.f41a9dcb0e6548eb.js +0 -1
  59. /package/.next/static/{12RFLqhiUZG8Sj49T1KKQ → 8V884w_cp5HEp_rRpjnCR}/_buildManifest.js +0 -0
  60. /package/.next/static/{12RFLqhiUZG8Sj49T1KKQ → 8V884w_cp5HEp_rRpjnCR}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[752],{24456:(e,t,r)=>{r.d(t,{l:()=>c});var n=r(95155),i=r(12115),a=r(12669);let s=null,o=null,l=null;function d(e){s?.(e),s=null,l?.unmount(),o?.remove(),l=null,o=null}function c(e){return new Promise(t=>{s&&d(!1),s=t;let r=o;r||(r=document.createElement("div"),document.body.appendChild(r),o=r);let i=l;i||(l=i=(0,a.createRoot)(r)),i.render((0,n.jsx)(u,{opts:e,onClose:d}))})}function u({opts:e,onClose:t}){let[r]=(0,i.useState)(!1);return(0,n.jsx)("div",{role:"alertdialog","aria-modal":"true",onPointerDown:()=>t(!1),style:{position:"fixed",inset:0,zIndex:2e3,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0,0,0,0.35)"},children:(0,n.jsxs)("div",{onPointerDown:e=>e.stopPropagation(),style:{width:360,maxWidth:"calc(100vw - 48px)",borderRadius:"var(--bubble-radius, 14px)",background:"var(--board-card-glass)",backdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",WebkitBackdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",border:"1px solid color-mix(in srgb, var(--border) 60%, transparent)",boxShadow:"0 10px 40px -12px rgba(0,0,0,0.4)",color:"var(--text)",padding:"16px 18px",display:"flex",flexDirection:"column",gap:10},children:[e.title&&(0,n.jsx)("div",{style:{fontSize:14,fontWeight:600},children:e.title}),(0,n.jsx)("div",{style:{fontSize:12.5,lineHeight:1.6,color:"var(--text-muted)",whiteSpace:"pre-wrap"},children:e.message}),(0,n.jsxs)("div",{style:{display:"flex",justifyContent:"flex-end",gap:8,marginTop:6},children:[(0,n.jsx)("button",{type:"button",onClick:()=>t(!1),style:{border:"none",background:"color-mix(in srgb, var(--border) 30%, transparent)",color:"var(--text-muted)",borderRadius:6,padding:"5px 14px",fontSize:12,cursor:"pointer"},children:e.cancelText??"取消"}),(0,n.jsx)("button",{type:"button",disabled:r,onClick:()=>t(!0),style:{border:"none",background:!1===e.danger?"var(--accent)":"color-mix(in srgb, #ef4444 85%, transparent)",color:"#fff",borderRadius:6,padding:"5px 14px",fontSize:12,fontWeight:600,cursor:"pointer"},children:e.confirmText??"删除"})]})]})})}},56314:(e,t,r)=>{r.d(t,{Lv:()=>a,Nc:()=>i,ZY:()=>s});var n=r(12115);let i=(0,n.createContext)(null);function a(){return(0,n.useContext)(i)?.boardId??null}function s(){return(0,n.useContext)(i)?.defaultCwd??null}},60752:(e,t,r)=>{r.r(t),r.d(t,{SessionCanvas:()=>I});var n=r(95155),i=r(12115),a=r(37206),s=r(81750),o=r(96793),l=r(39247),d=r(64536),c=r(71309),u=r(34229),p=r(84876),h=r(56314),x=r(24456);function g({editor:e,inputRef:t,nodes:r}){let{t:a}=(0,l.s)(),{setHighlight:o}=(0,c.kz)(),{setViewport:d,getViewport:u,getNodes:p}=(0,s.VH)(),[h,x]=(0,i.useState)(""),[f,b]=(0,i.useState)(!1),[v,y]=(0,i.useState)(-1),m=(0,i.useRef)(null),k=t??m,w=(0,i.useMemo)(()=>{let e=r??p(),t=[];for(let r of e)if("session-card"===r.type){let e=String(r.data.title??"").trim();e&&t.push({nodeId:r.id,kind:"session-card",text:e})}else if("sticky-note"===r.type||"text"===r.type){let e=String(r.data.text??"").trim();e&&t.push({nodeId:r.id,kind:"sticky-note",text:e})}return t},[r,p]),j=(0,i.useMemo)(()=>{let e=h.trim().toLowerCase().split(/\s+/).filter(Boolean);return 0===e.length?[]:w.filter(t=>{let r=t.text.toLowerCase();return e.every(e=>r.includes(e))}).map(t=>({item:t,snippet:function(e,t,r=44){let n=t.trim().toLowerCase(),i=e.toLowerCase().indexOf(n);if(i<0)return e.length>r?`${e.slice(0,r)}…`:e;let a=Math.max(0,i-Math.floor((r-n.length)/2)),s=Math.min(e.length,a+r),o=a>0?"…":"",l=s<e.length?"…":"";return`${o}${e.slice(a,s)}${l}`}(t.text,e[0])}))},[w,h]),S=(0,i.useCallback)(e=>{let t=j[e];if(!t)return;let r=p().find(e=>e.id===t.item.nodeId);if(!r)return;let n=r.measured?.width??340,i=r.measured?.height??160,a=r.position.x+n/2,s=r.position.y+i/2,l=u();d({x:-a*l.zoom+window.innerWidth/2,y:-s*l.zoom+window.innerHeight/2,zoom:l.zoom},{duration:300}),o(t.item.nodeId),y(e)},[j,p,u,d,o]),C=(0,i.useCallback)(()=>{0!==j.length&&S((v+1)%j.length)},[j,v,S]),I=(0,i.useCallback)(()=>{0!==j.length&&S((v-1+j.length)%j.length)},[j,v,S]),z=(0,i.useCallback)(e=>{"Enter"===e.key||"ArrowDown"===e.key?(e.preventDefault(),C()):"ArrowUp"===e.key?(e.preventDefault(),I()):"Escape"===e.key&&(e.preventDefault(),f?b(!1):(x(""),y(-1),k.current?.blur()))},[f,C,I,k]),R=f&&h.trim().length>0;return(0,n.jsxs)("div",{style:{position:"relative",width:280},"data-testid":"board-search",children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,height:34,padding:"0 8px 0 10px",borderRadius:999,background:"var(--board-card-glass)",backdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",WebkitBackdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",border:"1px solid color-mix(in srgb, var(--border) 60%, transparent)",boxShadow:"0 2px 12px -6px rgba(0,0,0,0.18)"},children:[(0,n.jsxs)("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",style:{color:"var(--text-dim)",flexShrink:0},children:[(0,n.jsx)("circle",{cx:"11",cy:"11",r:"8"}),(0,n.jsx)("path",{d:"m21 21-4.35-4.35"})]}),(0,n.jsx)("input",{ref:k,value:h,onChange:e=>{x(e.target.value),y(-1),b(!0)},onKeyDown:z,onFocus:()=>{h.trim()&&b(!0)},onBlur:()=>b(!1),onPointerDown:e=>e.stopPropagation(),placeholder:a("boards.searchPlaceholder"),spellCheck:!1,"aria-label":a("boards.searchPlaceholder"),style:{flex:1,minWidth:0,border:"none",outline:"none",background:"transparent",color:"var(--text)",fontSize:12.5,fontFamily:"inherit"}}),h&&(0,n.jsx)("button",{type:"button",title:a("common.close"),onPointerDown:e=>e.stopPropagation(),onClick:()=>{x(""),y(-1),k.current?.focus()},style:{flexShrink:0,display:"flex",alignItems:"center",justifyContent:"center",width:18,height:18,padding:0,border:"none",borderRadius:"50%",background:"color-mix(in srgb, var(--border) 35%, transparent)",color:"var(--text-muted)",cursor:"pointer",fontSize:11,lineHeight:1},children:"\xd7"})]}),R&&(0,n.jsx)("div",{"data-testid":"board-search-dropdown",onPointerDown:e=>e.stopPropagation(),style:{position:"absolute",top:40,left:0,right:0,zIndex:60,maxHeight:320,overflowY:"auto",borderRadius:12,padding:4,background:"var(--board-card-glass)",backdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",WebkitBackdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",border:"1px solid color-mix(in srgb, var(--border) 60%, transparent)",boxShadow:"0 4px 18px -6px rgba(0,0,0,0.28)"},children:0===j.length?(0,n.jsx)("div",{style:{padding:"8px 12px",fontSize:12,color:"var(--text-muted)"},children:a("boards.searchNoResults")}):j.map((e,t)=>{let r=t===v;return(0,n.jsxs)("button",{type:"button",onMouseDown:e=>e.preventDefault(),onClick:()=>S(t),style:{display:"flex",alignItems:"center",gap:8,width:"100%",padding:"6px 10px",border:"none",borderRadius:8,background:r?"color-mix(in srgb, var(--accent) 14%, transparent)":"transparent",color:"var(--text)",fontSize:12.5,textAlign:"left",cursor:"pointer"},children:[(0,n.jsx)("span",{"aria-hidden":!0,style:{flexShrink:0,display:"inline-flex",color:r?"var(--accent)":"var(--text-dim)"},children:"session-card"===e.item.kind?(0,n.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,n.jsx)("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"})}):(0,n.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,n.jsx)("path",{d:"M15.5 3H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h14a2 2 0 0 0 2-2V8.5L15.5 3z"}),(0,n.jsx)("path",{d:"M15 3v6h6"})]})}),(0,n.jsx)("span",{style:{minWidth:0,flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.snippet}),(0,n.jsx)("span",{style:{flexShrink:0,fontSize:10,color:"var(--text-dim)"},children:"session-card"===e.item.kind?a("boards.searchSession"):a("boards.searchNote")})]},e.item.nodeId)})})]})}let f=new Set(["waiting_model","running_tools","running_command"]);function b({boardName:e,isTaskBoard:t,reloading:r,onReload:a,onClear:o,onAddSessionCard:l,wallSettings:d,updateWallSettings:u,nodes:p,taskCardStatus:h}){let{setViewport:x,getViewport:g,getNodes:k,screenToFlowPosition:w}=(0,s.VH)(),{setHighlight:j}=(0,c.kz)(),[S,C]=(0,i.useState)(!1),[I,z]=(0,i.useState)(!1),R=(0,i.useMemo)(()=>{let e=[];for(let t of p)if("session-card"===t.type){let r=t.data;if(!(void 0!==r.phase&&f.has(r.phase))||!r.sessionId)continue;let n=(r.title??"").trim();if(!n)continue;e.push({nodeId:t.id,label:n,kind:"session"})}else if("task-card"===t.type){let r=t.data;if(!r.cardId)continue;let n=h[r.cardId];if(!n||"running"!==n.execStatus)continue;let i=(r.name??"").trim();if(!i)continue;let a="number"==typeof r.number&&r.number>0?`#${r.number} `:"";e.push({nodeId:t.id,label:`${a}${i}`,kind:"task"})}return e},[p,h]);return(0,n.jsxs)("div",{style:{position:"absolute",top:12,left:12,zIndex:40,display:"flex",flexDirection:"column",alignItems:"flex-start",gap:6,maxWidth:"min(420px, calc(100% - 320px))"},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:4,height:36,padding:"0 6px 0 12px",borderRadius:999,background:"var(--board-card-glass)",backdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",WebkitBackdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",border:"1px solid color-mix(in srgb, var(--border) 60%, transparent)",boxShadow:"0 2px 12px -6px rgba(0,0,0,0.18)",color:"var(--text)"},children:[(0,n.jsxs)("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",style:{flexShrink:0,opacity:.7},children:[(0,n.jsx)("rect",{x:"3",y:"3",width:"7",height:"7",rx:"1.5"}),(0,n.jsx)("rect",{x:"14",y:"3",width:"7",height:"7",rx:"1.5"}),(0,n.jsx)("rect",{x:"3",y:"14",width:"7",height:"7",rx:"1.5"}),(0,n.jsx)("rect",{x:"14",y:"14",width:"7",height:"7",rx:"1.5"})]}),(0,n.jsx)("span",{title:e,style:{fontSize:12.5,fontWeight:600,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:150},children:e||"看板"}),(0,n.jsx)("button",{type:"button",onClick:a,title:"刷新画布","aria-label":"刷新画布",style:{...v,cursor:r?"default":"pointer"},...r?{}:y(),children:(0,n.jsxs)("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",style:{animation:r?"spin 0.8s linear infinite":void 0},children:[(0,n.jsx)("path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"}),(0,n.jsx)("path",{d:"M21 3v5h-5"})]})}),(0,n.jsx)("span",{style:{flexShrink:0,width:1,height:18,background:"color-mix(in srgb, var(--border) 70%, transparent)",margin:"0 2px"}}),(0,n.jsx)("button",{type:"button",onClick:()=>{let e=document.querySelector(".react-flow__pane"),t=e?.getBoundingClientRect();t&&l(w({x:t.left+t.width/2,y:t.top+t.height/2}))},title:"新建会话","aria-label":"新建会话",style:v,...y(),children:(0,n.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:(0,n.jsx)("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"})})}),(0,n.jsx)("button",{type:"button",onClick:()=>C(e=>!e),title:"磨砂调节","aria-label":"磨砂调节","aria-expanded":S,style:{...v,color:S?"var(--accent)":"var(--text-muted)",background:S?"color-mix(in srgb, var(--accent) 12%, transparent)":void 0},...S?{}:y(),children:(0,n.jsxs)("svg",{width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,n.jsx)("path",{d:"M12 3v2"}),(0,n.jsx)("path",{d:"M12 19v2"}),(0,n.jsx)("path",{d:"M5 7l1.5 1.5"}),(0,n.jsx)("path",{d:"M17.5 15.5L19 17"}),(0,n.jsx)("path",{d:"M3 12h2"}),(0,n.jsx)("path",{d:"M19 12h2"}),(0,n.jsx)("path",{d:"M5 17l1.5-1.5"}),(0,n.jsx)("path",{d:"M17.5 8.5L19 7"}),(0,n.jsx)("circle",{cx:"12",cy:"12",r:"3"})]})}),(0,n.jsx)("button",{type:"button",onClick:o,title:t?"清空画布(任务卡片保留)":"清空画布","aria-label":"清空画布",style:v,...y(),children:(0,n.jsxs)("svg",{width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,n.jsx)("path",{d:"M18 6 6 18"}),(0,n.jsx)("path",{d:"m6 6 12 12"})]})}),(0,n.jsxs)("button",{type:"button",onClick:()=>z(e=>!e),title:I?"收起执行队列":"展开执行队列","aria-label":I?"收起执行队列":"展开执行队列","aria-expanded":I,style:{...v,color:I?"var(--accent)":"var(--text-muted)",background:I?"color-mix(in srgb, var(--accent) 12%, transparent)":void 0},...I?{}:y(),children:[(0,n.jsx)("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",style:{transform:I?"rotate(180deg)":"none",transition:"transform 0.15s"},children:(0,n.jsx)("polyline",{points:"6 9 12 15 18 9"})}),R.length>0&&(0,n.jsx)("span",{style:{minWidth:14,height:14,padding:"0 4px",boxSizing:"border-box",display:"inline-flex",alignItems:"center",justifyContent:"center",borderRadius:999,fontSize:9.5,fontWeight:700,lineHeight:1,background:"color-mix(in srgb, var(--accent) 18%, transparent)",color:"var(--accent)"},children:R.length})]})]}),S&&(0,n.jsx)("div",{style:m,children:(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,n.jsx)("span",{style:{width:14,flexShrink:0,textAlign:"center",fontSize:12},children:"❄"}),(0,n.jsx)("span",{style:{flexShrink:0,fontSize:12.5},children:"磨砂"}),(0,n.jsx)("input",{type:"range",min:0,max:30,value:d.scrimBlur,onChange:e=>u({scrimBlur:Number(e.target.value)}),style:{flex:1,minWidth:120,accentColor:"var(--accent)",cursor:"pointer"},"aria-label":"磨砂强度"}),(0,n.jsxs)("span",{style:{width:30,flexShrink:0,textAlign:"right",fontSize:11,color:"var(--text)"},children:[d.scrimBlur,"px"]})]})}),I&&(0,n.jsxs)("div",{style:{...m,maxHeight:320,overflowY:"auto",padding:6,width:300},children:[(0,n.jsxs)("div",{style:{padding:"6px 10px 4px",fontSize:11,fontWeight:700,color:"var(--text)",letterSpacing:.2},children:["执行队列",(0,n.jsxs)("span",{style:{marginLeft:8,fontSize:10,fontWeight:500,color:"var(--text-meta)"},children:[R.length," 个运行中"]})]}),0===R.length?(0,n.jsx)("div",{style:{padding:"10px 12px",fontSize:12,color:"var(--text-muted)"},children:"画面中没有运行中的卡片"}):R.map(e=>(0,n.jsxs)("button",{type:"button",onClick:()=>(e=>{let t=k().find(t=>t.id===e);if(!t)return;let r=t.measured?.width??t.style?.width??340,n=t.measured?.height??t.style?.height??160,i=t.position.x+r/2,a=t.position.y+n/2,s=g();x({x:-i*s.zoom+window.innerWidth/2,y:-a*s.zoom+window.innerHeight/2,zoom:s.zoom},{duration:300}),j(e)})(e.nodeId),title:"点击定位到卡片",style:{display:"flex",alignItems:"center",gap:8,width:"100%",padding:"6px 10px",border:"none",borderRadius:8,background:"transparent",color:"var(--text)",fontSize:12.5,textAlign:"left",cursor:"pointer"},onMouseEnter:e=>{e.currentTarget.style.background="color-mix(in srgb, var(--accent) 10%, transparent)"},onMouseLeave:e=>{e.currentTarget.style.background="transparent"},children:[(0,n.jsx)("span",{"aria-hidden":!0,style:{flexShrink:0,color:"var(--accent)",display:"inline-flex"},children:"session"===e.kind?(0,n.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,n.jsx)("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"})}):(0,n.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,n.jsx)("path",{d:"M9 11l3 3L22 4"}),(0,n.jsx)("path",{d:"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"})]})}),(0,n.jsx)("span",{style:{flexShrink:0,width:6,height:6,borderRadius:"50%",background:"#10b981",boxShadow:"0 0 6px 1px rgba(16,185,129,0.6)",animation:"pulse 1.6s ease-in-out infinite"}}),(0,n.jsx)("span",{style:{minWidth:0,flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.label}),(0,n.jsx)("span",{style:{flexShrink:0,fontSize:10,color:"var(--text-dim)"},children:"session"===e.kind?"会话":"任务"})]},e.nodeId))]})]})}let v={display:"flex",alignItems:"center",justifyContent:"center",gap:2,width:30,height:30,padding:0,flexShrink:0,border:"none",background:"transparent",color:"var(--text-muted)",cursor:"pointer",borderRadius:999,transition:"background 0.12s, color 0.12s"};function y(){return{onMouseEnter:e=>{e.currentTarget.style.background="color-mix(in srgb, var(--text) 8%, transparent)"},onMouseLeave:e=>{e.currentTarget.style.background="transparent"}}}let m={display:"flex",flexDirection:"column",gap:6,padding:"8px 10px",borderRadius:12,background:"var(--board-card-glass)",backdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",WebkitBackdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",border:"1px solid color-mix(in srgb, var(--border) 60%, transparent)",boxShadow:"0 2px 12px -6px rgba(0,0,0,0.18)",color:"var(--text)",whiteSpace:"nowrap"},k={dispatch:"正在派发",resume:"续会话",review:"AI 审核中",blockcheck:"阻塞巡检"};function w({nodes:e}){let{setViewport:t,getViewport:r,getNodes:a}=(0,s.VH)(),{setHighlight:o}=(0,c.kz)(),[l,d]=(0,i.useState)(null),[u,p]=(0,i.useState)(!1),h=(0,i.useRef)(null);(0,i.useEffect)(()=>{let e=!1,t=async()=>{try{let t=await fetch("/api/task-scheduler/status",{cache:"no-store"});if(!t.ok)return;let r=await t.json();e||d(r.status)}catch{}};t();let r=setInterval(t,2500);return()=>{e=!0,clearInterval(r)}},[]),(0,i.useEffect)(()=>{if(!u)return;let e=e=>{h.current&&!h.current.contains(e.target)&&p(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[u]);let x=(0,i.useMemo)(()=>{let t=new Map;for(let r of e){let e=r.data;e.cardId&&t.set(e.cardId,r.id)}return t},[e]),g=!!l?.activity,f=l?l.activity?k[l.activity.kind]??"工作中":l.running.length>0?`运行中 ${l.running.length}`:l.queue.review.length>0?`待审核 ${l.queue.review.length}`:null:null;return(0,n.jsxs)("div",{ref:h,style:{position:"absolute",top:12,right:12,zIndex:40,display:"flex",flexDirection:"column",alignItems:"flex-end"},children:[(0,n.jsxs)("button",{type:"button",onClick:()=>p(e=>!e),"aria-expanded":u,"aria-label":"调度器状态",title:"调度器状态",style:{display:"flex",alignItems:"center",gap:7,height:36,padding:"0 6px 0 14px",borderRadius:999,background:"var(--board-card-glass)",backdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",WebkitBackdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",border:"1px solid color-mix(in srgb, var(--border) 60%, transparent)",boxShadow:"0 2px 12px -6px rgba(0,0,0,0.18)",color:"var(--text)",cursor:"pointer",whiteSpace:"nowrap"},children:[(0,n.jsx)("span",{"aria-hidden":!0,style:{width:8,height:8,borderRadius:"50%",flexShrink:0,background:g?"#f59e0b":(l?.running.length??0)>0?"#10b981":"var(--text-dim)",boxShadow:g?"0 0 6px 1px rgba(245,158,11,0.6)":(l?.running.length??0)>0?"0 0 6px 1px rgba(16,185,129,0.5)":"none",animation:g?"pulse 1.6s ease-in-out infinite":void 0}}),(0,n.jsx)("span",{style:{fontSize:12.5,fontWeight:700,color:"var(--text)"},children:"调度器"}),l?.started===!1&&(0,n.jsx)("span",{style:{fontSize:10.5,color:"var(--text-muted)"},children:"未启动"}),f&&(0,n.jsx)("span",{style:{fontSize:11,fontWeight:600,color:"var(--text-muted)"},children:f}),(0,n.jsx)("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",style:{color:"var(--text-muted)",transform:u?"rotate(180deg)":"none",transition:"transform 0.15s",flexShrink:0},children:(0,n.jsx)("polyline",{points:"6 9 12 15 18 9"})})]}),u&&(0,n.jsxs)("div",{style:{display:"flex",flexDirection:"column",marginTop:6,padding:"8px 0",width:340,borderRadius:14,background:"var(--board-card-glass)",backdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",WebkitBackdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",border:"1px solid color-mix(in srgb, var(--border) 60%, transparent)",boxShadow:"0 8px 30px -8px rgba(0,0,0,0.3)",color:"var(--text)"},children:[(0,n.jsxs)("div",{style:{padding:"2px 14px 8px",borderBottom:"1px solid color-mix(in srgb, var(--border) 50%, transparent)",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[(0,n.jsx)("span",{style:{fontSize:13,fontWeight:700,color:"var(--text)"},children:"调度器"}),(0,n.jsx)("span",{style:{fontSize:10.5,color:"var(--text-muted)"},children:l?.started===!1?"未启动":g?"工作中":"休眠"})]}),(0,n.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:6,padding:"10px 12px 8px"},children:[(0,n.jsx)(j,{label:"派发",active:l?.activity?.kind==="dispatch"||l?.activity?.kind==="resume",activityLabel:l?.activity&&("dispatch"===l.activity.kind||"resume"===l.activity.kind)?k[l.activity.kind]:void 0}),(0,n.jsx)(j,{label:"审查",active:l?.activity?.kind==="review"||l?.activity?.kind==="blockcheck",activityLabel:l?.activity&&("review"===l.activity.kind||"blockcheck"===l.activity.kind)?k[l.activity.kind]:void 0})]}),l&&(0,n.jsx)(S,{title:"任务队列",groups:[{label:"运行中",color:"#10b981",cards:l.running},{label:"待审核",color:"#f59e0b",cards:l.queue.review},{label:"待派发",color:"var(--accent)",cards:l.queue.dispatchable},{label:"等回复",color:"var(--text-muted)",cards:l.queue.waitingReply},{label:"失败",color:"#ef4444",cards:l.queue.failed}],nodeIdByCardId:x,onLocate:e=>{let n=a().find(t=>t.id===e);if(!n)return;let i=n.measured?.width??n.style?.width??380,s=n.measured?.height??n.style?.height??270,l=n.position.x+i/2,d=n.position.y+s/2,c=r();t({x:-l*c.zoom+window.innerWidth/2,y:-d*c.zoom+window.innerHeight/2,zoom:c.zoom},{duration:300}),o(e)}}),!l&&(0,n.jsx)("div",{style:{padding:"10px 14px",fontSize:12,color:"var(--text-muted)"},children:"加载中…"})]})]})}function j({label:e,active:t,activityLabel:r}){return(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,padding:"7px 8px",borderRadius:8,border:"1px solid color-mix(in srgb, var(--border) 55%, transparent)",background:t?"color-mix(in srgb, var(--accent) 8%, transparent)":"transparent"},children:[(0,n.jsx)("span",{"aria-hidden":!0,style:{width:7,height:7,borderRadius:"50%",flexShrink:0,background:t?"#f59e0b":"var(--text-dim)",boxShadow:t?"0 0 6px 1px rgba(245,158,11,0.6)":"none",animation:t?"pulse 1.6s ease-in-out infinite":void 0}}),(0,n.jsxs)("div",{style:{display:"flex",flexDirection:"column",minWidth:0},children:[(0,n.jsx)("span",{style:{fontSize:12,fontWeight:700,color:"var(--text)",lineHeight:1.2},children:e}),(0,n.jsx)("span",{style:{fontSize:10,fontWeight:600,color:"var(--text-muted)",whiteSpace:"nowrap"},children:r??"休眠"})]})]})}function S({title:e,groups:t,nodeIdByCardId:r,onLocate:i}){let a=t.filter(e=>e.cards.length>0),s=t.reduce((e,t)=>e+t.cards.length,0);return(0,n.jsxs)("div",{style:{padding:"8px 12px 4px"},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"0 2px 4px"},children:[(0,n.jsx)("span",{style:{fontSize:10.5,fontWeight:700,color:"var(--text-muted)",letterSpacing:.3},children:e}),(0,n.jsxs)("span",{style:{fontSize:10.5,fontWeight:600,color:"var(--text-dim)"},children:["共 ",s]})]}),0===a.length?(0,n.jsx)("div",{style:{fontSize:12,color:"var(--text-dim)",padding:"2px 2px 6px"},children:"队列空闲"}):a.map(e=>(0,n.jsxs)("div",{style:{marginBottom:6},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:5,padding:"0 2px 3px"},children:[(0,n.jsx)("span",{style:{width:6,height:6,borderRadius:"50%",background:e.color,flexShrink:0}}),(0,n.jsx)("span",{style:{fontSize:10.5,fontWeight:700,color:"var(--text-muted)"},children:e.label}),(0,n.jsx)("span",{style:{fontSize:10,color:"var(--text-dim)"},children:e.cards.length})]}),(0,n.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:1},children:[e.cards.slice(0,4).map(e=>{let t=r.get(e.id);return(0,n.jsxs)("button",{type:"button",onClick:()=>{t&&i(t)},disabled:!t,title:t?"点击定位到本看板任务卡":"该任务不在当前看板",style:{display:"flex",alignItems:"center",gap:6,width:"100%",padding:"4px 6px",border:"none",borderRadius:6,background:"transparent",color:"var(--text)",fontSize:12,textAlign:"left",cursor:t?"pointer":"default",opacity:t?1:.55},children:[(0,n.jsxs)("span",{style:{minWidth:0,flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:[(0,n.jsxs)("span",{style:{color:"var(--text-muted)",fontWeight:600},children:["#",e.number]})," ",e.name]}),!t&&(0,n.jsx)("span",{style:{flexShrink:0,fontSize:9.5,color:"var(--text-dim)"},children:"其它看板"})]},e.id)}),e.cards.length>4&&(0,n.jsxs)("div",{style:{padding:"2px 6px",fontSize:10,color:"var(--text-dim)"},children:["…共 ",e.cards.length," 个"]})]})]},e.label))]})}let C=(0,a.default)(()=>Promise.all([r.e(6126),r.e(5004),r.e(277),r.e(6380),r.e(6582)]).then(r.bind(r,86582)).then(e=>e.CanvasStage),{loadableGenerated:{webpack:()=>[86582]},ssr:!1,loading:()=>(0,n.jsx)(p.N,{label:"正在加载画布…"})});function I({boardId:e,taskId:t,newSessionCwd:r,onRunningSessionIdsChange:a,wallSettings:p,updateWallSettings:f}){let{t:v}=(0,l.s)(),{isDark:y}=(0,o.D)(),m=(0,d.C6)({boardId:e,taskId:t,newSessionCwd:r}),k=!!(m.board?.taskId??t),j=(0,i.useMemo)(()=>({getStatus:e=>m.taskCardStatus[e],register:m.registerVisibleTaskCard,unregister:m.unregisterVisibleTaskCard}),[m.taskCardStatus,m.registerVisibleTaskCard,m.unregisterVisibleTaskCard]),S=(0,i.useRef)(null);(0,i.useEffect)(()=>{let e=e=>{if(!(e.ctrlKey||e.metaKey)||"f"!==e.key.toLowerCase())return;let t=document.activeElement;if(t&&t!==S.current){let e=t.tagName;if("INPUT"===e||"TEXTAREA"===e||t.isContentEditable)return}e.preventDefault(),S.current?.focus(),S.current?.select()};return window.addEventListener("keydown",e,!0),()=>window.removeEventListener("keydown",e,!0)},[]);let[z,R]=(0,i.useState)(!1),W=(0,i.useCallback)(async()=>{if(!z){R(!0);try{m.loadSessionSummaries(),await m.reloadCanvas()}finally{setTimeout(()=>R(!1),800)}}},[m,z]);return(0,i.useEffect)(()=>{a?.(new Set(m.running?.runningSessionIds??[]))},[m.running,a]),(0,n.jsx)("div",{"data-glass-scope":"board",style:{height:"100%",display:"flex",flexDirection:"column",overflow:"hidden",position:"relative"},children:(0,n.jsx)(u.I,{value:"board",children:(0,n.jsx)(h.Nc.Provider,{value:{boardId:m.board?.id??null,defaultCwd:r??null},children:(0,n.jsx)(c.eR,{children:(0,n.jsx)(s.Ln,{children:(0,n.jsxs)(d.x_,{value:j,children:[!m.loading&&(0,n.jsx)(b,{boardName:m.board?.name??"",isTaskBoard:k,reloading:z,onReload:()=>void W(),onClear:()=>{(0,x.l)({message:k?v("boards.clearTaskConfirm"):v("boards.clearConfirm"),confirmText:v("boards.clear")}).then(e=>{e&&m.clearBoard()})},onAddSessionCard:e=>m.addNewSessionCard(e),wallSettings:p,updateWallSettings:f,nodes:m.nodes,taskCardStatus:m.taskCardStatus}),(0,n.jsx)(w,{nodes:m.nodes}),!m.loading&&(0,n.jsx)("div",{style:{position:"absolute",top:12,left:"50%",transform:"translateX(-50%)",zIndex:40},children:(0,n.jsx)(g,{inputRef:S,nodes:m.nodes})}),(0,n.jsx)(C,{board:m,isDark:y})]})})})})})})}},64536:(e,t,r)=>{r.d(t,{C6:()=>p,VX:()=>f,ZI:()=>d,eo:()=>c,rD:()=>g,x_:()=>x});var n=r(12115),i=r(67816),a=r(81750),s=r(15934),o=r(24456),l=r(41463);let d=340,c=160,u=l.env.NEXT_PUBLIC_SYNC_WS??`${"https:"===window.location.protocol?"wss":"ws"}://${window.location.host}`;function p({boardId:e,taskId:t,newSessionCwd:r}){let[l,h]=(0,n.useState)(null),[x,g]=(0,n.useState)(null),[f,b]=(0,n.useState)(!1),[v,y]=(0,n.useState)([]),[m,k]=(0,n.useState)([]),[w,j]=(0,n.useState)(null),S=(0,n.useRef)(null),C=(0,n.useRef)(null),I=(0,n.useRef)(null),z=(0,n.useRef)(!1);z.current=f;let R=(0,n.useRef)(e);R.current=e;let W=(0,n.useRef)(null);W.current=l;let L=(0,n.useRef)(t??null);L.current=t??null;let A=(0,n.useRef)(r);A.current=r;let M=(0,n.useMemo)(()=>`${u}/connect`,[]);(0,n.useEffect)(()=>{let t=new i.m({url:M,name:e,forceSyncInterval:!1});S.current=t,j(t);let r=t.document.getMap("nodes"),n=t.document.getMap("edges");C.current=r,I.current=n;let a=e=>{let t=e?new Set(Array.from(e.keys.keys())):null;y(e=>{let n=new Set(e.filter(e=>e.selected).map(e=>e.id)),i=new Set(e.filter(e=>e.dragging).map(e=>e.id)),a=new Map(e.map(e=>[e.id,e]));return Array.from(r.values()).map(e=>{if(t&&!t.has(e.id)){let t=a.get(e.id);if(t)return t}let r={...e};return delete r.selected,delete r.dragging,n.has(e.id)&&(r.selected=!0),i.has(e.id)&&(r.dragging=!0),r})})},s=()=>k(Array.from(n.values())),o=()=>b(!0);return r.observe(a),n.observe(s),t.on("synced",o),a(),s(),()=>{r.unobserve(a),n.unobserve(s),t.off("synced",o),t.destroy(),S.current=null,C.current=null,I.current=null,b(!1)}},[M,e]);let E=(0,n.useCallback)(async()=>{try{let t=await fetch(`/api/boards/${encodeURIComponent(e)}`,{cache:"no-store"});if(!t.ok)return void g(`HTTP ${t.status}`);let r=await t.json();h(r.board)}catch(e){g(e instanceof Error?e.message:String(e))}},[e]);(0,n.useEffect)(()=>{E()},[E]);let T=(0,n.useCallback)(async()=>{try{await fetch(`/api/boards/${encodeURIComponent(e)}/reconcile`,{method:"POST"})}catch{}await E()},[e,E]),[B,D]=(0,n.useState)(()=>globalThis.__piRunningSnapshot??null),$=(0,n.useCallback)(e=>{globalThis.__piRunningSnapshot=e,D(e)},[]),H=(0,n.useRef)(!1),P=(0,n.useRef)(new Set),[_,N]=(0,n.useState)({}),F=(0,n.useCallback)(e=>{P.current.add(e)},[]),U=(0,n.useCallback)(e=>{P.current.delete(e)},[]);(0,n.useEffect)(()=>{let e=!1,t=null,r=async()=>{if(!e&&!H.current&&"visible"===document.visibilityState){H.current=!0;try{let t=Array.from(P.current),r=t.length>0&&R.current?`?boardId=${encodeURIComponent(R.current)}&cardIds=${encodeURIComponent(t.join(","))}`:"",n=await fetch(`/api/agent/running${r}`,{cache:"no-store"});if(!n.ok)return;let i=await n.json();if(e)return;$(i);let a=e=>{N(t=>{let r=e(t);if(r===t)return t;let n=Object.keys(t),i=Object.keys(r);return n.length===i.length&&n.every(e=>r[e]===t[e])?t:r})};i.taskCards.length>0?a(e=>{let t=!1,r={...e};for(let e of i.taskCards)r[e.cardId]!==e&&(r[e.cardId]=e,t=!0);return t?r:e}):t.length>0&&a(e=>{let r=!1,n={...e};for(let e of t)n[e]&&(delete n[e],r=!0);return r?n:e});let s=C.current;if(!s)return;for(let e of Array.from(s.values())){if("session-card"!==e.type)continue;let t=e.data;if(!t.sessionId)continue;let r=i.states[t.sessionId],n=i.runningSessionIds.includes(t.sessionId);if(n&&r){let n=r.phase??"waiting_model",i=r.startedAt?Date.now()-r.startedAt:0;(t.phase!==n||t.runningMs!==i||0!==t.endedAt)&&s.set(e.id,{...e,data:{...t,phase:n,runningMs:i,endedAt:0}})}else n||"idle"===t.phase||s.set(e.id,{...e,data:{...t,phase:"idle",runningMs:0,endedAt:0}})}}catch{}finally{H.current=!1}}},n=()=>{e||(t=setTimeout(async()=>{await r(),n()},2500))};r(),n();let i=()=>{"visible"===document.visibilityState&&r()};return document.addEventListener("visibilitychange",i),()=>{e=!0,t&&clearTimeout(t),document.removeEventListener("visibilitychange",i)}},[$]);let[V,O]=(0,n.useState)({}),q=(0,n.useRef)({});q.current=V;let K=(0,n.useRef)(!1),X=(0,n.useCallback)(async()=>{if(!K.current){K.current=!0;try{let e=await fetch("/api/sessions",{cache:"no-store"});if(!e.ok)return;let t=await e.json(),r={};for(let e of t.sessions)r[e.id]={title:e.name??e.firstMessage??"Untitled",messageCount:e.messageCount??0,projectName:e.projectKey??e.projectRoot??"",lastReply:e.lastReply??"",lastActivityAt:e.modified?Date.parse(e.modified):0};O(r)}catch{}finally{K.current=!1}}},[]);(0,n.useEffect)(()=>{let e,t=!1,r=async()=>{await X(),t||(e=setTimeout(r,1e4))};r();let n=()=>{"visible"===document.visibilityState&&(e&&clearTimeout(e),r())};return document.addEventListener("visibilitychange",n),()=>{t=!0,e&&clearTimeout(e),document.removeEventListener("visibilitychange",n)}},[X]),(0,n.useEffect)(()=>{let e=C.current;if(e&&z.current&&0!==Object.keys(V).length)for(let t of Array.from(e.values())){if("session-card"!==t.type)continue;let r=t.data,n=V[r.sessionId];n&&(r.title!==n.title||r.lastReply!==n.lastReply||r.messageCount!==n.messageCount||r.lastActivityAt!==n.lastActivityAt)&&e.set(t.id,{...t,data:{...r,title:n.title,lastReply:n.lastReply,messageCount:n.messageCount,lastActivityAt:n.lastActivityAt}})}},[V,f]);let Y=(0,n.useCallback)(e=>{let t=C.current;if(!t)return;let r=e.filter(e=>"select"===e.type);r.length&&y(e=>(0,a._0)(r,e));let n=e.filter(e=>"select"!==e.type);if(0===n.length)return;let i=Array.from(t.values()),s=(0,a._0)(n,i);for(let e of n)if("add"===e.type||"replace"===e.type)t.set(e.item.id,e.item);else if("remove"===e.type&&t.has(e.id)){t.delete(e.id);let r=I.current;if(r)for(let t of Array.from(r.values()))(t.source===e.id||t.target===e.id)&&r.delete(t.id)}else if("position"===e.type||"dimensions"===e.type){let r=s.find(t=>t.id===e.id);if(r){let{dragging:n,...i}=r;t.set(e.id,i)}}},[]),Z=(0,n.useCallback)(e=>{let t=I.current;if(!t)return;let r=Array.from(t.values()),n=(0,a.zW)(e,r);for(let r of e)if("add"===r.type||"replace"===r.type)t.set(r.item.id,r.item);else if("remove"===r.type&&t.has(r.id)){let e=t.get(r.id);if(e&&e.data?.execLink||e&&e.data?.taskLink)continue;t.delete(r.id)}else{let e=n.find(e=>e.id===r.id);e&&t.set(r.id,e)}},[]),G=(0,n.useCallback)(e=>{let t=I.current;if(!t)return;let r=`edge-${e.source}-${e.target}-${Date.now()}`;t.set(r,{id:r,source:e.source,target:e.target,type:"default",markerEnd:{type:"arrowclosed"},style:{strokeWidth:1.5,stroke:"#8b8fa3"}})},[]),J=(0,n.useCallback)(e=>{let t=C.current;if(!t)return;let r=crypto.randomUUID(),n=crypto.randomUUID(),i=e?.x??60,a=e?.y??60,s=i-420+t.size%3*24,o=a-300+t.size%3*24;t.set(n,{id:n,type:"session-card",position:{x:s,y:o},style:{width:840,height:600},data:{sessionId:r,title:"",projectName:"",messageCount:0,lastReply:"",phase:"idle",runningMs:0,endedAt:0,lastActivityAt:0,stale:!1,expanded:!0,cwd:A.current??"",taskId:L.current??"",w:840,h:600,expandedW:0,expandedH:0,collapsedW:0,collapsedH:0}})},[]),Q=(0,n.useCallback)((e,t,r)=>{let n=C.current;if(!n)return;let i=q.current[e],a=`session-${e}`,o=L.current??W.current?.taskId??null;n.set(a,{id:a,type:"session-card",position:{x:t,y:r},style:{width:d,height:c},data:{sessionId:e,title:i?.title??"Untitled",projectName:i?.projectName??"",messageCount:i?.messageCount??0,lastReply:i?.lastReply??"",lastActivityAt:i?.lastActivityAt??0,phase:"idle",runningMs:0,endedAt:0,stale:!1,expanded:!1,taskId:o??"",w:d,h:c,expandedW:0,expandedH:0,collapsedW:0,collapsedH:0}}),o&&(async()=>{try{let t=await fetch(`/api/tasks/${encodeURIComponent(o)}`,{cache:"no-store"}),r=await t.json(),n=r.task?.sessionIds??[];n.includes(e)||(await fetch(`/api/tasks/${encodeURIComponent(o)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionIds:[...n,e]})}),(0,s.PH)(e))}catch(t){console.warn(`[board] 拖入会话归属任务失败 ${e}:`,t instanceof Error?t.message:t)}finally{let e=C.current;if(e?.has(a)){let t=e.get(a);t&&t.data?.taskId&&e.set(a,{...t,data:{...t.data,taskId:""}})}}})()},[]),ee=(0,n.useCallback)(async e=>{let t=C.current,r=I.current;if(t&&r)if("session-card"===e.type){let n=e.data;if(!n.sessionId||n.cwd){for(let n of(t.delete(e.id),Array.from(r.values())))(n.source===e.id||n.target===e.id)&&r.delete(n.id);return}if(!await (0,o.l)({message:"移除该会话卡片?\n会话本身将保留在会话列表中,可随时重新拖入。"}))return;for(let n of(t.delete(e.id),Array.from(r.values())))(n.source===e.id||n.target===e.id)&&r.delete(n.id)}else if("task-card"===e.type){let n=e.data;if(!n.cardId)return void t.delete(e.id);if(!await (0,o.l)({message:"删除该任务卡?\n将删除任务卡、依赖线与执行会话连线;关联的执行会话保留。此操作不可撤销。"}))return;for(let n of(t.delete(e.id),Array.from(r.values())))(n.source===e.id||n.target===e.id)&&r.delete(n.id);fetch(`/api/task-cards/${encodeURIComponent(n.cardId)}`,{method:"DELETE"}).catch(e=>console.warn(`[board] 删除任务卡 ${n.cardId} 异常`,e))}else t.delete(e.id)},[]),et=(0,n.useCallback)((e,t)=>{let r=C.current;if(!r)return;let n=r.get(e);n&&r.set(e,{...n,...t})},[]),er=(0,n.useCallback)((e,t)=>{let r=C.current;if(!r||!e||e===t)return;let n=r.get(e);if(!n)return;r.delete(e),r.set(t,{...n,id:t});let i=I.current;if(i)for(let r of Array.from(i.values()))(r.source===e||r.target===e)&&i.set(r.id,{...r,source:r.source===e?t:r.source,target:r.target===e?t:r.target})},[]),en=(0,n.useCallback)(e=>{let t=I.current;t&&t.set(e.id,e)},[]),ei=(0,n.useCallback)(e=>{let t=C.current;t&&t.set(e.id,e)},[]),ea=(0,n.useCallback)(async()=>{let e=C.current,t=I.current;if(!e||!t)return;let r=!!(L.current??W.current?.taskId);for(let n of Array.from(e.values()).filter(e=>!r||"session-card"!==e.type))for(let r of(e.delete(n.id),Array.from(t.values())))(r.source===n.id||r.target===n.id)&&t.delete(r.id)},[]),es=!f;return(0,n.useMemo)(()=>({board:l,loading:es,error:x,running:B,runningCount:B?.runningSessionIds.length??0,taskCardStatus:_,registerVisibleTaskCard:F,unregisterVisibleTaskCard:U,nodes:v,edges:m,onNodesChange:Y,onEdgesChange:Z,onConnect:G,provider:w,ready:f,addSessionNode:Q,addNewSessionCard:J,deleteNodeWithConfirm:ee,updateNode:et,normalizeNodeId:er,addEdge:en,addNode:ei,clearBoard:ea,sessionTitles:V,loadSessionSummaries:X,reloadCanvas:T}),[l,es,x,B,v,m,Y,Z,G,w,f,Q,J,ee,et,er,en,ei,ea,V,X,T,E,_,F,U])}let h=(0,n.createContext)(null);function x({value:e,children:t}){return(0,n.createElement)(h.Provider,{value:e},t)}function g(e){let t=(0,n.useContext)(h);return e&&t?t.getStatus(e):void 0}function f(){let e=(0,n.useContext)(h);return{register:e?.register??(()=>{}),unregister:e?.unregister??(()=>{})}}},71309:(e,t,r)=>{r.d(t,{eR:()=>o,kz:()=>l,u:()=>a});var n=r(95155),i=r(12115);let a="0 0 0 3px var(--accent), 0 0 24px color-mix(in srgb, var(--accent) 45%, transparent)",s=(0,i.createContext)(null);function o({children:e}){let[t,r]=(0,i.useState)(null),a=(0,i.useRef)(null),l=(0,i.useCallback)(e=>{a.current&&clearTimeout(a.current),a.current=null,r(e),e&&(a.current=setTimeout(()=>r(null),1800))},[]);return(0,i.useEffect)(()=>()=>{a.current&&clearTimeout(a.current)},[]),(0,n.jsx)(s.Provider,{value:{highlightId:t,setHighlight:l},children:e})}function l(){let e=(0,i.useContext)(s);return e||{highlightId:null,setHighlight:()=>{}}}}}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7177],{57788:(e,o,r)=>{"use strict";r.d(o,{PwaRegistration:()=>n});var t=r(12115);function n(){return(0,t.useEffect)(()=>{if(!("serviceWorker"in navigator))return;let e=()=>{let e=`/sw.js?v=${encodeURIComponent("0.1.40")}`;navigator.serviceWorker.register(e,{scope:"/",updateViaCache:"none"}).catch(e=>{console.error("Failed to register the Pi Web service worker:",e)})};return"complete"===document.readyState?void e():(window.addEventListener("load",e,{once:!0}),()=>window.removeEventListener("load",e))},[]),null}},66872:()=>{},81759:(e,o,r)=>{Promise.resolve().then(r.bind(r,57788)),Promise.resolve().then(r.t.bind(r,83683,23)),Promise.resolve().then(r.t.bind(r,84559,23)),Promise.resolve().then(r.t.bind(r,66872,23))},83683:e=>{e.exports={style:{fontFamily:"'Noto Sans Mono', 'Noto Sans Mono Fallback'",fontStyle:"normal"},className:"__className_66b8ca",variable:"__variable_66b8ca"}},84559:()=>{}},e=>{e.O(0,[7389,7513,8441,3794,7358],()=>e(e.s=81759)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7177],{57788:(e,o,r)=>{"use strict";r.d(o,{PwaRegistration:()=>n});var t=r(12115);function n(){return(0,t.useEffect)(()=>{if(!("serviceWorker"in navigator))return;let e=()=>{let e=`/sw.js?v=${encodeURIComponent("0.1.41")}`;navigator.serviceWorker.register(e,{scope:"/",updateViaCache:"none"}).catch(e=>{console.error("Failed to register the Pi Web service worker:",e)})};return"complete"===document.readyState?void e():(window.addEventListener("load",e,{once:!0}),()=>window.removeEventListener("load",e))},[]),null}},66872:()=>{},81759:(e,o,r)=>{Promise.resolve().then(r.bind(r,57788)),Promise.resolve().then(r.t.bind(r,83683,23)),Promise.resolve().then(r.t.bind(r,84559,23)),Promise.resolve().then(r.t.bind(r,66872,23))},83683:e=>{e.exports={style:{fontFamily:"'Noto Sans Mono', 'Noto Sans Mono Fallback'",fontStyle:"normal"},className:"__className_66b8ca",variable:"__variable_66b8ca"}},84559:()=>{}},e=>{e.O(0,[7389,7513,8441,3794,7358],()=>e(e.s=81759)),_N_E=e.O()}]);