@customize-agent/server 4.60.2 → 4.60.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +56 -54
  3. package/.next/prerender-manifest.json +3 -3
  4. package/.next/required-server-files.json +1 -1
  5. package/.next/server/chunks/1243.js +1 -1
  6. package/.next/server/chunks/2328.js +1 -1
  7. package/.next/server/chunks/{7848.js → 4683.js} +89 -86
  8. package/.next/server/chunks/5304.js +1 -1
  9. package/.next/server/chunks/6321.js +1 -1
  10. package/.next/server/chunks/6822.js +1 -1
  11. package/.next/server/chunks/8204.js +1 -1
  12. package/.next/server/chunks/9399.js +1 -0
  13. package/.next/server/chunks/9666.js +58 -55
  14. package/.next/server/instrumentation.js +1 -1
  15. package/.next/server/instrumentation.js.nft.json +1 -1
  16. package/.next/server/middleware-build-manifest.js +1 -1
  17. package/.next/server/pages/404.html +1 -1
  18. package/.next/server/pages/500.html +1 -1
  19. package/.next/server/pages/api/documents/export.js +2 -2
  20. package/.next/server/pages/api/documents/generate/preview.js +1 -1
  21. package/.next/server/pages/api/documents/generate.js +1 -1
  22. package/.next/server/pages/api/health.js +1 -1
  23. package/.next/server/pages/canvas/[id].html +1 -1
  24. package/.next/server/pages/canvas.html +1 -1
  25. package/.next/server/pages/documents.html +1 -1
  26. package/.next/server/pages/guide.html +1 -1
  27. package/.next/server/pages/index.html +1 -1
  28. package/.next/server/pages/knowledge/file-detail.html +1 -1
  29. package/.next/server/pages/knowledge/files.html +1 -1
  30. package/.next/server/pages/knowledge/manage.html +1 -1
  31. package/.next/server/pages/knowledge/source-preview.html +1 -1
  32. package/.next/server/pages/knowledge.html +1 -1
  33. package/.next/server/pages/models.html +1 -1
  34. package/.next/server/pages/overview.html +1 -1
  35. package/.next/server/pages/prompt.html +1 -1
  36. package/.next/server/pages/settings.html +1 -1
  37. package/.next/server/pages/skills/[id]/edit.html +1 -1
  38. package/.next/server/pages/skills/[id]/edit.js.nft.json +1 -1
  39. package/.next/server/pages/skills/[id].html +1 -1
  40. package/.next/server/pages/skills/[id].js.nft.json +1 -1
  41. package/.next/server/pages/skills/new.html +1 -1
  42. package/.next/server/pages/skills/new.js.nft.json +1 -1
  43. package/.next/server/pages/skills.html +1 -1
  44. package/.next/server/pages/system/logs.html +1 -1
  45. package/.next/server/pages-manifest.json +30 -30
  46. package/.next/static/77a0c591cb44f2d0fda8be7c18cd915e32ecb5272d201914c0e332124a63d539/_buildManifest.js +1 -0
  47. package/.next/static/chunks/2-8570cd2beee4da6e.js +1 -0
  48. package/.next/static/chunks/257-3ea888b096943bc8.js +1 -0
  49. package/.next/static/chunks/280-3ce590d421b5c47d.js +16 -0
  50. package/.next/static/chunks/425-42f2568bcdd98f4c.js +1 -0
  51. package/.next/static/chunks/530-7e79396d68742829.js +1 -0
  52. package/.next/static/chunks/564-d3426eef3e3e415b.js +4 -0
  53. package/.next/static/chunks/576-6699fed6c88502fe.js +1 -0
  54. package/.next/static/chunks/579-fc0a2eb64aedb001.js +1 -0
  55. package/.next/static/chunks/{795-1a33b085051ecf2b.js → 795-1c1cb3bf1f600e99.js} +1 -1
  56. package/.next/static/chunks/819-96247c9054ad9683.js +1 -0
  57. package/.next/static/chunks/{964-82cc4701f08f7351.js → 964-569c27befeaff602.js} +2 -2
  58. package/.next/static/chunks/pages/{_app-3df96a32b2c9a6ca.js → _app-3f5aa4ff7951feca.js} +3 -3
  59. package/.next/static/chunks/pages/canvas/[id]-534b45f39f39630c.js +1 -0
  60. package/.next/static/chunks/pages/{canvas-8372faba7b5bb116.js → canvas-ffb08963e5cf9558.js} +1 -1
  61. package/.next/static/chunks/pages/knowledge/{file-detail-6c8b86752d2ddf88.js → file-detail-4ccc50ced6382dab.js} +1 -1
  62. package/.next/static/chunks/pages/knowledge/source-preview-56ce59763fa015db.js +1 -0
  63. package/.next/static/chunks/pages/knowledge-84e386d765ddd311.js +1 -0
  64. package/.next/static/chunks/pages/{models-dde7dc26b2ee4b83.js → models-5eee2d09deb081fb.js} +1 -1
  65. package/.next/static/chunks/pages/prompt-f00bf2272142bfa1.js +1 -0
  66. package/.next/static/chunks/pages/{settings-8ebbd4413f976a60.js → settings-f6dfff648cf9ac0e.js} +1 -1
  67. package/.next/static/chunks/pages/skills/[id]/{edit-334c249d48dc651d.js → edit-89bbed9a3a854b04.js} +1 -1
  68. package/.next/static/chunks/pages/skills/[id]-101d753aa8fbf7a9.js +1 -0
  69. package/.next/static/chunks/pages/skills/{new-750c28325b6c869a.js → new-124599c772150a1d.js} +1 -1
  70. package/.next/static/chunks/pages/{skills-25f02f34e4a24e7e.js → skills-476714776be63ce5.js} +1 -1
  71. package/.next/static/chunks/pages/system/logs-40edb648d89b0749.js +1 -0
  72. package/.next/static/css/39e9d8f998ce517b.css +1 -0
  73. package/package.json +1 -1
  74. package/public/apple-touch-icon.png +0 -0
  75. package/public/favicon.ico +0 -0
  76. package/public/favicon.svg +9 -0
  77. package/scripts/brand-moon-fit.cjs +147 -0
  78. package/scripts/generate-brand-assets.cjs +152 -0
  79. package/.next/static/cf07df1d78876548cb59ce9935b756d62660ad2a6b02180bef97865f98fcc4c8/_buildManifest.js +0 -1
  80. package/.next/static/chunks/257-9484b4285bd5f43b.js +0 -1
  81. package/.next/static/chunks/530-ccc3837d353bcf74.js +0 -1
  82. package/.next/static/chunks/573-c52901488f5731dd.js +0 -4
  83. package/.next/static/chunks/576-052a39d403d5d32e.js +0 -1
  84. package/.next/static/chunks/638-29ddb55b708c7969.js +0 -1
  85. package/.next/static/chunks/712-1f2d7c40d613f4d8.js +0 -1
  86. package/.next/static/chunks/815-585fb0b4aa9b369c.js +0 -16
  87. package/.next/static/chunks/933-e9c4889bb9f825ce.js +0 -1
  88. package/.next/static/chunks/pages/canvas/[id]-996d9a43ff45a4b3.js +0 -1
  89. package/.next/static/chunks/pages/knowledge/source-preview-c803a44df4b1d2f2.js +0 -1
  90. package/.next/static/chunks/pages/knowledge-135c4c9260f07108.js +0 -1
  91. package/.next/static/chunks/pages/prompt-7559b2569b3934a5.js +0 -1
  92. package/.next/static/chunks/pages/skills/[id]-eb1bdec00ba09ad2.js +0 -1
  93. package/.next/static/chunks/pages/system/logs-e08749c3a8f9a104.js +0 -1
  94. package/.next/static/css/5bab0d7ea874d4e0.css +0 -1
  95. /package/.next/static/{cf07df1d78876548cb59ce9935b756d62660ad2a6b02180bef97865f98fcc4c8 → 77a0c591cb44f2d0fda8be7c18cd915e32ecb5272d201914c0e332124a63d539}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- "use strict";exports.id=6321,exports.ids=[6321],exports.modules={1168:(a,b,c)=>{c.d(b,{EL:()=>H,zT:()=>G,II:()=>F,bJ:()=>M,Jr:()=>D,O0:()=>V,uj:()=>u,GC:()=>t,qj:()=>P,x8:()=>E,Kg:()=>K,uH:()=>T,Qs:()=>B,PI:()=>N,dB:()=>W,Jy:()=>S,uv:()=>r,vp:()=>w,m_:()=>q,kH:()=>A,z9:()=>y,Aq:()=>R,RV:()=>O,Kq:()=>I});var d=c(82015),e=c(79270),f=c(28017);let g=["failed","paused","repairing","blocked","running","pending","completed"],h=["chars","costUsd"];function i(a,b){return a.seq!==b.seq?a.seq-b.seq:a.id===b.id?0:a.id<b.id?-1:1}function j(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(i);return b}function k(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 l=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"]),m=new Set(["failed","paused","repairing","blocked","running","pending","completed"]);var n=c(30145);let o={pending:{key:"common.statusWaiting",text:"等待中",color:"default"},running:{key:"common.statusRunning",text:n.uh.running,color:"processing"},completed:{key:"common.statusCompleted",text:n.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 p(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 q(a,b){return p(o,a,"状态",b)}function r(a){return o[a]?.color??"default"}let s={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 t(a,b){return p(s,a,"记录状态",b)}function u(a){return s[a]?.color??"default"}let v=["failed","paused","repairing","blocked","running","pending","completed"];function w(a){let b=v.indexOf(a);return b>=0?b:v.length}let x={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 y(a){return a?x[a]??a:"未知节点"}let z={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),resume:(0,d.createElement)(e.OrderedListOutlined),default:(0,d.createElement)(e.ToolOutlined)};function A(a){return z[a.split(".")[0]||a]??z.default}function B(a){return z[a]??z.default}function C(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)&&m.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 D(a,b){let c=new Map(a.map(a=>[a.id,a]));return(function(a,b){let c=function(a){let b=j(a),c=k(a),d=[...a].sort((a,b)=>(c.get(b.id)??0)-(c.get(a.id)??0)||i(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(i),d={...a.metrics??{}};for(let b of h){let e=function(a,b,c){let d=0,e=!1,f=a.metrics?.[c];for(let a of("number"==typeof f&&Number.isFinite(f)&&(d+=f,e=!0),b)){let b=a.metrics?.[c];"number"==typeof b&&Number.isFinite(b)&&(d+=b,e=!0)}return e?d:void 0}(a,c,b);void 0===e?delete d[b]:d[b]=e}let e=a.progress?.label,f={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=g.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:f,...Object.keys(d).length>0?{metrics:d}:{},...j.length>0?{issues:j}:{}}}(a,d))}return[...a].sort(i).map(a=>e.get(a.id)??a)}(a),d=j(c),e=new Set(c.map(a=>a.id)),f=1/0,l=(a,b)=>{let c=b+1<f?(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(i).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=k(a),d=Math.max(0,Math.floor(b));return a.filter(a=>(c.get(a.id)??0)<d)}(a.map(C),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&&l.has(e)),title:b.title||y(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 E(a){let b=[],c=a=>{for(let d of a)b.push(d),c(d.children)};return c(a),b.sort(i)}function F(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 G=236,H=76;function I(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 J=new Set(["running","repairing"]);function K(a){let b=new Set(a.nodes.filter(a=>J.has(a.node.status)).map(a=>a.node.id));if(0===b.size)return L;let c=new Set;for(let d of a.edges)b.has(d.fromId)&&c.add(d.id);return c}let L=new Set;function M(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 N(a){let b=[],c=[],d=0,e=(a,f)=>{let g,h=a.children,i=40+f*(G+72),j=h.map(a=>({id:a.id,...e(a,f+1)}));for(let e of(0===j.length?(g=40+d*(H+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+G/2,y1:g+H,x2:e.x+G/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+G),0),g=b.reduce((a,b)=>Math.max(a,b.y+H),0);return{nodes:b,edges:c,width:f+40,height:g+40}}function O(a,b){let c=[`影响面:${b.kind}`,`波及 ${b.affectedNodeIds.length} 个节点`,...b.escalate?["超出阈值需人工确认"]:[],...b.rollbackable?[]:["不可回滚:按 11.1 需回滚或重新校准,不得当普通改动提交"]];return`请修复节点「${a}」(${c.join(",")})`}function P(a,b){let c=b>0?b:1;return{dx:a.dx/c,dy:a.dy/c}}let Q=(a,b)=>a.left<b.right&&a.right>b.left&&a.top<b.bottom&&a.bottom>b.top;function R(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+H*c.k,o={left:l,top:m,right:l+G*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=>Q(e,a))},f=l+(G+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*!!Q(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+(G+g)*c.k,h,p),top:h,maxHeight:Math.max(0,d.height-2*h)}}function S(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 T(a){return void 0===a?"—":(0,f.a)(a,{unit:"ms",style:"fine"})}let U=[{key:"note",format:a=>String(a)},{key:"chars",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 V(a,b=2){let c=[];for(let{key:d,format:e}of U){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 W(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(26570),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]),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,collapsed:A=!1,onToggleCollapsed:B}=a,[C,D]=(0,e.useState)(!A),E=(0,e.useRef)(null),[F,G]=(0,e.useState)(!1),H=s?[0===v.length?"提示词":"",!w?"项目":""].filter(Boolean):[],I=H.length>0,J=l?m||"当前不可发起生成":I?`请先用左侧「+」选择${H.join(" 与 ")}——未选齐时不能发起生成`:j?"有任务正在运行:发送将加入生成队列(前面任务完成后自动开始)":"发送后将创建生成任务,画布随节点日志实时增长";return(0,d.jsxs)("div",{className:`canvasInputBar${A&&!C?" canvasInputBarCollapsed":""}`,children:[C&&(0,d.jsxs)("div",{className:`canvasInputPanel${A?" isLeaving":""}`,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:F,onOpenChange:G,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:I,onClick:()=>{G(!1),z?.()},children:"结构预览(章清单与小节)"})})]}),children:(0,d.jsx)(f.$n,{style:{marginLeft:"5px"},size:"small",icon:(0,d.jsx)(g.PlusOutlined,{}),type:I?"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,{ref:E,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:J,children:(0,d.jsx)(f.$n,{type:"primary",icon:(0,d.jsx)(g.SendOutlined,{}),loading:k,disabled:l||I||!b.trim(),onClick:i,children:j?"排队提交":"生成"})})]}),(0,d.jsx)("div",{className:"canvasInputHandleRow",children:(0,d.jsx)(f.m_,{title:"收起输入框(画布上只留一个把手,随时点回来)",placement:"top",children:(0,d.jsx)("button",{type:"button",className:"canvasInputHandle","aria-label":"收起输入框",onClick:()=>B?.(!0),children:(0,d.jsx)(g.DownOutlined,{})})})})]}),A&&!C&&(0,d.jsx)(f.m_,{title:"展开输入框:写要求、@ 节点、发起或排队生成",placement:"top",children:(0,d.jsx)("button",{type:"button",className:"canvasInputHandle isCollapsed","aria-expanded":!1,"aria-label":"展开输入框",onClick:()=>B?.(!1),children:(0,d.jsx)(g.UpOutlined,{})})})]})}},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}},26570:(a,b,c)=>{c.d(b,{Ce:()=>n,tl:()=>p});var d=c(82015),e=c(28017),f=c(30145),g=c(79270),h=c(22147);async function i(a){let b,c=0;for(;;){let d;if(a.cancelled())throw Error("用户中止");try{d=await a.read(b)}catch(b){if(a.cancelled())throw Error("用户中止",{cause:b});1===(c+=1)&&a.connectionInterrupted?.(b),await a.delay(Math.min(2e3*c,15e3));continue}c=0;let e=d.document;if(!e){if(!d.unchanged&&!d.status)throw Error("未找到生成记录,无法读取该任务进度");["paused","failed","aborted","completed","completed_with_issues","warning"].includes(d.status??"")&&(b=void 0),await a.delay(1500);continue}if(b=e.updatedAt,a.apply(e),"paused"===e.status)return e;if("failed"===e.status||"aborted"===e.status)throw Error(e.error||("aborted"===e.status?"生成已中止":"生成失败"));if(["completed","completed_with_issues","warning"].includes(e.status)){if(e.draft)return e;throw Error(e.error||"服务任务已结束,但最终成稿未完成;已保存的正文可在生成记录中查看")}await a.delay(1500)}}let j=null,k=!1;function l(){j?.listeners.forEach(a=>a())}let m=f.i_;function n(a){return"completed"!==a&&"completed_with_issues"!==a&&"warning"!==a&&"failed"!==a&&"aborted"!==a&&"paused"!==a}function o(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=m[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)(g.ApartmentOutlined):"knowledge_retrieval"===a||"understand"===b?(0,d.createElement)(g.DatabaseOutlined):"file_understanding"===a||"skill"===b?(0,d.createElement)(g.EyeOutlined):"fact_extraction"===a?(0,d.createElement)(g.BulbOutlined):"chapter_generation"===a||"chapter"===b||"write"===b?(0,d.createElement)(g.FormOutlined):"llm_review"===a||"turn"===b||"round"===b?(0,d.createElement)(g.ThunderboltOutlined):"validation"===a||"repair"===b||"recheck"===b?(0,d.createElement)(g.SafetyCertificateOutlined):"plan"===b||"blueprint"===b?(0,d.createElement)(g.ApartmentOutlined):"rollback"===b||"snapshot"===b?(0,d.createElement)(g.HistoryOutlined):(0,d.createElement)(g.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 p(a={}){let{projectRoot:b,documents:c,onNotice:f,t:m,onGenerated:q}=a,[r,s]=(0,d.useState)([]),[t,u]=(0,d.useState)(null),[v,w]=(0,d.useState)(!1),[x,y]=(0,d.useState)(null),[z,A]=(0,d.useState)(""),[B,C]=(0,d.useState)(null),[D,E]=(0,d.useState)(a.documentId??null),[F,G]=(0,d.useState)(null),[H,I]=(0,d.useState)(c??[]),[J,K]=(0,d.useState)(0),[L,M]=(0,d.useState)(null),[N,O]=(0,d.useState)([]),[P,Q]=(0,d.useState)(null),[R,S]=(0,d.useState)(null),T=(0,d.useRef)(""),U=(0,d.useRef)(new Map),V=(0,d.useRef)(new Map),W=(0,d.useRef)(!1),X=(0,d.useRef)(b),Y=(0,d.useRef)(D),Z=(0,d.useRef)(r),$=(0,d.useRef)(t),_=(0,d.useRef)(v),aa=(0,d.useRef)(m),ab=(0,d.useRef)(f),ac=(0,d.useRef)(q),ad=(0,d.useMemo)(()=>`activeGenDocId:${b||"default"}`,[b]),ae=(0,d.useCallback)(a=>{ab.current?.(a)},[]),af=(0,d.useCallback)((a,b)=>aa.current?.(a)??b,[]),ag=(0,d.useRef)(!1),ah=(0,d.useCallback)(async()=>{try{I((await (0,h.cQ)(X.current||void 0)).documents),ag.current=!1}catch{ag.current||(ag.current=!0,ae({kind:"error",text:"生成记录列表读取失败——界面显示的可能不是最新内容,请稍后重试或查看服务端日志"}))}},[ae]),ai=(0,d.useCallback)((a,b,c=_.current)=>{j?.loading&&(j.flowSteps=a,j.activeFlowKey=b,j.loading=c,l())},[]),aj=(0,d.useCallback)(a=>{let b=Date.now();for(let c of a){let a=U.current.get(c.key);"process"!==c.status||a?("finish"===c.status||"error"===c.status||"warning"===c.status)&&a&&!a.endedAt&&U.current.set(c.key,{...a,endedAt:b}):U.current.set(c.key,{startedAt:b})}},[]),ak=(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(T.current===c)return;T.current=c,C(a);let{steps:d,activeKey:e}=function(a,b={}){return o(a)??{steps:[],activeKey:null}}(a);aj(d);let f=n(a.status);s(d),u(e),w(f),ai(d,e,f),G("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&&y(a.draft),A(a.editedMarkdown||a.markdown),O(a.exportReports||[]),S({docId:a.id,...a.deliveryQuality?.receipt||a.reviewMetadata?.contractQuality?{contractQuality:a.deliveryQuality?.receipt??a.reviewMetadata.contractQuality}:{},...a.deliveryQuality?.stale||a.reviewMetadata?.contractQualityStale?{contractQualityStale:a.deliveryQuality?.stale??a.reviewMetadata.contractQualityStale}:{},...a.projectRoot?{projectRoot:a.projectRoot}:{},...a.reviewMetadata?.telemetry?.repairChainNetChars?{netChars:a.reviewMetadata.telemetry.repairChainNetChars}:{}}))},[ai,aj]),al=(0,d.useCallback)(a=>{a.id&&E(a.id),ak(a)},[ak]),am=(0,d.useCallback)((a,b)=>i({cancelled:()=>!!b?.aborted,apply:ak,delay:a=>new Promise(b=>window.setTimeout(b,a)),connectionInterrupted:()=>ae({kind:"warning",text:"暂时无法读取生成进度,正在重新连接;生成状态以服务端回执为准"}),read:async c=>{let d=new AbortController;b&&(b.pollController=d);try{return await (0,h.v7)(a,!0,X.current||void 0,d.signal,c)}finally{b?.pollController===d&&(b.pollController=void 0)}}}),[ak,ae]),an=(0,d.useCallback)(async(a,b)=>{if(!a.specId)return;let c=a.title,e=a.promptIds,f=a.projectRoot||X.current;if(j?.aborted&&(j=null),j?.loading){if(W.current)return;if(!f)return void ae({kind:"error",text:"未识别当前项目,请先选择或打开项目后再生成文件"});W.current=!0;try{let a=await (0,h.OX)({promptIds:e,...c?{title:c}:{},requirement:b,projectRoot:f});await ah(),ae({kind:"info",text:a.queuePosition?`已加入生成队列(第 ${a.queuePosition} 位):前面任务完成后将自动开始`:"生成任务已创建"})}catch(a){ae({kind:"error",text:a instanceof Error?a.message:"创建生成任务失败"})}finally{W.current=!1}return}if(!f)return void ae({kind:"error",text:"未识别当前项目,请先选择或打开项目后再生成文件"});w(!0);let i=Z.current,m=i.length>0?i:[{key:"prepare",title:"正在创建生成任务",description:"系统正在创建后台生成任务,请稍候。",status:"process",icon:(0,d.createElement)(g.LoadingOutlined),subSteps:[{key:"start",title:"准备生成任务",status:"process"}]}],n=$.current||"prepare";s(m),u(n);let p=(0,h.OX)({promptIds:e,...c?{title:c}:{},requirement:b,projectRoot:f});j={id:Date.now(),specId:a.specId,loading:!0,flowSteps:m,activeFlowKey:n,promise:p,listeners:new Set};try{let b=await p;b.documentId&&(localStorage.setItem(ad,b.documentId),E(b.documentId),j?.promise===p&&(j.documentId=b.documentId)),await ah(),b.queuePosition&&ae({kind:"info",text:`已加入生成队列(第 ${b.queuePosition} 位):前面任务完成后将自动开始`});let c=b.documentId?await am(b.documentId,j?.promise===p?j:void 0):void 0;if(c?.status==="paused"){j?.promise===p&&(j.loading=!1,l(),j=null),localStorage.removeItem(ad),await ah(),ae({kind:"info",text:"生成已在节点边界暂停,已保存实际正文和执行状态"});return}let d=b.draft||c?.draft;if(!d)throw Error("生成结果为空");(b.documentId||c?.id)&&E(b.documentId||c.id),y(d),A(c?.editedMarkdown||c?.markdown||d.markdown),j?.promise===p&&(j.draft=d,j.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||X.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}=o(e)??{steps:[],activeKey:null};s(f),ai(f,"done",!1),u("done"),j?.promise===p&&(j.activeFlowKey="done",j.loading=!1,l(),j=null),localStorage.removeItem(ad),await ah(),ae("completed"===e.status?{kind:"success",text:"生成完成,专业交付检查已通过"}:{kind:"warning",text:"本轮运行已结束,实际稿仍有问题待复核,可导出审阅稿"}),(b.documentId||c?.id)&&ac.current?.(b.documentId||c.id)}catch(d){localStorage.removeItem(ad);let a=d instanceof Error?d.message:af("common.error","出错了"),b=k;k=!1;let c=!b&&"用户中止"===a;G(a),b||s(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 ai(c,$.current,!1),c}),j?.promise===p&&(j.loading=!1,j.error=a,l(),j=null),await ah(),c?ae({kind:"warning",text:"生成任务已被中止(可能来自其他窗口):可在列表中点击「继续生成」恢复"}):b||ae({kind:"error",text:a})}finally{w(!1),k=!1,j?.promise===p&&(j.loading=!1,l())}},[ae,ah,ai,ad,af,am]),ao=(0,d.useCallback)(a=>{let b=V.current.get(a);b&&(clearInterval(b),V.current.delete(a))},[]),ap=(0,d.useCallback)((a,b)=>{ao(a);let c=setInterval(()=>{(async()=>{try{let{document:c}=await (0,h.v7)(a,!0,b||X.current||void 0);if(!c)return;ak(c),await ah(),n(c.status)||(ao(a),localStorage.removeItem(ad))}catch{}})()},2e3);V.current.set(a,c)},[ak,ah,ao,ad]),aq=(0,d.useCallback)(a=>{let b=U.current.get(a);if(!b)return null;let c=b.endedAt??Date.now(),d=(0,e.a)(c-b.startedAt,{unit:"ms",style:"fine"});return b.endedAt?d:`${d}(运行中)`},[J]),ar=(0,d.useCallback)(async a=>{j&&(k=!0);let b=Y.current,c=null;for(let d of(b&&await (0,h.r)(b,a||X.current||void 0).catch(a=>{c=a}),j&&(j.aborted=!0,j.pollController?.abort(),j.loading=!1,j.error="用户中止",l(),j=null),localStorage.removeItem(ad),V.current.values()))clearInterval(d);V.current.clear(),w(!1),s([]),u(null),G("用户中止"),await ah(),ae(c?{kind:"error",text:`本地已停止跟踪,但服务端未确认中止(${c instanceof Error?c.message:String(c)})——任务可能仍在后台运行,请稍后重试或查看服务端日志`}:{kind:"success",text:"已中止生成任务"})},[ae,ah,ad]),as=(0,d.useCallback)(async a=>{j?.loading&&j.documentId===a.id&&(k=!0,j.aborted=!0,j.pollController?.abort(),j.loading=!1,j.error="用户中止",l(),j=null,w(!1)),localStorage.removeItem(ad),ao(a.id);try{await (0,h.r)(a.id,a.projectRoot||X.current||void 0),ae({kind:"success",text:"queued"===a.status?"已取消排队任务":"已中止生成任务"})}catch{ae({kind:"info",text:"任务已不在运行,已刷新状态"})}finally{await ah(),Y.current===a.id&&(E(null),C(null),y(null),A(""))}},[ae,ah,ao,ad]),at=(0,d.useCallback)(async a=>{try{E(a.id),w(!0);let b=await (0,h.UQ)(a.id,a.projectRoot||X.current||void 0);localStorage.setItem(ad,b.documentId),await ah();let c=await am(b.documentId);c.draft&&(y(c.draft),A(c.editedMarkdown||c.markdown||c.draft.markdown)),localStorage.removeItem(ad),await ah(),ae("paused"===c.status?{kind:"info",text:"生成已暂停,实际稿已保存"}:"completed"===c.status?{kind:"success",text:"已继续生成并通过专业交付检查"}:{kind:"warning",text:"继续生成已结束,实际稿仍待复核,可导出审阅稿"})}catch(a){ae({kind:"error",text:a instanceof Error?a.message:"继续生成失败"})}finally{w(!1)}},[ae,ah,ad,am]),au=(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||X.current||void 0})});if(!c.ok)throw Error(await c.text()||`HTTP ${c.status}`);let d=await c.json();return ae({kind:"success",text:d.message||"已请求暂停:正在取消模型调用并保存已完成正文"}),await ah(),ap(a,b),d},[ae,ah,ap]),av=(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||X.current||void 0})});if(!c.ok)throw Error(await c.text()||`HTTP ${c.status}`);let d=await c.json().catch(()=>void 0),e=d?.resumeReuse;ae(e?{kind:0===e.blockers.length?"info":"warning",text:`已请求继续:${e.reason}`}:{kind:"info",text:"已请求继续:将复用已保存的检查点"}),await ah()},[ae,ah]),aw=(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)},[]),ax=(0,d.useCallback)(async(a,b)=>{let c=await (0,h.hU)(a,b);aw(c.blob,c.filename,"application/json;charset=utf-8")},[aw]),ay=(0,d.useCallback)(async(a,b,c)=>{try{let{blob:d,filename:e,receipt:f,gateIssues:g}=await (0,h.UE)(a);aw(d,e||b,c),Q("review"===f.exportPurpose?{at:Date.now(),count:g.length,issues:g}:null),f.issuesReport&&await ax(a,f.issuesReport)}catch(b){throw b instanceof h.GA&&b.receipt.issuesReport&&await ax(a,b.receipt.issuesReport),b}},[aw,ax]),az=(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"}),[]),aA=(0,d.useCallback)(async(a,b)=>{let c=void 0!==a.editedMarkdown?a.editedMarkdown:a.markdown||a.draft?.markdown||"",d=void 0===a.editedMarkdown&&a.checkpointChapters?.some(a=>a.content?.trim());if(!c.trim()&&!d)return void ae({kind:"warning",text:"该记录暂无可导出的正文内容"});M(b);let e="markdown"===b?"md":b,f={exportPurpose:"review",documentId:a.id,title:a.title,format:b,projectRoot:a.projectRoot||X.current||void 0};try{await ay(f,`${a.title}.${e}`,az[b])}catch(a){ae({kind:"error",text:a instanceof Error?a.message:"导出失败"})}finally{M(null)}},[ay,az,ae]),aB=(0,d.useCallback)(async a=>{if(!x)return;M(a);let b="markdown"===a?"md":a,c={exportPurpose:"review",documentId:Y.current||void 0,title:x.title,markdown:z,format:a,exportGate:x.exportGate,useClientMarkdown:!0,projectRoot:x.projectRoot||X.current||void 0};try{if(await ay(c,`${x.title}.${b}`,az[a]),Y.current)try{let{document:a}=await (0,h.v7)(Y.current,!1,x.projectRoot||X.current||void 0);a&&O(a.exportReports||[])}catch{}}catch(a){ae({kind:"error",text:a instanceof Error?a.message:"导出失败"})}finally{M(null)}},[z,ay,x,az,ae]),aC=D?H.find(a=>a.id===D)??B:B,aD=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"}}(aC?.status,v);return{flowSteps:r,activeFlowKey:t,loading:v,draft:x,content:z,workflowRecord:B,documentId:D,documents:H,error:F,phase:aD,flowTick:J,boundRecord:aC,canResume:function(a){if(!a)return{resumable:!1,kind:"not-resumable",reason:"记录不存在"};let b=String(a.status||""),c=a.checkpointChapters?.length??0,d=c>0,e="number"==typeof a.interruptedAt||!!a.interruptionReason;if(a.running??("generating"===b||"queued"===b))return{resumable:!1,kind:"not-resumable",reason:"这次生成还在跑(续跑入口不该在运行态出现)"};if("paused"===b)return{resumable:!0,kind:"paused",reason:"暂停是可逆的:从检查点接着跑,未受影响的章会被复用"};if(e)return d?{resumable:!0,kind:"interrupted",reason:`上次运行被中断(${a.interruptionReason??"中断标记"})且留有 ${c} 个检查点章:续跑只补未完成的章`}:{resumable:!1,kind:"not-resumable",reason:"这次运行被中断且**没有检查点章**:续跑等于全量重跑,请用新建生成(这里不伪装成续跑)"};if("warning"===b)return d?{resumable:!0,kind:"interrupted",reason:`上次运行留下了 ${c} 个检查点章(状态 warning):续跑只补未完成的章`}:{resumable:!1,kind:"not-resumable",reason:"warning 且没有检查点章:没有可接着跑的东西,请用新建生成"};let f=a.draft?.exportGate??a.exportGate;if(f?.passed===!1){let a=f.blockingIssues?.length??0;return{resumable:!0,kind:"gate-blocked-repair",reason:`门禁未过(${a>0?`${a} 项阻断`:"阻断清单未随记录落盘"}):续跑把阻断项交回生成侧修复(回源修复,不是重新生成)`}}return"completed"===b?{resumable:!1,kind:"not-resumable",reason:'这份稿已完成:要再跑请新建生成("继续"会把已定的交付物再推一遍)'}:"completed_with_issues"===b||"failed"===b||"aborted"===b?{resumable:!0,kind:"resumable-terminal",reason:"completed_with_issues"===b?`已收口但有未过项:续跑把未过项交回生成侧修复(回源修复,不是重新生成)${d?`;复用 ${c} 个检查点章`:""}`:"aborted"===b?`这份稿被中止过:续跑从中断处接着跑${d?`(复用 ${c} 个检查点章)`:"(无检查点 ⇒ 全量重跑)"}`:`上次生成失败:续跑接着跑${d?`(复用 ${c} 个检查点章)`:"(无检查点 ⇒ 全量重跑)"}`}:{resumable:!1,kind:"not-resumable",reason:`当前状态(${b||"未知"})没有可续跑的线索`}}(aC).resumable,startGeneration:an,abortGeneration:ar,abortDocument:as,resumeDocument:at,pauseDocument:au,resumePausedDocument:av,applyRecord:al,refreshDocuments:ah,waitForDoc:am,stepDurationText:aq,setDraft:y,setContent:A,setExportReports:O,export:{exporting:L,nonDeliverableExport:P,exportRecord:aA,exportEditor:aB,downloadExport:ay,exportReports:N},deliveryReadings:R}}},28017:(a,b,c)=>{c.d(b,{a:()=>e,j:()=>f});let d={coarse:function(a,b){let c=Math.floor(a/1e3),d=Math.floor(c/86400),e=Math.floor(c%86400/3600),f=Math.floor(c%3600/60),g="en-US"===b;return d>0?g?`${d}d ${e}h`:`${d} 天 ${e} 小时`:e>0?g?`${e}h ${f}m`:`${e} 小时 ${f} 分`:f>0?g?`${f}m`:`${f} 分`:g?"Just now":"刚刚"},fine:function(a){let b=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} 分`},"fine-decimal":function(a){return a>=6e4?`${Math.floor(a/6e4)} 分 ${Math.round(a%6e4/1e3)} 秒`:`${(a/1e3).toFixed(1)} 秒`},metric:function(a){return a<1e3?`${Math.round(a)}ms`:a<6e4?`${(a/1e3).toFixed(1)}s`:`${(a/6e4).toFixed(1)}min`}};function e(a,b){return d[b.style](function(a,b){let c="s"===b?1e3*a:a;return Number.isFinite(c)&&c>0?c:0}(a,b.unit),b.locale??"zh-CN")}function f(a,b="zh-CN"){return e(a,{unit:"s",style:"coarse",locale:b})}},30145:(a,b,c)=>{c.d(b,{i_:()=>d,uh:()=>e});let d={role_binding:"项目角色配置绑定",knowledge_retrieval:"知识库证据检索",file_understanding:"项目资料理解",fact_extraction:"事实抽取",chapter_generation:"章节正文生成",llm_review:"独立复核",validation:"规则与准入校验",reference:"资料增强"},e={success:"完成",running:"进行中",failed:"失败",skipped:"跳过",partial:"部分生效",pending:"等待中"}},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:"章和已声明小节来自用户提示词大纲。技能候选尚未确定位置;生成时会结合真实资料和技术职责进行专业规划,可能合并、调整或归入其他章节。 最终目录以完成规划后的文档为准。"}),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:(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{children:["用户声明:",(0,d.jsx)("span",{children:a.sections.length>0?a.sections.join("、"):"(未声明小节)"})]}),a.candidateSections?.length?(0,d.jsxs)("div",{children:["技能候选(待规划):",(0,d.jsx)("span",{children:a.candidateSections.join("、")})]}):null]})})})})]})}},85202:(a,b,c)=>{c.d(b,{B:()=>j,VF:()=>f,WF:()=>h,be:()=>i,s_:()=>k,xA:()=>g});var d=c(82015),e=c(1168);let f=24;function g(a,b,c,d,e=.15){let f=d&&d.right>d.left&&d.bottom>d.top?d:{left:0,top:0,right:c.width,bottom:c.height},h=Math.max(1,f.right-f.left),i=Math.max(1,f.bottom-f.top),j=a.x*b.k+b.x,k=a.y*b.k+b.y,l=j+a.width*b.k,m=k+a.height*b.k,n=f.left+h*e,o=f.right-h*e,p=f.top+i*e,q=f.bottom-i*e;return j<n||k<p||l>o||m>q}let h=12e3;function i(a){if(!a.following)return{label:"跟随最新",title:"跟随已关闭:点一下重新打开(打开后会跟着当前活跃节点走)",paused:!1};if(a.pausedUntil>a.now){let b=Math.max(1,Math.ceil((a.pausedUntil-a.now)/1e3));return{label:"跟随暂停中",title:`跟随暂停:${b}s 后自动恢复(你刚动过视口;不是关掉了)`,paused:!0}}return a.node?{label:"跟随中",title:`正在跟随:${a.node.title}${void 0!==a.node.round?`(第 ${a.node.round} 轮)`:""}`,paused:!1}:{label:"跟随中",title:"跟随中:当前没有活跃节点可跟(生成开始后会自动跟上)",paused:!1}}function j(a,b,c,d=24){let e=b.x,f=b.y,g=b.x+a.width*b.k,h=b.y+a.height*b.k,i=Math.min(g,c.right)-Math.max(e,c.left),k=Math.min(h,c.bottom)-Math.max(f,c.top);return i>=d&&k>=d?{dx:0,dy:0}:{dx:c.left+d-e,dy:c.top+d-f}}function k(){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)=>{c.d(b,{Jm:()=>i,fw:()=>f,je:()=>d.j,mc:()=>j,z3:()=>e});var d=c(28017);function e(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 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} 分钟前`:"刚刚"}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"}}};
