@baique/pi-web-sky 0.1.43 → 0.1.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +14 -14
- package/.next/build-manifest.json +3 -3
- package/.next/react-loadable-manifest.json +3 -3
- package/.next/required-server-files.js +1 -1
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +3 -3
- package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/app-update/route.js +1 -1
- package/.next/server/app/api/board-assets/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/board-assets/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/git/status/route.js +1 -1
- package/.next/server/app/api/models/route.js +1 -1
- package/.next/server/app/api/project-trust/route.js +1 -1
- package/.next/server/app/api/terminal/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +5 -5
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +5 -5
- package/.next/server/app/index.segments/_full.segment.rsc +5 -5
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/page.js +2 -2
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +14 -14
- package/.next/server/chunks/402.js +6 -5
- package/.next/server/chunks/6525.js +2 -2
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/static/chunks/{752.b808ee0d01f76cbf.js → 752.395b1b6b288c0c89.js} +1 -1
- package/.next/static/chunks/9272.7b010df4c209349b.js +1 -0
- package/.next/static/chunks/app/{layout-bd9248a30e97ea3b.js → layout-19e02b79476a6b19.js} +1 -1
- package/.next/static/chunks/app/{page-3090c3cd6482d779.js → page-e4d01ab7584fd052.js} +1 -1
- package/.next/static/chunks/{webpack-8807c91e1b44a5e7.js → webpack-7e7a6ac5aadb603f.js} +1 -1
- package/.next/static/css/4a609fb185e7cff1.css +1 -0
- package/.next/trace +7 -42
- package/.next/trace-build +1 -1
- package/lib/card-emoji.test.mjs +2 -2
- package/lib/session-index-scanner.test.mjs +30 -4
- package/lib/session-index-scanner.ts +34 -15
- package/lib/session-reader.project.test.mjs +86 -0
- package/lib/session-reader.ts +75 -54
- package/lib/task-store.ts +1 -1
- package/lib/worktree.test.mjs +17 -1
- package/lib/worktree.ts +9 -0
- package/package.json +1 -1
- package/.next/static/chunks/7128.c3cb215470efb551.js +0 -1
- package/.next/static/css/eb9207b60f094f9b.css +0 -1
- /package/.next/static/{69e74OJnYIa0YtjFRWIBS → mi_AqqMn6gfU7PwatOjlB}/_buildManifest.js +0 -0
- /package/.next/static/{69e74OJnYIa0YtjFRWIBS → mi_AqqMn6gfU7PwatOjlB}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-7e7a6ac5aadb603f.js"/><script src="/_next/static/chunks/4bd1b696-8a4ab4fdf0ae305a.js" async=""></script><script src="/_next/static/chunks/3794-d29203733ca4633c.js" async=""></script><script src="/_next/static/chunks/main-app-dd2385a1a5a588df.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-7e7a6ac5aadb603f.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[57121,[],\"\"]\n3:I[74581,[],\"\"]\n4:I[90484,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[90484,[],\"ViewportBoundary\"]\na:I[90484,[],\"MetadataBoundary\"]\nc:I[27123,[],\"default\",1]\n7:X\n0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4624]},\"$undefined\",\"$undefined\",4624]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$7\"]},null,false,\"$7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"mi_AqqMn6gfU7PwatOjlB\"}\n7:C\n9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n6:null\nb:[]\n"])</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[752],{15934:(e,t,r)=>{function n(e,t){window.dispatchEvent(new CustomEvent("pi-web:board-open-file",{detail:{sessionId:e,filePath:t}}))}function i(e,t){window.dispatchEvent(new CustomEvent("pi-web:board-session-forked",{detail:{sessionId:e,newSessionId:t}}))}function s(e,t){window.dispatchEvent(new CustomEvent("pi-web:board-session-created",{detail:{sessionId:e,nodeId:t}}))}function a(e){window.dispatchEvent(new CustomEvent("pi-web:board-session-deleted",{detail:{sessionId:e}}))}function o(e,t){window.dispatchEvent(new CustomEvent("pi-web:board-session-renamed",{detail:{sessionId:e,name:t}}))}function l(e){window.dispatchEvent(new CustomEvent("pi-web:board-cwd-switch",{detail:{cwd:e}}))}function d(e,t){window.dispatchEvent(new CustomEvent("pi-web:board-agent-end",{detail:{sessionId:e,sessionName:t}}))}function c(e,t){window.dispatchEvent(new CustomEvent("pi-web:board-attention-needed",{detail:{sessionId:e,...t}}))}function u(){window.dispatchEvent(new CustomEvent("pi-web:board-tasks-changed",{detail:{}}))}r.d(t,{$T:()=>l,Ho:()=>d,PH:()=>s,PK:()=>n,Qp:()=>a,RF:()=>u,Wd:()=>i,sV:()=>c,z6:()=>o})},24456:(e,t,r)=>{r.d(t,{l:()=>c});var n=r(95155),i=r(12115),s=r(12669);let a=null,o=null,l=null;function d(e){a?.(e),a=null,l?.unmount(),o?.remove(),l=null,o=null}function c(e){return new Promise(t=>{a&&d(!1),a=t;let r=o;r||(r=document.createElement("div"),document.body.appendChild(r),o=r);let i=l;i||(l=i=(0,s.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??"删除"})]})]})})}},25535:(e,t,r)=>{r.d(t,{U:()=>o,u:()=>a});var n=r(95155),i=r(12115);let s=(0,i.createContext)(null);function a({value:e,children:t}){return(0,n.jsx)(s.Provider,{value:e,children:t})}function o(){let e=(0,i.useContext)(s);return e||{updateNode:()=>{},updateNodeDebounced:()=>{},deleteNode:()=>{},normalizeNodeId:()=>{},deleteEdge:()=>{},addEdge:()=>{},updateEdge:()=>{},addNode:()=>{},setSnapLines:()=>{},boardId:null,isTaskBoard:!1}}},56314:(e,t,r)=>{r.d(t,{Lv:()=>s,Nc:()=>i,ZY:()=>a});var n=r(12115);let i=(0,n.createContext)(null);function s(){return(0,n.useContext)(i)?.boardId??null}function a(){return(0,n.useContext)(i)?.defaultCwd??null}},60752:(e,t,r)=>{r.r(t),r.d(t,{SessionCanvas:()=>R});var n=r(95155),i=r(12115),s=r(37206),a=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),f=r(71459);function g({editor:e,inputRef:t,nodes:r,onViewportSave:s}){let{t:o}=(0,l.s)(),{setHighlight:d}=(0,c.kz)(),{setCenter:u,getViewport:p,getNodes:h}=(0,a.VH)(),[x,b]=(0,i.useState)(""),[y,v]=(0,i.useState)(!1),[w,k]=(0,i.useState)(-1),[j,S]=(0,i.useState)(null),C=(0,i.useRef)(null),I=t??C,R=(0,i.useRef)(null),E=(0,i.useMemo)(()=>{let e=r??h(),t=[];for(let r of e){if("session-card"!==r.type)continue;let e=String(r.data.sessionId??"");e&&t.push(e)}return t},[r,h]).join(",");(0,i.useEffect)(()=>{let e=x.trim();if(!e)return void S(null);if(!E)return void S([]);let t=setTimeout(()=>{R.current?.abort();let t=new AbortController;R.current=t,fetch(`/api/search?q=${encodeURIComponent(e)}&limit=30&sessionIds=${encodeURIComponent(E)}`,{signal:t.signal}).then(e=>e.ok?e.json():null).then(e=>{e&&S((e.results??[]).filter(e=>"session"===e.kind&&e.result).map(e=>{let t=e.result.session;return{sessionId:t.id,title:t.name||(t.firstMessage||"").slice(0,50)||t.id.slice(0,12),snippet:e.result.snippet??"",titleMatch:!!e.result.titleMatch}}))}).catch(()=>S([]))},350);return()=>{clearTimeout(t),R.current?.abort()}},[x,E]);let z=(0,i.useMemo)(()=>{let e=r??h(),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||"text-node"===r.type){let e=String(r.data.text??"").trim();e&&t.push({nodeId:r.id,kind:"sticky-note",text:e})}return t},[r,h]),T=(0,i.useMemo)(()=>{let e=x.trim().toLowerCase().split(/\s+/).filter(Boolean);return 0===e.length?[]:z.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 s=Math.max(0,i-Math.floor((r-n.length)/2)),a=Math.min(e.length,s+r),o=s>0?"…":"",l=a<e.length?"…":"";return`${o}${e.slice(s,a)}${l}`}(t.text,e[0])}))},[z,x]),A=(0,i.useCallback)(e=>{let t=h().find(t=>t.id===e);if(!t)return;let r=t.measured?.width??340,n=t.measured?.height??160;Promise.resolve(u(t.position.x+r/2,t.position.y+n/2,{zoom:p().zoom})).then(()=>{s?.(p())}),d(e)},[h,p,u,d,s]),L=T.length+(j?.length??0),M=(0,i.useCallback)(e=>{if(e<T.length){let t=T[e];t&&A(t.item.nodeId)}else{let t=j?.[e-T.length];if(!t)return;let r=h().find(e=>"session-card"===e.type&&String(e.data.sessionId??"")===t.sessionId)?.id;if(!r)return;A(r)}k(e)},[T,j,A,h]),W=(0,i.useCallback)(()=>{0!==L&&M((w+1)%L)},[L,w,M]),$=(0,i.useCallback)(()=>{0!==L&&M((w-1+L)%L)},[L,w,M]),D=(0,i.useCallback)(e=>{"Enter"===e.key||"ArrowDown"===e.key?(e.preventDefault(),W()):"ArrowUp"===e.key?(e.preventDefault(),$()):"Escape"===e.key&&(e.preventDefault(),y?v(!1):(b(""),k(-1),I.current?.blur()))},[y,W,$,I]),P=y&&x.trim().length>0,N=null===j,B=T.length>0,H=(j?.length??0)>0;return(0,n.jsxs)("div",{style:{position:"relative",width:320},"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,...f.r,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:I,value:x,onChange:e=>{b(e.target.value),k(-1),v(!0)},onKeyDown:D,onFocus:()=>{x.trim()&&v(!0)},onBlur:()=>v(!1),onPointerDown:e=>e.stopPropagation(),placeholder:o("boards.searchPlaceholder"),spellCheck:!1,"aria-label":o("boards.searchPlaceholder"),style:{flex:1,minWidth:0,border:"none",outline:"none",background:"transparent",color:"var(--text)",fontSize:12.5,fontFamily:"inherit"}}),x&&(0,n.jsx)("button",{type:"button",title:o("common.close"),onPointerDown:e=>e.stopPropagation(),onClick:()=>{b(""),k(-1),I.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"})]}),P&&(0,n.jsxs)("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,...f.r,border:"1px solid color-mix(in srgb, var(--border) 60%, transparent)",boxShadow:"0 4px 18px -6px rgba(0,0,0,0.28)"},children:[!B&&!H&&!N&&(0,n.jsx)("div",{style:{padding:"8px 12px",fontSize:12,color:"var(--text-muted)"},children:o("boards.searchNoResults")}),N&&(0,n.jsx)("div",{style:{padding:"8px 12px",fontSize:12,color:"var(--text-muted)"},children:o("search.indexing")}),B&&(0,n.jsxs)(n.Fragment,{children:[H&&(0,n.jsx)(m,{text:o("boards.searchGroupNodes")}),T.map((e,t)=>{let r=t===w;return(0,n.jsxs)("button",{type:"button",onMouseDown:e=>e.preventDefault(),onClick:()=>M(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?o("boards.searchSession"):o("boards.searchNote")})]},e.item.nodeId)})]}),H&&(0,n.jsxs)(n.Fragment,{children:[B&&(0,n.jsx)(m,{text:o("boards.searchGroupBody")}),j.map((e,t)=>{let r,i,s=T.length+t,a=s===w;return(0,n.jsxs)("button",{type:"button",onMouseDown:e=>e.preventDefault(),onClick:()=>M(s),style:{display:"flex",flexDirection:"column",gap:2,width:"100%",padding:"6px 10px",border:"none",borderRadius:8,background:a?"color-mix(in srgb, var(--accent) 14%, transparent)":"transparent",color:"var(--text)",fontSize:12.5,textAlign:"left",cursor:"pointer"},children:[(0,n.jsxs)("span",{style:{display:"flex",alignItems:"center",gap:6,minWidth:0},children:[e.titleMatch&&(0,n.jsx)("span",{style:{flexShrink:0,fontSize:9,fontFamily:"var(--font-mono)",color:"var(--accent)",background:"color-mix(in srgb, var(--accent) 12%, transparent)",border:"1px solid color-mix(in srgb, var(--accent) 30%, transparent)",borderRadius:3,padding:"0 4px",lineHeight:"15px"},children:o("search.title")}),(0,n.jsx)("span",{style:{minWidth:0,flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontWeight:500},children:e.title}),(0,n.jsx)("span",{style:{flexShrink:0,fontSize:10,color:"var(--text-dim)"},children:o("boards.searchBodyTag")})]}),e.snippet&&(0,n.jsx)("span",{style:{minWidth:0,fontSize:11,color:"var(--text-muted)",lineHeight:1.5,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:(r=e.snippet.split(/([\[\]])/g),i=!1,r.map((e,t)=>"["===e?(i=!0,null):"]"===e?(i=!1,null):e?i?(0,n.jsx)("mark",{style:{background:"color-mix(in srgb, var(--accent) 22%, transparent)",color:"var(--text)",borderRadius:2},children:e},t):(0,n.jsx)("span",{children:e},t):null))})]},e.sessionId)})]})]})]})}function m({text:e}){return(0,n.jsx)("div",{style:{padding:"6px 12px 2px",fontSize:10,fontWeight:700,color:"var(--text-dim)",textTransform:"uppercase",letterSpacing:.5},children:e})}function b({boardName:e,isTaskBoard:t,reloading:r,onReload:s,onClear:o,onAddSessionCard:l,wallSettings:d,updateWallSettings:c}){let{screenToFlowPosition:u}=(0,a.VH)(),[p,h]=(0,i.useState)(!1);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:{...f.r,display:"flex",alignItems:"center",gap:4,height:36,padding:"0 6px 0 12px",borderRadius:999,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:220},children:e||"看板"}),(0,n.jsx)("button",{type:"button",onClick:s,title:"刷新画布","aria-label":"刷新画布",style:{...y,cursor:r?"default":"pointer"},...r?{}:v(),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(u({x:t.left+t.width/2,y:t.top+t.height/2}))},title:"新建会话","aria-label":"新建会话",style:y,...v(),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:()=>h(e=>!e),title:"磨砂调节","aria-label":"磨砂调节","aria-expanded":p,style:{...y,color:p?"var(--accent)":"var(--text-muted)",background:p?"color-mix(in srgb, var(--accent) 12%, transparent)":void 0},...p?{}:v(),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:y,...v(),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"})]})})]}),p&&(0,n.jsx)("div",{style:w,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=>c({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"]})]})})]})}let y={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 v(){return{onMouseEnter:e=>{e.currentTarget.style.background="color-mix(in srgb, var(--text) 8%, transparent)"},onMouseLeave:e=>{e.currentTarget.style.background="transparent"}}}let w={...f.r,display:"flex",flexDirection:"column",gap:6,padding:"8px 10px",borderRadius:12,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 j({nodes:e,onViewportSave:t}){let{setCenter:r,getViewport:s,getNodes:o}=(0,a.VH)(),{setHighlight:l}=(0,c.kz)(),[d,u]=(0,i.useState)(null),[p,h]=(0,i.useState)(!1),x=(0,i.useRef)(null);(0,i.useEffect)(()=>{let e=!1,t=null,r=async()=>{try{let t=await fetch("/api/task-scheduler/status",{cache:"no-store"});if(!t.ok)return;let r=await t.json();e||u(r.status)}catch{}},n=async()=>{await r(),e||(t=setTimeout(n,2500))};return n(),()=>{e=!0,t&&clearTimeout(t)}},[]),(0,i.useEffect)(()=>{if(!p)return;let e=e=>{x.current&&!x.current.contains(e.target)&&h(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[p]);let g=(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]),m=!!d?.activity,b=d?d.activity?k[d.activity.kind]??"工作中":d.running.length>0?`运行中 ${d.running.length}`:d.queue.review.length>0?`待审核 ${d.queue.review.length}`:null:null;return(0,n.jsxs)("div",{ref:x,style:{position:"absolute",top:12,right:12,zIndex:40,display:"flex",flexDirection:"column",alignItems:"flex-end"},children:[(0,n.jsxs)("button",{type:"button",onClick:()=>h(e=>!e),"aria-expanded":p,"aria-label":"调度器状态",title:"调度器状态",style:{...f.r,display:"flex",alignItems:"center",gap:7,height:36,padding:"0 6px 0 14px",borderRadius:999,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:m?"#f59e0b":(d?.running.length??0)>0?"#10b981":"var(--text-dim)",boxShadow:m?"0 0 6px 1px rgba(245,158,11,0.6)":(d?.running.length??0)>0?"0 0 6px 1px rgba(16,185,129,0.5)":"none",animation:m?"pulse 1.6s ease-in-out infinite":void 0}}),(0,n.jsx)("span",{style:{fontSize:12.5,fontWeight:700,color:"var(--text)"},children:"调度器"}),d?.started===!1&&(0,n.jsx)("span",{style:{fontSize:10.5,color:"var(--text-muted)"},children:"未启动"}),d?.started===!0&&d?.leader===!1&&(0,n.jsx)("span",{style:{fontSize:10.5,color:"var(--text-muted)"},children:"跟随"}),b&&(0,n.jsx)("span",{style:{fontSize:11,fontWeight:600,color:"var(--text-muted)"},children:b}),(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:p?"rotate(180deg)":"none",transition:"transform 0.15s",flexShrink:0},children:(0,n.jsx)("polyline",{points:"6 9 12 15 18 9"})})]}),p&&(0,n.jsxs)("div",{style:{...f.r,display:"flex",flexDirection:"column",marginTop:6,padding:"8px 0",width:340,borderRadius:14,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:d?.started===!1?"未启动":d?.started===!0&&d?.leader===!1?"跟随(非调度者)":m?"工作中":"休眠"})]}),(0,n.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:6,padding:"10px 12px 8px"},children:[(0,n.jsx)(S,{label:"派发",active:d?.activity?.kind==="dispatch"||d?.activity?.kind==="resume",activityLabel:d?.activity&&("dispatch"===d.activity.kind||"resume"===d.activity.kind)?k[d.activity.kind]:void 0}),(0,n.jsx)(S,{label:"审查",active:d?.activity?.kind==="review"||d?.activity?.kind==="blockcheck",activityLabel:d?.activity&&("review"===d.activity.kind||"blockcheck"===d.activity.kind)?k[d.activity.kind]:void 0})]}),d&&(0,n.jsx)(C,{title:"任务队列",groups:[{label:"运行中",color:"#10b981",cards:d.running},{label:"待审核",color:"#f59e0b",cards:d.queue.review},{label:"待派发",color:"var(--accent)",cards:d.queue.dispatchable},{label:"等回复",color:"var(--text-muted)",cards:d.queue.waitingReply},{label:"失败",color:"#ef4444",cards:d.queue.failed}],nodeIdByCardId:g,onLocate:e=>{let n=o().find(t=>t.id===e);if(!n)return;let i=n.measured?.width??n.style?.width??380,a=n.measured?.height??n.style?.height??270;Promise.resolve(r(n.position.x+i/2,n.position.y+a/2,{zoom:s().zoom})).then(()=>{t?.(s())}),l(e)}}),!d&&(0,n.jsx)("div",{style:{padding:"10px 14px",fontSize:12,color:"var(--text-muted)"},children:"加载中…"})]})]})}function S({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 C({title:e,groups:t,nodeIdByCardId:r,onLocate:i}){let s=t.filter(e=>e.cards.length>0),a=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:["共 ",a]})]}),0===s.length?(0,n.jsx)("div",{style:{fontSize:12,color:"var(--text-dim)",padding:"2px 2px 6px"},children:"队列空闲"}):s.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 I=(0,s.default)(()=>Promise.all([r.e(6126),r.e(5004),r.e(277),r.e(2666),r.e(3922),r.e(7128)]).then(r.bind(r,87128)).then(e=>e.CanvasStage),{loadableGenerated:{webpack:()=>[87128]},ssr:!1,loading:()=>(0,n.jsx)(p.N,{label:"正在加载画布…"})});function R({boardId:e,taskId:t,newSessionCwd:r,onRunningSessionIdsChange:s,wallSettings:p,updateWallSettings:f}){let{t:m}=(0,l.s)(),{isDark:y}=(0,o.D)(),v=(0,d.C6)({boardId:e,taskId:t,newSessionCwd:r}),w=!!(v.board?.taskId??t),k=(0,i.useMemo)(()=>({getStatus:e=>v.taskCardStatus[e],register:v.registerVisibleTaskCard,unregister:v.unregisterVisibleTaskCard}),[v.taskCardStatus,v.registerVisibleTaskCard,v.unregisterVisibleTaskCard]),S=(0,i.useMemo)(()=>({getRunning:e=>v.sessionRunning[e],getSummary:e=>v.sessionTitles[e]}),[v.sessionRunning,v.sessionTitles]),C=(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!==C.current){let e=t.tagName;if("INPUT"===e||"TEXTAREA"===e||t.isContentEditable)return}e.preventDefault(),C.current?.focus(),C.current?.select()};return window.addEventListener("keydown",e,!0),()=>window.removeEventListener("keydown",e,!0)},[]);let[E,z]=(0,i.useState)(!1),T=(0,i.useCallback)(async()=>{if(!E){z(!0);try{v.loadSessionSummaries(),await v.reloadCanvas()}finally{setTimeout(()=>z(!1),800)}}},[v,E]);return(0,i.useEffect)(()=>{s?.(new Set(v.running?.runningSessionIds??[]))},[v.running,s]),(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:v.board?.id??null,defaultCwd:r??null},children:(0,n.jsx)(c.eR,{children:(0,n.jsx)(a.Ln,{children:(0,n.jsx)(d.x_,{value:k,children:(0,n.jsxs)(d.XK,{value:S,children:[!v.loading&&(0,n.jsx)(b,{boardName:v.board?.name??"",isTaskBoard:w,reloading:E,onReload:()=>void T(),onClear:()=>{(0,x.l)({message:w?m("boards.clearTaskConfirm"):m("boards.clearConfirm"),confirmText:m("boards.clear")}).then(e=>{e&&v.clearBoard()})},onAddSessionCard:e=>v.addNewSessionCard(e),wallSettings:p,updateWallSettings:f}),(0,n.jsx)(j,{nodes:v.nodes,onViewportSave:v.saveViewport}),!v.loading&&(0,n.jsx)("div",{style:{position:"absolute",top:12,left:0,right:0,display:"flex",justifyContent:"center",pointerEvents:"none",zIndex:40},children:(0,n.jsx)("div",{style:{pointerEvents:"auto"},children:(0,n.jsx)(g,{inputRef:C,nodes:v.nodes,onViewportSave:v.saveViewport})})}),(0,n.jsx)(I,{board:v,isDark:y})]})})})})})})})}},64536:(e,t,r)=>{r.d(t,{C6:()=>x,Nz:()=>w,Uh:()=>k,VX:()=>b,XK:()=>v,ZI:()=>u,eo:()=>p,rD:()=>m,x_:()=>g});var n=r(12115),i=r(67816),s=r(44706),a=r(81750),o=r(15934),l=r(24456),d=r(94315),c=r(41463);let u=340,p=160,h=c.env.NEXT_PUBLIC_SYNC_WS??`${"https:"===window.location.protocol?"wss":"ws"}://${window.location.host}`;function x({boardId:e,taskId:t,newSessionCwd:r}){let[c,f]=(0,n.useState)(null),[g,m]=(0,n.useState)(null),[b,y]=(0,n.useState)(!1),[v,w]=(0,n.useState)([]),[k,j]=(0,n.useState)([]),[S,C]=(0,n.useState)({x:0,y:0,zoom:1}),[I,R]=(0,n.useState)(null),E=(0,n.useRef)(null),z=(0,n.useRef)(null),T=(0,n.useRef)(null),A=(0,n.useRef)(null),L=(0,n.useRef)(!1);L.current=b;let M=(0,n.useRef)(null),W=(0,n.useRef)(e);W.current=e;let $=(0,n.useRef)(new Set),D=(0,n.useRef)(null);D.current=c;let P=(0,n.useRef)(t??null);P.current=t??null;let N=(0,n.useRef)(r);N.current=r;let B=(0,n.useMemo)(()=>`${h}/connect`,[]);(0,n.useEffect)(()=>{let t=new i.m({url:B,name:e,forceSyncInterval:!1,flushDelay:500});E.current=t,R(t);let r=t.document.getMap("nodes"),n=t.document.getMap("edges"),a=t.document.getMap("view");z.current=r,T.current=n,A.current=a;let l=e=>{let t=e?new Set(Array.from(e.keys.keys())):null;if(e&&L.current){let t=null;for(let[n,i]of e.keys){if(i?.action!=="add")continue;let e=r.get(n);if(e?.type!=="session-card")continue;let s=e.data;s?.sessionId&&!s.cwd&&($.current.has(s.sessionId)||($.current.add(s.sessionId),t=t??s.sessionId))}t&&(0,o.PH)(t)}w(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)),s=ei.current,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};if(s.has(e.id)){let t=a.get(e.id);t&&(r.position=t.position)}return delete r.selected,delete r.dragging,n.has(e.id)&&(r.selected=!0),i.has(e.id)&&(r.dragging=!0),r})})},d=()=>j(Array.from(n.values())),c=()=>{let e=A.current;e&&C({x:e.get("x")??0,y:e.get("y")??0,zoom:e.get("zoom")??1})},u=()=>{c(),y(!0)};r.observe(l),n.observe(d),a.observe(c),t.on("synced",u),l(),d();let p=new s.ad([r,n],{captureTimeout:500,trackedOrigins:new Set([null])});return M.current=p,()=>{p.destroy(),M.current=null,r.unobserve(l),n.unobserve(d),a.unobserve(c),t.off("synced",u),t.flushPendingUpdates?.(),t.destroy(),E.current=null,z.current=null,T.current=null,A.current=null,y(!1)}},[B,e]);let H=(0,n.useCallback)(async()=>{try{let t=await fetch(`/api/boards/${encodeURIComponent(e)}`,{cache:"no-store"});if(!t.ok)return void m(`HTTP ${t.status}`);let r=await t.json();f(r.board)}catch(e){m(e instanceof Error?e.message:String(e))}},[e]);(0,n.useEffect)(()=>{H()},[H]);let U=(0,n.useCallback)(async()=>{try{await fetch(`/api/boards/${encodeURIComponent(e)}/reconcile`,{method:"POST"})}catch{}await H()},[e,H]),[_,V]=(0,n.useState)(()=>globalThis.__piRunningSnapshot??null),O=(0,n.useCallback)(e=>{globalThis.__piRunningSnapshot=e,V(e)},[]),F=(0,n.useRef)(!1),q=(0,n.useRef)(new Set),[K,X]=(0,n.useState)({}),G=(0,n.useCallback)(e=>{q.current.add(e)},[]),J=(0,n.useCallback)(e=>{q.current.delete(e)},[]),[Q,Y]=(0,n.useState)({});(0,n.useEffect)(()=>{let e=!1,t=null,r=async()=>{if(!e&&!F.current&&"visible"===document.visibilityState){F.current=!0;try{let t=Array.from(q.current),r=t.length>0&&W.current?`?boardId=${encodeURIComponent(W.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;O(i);let s=e=>{X(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?s(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&&s(e=>{let r=!1,n={...e};for(let e of t)n[e]&&(delete n[e],r=!0);return r?n:e});let a=z.current,o={};if(a)for(let e of Array.from(a.values())){if("session-card"!==e.type)continue;let t=e.data;if(!t.sessionId)continue;let r=i.states[t.sessionId];if(i.runningSessionIds.includes(t.sessionId)&&r){let e=r.phase??"waiting_model",n=r.startedAt?Date.now()-r.startedAt:0;o[t.sessionId]={phase:e,runningMs:n,endedAt:0}}else o[t.sessionId]={phase:"idle",runningMs:0,endedAt:0}}Y(e=>{let t=!1,r={...e};for(let[n,i]of Object.entries(o)){let s=e[n];s&&s.phase===i.phase&&s.runningMs===i.runningMs&&s.endedAt===i.endedAt||(r[n]=i,t=!0)}return t?r:e})}catch{}finally{F.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)}},[O]);let[Z,ee]=(0,n.useState)({}),et=(0,n.useRef)({});et.current=Z;let er=(0,n.useRef)(!1),en=(0,n.useCallback)(async()=>{if(!er.current){er.current=!0;try{let e=z.current;if(!e)return;let t=[];for(let r of Array.from(e.values())){if(r?.type!=="session-card")continue;let e=r.data;e?.sessionId&&!e.cwd&&t.push(e.sessionId)}if(0===t.length)return void ee({});let r=await fetch("/api/sessions/summary",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:t}),cache:"no-store"});if(!r.ok)return;let n=await r.json(),i={};for(let e of n.sessions)i[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,projectRoot:e.projectRoot,cwd:e.cwd,worktreeBranch:e.worktreeBranch,isWorktree:e.isWorktree};ee(i)}catch{}finally{er.current=!1}}},[]);(0,n.useEffect)(()=>{let e,t=!1,r=async()=>{await en(),t||(e=setTimeout(r,5e3))};r();let n=()=>{"visible"===document.visibilityState&&(e&&clearTimeout(e),r())};return document.addEventListener("visibilitychange",n),()=>{t=!0,e&&clearTimeout(e),document.removeEventListener("visibilitychange",n)}},[en]),(0,n.useEffect)(()=>{let e=E.current,t=z.current;e&&t&&L.current&&0!==Object.keys(Z).length&&e.document.transact(()=>{for(let e of Array.from(t.values())){if("session-card"!==e.type)continue;let r=e.data,n=Z[r.sessionId];n&&(r.title!==n.title||r.lastReply!==n.lastReply||r.messageCount!==n.messageCount||r.lastActivityAt!==n.lastActivityAt)&&t.set(e.id,{...e,data:{...r,title:n.title,lastReply:n.lastReply,messageCount:n.messageCount,lastActivityAt:n.lastActivityAt}})}},"board-summary")},[Z,b]);let ei=(0,n.useRef)(new Set),es=(0,n.useCallback)(e=>{let t=z.current;if(!t)return;let r=e.filter(e=>"select"===e.type);r.length&&w(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),o=new Set(n.filter(e=>"dimensions"===e.type&&!0===e.resizing).map(e=>e.id));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=T.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){!0===e.dragging?ei.current.add(e.id):ei.current.delete(e.id);let r=s.find(t=>t.id===e.id);r&&(!0===e.dragging||o.has(e.id)?w(t=>t.map(t=>t.id===e.id?{...t,position:r.position}:t)):(t.set(e.id,{...function(e){let{selected:t,dragging:r,resizing:n,...i}=e;return i}(r),position:r.position}),w(t=>t.map(t=>t.id===e.id?{...t,position:r.position}:t))))}else"dimensions"===e.type&&w(t=>(0,a._0)([e],t))},[]),ea=(0,n.useCallback)(e=>{let t=T.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?.forkLink||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)}},[]),eo=(0,n.useCallback)(e=>{let t=T.current,r=z.current;if(!t||!r)return;let n=`edge-${e.source}-${e.target}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`,i=r.get(e.source),s=r.get(e.target),a=(0,d.dk)(i),o=(0,d.dk)(s),l=i?.type==="session-card",c=s?.type==="session-card",u=a&&c||l&&o;t.set(n,{id:n,source:e.source,target:e.target,type:u?"send-note":"default",data:u?{sendNote:!0,sent:!1}:void 0,markerEnd:{type:"arrowclosed"},style:{strokeWidth:1.5,stroke:"#8b8fa3"}})},[]),el=(0,n.useCallback)(e=>{let t=z.current;if(!t)return;let r=crypto.randomUUID(),n=`session-${r}`,i=e?.x??60,s=e?.y??60,a=i-420+t.size%3*24,o=s-300+t.size%3*24;t.set(n,{id:n,type:"session-card",position:{x:a,y:o},style:{width:840,height:600},data:{sessionId:r,title:"",emoji:"\uD83D\uDCAC",projectName:"",messageCount:0,lastReply:"",phase:"idle",runningMs:0,endedAt:0,lastActivityAt:0,stale:!1,expanded:!0,cwd:N.current??"",taskId:P.current??D.current?.taskId??"",w:840,h:600,expandedW:0,expandedH:0,collapsedW:0,collapsedH:0}})},[]),ed=(0,n.useCallback)(async(e,t,r,n)=>{let i=z.current;if(!i)return;let s=P.current??D.current?.taskId??null;if(s){try{let t=await fetch(`/api/tasks/${encodeURIComponent(s)}/assign-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:e})});if(!t.ok)throw Error(`HTTP ${t.status}`)}catch(t){console.warn(`[board] 拖入会话归属任务失败,未落卡 ${e}:`,t instanceof Error?t.message:t);return}(0,o.PH)(e)}let a=et.current[e],l=`session-${e}`,d=i.get(l);d?i.set(l,{...d,position:{x:t,y:r}}):i.set(l,{id:l,type:"session-card",position:{x:t,y:r},style:{width:u,height:p},data:{sessionId:e,title:n??a?.title??"Untitled",emoji:"\uD83D\uDCAC",projectName:a?.projectName??"",messageCount:a?.messageCount??0,lastReply:a?.lastReply??"",lastActivityAt:a?.lastActivityAt??0,phase:"idle",runningMs:0,endedAt:0,stale:!1,expanded:!1,taskId:s??"",w:u,h:p,expandedW:0,expandedH:0,collapsedW:0,collapsedH:0}})},[]),ec=(0,n.useCallback)(async e=>{let t=z.current,r=T.current;if(t&&r)if("session-card"===e.type){let n=e.data;if(!n.sessionId||n.cwd){if(n.sessionId)try{let e=await fetch(`/api/sessions/${encodeURIComponent(n.sessionId)}`,{method:"DELETE"});e.ok?(0,o.Qp)(n.sessionId):console.warn(`[board] 清理新会话卡关联会话 ${n.sessionId} 失败 HTTP ${e.status}`)}catch(e){console.warn(`[board] 清理新会话卡关联会话 ${n.sessionId} 异常`,e)}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(P.current??D.current?.taskId){if(!await (0,l.l)({message:"删除该会话?\n将同时删除会话文件并移除画布卡片。此操作不可撤销。"}))return;await fetch(`/api/sessions/${encodeURIComponent(n.sessionId)}`,{method:"DELETE"}).then(()=>(0,o.Qp)(n.sessionId)).catch(e=>console.warn(`[board] 删除会话 ${n.sessionId} 异常`,e))}else if(!await (0,l.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,l.l)({message:"删除该任务卡?\n将删除任务卡、依赖线与执行会话连线;关联的执行会话保留。此操作不可撤销。"}))return;try{let e=await fetch(`/api/task-cards/${encodeURIComponent(n.cardId)}`,{method:"DELETE"});if(!e.ok)return void console.warn(`[board] 删除任务卡 ${n.cardId} 失败 HTTP ${e.status},保留画布卡`)}catch(e){console.warn(`[board] 删除任务卡 ${n.cardId} 异常,保留画布卡`,e);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{for(let n of(t.delete(e.id),Array.from(r.values())))(n.source===e.id||n.target===e.id)&&r.delete(n.id);if("image-node"===e.type){let r=e.data.src,n=r?.match(/^\/api\/board-assets\/([^/?#]+)$/)?.[1];n&&(Array.from(t.values()).some(t=>t.id!==e.id&&t.data?.src?.includes(n))||fetch(`/api/board-assets/${encodeURIComponent(n)}`,{method:"DELETE"}).catch(e=>console.warn(`[board] 回收图片资产 ${n} 异常`,e)))}}},[]),eu=(0,n.useCallback)((e,t)=>{let r=z.current;if(!r)return;let n=r.get(e);n&&r.set(e,{...n,...t,data:t.data?{...n.data,...t.data}:n.data,style:t.style?{...n.style??{},...t.style}:n.style})},[]),ep=(0,n.useRef)(new Map),eh=(0,n.useRef)(new Map),ex=(0,n.useCallback)((e,t,r=400)=>{let n=z.current;if(!n||!n.has(e))return;let i=ep.current.get(e)??{},s={...i,...t,data:{...i.data,...t.data}};ep.current.set(e,s);let a=eh.current.get(e);a&&clearTimeout(a),eh.current.set(e,setTimeout(()=>{let t=ep.current.get(e);ep.current.delete(e),eh.current.delete(e),t&&eu(e,t)},r))},[eu]),ef=(0,n.useCallback)((e,t)=>{let r=z.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=T.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})},[]),eg=(0,n.useCallback)(e=>{let t=T.current;t&&t.set(e.id,e)},[]),em=(0,n.useCallback)((e,t)=>{let r=T.current;if(!r)return;let n=r.get(e);n&&r.set(e,{...n,...t,data:{...n.data,...t.data}})},[]),eb=(0,n.useCallback)(e=>{let t=z.current;t&&t.set(e.id,e)},[]),ey=(0,n.useCallback)(async()=>{let e=z.current,t=T.current;if(!e||!t)return;let r=!!(P.current??D.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)},[]),ev=(0,n.useCallback)(()=>{M.current?.undo()},[]),ew=(0,n.useCallback)(()=>{M.current?.redo()},[]),ek=!b,ej=(0,n.useCallback)(e=>{let t=A.current;t&&(t.get("x")!==e.x||t.get("y")!==e.y||t.get("zoom")!==e.zoom)&&(t.set("x",e.x),t.set("y",e.y),t.set("zoom",e.zoom))},[]);return(0,n.useMemo)(()=>({board:c,loading:ek,error:g,running:_,runningCount:_?.runningSessionIds.length??0,taskCardStatus:K,sessionRunning:Q,registerVisibleTaskCard:G,unregisterVisibleTaskCard:J,nodes:v,edges:k,viewport:S,saveViewport:ej,onNodesChange:es,onEdgesChange:ea,onConnect:eo,provider:I,ready:b,addSessionNode:ed,addNewSessionCard:el,deleteNodeWithConfirm:ec,updateNode:eu,updateNodeDebounced:ex,normalizeNodeId:ef,addEdge:eg,updateEdge:em,addNode:eb,clearBoard:ey,sessionTitles:Z,loadSessionSummaries:en,reloadCanvas:U,undo:ev,redo:ew}),[c,ek,g,_,v,k,S,ej,es,ea,eo,I,b,ed,el,ec,eu,ex,ef,eg,em,eb,ey,Z,en,U,H,K,Q,G,J,ev,ew])}let f=(0,n.createContext)(null);function g({value:e,children:t}){return(0,n.createElement)(f.Provider,{value:e},t)}function m(e){let t=(0,n.useContext)(f);return e&&t?t.getStatus(e):void 0}function b(){let e=(0,n.useContext)(f);return{register:e?.register??(()=>{}),unregister:e?.unregister??(()=>{})}}let y=(0,n.createContext)(null);function v({value:e,children:t}){return(0,n.createElement)(y.Provider,{value:e},t)}function w(e){let t=(0,n.useContext)(y);return e&&t?t.getRunning(e):void 0}function k(e){let t=(0,n.useContext)(y);return e&&t?t.getSummary(e):void 0}},71309:(e,t,r)=>{r.d(t,{eR:()=>o,kz:()=>l,u:()=>s});var n=r(95155),i=r(12115);let s="0 0 0 3px var(--accent), 0 0 24px color-mix(in srgb, var(--accent) 45%, transparent)",a=(0,i.createContext)(null);function o({children:e}){let[t,r]=(0,i.useState)(null),s=(0,i.useRef)(null),l=(0,i.useCallback)(e=>{s.current&&clearTimeout(s.current),s.current=null,r(e),e&&(s.current=setTimeout(()=>r(null),1800))},[]);return(0,i.useEffect)(()=>()=>{s.current&&clearTimeout(s.current)},[]),(0,n.jsx)(a.Provider,{value:{highlightId:t,setHighlight:l},children:e})}function l(){let e=(0,i.useContext)(a);return e||{highlightId:null,setHighlight:()=>{}}}},71459:(e,t,r)=>{r.d(t,{r:()=>n});let n={backgroundImage:"linear-gradient(var(--board-card-glass), var(--board-card-glass)), var(--glass-bg-image-card, var(--glass-bg-image, none))",backgroundAttachment:"fixed",backgroundSize:"100% 100%, 100% 100%",backgroundRepeat:"no-repeat, no-repeat",backgroundPosition:"0 0, 0 0"}},94315:(e,t,r)=>{r.d(t,{OX:()=>u,dk:()=>c});var n=r(95155),i=r(12115),s=r(81750),a=r(85610),o=r(32383),l=r(25535);let d=new Set(["sticky-note","text","text-node"]);function c(e){return!!(e&&d.has(e.type??""))}function u({id:e,source:t,target:r,sourceX:d,sourceY:p,targetX:h,targetY:x,sourcePosition:f,targetPosition:g,markerEnd:m,style:b,data:y}){let{getNodes:v}=(0,s.VH)(),{updateEdge:w}=(0,l.U)(),[k,j,S]=(0,a.Fp)({sourceX:d,sourceY:p,sourcePosition:f,targetX:h,targetY:x,targetPosition:g}),C=!!y?.sent,[I,R]=(0,i.useState)(!1),[E,z]=(0,i.useState)(!1),T=(0,i.useRef)(!1),A=v(),L=A.find(e=>e.id===t&&c(e))??A.find(e=>e.id===r&&c(e)),M=A.find(e=>e.id===r&&"session-card"===e.type)??A.find(e=>e.id===t&&"session-card"===e.type),W=M?.data?.sessionId,$=!!M?.data?.cwd,D=(L?.data?.text??"").trim(),P=(0,i.useCallback)(async()=>{if(C||T.current)return;let n=v(),i=n.find(e=>e.id===t&&c(e))??n.find(e=>e.id===r&&c(e)),s=n.find(e=>e.id===r&&"session-card"===e.type)??n.find(e=>e.id===t&&"session-card"===e.type),a=s?.data?.sessionId,l=s?.data;if(!i||!s||!a||l?.cwd)return;let d=(i.data?.text??"").trim();if(d){T.current=!0,R(!0),z(!1),w(e,{data:{sent:!0}});try{await (0,o.$J)(a,{type:"prompt",message:d})}catch(t){w(e,{data:{sent:!1}}),z(!0),console.warn("[board] 发送便笺内容到会话失败:",t instanceof Error?t.message:t)}T.current=!1,R(!1)}},[e,t,r,C,w,v]),N="发送",B="把便笺内容作为消息发送给该会话",H=!1;return C?(N="✓ 已发送",B="已发送(每条连线只发送一次)",H=!0):I?(N="发送中…",H=!0):E?(N="重试",B="上次发送失败,点击重试"):D?W?$&&(B="新会话卡尚未创建会话,无法发送",H=!0):(B="会话不存在",H=!0):(B="便笺内容为空,无法发送",H=!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.tE,{path:k,markerEnd:m,style:b}),(0,n.jsx)(s.rV,{children:(0,n.jsx)("div",{className:"nodrag nopan",style:{position:"absolute",transform:`translate(-50%, -50%) translate(${j}px, ${S}px)`,pointerEvents:"all",zIndex:1e3},children:(0,n.jsx)("button",{type:"button",onClick:P,disabled:H,title:B,"data-testid":`send-note-${e}`,style:{display:"flex",alignItems:"center",gap:4,padding:"2px 10px",borderRadius:999,border:H?"1px solid color-mix(in srgb, var(--border) 60%, transparent)":"1px solid color-mix(in srgb, var(--accent) 45%, transparent)",background:"var(--board-card-glass)",backdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",WebkitBackdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",color:H?"var(--text-muted)":"var(--accent)",fontSize:11,fontWeight:600,cursor:H?"default":"pointer",whiteSpace:"nowrap",boxShadow:"0 1px 6px -2px rgba(0,0,0,0.25)",userSelect:"none"},children:N})})})]})}}}]);
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[752],{15934:(e,t,r)=>{function n(e,t){window.dispatchEvent(new CustomEvent("pi-web:board-open-file",{detail:{sessionId:e,filePath:t}}))}function i(e,t){window.dispatchEvent(new CustomEvent("pi-web:board-session-forked",{detail:{sessionId:e,newSessionId:t}}))}function s(e,t){window.dispatchEvent(new CustomEvent("pi-web:board-session-created",{detail:{sessionId:e,nodeId:t}}))}function a(e){window.dispatchEvent(new CustomEvent("pi-web:board-session-deleted",{detail:{sessionId:e}}))}function o(e,t){window.dispatchEvent(new CustomEvent("pi-web:board-session-renamed",{detail:{sessionId:e,name:t}}))}function l(e){window.dispatchEvent(new CustomEvent("pi-web:board-cwd-switch",{detail:{cwd:e}}))}function d(e,t){window.dispatchEvent(new CustomEvent("pi-web:board-agent-end",{detail:{sessionId:e,sessionName:t}}))}function c(e,t){window.dispatchEvent(new CustomEvent("pi-web:board-attention-needed",{detail:{sessionId:e,...t}}))}function u(){window.dispatchEvent(new CustomEvent("pi-web:board-tasks-changed",{detail:{}}))}r.d(t,{$T:()=>l,Ho:()=>d,PH:()=>s,PK:()=>n,Qp:()=>a,RF:()=>u,Wd:()=>i,sV:()=>c,z6:()=>o})},24456:(e,t,r)=>{r.d(t,{l:()=>c});var n=r(95155),i=r(12115),s=r(12669);let a=null,o=null,l=null;function d(e){a?.(e),a=null,l?.unmount(),o?.remove(),l=null,o=null}function c(e){return new Promise(t=>{a&&d(!1),a=t;let r=o;r||(r=document.createElement("div"),document.body.appendChild(r),o=r);let i=l;i||(l=i=(0,s.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??"删除"})]})]})})}},25535:(e,t,r)=>{r.d(t,{U:()=>o,u:()=>a});var n=r(95155),i=r(12115);let s=(0,i.createContext)(null);function a({value:e,children:t}){return(0,n.jsx)(s.Provider,{value:e,children:t})}function o(){let e=(0,i.useContext)(s);return e||{updateNode:()=>{},updateNodeDebounced:()=>{},deleteNode:()=>{},normalizeNodeId:()=>{},deleteEdge:()=>{},addEdge:()=>{},updateEdge:()=>{},addNode:()=>{},setSnapLines:()=>{},boardId:null,isTaskBoard:!1}}},56314:(e,t,r)=>{r.d(t,{Lv:()=>s,Nc:()=>i,ZY:()=>a});var n=r(12115);let i=(0,n.createContext)(null);function s(){return(0,n.useContext)(i)?.boardId??null}function a(){return(0,n.useContext)(i)?.defaultCwd??null}},60752:(e,t,r)=>{r.r(t),r.d(t,{SessionCanvas:()=>R});var n=r(95155),i=r(12115),s=r(37206),a=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),f=r(71459);function g({editor:e,inputRef:t,nodes:r,onViewportSave:s}){let{t:o}=(0,l.s)(),{setHighlight:d}=(0,c.kz)(),{setCenter:u,getViewport:p,getNodes:h}=(0,a.VH)(),[x,b]=(0,i.useState)(""),[y,v]=(0,i.useState)(!1),[w,k]=(0,i.useState)(-1),[j,S]=(0,i.useState)(null),C=(0,i.useRef)(null),I=t??C,R=(0,i.useRef)(null),E=(0,i.useMemo)(()=>{let e=r??h(),t=[];for(let r of e){if("session-card"!==r.type)continue;let e=String(r.data.sessionId??"");e&&t.push(e)}return t},[r,h]).join(",");(0,i.useEffect)(()=>{let e=x.trim();if(!e)return void S(null);if(!E)return void S([]);let t=setTimeout(()=>{R.current?.abort();let t=new AbortController;R.current=t,fetch(`/api/search?q=${encodeURIComponent(e)}&limit=30&sessionIds=${encodeURIComponent(E)}`,{signal:t.signal}).then(e=>e.ok?e.json():null).then(e=>{e&&S((e.results??[]).filter(e=>"session"===e.kind&&e.result).map(e=>{let t=e.result.session;return{sessionId:t.id,title:t.name||(t.firstMessage||"").slice(0,50)||t.id.slice(0,12),snippet:e.result.snippet??"",titleMatch:!!e.result.titleMatch}}))}).catch(()=>S([]))},350);return()=>{clearTimeout(t),R.current?.abort()}},[x,E]);let z=(0,i.useMemo)(()=>{let e=r??h(),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||"text-node"===r.type){let e=String(r.data.text??"").trim();e&&t.push({nodeId:r.id,kind:"sticky-note",text:e})}return t},[r,h]),T=(0,i.useMemo)(()=>{let e=x.trim().toLowerCase().split(/\s+/).filter(Boolean);return 0===e.length?[]:z.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 s=Math.max(0,i-Math.floor((r-n.length)/2)),a=Math.min(e.length,s+r),o=s>0?"…":"",l=a<e.length?"…":"";return`${o}${e.slice(s,a)}${l}`}(t.text,e[0])}))},[z,x]),A=(0,i.useCallback)(e=>{let t=h().find(t=>t.id===e);if(!t)return;let r=t.measured?.width??340,n=t.measured?.height??160;Promise.resolve(u(t.position.x+r/2,t.position.y+n/2,{zoom:p().zoom})).then(()=>{s?.(p())}),d(e)},[h,p,u,d,s]),L=T.length+(j?.length??0),M=(0,i.useCallback)(e=>{if(e<T.length){let t=T[e];t&&A(t.item.nodeId)}else{let t=j?.[e-T.length];if(!t)return;let r=h().find(e=>"session-card"===e.type&&String(e.data.sessionId??"")===t.sessionId)?.id;if(!r)return;A(r)}k(e)},[T,j,A,h]),W=(0,i.useCallback)(()=>{0!==L&&M((w+1)%L)},[L,w,M]),$=(0,i.useCallback)(()=>{0!==L&&M((w-1+L)%L)},[L,w,M]),D=(0,i.useCallback)(e=>{"Enter"===e.key||"ArrowDown"===e.key?(e.preventDefault(),W()):"ArrowUp"===e.key?(e.preventDefault(),$()):"Escape"===e.key&&(e.preventDefault(),y?v(!1):(b(""),k(-1),I.current?.blur()))},[y,W,$,I]),P=y&&x.trim().length>0,N=null===j,B=T.length>0,H=(j?.length??0)>0;return(0,n.jsxs)("div",{style:{position:"relative",width:320},"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,...f.r,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:I,value:x,onChange:e=>{b(e.target.value),k(-1),v(!0)},onKeyDown:D,onFocus:()=>{x.trim()&&v(!0)},onBlur:()=>v(!1),onPointerDown:e=>e.stopPropagation(),placeholder:o("boards.searchPlaceholder"),spellCheck:!1,"aria-label":o("boards.searchPlaceholder"),style:{flex:1,minWidth:0,border:"none",outline:"none",background:"transparent",color:"var(--text)",fontSize:12.5,fontFamily:"inherit"}}),x&&(0,n.jsx)("button",{type:"button",title:o("common.close"),onPointerDown:e=>e.stopPropagation(),onClick:()=>{b(""),k(-1),I.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"})]}),P&&(0,n.jsxs)("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,...f.r,border:"1px solid color-mix(in srgb, var(--border) 60%, transparent)",boxShadow:"0 4px 18px -6px rgba(0,0,0,0.28)"},children:[!B&&!H&&!N&&(0,n.jsx)("div",{style:{padding:"8px 12px",fontSize:12,color:"var(--text-muted)"},children:o("boards.searchNoResults")}),N&&(0,n.jsx)("div",{style:{padding:"8px 12px",fontSize:12,color:"var(--text-muted)"},children:o("search.indexing")}),B&&(0,n.jsxs)(n.Fragment,{children:[H&&(0,n.jsx)(m,{text:o("boards.searchGroupNodes")}),T.map((e,t)=>{let r=t===w;return(0,n.jsxs)("button",{type:"button",onMouseDown:e=>e.preventDefault(),onClick:()=>M(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?o("boards.searchSession"):o("boards.searchNote")})]},e.item.nodeId)})]}),H&&(0,n.jsxs)(n.Fragment,{children:[B&&(0,n.jsx)(m,{text:o("boards.searchGroupBody")}),j.map((e,t)=>{let r,i,s=T.length+t,a=s===w;return(0,n.jsxs)("button",{type:"button",onMouseDown:e=>e.preventDefault(),onClick:()=>M(s),style:{display:"flex",flexDirection:"column",gap:2,width:"100%",padding:"6px 10px",border:"none",borderRadius:8,background:a?"color-mix(in srgb, var(--accent) 14%, transparent)":"transparent",color:"var(--text)",fontSize:12.5,textAlign:"left",cursor:"pointer"},children:[(0,n.jsxs)("span",{style:{display:"flex",alignItems:"center",gap:6,minWidth:0},children:[e.titleMatch&&(0,n.jsx)("span",{style:{flexShrink:0,fontSize:9,fontFamily:"var(--font-mono)",color:"var(--accent)",background:"color-mix(in srgb, var(--accent) 12%, transparent)",border:"1px solid color-mix(in srgb, var(--accent) 30%, transparent)",borderRadius:3,padding:"0 4px",lineHeight:"15px"},children:o("search.title")}),(0,n.jsx)("span",{style:{minWidth:0,flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontWeight:500},children:e.title}),(0,n.jsx)("span",{style:{flexShrink:0,fontSize:10,color:"var(--text-dim)"},children:o("boards.searchBodyTag")})]}),e.snippet&&(0,n.jsx)("span",{style:{minWidth:0,fontSize:11,color:"var(--text-muted)",lineHeight:1.5,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:(r=e.snippet.split(/([\[\]])/g),i=!1,r.map((e,t)=>"["===e?(i=!0,null):"]"===e?(i=!1,null):e?i?(0,n.jsx)("mark",{style:{background:"color-mix(in srgb, var(--accent) 22%, transparent)",color:"var(--text)",borderRadius:2},children:e},t):(0,n.jsx)("span",{children:e},t):null))})]},e.sessionId)})]})]})]})}function m({text:e}){return(0,n.jsx)("div",{style:{padding:"6px 12px 2px",fontSize:10,fontWeight:700,color:"var(--text-dim)",textTransform:"uppercase",letterSpacing:.5},children:e})}function b({boardName:e,isTaskBoard:t,reloading:r,onReload:s,onClear:o,onAddSessionCard:l,wallSettings:d,updateWallSettings:c}){let{screenToFlowPosition:u}=(0,a.VH)(),[p,h]=(0,i.useState)(!1);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:{...f.r,display:"flex",alignItems:"center",gap:4,height:36,padding:"0 6px 0 12px",borderRadius:999,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:220},children:e||"看板"}),(0,n.jsx)("button",{type:"button",onClick:s,title:"刷新画布","aria-label":"刷新画布",style:{...y,cursor:r?"default":"pointer"},...r?{}:v(),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(u({x:t.left+t.width/2,y:t.top+t.height/2}))},title:"新建会话","aria-label":"新建会话",style:y,...v(),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:()=>h(e=>!e),title:"磨砂调节","aria-label":"磨砂调节","aria-expanded":p,style:{...y,color:p?"var(--accent)":"var(--text-muted)",background:p?"color-mix(in srgb, var(--accent) 12%, transparent)":void 0},...p?{}:v(),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:y,...v(),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"})]})})]}),p&&(0,n.jsx)("div",{style:w,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=>c({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"]})]})})]})}let y={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 v(){return{onMouseEnter:e=>{e.currentTarget.style.background="color-mix(in srgb, var(--text) 8%, transparent)"},onMouseLeave:e=>{e.currentTarget.style.background="transparent"}}}let w={...f.r,display:"flex",flexDirection:"column",gap:6,padding:"8px 10px",borderRadius:12,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 j({nodes:e,onViewportSave:t}){let{setCenter:r,getViewport:s,getNodes:o}=(0,a.VH)(),{setHighlight:l}=(0,c.kz)(),[d,u]=(0,i.useState)(null),[p,h]=(0,i.useState)(!1),x=(0,i.useRef)(null);(0,i.useEffect)(()=>{let e=!1,t=null,r=async()=>{try{let t=await fetch("/api/task-scheduler/status",{cache:"no-store"});if(!t.ok)return;let r=await t.json();e||u(r.status)}catch{}},n=async()=>{await r(),e||(t=setTimeout(n,2500))};return n(),()=>{e=!0,t&&clearTimeout(t)}},[]),(0,i.useEffect)(()=>{if(!p)return;let e=e=>{x.current&&!x.current.contains(e.target)&&h(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[p]);let g=(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]),m=!!d?.activity,b=d?d.activity?k[d.activity.kind]??"工作中":d.running.length>0?`运行中 ${d.running.length}`:d.queue.review.length>0?`待审核 ${d.queue.review.length}`:null:null;return(0,n.jsxs)("div",{ref:x,style:{position:"absolute",top:12,right:12,zIndex:40,display:"flex",flexDirection:"column",alignItems:"flex-end"},children:[(0,n.jsxs)("button",{type:"button",onClick:()=>h(e=>!e),"aria-expanded":p,"aria-label":"调度器状态",title:"调度器状态",style:{...f.r,display:"flex",alignItems:"center",gap:7,height:36,padding:"0 6px 0 14px",borderRadius:999,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:m?"#f59e0b":(d?.running.length??0)>0?"#10b981":"var(--text-dim)",boxShadow:m?"0 0 6px 1px rgba(245,158,11,0.6)":(d?.running.length??0)>0?"0 0 6px 1px rgba(16,185,129,0.5)":"none",animation:m?"pulse 1.6s ease-in-out infinite":void 0}}),(0,n.jsx)("span",{style:{fontSize:12.5,fontWeight:700,color:"var(--text)"},children:"调度器"}),d?.started===!1&&(0,n.jsx)("span",{style:{fontSize:10.5,color:"var(--text-muted)"},children:"未启动"}),d?.started===!0&&d?.leader===!1&&(0,n.jsx)("span",{style:{fontSize:10.5,color:"var(--text-muted)"},children:"跟随"}),b&&(0,n.jsx)("span",{style:{fontSize:11,fontWeight:600,color:"var(--text-muted)"},children:b}),(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:p?"rotate(180deg)":"none",transition:"transform 0.15s",flexShrink:0},children:(0,n.jsx)("polyline",{points:"6 9 12 15 18 9"})})]}),p&&(0,n.jsxs)("div",{style:{...f.r,display:"flex",flexDirection:"column",marginTop:6,padding:"8px 0",width:340,borderRadius:14,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:d?.started===!1?"未启动":d?.started===!0&&d?.leader===!1?"跟随(非调度者)":m?"工作中":"休眠"})]}),(0,n.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:6,padding:"10px 12px 8px"},children:[(0,n.jsx)(S,{label:"派发",active:d?.activity?.kind==="dispatch"||d?.activity?.kind==="resume",activityLabel:d?.activity&&("dispatch"===d.activity.kind||"resume"===d.activity.kind)?k[d.activity.kind]:void 0}),(0,n.jsx)(S,{label:"审查",active:d?.activity?.kind==="review"||d?.activity?.kind==="blockcheck",activityLabel:d?.activity&&("review"===d.activity.kind||"blockcheck"===d.activity.kind)?k[d.activity.kind]:void 0})]}),d&&(0,n.jsx)(C,{title:"任务队列",groups:[{label:"运行中",color:"#10b981",cards:d.running},{label:"待审核",color:"#f59e0b",cards:d.queue.review},{label:"待派发",color:"var(--accent)",cards:d.queue.dispatchable},{label:"等回复",color:"var(--text-muted)",cards:d.queue.waitingReply},{label:"失败",color:"#ef4444",cards:d.queue.failed}],nodeIdByCardId:g,onLocate:e=>{let n=o().find(t=>t.id===e);if(!n)return;let i=n.measured?.width??n.style?.width??380,a=n.measured?.height??n.style?.height??270;Promise.resolve(r(n.position.x+i/2,n.position.y+a/2,{zoom:s().zoom})).then(()=>{t?.(s())}),l(e)}}),!d&&(0,n.jsx)("div",{style:{padding:"10px 14px",fontSize:12,color:"var(--text-muted)"},children:"加载中…"})]})]})}function S({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 C({title:e,groups:t,nodeIdByCardId:r,onLocate:i}){let s=t.filter(e=>e.cards.length>0),a=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:["共 ",a]})]}),0===s.length?(0,n.jsx)("div",{style:{fontSize:12,color:"var(--text-dim)",padding:"2px 2px 6px"},children:"队列空闲"}):s.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 I=(0,s.default)(()=>Promise.all([r.e(6126),r.e(5004),r.e(277),r.e(2666),r.e(3922),r.e(9272)]).then(r.bind(r,89272)).then(e=>e.CanvasStage),{loadableGenerated:{webpack:()=>[89272]},ssr:!1,loading:()=>(0,n.jsx)(p.N,{label:"正在加载画布…"})});function R({boardId:e,taskId:t,newSessionCwd:r,onRunningSessionIdsChange:s,wallSettings:p,updateWallSettings:f}){let{t:m}=(0,l.s)(),{isDark:y}=(0,o.D)(),v=(0,d.C6)({boardId:e,taskId:t,newSessionCwd:r}),w=!!(v.board?.taskId??t),k=(0,i.useMemo)(()=>({getStatus:e=>v.taskCardStatus[e],register:v.registerVisibleTaskCard,unregister:v.unregisterVisibleTaskCard}),[v.taskCardStatus,v.registerVisibleTaskCard,v.unregisterVisibleTaskCard]),S=(0,i.useMemo)(()=>({getRunning:e=>v.sessionRunning[e],getSummary:e=>v.sessionTitles[e]}),[v.sessionRunning,v.sessionTitles]),C=(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!==C.current){let e=t.tagName;if("INPUT"===e||"TEXTAREA"===e||t.isContentEditable)return}e.preventDefault(),C.current?.focus(),C.current?.select()};return window.addEventListener("keydown",e,!0),()=>window.removeEventListener("keydown",e,!0)},[]);let[E,z]=(0,i.useState)(!1),T=(0,i.useCallback)(async()=>{if(!E){z(!0);try{v.loadSessionSummaries(),await v.reloadCanvas()}finally{setTimeout(()=>z(!1),800)}}},[v,E]);return(0,i.useEffect)(()=>{s?.(new Set(v.running?.runningSessionIds??[]))},[v.running,s]),(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:v.board?.id??null,defaultCwd:r??null},children:(0,n.jsx)(c.eR,{children:(0,n.jsx)(a.Ln,{children:(0,n.jsx)(d.x_,{value:k,children:(0,n.jsxs)(d.XK,{value:S,children:[!v.loading&&(0,n.jsx)(b,{boardName:v.board?.name??"",isTaskBoard:w,reloading:E,onReload:()=>void T(),onClear:()=>{(0,x.l)({message:w?m("boards.clearTaskConfirm"):m("boards.clearConfirm"),confirmText:m("boards.clear")}).then(e=>{e&&v.clearBoard()})},onAddSessionCard:e=>v.addNewSessionCard(e),wallSettings:p,updateWallSettings:f}),(0,n.jsx)(j,{nodes:v.nodes,onViewportSave:v.saveViewport}),!v.loading&&(0,n.jsx)("div",{style:{position:"absolute",top:12,left:0,right:0,display:"flex",justifyContent:"center",pointerEvents:"none",zIndex:40},children:(0,n.jsx)("div",{style:{pointerEvents:"auto"},children:(0,n.jsx)(g,{inputRef:C,nodes:v.nodes,onViewportSave:v.saveViewport})})}),(0,n.jsx)(I,{board:v,isDark:y})]})})})})})})})}},64536:(e,t,r)=>{r.d(t,{C6:()=>x,Nz:()=>w,Uh:()=>k,VX:()=>b,XK:()=>v,ZI:()=>u,eo:()=>p,rD:()=>m,x_:()=>g});var n=r(12115),i=r(67816),s=r(44706),a=r(81750),o=r(15934),l=r(24456),d=r(94315),c=r(41463);let u=340,p=160,h=c.env.NEXT_PUBLIC_SYNC_WS??`${"https:"===window.location.protocol?"wss":"ws"}://${window.location.host}`;function x({boardId:e,taskId:t,newSessionCwd:r}){let[c,f]=(0,n.useState)(null),[g,m]=(0,n.useState)(null),[b,y]=(0,n.useState)(!1),[v,w]=(0,n.useState)([]),[k,j]=(0,n.useState)([]),[S,C]=(0,n.useState)({x:0,y:0,zoom:1}),[I,R]=(0,n.useState)(null),E=(0,n.useRef)(null),z=(0,n.useRef)(null),T=(0,n.useRef)(null),A=(0,n.useRef)(null),L=(0,n.useRef)(!1);L.current=b;let M=(0,n.useRef)(null),W=(0,n.useRef)(e);W.current=e;let $=(0,n.useRef)(new Set),D=(0,n.useRef)(null);D.current=c;let P=(0,n.useRef)(t??null);P.current=t??null;let N=(0,n.useRef)(r);N.current=r;let B=(0,n.useMemo)(()=>`${h}/connect`,[]);(0,n.useEffect)(()=>{let t=new i.m({url:B,name:e,forceSyncInterval:!1,flushDelay:500});E.current=t,R(t);let r=t.document.getMap("nodes"),n=t.document.getMap("edges"),a=t.document.getMap("view");z.current=r,T.current=n,A.current=a;let l=e=>{let t=e?new Set(Array.from(e.keys.keys())):null;if(e&&L.current){let t=null;for(let[n,i]of e.keys){if(i?.action!=="add")continue;let e=r.get(n);if(e?.type!=="session-card")continue;let s=e.data;s?.sessionId&&!s.cwd&&($.current.has(s.sessionId)||($.current.add(s.sessionId),t=t??s.sessionId))}t&&(0,o.PH)(t)}w(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)),s=ei.current,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};if(s.has(e.id)){let t=a.get(e.id);t&&(r.position=t.position)}return delete r.selected,delete r.dragging,n.has(e.id)&&(r.selected=!0),i.has(e.id)&&(r.dragging=!0),r})})},d=()=>j(Array.from(n.values())),c=()=>{let e=A.current;e&&C({x:e.get("x")??0,y:e.get("y")??0,zoom:e.get("zoom")??1})},u=()=>{c(),y(!0)};r.observe(l),n.observe(d),a.observe(c),t.on("synced",u),l(),d();let p=new s.ad([r,n],{captureTimeout:500,trackedOrigins:new Set([null])});return M.current=p,()=>{p.destroy(),M.current=null,r.unobserve(l),n.unobserve(d),a.unobserve(c),t.off("synced",u),t.flushPendingUpdates?.(),t.destroy(),E.current=null,z.current=null,T.current=null,A.current=null,y(!1)}},[B,e]);let H=(0,n.useCallback)(async()=>{try{let t=await fetch(`/api/boards/${encodeURIComponent(e)}`,{cache:"no-store"});if(!t.ok)return void m(`HTTP ${t.status}`);let r=await t.json();f(r.board)}catch(e){m(e instanceof Error?e.message:String(e))}},[e]);(0,n.useEffect)(()=>{H()},[H]);let U=(0,n.useCallback)(async()=>{try{await fetch(`/api/boards/${encodeURIComponent(e)}/reconcile`,{method:"POST"})}catch{}await H()},[e,H]),[_,V]=(0,n.useState)(()=>globalThis.__piRunningSnapshot??null),O=(0,n.useCallback)(e=>{globalThis.__piRunningSnapshot=e,V(e)},[]),F=(0,n.useRef)(!1),q=(0,n.useRef)(new Set),[K,X]=(0,n.useState)({}),G=(0,n.useCallback)(e=>{q.current.add(e)},[]),J=(0,n.useCallback)(e=>{q.current.delete(e)},[]),[Q,Y]=(0,n.useState)({});(0,n.useEffect)(()=>{let e=!1,t=null,r=async()=>{if(!e&&!F.current&&"visible"===document.visibilityState){F.current=!0;try{let t=Array.from(q.current),r=t.length>0&&W.current?`?boardId=${encodeURIComponent(W.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;O(i);let s=e=>{X(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?s(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&&s(e=>{let r=!1,n={...e};for(let e of t)n[e]&&(delete n[e],r=!0);return r?n:e});let a=z.current,o={};if(a)for(let e of Array.from(a.values())){if("session-card"!==e.type)continue;let t=e.data;if(!t.sessionId)continue;let r=i.states[t.sessionId];if(i.runningSessionIds.includes(t.sessionId)&&r){let e=r.phase??"waiting_model",n=r.startedAt?Date.now()-r.startedAt:0;o[t.sessionId]={phase:e,runningMs:n,endedAt:0}}else o[t.sessionId]={phase:"idle",runningMs:0,endedAt:0}}Y(e=>{let t=!1,r={...e};for(let[n,i]of Object.entries(o)){let s=e[n];s&&s.phase===i.phase&&s.runningMs===i.runningMs&&s.endedAt===i.endedAt||(r[n]=i,t=!0)}return t?r:e})}catch{}finally{F.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)}},[O]);let[Z,ee]=(0,n.useState)({}),et=(0,n.useRef)({});et.current=Z;let er=(0,n.useRef)(!1),en=(0,n.useCallback)(async()=>{if(!er.current){er.current=!0;try{let e=z.current;if(!e)return;let t=[];for(let r of Array.from(e.values())){if(r?.type!=="session-card")continue;let e=r.data;e?.sessionId&&!e.cwd&&t.push(e.sessionId)}if(0===t.length)return void ee({});let r=await fetch("/api/sessions/summary",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:t}),cache:"no-store"});if(!r.ok)return;let n=await r.json(),i={};for(let e of n.sessions)i[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,projectRoot:e.projectRoot,cwd:e.cwd,worktreeBranch:e.worktreeBranch,isWorktree:e.isWorktree};ee(i)}catch{}finally{er.current=!1}}},[]);(0,n.useEffect)(()=>{let e,t=!1,r=async()=>{await en(),t||(e=setTimeout(r,5e3))};r();let n=()=>{"visible"===document.visibilityState&&(e&&clearTimeout(e),r())};return document.addEventListener("visibilitychange",n),()=>{t=!0,e&&clearTimeout(e),document.removeEventListener("visibilitychange",n)}},[en]),(0,n.useEffect)(()=>{let e=E.current,t=z.current;e&&t&&L.current&&0!==Object.keys(Z).length&&e.document.transact(()=>{for(let e of Array.from(t.values())){if("session-card"!==e.type)continue;let r=e.data,n=Z[r.sessionId];n&&(r.title!==n.title||r.lastReply!==n.lastReply||r.messageCount!==n.messageCount||r.lastActivityAt!==n.lastActivityAt)&&t.set(e.id,{...e,data:{...r,title:n.title,lastReply:n.lastReply,messageCount:n.messageCount,lastActivityAt:n.lastActivityAt}})}},"board-summary")},[Z,b]);let ei=(0,n.useRef)(new Set),es=(0,n.useCallback)(e=>{let t=z.current;if(!t)return;let r=e.filter(e=>"select"===e.type);r.length&&w(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),o=new Set(n.filter(e=>"dimensions"===e.type&&!0===e.resizing).map(e=>e.id));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=T.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){!0===e.dragging?ei.current.add(e.id):ei.current.delete(e.id);let r=s.find(t=>t.id===e.id);r&&(!0===e.dragging||o.has(e.id)?w(t=>t.map(t=>t.id===e.id?{...t,position:r.position}:t)):(t.set(e.id,{...function(e){let{selected:t,dragging:r,resizing:n,...i}=e;return i}(r),position:r.position}),w(t=>t.map(t=>t.id===e.id?{...t,position:r.position}:t))))}else"dimensions"===e.type&&w(t=>(0,a._0)([e],t))},[]),ea=(0,n.useCallback)(e=>{let t=T.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?.forkLink||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)}},[]),eo=(0,n.useCallback)(e=>{let t=T.current,r=z.current;if(!t||!r)return;let n=`edge-${e.source}-${e.target}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`,i=r.get(e.source),s=r.get(e.target),a=(0,d.dk)(i),o=(0,d.dk)(s),l=i?.type==="session-card",c=s?.type==="session-card",u=a&&c||l&&o;t.set(n,{id:n,source:e.source,target:e.target,type:u?"send-note":"default",data:u?{sendNote:!0,sent:!1}:void 0,markerEnd:{type:"arrowclosed"},style:{strokeWidth:1.5,stroke:"#8b8fa3"}})},[]),el=(0,n.useCallback)(e=>{let t=z.current;if(!t)return;let r=crypto.randomUUID(),n=`session-${r}`,i=e?.x??60,s=e?.y??60,a=i-420+t.size%3*24,o=s-300+t.size%3*24;t.set(n,{id:n,type:"session-card",position:{x:a,y:o},style:{width:840,height:600},data:{sessionId:r,title:"",emoji:"\uD83D\uDCAC",projectName:"",messageCount:0,lastReply:"",phase:"idle",runningMs:0,endedAt:0,lastActivityAt:0,stale:!1,expanded:!0,cwd:N.current??"",taskId:P.current??D.current?.taskId??"",w:840,h:600,expandedW:0,expandedH:0,collapsedW:0,collapsedH:0}})},[]),ed=(0,n.useCallback)(async(e,t,r,n)=>{let i=z.current;if(!i)return;let s=P.current??D.current?.taskId??null;if(s){try{let t=await fetch(`/api/tasks/${encodeURIComponent(s)}/assign-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:e})});if(!t.ok)throw Error(`HTTP ${t.status}`)}catch(t){console.warn(`[board] 拖入会话归属任务失败,未落卡 ${e}:`,t instanceof Error?t.message:t);return}(0,o.PH)(e)}let a=et.current[e],l=`session-${e}`,d=i.get(l);d?i.set(l,{...d,position:{x:t,y:r}}):i.set(l,{id:l,type:"session-card",position:{x:t,y:r},style:{width:u,height:p},data:{sessionId:e,title:n??a?.title??"Untitled",emoji:"\uD83D\uDCAC",projectName:a?.projectName??"",messageCount:a?.messageCount??0,lastReply:a?.lastReply??"",lastActivityAt:a?.lastActivityAt??0,phase:"idle",runningMs:0,endedAt:0,stale:!1,expanded:!1,taskId:s??"",w:u,h:p,expandedW:0,expandedH:0,collapsedW:0,collapsedH:0}})},[]),ec=(0,n.useCallback)(async e=>{let t=z.current,r=T.current;if(t&&r)if("session-card"===e.type){let n=e.data;if(!n.sessionId||n.cwd){if(n.sessionId)try{let e=await fetch(`/api/sessions/${encodeURIComponent(n.sessionId)}`,{method:"DELETE"});e.ok?(0,o.Qp)(n.sessionId):console.warn(`[board] 清理新会话卡关联会话 ${n.sessionId} 失败 HTTP ${e.status}`)}catch(e){console.warn(`[board] 清理新会话卡关联会话 ${n.sessionId} 异常`,e)}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(P.current??D.current?.taskId){if(!await (0,l.l)({message:"删除该会话?\n将同时删除会话文件并移除画布卡片。此操作不可撤销。"}))return;await fetch(`/api/sessions/${encodeURIComponent(n.sessionId)}`,{method:"DELETE"}).then(()=>(0,o.Qp)(n.sessionId)).catch(e=>console.warn(`[board] 删除会话 ${n.sessionId} 异常`,e))}else if(!await (0,l.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,l.l)({message:"删除该任务卡?\n将删除任务卡、依赖线与执行会话连线;关联的执行会话保留。此操作不可撤销。"}))return;try{let e=await fetch(`/api/task-cards/${encodeURIComponent(n.cardId)}`,{method:"DELETE"});if(!e.ok)return void console.warn(`[board] 删除任务卡 ${n.cardId} 失败 HTTP ${e.status},保留画布卡`)}catch(e){console.warn(`[board] 删除任务卡 ${n.cardId} 异常,保留画布卡`,e);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{for(let n of(t.delete(e.id),Array.from(r.values())))(n.source===e.id||n.target===e.id)&&r.delete(n.id);if("image-node"===e.type){let r=e.data.src,n=r?.match(/^\/api\/board-assets\/([^/?#]+)$/)?.[1];n&&(Array.from(t.values()).some(t=>t.id!==e.id&&t.data?.src?.includes(n))||fetch(`/api/board-assets/${encodeURIComponent(n)}`,{method:"DELETE"}).catch(e=>console.warn(`[board] 回收图片资产 ${n} 异常`,e)))}}},[]),eu=(0,n.useCallback)((e,t)=>{let r=z.current;if(!r)return;let n=r.get(e);n&&r.set(e,{...n,...t,data:t.data?{...n.data,...t.data}:n.data,style:t.style?{...n.style??{},...t.style}:n.style})},[]),ep=(0,n.useRef)(new Map),eh=(0,n.useRef)(new Map),ex=(0,n.useCallback)((e,t,r=400)=>{let n=z.current;if(!n||!n.has(e))return;let i=ep.current.get(e)??{},s={...i,...t,data:{...i.data,...t.data}};ep.current.set(e,s);let a=eh.current.get(e);a&&clearTimeout(a),eh.current.set(e,setTimeout(()=>{let t=ep.current.get(e);ep.current.delete(e),eh.current.delete(e),t&&eu(e,t)},r))},[eu]),ef=(0,n.useCallback)((e,t)=>{let r=z.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=T.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})},[]),eg=(0,n.useCallback)(e=>{let t=T.current;t&&t.set(e.id,e)},[]),em=(0,n.useCallback)((e,t)=>{let r=T.current;if(!r)return;let n=r.get(e);n&&r.set(e,{...n,...t,data:{...n.data,...t.data}})},[]),eb=(0,n.useCallback)(e=>{let t=z.current;t&&t.set(e.id,e)},[]),ey=(0,n.useCallback)(async()=>{let e=z.current,t=T.current;if(!e||!t)return;let r=!!(P.current??D.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)},[]),ev=(0,n.useCallback)(()=>{M.current?.undo()},[]),ew=(0,n.useCallback)(()=>{M.current?.redo()},[]),ek=!b,ej=(0,n.useCallback)(e=>{let t=A.current;t&&(t.get("x")!==e.x||t.get("y")!==e.y||t.get("zoom")!==e.zoom)&&(t.set("x",e.x),t.set("y",e.y),t.set("zoom",e.zoom))},[]);return(0,n.useMemo)(()=>({board:c,loading:ek,error:g,running:_,runningCount:_?.runningSessionIds.length??0,taskCardStatus:K,sessionRunning:Q,registerVisibleTaskCard:G,unregisterVisibleTaskCard:J,nodes:v,edges:k,viewport:S,saveViewport:ej,onNodesChange:es,onEdgesChange:ea,onConnect:eo,provider:I,ready:b,addSessionNode:ed,addNewSessionCard:el,deleteNodeWithConfirm:ec,updateNode:eu,updateNodeDebounced:ex,normalizeNodeId:ef,addEdge:eg,updateEdge:em,addNode:eb,clearBoard:ey,sessionTitles:Z,loadSessionSummaries:en,reloadCanvas:U,undo:ev,redo:ew}),[c,ek,g,_,v,k,S,ej,es,ea,eo,I,b,ed,el,ec,eu,ex,ef,eg,em,eb,ey,Z,en,U,H,K,Q,G,J,ev,ew])}let f=(0,n.createContext)(null);function g({value:e,children:t}){return(0,n.createElement)(f.Provider,{value:e},t)}function m(e){let t=(0,n.useContext)(f);return e&&t?t.getStatus(e):void 0}function b(){let e=(0,n.useContext)(f);return{register:e?.register??(()=>{}),unregister:e?.unregister??(()=>{})}}let y=(0,n.createContext)(null);function v({value:e,children:t}){return(0,n.createElement)(y.Provider,{value:e},t)}function w(e){let t=(0,n.useContext)(y);return e&&t?t.getRunning(e):void 0}function k(e){let t=(0,n.useContext)(y);return e&&t?t.getSummary(e):void 0}},71309:(e,t,r)=>{r.d(t,{eR:()=>o,kz:()=>l,u:()=>s});var n=r(95155),i=r(12115);let s="0 0 0 3px var(--accent), 0 0 24px color-mix(in srgb, var(--accent) 45%, transparent)",a=(0,i.createContext)(null);function o({children:e}){let[t,r]=(0,i.useState)(null),s=(0,i.useRef)(null),l=(0,i.useCallback)(e=>{s.current&&clearTimeout(s.current),s.current=null,r(e),e&&(s.current=setTimeout(()=>r(null),1800))},[]);return(0,i.useEffect)(()=>()=>{s.current&&clearTimeout(s.current)},[]),(0,n.jsx)(a.Provider,{value:{highlightId:t,setHighlight:l},children:e})}function l(){let e=(0,i.useContext)(a);return e||{highlightId:null,setHighlight:()=>{}}}},71459:(e,t,r)=>{r.d(t,{r:()=>n});let n={backgroundImage:"linear-gradient(var(--board-card-glass), var(--board-card-glass)), var(--glass-bg-image-card, var(--glass-bg-image, none))",backgroundAttachment:"fixed",backgroundSize:"100% 100%, 100% 100%",backgroundRepeat:"no-repeat, no-repeat",backgroundPosition:"0 0, 0 0"}},94315:(e,t,r)=>{r.d(t,{OX:()=>u,dk:()=>c});var n=r(95155),i=r(12115),s=r(81750),a=r(85610),o=r(32383),l=r(25535);let d=new Set(["sticky-note","text","text-node"]);function c(e){return!!(e&&d.has(e.type??""))}function u({id:e,source:t,target:r,sourceX:d,sourceY:p,targetX:h,targetY:x,sourcePosition:f,targetPosition:g,markerEnd:m,style:b,data:y}){let{getNodes:v}=(0,s.VH)(),{updateEdge:w}=(0,l.U)(),[k,j,S]=(0,a.Fp)({sourceX:d,sourceY:p,sourcePosition:f,targetX:h,targetY:x,targetPosition:g}),C=!!y?.sent,[I,R]=(0,i.useState)(!1),[E,z]=(0,i.useState)(!1),T=(0,i.useRef)(!1),A=v(),L=A.find(e=>e.id===t&&c(e))??A.find(e=>e.id===r&&c(e)),M=A.find(e=>e.id===r&&"session-card"===e.type)??A.find(e=>e.id===t&&"session-card"===e.type),W=M?.data?.sessionId,$=!!M?.data?.cwd,D=(L?.data?.text??"").trim(),P=(0,i.useCallback)(async()=>{if(C||T.current)return;let n=v(),i=n.find(e=>e.id===t&&c(e))??n.find(e=>e.id===r&&c(e)),s=n.find(e=>e.id===r&&"session-card"===e.type)??n.find(e=>e.id===t&&"session-card"===e.type),a=s?.data?.sessionId,l=s?.data;if(!i||!s||!a||l?.cwd)return;let d=(i.data?.text??"").trim();if(d){T.current=!0,R(!0),z(!1),w(e,{data:{sent:!0}});try{await (0,o.$J)(a,{type:"prompt",message:d})}catch(t){w(e,{data:{sent:!1}}),z(!0),console.warn("[board] 发送便笺内容到会话失败:",t instanceof Error?t.message:t)}T.current=!1,R(!1)}},[e,t,r,C,w,v]),N="发送",B="把便笺内容作为消息发送给该会话",H=!1;return C?(N="✓ 已发送",B="已发送(每条连线只发送一次)",H=!0):I?(N="发送中…",H=!0):E?(N="重试",B="上次发送失败,点击重试"):D?W?$&&(B="新会话卡尚未创建会话,无法发送",H=!0):(B="会话不存在",H=!0):(B="便笺内容为空,无法发送",H=!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.tE,{path:k,markerEnd:m,style:b}),(0,n.jsx)(s.rV,{children:(0,n.jsx)("div",{className:"nodrag nopan",style:{position:"absolute",transform:`translate(-50%, -50%) translate(${j}px, ${S}px)`,pointerEvents:"all",zIndex:1e3},children:(0,n.jsx)("button",{type:"button",onClick:P,disabled:H,title:B,"data-testid":`send-note-${e}`,style:{display:"flex",alignItems:"center",gap:4,padding:"2px 10px",borderRadius:999,border:H?"1px solid color-mix(in srgb, var(--border) 60%, transparent)":"1px solid color-mix(in srgb, var(--accent) 45%, transparent)",background:"var(--board-card-glass)",backdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",WebkitBackdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",color:H?"var(--text-muted)":"var(--accent)",fontSize:11,fontWeight:600,cursor:H?"default":"pointer",whiteSpace:"nowrap",boxShadow:"0 1px 6px -2px rgba(0,0,0,0.25)",userSelect:"none"},children:N})})})]})}}}]);
|