@customize-agent/server 4.59.1 → 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.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +15 -15
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/chunks/1928.js +1 -1
- package/.next/server/chunks/{5547.js → 4435.js} +8 -8
- package/.next/server/chunks/6321.js +1 -1
- package/.next/server/chunks/8204.js +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/api/assets/generated/preview.js +1 -1
- package/.next/server/pages/api/assets/generated/preview.js.nft.json +1 -1
- package/.next/server/pages/api/assets/generated.js +1 -1
- package/.next/server/pages/api/assets/generated.js.nft.json +1 -1
- package/.next/server/pages/api/documents/canvas/[id].js +1 -1
- package/.next/server/pages/api/documents/canvas/[id].js.nft.json +1 -1
- package/.next/server/pages/api/documents/export.js +1 -1
- package/.next/server/pages/api/documents/export.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generate/preview.js +1 -1
- package/.next/server/pages/api/documents/generate/preview.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generate.js +1 -1
- package/.next/server/pages/api/documents/generate.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/events.js +1 -1
- package/.next/server/pages/api/documents/generated/[id]/events.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/figure/[name].js +1 -1
- package/.next/server/pages/api/documents/generated/[id]/figure/[name].js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/nodes/[nodeId].js +1 -1
- package/.next/server/pages/api/documents/generated/[id]/nodes/[nodeId].js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/nodes.js +1 -1
- package/.next/server/pages/api/documents/generated/[id]/nodes.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/pause.js +1 -1
- package/.next/server/pages/api/documents/generated/[id]/pause.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/preview.js +1 -1
- package/.next/server/pages/api/documents/generated/[id]/preview.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/confirm.js +1 -1
- package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/confirm.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/rollback.js +1 -1
- package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/rollback.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/repair.js +1 -1
- package/.next/server/pages/api/documents/generated/[id]/repair.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/resume-generate.js +1 -1
- package/.next/server/pages/api/documents/generated/[id]/resume-generate.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id].js +1 -1
- package/.next/server/pages/api/documents/generated/[id].js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated.js +1 -1
- package/.next/server/pages/api/documents/generated.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/reindex.js +1 -1
- package/.next/server/pages/api/kb/files/reindex.js.nft.json +1 -1
- package/.next/server/pages/api/kb/intelligence.js +1 -1
- package/.next/server/pages/api/kb/intelligence.js.nft.json +1 -1
- package/.next/server/pages/api/kb/reindex.js +1 -1
- package/.next/server/pages/api/kb/reindex.js.nft.json +1 -1
- package/.next/server/pages/api/kb/upload/complete.js +1 -1
- package/.next/server/pages/api/kb/upload/complete.js.nft.json +1 -1
- package/.next/server/pages/api/kb/upload.js +1 -1
- package/.next/server/pages/api/kb/upload.js.nft.json +1 -1
- package/.next/server/pages/api/skills/[id].js +1 -1
- package/.next/server/pages/api/skills/[id].js.nft.json +1 -1
- package/.next/server/pages/api/skills/validate.js +1 -1
- package/.next/server/pages/api/skills/validate.js.nft.json +1 -1
- package/.next/server/pages/api/skills.js +1 -1
- package/.next/server/pages/api/skills.js.nft.json +1 -1
- package/.next/server/pages/api/system/data-health.js +2 -0
- package/.next/server/pages/api/system/data-health.js.nft.json +1 -0
- package/.next/server/pages/canvas/[id].html +1 -1
- package/.next/server/pages/canvas.html +1 -1
- package/.next/server/pages/documents.html +1 -1
- package/.next/server/pages/guide.html +1 -1
- package/.next/server/pages/index.html +1 -1
- package/.next/server/pages/knowledge/file-detail.html +1 -1
- package/.next/server/pages/knowledge/files.html +1 -1
- package/.next/server/pages/knowledge/manage.html +1 -1
- package/.next/server/pages/knowledge.html +1 -1
- package/.next/server/pages/models.html +1 -1
- package/.next/server/pages/overview.html +1 -1
- package/.next/server/pages/prompt.html +1 -1
- package/.next/server/pages/settings.html +1 -1
- package/.next/server/pages/skills.html +1 -1
- package/.next/server/pages/system/logs.html +1 -1
- package/.next/server/pages-manifest.json +33 -32
- package/.next/static/{4xQDkixSretJDM503EzIq → 2MjosIoMmZUcFnY_P02ZD}/_buildManifest.js +1 -1
- package/.next/static/chunks/{289-0cccd8131332e041.js → 289-136ebb30e0f6723a.js} +3 -3
- package/.next/static/chunks/{426-22c4cedb04b0d45d.js → 426-90638907336adcb8.js} +1 -1
- package/.next/static/chunks/530-df2ce692cf0fa512.js +1 -0
- package/.next/static/chunks/795-81a3e3973fc43791.js +1 -0
- package/.next/static/chunks/pages/{_app-ebb535779b63fd5d.js → _app-c560816f0a8a0815.js} +1 -1
- package/.next/static/chunks/pages/knowledge-ca8ad5501faed486.js +1 -0
- package/.next/static/chunks/pages/prompt-dd9a9f9105216e2b.js +1 -0
- package/.next/static/chunks/pages/system/logs-9deb1217739490af.js +1 -0
- package/package.json +1 -1
- package/.next/static/chunks/530-6f3f5848c6f702ae.js +0 -1
- package/.next/static/chunks/795-9e0cb0bb11e8c89f.js +0 -1
- package/.next/static/chunks/pages/knowledge-09dde24cdce1b195.js +0 -1
- package/.next/static/chunks/pages/prompt-6a224562d194cb45.js +0 -1
- package/.next/static/chunks/pages/system/logs-70790bee46e5a08d.js +0 -1
- /package/.next/static/{4xQDkixSretJDM503EzIq → 2MjosIoMmZUcFnY_P02ZD}/_ssgManifest.js +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";exports.id=6321,exports.ids=[6321],exports.modules={1168:(a,b,c)=>{c.d(b,{EL:()=>F,zT:()=>E,II:()=>D,bJ:()=>K,Jr:()=>B,O0:()=>T,uj:()=>s,GC:()=>r,qj:()=>N,x8:()=>C,Kg:()=>I,a3:()=>R,Qs:()=>z,PI:()=>L,dB:()=>U,Jy:()=>Q,uv:()=>p,vp:()=>u,m_:()=>o,kH:()=>y,z9:()=>w,Aq:()=>P,RV:()=>M,Kq:()=>G});var d=c(82015),e=c(79270);let f=["failed","paused","repairing","blocked","running","pending","completed"],g=["chars","costUsd"];function h(a,b){return a.seq!==b.seq?a.seq-b.seq:a.id===b.id?0:a.id<b.id?-1:1}function i(a){let b=new Map;for(let c of a){if(void 0===c.parentId)continue;let a=b.get(c.parentId);a?a.push(c):b.set(c.parentId,[c])}for(let a of b.values())a.sort(h);return b}function j(a){let b=new Map(a.map(a=>[a.id,a])),c=new Map;for(let d of a){let a=0,e=d,f=new Set([d.id]);for(;e?.parentId!==void 0;){let c=b.get(e.parentId);if(!c||f.has(c.id))break;f.add(c.id),a+=1,e=c}c.set(d.id,a)}return c}let k=new Set(["prepare","understand","plan","blueprint","write","close","deliver","chapter","block","turn","round","round.observe","round.decide","round.fix","repair.request","repair.localize","repair.impact","repair.transaction","repair.recheck","supervisor","skill.load"]),l=new Set(["failed","paused","repairing","blocked","running","pending","completed"]),m={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 n(a,b,c,d){let e=a[b];if(!e)return`未知${c}(${b||"空"})`;if(e.key&&d){let a=d(e.key);if(a&&a!==e.key)return a}return e.text}function o(a,b){return n(m,a,"状态",b)}function p(a){return m[a]?.color??"default"}let q={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 r(a,b){return n(q,a,"记录状态",b)}function s(a){return q[a]?.color??"default"}let t=["failed","paused","repairing","blocked","running","pending","completed"];function u(a){let b=t.indexOf(a);return b>=0?b:t.length}let v={prepare:"生成准备",understand:"资料理解",plan:"规划",blueprint:"蓝图",write:"正文撰写",close:"收口",deliver:"交付",chapter:"章节",block:"块",turn:"轮次",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复检","skill.load":"技能命中",supervisor:"调度决策"};function w(a){return a?v[a]??a:"未知节点"}let x={role_binding:(0,d.createElement)(e.LinkOutlined),knowledge_retrieval:(0,d.createElement)(e.SearchOutlined),file_understanding:(0,d.createElement)(e.FileSearchOutlined),fact_extraction:(0,d.createElement)(e.TableOutlined),chapter_generation:(0,d.createElement)(e.EditOutlined),llm_review:(0,d.createElement)(e.AuditOutlined),validation:(0,d.createElement)(e.SafetyCertificateOutlined),reference:(0,d.createElement)(e.BookOutlined),prepare:(0,d.createElement)(e.ToolOutlined),understand:(0,d.createElement)(e.DatabaseOutlined),plan:(0,d.createElement)(e.ApartmentOutlined),blueprint:(0,d.createElement)(e.DeploymentUnitOutlined),write:(0,d.createElement)(e.FormOutlined),chapter:(0,d.createElement)(e.FileTextOutlined),block:(0,d.createElement)(e.BlockOutlined),turn:(0,d.createElement)(e.SyncOutlined),round:(0,d.createElement)(e.RetweetOutlined),close:(0,d.createElement)(e.CompressOutlined),deliver:(0,d.createElement)(e.ExportOutlined),repair:(0,d.createElement)(e.BugOutlined),skill:(0,d.createElement)(e.EyeOutlined),supervisor:(0,d.createElement)(e.ClusterOutlined),default:(0,d.createElement)(e.ToolOutlined)};function y(a){return x[a.split(".")[0]||a]??x.default}function z(a){return x[a]??x.default}function A(a){var b;let c=a.issues;return{id:a.id,...void 0!==a.parentId?{parentId:a.parentId}:{},type:a.type||"block",title:a.title??"",seq:"number"==typeof a.seq&&Number.isFinite(a.seq)?a.seq:0,status:"string"==typeof(b=a.status)&&l.has(b)?a.status:"failed",startedAt:"number"==typeof a.startedAt&&Number.isFinite(a.startedAt)&&a.startedAt>0?a.startedAt:0,...void 0!==a.completedAt?{completedAt:a.completedAt}:{},...a.progress?{progress:a.progress}:{},...a.metrics?{metrics:a.metrics}:{},...Array.isArray(c)&&c.length>0?{issues:c}:{},...void 0!==a.payloadRef?{payloadRef:a.payloadRef}:{}}}function B(a,b){let c=new Map(a.map(a=>[a.id,a]));return(function(a,b){let c=function(a){let b=i(a),c=j(a),d=[...a].sort((a,b)=>(c.get(b.id)??0)-(c.get(a.id)??0)||h(a,b)),e=new Map(a.map(a=>[a.id,a]));for(let a of d){let c=b.get(a.id);if(!c||0===c.length)continue;let d=c.map(a=>e.get(a.id)??a);e.set(a.id,function(a,b){if(0===b.length)return{...a};let c=[...b].sort(h),d={...a.metrics??{}};for(let a of g){let b=function(a,b){let c=0,d=!1;for(let e of a){let a=e.metrics?.[b];"number"==typeof a&&Number.isFinite(a)&&(c+=a,d=!0)}return d?c:void 0}(c,a);void 0===b?delete d[a]:d[a]=b}let e=a.progress?.label,i={current:c.filter(a=>"completed"===a.status).length,total:c.length,...void 0!==e?{label:e}:{}},j=function(a){let b=new Set,c=[];for(let d of a){let a=d.provenance?.fingerprint;if("string"==typeof a&&a.length>0){if(b.has(a))continue;b.add(a)}c.push(d)}return c}(c.flatMap(a=>a.issues??[])),k=function(a){let b,c=1/0;for(let d of a){let a=function(a){let b=f.indexOf(a);return b>=0?b:0}(d);a<c&&(c=a,b=d)}return b}(c.map(a=>a.status))??a.status;return{...a,status:k,progress:i,...Object.keys(d).length>0?{metrics:d}:{},...j.length>0?{issues:j}:{}}}(a,d))}return[...a].sort(h).map(a=>e.get(a.id)??a)}(a),d=i(c),e=new Set(c.map(a=>a.id)),k=1/0,l=(a,b)=>{let c=b+1<k?(d.get(a.id)??[]).filter(b=>b.id!==a.id).map(a=>l(a,b+1)):[];return{...a,children:c}},m=c.filter(a=>void 0===a.parentId||!e.has(a.parentId)).sort(h).map(a=>l(a,0)),n=new Set,o=a=>{for(let b of a)n.add(b.id),o(b.children)};for(let a of(o(m),c))n.has(a.id)||m.push(l(a,0));return m})(function(a,b){if(void 0===b)return[...a];let c=j(a),d=Math.max(0,Math.floor(b));return a.filter(a=>(c.get(a.id)??0)<d)}(a.map(A),b)).map(a=>(function a(b,c){let d=c.get(b.id),e=d?.type??String(b.type),f=b.issues;return{id:b.id,...void 0!==b.parentId?{parentId:b.parentId}:{},type:e,unknownType:!("string"==typeof e&&k.has(e)),title:b.title||w(e),seq:b.seq,status:b.status,..."number"==typeof b.startedAt&&b.startedAt>0?{startedAt:b.startedAt}:{},...void 0!==b.completedAt?{completedAt:b.completedAt}:{},...b.progress?{progress:b.progress}:{},metrics:b.metrics??{},issues:Array.isArray(f)?f:[],...void 0!==b.payloadRef?{payloadRef:b.payloadRef}:{},children:b.children.map(b=>a(b,c))}})(a,c))}function C(a){let b=[],c=a=>{for(let d of a)b.push(d),c(d.children)};return c(a),b.sort(h)}function D(a,b){let c=[],d=(a,e)=>{for(let f of a){if(f.id===b)return c.push(...e),!0;if(d(f.children,[...e,f.id]))return!0}return!1};return d(a,[]),c}let E=236,F=76;function G(a,b){if(!b)return a;let c=new Map(a),d=c.get(b.id)??{dx:0,dy:0};return c.set(b.id,{dx:d.dx+b.dx,dy:d.dy+b.dy}),c}let H=new Set(["running","repairing"]);function I(a){let b=new Set(a.nodes.filter(a=>H.has(a.node.status)).map(a=>a.node.id));if(0===b.size)return J;let c=new Set;for(let d of a.edges)b.has(d.fromId)&&c.add(d.id);return c}let J=new Set;function K(a,b){if(0===b.size)return a;let c=a.nodes.map(a=>{let c=b.get(a.node.id);return c?{...a,x:a.x+c.dx,y:a.y+c.dy}:a}),d=a.edges.map(a=>{let c=b.get(a.fromId),d=b.get(a.toId);return c||d?{...a,x1:a.x1+(c?.dx??0),y1:a.y1+(c?.dy??0),x2:a.x2+(d?.dx??0),y2:a.y2+(d?.dy??0)}:a});return{...a,nodes:c,edges:d}}function L(a){let b=[],c=[],d=0,e=(a,f)=>{let g,h=a.children,i=40+f*(E+72),j=h.map(a=>({id:a.id,...e(a,f+1)}));for(let e of(0===j.length?(g=40+d*(F+22),d+=1):g=(j[0].y+j[j.length-1].y)/2,b.push({node:a,x:i,y:g,depth:f}),j))c.push({id:`${a.id}->${e.id}`,fromId:a.id,toId:e.id,x1:i+E/2,y1:g+F,x2:e.x+E/2,y2:e.y});return{x:i,y:g}};for(let b of a)e(b,0),d+=1;let f=b.reduce((a,b)=>Math.max(a,b.x+E),0),g=b.reduce((a,b)=>Math.max(a,b.y+F),0);return{nodes:b,edges:c,width:f+40,height:g+40}}function M(a,b){let c=[`影响面:${b.kind}`,`波及 ${b.affectedNodeIds.length} 个节点`,...b.escalate?["超出阈值需人工确认"]:[],...b.rollbackable?[]:["不可回滚:按 11.1 需回滚或重新校准,不得当普通改动提交"]];return`请修复节点「${a}」(${c.join(",")})`}function N(a,b){let c=b>0?b:1;return{dx:a.dx/c,dy:a.dy/c}}let O=(a,b)=>a.left<b.right&&a.right>b.left&&a.top<b.bottom&&a.bottom>b.top;function P(a){let{node:b,view:c,box:d,panelWidth:e,panelHeight:f,gap:g=12,margin:h=8,obstacles:i=[]}=a,j=(a,b,c)=>Math.min(Math.max(a,b),Math.max(b,c)),k=Math.min(e,Math.max(0,d.width-2*h)),l=b.x*c.k+c.x,m=b.y*c.k+c.y,n=m+F*c.k,o={left:l,top:m,right:l+E*c.k,bottom:n},p=d.width-k-h,q=(a,b)=>{let c=i.filter(c=>c.top>=b&&c.left<a+k&&c.right>a).map(a=>a.top-g);return Math.max(0,Math.min(d.height-h,...c,d.height-h)-b)},r=a=>{let b=d.height-a-h,e=(c,d)=>{if(c<h||d<h||c>p||d>b)return!1;let e={left:c,top:d,right:c+k,bottom:d+a};return!i.some(a=>O(e,a))},f=l+(E+g)*c.k,r=l-k-g*c.k,s=n+g,t=m-a-g;for(let[a,b]of[[f,s],[f,t],[r,s],[r,t]])if(e(a,b))return{left:a,top:b,maxHeight:Math.max(0,Math.min(q(a,b),d.height-b-h))};let u=[f,r,h,p],v=[s,t,h,b,...i.flatMap(b=>[b.bottom+g,b.top-a-g])],w=null,x=1/0;for(let c of u)for(let d of v){let f=j(c,h,p),g=j(d,h,Math.max(h,b));if(!e(f,g))continue;let i={left:f,top:g,right:f+k,bottom:g+a},l=Math.max(Math.max(0,o.left-i.right,i.left-o.right),Math.max(0,o.top-i.bottom,i.top-o.bottom))+1e3*!!O(i,o);l<x&&(x=l,w={left:f,top:g})}return w?{...w,maxHeight:q(w.left,w.top)}:null};if(a.pin){let b=j(a.pin.left,h,p),c=j(a.pin.top,h,Math.max(h,d.height-2*h));return{left:b,top:c,maxHeight:Math.max(0,Math.min(q(b,c),d.height-c-h))}}let s=Math.min(f,Math.max(0,d.height-2*h)),t=r(s);if(t)return t;let u=function(a,b,c=8){let d=a.height-c,e=b.map(a=>({start:Math.max(c,a.top),end:Math.min(d,a.bottom)})).filter(a=>a.end>a.start).sort((a,b)=>a.start-b.start),f=0,g=c;for(let a of e)a.start>g&&(f=Math.max(f,a.start-g)),g=Math.max(g,a.end);return Math.max(f,d-g)}(d,i,h)-g;if(u>0&&u<s){let a=r(Math.max(120,u));if(a)return a}return t??r(Math.max(120,u))??{left:j(l+(E+g)*c.k,h,p),top:h,maxHeight:Math.max(0,d.height-2*h)}}function Q(a){if("number"!=typeof a.startedAt||a.metrics?.instantEvent===!0)return;let b=("number"==typeof a.completedAt?a.completedAt:Date.now())-a.startedAt;return b>=0?b:void 0}function R(a){if(void 0===a)return"—";let b=Math.max(0,Math.round(a/1e3));if(b<60)return`${b} 秒`;let c=Math.floor(b/60);return c<60?`${c} 分 ${b%60} 秒`:`${Math.floor(c/60)} 小时 ${c%60} 分`}let S=[{key:"note",format:a=>String(a)},{key:"chars",format:a=>`${Number(a).toLocaleString()} 字`},{key:"targetWords",format:a=>`目标 ${Number(a).toLocaleString()} 字`},{key:"turn",format:a=>`第 ${a} 轮`},{key:"residual",format:a=>`残余 ${a}`},{key:"toolCalls",format:a=>`工具 ${a} 次`},{key:"attempt",format:a=>`第 ${a} 次尝试`},{key:"failureKinds",format:a=>String(a)},{key:"chapters",format:a=>`${a} 章`},{key:"facts",format:a=>`${a} 条事实`}];function T(a,b=2){let c=[];for(let{key:d,format:e}of S){let f=a[d];if(void 0===f||""===f||!1===f)continue;let g=e(f);if(g.trim()&&(c.push(g),c.length>=b))break}return c}function U(a,b=6){return Object.entries(a).slice(0,b).map(([a,b])=>({key:a,text:"number"==typeof b?`${a}: ${Number.isInteger(b)?b:b.toFixed(2)}`:`${a}: ${String(b)}`}))}},14352:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{_:()=>n});var e=c(8732),f=c(82015),g=c(60056),h=c(79270),i=c(94487),j=c(22147),k=c(85104),l=c(89668),m=a([i]);function n({currentDocumentId:a,projectRoot:b,onSelect:c,onCurrentDeleted:d}){let m=(0,i.Vr)(),{message:n}=g.qw.useApp(),p=(0,f.useRef)(null),[q,r]=(0,f.useState)([]),[s,t]=(0,f.useState)(!1),[u,v]=(0,f.useState)(!1),[w,x]=(0,f.useState)(1),[y,z]=(0,f.useState)(!1),[A,B]=(0,f.useState)([]),[C,D]=(0,f.useState)(!1),[E,F]=(0,f.useState)(null),[G,H]=(0,f.useState)(!0),I=(0,f.useRef)(null),J=(0,f.useCallback)(async()=>{t(!0);try{let a=await (0,j.cQ)(b||void 0);r(a.documents||[])}catch{r([])}finally{t(!1)}},[b]);q.length;let K=(0,f.useMemo)(()=>q.slice((w-1)*8,8*w),[q,w]),L=(0,f.useCallback)(a=>!(0,k.Ce)(a.status),[]),M=K.filter(L).map(a=>a.id),N=()=>{if(!u){let a=p.current?.parentElement?.getBoundingClientRect(),b=p.current?.getBoundingClientRect();H(!a||!b||b.top-a.top>252)}v(a=>!a)},O=async c=>{try{await (0,j.QG)(c.id,c.projectRoot||b||void 0),n.success(m("common.success")),B(a=>a.filter(a=>a!==c.id)),c.id===a&&d(),await J()}catch{n.error(m("common.error"))}},P=async()=>{let c=q.filter(a=>A.includes(a.id)&&L(a));if(0!==c.length){D(!0);try{await Promise.all(c.map(a=>(0,j.QG)(a.id,a.projectRoot||b||void 0))),n.success(m("records.deletedCount").replace("{count}",String(c.length))),a&&c.some(b=>b.id===a)&&d(),B([]),z(!1),await J()}catch{n.error(m("common.error"))}finally{D(!1)}}},Q=E?{left:E.left,top:E.top}:{right:24,bottom:96};return(0,e.jsxs)("div",{className:"canvasRecordsBall",ref:p,style:{position:"absolute",zIndex:3,...Q},children:[u&&(0,e.jsxs)("div",{className:"canvasRecordsPanel",style:{position:"absolute",right:0,width:320,maxHeight:420,display:"flex",flexDirection:"column",...G?{bottom:52}:{top:52}},children:[(0,e.jsxs)("div",{className:"flex items-center justify-between gap-2 px-3 py-2 border-b border-[var(--canvasSectionBorder)] shrink-0",children:[(0,e.jsxs)("span",{className:"text-[13px] font-semibold text-[var(--colorText)]",children:[m("records.title"),(0,e.jsx)("span",{className:"ml-2 font-normal text-xs text-[var(--colorTextTertiary)]",children:q.length})]}),(0,e.jsx)("button",{type:"button",className:"canvasRecordsLink",onClick:()=>{z(a=>!a),B([])},children:y?m("common.cancel"):m("records.batch")})]}),(0,e.jsx)("div",{className:"flex-1 min-h-0 overflow-y-auto",children:s&&0===q.length?(0,e.jsx)("div",{className:"py-10 text-center",children:(0,e.jsx)(g.tK,{size:"small"})}):0===q.length?(0,e.jsx)("div",{className:"py-8",children:(0,e.jsx)(g.Sv,{image:g.Sv.PRESENTED_IMAGE_SIMPLE,description:(0,e.jsx)("span",{className:"text-xs text-[var(--colorTextTertiary)]",children:m("records.empty")})})}):K.map(b=>{let d=b.id===a,f=L(b);return(0,e.jsxs)("div",{className:`group flex items-start gap-2 px-3 py-2 border-b border-[var(--canvasSectionBorder)] last:border-b-0 transition-colors ${d?"bg-[var(--colorBgSelected)]":"hover:bg-[var(--colorBgHover)]"}`,children:[y&&(0,e.jsx)("input",{type:"checkbox",className:"mt-1 shrink-0",disabled:!f,checked:A.includes(b.id),onChange:a=>B(c=>a.target.checked?[...c,b.id]:c.filter(a=>a!==b.id))}),(0,e.jsxs)("button",{type:"button",className:"min-w-0 flex-1 text-left bg-transparent border-0 p-0 cursor-pointer",title:b.title,onClick:()=>{c(b),v(!1)},children:[(0,e.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,e.jsx)("span",{className:`w-1.5 h-1.5 shrink-0 rounded-full ${o[b.status]??"bg-[var(--colorTextTertiary)]"}`}),(0,e.jsx)("span",{className:`truncate text-[13px] ${d?"font-semibold text-[var(--colorText)]":"text-[var(--colorText)]"}`,children:b.title}),d&&(0,e.jsx)("span",{className:"shrink-0 text-[10px] text-[var(--colorTextTertiary)]",children:m("records.current")})]}),(0,e.jsxs)("div",{className:"mt-0.5 pl-3 text-[11px] text-[var(--colorTextTertiary)]",children:[(0,e.jsx)(h.HistoryOutlined,{className:"mr-1"}),(0,l.fw)(b.updatedAt,"zh-CN")]})]}),!y&&f&&(0,e.jsx)(g.iS,{title:m("records.confirmDelete"),description:m("records.deleteHint"),onConfirm:()=>{O(b)},okText:m("common.confirm"),cancelText:m("common.cancel"),children:(0,e.jsx)("button",{type:"button",className:"canvasRecordsDelete",title:m("common.delete"),children:(0,e.jsx)(h.DeleteOutlined,{})})}),!y&&!f&&(0,e.jsx)(g.m_,{title:m("records.inFlightHint"),children:(0,e.jsx)("span",{className:"canvasRecordsDelete isDisabled",children:(0,e.jsx)(h.DeleteOutlined,{})})})]},b.id)})}),q.length>8&&(0,e.jsx)("div",{className:"flex justify-center px-3 py-2 border-t border-[var(--canvasSectionBorder)] shrink-0",children:(0,e.jsx)(g.dK,{size:"small",simple:!0,current:w,total:q.length,pageSize:8,onChange:x})}),y&&(0,e.jsxs)("div",{className:"flex items-center justify-between gap-2 px-3 py-2 border-t border-[var(--canvasSectionBorder)] shrink-0",children:[(0,e.jsx)("span",{className:"text-xs text-[var(--colorTextSecondary)]",children:m("records.checkedCount").replace("{count}",String(A.length))}),(0,e.jsxs)("div",{className:"flex items-center gap-2",children:[(0,e.jsx)("button",{type:"button",className:"canvasRecordsLink",onClick:()=>B(A.length===M.length?[]:M),children:A.length===M.length&&M.length>0?m("records.clearSelect"):m("records.selectPage")}),(0,e.jsx)(g.iS,{title:m("records.confirmDeleteSelected").replace("{count}",String(A.length)),description:m("records.deleteHint"),disabled:0===A.length,onConfirm:()=>{P()},okText:m("common.confirm"),cancelText:m("common.cancel"),children:(0,e.jsxs)("button",{type:"button",className:"canvasRecordsDanger",disabled:0===A.length||C,children:[(0,e.jsx)(h.DeleteOutlined,{className:"mr-1"}),m("records.deleteSelected")]})})]})]})]}),(0,e.jsxs)("div",{className:"canvasRecordsBallBtn",role:"button",tabIndex:0,"aria-label":`${m("records.title")}(${q.length})`,style:{width:44,height:44},onPointerDown:a=>{let b=p.current?.parentElement?.getBoundingClientRect(),c=p.current?.getBoundingClientRect();if(b&&c){I.current={pointerId:a.pointerId,startX:a.clientX,startY:a.clientY,originLeft:c.left-b.left,originTop:c.top-b.top,moved:!1};try{a.currentTarget.setPointerCapture(a.pointerId)}catch{}}},onPointerMove:a=>{let b=I.current,c=p.current?.parentElement?.getBoundingClientRect();if(!b||b.pointerId!==a.pointerId||!c)return;let d=a.clientX-b.startX,e=a.clientY-b.startY;!b.moved&&5>Math.hypot(d,e)||(b.moved=!0,F({left:Math.min(Math.max(8,b.originLeft+d),Math.max(8,c.width-44-8)),top:Math.min(Math.max(8,b.originTop+e),Math.max(8,c.height-44-8))}))},onPointerUp:a=>{let b=I.current;I.current=null;try{a.currentTarget.releasePointerCapture(a.pointerId)}catch{}if(b){if(b.moved)return void F(a=>{if(a)try{window.localStorage.setItem("canvas:recordsBallPos",JSON.stringify(a))}catch{}return a});N()}},onKeyDown:a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),N())},children:[(0,e.jsx)(h.HistoryOutlined,{}),(0,e.jsx)("span",{className:`canvasRecordsBallBadge${0===q.length?" isZero":""}`,children:q.length>99?"99+":q.length})]})]})}i=(m.then?(await m)():m)[0];let o={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)]"};d()}catch(a){d(a)}})},15642:(a,b,c)=>{c.d(b,{_:()=>i});var d=c(8732),e=c(82015),f=c(60056),g=c(79270);let{Text:h}=f.o5;function i(a){let{value:b,onChange:c,onSend:i,generating:j,submitting:k,disabled:l,disabledReason:m,selectedNode:n,onMentionSelected:o,resumable:p,onContinue:q,quickActions:r,requireGenerationSetup:s=!1,promptOptions:t=[],projectOptions:u=[],selectedPrompts:v=[],selectedProject:w=null,onSelectPrompts:x,onSelectProject:y,onPreviewStructure:z}=a,[A,B]=(0,e.useState)(!1),C=s?[0===v.length?"提示词":"",!w?"项目":""].filter(Boolean):[],D=C.length>0,E=l?m||"当前不可发起生成":D?`请先用左侧「+」选择${C.join(" 与 ")}——未选齐时不能发起生成`:j?"有任务正在运行:发送将加入生成队列(前面任务完成后自动开始)":"发送后将创建生成任务,画布随节点日志实时增长";return(0,d.jsxs)("div",{className:"canvasInputBar",children:[(0,d.jsxs)(f.$x,{wrap:!0,size:6,style:{marginBottom:6},children:[n&&(0,d.jsx)(f.m_,{title:`把「@${n.title}」插入输入框(可见文本,可自行修改)`,children:(0,d.jsx)(f.vw,{color:"blue",style:{cursor:"pointer"},onClick:o,children:`@ ${n.title}`})}),!n&&(0,d.jsx)(h,{type:"secondary",style:{fontSize:12},children:"点选一个节点后可 @ 提及它"}),p&&!j&&(0,d.jsx)(f.$n,{size:"small",type:"link",onClick:q,children:"继续生成"}),r?.map(a=>(0,d.jsx)(f.$n,{size:"small",type:"link",onClick:a.onClick,children:a.label},a.key))]}),(0,d.jsxs)(f.$x,{wrap:!0,size:10,style:{marginBottom:8},children:[(0,d.jsx)(f.AM,{trigger:"click",placement:"topLeft",open:A,onOpenChange:B,content:(0,d.jsxs)("div",{style:{width:360,display:"flex",flexDirection:"column",gap:8},children:[s&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{children:[(0,d.jsx)(h,{strong:!0,style:{fontSize:13},children:"提示词"}),(0,d.jsx)(f.l6,{mode:"multiple",style:{width:"100%",marginTop:4},value:v.map(a=>a.value),placeholder:0===t.length?"该项目暂无提示词":"选择提示词(至少一份;可多选)",options:t,onChange:a=>x?.(a)})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)(h,{strong:!0,style:{fontSize:13},children:"项目"}),(0,d.jsx)(f.l6,{style:{width:"100%",marginTop:4},value:w?.value,showSearch:!0,optionFilterProp:"label",placeholder:0===u.length?"本项目知识库里还没有资料:先到知识库页上传并入库":"选择项目(= 知识库里这个项目的资料,决定本次用哪份材料)",options:u,onChange:a=>y?.(a)})]}),(0,d.jsx)(h,{type:"secondary",style:{fontSize:12},children:"两者选齐后才能点「生成」。「项目」选的是入库到本地知识库的那份项目资料(清单/图纸/招标文件都在其中)——本次生成只用它,不会把库里别的项目材料混进来。提示词的正文按名字进入对应链路(总控/写作 → 写作链,清单/图纸/提取 → 事实抽取链,排版 → 格式链);章节大纲取自其中带 <OUTLINE> 的那一份,且只能有一份声明大纲。"})]}),!s&&(0,d.jsx)(h,{type:"secondary",style:{fontSize:12},children:"提示词与项目取自这条记录本身(章节结构由记录里那份提示词的大纲派生),不需要在这里再选。"}),(0,d.jsx)("div",{children:(0,d.jsx)(f.$n,{size:"small",block:!0,disabled:D,onClick:()=>{B(!1),z?.()},children:"结构预览(章清单与小节)"})})]}),children:(0,d.jsx)(f.$n,{size:"small",icon:(0,d.jsx)(g.PlusOutlined,{}),type:D?"primary":"default",children:"提示词 / 项目"})}),v.map(a=>(0,d.jsx)(f.vw,{color:"blue",closable:!0,onClose:b=>{b.preventDefault(),x?.(v.filter(b=>b.value!==a.value).map(a=>a.value))},children:`提示词:${a.label}`},a.value)),w&&(0,d.jsx)(f.vw,{color:"geekblue",closable:!0,onClose:a=>{a.preventDefault(),y?.("")},children:`项目:${w.label}`})]}),(0,d.jsxs)(f.$x.Compact,{style:{width:"100%"},children:[(0,d.jsx)(f.pd.TextArea,{value:b,onChange:a=>c(a.target.value),onPressEnter:a=>{!a.shiftKey&&(a.preventDefault(),l||k||i())},autoSize:{minRows:1,maxRows:5},placeholder:"描述你的需求;可用上面的 @ 提及把节点带进正文(Enter 发送,Shift+Enter 换行)",disabled:l}),(0,d.jsx)(f.m_,{title:E,children:(0,d.jsx)(f.$n,{type:"primary",icon:(0,d.jsx)(g.SendOutlined,{}),loading:k,disabled:l||D||!b.trim(),onClick:i,children:j?"排队提交":"生成"})})]})]})}},16258:(a,b,c)=>{c.d(b,{p:()=>d});function d(a,b){let c=`/canvas/${encodeURIComponent(a)}`;return b?`${c}?projectRoot=${encodeURIComponent(b)}`:c}},62025:(a,b,c)=>{c.d(b,{B:()=>g});var d=c(8732),e=c(60056);let{Paragraph:f}=e.o5;function g(a){let{open:b,title:c,chapters:g,outlineSource:h,materialScope:i,onClose:j}=a,k=g.length>0?`结构预览:${c}(${g.length} 章${h?`,大纲来源:${h}`:""})`:`结构预览:${c}`;return(0,d.jsxs)(e.aF,{open:b,title:k,centered:!0,onCancel:j,width:640,styles:{container:{maxHeight:"calc(100vh - 48px)",display:"flex",flexDirection:"column"},body:{overflowY:"auto",flex:1,minHeight:0}},footer:(0,d.jsx)(e.$n,{type:"primary",onClick:j,children:"知道了"}),children:[(0,d.jsx)(f,{type:"secondary",style:{fontSize:12,marginBottom:8},children:"章清单与小节由提示词的 <OUTLINE> 大纲 + 技能库(按章域 \xd7 工程类型)派生;这份预览与点「生成」时用的是同一个派生函数、同一份输入。 要看提示词会被怎样解读(必含表格 / 禁止项 / 字数下限),去提示词页的规则预览。"}),i&&(0,d.jsx)(e.Fc,{type:"info",showIcon:!0,style:{marginBottom:8},message:`本次项目资料:${i.root||"(未指定)"}(${i.fileCount} 份文件)`,description:"资料范围已锁定在所选项目资料内:库里其它项目的材料不会进入本篇。"}),0===g.length&&(0,d.jsx)(e.Fc,{type:"info",showIcon:!0,message:"本次没有派生出章清单",description:"派生的硬约束是提示词(或输入框要求)里要有 ≥2 章的显式大纲;缺大纲时服务端会直接拒绝这次生成,并在提示里说清缺什么。"}),(0,d.jsx)(e.B8,{size:"small",dataSource:g,renderItem:(a,b)=>(0,d.jsx)(e.B8.Item,{children:(0,d.jsx)(e.B8.Item.Meta,{title:`${b+1}. ${a.title}`,description:a.sections.length>0?a.sections.join("、"):"(无预设小节)"})})})]})}},85104:(a,b,c)=>{c.d(b,{Ce:()=>l,tl:()=>n});var d=c(82015),e=c(60056),f=c(79270),g=c(22147);let h=null,i=!1;function j(){h?.listeners.forEach(a=>a())}let k={role_binding:"角色配置绑定",knowledge_retrieval:"知识库检索",file_understanding:"多模态文件理解",fact_extraction:"LLM 事实抽取",chapter_generation:"LLM 章节生成",validation:"规则校验",llm_review:"LLM 审查优化",reference:"参考资源处理"};function l(a){return"completed"!==a&&"completed_with_issues"!==a&&"warning"!==a&&"failed"!==a&&"aborted"!==a&&"paused"!==a}function m(a){let b=a.agentWorkflow?.nodes;if(!b||0===b.length)return null;let c=[...b].sort((a,b)=>(a.seq??0)-(b.seq??0)).map(a=>{let b=k[a.type]||a.title||a.type||"节点",c="failed"===a.status||"blocked"===a.status?"error":"paused"===a.status||"repairing"===a.status?"warning":"running"===a.status?"process":"pending"===a.status?"wait":"finish",e=Object.entries(a.metrics||{}).slice(0,4).map(([a,b])=>`${a}:${String(b)}`).join(" ");return{key:a.id,title:b,subtitle:a.progress?`${a.progress.label||"进度"}:${a.progress.current}/${a.progress.total}`:"",description:e,status:c,icon:function(a){let b=a.split(".")[0]||a;return"role_binding"===a||"prepare"===b?(0,d.createElement)(f.ApartmentOutlined):"knowledge_retrieval"===a||"understand"===b?(0,d.createElement)(f.DatabaseOutlined):"file_understanding"===a||"skill"===b?(0,d.createElement)(f.EyeOutlined):"fact_extraction"===a?(0,d.createElement)(f.BulbOutlined):"chapter_generation"===a||"chapter"===b||"write"===b?(0,d.createElement)(f.FormOutlined):"llm_review"===a||"turn"===b||"round"===b?(0,d.createElement)(f.ThunderboltOutlined):"validation"===a||"repair"===b||"recheck"===b?(0,d.createElement)(f.SafetyCertificateOutlined):"plan"===b||"blueprint"===b?(0,d.createElement)(f.ApartmentOutlined):"rollback"===b||"snapshot"===b?(0,d.createElement)(f.HistoryOutlined):(0,d.createElement)(f.FileTextOutlined)}(a.type),subSteps:[]}}),e="generating"===a.status||"queued"===a.status?c.find(a=>"process"===a.status)?.key??c.at(-1)?.key??null:"failed"===a.status||"aborted"===a.status?c.find(a=>"error"===a.status)?.key??c.at(-1)?.key??null:null;return{steps:c,activeKey:e}}function n(a={}){let{projectRoot:b,documents:c,onNotice:k,t:o,onGenerated:p}=a,[q,r]=(0,d.useState)([]),[s,t]=(0,d.useState)(null),[u,v]=(0,d.useState)(!1),[w,x]=(0,d.useState)(null),[y,z]=(0,d.useState)(""),[A,B]=(0,d.useState)(null),[C,D]=(0,d.useState)(a.documentId??null),[E,F]=(0,d.useState)(null),[G,H]=(0,d.useState)(c??[]),[I,J]=(0,d.useState)(0),[K,L]=(0,d.useState)(null),[M,N]=(0,d.useState)([]),[O,P]=(0,d.useState)(null),Q=(0,d.useRef)(""),R=(0,d.useRef)(new Map),S=(0,d.useRef)(new Map),T=(0,d.useRef)(!1),U=(0,d.useRef)(b),V=(0,d.useRef)(C),W=(0,d.useRef)(q),X=(0,d.useRef)(s),Y=(0,d.useRef)(u),Z=(0,d.useRef)(o),$=(0,d.useRef)(k),_=(0,d.useRef)(p),aa=(0,d.useMemo)(()=>`activeGenDocId:${b||"default"}`,[b]),ab=(0,d.useCallback)(a=>{$.current?.(a)},[]),ac=(0,d.useCallback)((a,b)=>Z.current?.(a)??b,[]),ad=(0,d.useCallback)(async()=>{try{H((await (0,g.cQ)(U.current||void 0)).documents)}catch{H([])}},[]),ae=(0,d.useCallback)((a,b,c=Y.current)=>{h?.loading&&(h.flowSteps=a,h.activeFlowKey=b,h.loading=c,j())},[]),af=(0,d.useCallback)(a=>{let b=Date.now();for(let c of a){let a=R.current.get(c.key);"process"!==c.status||a?("finish"===c.status||"error"===c.status||"warning"===c.status)&&a&&!a.endedAt&&R.current.set(c.key,{...a,endedAt:b}):R.current.set(c.key,{startedAt:b})}},[]),ag=(0,d.useCallback)(a=>{let b=Math.max(0,Math.round(a/1e3));if(b<60)return`${b} 秒`;let c=Math.floor(b/60);return c<60?`${c} 分 ${b%60} 秒`:`${Math.floor(c/60)} 小时 ${c%60} 分`},[]),ah=(0,d.useCallback)(a=>{let b=a.agentWorkflow?.nodes||[],c=`${a.id}|${a.updatedAt}|${a.status}|${a.error||""}|n${b.length}:${b.map(a=>`${a.id}=${a.status}:${a.progress?.current??0}/${a.progress?.total??0}`).join(",")}`;if(Q.current===c)return;Q.current=c,B(a);let{steps:d,activeKey:e}=function(a,b={}){return m(a)??{steps:[],activeKey:null}}(a);af(d);let f=l(a.status);r(d),t(e),v(f),ae(d,e,f),F("failed"===a.status||"aborted"===a.status?a.error||("aborted"===a.status?"生成已中止":"生成失败"):null),("completed"===a.status||"completed_with_issues"===a.status||"warning"===a.status)&&(a.draft&&x(a.draft),z(a.editedMarkdown||a.markdown),N(a.exportReports||[]))},[ae,af]),ai=(0,d.useCallback)(a=>{a.id&&D(a.id),ah(a)},[ah]),aj=(0,d.useCallback)(async(a,b)=>{let c=Date.now(),d=0,e=Date.now(),f=null,h=0;for(;;){let i,j;if(b?.aborted)throw Error("用户中止");let k=new AbortController;b&&(b.pollController=k);try{let b=await (0,g.v7)(a,!0,U.current||void 0,k.signal,d||void 0);i=b.document,j=b.status,h=0}catch(a){if(b?.aborted||a instanceof DOMException&&"AbortError"===a.name)throw Error("用户中止",{cause:a});if((h+=1)>=3)throw a instanceof Error?a:Error("生成进度获取失败");await new Promise(a=>window.setTimeout(a,2e3*h));continue}finally{b?.pollController===k&&(b.pollController=void 0)}let l=i?"queued"===i.status:"queued"===j;if(l&&(e=Date.now(),Date.now()-c>216e5))throw Error("排队等待超时,请稍后刷新列表查看或取消后重新发起");if(!i){if(!l&&(Date.now()-(f??c)>75e5||Date.now()-e>96e4))throw Error("生成任务疑似卡住,请点击继续生成或重新生成(后台任务可能仍在运行,稍后刷新可查看)");await new Promise(a=>window.setTimeout(a,1500));continue}if(ah(i),"generating"===i.status&&null===f&&(f=Date.now()),i.updatedAt!==d&&(d=i.updatedAt,e=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(!l&&(Date.now()-(f??c)>75e5||Date.now()-e>96e4))throw Error("生成任务疑似卡住,请点击继续生成或重新生成(后台任务可能仍在运行,稍后刷新可查看)");await new Promise(a=>window.setTimeout(a,1500))}},[ah]),ak=(0,d.useCallback)(async(a,b)=>{if(!a.specId)return;let c=a.title,e=a.promptIds,k=a.projectRoot||U.current;if(h?.aborted&&(h=null),h?.loading){if(T.current)return;if(!k)return void ab({kind:"error",text:"未识别当前项目,请先选择或打开项目后再生成文件"});T.current=!0;try{let a=await (0,g.OX)({promptIds:e,...c?{title:c}:{},requirement:b,projectRoot:k});await ad(),ab({kind:"info",text:a.queuePosition?`已加入生成队列(第 ${a.queuePosition} 位):前面任务完成后将自动开始`:"生成任务已创建"})}catch(a){ab({kind:"error",text:a instanceof Error?a.message:"创建生成任务失败"})}finally{T.current=!1}return}if(!k)return void ab({kind:"error",text:"未识别当前项目,请先选择或打开项目后再生成文件"});v(!0);let l=W.current,n=l.length>0?l:[{key:"prepare",title:"正在创建生成任务",description:"系统正在创建后台生成任务,请稍候。",status:"process",icon:(0,d.createElement)(f.LoadingOutlined),subSteps:[{key:"start",title:"准备生成任务",status:"process"}]}],o=X.current||"prepare";r(n),t(o);let p=(0,g.OX)({promptIds:e,...c?{title:c}:{},requirement:b,projectRoot:k});h={id:Date.now(),specId:a.specId,loading:!0,flowSteps:n,activeFlowKey:o,promise:p,listeners:new Set};try{let b=await p;b.documentId&&(localStorage.setItem(aa,b.documentId),D(b.documentId),h?.promise===p&&(h.documentId=b.documentId)),await ad(),b.queuePosition&&ab({kind:"info",text:`已加入生成队列(第 ${b.queuePosition} 位):前面任务完成后将自动开始`});let c=b.documentId?await aj(b.documentId,h?.promise===p?h:void 0):void 0,d=b.draft||c?.draft;if(!d)throw Error("生成结果为空");(b.documentId||c?.id)&&D(b.documentId||c.id),x(d),z(c?.editedMarkdown||c?.markdown||d.markdown),h?.promise===p&&(h.draft=d,h.content=c?.editedMarkdown||c?.markdown||d.markdown);let e=c||{id:b.documentId||`draft-${Date.now()}`,templateId:b.record?.templateId||b.documentSpec?.id||a.specId,templateName:b.record?.templateName||b.documentSpec?.title,title:d.title,requirement:d.requirement,projectRoot:d.projectRoot||U.current,projectId:d.projectId,markdown:d.markdown,status:d.validationIssues.some(a=>"error"===a.level||"warning"===a.level)||!d.exportGate.passed?"completed_with_issues":"completed",draft:d,executionStages:d.executionStages,assets:d.assets||[],createdAt:d.generatedAt,updatedAt:Date.now()},{steps:f}=m(e)??{steps:[],activeKey:null};r(f),ae(f,"done",!1),t("done"),h?.promise===p&&(h.activeFlowKey="done",h.loading=!1,j(),h=null),localStorage.removeItem(aa),await ad(),ab({kind:"success",text:"操作成功",key:"common.success"}),(b.documentId||c?.id)&&_.current?.(b.documentId||c.id)}catch(d){localStorage.removeItem(aa);let a=d instanceof Error?d.message:ac("common.error","出错了"),b=i;i=!1;let c=!b&&"用户中止"===a;F(a),b||r(b=>{let c=b.map(b=>"process"===b.status?{...b,status:"error",description:a,subSteps:b.subSteps.map((a,b)=>({...a,status:0===b?"error":a.status}))}:b);return ae(c,X.current,!1),c}),h?.promise===p&&(h.loading=!1,h.error=a,j(),h=null),await ad(),c?ab({kind:"warning",text:"生成任务已被中止(可能来自其他窗口):可在列表中点击「继续生成」恢复"}):b||ab({kind:"error",text:a})}finally{v(!1),i=!1,h?.promise===p&&(h.loading=!1,j())}},[ab,ad,ae,aa,ac,aj]),al=(0,d.useCallback)(a=>{let b=S.current.get(a);b&&(clearInterval(b),S.current.delete(a))},[]),am=(0,d.useCallback)((a,b)=>{al(a);let c=setInterval(()=>{(async()=>{try{let{document:c}=await (0,g.v7)(a,!0,b||U.current||void 0);if(!c)return;ah(c),await ad(),l(c.status)||(al(a),localStorage.removeItem(aa))}catch{}})()},2e3);S.current.set(a,c)},[ah,ad,al,aa]),an=(0,d.useCallback)(a=>{let b=R.current.get(a);if(!b)return null;let c=ag((b.endedAt??Date.now())-b.startedAt);return b.endedAt?c:`${c}(运行中)`},[I,ag]),ao=(0,d.useCallback)(async a=>{h&&(i=!0);let b=V.current;for(let c of(b&&await (0,g.r)(b,a||U.current||void 0).catch(()=>void 0),h&&(h.aborted=!0,h.pollController?.abort(),h.loading=!1,h.error="用户中止",j(),h=null),localStorage.removeItem(aa),S.current.values()))clearInterval(c);S.current.clear(),v(!1),r([]),t(null),F("用户中止"),await ad(),ab({kind:"info",text:"已中止生成任务"})},[ab,ad,aa]),ap=(0,d.useCallback)(async a=>{h?.loading&&h.documentId===a.id&&(i=!0,h.aborted=!0,h.pollController?.abort(),h.loading=!1,h.error="用户中止",j(),h=null,v(!1)),localStorage.removeItem(aa),al(a.id);try{await (0,g.r)(a.id,a.projectRoot||U.current||void 0),ab({kind:"success",text:"queued"===a.status?"已取消排队任务":"已中止生成任务"})}catch{ab({kind:"info",text:"任务已不在运行,已刷新状态"})}finally{await ad(),V.current===a.id&&(D(null),B(null),x(null),z(""))}},[ab,ad,al,aa]),aq=(0,d.useCallback)(async a=>{try{D(a.id),v(!0);let b=await (0,g.UQ)(a.id,a.projectRoot||U.current||void 0);localStorage.setItem(aa,b.documentId),await ad();let c=await aj(b.documentId);c.draft&&(x(c.draft),z(c.editedMarkdown||c.markdown||c.draft.markdown)),localStorage.removeItem(aa),await ad(),ab({kind:"success",text:"已继续生成并完成"})}catch(a){ab({kind:"error",text:a instanceof Error?a.message:"继续生成失败"})}finally{v(!1)}},[ab,ad,aa,aj]),ar=(0,d.useCallback)(async(a,b)=>{let c=await fetch(`/api/documents/generated/${encodeURIComponent(a)}/pause`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectRoot:b||U.current||void 0})});if(!c.ok)throw Error(await c.text()||`HTTP ${c.status}`);let d=await c.json();return ab({kind:"info",text:d.message||"已请求暂停:将在当前节点边界停住并落盘"}),await ad(),am(a,b),d},[ab,ad,am]),as=(0,d.useCallback)(async(a,b)=>{let c=await fetch(`/api/documents/generated/${encodeURIComponent(a)}/resume-generate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectRoot:b||U.current||void 0})});if(!c.ok)throw Error(await c.text()||`HTTP ${c.status}`);ab({kind:"info",text:"已请求继续:将从暂停的节点边界接着跑"}),await ad()},[ab,ad]),at=(0,d.useCallback)((a,b,c)=>{let d=new Blob([a],{type:c}),e=URL.createObjectURL(d),f=document.createElement("a");f.href=e,f.download=b,f.target="_self",f.rel="noopener",f.style.display="none",document.body.appendChild(f),f.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0,view:window})),f.remove(),window.setTimeout(()=>URL.revokeObjectURL(e),1e3)},[]),au=(0,d.useCallback)(async(a,b,c)=>{let{blob:d,filename:e,notDeliverable:f,gateIssues:h}=await (0,g.UE)(a);at(d,e||b,c),P(f?{at:Date.now(),count:h.length,issues:h}:null)},[at]),av=(0,d.useCallback)(a=>/导出门禁未通过|EXPORT_GATE_BLOCKED/u.test(a),[]),aw=(0,d.useCallback)(a=>new Promise(b=>{e.aF.confirm({title:ac("documents.exportGateBlockedTitle","导出门禁未通过"),content:`${a}
|
|
1
|
+
"use strict";exports.id=6321,exports.ids=[6321],exports.modules={1168:(a,b,c)=>{c.d(b,{EL:()=>F,zT:()=>E,II:()=>D,bJ:()=>K,Jr:()=>B,O0:()=>T,uj:()=>s,GC:()=>r,qj:()=>N,x8:()=>C,Kg:()=>I,a3:()=>R,Qs:()=>z,PI:()=>L,dB:()=>U,Jy:()=>Q,uv:()=>p,vp:()=>u,m_:()=>o,kH:()=>y,z9:()=>w,Aq:()=>P,RV:()=>M,Kq:()=>G});var d=c(82015),e=c(79270);let f=["failed","paused","repairing","blocked","running","pending","completed"],g=["chars","costUsd"];function h(a,b){return a.seq!==b.seq?a.seq-b.seq:a.id===b.id?0:a.id<b.id?-1:1}function i(a){let b=new Map;for(let c of a){if(void 0===c.parentId)continue;let a=b.get(c.parentId);a?a.push(c):b.set(c.parentId,[c])}for(let a of b.values())a.sort(h);return b}function j(a){let b=new Map(a.map(a=>[a.id,a])),c=new Map;for(let d of a){let a=0,e=d,f=new Set([d.id]);for(;e?.parentId!==void 0;){let c=b.get(e.parentId);if(!c||f.has(c.id))break;f.add(c.id),a+=1,e=c}c.set(d.id,a)}return c}let k=new Set(["prepare","understand","plan","blueprint","write","close","deliver","chapter","block","turn","round","round.observe","round.decide","round.fix","repair.request","repair.localize","repair.impact","repair.transaction","repair.recheck","supervisor","skill.load"]),l=new Set(["failed","paused","repairing","blocked","running","pending","completed"]),m={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 n(a,b,c,d){let e=a[b];if(!e)return`未知${c}(${b||"空"})`;if(e.key&&d){let a=d(e.key);if(a&&a!==e.key)return a}return e.text}function o(a,b){return n(m,a,"状态",b)}function p(a){return m[a]?.color??"default"}let q={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 r(a,b){return n(q,a,"记录状态",b)}function s(a){return q[a]?.color??"default"}let t=["failed","paused","repairing","blocked","running","pending","completed"];function u(a){let b=t.indexOf(a);return b>=0?b:t.length}let v={prepare:"生成准备",understand:"资料理解",plan:"规划",blueprint:"蓝图",write:"正文撰写",close:"收口",deliver:"交付",chapter:"章节",block:"块",turn:"轮次",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复检","skill.load":"技能命中",supervisor:"调度决策"};function w(a){return a?v[a]??a:"未知节点"}let x={role_binding:(0,d.createElement)(e.LinkOutlined),knowledge_retrieval:(0,d.createElement)(e.SearchOutlined),file_understanding:(0,d.createElement)(e.FileSearchOutlined),fact_extraction:(0,d.createElement)(e.TableOutlined),chapter_generation:(0,d.createElement)(e.EditOutlined),llm_review:(0,d.createElement)(e.AuditOutlined),validation:(0,d.createElement)(e.SafetyCertificateOutlined),reference:(0,d.createElement)(e.BookOutlined),prepare:(0,d.createElement)(e.ToolOutlined),understand:(0,d.createElement)(e.DatabaseOutlined),plan:(0,d.createElement)(e.ApartmentOutlined),blueprint:(0,d.createElement)(e.DeploymentUnitOutlined),write:(0,d.createElement)(e.FormOutlined),chapter:(0,d.createElement)(e.FileTextOutlined),block:(0,d.createElement)(e.BlockOutlined),turn:(0,d.createElement)(e.SyncOutlined),round:(0,d.createElement)(e.RetweetOutlined),close:(0,d.createElement)(e.CompressOutlined),deliver:(0,d.createElement)(e.ExportOutlined),repair:(0,d.createElement)(e.BugOutlined),skill:(0,d.createElement)(e.EyeOutlined),supervisor:(0,d.createElement)(e.ClusterOutlined),default:(0,d.createElement)(e.ToolOutlined)};function y(a){return x[a.split(".")[0]||a]??x.default}function z(a){return x[a]??x.default}function A(a){var b;let c=a.issues;return{id:a.id,...void 0!==a.parentId?{parentId:a.parentId}:{},type:a.type||"block",title:a.title??"",seq:"number"==typeof a.seq&&Number.isFinite(a.seq)?a.seq:0,status:"string"==typeof(b=a.status)&&l.has(b)?a.status:"failed",startedAt:"number"==typeof a.startedAt&&Number.isFinite(a.startedAt)&&a.startedAt>0?a.startedAt:0,...void 0!==a.completedAt?{completedAt:a.completedAt}:{},...a.progress?{progress:a.progress}:{},...a.metrics?{metrics:a.metrics}:{},...Array.isArray(c)&&c.length>0?{issues:c}:{},...void 0!==a.payloadRef?{payloadRef:a.payloadRef}:{}}}function B(a,b){let c=new Map(a.map(a=>[a.id,a]));return(function(a,b){let c=function(a){let b=i(a),c=j(a),d=[...a].sort((a,b)=>(c.get(b.id)??0)-(c.get(a.id)??0)||h(a,b)),e=new Map(a.map(a=>[a.id,a]));for(let a of d){let c=b.get(a.id);if(!c||0===c.length)continue;let d=c.map(a=>e.get(a.id)??a);e.set(a.id,function(a,b){if(0===b.length)return{...a};let c=[...b].sort(h),d={...a.metrics??{}};for(let a of g){let b=function(a,b){let c=0,d=!1;for(let e of a){let a=e.metrics?.[b];"number"==typeof a&&Number.isFinite(a)&&(c+=a,d=!0)}return d?c:void 0}(c,a);void 0===b?delete d[a]:d[a]=b}let e=a.progress?.label,i={current:c.filter(a=>"completed"===a.status).length,total:c.length,...void 0!==e?{label:e}:{}},j=function(a){let b=new Set,c=[];for(let d of a){let a=d.provenance?.fingerprint;if("string"==typeof a&&a.length>0){if(b.has(a))continue;b.add(a)}c.push(d)}return c}(c.flatMap(a=>a.issues??[])),k=function(a){let b,c=1/0;for(let d of a){let a=function(a){let b=f.indexOf(a);return b>=0?b:0}(d);a<c&&(c=a,b=d)}return b}(c.map(a=>a.status))??a.status;return{...a,status:k,progress:i,...Object.keys(d).length>0?{metrics:d}:{},...j.length>0?{issues:j}:{}}}(a,d))}return[...a].sort(h).map(a=>e.get(a.id)??a)}(a),d=i(c),e=new Set(c.map(a=>a.id)),k=1/0,l=(a,b)=>{let c=b+1<k?(d.get(a.id)??[]).filter(b=>b.id!==a.id).map(a=>l(a,b+1)):[];return{...a,children:c}},m=c.filter(a=>void 0===a.parentId||!e.has(a.parentId)).sort(h).map(a=>l(a,0)),n=new Set,o=a=>{for(let b of a)n.add(b.id),o(b.children)};for(let a of(o(m),c))n.has(a.id)||m.push(l(a,0));return m})(function(a,b){if(void 0===b)return[...a];let c=j(a),d=Math.max(0,Math.floor(b));return a.filter(a=>(c.get(a.id)??0)<d)}(a.map(A),b)).map(a=>(function a(b,c){let d=c.get(b.id),e=d?.type??String(b.type),f=b.issues;return{id:b.id,...void 0!==b.parentId?{parentId:b.parentId}:{},type:e,unknownType:!("string"==typeof e&&k.has(e)),title:b.title||w(e),seq:b.seq,status:b.status,..."number"==typeof b.startedAt&&b.startedAt>0?{startedAt:b.startedAt}:{},...void 0!==b.completedAt?{completedAt:b.completedAt}:{},...b.progress?{progress:b.progress}:{},metrics:b.metrics??{},issues:Array.isArray(f)?f:[],...void 0!==b.payloadRef?{payloadRef:b.payloadRef}:{},children:b.children.map(b=>a(b,c))}})(a,c))}function C(a){let b=[],c=a=>{for(let d of a)b.push(d),c(d.children)};return c(a),b.sort(h)}function D(a,b){let c=[],d=(a,e)=>{for(let f of a){if(f.id===b)return c.push(...e),!0;if(d(f.children,[...e,f.id]))return!0}return!1};return d(a,[]),c}let E=236,F=76;function G(a,b){if(!b)return a;let c=new Map(a),d=c.get(b.id)??{dx:0,dy:0};return c.set(b.id,{dx:d.dx+b.dx,dy:d.dy+b.dy}),c}let H=new Set(["running","repairing"]);function I(a){let b=new Set(a.nodes.filter(a=>H.has(a.node.status)).map(a=>a.node.id));if(0===b.size)return J;let c=new Set;for(let d of a.edges)b.has(d.fromId)&&c.add(d.id);return c}let J=new Set;function K(a,b){if(0===b.size)return a;let c=a.nodes.map(a=>{let c=b.get(a.node.id);return c?{...a,x:a.x+c.dx,y:a.y+c.dy}:a}),d=a.edges.map(a=>{let c=b.get(a.fromId),d=b.get(a.toId);return c||d?{...a,x1:a.x1+(c?.dx??0),y1:a.y1+(c?.dy??0),x2:a.x2+(d?.dx??0),y2:a.y2+(d?.dy??0)}:a});return{...a,nodes:c,edges:d}}function L(a){let b=[],c=[],d=0,e=(a,f)=>{let g,h=a.children,i=40+f*(E+72),j=h.map(a=>({id:a.id,...e(a,f+1)}));for(let e of(0===j.length?(g=40+d*(F+22),d+=1):g=(j[0].y+j[j.length-1].y)/2,b.push({node:a,x:i,y:g,depth:f}),j))c.push({id:`${a.id}->${e.id}`,fromId:a.id,toId:e.id,x1:i+E/2,y1:g+F,x2:e.x+E/2,y2:e.y});return{x:i,y:g}};for(let b of a)e(b,0),d+=1;let f=b.reduce((a,b)=>Math.max(a,b.x+E),0),g=b.reduce((a,b)=>Math.max(a,b.y+F),0);return{nodes:b,edges:c,width:f+40,height:g+40}}function M(a,b){let c=[`影响面:${b.kind}`,`波及 ${b.affectedNodeIds.length} 个节点`,...b.escalate?["超出阈值需人工确认"]:[],...b.rollbackable?[]:["不可回滚:按 11.1 需回滚或重新校准,不得当普通改动提交"]];return`请修复节点「${a}」(${c.join(",")})`}function N(a,b){let c=b>0?b:1;return{dx:a.dx/c,dy:a.dy/c}}let O=(a,b)=>a.left<b.right&&a.right>b.left&&a.top<b.bottom&&a.bottom>b.top;function P(a){let{node:b,view:c,box:d,panelWidth:e,panelHeight:f,gap:g=12,margin:h=8,obstacles:i=[]}=a,j=(a,b,c)=>Math.min(Math.max(a,b),Math.max(b,c)),k=Math.min(e,Math.max(0,d.width-2*h)),l=b.x*c.k+c.x,m=b.y*c.k+c.y,n=m+F*c.k,o={left:l,top:m,right:l+E*c.k,bottom:n},p=d.width-k-h,q=(a,b)=>{let c=i.filter(c=>c.top>=b&&c.left<a+k&&c.right>a).map(a=>a.top-g);return Math.max(0,Math.min(d.height-h,...c,d.height-h)-b)},r=a=>{let b=d.height-a-h,e=(c,d)=>{if(c<h||d<h||c>p||d>b)return!1;let e={left:c,top:d,right:c+k,bottom:d+a};return!i.some(a=>O(e,a))},f=l+(E+g)*c.k,r=l-k-g*c.k,s=n+g,t=m-a-g;for(let[a,b]of[[f,s],[f,t],[r,s],[r,t]])if(e(a,b))return{left:a,top:b,maxHeight:Math.max(0,Math.min(q(a,b),d.height-b-h))};let u=[f,r,h,p],v=[s,t,h,b,...i.flatMap(b=>[b.bottom+g,b.top-a-g])],w=null,x=1/0;for(let c of u)for(let d of v){let f=j(c,h,p),g=j(d,h,Math.max(h,b));if(!e(f,g))continue;let i={left:f,top:g,right:f+k,bottom:g+a},l=Math.max(Math.max(0,o.left-i.right,i.left-o.right),Math.max(0,o.top-i.bottom,i.top-o.bottom))+1e3*!!O(i,o);l<x&&(x=l,w={left:f,top:g})}return w?{...w,maxHeight:q(w.left,w.top)}:null};if(a.pin){let b=j(a.pin.left,h,p),c=j(a.pin.top,h,Math.max(h,d.height-2*h));return{left:b,top:c,maxHeight:Math.max(0,Math.min(q(b,c),d.height-c-h))}}let s=Math.min(f,Math.max(0,d.height-2*h)),t=r(s);if(t)return t;let u=function(a,b,c=8){let d=a.height-c,e=b.map(a=>({start:Math.max(c,a.top),end:Math.min(d,a.bottom)})).filter(a=>a.end>a.start).sort((a,b)=>a.start-b.start),f=0,g=c;for(let a of e)a.start>g&&(f=Math.max(f,a.start-g)),g=Math.max(g,a.end);return Math.max(f,d-g)}(d,i,h)-g;if(u>0&&u<s){let a=r(Math.max(120,u));if(a)return a}return t??r(Math.max(120,u))??{left:j(l+(E+g)*c.k,h,p),top:h,maxHeight:Math.max(0,d.height-2*h)}}function Q(a){if("number"!=typeof a.startedAt||a.metrics?.instantEvent===!0)return;let b=("number"==typeof a.completedAt?a.completedAt:Date.now())-a.startedAt;return b>=0?b:void 0}function R(a){if(void 0===a)return"—";let b=Math.max(0,Math.round(a/1e3));if(b<60)return`${b} 秒`;let c=Math.floor(b/60);return c<60?`${c} 分 ${b%60} 秒`:`${Math.floor(c/60)} 小时 ${c%60} 分`}let S=[{key:"note",format:a=>String(a)},{key:"chars",format:a=>`${Number(a).toLocaleString()} 字`},{key:"targetWords",format:a=>`目标 ${Number(a).toLocaleString()} 字`},{key:"turn",format:a=>`第 ${a} 轮`},{key:"residual",format:a=>`残余 ${a}`},{key:"toolCalls",format:a=>`工具 ${a} 次`},{key:"attempt",format:a=>`第 ${a} 次尝试`},{key:"failureKinds",format:a=>String(a)},{key:"chapters",format:a=>`${a} 章`},{key:"facts",format:a=>`${a} 条事实`}];function T(a,b=2){let c=[];for(let{key:d,format:e}of S){let f=a[d];if(void 0===f||""===f||!1===f)continue;let g=e(f);if(g.trim()&&(c.push(g),c.length>=b))break}return c}function U(a,b=6){return Object.entries(a).slice(0,b).map(([a,b])=>({key:a,text:"number"==typeof b?`${a}: ${Number.isInteger(b)?b:b.toFixed(2)}`:`${a}: ${String(b)}`}))}},14352:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{_:()=>n});var e=c(8732),f=c(82015),g=c(60056),h=c(79270),i=c(94487),j=c(22147),k=c(85104),l=c(89668),m=a([i]);function n({currentDocumentId:a,projectRoot:b,onSelect:c,onCurrentDeleted:d}){let m=(0,i.Vr)(),{message:n}=g.qw.useApp(),p=(0,f.useRef)(null),[q,r]=(0,f.useState)([]),[s,t]=(0,f.useState)(!1),[u,v]=(0,f.useState)(!1),[w,x]=(0,f.useState)(1),[y,z]=(0,f.useState)(!1),[A,B]=(0,f.useState)([]),[C,D]=(0,f.useState)(!1),[E,F]=(0,f.useState)(null),[G,H]=(0,f.useState)(!0),I=(0,f.useRef)(null),J=(0,f.useCallback)(async()=>{t(!0);try{let a=await (0,j.cQ)(b||void 0);r(a.documents||[])}catch{r([])}finally{t(!1)}},[b]);q.length;let K=(0,f.useMemo)(()=>q.slice((w-1)*8,8*w),[q,w]),L=(0,f.useCallback)(a=>!(0,k.Ce)(a.status),[]),M=K.filter(L).map(a=>a.id),N=()=>{if(!u){let a=p.current?.parentElement?.getBoundingClientRect(),b=p.current?.getBoundingClientRect();H(!a||!b||b.top-a.top>252)}v(a=>!a)},O=async c=>{try{await (0,j.QG)(c.id,c.projectRoot||b||void 0),n.success(m("common.success")),B(a=>a.filter(a=>a!==c.id)),c.id===a&&d(),await J()}catch{n.error(m("common.error"))}},P=async()=>{let c=q.filter(a=>A.includes(a.id)&&L(a));if(0!==c.length){D(!0);try{await Promise.all(c.map(a=>(0,j.QG)(a.id,a.projectRoot||b||void 0))),n.success(m("records.deletedCount").replace("{count}",String(c.length))),a&&c.some(b=>b.id===a)&&d(),B([]),z(!1),await J()}catch{n.error(m("common.error"))}finally{D(!1)}}},Q=E?{left:E.left,top:E.top}:{right:24,bottom:96};return(0,e.jsxs)("div",{className:"canvasRecordsBall",ref:p,style:{position:"absolute",zIndex:3,...Q},children:[u&&(0,e.jsxs)("div",{className:"canvasRecordsPanel",style:{position:"absolute",right:0,width:320,maxHeight:420,display:"flex",flexDirection:"column",...G?{bottom:52}:{top:52}},children:[(0,e.jsxs)("div",{className:"flex items-center justify-between gap-2 px-3 py-2 border-b border-[var(--canvasSectionBorder)] shrink-0",children:[(0,e.jsxs)("span",{className:"text-[13px] font-semibold text-[var(--colorText)]",children:[m("records.title"),(0,e.jsx)("span",{className:"ml-2 font-normal text-xs text-[var(--colorTextTertiary)]",children:q.length})]}),(0,e.jsx)("button",{type:"button",className:"canvasRecordsLink",onClick:()=>{z(a=>!a),B([])},children:y?m("common.cancel"):m("records.batch")})]}),(0,e.jsx)("div",{className:"flex-1 min-h-0 overflow-y-auto",children:s&&0===q.length?(0,e.jsx)("div",{className:"py-10 text-center",children:(0,e.jsx)(g.tK,{size:"small"})}):0===q.length?(0,e.jsx)("div",{className:"py-8",children:(0,e.jsx)(g.Sv,{image:g.Sv.PRESENTED_IMAGE_SIMPLE,description:(0,e.jsx)("span",{className:"text-xs text-[var(--colorTextTertiary)]",children:m("records.empty")})})}):K.map(b=>{let d=b.id===a,f=L(b);return(0,e.jsxs)("div",{className:`group flex items-start gap-2 px-3 py-2 border-b border-[var(--canvasSectionBorder)] last:border-b-0 transition-colors ${d?"bg-[var(--colorBgSelected)]":"hover:bg-[var(--colorBgHover)]"}`,children:[y&&(0,e.jsx)("input",{type:"checkbox",className:"mt-1 shrink-0",disabled:!f,checked:A.includes(b.id),onChange:a=>B(c=>a.target.checked?[...c,b.id]:c.filter(a=>a!==b.id))}),(0,e.jsxs)("button",{type:"button",className:"min-w-0 flex-1 text-left bg-transparent border-0 p-0 cursor-pointer",title:b.title,onClick:()=>{c(b),v(!1)},children:[(0,e.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,e.jsx)("span",{className:`w-1.5 h-1.5 shrink-0 rounded-full ${o[b.status]??"bg-[var(--colorTextTertiary)]"}`}),(0,e.jsx)("span",{className:`truncate text-[13px] ${d?"font-semibold text-[var(--colorText)]":"text-[var(--colorText)]"}`,children:b.title}),d&&(0,e.jsx)("span",{className:"shrink-0 text-[10px] text-[var(--colorTextTertiary)]",children:m("records.current")})]}),(0,e.jsxs)("div",{className:"mt-0.5 pl-3 text-[11px] text-[var(--colorTextTertiary)]",children:[(0,e.jsx)(h.HistoryOutlined,{className:"mr-1"}),(0,l.fw)(b.updatedAt,"zh-CN")]})]}),!y&&f&&(0,e.jsx)(g.iS,{title:m("records.confirmDelete"),description:m("records.deleteHint"),onConfirm:()=>{O(b)},okText:m("common.confirm"),cancelText:m("common.cancel"),children:(0,e.jsx)("button",{type:"button",className:"canvasRecordsDelete",title:m("common.delete"),children:(0,e.jsx)(h.DeleteOutlined,{})})}),!y&&!f&&(0,e.jsx)(g.m_,{title:m("records.inFlightHint"),children:(0,e.jsx)("span",{className:"canvasRecordsDelete isDisabled",children:(0,e.jsx)(h.DeleteOutlined,{})})})]},b.id)})}),q.length>8&&(0,e.jsx)("div",{className:"flex justify-center px-3 py-2 border-t border-[var(--canvasSectionBorder)] shrink-0",children:(0,e.jsx)(g.dK,{size:"small",simple:!0,current:w,total:q.length,pageSize:8,onChange:x})}),y&&(0,e.jsxs)("div",{className:"flex items-center justify-between gap-2 px-3 py-2 border-t border-[var(--canvasSectionBorder)] shrink-0",children:[(0,e.jsx)("span",{className:"text-xs text-[var(--colorTextSecondary)]",children:m("records.checkedCount").replace("{count}",String(A.length))}),(0,e.jsxs)("div",{className:"flex items-center gap-2",children:[(0,e.jsx)("button",{type:"button",className:"canvasRecordsLink",onClick:()=>B(A.length===M.length?[]:M),children:A.length===M.length&&M.length>0?m("records.clearSelect"):m("records.selectPage")}),(0,e.jsx)(g.iS,{title:m("records.confirmDeleteSelected").replace("{count}",String(A.length)),description:m("records.deleteHint"),disabled:0===A.length,onConfirm:()=>{P()},okText:m("common.confirm"),cancelText:m("common.cancel"),children:(0,e.jsxs)("button",{type:"button",className:"canvasRecordsDanger",disabled:0===A.length||C,children:[(0,e.jsx)(h.DeleteOutlined,{className:"mr-1"}),m("records.deleteSelected")]})})]})]})]}),(0,e.jsxs)("div",{className:"canvasRecordsBallBtn",role:"button",tabIndex:0,"aria-label":`${m("records.title")}(${q.length})`,style:{width:44,height:44},onPointerDown:a=>{let b=p.current?.parentElement?.getBoundingClientRect(),c=p.current?.getBoundingClientRect();if(b&&c){I.current={pointerId:a.pointerId,startX:a.clientX,startY:a.clientY,originLeft:c.left-b.left,originTop:c.top-b.top,moved:!1};try{a.currentTarget.setPointerCapture(a.pointerId)}catch{}}},onPointerMove:a=>{let b=I.current,c=p.current?.parentElement?.getBoundingClientRect();if(!b||b.pointerId!==a.pointerId||!c)return;let d=a.clientX-b.startX,e=a.clientY-b.startY;!b.moved&&5>Math.hypot(d,e)||(b.moved=!0,F({left:Math.min(Math.max(8,b.originLeft+d),Math.max(8,c.width-44-8)),top:Math.min(Math.max(8,b.originTop+e),Math.max(8,c.height-44-8))}))},onPointerUp:a=>{let b=I.current;I.current=null;try{a.currentTarget.releasePointerCapture(a.pointerId)}catch{}if(b){if(b.moved)return void F(a=>{if(a)try{window.localStorage.setItem("canvas:recordsBallPos",JSON.stringify(a))}catch{}return a});N()}},onKeyDown:a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),N())},children:[(0,e.jsx)(h.HistoryOutlined,{}),(0,e.jsx)("span",{className:`canvasRecordsBallBadge${0===q.length?" isZero":""}`,children:q.length>99?"99+":q.length})]})]})}i=(m.then?(await m)():m)[0];let o={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)]"};d()}catch(a){d(a)}})},15642:(a,b,c)=>{c.d(b,{_:()=>i});var d=c(8732),e=c(82015),f=c(60056),g=c(79270);let{Text:h}=f.o5;function i(a){let{value:b,onChange:c,onSend:i,generating:j,submitting:k,disabled:l,disabledReason:m,selectedNode:n,onMentionSelected:o,resumable:p,onContinue:q,quickActions:r,requireGenerationSetup:s=!1,promptOptions:t=[],projectOptions:u=[],selectedPrompts:v=[],selectedProject:w=null,onSelectPrompts:x,onSelectProject:y,onPreviewStructure:z}=a,[A,B]=(0,e.useState)(!1),C=s?[0===v.length?"提示词":"",!w?"项目":""].filter(Boolean):[],D=C.length>0,E=l?m||"当前不可发起生成":D?`请先用左侧「+」选择${C.join(" 与 ")}——未选齐时不能发起生成`:j?"有任务正在运行:发送将加入生成队列(前面任务完成后自动开始)":"发送后将创建生成任务,画布随节点日志实时增长";return(0,d.jsxs)("div",{className:"canvasInputBar",children:[(0,d.jsxs)(f.$x,{wrap:!0,size:6,style:{marginBottom:6},children:[n&&(0,d.jsx)(f.m_,{title:`把「@${n.title}」插入输入框(可见文本,可自行修改)`,children:(0,d.jsx)(f.vw,{color:"blue",style:{cursor:"pointer"},onClick:o,children:`@ ${n.title}`})}),!n&&(0,d.jsx)(h,{type:"secondary",style:{fontSize:12},children:"点选一个节点后可 @ 提及它"}),p&&!j&&(0,d.jsx)(f.$n,{size:"small",type:"link",onClick:q,children:"继续生成"}),r?.map(a=>(0,d.jsx)(f.$n,{size:"small",type:"link",onClick:a.onClick,children:a.label},a.key))]}),(0,d.jsxs)(f.$x,{wrap:!0,size:10,style:{marginBottom:8},children:[(0,d.jsx)(f.AM,{trigger:"click",placement:"topLeft",open:A,onOpenChange:B,content:(0,d.jsxs)("div",{style:{width:360,display:"flex",flexDirection:"column",gap:8},children:[s&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{children:[(0,d.jsx)(h,{strong:!0,style:{fontSize:13},children:"提示词"}),(0,d.jsx)(f.l6,{mode:"multiple",style:{width:"100%",marginTop:4},value:v.map(a=>a.value),placeholder:0===t.length?"该项目暂无提示词":"选择提示词(至少一份;可多选)",options:t,onChange:a=>x?.(a)})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)(h,{strong:!0,style:{fontSize:13},children:"项目"}),(0,d.jsx)(f.l6,{style:{width:"100%",marginTop:4},value:w?.value,showSearch:!0,optionFilterProp:"label",placeholder:0===u.length?"本项目知识库里还没有资料:先到知识库页上传并入库":"选择项目(= 知识库里这个项目的资料,决定本次用哪份材料)",options:u,onChange:a=>y?.(a)})]}),(0,d.jsx)(h,{type:"secondary",style:{fontSize:12},children:"两者选齐后才能点「生成」。「项目」选的是入库到本地知识库的那份项目资料(清单/图纸/招标文件都在其中)——本次生成只用它,不会把库里别的项目材料混进来。提示词的正文按名字进入对应链路(总控/写作 → 写作链,清单/图纸/提取 → 事实抽取链,排版 → 格式链);章节大纲取自其中带 <OUTLINE> 的那一份,且只能有一份声明大纲。"})]}),!s&&(0,d.jsx)(h,{type:"secondary",style:{fontSize:12},children:"提示词与项目取自这条记录本身(章节结构由记录里那份提示词的大纲派生),不需要在这里再选。"}),(0,d.jsx)("div",{children:(0,d.jsx)(f.$n,{size:"small",block:!0,disabled:D,onClick:()=>{B(!1),z?.()},children:"结构预览(章清单与小节)"})})]}),children:(0,d.jsx)(f.$n,{style:{marginLeft:"5px"},size:"small",icon:(0,d.jsx)(g.PlusOutlined,{}),type:D?"primary":"default",children:"提示词 / 项目"})}),v.map(a=>(0,d.jsx)(f.vw,{color:"blue",closable:!0,onClose:b=>{b.preventDefault(),x?.(v.filter(b=>b.value!==a.value).map(a=>a.value))},children:`提示词:${a.label}`},a.value)),w&&(0,d.jsx)(f.vw,{color:"geekblue",closable:!0,onClose:a=>{a.preventDefault(),y?.("")},children:`项目:${w.label}`})]}),(0,d.jsxs)(f.$x.Compact,{style:{width:"100%"},children:[(0,d.jsx)(f.pd.TextArea,{value:b,onChange:a=>c(a.target.value),onPressEnter:a=>{!a.shiftKey&&(a.preventDefault(),l||k||i())},autoSize:{minRows:1,maxRows:5},placeholder:"描述你的需求;可用上面的 @ 提及把节点带进正文(Enter 发送,Shift+Enter 换行)",disabled:l}),(0,d.jsx)(f.m_,{title:E,children:(0,d.jsx)(f.$n,{type:"primary",icon:(0,d.jsx)(g.SendOutlined,{}),loading:k,disabled:l||D||!b.trim(),onClick:i,children:j?"排队提交":"生成"})})]})]})}},16258:(a,b,c)=>{c.d(b,{p:()=>d});function d(a,b){let c=`/canvas/${encodeURIComponent(a)}`;return b?`${c}?projectRoot=${encodeURIComponent(b)}`:c}},62025:(a,b,c)=>{c.d(b,{B:()=>g});var d=c(8732),e=c(60056);let{Paragraph:f}=e.o5;function g(a){let{open:b,title:c,chapters:g,outlineSource:h,materialScope:i,onClose:j}=a,k=g.length>0?`结构预览:${c}(${g.length} 章${h?`,大纲来源:${h}`:""})`:`结构预览:${c}`;return(0,d.jsxs)(e.aF,{open:b,title:k,centered:!0,onCancel:j,width:640,styles:{container:{maxHeight:"calc(100vh - 48px)",display:"flex",flexDirection:"column"},body:{overflowY:"auto",flex:1,minHeight:0}},footer:(0,d.jsx)(e.$n,{type:"primary",onClick:j,children:"知道了"}),children:[(0,d.jsx)(f,{type:"secondary",style:{fontSize:12,marginBottom:8},children:"章清单与小节由提示词的 <OUTLINE> 大纲 + 技能库(按章域 \xd7 工程类型)派生;这份预览与点「生成」时用的是同一个派生函数、同一份输入。 要看提示词会被怎样解读(必含表格 / 禁止项 / 字数下限),去提示词页的规则预览。"}),i&&(0,d.jsx)(e.Fc,{type:"info",showIcon:!0,style:{marginBottom:8},message:`本次项目资料:${i.root||"(未指定)"}(${i.fileCount} 份文件)`,description:"资料范围已锁定在所选项目资料内:库里其它项目的材料不会进入本篇。"}),0===g.length&&(0,d.jsx)(e.Fc,{type:"info",showIcon:!0,message:"本次没有派生出章清单",description:"派生的硬约束是提示词(或输入框要求)里要有 ≥2 章的显式大纲;缺大纲时服务端会直接拒绝这次生成,并在提示里说清缺什么。"}),(0,d.jsx)(e.B8,{size:"small",dataSource:g,renderItem:(a,b)=>(0,d.jsx)(e.B8.Item,{children:(0,d.jsx)(e.B8.Item.Meta,{title:`${b+1}. ${a.title}`,description:a.sections.length>0?a.sections.join("、"):"(无预设小节)"})})})]})}},85104:(a,b,c)=>{c.d(b,{Ce:()=>l,tl:()=>n});var d=c(82015),e=c(60056),f=c(79270),g=c(22147);let h=null,i=!1;function j(){h?.listeners.forEach(a=>a())}let k={role_binding:"角色配置绑定",knowledge_retrieval:"知识库检索",file_understanding:"多模态文件理解",fact_extraction:"LLM 事实抽取",chapter_generation:"LLM 章节生成",validation:"规则校验",llm_review:"LLM 审查优化",reference:"参考资源处理"};function l(a){return"completed"!==a&&"completed_with_issues"!==a&&"warning"!==a&&"failed"!==a&&"aborted"!==a&&"paused"!==a}function m(a){let b=a.agentWorkflow?.nodes;if(!b||0===b.length)return null;let c=[...b].sort((a,b)=>(a.seq??0)-(b.seq??0)).map(a=>{let b=k[a.type]||a.title||a.type||"节点",c="failed"===a.status||"blocked"===a.status?"error":"paused"===a.status||"repairing"===a.status?"warning":"running"===a.status?"process":"pending"===a.status?"wait":"finish",e=Object.entries(a.metrics||{}).slice(0,4).map(([a,b])=>`${a}:${String(b)}`).join(" ");return{key:a.id,title:b,subtitle:a.progress?`${a.progress.label||"进度"}:${a.progress.current}/${a.progress.total}`:"",description:e,status:c,icon:function(a){let b=a.split(".")[0]||a;return"role_binding"===a||"prepare"===b?(0,d.createElement)(f.ApartmentOutlined):"knowledge_retrieval"===a||"understand"===b?(0,d.createElement)(f.DatabaseOutlined):"file_understanding"===a||"skill"===b?(0,d.createElement)(f.EyeOutlined):"fact_extraction"===a?(0,d.createElement)(f.BulbOutlined):"chapter_generation"===a||"chapter"===b||"write"===b?(0,d.createElement)(f.FormOutlined):"llm_review"===a||"turn"===b||"round"===b?(0,d.createElement)(f.ThunderboltOutlined):"validation"===a||"repair"===b||"recheck"===b?(0,d.createElement)(f.SafetyCertificateOutlined):"plan"===b||"blueprint"===b?(0,d.createElement)(f.ApartmentOutlined):"rollback"===b||"snapshot"===b?(0,d.createElement)(f.HistoryOutlined):(0,d.createElement)(f.FileTextOutlined)}(a.type),subSteps:[]}}),e="generating"===a.status||"queued"===a.status?c.find(a=>"process"===a.status)?.key??c.at(-1)?.key??null:"failed"===a.status||"aborted"===a.status?c.find(a=>"error"===a.status)?.key??c.at(-1)?.key??null:null;return{steps:c,activeKey:e}}function n(a={}){let{projectRoot:b,documents:c,onNotice:k,t:o,onGenerated:p}=a,[q,r]=(0,d.useState)([]),[s,t]=(0,d.useState)(null),[u,v]=(0,d.useState)(!1),[w,x]=(0,d.useState)(null),[y,z]=(0,d.useState)(""),[A,B]=(0,d.useState)(null),[C,D]=(0,d.useState)(a.documentId??null),[E,F]=(0,d.useState)(null),[G,H]=(0,d.useState)(c??[]),[I,J]=(0,d.useState)(0),[K,L]=(0,d.useState)(null),[M,N]=(0,d.useState)([]),[O,P]=(0,d.useState)(null),Q=(0,d.useRef)(""),R=(0,d.useRef)(new Map),S=(0,d.useRef)(new Map),T=(0,d.useRef)(!1),U=(0,d.useRef)(b),V=(0,d.useRef)(C),W=(0,d.useRef)(q),X=(0,d.useRef)(s),Y=(0,d.useRef)(u),Z=(0,d.useRef)(o),$=(0,d.useRef)(k),_=(0,d.useRef)(p),aa=(0,d.useMemo)(()=>`activeGenDocId:${b||"default"}`,[b]),ab=(0,d.useCallback)(a=>{$.current?.(a)},[]),ac=(0,d.useCallback)((a,b)=>Z.current?.(a)??b,[]),ad=(0,d.useCallback)(async()=>{try{H((await (0,g.cQ)(U.current||void 0)).documents)}catch{H([])}},[]),ae=(0,d.useCallback)((a,b,c=Y.current)=>{h?.loading&&(h.flowSteps=a,h.activeFlowKey=b,h.loading=c,j())},[]),af=(0,d.useCallback)(a=>{let b=Date.now();for(let c of a){let a=R.current.get(c.key);"process"!==c.status||a?("finish"===c.status||"error"===c.status||"warning"===c.status)&&a&&!a.endedAt&&R.current.set(c.key,{...a,endedAt:b}):R.current.set(c.key,{startedAt:b})}},[]),ag=(0,d.useCallback)(a=>{let b=Math.max(0,Math.round(a/1e3));if(b<60)return`${b} 秒`;let c=Math.floor(b/60);return c<60?`${c} 分 ${b%60} 秒`:`${Math.floor(c/60)} 小时 ${c%60} 分`},[]),ah=(0,d.useCallback)(a=>{let b=a.agentWorkflow?.nodes||[],c=`${a.id}|${a.updatedAt}|${a.status}|${a.error||""}|n${b.length}:${b.map(a=>`${a.id}=${a.status}:${a.progress?.current??0}/${a.progress?.total??0}`).join(",")}`;if(Q.current===c)return;Q.current=c,B(a);let{steps:d,activeKey:e}=function(a,b={}){return m(a)??{steps:[],activeKey:null}}(a);af(d);let f=l(a.status);r(d),t(e),v(f),ae(d,e,f),F("failed"===a.status||"aborted"===a.status?a.error||("aborted"===a.status?"生成已中止":"生成失败"):null),("completed"===a.status||"completed_with_issues"===a.status||"warning"===a.status)&&(a.draft&&x(a.draft),z(a.editedMarkdown||a.markdown),N(a.exportReports||[]))},[ae,af]),ai=(0,d.useCallback)(a=>{a.id&&D(a.id),ah(a)},[ah]),aj=(0,d.useCallback)(async(a,b)=>{let c=Date.now(),d=0,e=Date.now(),f=null,h=0;for(;;){let i,j;if(b?.aborted)throw Error("用户中止");let k=new AbortController;b&&(b.pollController=k);try{let b=await (0,g.v7)(a,!0,U.current||void 0,k.signal,d||void 0);i=b.document,j=b.status,h=0}catch(a){if(b?.aborted||a instanceof DOMException&&"AbortError"===a.name)throw Error("用户中止",{cause:a});if((h+=1)>=3)throw a instanceof Error?a:Error("生成进度获取失败");await new Promise(a=>window.setTimeout(a,2e3*h));continue}finally{b?.pollController===k&&(b.pollController=void 0)}let l=i?"queued"===i.status:"queued"===j;if(l&&(e=Date.now(),Date.now()-c>216e5))throw Error("排队等待超时,请稍后刷新列表查看或取消后重新发起");if(!i){if(!l&&(Date.now()-(f??c)>75e5||Date.now()-e>96e4))throw Error("生成任务疑似卡住,请点击继续生成或重新生成(后台任务可能仍在运行,稍后刷新可查看)");await new Promise(a=>window.setTimeout(a,1500));continue}if(ah(i),"generating"===i.status&&null===f&&(f=Date.now()),i.updatedAt!==d&&(d=i.updatedAt,e=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(!l&&(Date.now()-(f??c)>75e5||Date.now()-e>96e4))throw Error("生成任务疑似卡住,请点击继续生成或重新生成(后台任务可能仍在运行,稍后刷新可查看)");await new Promise(a=>window.setTimeout(a,1500))}},[ah]),ak=(0,d.useCallback)(async(a,b)=>{if(!a.specId)return;let c=a.title,e=a.promptIds,k=a.projectRoot||U.current;if(h?.aborted&&(h=null),h?.loading){if(T.current)return;if(!k)return void ab({kind:"error",text:"未识别当前项目,请先选择或打开项目后再生成文件"});T.current=!0;try{let a=await (0,g.OX)({promptIds:e,...c?{title:c}:{},requirement:b,projectRoot:k});await ad(),ab({kind:"info",text:a.queuePosition?`已加入生成队列(第 ${a.queuePosition} 位):前面任务完成后将自动开始`:"生成任务已创建"})}catch(a){ab({kind:"error",text:a instanceof Error?a.message:"创建生成任务失败"})}finally{T.current=!1}return}if(!k)return void ab({kind:"error",text:"未识别当前项目,请先选择或打开项目后再生成文件"});v(!0);let l=W.current,n=l.length>0?l:[{key:"prepare",title:"正在创建生成任务",description:"系统正在创建后台生成任务,请稍候。",status:"process",icon:(0,d.createElement)(f.LoadingOutlined),subSteps:[{key:"start",title:"准备生成任务",status:"process"}]}],o=X.current||"prepare";r(n),t(o);let p=(0,g.OX)({promptIds:e,...c?{title:c}:{},requirement:b,projectRoot:k});h={id:Date.now(),specId:a.specId,loading:!0,flowSteps:n,activeFlowKey:o,promise:p,listeners:new Set};try{let b=await p;b.documentId&&(localStorage.setItem(aa,b.documentId),D(b.documentId),h?.promise===p&&(h.documentId=b.documentId)),await ad(),b.queuePosition&&ab({kind:"info",text:`已加入生成队列(第 ${b.queuePosition} 位):前面任务完成后将自动开始`});let c=b.documentId?await aj(b.documentId,h?.promise===p?h:void 0):void 0,d=b.draft||c?.draft;if(!d)throw Error("生成结果为空");(b.documentId||c?.id)&&D(b.documentId||c.id),x(d),z(c?.editedMarkdown||c?.markdown||d.markdown),h?.promise===p&&(h.draft=d,h.content=c?.editedMarkdown||c?.markdown||d.markdown);let e=c||{id:b.documentId||`draft-${Date.now()}`,templateId:b.record?.templateId||b.documentSpec?.id||a.specId,templateName:b.record?.templateName||b.documentSpec?.title,title:d.title,requirement:d.requirement,projectRoot:d.projectRoot||U.current,projectId:d.projectId,markdown:d.markdown,status:d.validationIssues.some(a=>"error"===a.level||"warning"===a.level)||!d.exportGate.passed?"completed_with_issues":"completed",draft:d,executionStages:d.executionStages,assets:d.assets||[],createdAt:d.generatedAt,updatedAt:Date.now()},{steps:f}=m(e)??{steps:[],activeKey:null};r(f),ae(f,"done",!1),t("done"),h?.promise===p&&(h.activeFlowKey="done",h.loading=!1,j(),h=null),localStorage.removeItem(aa),await ad(),ab({kind:"success",text:"操作成功",key:"common.success"}),(b.documentId||c?.id)&&_.current?.(b.documentId||c.id)}catch(d){localStorage.removeItem(aa);let a=d instanceof Error?d.message:ac("common.error","出错了"),b=i;i=!1;let c=!b&&"用户中止"===a;F(a),b||r(b=>{let c=b.map(b=>"process"===b.status?{...b,status:"error",description:a,subSteps:b.subSteps.map((a,b)=>({...a,status:0===b?"error":a.status}))}:b);return ae(c,X.current,!1),c}),h?.promise===p&&(h.loading=!1,h.error=a,j(),h=null),await ad(),c?ab({kind:"warning",text:"生成任务已被中止(可能来自其他窗口):可在列表中点击「继续生成」恢复"}):b||ab({kind:"error",text:a})}finally{v(!1),i=!1,h?.promise===p&&(h.loading=!1,j())}},[ab,ad,ae,aa,ac,aj]),al=(0,d.useCallback)(a=>{let b=S.current.get(a);b&&(clearInterval(b),S.current.delete(a))},[]),am=(0,d.useCallback)((a,b)=>{al(a);let c=setInterval(()=>{(async()=>{try{let{document:c}=await (0,g.v7)(a,!0,b||U.current||void 0);if(!c)return;ah(c),await ad(),l(c.status)||(al(a),localStorage.removeItem(aa))}catch{}})()},2e3);S.current.set(a,c)},[ah,ad,al,aa]),an=(0,d.useCallback)(a=>{let b=R.current.get(a);if(!b)return null;let c=ag((b.endedAt??Date.now())-b.startedAt);return b.endedAt?c:`${c}(运行中)`},[I,ag]),ao=(0,d.useCallback)(async a=>{h&&(i=!0);let b=V.current;for(let c of(b&&await (0,g.r)(b,a||U.current||void 0).catch(()=>void 0),h&&(h.aborted=!0,h.pollController?.abort(),h.loading=!1,h.error="用户中止",j(),h=null),localStorage.removeItem(aa),S.current.values()))clearInterval(c);S.current.clear(),v(!1),r([]),t(null),F("用户中止"),await ad(),ab({kind:"info",text:"已中止生成任务"})},[ab,ad,aa]),ap=(0,d.useCallback)(async a=>{h?.loading&&h.documentId===a.id&&(i=!0,h.aborted=!0,h.pollController?.abort(),h.loading=!1,h.error="用户中止",j(),h=null,v(!1)),localStorage.removeItem(aa),al(a.id);try{await (0,g.r)(a.id,a.projectRoot||U.current||void 0),ab({kind:"success",text:"queued"===a.status?"已取消排队任务":"已中止生成任务"})}catch{ab({kind:"info",text:"任务已不在运行,已刷新状态"})}finally{await ad(),V.current===a.id&&(D(null),B(null),x(null),z(""))}},[ab,ad,al,aa]),aq=(0,d.useCallback)(async a=>{try{D(a.id),v(!0);let b=await (0,g.UQ)(a.id,a.projectRoot||U.current||void 0);localStorage.setItem(aa,b.documentId),await ad();let c=await aj(b.documentId);c.draft&&(x(c.draft),z(c.editedMarkdown||c.markdown||c.draft.markdown)),localStorage.removeItem(aa),await ad(),ab({kind:"success",text:"已继续生成并完成"})}catch(a){ab({kind:"error",text:a instanceof Error?a.message:"继续生成失败"})}finally{v(!1)}},[ab,ad,aa,aj]),ar=(0,d.useCallback)(async(a,b)=>{let c=await fetch(`/api/documents/generated/${encodeURIComponent(a)}/pause`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectRoot:b||U.current||void 0})});if(!c.ok)throw Error(await c.text()||`HTTP ${c.status}`);let d=await c.json();return ab({kind:"info",text:d.message||"已请求暂停:将在当前节点边界停住并落盘"}),await ad(),am(a,b),d},[ab,ad,am]),as=(0,d.useCallback)(async(a,b)=>{let c=await fetch(`/api/documents/generated/${encodeURIComponent(a)}/resume-generate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectRoot:b||U.current||void 0})});if(!c.ok)throw Error(await c.text()||`HTTP ${c.status}`);ab({kind:"info",text:"已请求继续:将从暂停的节点边界接着跑"}),await ad()},[ab,ad]),at=(0,d.useCallback)((a,b,c)=>{let d=new Blob([a],{type:c}),e=URL.createObjectURL(d),f=document.createElement("a");f.href=e,f.download=b,f.target="_self",f.rel="noopener",f.style.display="none",document.body.appendChild(f),f.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0,view:window})),f.remove(),window.setTimeout(()=>URL.revokeObjectURL(e),1e3)},[]),au=(0,d.useCallback)(async(a,b,c)=>{let{blob:d,filename:e,notDeliverable:f,gateIssues:h}=await (0,g.UE)(a);at(d,e||b,c),P(f?{at:Date.now(),count:h.length,issues:h}:null)},[at]),av=(0,d.useCallback)(a=>/导出门禁未通过|EXPORT_GATE_BLOCKED/u.test(a),[]),aw=(0,d.useCallback)(a=>new Promise(b=>{e.aF.confirm({title:ac("documents.exportGateBlockedTitle","导出门禁未通过"),content:`${a}
|
|
2
2
|
|
|
3
3
|
${ac("documents.nonDeliverableExportConfirm","仍要导出将产出「非交付物」文件(文件名带后缀且界面显著标注),是否继续?")}`,okText:ac("documents.exportAnywayNonDeliverable","仍要导出(非交付物)"),okButtonProps:{danger:!0},cancelText:ac("common.cancel","取消"),onOk:()=>b(!0),onCancel:()=>b(!1)})}),[ac]),ax=(0,d.useCallback)(async(a,b)=>{let c=a instanceof Error?a.message:ac("common.error","出错了");if(!av(c))return void ab({kind:"error",text:c});if(await aw(c))try{await b()}catch(a){ab({kind:"error",text:a instanceof Error?a.message:ac("common.error","出错了")})}},[aw,av,ab,ac]),ay=(0,d.useMemo)(()=>({markdown:"text/markdown;charset=utf-8",html:"text/html;charset=utf-8",pdf:"application/pdf",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document"}),[]),az=(0,d.useCallback)(async(a,b)=>{let c=a.editedMarkdown||a.markdown||a.draft?.markdown||"";if(!c.trim())return void ab({kind:"warning",text:"该记录暂无可导出的正文内容"});L(b);let d="markdown"===b?"md":b,e={documentId:a.id,title:a.title,markdown:c,format:b,useClientMarkdown:!0,projectRoot:a.projectRoot||U.current||void 0};try{await au(e,`${a.title}.${d}`,ay[b])}catch(c){await ax(c,async()=>{await au({...e,allowNonDeliverable:!0},`${a.title}.${d}`,ay[b])})}finally{L(null)}},[au,ay,ax,ab]),aA=(0,d.useCallback)(async a=>{if(!w)return;L(a);let b="markdown"===a?"md":a,c={documentId:V.current||void 0,title:w.title,markdown:y,format:a,exportGate:w.exportGate,useClientMarkdown:!0,projectRoot:w.projectRoot||U.current||void 0};try{if(await au(c,`${w.title}.${b}`,ay[a]),V.current)try{let{document:a}=await (0,g.v7)(V.current,!1,w.projectRoot||U.current||void 0);a&&N(a.exportReports||[])}catch{}}catch(d){await ax(d,async()=>{await au({...c,allowNonDeliverable:!0},`${w.title}.${b}`,ay[a])})}finally{L(null)}},[y,au,w,ay,ax]),aB=C?G.find(a=>a.id===C)??A:A,aC=function(a,b){if(!a)return b?"running":"idle";switch(a){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"}}(aB?.status,u);return{flowSteps:q,activeFlowKey:s,loading:u,draft:w,content:y,workflowRecord:A,documentId:C,documents:G,error:E,phase:aC,flowTick:I,boundRecord:aB,canResume:function(a){let b=!!a&&l(a.status);return!!a&&("paused"===a.status||"failed"===a.status||"aborted"===a.status||"completed_with_issues"===a.status||"warning"===a.status&&!!a.checkpointChapters?.length&&/继续生成|重新生成|中断|卡住|未完成|门禁|阻断/u.test(a.error||a.warningIssues?.join(";")||a.draft?.exportGate?.blockingIssues?.map(a=>a.message).join(";")||"")||!b&&!!(a.draft?.exportGate&&!1===a.draft.exportGate.passed))}(aB),startGeneration:ak,abortGeneration:ao,abortDocument:ap,resumeDocument:aq,pauseDocument:ar,resumePausedDocument:as,applyRecord:ai,refreshDocuments:ad,waitForDoc:aj,stepDurationText:an,setDraft:x,setContent:z,setExportReports:N,export:{exporting:K,nonDeliverableExport:O,exportRecord:az,exportEditor:aA,downloadExport:au,handleExportError:ax,confirmNonDeliverableExport:aw,exportReports:M}}}},85202:(a,b,c)=>{c.d(b,{B:()=>h,VF:()=>f,ff:()=>g,s_:()=>i});var d=c(82015),e=c(1168);let f=24;function g(a,b,c,d=80){let e=a.x*b.k+b.x,f=a.y*b.k+b.y,h=e+a.width*b.k,i=f+a.height*b.k;return!(h>=-d&&i>=-d&&e<=c.width+d&&f<=c.height+d)}function h(a,b,c,d=24){let e=b.x,f=b.y,g=b.x+a.width*b.k,i=b.y+a.height*b.k,j=Math.min(g,c.right)-Math.max(e,c.left),k=Math.min(i,c.bottom)-Math.max(f,c.top);return j>=d&&k>=d?{dx:0,dy:0}:{dx:c.left+d-e,dy:c.top+d-f}}function i(){let[a,b]=(0,d.useState)({x:0,y:0,k:1}),c=(0,d.useRef)(null),f=(0,d.useRef)(null),g=(0,d.useRef)(a),h=(0,d.useCallback)((a,d,e)=>{b(b=>{let f=Math.min(2,Math.max(.1,b.k*a)),g=c.current?.getBoundingClientRect();if(!g||void 0===d||void 0===e)return{...b,k:f};let h=(d-g.left-b.x)/b.k,i=(e-g.top-b.y)/b.k;return{k:f,x:d-g.left-h*f,y:e-g.top-i*f}})},[]),[i,j]=(0,d.useState)(null),k=(0,d.useCallback)(a=>{if(0!==a.button)return;a.currentTarget.setPointerCapture(a.pointerId);let b=g.current;f.current={pointerId:a.pointerId,startX:a.clientX,startY:a.clientY,originX:b.x,originY:b.y}},[]),l=(0,d.useCallback)(a=>{let c=f.current;c&&c.pointerId===a.pointerId&&b(b=>({...b,x:c.originX+(a.clientX-c.startX),y:c.originY+(a.clientY-c.startY)}))},[]),m=(0,d.useCallback)(()=>{f.current=null},[]),n=(0,d.useCallback)(()=>b({x:0,y:0,k:1}),[]),o=(a,b)=>b??{left:0,top:0,right:a.width,bottom:a.height},p=(0,d.useCallback)((a,d,e)=>{b(b=>{let f=c.current?.getBoundingClientRect();if(!f||a<=0||d<=0)return{...b,x:0,y:0};let g=o(f,e),h=Math.max(1,g.right-g.left),i=Math.max(1,g.bottom-g.top),j=Math.min(2,Math.max(.1,Math.min(h/a,i/d)));return{k:j,x:g.left+(h-a*j)/2,y:g.top+(i-d*j)/2}})},[]),q=(0,d.useCallback)((a,d,f,g)=>{b(b=>{let h=c.current?.getBoundingClientRect();if(!h)return b;let i=o(h,g),j=f??b.k,k=(i.left+i.right)/2,l=(i.top+i.bottom)/2;return{k:j,x:k-(a+e.zT/2)*j,y:l-(d+e.EL/2)*j}})},[]);return{view:a,containerRef:c,zoomAt:h,onPointerDown:k,onPointerMove:l,endDrag:m,reset:n,fit:p,centerOn:q,panBy:(0,d.useCallback)((a,c)=>{(0!==a||0!==c)&&b(b=>({...b,x:b.x+a,y:b.y+c}))},[])}}},89668:(a,b,c)=>{function d(a){if(0===a)return"0 B";let b=Math.floor(Math.log(a)/Math.log(1024)),c=a/Math.pow(1024,b);return`${c.toFixed(+(0!==b))} ${["B","KB","MB","GB","TB"][b]}`}function e(a,b="zh-CN"){let c=Math.max(0,Math.floor(a)),d=Math.floor(c/86400),f=Math.floor(c%86400/3600),g=Math.floor(c%3600/60),h="en-US"===b;return d>0?h?`${d}d ${f}h`:`${d} 天 ${f} 小时`:f>0?h?`${f}h ${g}m`:`${f} 小时 ${g} 分`:g>0?h?`${g}m`:`${g} 分`:h?"Just now":"刚刚"}function f(a,b="zh-CN"){if(!a||a<=0)return"en-US"===b?"Never":"从未";let c=Math.floor(Math.floor((Date.now()-a)/1e3)/60),d=Math.floor(c/60),e=Math.floor(d/24);return e>30?new Date(a).toLocaleDateString(b):"en-US"===b?e>0?`${e}d ago`:d>0?`${d}h ago`:c>0?`${c}m ago`:"Just now":e>0?`${e} 天前`:d>0?`${d} 小时前`:c>0?`${c} 分钟前`:"刚刚"}c.d(b,{Jm:()=>i,a3:()=>e,fw:()=>f,mc:()=>j,z3:()=>d});let g={document:"文档",spreadsheet:"表格",image:"图片",cad:"图纸",code:"代码",data:"数据",web:"网页",diagram:"图表",archive:"压缩包",other:"其他"},h={document:"Document",spreadsheet:"Spreadsheet",image:"Image",cad:"CAD",code:"Code",data:"Data",web:"Web",diagram:"Diagram",archive:"Archive",other:"Other"};function i(a,b="zh-CN"){return("en-US"===b?h:g)[a]??a}let j={active:"common.statusIndexed",outdated:"common.statusOutdated",error:"common.statusAbnormal",deleted:"common.statusDeleted",disk:"common.statusNotIndexed"}}};
|