@customize-agent/server 4.59.2 → 4.59.3

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 (226) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +34 -29
  3. package/.next/prerender-manifest.json +3 -3
  4. package/.next/required-server-files.json +5 -2
  5. package/.next/routes-manifest.json +16 -0
  6. package/.next/server/chunks/1001.js +2 -56
  7. package/.next/server/chunks/1243.js +3 -0
  8. package/.next/server/chunks/1928.js +1 -1
  9. package/.next/server/chunks/1936.js +2 -2
  10. package/.next/server/chunks/2328.js +6 -0
  11. package/.next/server/chunks/2434.js +4 -4
  12. package/.next/server/chunks/3806.js +1 -0
  13. package/.next/server/chunks/4974.js +2 -0
  14. package/.next/server/chunks/5304.js +2 -0
  15. package/.next/server/chunks/5746.js +5 -0
  16. package/.next/server/chunks/6321.js +1 -3
  17. package/.next/server/chunks/7931.js +142 -0
  18. package/.next/server/chunks/8204.js +1 -1
  19. package/.next/server/chunks/9666.js +142 -0
  20. package/.next/server/instrumentation.js +1 -0
  21. package/.next/server/instrumentation.js.nft.json +1 -0
  22. package/.next/server/middleware-build-manifest.js +1 -1
  23. package/.next/server/pages/404.html +1 -1
  24. package/.next/server/pages/500.html +1 -1
  25. package/.next/server/pages/api/assets/generated/preview.js +1 -1
  26. package/.next/server/pages/api/assets/generated/preview.js.nft.json +1 -1
  27. package/.next/server/pages/api/assets/generated.js +1 -1
  28. package/.next/server/pages/api/assets/generated.js.nft.json +1 -1
  29. package/.next/server/pages/api/config/embedding/healthCheck.js +2 -1
  30. package/.next/server/pages/api/config/embedding/healthCheck.js.nft.json +1 -1
  31. package/.next/server/pages/api/config/embedding.js +2 -1
  32. package/.next/server/pages/api/config/embedding.js.nft.json +1 -1
  33. package/.next/server/pages/api/config/healthCheck.js +2 -2
  34. package/.next/server/pages/api/config/healthCheck.js.nft.json +1 -1
  35. package/.next/server/pages/api/config/models.js +2 -1
  36. package/.next/server/pages/api/config/models.js.nft.json +1 -1
  37. package/.next/server/pages/api/config/providers/[provider].js +2 -1
  38. package/.next/server/pages/api/config/providers/[provider].js.nft.json +1 -1
  39. package/.next/server/pages/api/config/providers.js +2 -2
  40. package/.next/server/pages/api/config/providers.js.nft.json +1 -1
  41. package/.next/server/pages/api/config/web-access.js +2 -1
  42. package/.next/server/pages/api/config/web-access.js.nft.json +1 -1
  43. package/.next/server/pages/api/documents/canvas/[id].js +1 -2
  44. package/.next/server/pages/api/documents/canvas/[id].js.nft.json +1 -1
  45. package/.next/server/pages/api/documents/export.js +11 -9
  46. package/.next/server/pages/api/documents/export.js.nft.json +1 -1
  47. package/.next/server/pages/api/documents/generate/preview.js +1 -2
  48. package/.next/server/pages/api/documents/generate/preview.js.nft.json +1 -1
  49. package/.next/server/pages/api/documents/generate.js +1 -2
  50. package/.next/server/pages/api/documents/generate.js.nft.json +1 -1
  51. package/.next/server/pages/api/documents/generated/[id]/events.js +2 -3
  52. package/.next/server/pages/api/documents/generated/[id]/events.js.nft.json +1 -1
  53. package/.next/server/pages/api/documents/generated/[id]/figure/[name].js +1 -1
  54. package/.next/server/pages/api/documents/generated/[id]/figure/[name].js.nft.json +1 -1
  55. package/.next/server/pages/api/documents/generated/[id]/instruction.js +2 -0
  56. package/.next/server/pages/api/documents/generated/[id]/instruction.js.nft.json +1 -0
  57. package/.next/server/pages/api/documents/generated/[id]/nodes/[nodeId].js +1 -2
  58. package/.next/server/pages/api/documents/generated/[id]/nodes/[nodeId].js.nft.json +1 -1
  59. package/.next/server/pages/api/documents/generated/[id]/nodes.js +1 -2
  60. package/.next/server/pages/api/documents/generated/[id]/nodes.js.nft.json +1 -1
  61. package/.next/server/pages/api/documents/generated/[id]/pause.js +1 -2
  62. package/.next/server/pages/api/documents/generated/[id]/pause.js.nft.json +1 -1
  63. package/.next/server/pages/api/documents/generated/[id]/preview.js +1 -2
  64. package/.next/server/pages/api/documents/generated/[id]/preview.js.nft.json +1 -1
  65. package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/confirm.js +1 -1
  66. package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/confirm.js.nft.json +1 -1
  67. package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/rollback.js +1 -1
  68. package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/rollback.js.nft.json +1 -1
  69. package/.next/server/pages/api/documents/generated/[id]/repair.js +1 -1
  70. package/.next/server/pages/api/documents/generated/[id]/repair.js.nft.json +1 -1
  71. package/.next/server/pages/api/documents/generated/[id]/report.js +1 -0
  72. package/.next/server/pages/api/documents/generated/[id]/report.js.nft.json +1 -0
  73. package/.next/server/pages/api/documents/generated/[id]/resume-generate.js +1 -2
  74. package/.next/server/pages/api/documents/generated/[id]/resume-generate.js.nft.json +1 -1
  75. package/.next/server/pages/api/documents/generated/[id].js +1 -2
  76. package/.next/server/pages/api/documents/generated/[id].js.nft.json +1 -1
  77. package/.next/server/pages/api/documents/generated.js +1 -1
  78. package/.next/server/pages/api/documents/generated.js.nft.json +1 -1
  79. package/.next/server/pages/api/health.js +1 -1
  80. package/.next/server/pages/api/jobs/[id].js +2 -5
  81. package/.next/server/pages/api/jobs/[id].js.nft.json +1 -1
  82. package/.next/server/pages/api/kb/categories.js +1 -4
  83. package/.next/server/pages/api/kb/categories.js.nft.json +1 -1
  84. package/.next/server/pages/api/kb/duplicates.js +1 -4
  85. package/.next/server/pages/api/kb/duplicates.js.nft.json +1 -1
  86. package/.next/server/pages/api/kb/features.js +2 -1
  87. package/.next/server/pages/api/kb/features.js.nft.json +1 -1
  88. package/.next/server/pages/api/kb/files/detail.js +1 -6
  89. package/.next/server/pages/api/kb/files/detail.js.nft.json +1 -1
  90. package/.next/server/pages/api/kb/files/export.js +1 -5
  91. package/.next/server/pages/api/kb/files/export.js.nft.json +1 -1
  92. package/.next/server/pages/api/kb/files/open.js +1 -4
  93. package/.next/server/pages/api/kb/files/open.js.nft.json +1 -1
  94. package/.next/server/pages/api/kb/files/preview-pdf-page.js +1 -4
  95. package/.next/server/pages/api/kb/files/preview-pdf-page.js.nft.json +1 -1
  96. package/.next/server/pages/api/kb/files/reindex.js +2 -1
  97. package/.next/server/pages/api/kb/files/reindex.js.nft.json +1 -1
  98. package/.next/server/pages/api/kb/files/search.js +1 -5
  99. package/.next/server/pages/api/kb/files/search.js.nft.json +1 -1
  100. package/.next/server/pages/api/kb/files.js +2 -6
  101. package/.next/server/pages/api/kb/files.js.nft.json +1 -1
  102. package/.next/server/pages/api/kb/ignore.js +1 -4
  103. package/.next/server/pages/api/kb/ignore.js.nft.json +1 -1
  104. package/.next/server/pages/api/kb/material-groups.js +1 -2
  105. package/.next/server/pages/api/kb/material-groups.js.nft.json +1 -1
  106. package/.next/server/pages/api/kb/operations.js +2 -5
  107. package/.next/server/pages/api/kb/operations.js.nft.json +1 -1
  108. package/.next/server/pages/api/kb/reindex.js +2 -1
  109. package/.next/server/pages/api/kb/reindex.js.nft.json +1 -1
  110. package/.next/server/pages/api/kb/stats.js +1 -4
  111. package/.next/server/pages/api/kb/stats.js.nft.json +1 -1
  112. package/.next/server/pages/api/kb/tags.js +1 -4
  113. package/.next/server/pages/api/kb/tags.js.nft.json +1 -1
  114. package/.next/server/pages/api/kb/upload/complete.js +2 -1
  115. package/.next/server/pages/api/kb/upload/complete.js.nft.json +1 -1
  116. package/.next/server/pages/api/kb/upload.js +2 -1
  117. package/.next/server/pages/api/kb/upload.js.nft.json +1 -1
  118. package/.next/server/pages/api/prompt/chat.js +5 -11
  119. package/.next/server/pages/api/prompt/chat.js.nft.json +1 -1
  120. package/.next/server/pages/api/prompt.js +2 -1
  121. package/.next/server/pages/api/prompt.js.nft.json +1 -1
  122. package/.next/server/pages/api/skills/[id].js +1 -1
  123. package/.next/server/pages/api/skills/[id].js.nft.json +1 -1
  124. package/.next/server/pages/api/skills/validate.js +1 -1
  125. package/.next/server/pages/api/skills/validate.js.nft.json +1 -1
  126. package/.next/server/pages/api/skills.js +1 -1
  127. package/.next/server/pages/api/skills.js.nft.json +1 -1
  128. package/.next/server/pages/api/system/data-health.js +2 -2
  129. package/.next/server/pages/api/system/data-health.js.nft.json +1 -1
  130. package/.next/server/pages/api/system/logs.js +2 -2
  131. package/.next/server/pages/api/system/logs.js.nft.json +1 -1
  132. package/.next/server/pages/api/system/reset.js +1 -0
  133. package/.next/server/pages/api/{kb/intelligence.js.nft.json → system/reset.js.nft.json} +1 -1
  134. package/.next/server/pages/api/system/stats.js +2 -1
  135. package/.next/server/pages/api/system/stats.js.nft.json +1 -1
  136. package/.next/server/pages/canvas/[id].html +1 -1
  137. package/.next/server/pages/canvas.html +1 -1
  138. package/.next/server/pages/documents.html +1 -1
  139. package/.next/server/pages/guide.html +1 -1
  140. package/.next/server/pages/index.html +1 -1
  141. package/.next/server/pages/knowledge/file-detail.html +1 -1
  142. package/.next/server/pages/knowledge/files.html +1 -1
  143. package/.next/server/pages/knowledge/manage.html +1 -1
  144. package/.next/server/pages/knowledge.html +1 -1
  145. package/.next/server/pages/models.html +1 -1
  146. package/.next/server/pages/overview.html +1 -1
  147. package/.next/server/pages/prompt.html +1 -1
  148. package/.next/server/pages/settings.html +1 -1
  149. package/.next/server/pages/skills.html +1 -1
  150. package/.next/server/pages/system/logs.html +1 -1
  151. package/.next/server/pages-manifest.json +41 -44
  152. package/.next/server/webpack-runtime.js +1 -1
  153. package/.next/static/7819131dbd58574b80d0784549af250fc9b202d0e2317de83fe25857af834b79/_buildManifest.js +1 -0
  154. package/.next/static/chunks/278-31fbe7e1b733a9b7.js +1 -0
  155. package/.next/static/chunks/{426-90638907336adcb8.js → 426-22c4cedb04b0d45d.js} +1 -1
  156. package/.next/static/chunks/530-d9f0418ec7ab040f.js +1 -0
  157. package/.next/static/chunks/709-14ed28f1f6d4b25e.js +1 -0
  158. package/.next/static/chunks/713-b1ce7a4a4ef015f4.js +1 -0
  159. package/.next/static/chunks/795-48065c56c3b80339.js +1 -0
  160. package/.next/static/chunks/864-b06700e1a4e573f2.js +6 -0
  161. package/.next/static/chunks/90-3a5ea00990b4e72b.js +1 -0
  162. package/.next/static/chunks/964-7e9fe2d80a53aeee.js +78 -0
  163. package/.next/static/chunks/pages/{_app-c560816f0a8a0815.js → _app-591ac7a50d506b05.js} +20 -20
  164. package/.next/static/chunks/pages/canvas/[id]-3c2b950c135f6699.js +1 -0
  165. package/.next/static/chunks/pages/{canvas-323d44fe56d685a7.js → canvas-9086d8d3a7d32776.js} +1 -1
  166. package/.next/static/chunks/pages/guide-a8eecc6c02b5bb9c.js +1 -0
  167. package/.next/static/chunks/pages/knowledge/file-detail-bd4b6e4264e812ff.js +1 -0
  168. package/.next/static/chunks/pages/knowledge-a65ec687334ffed0.js +1 -0
  169. package/.next/static/chunks/pages/models-baf1d15d79cb366b.js +1 -0
  170. package/.next/static/chunks/pages/prompt-b8af2cef904e3e19.js +1 -0
  171. package/.next/static/chunks/pages/settings-81dffd92939c1d36.js +1 -0
  172. package/.next/static/chunks/pages/skills-648c64f8cb37ef5d.js +1 -0
  173. package/.next/static/chunks/pages/system/logs-1f54b6c8791daa77.js +1 -0
  174. package/.next/static/css/f35b901a72bb3ade.css +1 -0
  175. package/README.md +48 -45
  176. package/messages/en-US.json +76 -65
  177. package/messages/zh-CN.json +76 -65
  178. package/next.config.ts +5 -0
  179. package/package.json +7 -9
  180. package/public/fonts/NotoSansCJKsc-Regular.otf +0 -0
  181. package/public/fonts/OFL-Noto-CJK.txt +142 -0
  182. package/public/fonts/font-manifest.json +8 -0
  183. package/scripts/build-identity.cjs +67 -0
  184. package/scripts/capture-baseline.mjs +100 -290
  185. package/scripts/check-workspace-deps.cjs +141 -0
  186. package/scripts/half-built-scan.allow.json +142 -0
  187. package/scripts/half-built-scan.baseline.json +206 -0
  188. package/scripts/half-built-scan.mjs +275 -55
  189. package/scripts/kb-fingerprint-worker.cjs +28 -0
  190. package/scripts/kb-index-worker.cjs +27 -20
  191. package/scripts/kb-worker-ipc.cjs +34 -0
  192. package/scripts/purge-next-artifacts.cjs +70 -0
  193. package/scripts/verify-next-static.js +2 -2
  194. package/.next/server/chunks/299.js +0 -50
  195. package/.next/server/chunks/4435.js +0 -350
  196. package/.next/server/chunks/6087.js +0 -3
  197. package/.next/server/pages/api/jobs.js +0 -5
  198. package/.next/server/pages/api/jobs.js.nft.json +0 -1
  199. package/.next/server/pages/api/kb/evaluate.js +0 -10
  200. package/.next/server/pages/api/kb/evaluate.js.nft.json +0 -1
  201. package/.next/server/pages/api/kb/files/tree.js +0 -5
  202. package/.next/server/pages/api/kb/files/tree.js.nft.json +0 -1
  203. package/.next/server/pages/api/kb/intelligence.js +0 -1
  204. package/.next/server/pages/api/kb/search.js +0 -4
  205. package/.next/server/pages/api/kb/search.js.nft.json +0 -1
  206. package/.next/server/pages/api/kb/upload/progress.js +0 -5
  207. package/.next/server/pages/api/kb/upload/progress.js.nft.json +0 -1
  208. package/.next/static/2MjosIoMmZUcFnY_P02ZD/_buildManifest.js +0 -1
  209. package/.next/static/chunks/243-03eba51d5d737e98.js +0 -1
  210. package/.next/static/chunks/289-136ebb30e0f6723a.js +0 -78
  211. package/.next/static/chunks/422-46f07037c58d2309.js +0 -1
  212. package/.next/static/chunks/445-d12731f107978b10.js +0 -6
  213. package/.next/static/chunks/530-df2ce692cf0fa512.js +0 -1
  214. package/.next/static/chunks/709-a7c652953ccd3b4b.js +0 -1
  215. package/.next/static/chunks/795-81a3e3973fc43791.js +0 -1
  216. package/.next/static/chunks/pages/canvas/[id]-515edd3e72acaf82.js +0 -1
  217. package/.next/static/chunks/pages/guide-7367305082617e3c.js +0 -1
  218. package/.next/static/chunks/pages/knowledge/file-detail-aee7c15541d1d130.js +0 -1
  219. package/.next/static/chunks/pages/knowledge-ca8ad5501faed486.js +0 -1
  220. package/.next/static/chunks/pages/models-8b96ba85131d5408.js +0 -1
  221. package/.next/static/chunks/pages/prompt-dd9a9f9105216e2b.js +0 -1
  222. package/.next/static/chunks/pages/settings-0a7709bf039a2a4d.js +0 -1
  223. package/.next/static/chunks/pages/skills-3d77213c3e9ef0b5.js +0 -1
  224. package/.next/static/chunks/pages/system/logs-9deb1217739490af.js +0 -1
  225. package/.next/static/css/85c434f8fd3a17ae.css +0 -1
  226. /package/.next/static/{2MjosIoMmZUcFnY_P02ZD → 7819131dbd58574b80d0784549af250fc9b202d0e2317de83fe25857af834b79}/_ssgManifest.js +0 -0
