@customize-agent/server 4.60.24 → 4.60.26
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 +11 -11
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.json +1 -1
- package/.next/server/chunks/1243.js +1 -1
- package/.next/server/chunks/1936.js +8 -8
- package/.next/server/chunks/2328.js +1 -1
- package/.next/server/chunks/4722.js +5 -5
- package/.next/server/chunks/9666.js +13 -13
- package/.next/server/instrumentation.js.nft.json +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.nft.json +1 -1
- package/.next/server/pages/api/assets/generated.js.nft.json +1 -1
- package/.next/server/pages/api/config/embedding/healthCheck.js.nft.json +1 -1
- package/.next/server/pages/api/documents/canvas/[id].js.nft.json +1 -1
- package/.next/server/pages/api/documents/export.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generate/preview.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generate.js.nft.json +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.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/instruction.js.nft.json +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.nft.json +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.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.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/repair.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id]/report.js.nft.json +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.nft.json +1 -1
- package/.next/server/pages/api/documents/generated.js.nft.json +1 -1
- package/.next/server/pages/api/health.js +1 -1
- package/.next/server/pages/api/jobs/[id].js.nft.json +1 -1
- package/.next/server/pages/api/kb/categories.js.nft.json +1 -1
- package/.next/server/pages/api/kb/duplicates.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/detail.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/export.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/open.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/preview-pdf-page.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/reindex.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/search.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/source-preview.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files.js.nft.json +1 -1
- package/.next/server/pages/api/kb/ignore.js.nft.json +1 -1
- package/.next/server/pages/api/kb/material-groups.js.nft.json +1 -1
- package/.next/server/pages/api/kb/operations.js.nft.json +1 -1
- package/.next/server/pages/api/kb/reindex.js.nft.json +1 -1
- package/.next/server/pages/api/kb/stats.js.nft.json +1 -1
- package/.next/server/pages/api/kb/tags.js.nft.json +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/system/reset.js.nft.json +1 -1
- 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/source-preview.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/[id]/edit.html +1 -1
- package/.next/server/pages/skills/[id].html +1 -1
- package/.next/server/pages/skills/new.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 +28 -28
- package/.next/static/{4b2ddd07d8e7f56446e1a590eb548a00b93ce66676c0da8c618c62ba5df77e3d → 5e59a7c8dbe62000b135b9f714f25dbf3ad069260286bef5763eee319d57adec}/_buildManifest.js +1 -1
- package/.next/static/chunks/127-651f4930a3fc7bf1.js +1 -0
- package/.next/static/chunks/530-4dc8a99d3bb4ffa9.js +1 -0
- package/.next/static/chunks/{964-82cc4701f08f7351.js → 964-32b734a66b1f80b2.js} +2 -2
- package/package.json +2 -2
- package/.next/static/chunks/127-7d37d37dab02bd10.js +0 -1
- package/.next/static/chunks/530-98c3b3fbf3fcd8e3.js +0 -1
- /package/.next/static/{4b2ddd07d8e7f56446e1a590eb548a00b93ce66676c0da8c618c62ba5df77e3d → 5e59a7c8dbe62000b135b9f714f25dbf3ad069260286bef5763eee319d57adec}/_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:()=>et,zT:()=>ee,II:()=>$,bJ:()=>eo,Jr:()=>V,O0:()=>eh,uj:()=>H,GC:()=>U,qj:()=>es,x8:()=>Z,Kg:()=>ea,uH:()=>ep,Qs:()=>J,PI:()=>ei,dB:()=>eg,Jy:()=>em,uv:()=>O,vp:()=>Q,m_:()=>P,kH:()=>K,z9:()=>X,Aq:()=>ed,RV:()=>ec,Kq:()=>en});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),p=n(26619),f=n(23216),h=n(46791),g=n(8579),v=n(26631),x=n(35459),y=n(64629),w=n(76824),b=n(83374),k=n(81668),j=n(39356),A=n(8263),I=n(61024),S=n(32919),M=n(96538);let C=["failed","paused","repairing","blocked","running","pending","completed"],E=["chars","costUsd"];function R(e,t){return e.seq!==t.seq?e.seq-t.seq:e.id===t.id?0:e.id<t.id?-1:1}function N(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(R);return t}function _(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","round","round.decide","round.fix","repair.request","repair.localize","repair.impact","repair.transaction","repair.recheck","supervisor","resume.plan","skill.load"]),B=new Set(["failed","paused","repairing","blocked","running","pending","completed"]);var D=n(94394);let q={pending:{key:"common.statusWaiting",text:"等待中",color:"default"},running:{key:"common.statusRunning",text:D.uh.running,color:"processing"},completed:{key:"common.statusCompleted",text:D.uh.success,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 z(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 P(e,t){return z(q,e,"状态",t)}function O(e){var t,n;return null!=(n=null==(t=q[e])?void 0:t.color)?n:"default"}let F={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 U(e,t){return z(F,e,"记录状态",t)}function H(e){var t,n;return null!=(n=null==(t=F[e])?void 0:t.color)?n:"default"}let L=["failed","paused","repairing","blocked","running","pending","completed"];function Q(e){let t=L.indexOf(e);return t>=0?t:L.length}let Y={prepare:"生成准备",understand:"资料理解",plan:"规划",blueprint:"蓝图",write:"正文撰写",close:"收口",deliver:"交付",chapter:"章节",block:"块",turn:"轮次",round:"收口轮","round.decide":"收口\xb7判定","round.fix":"收口\xb7修复","repair.request":"修复\xb7请求","repair.localize":"修复\xb7定位","repair.impact":"修复\xb7影响面","repair.transaction":"修复\xb7事务","repair.recheck":"修复\xb7复检","skill.load":"技能命中",supervisor:"调度决策","resume.plan":"续跑任务书"};function X(e){var t;return e?null!=(t=Y[e])?t:e:"未知节点"}let G={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)(p.A),plan:(0,r.createElement)(f.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)(b.A),deliver:(0,r.createElement)(k.A),repair:(0,r.createElement)(j.A),skill:(0,r.createElement)(A.A),supervisor:(0,r.createElement)(I.A),resume:(0,r.createElement)(S.A),default:(0,r.createElement)(m.A)};function K(e){var t;return null!=(t=G[e.split(".")[0]||e])?t:G.default}function J(e){var t;return null!=(t=G[e])?t:G.default}function W(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)&&B.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 V(e,t){let n=new Map(e.map(e=>[e.id,e]));return(function(e,t){let n=function(e){let t=N(e),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)||R(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(R),o={...null!=(r=e.metrics)?r:{}};for(let t of E){let n=function(e,t,n){var r,a;let l=0,o=!1,i=null==(r=e.metrics)?void 0:r[n];for(let e of("number"==typeof i&&Number.isFinite(i)&&(l+=i,o=!0),t)){let t=null==(a=e.metrics)?void 0:a[n];"number"==typeof t&&Number.isFinite(t)&&(l+=t,o=!0)}return o?l:void 0}(e,l,t);void 0===n?delete o[t]:o[t]=n}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=C.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(R).map(e=>{var t;return null!=(t=a.get(e.id))?t:e})}(e),r=N(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(R).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=_(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(W),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 Z(e){let t=[],n=e=>{for(let r of e)t.push(r),n(r.children)};return n(e),t.sort(R)}function $(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 ee=236,et=76;function en(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 er=new Set(["running","repairing"]);function ea(e){let t=new Set(e.nodes.filter(e=>er.has(e.node.status)).map(e=>e.node.id));if(0===t.size)return el;let n=new Set;for(let r of e.edges)t.has(r.fromId)&&n.add(r.id);return n}let el=new Set;function eo(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 ei(e){let t=[],n=[],r=0,a=(e,l)=>{let o,i=e.children,c=40+l*(ee+72),s=i.map(e=>({id:e.id,...a(e,l+1)}));for(let a of(0===s.length?(o=40+r*(et+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+ee/2,y1:o+et,x2:a.x+ee/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+ee),0),o=t.reduce((e,t)=>Math.max(e,t.y+et),0);return{nodes:t,edges:n,width:l+40,height:o+40}}function ec(e,t){let n=["影响面:".concat(t.kind),"波及 ".concat(t.affectedNodeIds.length," 个节点"),...t.escalate?["超出阈值需人工确认"]:[],...t.rollbackable?[]:["不可回滚:按 11.1 需回滚或重新校准,不得当普通改动提交"]];return"请修复节点「".concat(e,"」(").concat(n.join(","),")")}function es(e,t){let n=t>0?t:1;return{dx:e.dx/n,dy:e.dy/n}}let eu=(e,t)=>e.left<t.right&&e.right>t.left&&e.top<t.bottom&&e.bottom>t.top;function ed(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,p=n.y*r.k+r.y,f=p+et*r.k,h={left:m,top:p,right:m+ee*r.k,bottom:f},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=>eu(a,e))},l=m+(ee+i)*r.k,o=m-d-i*r.k,x=f+i,y=p-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],b=[x,y,c,t,...s.flatMap(t=>[t.bottom+i,t.top-e-i])],k=null,j=1/0;for(let r of w)for(let a of b){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*!!eu(i,h);s<j&&(j=s,k={left:l,top:o})}return k?{...k,maxHeight:v(k.left,k.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 b=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(b>0&&b<y){let e=x(Math.max(120,b));if(e)return e}return null!=(t=null!=w?w:x(Math.max(120,b)))?t:{left:u(m+(ee+i)*r.k,c,g),top:c,maxHeight:Math.max(0,a.height-2*c)}}function em(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 ep(e){return void 0===e?"—":(0,M.a)(e,{unit:"ms",style:"fine"})}let ef=[{key:"note",format:e=>String(e)},{key:"chars",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 eh(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,n=[];for(let{key:r,format:a}of ef){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 eg(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,{_:()=>x});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),p=n(96651),f=n(60470),h=n(54746),g=n(7492);let{Text:v}=l.A;function x(e){let{value:t,onChange:n,onSend:l,generating:x,submitting:y,disabled:w,disabledReason:b,selectedNode:k,onMentionSelected:j,resumable:A,onContinue:I,quickActions:S,requireGenerationSetup:M=!1,promptOptions:C=[],projectOptions:E=[],selectedPrompts:R=[],selectedProject:N=null,onSelectPrompts:_,onSelectProject:T,onPreviewStructure:B,collapsed:D=!1,onToggleCollapsed:q}=e,[z,P]=(0,a.useState)(!D);(0,a.useEffect)(()=>{if(!D)return void P(!0);let e=window.setTimeout(()=>P(!1),200);return()=>window.clearTimeout(e)},[D]);let O=(0,a.useRef)(null);(0,a.useEffect)(()=>{var e;D||null==(e=O.current)||e.focus()},[D,z]);let[F,U]=(0,a.useState)(!1),H=M?[0===R.length?"提示词":"",!N?"项目":""].filter(Boolean):[],L=H.length>0,Q=w?b||"当前不可发起生成":L?"请先用左侧「+」选择".concat(H.join(" 与 "),"——未选齐时不能发起生成"):x?"有任务正在运行:发送将加入生成队列(前面任务完成后自动开始)":"发送后将创建生成任务,画布随节点日志实时增长";return(0,r.jsxs)("div",{className:"canvasInputBar".concat(D&&!z?" canvasInputBarCollapsed":""),children:[(0,r.jsx)("div",{className:"canvasInputHandleRow",children:(0,r.jsx)("button",{type:"button",className:"canvasInputHandle","aria-expanded":!D||!!z,"aria-label":D&&!z?"展开输入框":"收起输入框",onClick:()=>null==q?void 0:q(!(D&&!z)),children:D&&!z?(0,r.jsx)(p.A,{}):(0,r.jsx)(f.A,{})})}),z&&(0,r.jsxs)("div",{className:"canvasInputPanel".concat(D?" isLeaving":""),children:[(0,r.jsxs)(o.A,{wrap:!0,size:6,style:{marginBottom:6},children:[k&&(0,r.jsx)(i.A,{title:"把「@".concat(k.title,"」插入输入框(可见文本,可自行修改)"),children:(0,r.jsx)(c.A,{color:"blue",style:{cursor:"pointer"},onClick:j,children:"@ ".concat(k.title)})}),!k&&(0,r.jsx)(v,{type:"secondary",style:{fontSize:12},children:"点选一个节点后可 @ 提及它"}),A&&!x&&(0,r.jsx)(s.Ay,{size:"small",type:"link",onClick:I,children:"继续生成"}),null==S?void 0:S.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:F,onOpenChange:U,content:(0,r.jsxs)("div",{style:{width:360,display:"flex",flexDirection:"column",gap:8},children:[M&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{children:[(0,r.jsx)(v,{strong:!0,style:{fontSize:13},children:"提示词"}),(0,r.jsx)(d.A,{mode:"multiple",style:{width:"100%",marginTop:4},value:R.map(e=>e.value),placeholder:0===C.length?"该项目暂无提示词":"选择提示词(至少一份;可多选)",options:C,onChange:e=>null==_?void 0:_(e)})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(v,{strong:!0,style:{fontSize:13},children:"项目"}),(0,r.jsx)(d.A,{style:{width:"100%",marginTop:4},value:null==N?void 0:N.value,showSearch:!0,optionFilterProp:"label",placeholder:0===E.length?"本项目知识库里还没有资料:先到知识库页上传并入库":"选择项目(= 知识库里这个项目的资料,决定本次用哪份材料)",options:E,onChange:e=>null==T?void 0:T(e)})]}),(0,r.jsx)(v,{type:"secondary",style:{fontSize:12},children:"两者选齐后才能点「生成」。「项目」选的是入库到本地知识库的那份项目资料(清单/图纸/招标文件都在其中)——本次生成只用它,不会把库里别的项目材料混进来。提示词的正文按名字进入对应链路(总控/写作 → 写作链,清单/图纸/提取 → 事实抽取链,排版 → 格式链);章节大纲取自其中带 <OUTLINE> 的那一份,且只能有一份声明大纲。"})]}),!M&&(0,r.jsx)(v,{type:"secondary",style:{fontSize:12},children:"提示词与项目取自这条记录本身(章节结构由记录里那份提示词的大纲派生),不需要在这里再选。"}),(0,r.jsx)("div",{children:(0,r.jsx)(s.Ay,{size:"small",block:!0,disabled:L,onClick:()=>{U(!1),null==B||B()},children:"结构预览(章清单与小节)"})})]}),children:(0,r.jsx)(s.Ay,{style:{marginLeft:"5px"},size:"small",icon:(0,r.jsx)(h.A,{}),type:L?"primary":"default",children:"提示词 / 项目"})}),R.map(e=>(0,r.jsx)(c.A,{color:"blue",closable:!0,onClose:t=>{t.preventDefault(),null==_||_(R.filter(t=>t.value!==e.value).map(e=>e.value))},children:"提示词:".concat(e.label)},e.value)),N&&(0,r.jsx)(c.A,{color:"geekblue",closable:!0,onClose:e=>{e.preventDefault(),null==T||T("")},children:"项目:".concat(N.label)})]}),(0,r.jsxs)(o.A.Compact,{style:{width:"100%"},children:[(0,r.jsx)(m.A.TextArea,{ref:O,value:t,onChange:e=>n(e.target.value),onPressEnter:e=>{!e.shiftKey&&(e.preventDefault(),w||y||l())},autoSize:{minRows:1,maxRows:5},placeholder:"描述你的需求;可用上面的 @ 提及把节点带进正文(Enter 发送,Shift+Enter 换行)。篇幅由招标文件页数上限与标书类型自动决定:需求里写字数/页数不会改变篇幅目标",disabled:w}),(0,r.jsx)(i.A,{title:Q,children:(0,r.jsx)(s.Ay,{type:"primary",icon:(0,r.jsx)(g.A,{}),loading:y,disabled:w||L||!t.trim(),onClick:l,children:x?"排队提交":"生成"})})]})]})]})}},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,p=a.length>0?"结构预览:".concat(n,"(").concat(a.length," 章").concat(u?",大纲来源:".concat(u):"",")"):"结构预览:".concat(n);return(0,r.jsxs)(l.A,{open:t,title:p,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:"章和已声明小节来自用户提示词大纲。技能候选尚未确定位置;生成时会结合真实资料和技术职责进行专业规划,可能合并、调整或归入其他章节。 最终目录以完成规划后的文档为准。"}),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)=>{var n;return(0,r.jsx)(c.A.Item,{children:(0,r.jsx)(c.A.Item.Meta,{title:"".concat(t+1,". ").concat(e.title),description:(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{children:["用户声明:",(0,r.jsx)("span",{children:e.sections.length>0?e.sections.join("、"):"(未声明小节)"})]}),(null==(n=e.candidateSections)?void 0:n.length)?(0,r.jsxs)("div",{children:["技能候选(待规划):",(0,r.jsx)("span",{children:e.candidateSections.join("、")})]}):null]})})})}})]})}},45551:(e,t,n)=>{n.d(t,{Jm:()=>c,fw:()=>l,je:()=>r.j,mc:()=>s,z3:()=>a});var r=n(96538);function a(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 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," 分钟前"):"刚刚"}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:()=>s,VF:()=>l,WF:()=>i,be:()=>c,s_:()=>u,xA:()=>o});var r=n(97109),a=n(8090);let l=24;function o(e,t,n,r){let a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:.15,l=r&&r.right>r.left&&r.bottom>r.top?r:{left:0,top:0,right:n.width,bottom:n.height},o=Math.max(1,l.right-l.left),i=Math.max(1,l.bottom-l.top),c=e.x*t.k+t.x,s=e.y*t.k+t.y,u=c+e.width*t.k,d=s+e.height*t.k,m=l.left+o*a,p=l.right-o*a,f=l.top+i*a,h=l.bottom-i*a;return c<m||s<f||u>p||d>h}let i=12e3;function c(e){if(!e.following)return{label:"跟随最新",title:"跟随已关闭:点一下重新打开(打开后会跟着当前活跃节点走)",paused:!1};if(e.pausedUntil>e.now){let t=Math.max(1,Math.ceil((e.pausedUntil-e.now)/1e3));return{label:"跟随暂停中",title:"跟随暂停:".concat(t,"s 后自动恢复(你刚动过视口;不是关掉了)"),paused:!0}}return e.node?{label:"跟随中",title:"正在跟随:".concat(e.node.title).concat(void 0!==e.node.round?"(第 ".concat(e.node.round," 轮)"):""),paused:!1}:{label:"跟随中",title:"跟随中:当前没有活跃节点可跟(生成开始后会自动跟上)",paused:!1}}function s(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 u(){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},[]),p=(0,r.useCallback)(()=>t({x:0,y:0,k:1}),[]),f=(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=f(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=f(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:p,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),p=n(39507),f=n(6578),h=n(93533),g=n(45551);let v="canvas:recordsBallPos";function x(e){let{currentDocumentId:t,projectRoot:n,onSelect:x,onCurrentDeleted:w}=e,b=(0,p.Vr)(),{message:k}=l.A.useApp(),j=(0,a.useRef)(null),[A,I]=(0,a.useState)([]),[S,M]=(0,a.useState)(!1),[C,E]=(0,a.useState)(!1),[R,N]=(0,a.useState)(1),[_,T]=(0,a.useState)(!1),[B,D]=(0,a.useState)([]),[q,z]=(0,a.useState)(!1),[P,O]=(0,a.useState)(null),[F,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=j.current)||null==(e=t.parentElement)?void 0:e.getBoundingClientRect();if(!r)return void O(n);O({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 L=(0,a.useCallback)(async()=>{M(!0);try{let e=await (0,f.cQ)(n||void 0);I(e.documents||[])}catch(e){I([])}finally{M(!1)}},[n]);(0,a.useEffect)(()=>{L()},[L]),(0,a.useEffect)(()=>{C&&L()},[C,L]),(0,a.useEffect)(()=>{let e=setInterval(()=>{L()},3e3);return()=>clearInterval(e)},[L]),(0,a.useEffect)(()=>{N(1),D([])},[C]);let Q=(0,a.useMemo)(()=>A.slice((R-1)*8,8*R),[A,R]),Y=(0,a.useCallback)(e=>!(0,h.Ce)(e.status),[]),X=Q.filter(Y).map(e=>e.id),G=()=>{if(!C){var e,t,n;let r=null==(t=j.current)||null==(e=t.parentElement)?void 0:e.getBoundingClientRect(),a=null==(n=j.current)?void 0:n.getBoundingClientRect();U(!r||!a||a.top-r.top>252)}E(e=>!e)},K=async e=>{try{await (0,f.QG)(e.id,e.projectRoot||n||void 0),k.success(b("common.success")),D(t=>t.filter(t=>t!==e.id)),e.id===t&&w(),await L()}catch(e){k.error(b("common.error"))}},J=async()=>{let e=A.filter(e=>B.includes(e.id)&&Y(e));if(0!==e.length){z(!0);try{await Promise.all(e.map(e=>(0,f.QG)(e.id,e.projectRoot||n||void 0))),k.success(b("records.deletedCount").replace("{count}",String(e.length))),t&&e.some(e=>e.id===t)&&w(),D([]),T(!1),await L()}catch(e){k.error(b("common.error"))}finally{z(!1)}}},W=P?{left:P.left,top:P.top}:{right:24,bottom:96};return(0,r.jsxs)("div",{className:"canvasRecordsBall",ref:j,style:{position:"absolute",zIndex:3,...W},children:[C&&(0,r.jsxs)("div",{className:"canvasRecordsPanel",style:{position:"absolute",right:0,width:320,maxHeight:420,display:"flex",flexDirection:"column",...F?{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:[b("records.title"),(0,r.jsx)("span",{className:"ml-2 font-normal text-xs text-[var(--colorTextTertiary)]",children:A.length})]}),(0,r.jsx)("button",{type:"button",className:"canvasRecordsLink",onClick:()=>{T(e=>!e),D([])},children:_?b("common.cancel"):b("records.batch")})]}),(0,r.jsx)("div",{className:"flex-1 min-h-0 overflow-y-auto",children:S&&0===A.length?(0,r.jsx)("div",{className:"py-10 text-center",children:(0,r.jsx)(o.A,{size:"small"})}):0===A.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:b("records.empty")})})}):Q.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:[_&&(0,r.jsx)("input",{type:"checkbox",className:"mt-1 shrink-0",disabled:!l,checked:B.includes(e.id),onChange:t=>D(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),E(!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:b("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")]})]}),!_&&l&&(0,r.jsx)(c.A,{title:b("records.confirmDelete"),description:b("records.deleteHint"),onConfirm:()=>{K(e)},okText:b("common.confirm"),cancelText:b("common.cancel"),children:(0,r.jsx)("button",{type:"button",className:"canvasRecordsDelete",title:b("common.delete"),children:(0,r.jsx)(m.A,{})})}),!_&&!l&&(0,r.jsx)(s.A,{title:b("records.inFlightHint"),children:(0,r.jsx)("span",{className:"canvasRecordsDelete isDisabled",children:(0,r.jsx)(m.A,{})})})]},e.id)})}),A.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:A.length,pageSize:8,onChange:N})}),_&&(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:b("records.checkedCount").replace("{count}",String(B.length))}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("button",{type:"button",className:"canvasRecordsLink",onClick:()=>D(B.length===X.length?[]:X),children:B.length===X.length&&X.length>0?b("records.clearSelect"):b("records.selectPage")}),(0,r.jsx)(c.A,{title:b("records.confirmDeleteSelected").replace("{count}",String(B.length)),description:b("records.deleteHint"),disabled:0===B.length,onConfirm:()=>{J()},okText:b("common.confirm"),cancelText:b("common.cancel"),children:(0,r.jsxs)("button",{type:"button",className:"canvasRecordsDanger",disabled:0===B.length||q,children:[(0,r.jsx)(m.A,{className:"mr-1"}),b("records.deleteSelected")]})})]})]})]}),(0,r.jsxs)("div",{className:"canvasRecordsBallBtn",role:"button",tabIndex:0,"aria-label":"".concat(b("records.title"),"(").concat(A.length,")"),style:{width:44,height:44},onPointerDown:e=>{var t,n,r;let a=null==(n=j.current)||null==(t=n.parentElement)?void 0:t.getBoundingClientRect(),l=null==(r=j.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=j.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,O({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 O(e=>{if(e)try{window.localStorage.setItem(v,JSON.stringify(e))}catch(e){}return e});G()}},onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),G())},children:[(0,r.jsx)(d.A,{}),(0,r.jsx)("span",{className:"canvasRecordsBallBadge".concat(0===A.length?" isZero":""),children:A.length>99?"99+":A.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)]"}},93533:(e,t,n)=>{n.d(t,{Ce:()=>k,tl:()=>A});var r=n(97109),a=n(96538),l=n(94394),o=n(23216),i=n(26619),c=n(8263),s=n(16285),u=n(8579),d=n(29071),m=n(7851),p=n(1310),f=n(26631),h=n(83914),g=n(6578);async function v(e){let t,n=0;for(;;){var r,a;let l;if(e.cancelled())throw Error("用户中止");try{l=await e.read(t)}catch(t){if(e.cancelled())throw Error("用户中止",{cause:t});1===(n+=1)&&(null==(r=e.connectionInterrupted)||r.call(e,t)),await e.delay(Math.min(2e3*n,15e3));continue}n=0;let o=l.document;if(!o){if(!l.unchanged&&!l.status)throw Error("未找到生成记录,无法读取该任务进度");["paused","failed","aborted","completed","completed_with_issues","warning"].includes(null!=(a=l.status)?a:"")&&(t=void 0),await e.delay(1500);continue}if(t=o.updatedAt,e.apply(o),"paused"===o.status)return o;if("failed"===o.status||"aborted"===o.status)throw Error(o.error||("aborted"===o.status?"生成已中止":"生成失败"));if(["completed","completed_with_issues","warning"].includes(o.status)){if(o.draft)return o;throw Error(o.error||"服务任务已结束,但最终成稿未完成;已保存的正文可在生成记录中查看")}await e.delay(1500)}}let x=null,y=!1;function w(){null==x||x.listeners.forEach(e=>e())}let b=l.i_;function k(e){return"completed"!==e&&"completed_with_issues"!==e&&"warning"!==e&&"failed"!==e&&"aborted"!==e&&"paused"!==e}function j(e){var t,n,a,l,h,g,v,x,y;let w=null==(t=e.agentWorkflow)?void 0:t.nodes;if(!w||0===w.length)return null;let k=[...w].sort((e,t)=>{var n,r;return(null!=(n=e.seq)?n:0)-(null!=(r=t.seq)?r:0)}).map(e=>{let t=b[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)(o.A):"knowledge_retrieval"===e||"understand"===t?(0,r.createElement)(i.A):"file_understanding"===e||"skill"===t?(0,r.createElement)(c.A):"fact_extraction"===e?(0,r.createElement)(s.A):"chapter_generation"===e||"chapter"===t||"write"===t?(0,r.createElement)(u.A):"llm_review"===e||"turn"===t||"round"===t?(0,r.createElement)(d.A):"validation"===e||"repair"===t||"recheck"===t?(0,r.createElement)(m.A):"plan"===t||"blueprint"===t?(0,r.createElement)(o.A):"rollback"===t||"snapshot"===t?(0,r.createElement)(p.A):(0,r.createElement)(f.A)}(e.type),subSteps:[]}}),j="generating"===e.status||"queued"===e.status?null!=(v=null!=(g=null==(n=k.find(e=>"process"===e.status))?void 0:n.key)?g:null==(a=k.at(-1))?void 0:a.key)?v:null:("failed"===e.status||"aborted"===e.status)&&null!=(y=null!=(x=null==(l=k.find(e=>"error"===e.status))?void 0:l.key)?x:null==(h=k.at(-1))?void 0:h.key)?y:null;return{steps:k,activeKey:j}}function A(){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,p]=(0,r.useState)(null),[f,b]=(0,r.useState)(!1),[A,I]=(0,r.useState)(null),[S,M]=(0,r.useState)(""),[C,E]=(0,r.useState)(null),[R,N]=(0,r.useState)(null!=(e=n.documentId)?e:null),[_,T]=(0,r.useState)(null),[B,D]=(0,r.useState)(null!=o?o:[]),[q,z]=(0,r.useState)(0),[P,O]=(0,r.useState)(null),[F,U]=(0,r.useState)([]),[H,L]=(0,r.useState)(null),[Q,Y]=(0,r.useState)(null),X=(0,r.useRef)(""),G=(0,r.useRef)(new Map),K=(0,r.useRef)(new Map),J=(0,r.useRef)(!1),W=(0,r.useRef)(l),V=(0,r.useRef)(R),Z=(0,r.useRef)(u),$=(0,r.useRef)(m),ee=(0,r.useRef)(f),et=(0,r.useRef)(c),en=(0,r.useRef)(i),er=(0,r.useRef)(s);(0,r.useEffect)(()=>{W.current=l},[l]),(0,r.useEffect)(()=>{V.current=R},[R]),(0,r.useEffect)(()=>{Z.current=u},[u]),(0,r.useEffect)(()=>{$.current=m},[m]),(0,r.useEffect)(()=>{ee.current=f},[f]),(0,r.useEffect)(()=>{et.current=c},[c]),(0,r.useEffect)(()=>{en.current=i},[i]),(0,r.useEffect)(()=>{er.current=s},[s]);let ea=(0,r.useMemo)(()=>"activeGenDocId:".concat(l||"default"),[l]),el=(0,r.useCallback)(e=>{var t;null==(t=en.current)||t.call(en,e)},[]),eo=(0,r.useCallback)((e,t)=>{var n,r;return null!=(r=null==(n=et.current)?void 0:n.call(et,e))?r:t},[]);(0,r.useEffect)(()=>{let e=()=>{let e=x;e&&(d(e.flowSteps),p(e.activeFlowKey),b(e.loading),e.documentId&&N(e.documentId),e.draft&&I(e.draft),void 0!==e.content&&M(e.content))},t=x;return null==t||t.listeners.add(e),e(),()=>{null==t||t.listeners.delete(e)}},[]);let ei=(0,r.useRef)(!1),ec=(0,r.useCallback)(async()=>{try{D((await (0,g.cQ)(W.current||void 0)).documents),ei.current=!1}catch(e){ei.current||(ei.current=!0,el({kind:"error",text:"生成记录列表读取失败——界面显示的可能不是最新内容,请稍后重试或查看服务端日志"}))}},[el]);(0,r.useEffect)(()=>{o&&D(o)},[o]),(0,r.useEffect)(()=>{void 0!==n.documentId&&null!==n.documentId&&N(n.documentId)},[n.documentId]);let es=(0,r.useCallback)(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:ee.current;(null==x?void 0:x.loading)&&(x.flowSteps=e,x.activeFlowKey=t,x.loading=n,w())},[]),eu=(0,r.useCallback)(e=>{let t=Date.now();for(let n of e){let e=G.current.get(n.key);"process"!==n.status||e?("finish"===n.status||"error"===n.status||"warning"===n.status)&&e&&!e.endedAt&&G.current.set(n.key,{...e,endedAt:t}):G.current.set(n.key,{startedAt:t})}},[]),ed=(0,r.useCallback)(e=>{var t,n,r,a,l,o,i,c,s,u,m;let f=(null==(t=e.agentWorkflow)?void 0:t.nodes)||[],h="".concat(e.id,"|").concat(e.updatedAt,"|").concat(e.status,"|").concat(e.error||"","|n").concat(f.length,":").concat(f.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(X.current===h)return;X.current=h,E(e);let{steps:g,activeKey:v}=function(e){var t;return arguments.length>1&&void 0!==arguments[1]&&arguments[1],null!=(t=j(e))?t:{steps:[],activeKey:null}}(e);eu(g);let x=k(e.status);d(g),p(v),b(x),es(g,v,x),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),M(e.editedMarkdown||e.markdown),U(e.exportReports||[]),Y({docId:e.id,...(null==(n=e.deliveryQuality)?void 0:n.receipt)||(null==(r=e.reviewMetadata)?void 0:r.contractQuality)?{contractQuality:null!=(u=null==(a=e.deliveryQuality)?void 0:a.receipt)?u:e.reviewMetadata.contractQuality}:{},...(null==(l=e.deliveryQuality)?void 0:l.stale)||(null==(o=e.reviewMetadata)?void 0:o.contractQualityStale)?{contractQualityStale:null!=(m=null==(i=e.deliveryQuality)?void 0:i.stale)?m:e.reviewMetadata.contractQualityStale}:{},...e.projectRoot?{projectRoot:e.projectRoot}:{},...(null==(s=e.reviewMetadata)||null==(c=s.telemetry)?void 0:c.repairChainNetChars)?{netChars:e.reviewMetadata.telemetry.repairChainNetChars}:{}}))},[es,eu]),em=(0,r.useCallback)(e=>{e.id&&N(e.id),ed(e)},[ed]),ep=(0,r.useCallback)((e,t)=>v({cancelled:()=>!!(null==t?void 0:t.aborted),apply:ed,delay:e=>new Promise(t=>window.setTimeout(t,e)),connectionInterrupted:()=>el({kind:"warning",text:"暂时无法读取生成进度,正在重新连接;生成状态以服务端回执为准"}),read:async n=>{let r=new AbortController;t&&(t.pollController=r);try{return await (0,g.v7)(e,!0,W.current||void 0,r.signal,n)}finally{(null==t?void 0:t.pollController)===r&&(t.pollController=void 0)}}}),[ed,el]),ef=(0,r.useCallback)(async(e,t)=>{if(!e.specId)return;let n=e.title,a=e.promptIds,l=e.projectRoot||W.current;if((null==x?void 0:x.aborted)&&(x=null),null==x?void 0:x.loading){if(J.current)return;if(!l)return void el({kind:"error",text:"未识别当前项目,请先选择或打开项目后再生成文件"});J.current=!0;try{let e=await (0,g.OX)({promptIds:a,...n?{title:n}:{},requirement:t,projectRoot:l});await ec(),el({kind:"info",text:e.queuePosition?"已加入生成队列(第 ".concat(e.queuePosition," 位):前面任务完成后将自动开始"):"生成任务已创建"})}catch(e){el({kind:"error",text:e instanceof Error?e.message:"创建生成任务失败"})}finally{J.current=!1}return}if(!l)return void el({kind:"error",text:"未识别当前项目,请先选择或打开项目后再生成文件"});b(!0);let o=Z.current,i=o.length>0?o:[{key:"prepare",title:"正在创建生成任务",description:"系统正在创建后台生成任务,请稍候。",status:"process",icon:(0,r.createElement)(h.A),subSteps:[{key:"start",title:"准备生成任务",status:"process"}]}],c=$.current||"prepare";d(i),p(c);let s=(0,g.OX)({promptIds:a,...n?{title:n}:{},requirement:t,projectRoot:l});x={id:Date.now(),specId:e.specId,loading:!0,flowSteps:i,activeFlowKey:c,promise:s,listeners:new Set};try{var u,m,f,v,k,A;let t=await s;t.documentId&&(localStorage.setItem(ea,t.documentId),N(t.documentId),(null==x?void 0:x.promise)===s&&(x.documentId=t.documentId)),await ec(),t.queuePosition&&el({kind:"info",text:"已加入生成队列(第 ".concat(t.queuePosition," 位):前面任务完成后将自动开始")});let n=t.documentId?await ep(t.documentId,(null==x?void 0:x.promise)===s?x:void 0):void 0;if((null==n?void 0:n.status)==="paused"){(null==x?void 0:x.promise)===s&&(x.loading=!1,w(),x=null),localStorage.removeItem(ea),await ec(),el({kind:"info",text:"生成已在节点边界暂停,已保存实际正文和执行状态"});return}let r=t.draft||(null==n?void 0:n.draft);if(!r)throw Error("生成结果为空");(t.documentId||(null==n?void 0:n.id))&&N(t.documentId||n.id),I(r),M((null==n?void 0:n.editedMarkdown)||(null==n?void 0:n.markdown)||r.markdown),(null==x?void 0:x.promise)===s&&(x.draft=r,x.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==(f=t.record)?void 0:f.templateName)||(null==(v=t.documentSpec)?void 0:v.title),title:r.title,requirement:r.requirement,projectRoot:r.projectRoot||W.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!=(A=j(a))?A:{steps:[],activeKey:null};d(l),es(l,"done",!1),p("done"),(null==x?void 0:x.promise)===s&&(x.activeFlowKey="done",x.loading=!1,w(),x=null),localStorage.removeItem(ea),await ec(),el("completed"===a.status?{kind:"success",text:"生成完成,专业交付检查已通过"}:{kind:"warning",text:"本轮运行已结束,实际稿仍有问题待复核,可导出审阅稿"}),(t.documentId||(null==n?void 0:n.id))&&(null==(k=er.current)||k.call(er,t.documentId||n.id))}catch(r){localStorage.removeItem(ea);let e=r instanceof Error?r.message:eo("common.error","出错了"),t=y;y=!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 es(n,$.current,!1),n}),(null==x?void 0:x.promise)===s&&(x.loading=!1,x.error=e,w(),x=null),await ec(),n?el({kind:"warning",text:"生成任务已被中止(可能来自其他窗口):可在列表中点击「继续生成」恢复"}):t||el({kind:"error",text:e})}finally{b(!1),y=!1,(null==x?void 0:x.promise)===s&&(x.loading=!1,w())}},[el,ec,es,ea,eo,ep]),eh=(0,r.useCallback)(e=>{let t=K.current.get(e);t&&(clearInterval(t),K.current.delete(e))},[]),eg=(0,r.useCallback)((e,t)=>{eh(e);let n=setInterval(()=>{(async()=>{try{let{document:n}=await (0,g.v7)(e,!0,t||W.current||void 0);if(!n)return;ed(n),await ec(),k(n.status)||(eh(e),localStorage.removeItem(ea))}catch(e){}})()},2e3);K.current.set(e,n)},[ed,ec,eh,ea]);(0,r.useEffect)(()=>()=>{for(let e of K.current.values())clearInterval(e);K.current.clear()},[]),(0,r.useEffect)(()=>{if(0===B.length)return;let e=localStorage.getItem(ea);if(!e)return;if(!B.find(t=>t.id===e&&("generating"===t.status||"queued"===t.status)))return void localStorage.removeItem(ea);N(e);let t=setInterval(()=>{(async()=>{try{let{document:n}=await (0,g.v7)(e,!1,W.current||void 0);if(!n)return;await ec(),"generating"!==n.status&&"queued"!==n.status&&(localStorage.removeItem(ea),clearInterval(t))}catch(e){clearInterval(t)}})()},3e3);return()=>clearInterval(t)},[B,ec,ea]),(0,r.useEffect)(()=>{var e;if(!R)return;let t=B.find(e=>e.id===R),n=null!=(e=null==t?void 0:t.status)?e:null==C?void 0:C.status;n&&k(n)?eg(R,(null==t?void 0:t.projectRoot)||W.current):eh(R)},[R,B,eg,eh,null==C?void 0:C.status]),(0,r.useEffect)(()=>{if(!f||!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 es(t,m),t}),1400);return()=>window.clearInterval(e)},[m,f,es]),(0,r.useEffect)(()=>{if(!f)return;let e=window.setInterval(()=>z(e=>e+1),1e3);return()=>window.clearInterval(e)},[f]);let ev=(0,r.useCallback)(e=>{var t;let n=G.current.get(e);if(!n)return null;let r=null!=(t=n.endedAt)?t:Date.now(),l=(0,a.a)(r-n.startedAt,{unit:"ms",style:"fine"});return n.endedAt?l:"".concat(l,"(运行中)")},[q]),ex=(0,r.useCallback)(async e=>{x&&(y=!0);let t=V.current,n=null;if(t&&await (0,g.r)(t,e||W.current||void 0).catch(e=>{n=e}),x){var r;x.aborted=!0,null==(r=x.pollController)||r.abort(),x.loading=!1,x.error="用户中止",w(),x=null}for(let e of(localStorage.removeItem(ea),K.current.values()))clearInterval(e);K.current.clear(),b(!1),d([]),p(null),T("用户中止"),await ec(),el(n?{kind:"error",text:"本地已停止跟踪,但服务端未确认中止(".concat(n instanceof Error?n.message:String(n),")——任务可能仍在后台运行,请稍后重试或查看服务端日志")}:{kind:"success",text:"已中止生成任务"})},[el,ec,ea]),ey=(0,r.useCallback)(async e=>{if((null==x?void 0:x.loading)&&x.documentId===e.id){var t;y=!0,x.aborted=!0,null==(t=x.pollController)||t.abort(),x.loading=!1,x.error="用户中止",w(),x=null,b(!1)}localStorage.removeItem(ea),eh(e.id);try{await (0,g.r)(e.id,e.projectRoot||W.current||void 0),el({kind:"success",text:"queued"===e.status?"已取消排队任务":"已中止生成任务"})}catch(e){el({kind:"info",text:"任务已不在运行,已刷新状态"})}finally{await ec(),V.current===e.id&&(N(null),E(null),I(null),M(""))}},[el,ec,eh,ea]),ew=(0,r.useCallback)(async e=>{try{N(e.id),b(!0);let t=await (0,g.UQ)(e.id,e.projectRoot||W.current||void 0);localStorage.setItem(ea,t.documentId),await ec();let n=await ep(t.documentId);n.draft&&(I(n.draft),M(n.editedMarkdown||n.markdown||n.draft.markdown)),localStorage.removeItem(ea),await ec(),el("paused"===n.status?{kind:"info",text:"生成已暂停,实际稿已保存"}:"completed"===n.status?{kind:"success",text:"已继续生成并通过专业交付检查"}:{kind:"warning",text:"继续生成已结束,实际稿仍待复核,可导出审阅稿"})}catch(e){el({kind:"error",text:e instanceof Error?e.message:"继续生成失败"})}finally{b(!1)}},[el,ec,ea,ep]),eb=(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||W.current||void 0})});if(!n.ok)throw Error(await n.text()||"HTTP ".concat(n.status));let r=await n.json();return el({kind:"success",text:r.message||"已请求暂停:正在取消模型调用并保存已完成正文"}),await ec(),eg(e,t),r},[el,ec,eg]),ek=(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||W.current||void 0})});if(!n.ok)throw Error(await n.text()||"HTTP ".concat(n.status));let r=await n.json().catch(()=>void 0),a=null==r?void 0:r.resumeReuse;el(a?{kind:0===a.blockers.length?"info":"warning",text:"已请求继续:".concat(a.reason)}:{kind:"info",text:"已请求继续:将复用已保存的检查点"}),await ec()},[el,ec]),ej=(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)},[]),eA=(0,r.useCallback)(async(e,t)=>{let n=await (0,g.hU)(e,t);ej(n.blob,n.filename,"application/json;charset=utf-8")},[ej]),eI=(0,r.useCallback)(async(e,t,n)=>{try{let{blob:r,filename:a,receipt:l,gateIssues:o}=await (0,g.UE)(e);ej(r,a||t,n),L("review"===l.exportPurpose?{at:Date.now(),count:o.length,issues:o}:null),l.issuesReport&&await eA(e,l.issuesReport)}catch(t){throw t instanceof g.GA&&t.receipt.issuesReport&&await eA(e,t.receipt.issuesReport),t}},[ej,eA]),eS=(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"}),[]),eM=(0,r.useCallback)(async(e,t)=>{var n,r;let a=void 0!==e.editedMarkdown?e.editedMarkdown:e.markdown||(null==(n=e.draft)?void 0:n.markdown)||"",l=void 0===e.editedMarkdown&&(null==(r=e.checkpointChapters)?void 0:r.some(e=>{var t;return null==(t=e.content)?void 0:t.trim()}));if(!a.trim()&&!l)return void el({kind:"warning",text:"该记录暂无可导出的正文内容"});O(t);let o={exportPurpose:"review",documentId:e.id,title:e.title,format:t,projectRoot:e.projectRoot||W.current||void 0};try{await eI(o,"".concat(e.title,".").concat("markdown"===t?"md":t),eS[t])}catch(e){el({kind:"error",text:e instanceof Error?e.message:"导出失败"})}finally{O(null)}},[eI,eS,el]),eC=(0,r.useCallback)(async e=>{if(!A)return;O(e);let t={exportPurpose:"review",documentId:V.current||void 0,title:A.title,markdown:S,format:e,exportGate:A.exportGate,useClientMarkdown:!0,projectRoot:A.projectRoot||W.current||void 0};try{if(await eI(t,"".concat(A.title,".").concat("markdown"===e?"md":e),eS[e]),V.current)try{let{document:e}=await (0,g.v7)(V.current,!1,A.projectRoot||W.current||void 0);e&&U(e.exportReports||[])}catch(e){}}catch(e){el({kind:"error",text:e instanceof Error?e.message:"导出失败"})}finally{O(null)}},[S,eI,A,eS,el]),eE=R&&null!=(t=B.find(e=>e.id===R))?t:C,eR=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==eE?void 0:eE.status,f);return{flowSteps:u,activeFlowKey:m,loading:f,draft:A,content:S,workflowRecord:C,documentId:R,documents:B,error:_,phase:eR,flowTick:q,boundRecord:eE,canResume:function(e){var t,n,r,a,l,o,i,c;if(!e)return{resumable:!1,kind:"not-resumable",reason:"记录不存在"};let s=String(e.status||""),u=null!=(r=null==(t=e.checkpointChapters)?void 0:t.length)?r:0,d=u>0,m="number"==typeof e.interruptedAt||!!e.interruptionReason;if(null!=(a=e.running)?a:"generating"===s||"queued"===s)return{resumable:!1,kind:"not-resumable",reason:"这次生成还在跑(续跑入口不该在运行态出现)"};if("paused"===s)return{resumable:!0,kind:"paused",reason:"暂停是可逆的:从检查点接着跑,未受影响的章会被复用"};if(m)return d?{resumable:!0,kind:"interrupted",reason:"上次运行被中断(".concat(null!=(l=e.interruptionReason)?l:"中断标记",")且留有 ").concat(u," 个检查点章:续跑只补未完成的章")}:{resumable:!1,kind:"not-resumable",reason:"这次运行被中断且**没有检查点章**:续跑等于全量重跑,请用新建生成(这里不伪装成续跑)"};if("warning"===s)return d?{resumable:!0,kind:"interrupted",reason:"上次运行留下了 ".concat(u," 个检查点章(状态 warning):续跑只补未完成的章")}:{resumable:!1,kind:"not-resumable",reason:"warning 且没有检查点章:没有可接着跑的东西,请用新建生成"};let p=null!=(o=null==(n=e.draft)?void 0:n.exportGate)?o:e.exportGate;if((null==p?void 0:p.passed)===!1){let e=null!=(c=null==(i=p.blockingIssues)?void 0:i.length)?c:0;return{resumable:!0,kind:"gate-blocked-repair",reason:"门禁未过(".concat(e>0?"".concat(e," 项阻断"):"阻断清单未随记录落盘","):续跑把阻断项交回生成侧修复(回源修复,不是重新生成)")}}return"completed"===s?{resumable:!1,kind:"not-resumable",reason:'这份稿已完成:要再跑请新建生成("继续"会把已定的交付物再推一遍)'}:"completed_with_issues"===s||"failed"===s||"aborted"===s?{resumable:!0,kind:"resumable-terminal",reason:"completed_with_issues"===s?"已收口但有未过项:续跑把未过项交回生成侧修复(回源修复,不是重新生成)".concat(d?";复用 ".concat(u," 个检查点章"):""):"aborted"===s?"这份稿被中止过:续跑从中断处接着跑".concat(d?"(复用 ".concat(u," 个检查点章)"):"(无检查点 ⇒ 全量重跑)"):"上次生成失败:续跑接着跑".concat(d?"(复用 ".concat(u," 个检查点章)"):"(无检查点 ⇒ 全量重跑)")}:{resumable:!1,kind:"not-resumable",reason:"当前状态(".concat(s||"未知",")没有可续跑的线索")}}(eE).resumable,startGeneration:ef,abortGeneration:ex,abortDocument:ey,resumeDocument:ew,pauseDocument:eb,resumePausedDocument:ek,applyRecord:em,refreshDocuments:ec,waitForDoc:ep,stepDurationText:ev,setDraft:I,setContent:M,setExportReports:U,export:{exporting:P,nonDeliverableExport:H,exportRecord:eM,exportEditor:eC,downloadExport:eI,exportReports:F},deliveryReadings:Q}}},94394:(e,t,n)=>{n.d(t,{i_:()=>r,uh:()=>a});let r={role_binding:"项目角色配置绑定",knowledge_retrieval:"知识库证据检索",file_understanding:"项目资料理解",fact_extraction:"事实抽取",chapter_generation:"章节正文生成",llm_review:"独立复核",validation:"规则与准入校验",reference:"资料增强"},a={success:"完成",running:"进行中",failed:"失败",skipped:"跳过",partial:"部分生效",pending:"等待中"}},96538:(e,t,n)=>{n.d(t,{a:()=>a,j:()=>l});let r={coarse:function(e,t){let n=Math.floor(e/1e3),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":"刚刚"},fine:function(e){let t=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," 分")},"fine-decimal":function(e){return e>=6e4?"".concat(Math.floor(e/6e4)," 分 ").concat(Math.round(e%6e4/1e3)," 秒"):"".concat((e/1e3).toFixed(1)," 秒")},metric:function(e){return e<1e3?"".concat(Math.round(e),"ms"):e<6e4?"".concat((e/1e3).toFixed(1),"s"):"".concat((e/6e4).toFixed(1),"min")}};function a(e,t){var n;return r[t.style](function(e,t){let n="s"===t?1e3*e:e;return Number.isFinite(n)&&n>0?n:0}(e,t.unit),null!=(n=t.locale)?n:"zh-CN")}function l(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"zh-CN";return a(e,{unit:"s",style:"coarse",locale:t})}}}]);
|