@customize-agent/server 4.59.0 → 4.59.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +9 -9
  3. package/.next/prerender-manifest.json +3 -3
  4. package/.next/server/chunks/1928.js +1 -1
  5. package/.next/server/chunks/{5547.js → 4435.js} +31 -31
  6. package/.next/server/chunks/6321.js +1 -1
  7. package/.next/server/chunks/8204.js +1 -1
  8. package/.next/server/middleware-build-manifest.js +1 -1
  9. package/.next/server/pages/404.html +1 -1
  10. package/.next/server/pages/500.html +1 -1
  11. package/.next/server/pages/api/assets/generated/preview.js +1 -1
  12. package/.next/server/pages/api/assets/generated/preview.js.nft.json +1 -1
  13. package/.next/server/pages/api/assets/generated.js +1 -1
  14. package/.next/server/pages/api/assets/generated.js.nft.json +1 -1
  15. package/.next/server/pages/api/documents/canvas/[id].js +1 -1
  16. package/.next/server/pages/api/documents/canvas/[id].js.nft.json +1 -1
  17. package/.next/server/pages/api/documents/export.js +1 -1
  18. package/.next/server/pages/api/documents/export.js.nft.json +1 -1
  19. package/.next/server/pages/api/documents/generate/preview.js +1 -1
  20. package/.next/server/pages/api/documents/generate/preview.js.nft.json +1 -1
  21. package/.next/server/pages/api/documents/generate.js +1 -1
  22. package/.next/server/pages/api/documents/generate.js.nft.json +1 -1
  23. package/.next/server/pages/api/documents/generated/[id]/events.js +1 -1
  24. package/.next/server/pages/api/documents/generated/[id]/events.js.nft.json +1 -1
  25. package/.next/server/pages/api/documents/generated/[id]/figure/[name].js +1 -1
  26. package/.next/server/pages/api/documents/generated/[id]/figure/[name].js.nft.json +1 -1
  27. package/.next/server/pages/api/documents/generated/[id]/nodes/[nodeId].js +1 -1
  28. package/.next/server/pages/api/documents/generated/[id]/nodes/[nodeId].js.nft.json +1 -1
  29. package/.next/server/pages/api/documents/generated/[id]/nodes.js +1 -1
  30. package/.next/server/pages/api/documents/generated/[id]/nodes.js.nft.json +1 -1
  31. package/.next/server/pages/api/documents/generated/[id]/pause.js +1 -1
  32. package/.next/server/pages/api/documents/generated/[id]/pause.js.nft.json +1 -1
  33. package/.next/server/pages/api/documents/generated/[id]/preview.js +1 -1
  34. package/.next/server/pages/api/documents/generated/[id]/preview.js.nft.json +1 -1
  35. package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/confirm.js +1 -1
  36. package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/confirm.js.nft.json +1 -1
  37. package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/rollback.js +1 -1
  38. package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/rollback.js.nft.json +1 -1
  39. package/.next/server/pages/api/documents/generated/[id]/repair.js +1 -1
  40. package/.next/server/pages/api/documents/generated/[id]/repair.js.nft.json +1 -1
  41. package/.next/server/pages/api/documents/generated/[id]/resume-generate.js +1 -1
  42. package/.next/server/pages/api/documents/generated/[id]/resume-generate.js.nft.json +1 -1
  43. package/.next/server/pages/api/documents/generated/[id].js +1 -1
  44. package/.next/server/pages/api/documents/generated/[id].js.nft.json +1 -1
  45. package/.next/server/pages/api/documents/generated.js +1 -1
  46. package/.next/server/pages/api/documents/generated.js.nft.json +1 -1
  47. package/.next/server/pages/api/kb/files/reindex.js +1 -1
  48. package/.next/server/pages/api/kb/files/reindex.js.nft.json +1 -1
  49. package/.next/server/pages/api/kb/intelligence.js +1 -1
  50. package/.next/server/pages/api/kb/intelligence.js.nft.json +1 -1
  51. package/.next/server/pages/api/kb/reindex.js +1 -1
  52. package/.next/server/pages/api/kb/reindex.js.nft.json +1 -1
  53. package/.next/server/pages/api/kb/upload/complete.js +1 -1
  54. package/.next/server/pages/api/kb/upload/complete.js.nft.json +1 -1
  55. package/.next/server/pages/api/kb/upload.js +1 -1
  56. package/.next/server/pages/api/kb/upload.js.nft.json +1 -1
  57. package/.next/server/pages/api/skills/[id].js +1 -1
  58. package/.next/server/pages/api/skills/[id].js.nft.json +1 -1
  59. package/.next/server/pages/api/skills/validate.js +1 -1
  60. package/.next/server/pages/api/skills/validate.js.nft.json +1 -1
  61. package/.next/server/pages/api/skills.js +1 -1
  62. package/.next/server/pages/api/skills.js.nft.json +1 -1
  63. package/.next/server/pages/api/system/data-health.js +2 -0
  64. package/.next/server/pages/api/system/data-health.js.nft.json +1 -0
  65. package/.next/server/pages/canvas/[id].html +1 -1
  66. package/.next/server/pages/canvas.html +1 -1
  67. package/.next/server/pages/documents.html +1 -1
  68. package/.next/server/pages/guide.html +1 -1
  69. package/.next/server/pages/index.html +1 -1
  70. package/.next/server/pages/knowledge/file-detail.html +1 -1
  71. package/.next/server/pages/knowledge/files.html +1 -1
  72. package/.next/server/pages/knowledge/manage.html +1 -1
  73. package/.next/server/pages/knowledge.html +1 -1
  74. package/.next/server/pages/models.html +1 -1
  75. package/.next/server/pages/overview.html +1 -1
  76. package/.next/server/pages/prompt.html +1 -1
  77. package/.next/server/pages/settings.html +1 -1
  78. package/.next/server/pages/skills.html +1 -1
  79. package/.next/server/pages/system/logs.html +1 -1
  80. package/.next/server/pages-manifest.json +33 -32
  81. package/.next/static/{Z8psgNSpy4sSg2lIho8Uw → 2MjosIoMmZUcFnY_P02ZD}/_buildManifest.js +1 -1
  82. package/.next/static/chunks/530-df2ce692cf0fa512.js +1 -0
  83. package/.next/static/chunks/795-81a3e3973fc43791.js +1 -0
  84. package/.next/static/chunks/pages/{_app-74fce107cacfaee7.js → _app-c560816f0a8a0815.js} +15 -15
  85. package/.next/static/chunks/pages/canvas/[id]-515edd3e72acaf82.js +1 -0
  86. package/.next/static/css/85c434f8fd3a17ae.css +1 -0
  87. package/package.json +1 -1
  88. package/scripts/half-built-scan.mjs +150 -0
  89. package/.next/static/chunks/530-1b18bb11570dc44a.js +0 -1
  90. package/.next/static/chunks/795-9e0cb0bb11e8c89f.js +0 -1
  91. package/.next/static/chunks/pages/canvas/[id]-9f4e9f49e512418b.js +0 -1
  92. package/.next/static/css/0e46e39b61e4e262.css +0 -1
  93. /package/.next/static/{Z8psgNSpy4sSg2lIho8Uw → 2MjosIoMmZUcFnY_P02ZD}/_ssgManifest.js +0 -0
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[530],{8090:(e,t,n)=>{n.d(t,{EL:()=>$,zT:()=>Z,II:()=>V,bJ:()=>ea,Jr:()=>W,O0:()=>ef,uj:()=>O,GC:()=>L,qj:()=>ei,x8:()=>Q,Kg:()=>en,a3:()=>ed,Qs:()=>K,PI:()=>el,dB:()=>ep,Jy:()=>eu,uv:()=>P,vp:()=>H,m_:()=>q,kH:()=>F,z9:()=>X,Aq:()=>es,RV:()=>eo,Kq:()=>ee});var r=n(97109),a=n(84662),l=n(30486),o=n(4527),i=n(80042),c=n(99650),s=n(25345),u=n(7851),d=n(33555),m=n(43240),f=n(26619),p=n(23216),h=n(46791),g=n(8579),v=n(26631),x=n(35459),y=n(64629),w=n(76824),k=n(83374),b=n(81668),A=n(39356),I=n(1310),j=n(8263),E=n(61024);let S=["failed","paused","repairing","blocked","running","pending","completed"],M=["chars","costUsd"];function C(e,t){return e.seq!==t.seq?e.seq-t.seq:e.id===t.id?0:e.id<t.id?-1:1}function R(e){let t=new Map;for(let n of e){if(void 0===n.parentId)continue;let e=t.get(n.parentId);e?e.push(n):t.set(n.parentId,[n])}for(let e of t.values())e.sort(C);return t}function N(e){let t=new Map(e.map(e=>[e.id,e])),n=new Map;for(let r of e){let e=0,a=r,l=new Set([r.id]);for(;(null==a?void 0:a.parentId)!==void 0;){let n=t.get(a.parentId);if(!n||l.has(n.id))break;l.add(n.id),e+=1,a=n}n.set(r.id,e)}return n}let T=new Set(["prepare","understand","plan","blueprint","write","close","deliver","chapter","block","turn","turn.generate","turn.selfcheck","turn.act","turn.commit","round","round.observe","round.decide","round.fix","repair.request","repair.localize","repair.impact","repair.transaction","repair.recheck","supervisor","rollback","snapshot","skill.load"]),D=new Set(["failed","paused","repairing","blocked","running","pending","completed"]),_={pending:{key:"common.statusWaiting",text:"等待中",color:"default"},running:{key:"common.statusRunning",text:"进行中",color:"processing"},completed:{key:"common.statusCompleted",text:"已完成",color:"success"},paused:{key:"common.statusPaused",text:"已暂停",color:"gold"},repairing:{key:"common.statusRepairing",text:"修复中",color:"warning"},blocked:{key:"common.statusBlocked",text:"已放弃(阻塞)",color:"warning"},failed:{key:"common.statusAbnormal",text:"异常",color:"error"}};function B(e,t,n,r){let a=e[t];if(!a)return"未知".concat(n,"(").concat(t||"空",")");if(a.key&&r){let e=r(a.key);if(e&&e!==a.key)return e}return a.text}function q(e,t){return B(_,e,"状态",t)}function P(e){var t,n;return null!=(n=null==(t=_[e])?void 0:t.color)?n:"default"}let z={queued:{key:"common.statusWaiting",text:"排队中",color:"default"},generating:{key:"common.statusRunning",text:"生成中",color:"processing"},paused:{key:"common.statusPaused",text:"已暂停(节点边界生效)",color:"gold"},completed:{key:"common.statusCompleted",text:"已完成",color:"success"},completed_with_issues:{key:"common.statusReview",text:"完成(有需复核项)",color:"warning"},warning:{key:"common.statusReview",text:"需复核",color:"warning"},failed:{key:"common.statusAbnormal",text:"失败",color:"error"},aborted:{key:"common.statusAbnormal",text:"已中止",color:"default"}};function L(e,t){return B(z,e,"记录状态",t)}function O(e){var t,n;return null!=(n=null==(t=z[e])?void 0:t.color)?n:"default"}let U=["failed","paused","repairing","blocked","running","pending","completed"];function H(e){let t=U.indexOf(e);return t>=0?t:U.length}let G={prepare:"生成准备",understand:"资料理解",plan:"规划",blueprint:"蓝图",write:"正文撰写",close:"收口",deliver:"交付",chapter:"章节",block:"块",turn:"轮次","turn.generate":"轮次\xb7生成","turn.selfcheck":"轮次\xb7自检","turn.act":"轮次\xb7动作","turn.commit":"轮次\xb7提交",round:"收口轮","round.observe":"收口\xb7观察","round.decide":"收口\xb7判定","round.fix":"收口\xb7修复","repair.request":"修复\xb7请求","repair.localize":"修复\xb7定位","repair.impact":"修复\xb7影响面","repair.transaction":"修复\xb7事务","repair.recheck":"修复\xb7复检",rollback:"回滚",snapshot:"快照","skill.load":"技能命中",supervisor:"调度决策"};function X(e){var t;return e?null!=(t=G[e])?t:e:"未知节点"}let Y={role_binding:(0,r.createElement)(a.A),knowledge_retrieval:(0,r.createElement)(l.A),file_understanding:(0,r.createElement)(o.A),fact_extraction:(0,r.createElement)(i.A),chapter_generation:(0,r.createElement)(c.A),llm_review:(0,r.createElement)(s.A),validation:(0,r.createElement)(u.A),reference:(0,r.createElement)(d.A),prepare:(0,r.createElement)(m.A),understand:(0,r.createElement)(f.A),plan:(0,r.createElement)(p.A),blueprint:(0,r.createElement)(h.A),write:(0,r.createElement)(g.A),chapter:(0,r.createElement)(v.A),block:(0,r.createElement)(x.A),turn:(0,r.createElement)(y.A),round:(0,r.createElement)(w.A),close:(0,r.createElement)(k.A),deliver:(0,r.createElement)(b.A),repair:(0,r.createElement)(A.A),rollback:(0,r.createElement)(I.A),snapshot:(0,r.createElement)(I.A),skill:(0,r.createElement)(j.A),supervisor:(0,r.createElement)(E.A),default:(0,r.createElement)(m.A)};function F(e){var t;return null!=(t=Y[e.split(".")[0]||e])?t:Y.default}function K(e){var t;return null!=(t=Y[e])?t:Y.default}function J(e){var t,n;let r=e.issues;return{id:e.id,...void 0!==e.parentId?{parentId:e.parentId}:{},type:e.type||"block",title:null!=(t=e.title)?t:"",seq:"number"==typeof e.seq&&Number.isFinite(e.seq)?e.seq:0,status:"string"==typeof(n=e.status)&&D.has(n)?e.status:"failed",startedAt:"number"==typeof e.startedAt&&Number.isFinite(e.startedAt)&&e.startedAt>0?e.startedAt:0,...void 0!==e.completedAt?{completedAt:e.completedAt}:{},...e.progress?{progress:e.progress}:{},...e.metrics?{metrics:e.metrics}:{},...Array.isArray(r)&&r.length>0?{issues:r}:{},...void 0!==e.payloadRef?{payloadRef:e.payloadRef}:{}}}function W(e,t){let n=new Map(e.map(e=>[e.id,e]));return(function(e,t){let n=function(e){let t=R(e),n=N(e),r=[...e].sort((e,t)=>{var r,a;return(null!=(r=n.get(t.id))?r:0)-(null!=(a=n.get(e.id))?a:0)||C(e,t)}),a=new Map(e.map(e=>[e.id,e]));for(let e of r){let n=t.get(e.id);if(!n||0===n.length)continue;let r=n.map(e=>{var t;return null!=(t=a.get(e.id))?t:e});a.set(e.id,function(e,t){var n,r,a;if(0===t.length)return{...e};let l=[...t].sort(C),o={...null!=(r=e.metrics)?r:{}};for(let e of M){let t=function(e,t){let n=0,r=!1;for(let l of e){var a;let e=null==(a=l.metrics)?void 0:a[t];"number"==typeof e&&Number.isFinite(e)&&(n+=e,r=!0)}return r?n:void 0}(l,e);void 0===t?delete o[e]:o[e]=t}let i=null==(n=e.progress)?void 0:n.label,c={current:l.filter(e=>"completed"===e.status).length,total:l.length,...void 0!==i?{label:i}:{}},s=function(e){let t=new Set,n=[];for(let a of e){var r;let e=null==(r=a.provenance)?void 0:r.fingerprint;if("string"==typeof e&&e.length>0){if(t.has(e))continue;t.add(e)}n.push(a)}return n}(l.flatMap(e=>{var t;return null!=(t=e.issues)?t:[]})),u=null!=(a=function(e){let t,n=1/0;for(let r of e){let e=function(e){let t=S.indexOf(e);return t>=0?t:0}(r);e<n&&(n=e,t=r)}return t}(l.map(e=>e.status)))?a:e.status;return{...e,status:u,progress:c,...Object.keys(o).length>0?{metrics:o}:{},...s.length>0?{issues:s}:{}}}(e,r))}return[...e].sort(C).map(e=>{var t;return null!=(t=a.get(e.id))?t:e})}(e),r=R(n),a=new Set(n.map(e=>e.id)),l=1/0,o=(e,t)=>{var n;let a=t+1<l?(null!=(n=r.get(e.id))?n:[]).filter(t=>t.id!==e.id).map(e=>o(e,t+1)):[];return{...e,children:a}},i=n.filter(e=>void 0===e.parentId||!a.has(e.parentId)).sort(C).map(e=>o(e,0)),c=new Set,s=e=>{for(let t of e)c.add(t.id),s(t.children)};for(let e of(s(i),n))c.has(e.id)||i.push(o(e,0));return i})(function(e,t){if(void 0===t)return[...e];let n=N(e),r=Math.max(0,Math.floor(t));return e.filter(e=>{var t;return(null!=(t=n.get(e.id))?t:0)<r})}(e.map(J),t)).map(e=>(function e(t,n){var r,a;let l=n.get(t.id),o=null!=(r=null==l?void 0:l.type)?r:String(t.type),i=t.issues;return{id:t.id,...void 0!==t.parentId?{parentId:t.parentId}:{},type:o,unknownType:!("string"==typeof o&&T.has(o)),title:t.title||X(o),seq:t.seq,status:t.status,..."number"==typeof t.startedAt&&t.startedAt>0?{startedAt:t.startedAt}:{},...void 0!==t.completedAt?{completedAt:t.completedAt}:{},...t.progress?{progress:t.progress}:{},metrics:null!=(a=t.metrics)?a:{},issues:Array.isArray(i)?i:[],...void 0!==t.payloadRef?{payloadRef:t.payloadRef}:{},children:t.children.map(t=>e(t,n))}})(e,n))}function Q(e){let t=[],n=e=>{for(let r of e)t.push(r),n(r.children)};return n(e),t.sort(C)}function V(e,t){let n=[],r=(e,a)=>{for(let l of e){if(l.id===t)return n.push(...a),!0;if(r(l.children,[...a,l.id]))return!0}return!1};return r(e,[]),n}let Z=236,$=76;function ee(e,t){var n;if(!t)return e;let r=new Map(e),a=null!=(n=r.get(t.id))?n:{dx:0,dy:0};return r.set(t.id,{dx:a.dx+t.dx,dy:a.dy+t.dy}),r}let et=new Set(["running","repairing"]);function en(e){let t=new Set(e.nodes.filter(e=>et.has(e.node.status)).map(e=>e.node.id));if(0===t.size)return er;let n=new Set;for(let r of e.edges)t.has(r.fromId)&&n.add(r.id);return n}let er=new Set;function ea(e,t){if(0===t.size)return e;let n=e.nodes.map(e=>{let n=t.get(e.node.id);return n?{...e,x:e.x+n.dx,y:e.y+n.dy}:e}),r=e.edges.map(e=>{var n,r,a,l;let o=t.get(e.fromId),i=t.get(e.toId);return o||i?{...e,x1:e.x1+(null!=(n=null==o?void 0:o.dx)?n:0),y1:e.y1+(null!=(r=null==o?void 0:o.dy)?r:0),x2:e.x2+(null!=(a=null==i?void 0:i.dx)?a:0),y2:e.y2+(null!=(l=null==i?void 0:i.dy)?l:0)}:e});return{...e,nodes:n,edges:r}}function el(e){let t=[],n=[],r=0,a=(e,l)=>{let o,i=e.children,c=40+l*(Z+72),s=i.map(e=>({id:e.id,...a(e,l+1)}));for(let a of(0===s.length?(o=40+r*($+22),r+=1):o=(s[0].y+s[s.length-1].y)/2,t.push({node:e,x:c,y:o,depth:l}),s))n.push({id:"".concat(e.id,"->").concat(a.id),fromId:e.id,toId:a.id,x1:c+Z/2,y1:o+$,x2:a.x+Z/2,y2:a.y});return{x:c,y:o}};for(let t of e)a(t,0),r+=1;let l=t.reduce((e,t)=>Math.max(e,t.x+Z),0),o=t.reduce((e,t)=>Math.max(e,t.y+$),0);return{nodes:t,edges:n,width:l+40,height:o+40}}function eo(e,t){let n=["影响面:".concat(t.kind),"波及 ".concat(t.affectedNodeIds.length," 个节点"),...t.escalate?["超出阈值需人工确认"]:[],...t.rollbackable?[]:["不可回滚:按 11.1 需回滚或重新校准,不得当普通改动提交"]];return"请修复节点「".concat(e,"」(").concat(n.join(","),")")}function ei(e,t){let n=t>0?t:1;return{dx:e.dx/n,dy:e.dy/n}}let ec=(e,t)=>e.left<t.right&&e.right>t.left&&e.top<t.bottom&&e.bottom>t.top;function es(e){var t;let{node:n,view:r,box:a,panelWidth:l,panelHeight:o,gap:i=12,margin:c=8,obstacles:s=[]}=e,u=(e,t,n)=>Math.min(Math.max(e,t),Math.max(t,n)),d=Math.min(l,Math.max(0,a.width-2*c)),m=n.x*r.k+r.x,f=n.y*r.k+r.y,p=f+$*r.k,h={left:m,top:f,right:m+Z*r.k,bottom:p},g=a.width-d-c,v=(e,t)=>{let n=s.filter(n=>n.top>=t&&n.left<e+d&&n.right>e).map(e=>e.top-i);return Math.max(0,Math.min(a.height-c,...n,a.height-c)-t)},x=e=>{let t=a.height-e-c,n=(n,r)=>{if(n<c||r<c||n>g||r>t)return!1;let a={left:n,top:r,right:n+d,bottom:r+e};return!s.some(e=>ec(a,e))},l=m+(Z+i)*r.k,o=m-d-i*r.k,x=p+i,y=f-e-i;for(let[e,t]of[[l,x],[l,y],[o,x],[o,y]])if(n(e,t))return{left:e,top:t,maxHeight:Math.max(0,Math.min(v(e,t),a.height-t-c))};let w=[l,o,c,g],k=[x,y,c,t,...s.flatMap(t=>[t.bottom+i,t.top-e-i])],b=null,A=1/0;for(let r of w)for(let a of k){let l=u(r,c,g),o=u(a,c,Math.max(c,t));if(!n(l,o))continue;let i={left:l,top:o,right:l+d,bottom:o+e},s=Math.max(Math.max(0,h.left-i.right,i.left-h.right),Math.max(0,h.top-i.bottom,i.top-h.bottom))+1e3*!!ec(i,h);s<A&&(A=s,b={left:l,top:o})}return b?{...b,maxHeight:v(b.left,b.top)}:null};if(e.pin){let t=u(e.pin.left,c,g),n=u(e.pin.top,c,Math.max(c,a.height-2*c));return{left:t,top:n,maxHeight:Math.max(0,Math.min(v(t,n),a.height-n-c))}}let y=Math.min(o,Math.max(0,a.height-2*c)),w=x(y);if(w)return w;let k=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:8,r=e.height-n,a=t.map(e=>({start:Math.max(n,e.top),end:Math.min(r,e.bottom)})).filter(e=>e.end>e.start).sort((e,t)=>e.start-t.start),l=0,o=n;for(let e of a)e.start>o&&(l=Math.max(l,e.start-o)),o=Math.max(o,e.end);return Math.max(l,r-o)}(a,s,c)-i;if(k>0&&k<y){let e=x(Math.max(120,k));if(e)return e}return null!=(t=null!=w?w:x(Math.max(120,k)))?t:{left:u(m+(Z+i)*r.k,c,g),top:c,maxHeight:Math.max(0,a.height-2*c)}}function eu(e){var t;if("number"!=typeof e.startedAt||(null==(t=e.metrics)?void 0:t.instantEvent)===!0)return;let n=("number"==typeof e.completedAt?e.completedAt:Date.now())-e.startedAt;return n>=0?n:void 0}function ed(e){if(void 0===e)return"—";let t=Math.max(0,Math.round(e/1e3));if(t<60)return"".concat(t," 秒");let n=Math.floor(t/60);return n<60?"".concat(n," 分 ").concat(t%60," 秒"):"".concat(Math.floor(n/60)," 小时 ").concat(n%60," 分")}let em=[{key:"note",format:e=>String(e)},{key:"chars",format:e=>"".concat(Number(e).toLocaleString()," 字")},{key:"targetWords",format:e=>"目标 ".concat(Number(e).toLocaleString()," 字")},{key:"turn",format:e=>"第 ".concat(e," 轮")},{key:"residual",format:e=>"残余 ".concat(e)},{key:"toolCalls",format:e=>"工具 ".concat(e," 次")},{key:"attempt",format:e=>"第 ".concat(e," 次尝试")},{key:"failureKinds",format:e=>String(e)},{key:"chapters",format:e=>"".concat(e," 章")},{key:"facts",format:e=>"".concat(e," 条事实")}];function ef(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,n=[];for(let{key:r,format:a}of em){let l=e[r];if(void 0===l||""===l||!1===l)continue;let o=a(l);if(o.trim()&&(n.push(o),n.length>=t))break}return n}function ep(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:6;return Object.entries(e).slice(0,t).map(e=>{let[t,n]=e;return{key:t,text:"number"==typeof n?"".concat(t,": ").concat(Number.isInteger(n)?n:n.toFixed(2)):"".concat(t,": ").concat(String(n))}})}},8665:(e,t,n)=>{n.d(t,{_:()=>g});var r=n(65321),a=n(97109),l=n(48399),o=n(33442),i=n(14932),c=n(11702),s=n(85114),u=n(55897),d=n(57271),m=n(7576),f=n(54746),p=n(7492);let{Text:h}=l.A;function g(e){let{value:t,onChange:n,onSend:l,generating:g,submitting:v,disabled:x,disabledReason:y,selectedNode:w,onMentionSelected:k,resumable:b,onContinue:A,quickActions:I,requireGenerationSetup:j=!1,promptOptions:E=[],projectOptions:S=[],selectedPrompts:M=[],selectedProject:C=null,onSelectPrompts:R,onSelectProject:N,onPreviewStructure:T}=e,[D,_]=(0,a.useState)(!1),B=j?[0===M.length?"提示词":"",!C?"项目":""].filter(Boolean):[],q=B.length>0,P=x?y||"当前不可发起生成":q?"请先用左侧「+」选择".concat(B.join(" 与 "),"——未选齐时不能发起生成"):g?"有任务正在运行:发送将加入生成队列(前面任务完成后自动开始)":"发送后将创建生成任务,画布随节点日志实时增长";return(0,r.jsxs)("div",{className:"canvasInputBar",children:[(0,r.jsxs)(o.A,{wrap:!0,size:6,style:{marginBottom:6},children:[w&&(0,r.jsx)(i.A,{title:"把「@".concat(w.title,"」插入输入框(可见文本,可自行修改)"),children:(0,r.jsx)(c.A,{color:"blue",style:{cursor:"pointer"},onClick:k,children:"@ ".concat(w.title)})}),!w&&(0,r.jsx)(h,{type:"secondary",style:{fontSize:12},children:"点选一个节点后可 @ 提及它"}),b&&!g&&(0,r.jsx)(s.Ay,{size:"small",type:"link",onClick:A,children:"继续生成"}),null==I?void 0:I.map(e=>(0,r.jsx)(s.Ay,{size:"small",type:"link",onClick:e.onClick,children:e.label},e.key))]}),(0,r.jsxs)(o.A,{wrap:!0,size:10,style:{marginBottom:8},children:[(0,r.jsx)(u.A,{trigger:"click",placement:"topLeft",open:D,onOpenChange:_,content:(0,r.jsxs)("div",{style:{width:360,display:"flex",flexDirection:"column",gap:8},children:[j&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{children:[(0,r.jsx)(h,{strong:!0,style:{fontSize:13},children:"提示词"}),(0,r.jsx)(d.A,{mode:"multiple",style:{width:"100%",marginTop:4},value:M.map(e=>e.value),placeholder:0===E.length?"该项目暂无提示词":"选择提示词(至少一份;可多选)",options:E,onChange:e=>null==R?void 0:R(e)})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(h,{strong:!0,style:{fontSize:13},children:"项目"}),(0,r.jsx)(d.A,{style:{width:"100%",marginTop:4},value:null==C?void 0:C.value,showSearch:!0,optionFilterProp:"label",placeholder:0===S.length?"本项目知识库里还没有资料:先到知识库页上传并入库":"选择项目(= 知识库里这个项目的资料,决定本次用哪份材料)",options:S,onChange:e=>null==N?void 0:N(e)})]}),(0,r.jsx)(h,{type:"secondary",style:{fontSize:12},children:"两者选齐后才能点「生成」。「项目」选的是入库到本地知识库的那份项目资料(清单/图纸/招标文件都在其中)——本次生成只用它,不会把库里别的项目材料混进来。提示词的正文按名字进入对应链路(总控/写作 → 写作链,清单/图纸/提取 → 事实抽取链,排版 → 格式链);章节大纲取自其中带 <OUTLINE> 的那一份,且只能有一份声明大纲。"})]}),!j&&(0,r.jsx)(h,{type:"secondary",style:{fontSize:12},children:"提示词与项目取自这条记录本身(章节结构由记录里那份提示词的大纲派生),不需要在这里再选。"}),(0,r.jsx)("div",{children:(0,r.jsx)(s.Ay,{size:"small",block:!0,disabled:q,onClick:()=>{_(!1),null==T||T()},children:"结构预览(章清单与小节)"})})]}),children:(0,r.jsx)(s.Ay,{size:"small",icon:(0,r.jsx)(f.A,{}),type:q?"primary":"default",children:"提示词 / 项目"})}),M.map(e=>(0,r.jsx)(c.A,{color:"blue",closable:!0,onClose:t=>{t.preventDefault(),null==R||R(M.filter(t=>t.value!==e.value).map(e=>e.value))},children:"提示词:".concat(e.label)},e.value)),C&&(0,r.jsx)(c.A,{color:"geekblue",closable:!0,onClose:e=>{e.preventDefault(),null==N||N("")},children:"项目:".concat(C.label)})]}),(0,r.jsxs)(o.A.Compact,{style:{width:"100%"},children:[(0,r.jsx)(m.A.TextArea,{value:t,onChange:e=>n(e.target.value),onPressEnter:e=>{!e.shiftKey&&(e.preventDefault(),x||v||l())},autoSize:{minRows:1,maxRows:5},placeholder:"描述你的需求;可用上面的 @ 提及把节点带进正文(Enter 发送,Shift+Enter 换行)",disabled:x}),(0,r.jsx)(i.A,{title:P,children:(0,r.jsx)(s.Ay,{type:"primary",icon:(0,r.jsx)(p.A,{}),loading:v,disabled:x||q||!t.trim(),onClick:l,children:g?"排队提交":"生成"})})]})]})}},28629:(e,t,n)=>{n.d(t,{p:()=>r});function r(e,t){let n="/canvas/".concat(encodeURIComponent(e));return t?"".concat(n,"?projectRoot=").concat(encodeURIComponent(t)):n}},34038:(e,t,n)=>{n.d(t,{B:()=>u});var r=n(65321),a=n(48399),l=n(25258),o=n(85114),i=n(85493),c=n(38332);let{Paragraph:s}=a.A;function u(e){let{open:t,title:n,chapters:a,outlineSource:u,materialScope:d,onClose:m}=e,f=a.length>0?"结构预览:".concat(n,"(").concat(a.length," 章").concat(u?",大纲来源:".concat(u):"",")"):"结构预览:".concat(n);return(0,r.jsxs)(l.A,{open:t,title:f,centered:!0,onCancel:m,width:640,styles:{container:{maxHeight:"calc(100vh - 48px)",display:"flex",flexDirection:"column"},body:{overflowY:"auto",flex:1,minHeight:0}},footer:(0,r.jsx)(o.Ay,{type:"primary",onClick:m,children:"知道了"}),children:[(0,r.jsx)(s,{type:"secondary",style:{fontSize:12,marginBottom:8},children:"章清单与小节由提示词的 <OUTLINE> 大纲 + 技能库(按章域 \xd7 工程类型)派生;这份预览与点「生成」时用的是同一个派生函数、同一份输入。 要看提示词会被怎样解读(必含表格 / 禁止项 / 字数下限),去提示词页的规则预览。"}),d&&(0,r.jsx)(i.A,{type:"info",showIcon:!0,style:{marginBottom:8},message:"本次项目资料:".concat(d.root||"(未指定)","(").concat(d.fileCount," 份文件)"),description:"资料范围已锁定在所选项目资料内:库里其它项目的材料不会进入本篇。"}),0===a.length&&(0,r.jsx)(i.A,{type:"info",showIcon:!0,message:"本次没有派生出章清单",description:"派生的硬约束是提示词(或输入框要求)里要有 ≥2 章的显式大纲;缺大纲时服务端会直接拒绝这次生成,并在提示里说清缺什么。"}),(0,r.jsx)(c.A,{size:"small",dataSource:a,renderItem:(e,t)=>(0,r.jsx)(c.A.Item,{children:(0,r.jsx)(c.A.Item.Meta,{title:"".concat(t+1,". ").concat(e.title),description:e.sections.length>0?e.sections.join("、"):"(无预设小节)"})})})]})}},45551:(e,t,n)=>{function r(e){if(0===e)return"0 B";let t=Math.floor(Math.log(e)/Math.log(1024)),n=e/Math.pow(1024,t);return"".concat(n.toFixed(+(0!==t))," ").concat(["B","KB","MB","GB","TB"][t])}function a(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"zh-CN",n=Math.max(0,Math.floor(e)),r=Math.floor(n/86400),a=Math.floor(n%86400/3600),l=Math.floor(n%3600/60),o="en-US"===t;return r>0?o?"".concat(r,"d ").concat(a,"h"):"".concat(r," 天 ").concat(a," 小时"):a>0?o?"".concat(a,"h ").concat(l,"m"):"".concat(a," 小时 ").concat(l," 分"):l>0?o?"".concat(l,"m"):"".concat(l," 分"):o?"Just now":"刚刚"}function l(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"zh-CN";if(!e||e<=0)return"en-US"===t?"Never":"从未";let n=Math.floor(Math.floor((Date.now()-e)/1e3)/60),r=Math.floor(n/60),a=Math.floor(r/24);return a>30?new Date(e).toLocaleDateString(t):"en-US"===t?a>0?"".concat(a,"d ago"):r>0?"".concat(r,"h ago"):n>0?"".concat(n,"m ago"):"Just now":a>0?"".concat(a," 天前"):r>0?"".concat(r," 小时前"):n>0?"".concat(n," 分钟前"):"刚刚"}n.d(t,{Jm:()=>c,a3:()=>a,fw:()=>l,mc:()=>s,z3:()=>r});let o={document:"文档",spreadsheet:"表格",image:"图片",cad:"图纸",code:"代码",data:"数据",web:"网页",diagram:"图表",archive:"压缩包",other:"其他"},i={document:"Document",spreadsheet:"Spreadsheet",image:"Image",cad:"CAD",code:"Code",data:"Data",web:"Web",diagram:"Diagram",archive:"Archive",other:"Other"};function c(e){var t;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"zh-CN";return null!=(t=("en-US"===n?i:o)[e])?t:e}let s={active:"common.statusIndexed",outdated:"common.statusOutdated",error:"common.statusAbnormal",deleted:"common.statusDeleted",disk:"common.statusNotIndexed"}},52057:(e,t,n)=>{n.d(t,{B:()=>i,VF:()=>l,ff:()=>o,s_:()=>c});var r=n(97109),a=n(8090);let l=24;function o(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:80,a=e.x*t.k+t.x,l=e.y*t.k+t.y,o=a+e.width*t.k,i=l+e.height*t.k;return!(o>=-r&&i>=-r&&a<=n.width+r&&l<=n.height+r)}function i(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:24,a=t.x,l=t.y,o=t.x+e.width*t.k,i=t.y+e.height*t.k,c=Math.min(o,n.right)-Math.max(a,n.left),s=Math.min(i,n.bottom)-Math.max(l,n.top);return c>=r&&s>=r?{dx:0,dy:0}:{dx:n.left+r-a,dy:n.top+r-l}}function c(){let[e,t]=(0,r.useState)({x:0,y:0,k:1}),n=(0,r.useRef)(null),l=(0,r.useRef)(null),o=(0,r.useRef)(e);(0,r.useEffect)(()=>{o.current=e},[e]);let i=(0,r.useCallback)((e,r,a)=>{t(t=>{var l;let o=Math.min(2,Math.max(.1,t.k*e)),i=null==(l=n.current)?void 0:l.getBoundingClientRect();if(!i||void 0===r||void 0===a)return{...t,k:o};let c=(r-i.left-t.x)/t.k,s=(a-i.top-t.y)/t.k;return{k:o,x:r-i.left-c*o,y:a-i.top-s*o}})},[]),[c,s]=(0,r.useState)(null);(0,r.useEffect)(()=>{var e,t;let r=null!=(t=null==(e=n.current)?void 0:e.parentElement)?t:n.current;r&&r!==c&&s(r)}),(0,r.useEffect)(()=>{if(!c)return;let e=e=>{(e=>{for(let t=e;t&&t!==c;t=t.parentElement)if(t.scrollHeight>t.clientHeight+1){let e=getComputedStyle(t).overflowY;if("auto"===e||"scroll"===e)return!0}return!1})(e.target)||(e.preventDefault(),i(Math.exp(-e.deltaY/320),e.clientX,e.clientY))};return c.addEventListener("wheel",e,{passive:!1}),()=>c.removeEventListener("wheel",e)},[c,i]);let u=(0,r.useCallback)(e=>{if(0!==e.button)return;e.currentTarget.setPointerCapture(e.pointerId);let t=o.current;l.current={pointerId:e.pointerId,startX:e.clientX,startY:e.clientY,originX:t.x,originY:t.y}},[]),d=(0,r.useCallback)(e=>{let n=l.current;n&&n.pointerId===e.pointerId&&t(t=>({...t,x:n.originX+(e.clientX-n.startX),y:n.originY+(e.clientY-n.startY)}))},[]),m=(0,r.useCallback)(()=>{l.current=null},[]),f=(0,r.useCallback)(()=>t({x:0,y:0,k:1}),[]),p=(e,t)=>null!=t?t:{left:0,top:0,right:e.width,bottom:e.height},h=(0,r.useCallback)((e,r,a)=>{t(t=>{var l;let o=null==(l=n.current)?void 0:l.getBoundingClientRect();if(!o||e<=0||r<=0)return{...t,x:0,y:0};let i=p(o,a),c=Math.max(1,i.right-i.left),s=Math.max(1,i.bottom-i.top),u=Math.min(2,Math.max(.1,Math.min(c/e,s/r)));return{k:u,x:i.left+(c-e*u)/2,y:i.top+(s-r*u)/2}})},[]),g=(0,r.useCallback)((e,r,l,o)=>{t(t=>{var i;let c=null==(i=n.current)?void 0:i.getBoundingClientRect();if(!c)return t;let s=p(c,o),u=null!=l?l:t.k,d=(s.left+s.right)/2,m=(s.top+s.bottom)/2;return{k:u,x:d-(e+a.zT/2)*u,y:m-(r+a.EL/2)*u}})},[]);return{view:e,containerRef:n,zoomAt:i,onPointerDown:u,onPointerMove:d,endDrag:m,reset:f,fit:h,centerOn:g,panBy:(0,r.useCallback)((e,n)=>{(0!==e||0!==n)&&t(t=>({...t,x:t.x+e,y:t.y+n}))},[])}}},57481:(e,t,n)=>{n.d(t,{_:()=>x});var r=n(65321),a=n(97109),l=n(17807),o=n(42700),i=n(84253),c=n(32965),s=n(14932),u=n(75174),d=n(1310),m=n(58209),f=n(85587),p=n(6578),h=n(70553),g=n(45551);let v="canvas:recordsBallPos";function x(e){let{currentDocumentId:t,projectRoot:n,onSelect:x,onCurrentDeleted:w}=e,k=(0,f.Vr)(),{message:b}=l.A.useApp(),A=(0,a.useRef)(null),[I,j]=(0,a.useState)([]),[E,S]=(0,a.useState)(!1),[M,C]=(0,a.useState)(!1),[R,N]=(0,a.useState)(1),[T,D]=(0,a.useState)(!1),[_,B]=(0,a.useState)([]),[q,P]=(0,a.useState)(!1),[z,L]=(0,a.useState)(null),[O,U]=(0,a.useState)(!0),H=(0,a.useRef)(null);(0,a.useEffect)(()=>{var e,t;let n=function(){try{let e=window.localStorage.getItem(v);if(!e)return null;let t=JSON.parse(e);return"number"==typeof(null==t?void 0:t.left)&&"number"==typeof(null==t?void 0:t.top)?{left:t.left,top:t.top}:null}catch(e){return null}}();if(!n)return;let r=null==(t=A.current)||null==(e=t.parentElement)?void 0:e.getBoundingClientRect();if(!r)return void L(n);L({left:Math.min(Math.max(8,n.left),Math.max(8,r.width-44-8)),top:Math.min(Math.max(8,n.top),Math.max(8,r.height-44-8))})},[]);let G=(0,a.useCallback)(async()=>{S(!0);try{let e=await (0,p.cQ)(n||void 0);j(e.documents||[])}catch(e){j([])}finally{S(!1)}},[n]);(0,a.useEffect)(()=>{G()},[G]),(0,a.useEffect)(()=>{M&&G()},[M,G]),(0,a.useEffect)(()=>{N(1),B([])},[M]),I.length;let X=(0,a.useMemo)(()=>I.slice((R-1)*8,8*R),[I,R]),Y=(0,a.useCallback)(e=>!(0,h.Ce)(e.status),[]),F=X.filter(Y).map(e=>e.id),K=()=>{if(!M){var e,t,n;let r=null==(t=A.current)||null==(e=t.parentElement)?void 0:e.getBoundingClientRect(),a=null==(n=A.current)?void 0:n.getBoundingClientRect();U(!r||!a||a.top-r.top>252)}C(e=>!e)},J=async e=>{try{await (0,p.QG)(e.id,e.projectRoot||n||void 0),b.success(k("common.success")),B(t=>t.filter(t=>t!==e.id)),e.id===t&&w(),await G()}catch(e){b.error(k("common.error"))}},W=async()=>{let e=I.filter(e=>_.includes(e.id)&&Y(e));if(0!==e.length){P(!0);try{await Promise.all(e.map(e=>(0,p.QG)(e.id,e.projectRoot||n||void 0))),b.success(k("records.deletedCount").replace("{count}",String(e.length))),t&&e.some(e=>e.id===t)&&w(),B([]),D(!1),await G()}catch(e){b.error(k("common.error"))}finally{P(!1)}}},Q=z?{left:z.left,top:z.top}:{right:24,bottom:96};return(0,r.jsxs)("div",{className:"canvasRecordsBall",ref:A,style:{position:"absolute",zIndex:3,...Q},children:[M&&(0,r.jsxs)("div",{className:"canvasRecordsPanel",style:{position:"absolute",right:0,width:320,maxHeight:420,display:"flex",flexDirection:"column",...O?{bottom:52}:{top:52}},children:[(0,r.jsxs)("div",{className:"flex items-center justify-between gap-2 px-3 py-2 border-b border-[var(--canvasSectionBorder)] shrink-0",children:[(0,r.jsxs)("span",{className:"text-[13px] font-semibold text-[var(--colorText)]",children:[k("records.title"),(0,r.jsx)("span",{className:"ml-2 font-normal text-xs text-[var(--colorTextTertiary)]",children:I.length})]}),(0,r.jsx)("button",{type:"button",className:"canvasRecordsLink",onClick:()=>{D(e=>!e),B([])},children:T?k("common.cancel"):k("records.batch")})]}),(0,r.jsx)("div",{className:"flex-1 min-h-0 overflow-y-auto",children:E&&0===I.length?(0,r.jsx)("div",{className:"py-10 text-center",children:(0,r.jsx)(o.A,{size:"small"})}):0===I.length?(0,r.jsx)("div",{className:"py-8",children:(0,r.jsx)(i.A,{image:i.A.PRESENTED_IMAGE_SIMPLE,description:(0,r.jsx)("span",{className:"text-xs text-[var(--colorTextTertiary)]",children:k("records.empty")})})}):X.map(e=>{var n;let a=e.id===t,l=Y(e);return(0,r.jsxs)("div",{className:"group flex items-start gap-2 px-3 py-2 border-b border-[var(--canvasSectionBorder)] last:border-b-0 transition-colors ".concat(a?"bg-[var(--colorBgSelected)]":"hover:bg-[var(--colorBgHover)]"),children:[T&&(0,r.jsx)("input",{type:"checkbox",className:"mt-1 shrink-0",disabled:!l,checked:_.includes(e.id),onChange:t=>B(n=>t.target.checked?[...n,e.id]:n.filter(t=>t!==e.id))}),(0,r.jsxs)("button",{type:"button",className:"min-w-0 flex-1 text-left bg-transparent border-0 p-0 cursor-pointer",title:e.title,onClick:()=>{x(e),C(!1)},children:[(0,r.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,r.jsx)("span",{className:"w-1.5 h-1.5 shrink-0 rounded-full ".concat(null!=(n=y[e.status])?n:"bg-[var(--colorTextTertiary)]")}),(0,r.jsx)("span",{className:"truncate text-[13px] ".concat(a?"font-semibold text-[var(--colorText)]":"text-[var(--colorText)]"),children:e.title}),a&&(0,r.jsx)("span",{className:"shrink-0 text-[10px] text-[var(--colorTextTertiary)]",children:k("records.current")})]}),(0,r.jsxs)("div",{className:"mt-0.5 pl-3 text-[11px] text-[var(--colorTextTertiary)]",children:[(0,r.jsx)(d.A,{className:"mr-1"}),(0,g.fw)(e.updatedAt,"zh-CN")]})]}),!T&&l&&(0,r.jsx)(c.A,{title:k("records.confirmDelete"),description:k("records.deleteHint"),onConfirm:()=>{J(e)},okText:k("common.confirm"),cancelText:k("common.cancel"),children:(0,r.jsx)("button",{type:"button",className:"canvasRecordsDelete",title:k("common.delete"),children:(0,r.jsx)(m.A,{})})}),!T&&!l&&(0,r.jsx)(s.A,{title:k("records.inFlightHint"),children:(0,r.jsx)("span",{className:"canvasRecordsDelete isDisabled",children:(0,r.jsx)(m.A,{})})})]},e.id)})}),I.length>8&&(0,r.jsx)("div",{className:"flex justify-center px-3 py-2 border-t border-[var(--canvasSectionBorder)] shrink-0",children:(0,r.jsx)(u.A,{size:"small",simple:!0,current:R,total:I.length,pageSize:8,onChange:N})}),T&&(0,r.jsxs)("div",{className:"flex items-center justify-between gap-2 px-3 py-2 border-t border-[var(--canvasSectionBorder)] shrink-0",children:[(0,r.jsx)("span",{className:"text-xs text-[var(--colorTextSecondary)]",children:k("records.checkedCount").replace("{count}",String(_.length))}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("button",{type:"button",className:"canvasRecordsLink",onClick:()=>B(_.length===F.length?[]:F),children:_.length===F.length&&F.length>0?k("records.clearSelect"):k("records.selectPage")}),(0,r.jsx)(c.A,{title:k("records.confirmDeleteSelected").replace("{count}",String(_.length)),description:k("records.deleteHint"),disabled:0===_.length,onConfirm:()=>{W()},okText:k("common.confirm"),cancelText:k("common.cancel"),children:(0,r.jsxs)("button",{type:"button",className:"canvasRecordsDanger",disabled:0===_.length||q,children:[(0,r.jsx)(m.A,{className:"mr-1"}),k("records.deleteSelected")]})})]})]})]}),(0,r.jsxs)("div",{className:"canvasRecordsBallBtn",role:"button",tabIndex:0,"aria-label":"".concat(k("records.title"),"(").concat(I.length,")"),style:{width:44,height:44},onPointerDown:e=>{var t,n,r;let a=null==(n=A.current)||null==(t=n.parentElement)?void 0:t.getBoundingClientRect(),l=null==(r=A.current)?void 0:r.getBoundingClientRect();if(a&&l){H.current={pointerId:e.pointerId,startX:e.clientX,startY:e.clientY,originLeft:l.left-a.left,originTop:l.top-a.top,moved:!1};try{e.currentTarget.setPointerCapture(e.pointerId)}catch(e){}}},onPointerMove:e=>{var t,n;let r=H.current,a=null==(n=A.current)||null==(t=n.parentElement)?void 0:t.getBoundingClientRect();if(!r||r.pointerId!==e.pointerId||!a)return;let l=e.clientX-r.startX,o=e.clientY-r.startY;!r.moved&&5>Math.hypot(l,o)||(r.moved=!0,L({left:Math.min(Math.max(8,r.originLeft+l),Math.max(8,a.width-44-8)),top:Math.min(Math.max(8,r.originTop+o),Math.max(8,a.height-44-8))}))},onPointerUp:e=>{let t=H.current;H.current=null;try{e.currentTarget.releasePointerCapture(e.pointerId)}catch(e){}if(t){if(t.moved)return void L(e=>{if(e)try{window.localStorage.setItem(v,JSON.stringify(e))}catch(e){}return e});K()}},onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),K())},children:[(0,r.jsx)(d.A,{}),(0,r.jsx)("span",{className:"canvasRecordsBallBadge".concat(0===I.length?" isZero":""),children:I.length>99?"99+":I.length})]})]})}let y={completed:"bg-[var(--colorOk)]",completed_with_issues:"bg-[var(--colorDanger)]",warning:"bg-[var(--colorWarning)]",failed:"bg-[var(--colorDanger)]",aborted:"bg-[var(--colorTextTertiary)]",generating:"bg-[var(--colorAccent)]",queued:"bg-[var(--colorTextTertiary)]",paused:"bg-[var(--colorWarning)]"}},70553:(e,t,n)=>{n.d(t,{Ce:()=>w,tl:()=>b});var r=n(97109),a=n(25258),l=n(23216),o=n(26619),i=n(8263),c=n(16285),s=n(8579),u=n(29071),d=n(7851),m=n(1310),f=n(26631),p=n(83914),h=n(6578);let g=null,v=!1;function x(){null==g||g.listeners.forEach(e=>e())}let y={role_binding:"角色配置绑定",knowledge_retrieval:"知识库检索",file_understanding:"多模态文件理解",fact_extraction:"LLM 事实抽取",chapter_generation:"LLM 章节生成",validation:"规则校验",llm_review:"LLM 审查优化",reference:"参考资源处理"};function w(e){return"completed"!==e&&"completed_with_issues"!==e&&"warning"!==e&&"failed"!==e&&"aborted"!==e&&"paused"!==e}function k(e){var t,n,a,p,h,g,v,x,w;let k=null==(t=e.agentWorkflow)?void 0:t.nodes;if(!k||0===k.length)return null;let b=[...k].sort((e,t)=>{var n,r;return(null!=(n=e.seq)?n:0)-(null!=(r=t.seq)?r:0)}).map(e=>{let t=y[e.type]||e.title||e.type||"节点",n="failed"===e.status||"blocked"===e.status?"error":"paused"===e.status||"repairing"===e.status?"warning":"running"===e.status?"process":"pending"===e.status?"wait":"finish",a=Object.entries(e.metrics||{}).slice(0,4).map(e=>{let[t,n]=e;return"".concat(t,":").concat(String(n))}).join(" ");return{key:e.id,title:t,subtitle:e.progress?"".concat(e.progress.label||"进度",":").concat(e.progress.current,"/").concat(e.progress.total):"",description:a,status:n,icon:function(e){let t=e.split(".")[0]||e;return"role_binding"===e||"prepare"===t?(0,r.createElement)(l.A):"knowledge_retrieval"===e||"understand"===t?(0,r.createElement)(o.A):"file_understanding"===e||"skill"===t?(0,r.createElement)(i.A):"fact_extraction"===e?(0,r.createElement)(c.A):"chapter_generation"===e||"chapter"===t||"write"===t?(0,r.createElement)(s.A):"llm_review"===e||"turn"===t||"round"===t?(0,r.createElement)(u.A):"validation"===e||"repair"===t||"recheck"===t?(0,r.createElement)(d.A):"plan"===t||"blueprint"===t?(0,r.createElement)(l.A):"rollback"===t||"snapshot"===t?(0,r.createElement)(m.A):(0,r.createElement)(f.A)}(e.type),subSteps:[]}}),A="generating"===e.status||"queued"===e.status?null!=(v=null!=(g=null==(n=b.find(e=>"process"===e.status))?void 0:n.key)?g:null==(a=b.at(-1))?void 0:a.key)?v:null:("failed"===e.status||"aborted"===e.status)&&null!=(w=null!=(x=null==(p=b.find(e=>"error"===e.status))?void 0:p.key)?x:null==(h=b.at(-1))?void 0:h.key)?w:null;return{steps:b,activeKey:A}}function b(){var e,t;let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{projectRoot:l,documents:o,onNotice:i,t:c,onGenerated:s}=n,[u,d]=(0,r.useState)([]),[m,f]=(0,r.useState)(null),[y,b]=(0,r.useState)(!1),[A,I]=(0,r.useState)(null),[j,E]=(0,r.useState)(""),[S,M]=(0,r.useState)(null),[C,R]=(0,r.useState)(null!=(e=n.documentId)?e:null),[N,T]=(0,r.useState)(null),[D,_]=(0,r.useState)(null!=o?o:[]),[B,q]=(0,r.useState)(0),[P,z]=(0,r.useState)(null),[L,O]=(0,r.useState)([]),[U,H]=(0,r.useState)(null),G=(0,r.useRef)(""),X=(0,r.useRef)(new Map),Y=(0,r.useRef)(new Map),F=(0,r.useRef)(!1),K=(0,r.useRef)(l),J=(0,r.useRef)(C),W=(0,r.useRef)(u),Q=(0,r.useRef)(m),V=(0,r.useRef)(y),Z=(0,r.useRef)(c),$=(0,r.useRef)(i),ee=(0,r.useRef)(s);(0,r.useEffect)(()=>{K.current=l},[l]),(0,r.useEffect)(()=>{J.current=C},[C]),(0,r.useEffect)(()=>{W.current=u},[u]),(0,r.useEffect)(()=>{Q.current=m},[m]),(0,r.useEffect)(()=>{V.current=y},[y]),(0,r.useEffect)(()=>{Z.current=c},[c]),(0,r.useEffect)(()=>{$.current=i},[i]),(0,r.useEffect)(()=>{ee.current=s},[s]);let et=(0,r.useMemo)(()=>"activeGenDocId:".concat(l||"default"),[l]),en=(0,r.useCallback)(e=>{var t;null==(t=$.current)||t.call($,e)},[]),er=(0,r.useCallback)((e,t)=>{var n,r;return null!=(r=null==(n=Z.current)?void 0:n.call(Z,e))?r:t},[]);(0,r.useEffect)(()=>{let e=()=>{let e=g;e&&(d(e.flowSteps),f(e.activeFlowKey),b(e.loading),e.documentId&&R(e.documentId),e.draft&&I(e.draft),void 0!==e.content&&E(e.content))},t=g;return null==t||t.listeners.add(e),e(),()=>{null==t||t.listeners.delete(e)}},[]);let ea=(0,r.useCallback)(async()=>{try{_((await (0,h.cQ)(K.current||void 0)).documents)}catch(e){_([])}},[]);(0,r.useEffect)(()=>{o&&_(o)},[o]),(0,r.useEffect)(()=>{void 0!==n.documentId&&null!==n.documentId&&R(n.documentId)},[n.documentId]);let el=(0,r.useCallback)(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:V.current;(null==g?void 0:g.loading)&&(g.flowSteps=e,g.activeFlowKey=t,g.loading=n,x())},[]),eo=(0,r.useCallback)(e=>{let t=Date.now();for(let n of e){let e=X.current.get(n.key);"process"!==n.status||e?("finish"===n.status||"error"===n.status||"warning"===n.status)&&e&&!e.endedAt&&X.current.set(n.key,{...e,endedAt:t}):X.current.set(n.key,{startedAt:t})}},[]),ei=(0,r.useCallback)(e=>{let t=Math.max(0,Math.round(e/1e3));if(t<60)return"".concat(t," 秒");let n=Math.floor(t/60);return n<60?"".concat(n," 分 ").concat(t%60," 秒"):"".concat(Math.floor(n/60)," 小时 ").concat(n%60," 分")},[]),ec=(0,r.useCallback)(e=>{var t;let n=(null==(t=e.agentWorkflow)?void 0:t.nodes)||[],r="".concat(e.id,"|").concat(e.updatedAt,"|").concat(e.status,"|").concat(e.error||"","|n").concat(n.length,":").concat(n.map(e=>{var t,n,r,a;return"".concat(e.id,"=").concat(e.status,":").concat(null!=(r=null==(t=e.progress)?void 0:t.current)?r:0,"/").concat(null!=(a=null==(n=e.progress)?void 0:n.total)?a:0)}).join(","));if(G.current===r)return;G.current=r,M(e);let{steps:a,activeKey:l}=function(e){var t;return arguments.length>1&&void 0!==arguments[1]&&arguments[1],null!=(t=k(e))?t:{steps:[],activeKey:null}}(e);eo(a);let o=w(e.status);d(a),f(l),b(o),el(a,l,o),T("failed"===e.status||"aborted"===e.status?e.error||("aborted"===e.status?"生成已中止":"生成失败"):null),("completed"===e.status||"completed_with_issues"===e.status||"warning"===e.status)&&(e.draft&&I(e.draft),E(e.editedMarkdown||e.markdown),O(e.exportReports||[]))},[el,eo]),es=(0,r.useCallback)(e=>{e.id&&R(e.id),ec(e)},[ec]),eu=(0,r.useCallback)(async(e,t)=>{let n=Date.now(),r=0,a=Date.now(),l=null,o=0;for(;;){let i,c;if(null==t?void 0:t.aborted)throw Error("用户中止");let s=new AbortController;t&&(t.pollController=s);try{let t=await (0,h.v7)(e,!0,K.current||void 0,s.signal,r||void 0);i=t.document,c=t.status,o=0}catch(e){if((null==t?void 0:t.aborted)||e instanceof DOMException&&"AbortError"===e.name)throw Error("用户中止",{cause:e});if((o+=1)>=3)throw e instanceof Error?e:Error("生成进度获取失败");await new Promise(e=>window.setTimeout(e,2e3*o));continue}finally{(null==t?void 0:t.pollController)===s&&(t.pollController=void 0)}let u=i?"queued"===i.status:"queued"===c;if(u&&(a=Date.now(),Date.now()-n>216e5))throw Error("排队等待超时,请稍后刷新列表查看或取消后重新发起");if(!i){if(!u&&(Date.now()-(null!=l?l:n)>75e5||Date.now()-a>96e4))throw Error("生成任务疑似卡住,请点击继续生成或重新生成(后台任务可能仍在运行,稍后刷新可查看)");await new Promise(e=>window.setTimeout(e,1500));continue}if(ec(i),"generating"===i.status&&null===l&&(l=Date.now()),i.updatedAt!==r&&(r=i.updatedAt,a=Date.now()),("completed"===i.status||"completed_with_issues"===i.status||"warning"===i.status)&&i.draft)return i;if("warning"===i.status&&i.error&&/已中断/u.test(i.error))throw Error(i.error);if("failed"===i.status||"aborted"===i.status)throw Error(i.error||("aborted"===i.status?"生成已中止":"生成失败"));if(!u&&(Date.now()-(null!=l?l:n)>75e5||Date.now()-a>96e4))throw Error("生成任务疑似卡住,请点击继续生成或重新生成(后台任务可能仍在运行,稍后刷新可查看)");await new Promise(e=>window.setTimeout(e,1500))}},[ec]),ed=(0,r.useCallback)(async(e,t)=>{if(!e.specId)return;let n=e.title,a=e.promptIds,l=e.projectRoot||K.current;if((null==g?void 0:g.aborted)&&(g=null),null==g?void 0:g.loading){if(F.current)return;if(!l)return void en({kind:"error",text:"未识别当前项目,请先选择或打开项目后再生成文件"});F.current=!0;try{let e=await (0,h.OX)({promptIds:a,...n?{title:n}:{},requirement:t,projectRoot:l});await ea(),en({kind:"info",text:e.queuePosition?"已加入生成队列(第 ".concat(e.queuePosition," 位):前面任务完成后将自动开始"):"生成任务已创建"})}catch(e){en({kind:"error",text:e instanceof Error?e.message:"创建生成任务失败"})}finally{F.current=!1}return}if(!l)return void en({kind:"error",text:"未识别当前项目,请先选择或打开项目后再生成文件"});b(!0);let o=W.current,i=o.length>0?o:[{key:"prepare",title:"正在创建生成任务",description:"系统正在创建后台生成任务,请稍候。",status:"process",icon:(0,r.createElement)(p.A),subSteps:[{key:"start",title:"准备生成任务",status:"process"}]}],c=Q.current||"prepare";d(i),f(c);let s=(0,h.OX)({promptIds:a,...n?{title:n}:{},requirement:t,projectRoot:l});g={id:Date.now(),specId:e.specId,loading:!0,flowSteps:i,activeFlowKey:c,promise:s,listeners:new Set};try{var u,m,y,w,A,j;let t=await s;t.documentId&&(localStorage.setItem(et,t.documentId),R(t.documentId),(null==g?void 0:g.promise)===s&&(g.documentId=t.documentId)),await ea(),t.queuePosition&&en({kind:"info",text:"已加入生成队列(第 ".concat(t.queuePosition," 位):前面任务完成后将自动开始")});let n=t.documentId?await eu(t.documentId,(null==g?void 0:g.promise)===s?g:void 0):void 0,r=t.draft||(null==n?void 0:n.draft);if(!r)throw Error("生成结果为空");(t.documentId||(null==n?void 0:n.id))&&R(t.documentId||n.id),I(r),E((null==n?void 0:n.editedMarkdown)||(null==n?void 0:n.markdown)||r.markdown),(null==g?void 0:g.promise)===s&&(g.draft=r,g.content=(null==n?void 0:n.editedMarkdown)||(null==n?void 0:n.markdown)||r.markdown);let a=n||{id:t.documentId||"draft-".concat(Date.now()),templateId:(null==(u=t.record)?void 0:u.templateId)||(null==(m=t.documentSpec)?void 0:m.id)||e.specId,templateName:(null==(y=t.record)?void 0:y.templateName)||(null==(w=t.documentSpec)?void 0:w.title),title:r.title,requirement:r.requirement,projectRoot:r.projectRoot||K.current,projectId:r.projectId,markdown:r.markdown,status:r.validationIssues.some(e=>"error"===e.level||"warning"===e.level)||!r.exportGate.passed?"completed_with_issues":"completed",draft:r,executionStages:r.executionStages,assets:r.assets||[],createdAt:r.generatedAt,updatedAt:Date.now()},{steps:l}=null!=(j=k(a))?j:{steps:[],activeKey:null};d(l),el(l,"done",!1),f("done"),(null==g?void 0:g.promise)===s&&(g.activeFlowKey="done",g.loading=!1,x(),g=null),localStorage.removeItem(et),await ea(),en({kind:"success",text:"操作成功",key:"common.success"}),(t.documentId||(null==n?void 0:n.id))&&(null==(A=ee.current)||A.call(ee,t.documentId||n.id))}catch(r){localStorage.removeItem(et);let e=r instanceof Error?r.message:er("common.error","出错了"),t=v;v=!1;let n=!t&&"用户中止"===e;T(e),t||d(t=>{let n=t.map(t=>"process"===t.status?{...t,status:"error",description:e,subSteps:t.subSteps.map((e,t)=>({...e,status:0===t?"error":e.status}))}:t);return el(n,Q.current,!1),n}),(null==g?void 0:g.promise)===s&&(g.loading=!1,g.error=e,x(),g=null),await ea(),n?en({kind:"warning",text:"生成任务已被中止(可能来自其他窗口):可在列表中点击「继续生成」恢复"}):t||en({kind:"error",text:e})}finally{b(!1),v=!1,(null==g?void 0:g.promise)===s&&(g.loading=!1,x())}},[en,ea,el,et,er,eu]),em=(0,r.useCallback)(e=>{let t=Y.current.get(e);t&&(clearInterval(t),Y.current.delete(e))},[]),ef=(0,r.useCallback)((e,t)=>{em(e);let n=setInterval(()=>{(async()=>{try{let{document:n}=await (0,h.v7)(e,!0,t||K.current||void 0);if(!n)return;ec(n),await ea(),w(n.status)||(em(e),localStorage.removeItem(et))}catch(e){}})()},2e3);Y.current.set(e,n)},[ec,ea,em,et]);(0,r.useEffect)(()=>()=>{for(let e of Y.current.values())clearInterval(e);Y.current.clear()},[]),(0,r.useEffect)(()=>{if(0===D.length)return;let e=localStorage.getItem(et);if(!e)return;if(!D.find(t=>t.id===e&&("generating"===t.status||"queued"===t.status)))return void localStorage.removeItem(et);R(e);let t=setInterval(()=>{(async()=>{try{let{document:n}=await (0,h.v7)(e,!1,K.current||void 0);if(!n)return;await ea(),"generating"!==n.status&&"queued"!==n.status&&(localStorage.removeItem(et),clearInterval(t))}catch(e){clearInterval(t)}})()},3e3);return()=>clearInterval(t)},[D,ea,et]),(0,r.useEffect)(()=>{var e;if(!C)return;let t=D.find(e=>e.id===C),n=null!=(e=null==t?void 0:t.status)?e:null==S?void 0:S.status;n&&w(n)?ef(C,(null==t?void 0:t.projectRoot)||K.current):em(C)},[C,D,ef,em,null==S?void 0:S.status]),(0,r.useEffect)(()=>{if(!y||!m)return;let e=window.setInterval(()=>d(e=>{let t=e.map(e=>{if(e.key!==m||"process"!==e.status)return e;let t=e.subSteps.findIndex(e=>"process"===e.status),n=t<0?0:Math.min(t+1,e.subSteps.length-1);return{...e,subSteps:e.subSteps.map((e,t)=>t<n?{...e,status:"finish"}:t===n?{...e,status:"process"}:{...e,status:"wait"})}});return el(t,m),t}),1400);return()=>window.clearInterval(e)},[m,y,el]),(0,r.useEffect)(()=>{if(!y)return;let e=window.setInterval(()=>q(e=>e+1),1e3);return()=>window.clearInterval(e)},[y]);let ep=(0,r.useCallback)(e=>{var t;let n=X.current.get(e);if(!n)return null;let r=ei((null!=(t=n.endedAt)?t:Date.now())-n.startedAt);return n.endedAt?r:"".concat(r,"(运行中)")},[B,ei]),eh=(0,r.useCallback)(async e=>{g&&(v=!0);let t=J.current;if(t&&await (0,h.r)(t,e||K.current||void 0).catch(()=>void 0),g){var n;g.aborted=!0,null==(n=g.pollController)||n.abort(),g.loading=!1,g.error="用户中止",x(),g=null}for(let e of(localStorage.removeItem(et),Y.current.values()))clearInterval(e);Y.current.clear(),b(!1),d([]),f(null),T("用户中止"),await ea(),en({kind:"info",text:"已中止生成任务"})},[en,ea,et]),eg=(0,r.useCallback)(async e=>{if((null==g?void 0:g.loading)&&g.documentId===e.id){var t;v=!0,g.aborted=!0,null==(t=g.pollController)||t.abort(),g.loading=!1,g.error="用户中止",x(),g=null,b(!1)}localStorage.removeItem(et),em(e.id);try{await (0,h.r)(e.id,e.projectRoot||K.current||void 0),en({kind:"success",text:"queued"===e.status?"已取消排队任务":"已中止生成任务"})}catch(e){en({kind:"info",text:"任务已不在运行,已刷新状态"})}finally{await ea(),J.current===e.id&&(R(null),M(null),I(null),E(""))}},[en,ea,em,et]),ev=(0,r.useCallback)(async e=>{try{R(e.id),b(!0);let t=await (0,h.UQ)(e.id,e.projectRoot||K.current||void 0);localStorage.setItem(et,t.documentId),await ea();let n=await eu(t.documentId);n.draft&&(I(n.draft),E(n.editedMarkdown||n.markdown||n.draft.markdown)),localStorage.removeItem(et),await ea(),en({kind:"success",text:"已继续生成并完成"})}catch(e){en({kind:"error",text:e instanceof Error?e.message:"继续生成失败"})}finally{b(!1)}},[en,ea,et,eu]),ex=(0,r.useCallback)(async(e,t)=>{let n=await fetch("/api/documents/generated/".concat(encodeURIComponent(e),"/pause"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectRoot:t||K.current||void 0})});if(!n.ok)throw Error(await n.text()||"HTTP ".concat(n.status));let r=await n.json();return en({kind:"info",text:r.message||"已请求暂停:将在当前节点边界停住并落盘"}),await ea(),ef(e,t),r},[en,ea,ef]),ey=(0,r.useCallback)(async(e,t)=>{let n=await fetch("/api/documents/generated/".concat(encodeURIComponent(e),"/resume-generate"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectRoot:t||K.current||void 0})});if(!n.ok)throw Error(await n.text()||"HTTP ".concat(n.status));en({kind:"info",text:"已请求继续:将从暂停的节点边界接着跑"}),await ea()},[en,ea]),ew=(0,r.useCallback)((e,t,n)=>{let r=new Blob([e],{type:n}),a=URL.createObjectURL(r),l=document.createElement("a");l.href=a,l.download=t,l.target="_self",l.rel="noopener",l.style.display="none",document.body.appendChild(l),l.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0,view:window})),l.remove(),window.setTimeout(()=>URL.revokeObjectURL(a),1e3)},[]),ek=(0,r.useCallback)(async(e,t,n)=>{let{blob:r,filename:a,notDeliverable:l,gateIssues:o}=await (0,h.UE)(e);ew(r,a||t,n),H(l?{at:Date.now(),count:o.length,issues:o}:null)},[ew]),eb=(0,r.useCallback)(e=>/导出门禁未通过|EXPORT_GATE_BLOCKED/u.test(e),[]),eA=(0,r.useCallback)(e=>new Promise(t=>{a.A.confirm({title:er("documents.exportGateBlockedTitle","导出门禁未通过"),content:"".concat(e,"\n\n").concat(er("documents.nonDeliverableExportConfirm","仍要导出将产出「非交付物」文件(文件名带后缀且界面显著标注),是否继续?")),okText:er("documents.exportAnywayNonDeliverable","仍要导出(非交付物)"),okButtonProps:{danger:!0},cancelText:er("common.cancel","取消"),onOk:()=>t(!0),onCancel:()=>t(!1)})}),[er]),eI=(0,r.useCallback)(async(e,t)=>{let n=e instanceof Error?e.message:er("common.error","出错了");if(!eb(n))return void en({kind:"error",text:n});if(await eA(n))try{await t()}catch(e){en({kind:"error",text:e instanceof Error?e.message:er("common.error","出错了")})}},[eA,eb,en,er]),ej=(0,r.useMemo)(()=>({markdown:"text/markdown;charset=utf-8",html:"text/html;charset=utf-8",pdf:"application/pdf",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document"}),[]),eE=(0,r.useCallback)(async(e,t)=>{var n;let r=e.editedMarkdown||e.markdown||(null==(n=e.draft)?void 0:n.markdown)||"";if(!r.trim())return void en({kind:"warning",text:"该记录暂无可导出的正文内容"});z(t);let a="markdown"===t?"md":t,l={documentId:e.id,title:e.title,markdown:r,format:t,useClientMarkdown:!0,projectRoot:e.projectRoot||K.current||void 0};try{await ek(l,"".concat(e.title,".").concat(a),ej[t])}catch(n){await eI(n,async()=>{await ek({...l,allowNonDeliverable:!0},"".concat(e.title,".").concat(a),ej[t])})}finally{z(null)}},[ek,ej,eI,en]),eS=(0,r.useCallback)(async e=>{if(!A)return;z(e);let t="markdown"===e?"md":e,n={documentId:J.current||void 0,title:A.title,markdown:j,format:e,exportGate:A.exportGate,useClientMarkdown:!0,projectRoot:A.projectRoot||K.current||void 0};try{if(await ek(n,"".concat(A.title,".").concat(t),ej[e]),J.current)try{let{document:e}=await (0,h.v7)(J.current,!1,A.projectRoot||K.current||void 0);e&&O(e.exportReports||[])}catch(e){}}catch(r){await eI(r,async()=>{await ek({...n,allowNonDeliverable:!0},"".concat(A.title,".").concat(t),ej[e])})}finally{z(null)}},[j,ek,A,ej,eI]),eM=C&&null!=(t=D.find(e=>e.id===C))?t:S,eC=function(e,t){if(!e)return t?"running":"idle";switch(e){case"queued":return"queued";case"generating":return"running";case"paused":return"paused";case"failed":case"aborted":return"stopped";case"completed_with_issues":case"warning":return"issues";case"completed":return"done";default:return"idle"}}(null==eM?void 0:eM.status,y);return{flowSteps:u,activeFlowKey:m,loading:y,draft:A,content:j,workflowRecord:S,documentId:C,documents:D,error:N,phase:eC,flowTick:B,boundRecord:eM,canResume:function(e){var t,n,r,a,l,o;let i=!!e&&w(e.status);return!!e&&("paused"===e.status||"failed"===e.status||"aborted"===e.status||"completed_with_issues"===e.status||"warning"===e.status&&!!(null==(t=e.checkpointChapters)?void 0:t.length)&&/继续生成|重新生成|中断|卡住|未完成|门禁|阻断/u.test(e.error||(null==(n=e.warningIssues)?void 0:n.join(";"))||(null==(l=e.draft)||null==(a=l.exportGate)||null==(r=a.blockingIssues)?void 0:r.map(e=>e.message).join(";"))||"")||!i&&!!((null==(o=e.draft)?void 0:o.exportGate)&&!1===e.draft.exportGate.passed))}(eM),startGeneration:ed,abortGeneration:eh,abortDocument:eg,resumeDocument:ev,pauseDocument:ex,resumePausedDocument:ey,applyRecord:es,refreshDocuments:ea,waitForDoc:eu,stepDurationText:ep,setDraft:I,setContent:E,setExportReports:O,export:{exporting:P,nonDeliverableExport:U,exportRecord:eE,exportEditor:eS,downloadExport:ek,handleExportError:eI,confirmNonDeliverableExport:eA,exportReports:L}}}}}]);
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[795],{27795:(e,t,a)=>{a.r(t),a.d(t,{default:()=>f});var s=a(65321),l=a(97109),o=a(85587),r=a(33442),n=a(85114),c=a(99605),i=a(99811),d=a(13114),v=a(29071),x=a(26631),m=a(84742),u=a(38762),h=a(24810),g=a(6578),p=a(45551),w=a(85310);function j(e){let{title:t,value:a,subtext:l,icon:o,colorClass:r,animationClass:n}=e;return(0,s.jsxs)("div",{className:"p-4 ".concat(w.wD," flex flex-col justify-between animateFadeIn ").concat(n||""),style:{opacity:0},children:[(0,s.jsxs)("div",{className:"flex items-start justify-between mb-2",children:[(0,s.jsx)("div",{className:"text-xs font-semibold text-[var(--colorTextSecondary)] tracking-wide uppercase",children:t}),o&&(0,s.jsx)("div",{className:r,style:{opacity:.7},children:o})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"text-3xl font-bold tracking-tight",children:a}),l&&(0,s.jsx)("div",{className:"text-xs mt-1 truncate font-medium",style:{color:"var(--colorTextTertiary)"},children:l})]})]})}function f(){var e,t,a,f,y,N,b,k,T,C,S,A,D,M,B,U,z,I,P,F,L,O;let Z=(0,o.Vr)(),{locale:_}=(0,o.x_)(),[W,E]=(0,l.useState)(null),[J,R]=(0,l.useState)(!0),[K,G]=(0,l.useState)(0),[H,Q]=(0,l.useState)(0),[V,q]=(0,l.useState)(0),[X,Y]=(0,l.useState)(0),[$,ee]=(0,l.useState)(null),[et,ea]=(0,l.useState)(null),es=(0,l.useCallback)(async()=>{R(!0);try{let[e,t,a,s,l,o]=await Promise.all([(0,g.FC)(),(0,g.Z3)().catch(()=>[]),(0,g.dx)().catch(()=>[]),(0,g.cQ)().catch(()=>({documents:[]})),(0,g.II)().catch(()=>null),(0,g.BO)().catch(()=>[])]);E(e),G(Array.isArray(t)?t.length:0),Q(Array.isArray(a)?a.length:0),q(Array.isArray(s.documents)?s.documents.length:0),Y(Array.isArray(o)?o.filter(e=>e.fileCount>0).length:0),ee(l),ea(Date.now())}catch(e){}finally{R(!1)}},[]);(0,l.useEffect)(()=>{es();let e=setInterval(()=>{es()},1e4);return()=>clearInterval(e)},[es]);let el=(null==W?void 0:W.tasks.total)?Math.round(W.tasks.success/W.tasks.total*100):null,eo=null==W||null==(e=W.models)?void 0:e[0],er=(null==W?void 0:W.logs.latestAt)?(0,p.fw)(new Date(W.logs.latestAt).getTime(),_):Z("overview.noLogs");return(0,s.jsxs)("div",{className:"space-y-6",children:[(0,s.jsxs)("div",{className:"flex flex-col sm:flex-row sm:items-end justify-between gap-4 pb-6 border-b border-[var(--borderColor)]",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("h1",{className:"text-3xl font-extrabold tracking-tight text-[var(--colorText)] mb-2",children:Z("overview.title")}),(0,s.jsx)("p",{className:"text-sm text-[var(--colorTextSecondary)]",children:Z("overview.description")})]}),(0,s.jsxs)(r.A,{children:[(0,s.jsxs)("span",{className:"text-xs font-mono",style:{color:"var(--colorTextTertiary)"},children:[Z("overview.updated"),": ",et?new Date(et).toLocaleTimeString(_):"—"]}),(0,s.jsx)(n.Ay,{type:"text",icon:(0,s.jsx)(i.A,{spin:J}),onClick:()=>{es()}})]})]}),(0,s.jsx)(w.Zk,{title:Z("overview.coreMetrics"),description:Z("overview.coreMetricsDesc"),children:(0,s.jsxs)("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-4",children:[(0,s.jsx)(j,{title:Z("overview.uptime"),value:(0,p.a3)(null!=(a=null==W?void 0:W.serviceUptimeSeconds)?a:0,_),subtext:"".concat(Z("overview.processUptime")," ").concat((0,p.a3)(null!=(f=null==W?void 0:W.uptime)?f:0,_)),icon:(0,s.jsx)(d.A,{size:16}),colorClass:"text-[var(--colorBrand)]",animationClass:"stagger-1"}),(0,s.jsx)(j,{title:Z("overview.tokensUsed"),value:(null!=(y=null==W?void 0:W.tokens.total)?y:0).toLocaleString(),subtext:"P ".concat(null!=(N=null==W?void 0:W.tokens.prompt)?N:0," / C ").concat(null!=(b=null==W?void 0:W.tokens.completion)?b:0),icon:(0,s.jsx)(v.A,{size:16}),colorClass:"text-[var(--colorWarn)]",animationClass:"stagger-2"}),(0,s.jsx)(j,{title:Z("overview.tasksTotal"),value:(null!=(k=null==W?void 0:W.tasks.total)?k:0).toLocaleString(),subtext:"✓ ".concat(null!=(T=null==W?void 0:W.tasks.success)?T:0," | ✗ ").concat(null!=(C=null==W?void 0:W.tasks.failed)?C:0," | ↻ ").concat(null!=(S=null==W?void 0:W.tasks.running)?S:0),icon:(0,s.jsx)(x.A,{size:16}),colorClass:"text-[var(--colorInfo)]",animationClass:"stagger-3"}),(0,s.jsx)(j,{title:Z("overview.successRate"),value:null===el?"—":"".concat(el,"%"),subtext:null===el?Z("overview.noDataAvailable"):void 0,icon:null!==el&&el>80?(0,s.jsx)(m.A,{size:16}):(0,s.jsx)(u.A,{size:16}),colorClass:null!==el&&el>80?"text-[var(--colorOk)]":"text-[var(--colorDanger)]",animationClass:"stagger-4"})]})}),(0,s.jsx)(w.Zk,{title:Z("overview.systemResources"),description:Z("overview.systemResourcesDesc"),children:(0,s.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-3 gap-4",children:[(0,s.jsx)(j,{title:Z("overview.materialUnderstanding"),value:X>0?String(X):"—",subtext:Z(X>0?"overview.materialKinds":"common.noData"),animationClass:"stagger-5"}),(0,s.jsx)(j,{title:Z("overview.prompts"),value:H,animationClass:"stagger-5"}),(0,s.jsx)(j,{title:Z("overview.templateCount"),value:V,animationClass:"stagger-5"}),(0,s.jsx)(j,{title:Z("overview.semanticModel"),value:(null==$?void 0:$.provider)==="openai-compatible"?Z("overview.external"):$?Z("overview.local"):"—",subtext:null!=(A=null==$?void 0:$.model)?A:Z("overview.notConfigured"),animationClass:"stagger-5"}),(0,s.jsx)(j,{title:Z("overview.modelProviders"),value:K,animationClass:"stagger-5"}),(0,s.jsx)(j,{title:Z("overview.auditLogs"),value:null!=(D=null==W?void 0:W.logs.events)?D:0,subtext:"".concat(Z("overview.lastActivity")," ").concat(er),animationClass:"stagger-5"})]})}),(0,s.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[(0,s.jsx)(w.Zk,{title:Z("overview.hardwareUsage"),description:Z("overview.hardwareUsageDesc"),children:(0,s.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[(0,s.jsxs)("div",{className:"flex items-center gap-4 p-4 ".concat(w.wD),children:[(0,s.jsx)(c.A,{type:"dashboard",percent:null!=(M=null==W?void 0:W.cpu.usagePercent)?M:0,size:64,strokeColor:(null!=(B=null==W?void 0:W.cpu.usagePercent)?B:0)>80?"var(--colorDanger)":"var(--colorText)",strokeWidth:10}),(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsx)("div",{className:"text-sm font-medium text-[var(--colorTextSecondary)]",children:Z("overview.cpuUsage")}),(0,s.jsxs)("div",{className:"text-xl font-bold",children:[null!=(U=null==W||null==(t=W.cpu.usagePercent)?void 0:t.toFixed(1))?U:"0.0","%"]}),(0,s.jsxs)("div",{className:"text-xs text-[var(--colorTextTertiary)]",children:[null!=(z=null==W?void 0:W.cpu.cores)?z:0," ",Z("overview.cores")]})]})]}),(0,s.jsxs)("div",{className:"flex items-center gap-4 p-4 ".concat(w.wD),children:[(0,s.jsx)(c.A,{type:"dashboard",percent:null!=(I=null==W?void 0:W.memory.usagePercent)?I:0,size:64,strokeColor:(null!=(P=null==W?void 0:W.memory.usagePercent)?P:0)>80?"var(--colorDanger)":"var(--colorTextSecondary)",strokeWidth:10}),(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsx)("div",{className:"text-sm font-medium text-[var(--colorTextSecondary)]",children:Z("overview.memoryUsage")}),(0,s.jsxs)("div",{className:"text-xl font-bold",children:[null!=(F=null==W?void 0:W.memory.usagePercent)?F:0,"%"]}),(0,s.jsxs)("div",{className:"text-xs text-[var(--colorTextTertiary)]",children:[null!=(L=null==W?void 0:W.memory.processMB)?L:0," MB / ",null!=(O=null==W?void 0:W.memory.totalMB)?O:0," MB"]})]})]})]})}),(0,s.jsx)(w.Zk,{title:Z("overview.activityContext"),description:Z("overview.activityContextDesc"),children:(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsxs)("div",{className:"p-4 ".concat(w.wD),children:[(0,s.jsx)("div",{className:"text-xs font-semibold uppercase tracking-wider text-[var(--colorTextTertiary)] mb-2",children:Z("overview.topModel")}),eo?(0,s.jsxs)("div",{className:"font-semibold flex items-center gap-2 min-w-0",children:[(0,s.jsx)(h.A,{className:"text-[var(--colorTextSecondary)] shrink-0"}),(0,s.jsx)("span",{className:"truncate",children:eo.model}),(0,s.jsxs)("span",{className:"font-normal text-[var(--colorTextTertiary)] text-sm shrink-0",children:["@",eo.provider]})]}):(0,s.jsx)("span",{className:"text-sm text-[var(--colorTextTertiary)]",children:Z("overview.noDataAvailable")})]}),(0,s.jsxs)("div",{className:"p-4 ".concat(w.wD),children:[(0,s.jsx)("div",{className:"text-xs font-semibold uppercase tracking-wider text-[var(--colorTextTertiary)] mb-3",children:Z("overview.recentTaskTypes")}),(null==W?void 0:W.tasks.types)&&Object.keys(W.tasks.types).length>0?(0,s.jsx)("div",{className:"flex flex-wrap gap-2",children:Object.entries(W.tasks.types).sort((e,t)=>t[1]-e[1]).map(e=>{let[t,a]=e;return(0,s.jsxs)("div",{className:"px-2 py-1 rounded-lg text-xs font-mono bg-[var(--colorFillAlter)] text-[var(--colorTextSecondary)]",children:[t.slice(0,30)," ",(0,s.jsx)("span",{className:"ml-2 font-bold text-[var(--colorText)]",children:a})]},t)})}):(0,s.jsx)("span",{className:"text-sm text-[var(--colorTextTertiary)]",children:Z("common.noData")})]})]})})]})]})}},45551:(e,t,a)=>{function s(e){if(0===e)return"0 B";let t=Math.floor(Math.log(e)/Math.log(1024)),a=e/Math.pow(1024,t);return"".concat(a.toFixed(+(0!==t))," ").concat(["B","KB","MB","GB","TB"][t])}function l(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"zh-CN",a=Math.max(0,Math.floor(e)),s=Math.floor(a/86400),l=Math.floor(a%86400/3600),o=Math.floor(a%3600/60),r="en-US"===t;return s>0?r?"".concat(s,"d ").concat(l,"h"):"".concat(s," 天 ").concat(l," 小时"):l>0?r?"".concat(l,"h ").concat(o,"m"):"".concat(l," 小时 ").concat(o," 分"):o>0?r?"".concat(o,"m"):"".concat(o," 分"):r?"Just now":"刚刚"}function o(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"zh-CN";if(!e||e<=0)return"en-US"===t?"Never":"从未";let a=Math.floor(Math.floor((Date.now()-e)/1e3)/60),s=Math.floor(a/60),l=Math.floor(s/24);return l>30?new Date(e).toLocaleDateString(t):"en-US"===t?l>0?"".concat(l,"d ago"):s>0?"".concat(s,"h ago"):a>0?"".concat(a,"m ago"):"Just now":l>0?"".concat(l," 天前"):s>0?"".concat(s," 小时前"):a>0?"".concat(a," 分钟前"):"刚刚"}a.d(t,{Jm:()=>c,a3:()=>l,fw:()=>o,mc:()=>i,z3:()=>s});let r={document:"文档",spreadsheet:"表格",image:"图片",cad:"图纸",code:"代码",data:"数据",web:"网页",diagram:"图表",archive:"压缩包",other:"其他"},n={document:"Document",spreadsheet:"Spreadsheet",image:"Image",cad:"CAD",code:"Code",data:"Data",web:"Web",diagram:"Diagram",archive:"Archive",other:"Other"};function c(e){var t;let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"zh-CN";return null!=(t=("en-US"===a?n:r)[e])?t:e}let i={active:"common.statusIndexed",outdated:"common.statusOutdated",error:"common.statusAbnormal",deleted:"common.statusDeleted",disk:"common.statusNotIndexed"}},85310:(e,t,a)=>{a.d(t,{Zk:()=>o,dh:()=>r,wD:()=>l});var s=a(65321);a(97109);let l="rounded-xl bg-[var(--colorBgContainer)] shadow-[var(--shadowSurface)] hover:shadow-[var(--shadowSurfaceHover)] transition-shadow";function o(e){let{title:t,count:a,description:l,extra:o,className:r,children:n}=e;return(0,s.jsxs)("section",{className:"rounded-2xl bg-[var(--colorBgContainer)] shadow-[var(--shadowSurface)] p-6 animateFadeIn ".concat(null!=r?r:""),children:[(0,s.jsxs)("div",{className:"flex flex-col sm:flex-row sm:items-start justify-between gap-3 mb-5",children:[(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsxs)("h2",{className:"text-base font-semibold text-[var(--colorText)] tracking-wide flex items-center gap-2 m-0",children:[t,void 0!==a&&(0,s.jsx)("span",{className:"text-[var(--colorTextTertiary)] font-normal text-sm",children:a})]}),l&&(0,s.jsx)("p",{className:"text-xs text-[var(--colorTextTertiary)] mt-1.5 mb-0 leading-relaxed max-w-3xl",children:l})]}),o]}),n]})}function r(e){let{children:t}=e;return(0,s.jsx)("div",{className:"text-xs font-semibold uppercase tracking-wider mb-2 text-[var(--colorTextTertiary)]",children:t})}}}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[790],{29310:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>eU});var l=n(65321),r=n(97109),i=n(3454),a=n.n(i),s=n(43220),o=n.n(s),c=n(86109),d=n(48399),u=n(17807),h=n(42700),p=n(32941),m=n(33442),x=n(85114),f=n(25258),v=n(85493),g=n(99811),y=n(6578),j=n(85587),A=n(70553),w=n(11702),k=n(8090);let{Paragraph:b,Text:S}=d.A;function I(e){return new Date(e).toLocaleString()}function C(e){var t,n,i;let{status:a,title:s,html:o,source:c,truncated:d,totalChars:u,renderedChars:p,stats:f,gate:g,loading:y,error:j,onRetry:A,updatedAt:C,generatedAt:z,className:E,t:N}=e,M=null!=o?o:"",R=M.trim().length>0,T=f?function(e){let t=[];return e.droppedDangerousBlocks>0&&t.push("删除了 ".concat(e.droppedDangerousBlocks," 处可执行/可加载内容(脚本、样式、内嵌页面等)")),e.blockedUrls>0&&t.push("拦截了 ".concat(e.blockedUrls," 个协议不安全的链接(如 javascript: / data:)")),e.escapedTags>0&&t.push("转义了 ".concat(e.escapedTags," 个不支持的标签(原文里的原始 HTML 会以文字显示)")),e.droppedAttributes>0&&t.push("剥离了 ".concat(e.droppedAttributes," 个属性(样式、事件、非白名单属性)")),e.droppedComments>0&&t.push("删除了 ".concat(e.droppedComments," 处注释/声明")),t}(f):[],[L,D]=(0,r.useState)(!1),P=null!=(t=null==g?void 0:g.issues)?t:[],_=P.length>5,B=L?P:P.slice(0,5),H=P.length-B.length,q=H+(null!=(n=null==g?void 0:g.truncatedCount)?n:0),W=(0,l.jsxs)("div",{className:"deliverablePreviewMeta",children:[s&&(0,l.jsx)(S,{strong:!0,style:{fontSize:15},children:s}),a&&(0,l.jsx)(w.A,{color:(0,k.uj)(a),children:(0,k.GC)(a,N)}),c&&(0,l.jsx)(S,{type:"secondary",style:{fontSize:12},children:"预览正文:".concat("editedMarkdown"===c?"编辑后的正文(以它为准)":"markdown"===c?"记录里的正文(markdown 字段)":"draft"===c?"生成时的草案正文(draft.markdown)":"none"===c?"没有正文":"未识别的正文来源(".concat(c,")"))}),z?(0,l.jsx)(S,{type:"secondary",style:{fontSize:12},children:"生成于 ".concat(I(z))}):null,C?(0,l.jsx)(S,{type:"secondary",style:{fontSize:12},children:"更新于 ".concat(I(C))}):null]}),F=P.length>0&&(0,l.jsxs)("div",{style:{fontSize:12.5,lineHeight:1.8},children:[B.map((e,t)=>(0,l.jsxs)("div",{children:["\xb7 ",e]},"".concat(t,"-").concat(e.slice(0,12)))),q>0&&(0,l.jsx)("div",{children:"…还有 ".concat(q," 项未列出").concat(H>0&&(null!=(i=null==g?void 0:g.truncatedCount)?i:0)>0?"(服务端只下发了 ".concat(P.length," 项)"):"")}),_&&(0,l.jsx)(x.Ay,{type:"link",size:"small",style:{paddingInline:0},onClick:()=>D(e=>!e),children:L?"收起阻断项":"展开全部 ".concat(P.length," 项")})]}),G=g?(0,l.jsx)(v.A,{style:{width:"100%"},type:g.passed?"success":"warning",showIcon:!0,message:g.passed?"交付门禁:通过":"交付门禁:阻断 ".concat(g.blockingCount," 项"),description:(0,l.jsxs)(m.A,{direction:"vertical",size:4,style:{width:"100%"},children:[(0,l.jsx)(S,{type:"secondary",style:{fontSize:12},children:"能否导出由服务端判定;此处仅供查看。"}),F]})}):(0,l.jsx)(v.A,{style:{width:"100%"},type:"info",showIcon:!0,message:"尚无交付门禁结论(生成中或尚未完成)——这不代表已通过。"});return(0,l.jsx)("div",{className:null!=E?E:"deliverablePreview",children:(0,l.jsxs)("div",{className:"deliverablePreviewStack",children:[W,G,d&&(0,l.jsx)(v.A,{style:{width:"100%"},type:"warning",showIcon:!0,message:"正文过长,预览只渲染了前 ".concat((null!=p?p:0).toLocaleString()," 字(共 ").concat((null!=u?u:0).toLocaleString()," 字)"),description:"后续内容未渲染;导出物是完整正文,不受预览截断影响。"}),T.length>0&&(0,l.jsx)(v.A,{style:{width:"100%"},type:"info",showIcon:!0,message:"预览已对内容做安全处置(与导出物可能存在差异)",description:(0,l.jsx)("div",{style:{fontSize:12,lineHeight:1.7},children:T.map(e=>(0,l.jsxs)("div",{children:["\xb7 ",e]},e))})}),y&&(0,l.jsxs)(m.A,{align:"center",size:8,children:[(0,l.jsx)(h.A,{size:"small"}),(0,l.jsx)(S,{type:"secondary",children:"正在取回成稿预览(服务端渲染 + 清洗)…"})]}),!y&&j&&(0,l.jsx)(v.A,{style:{width:"100%"},type:"error",showIcon:!0,message:"取回成稿预览失败",description:(0,l.jsxs)(m.A,{direction:"vertical",size:6,children:[(0,l.jsx)(S,{style:{fontSize:12},children:j}),A&&(0,l.jsx)(x.Ay,{size:"small",onClick:A,children:"重新取回"})]})}),!y&&!j&&!R&&(0,l.jsx)(v.A,{style:{width:"100%"},type:"info",showIcon:!0,message:"这条记录还没有可预览的正文",description:"生成完成后这里会显示成稿全文;生成中的记录只有节点日志(见画布),没有正文可预览。"}),!j&&R&&(0,l.jsxs)("div",{className:"deliverablePreviewPaper",children:[(0,l.jsx)("article",{className:"deliverablePreviewBody","aria-label":"成稿预览正文",dangerouslySetInnerHTML:{__html:M}}),(0,l.jsxs)("div",{className:"deliverablePreviewEnd",children:[(0,l.jsx)(S,{type:"secondary",style:{fontSize:12},children:d?"正文到此为止(预览有截断,见上方提示;导出物是完整正文)":p&&p>0?"正文到此为止:以上是本记录的全部正文,共 ".concat(p.toLocaleString()," 字(未截断)"):"正文到此为止:以上是本记录的全部正文(未截断)"}),g&&!g.passed&&(0,l.jsx)(S,{style:{fontSize:12,color:"var(--colorWarning)"},children:"交付门禁未通过(阻断 ".concat(g.blockingCount," 项)——正文在这里结束并不代表成稿完整,缺什么见上方的阻断项清单。")})]})]}),!j&&R&&(0,l.jsx)(b,{type:"secondary",style:{fontSize:12,marginBottom:0,textAlign:"center"},children:"预览为服务端渲染结果;排版细节(字体、页眉页脚、分页)以导出物为准。"})]})})}let z=new Set(["prepare","understand","plan","blueprint"]),E=new Set(["close","deliver"]),N=new Set(["chapter","write"]);function M(e,t){let n=new Map;for(let t of e){if(void 0===t.parentId)continue;let e=n.get(t.parentId);e?e.push(t.id):n.set(t.parentId,[t.id])}let l=new Set([t]),r=[t],i=[];for(;r.length>0;){var a;let e=r.shift();for(let t of(i.push(e),null!=(a=n.get(e))?a:[]))l.has(t)||(l.add(t),r.push(t))}return i}function R(e,t){var n;let l=new Map(e.map(e=>[e.id,e])),r=l.get(t);if(!r)return;let i=M(e,t),a=e.map(e=>e.id).sort();if(z.has(r.type))return{targetNodeId:t,kind:"contaminated",affectedNodeIds:a,reason:"".concat(r.type," 承载事实 / 命名 / 标题指纹 → 11.1:跨文档污染,**不可回滚**(要么回滚,要么重新校准)"),escalate:a.length>5,rollbackable:!1};let s=(n=r.type).split(".")[0]||n;if(E.has(r.type)||E.has(s))return{targetNodeId:t,kind:"propagated",affectedNodeIds:a,reason:"".concat(r.type," 属全篇收口 / 交付层 → 预算守恒与全量判据复检波及整篇(11.1)"),escalate:a.length>5,rollbackable:!0};if(N.has(r.type)||"round"===s){let n=function(e,t,n){let l=new Set([t]),r=e.get(t);for(;r;){if(n(r))return r;let t=r.parentId;if(void 0===t||l.has(t))break;l.add(t),r=e.get(t)}}(l,t,e=>N.has(e.type)),i=n?M(e,n.id):a;return{targetNodeId:t,kind:"propagated",affectedNodeIds:i,reason:n?"".concat(r.type," 在章级锚点「").concat(n.title||n.id,"」内 → 跨章数值一致性 / 复读 / 依据对账(11.1)波及同章其余部分"):"".concat(r.type," 无章级锚点 → 按整篇保守估算(11.1)"),escalate:i.length>5,rollbackable:!0}}return{targetNodeId:t,kind:"local",affectedNodeIds:i,reason:"".concat(r.type," 属定点补丁层(11.5:确定性处理节点)→ 影响面限自身子树"),escalate:i.length>5,rollbackable:!0}}function T(e){let t=Math.max(18,Math.abs(e.y2-e.y1)/2);return"M ".concat(e.x1," ").concat(e.y1," C ").concat(e.x1," ").concat(e.y1+t,", ").concat(e.x2," ").concat(e.y2-t,", ").concat(e.x2," ").concat(e.y2)}let L={default:"canvasEdge",active:"canvasEdge canvasEdgeActive",warn:"canvasEdge canvasEdgeWarn",affected:"canvasEdge canvasEdgeAffected"},D={default:"url(#canvasArrow)",active:"url(#canvasArrowActive)",warn:"url(#canvasArrowWarn)",affected:"url(#canvasArrow)"};function P(e){let{edge:t,tone:n="default"}=e;return(0,l.jsx)("path",{className:L[n],d:T(t),markerEnd:D[n],"data-edge":"".concat(t.fromId,"->").concat(t.toId)})}function _(e){let{edges:t,width:n,height:r,toneOf:i,flowing:a,style:s}=e;return(0,l.jsxs)("svg",{className:"canvasEdgeLayer",width:Math.max(1,n),height:Math.max(1,r),viewBox:"0 0 ".concat(Math.max(1,n)," ").concat(Math.max(1,r)),"aria-hidden":"true",focusable:"false",style:s,children:[(0,l.jsxs)("defs",{children:[(0,l.jsx)("marker",{id:"canvasArrow",markerWidth:"8",markerHeight:"8",refX:"7",refY:"4",orient:"auto",markerUnits:"strokeWidth",children:(0,l.jsx)("path",{d:"M0,0 L8,4 L0,8 z",fill:"var(--canvasEdge)"})}),(0,l.jsx)("marker",{id:"canvasArrowActive",markerWidth:"8",markerHeight:"8",refX:"7",refY:"4",orient:"auto",markerUnits:"strokeWidth",children:(0,l.jsx)("path",{d:"M0,0 L8,4 L0,8 z",fill:"var(--canvasEdgeActive)"})}),(0,l.jsx)("marker",{id:"canvasArrowWarn",markerWidth:"8",markerHeight:"8",refX:"7",refY:"4",orient:"auto",markerUnits:"strokeWidth",children:(0,l.jsx)("path",{d:"M0,0 L8,4 L0,8 z",fill:"var(--canvasEdgeWarn)"})})]}),t.map(e=>{var t;return(0,l.jsxs)("g",{children:[(0,l.jsx)(P,{edge:e,tone:null!=(t=null==i?void 0:i(e))?t:"default"}),(null==a?void 0:a.has(e.id))&&(0,l.jsx)("path",{className:"canvasEdgeFlow",d:T(e),"data-flow":"".concat(e.fromId,"->").concat(e.toId)})]},e.id)})]})}let B=new Set(["completed","failed","skipped"]),H=[{key:"chars",unit:" 字"},{key:"words",unit:" 字"},{key:"noteChars",unit:" 字"},{key:"turn",unit:" 轮",prefix:"第 "},{key:"chapters",unit:" 章"},{key:"facts",unit:" 条事实"},{key:"evidence",unit:" 条证据"},{key:"issues",unit:" 个问题"},{key:"toolCalls",unit:" 次工具调用"},{key:"totalFiles",unit:" 份资料"},{key:"totalChunks",unit:" 个切片"},{key:"roundIteration",unit:" 轮修复",prefix:"第 "}];function q(e){var t;let n=null==(t=e.metrics)?void 0:t.note;return"string"==typeof n&&n.trim()?n.trim():void 0}function W(e,t){let{input:n,output:l}=function(e){let t=e=>"string"==typeof e&&e.trim()?e.trim():void 0;return{input:t(e.inputSummary),output:t(e.outputSummary)}}(e);for(let r of"dispatch"===t?[n,q(e),e.title]:[l,q(e),e.title,function(e){var t;let n=null!=(t=e.metrics)?t:{},l=[];for(let{key:e,unit:t,prefix:r}of H){let i=n[e];if(("number"==typeof i||"string"==typeof i)&&""!==i&&0!==i&&(l.push("".concat(null!=r?r:"").concat("number"==typeof i?i.toLocaleString():i).concat(t)),2===l.length))break}return l.length>0?l.join(" \xb7 "):void 0}(e)])if(r&&r.trim())return function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:24,n=e.replace(/\s+/gu," ").trim();return n.length>t?"".concat(n.slice(0,t-1),"…"):n}(r)}function F(e){let{bubbles:t,layout:n,static:r=!1}=e;return 0===t.length?null:(0,l.jsx)("div",{className:"canvasBubbleLayer",style:{width:Math.max(1,n.width),height:Math.max(1,n.height)},"aria-hidden":"true",children:t.map(e=>{let t=function(e,t){let n=t.edges.find(t=>t.fromId===e.fromId&&t.toId===e.toId);if(n)return T(n);let l=t.edges.find(t=>t.fromId===e.toId&&t.toId===e.fromId);return l?function(e){let t=T(e),n=/^M ([\d.-]+) ([\d.-]+) C ([\d.-]+) ([\d.-]+), ([\d.-]+) ([\d.-]+), ([\d.-]+) ([\d.-]+)$/u.exec(t);if(!n)return t;let[,l,r,i,a,s,o,c,d]=n;return"M ".concat(c," ").concat(d," C ").concat(s," ").concat(o,", ").concat(i," ").concat(a,", ").concat(l," ").concat(r)}(l):null}(e,n);return t?(0,l.jsx)("div",{className:r?"canvasBubble canvasBubbleStatic":"canvasBubble","data-kind":e.kind,"data-from":e.fromId,"data-to":e.toId,style:{offsetPath:'path("'.concat(t,'")'),offsetRotate:"0deg",animationDuration:"".concat(1500,"ms")},children:(0,l.jsx)("span",{className:"canvasBubbleBody",children:(0,l.jsx)("span",{className:"canvasBubbleText",children:e.label})})},e.id):null})})}function G(e){return"stage-details"===e.source}let O=new Set(["running","repairing"]),U=new Set(["role_binding","knowledge_retrieval","file_understanding","fact_extraction","chapter_generation","llm_review","validation","reference"]);function X(e){return U.has(e)?({role_binding:"项目角色配置绑定",knowledge_retrieval:"知识库证据检索",file_understanding:"项目资料理解",fact_extraction:"事实抽取",chapter_generation:"章节正文生成",llm_review:"LLM 审查优化",validation:"内容优化与质量校验",reference:"资料增强"})[e]:(0,k.z9)(e)}function J(e,t){var n;let l=null==(n=e.metrics)?void 0:n[t];return"string"==typeof l&&l.trim()?l.trim():void 0}function K(e,t,n){var l;let r=function(e){var t;let n=null==(t=e.metrics)?void 0:t.stageType;return"string"==typeof n&&n.trim()?n.trim():e.type.split(".")[0]||"default"}(e),i=null!=(l=J(e,"stageSubtitle"))?l:J(e,"stageRoleId"),a=J(e,"note");return{id:e.id,kind:r,kindLabel:X(r),...i&&i!==e.title?{role:i}:{},title:e.title||X(r),...a?{activity:a}:{},status:e.status,..."number"==typeof e.startedAt?{startedAt:e.startedAt}:{},..."number"==typeof e.completedAt?{completedAt:e.completedAt}:{},metrics:(0,k.dB)(e.metrics,8),depth:t}}function Y(e,t){if("number"==typeof e.startedAt)return Math.max(0,("number"==typeof e.completedAt?e.completedAt:t)-e.startedAt)}var V=n(46758),Q=n(99605);let{Text:Z}=d.A,$=["error","warning","info"],ee={error:"#ff4d4f",warning:"#faad14",info:"#1677ff"};function et(e){let{node:t,x:n,y:i,selected:a,affected:s,flashed:o,onSelect:c,onDrag:d,t:u}=e,h=function(e){let t=[],n=[];for(let l of e.issues)(G(l)?n:t).push(l);return{problems:t,details:n,counts:{error:t.filter(e=>"error"===e.level).length,warning:t.filter(e=>"warning"===e.level).length,info:t.filter(e=>"info"===e.level).length}}}(t),p=(0,k.Jy)(t),m=(0,k.O0)(t.metrics,2),x=(0,r.useRef)(null);return(0,r.useEffect)(()=>()=>{var e;null==(e=x.current)||e.call(x)},[]),(0,l.jsxs)("div",{className:"canvasNode".concat(a?" canvasNodeSelected":"").concat(s?" canvasNodeAffected":"").concat(o?" canvasNodeFlashed":""),style:{left:n,top:i,width:k.zT,height:k.EL},role:"button",tabIndex:0,"aria-label":"节点 ".concat(t.title),"data-node-id":t.id,onClick:e=>{e.stopPropagation(),c(t)},onPointerDown:e=>{var n,l;if(0!==e.button||(e.stopPropagation(),!d||(null==(l=e.target)||null==(n=l.closest)?void 0:n.call(l,"button, a, input, textarea"))))return;let r=e.clientX,i=e.clientY,a=e.pointerId,s=!1,o={dx:0,dy:0},c=e=>{e.pointerId===a&&(o={dx:e.clientX-r,dy:e.clientY-i},!s&&4>Math.abs(o.dx)&&4>Math.abs(o.dy)||(s=!0,d(t,o.dx,o.dy,"move")))},u=e=>{if(e.pointerId===a)document.removeEventListener("pointermove",c),document.removeEventListener("pointerup",u),document.removeEventListener("pointercancel",u),x.current=null,s&&(document.addEventListener("click",e=>{e.stopPropagation(),e.preventDefault()},{capture:!0,once:!0}),d(t,o.dx,o.dy,"end"))};document.addEventListener("pointermove",c),document.addEventListener("pointerup",u),document.addEventListener("pointercancel",u),x.current=()=>{document.removeEventListener("pointermove",c),document.removeEventListener("pointerup",u),document.removeEventListener("pointercancel",u)}},onContextMenu:e=>{e.preventDefault(),e.stopPropagation()},onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),c(t))},children:[(0,l.jsxs)("div",{className:"canvasNodeHeader",children:[(0,l.jsx)("span",{className:"canvasNodeIcon","data-status":t.status,children:(0,k.kH)(t.type)}),(0,l.jsx)(Z,{ellipsis:!0,style:{flex:1,minWidth:0,fontWeight:600,fontSize:13},title:t.title,children:t.title}),$.map(e=>h.counts[e]>0&&(0,l.jsx)("span",{"data-issue-level":e,style:{flexShrink:0},children:(0,l.jsx)(V.A,{count:h.counts[e],size:"small",color:ee[e]})},e))]}),(0,l.jsxs)("div",{className:"canvasNodeMeta",children:[(0,l.jsx)(w.A,{color:(0,k.uv)(t.status),style:{marginInlineEnd:4},children:(0,k.m_)(t.status,u)}),(0,l.jsx)(Z,{type:"secondary",style:{fontSize:11},ellipsis:!0,children:(0,k.z9)(t.type)})]}),t.progress&&t.progress.total>0?(0,l.jsx)(Q.A,{percent:Math.round(t.progress.current/t.progress.total*100),size:"small",showInfo:!1,status:"failed"===t.status?"exception":"completed"===t.status?"success":"active",style:{marginBottom:0}}):(0,l.jsxs)("div",{className:"canvasNodeMetrics",children:[m.map(e=>(0,l.jsx)(Z,{type:"secondary",style:{fontSize:11},ellipsis:!0,children:e},e)),0===m.length&&(0,l.jsx)(Z,{type:"secondary",style:{fontSize:11},children:(0,k.a3)(p)})]})]})}var en=n(14932),el=n(57271),er=n(55122),ei=n(99271),ea=n(37510),es=n(48156),eo=n(63046),ec=n(64068),ed=n(76830),eu=n(83914);function eh(e){let{updatedAt:t,running:n}=e,[i,a]=(0,r.useState)(()=>Date.now());if((0,r.useEffect)(()=>{if(!n)return;let e=setInterval(()=>a(Date.now()),5e3);return()=>clearInterval(e)},[n]),!n||!t)return null;let s=Math.max(0,i-t);return s<=9e4?(0,l.jsx)(en.A,{title:"记录每 30 秒刷新一次(最近一次 ".concat(new Date(t).toLocaleTimeString(),")——长阶段里画布可能几分钟没有新节点,这个信号说明进程还在跑"),children:(0,l.jsxs)(w.A,{color:"processing",children:["心跳 ",Math.round(s/1e3)," 秒前"]})}):(0,l.jsx)(en.A,{title:"最后一次进度写入是 ".concat(new Date(t).toLocaleTimeString(),"——超过 ").concat(Math.round(1.5)," 分钟没有动静,进程可能已退出(可「继续生成」续跑)"),children:(0,l.jsxs)(w.A,{color:"warning",children:["心跳已停 ",Math.floor(s/6e4)," 分钟"]})})}function ep(e){let{startedAt:t,endedAt:n,running:i}=e,[a,s]=(0,r.useState)(()=>Date.now());if((0,r.useEffect)(()=>{if(!i)return;let e=setInterval(()=>s(Date.now()),1e3);return()=>clearInterval(e)},[i]),!t)return null;let o=Math.max(0,(i?a:null!=n?n:a)-t);return(0,l.jsx)(en.A,{title:"本轮生成的整体耗时(自 ".concat(new Date(t).toLocaleTimeString()," 起").concat(i?"":",已结束",")"),children:(0,l.jsx)(w.A,{color:"default",children:"耗时 ".concat((0,k.a3)(o))})})}var em=n(55897),ex=n(49075),ef=n(84742);let{Text:ev}=d.A;function eg(e){var t;let{row:n,now:r,onLocate:i}=e;return(0,l.jsxs)("div",{className:"canvasAgentDetail","data-node-id":n.id,children:[(0,l.jsxs)("div",{className:"canvasAgentDetailHead",children:[(0,l.jsx)("span",{className:"canvasAgentIcon","data-status":n.status,children:(0,k.Qs)(n.kind)}),(0,l.jsx)(ev,{strong:!0,style:{fontSize:12},children:n.kindLabel}),n.role&&(0,l.jsxs)(ev,{type:"secondary",style:{fontSize:12},children:["\xb7 ",n.role]})]}),(0,l.jsxs)("div",{className:"canvasAgentDetailRow",children:[(0,l.jsx)(ev,{type:"secondary",style:{fontSize:12},children:"在干什么"}),(0,l.jsx)(ev,{style:{fontSize:12},children:null!=(t=n.activity)?t:n.title})]}),n.activity&&n.title&&n.activity!==n.title&&(0,l.jsxs)("div",{className:"canvasAgentDetailRow",children:[(0,l.jsx)(ev,{type:"secondary",style:{fontSize:12},children:"对象"}),(0,l.jsx)(ev,{style:{fontSize:12},children:n.title})]}),(0,l.jsxs)("div",{className:"canvasAgentDetailRow",children:[(0,l.jsx)(ev,{type:"secondary",style:{fontSize:12},children:n.completedAt?"耗时":"已跑"}),(0,l.jsx)(ev,{style:{fontSize:12},children:(0,k.a3)(Y(n,r))})]}),n.metrics.length>0&&(0,l.jsxs)("div",{className:"canvasAgentDetailRow",children:[(0,l.jsx)(ev,{type:"secondary",style:{fontSize:12},children:"指标"}),(0,l.jsx)(ev,{style:{fontSize:12},children:n.metrics.map(e=>e.text).join(" \xb7 ")})]}),(0,l.jsxs)("button",{type:"button",className:"canvasAgentLocate",onClick:()=>i(n.id),title:"在画布上定位到这条节点",children:[(0,l.jsx)(ex.A,{})," 定位到节点"]})]})}function ey(e){return e.some(e=>"failed"===e.status)?"repairing":"completed"}function ej(e){let{view:t,running:n,onLocate:i,decisions:a=[],active:s=!1}=e,[o,c]=(0,r.useState)(()=>Date.now());if((0,r.useEffect)(()=>{if(!n)return;let e=setInterval(()=>c(Date.now()),1e3);return()=>clearInterval(e)},[n]),0===t.runningTotal&&0===t.recentTotal&&0===a.length&&!s)return null;let d=t.runningTotal-t.running.length;return(0,l.jsxs)(m.A,{size:4,align:"center",wrap:!0,"data-agents":t.runningTotal,className:"canvasAgentsChips",children:[(0,l.jsx)(en.A,{title:"本稿此刻在调度哪些智能体(点图标看在干什么)",children:(0,l.jsx)(ev,{type:"secondary",style:{fontSize:12},children:"智能体调度中心"})}),(s||a.length>0)&&(0,l.jsx)(em.A,{trigger:"click",placement:"bottomLeft",content:(0,l.jsx)("div",{className:"canvasAgentDetail",children:0===a.length?(0,l.jsx)("div",{className:"canvasAgentDetailRow",children:(0,l.jsx)(ev,{type:"secondary",style:{fontSize:12},children:"尚未做出决策:主智能体在本稿运行中持续观察运行台账(预算余量 / 章块结局 / 失败种类),达到判据才出手。"})}):a.map(e=>{var t;return(0,l.jsxs)("div",{className:"canvasAgentDetailRow",children:[(0,l.jsx)(ev,{type:"secondary",style:{fontSize:12},children:e.action}),(0,l.jsx)(ev,{style:{fontSize:12},children:null!=(t=e.note)?t:e.title})]},e.id)})}),children:(0,l.jsxs)("button",{type:"button",className:"canvasAgentChip canvasAgentChipMain","data-kind":"supervisor","data-status":ey(a),title:"主智能体(调度中心):决定缩范围 / 重切块 / 请示人 / 停止保交付",children:[(0,l.jsx)("span",{className:"canvasAgentAvatar","data-status":ey(a),children:(0,l.jsx)("span",{className:"canvasAgentAvatarGlyph",children:(0,k.Qs)("supervisor")})}),(0,l.jsx)("span",{className:"canvasAgentRole","data-role":"main",children:"主"})]})}),t.running.map(e=>{var t;return(0,l.jsx)(em.A,{trigger:"click",placement:"bottomLeft",content:(0,l.jsx)(eg,{row:e,now:o,onLocate:i}),children:(0,l.jsxs)("button",{type:"button",className:"canvasAgentChip","data-node-id":e.id,"data-kind":e.kind,"data-status":e.status,title:"".concat(e.kindLabel).concat(e.role?" \xb7 ".concat(e.role):"",":").concat(null!=(t=e.activity)?t:e.title),children:[(0,l.jsx)("span",{className:"canvasAgentAvatar","data-status":e.status,children:(0,l.jsx)("span",{className:"canvasAgentAvatarGlyph",children:(0,k.Qs)(e.kind)})}),(0,l.jsx)("span",{className:"canvasAgentRole","data-role":"sub",title:"子智能体(执行具体环节)",children:"子"})]})},e.id)}),d>0&&(0,l.jsx)(en.A,{title:"另有 ".concat(d," 个在跑(画布上可逐个查看)"),children:(0,l.jsxs)(ev,{type:"secondary",style:{fontSize:12},children:["+",d]})}),t.recent.length>0&&(0,l.jsx)(en.A,{title:t.recent.map(e=>"".concat(e.kindLabel,":").concat(e.title,"(已完成)")).join("\n"),children:(0,l.jsxs)(ev,{type:"secondary",style:{fontSize:12},children:[(0,l.jsx)(ef.A,{})," 刚完成 ",t.recentTotal]})})]})}var eA=n(34052),ew=n(84253);function ek(e){let{reports:t,t:n}=e,[i,a]=(0,r.useState)(!1),s=(e,t)=>{var l;return null!=(l=null==n?void 0:n(e))?l:t};if(0===t.length)return null;let o=[...t].sort((e,t)=>t.exportedAt-e.exportedAt),c=o.find(e=>{var t,n;return(null!=(n=null==(t=e.gateChecklist)?void 0:t.items.length)?n:0)>0});return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(en.A,{title:s("records.reportTitle","导出闭环报告"),children:(0,l.jsxs)(x.Ay,{size:"small",icon:(0,l.jsx)(ed.A,{}),onClick:()=>a(!0),children:[s("records.reportEntry","导出报告"),(0,l.jsx)("span",{className:"ml-1 text-[var(--colorTextTertiary)]",children:t.length})]})}),(0,l.jsx)(eA.A,{title:s("records.reportTitle","导出闭环报告"),placement:"right",size:"default",open:i,onClose:()=>a(!1),styles:{body:{padding:16}},children:0===o.length?(0,l.jsx)(ew.A,{image:ew.A.PRESENTED_IMAGE_SIMPLE,description:s("records.reportEmpty","还没有导出记录")}):(0,l.jsxs)("div",{className:"flex flex-col gap-3",children:[o.map((e,t)=>{var n;let r;return(0,l.jsxs)("div",{className:"rounded-xl border border-[var(--borderColor)] bg-[var(--colorFillAlter)] px-3 py-2.5 text-xs",children:[(0,l.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,l.jsx)(w.A,{color:"blue",className:"m-0 border-0 font-semibold",children:e.format.toUpperCase()}),(0,l.jsx)("span",{className:"text-[var(--colorTextSecondary)]",children:new Date(e.exportedAt).toLocaleString()})]}),(0,l.jsxs)("div",{className:"mt-1.5 flex flex-wrap items-center gap-x-3 gap-y-1 text-[var(--colorTextSecondary)]",children:[void 0!==e.durationMs&&(0,l.jsxs)("span",{children:[s("records.reportDuration","总用时")," ",(r=e.durationMs)>=6e4?"".concat(Math.floor(r/6e4)," 分 ").concat(Math.round(r%6e4/1e3)," 秒"):"".concat((r/1e3).toFixed(1)," 秒")]}),void 0!==e.repairedCount&&(0,l.jsxs)("span",{children:[s("records.reportRepaired","修复")," ",e.repairedCount,void 0!==e.blockingCount?"(".concat(s("records.reportBlocking","阻断")," ").concat(e.blockingCount,")"):""]}),e.ruleSummary&&e.ruleSummary.length>0&&(0,l.jsxs)("span",{children:[s("records.reportRules","规则")," ",e.ruleSummary.length]}),!1===e.gatePassed&&(0,l.jsxs)(w.A,{color:"error",className:"m-0 border-0",children:[s("records.reportGateBlocked","非交付物")," ",null!=(n=e.gateIssueCount)?n:""]}),e.healthAlerts&&e.healthAlerts.length>0&&(0,l.jsxs)(w.A,{color:"warning",className:"m-0 border-0",children:[s("records.reportHealthAlerts","健康告警")," ",e.healthAlerts.length]})]})]},"".concat(e.exportedAt,"-").concat(t))}),(null==c?void 0:c.gateChecklist)&&(0,l.jsxs)("div",{className:"rounded-xl border border-[var(--colorWarning)] bg-[var(--colorWarningBg)] px-3 py-2.5",children:[(0,l.jsxs)("div",{className:"text-xs font-semibold text-[var(--colorWarning)]",children:[s("records.reportChecklistTitle","最近一次非交付物导出的未收敛项"),"(",s("records.reportChecklistTotal","共 {count} 项").replace("{count}",String(c.gateChecklist.total)),")"]}),(0,l.jsx)("div",{className:"mt-2 flex flex-col gap-2",children:c.gateChecklist.items.map(e=>(0,l.jsxs)("div",{className:"text-xs",children:[(0,l.jsx)("div",{className:"whitespace-pre-wrap text-[var(--colorText)]",children:"".concat(e.index,".【").concat(e.category,"】").concat(e.problem)}),(0,l.jsxs)("div",{className:"text-[var(--colorTextSecondary)]",children:[e.repairPath,e.detectorId?"|".concat(e.detectorId):""]})]},e.index))})]})]})})]})}let{Text:eb}=d.A,eS={connecting:{text:"通道连接中",color:"default"},open:{text:"事件通道已连",color:"success"},error:{text:"通道已断(改用增量补差)",color:"warning"},closed:{text:"通道已关闭",color:"default"}};function eI(e){var t,n;let{title:r,status:i,updatedAt:a,wordCount:s,nodeCount:o,visibleCount:c,hiddenCount:d,degraded:u,skills:h,gate:p,connection:f,lastSeq:y,zoom:j,depth:A,following:b,generating:S,resumable:I,exporting:C,nonDeliverableExport:z,onZoomIn:E,onZoomOut:N,onZoomReset:M,onFit:R,onDepthChange:T,onToggleFollow:L,onContinue:D,onPause:P,onResume:_,onAbort:B,onExport:H,exportReports:q,previewOpen:W,onTogglePreview:F,hasNodeOffsets:G,onResetNodeLayout:O,agents:U,onLocateAgent:X,supervisorDecisions:J,agentsActive:K,startedAt:Y,t:V}=e,Q=S&&!I,Z=(0,l.jsxs)("div",{style:{fontSize:12,lineHeight:1.7},children:[(0,l.jsx)("div",{children:"导出会经过服务端交付门禁:**默认阻断**不合格稿件(422 EXPORT_GATE_BLOCKED)。"}),(0,l.jsx)("div",{children:"确需留档时,界面会弹出「仍要导出(非交付物)」的显式确认——产物由服务端强制加后缀并在界面横幅标注,不得作为正式成果提交。"}),(0,l.jsx)("div",{children:"本按钮是画布唯一的导出入口,与文档页共用同一套门禁处理,没有第二条绕过路径。"})]});return(0,l.jsxs)("div",{className:"canvasToolbar",children:[(0,l.jsxs)(m.A,{wrap:!0,size:8,align:"center",style:{flex:1,minWidth:0},children:[(0,l.jsx)(eb,{strong:!0,style:{fontSize:14},ellipsis:!0,title:r,children:r}),i&&(0,l.jsx)(w.A,{color:(0,k.uj)(i),children:(0,k.GC)(i,V)}),(0,l.jsxs)(eb,{type:"secondary",style:{fontSize:12},children:[void 0!==s?"".concat(s.toLocaleString()," 字"):""," 节点 ".concat(c,"/").concat(o),d>0?"(未显示 ".concat(d,")"):"",a?" 更新于 ".concat(new Date(a).toLocaleTimeString()):""]}),(0,l.jsx)(eh,{updatedAt:a,running:Q}),(0,l.jsx)(ep,{startedAt:Y,endedAt:a,running:Q}),U&&(0,l.jsx)(ej,{view:U,running:U.runningTotal>0,onLocate:null!=X?X:()=>{},...J?{decisions:J}:{},active:!!K}),(0,l.jsx)(en.A,{title:"通道游标 seq=".concat(null!=y?y:0,"(断线重连用它补发;节点增量用日志时间 t)"),children:(0,l.jsx)(w.A,{color:eS[f].color,children:eS[f].text})}),h.hits.length>0&&(0,l.jsx)(en.A,{title:h.hits.map(e=>"".concat(e.title,"(").concat(e.skillId,")")).join("、"),children:(0,l.jsxs)(w.A,{color:"blue",children:["技能命中 ",h.hits.length]})}),p&&(0,l.jsx)(en.A,{title:p.issues.length>0?p.issues.join("\n"):"服务端门禁结论:通过",children:(0,l.jsx)(w.A,{color:p.passed?"success":"error",children:p.passed?"门禁:通过":"门禁:阻断 ".concat(p.blockingCount," 项")})})]}),(0,l.jsxs)(m.A,{wrap:!0,size:6,align:"center",children:[(0,l.jsx)(x.Ay,{size:"small",icon:(0,l.jsx)(ei.A,{}),onClick:N,"aria-label":"缩小"}),(0,l.jsxs)(eb,{type:"secondary",style:{fontSize:12,width:44,textAlign:"center"},children:[Math.round(100*j),"%"]}),(0,l.jsx)(x.Ay,{size:"small",icon:(0,l.jsx)(ea.A,{}),onClick:E,"aria-label":"放大"}),(0,l.jsx)(en.A,{title:"恢复到 100% 并回到原点",children:(0,l.jsx)(x.Ay,{size:"small",icon:(0,l.jsx)(g.A,{}),onClick:M,"aria-label":"重置视图"})}),(0,l.jsx)(en.A,{title:G?"把拖过的节点放回自动排布(手工摆放的是**偏移**,清空即恢复)":"没有手工拖过的节点:布局就是自动排布的",children:(0,l.jsx)(x.Ay,{size:"small",disabled:!G,onClick:O,children:"恢复布局"})}),(0,l.jsx)(en.A,{title:"适应窗口(按内容包围盒缩放)",children:(0,l.jsx)(x.Ay,{size:"small",onClick:R,children:"适应"})}),(0,l.jsx)(el.A,{size:"small",value:A,style:{width:108},onChange:e=>T(e),options:[{value:1,label:"只看 1 层"},{value:2,label:"看 2 层"},{value:3,label:"看 3 层"},{value:"all",label:"全部层"}]}),(0,l.jsx)(en.A,{title:"跟随最新:生成中新出现的节点自动定位(关掉就不再打扰你的视角)",children:(0,l.jsx)(x.Ay,{size:"small",type:b?"primary":"default",onClick:L,children:b?"跟随中":"跟随最新"})}),(0,l.jsx)(er.A,{type:"vertical"}),Q&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(en.A,{title:"暂停在当前节点边界:强制落盘、释放槽位,可随时继续(不会丢已生成的章节)",children:(0,l.jsx)(x.Ay,{size:"small",icon:(0,l.jsx)(es.A,{}),onClick:P,children:"暂停"})}),(0,l.jsx)(en.A,{title:"中止是**结束**这次生成;要继续请用「继续生成」(从中断处接着跑)",children:(0,l.jsx)(x.Ay,{size:"small",danger:!0,icon:(0,l.jsx)(eo.A,{}),onClick:B,children:"中止"})})]}),!Q&&I&&(0,l.jsx)(x.Ay,{size:"small",type:"primary",icon:(0,l.jsx)(ec.A,{}),onClick:D,children:"继续生成"}),!Q&&!I&&"paused"===i&&(0,l.jsx)(x.Ay,{size:"small",type:"primary",icon:(0,l.jsx)(ec.A,{}),onClick:_,children:"从暂停处继续"}),(0,l.jsx)(er.A,{type:"vertical"}),(0,l.jsx)(en.A,{title:Z,children:(0,l.jsx)(m.A,{size:4,children:[{key:"markdown",label:"MD"},{key:"html",label:"HTML"},{key:"docx",label:"DOCX"},{key:"pdf",label:"PDF",primary:!0}].map(e=>(0,l.jsx)(x.Ay,{size:"small",type:e.primary?"primary":"default",icon:"markdown"===e.key?(0,l.jsx)(ed.A,{}):void 0,loading:C===e.key,disabled:null!==C&&C!==e.key,onClick:()=>H(e.key),children:e.label},e.key))})}),(0,l.jsx)(ek,{reports:null!=q?q:[],...V?{t:V}:{}}),(0,l.jsx)(en.A,{title:"成稿预览(服务端渲染并清洗后的全文;只读,不提供导出)",children:(0,l.jsx)(x.Ay,{size:"small",type:W?"primary":"default",onClick:F,children:"成稿预览"})})]}),z&&(0,l.jsx)(v.A,{style:{width:"100%",marginTop:8},type:"error",showIcon:!0,message:null!=(t=null==V?void 0:V("documents.nonDeliverableExportTitle"))?t:"本次导出的是「非交付物」",description:(0,l.jsxs)("div",{style:{whiteSpace:"pre-wrap",fontSize:12},children:[(0,l.jsx)("div",{children:null!=(n=null==V?void 0:V("documents.nonDeliverableExportHint"))?n:"文件名已由服务端强制加「非交付物」后缀,不得作为正式成果提交。"}),z.count>0&&(0,l.jsxs)("div",{style:{marginTop:4},children:["阻断项(".concat(z.count,"):"),z.issues.slice(0,5).map((e,t)=>(0,l.jsxs)("div",{children:["\xb7 ",e]},t)),z.count>5&&(0,l.jsx)("div",{children:"…还有 ".concat(z.count-5," 项")})]})]})}),u.length>0&&(0,l.jsx)(v.A,{style:{width:"100%",marginTop:8},type:"warning",showIcon:!0,message:"画布显示有取整(下列内容本次未下发;聚合值与节点信息不受影响)",description:(0,l.jsx)("div",{style:{fontSize:12},children:u.map((e,t)=>(0,l.jsxs)("div",{children:["\xb7 ",e]},t))})}),0===o&&S&&(0,l.jsx)(v.A,{style:{width:"100%",marginTop:8},type:"info",showIcon:!0,icon:(0,l.jsx)(eu.A,{}),message:"还没有节点日志:生成侧尚未写入第一个节点(节点日志是唯一真相源,画布不伪造占位节点)"})]})}var eC=n(57481),ez=n(28629),eE=n(52057),eN=n(8665),eM=n(38332),eR=n(58569),eT=n(76506),eL=n(45042);let{Paragraph:eD,Text:eP}=d.A,e_={local:{text:"影响面:局部",color:"blue",hint:"改动只落在该节点自身子树:定点补丁即可。"},propagated:{text:"影响面:传播",color:"orange",hint:'改动会沿依赖传播到同章其余部分:按 11.1,走"变更传播"而不是重跑整个节点。'},contaminated:{text:"影响面:事实/命名类",color:"red",hint:"该节点持有事实 / 命名 / 标题指纹:按 11.1,**要么回滚、要么重新校准**,不能当普通改动提交。"}},eB={error:{color:"red",text:"错误"},warning:{color:"orange",text:"警告"},info:{color:"blue",text:"提示"}};function eH(e){var t,n;let{node:r,impact:i,flatNodes:a,highlighted:s,generating:o,repairPreview:c,onFocusNode:d,onRequestRepair:u,onClose:h,onDraftRepairNote:p,onCancelRepairPreview:f,onMention:v,onLocate:g,onPause:y,onResume:j,nodeEvents:A,t:b}=e,S="skill.load"===r.type||"string"==typeof r.metrics.skillId,I=new Map(a.map(e=>[e.id,e])),C=(0,k.Jy)(r),z=(0,k.dB)(r.metrics,24),E=r.issues.filter(e=>!G(e)),N=r.issues.filter(e=>G(e)),M=E.filter(e=>"error"===e.level).length,R=i?(0,l.jsxs)(m.A,{direction:"vertical",size:8,style:{width:"100%"},children:[(0,l.jsxs)(m.A,{wrap:!0,children:[(0,l.jsx)(w.A,{color:e_[i.kind].color,children:e_[i.kind].text}),(0,l.jsx)(w.A,{color:i.rollbackable?"default":"red",children:i.rollbackable?"可回滚":"需回滚或重新校准"}),(0,l.jsx)(w.A,{color:i.escalate?"red":"default",children:"波及 ".concat(i.affectedNodeIds.length," 节点").concat(i.escalate?"(超阈值)":"")})]}),(0,l.jsx)(eP,{type:"secondary",style:{fontSize:12},children:i.reason}),(0,l.jsx)(eP,{type:"secondary",style:{fontSize:12},children:e_[i.kind].hint}),i.escalate&&(0,l.jsx)(w.A,{color:"red",children:"影响面超出阈值:该改动需**人工确认**后才能提交(自动留痕不再适用)"}),(0,l.jsx)(eM.A,{size:"small",header:(0,l.jsx)(eP,{type:"secondary",style:{fontSize:12},children:"波及节点(点击定位)"}),dataSource:i.affectedNodeIds,renderItem:e=>{let t=I.get(e);return(0,l.jsx)(eM.A.Item,{style:{paddingBlock:4},children:(0,l.jsx)(x.Ay,{type:"link",size:"small",style:{padding:0,height:"auto"},onClick:()=>d(e),children:t?"".concat(t.title,"(").concat((0,k.z9)(t.type),")"):"未知节点 ".concat(e)})})}})]}):(0,l.jsxs)(m.A,{direction:"vertical",size:6,children:[(0,l.jsx)(ew.A,{image:ew.A.PRESENTED_IMAGE_SIMPLE,description:"该节点没有预计算的影响面"}),(0,l.jsx)(eP,{type:"secondary",style:{fontSize:12},children:"聚合接口只对**有问题的节点**与**修复节点**预计算影响面(首屏不做 O(n\xb2))。 这里可以按需触发一次修复请求,服务端会在事务前给出权威判定——**本面板不冒充结论**。"}),(0,l.jsx)(x.Ay,{size:"small",disabled:!u,onClick:()=>null==u?void 0:u(r),children:"按需评估影响面(走修复请求)"})]}),T=c&&c.nodeId===r.id?(0,l.jsx)("div",{className:"nodeInfoRepair",children:(0,l.jsxs)(m.A,{direction:"vertical",size:6,style:{width:"100%"},children:[(0,l.jsxs)(m.A,{wrap:!0,size:6,children:[(0,l.jsx)(eP,{strong:!0,style:{fontSize:13},children:"修复影响面预览"}),(0,l.jsx)(w.A,{color:e_[c.impact.kind].color,children:e_[c.impact.kind].text}),(0,l.jsx)(w.A,{color:c.impact.rollbackable?"default":"red",children:c.impact.rollbackable?"可回滚":"不可回滚"})]}),(0,l.jsxs)(eP,{type:"secondary",style:{fontSize:12},children:["波及 ".concat(c.impact.affectedNodeIds.length," 个节点").concat(c.impact.escalate?",超出阈值需人工确认":"","。"),c.impact.reason]}),!c.impact.rollbackable&&(0,l.jsx)(eP,{style:{fontSize:12,color:"var(--colorError)"},children:"11.1:污染类改动**要么回滚、要么重新校准**,不能当普通改动提交。"}),(0,l.jsxs)(m.A,{wrap:!0,size:6,children:[(0,l.jsx)(x.Ay,{size:"small",type:"primary",onClick:p,children:"把修复意图写进输入框"}),(0,l.jsx)(x.Ay,{size:"small",type:"text",onClick:f,children:"收起"})]})]})}):null;return(0,l.jsxs)("div",{className:"nodeInfoPanel","data-node-id":r.id,children:[(0,l.jsxs)("div",{className:"nodeInfoHeader",children:[(0,l.jsx)("span",{className:"nodeInfoHeaderIcon",children:(0,k.kH)(r.type)}),(0,l.jsx)(eP,{strong:!0,ellipsis:!0,style:{flex:1,minWidth:0,fontSize:14},title:r.title,children:r.title}),r.unknownType&&(0,l.jsx)(w.A,{children:"未知类型"}),(0,l.jsx)(w.A,{color:(0,k.uv)(r.status),children:(0,k.m_)(r.status,b)}),M>0&&(0,l.jsx)(w.A,{color:"red",children:"".concat(M," 个错误")}),o&&"running"===r.status&&(0,l.jsx)(eP,{type:"secondary",style:{fontSize:11},children:"运行中"}),h&&(0,l.jsx)(en.A,{title:"关闭(Esc)",children:(0,l.jsx)(x.Ay,{type:"text",size:"small",className:"nodeInfoClose","aria-label":"关闭信息卡片",onClick:h,children:(0,l.jsx)(eL.A,{})})})]}),(0,l.jsxs)("div",{className:"nodeInfoActions",children:[(0,l.jsx)(x.Ay,{size:"small",onClick:()=>null==v?void 0:v(r),children:"@ 到对话框"}),(0,l.jsx)(x.Ay,{size:"small",onClick:()=>null==g?void 0:g(r),children:"在画布中定位"}),(0,l.jsx)(x.Ay,{size:"small",danger:M>0,onClick:()=>null==u?void 0:u(r),children:"请求修复(预览影响面)"}),o&&"running"===r.status&&y&&(0,l.jsx)(x.Ay,{size:"small",onClick:y,children:"暂停(节点边界)"}),"paused"===r.status&&j&&(0,l.jsx)(x.Ay,{size:"small",onClick:j,children:"继续生成"})]}),T,(0,l.jsx)(eR.A,{size:"small",items:[{key:"overview",label:"概览",children:(0,l.jsxs)(eT.A,{size:"small",column:1,bordered:!0,children:[(0,l.jsx)(eT.A.Item,{label:"状态",children:(0,l.jsx)(w.A,{color:(0,k.uv)(r.status),children:(0,k.m_)(r.status,b)})}),(0,l.jsxs)(eT.A.Item,{label:"类型",children:[(0,k.z9)(r.type),r.unknownType?"(闭集外的类型,按通用卡片渲染)":""]}),(0,l.jsx)(eT.A.Item,{label:"节点 id",children:(0,l.jsx)(eD,{copyable:{text:r.id},style:{margin:0,fontSize:12},children:r.id})}),(0,l.jsx)(eT.A.Item,{label:"稳定序号",children:r.seq}),(0,l.jsx)(eT.A.Item,{label:"父节点",children:r.parentId?(0,l.jsx)(x.Ay,{type:"link",size:"small",style:{padding:0,height:"auto"},onClick:()=>d(r.parentId),children:null!=(n=null==(t=I.get(r.parentId))?void 0:t.title)?n:r.parentId}):"(根节点)"}),(0,l.jsxs)(eT.A.Item,{label:"耗时",children:[(0,k.a3)(C),"running"===r.status?"(运行中)":""]}),(0,l.jsx)(eT.A.Item,{label:"进度",children:r.progress?"".concat(r.progress.label||"进度",":").concat(r.progress.current,"/").concat(r.progress.total):"—"}),(0,l.jsxs)(eT.A.Item,{label:"子节点数",children:[r.children.length,s?"(当前处于影响面高亮)":""]}),(0,l.jsxs)(eT.A.Item,{label:"开始 / 完成",children:[r.startedAt?new Date(r.startedAt).toLocaleString():"—"," / ",r.completedAt?new Date(r.completedAt).toLocaleString():"—"]})]})},{key:"issues",label:"问题".concat(E.length>0?"(".concat(E.length,")"):""),children:0===E.length?(0,l.jsx)(ew.A,{image:ew.A.PRESENTED_IMAGE_SIMPLE,description:"该节点没有记录问题"}):(0,l.jsx)(eM.A,{size:"small",dataSource:E,renderItem:e=>{var t,n;let r=null!=(n=eB[e.level])?n:{color:"default",text:String(e.level)};return(0,l.jsx)(eM.A.Item,{children:(0,l.jsxs)(m.A,{direction:"vertical",size:2,style:{width:"100%"},children:[(0,l.jsxs)(m.A,{wrap:!0,size:4,children:[(0,l.jsx)(w.A,{color:r.color,children:r.text}),e.category&&(0,l.jsx)(w.A,{children:e.category}),e.repairability&&(0,l.jsx)(w.A,{color:"blue",children:e.repairability}),(null==(t=e.provenance)?void 0:t.detectorId)&&(0,l.jsx)(en.A,{title:e.provenance.fingerprint,children:(0,l.jsx)(w.A,{children:e.provenance.detectorId})})]}),(0,l.jsx)(eP,{style:{fontSize:12},children:e.message}),e.suggestion&&(0,l.jsxs)(eP,{type:"secondary",style:{fontSize:12},children:["建议:",e.suggestion]}),(e.chapterId||e.sectionTitle)&&(0,l.jsxs)(eP,{type:"secondary",style:{fontSize:11},children:["位置:",e.chapterId||""," ",e.sectionTitle||""]})]})})}})},...N.length>0?[{key:"details",label:"明细(".concat(N.length,")"),children:(0,l.jsx)(eM.A,{size:"small",dataSource:N,renderItem:e=>(0,l.jsx)(eM.A.Item,{style:{paddingBlock:3},children:(0,l.jsx)(eP,{type:"secondary",style:{fontSize:12},children:e.message})})})}]:[],...A&&A.length>0?[{key:"events",label:"事件(".concat(A.length,")"),children:(0,l.jsx)(eM.A,{size:"small",dataSource:[...A].slice(-40).reverse(),renderItem:e=>(0,l.jsx)(eM.A.Item,{style:{paddingBlock:3},children:(0,l.jsxs)(m.A,{size:6,wrap:!0,children:[(0,l.jsxs)(eP,{type:"secondary",style:{fontSize:11},children:["#",e.seq]}),(0,l.jsx)(w.A,{style:{fontSize:11},children:e.type}),(0,l.jsx)(eP,{type:"secondary",style:{fontSize:11},children:new Date(e.at).toLocaleTimeString()}),e.detail?(0,l.jsx)(eP,{style:{fontSize:11},ellipsis:!0,children:e.detail}):null]})})})}]:[],{key:"impact",label:"影响面",children:R},...S?[{key:"skills",label:"技能",children:(()=>{let e="string"==typeof r.metrics.skillId?r.metrics.skillId:void 0;return r.type,(0,l.jsxs)(eT.A,{size:"small",column:1,bordered:!0,children:[(0,l.jsx)(eT.A.Item,{label:"技能 id",children:null!=e?e:r.id}),(0,l.jsx)(eT.A.Item,{label:"技能名",children:r.title}),(0,l.jsx)(eT.A.Item,{label:"命中章节",children:"string"==typeof r.metrics.chapter?r.metrics.chapter:"—"}),(0,l.jsx)(eT.A.Item,{label:"状态",children:(0,l.jsx)(w.A,{color:(0,k.uv)(r.status),children:(0,k.m_)(r.status,b)})})]})})()}]:[],...z.length>0?[{key:"metrics",label:"指标",children:(0,l.jsx)(eT.A,{size:"small",column:1,bordered:!0,children:z.map(e=>(0,l.jsx)(eT.A.Item,{label:e.key,children:e.text.replace("".concat(e.key,": "),"")},e.key))})}]:[],...r.payloadRef?[{key:"payload",label:"载荷",children:(0,l.jsxs)(m.A,{direction:"vertical",size:6,children:[(0,l.jsx)(eD,{copyable:{text:r.payloadRef},style:{margin:0,fontSize:12},children:r.payloadRef}),(0,l.jsx)(eP,{type:"secondary",style:{fontSize:12},children:"8.6 / 附录 F.2:节点**不得携带载荷**(`agentWorkflow` 已是 p50 2.2 MB / max 94.6 MB)。 prompt / response / 证据快照等明细都在内容寻址的 `artifacts/<sha256>` 里,这里只有引用。"})]})}]:[]]})]})}var eq=n(34038);let{Text:eW}=d.A,eF=["upsert","status","rollup","reset","start","stage","thinking","text","tool_call_preview","progress","error","done","complete","log"];function eG(e,t){var n,l;let r=null!=(n=e.projectRoot)?n:t;return{specId:e.templateId||e.id,promptIds:null!=(l=e.promptIds)?l:[],...e.materialRoot?{materialRoot:e.materialRoot}:{},...r?{projectRoot:r}:{},...e.templateName?{title:e.templateName}:{}}}function eO(e,t){let n=t.node;if(!n||"string"!=typeof n.id)return!0;if("upsert"===t.type)return e.set(n.id,n),!0;let l=e.get(n.id);if(!l){var r,i;return e.set(n.id,{...n,title:null!=(r=n.title)?r:n.id,seq:null!=(i=n.seq)?i:0}),!1}let{startedAt:a,...s}=n;return e.set(n.id,{...l,...s,id:l.id}),!0}function eU(){var e,t,n,i,s,d,w,b,S,I,z,E,N,M,T,L,D,P,H,q,G,U,X,J,V;let Q=(0,c.useRouter)(),Z=(0,j.Vr)(),{message:$}=u.A.useApp(),ee="string"==typeof Q.query.id?Q.query.id:"",en="string"==typeof Q.query.projectRoot?Q.query.projectRoot:void 0,[el,er]=(0,r.useState)(null),[ei,ea]=(0,r.useState)(!0),[es,eo]=(0,r.useState)(null),[ec,ed]=(0,r.useState)(new Map),[eu,eh]=(0,r.useState)("connecting"),[ep,em]=(0,r.useState)(0),[ex,ef]=(0,r.useState)(null),[ev,eg]=(0,r.useState)("all"),[ey,ej]=(0,r.useState)(!0),[eA,ew]=(0,r.useState)(""),[ek,eb]=(0,r.useState)(!1),[eS,eM]=(0,r.useState)([]),[eR,eT]=(0,r.useState)([]),[eL,eD]=(0,r.useState)(null),[eP,e_]=(0,r.useState)(null),{bubbles:eB,push:eU,clear:eJ}=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1500,[t,n]=(0,r.useState)([]),l=(0,r.useRef)(null),i=(0,r.useCallback)(t=>{let l=function(e){var t,n;let l=null!=(t=e.now)?t:Date.now(),r=null!=(n=e.freshMs)?n:15e3,{before:i,after:a}=e,s=a.parentId;if(!s)return null;if(!i){if("number"!=typeof a.startedAt||l-a.startedAt>r||l-a.startedAt<-r)return null;let e=W(a,"dispatch");return e?{id:"".concat(s,"->").concat(a.id,":dispatch"),fromId:s,toId:a.id,kind:"dispatch",label:e,at:l}:null}if(!(B.has(a.status)&&!B.has(i.status))||"number"!=typeof a.completedAt||l-a.completedAt>r||l-a.completedAt<-r)return null;let o=W(a,"report");return o?{id:"".concat(a.id,"->").concat(s,":report"),fromId:a.id,toId:s,kind:"report",label:o,at:l}:null}(t);l&&n(t=>(function(e,t,n){let l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1500,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:6,i=[...e.filter(e=>n-e.at<l&&e.id!==t.id),t];return i.length>r?i.slice(i.length-r):i})(t,l,l.at,e))},[e]),a=(0,r.useCallback)(()=>{n(e=>0===e.length?e:[])},[]);return(0,r.useEffect)(()=>{if(0!==t.length)return l.current=setTimeout(()=>{l.current=null,n(t=>(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1500,l=e.filter(e=>t-e.at<n);return l.length===e.length?e:l})(t,Date.now(),e))},Math.max(0,t.reduce((e,t)=>Math.min(e,t.at),1/0)+e-Date.now())),()=>{l.current&&(clearTimeout(l.current),l.current=null)}},[t,e]),{bubbles:t,push:i,clear:a}}(),[eK,eY]=(0,r.useState)(!1);(0,r.useEffect)(()=>{if("function"!=typeof window.matchMedia)return;let e=window.matchMedia("(prefers-reduced-motion: reduce)"),t=()=>eY(e.matches);return t(),e.addEventListener("change",t),()=>e.removeEventListener("change",t)},[]);let[eV,eQ]=(0,r.useState)(null),[eZ,e$]=(0,r.useState)(()=>new Map),[e0,e1]=(0,r.useState)([]),[e2,e4]=(0,r.useState)(null),[e5,e8]=(0,r.useState)(!1),[e3,e6]=(0,r.useState)([]),[e7,e9]=(0,r.useState)(null),[te,tt]=(0,r.useState)(!1),tn=(0,eE.s_)(),{centerOn:tl,zoomAt:tr,fit:ti,reset:ta}=tn,ts=(0,r.useCallback)(()=>{var e;let t=null==(e=tn.containerRef.current)?void 0:e.getBoundingClientRect();if(!t)return{left:0,top:0,right:0,bottom:0};let n=e=>{let n=document.querySelector(e);if(!n)return null;let l=n.getBoundingClientRect();return{top:l.top-t.top,bottom:l.bottom-t.top}},l=n(".canvasToolbar"),r=n(".canvasInputBar"),i=Math.min(l?l.bottom+8:24,.4*t.height),a=Math.max(r?r.top-8:t.height-24,.6*t.height);return{left:24,top:i,right:t.width-24,bottom:a}},[tn.containerRef]),to=(0,r.useRef)(new Map),tc=(0,r.useRef)(0),td=(0,r.useRef)({nodes:[],events:[],cursor:0}),tu=(0,r.useRef)(null),th=(0,r.useRef)(0),tp=(0,r.useRef)(en),tm=(0,r.useRef)(!1),tx=(0,r.useCallback)(e=>{let t=e.key?Z(e.key):e.text,n=t===e.key?e.text:t;th.current+=1,eT(t=>[{id:th.current,kind:e.kind,text:n,at:Date.now()},...t].slice(0,100)),"error"===e.kind?$.error(n):"warning"===e.kind?$.warning(n):"success"===e.kind&&$.success(n)},[$,Z]),tf=(0,A.tl)({projectRoot:en,documentId:ee||null,onNotice:tx,t:Z}),{refreshDocuments:tv,applyRecord:tg}=tf,ty=function(e,t){let[n,l]=(0,r.useState)({loading:!1,error:null,preview:null}),i=(0,r.useRef)(0),a=(0,r.useCallback)(async()=>{if(!e)return void l({loading:!1,error:"缺少记录 id,无法取回成稿预览",preview:null});let n=i.current+1;i.current=n,l(e=>({...e,loading:!0,error:null}));try{let{preview:r}=await (0,y.sz)(e,t);if(i.current!==n)return;l({loading:!1,error:null,preview:r})}catch(e){if(i.current!==n)return;l({loading:!1,error:e instanceof Error?e.message:"取回成稿预览失败",preview:null})}},[e,t]),s=(0,r.useCallback)(()=>{i.current+=1,l({loading:!1,error:null,preview:null})},[]);return{...n,load:a,reset:s}}(ee,null!=(E=tp.current)?E:en),tj=(0,r.useCallback)(()=>{var e;if(e5){ty.reset(),e8(!1);return}e8(!0),ty.load(),(0,y.f$)(null!=(e=tp.current)?e:en).then(e=>e6(e.assets.filter(e=>e.usedByDocumentIds.includes(ee)))).catch(()=>e6([]))},[e5,ty,ee,en]),tA=(0,r.useCallback)(e=>{var t;let n=null!=(t=tp.current)?t:en;if("image"!==e.type)return void(0,y.oS)(e.id,"file",n).catch(()=>tx({kind:"error",text:"打开资产失败"}));tt(!1),e9(e)},[en,tx]),tw=(0,r.useCallback)(e=>{e1(t=>t.includes(e)?t:[...t,e])},[]),tk=(0,r.useCallback)(()=>{tu.current||(tu.current=setTimeout(()=>{tu.current=null;let e=td.current;if(td.current={nodes:[],events:[],cursor:0},e.nodes.length>0){let n=to.current,l=0;for(let r of e.nodes){var t;let e=null==(t=r.node)?void 0:t.id,i=e?n.get(e):void 0;eO(n,r)||(l+=1);let a=e?n.get(e):void 0;a&&eU({...i?{before:i}:{},after:a})}ed(new Map(n)),l>0&&tw("通道收到 ".concat(l," 条指向未知节点的补丁:已按最小节点收下(说明本客户端漏读了 upsert,或日志存在损坏)"))}if(e.cursor>tc.current&&(tc.current=e.cursor),e.events.length>0){let t=e.events;eM(e=>[...t.reverse(),...e].slice(0,200)),em(e=>t.reduce((e,t)=>Math.max(e,t.seq),e))}},120))},[tw,eU]);(0,r.useEffect)(()=>()=>{tu.current&&clearTimeout(tu.current)},[]);let tb=(0,r.useCallback)((e,t)=>{let n=td.current;t&&n.nodes.push(t),n.events.push(e),(null==t?void 0:t.logT)&&t.logT>n.cursor&&(n.cursor=t.logT),tk()},[tk]),tS=(0,r.useCallback)(async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(ee){e.silent||ea(!0);try{var t,n,l,r,i,a;let e=tp.current?"?projectRoot=".concat(encodeURIComponent(tp.current)):"",s=await fetch("/api/documents/canvas/".concat(encodeURIComponent(ee)).concat(e));if(404===s.status)return void eo("记录不存在(可能已被删除)");if(!s.ok)throw Error(await s.text()||"HTTP ".concat(s.status));let o=await s.json();tp.current=null!=(l=o.document.projectRoot)?l:tp.current,er(o),eo(null),e1(null!=(r=o.degraded)?r:[]);let c=function(e){let t=[],n=e=>{for(let l of e){let{children:e,...r}=l;t.push(r),e&&n(e)}};return n(e),t}(null!=(i=null==(t=o.nodes)?void 0:t.tree)?i:[]),d=new Map(c.map(e=>[e.id,e]));to.current=d,ed(d),tc.current=Math.max(tc.current,null!=(a=null==(n=o.nodes)?void 0:n.cursor)?a:0)}catch(e){eo(e instanceof Error?e.message:String(e))}finally{e.silent||ea(!1)}}},[ee]);(0,r.useEffect)(()=>{tS()},[tS]),(0,r.useEffect)(()=>{var e;let t=null==el||null==(e=el.nodes)?void 0:e.depth;null==t||tm.current||eg(t)},[el]),(0,r.useEffect)(()=>{ee&&tv()},[ee,tv]),(0,r.useEffect)(()=>{let e=tf.documents.find(e=>e.id===ee);e&&tg(e)},[tg,ee,tf.documents]);let tI=(0,r.useCallback)(async()=>{if(ee)try{var e,t;let n=new URLSearchParams({since:String(tc.current)});tp.current&&n.set("projectRoot",tp.current);let l=await fetch("/api/documents/generated/".concat(encodeURIComponent(ee),"/nodes?").concat(n.toString()));if(!l.ok)return;let r=await l.json(),i=to.current;for(let t of null!=(e=r.nodes)?e:[])eO(i,{type:"upsert",node:t});(null!=(t=r.nodes)?t:[]).length>0&&ed(new Map(i)),r.cursor&&(tc.current=Math.max(tc.current,r.cursor)),r.downgraded&&tw(r.reason||"增量过大,服务端已降级为全量快照")}catch(e){}},[tw,ee]);(0,r.useEffect)(()=>{if(!ee)return;let e=setInterval(()=>{tI()},1e4);return()=>clearInterval(e)},[ee,tI]),(0,r.useEffect)(()=>{if(!ee||"undefined"==typeof EventSource)return;let e=tp.current?"?projectRoot=".concat(encodeURIComponent(tp.current)):"",t=new EventSource("/api/documents/generated/".concat(encodeURIComponent(ee),"/events").concat(e));eh("connecting");let n=e=>t=>{var n,l,r;let i={};try{i=JSON.parse(t.data)}catch(e){}let a=null!=(r=i.type)?r:e;"reset"===a&&(eJ(),tS({silent:!0}),tw("通道补发不可用(服务端重启或环形覆盖):已重取全量快照"));let s=null==(n=i.node)?void 0:n.title;tb({seq:"number"==typeof i.seq?i.seq:0,type:a,at:"number"==typeof i.at?i.at:Date.now(),...i.nodeId?{nodeId:i.nodeId}:{},...s?{nodeTitle:s}:{},...(null==(l=i.payload)?void 0:l.message)?{detail:i.payload.message}:{}},i.node?{type:a,node:i.node,...i.logT?{logT:i.logT}:{}}:void 0),i.node&&tv()},l=eF.map(e=>[e,n(e)]);for(let[e,n]of(t.onopen=()=>eh("open"),t.onerror=()=>{eh("error"),tI()},l))t.addEventListener(e,n);return t.onmessage=n("message"),()=>{for(let[e,n]of l)t.removeEventListener(e,n);t.close()}},[tw,eJ,ee,tS,tb,tv,tI]),(0,r.useEffect)(()=>{eJ()},[eJ,ee]);let tC=(0,r.useMemo)(()=>(0,k.Jr)([...ec.values()],"all"===ev?void 0:ev),[ec,ev]),tz=(0,r.useMemo)(()=>(0,k.x8)(tC),[tC]),tE=(0,r.useMemo)(()=>(0,k.PI)(tC),[tC]),tN=(0,r.useMemo)(()=>0!==eZ.size||eV?(0,k.bJ)(tE,(0,k.Kq)(eZ,eV)):tE,[tE,eZ,eV]),tM=(0,r.useRef)(1);tM.current=tn.view.k;let tR=(0,r.useRef)(!1);tR.current=null!==eV;let tT=(0,r.useCallback)((e,t,n,l)=>{let{dx:r,dy:i}=(0,k.qj)({dx:t,dy:n},tM.current);if("move"===l)return void eQ({id:e.id,dx:r,dy:i});eQ(null),(0!==t||0!==n)&&e$(t=>{var n;let l=new Map(t),a=null!=(n=l.get(e.id))?n:{dx:0,dy:0};return l.set(e.id,{dx:a.dx+r,dy:a.dy+i}),l})},[]),tL=(0,r.useCallback)(()=>{eQ(null),e$(new Map)},[]),tD=(0,r.useMemo)(()=>new Map(tz.map(e=>[e.id,e])),[tz]),tP=ex&&null!=(N=tD.get(ex))?N:null,t_=(0,r.useMemo)(()=>{if(ex)return R(tz.map(eX),ex)},[tz,ex]),tB=(0,r.useMemo)(()=>{var e;return new Set(null!=(e=null==t_?void 0:t_.affectedNodeIds)?e:[])},[t_]),tH=(0,r.useMemo)(()=>new Set(ex?[...(0,k.II)(tC,ex),ex]:[]),[tC,ex]),tq=(0,r.useMemo)(()=>(0,k.Kg)(tN),[tN]),tW=(0,r.useMemo)(()=>(function(e,t){var n,l;let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=null!=(n=r.limit)?n:6,a=null!=(l=r.recentLimit)?l:3,s=[],o=[],c=(e,n)=>{for(let l of e)O.has(l.status)?s.push(K(l,n,t)):"completed"===l.status&&"number"==typeof l.completedAt&&t-l.completedAt<=9e4&&o.push(K(l,n,t)),l.children.length>0&&c(l.children,n+1)};return c(e,0),s.sort((e,n)=>{var l,r;let i=null!=(l=Y(e,t))?l:0;return(null!=(r=Y(n,t))?r:0)-i||e.id.localeCompare(n.id)}),o.sort((e,t)=>{var n,l;return(null!=(n=t.completedAt)?n:0)-(null!=(l=e.completedAt)?l:0)||e.id.localeCompare(t.id)}),{running:s.slice(0,i),recent:o.slice(0,a),runningTotal:s.length,recentTotal:o.length}})(tC,Date.now()),[tC]),tF=(0,r.useMemo)(()=>(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4,n=[],l=e=>{for(let i of e){if("supervisor"===i.type){var t,r;let e="string"==typeof(null==(t=i.metrics)?void 0:t.action)?i.metrics.action:"unknown",l="string"==typeof(null==(r=i.metrics)?void 0:r.note)?i.metrics.note:void 0;n.push({id:i.id,action:e,title:i.title||"调度决策",...l?{note:l}:{},status:i.status,..."number"==typeof i.completedAt?{at:i.completedAt}:"number"==typeof i.startedAt?{at:i.startedAt}:{}})}i.children.length>0&&l(i.children)}};return l(e),n.sort((e,t)=>{var n,l;return(null!=(n=t.at)?n:0)-(null!=(l=e.at)?l:0)||e.id.localeCompare(t.id)}),n.slice(0,t)})(tC),[tC]),tG=(0,r.useCallback)(e=>{let t=tD.get(e.fromId);return t?tB.has(e.fromId)&&tB.has(e.toId)?"affected":2>=(0,k.vp)(t.status)?"warn":tH.has(e.fromId)&&tH.has(e.toId)?"active":"default":"default"},[tB,tH,tD]),tO=(0,r.useMemo)(()=>{if(0===tz.length)return null;let e=tz.filter(e=>"running"===e.status),t=e.length>0?e:tz;return t.reduce((e,t)=>{var n,l;return(null!=(n=t.seq)?n:0)>=(null!=(l=e.seq)?l:0)?t:e},t[0])},[tz]),tU=null==tO?void 0:tO.id;(0,r.useEffect)(()=>{var e;if(!ey||!tU||tR.current)return;let t=null==(e=tn.containerRef.current)?void 0:e.getBoundingClientRect();if(!t)return;let n=tN.nodes.find(e=>e.node.id===tU);n&&(0,eE.ff)({x:n.x,y:n.y,width:k.zT,height:k.EL},tn.view,{width:t.width,height:t.height})&&tl(n.x,n.y,void 0,ts())},[tl,ey,tN.nodes,tU,ts,tn.containerRef,tn.view]),(0,r.useEffect)(()=>{var e;if(!(null==(e=tn.containerRef.current)?void 0:e.getBoundingClientRect())||0===tN.nodes.length)return;let{dx:t,dy:n}=(0,eE.B)({width:tN.width,height:tN.height},tn.view,ts());tn.panBy(t,n)},[tN.width,tN.height,tN.nodes.length]);let tX=(0,r.useCallback)(e=>{ef(e);let t=tN.nodes.find(t=>t.node.id===e);t&&tl(t.x,t.y,void 0,ts())},[tl,tN.nodes,ts]);(0,r.useEffect)(()=>{if(!ex)return;let e=e=>{"Escape"===e.key&&ef(null)};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[ex]);let tJ=(0,r.useCallback)(e=>{ew(t=>""===t||t.endsWith(" ")?"".concat(t,"@").concat(e.title," "):"".concat(t," @").concat(e.title," "))},[]),tK=(0,r.useCallback)(()=>{let e=null==el?void 0:el.document;e&&(eb(!0),tf.startGeneration(eG(e,tp.current),eA.trim()).finally(()=>eb(!1)))},[el,tf,eA]),tY=(0,r.useCallback)(async()=>{let e=null==el?void 0:el.document;if(!e)return;let t=eG(e,tp.current);if(!t.projectRoot)return void tx({kind:"error",text:"未识别当前项目,无法预览结构"});try{let e=await (0,y.dk)({promptIds:t.promptIds,requirement:eA.trim(),...t.materialRoot?{materialRoot:t.materialRoot}:{},...t.title?{title:t.title}:{},projectRoot:t.projectRoot});e4({title:e.title,chapters:e.chapters,outlineSource:e.derivation.outlineSource,materialScope:e.materialScope})}catch(e){tx({kind:"error",text:e instanceof Error?e.message:"结构预览失败"})}},[el,tx,eA]),tV=(0,r.useCallback)(e=>{let t=R(tz.map(eX),e.id);if(!t)return void tx({kind:"warning",text:"该节点不在当前节点集合里,无法评估影响面"});eD({nodeId:e.id,nodeTitle:e.title,nodeType:e.type,impact:t})},[tz,tx]),tQ=(0,r.useCallback)(()=>{if(!eL)return;let e=(0,k.RV)(eL.nodeTitle,eL.impact);ew(t=>t?"".concat(t," ").concat(e):e),eD(null)},[eL]),tZ=(0,r.useCallback)(()=>{tf.pauseDocument(ee).catch(e=>tx({kind:"error",text:e instanceof Error?e.message:"暂停失败"}))},[ee,tf,tx]),t$=(0,r.useCallback)(()=>{tf.resumePausedDocument(ee).catch(e=>tx({kind:"error",text:e instanceof Error?e.message:"继续失败"}))},[ee,tf,tx]),t0=null==el?void 0:el.document.status,t1=tf.loading||"generating"===t0||"queued"===t0,t2=(0,r.useRef)(null),t4=(0,r.useRef)(null),[t5,t8]=(0,r.useState)({width:0,height:0});(0,r.useLayoutEffect)(()=>{let e=t4.current;if(!e)return void t8({width:0,height:0});let t=()=>{let t=e.firstElementChild;if(!t)return;let n=e.offsetWidth,l=Math.max(t.scrollHeight,t.offsetHeight);t8(e=>Math.abs(e.width-n)>2||Math.abs(e.height-l)>2?{width:n,height:l}:e)};t();let n=new ResizeObserver(t);return n.observe(e),e.firstElementChild&&n.observe(e.firstElementChild),()=>n.disconnect()},[ex]);let t3=(0,r.useMemo)(()=>{var e;if(!ex)return null;let t=tN.nodes.find(e=>e.node.id===ex),n=null==(e=tn.containerRef.current)?void 0:e.getBoundingClientRect();if(!t||!n)return null;let l=[".canvasToolbar",".canvasInputBar",".canvasRecordsBall"].map(e=>{var t;return null==(t=document.querySelector(e))?void 0:t.getBoundingClientRect()}).filter(e=>!!e).map(e=>({left:e.left-n.left,top:e.top-n.top,right:e.right-n.left,bottom:e.bottom-n.top})),r="".concat(tn.view.x,",").concat(tn.view.y,",").concat(tn.view.k),i=t2.current,a=i&&i.id===ex&&i.viewKey===r?i:null,s=(0,k.Aq)({node:{x:t.x,y:t.y},view:tn.view,box:n,panelWidth:t5.width>0?t5.width:462,panelHeight:t5.height>0?t5.height:480,obstacles:l,...a?{pin:{left:a.left,top:a.top}}:{}});t2.current={id:ex,viewKey:r,left:s.left,top:s.top};let o=Math.round(.62*n.height);return{left:s.left,top:s.top,maxHeight:Math.max(180,Math.min(s.maxHeight,o))}},[tN.nodes,ex,tn,t5]),t6=(0,r.useCallback)(e=>{tJ(e),requestAnimationFrame(()=>{var e;return null==(e=document.querySelector(".canvasInputBar textarea"))?void 0:e.focus()})},[tJ]),t7=(0,r.useCallback)(e=>{tX(e.id),e_(e.id),window.setTimeout(()=>e_(t=>t===e.id?null:t),1200)},[tX]),t9=(0,r.useCallback)(async e=>{if(ee)try{let{document:t}=await (0,y.v7)(ee,!1,tp.current);if(!t)return void tx({kind:"warning",text:"记录不存在,无法导出"});await tf.export.exportRecord(t,e)}catch(e){tx({kind:"error",text:e instanceof Error?e.message:"导出失败"})}},[ee,tf.export,tx]),ne=tf.boundRecord,nt=tf.canResume;return ee?es?(0,l.jsx)(p.Ay,{status:"warning",title:"画布打不开",subTitle:es,extra:(0,l.jsxs)(m.A,{children:[(0,l.jsx)(x.Ay,{icon:(0,l.jsx)(g.A,{}),onClick:()=>{tS()},children:"重试"}),(0,l.jsx)(o(),{href:"/documents",children:(0,l.jsx)(x.Ay,{type:"primary",children:"回到文档页"})})]})}):(0,l.jsxs)("div",{className:"canvasRoot",children:[(0,l.jsx)(a(),{children:(0,l.jsx)("title",{children:(null==el?void 0:el.document.title)?"".concat(el.document.title," \xb7 画布"):"生成画布"})}),(0,l.jsx)(eI,{title:(null==el?void 0:el.document.title)||"生成画布",...t0?{status:t0}:{},...(null==el?void 0:el.document.updatedAt)!==void 0?{updatedAt:el.document.updatedAt}:{},...(null==el?void 0:el.document.wordCount)!==void 0?{wordCount:el.document.wordCount}:{},agents:tW,supervisorDecisions:tF,agentsActive:t1,...(null==el?void 0:el.document.createdAt)!==void 0?{startedAt:el.document.createdAt}:{},onLocateAgent:e=>{ef(e),e_(e)},nodeCount:null!=(M=null==el?void 0:el.nodes.count)?M:0,visibleCount:tN.nodes.length,hiddenCount:null!=(T=null==el?void 0:el.nodes.hiddenCount)?T:0,degraded:e0,skills:{hits:null!=(L=null==el?void 0:el.skills.hits)?L:[],note:null!=(D=null==el?void 0:el.skills.note)?D:""},gate:null!=(P=null==el?void 0:el.gate)?P:null,connection:eu,lastSeq:ep,zoom:tn.view.k,depth:ev,following:ey,generating:!!t1,resumable:nt,exporting:tf.export.exporting,nonDeliverableExport:tf.export.nonDeliverableExport,onZoomIn:()=>tr(1.2),onZoomOut:()=>tr(1/1.2),onZoomReset:ta,onFit:()=>ti(tN.width,tN.height,ts()),onDepthChange:e=>{tm.current=!0,eg(e)},onToggleFollow:()=>ej(e=>!e),onContinue:()=>{ne&&tf.resumeDocument(ne)},onPause:tZ,onResume:t$,onAbort:()=>{tf.abortGeneration()},onExport:e=>{t9(e)},exportReports:tf.export.exportReports,previewOpen:e5,onTogglePreview:tj,hasNodeOffsets:eZ.size>0,onResetNodeLayout:tL,t:Z}),(0,l.jsxs)("div",{ref:tn.containerRef,className:"canvasStage",style:{backgroundImage:"radial-gradient(var(--canvasGridDot) 1px, transparent 1px)",backgroundSize:"".concat(eE.VF*tn.view.k,"px ").concat(eE.VF*tn.view.k,"px"),backgroundPosition:"".concat(tn.view.x,"px ").concat(tn.view.y,"px"),cursor:"grab"},onWheelCapture:()=>{ey&&ej(!1)},onPointerDown:e=>{var t;let n=e.target;null!=n&&null!=(t=n.closest)&&t.call(n,".nodeInfoLayer, .canvasToolbar, .canvasInputBar")||(ey&&ej(!1),tn.onPointerDown(e))},onPointerMove:tn.onPointerMove,onPointerUp:tn.endDrag,onPointerLeave:tn.endDrag,onClick:()=>ef(null),children:[ei&&(0,l.jsx)("div",{style:{position:"absolute",inset:0,display:"grid",placeItems:"center"},children:(0,l.jsxs)(m.A,{direction:"vertical",align:"center",children:[(0,l.jsx)(h.A,{}),(0,l.jsx)(eW,{type:"secondary",children:"正在读取节点日志…"})]})}),!ei&&0===tN.nodes.length&&(0,l.jsx)("div",{style:{position:"absolute",inset:0,display:"grid",placeItems:"center",pointerEvents:"none"},children:(0,l.jsxs)(m.A,{direction:"vertical",align:"center",size:8,children:[(0,l.jsx)(eW,{type:"secondary",children:"还没有节点日志"}),(0,l.jsx)(eW,{type:"secondary",style:{fontSize:12},children:"节点日志是唯一真相源:这里**不造占位节点**,发起生成后节点会随日志追加而出现。"})]})}),(0,l.jsxs)("div",{style:{position:"absolute",left:0,top:0,transformOrigin:"0 0",transform:"translate(".concat(tn.view.x,"px, ").concat(tn.view.y,"px) scale(").concat(tn.view.k,")"),width:tN.width,height:tN.height},children:[(0,l.jsx)(_,{edges:tN.edges,width:tN.width,height:tN.height,toneOf:tG,flowing:tq}),(0,l.jsx)(F,{bubbles:eB,layout:tN,static:eK}),tN.nodes.map(e=>(0,l.jsx)(et,{node:e.node,x:e.x,y:e.y,selected:e.node.id===ex,affected:tB.has(e.node.id)&&e.node.id!==ex,flashed:eP===e.node.id,onDrag:tT,onSelect:e=>ef(e.id),t:Z},e.node.id))]}),tP&&t3&&(0,l.jsx)("div",{ref:t4,className:"nodeInfoLayer",style:{left:t3.left,top:t3.top,maxHeight:t3.maxHeight},onClick:e=>e.stopPropagation(),onContextMenu:e=>e.stopPropagation(),children:(0,l.jsx)(eH,{node:tP,...t_?{impact:t_}:{},flatNodes:tz,highlighted:!!(ex&&tB.has(ex)),generating:!!t1,repairPreview:eL,onFocusNode:tX,onRequestRepair:tV,onClose:()=>ef(null),onDraftRepairNote:tQ,onCancelRepairPreview:()=>eD(null),onMention:t6,onLocate:t7,onPause:tZ,onResume:t$,nodeEvents:eS.filter(e=>e.nodeId===(null==tP?void 0:tP.id)),t:Z})})]}),(0,l.jsx)(eN._,{value:eA,onChange:ew,onSend:tK,generating:!!t1,submitting:ek,disabled:!el,...el?{}:{disabledReason:"正在读取记录…"},selectedNode:tP,onMentionSelected:()=>{tP&&tJ(tP)},resumable:nt,onContinue:()=>{ne&&tf.resumeDocument(ne)},onPreviewStructure:()=>{tY()}}),(0,l.jsx)(eC._,{currentDocumentId:ee,...en?{projectRoot:en}:{},onSelect:e=>{Q.push((0,ez.p)(e.id,e.projectRoot||en))},onCurrentDeleted:()=>{Q.push("/canvas")}}),(0,l.jsx)(eq.B,{open:!!e2,title:null!=(H=null==e2?void 0:e2.title)?H:"",chapters:null!=(q=null==e2?void 0:e2.chapters)?q:[],...(null==e2?void 0:e2.outlineSource)?{outlineSource:e2.outlineSource}:{},...(null==e2?void 0:e2.materialScope)?{materialScope:e2.materialScope}:{},onClose:()=>e4(null)}),(0,l.jsxs)(f.A,{open:e5,title:"成稿预览",onCancel:()=>{ty.reset(),e8(!1)},footer:(0,l.jsxs)(m.A,{children:[(0,l.jsx)(x.Ay,{onClick:()=>{ty.load()},loading:ty.loading,children:"重新取回"}),(0,l.jsx)(x.Ay,{type:"primary",onClick:()=>{ty.reset(),e8(!1)},children:"关闭"})]}),width:920,styles:{body:{maxHeight:"72vh",overflow:"auto",background:"var(--colorBgLayout)",padding:"16px 20px"}},style:{top:32},children:[(0,l.jsx)(C,{status:null!=(G=null==(e=ty.preview)?void 0:e.status)?G:t0,title:null!=(U=null==(t=ty.preview)?void 0:t.title)?U:null==el?void 0:el.document.title,html:null==(n=ty.preview)?void 0:n.html,source:null==(i=ty.preview)?void 0:i.source,truncated:null==(s=ty.preview)?void 0:s.truncated,totalChars:null==(d=ty.preview)?void 0:d.totalChars,renderedChars:null==(w=ty.preview)?void 0:w.renderedChars,stats:null==(b=ty.preview)?void 0:b.stats,gate:null!=(J=null!=(X=null==(S=ty.preview)?void 0:S.gate)?X:null==el?void 0:el.gate)?J:null,loading:ty.loading,error:ty.error,onRetry:()=>{ty.load()},updatedAt:null==(I=ty.preview)?void 0:I.updatedAt,generatedAt:null==(z=ty.preview)?void 0:z.generatedAt,t:Z}),(0,l.jsxs)("div",{style:{marginTop:16,borderTop:"1px solid var(--colorBorderSecondary)",paddingTop:12},children:[(0,l.jsx)(eW,{strong:!0,style:{fontSize:13},children:"本档用到的资产"}),0===e3.length?(0,l.jsx)("div",{children:(0,l.jsx)(eW,{type:"secondary",style:{fontSize:12},children:"本档暂无资产"})}):(0,l.jsxs)(m.A,{direction:"vertical",size:4,style:{width:"100%",marginTop:6},children:[e3.slice(0,20).map(e=>(0,l.jsxs)(m.A,{size:8,children:[(0,l.jsx)(eW,{style:{fontSize:12},children:e.name}),(0,l.jsx)(x.Ay,{size:"small",type:"link",onClick:()=>tA(e),children:"打开"})]},e.id)),e3.length>20?(0,l.jsxs)(eW,{type:"secondary",style:{fontSize:12},children:["还有 ",e3.length-20," 项未列出"]}):null]})]})]}),(0,l.jsxs)(f.A,{open:!!e7,title:e7?"资产预览:".concat(e7.name):"",onCancel:()=>{e9(null),tt(!1)},footer:(0,l.jsxs)(m.A,{children:[te&&e7?(0,l.jsx)(x.Ay,{onClick:()=>{var e;(0,y.oS)(e7.id,"file",null!=(e=tp.current)?e:en).catch(()=>tx({kind:"error",text:"打开资产失败"}))},children:"用系统程序打开"}):null,(0,l.jsx)(x.Ay,{type:"primary",onClick:()=>{e9(null),tt(!1)},children:"关闭"})]}),width:760,styles:{body:{maxHeight:"68vh",overflow:"auto"}},children:[e7&&!te?(0,l.jsx)("img",{alt:e7.name,src:(0,y.iN)(e7.id,null!=(V=tp.current)?V:en),style:{maxWidth:"100%",display:"block",margin:"0 auto"},onError:()=>tt(!0)}):null,te&&(0,l.jsx)(v.A,{type:"info",showIcon:!0,message:"这个资产不能在应用内渲染",description:"服务端只对图片(PNG / JPEG / WebP,按文件头验证)提供应用内渲染;其它形态请用系统程序打开。"})]})]}):(0,l.jsx)("div",{className:"appShellPlaceholder",children:(0,l.jsx)(h.A,{style:{margin:48}})})}function eX(e){return e}},72210:(e,t,n)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/canvas/[id]",function(){return n(29310)}])}},e=>{e.O(0,[310,700,914,174,569,243,506,709,530,636,593,792],()=>e(e.s=72210)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- /*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-blue-50:oklch(97% .014 254.604);--color-blue-200:oklch(88.2% .059 254.128);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-3xl:48rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,::backdrop,:after,:before{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}:host,html{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.collapse{visibility:collapse}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.top-0{top:0}.top-1{top:var(--spacing)}.top-3{top:calc(var(--spacing) * 3)}.top-5{top:calc(var(--spacing) * 5)}.z-\[1\]{z-index:1}.col-span-2{grid-column:span 2/span 2}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.\!m-0{margin:0!important}.m-0{margin:0}.-mx-4{margin-inline:calc(var(--spacing) * -4)}.mx-1{margin-inline:var(--spacing)}.mx-auto{margin-inline:auto}.\!my-3{margin-block:calc(var(--spacing) * 3)!important}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-auto{margin-top:auto}.-mr-2{margin-right:calc(var(--spacing) * -2)}.mr-1{margin-right:var(--spacing)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-4{margin-right:calc(var(--spacing) * 4)}.\!mb-0{margin-bottom:0!important}.\!mb-4{margin-bottom:calc(var(--spacing) * 4)!important}.mb-0{margin-bottom:0}.mb-1{margin-bottom:var(--spacing)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-3{margin-left:calc(var(--spacing) * 3)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-3{height:calc(var(--spacing) * 3)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-\[22px\]{height:22px}.h-\[calc\(100vh-140px\)\],.h-\[calc\(100vh_-_140px\)\]{height:calc(100vh - 140px)}.h-auto{height:auto}.h-full{height:100%}.max-h-52{max-height:calc(var(--spacing) * 52)}.max-h-\[170px\]{max-height:170px}.max-h-\[260px\]{max-height:260px}.min-h-0{min-height:0}.min-h-\[66px\]{min-height:66px}.min-h-\[140px\]{min-height:140px}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-6{width:calc(var(--spacing) * 6)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-\[1px\]{width:1px}.w-\[22px\]{width:22px}.w-\[260px\]{width:260px}.w-full{width:100%}.max-w-3xl{max-width:var(--container-3xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-\[78\%\]{max-width:78%}.max-w-\[120px\]{max-width:120px}.max-w-\[240px\]{max-width:240px}.max-w-\[260px\]{max-width:260px}.max-w-\[280px\]{max-width:280px}.max-w-\[300px\]{max-width:300px}.max-w-\[360px\]{max-width:360px}.max-w-\[520px\]{max-width:520px}.min-w-0{min-width:0}.min-w-4{min-width:calc(var(--spacing) * 4)}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[22px_minmax\(0\,1fr\)_auto\]{grid-template-columns:22px minmax(0,1fr) auto}.grid-cols-\[28px_1fr_auto\]{grid-template-columns:28px 1fr auto}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-12>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 12) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 12) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-y-1{row-gap:var(--spacing)}:where(.divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px * var(--tw-divide-x-reverse));border-inline-end-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e+38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[var\(--borderColor\)\]{border-color:var(--borderColor)}.border-\[var\(--borderColorStrong\)\]{border-color:var(--borderColorStrong)}.border-\[var\(--canvasSectionBorder\)\]{border-color:var(--canvasSectionBorder)}.border-\[var\(--colorBorderSecondary\)\]{border-color:var(--colorBorderSecondary)}.border-\[var\(--colorDanger\)\]\/20{border-color:var(--colorDanger)}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--colorDanger\)\]\/20{border-color:color-mix(in oklab,var(--colorDanger) 20%,transparent)}}.border-\[var\(--colorWarning\)\]{border-color:var(--colorWarning)}.border-\[…\]{border-color:…}.border-blue-200{border-color:var(--color-blue-200)}.border-transparent{border-color:#0000}.bg-\[\#1e1e1e\]{background-color:#1e1e1e}.bg-\[var\(--borderColor\)\]{background-color:var(--borderColor)}.bg-\[var\(--colorAccent\)\]{background-color:var(--colorAccent)}.bg-\[var\(--colorBg\)\]{background-color:var(--colorBg)}.bg-\[var\(--colorBgContainer\)\]{background-color:var(--colorBgContainer)}.bg-\[var\(--colorBgElevated\)\]{background-color:var(--colorBgElevated)}.bg-\[var\(--colorBgHover\)\],.bg-\[var\(--colorBgHover\)\]\/50{background-color:var(--colorBgHover)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--colorBgHover\)\]\/50{background-color:color-mix(in oklab,var(--colorBgHover) 50%,transparent)}}.bg-\[var\(--colorBgSecondary\)\]\/30{background-color:var(--colorBgSecondary)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--colorBgSecondary\)\]\/30{background-color:color-mix(in oklab,var(--colorBgSecondary) 30%,transparent)}}.bg-\[var\(--colorBgSelected\)\]{background-color:var(--colorBgSelected)}.bg-\[var\(--colorBorderSecondary\)\]{background-color:var(--colorBorderSecondary)}.bg-\[var\(--colorBrand\)\]\/5{background-color:var(--colorBrand)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--colorBrand\)\]\/5{background-color:color-mix(in oklab,var(--colorBrand) 5%,transparent)}}.bg-\[var\(--colorBrand\)\]\/10{background-color:var(--colorBrand)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--colorBrand\)\]\/10{background-color:color-mix(in oklab,var(--colorBrand) 10%,transparent)}}.bg-\[var\(--colorDanger\)\],.bg-\[var\(--colorDanger\)\]\/10{background-color:var(--colorDanger)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--colorDanger\)\]\/10{background-color:color-mix(in oklab,var(--colorDanger) 10%,transparent)}}.bg-\[var\(--colorFillAlter\)\]{background-color:var(--colorFillAlter)}.bg-\[var\(--colorFillSecondary\)\]{background-color:var(--colorFillSecondary)}.bg-\[var\(--colorOk\)\]{background-color:var(--colorOk)}.bg-\[var\(--colorText\)\]{background-color:var(--colorText)}.bg-\[var\(--colorTextTertiary\)\]{background-color:var(--colorTextTertiary)}.bg-\[var\(--colorWarning\)\]{background-color:var(--colorWarning)}.bg-\[var\(--colorWarningBg\)\]{background-color:var(--colorWarningBg)}.bg-black{background-color:var(--color-black)}.bg-blue-50\/50{background-color:#eff6ff80}@supports (color:color-mix(in lab,red,red)){.bg-blue-50\/50{background-color:color-mix(in oklab,var(--color-blue-50) 50%,transparent)}}.bg-transparent{background-color:#0000}.object-cover{object-fit:cover}.p-0{padding:0}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-3\.5{padding:calc(var(--spacing) * 3.5)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.px-1{padding-inline:var(--spacing)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-20{padding-block:calc(var(--spacing) * 20)}.py-32{padding-block:calc(var(--spacing) * 32)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-16{padding-top:calc(var(--spacing) * 16)}.pb-1{padding-bottom:var(--spacing)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-left{text-align:left}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-7{--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.leading-\[18px\]{--tw-leading:18px;line-height:18px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.text-ellipsis{text-overflow:ellipsis}.whitespace-normal{white-space:normal}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#d4d4d4\]{color:#d4d4d4}.text-\[var\(--colorAccent\)\]{color:var(--colorAccent)}.text-\[var\(--colorBg\)\]{color:var(--colorBg)}.text-\[var\(--colorBorderSecondary\)\]{color:var(--colorBorderSecondary)}.text-\[var\(--colorBrand\)\]{color:var(--colorBrand)}.text-\[var\(--colorDanger\)\]{color:var(--colorDanger)}.text-\[var\(--colorInfo\)\]{color:var(--colorInfo)}.text-\[var\(--colorOk\)\]{color:var(--colorOk)}.text-\[var\(--colorPrimary\)\]{color:var(--colorPrimary)}.text-\[var\(--colorSuccess\)\]{color:var(--colorSuccess)}.text-\[var\(--colorText\)\]{color:var(--colorText)}.text-\[var\(--colorTextSecondary\)\]{color:var(--colorTextSecondary)}.text-\[var\(--colorTextTertiary\)\]{color:var(--colorTextTertiary)}.text-\[var\(--colorWarn\)\]{color:var(--colorWarn)}.text-\[var\(--colorWarning\)\]{color:var(--colorWarning)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.opacity-0{opacity:0}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a)}.shadow,.shadow-\[var\(--shadowSurface\)\]{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadowSurface\)\]{--tw-shadow:var(--shadowSurface)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a)}.shadow-lg,.shadow-md{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a)}.shadow-none{--tw-shadow:0 0 #0000}.shadow-none,.shadow-sm{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.focus-within\:opacity-100:focus-within{opacity:1}@media (hover:hover){.hover\:border-\[var\(--borderColorStrong\)\]:hover{border-color:var(--borderColorStrong)}.hover\:border-\[var\(--colorTextTertiary\)\]:hover{border-color:var(--colorTextTertiary)}.hover\:bg-\[var\(--colorBgContainer\)\]:hover{background-color:var(--colorBgContainer)}.hover\:bg-\[var\(--colorBgHover\)\]:hover{background-color:var(--colorBgHover)}.hover\:bg-\[var\(--colorFillAlter\)\]:hover{background-color:var(--colorFillAlter)}.hover\:bg-transparent:hover{background-color:#0000}.hover\:text-\[var\(--colorText\)\]:hover{color:var(--colorText)}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow-\[var\(--shadowSurfaceHover\)\]:hover{--tw-shadow:var(--shadowSurfaceHover)}.hover\:shadow-\[var\(--shadowSurfaceHover\)\]:hover,.hover\:shadow-md:hover{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a)}.hover\:shadow-sm:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:bg-\[var\(--colorBgContainer\)\]:focus{background-color:var(--colorBgContainer)}.focus\:bg-transparent:focus{background-color:#0000}@media (min-width:40rem){.sm\:w-44{width:calc(var(--spacing) * 44)}.sm\:w-auto{width:auto}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-end{align-items:flex-end}.sm\:items-start{align-items:flex-start}.sm\:gap-3{gap:calc(var(--spacing) * 3)}.sm\:pt-0\.5{padding-top:calc(var(--spacing) * .5)}.sm\:pb-0{padding-bottom:0}}@media (min-width:48rem){.md\:w-auto{width:auto}.md\:flex-none{flex:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}}@media (min-width:64rem){.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media (min-width:80rem){.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (prefers-color-scheme:dark){.dark\:bg-white{background-color:var(--color-white)}.dark\:text-black{color:var(--color-black)}}}:root{--mainInnerPadY:32px;--mainInnerPadX:clamp(24px,4vw,48px)}@media (max-width:900px){:root{--mainInnerPadY:20px;--mainInnerPadX:20px}}@media (max-width:640px){:root{--mainInnerPadY:12px;--mainInnerPadX:12px}}.canvasRoot{flex:1;min-height:0;position:relative;overflow:hidden}.mainInner.mainInnerCanvas{flex-direction:column;padding:0;display:flex}.canvasStage{background:var(--canvasBg);-webkit-user-select:none;user-select:none;position:absolute;inset:0;overflow:hidden}@media (max-width:900px){.canvasFloatRight{width:auto;max-height:38vh;inset:auto 12px 96px}}:root{--colorBg:#fff;--colorBgElevated:#fff;--colorBgSecondary:#fbfbfc;--colorBgHover:#f6f6f7;--colorBgSelected:#eff6ff;--colorText:#171717;--colorTextSecondary:#737373;--colorTextTertiary:#a3a3a3;--colorBrand:#06c;--colorBrandHover:#0052a3;--colorBrand2:#171717;--colorDanger:#e11d48;--colorOk:#16a34a;--colorWarn:#f59e0b;--colorInfo:#2563eb;--colorPrimary:#007aff;--colorAccent:#007aff;--colorSuccess:#34c759;--colorWarning:#ff9500;--colorError:#ff3b30;--colorBgContainer:#fff;--colorFillAlter:#00000004;--colorFillSecondary:#00000008;--colorFillTertiary:#00000006;--colorFillQuaternary:#00000004;--colorBorderSecondary:#3c3c431f;--colorTextQuaternary:#3c3c432e;--colorWarningBg:#fff8e6;--colorSuccessBg:#e8f9ee;--colorInfoBg:#e8f2ff;--colorErrorBg:#ffeceb;--glassBg:#ffffffd9;--glassBlur:saturate(180%) blur(16px);--borderColor:#00000014;--borderColorStrong:#00000026;--borderColorSelected:#3b82f6;--borderSoft:#0000000f;--textSecondary:#737373;--surfaceElevated:#fff;--shadowSoft:0 0 4px #00000008,0 0 12px #0000000a;--shadowCard:0 0 4px #0000000d,0 0 16px #0000000d;--shadowButton:0 1px 2px #0000000d;--shadowSurface:0 0 4px #0000000d,0 0 12px #0000000b;--shadowSurfaceHover:0 0 6px #00000012,0 0 18px #0000000f;--radiusSm:6px;--radiusMd:10px;--radiusLg:14px;--radiusPill:9999px;--sidebarWidth:260px;--fontSans:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;--canvasBg:transparent;--canvasGridDot:#00000017;--canvasNodeBg:#fff;--canvasNodeBorder:#0000001a;--canvasNodeShadow:0 1px 2px #0000000d,0 2px 8px #0000000a;--canvasNodeSelected:#007aff;--canvasNodeAffected:#ff9500;--canvasEdge:#3c3c4359;--canvasEdgeActive:#007aff;--canvasEdgeWarn:#ff9500;--canvasEdgeAffected:#ff3b30;--canvasSectionBg:#fff9;--canvasFloatBg:#ffffffd1;--canvasPanelBg:#fffffff5;--canvasSectionBorder:#00000014;--canvasBubbleBg:#fffffff7;--canvasBubbleBorder:#0000001a;--canvasBubbleText:#1c1c1e;--canvasBubbleShadow:0 2px 8px #00000024}.dark{--colorBg:#000;--colorBgElevated:#0a0a0a;--colorBgSecondary:#121212;--colorBgHover:#1a1a1a;--colorBgSelected:#3b82f626;--colorText:#ededed;--colorTextSecondary:#a3a3a3;--colorTextTertiary:#737373;--colorBrand:#3b82f6;--colorBrandHover:#60a5fa;--colorBrand2:#d4d4d4;--colorDanger:#f43f5e;--colorOk:#22c55e;--colorWarn:#fbbf24;--colorInfo:#3b82f6;--colorPrimary:#0a84ff;--colorAccent:#0a84ff;--colorSuccess:#30d158;--colorWarning:#ff9f0a;--colorError:#ff453a;--colorBgContainer:#2c2c2ec7;--colorFillAlter:#ffffff08;--colorFillSecondary:#ffffff0f;--colorFillTertiary:#ffffff0a;--colorFillQuaternary:#ffffff08;--colorBorderSecondary:#ffffff1a;--colorTextQuaternary:#ebebf53d;--colorWarningBg:#ff9f0a1f;--colorSuccessBg:#30d1581f;--colorInfoBg:#0a84ff1f;--colorErrorBg:#ff453a1f;--glassBg:#000000d9;--borderColor:#ffffff1f;--borderColorStrong:#fff3;--borderColorSelected:#60a5fa;--borderSoft:#ffffff14;--textSecondary:#a3a3a3;--surfaceElevated:#1c1c1e;--shadowSoft:0 0 4px #00000047,0 0 12px #0006;--shadowCard:0 0 4px #0000005c,0 0 16px #0006;--shadowButton:0 1px 2px #0000004d;--shadowSurface:0 0 4px #0000005c,0 0 12px #0000004d;--shadowSurfaceHover:0 0 6px #00000070,0 0 18px #0000005c;--canvasBg:transparent;--canvasGridDot:#ffffff1a;--canvasNodeBg:#1c1c1e;--canvasNodeBorder:#ffffff24;--canvasNodeShadow:0 1px 2px #0006,0 2px 10px #00000059;--canvasNodeSelected:#0a84ff;--canvasNodeAffected:#ff9f0a;--canvasEdge:#ebebf552;--canvasEdgeActive:#0a84ff;--canvasEdgeWarn:#ff9f0a;--canvasEdgeAffected:#ff453a;--canvasSectionBg:#1c1c1e99;--canvasFloatBg:#1c1c1ed1;--canvasPanelBg:#1c1c1ef5;--canvasSectionBorder:#ffffff1a;--canvasBubbleBg:#2c2c2ef5;--canvasBubbleBorder:#ffffff29;--canvasBubbleText:#f2f2f7;--canvasBubbleShadow:0 2px 10px #00000080}.canvasInputBar,.canvasToolbar{pointer-events:auto;z-index:2;border:1px solid var(--canvasSectionBorder);background:var(--canvasFloatBg);-webkit-backdrop-filter:saturate(180%)blur(16px);border-radius:14px;position:absolute;box-shadow:0 6px 24px #00000014}.canvasToolbar{flex-wrap:wrap;align-items:center;gap:8px;display:flex;top:12px}.canvasInputBar,.canvasToolbar{padding:8px 12px;left:12px;right:12px}.canvasInputBar{display:block;bottom:12px}.nodeInfoLayer{z-index:4;border:1px solid var(--canvasSectionBorder);background:var(--canvasPanelBg);-webkit-backdrop-filter:saturate(180%)blur(16px);border-radius:14px;flex-direction:column;display:flex;position:absolute;overflow:hidden;box-shadow:0 10px 32px #0000001f,0 2px 6px #0000000f}.nodeInfoHeader{border-bottom:1px solid var(--colorBorderSecondary);align-items:center;gap:6px;margin-bottom:10px;padding-bottom:10px;display:flex}.nodeInfoHeaderIcon{color:var(--colorTextSecondary);display:inline-flex}.nodeInfoClose{color:var(--colorTextTertiary)}.nodeInfoClose:hover{color:var(--colorText)}.nodeInfoActions{background:var(--colorFillQuaternary,var(--colorFillAlter));border-radius:8px;flex-wrap:wrap;gap:6px;margin-bottom:10px;padding:8px;display:flex}.nodeInfoPanel{width:min(460px,92vw);min-height:0;max-height:100%;padding:12px 14px;overflow:auto}.nodeInfoPanel .ant-descriptions-item-label{white-space:nowrap;width:92px;color:var(--colorTextSecondary)}.nodeInfoPanel .ant-tabs-nav{margin-bottom:12px}.nodeInfoRepair{border:1px solid var(--canvasNodeAffected);background:var(--colorWarningBg);border-radius:10px;margin-bottom:8px;padding:8px 10px}.canvasChatSection{flex-direction:column;gap:4px;display:flex}.canvasRecordsBall{pointer-events:auto}.canvasRecordsBallBtn{border:1px solid var(--canvasSectionBorder);background:var(--canvasPanelBg);-webkit-backdrop-filter:saturate(180%)blur(16px);color:var(--colorText);cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;border-radius:999px;justify-content:center;align-items:center;font-size:18px;transition:transform .12s;display:flex;position:relative;box-shadow:0 6px 24px #0000001f}.canvasRecordsBallBtn:hover{transform:scale(1.06)}.canvasRecordsBallBtn:active{cursor:grabbing}.canvasRecordsBallBadge{background:var(--colorAccent);color:#fff;text-align:center;font-variant-numeric:tabular-nums;border-radius:999px;min-width:18px;height:18px;padding:0 4px;font-size:10px;line-height:18px;position:absolute;top:-2px;right:-2px}.canvasRecordsBallBadge.isZero{background:var(--colorFillTertiary);color:var(--colorTextSecondary)}.canvasRecordsPanel{border:1px solid var(--canvasSectionBorder);background:var(--canvasPanelBg);-webkit-backdrop-filter:saturate(180%)blur(16px);border-radius:14px;overflow:hidden;box-shadow:0 10px 32px #0000001f,0 2px 6px #0000000f}.canvasRecordsLink{color:var(--colorAccent);cursor:pointer;background:0 0;border:0;padding:0;font-size:12px}.canvasRecordsLink:hover{text-decoration:underline}.canvasRecordsDelete{width:24px;height:24px;color:var(--colorTextTertiary);cursor:pointer;opacity:0;background:0 0;border:0;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;padding:0;transition:opacity .12s,color .12s;display:inline-flex}.canvasRecordsDelete:focus-visible,.canvasRecordsPanel>div>div:hover .canvasRecordsDelete{opacity:1}.canvasRecordsDelete:hover{color:var(--colorDanger);background:var(--colorBgHover)}.canvasRecordsDelete.isDisabled{cursor:not-allowed;opacity:0}.canvasRecordsPanel>div>div:hover .canvasRecordsDelete.isDisabled{opacity:.35}.canvasRecordsPanel>div>div:hover .canvasRecordsDelete.isDisabled:hover{color:var(--colorTextTertiary);background:0 0}.canvasRecordsDanger{border:1px solid var(--colorDanger);color:var(--colorDanger);cursor:pointer;background:0 0;border-radius:8px;align-items:center;padding:3px 10px;font-size:12px;display:inline-flex}.canvasRecordsDanger:disabled{opacity:.4;cursor:not-allowed}.canvasRecordsDanger:not(:disabled):hover{background:var(--colorDanger);color:#fff}.canvasEdgeLayer{pointer-events:none;position:absolute;top:0;left:0;overflow:visible}.canvasEdge{fill:none;stroke:var(--canvasEdge);stroke-width:1.4px}.canvasEdgeActive{stroke:var(--canvasEdgeActive);stroke-width:2px}.canvasEdgeWarn{stroke:var(--canvasEdgeWarn);stroke-width:1.8px;stroke-dasharray:5 4}.canvasEdgeAffected{stroke:var(--canvasEdgeAffected);stroke-width:2.2px}.canvasEdgeFlow{fill:none;stroke:var(--canvasEdgeActive);stroke-width:2.4px;stroke-linecap:round;stroke-dasharray:7 11;opacity:.85;animation:canvasEdgeFlow 1.1s linear infinite}@keyframes canvasEdgeFlow{0%{stroke-dashoffset:18px}to{stroke-dashoffset:0}}@media (prefers-reduced-motion:reduce){.canvasEdgeFlow{stroke-dashoffset:0;animation:none}}.canvasAgentChip,.canvasAgentsChips{align-items:center}.canvasAgentChip{border:1px solid var(--canvasSectionBorder);background:var(--canvasPanelBg);color:inherit;font:inherit;cursor:pointer;border-radius:999px;gap:4px;padding:1px 7px 1px 6px;transition:border-color .15s,box-shadow .15s;display:inline-flex}.canvasAgentChip:hover{border-color:var(--canvasNodeSelected);box-shadow:0 0 0 2px var(--canvasNodeSelected)}.canvasAgentChipTime{color:var(--colorTextSecondary);font-variant-numeric:tabular-nums;font-size:11px}.canvasAgentRole{border-radius:4px;justify-content:center;align-items:center;min-width:14px;height:14px;padding:0 2px;font-size:10px;line-height:1;display:inline-flex}.canvasAgentRole[data-role=main]{background:var(--colorPrimary);color:#fff}.canvasAgentRole[data-role=sub]{background:var(--canvasSectionBorder);color:var(--colorTextSecondary)}.canvasAgentChipMain{border-color:var(--colorPrimary)}.canvasAgentAvatar{border:1.5px solid var(--canvasEdge);background:var(--canvasNodeBg);width:22px;height:22px;color:var(--colorTextSecondary);border-radius:50%;justify-content:center;align-items:center;display:inline-flex;position:relative}.canvasAgentAvatarGlyph{font-size:12px;line-height:1;display:inline-flex}.canvasAgentAvatar[data-status=running]{border-color:var(--colorPrimary);color:var(--colorPrimary);animation:canvasAgentAvatarPulse 1.6s ease-in-out infinite}.canvasAgentAvatar[data-status=repairing]{border-color:var(--colorWarning);color:var(--colorWarning)}.canvasAgentAvatar[data-status=completed]{border-color:var(--colorSuccess);color:var(--colorSuccess)}@keyframes canvasAgentAvatarPulse{0%,to{box-shadow:0 0 #007aff59}50%{box-shadow:0 0 0 4px #007aff00}}@media (prefers-reduced-motion:reduce){.canvasAgentAvatar[data-status=running]{animation:none}}.canvasAgentIcon{color:var(--colorTextSecondary);display:inline-flex}.canvasAgentIcon[data-status=running]{color:var(--colorPrimary);animation:canvasNodePulse 1.6s ease-in-out infinite}.canvasAgentIcon[data-status=repairing]{color:var(--colorWarning)}.canvasAgentIcon[data-status=completed]{color:var(--colorSuccess)}.canvasAgentDetail{flex-direction:column;gap:6px;width:306px;display:flex}.canvasAgentDetailHead{align-items:center;gap:6px;display:flex}.canvasAgentDetailRow{align-items:baseline;gap:8px;display:flex}.canvasAgentDetailRow>:first-child{flex:0 0 46px}.canvasAgentDetailRow>:last-child{word-break:break-word;flex:1;min-width:0}.canvasAgentLocate{border:1px solid var(--canvasSectionBorder);color:var(--colorPrimary);cursor:pointer;background:0 0;border-radius:8px;align-self:flex-start;margin-top:2px;padding:3px 10px;font-size:12px}.canvasAgentLocate:hover{background:var(--colorBgHover)}.canvasBubbleLayer{pointer-events:none;position:absolute;top:0;left:0;overflow:visible}.canvasBubble{offset-distance:0;will-change:offset-distance,opacity;animation-name:canvasBubbleFly;animation-timing-function:cubic-bezier(.33,0,.67,1);animation-fill-mode:forwards;position:absolute;top:0;left:0}@keyframes canvasBubbleFly{0%{offset-distance:0;opacity:0}14%{opacity:1}80%{offset-distance:100%;opacity:1}to{offset-distance:100%;opacity:0}}.canvasBubbleStatic{offset-distance:55%;opacity:1;animation:none}.canvasBubbleBody{border:1px solid var(--canvasBubbleBorder);background:var(--canvasBubbleBg);max-width:220px;box-shadow:var(--canvasBubbleShadow);color:var(--canvasBubbleText);white-space:nowrap;border-radius:999px;align-items:center;padding:3px 9px;font-size:11px;line-height:16px;display:inline-flex;transform:translate(-50%,-50%)}.canvasBubble[data-kind=dispatch] .canvasBubbleBody{border-color:var(--canvasEdgeActive)}.canvasBubble[data-kind=report] .canvasBubbleBody{border-color:var(--canvasEdge)}.canvasBubbleText{text-overflow:ellipsis;overflow:hidden}.canvasNode{border:1px solid var(--canvasNodeBorder);background:var(--canvasNodeBg);box-shadow:var(--canvasNodeShadow);cursor:pointer;border-radius:10px;flex-direction:column;gap:4px;padding:8px 10px;transition:box-shadow .15s,border-color .15s;display:flex;position:absolute}.canvasNode:hover{border-color:var(--canvasNodeSelected)}@keyframes canvasNodeFlash{0%,to{box-shadow:var(--canvasNodeShadow)}50%{box-shadow:0 0 0 4px var(--canvasNodeSelected),var(--canvasNodeShadow)}}.canvasNodeFlashed{animation:canvasNodeFlash .6s ease-in-out 2}.canvasNodeSelected{border-color:var(--canvasNodeSelected);box-shadow:0 0 0 2px var(--canvasNodeSelected),var(--canvasNodeShadow)}.canvasNodeAffected{border-color:var(--canvasNodeAffected);box-shadow:0 0 0 2px var(--canvasNodeAffected)}.canvasNodeHeader{align-items:center;gap:6px;min-width:0;display:flex}.canvasNodeIcon{color:var(--colorTextSecondary);display:inline-flex}.canvasNodeIcon[data-status=running]{color:var(--colorPrimary);animation:canvasNodePulse 1.6s ease-in-out infinite}.canvasNodeIcon[data-status=blocked],.canvasNodeIcon[data-status=failed]{color:var(--colorError)}.canvasNodeIcon[data-status=paused],.canvasNodeIcon[data-status=repairing]{color:var(--colorWarning)}.canvasNodeMeta{gap:2px}.canvasNodeMeta,.canvasNodeMetrics{align-items:center;min-width:0;display:flex}.canvasNodeMetrics{white-space:nowrap;flex-shrink:0;gap:8px;overflow:hidden}.canvasNodeMetrics>.ant-typography{text-overflow:ellipsis;flex:0 auto;min-width:0;overflow:hidden}@keyframes canvasNodePulse{0%,to{opacity:1}50%{opacity:.35}}@media (max-width:1024px){.nodeInfoPanel{width:92vw}}.deliverablePreview{width:100%}.deliverablePreviewStack{flex-direction:column;gap:10px;width:100%;display:flex}.deliverablePreviewMeta{border-bottom:1px solid var(--colorBorderSecondary);flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:14px;padding-bottom:10px;display:flex}.deliverablePreviewPaper{border:1px solid var(--colorBorderSecondary);background:var(--colorBgContainer);border-radius:10px;width:100%;margin:0 auto;padding:28px 32px;box-shadow:0 1px 2px #00000008,0 8px 24px #0000000a}.deliverablePreviewBody{color:var(--colorText);text-align:justify;text-justify:inter-ideograph;overflow-wrap:anywhere;word-break:break-word;font-size:15px;line-height:1.9}.deliverablePreviewBody h1,.deliverablePreviewBody h2,.deliverablePreviewBody h3,.deliverablePreviewBody h4,.deliverablePreviewBody h5,.deliverablePreviewBody h6{text-align:left;margin:1.6em 0 .6em;font-weight:700;line-height:1.4}.deliverablePreviewBody h1{border-bottom:2px solid var(--colorBorder);padding-bottom:8px;font-size:1.6em}.deliverablePreviewBody h2{border-bottom:1px solid var(--colorBorderSecondary);padding-bottom:6px;font-size:1.35em}.deliverablePreviewBody h3{font-size:1.15em}.deliverablePreviewBody h4{font-size:1.02em}.deliverablePreviewBody h5,.deliverablePreviewBody h6{color:var(--colorTextSecondary);font-size:1em}.deliverablePreviewBody>:first-child{margin-top:0}.deliverablePreviewBody p{margin:.9em 0}.deliverablePreviewBody ol,.deliverablePreviewBody ul{margin:.9em 0;padding-left:1.8em}.deliverablePreviewBody ul{list-style:outside}.deliverablePreviewBody ol{list-style:decimal}.deliverablePreviewBody li{margin:.35em 0}.deliverablePreviewBody li::marker{color:var(--colorTextTertiary)}.deliverablePreviewBody li>ol,.deliverablePreviewBody li>ul{margin:.35em 0}.deliverablePreviewBody blockquote{border-left:3px solid var(--colorPrimaryBorder,var(--colorBorder));background:var(--colorFillQuaternary,var(--colorFillAlter));color:var(--colorTextSecondary);border-radius:0 6px 6px 0;margin:1em 0;padding:.6em 1.1em}.deliverablePreviewBody hr{border:none;border-top:1px solid var(--colorBorderSecondary);margin:1.8em 0}.deliverablePreviewBody a{color:var(--colorPrimary);text-underline-offset:2px;text-decoration:underline}.deliverablePreviewBody img{border-radius:6px;max-width:100%;height:auto}.deliverablePreviewBody strong{font-weight:600}.deliverablePreviewBody table{border-collapse:collapse;text-align:left;width:100%;margin:1.1em 0;font-size:13.5px}.deliverablePreviewBody td,.deliverablePreviewBody th{border:1px solid var(--colorBorderSecondary);vertical-align:top;padding:8px 10px}.deliverablePreviewBody th{background:var(--colorFillAlter);border-bottom:2px solid var(--colorBorder);white-space:nowrap;font-weight:600}.deliverablePreviewBody tbody tr:nth-child(2n) td{background:var(--colorFillQuaternary,transparent)}.deliverablePreviewBody code{background:var(--colorFillSecondary);font-family:var(--fontMono,ui-monospace,SFMono-Regular,Menlo,monospace);border-radius:4px;padding:.15em .4em;font-size:.9em}.deliverablePreviewBody pre{background:var(--colorFillAlter);text-align:left;border-radius:8px;margin:1em 0;padding:12px 14px;overflow-x:auto}.deliverablePreviewBody pre code{background:0 0;padding:0;font-size:12.5px}.deliverablePreviewEnd{border-top:1px dashed var(--colorBorderSecondary);flex-direction:column;gap:4px;width:100%;margin-top:28px;padding-top:14px;display:flex}*,:after,:before{box-sizing:border-box}html{font-family:var(--fontSans);background:var(--colorBg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.appShellPlaceholder,body{background:var(--colorBg);min-height:100vh}body{font-family:var(--fontSans);color:var(--colorText);margin:0}.ant-drawer-content-wrapper{min-width:320px;width:30%!important}a{color:inherit;text-decoration:none}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--borderColorStrong);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--colorTextTertiary)}@keyframes fadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.animateFadeIn{animation:fadeIn .4s cubic-bezier(.2,.8,.2,1) forwards}.stagger-1{animation-delay:50ms}.stagger-2{animation-delay:.1s}.stagger-3{animation-delay:.15s}.stagger-4{animation-delay:.2s}.stagger-5{animation-delay:.25s}.space-y-8>*+*{margin-top:32px}.space-y-6>*+*{margin-top:24px}.space-y-5>*+*{margin-top:20px}.space-y-4>*+*{margin-top:16px}.space-y-3>*+*{margin-top:12px}.space-y-2>*+*{margin-top:8px}.space-x-8>*+*{margin-left:32px}.space-x-6>*+*{margin-left:24px}.space-x-4>*+*{margin-left:16px}.space-x-2>*+*{margin-left:8px}.routeProgress{top:0;left:var(--sidebarWidth);z-index:1000;background:linear-gradient(90deg,var(--colorPrimary),var(--colorAccent));height:3px;animation:routeProgress .9s ease-in-out infinite;position:fixed;right:0}#nprogress{pointer-events:none}#nprogress .bar{background:var(--colorBrand);z-index:1031;width:100%;height:3px;position:fixed;top:0;left:0}#nprogress .peg{width:100px;height:100%;box-shadow:0 0 10px var(--colorBrand),0 0 5px var(--colorBrand);opacity:1;display:block;position:absolute;right:0;transform:rotate(3deg)translateY(-4px)}.routeLoadingCard{border:1px solid var(--borderSoft);color:var(--textSecondary);background:var(--surfaceElevated);border-radius:16px;margin-bottom:16px;padding:14px 16px}@keyframes routeProgress{0%{transform-origin:0;opacity:.65;transform:scaleX(.15)}50%{transform-origin:0;opacity:1;transform:scaleX(.7)}to{transform-origin:0;opacity:.35;transform:scaleX(1)}}@media (max-width:1024px){:root{--sidebarWidth:200px}}@media (max-width:860px){:root{--sidebarWidth:72px}.sidebarLogo{justify-content:center;padding:16px}.sidebarFooter,.sidebarItem span:not(.sidebarChevron),.sidebarLogoSub,.sidebarLogoTitle{display:none}.sidebarItem{justify-content:center;padding:11px}.sidebarSubmenu{padding-left:0}.sidebarSubItem{padding-left:11px}.mainInner{padding:var(--mainInnerPadY) var(--mainInnerPadX);padding-bottom:calc(var(--mainInnerPadY) + env(safe-area-inset-bottom,0px))}.topbar{margin:10px 12px 0;padding:10px 16px}}@media (max-width:640px){.sidebar{top:6px;left:6px;bottom:calc(6px + env(safe-area-inset-bottom,0px))}.mainContent{margin-left:72px}.mainInner{padding:var(--mainInnerPadY) var(--mainInnerPadX);padding-bottom:calc(var(--mainInnerPadY) + env(safe-area-inset-bottom,0px))}.topbar{border-radius:16px;margin:8px 8px 0;padding:8px 12px}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}.sidebar{position:fixed;left:0;top:0;bottom:0;width:var(--sidebarWidth);display:flex;flex-direction:column;z-index:20;background:var(--colorBgSecondary);border-right:none;box-shadow:2px 0 8px rgba(0,0,0,.02);overflow:hidden;transition:width .3s cubic-bezier(.2,.8,.2,1),transform .3s ease}.sidebarCollapsedSelf{width:72px}.sidebarLogoRow{gap:4px;padding-right:8px}.sidebarLogo,.sidebarLogoRow{display:flex;align-items:center}.sidebarLogo{gap:12px;padding:24px 20px 20px;height:68px;overflow:hidden}.sidebarCollapsedSelf .sidebarLogo{justify-content:center;padding:24px 0 20px}.sidebarCollapsedSelf .sidebarLogoRow{padding-right:0}.sidebarCollapsedSelf .sidebarChevron,.sidebarCollapsedSelf .sidebarLabel,.sidebarCollapsedSelf .sidebarLogoTitle{display:none}.sidebarCollapsedSelf .sidebarItem{justify-content:center;padding:10px}.sidebarLogoTitle{font-size:16px;font-weight:600;letter-spacing:-.01em;white-space:nowrap;opacity:1;transition:opacity .2s ease;color:var(--colorText)}.sidebarNav{flex:1;overflow-y:auto;overflow-x:hidden;flex-direction:column;gap:2px}.sidebarItem,.sidebarNav{padding:8px 12px;display:flex}.sidebarItem{align-items:center;gap:10px;border-radius:var(--radiusSm);font-size:13.5px;font-weight:500;color:var(--colorTextSecondary);transition:all .15s ease;cursor:pointer;white-space:nowrap}.sidebarLabel{transition:opacity .2s ease}.sidebarItem:hover{background:var(--colorBgHover);color:var(--colorText)}.sidebarItemActive,.sidebarItemActive:hover{background:var(--colorBgElevated);color:var(--colorText);box-shadow:none}.dark .sidebarItemActive,.dark .sidebarItemActive:hover{box-shadow:none}.sidebarCollapseBtn{width:32px;height:32px;flex-shrink:0;border-radius:var(--radiusSm);border:1px solid transparent;background:transparent;color:var(--colorTextSecondary);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease}.sidebarCollapseBtn:hover{background:var(--colorBgHover);color:var(--colorText)}.topbar{position:sticky;top:0;z-index:10;display:flex;align-items:center;justify-content:flex-end;gap:12px;padding:16px 32px;background:var(--glassBg);backdrop-filter:var(--glassBlur);-webkit-backdrop-filter:var(--glassBlur);border-bottom:none;box-shadow:0 1px 3px rgba(0,0,0,.02)}.topbarBtn{display:inline-flex;align-items:center;gap:8px;padding:6px;border-radius:var(--radiusSm);border:1px solid transparent;background:transparent;color:var(--colorTextSecondary);font-size:13px;font-weight:500;cursor:pointer;transition:all .15s ease;outline:none}.topbarBtn:hover{background:var(--colorBgHover);color:var(--colorText)}.mainContent{margin-left:var(--sidebarWidth);flex:1;display:flex;flex-direction:column;min-height:100vh;background:var(--colorBg);transition:margin-left .3s cubic-bezier(.2,.8,.2,1)}.sidebarCollapsed .mainContent{margin-left:68px}.mainInner{flex:1;padding:var(--mainInnerPadY,32px) var(--mainInnerPadX,clamp(24px,4vw,48px));padding-bottom:calc(var(--mainInnerPadY, 32px) + env(safe-area-inset-bottom, 0px));width:100%;min-width:0;overflow-x:hidden;transition:opacity .2s ease}.mainInner.pageTransitioning{opacity:.5;pointer-events:none}.pageTitle{font-size:24px;font-weight:700;letter-spacing:-.01em;color:var(--colorText);margin:0}.pageDesc{margin-top:6px;font-size:14px;color:var(--colorTextSecondary)}.ant-card{background:var(--colorBgContainer)!important;border:none!important;border-radius:20px!important;box-shadow:var(--shadowSurface)!important;margin-bottom:0!important}.ant-card-head{border-bottom:none!important;padding:0!important;min-height:auto!important;margin-bottom:16px}.ant-card-head-title{font-size:16px!important;font-weight:600!important;padding:0!important}.tableFillHeight,.tableFillHeight>.ant-spin,.tableFillHeight>.ant-spin>.ant-spin-container{display:flex;flex-direction:column;min-height:0}.tableFillHeight>.ant-spin,.tableFillHeight>.ant-spin>.ant-spin-container{flex:1}.tableFillHeight .ant-table{flex:1 1 auto;min-height:0}.tableFillHeight .ant-table-container{display:flex;flex-direction:column;height:100%;min-height:0}.tableFillHeight .ant-table-body{flex:1;min-height:0;overflow:auto!important;max-height:none!important}.tableFillHeight .ant-table-pagination.ant-pagination{margin:auto 16px 12px!important}.ant-modal-content{background:var(--colorBgElevated)!important;border:1px solid var(--borderColor)!important;border-radius:var(--radiusLg)!important;box-shadow:var(--shadowCard)!important;padding:24px!important}.ant-modal-header{background:transparent!important;margin-bottom:24px!important}.ant-input,.ant-input-number,.ant-input-password,.ant-select-selector{border:1px solid transparent!important;background:var(--colorBgHover)!important;border-radius:var(--radiusSm)!important;box-shadow:none!important;transition:all .2s ease!important}.ant-input-focused,.ant-input-number-focused,.ant-input-number:focus,.ant-input-number:hover,.ant-input-password:focus,.ant-input-password:hover,.ant-input:focus,.ant-input:hover,.ant-select-focused .ant-select-selector,.ant-select:not(.ant-select-disabled):hover .ant-select-selector{border-color:var(--borderColorStrong)!important;background:transparent!important;box-shadow:none!important}.ant-input-affix-wrapper-outlined:focus,.ant-input-affix-wrapper-outlined:focus-within,.ant-input-number-outlined:focus,.ant-input-number-outlined:focus-within,.ant-input-outlined:focus,.ant-input-outlined:focus-within,.ant-select-outlined.ant-select-focused .ant-select-selector{box-shadow:none!important;outline:none!important;border-color:var(--borderColorStrong)!important}.modern-table .ant-table{background:transparent!important;border:none!important;border-radius:0!important}.modern-table .ant-table-container{border:none!important}.modern-table .ant-table-thead>tr>th{background:var(--colorBgSecondary)!important;border:none!important;font-size:11px!important;font-weight:600!important;color:var(--colorTextSecondary)!important;text-transform:uppercase;letter-spacing:.05em;padding:14px 16px!important}.modern-table .ant-table-thead>tr>th:first-child{border-top-left-radius:var(--radiusMd)!important;border-bottom-left-radius:var(--radiusMd)!important}.modern-table .ant-table-thead>tr>th:last-child{border-top-right-radius:var(--radiusMd)!important;border-bottom-right-radius:var(--radiusMd)!important}.modern-table .ant-table-thead>tr>th:before{display:none!important}.modern-table .ant-table-tbody>tr>td{border:none!important;background:transparent!important;padding:18px 16px!important;font-size:14px}.modern-table .ant-table-tbody>tr:last-child>td{border-bottom:none!important}.modern-table .ant-table-tbody>tr:hover>td{background:var(--colorBgHover)!important}.modern-table .ant-table-tbody>tr.ant-table-row-selected>td{background:var(--colorBgSelected)!important;border:0!important;box-shadow:none!important;outline:0!important}.ant-btn-default{border-color:var(--borderColor)!important;background:transparent!important;box-shadow:none!important}.ant-btn-default:hover{background:var(--colorBgHover)!important;border-color:var(--borderColorStrong)!important;color:var(--colorText)!important}.ant-btn-primary{background:var(--colorText)!important;color:var(--colorBg)!important;box-shadow:none!important;border:none!important}.ant-btn-primary:hover{background:var(--colorTextSecondary)!important;color:var(--colorBg)!important}.ant-row{row-gap:24px}.ant-input,.ant-input-affix-wrapper,.ant-input-number,.ant-input-password,.ant-input-search .ant-input,.ant-input-search .ant-input-group-addon .ant-btn,.ant-mentions,.ant-picker,.ant-select-selector{min-height:34px;border:1px solid var(--borderColor)!important;background:var(--colorBgSecondary)!important;border-radius:var(--radiusSm)!important;box-shadow:none!important;outline:none!important}.ant-input-affix-wrapper>input.ant-input,.ant-input-affix-wrapper>textarea.ant-input,.ant-input-number .ant-input-number-input,.ant-input-password>input.ant-input,.ant-input-search .ant-input-affix-wrapper>input.ant-input{min-height:auto;border:0!important;background:transparent!important;border-radius:0!important;box-shadow:none!important;outline:none!important}.ant-input-affix-wrapper-focused,.ant-input-affix-wrapper:focus,.ant-input-affix-wrapper:hover,.ant-input-focused,.ant-input-number-focused,.ant-input-number:hover,.ant-input-password:hover,.ant-input:focus,.ant-input:hover,.ant-picker-focused,.ant-picker:hover,.ant-select-focused .ant-select-selector,.ant-select:not(.ant-select-disabled):hover .ant-select-selector{border-color:var(--colorBrand)!important;background:var(--colorBgElevated)!important;box-shadow:none!important;outline:none!important}.ant-btn:focus-visible,.ant-input-affix-wrapper:focus-visible,.ant-input:focus-visible,.ant-picker:focus-visible,.ant-select-selector:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible{outline:none!important;box-shadow:none!important}.ant-input-group-wrapper .ant-input-wrapper,.ant-input-search .ant-input-group{display:flex;align-items:stretch}.ant-input-search .ant-input,.ant-input-search .ant-input-affix-wrapper{border-start-end-radius:0!important;border-end-end-radius:0!important}.ant-input-search .ant-input-group-addon .ant-btn{border-start-start-radius:0!important;border-end-start-radius:0!important;border-left:0!important}.ant-input-affix-wrapper{padding-inline-start:11px!important;padding-inline-end:11px!important}.ant-input-affix-wrapper .ant-input-prefix{margin-inline-end:8px!important;color:var(--colorTextTertiary)!important}.ant-input-affix-wrapper .ant-input-suffix{margin-inline-start:8px!important}.ant-input-affix-wrapper>input.ant-input{padding-inline-start:0!important}.ant-table-wrapper,.ant-table-wrapper .ant-spin-container,.ant-table-wrapper .ant-spin-nested-loading,.ant-table-wrapper .ant-table,.ant-table-wrapper .ant-table-body,.ant-table-wrapper .ant-table-container,.ant-table-wrapper .ant-table-content{background:transparent!important;border:0!important;box-shadow:none!important}.ant-table-wrapper .ant-table-cell:before,.ant-table-wrapper .ant-table-container:after,.ant-table-wrapper .ant-table-container:before{display:none!important}.ant-table-wrapper .ant-table-thead>tr>th{height:auto!important;padding:10px 12px!important;border:0!important;background:var(--colorBgSecondary)!important;color:var(--colorTextSecondary)!important;font-size:12px!important;font-weight:600!important;line-height:1.45!important;vertical-align:middle!important}.ant-table-wrapper .ant-table-tbody>tr>td{height:auto!important;min-height:0!important;padding:11px 12px!important;border:0!important;background:transparent!important;color:var(--colorText)!important;line-height:1.5!important;vertical-align:middle!important;overflow:visible!important;white-space:normal;word-break:break-word}.ant-table-wrapper .ant-table-tbody>tr.ant-table-row:hover>td,.ant-table-wrapper .ant-table-tbody>tr:hover>td{background:var(--colorBgHover)!important}.ant-table-wrapper .ant-table-tbody>tr.ant-table-row-selected>td{background:var(--colorBgSelected)!important}.ant-table-wrapper .ant-table-expanded-row>td,.ant-table-wrapper .ant-table-placeholder>td{background:transparent!important}.ant-table-wrapper .ant-table-cell .ant-btn,.ant-table-wrapper .ant-table-cell .ant-space,.ant-table-wrapper .ant-table-cell .ant-tag{vertical-align:middle}.ant-table-wrapper .ant-table-cell .ant-typography,.ant-table-wrapper .ant-table-cell div,.ant-table-wrapper .ant-table-cell p,.ant-table-wrapper .ant-table-cell span{max-height:none;line-height:inherit}.ant-table-wrapper .ant-table-cell-ellipsis{white-space:normal!important}.ant-table-wrapper .ant-table-cell-ellipsis .ant-table-cell-content{display:block;overflow:visible;text-overflow:clip;white-space:normal}.ant-alert-description,.ant-alert-message,.ant-breadcrumb-link,.ant-btn,.ant-dropdown-menu-title-content,.ant-menu-title-content,.ant-select-selection-item,.ant-tabs-tab-btn,.ant-tag{display:inline-flex;align-items:center;gap:6px;min-width:0}.ant-btn{justify-content:center;line-height:1.2!important}.ant-btn .anticon,.ant-btn svg,.ant-menu-item svg,.ant-menu-item-icon,.ant-tabs-tab .anticon,.ant-tabs-tab svg,.ant-tag .anticon,.ant-tag svg,.anticon,.sidebarItem svg,.topbarBtn svg{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;line-height:1;vertical-align:-.125em}.ant-space{align-items:center}.ant-alert+.ant-card,.ant-card+.ant-alert,.ant-card+.ant-card,.cardGlass+.cardGlass{margin-top:16px!important}.ant-card-head{margin-bottom:14px!important}.ant-card .ant-typography,.ant-card ol,.ant-card p,.ant-card ul{line-height:1.65}.ant-card .ant-typography:last-child,.ant-card ol:last-child,.ant-card p:last-child,.ant-card ul:last-child{margin-bottom:0!important}.ant-tabs>.ant-tabs-nav,.ant-tabs>div>.ant-tabs-nav{margin:0 0 18px!important;padding:0 2px!important}.ant-tabs .ant-tabs-tab{padding:10px 12px!important;margin:0 4px 0 0!important}.ant-tabs .ant-tabs-content-holder{padding-top:2px}.ant-tabs-card>.ant-tabs-nav .ant-tabs-tab{border-radius:var(--radiusSm) var(--radiusSm) 0 0!important}.ant-form-item{margin-bottom:18px!important}.ant-form-item-label>label{align-items:center;height:auto!important;color:var(--colorText)!important;font-weight:500}.ant-form-item-explain,.ant-form-item-extra{margin-top:6px;font-size:12px}.ant-collapse-header,.ant-descriptions-item,.ant-list-item{align-items:center!important}.ant-table-wrapper.modern-table,.ant-table-wrapper.modern-table *,.modern-table.ant-table-wrapper,.modern-table.ant-table-wrapper *{border-color:transparent!important}.modern-table .ant-table,.modern-table .ant-table-body,.modern-table .ant-table-container,.modern-table .ant-table-content,.modern-table .ant-table-header,.modern-table .ant-table-tbody,.modern-table .ant-table-thead,.modern-table table{border:0!important;box-shadow:none!important;outline:0!important}.modern-table .ant-table-expanded-row>td,.modern-table .ant-table-selection-column,.modern-table .ant-table-tbody>tr>td,.modern-table .ant-table-thead>tr>th{height:auto!important;min-height:0!important;border:0!important;border-inline-end:0!important;border-bottom:0!important;box-shadow:none!important;outline:0!important;line-height:1.55!important;vertical-align:middle!important}.modern-table .ant-table-tbody>tr>td{padding:10px 12px!important;white-space:normal!important;overflow:visible!important;text-overflow:clip!important}.modern-table .ant-table-thead>tr>th{padding:9px 12px!important;border-radius:0!important}.modern-table .ant-table-cell-ellipsis,.modern-table .truncate{overflow:visible!important;text-overflow:clip!important;white-space:normal!important;max-height:none!important}.modern-table .ant-table-row-expand-icon-cell,.modern-table .ant-table-selection-column{text-align:center!important;vertical-align:middle!important;white-space:nowrap!important}.modern-table .ant-table-cell .anticon,.modern-table .ant-table-cell svg,.modern-table .ant-table-row-expand-icon{display:inline-flex!important;align-items:center!important;justify-content:center!important;vertical-align:middle!important}.modern-table .ant-table-expanded-row-fixed,.modern-table .ant-table-expanded-row>td>div{border:0!important}.modern-table .ant-table-tbody>tr{height:auto!important;min-height:44px!important}.modern-table .ant-table-cell{height:auto!important;max-height:none!important;overflow:visible!important}.modern-table .ant-table-cell .ant-tag,.modern-table .ant-table-cell .ant-typography,.modern-table .ant-table-cell a,.modern-table .ant-table-cell button,.modern-table .ant-table-cell>*{max-height:none!important;overflow:visible!important;line-height:1.45!important}.modern-table .ant-table-body{overflow-y:auto!important;overflow-x:hidden!important}.ant-card,.cardGlass,[class*=Card],[class*=card]{box-shadow:none!important}.ant-card:hover,.cardGlass:hover,.group:hover,.hover\:border-\[var\(--borderColorStrong\)\]:hover,.hover\:border-\[var\(--colorBrand\)\]:hover{border-color:transparent!important;box-shadow:none!important}.active,.ant-card.ant-card-bordered:hover,.ant-list-item-selected,.ant-list-item.active,.ant-menu-item-selected,.ant-menu-submenu-selected>.ant-menu-submenu-title,.ant-segmented-item-selected,.ant-select-item-option-selected,.ant-table-row-selected>td,.ant-tabs-tab-active,.ant-tabs-tab.ant-tabs-tab-active,.ant-tree-node-selected,.selected,[aria-selected=true],[data-selected=true]{border-color:transparent!important;box-shadow:none!important;outline:0!important}