@@ -1,3 +1 @@
1
- "use strict";exports.id=6321,exports.ids=[6321],exports.modules={1168:(a,b,c)=>{c.d(b,{EL:()=>F,zT:()=>E,II:()=>D,bJ:()=>K,Jr:()=>B,O0:()=>T,uj:()=>s,GC:()=>r,qj:()=>N,x8:()=>C,Kg:()=>I,a3:()=>R,Qs:()=>z,PI:()=>L,dB:()=>U,Jy:()=>Q,uv:()=>p,vp:()=>u,m_:()=>o,kH:()=>y,z9:()=>w,Aq:()=>P,RV:()=>M,Kq:()=>G});var d=c(82015),e=c(79270);let f=["failed","paused","repairing","blocked","running","pending","completed"],g=["chars","costUsd"];function h(a,b){return a.seq!==b.seq?a.seq-b.seq:a.id===b.id?0:a.id<b.id?-1:1}function i(a){let b=new Map;for(let c of a){if(void 0===c.parentId)continue;let a=b.get(c.parentId);a?a.push(c):b.set(c.parentId,[c])}for(let a of b.values())a.sort(h);return b}function j(a){let b=new Map(a.map(a=>[a.id,a])),c=new Map;for(let d of a){let a=0,e=d,f=new Set([d.id]);for(;e?.parentId!==void 0;){let c=b.get(e.parentId);if(!c||f.has(c.id))break;f.add(c.id),a+=1,e=c}c.set(d.id,a)}return c}let k=new Set(["prepare","understand","plan","blueprint","write","close","deliver","chapter","block","turn","round","round.observe","round.decide","round.fix","repair.request","repair.localize","repair.impact","repair.transaction","repair.recheck","supervisor","skill.load"]),l=new Set(["failed","paused","repairing","blocked","running","pending","completed"]),m={pending:{key:"common.statusWaiting",text:"等待中",color:"default"},running:{key:"common.statusRunning",text:"进行中",color:"processing"},completed:{key:"common.statusCompleted",text:"已完成",color:"success"},paused:{key:"common.statusPaused",text:"已暂停",color:"gold"},repairing:{key:"common.statusRepairing",text:"修复中",color:"warning"},blocked:{key:"common.statusBlocked",text:"已放弃(阻塞)",color:"warning"},failed:{key:"common.statusAbnormal",text:"异常",color:"error"}};function n(a,b,c,d){let e=a[b];if(!e)return`未知${c}(${b||"空"})`;if(e.key&&d){let a=d(e.key);if(a&&a!==e.key)return a}return e.text}function o(a,b){return n(m,a,"状态",b)}function p(a){return m[a]?.color??"default"}let q={queued:{key:"common.statusWaiting",text:"排队中",color:"default"},generating:{key:"common.statusRunning",text:"生成中",color:"processing"},paused:{key:"common.statusPaused",text:"已暂停(节点边界生效)",color:"gold"},completed:{key:"common.statusCompleted",text:"已完成",color:"success"},completed_with_issues:{key:"common.statusReview",text:"完成(有需复核项)",color:"warning"},warning:{key:"common.statusReview",text:"需复核",color:"warning"},failed:{key:"common.statusAbnormal",text:"失败",color:"error"},aborted:{key:"common.statusAbnormal",text:"已中止",color:"default"}};function r(a,b){return n(q,a,"记录状态",b)}function s(a){return q[a]?.color??"default"}let t=["failed","paused","repairing","blocked","running","pending","completed"];function u(a){let b=t.indexOf(a);return b>=0?b:t.length}let v={prepare:"生成准备",understand:"资料理解",plan:"规划",blueprint:"蓝图",write:"正文撰写",close:"收口",deliver:"交付",chapter:"章节",block:"块",turn:"轮次",round:"收口轮","round.observe":"收口\xb7观察","round.decide":"收口\xb7判定","round.fix":"收口\xb7修复","repair.request":"修复\xb7请求","repair.localize":"修复\xb7定位","repair.impact":"修复\xb7影响面","repair.transaction":"修复\xb7事务","repair.recheck":"修复\xb7复检","skill.load":"技能命中",supervisor:"调度决策"};function w(a){return a?v[a]??a:"未知节点"}let x={role_binding:(0,d.createElement)(e.LinkOutlined),knowledge_retrieval:(0,d.createElement)(e.SearchOutlined),file_understanding:(0,d.createElement)(e.FileSearchOutlined),fact_extraction:(0,d.createElement)(e.TableOutlined),chapter_generation:(0,d.createElement)(e.EditOutlined),llm_review:(0,d.createElement)(e.AuditOutlined),validation:(0,d.createElement)(e.SafetyCertificateOutlined),reference:(0,d.createElement)(e.BookOutlined),prepare:(0,d.createElement)(e.ToolOutlined),understand:(0,d.createElement)(e.DatabaseOutlined),plan:(0,d.createElement)(e.ApartmentOutlined),blueprint:(0,d.createElement)(e.DeploymentUnitOutlined),write:(0,d.createElement)(e.FormOutlined),chapter:(0,d.createElement)(e.FileTextOutlined),block:(0,d.createElement)(e.BlockOutlined),turn:(0,d.createElement)(e.SyncOutlined),round:(0,d.createElement)(e.RetweetOutlined),close:(0,d.createElement)(e.CompressOutlined),deliver:(0,d.createElement)(e.ExportOutlined),repair:(0,d.createElement)(e.BugOutlined),skill:(0,d.createElement)(e.EyeOutlined),supervisor:(0,d.createElement)(e.ClusterOutlined),default:(0,d.createElement)(e.ToolOutlined)};function y(a){return x[a.split(".")[0]||a]??x.default}function z(a){return x[a]??x.default}function A(a){var b;let c=a.issues;return{id:a.id,...void 0!==a.parentId?{parentId:a.parentId}:{},type:a.type||"block",title:a.title??"",seq:"number"==typeof a.seq&&Number.isFinite(a.seq)?a.seq:0,status:"string"==typeof(b=a.status)&&l.has(b)?a.status:"failed",startedAt:"number"==typeof a.startedAt&&Number.isFinite(a.startedAt)&&a.startedAt>0?a.startedAt:0,...void 0!==a.completedAt?{completedAt:a.completedAt}:{},...a.progress?{progress:a.progress}:{},...a.metrics?{metrics:a.metrics}:{},...Array.isArray(c)&&c.length>0?{issues:c}:{},...void 0!==a.payloadRef?{payloadRef:a.payloadRef}:{}}}function B(a,b){let c=new Map(a.map(a=>[a.id,a]));return(function(a,b){let c=function(a){let b=i(a),c=j(a),d=[...a].sort((a,b)=>(c.get(b.id)??0)-(c.get(a.id)??0)||h(a,b)),e=new Map(a.map(a=>[a.id,a]));for(let a of d){let c=b.get(a.id);if(!c||0===c.length)continue;let d=c.map(a=>e.get(a.id)??a);e.set(a.id,function(a,b){if(0===b.length)return{...a};let c=[...b].sort(h),d={...a.metrics??{}};for(let a of g){let b=function(a,b){let c=0,d=!1;for(let e of a){let a=e.metrics?.[b];"number"==typeof a&&Number.isFinite(a)&&(c+=a,d=!0)}return d?c:void 0}(c,a);void 0===b?delete d[a]:d[a]=b}let e=a.progress?.label,i={current:c.filter(a=>"completed"===a.status).length,total:c.length,...void 0!==e?{label:e}:{}},j=function(a){let b=new Set,c=[];for(let d of a){let a=d.provenance?.fingerprint;if("string"==typeof a&&a.length>0){if(b.has(a))continue;b.add(a)}c.push(d)}return c}(c.flatMap(a=>a.issues??[])),k=function(a){let b,c=1/0;for(let d of a){let a=function(a){let b=f.indexOf(a);return b>=0?b:0}(d);a<c&&(c=a,b=d)}return b}(c.map(a=>a.status))??a.status;return{...a,status:k,progress:i,...Object.keys(d).length>0?{metrics:d}:{},...j.length>0?{issues:j}:{}}}(a,d))}return[...a].sort(h).map(a=>e.get(a.id)??a)}(a),d=i(c),e=new Set(c.map(a=>a.id)),k=1/0,l=(a,b)=>{let c=b+1<k?(d.get(a.id)??[]).filter(b=>b.id!==a.id).map(a=>l(a,b+1)):[];return{...a,children:c}},m=c.filter(a=>void 0===a.parentId||!e.has(a.parentId)).sort(h).map(a=>l(a,0)),n=new Set,o=a=>{for(let b of a)n.add(b.id),o(b.children)};for(let a of(o(m),c))n.has(a.id)||m.push(l(a,0));return m})(function(a,b){if(void 0===b)return[...a];let c=j(a),d=Math.max(0,Math.floor(b));return a.filter(a=>(c.get(a.id)??0)<d)}(a.map(A),b)).map(a=>(function a(b,c){let d=c.get(b.id),e=d?.type??String(b.type),f=b.issues;return{id:b.id,...void 0!==b.parentId?{parentId:b.parentId}:{},type:e,unknownType:!("string"==typeof e&&k.has(e)),title:b.title||w(e),seq:b.seq,status:b.status,..."number"==typeof b.startedAt&&b.startedAt>0?{startedAt:b.startedAt}:{},...void 0!==b.completedAt?{completedAt:b.completedAt}:{},...b.progress?{progress:b.progress}:{},metrics:b.metrics??{},issues:Array.isArray(f)?f:[],...void 0!==b.payloadRef?{payloadRef:b.payloadRef}:{},children:b.children.map(b=>a(b,c))}})(a,c))}function C(a){let b=[],c=a=>{for(let d of a)b.push(d),c(d.children)};return c(a),b.sort(h)}function D(a,b){let c=[],d=(a,e)=>{for(let f of a){if(f.id===b)return c.push(...e),!0;if(d(f.children,[...e,f.id]))return!0}return!1};return d(a,[]),c}let E=236,F=76;function G(a,b){if(!b)return a;let c=new Map(a),d=c.get(b.id)??{dx:0,dy:0};return c.set(b.id,{dx:d.dx+b.dx,dy:d.dy+b.dy}),c}let H=new Set(["running","repairing"]);function I(a){let b=new Set(a.nodes.filter(a=>H.has(a.node.status)).map(a=>a.node.id));if(0===b.size)return J;let c=new Set;for(let d of a.edges)b.has(d.fromId)&&c.add(d.id);return c}let J=new Set;function K(a,b){if(0===b.size)return a;let c=a.nodes.map(a=>{let c=b.get(a.node.id);return c?{...a,x:a.x+c.dx,y:a.y+c.dy}:a}),d=a.edges.map(a=>{let c=b.get(a.fromId),d=b.get(a.toId);return c||d?{...a,x1:a.x1+(c?.dx??0),y1:a.y1+(c?.dy??0),x2:a.x2+(d?.dx??0),y2:a.y2+(d?.dy??0)}:a});return{...a,nodes:c,edges:d}}function L(a){let b=[],c=[],d=0,e=(a,f)=>{let g,h=a.children,i=40+f*(E+72),j=h.map(a=>({id:a.id,...e(a,f+1)}));for(let e of(0===j.length?(g=40+d*(F+22),d+=1):g=(j[0].y+j[j.length-1].y)/2,b.push({node:a,x:i,y:g,depth:f}),j))c.push({id:`${a.id}->${e.id}`,fromId:a.id,toId:e.id,x1:i+E/2,y1:g+F,x2:e.x+E/2,y2:e.y});return{x:i,y:g}};for(let b of a)e(b,0),d+=1;let f=b.reduce((a,b)=>Math.max(a,b.x+E),0),g=b.reduce((a,b)=>Math.max(a,b.y+F),0);return{nodes:b,edges:c,width:f+40,height:g+40}}function M(a,b){let c=[`影响面:${b.kind}`,`波及 ${b.affectedNodeIds.length} 个节点`,...b.escalate?["超出阈值需人工确认"]:[],...b.rollbackable?[]:["不可回滚:按 11.1 需回滚或重新校准,不得当普通改动提交"]];return`请修复节点「${a}」(${c.join(",")})`}function N(a,b){let c=b>0?b:1;return{dx:a.dx/c,dy:a.dy/c}}let O=(a,b)=>a.left<b.right&&a.right>b.left&&a.top<b.bottom&&a.bottom>b.top;function P(a){let{node:b,view:c,box:d,panelWidth:e,panelHeight:f,gap:g=12,margin:h=8,obstacles:i=[]}=a,j=(a,b,c)=>Math.min(Math.max(a,b),Math.max(b,c)),k=Math.min(e,Math.max(0,d.width-2*h)),l=b.x*c.k+c.x,m=b.y*c.k+c.y,n=m+F*c.k,o={left:l,top:m,right:l+E*c.k,bottom:n},p=d.width-k-h,q=(a,b)=>{let c=i.filter(c=>c.top>=b&&c.left<a+k&&c.right>a).map(a=>a.top-g);return Math.max(0,Math.min(d.height-h,...c,d.height-h)-b)},r=a=>{let b=d.height-a-h,e=(c,d)=>{if(c<h||d<h||c>p||d>b)return!1;let e={left:c,top:d,right:c+k,bottom:d+a};return!i.some(a=>O(e,a))},f=l+(E+g)*c.k,r=l-k-g*c.k,s=n+g,t=m-a-g;for(let[a,b]of[[f,s],[f,t],[r,s],[r,t]])if(e(a,b))return{left:a,top:b,maxHeight:Math.max(0,Math.min(q(a,b),d.height-b-h))};let u=[f,r,h,p],v=[s,t,h,b,...i.flatMap(b=>[b.bottom+g,b.top-a-g])],w=null,x=1/0;for(let c of u)for(let d of v){let f=j(c,h,p),g=j(d,h,Math.max(h,b));if(!e(f,g))continue;let i={left:f,top:g,right:f+k,bottom:g+a},l=Math.max(Math.max(0,o.left-i.right,i.left-o.right),Math.max(0,o.top-i.bottom,i.top-o.bottom))+1e3*!!O(i,o);l<x&&(x=l,w={left:f,top:g})}return w?{...w,maxHeight:q(w.left,w.top)}:null};if(a.pin){let b=j(a.pin.left,h,p),c=j(a.pin.top,h,Math.max(h,d.height-2*h));return{left:b,top:c,maxHeight:Math.max(0,Math.min(q(b,c),d.height-c-h))}}let s=Math.min(f,Math.max(0,d.height-2*h)),t=r(s);if(t)return t;let u=function(a,b,c=8){let d=a.height-c,e=b.map(a=>({start:Math.max(c,a.top),end:Math.min(d,a.bottom)})).filter(a=>a.end>a.start).sort((a,b)=>a.start-b.start),f=0,g=c;for(let a of e)a.start>g&&(f=Math.max(f,a.start-g)),g=Math.max(g,a.end);return Math.max(f,d-g)}(d,i,h)-g;if(u>0&&u<s){let a=r(Math.max(120,u));if(a)return a}return t??r(Math.max(120,u))??{left:j(l+(E+g)*c.k,h,p),top:h,maxHeight:Math.max(0,d.height-2*h)}}function Q(a){if("number"!=typeof a.startedAt||a.metrics?.instantEvent===!0)return;let b=("number"==typeof a.completedAt?a.completedAt:Date.now())-a.startedAt;return b>=0?b:void 0}function R(a){if(void 0===a)return"—";let b=Math.max(0,Math.round(a/1e3));if(b<60)return`${b} 秒`;let c=Math.floor(b/60);return c<60?`${c} 分 ${b%60} 秒`:`${Math.floor(c/60)} 小时 ${c%60} 分`}let S=[{key:"note",format:a=>String(a)},{key:"chars",format:a=>`${Number(a).toLocaleString()} 字`},{key:"targetWords",format:a=>`目标 ${Number(a).toLocaleString()} 字`},{key:"turn",format:a=>`第 ${a} 轮`},{key:"residual",format:a=>`残余 ${a}`},{key:"toolCalls",format:a=>`工具 ${a} 次`},{key:"attempt",format:a=>`第 ${a} 次尝试`},{key:"failureKinds",format:a=>String(a)},{key:"chapters",format:a=>`${a} 章`},{key:"facts",format:a=>`${a} 条事实`}];function T(a,b=2){let c=[];for(let{key:d,format:e}of S){let f=a[d];if(void 0===f||""===f||!1===f)continue;let g=e(f);if(g.trim()&&(c.push(g),c.length>=b))break}return c}function U(a,b=6){return Object.entries(a).slice(0,b).map(([a,b])=>({key:a,text:"number"==typeof b?`${a}: ${Number.isInteger(b)?b:b.toFixed(2)}`:`${a}: ${String(b)}`}))}},14352:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{_:()=>n});var e=c(8732),f=c(82015),g=c(60056),h=c(79270),i=c(94487),j=c(22147),k=c(85104),l=c(89668),m=a([i]);function n({currentDocumentId:a,projectRoot:b,onSelect:c,onCurrentDeleted:d}){let m=(0,i.Vr)(),{message:n}=g.qw.useApp(),p=(0,f.useRef)(null),[q,r]=(0,f.useState)([]),[s,t]=(0,f.useState)(!1),[u,v]=(0,f.useState)(!1),[w,x]=(0,f.useState)(1),[y,z]=(0,f.useState)(!1),[A,B]=(0,f.useState)([]),[C,D]=(0,f.useState)(!1),[E,F]=(0,f.useState)(null),[G,H]=(0,f.useState)(!0),I=(0,f.useRef)(null),J=(0,f.useCallback)(async()=>{t(!0);try{let a=await (0,j.cQ)(b||void 0);r(a.documents||[])}catch{r([])}finally{t(!1)}},[b]);q.length;let K=(0,f.useMemo)(()=>q.slice((w-1)*8,8*w),[q,w]),L=(0,f.useCallback)(a=>!(0,k.Ce)(a.status),[]),M=K.filter(L).map(a=>a.id),N=()=>{if(!u){let a=p.current?.parentElement?.getBoundingClientRect(),b=p.current?.getBoundingClientRect();H(!a||!b||b.top-a.top>252)}v(a=>!a)},O=async c=>{try{await (0,j.QG)(c.id,c.projectRoot||b||void 0),n.success(m("common.success")),B(a=>a.filter(a=>a!==c.id)),c.id===a&&d(),await J()}catch{n.error(m("common.error"))}},P=async()=>{let c=q.filter(a=>A.includes(a.id)&&L(a));if(0!==c.length){D(!0);try{await Promise.all(c.map(a=>(0,j.QG)(a.id,a.projectRoot||b||void 0))),n.success(m("records.deletedCount").replace("{count}",String(c.length))),a&&c.some(b=>b.id===a)&&d(),B([]),z(!1),await J()}catch{n.error(m("common.error"))}finally{D(!1)}}},Q=E?{left:E.left,top:E.top}:{right:24,bottom:96};return(0,e.jsxs)("div",{className:"canvasRecordsBall",ref:p,style:{position:"absolute",zIndex:3,...Q},children:[u&&(0,e.jsxs)("div",{className:"canvasRecordsPanel",style:{position:"absolute",right:0,width:320,maxHeight:420,display:"flex",flexDirection:"column",...G?{bottom:52}:{top:52}},children:[(0,e.jsxs)("div",{className:"flex items-center justify-between gap-2 px-3 py-2 border-b border-[var(--canvasSectionBorder)] shrink-0",children:[(0,e.jsxs)("span",{className:"text-[13px] font-semibold text-[var(--colorText)]",children:[m("records.title"),(0,e.jsx)("span",{className:"ml-2 font-normal text-xs text-[var(--colorTextTertiary)]",children:q.length})]}),(0,e.jsx)("button",{type:"button",className:"canvasRecordsLink",onClick:()=>{z(a=>!a),B([])},children:y?m("common.cancel"):m("records.batch")})]}),(0,e.jsx)("div",{className:"flex-1 min-h-0 overflow-y-auto",children:s&&0===q.length?(0,e.jsx)("div",{className:"py-10 text-center",children:(0,e.jsx)(g.tK,{size:"small"})}):0===q.length?(0,e.jsx)("div",{className:"py-8",children:(0,e.jsx)(g.Sv,{image:g.Sv.PRESENTED_IMAGE_SIMPLE,description:(0,e.jsx)("span",{className:"text-xs text-[var(--colorTextTertiary)]",children:m("records.empty")})})}):K.map(b=>{let d=b.id===a,f=L(b);return(0,e.jsxs)("div",{className:`group flex items-start gap-2 px-3 py-2 border-b border-[var(--canvasSectionBorder)] last:border-b-0 transition-colors ${d?"bg-[var(--colorBgSelected)]":"hover:bg-[var(--colorBgHover)]"}`,children:[y&&(0,e.jsx)("input",{type:"checkbox",className:"mt-1 shrink-0",disabled:!f,checked:A.includes(b.id),onChange:a=>B(c=>a.target.checked?[...c,b.id]:c.filter(a=>a!==b.id))}),(0,e.jsxs)("button",{type:"button",className:"min-w-0 flex-1 text-left bg-transparent border-0 p-0 cursor-pointer",title:b.title,onClick:()=>{c(b),v(!1)},children:[(0,e.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,e.jsx)("span",{className:`w-1.5 h-1.5 shrink-0 rounded-full ${o[b.status]??"bg-[var(--colorTextTertiary)]"}`}),(0,e.jsx)("span",{className:`truncate text-[13px] ${d?"font-semibold text-[var(--colorText)]":"text-[var(--colorText)]"}`,children:b.title}),d&&(0,e.jsx)("span",{className:"shrink-0 text-[10px] text-[var(--colorTextTertiary)]",children:m("records.current")})]}),(0,e.jsxs)("div",{className:"mt-0.5 pl-3 text-[11px] text-[var(--colorTextTertiary)]",children:[(0,e.jsx)(h.HistoryOutlined,{className:"mr-1"}),(0,l.fw)(b.updatedAt,"zh-CN")]})]}),!y&&f&&(0,e.jsx)(g.iS,{title:m("records.confirmDelete"),description:m("records.deleteHint"),onConfirm:()=>{O(b)},okText:m("common.confirm"),cancelText:m("common.cancel"),children:(0,e.jsx)("button",{type:"button",className:"canvasRecordsDelete",title:m("common.delete"),children:(0,e.jsx)(h.DeleteOutlined,{})})}),!y&&!f&&(0,e.jsx)(g.m_,{title:m("records.inFlightHint"),children:(0,e.jsx)("span",{className:"canvasRecordsDelete isDisabled",children:(0,e.jsx)(h.DeleteOutlined,{})})})]},b.id)})}),q.length>8&&(0,e.jsx)("div",{className:"flex justify-center px-3 py-2 border-t border-[var(--canvasSectionBorder)] shrink-0",children:(0,e.jsx)(g.dK,{size:"small",simple:!0,current:w,total:q.length,pageSize:8,onChange:x})}),y&&(0,e.jsxs)("div",{className:"flex items-center justify-between gap-2 px-3 py-2 border-t border-[var(--canvasSectionBorder)] shrink-0",children:[(0,e.jsx)("span",{className:"text-xs text-[var(--colorTextSecondary)]",children:m("records.checkedCount").replace("{count}",String(A.length))}),(0,e.jsxs)("div",{className:"flex items-center gap-2",children:[(0,e.jsx)("button",{type:"button",className:"canvasRecordsLink",onClick:()=>B(A.length===M.length?[]:M),children:A.length===M.length&&M.length>0?m("records.clearSelect"):m("records.selectPage")}),(0,e.jsx)(g.iS,{title:m("records.confirmDeleteSelected").replace("{count}",String(A.length)),description:m("records.deleteHint"),disabled:0===A.length,onConfirm:()=>{P()},okText:m("common.confirm"),cancelText:m("common.cancel"),children:(0,e.jsxs)("button",{type:"button",className:"canvasRecordsDanger",disabled:0===A.length||C,children:[(0,e.jsx)(h.DeleteOutlined,{className:"mr-1"}),m("records.deleteSelected")]})})]})]})]}),(0,e.jsxs)("div",{className:"canvasRecordsBallBtn",role:"button",tabIndex:0,"aria-label":`${m("records.title")}(${q.length})`,style:{width:44,height:44},onPointerDown:a=>{let b=p.current?.parentElement?.getBoundingClientRect(),c=p.current?.getBoundingClientRect();if(b&&c){I.current={pointerId:a.pointerId,startX:a.clientX,startY:a.clientY,originLeft:c.left-b.left,originTop:c.top-b.top,moved:!1};try{a.currentTarget.setPointerCapture(a.pointerId)}catch{}}},onPointerMove:a=>{let b=I.current,c=p.current?.parentElement?.getBoundingClientRect();if(!b||b.pointerId!==a.pointerId||!c)return;let d=a.clientX-b.startX,e=a.clientY-b.startY;!b.moved&&5>Math.hypot(d,e)||(b.moved=!0,F({left:Math.min(Math.max(8,b.originLeft+d),Math.max(8,c.width-44-8)),top:Math.min(Math.max(8,b.originTop+e),Math.max(8,c.height-44-8))}))},onPointerUp:a=>{let b=I.current;I.current=null;try{a.currentTarget.releasePointerCapture(a.pointerId)}catch{}if(b){if(b.moved)return void F(a=>{if(a)try{window.localStorage.setItem("canvas:recordsBallPos",JSON.stringify(a))}catch{}return a});N()}},onKeyDown:a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),N())},children:[(0,e.jsx)(h.HistoryOutlined,{}),(0,e.jsx)("span",{className:`canvasRecordsBallBadge${0===q.length?" isZero":""}`,children:q.length>99?"99+":q.length})]})]})}i=(m.then?(await m)():m)[0];let o={completed:"bg-[var(--colorOk)]",completed_with_issues:"bg-[var(--colorDanger)]",warning:"bg-[var(--colorWarning)]",failed:"bg-[var(--colorDanger)]",aborted:"bg-[var(--colorTextTertiary)]",generating:"bg-[var(--colorAccent)]",queued:"bg-[var(--colorTextTertiary)]",paused:"bg-[var(--colorWarning)]"};d()}catch(a){d(a)}})},15642:(a,b,c)=>{c.d(b,{_:()=>i});var d=c(8732),e=c(82015),f=c(60056),g=c(79270);let{Text:h}=f.o5;function i(a){let{value:b,onChange:c,onSend:i,generating:j,submitting:k,disabled:l,disabledReason:m,selectedNode:n,onMentionSelected:o,resumable:p,onContinue:q,quickActions:r,requireGenerationSetup:s=!1,promptOptions:t=[],projectOptions:u=[],selectedPrompts:v=[],selectedProject:w=null,onSelectPrompts:x,onSelectProject:y,onPreviewStructure:z}=a,[A,B]=(0,e.useState)(!1),C=s?[0===v.length?"提示词":"",!w?"项目":""].filter(Boolean):[],D=C.length>0,E=l?m||"当前不可发起生成":D?`请先用左侧「+」选择${C.join(" 与 ")}——未选齐时不能发起生成`:j?"有任务正在运行:发送将加入生成队列(前面任务完成后自动开始)":"发送后将创建生成任务,画布随节点日志实时增长";return(0,d.jsxs)("div",{className:"canvasInputBar",children:[(0,d.jsxs)(f.$x,{wrap:!0,size:6,style:{marginBottom:6},children:[n&&(0,d.jsx)(f.m_,{title:`把「@${n.title}」插入输入框(可见文本,可自行修改)`,children:(0,d.jsx)(f.vw,{color:"blue",style:{cursor:"pointer"},onClick:o,children:`@ ${n.title}`})}),!n&&(0,d.jsx)(h,{type:"secondary",style:{fontSize:12},children:"点选一个节点后可 @ 提及它"}),p&&!j&&(0,d.jsx)(f.$n,{size:"small",type:"link",onClick:q,children:"继续生成"}),r?.map(a=>(0,d.jsx)(f.$n,{size:"small",type:"link",onClick:a.onClick,children:a.label},a.key))]}),(0,d.jsxs)(f.$x,{wrap:!0,size:10,style:{marginBottom:8},children:[(0,d.jsx)(f.AM,{trigger:"click",placement:"topLeft",open:A,onOpenChange:B,content:(0,d.jsxs)("div",{style:{width:360,display:"flex",flexDirection:"column",gap:8},children:[s&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{children:[(0,d.jsx)(h,{strong:!0,style:{fontSize:13},children:"提示词"}),(0,d.jsx)(f.l6,{mode:"multiple",style:{width:"100%",marginTop:4},value:v.map(a=>a.value),placeholder:0===t.length?"该项目暂无提示词":"选择提示词(至少一份;可多选)",options:t,onChange:a=>x?.(a)})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)(h,{strong:!0,style:{fontSize:13},children:"项目"}),(0,d.jsx)(f.l6,{style:{width:"100%",marginTop:4},value:w?.value,showSearch:!0,optionFilterProp:"label",placeholder:0===u.length?"本项目知识库里还没有资料:先到知识库页上传并入库":"选择项目(= 知识库里这个项目的资料,决定本次用哪份材料)",options:u,onChange:a=>y?.(a)})]}),(0,d.jsx)(h,{type:"secondary",style:{fontSize:12},children:"两者选齐后才能点「生成」。「项目」选的是入库到本地知识库的那份项目资料(清单/图纸/招标文件都在其中)——本次生成只用它,不会把库里别的项目材料混进来。提示词的正文按名字进入对应链路(总控/写作 → 写作链,清单/图纸/提取 → 事实抽取链,排版 → 格式链);章节大纲取自其中带 <OUTLINE> 的那一份,且只能有一份声明大纲。"})]}),!s&&(0,d.jsx)(h,{type:"secondary",style:{fontSize:12},children:"提示词与项目取自这条记录本身(章节结构由记录里那份提示词的大纲派生),不需要在这里再选。"}),(0,d.jsx)("div",{children:(0,d.jsx)(f.$n,{size:"small",block:!0,disabled:D,onClick:()=>{B(!1),z?.()},children:"结构预览(章清单与小节)"})})]}),children:(0,d.jsx)(f.$n,{style:{marginLeft:"5px"},size:"small",icon:(0,d.jsx)(g.PlusOutlined,{}),type:D?"primary":"default",children:"提示词 / 项目"})}),v.map(a=>(0,d.jsx)(f.vw,{color:"blue",closable:!0,onClose:b=>{b.preventDefault(),x?.(v.filter(b=>b.value!==a.value).map(a=>a.value))},children:`提示词:${a.label}`},a.value)),w&&(0,d.jsx)(f.vw,{color:"geekblue",closable:!0,onClose:a=>{a.preventDefault(),y?.("")},children:`项目:${w.label}`})]}),(0,d.jsxs)(f.$x.Compact,{style:{width:"100%"},children:[(0,d.jsx)(f.pd.TextArea,{value:b,onChange:a=>c(a.target.value),onPressEnter:a=>{!a.shiftKey&&(a.preventDefault(),l||k||i())},autoSize:{minRows:1,maxRows:5},placeholder:"描述你的需求;可用上面的 @ 提及把节点带进正文(Enter 发送,Shift+Enter 换行)",disabled:l}),(0,d.jsx)(f.m_,{title:E,children:(0,d.jsx)(f.$n,{type:"primary",icon:(0,d.jsx)(g.SendOutlined,{}),loading:k,disabled:l||D||!b.trim(),onClick:i,children:j?"排队提交":"生成"})})]})]})}},16258:(a,b,c)=>{c.d(b,{p:()=>d});function d(a,b){let c=`/canvas/${encodeURIComponent(a)}`;return b?`${c}?projectRoot=${encodeURIComponent(b)}`:c}},62025:(a,b,c)=>{c.d(b,{B:()=>g});var d=c(8732),e=c(60056);let{Paragraph:f}=e.o5;function g(a){let{open:b,title:c,chapters:g,outlineSource:h,materialScope:i,onClose:j}=a,k=g.length>0?`结构预览:${c}(${g.length} 章${h?`,大纲来源:${h}`:""})`:`结构预览:${c}`;return(0,d.jsxs)(e.aF,{open:b,title:k,centered:!0,onCancel:j,width:640,styles:{container:{maxHeight:"calc(100vh - 48px)",display:"flex",flexDirection:"column"},body:{overflowY:"auto",flex:1,minHeight:0}},footer:(0,d.jsx)(e.$n,{type:"primary",onClick:j,children:"知道了"}),children:[(0,d.jsx)(f,{type:"secondary",style:{fontSize:12,marginBottom:8},children:"章清单与小节由提示词的 <OUTLINE> 大纲 + 技能库(按章域 \xd7 工程类型)派生;这份预览与点「生成」时用的是同一个派生函数、同一份输入。 要看提示词会被怎样解读(必含表格 / 禁止项 / 字数下限),去提示词页的规则预览。"}),i&&(0,d.jsx)(e.Fc,{type:"info",showIcon:!0,style:{marginBottom:8},message:`本次项目资料:${i.root||"(未指定)"}(${i.fileCount} 份文件)`,description:"资料范围已锁定在所选项目资料内:库里其它项目的材料不会进入本篇。"}),0===g.length&&(0,d.jsx)(e.Fc,{type:"info",showIcon:!0,message:"本次没有派生出章清单",description:"派生的硬约束是提示词(或输入框要求)里要有 ≥2 章的显式大纲;缺大纲时服务端会直接拒绝这次生成,并在提示里说清缺什么。"}),(0,d.jsx)(e.B8,{size:"small",dataSource:g,renderItem:(a,b)=>(0,d.jsx)(e.B8.Item,{children:(0,d.jsx)(e.B8.Item.Meta,{title:`${b+1}. ${a.title}`,description:a.sections.length>0?a.sections.join("、"):"(无预设小节)"})})})]})}},85104:(a,b,c)=>{c.d(b,{Ce:()=>l,tl:()=>n});var d=c(82015),e=c(60056),f=c(79270),g=c(22147);let h=null,i=!1;function j(){h?.listeners.forEach(a=>a())}let k={role_binding:"角色配置绑定",knowledge_retrieval:"知识库检索",file_understanding:"多模态文件理解",fact_extraction:"LLM 事实抽取",chapter_generation:"LLM 章节生成",validation:"规则校验",llm_review:"LLM 审查优化",reference:"参考资源处理"};function l(a){return"completed"!==a&&"completed_with_issues"!==a&&"warning"!==a&&"failed"!==a&&"aborted"!==a&&"paused"!==a}function m(a){let b=a.agentWorkflow?.nodes;if(!b||0===b.length)return null;let c=[...b].sort((a,b)=>(a.seq??0)-(b.seq??0)).map(a=>{let b=k[a.type]||a.title||a.type||"节点",c="failed"===a.status||"blocked"===a.status?"error":"paused"===a.status||"repairing"===a.status?"warning":"running"===a.status?"process":"pending"===a.status?"wait":"finish",e=Object.entries(a.metrics||{}).slice(0,4).map(([a,b])=>`${a}:${String(b)}`).join(" ");return{key:a.id,title:b,subtitle:a.progress?`${a.progress.label||"进度"}:${a.progress.current}/${a.progress.total}`:"",description:e,status:c,icon:function(a){let b=a.split(".")[0]||a;return"role_binding"===a||"prepare"===b?(0,d.createElement)(f.ApartmentOutlined):"knowledge_retrieval"===a||"understand"===b?(0,d.createElement)(f.DatabaseOutlined):"file_understanding"===a||"skill"===b?(0,d.createElement)(f.EyeOutlined):"fact_extraction"===a?(0,d.createElement)(f.BulbOutlined):"chapter_generation"===a||"chapter"===b||"write"===b?(0,d.createElement)(f.FormOutlined):"llm_review"===a||"turn"===b||"round"===b?(0,d.createElement)(f.ThunderboltOutlined):"validation"===a||"repair"===b||"recheck"===b?(0,d.createElement)(f.SafetyCertificateOutlined):"plan"===b||"blueprint"===b?(0,d.createElement)(f.ApartmentOutlined):"rollback"===b||"snapshot"===b?(0,d.createElement)(f.HistoryOutlined):(0,d.createElement)(f.FileTextOutlined)}(a.type),subSteps:[]}}),e="generating"===a.status||"queued"===a.status?c.find(a=>"process"===a.status)?.key??c.at(-1)?.key??null:"failed"===a.status||"aborted"===a.status?c.find(a=>"error"===a.status)?.key??c.at(-1)?.key??null:null;return{steps:c,activeKey:e}}function n(a={}){let{projectRoot:b,documents:c,onNotice:k,t:o,onGenerated:p}=a,[q,r]=(0,d.useState)([]),[s,t]=(0,d.useState)(null),[u,v]=(0,d.useState)(!1),[w,x]=(0,d.useState)(null),[y,z]=(0,d.useState)(""),[A,B]=(0,d.useState)(null),[C,D]=(0,d.useState)(a.documentId??null),[E,F]=(0,d.useState)(null),[G,H]=(0,d.useState)(c??[]),[I,J]=(0,d.useState)(0),[K,L]=(0,d.useState)(null),[M,N]=(0,d.useState)([]),[O,P]=(0,d.useState)(null),Q=(0,d.useRef)(""),R=(0,d.useRef)(new Map),S=(0,d.useRef)(new Map),T=(0,d.useRef)(!1),U=(0,d.useRef)(b),V=(0,d.useRef)(C),W=(0,d.useRef)(q),X=(0,d.useRef)(s),Y=(0,d.useRef)(u),Z=(0,d.useRef)(o),$=(0,d.useRef)(k),_=(0,d.useRef)(p),aa=(0,d.useMemo)(()=>`activeGenDocId:${b||"default"}`,[b]),ab=(0,d.useCallback)(a=>{$.current?.(a)},[]),ac=(0,d.useCallback)((a,b)=>Z.current?.(a)??b,[]),ad=(0,d.useCallback)(async()=>{try{H((await (0,g.cQ)(U.current||void 0)).documents)}catch{H([])}},[]),ae=(0,d.useCallback)((a,b,c=Y.current)=>{h?.loading&&(h.flowSteps=a,h.activeFlowKey=b,h.loading=c,j())},[]),af=(0,d.useCallback)(a=>{let b=Date.now();for(let c of a){let a=R.current.get(c.key);"process"!==c.status||a?("finish"===c.status||"error"===c.status||"warning"===c.status)&&a&&!a.endedAt&&R.current.set(c.key,{...a,endedAt:b}):R.current.set(c.key,{startedAt:b})}},[]),ag=(0,d.useCallback)(a=>{let b=Math.max(0,Math.round(a/1e3));if(b<60)return`${b} 秒`;let c=Math.floor(b/60);return c<60?`${c} 分 ${b%60} 秒`:`${Math.floor(c/60)} 小时 ${c%60} 分`},[]),ah=(0,d.useCallback)(a=>{let b=a.agentWorkflow?.nodes||[],c=`${a.id}|${a.updatedAt}|${a.status}|${a.error||""}|n${b.length}:${b.map(a=>`${a.id}=${a.status}:${a.progress?.current??0}/${a.progress?.total??0}`).join(",")}`;if(Q.current===c)return;Q.current=c,B(a);let{steps:d,activeKey:e}=function(a,b={}){return m(a)??{steps:[],activeKey:null}}(a);af(d);let f=l(a.status);r(d),t(e),v(f),ae(d,e,f),F("failed"===a.status||"aborted"===a.status?a.error||("aborted"===a.status?"生成已中止":"生成失败"):null),("completed"===a.status||"completed_with_issues"===a.status||"warning"===a.status)&&(a.draft&&x(a.draft),z(a.editedMarkdown||a.markdown),N(a.exportReports||[]))},[ae,af]),ai=(0,d.useCallback)(a=>{a.id&&D(a.id),ah(a)},[ah]),aj=(0,d.useCallback)(async(a,b)=>{let c=Date.now(),d=0,e=Date.now(),f=null,h=0;for(;;){let i,j;if(b?.aborted)throw Error("用户中止");let k=new AbortController;b&&(b.pollController=k);try{let b=await (0,g.v7)(a,!0,U.current||void 0,k.signal,d||void 0);i=b.document,j=b.status,h=0}catch(a){if(b?.aborted||a instanceof DOMException&&"AbortError"===a.name)throw Error("用户中止",{cause:a});if((h+=1)>=3)throw a instanceof Error?a:Error("生成进度获取失败");await new Promise(a=>window.setTimeout(a,2e3*h));continue}finally{b?.pollController===k&&(b.pollController=void 0)}let l=i?"queued"===i.status:"queued"===j;if(l&&(e=Date.now(),Date.now()-c>216e5))throw Error("排队等待超时,请稍后刷新列表查看或取消后重新发起");if(!i){if(!l&&(Date.now()-(f??c)>75e5||Date.now()-e>96e4))throw Error("生成任务疑似卡住,请点击继续生成或重新生成(后台任务可能仍在运行,稍后刷新可查看)");await new Promise(a=>window.setTimeout(a,1500));continue}if(ah(i),"generating"===i.status&&null===f&&(f=Date.now()),i.updatedAt!==d&&(d=i.updatedAt,e=Date.now()),("completed"===i.status||"completed_with_issues"===i.status||"warning"===i.status)&&i.draft)return i;if("warning"===i.status&&i.error&&/已中断/u.test(i.error))throw Error(i.error);if("failed"===i.status||"aborted"===i.status)throw Error(i.error||("aborted"===i.status?"生成已中止":"生成失败"));if(!l&&(Date.now()-(f??c)>75e5||Date.now()-e>96e4))throw Error("生成任务疑似卡住,请点击继续生成或重新生成(后台任务可能仍在运行,稍后刷新可查看)");await new Promise(a=>window.setTimeout(a,1500))}},[ah]),ak=(0,d.useCallback)(async(a,b)=>{if(!a.specId)return;let c=a.title,e=a.promptIds,k=a.projectRoot||U.current;if(h?.aborted&&(h=null),h?.loading){if(T.current)return;if(!k)return void ab({kind:"error",text:"未识别当前项目,请先选择或打开项目后再生成文件"});T.current=!0;try{let a=await (0,g.OX)({promptIds:e,...c?{title:c}:{},requirement:b,projectRoot:k});await ad(),ab({kind:"info",text:a.queuePosition?`已加入生成队列(第 ${a.queuePosition} 位):前面任务完成后将自动开始`:"生成任务已创建"})}catch(a){ab({kind:"error",text:a instanceof Error?a.message:"创建生成任务失败"})}finally{T.current=!1}return}if(!k)return void ab({kind:"error",text:"未识别当前项目,请先选择或打开项目后再生成文件"});v(!0);let l=W.current,n=l.length>0?l:[{key:"prepare",title:"正在创建生成任务",description:"系统正在创建后台生成任务,请稍候。",status:"process",icon:(0,d.createElement)(f.LoadingOutlined),subSteps:[{key:"start",title:"准备生成任务",status:"process"}]}],o=X.current||"prepare";r(n),t(o);let p=(0,g.OX)({promptIds:e,...c?{title:c}:{},requirement:b,projectRoot:k});h={id:Date.now(),specId:a.specId,loading:!0,flowSteps:n,activeFlowKey:o,promise:p,listeners:new Set};try{let b=await p;b.documentId&&(localStorage.setItem(aa,b.documentId),D(b.documentId),h?.promise===p&&(h.documentId=b.documentId)),await ad(),b.queuePosition&&ab({kind:"info",text:`已加入生成队列(第 ${b.queuePosition} 位):前面任务完成后将自动开始`});let c=b.documentId?await aj(b.documentId,h?.promise===p?h:void 0):void 0,d=b.draft||c?.draft;if(!d)throw Error("生成结果为空");(b.documentId||c?.id)&&D(b.documentId||c.id),x(d),z(c?.editedMarkdown||c?.markdown||d.markdown),h?.promise===p&&(h.draft=d,h.content=c?.editedMarkdown||c?.markdown||d.markdown);let e=c||{id:b.documentId||`draft-${Date.now()}`,templateId:b.record?.templateId||b.documentSpec?.id||a.specId,templateName:b.record?.templateName||b.documentSpec?.title,title:d.title,requirement:d.requirement,projectRoot:d.projectRoot||U.current,projectId:d.projectId,markdown:d.markdown,status:d.validationIssues.some(a=>"error"===a.level||"warning"===a.level)||!d.exportGate.passed?"completed_with_issues":"completed",draft:d,executionStages:d.executionStages,assets:d.assets||[],createdAt:d.generatedAt,updatedAt:Date.now()},{steps:f}=m(e)??{steps:[],activeKey:null};r(f),ae(f,"done",!1),t("done"),h?.promise===p&&(h.activeFlowKey="done",h.loading=!1,j(),h=null),localStorage.removeItem(aa),await ad(),ab({kind:"success",text:"操作成功",key:"common.success"}),(b.documentId||c?.id)&&_.current?.(b.documentId||c.id)}catch(d){localStorage.removeItem(aa);let a=d instanceof Error?d.message:ac("common.error","出错了"),b=i;i=!1;let c=!b&&"用户中止"===a;F(a),b||r(b=>{let c=b.map(b=>"process"===b.status?{...b,status:"error",description:a,subSteps:b.subSteps.map((a,b)=>({...a,status:0===b?"error":a.status}))}:b);return ae(c,X.current,!1),c}),h?.promise===p&&(h.loading=!1,h.error=a,j(),h=null),await ad(),c?ab({kind:"warning",text:"生成任务已被中止(可能来自其他窗口):可在列表中点击「继续生成」恢复"}):b||ab({kind:"error",text:a})}finally{v(!1),i=!1,h?.promise===p&&(h.loading=!1,j())}},[ab,ad,ae,aa,ac,aj]),al=(0,d.useCallback)(a=>{let b=S.current.get(a);b&&(clearInterval(b),S.current.delete(a))},[]),am=(0,d.useCallback)((a,b)=>{al(a);let c=setInterval(()=>{(async()=>{try{let{document:c}=await (0,g.v7)(a,!0,b||U.current||void 0);if(!c)return;ah(c),await ad(),l(c.status)||(al(a),localStorage.removeItem(aa))}catch{}})()},2e3);S.current.set(a,c)},[ah,ad,al,aa]),an=(0,d.useCallback)(a=>{let b=R.current.get(a);if(!b)return null;let c=ag((b.endedAt??Date.now())-b.startedAt);return b.endedAt?c:`${c}(运行中)`},[I,ag]),ao=(0,d.useCallback)(async a=>{h&&(i=!0);let b=V.current;for(let c of(b&&await (0,g.r)(b,a||U.current||void 0).catch(()=>void 0),h&&(h.aborted=!0,h.pollController?.abort(),h.loading=!1,h.error="用户中止",j(),h=null),localStorage.removeItem(aa),S.current.values()))clearInterval(c);S.current.clear(),v(!1),r([]),t(null),F("用户中止"),await ad(),ab({kind:"info",text:"已中止生成任务"})},[ab,ad,aa]),ap=(0,d.useCallback)(async a=>{h?.loading&&h.documentId===a.id&&(i=!0,h.aborted=!0,h.pollController?.abort(),h.loading=!1,h.error="用户中止",j(),h=null,v(!1)),localStorage.removeItem(aa),al(a.id);try{await (0,g.r)(a.id,a.projectRoot||U.current||void 0),ab({kind:"success",text:"queued"===a.status?"已取消排队任务":"已中止生成任务"})}catch{ab({kind:"info",text:"任务已不在运行,已刷新状态"})}finally{await ad(),V.current===a.id&&(D(null),B(null),x(null),z(""))}},[ab,ad,al,aa]),aq=(0,d.useCallback)(async a=>{try{D(a.id),v(!0);let b=await (0,g.UQ)(a.id,a.projectRoot||U.current||void 0);localStorage.setItem(aa,b.documentId),await ad();let c=await aj(b.documentId);c.draft&&(x(c.draft),z(c.editedMarkdown||c.markdown||c.draft.markdown)),localStorage.removeItem(aa),await ad(),ab({kind:"success",text:"已继续生成并完成"})}catch(a){ab({kind:"error",text:a instanceof Error?a.message:"继续生成失败"})}finally{v(!1)}},[ab,ad,aa,aj]),ar=(0,d.useCallback)(async(a,b)=>{let c=await fetch(`/api/documents/generated/${encodeURIComponent(a)}/pause`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectRoot:b||U.current||void 0})});if(!c.ok)throw Error(await c.text()||`HTTP ${c.status}`);let d=await c.json();return ab({kind:"info",text:d.message||"已请求暂停:将在当前节点边界停住并落盘"}),await ad(),am(a,b),d},[ab,ad,am]),as=(0,d.useCallback)(async(a,b)=>{let c=await fetch(`/api/documents/generated/${encodeURIComponent(a)}/resume-generate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectRoot:b||U.current||void 0})});if(!c.ok)throw Error(await c.text()||`HTTP ${c.status}`);ab({kind:"info",text:"已请求继续:将从暂停的节点边界接着跑"}),await ad()},[ab,ad]),at=(0,d.useCallback)((a,b,c)=>{let d=new Blob([a],{type:c}),e=URL.createObjectURL(d),f=document.createElement("a");f.href=e,f.download=b,f.target="_self",f.rel="noopener",f.style.display="none",document.body.appendChild(f),f.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0,view:window})),f.remove(),window.setTimeout(()=>URL.revokeObjectURL(e),1e3)},[]),au=(0,d.useCallback)(async(a,b,c)=>{let{blob:d,filename:e,notDeliverable:f,gateIssues:h}=await (0,g.UE)(a);at(d,e||b,c),P(f?{at:Date.now(),count:h.length,issues:h}:null)},[at]),av=(0,d.useCallback)(a=>/导出门禁未通过|EXPORT_GATE_BLOCKED/u.test(a),[]),aw=(0,d.useCallback)(a=>new Promise(b=>{e.aF.confirm({title:ac("documents.exportGateBlockedTitle","导出门禁未通过"),content:`${a}
2
-
3
- ${ac("documents.nonDeliverableExportConfirm","仍要导出将产出「非交付物」文件(文件名带后缀且界面显著标注),是否继续?")}`,okText:ac("documents.exportAnywayNonDeliverable","仍要导出(非交付物)"),okButtonProps:{danger:!0},cancelText:ac("common.cancel","取消"),onOk:()=>b(!0),onCancel:()=>b(!1)})}),[ac]),ax=(0,d.useCallback)(async(a,b)=>{let c=a instanceof Error?a.message:ac("common.error","出错了");if(!av(c))return void ab({kind:"error",text:c});if(await aw(c))try{await b()}catch(a){ab({kind:"error",text:a instanceof Error?a.message:ac("common.error","出错了")})}},[aw,av,ab,ac]),ay=(0,d.useMemo)(()=>({markdown:"text/markdown;charset=utf-8",html:"text/html;charset=utf-8",pdf:"application/pdf",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document"}),[]),az=(0,d.useCallback)(async(a,b)=>{let c=a.editedMarkdown||a.markdown||a.draft?.markdown||"";if(!c.trim())return void ab({kind:"warning",text:"该记录暂无可导出的正文内容"});L(b);let d="markdown"===b?"md":b,e={documentId:a.id,title:a.title,markdown:c,format:b,useClientMarkdown:!0,projectRoot:a.projectRoot||U.current||void 0};try{await au(e,`${a.title}.${d}`,ay[b])}catch(c){await ax(c,async()=>{await au({...e,allowNonDeliverable:!0},`${a.title}.${d}`,ay[b])})}finally{L(null)}},[au,ay,ax,ab]),aA=(0,d.useCallback)(async a=>{if(!w)return;L(a);let b="markdown"===a?"md":a,c={documentId:V.current||void 0,title:w.title,markdown:y,format:a,exportGate:w.exportGate,useClientMarkdown:!0,projectRoot:w.projectRoot||U.current||void 0};try{if(await au(c,`${w.title}.${b}`,ay[a]),V.current)try{let{document:a}=await (0,g.v7)(V.current,!1,w.projectRoot||U.current||void 0);a&&N(a.exportReports||[])}catch{}}catch(d){await ax(d,async()=>{await au({...c,allowNonDeliverable:!0},`${w.title}.${b}`,ay[a])})}finally{L(null)}},[y,au,w,ay,ax]),aB=C?G.find(a=>a.id===C)??A:A,aC=function(a,b){if(!a)return b?"running":"idle";switch(a){case"queued":return"queued";case"generating":return"running";case"paused":return"paused";case"failed":case"aborted":return"stopped";case"completed_with_issues":case"warning":return"issues";case"completed":return"done";default:return"idle"}}(aB?.status,u);return{flowSteps:q,activeFlowKey:s,loading:u,draft:w,content:y,workflowRecord:A,documentId:C,documents:G,error:E,phase:aC,flowTick:I,boundRecord:aB,canResume:function(a){let b=!!a&&l(a.status);return!!a&&("paused"===a.status||"failed"===a.status||"aborted"===a.status||"completed_with_issues"===a.status||"warning"===a.status&&!!a.checkpointChapters?.length&&/继续生成|重新生成|中断|卡住|未完成|门禁|阻断/u.test(a.error||a.warningIssues?.join(";")||a.draft?.exportGate?.blockingIssues?.map(a=>a.message).join(";")||"")||!b&&!!(a.draft?.exportGate&&!1===a.draft.exportGate.passed))}(aB),startGeneration:ak,abortGeneration:ao,abortDocument:ap,resumeDocument:aq,pauseDocument:ar,resumePausedDocument:as,applyRecord:ai,refreshDocuments:ad,waitForDoc:aj,stepDurationText:an,setDraft:x,setContent:z,setExportReports:N,export:{exporting:K,nonDeliverableExport:O,exportRecord:az,exportEditor:aA,downloadExport:au,handleExportError:ax,confirmNonDeliverableExport:aw,exportReports:M}}}},85202:(a,b,c)=>{c.d(b,{B:()=>h,VF:()=>f,ff:()=>g,s_:()=>i});var d=c(82015),e=c(1168);let f=24;function g(a,b,c,d=80){let e=a.x*b.k+b.x,f=a.y*b.k+b.y,h=e+a.width*b.k,i=f+a.height*b.k;return!(h>=-d&&i>=-d&&e<=c.width+d&&f<=c.height+d)}function h(a,b,c,d=24){let e=b.x,f=b.y,g=b.x+a.width*b.k,i=b.y+a.height*b.k,j=Math.min(g,c.right)-Math.max(e,c.left),k=Math.min(i,c.bottom)-Math.max(f,c.top);return j>=d&&k>=d?{dx:0,dy:0}:{dx:c.left+d-e,dy:c.top+d-f}}function i(){let[a,b]=(0,d.useState)({x:0,y:0,k:1}),c=(0,d.useRef)(null),f=(0,d.useRef)(null),g=(0,d.useRef)(a),h=(0,d.useCallback)((a,d,e)=>{b(b=>{let f=Math.min(2,Math.max(.1,b.k*a)),g=c.current?.getBoundingClientRect();if(!g||void 0===d||void 0===e)return{...b,k:f};let h=(d-g.left-b.x)/b.k,i=(e-g.top-b.y)/b.k;return{k:f,x:d-g.left-h*f,y:e-g.top-i*f}})},[]),[i,j]=(0,d.useState)(null),k=(0,d.useCallback)(a=>{if(0!==a.button)return;a.currentTarget.setPointerCapture(a.pointerId);let b=g.current;f.current={pointerId:a.pointerId,startX:a.clientX,startY:a.clientY,originX:b.x,originY:b.y}},[]),l=(0,d.useCallback)(a=>{let c=f.current;c&&c.pointerId===a.pointerId&&b(b=>({...b,x:c.originX+(a.clientX-c.startX),y:c.originY+(a.clientY-c.startY)}))},[]),m=(0,d.useCallback)(()=>{f.current=null},[]),n=(0,d.useCallback)(()=>b({x:0,y:0,k:1}),[]),o=(a,b)=>b??{left:0,top:0,right:a.width,bottom:a.height},p=(0,d.useCallback)((a,d,e)=>{b(b=>{let f=c.current?.getBoundingClientRect();if(!f||a<=0||d<=0)return{...b,x:0,y:0};let g=o(f,e),h=Math.max(1,g.right-g.left),i=Math.max(1,g.bottom-g.top),j=Math.min(2,Math.max(.1,Math.min(h/a,i/d)));return{k:j,x:g.left+(h-a*j)/2,y:g.top+(i-d*j)/2}})},[]),q=(0,d.useCallback)((a,d,f,g)=>{b(b=>{let h=c.current?.getBoundingClientRect();if(!h)return b;let i=o(h,g),j=f??b.k,k=(i.left+i.right)/2,l=(i.top+i.bottom)/2;return{k:j,x:k-(a+e.zT/2)*j,y:l-(d+e.EL/2)*j}})},[]);return{view:a,containerRef:c,zoomAt:h,onPointerDown:k,onPointerMove:l,endDrag:m,reset:n,fit:p,centerOn:q,panBy:(0,d.useCallback)((a,c)=>{(0!==a||0!==c)&&b(b=>({...b,x:b.x+a,y:b.y+c}))},[])}}},89668:(a,b,c)=>{function d(a){if(0===a)return"0 B";let b=Math.floor(Math.log(a)/Math.log(1024)),c=a/Math.pow(1024,b);return`${c.toFixed(+(0!==b))} ${["B","KB","MB","GB","TB"][b]}`}function e(a,b="zh-CN"){let c=Math.max(0,Math.floor(a)),d=Math.floor(c/86400),f=Math.floor(c%86400/3600),g=Math.floor(c%3600/60),h="en-US"===b;return d>0?h?`${d}d ${f}h`:`${d} 天 ${f} 小时`:f>0?h?`${f}h ${g}m`:`${f} 小时 ${g} 分`:g>0?h?`${g}m`:`${g} 分`:h?"Just now":"刚刚"}function f(a,b="zh-CN"){if(!a||a<=0)return"en-US"===b?"Never":"从未";let c=Math.floor(Math.floor((Date.now()-a)/1e3)/60),d=Math.floor(c/60),e=Math.floor(d/24);return e>30?new Date(a).toLocaleDateString(b):"en-US"===b?e>0?`${e}d ago`:d>0?`${d}h ago`:c>0?`${c}m ago`:"Just now":e>0?`${e} 天前`:d>0?`${d} 小时前`:c>0?`${c} 分钟前`:"刚刚"}c.d(b,{Jm:()=>i,a3:()=>e,fw:()=>f,mc:()=>j,z3:()=>d});let g={document:"文档",spreadsheet:"表格",image:"图片",cad:"图纸",code:"代码",data:"数据",web:"网页",diagram:"图表",archive:"压缩包",other:"其他"},h={document:"Document",spreadsheet:"Spreadsheet",image:"Image",cad:"CAD",code:"Code",data:"Data",web:"Web",diagram:"Diagram",archive:"Archive",other:"Other"};function i(a,b="zh-CN"){return("en-US"===b?h:g)[a]??a}let j={active:"common.statusIndexed",outdated:"common.statusOutdated",error:"common.statusAbnormal",deleted:"common.statusDeleted",disk:"common.statusNotIndexed"}}};
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}=a,[A,B]=(0,e.useState)(!1),C=s?[0===v.length?"提示词":"",!w?"项目":""].filter(Boolean):[],D=C.length>0,E=l?m||"当前不可发起生成":D?`请先用左侧「+」选择${C.join(" 与 ")}——未选齐时不能发起生成`:j?"有任务正在运行:发送将加入生成队列(前面任务完成后自动开始)":"发送后将创建生成任务,画布随节点日志实时增长";return(0,d.jsxs)("div",{className:"canvasInputBar",children:[(0,d.jsxs)(f.$x,{wrap:!0,size:6,style:{marginBottom:6},children:[n&&(0,d.jsx)(f.m_,{title:`把「@${n.title}」插入输入框(可见文本,可自行修改)`,children:(0,d.jsx)(f.vw,{color:"blue",style:{cursor:"pointer"},onClick:o,children:`@ ${n.title}`})}),!n&&(0,d.jsx)(h,{type:"secondary",style:{fontSize:12},children:"点选一个节点后可 @ 提及它"}),p&&!j&&(0,d.jsx)(f.$n,{size:"small",type:"link",onClick:q,children:"继续生成"}),r?.map(a=>(0,d.jsx)(f.$n,{size:"small",type:"link",onClick:a.onClick,children:a.label},a.key))]}),(0,d.jsxs)(f.$x,{wrap:!0,size:10,style:{marginBottom:8},children:[(0,d.jsx)(f.AM,{trigger:"click",placement:"topLeft",open:A,onOpenChange:B,content:(0,d.jsxs)("div",{style:{width:360,display:"flex",flexDirection:"column",gap:8},children:[s&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{children:[(0,d.jsx)(h,{strong:!0,style:{fontSize:13},children:"提示词"}),(0,d.jsx)(f.l6,{mode:"multiple",style:{width:"100%",marginTop:4},value:v.map(a=>a.value),placeholder:0===t.length?"该项目暂无提示词":"选择提示词(至少一份;可多选)",options:t,onChange:a=>x?.(a)})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)(h,{strong:!0,style:{fontSize:13},children:"项目"}),(0,d.jsx)(f.l6,{style:{width:"100%",marginTop:4},value:w?.value,showSearch:!0,optionFilterProp:"label",placeholder:0===u.length?"本项目知识库里还没有资料:先到知识库页上传并入库":"选择项目(= 知识库里这个项目的资料,决定本次用哪份材料)",options:u,onChange:a=>y?.(a)})]}),(0,d.jsx)(h,{type:"secondary",style:{fontSize:12},children:"两者选齐后才能点「生成」。「项目」选的是入库到本地知识库的那份项目资料(清单/图纸/招标文件都在其中)——本次生成只用它,不会把库里别的项目材料混进来。提示词的正文按名字进入对应链路(总控/写作 → 写作链,清单/图纸/提取 → 事实抽取链,排版 → 格式链);章节大纲取自其中带 <OUTLINE> 的那一份,且只能有一份声明大纲。"})]}),!s&&(0,d.jsx)(h,{type:"secondary",style:{fontSize:12},children:"提示词与项目取自这条记录本身(章节结构由记录里那份提示词的大纲派生),不需要在这里再选。"}),(0,d.jsx)("div",{children:(0,d.jsx)(f.$n,{size:"small",block:!0,disabled:D,onClick:()=>{B(!1),z?.()},children:"结构预览(章清单与小节)"})})]}),children:(0,d.jsx)(f.$n,{style:{marginLeft:"5px"},size:"small",icon:(0,d.jsx)(g.PlusOutlined,{}),type:D?"primary":"default",children:"提示词 / 项目"})}),v.map(a=>(0,d.jsx)(f.vw,{color:"blue",closable:!0,onClose:b=>{b.preventDefault(),x?.(v.filter(b=>b.value!==a.value).map(a=>a.value))},children:`提示词:${a.label}`},a.value)),w&&(0,d.jsx)(f.vw,{color:"geekblue",closable:!0,onClose:a=>{a.preventDefault(),y?.("")},children:`项目:${w.label}`})]}),(0,d.jsxs)(f.$x.Compact,{style:{width:"100%"},children:[(0,d.jsx)(f.pd.TextArea,{value:b,onChange:a=>c(a.target.value),onPressEnter:a=>{!a.shiftKey&&(a.preventDefault(),l||k||i())},autoSize:{minRows:1,maxRows:5},placeholder:"描述你的需求;可用上面的 @ 提及把节点带进正文(Enter 发送,Shift+Enter 换行)。篇幅由招标文件页数上限与标书类型自动决定:需求里写字数/页数不会改变篇幅目标",disabled:l}),(0,d.jsx)(f.m_,{title:E,children:(0,d.jsx)(f.$n,{type:"primary",icon:(0,d.jsx)(g.SendOutlined,{}),loading:k,disabled:l||D||!b.trim(),onClick:i,children:j?"排队提交":"生成"})})]})]})}},16258:(a,b,c)=>{c.d(b,{p:()=>d});function d(a,b){let c=`/canvas/${encodeURIComponent(a)}`;return b?`${c}?projectRoot=${encodeURIComponent(b)}`:c}},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"}}};