1
+ "use strict";exports.id=6321,exports.ids=[6321],exports.modules={1168:(a,b,c)=>{c.d(b,{EL:()=>H,zT:()=>G,II:()=>F,bJ:()=>M,Jr:()=>D,O0:()=>V,uj:()=>u,GC:()=>t,qj:()=>P,x8:()=>E,Kg:()=>K,uH:()=>T,Qs:()=>B,PI:()=>N,dB:()=>W,Jy:()=>S,uv:()=>r,vp:()=>w,m_:()=>q,kH:()=>A,z9:()=>y,Aq:()=>R,RV:()=>O,Kq:()=>I});var d=c(82015),e=c(79270),f=c(28017);let g=["failed","paused","repairing","blocked","running","pending","completed"],h=["chars","costUsd"];function i(a,b){return a.seq!==b.seq?a.seq-b.seq:a.id===b.id?0:a.id<b.id?-1:1}function j(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(i);return b}function k(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 l=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"]),m=new Set(["failed","paused","repairing","blocked","running","pending","completed"]);var n=c(30145);let o={pending:{key:"common.statusWaiting",text:"等待中",color:"default"},running:{key:"common.statusRunning",text:n.uh.running,color:"processing"},completed:{key:"common.statusCompleted",text:n.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 p(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 q(a,b){return p(o,a,"状态",b)}function r(a){return o[a]?.color??"default"}let s={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 t(a,b){return p(s,a,"记录状态",b)}function u(a){return s[a]?.color??"default"}let v=["failed","paused","repairing","blocked","running","pending","completed"];function w(a){let b=v.indexOf(a);return b>=0?b:v.length}let x={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 y(a){return a?x[a]??a:"未知节点"}let z={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),resume:(0,d.createElement)(e.OrderedListOutlined),default:(0,d.createElement)(e.ToolOutlined)};function A(a){return z[a.split(".")[0]||a]??z.default}function B(a){return z[a]??z.default}function C(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)&&m.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 D(a,b){let c=new Map(a.map(a=>[a.id,a]));return(function(a,b){let c=function(a){let b=j(a),c=k(a),d=[...a].sort((a,b)=>(c.get(b.id)??0)-(c.get(a.id)??0)||i(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(i),d={...a.metrics??{}};for(let b of h){let e=function(a,b,c){let d=0,e=!1,f=a.metrics?.[c];for(let a of("number"==typeof f&&Number.isFinite(f)&&(d+=f,e=!0),b)){let b=a.metrics?.[c];"number"==typeof b&&Number.isFinite(b)&&(d+=b,e=!0)}return e?d:void 0}(a,c,b);void 0===e?delete d[b]:d[b]=e}let e=a.progress?.label,f={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=g.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:f,...Object.keys(d).length>0?{metrics:d}:{},...j.length>0?{issues:j}:{}}}(a,d))}return[...a].sort(i).map(a=>e.get(a.id)??a)}(a),d=j(c),e=new Set(c.map(a=>a.id)),f=1/0,l=(a,b)=>{let c=b+1<f?(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(i).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=k(a),d=Math.max(0,Math.floor(b));return a.filter(a=>(c.get(a.id)??0)<d)}(a.map(C),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&&l.has(e)),title:b.title||y(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 E(a){let b=[],c=a=>{for(let d of a)b.push(d),c(d.children)};return c(a),b.sort(i)}function F(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 G=236,H=76;function I(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 J=new Set(["running","repairing"]);function K(a){let b=new Set(a.nodes.filter(a=>J.has(a.node.status)).map(a=>a.node.id));if(0===b.size)return L;let c=new Set;for(let d of a.edges)b.has(d.fromId)&&c.add(d.id);return c}let L=new Set;function M(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 N(a){let b=[],c=[],d=0,e=(a,f)=>{let g,h=a.children,i=40+f*(G+72),j=h.map(a=>({id:a.id,...e(a,f+1)}));for(let e of(0===j.length?(g=40+d*(H+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+G/2,y1:g+H,x2:e.x+G/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+G),0),g=b.reduce((a,b)=>Math.max(a,b.y+H),0);return{nodes:b,edges:c,width:f+40,height:g+40}}function O(a,b){let c=[`影响面:${b.kind}`,`波及 ${b.affectedNodeIds.length} 个节点`,...b.escalate?["超出阈值需人工确认"]:[],...b.rollbackable?[]:["不可回滚:按 11.1 需回滚或重新校准,不得当普通改动提交"]];return`请修复节点「${a}」(${c.join(",")})`}function P(a,b){let c=b>0?b:1;return{dx:a.dx/c,dy:a.dy/c}}let Q=(a,b)=>a.left<b.right&&a.right>b.left&&a.top<b.bottom&&a.bottom>b.top;function R(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+H*c.k,o={left:l,top:m,right:l+G*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=>Q(e,a))},f=l+(G+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*!!Q(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+(G+g)*c.k,h,p),top:h,maxHeight:Math.max(0,d.height-2*h)}}function S(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 T(a){return void 0===a?"—":(0,f.a)(a,{unit:"ms",style:"fine"})}let U=[{key:"note",format:a=>String(a)},{key:"chars",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 V(a,b=2){let c=[];for(let{key:d,format:e}of U){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 W(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(26570),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]),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,collapsed:A=!1,onToggleCollapsed:B}=a,[C,D]=(0,e.useState)(!A),E=(0,e.useRef)(null),[F,G]=(0,e.useState)(!1),H=s?[0===v.length?"提示词":"",!w?"项目":""].filter(Boolean):[],I=H.length>0,J=l?m||"当前不可发起生成":I?`请先用左侧「+」选择${H.join(" 与 ")}——未选齐时不能发起生成`:j?"有任务正在运行:发送将加入生成队列(前面任务完成后自动开始)":"发送后将创建生成任务,画布随节点日志实时增长";return(0,d.jsxs)("div",{className:`canvasInputBar${A&&!C?" canvasInputBarCollapsed":""}`,children:[(0,d.jsx)("div",{className:"canvasInputHandleRow",children:A&&!C?(0,d.jsx)(f.m_,{title:"展开输入框:写要求、@ 节点、发起或排队生成",placement:"top",children:(0,d.jsx)("button",{type:"button",className:"canvasInputHandle isCollapsed","aria-expanded":!1,"aria-label":"展开输入框",onClick:()=>B?.(!1),children:(0,d.jsx)(g.UpOutlined,{})})}):(0,d.jsx)(f.m_,{title:"收起输入框(画布上只留一个把手,随时点回来)",placement:"top",children:(0,d.jsx)("button",{type:"button",className:"canvasInputHandle","aria-label":"收起输入框",onClick:()=>B?.(!0),children:(0,d.jsx)(g.DownOutlined,{})})})}),C&&(0,d.jsxs)("div",{className:`canvasInputPanel${A?" isLeaving":""}`,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:F,onOpenChange:G,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:I,onClick:()=>{G(!1),z?.()},children:"结构预览(章清单与小节)"})})]}),children:(0,d.jsx)(f.$n,{style:{marginLeft:"5px"},size:"small",icon:(0,d.jsx)(g.PlusOutlined,{}),type:I?"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,{ref:E,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:J,children:(0,d.jsx)(f.$n,{type:"primary",icon:(0,d.jsx)(g.SendOutlined,{}),loading:k,disabled:l||I||!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}},26570:(a,b,c)=>{c.d(b,{Ce:()=>n,tl:()=>p});var d=c(82015),e=c(28017),f=c(30145),g=c(79270),h=c(22147);async function i(a){let b,c=0;for(;;){let d;if(a.cancelled())throw Error("用户中止");try{d=await a.read(b)}catch(b){if(a.cancelled())throw Error("用户中止",{cause:b});1===(c+=1)&&a.connectionInterrupted?.(b),await a.delay(Math.min(2e3*c,15e3));continue}c=0;let e=d.document;if(!e){if(!d.unchanged&&!d.status)throw Error("未找到生成记录,无法读取该任务进度");["paused","failed","aborted","completed","completed_with_issues","warning"].includes(d.status??"")&&(b=void 0),await a.delay(1500);continue}if(b=e.updatedAt,a.apply(e),"paused"===e.status)return e;if("failed"===e.status||"aborted"===e.status)throw Error(e.error||("aborted"===e.status?"生成已中止":"生成失败"));if(["completed","completed_with_issues","warning"].includes(e.status)){if(e.draft)return e;throw Error(e.error||"服务任务已结束,但最终成稿未完成;已保存的正文可在生成记录中查看")}await a.delay(1500)}}let j=null,k=!1;function l(){j?.listeners.forEach(a=>a())}let m=f.i_;function n(a){return"completed"!==a&&"completed_with_issues"!==a&&"warning"!==a&&"failed"!==a&&"aborted"!==a&&"paused"!==a}function o(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=m[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)(g.ApartmentOutlined):"knowledge_retrieval"===a||"understand"===b?(0,d.createElement)(g.DatabaseOutlined):"file_understanding"===a||"skill"===b?(0,d.createElement)(g.EyeOutlined):"fact_extraction"===a?(0,d.createElement)(g.BulbOutlined):"chapter_generation"===a||"chapter"===b||"write"===b?(0,d.createElement)(g.FormOutlined):"llm_review"===a||"turn"===b||"round"===b?(0,d.createElement)(g.ThunderboltOutlined):"validation"===a||"repair"===b||"recheck"===b?(0,d.createElement)(g.SafetyCertificateOutlined):"plan"===b||"blueprint"===b?(0,d.createElement)(g.ApartmentOutlined):"rollback"===b||"snapshot"===b?(0,d.createElement)(g.HistoryOutlined):(0,d.createElement)(g.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 p(a={}){let{projectRoot:b,documents:c,onNotice:f,t:m,onGenerated:q}=a,[r,s]=(0,d.useState)([]),[t,u]=(0,d.useState)(null),[v,w]=(0,d.useState)(!1),[x,y]=(0,d.useState)(null),[z,A]=(0,d.useState)(""),[B,C]=(0,d.useState)(null),[D,E]=(0,d.useState)(a.documentId??null),[F,G]=(0,d.useState)(null),[H,I]=(0,d.useState)(c??[]),[J,K]=(0,d.useState)(0),[L,M]=(0,d.useState)(null),[N,O]=(0,d.useState)([]),[P,Q]=(0,d.useState)(null),[R,S]=(0,d.useState)(null),T=(0,d.useRef)(""),U=(0,d.useRef)(new Map),V=(0,d.useRef)(new Map),W=(0,d.useRef)(!1),X=(0,d.useRef)(b),Y=(0,d.useRef)(D),Z=(0,d.useRef)(r),$=(0,d.useRef)(t),_=(0,d.useRef)(v),aa=(0,d.useRef)(m),ab=(0,d.useRef)(f),ac=(0,d.useRef)(q),ad=(0,d.useMemo)(()=>`activeGenDocId:${b||"default"}`,[b]),ae=(0,d.useCallback)(a=>{ab.current?.(a)},[]),af=(0,d.useCallback)((a,b)=>aa.current?.(a)??b,[]),ag=(0,d.useRef)(!1),ah=(0,d.useCallback)(async()=>{try{I((await (0,h.cQ)(X.current||void 0)).documents),ag.current=!1}catch{ag.current||(ag.current=!0,ae({kind:"error",text:"生成记录列表读取失败——界面显示的可能不是最新内容,请稍后重试或查看服务端日志"}))}},[ae]),ai=(0,d.useCallback)((a,b,c=_.current)=>{j?.loading&&(j.flowSteps=a,j.activeFlowKey=b,j.loading=c,l())},[]),aj=(0,d.useCallback)(a=>{let b=Date.now();for(let c of a){let a=U.current.get(c.key);"process"!==c.status||a?("finish"===c.status||"error"===c.status||"warning"===c.status)&&a&&!a.endedAt&&U.current.set(c.key,{...a,endedAt:b}):U.current.set(c.key,{startedAt:b})}},[]),ak=(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(T.current===c)return;T.current=c,C(a);let{steps:d,activeKey:e}=function(a,b={}){return o(a)??{steps:[],activeKey:null}}(a);aj(d);let f=n(a.status);s(d),u(e),w(f),ai(d,e,f),G("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&&y(a.draft),A(a.editedMarkdown||a.markdown),O(a.exportReports||[]),S({docId:a.id,...a.deliveryQuality?.receipt||a.reviewMetadata?.contractQuality?{contractQuality:a.deliveryQuality?.receipt??a.reviewMetadata.contractQuality}:{},...a.deliveryQuality?.stale||a.reviewMetadata?.contractQualityStale?{contractQualityStale:a.deliveryQuality?.stale??a.reviewMetadata.contractQualityStale}:{},...a.projectRoot?{projectRoot:a.projectRoot}:{},...a.reviewMetadata?.telemetry?.repairChainNetChars?{netChars:a.reviewMetadata.telemetry.repairChainNetChars}:{}}))},[ai,aj]),al=(0,d.useCallback)(a=>{a.id&&E(a.id),ak(a)},[ak]),am=(0,d.useCallback)((a,b)=>i({cancelled:()=>!!b?.aborted,apply:ak,delay:a=>new Promise(b=>window.setTimeout(b,a)),connectionInterrupted:()=>ae({kind:"warning",text:"暂时无法读取生成进度,正在重新连接;生成状态以服务端回执为准"}),read:async c=>{let d=new AbortController;b&&(b.pollController=d);try{return await (0,h.v7)(a,!0,X.current||void 0,d.signal,c)}finally{b?.pollController===d&&(b.pollController=void 0)}}}),[ak,ae]),an=(0,d.useCallback)(async(a,b)=>{if(!a.specId)return;let c=a.title,e=a.promptIds,f=a.projectRoot||X.current;if(j?.aborted&&(j=null),j?.loading){if(W.current)return;if(!f)return void ae({kind:"error",text:"未识别当前项目,请先选择或打开项目后再生成文件"});W.current=!0;try{let a=await (0,h.OX)({promptIds:e,...c?{title:c}:{},requirement:b,projectRoot:f});await ah(),ae({kind:"info",text:a.queuePosition?`已加入生成队列(第 ${a.queuePosition} 位):前面任务完成后将自动开始`:"生成任务已创建"})}catch(a){ae({kind:"error",text:a instanceof Error?a.message:"创建生成任务失败"})}finally{W.current=!1}return}if(!f)return void ae({kind:"error",text:"未识别当前项目,请先选择或打开项目后再生成文件"});w(!0);let i=Z.current,m=i.length>0?i:[{key:"prepare",title:"正在创建生成任务",description:"系统正在创建后台生成任务,请稍候。",status:"process",icon:(0,d.createElement)(g.LoadingOutlined),subSteps:[{key:"start",title:"准备生成任务",status:"process"}]}],n=$.current||"prepare";s(m),u(n);let p=(0,h.OX)({promptIds:e,...c?{title:c}:{},requirement:b,projectRoot:f});j={id:Date.now(),specId:a.specId,loading:!0,flowSteps:m,activeFlowKey:n,promise:p,listeners:new Set};try{let b=await p;b.documentId&&(localStorage.setItem(ad,b.documentId),E(b.documentId),j?.promise===p&&(j.documentId=b.documentId)),await ah(),b.queuePosition&&ae({kind:"info",text:`已加入生成队列(第 ${b.queuePosition} 位):前面任务完成后将自动开始`});let c=b.documentId?await am(b.documentId,j?.promise===p?j:void 0):void 0;if(c?.status==="paused"){j?.promise===p&&(j.loading=!1,l(),j=null),localStorage.removeItem(ad),await ah(),ae({kind:"info",text:"生成已在节点边界暂停,已保存实际正文和执行状态"});return}let d=b.draft||c?.draft;if(!d)throw Error("生成结果为空");(b.documentId||c?.id)&&E(b.documentId||c.id),y(d),A(c?.editedMarkdown||c?.markdown||d.markdown),j?.promise===p&&(j.draft=d,j.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||X.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}=o(e)??{steps:[],activeKey:null};s(f),ai(f,"done",!1),u("done"),j?.promise===p&&(j.activeFlowKey="done",j.loading=!1,l(),j=null),localStorage.removeItem(ad),await ah(),ae("completed"===e.status?{kind:"success",text:"生成完成,专业交付检查已通过"}:{kind:"warning",text:"本轮运行已结束,实际稿仍有问题待复核,可导出审阅稿"}),(b.documentId||c?.id)&&ac.current?.(b.documentId||c.id)}catch(d){localStorage.removeItem(ad);let a=d instanceof Error?d.message:af("common.error","出错了"),b=k;k=!1;let c=!b&&"用户中止"===a;G(a),b||s(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 ai(c,$.current,!1),c}),j?.promise===p&&(j.loading=!1,j.error=a,l(),j=null),await ah(),c?ae({kind:"warning",text:"生成任务已被中止(可能来自其他窗口):可在列表中点击「继续生成」恢复"}):b||ae({kind:"error",text:a})}finally{w(!1),k=!1,j?.promise===p&&(j.loading=!1,l())}},[ae,ah,ai,ad,af,am]),ao=(0,d.useCallback)(a=>{let b=V.current.get(a);b&&(clearInterval(b),V.current.delete(a))},[]),ap=(0,d.useCallback)((a,b)=>{ao(a);let c=setInterval(()=>{(async()=>{try{let{document:c}=await (0,h.v7)(a,!0,b||X.current||void 0);if(!c)return;ak(c),await ah(),n(c.status)||(ao(a),localStorage.removeItem(ad))}catch{}})()},2e3);V.current.set(a,c)},[ak,ah,ao,ad]),aq=(0,d.useCallback)(a=>{let b=U.current.get(a);if(!b)return null;let c=b.endedAt??Date.now(),d=(0,e.a)(c-b.startedAt,{unit:"ms",style:"fine"});return b.endedAt?d:`${d}(运行中)`},[J]),ar=(0,d.useCallback)(async a=>{j&&(k=!0);let b=Y.current,c=null;for(let d of(b&&await (0,h.r)(b,a||X.current||void 0).catch(a=>{c=a}),j&&(j.aborted=!0,j.pollController?.abort(),j.loading=!1,j.error="用户中止",l(),j=null),localStorage.removeItem(ad),V.current.values()))clearInterval(d);V.current.clear(),w(!1),s([]),u(null),G("用户中止"),await ah(),ae(c?{kind:"error",text:`本地已停止跟踪,但服务端未确认中止(${c instanceof Error?c.message:String(c)})——任务可能仍在后台运行,请稍后重试或查看服务端日志`}:{kind:"success",text:"已中止生成任务"})},[ae,ah,ad]),as=(0,d.useCallback)(async a=>{j?.loading&&j.documentId===a.id&&(k=!0,j.aborted=!0,j.pollController?.abort(),j.loading=!1,j.error="用户中止",l(),j=null,w(!1)),localStorage.removeItem(ad),ao(a.id);try{await (0,h.r)(a.id,a.projectRoot||X.current||void 0),ae({kind:"success",text:"queued"===a.status?"已取消排队任务":"已中止生成任务"})}catch{ae({kind:"info",text:"任务已不在运行,已刷新状态"})}finally{await ah(),Y.current===a.id&&(E(null),C(null),y(null),A(""))}},[ae,ah,ao,ad]),at=(0,d.useCallback)(async a=>{try{E(a.id),w(!0);let b=await (0,h.UQ)(a.id,a.projectRoot||X.current||void 0);localStorage.setItem(ad,b.documentId),await ah();let c=await am(b.documentId);c.draft&&(y(c.draft),A(c.editedMarkdown||c.markdown||c.draft.markdown)),localStorage.removeItem(ad),await ah(),ae("paused"===c.status?{kind:"info",text:"生成已暂停,实际稿已保存"}:"completed"===c.status?{kind:"success",text:"已继续生成并通过专业交付检查"}:{kind:"warning",text:"继续生成已结束,实际稿仍待复核,可导出审阅稿"})}catch(a){ae({kind:"error",text:a instanceof Error?a.message:"继续生成失败"})}finally{w(!1)}},[ae,ah,ad,am]),au=(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||X.current||void 0})});if(!c.ok)throw Error(await c.text()||`HTTP ${c.status}`);let d=await c.json();return ae({kind:"success",text:d.message||"已请求暂停:正在取消模型调用并保存已完成正文"}),await ah(),ap(a,b),d},[ae,ah,ap]),av=(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||X.current||void 0})});if(!c.ok)throw Error(await c.text()||`HTTP ${c.status}`);let d=await c.json().catch(()=>void 0),e=d?.resumeReuse;ae(e?{kind:0===e.blockers.length?"info":"warning",text:`已请求继续:${e.reason}`}:{kind:"info",text:"已请求继续:将复用已保存的检查点"}),await ah()},[ae,ah]),aw=(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)},[]),ax=(0,d.useCallback)(async(a,b)=>{let c=await (0,h.hU)(a,b);aw(c.blob,c.filename,"application/json;charset=utf-8")},[aw]),ay=(0,d.useCallback)(async(a,b,c)=>{try{let{blob:d,filename:e,receipt:f,gateIssues:g}=await (0,h.UE)(a);aw(d,e||b,c),Q("review"===f.exportPurpose?{at:Date.now(),count:g.length,issues:g}:null),f.issuesReport&&await ax(a,f.issuesReport)}catch(b){throw b instanceof h.GA&&b.receipt.issuesReport&&await ax(a,b.receipt.issuesReport),b}},[aw,ax]),az=(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"}),[]),aA=(0,d.useCallback)(async(a,b)=>{let c=void 0!==a.editedMarkdown?a.editedMarkdown:a.markdown||a.draft?.markdown||"",d=void 0===a.editedMarkdown&&a.checkpointChapters?.some(a=>a.content?.trim());if(!c.trim()&&!d)return void ae({kind:"warning",text:"该记录暂无可导出的正文内容"});M(b);let e="markdown"===b?"md":b,f={exportPurpose:"review",documentId:a.id,title:a.title,format:b,projectRoot:a.projectRoot||X.current||void 0};try{await ay(f,`${a.title}.${e}`,az[b])}catch(a){ae({kind:"error",text:a instanceof Error?a.message:"导出失败"})}finally{M(null)}},[ay,az,ae]),aB=(0,d.useCallback)(async a=>{if(!x)return;M(a);let b="markdown"===a?"md":a,c={exportPurpose:"review",documentId:Y.current||void 0,title:x.title,markdown:z,format:a,exportGate:x.exportGate,useClientMarkdown:!0,projectRoot:x.projectRoot||X.current||void 0};try{if(await ay(c,`${x.title}.${b}`,az[a]),Y.current)try{let{document:a}=await (0,h.v7)(Y.current,!1,x.projectRoot||X.current||void 0);a&&O(a.exportReports||[])}catch{}}catch(a){ae({kind:"error",text:a instanceof Error?a.message:"导出失败"})}finally{M(null)}},[z,ay,x,az,ae]),aC=D?H.find(a=>a.id===D)??B:B,aD=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"}}(aC?.status,v);return{flowSteps:r,activeFlowKey:t,loading:v,draft:x,content:z,workflowRecord:B,documentId:D,documents:H,error:F,phase:aD,flowTick:J,boundRecord:aC,canResume:function(a){if(!a)return{resumable:!1,kind:"not-resumable",reason:"记录不存在"};let b=String(a.status||""),c=a.checkpointChapters?.length??0,d=c>0,e="number"==typeof a.interruptedAt||!!a.interruptionReason;if(a.running??("generating"===b||"queued"===b))return{resumable:!1,kind:"not-resumable",reason:"这次生成还在跑(续跑入口不该在运行态出现)"};if("paused"===b)return{resumable:!0,kind:"paused",reason:"暂停是可逆的:从检查点接着跑,未受影响的章会被复用"};if(e)return d?{resumable:!0,kind:"interrupted",reason:`上次运行被中断(${a.interruptionReason??"中断标记"})且留有 ${c} 个检查点章:续跑只补未完成的章`}:{resumable:!1,kind:"not-resumable",reason:"这次运行被中断且**没有检查点章**:续跑等于全量重跑,请用新建生成(这里不伪装成续跑)"};if("warning"===b)return d?{resumable:!0,kind:"interrupted",reason:`上次运行留下了 ${c} 个检查点章(状态 warning):续跑只补未完成的章`}:{resumable:!1,kind:"not-resumable",reason:"warning 且没有检查点章:没有可接着跑的东西,请用新建生成"};let f=a.draft?.exportGate??a.exportGate;if(f?.passed===!1){let a=f.blockingIssues?.length??0;return{resumable:!0,kind:"gate-blocked-repair",reason:`门禁未过(${a>0?`${a} 项阻断`:"阻断清单未随记录落盘"}):续跑把阻断项交回生成侧修复(回源修复,不是重新生成)`}}return"completed"===b?{resumable:!1,kind:"not-resumable",reason:'这份稿已完成:要再跑请新建生成("继续"会把已定的交付物再推一遍)'}:"completed_with_issues"===b||"failed"===b||"aborted"===b?{resumable:!0,kind:"resumable-terminal",reason:"completed_with_issues"===b?`已收口但有未过项:续跑把未过项交回生成侧修复(回源修复,不是重新生成)${d?`;复用 ${c} 个检查点章`:""}`:"aborted"===b?`这份稿被中止过:续跑从中断处接着跑${d?`(复用 ${c} 个检查点章)`:"(无检查点 ⇒ 全量重跑)"}`:`上次生成失败:续跑接着跑${d?`(复用 ${c} 个检查点章)`:"(无检查点 ⇒ 全量重跑)"}`}:{resumable:!1,kind:"not-resumable",reason:`当前状态(${b||"未知"})没有可续跑的线索`}}(aC).resumable,startGeneration:an,abortGeneration:ar,abortDocument:as,resumeDocument:at,pauseDocument:au,resumePausedDocument:av,applyRecord:al,refreshDocuments:ah,waitForDoc:am,stepDurationText:aq,setDraft:y,setContent:A,setExportReports:O,export:{exporting:L,nonDeliverableExport:P,exportRecord:aA,exportEditor:aB,downloadExport:ay,exportReports:N},deliveryReadings:R}}},28017:(a,b,c)=>{c.d(b,{a:()=>e,j:()=>f});let d={coarse:function(a,b){let c=Math.floor(a/1e3),d=Math.floor(c/86400),e=Math.floor(c%86400/3600),f=Math.floor(c%3600/60),g="en-US"===b;return d>0?g?`${d}d ${e}h`:`${d} 天 ${e} 小时`:e>0?g?`${e}h ${f}m`:`${e} 小时 ${f} 分`:f>0?g?`${f}m`:`${f} 分`:g?"Just now":"刚刚"},fine:function(a){let b=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} 分`},"fine-decimal":function(a){return a>=6e4?`${Math.floor(a/6e4)} 分 ${Math.round(a%6e4/1e3)} 秒`:`${(a/1e3).toFixed(1)} 秒`},metric:function(a){return a<1e3?`${Math.round(a)}ms`:a<6e4?`${(a/1e3).toFixed(1)}s`:`${(a/6e4).toFixed(1)}min`}};function e(a,b){return d[b.style](function(a,b){let c="s"===b?1e3*a:a;return Number.isFinite(c)&&c>0?c:0}(a,b.unit),b.locale??"zh-CN")}function f(a,b="zh-CN"){return e(a,{unit:"s",style:"coarse",locale:b})}},30145:(a,b,c)=>{c.d(b,{i_:()=>d,uh:()=>e});let d={role_binding:"项目角色配置绑定",knowledge_retrieval:"知识库证据检索",file_understanding:"项目资料理解",fact_extraction:"事实抽取",chapter_generation:"章节正文生成",llm_review:"独立复核",validation:"规则与准入校验",reference:"资料增强"},e={success:"完成",running:"进行中",failed:"失败",skipped:"跳过",partial:"部分生效",pending:"等待中"}},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:"章和已声明小节来自用户提示词大纲。技能候选尚未确定位置;生成时会结合真实资料和技术职责进行专业规划,可能合并、调整或归入其他章节。 最终目录以完成规划后的文档为准。"}),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:(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{children:["用户声明:",(0,d.jsx)("span",{children:a.sections.length>0?a.sections.join("、"):"(未声明小节)"})]}),a.candidateSections?.length?(0,d.jsxs)("div",{children:["技能候选(待规划):",(0,d.jsx)("span",{children:a.candidateSections.join("、")})]}):null]})})})})]})}},85202:(a,b,c)=>{c.d(b,{B:()=>j,VF:()=>f,WF:()=>h,be:()=>i,s_:()=>k,xA:()=>g});var d=c(82015),e=c(1168);let f=24;function g(a,b,c,d,e=.15){let f=d&&d.right>d.left&&d.bottom>d.top?d:{left:0,top:0,right:c.width,bottom:c.height},h=Math.max(1,f.right-f.left),i=Math.max(1,f.bottom-f.top),j=a.x*b.k+b.x,k=a.y*b.k+b.y,l=j+a.width*b.k,m=k+a.height*b.k,n=f.left+h*e,o=f.right-h*e,p=f.top+i*e,q=f.bottom-i*e;return j<n||k<p||l>o||m>q}let h=12e3;function i(a){if(!a.following)return{label:"跟随最新",title:"跟随已关闭:点一下重新打开(打开后会跟着当前活跃节点走)",paused:!1};if(a.pausedUntil>a.now){let b=Math.max(1,Math.ceil((a.pausedUntil-a.now)/1e3));return{label:"跟随暂停中",title:`跟随暂停:${b}s 后自动恢复(你刚动过视口;不是关掉了)`,paused:!0}}return a.node?{label:"跟随中",title:`正在跟随:${a.node.title}${void 0!==a.node.round?`(第 ${a.node.round} 轮)`:""}`,paused:!1}:{label:"跟随中",title:"跟随中:当前没有活跃节点可跟(生成开始后会自动跟上)",paused:!1}}function j(a,b,c,d=24){let e=b.x,f=b.y,g=b.x+a.width*b.k,h=b.y+a.height*b.k,i=Math.min(g,c.right)-Math.max(e,c.left),k=Math.min(h,c.bottom)-Math.max(f,c.top);return i>=d&&k>=d?{dx:0,dy:0}:{dx:c.left+d-e,dy:c.top+d-f}}function k(){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)=>{c.d(b,{Jm:()=>i,fw:()=>f,je:()=>d.j,mc:()=>j,z3:()=>e});var d=c(28017);function e(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 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} 分钟前`:"刚刚"}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"}}};
@@ -1 +1 @@
1
- "use strict";exports.id=6822,exports.ids=[6822],exports.modules={8160:(a,b,c)=>{c.d(b,{e:()=>h});var d=c(8732),e=c(9328),f=c.n(e),g=c(79270);function h({title:a,description:b,extra:c}){return(0,d.jsx)("div",{className:"bg-[var(--colorBgContainer)] rounded-2xl border border-[var(--borderColor)] p-6 mb-6",children:(0,d.jsxs)("div",{className:"flex flex-col md:flex-row md:items-center justify-between gap-6",children:[(0,d.jsxs)("div",{className:"flex items-center min-w-0",children:[(0,d.jsxs)(f(),{href:"/skills",className:"mr-4 text-sm text-[var(--colorTextSecondary)] hover:text-[var(--colorText)] inline-flex items-center gap-1 shrink-0",children:[(0,d.jsx)(g.ArrowLeftOutlined,{})," 返回技能库"]}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsx)("h1",{className:"text-2xl font-bold text-[var(--colorText)] mb-1 truncate",children:a}),b?(0,d.jsx)("p",{className:"text-sm text-[var(--colorTextSecondary)] m-0",children:b}):null]})]}),c?(0,d.jsx)("div",{className:"shrink-0 flex items-center gap-2",children:c}):null]})})}},22488:(a,b,c)=>{c.d(b,{F:()=>f,Ie:()=>j,Oz:()=>h,RW:()=>m,SS:()=>e,eT:()=>d,m6:()=>i});let d={"Content-Type":"application/json"};async function e(a,b){try{let c,d=await fetch(a,b),e=await d.text();try{c=e?JSON.parse(e):void 0}catch{c=void 0}if(!d.ok){let a=c??{};return{ok:!1,status:d.status,message:a.error??`HTTP ${d.status}`,issues:Array.isArray(a.errors)?a.errors:[]}}return{ok:!0,data:c}}catch(a){return{ok:!1,status:0,message:a instanceof Error?a.message:"网络请求失败",issues:[]}}}let f="内置技能只读,随应用版本更新。可新建用户技能进行配置。";function g(a){return[...new Set((a??[]).map(a=>a.trim()).filter(a=>a.length>0))]}function h(a){return"string"==typeof a?a:a.phrase}function i(a){return{id:a.id,enabled:a.enabled,match:{chapterDomain:a.match.chapterDomain,projectTypes:[...a.match.projectTypes],sectionKeywords:[...a.match.sectionKeywords],...a.match.sectionRegex?{sectionRegex:a.match.sectionRegex}:{}},requires:a.requires.map(a=>({...a})),structure:a.structure.map(a=>({title:a.title,required:[...a.required??[]]})),forbidden:a.forbidden.map(h),knowledge:a.knowledge.map(a=>({kind:a.kind,...a.ids?{ids:[...a.ids]}:{},...a.note?{note:a.note}:{}})),acceptance:a.acceptance.map(a=>({kind:"llmChecklist",checklistItems:[...a.items]})),...void 0!==a.outputTitle?{outputTitle:a.outputTitle}:{},...a.chapterChecklist?{chapterChecklist:{...a.chapterChecklist,...a.chapterChecklist.sections?{sections:[...a.chapterChecklist.sections]}:{}}}:{}}}function j(){return{id:`skill-${Date.now()}`,enabled:!0,match:{projectTypes:[],sectionKeywords:[]},requires:[{source:"boq",required:!1}],structure:[{}],forbidden:[],knowledge:[],acceptance:[{kind:"llmChecklist",checklistItems:[]}]}}function k(a){return(a.ids??[]).length>0}function l(a){return(a.checklistItems??[]).length>0}function m(a,b,c){let d={chapterDomain:a.match?.chapterDomain,projectTypes:[...a.match?.projectTypes??[]],sectionKeywords:g(a.match?.sectionKeywords),...a.match?.sectionRegex?.trim()?{sectionRegex:a.match.sectionRegex.trim()}:{}},e=(a.requires??[]).filter(a=>(a.key??"").trim().length>0).map(a=>({key:(a.key??"").trim(),source:a.source,required:!0===a.required})),f=(a.structure??[]).filter(a=>(a.title??"").trim().length>0).map(a=>({title:(a.title??"").trim(),required:g(a.required)})),h=(a.knowledge??[]).filter(k).map(a=>({kind:"processCard",ids:g(a.ids),...a.note?.trim()?{note:a.note.trim()}:{}})),i=(a.acceptance??[]).filter(l).map(a=>({kind:"llmChecklist",items:g(a.checklistItems),nonDeterministic:!0}));return{id:a.id.trim(),version:b,source:"user",enabled:!1!==a.enabled,match:d,requires:e,structure:f,forbidden:g(a.forbidden),knowledge:h,acceptance:i,...function(a){let b=a.outputTitle?.trim()??"",c=a.chapterChecklist,d={sections:g(c?.sections),queries:g(c?.queries),requiredFacts:g(c?.requiredFacts),tableSections:g(c?.tableSections),tableRequirements:g(c?.tableRequirements),pinnedEvidenceFilePaths:g(c?.pinnedEvidenceFilePaths)},e=!!c?.purpose?.trim()||Object.values(d).some(a=>a.length>0);return{...b?{outputTitle:b}:{},...e?{chapterChecklist:{...c?.purpose?.trim()?{purpose:c.purpose.trim()}:{},...Object.fromEntries(Object.entries(d).filter(([,a])=>a.length>0))}}:{}}}(a),...c?{examples:c}:{}}}},46822:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{q:()=>q});var e=c(8732),f=c(82015),g=c(42583),h=c(60056),i=c(79270),j=c(9328),k=c.n(j),l=c(8160),m=c(51329),n=c(60790),o=c(22488),p=a([m]);m=(p.then?(await p)():p)[0];let{Text:r}=h.o5;function q({mode:a,skillId:b}){let{message:c}=h.qw.useApp(),d=(0,g.useRouter)(),[j]=h.lV.useForm(),p=(0,n.G)(),[q,s]=(0,f.useState)(!1),[t,u]=(0,f.useState)([]),v=(0,f.useMemo)(()=>"edit"===a&&b?p.skills.find(a=>a.id===b):void 0,[a,b,p.skills]),w="edit"===a&&!b,x="edit"===a&&!p.loading&&!p.failed&&!v&&void 0!==p.options,[y,z]=(0,f.useState)(!1),A=async()=>{let a;if(!p.options)return;try{a=await j.validateFields()}catch{return}let b=(0,o.RW)(a,p.options.contractVersion,v?.examples);s(!0),u([]);try{let e=await (0,o.SS)("/api/skills/validate",{method:"POST",headers:o.eT,body:JSON.stringify(b)});if(!e.ok){c.error(`校验请求失败:${e.message}`),u(e.issues);return}if(!e.data.ok){u(e.data.errors),c.error(`校验未通过:${e.data.errors.length} 处问题,请核对技能字段和工艺卡引用。`);return}let f=v?await (0,o.SS)(`/api/skills/${encodeURIComponent(v.id)}`,{method:"PUT",headers:o.eT,body:JSON.stringify(b)}):await (0,o.SS)("/api/skills",{method:"POST",headers:o.eT,body:JSON.stringify(b)});if(!f.ok){u(f.issues),c.error(`保存失败:${f.message}`);return}f.data.warnings?.length&&c.warning(`已保存,但有 ${f.data.warnings.length} 条提示:${f.data.warnings.map(a=>a.message).join(";")}`),c.success("已保存"),await d.push(`/skills/${encodeURIComponent(f.data.skill?.id??a.id)}`)}finally{s(!1)}};return w||p.loading?(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(h.EA,{active:!0,title:!0,paragraph:{rows:2}}),(0,e.jsx)(h.EA,{active:!0,paragraph:{rows:12}})]}):p.failed?(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(l.e,{title:"create"===a?"新建技能":"编辑技能"}),(0,e.jsx)(h.Fc,{type:"error",showIcon:!0,message:"技能库读取失败",description:`${p.failed};这不是"技能不存在",请核对服务端状态后重试。`})]}):x?(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(l.e,{title:"编辑技能"}),(0,e.jsx)(h.Sv,{description:`技能库里没有「${b}」这条技能(可能已被删除或改名)`,children:(0,e.jsx)(k(),{href:"/skills",children:(0,e.jsx)(h.$n,{type:"primary",children:"返回技能库"})})})]}):p.options?v?.builtIn?(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(l.e,{title:`编辑技能 \xb7 ${v.displayName}`,description:"内置技能随应用版本更新,不能在这里修改。",extra:(0,e.jsx)(k(),{href:`/skills/${encodeURIComponent(v.id)}`,children:(0,e.jsx)(h.$n,{icon:(0,e.jsx)(i.EditOutlined,{}),children:"查看预览"})})}),(0,e.jsx)(h.Fc,{type:"info",showIcon:!0,message:"内置技能",description:o.F}),(0,e.jsx)("div",{children:(0,e.jsx)(k(),{href:"/skills/new",children:(0,e.jsx)(h.$n,{type:"primary",children:"新建用户技能"})})})]}):(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(l.e,{title:v?`编辑技能 \xb7 ${v.displayName}`:"新建技能",description:v?"改动会在保存前做一次字段与工艺卡引用校验,通过后写入技能文件。":"技能提供专业主题、资料需求、工艺知识和写作核对提示;保存前同样会做引用校验。",extra:(0,e.jsxs)(e.Fragment,{children:[v?(0,e.jsx)(k(),{href:`/skills/${encodeURIComponent(v.id)}`,children:(0,e.jsx)(h.$n,{children:"放弃改动并返回预览"})}):(0,e.jsx)(k(),{href:"/skills",children:(0,e.jsx)(h.$n,{children:"取消"})}),(0,e.jsxs)(h.$x,{size:4,children:[(0,e.jsx)(r,{type:"secondary",className:"text-xs",children:"保存后自动进入预览"}),(0,e.jsx)(h.$n,{type:"primary",icon:(0,e.jsx)(i.SaveOutlined,{}),loading:q,onClick:()=>{A()},children:"保存"})]})]})}),v?.examples&&(0,e.jsx)(h.Fc,{type:"info",showIcon:!0,message:"该技能带表达示例",description:"示例供理解专业表达,不能作为本项目事实;本编辑器不修改示例,保存时原样保留。"}),t.length>0&&(0,e.jsx)(h.Fc,{type:"error",showIcon:!0,message:`校验未通过:${t.length} 处`,description:(0,e.jsx)("div",{className:"text-xs",children:t.map((a,b)=>(0,e.jsxs)("div",{children:[(0,e.jsx)(r,{code:!0,children:a.path||"(root)"})," ",a.message]},`${a.path??"root"}-${b}`))})}),(0,e.jsx)(m.D,{form:j,options:p.options,idLocked:!!v})]}):null}d()}catch(a){d(a)}})},51329:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{D:()=>j});var e=c(8732),f=c(60056),g=c(79270),h=c(94487),i=a([h]);h=(i.then?(await i)():i)[0];let{Paragraph:k,Text:l}=f.o5;function j({form:a,options:b,idLocked:c}){let d=(0,h.Vr)(),i=b.chapterDomains.map(a=>({value:a.value,label:a.label,title:a.note})),j=b.projectTypes.map(a=>({value:a.value,label:a.label})),m=b.factSources.map(a=>({value:a.value,label:a.label})),n=b.processCards.map(a=>({value:a.value,label:a.label}));return(0,e.jsxs)(f.lV,{form:a,layout:"vertical",children:[(0,e.jsx)(f.lV.Item,{name:"id",label:"技能 ID",rules:[{required:!0,message:"技能 ID 必填"}],extra:"技能的唯一标识:使用小写字母、数字和连字符,以字母开头。",children:(0,e.jsx)(f.pd,{disabled:c,placeholder:"例如 c02-major-content-building"})}),(0,e.jsx)(f.lV.Item,{name:"enabled",label:"启用",valuePropName:"checked",children:(0,e.jsx)(f.dO,{})}),(0,e.jsxs)(f.Zp,{size:"small",title:"匹配条件",className:"rounded-2xl mb-4",children:[(0,e.jsx)(f.lV.Item,{name:["match","chapterDomain"],label:"章域",rules:[{required:!0,message:"章域必选"}],extra:"选择技能相关的专业内容范围。",children:(0,e.jsx)(f.l6,{options:i,placeholder:"选择本章所属的内容域"})}),(0,e.jsx)(f.lV.Item,{name:["match","projectTypes"],label:"适用工程类型",extra:"留空表示不限定工程类型,使用时仍需核对具体对象与工况。",children:(0,e.jsx)(f.l6,{mode:"multiple",allowClear:!0,options:j,placeholder:"全类型"})}),(0,e.jsx)(f.lV.Item,{name:["match","sectionKeywords"],label:"小节标题关键词",extra:"用于匹配相关小节标题,可输入多个关键词。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","," "],placeholder:"输入后回车,例如:主要施工 / 分部分项"})}),(0,e.jsx)(f.lV.Item,{name:["match","sectionRegex"],label:"小节标题匹配表达式(可选)",extra:"填写正则表达式文本;复杂或不安全的表达式会被校验拒绝。",children:(0,e.jsx)(f.pd,{placeholder:"例如 交通导改|导行|管线保护"})})]}),(0,e.jsx)(f.Zp,{size:"small",title:"所需项目资料",className:"rounded-2xl mb-4",children:(0,e.jsx)(f.lV.List,{name:"requires",children:(a,{add:b,remove:c})=>(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[a.map(({key:a,name:b,...d})=>(0,e.jsxs)(f.$x,{align:"baseline",className:"w-full",wrap:!0,children:[(0,e.jsx)(f.lV.Item,{...d,name:[b,"key"],rules:[{required:!0,message:"事实键必填"}],children:(0,e.jsx)(f.pd,{placeholder:"事实键,如 boq.divisions",style:{width:260}})}),(0,e.jsx)(f.lV.Item,{...d,name:[b,"source"],rules:[{required:!0,message:"来源必选"}],children:(0,e.jsx)(f.l6,{options:m,placeholder:"事实来源",style:{width:160}})}),(0,e.jsx)(f.lV.Item,{...d,name:[b,"required"],valuePropName:"checked",children:(0,e.jsx)(f.dO,{checkedChildren:"必需",unCheckedChildren:"可选"})}),(0,e.jsx)(f.$n,{type:"text",danger:!0,icon:(0,e.jsx)(g.DeleteOutlined,{}),onClick:()=>c(b)})]},a)),(0,e.jsxs)(f.$n,{type:"dashed",icon:(0,e.jsx)(g.PlusOutlined,{}),onClick:()=>b({source:"boq",required:!1}),children:[d("common.add"),"事实需求"]})]})})}),(0,e.jsx)(f.Zp,{size:"small",title:"相关专业主题",className:"rounded-2xl mb-4",children:(0,e.jsx)(f.lV.List,{name:"structure",children:(a,{add:b,remove:c})=>(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[a.map(({key:a,name:b,...d})=>(0,e.jsxs)(f.$x,{align:"baseline",className:"w-full",wrap:!0,children:[(0,e.jsx)(f.lV.Item,{...d,name:[b,"title"],rules:[{required:!0,message:"专业主题标题必填"}],children:(0,e.jsx)(f.pd,{placeholder:"专业主题标题",style:{width:420}})}),(0,e.jsx)(f.lV.Item,{...d,name:[b,"required"],extra:"描述该主题的专业内容;按实际对象选用,不写固定字数或参数数量。",children:(0,e.jsx)(f.l6,{mode:"tags",style:{minWidth:320},placeholder:"工序、适用条件、控制要点或验收要求"})}),(0,e.jsx)(f.$n,{type:"text",danger:!0,icon:(0,e.jsx)(g.DeleteOutlined,{}),onClick:()=>c(b)})]},a)),(0,e.jsxs)(f.$n,{type:"dashed",icon:(0,e.jsx)(g.PlusOutlined,{}),onClick:()=>b({required:[]}),children:[d("common.add"),"专业主题"]})]})})}),(0,e.jsxs)(f.Zp,{size:"small",title:"文档业务提示",className:"rounded-2xl mb-4",children:[(0,e.jsx)(f.lV.Item,{name:"outputTitle",extra:"提供文档名称建议,实际名称由本次生成配置确定。",children:(0,e.jsx)(f.pd,{placeholder:"留空 = 本技能不对文档名称表态",style:{maxWidth:420}})}),(0,e.jsxs)("div",{className:"mt-2 mb-1",children:[(0,e.jsx)(l,{strong:!0,children:"章级清单"}),(0,e.jsx)(l,{type:"secondary",className:"text-xs ml-2",children:"提供章级候选内容与资料检索提示,实际职责由本次规划确定;专业主题在上方单独填写。"})]}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","purpose"],label:"章级内容提示",extra:"说明本章关注的专业内容。",children:(0,e.jsx)(f.pd,{placeholder:"例如:说明本工程的安全管理目标与危大工程清单",style:{maxWidth:640}})}),(0,e.jsxs)(f.$x,{wrap:!0,align:"start",children:[(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","queries"],label:"资料检索词",extra:"帮助定位相关资料。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],style:{minWidth:260},placeholder:"回车添加"})}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","requiredFacts"],label:"待核事实提示",extra:"提示应查证的项目事实。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],style:{minWidth:260},placeholder:"回车添加"})})]}),(0,e.jsxs)(f.$x,{wrap:!0,align:"start",children:[(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","tableSections"],label:"成表内容建议",extra:"提示适合用表格表达的内容。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],style:{minWidth:260},placeholder:"回车添加"})}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","tableRequirements"],label:"表格表达提示",extra:"提示表格列项与表达方式。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],style:{minWidth:260},placeholder:"回车添加"})})]}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","pinnedEvidenceFilePaths"],label:"相关证据文件",extra:"填写需要关注的文件名;实际读取范围和来源资格仍由本次任务核对。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],style:{maxWidth:640},placeholder:"回车添加文件名"})}),(b.absentCarriers?.length??0)>0&&(0,e.jsx)(f.Fc,{type:"info",showIcon:!0,className:"mt-3",message:"排版设置",description:(0,e.jsx)("div",{className:"text-xs",children:b.absentCarriers.map(a=>(0,e.jsxs)("div",{children:[a.label,":","formatting"===a.id?"排版要求由招标资料与导出设置管理,技能编辑器提供专业内容。":a.note]},a.id))})})]}),(0,e.jsx)(f.Zp,{size:"small",title:"禁写项",className:"rounded-2xl mb-4",children:(0,e.jsx)(f.lV.Item,{name:"forbidden",extra:"填写需避免的不适用内容或表达;没有禁写项时留空。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],placeholder:"输入后回车,例如:管道闭水试验"})})}),(0,e.jsx)(f.Zp,{size:"small",title:"可加载工艺知识",className:"rounded-2xl mb-4",children:(0,e.jsx)(f.lV.List,{name:"knowledge",children:(a,{add:b,remove:c})=>(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[a.map(({key:a,name:b,...d})=>(0,e.jsxs)(f.$x,{align:"baseline",wrap:!0,children:[(0,e.jsx)(f.lV.Item,{...d,name:[b,"ids"],rules:[{required:!0,type:"array",min:1,message:"请选择实际工艺卡"}],children:(0,e.jsx)(f.l6,{mode:"multiple",showSearch:!0,optionFilterProp:"label",options:n,style:{minWidth:360},placeholder:"按工艺卡名称搜索"})}),(0,e.jsx)(f.lV.Item,{...d,name:[b,"note"],children:(0,e.jsx)(f.pd,{placeholder:"适用条件说明(可选)"})}),(0,e.jsx)(f.$n,{type:"text",danger:!0,icon:(0,e.jsx)(g.DeleteOutlined,{}),onClick:()=>c(b)})]},a)),(0,e.jsxs)(f.$n,{type:"dashed",icon:(0,e.jsx)(g.PlusOutlined,{}),onClick:()=>b({kind:"processCard",ids:[]}),children:[d("common.add"),"工艺知识"]})]})})}),(0,e.jsxs)(f.Zp,{size:"small",title:"专业写作核对提示",className:"rounded-2xl mb-4",children:[(0,e.jsx)(k,{type:"secondary",children:"写清适用对象、方法和检验注意。提示供作者按具体任务选用,不构成评分、字数或参数数量要求。"}),(0,e.jsx)(f.lV.List,{name:"acceptance",children:(a,{add:b,remove:c})=>(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[a.map(({key:a,name:b,...d})=>(0,e.jsxs)(f.$x,{align:"baseline",wrap:!0,children:[(0,e.jsx)(f.lV.Item,{...d,name:[b,"checklistItems"],rules:[{required:!0,type:"array",min:1,message:"请输入专业注意事项"}],children:(0,e.jsx)(f.l6,{mode:"tags",style:{minWidth:460},placeholder:"例如:保留实际检验对象、触发条件和转序要求"})}),(0,e.jsx)(f.$n,{type:"text",danger:!0,icon:(0,e.jsx)(g.DeleteOutlined,{}),onClick:()=>c(b)})]},a)),(0,e.jsxs)(f.$n,{type:"dashed",icon:(0,e.jsx)(g.PlusOutlined,{}),onClick:()=>b({kind:"llmChecklist",checklistItems:[]}),children:[d("common.add"),"专业提示"]})]})})]}),(0,e.jsx)(f.Zp,{size:"small",title:(0,e.jsxs)(f.$x,{children:[(0,e.jsx)(g.LockOutlined,{}),"资料与采用边界"]}),className:"rounded-2xl",children:b.isolationRules.map(a=>(0,e.jsxs)("div",{className:"mb-1",children:[(0,e.jsx)(f.vw,{children:a.label}),(0,e.jsx)(l,{type:"secondary",className:"text-xs",children:a.note})]},a.id))})]})}d()}catch(a){d(a)}})},60790:(a,b,c)=>{c.d(b,{G:()=>f});var d=c(82015),e=c(22488);function f(){let[a,b]=(0,d.useState)([]),[c,f]=(0,d.useState)(),[g,h]=(0,d.useState)([]),[i,j]=(0,d.useState)(!0),[k,l]=(0,d.useState)("");return{skills:a,options:c,invalid:g,loading:i,failed:k,reload:(0,d.useCallback)(async()=>{j(!0);let a=await (0,e.SS)("/api/skills");a.ok?(b(a.data.skills),f(a.data.options),h(a.data.invalid??[]),l("")):l(a.message),j(!1)},[]),applySkills:b}}}};
1
+ "use strict";exports.id=6822,exports.ids=[6822],exports.modules={46822:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{q:()=>q});var e=c(8732),f=c(82015),g=c(42583),h=c(60056),i=c(79270),j=c(9328),k=c.n(j),l=c(8160),m=c(51329),n=c(60790),o=c(22488),p=a([m]);m=(p.then?(await p)():p)[0];let{Text:r}=h.o5;function q({mode:a,skillId:b}){let{message:c}=h.qw.useApp(),d=(0,g.useRouter)(),[j]=h.lV.useForm(),p=(0,n.G)(),[q,s]=(0,f.useState)(!1),[t,u]=(0,f.useState)([]),v=(0,f.useMemo)(()=>"edit"===a&&b?p.skills.find(a=>a.id===b):void 0,[a,b,p.skills]),w="edit"===a&&!b,x="edit"===a&&!p.loading&&!p.failed&&!v&&void 0!==p.options,[y,z]=(0,f.useState)(!1),A=async()=>{let a;if(!p.options)return;try{a=await j.validateFields()}catch{return}let b=(0,o.RW)(a,p.options.contractVersion,v?.examples);s(!0),u([]);try{let e=await (0,o.SS)("/api/skills/validate",{method:"POST",headers:o.eT,body:JSON.stringify(b)});if(!e.ok){c.error(`校验请求失败:${e.message}`),u(e.issues);return}if(!e.data.ok){u(e.data.errors),c.error(`校验未通过:${e.data.errors.length} 处问题,请核对技能字段和工艺卡引用。`);return}let f=v?await (0,o.SS)(`/api/skills/${encodeURIComponent(v.id)}`,{method:"PUT",headers:o.eT,body:JSON.stringify(b)}):await (0,o.SS)("/api/skills",{method:"POST",headers:o.eT,body:JSON.stringify(b)});if(!f.ok){u(f.issues),c.error(`保存失败:${f.message}`);return}f.data.warnings?.length&&c.warning(`已保存,但有 ${f.data.warnings.length} 条提示:${f.data.warnings.map(a=>a.message).join(";")}`),c.success("已保存"),await d.push(`/skills/${encodeURIComponent(f.data.skill?.id??a.id)}`)}finally{s(!1)}};return w||p.loading?(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(h.EA,{active:!0,title:!0,paragraph:{rows:2}}),(0,e.jsx)(h.EA,{active:!0,paragraph:{rows:12}})]}):p.failed?(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(l.e,{title:"create"===a?"新建技能":"编辑技能"}),(0,e.jsx)(h.Fc,{type:"error",showIcon:!0,message:"技能库读取失败",description:`${p.failed};这不是"技能不存在",请核对服务端状态后重试。`})]}):x?(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(l.e,{title:"编辑技能"}),(0,e.jsx)(h.Sv,{description:`技能库里没有「${b}」这条技能(可能已被删除或改名)`,children:(0,e.jsx)(k(),{href:"/skills",children:(0,e.jsx)(h.$n,{type:"primary",children:"返回技能库"})})})]}):p.options?v?.builtIn?(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(l.e,{title:`编辑技能 \xb7 ${v.displayName}`,description:"内置技能随应用版本更新,不能在这里修改。",extra:(0,e.jsx)(k(),{href:`/skills/${encodeURIComponent(v.id)}`,children:(0,e.jsx)(h.$n,{icon:(0,e.jsx)(i.EditOutlined,{}),children:"查看预览"})})}),(0,e.jsx)(h.Fc,{type:"info",showIcon:!0,message:"内置技能",description:o.F}),(0,e.jsx)("div",{children:(0,e.jsx)(k(),{href:"/skills/new",children:(0,e.jsx)(h.$n,{type:"primary",children:"新建用户技能"})})})]}):(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(l.e,{title:v?`编辑技能 \xb7 ${v.displayName}`:"新建技能",description:v?"改动会在保存前做一次字段与工艺卡引用校验,通过后写入技能文件。":"技能提供专业主题、资料需求、工艺知识和写作核对提示;保存前同样会做引用校验。",extra:(0,e.jsxs)(e.Fragment,{children:[v?(0,e.jsx)(k(),{href:`/skills/${encodeURIComponent(v.id)}`,children:(0,e.jsx)(h.$n,{children:"放弃改动并返回预览"})}):(0,e.jsx)(k(),{href:"/skills",children:(0,e.jsx)(h.$n,{children:"取消"})}),(0,e.jsxs)(h.$x,{size:4,children:[(0,e.jsx)(r,{type:"secondary",className:"text-xs",children:"保存后自动进入预览"}),(0,e.jsx)(h.$n,{type:"primary",icon:(0,e.jsx)(i.SaveOutlined,{}),loading:q,onClick:()=>{A()},children:"保存"})]})]})}),v?.examples&&(0,e.jsx)(h.Fc,{type:"info",showIcon:!0,message:"该技能带表达示例",description:"示例供理解专业表达,不能作为本项目事实;本编辑器不修改示例,保存时原样保留。"}),t.length>0&&(0,e.jsx)(h.Fc,{type:"error",showIcon:!0,message:`校验未通过:${t.length} 处`,description:(0,e.jsx)("div",{className:"text-xs",children:t.map((a,b)=>(0,e.jsxs)("div",{children:[(0,e.jsx)(r,{code:!0,children:a.path||"(root)"})," ",a.message]},`${a.path??"root"}-${b}`))})}),(0,e.jsx)(m.D,{form:j,options:p.options,idLocked:!!v})]}):null}d()}catch(a){d(a)}})},51329:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{D:()=>k});var e=c(8732),f=c(60056),g=c(79270),h=c(94487),i=c(35365),j=a([h]);h=(j.then?(await j)():j)[0];let{Text:l}=f.o5;function k({form:a,options:b,idLocked:c}){let d=(0,h.Vr)(),j=b.chapterDomains.map(a=>({value:a.value,label:a.label,title:a.note})),k=b.projectTypes.map(a=>({value:a.value,label:a.label})),m=b.factSources.map(a=>({value:a.value,label:a.label})),n=b.processCards.map(a=>({value:a.value,label:a.label}));return(0,e.jsx)(f.lV,{form:a,layout:"vertical",children:(0,e.jsxs)("div",{className:"grid grid-cols-1 xl:grid-cols-2 gap-4 items-start",children:[(0,e.jsxs)(i.PZ,{title:"基本信息",description:"技能的身份与启停;ID 是落盘文件名,新建后不再改。",children:[(0,e.jsx)(f.lV.Item,{name:"id",label:"技能 ID",rules:[{required:!0,message:"技能 ID 必填"}],extra:"使用小写字母、数字和连字符,以字母开头。",children:(0,e.jsx)(f.pd,{disabled:c,placeholder:"例如 c02-major-content-building"})}),(0,e.jsx)(f.lV.Item,{name:"enabled",label:"启用",valuePropName:"checked",extra:"停用后本条技能不参与本次生成的技能匹配。",className:"!mb-0",children:(0,e.jsx)(f.dO,{checkedChildren:"启用",unCheckedChildren:"停用"})})]}),(0,e.jsxs)(i.PZ,{title:"匹配条件",description:"决定这条技能在什么章域、什么工程类型、什么样的章节标题下被选用。",children:[(0,e.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-x-4",children:[(0,e.jsx)(f.lV.Item,{name:["match","chapterDomain"],label:"章域",rules:[{required:!0,message:"章域必选"}],extra:"本章所属的专业内容范围。",children:(0,e.jsx)(f.l6,{options:j,placeholder:"选择本章所属的内容域"})}),(0,e.jsx)(f.lV.Item,{name:["match","projectTypes"],label:"适用工程类型",extra:"留空表示不限定工程类型。",children:(0,e.jsx)(f.l6,{mode:"multiple",allowClear:!0,options:k,placeholder:"全类型"})})]}),(0,e.jsx)(f.lV.Item,{name:["match","sectionKeywords"],label:"小节标题关键词",extra:"用于匹配相关小节标题,可输入多个关键词。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","," "],placeholder:"输入后回车,例如:主要施工 / 分部分项"})}),(0,e.jsx)(f.lV.Item,{name:["match","sectionRegex"],label:"小节标题匹配表达式(可选)",extra:"填写正则表达式文本;复杂或不安全的表达式会被校验拒绝。",className:"!mb-0",children:(0,e.jsx)(f.pd,{placeholder:"例如 交通导改|导行|管线保护"})})]}),(0,e.jsx)(i.PZ,{className:"xl:col-span-2",title:"所需项目资料",description:"本条技能要求本次任务先查证的项目事实(事实键来自服务端闭集);标为必需而查不到时会被上游拦下。",children:(0,e.jsx)(f.lV.List,{name:"requires",children:(a,{add:b,remove:c})=>(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[a.map(({key:a,name:b,...d})=>(0,e.jsxs)(i.jT,{onRemove:()=>c(b),columns:"md:grid-cols-[minmax(0,2fr)_minmax(0,1fr)_auto]",children:[(0,e.jsx)(f.lV.Item,{...d,name:[b,"key"],rules:[{required:!0,message:"事实键必填"}],className:"!mb-0",children:(0,e.jsx)(f.pd,{placeholder:"事实键,如 boq.divisions"})}),(0,e.jsx)(f.lV.Item,{...d,name:[b,"source"],rules:[{required:!0,message:"来源必选"}],className:"!mb-0",children:(0,e.jsx)(f.l6,{options:m,placeholder:"事实来源"})}),(0,e.jsx)(f.lV.Item,{...d,name:[b,"required"],valuePropName:"checked",className:"!mb-0",children:(0,e.jsx)(f.dO,{checkedChildren:"必需",unCheckedChildren:"可选"})})]},a)),(0,e.jsxs)(f.$n,{type:"dashed",block:!0,icon:(0,e.jsx)(g.PlusOutlined,{}),onClick:()=>b({source:"boq",required:!1}),children:[d("common.add"),"事实需求"]})]})})}),(0,e.jsx)(i.PZ,{className:"xl:col-span-2",title:"相关专业主题",description:"本条技能提供的专业内容主题;主题下的小标签写这一主题要覆盖的工序、条件、控制点或验收要求。",children:(0,e.jsx)(f.lV.List,{name:"structure",children:(a,{add:b,remove:c})=>(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[a.map(({key:a,name:b,...d})=>(0,e.jsxs)(i.jT,{onRemove:()=>c(b),columns:"md:grid-cols-[minmax(0,1fr)_minmax(0,2fr)]",children:[(0,e.jsx)(f.lV.Item,{...d,name:[b,"title"],rules:[{required:!0,message:"专业主题标题必填"}],className:"!mb-0",children:(0,e.jsx)(f.pd,{placeholder:"专业主题标题"})}),(0,e.jsx)(f.lV.Item,{...d,name:[b,"required"],extra:"按实际对象选用,不写固定字数或参数数量。",className:"!mb-0",children:(0,e.jsx)(f.l6,{mode:"tags",className:"w-full",placeholder:"工序、适用条件、控制要点或验收要求"})})]},a)),(0,e.jsxs)(f.$n,{type:"dashed",block:!0,icon:(0,e.jsx)(g.PlusOutlined,{}),onClick:()=>b({required:[]}),children:[d("common.add"),"专业主题"]})]})})}),(0,e.jsxs)(i.PZ,{className:"xl:col-span-2",title:"文档业务提示",description:"给本次规划的建议:文档名称、本章职责与资料检索提示。实际章节职责由本次规划确定,专业主题在上面的卡片里单独填写。",children:[(0,e.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-x-4",children:[(0,e.jsx)(f.lV.Item,{name:"outputTitle",label:"文档名称建议",extra:"提供文档名称建议,实际名称由本次生成配置确定。",children:(0,e.jsx)(f.pd,{placeholder:"留空 = 本技能不对文档名称表态"})}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","purpose"],label:"章级内容提示",extra:"说明本章关注的专业内容。",children:(0,e.jsx)(f.pd,{placeholder:"例如:说明本工程的安全管理目标与危大工程清单"})})]}),(0,e.jsxs)("div",{className:"mt-1 mb-3 border-t border-[var(--colorBorderSecondary)] pt-3",children:[(0,e.jsx)(l,{strong:!0,className:"text-sm",children:"章级清单"}),(0,e.jsx)(l,{type:"secondary",className:"text-xs ml-2",children:"章级候选内容与资料检索提示;实际职责由本次规划确定。"})]}),(0,e.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-x-4",children:[(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","queries"],label:"资料检索词",extra:"帮助定位相关资料。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],className:"w-full",placeholder:"回车添加"})}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","requiredFacts"],label:"待核事实提示",extra:"提示应查证的项目事实。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],className:"w-full",placeholder:"回车添加"})}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","tableSections"],label:"成表内容建议",extra:"提示适合用表格表达的内容。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],className:"w-full",placeholder:"回车添加"})}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","tableRequirements"],label:"表格表达提示",extra:"提示表格列项与表达方式。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],className:"w-full",placeholder:"回车添加"})})]}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","pinnedEvidenceFilePaths"],label:"相关证据文件",extra:"填写需要关注的文件名;实际读取范围和来源资格仍由本次任务核对。",className:"!mb-0",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],placeholder:"回车添加文件名"})}),(b.absentCarriers?.length??0)>0&&(0,e.jsxs)("div",{className:"mt-4 rounded-xl border border-[var(--borderColor)] bg-[var(--colorFillAlter)] px-3 py-2.5",children:[(0,e.jsx)("div",{className:"text-xs font-semibold mb-1",children:"不在这里配置的事项"}),(0,e.jsx)("div",{className:"text-xs text-[var(--colorTextSecondary)]",children:b.absentCarriers.map(a=>(0,e.jsxs)("div",{children:[a.label,":","formatting"===a.id?"排版要求由招标资料与导出设置管理,技能编辑器提供专业内容。":a.note]},a.id))})]})]}),(0,e.jsx)(i.PZ,{title:"禁写项",description:"这条技能明确要求避免的内容或表达;没有就留空。",children:(0,e.jsx)(f.lV.Item,{name:"forbidden",extra:"填错一条会挡住真实存在的内容,宁可留空。",className:"!mb-0",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],placeholder:"输入后回车,例如:管道闭水试验"})})}),(0,e.jsx)(i.PZ,{title:"可加载工艺知识",description:"选用后,这些工艺卡会作为专业参考进入本次写作;引用是否存在由保存前的校验核对。",children:(0,e.jsx)(f.lV.List,{name:"knowledge",children:(a,{add:b,remove:c})=>(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[a.map(({key:a,name:b,...d})=>(0,e.jsxs)(i.jT,{onRemove:()=>c(b),columns:"md:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]",children:[(0,e.jsx)(f.lV.Item,{...d,name:[b,"ids"],rules:[{required:!0,type:"array",min:1,message:"请选择实际工艺卡"}],className:"!mb-0",children:(0,e.jsx)(f.l6,{mode:"multiple",showSearch:!0,optionFilterProp:"label",options:n,placeholder:"按工艺卡名称搜索"})}),(0,e.jsx)(f.lV.Item,{...d,name:[b,"note"],className:"!mb-0",children:(0,e.jsx)(f.pd,{placeholder:"适用条件说明(可选)"})})]},a)),(0,e.jsxs)(f.$n,{type:"dashed",block:!0,icon:(0,e.jsx)(g.PlusOutlined,{}),onClick:()=>b({kind:"processCard",ids:[]}),children:[d("common.add"),"工艺知识"]})]})})}),(0,e.jsx)(i.PZ,{className:"xl:col-span-2",title:"专业写作核对提示",description:"写清适用对象、方法和检验注意。提示供作者按具体任务选用,不构成评分、字数或参数数量要求。",children:(0,e.jsx)(f.lV.List,{name:"acceptance",children:(a,{add:b,remove:c})=>(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[a.map(({key:a,name:b,...d})=>(0,e.jsx)(i.jT,{onRemove:()=>c(b),columns:"md:grid-cols-[minmax(0,1fr)]",children:(0,e.jsx)(f.lV.Item,{...d,name:[b,"checklistItems"],rules:[{required:!0,type:"array",min:1,message:"请输入专业注意事项"}],className:"!mb-0",children:(0,e.jsx)(f.l6,{mode:"tags",className:"w-full",placeholder:"例如:保留实际检验对象、触发条件和转序要求"})})},a)),(0,e.jsxs)(f.$n,{type:"dashed",block:!0,icon:(0,e.jsx)(g.PlusOutlined,{}),onClick:()=>b({kind:"llmChecklist",checklistItems:[]}),children:[d("common.add"),"专业提示"]})]})})}),(0,e.jsx)(i.PZ,{className:"xl:col-span-2",title:"资料与采用边界",description:"以下边界由软件统一执行,技能不能扩大或豁免。",children:(0,e.jsx)("div",{className:"flex flex-col gap-2",children:b.isolationRules.map(a=>(0,e.jsxs)("div",{className:"flex flex-col sm:flex-row sm:items-baseline gap-1 sm:gap-2",children:[(0,e.jsx)(l,{className:"text-sm shrink-0",children:a.label}),(0,e.jsx)(l,{type:"secondary",className:"text-xs",children:a.note})]},a.id))})})]})})}d()}catch(a){d(a)}})}};