@customize-agent/server 4.60.34 → 4.60.36

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 (341) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +197 -297
  3. package/.next/prerender-manifest.json +3 -3
  4. package/.next/required-server-files.json +3 -7
  5. package/.next/routes-manifest.json +19 -30
  6. package/.next/server/chunks/{8645.js → 1026.js} +1 -1
  7. package/.next/server/chunks/1146.js +1 -0
  8. package/.next/server/chunks/1547.js +385 -0
  9. package/.next/server/chunks/3074.js +1 -0
  10. package/.next/server/chunks/3750.js +2 -0
  11. package/.next/server/chunks/407.js +1 -0
  12. package/.next/server/chunks/5037.js +46 -0
  13. package/.next/server/chunks/5304.js +2 -2
  14. package/.next/server/chunks/5599.js +1 -0
  15. package/.next/server/chunks/5763.js +159 -0
  16. package/.next/server/chunks/6138.js +5 -0
  17. package/.next/server/chunks/6355.js +1 -0
  18. package/.next/server/chunks/6822.js +1 -1
  19. package/.next/server/chunks/702.js +3 -0
  20. package/.next/server/chunks/7296.js +1 -0
  21. package/.next/server/chunks/8176.js +1 -0
  22. package/.next/server/chunks/8204.js +1 -1
  23. package/.next/server/chunks/8459.js +11 -0
  24. package/.next/server/chunks/8570.js +1 -0
  25. package/.next/server/chunks/9270.js +1 -0
  26. package/.next/server/chunks/9283.js +7 -0
  27. package/.next/server/chunks/9301.js +2 -2
  28. package/.next/server/chunks/9522.js +5 -0
  29. package/.next/server/chunks/9559.js +1 -0
  30. package/.next/server/chunks/9688.js +10 -0
  31. package/.next/server/middleware-build-manifest.js +1 -1
  32. package/.next/server/pages/404.html +1 -1
  33. package/.next/server/pages/500.html +1 -1
  34. package/.next/server/pages/_app.js +1 -1
  35. package/.next/server/pages/_app.js.nft.json +1 -1
  36. package/.next/server/pages/_document.js +1 -1
  37. package/.next/server/pages/_document.js.nft.json +1 -1
  38. package/.next/server/pages/_error.js +1 -1
  39. package/.next/server/pages/_error.js.nft.json +1 -1
  40. package/.next/server/pages/api/assets/generated/preview.js +2 -1
  41. package/.next/server/pages/api/assets/generated/preview.js.nft.json +1 -1
  42. package/.next/server/pages/api/assets/generated.js +2 -1
  43. package/.next/server/pages/api/assets/generated.js.nft.json +1 -1
  44. package/.next/server/pages/api/config/embedding/healthCheck.js +2 -3
  45. package/.next/server/pages/api/config/embedding/healthCheck.js.nft.json +1 -1
  46. package/.next/server/pages/api/config/embedding.js +2 -3
  47. package/.next/server/pages/api/config/embedding.js.nft.json +1 -1
  48. package/.next/server/pages/api/config/healthCheck.js +2 -3
  49. package/.next/server/pages/api/config/healthCheck.js.nft.json +1 -1
  50. package/.next/server/pages/api/config/models.js +2 -3
  51. package/.next/server/pages/api/config/models.js.nft.json +1 -1
  52. package/.next/server/pages/api/config/providers/[provider].js +2 -3
  53. package/.next/server/pages/api/config/providers/[provider].js.nft.json +1 -1
  54. package/.next/server/pages/api/config/providers.js +2 -3
  55. package/.next/server/pages/api/config/providers.js.nft.json +1 -1
  56. package/.next/server/pages/api/config/reset.js +2 -3
  57. package/.next/server/pages/api/config/reset.js.nft.json +1 -1
  58. package/.next/server/pages/api/config/web-access.js +2 -3
  59. package/.next/server/pages/api/config/web-access.js.nft.json +1 -1
  60. package/.next/server/pages/api/documents/canvas/[id].js +2 -1
  61. package/.next/server/pages/api/documents/canvas/[id].js.nft.json +1 -1
  62. package/.next/server/pages/api/documents/delivery-review.js +2 -0
  63. package/.next/server/pages/api/documents/delivery-review.js.nft.json +1 -0
  64. package/.next/server/pages/api/documents/export.js +5 -2
  65. package/.next/server/pages/api/documents/export.js.nft.json +1 -1
  66. package/.next/server/pages/api/documents/generate/preview.js +6 -1
  67. package/.next/server/pages/api/documents/generate/preview.js.nft.json +1 -1
  68. package/.next/server/pages/api/documents/generate.js +2 -1
  69. package/.next/server/pages/api/documents/generate.js.nft.json +1 -1
  70. package/.next/server/pages/api/documents/generated/[id]/events.js +4 -3
  71. package/.next/server/pages/api/documents/generated/[id]/events.js.nft.json +1 -1
  72. package/.next/server/pages/api/documents/generated/[id]/figure/[name].js +2 -1
  73. package/.next/server/pages/api/documents/generated/[id]/figure/[name].js.nft.json +1 -1
  74. package/.next/server/pages/api/documents/generated/[id]/instruction.js +4 -2
  75. package/.next/server/pages/api/documents/generated/[id]/instruction.js.nft.json +1 -1
  76. package/.next/server/pages/api/documents/generated/[id]/messages.js +2 -0
  77. package/.next/server/pages/api/documents/generated/[id]/messages.js.nft.json +1 -0
  78. package/.next/server/pages/api/documents/generated/[id]/nodes/[nodeId].js +2 -1
  79. package/.next/server/pages/api/documents/generated/[id]/nodes/[nodeId].js.nft.json +1 -1
  80. package/.next/server/pages/api/documents/generated/[id]/nodes.js +2 -1
  81. package/.next/server/pages/api/documents/generated/[id]/nodes.js.nft.json +1 -1
  82. package/.next/server/pages/api/documents/generated/[id]/pause.js +2 -1
  83. package/.next/server/pages/api/documents/generated/[id]/pause.js.nft.json +1 -1
  84. package/.next/server/pages/api/documents/generated/[id]/preview.js +2 -1
  85. package/.next/server/pages/api/documents/generated/[id]/preview.js.nft.json +1 -1
  86. package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/confirm.js +2 -1
  87. package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/confirm.js.nft.json +1 -1
  88. package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/rollback.js +2 -1
  89. package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/rollback.js.nft.json +1 -1
  90. package/.next/server/pages/api/documents/generated/[id]/repair.js +2 -1
  91. package/.next/server/pages/api/documents/generated/[id]/repair.js.nft.json +1 -1
  92. package/.next/server/pages/api/documents/generated/[id]/report.js +2 -1
  93. package/.next/server/pages/api/documents/generated/[id]/report.js.nft.json +1 -1
  94. package/.next/server/pages/api/documents/generated/[id]/resume-generate.js +2 -1
  95. package/.next/server/pages/api/documents/generated/[id]/resume-generate.js.nft.json +1 -1
  96. package/.next/server/pages/api/documents/generated/[id].js +2 -1
  97. package/.next/server/pages/api/documents/generated/[id].js.nft.json +1 -1
  98. package/.next/server/pages/api/documents/generated.js +2 -1
  99. package/.next/server/pages/api/documents/generated.js.nft.json +1 -1
  100. package/.next/server/pages/api/health.js +1 -1
  101. package/.next/server/pages/api/health.js.nft.json +1 -1
  102. package/.next/server/pages/api/jobs/[id].js +2 -2
  103. package/.next/server/pages/api/jobs/[id].js.nft.json +1 -1
  104. package/.next/server/pages/api/kb/categories.js +2 -1
  105. package/.next/server/pages/api/kb/categories.js.nft.json +1 -1
  106. package/.next/server/pages/api/kb/duplicates.js +2 -1
  107. package/.next/server/pages/api/kb/duplicates.js.nft.json +1 -1
  108. package/.next/server/pages/api/kb/features.js +2 -3
  109. package/.next/server/pages/api/kb/features.js.nft.json +1 -1
  110. package/.next/server/pages/api/kb/files/detail.js +2 -1
  111. package/.next/server/pages/api/kb/files/detail.js.nft.json +1 -1
  112. package/.next/server/pages/api/kb/files/export.js +2 -1
  113. package/.next/server/pages/api/kb/files/export.js.nft.json +1 -1
  114. package/.next/server/pages/api/kb/files/open.js +2 -1
  115. package/.next/server/pages/api/kb/files/open.js.nft.json +1 -1
  116. package/.next/server/pages/api/kb/files/preview-pdf-page.js +2 -1
  117. package/.next/server/pages/api/kb/files/preview-pdf-page.js.nft.json +1 -1
  118. package/.next/server/pages/api/kb/files/reindex.js +1 -2
  119. package/.next/server/pages/api/kb/files/reindex.js.nft.json +1 -1
  120. package/.next/server/pages/api/kb/files/search.js +2 -1
  121. package/.next/server/pages/api/kb/files/search.js.nft.json +1 -1
  122. package/.next/server/pages/api/kb/files/source-preview.js +2 -1
  123. package/.next/server/pages/api/kb/files/source-preview.js.nft.json +1 -1
  124. package/.next/server/pages/api/kb/files.js +2 -2
  125. package/.next/server/pages/api/kb/files.js.nft.json +1 -1
  126. package/.next/server/pages/api/kb/ignore.js +2 -1
  127. package/.next/server/pages/api/kb/ignore.js.nft.json +1 -1
  128. package/.next/server/pages/api/kb/material-groups.js +2 -1
  129. package/.next/server/pages/api/kb/material-groups.js.nft.json +1 -1
  130. package/.next/server/pages/api/kb/operations.js +2 -2
  131. package/.next/server/pages/api/kb/operations.js.nft.json +1 -1
  132. package/.next/server/pages/api/kb/reindex.js +1 -2
  133. package/.next/server/pages/api/kb/reindex.js.nft.json +1 -1
  134. package/.next/server/pages/api/kb/stats.js +2 -1
  135. package/.next/server/pages/api/kb/stats.js.nft.json +1 -1
  136. package/.next/server/pages/api/kb/tags.js +2 -1
  137. package/.next/server/pages/api/kb/tags.js.nft.json +1 -1
  138. package/.next/server/pages/api/kb/upload/complete.js +1 -2
  139. package/.next/server/pages/api/kb/upload/complete.js.nft.json +1 -1
  140. package/.next/server/pages/api/kb/upload.js +1 -2
  141. package/.next/server/pages/api/kb/upload.js.nft.json +1 -1
  142. package/.next/server/pages/api/prompt/chat.js +3 -4
  143. package/.next/server/pages/api/prompt/chat.js.nft.json +1 -1
  144. package/.next/server/pages/api/skills/[id].js +2 -1
  145. package/.next/server/pages/api/skills/[id].js.nft.json +1 -1
  146. package/.next/server/pages/api/skills/validate.js +2 -1
  147. package/.next/server/pages/api/skills/validate.js.nft.json +1 -1
  148. package/.next/server/pages/api/skills.js +2 -1
  149. package/.next/server/pages/api/skills.js.nft.json +1 -1
  150. package/.next/server/pages/api/system/data-health.js +2 -2
  151. package/.next/server/pages/api/system/data-health.js.nft.json +1 -1
  152. package/.next/server/pages/api/system/reset.js +1 -1
  153. package/.next/server/pages/api/system/reset.js.nft.json +1 -1
  154. package/.next/server/pages/documents.html +1 -1
  155. package/.next/server/pages/documents.js.nft.json +1 -1
  156. package/.next/server/pages/generation/[id].html +1 -0
  157. package/.next/server/pages/generation/[id].js.nft.json +1 -0
  158. package/.next/server/pages/generation.html +1 -0
  159. package/.next/server/pages/generation.js.nft.json +1 -0
  160. package/.next/server/pages/index.js +1 -0
  161. package/.next/server/pages/index.js.nft.json +1 -1
  162. package/.next/server/pages/jobs.html +1 -1
  163. package/.next/server/pages/jobs.js.nft.json +1 -1
  164. package/.next/server/pages/knowledge/file-detail.html +1 -1
  165. package/.next/server/pages/knowledge/file-detail.js.nft.json +1 -1
  166. package/.next/server/pages/knowledge/files.html +1 -1
  167. package/.next/server/pages/knowledge/files.js.nft.json +1 -1
  168. package/.next/server/pages/knowledge/manage.html +1 -1
  169. package/.next/server/pages/knowledge/manage.js.nft.json +1 -1
  170. package/.next/server/pages/knowledge/source-preview.html +1 -1
  171. package/.next/server/pages/knowledge/source-preview.js.nft.json +1 -1
  172. package/.next/server/pages/knowledge.html +1 -1
  173. package/.next/server/pages/knowledge.js.nft.json +1 -1
  174. package/.next/server/pages/models.html +1 -1
  175. package/.next/server/pages/models.js.nft.json +1 -1
  176. package/.next/server/pages/settings.html +1 -1
  177. package/.next/server/pages/settings.js.nft.json +1 -1
  178. package/.next/server/pages/skills/[id]/edit.html +1 -1
  179. package/.next/server/pages/skills/[id]/edit.js.nft.json +1 -1
  180. package/.next/server/pages/skills/[id].html +1 -1
  181. package/.next/server/pages/skills/[id].js.nft.json +1 -1
  182. package/.next/server/pages/skills/new.html +1 -1
  183. package/.next/server/pages/skills/new.js.nft.json +1 -1
  184. package/.next/server/pages/skills.html +1 -1
  185. package/.next/server/pages/skills.js.nft.json +1 -1
  186. package/.next/server/pages-manifest.json +35 -40
  187. package/.next/static/chunks/112-9eacc7c0686813d6.js +1 -0
  188. package/.next/static/chunks/127-5ee1899eef559281.js +1 -0
  189. package/.next/static/chunks/{1210-703ad87eaeee1e4e.js → 210-71eaf9de9aa92051.js} +1 -1
  190. package/.next/static/chunks/325-45106bb003a2c5ce.js +4 -0
  191. package/.next/static/chunks/326-a3915e61888b0dbf.js +1 -0
  192. package/.next/static/chunks/333-7642e65bff6b8465.js +1 -0
  193. package/.next/static/chunks/338-19ccbaec57a7bf9c.js +4 -0
  194. package/.next/static/chunks/350-87b9c900a356d9b9.js +1 -0
  195. package/.next/static/chunks/359-f87c659236e0e0fe.js +1 -0
  196. package/.next/static/chunks/{8399-a001bb2a0cb1640b.js → 399-aa8a45d80e989621.js} +1 -1
  197. package/.next/static/chunks/430-f288e16301b9aea5.js +1 -0
  198. package/.next/static/chunks/465-80fbb245d43232c8.js +6 -0
  199. package/.next/static/chunks/499-2233cadc6d4da647.js +10 -0
  200. package/.next/static/chunks/551-fd86e95935b0957f.js +16 -0
  201. package/.next/static/chunks/576-6699fed6c88502fe.js +1 -0
  202. package/.next/static/chunks/61-de1dd9c104680470.js +1 -0
  203. package/.next/static/chunks/665-0634aa49137defc4.js +1 -0
  204. package/.next/static/chunks/681-e31b13114497e058.js +1 -0
  205. package/.next/static/chunks/687-644a12a5b584e19f.js +1 -0
  206. package/.next/static/chunks/702-4d9cc8d4d7775ea9.js +1 -0
  207. package/.next/static/chunks/748-9e5bf4181d7482f3.js +1 -0
  208. package/.next/static/chunks/759-280cf4040fae83af.js +25 -0
  209. package/.next/static/chunks/855-cbf7cd1db33198f0.js +17 -0
  210. package/.next/static/chunks/862-13d1c84d0938b824.js +1 -0
  211. package/.next/static/chunks/937-ccd3ceb1b3739535.js +1 -0
  212. package/.next/static/chunks/{8964-e959915ecfae86b2.js → 964-82cc4701f08f7351.js} +1 -1
  213. package/.next/static/chunks/992-8032f477230baaaf.js +1 -0
  214. package/.next/static/chunks/framework-4b565b3ddc94cdac.js +1 -0
  215. package/.next/static/chunks/main-0c91f573696223ca.js +1 -0
  216. package/.next/static/chunks/pages/_app-a70de062f1be1c59.js +140 -0
  217. package/.next/static/chunks/pages/_error-282257fbdcc167b4.js +1 -0
  218. package/.next/static/chunks/pages/documents-2d99ae9287f9739b.js +1 -0
  219. package/.next/static/chunks/pages/generation/[id]-1f97e47ce545bd11.js +1 -0
  220. package/.next/static/chunks/pages/generation-043e325d635c96af.js +1 -0
  221. package/.next/static/chunks/pages/index-24d1f8f39ae0beb0.js +1 -0
  222. package/.next/static/chunks/pages/jobs-ff2f899a081b616e.js +1 -0
  223. package/.next/static/chunks/pages/knowledge/file-detail-9a9a89e4fa33c0d9.js +1 -0
  224. package/.next/static/chunks/pages/knowledge/files-b3ef5324e4b74c4a.js +1 -0
  225. package/.next/static/chunks/pages/knowledge/manage-d9eaebf3a8307953.js +1 -0
  226. package/.next/static/chunks/pages/knowledge/{source-preview-24936b9a746ed07f.js → source-preview-f000b4d63cd65a54.js} +1 -1
  227. package/.next/static/chunks/pages/knowledge-8fa842d21892e2c3.js +1 -0
  228. package/.next/static/chunks/pages/models-6d9b301009f82395.js +1 -0
  229. package/.next/static/chunks/pages/settings-08893ba8afa1a486.js +1 -0
  230. package/.next/static/chunks/pages/skills/[id]/edit-378249e662ebf31f.js +1 -0
  231. package/.next/static/chunks/pages/skills/[id]-0ca4cde22e4a518b.js +1 -0
  232. package/.next/static/chunks/pages/skills/new-c1eb16d98fad4e02.js +1 -0
  233. package/.next/static/chunks/pages/skills-9fb1fa2b669ad4e3.js +1 -0
  234. package/.next/static/chunks/{webpack-2da1769ff35eb1ed.js → webpack-6224d37324e372cb.js} +1 -1
  235. package/.next/static/css/1f6d2a1bf5e15e0f.css +1 -0
  236. package/.next/static/css/b420c193e0e99857.css +1 -0
  237. package/.next/static/e5c2576dc1ab66edac22c9534755509cc2e1354bd840260e3154f2c95cf8bbf2/_buildManifest.js +1 -0
  238. package/README.md +14 -4
  239. package/messages/en-US.json +46 -100
  240. package/messages/zh-CN.json +44 -98
  241. package/next.config.ts +6 -5
  242. package/package.json +5 -6
  243. package/scripts/build-identity.cjs +16 -5
  244. package/scripts/check-workspace-deps.cjs +3 -3
  245. package/scripts/purge-next-artifacts.cjs +8 -5
  246. package/scripts/upload-matrix.cjs +1 -2
  247. package/scripts/verify-next-static.js +1 -1
  248. package/.next/server/chunks/1001.js +0 -2
  249. package/.next/server/chunks/1243.js +0 -3
  250. package/.next/server/chunks/1928.js +0 -1
  251. package/.next/server/chunks/1936.js +0 -385
  252. package/.next/server/chunks/2328.js +0 -6
  253. package/.next/server/chunks/2434.js +0 -4
  254. package/.next/server/chunks/3806.js +0 -1
  255. package/.next/server/chunks/4974.js +0 -2
  256. package/.next/server/chunks/5746.js +0 -5
  257. package/.next/server/chunks/6321.js +0 -1
  258. package/.next/server/chunks/7848.js +0 -145
  259. package/.next/server/chunks/9666.js +0 -146
  260. package/.next/server/instrumentation.js +0 -1
  261. package/.next/server/instrumentation.js.nft.json +0 -1
  262. package/.next/server/pages/api/prompt.js +0 -2
  263. package/.next/server/pages/api/prompt.js.nft.json +0 -1
  264. package/.next/server/pages/api/system/logs.js +0 -2
  265. package/.next/server/pages/api/system/logs.js.nft.json +0 -1
  266. package/.next/server/pages/api/system/stats.js +0 -2
  267. package/.next/server/pages/api/system/stats.js.nft.json +0 -1
  268. package/.next/server/pages/canvas/[id].html +0 -1
  269. package/.next/server/pages/canvas/[id].js.nft.json +0 -1
  270. package/.next/server/pages/canvas.html +0 -1
  271. package/.next/server/pages/canvas.js.nft.json +0 -1
  272. package/.next/server/pages/guide.html +0 -1
  273. package/.next/server/pages/guide.js.nft.json +0 -1
  274. package/.next/server/pages/index.html +0 -1
  275. package/.next/server/pages/overview.html +0 -1
  276. package/.next/server/pages/overview.js.nft.json +0 -1
  277. package/.next/server/pages/prompt.html +0 -1
  278. package/.next/server/pages/prompt.js.nft.json +0 -1
  279. package/.next/server/pages/system/logs.html +0 -1
  280. package/.next/server/pages/system/logs.js.nft.json +0 -1
  281. package/.next/static/0e37797d2ec62d17ca5f253c10b385fa939228f353538722f095755edce292af/_buildManifest.js +0 -1
  282. package/.next/static/chunks/1141-d420a7685bc3623c.js +0 -1
  283. package/.next/static/chunks/1499-ff8f02f6bb6f3d45.js +0 -10
  284. package/.next/static/chunks/1702-f5e99af7aface475.js +0 -1
  285. package/.next/static/chunks/2864-b040f2bffa08c139.js +0 -6
  286. package/.next/static/chunks/3456-70bb03a39473f693.js +0 -1
  287. package/.next/static/chunks/3980-73841c40d55ddfa1.js +0 -1
  288. package/.next/static/chunks/4052-199e61ca9e6a33e7.js +0 -1
  289. package/.next/static/chunks/4337-a670a1a94ab505d9.js +0 -1
  290. package/.next/static/chunks/4530-8b9788da40548ec6.js +0 -1
  291. package/.next/static/chunks/4565-3c5ff667062ccec9.js +0 -21
  292. package/.next/static/chunks/4665-1984a3d8b0573fa1.js +0 -1
  293. package/.next/static/chunks/5061-80765d4a612286e0.js +0 -1
  294. package/.next/static/chunks/5544-d77b8289662b4c28.js +0 -4
  295. package/.next/static/chunks/5760-f4191aac081b12d4.js +0 -11
  296. package/.next/static/chunks/6409-5a3bb0fbad4f64b1.js +0 -14
  297. package/.next/static/chunks/6506-ac0ba7338cc84b7d.js +0 -1
  298. package/.next/static/chunks/6748-07b0b05bf03c72f0.js +0 -1
  299. package/.next/static/chunks/7217-416b8488e0d2d498.js +0 -1
  300. package/.next/static/chunks/7576-ba6fc03060415b0e.js +0 -1
  301. package/.next/static/chunks/7646-159733564c7eb8dc.js +0 -1
  302. package/.next/static/chunks/7795-c11ff1a81c67c5aa.js +0 -1
  303. package/.next/static/chunks/8318-cb3a94de1617f983.js +0 -1
  304. package/.next/static/chunks/8338-b2ea00050048ba9f.js +0 -4
  305. package/.next/static/chunks/8564-ac3e2f1bf87765b3.js +0 -1
  306. package/.next/static/chunks/8569-1d5c61a3f4fa0e26.js +0 -16
  307. package/.next/static/chunks/8715-ee013bd7f5ba38e8.js +0 -1
  308. package/.next/static/chunks/8750-a3c55a576effb3a6.js +0 -1
  309. package/.next/static/chunks/8787-49b1f35eb4acfac9.js +0 -10
  310. package/.next/static/chunks/9551-f4b09bf2213ad571.js +0 -16
  311. package/.next/static/chunks/9605-3dee531f8a7ecbe0.js +0 -4
  312. package/.next/static/chunks/9937-e4b2deadd24e3962.js +0 -1
  313. package/.next/static/chunks/framework-9cde5013cd555765.js +0 -1
  314. package/.next/static/chunks/main-b313efde54fa6d2e.js +0 -1
  315. package/.next/static/chunks/pages/_app-51c48c5efcf5c721.js +0 -140
  316. package/.next/static/chunks/pages/_error-c01b6fb772028676.js +0 -1
  317. package/.next/static/chunks/pages/canvas/[id]-18865f1b7e3a4696.js +0 -1
  318. package/.next/static/chunks/pages/canvas-1d3589790493e955.js +0 -1
  319. package/.next/static/chunks/pages/documents-a1af5c6be26daed2.js +0 -1
  320. package/.next/static/chunks/pages/guide-fdf0822dc1d28813.js +0 -1
  321. package/.next/static/chunks/pages/index-c572e9caa60cb278.js +0 -1
  322. package/.next/static/chunks/pages/jobs-ebd1877dbf788a83.js +0 -1
  323. package/.next/static/chunks/pages/knowledge/file-detail-3d1ffd43f4f0e47b.js +0 -1
  324. package/.next/static/chunks/pages/knowledge/files-b796702bb5f8ac50.js +0 -1
  325. package/.next/static/chunks/pages/knowledge/manage-6d7b21cdca1255f2.js +0 -1
  326. package/.next/static/chunks/pages/knowledge-2a776c1740386874.js +0 -1
  327. package/.next/static/chunks/pages/models-8a89dd5bf0f81242.js +0 -1
  328. package/.next/static/chunks/pages/overview-7e8018014009682e.js +0 -1
  329. package/.next/static/chunks/pages/prompt-11f87694feb6514c.js +0 -1
  330. package/.next/static/chunks/pages/settings-e8dcaba1551a0b2b.js +0 -1
  331. package/.next/static/chunks/pages/skills/[id]/edit-99e616d5019e80b1.js +0 -1
  332. package/.next/static/chunks/pages/skills/[id]-71f696be252bbf0d.js +0 -1
  333. package/.next/static/chunks/pages/skills/new-00886ea4c676f927.js +0 -1
  334. package/.next/static/chunks/pages/skills-8ad2577b4aa17f3b.js +0 -1
  335. package/.next/static/chunks/pages/system/logs-0856f7c65432befb.js +0 -1
  336. package/.next/static/css/2da1c822e3bdb4bb.css +0 -1
  337. package/.next/static/css/9eb02c1a401fd278.css +0 -1
  338. package/scripts/half-built-scan.allow.json +0 -152
  339. package/scripts/half-built-scan.baseline.json +0 -190
  340. package/scripts/half-built-scan.mjs +0 -287
  341. /package/.next/static/{0e37797d2ec62d17ca5f253c10b385fa939228f353538722f095755edce292af → e5c2576dc1ab66edac22c9534755509cc2e1354bd840260e3154f2c95cf8bbf2}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ "use strict";exports.id=3074,exports.ids=[3074],exports.modules={15038:(a,b,c)=>{c.d(b,{C:()=>e,f:()=>d});class d extends Error{constructor(a){super(`PLANNING_PROFESSIONAL_REVIEW_PENDING:${a.scope}:${a.reason}`),this.detail=a,this.name="PlanningReviewPendingError"}}function e(a,b){return!["pass","accept"].includes(String(a.verdict))||b.some(a=>"blocking"===a.severity)}},33074:(a,b,c)=>{c.r(b),c.d(b,{STRUCTURE_PLAN_COVERAGE_SCHEMA:()=>W,STRUCTURE_PLAN_ENRICH_SCHEMA:()=>V,STRUCTURE_PLAN_REPAIR_SCHEMA:()=>ak,STRUCTURE_PLAN_REVIEWER:()=>D,STRUCTURE_PLAN_REVIEW_SCHEMA:()=>X,STRUCTURE_PLAN_SKELETON_SCHEMA:()=>U,applyStructurePlanOperations:()=>ag,applyStructurePlanRepairPatches:()=>ao,bindStructurePlanModelCaller:()=>J,boundaryTruncate:()=>u.D,buildStructureCoverageCatalog:()=>Q,documentOutlineFromStructurePlan:()=>av,mergeOriginalIdMaps:()=>ai,parseStructureOperations:()=>af,requiredStructureFactKeys:()=>R,structureOutputRepairProjection:()=>I,structurePlanPreview:()=>au,structureReferenceContext:()=>F,synthesizeDocumentStructurePlan:()=>as});var d=c(45002),e=c(29245),f=c(73024),g=c.n(f),h=c(76760),i=c.n(h),j=c(77598),k=c(68515),l=c(15038),m=c(40123),n=c(36690),o=c(36980),p=c(69977),q=c(23105),r=c(62369),s=c(745),t=c(91088),u=c(62563),v=c(98943);let w=a=>a&&"object"==typeof a&&!Array.isArray(a)?a:{},x=a=>Array.isArray(a)?a.map(w):[],y=["C","S","U","O","B"],z={coverageItemId:["C"],coverageItemIds:["C"],requiredCoverageItemIds:["C"],dependencySectionIds:["S"],sectionId:["S"],sectionIds:["S"],sourceSectionIds:["S"],fromSectionId:["S"],toSectionId:["S"],targetSectionId:["S"],outputId:["U"],targetOutputId:["U"],obligationId:["O","B"],targetObligationId:["O","C","B"],baselineId:["B"]},A=a=>JSON.parse(JSON.stringify(a)),B=(a,b)=>Object.hasOwn(a,b)?{present:!0,value:a[b]}:{present:!1},C=(a,b)=>[...new Set([...Object.keys(a),...Object.keys(b)])].sort().filter(c=>(0,s.Fu)(B(a,c))!==(0,s.Fu)(B(b,c))),D="independent-structure-plan-review";function E(a){return a.chapters.flatMap((a,b)=>a.sections.map((c,d)=>({chapterId:a.chapterId,chapterNumber:b+1,chapterTitle:a.title,sectionId:c.sectionId,sectionNumber:d+1,title:c.title,contentGroup:c.contentGroup})))}function F(a,b=[]){return{currentPlanHash:(0,n.YG)(a).planHash,currentSections:E(a),stableReferences:(0,e.GP)(a),numberingChanges:b}}let G=[e.bx,"structureReferences.currentSections 给出当前一基章号、节号、完整 sectionId、标题和内容组;自然语言“第X章/本章section:N”须按当前坐标核对,不把零基 chapterIndex 当章号。","numberingChanges 是按应用顺序记录的历史操作,每条 from/to 只对应其 beforePlanHash/afterPlanHash;拆节是一对多,不能把拆节后的第一节当作所有旧引用的目标。根据当前 coverageItemIds、契约原文和对象范围选择真正主载,不可机械替换文字或猜落点。","逐节核对全篇 objectScope、rationale 等文字中的章/节引用、连续节范围和“分别由”次序,包括未列入前轮 findings 的引用方及你本次提出的 patches/operations。拆并移节会改变编号:同回包自然语言接口优先用明确的章节标题和内容组,避免预猜操作后的编号;后续仍须核对最终候选。文字提及相邻章本身不是重复主载,但指向错误主载或遗漏范围须修订,不能因程序校验通过而批准。"],H="requiredOutputs 回复只写 form/carrierSemantic/element/semanticRole/obligationId/baselineId/quote/reason;不存在的可选身份字段省略,不填null。requiredOutputProvenance 与 sourceKind/source 是只读来源信息,不是回复字段;来源绑定仍靠真实 obligationId/baselineId 与原 quote/reason 保留。outputId/sectionId 即使回填也由程序按落点重算,不赋予新来源或批准。";function I(a){return{requiredOutputs:a.map(a=>({outputId:a.outputId,form:a.form,element:a.element,semanticRole:a.semanticRole,carrierSemantic:a.carrierSemantic,...void 0===a.source.quote?{}:{quote:a.source.quote},...void 0===a.source.reason?{}:{reason:a.source.reason},...void 0===a.obligationId?{}:{obligationId:a.obligationId},...void 0===a.baselineId?{}:{baselineId:a.baselineId}})),requiredOutputProvenance:a.map(a=>({outputId:a.outputId,source:{...a.source}}))}}function J(a){var b;return b={caller:a.caller,planningContext:P(a.planningContext),catalog:Q(a),archive:(b,c)=>aj(a,b,c)},async(a,c,d={})=>{if(!d.schema)throw Error("STRUCTURE_SELECTION_SCHEMA_REQUIRED");let e=w((0,t.cp)(JSON.parse(c))),f=function(a){let b=new Map(y.map(a=>[a,new Map])),c=new Map,d=(a,d)=>{if("string"!=typeof d||!d||b.get(a).has(d))return;let e=`${a}${b.get(a).size+1}`;b.get(a).set(d,e),c.set(e,{family:a,id:d})};a.catalog.forEach(a=>d("C",a.id)),[...a.planningContext.contractObligations,...a.planningContext.outputObligations].forEach(a=>d("O",a.id)),a.planningContext.baselineFigures.forEach(a=>d("B",a.id));let e=w(a.payload.plan);for(let b of Array.isArray(e.chapters)?x(e.chapters):x(a.payload.currentStructure))for(let a of x(b.sections))d("S",a.sectionId),x(a.requiredOutputs).forEach(a=>d("U",a.outputId));x(e.outputRegistry).forEach(a=>d("U",a.outputId));let f=a=>[...c].filter(([,b])=>a.includes(b.family)).map(([a])=>a),g=(a,c="",d="")=>{if("numberingChanges"===c||"reviewFeedback"===c)return structuredClone(a);if(Array.isArray(a))return a.map(a=>g(a,c,d));if("string"==typeof a){for(let e of z[c]??("id"===c?"baselineFigures"===d?["B"]:y:[])){let c=b.get(e)?.get(a);if(c)return c}return a}return a&&"object"==typeof a?Object.fromEntries(Object.entries(a).map(([a,b])=>[a,g(b,a,c)])):a},h=(a,b="")=>{let c=z[b],d=a.properties&&Object.fromEntries(Object.entries(a.properties).filter(([b,c])=>{if(!z[b]||"string"!==c.type||f(z[b]).length)return!0;if(!0===c.required||Array.isArray(a.required)&&a.required.includes(b))throw Error(`STRUCTURE_SELECTION_NO_TARGET:${b}没有当前可选目标`);return!1}).map(([a,b])=>[a,h(b,a)]));return c&&"array"===a.type&&!f(c).length?{...a,maxItems:0,items:{type:"string"}}:{...a,...c&&"string"===a.type?{enum:f(c)}:{},...a.items?{items:h(a.items,b)}:{},...d?{properties:d}:{}}},i=h(a.schema),j=g(a.payload),k=(a,b="")=>Array.isArray(a)?a.map(a=>k(a,b)):"string"==typeof a&&z[b]?f(z[b])[0]:a&&"object"==typeof a?Object.fromEntries(Object.entries(a).map(([a,b])=>[a,k(b,a)]).filter(([,a])=>void 0!==a)):a;j.output&&(j.output=k(j.output));let l={...j,structureSelectionProtocol:{version:"structure-bound-selection-v1",instructions:"身份字段只选择本次目录中的短键:C覆盖项、S当前节、U当前输出、O义务、B基线。真实ID由程序绑定,不抄hash、不改前缀、不创造键。按原文和专业含义选择,程序不代选主载或证据。不存在的可选目标字段省略。新节/输出的身份由程序生成。原文引文和文字中的稳定引用token保持原样。示例只表示字段形状,不表示建议选择。",allowedChoices:Object.fromEntries(y.map(a=>[a,f([a])]))}},m={version:"structure-bound-selection-v1",requestHash:(0,s.Fu)([a.payload,a.schema,[...c]]),identities:Object.fromEntries(c)},n=(a,b="")=>{if(Array.isArray(a))return a.map(a=>n(a,b));if(z[b]){let d="string"==typeof a?c.get(a):void 0;if(!d||!z[b].includes(d.family))throw Error(`STRUCTURE_SELECTION_UNKNOWN:${b}=${String(a)},只允许本次选项 ${f(z[b]).join(",")}`);return d.id}return a&&"object"==typeof a?Object.fromEntries(Object.entries(a).map(([a,b])=>[a,n(b,a)])):a};return{payload:l,schema:i,binding:m,restore:n}}({...b,payload:e,schema:d.schema}),g=(0,t.yA)(f.payload);b.archive?.("selection-input",{system:a,prompt:g,schema:f.schema,binding:f.binding});let h=await b.caller(a,g,{...d,schema:f.schema,validateProtocol:a=>{try{return d.validateProtocol?.(f.restore(a))??[]}catch(a){return[a instanceof Error?a.message:String(a)]}}});if(b.archive?.("selection-response",{requestHash:f.binding.requestHash,response:h}),void 0===h)return;let i=(0,v.validateJsonAgainstSchema)(h,f.schema);if(i.length)throw Error(`STRUCTURE_SELECTION_INVALID:${i.join(";")}`);return f.restore(h)}}let K=["table","figure","diagram","org_chart","chart"];function L(a){return["blocking","critical","major"].includes(String(a??"").toLowerCase())?"blocking":"advisory"}let M={type:"string"},N=a=>({type:"array",items:a}),O=(a,b,c=!1)=>({type:"object",properties:a,required:b,additionalProperties:c});function P(a){return{...a,contractObligations:a.contractObligations.filter(p.Ln),outputObligations:a.outputObligations.filter(a=>"domain-baseline"===a.kind||(0,p.oY)(a))}}function Q(a){let b=[],c=new Set,d=a=>{!a.id||!a.text.trim()||c.has(a.id)||(c.add(a.id),b.push({...a,text:a.text.trim()}))};for(let[b,c]of a.confirmed.chapters.entries())for(let[a,e]of c.points.entries())d({id:"coverage:"+(0,s.Fu)(["structure-requirement-v1",b,a]).slice(0,24),text:e.requirement?.trim()||e.title,kind:"requirement",enumerated:!1,chapterIndex:b,pointIndexes:[a]});for(let b of a.planningContext.contractObligations)if((0,p.Ln)(b))if(b.items?.length)for(let a of b.items)d({id:"coverage:"+(0,s.Fu)(["structure-obligation-item-v1",b.id,a.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase()]).slice(0,24),text:a,kind:"obligation",enumerated:!0,obligationId:b.id});else d({id:"coverage:"+(0,s.Fu)(["structure-obligation-v1",b.id]).slice(0,24),text:b.text,kind:"obligation",enumerated:!1,obligationId:b.id});for(let b of a.planningContext.professionalCandidates)for(let a of[...b.sectionCandidates.flatMap(a=>a.required),...b.contentRequirements.flatMap(a=>a.required)])d({id:"coverage:"+(0,s.Fu)(["structure-method-v1",b.chapterTitle,a.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase()]).slice(0,24),text:a,kind:"method",enumerated:!1});return b}function R(a){let b=/^(?:project_name|project_code|owner|project_location|项目名称|项目编号|建设单位|建设地点)$/u;return a.factsBaseline.filter(a=>!(!a.selected||b.test(a.key)||/项目名称|项目编号|建设单位|建设地点/u.test(`${a.key} ${a.fieldName??""}`)||!a.objectName&&(/^(?:project_scope|project_investment_estimate)$/u.test(a.key)||/招标范围|承包范围|项目投资估算|工程规模/u.test(a.fieldName??"")))).map(a=>a.key)}let S=O({form:{...M,enum:K},carrierSemantic:{...M,enum:n.J9},outputId:{...M},sectionId:{...M},element:{...M,minLength:1},semanticRole:{...M,minLength:1},obligationId:{...M,minLength:1},baselineId:{...M,minLength:1},quote:{...M,minLength:2},reason:{...M,minLength:2}},["form","carrierSemantic","element","semanticRole"]),T=O({title:{...M,minLength:1},contentGroup:{...M,minLength:1},coverageItemIds:N({...M,minLength:1}),requiredOutputs:N(S),suggestedCarriers:N(O({contentSet:{...M,minLength:1},carrier:{...M,enum:["paragraph","table","figure","chart","diagram","org_chart"]},reason:{...M,minLength:2}},["contentSet","carrier","reason"]))},["title","contentGroup","coverageItemIds"]),U={type:"object",additionalProperties:!1,required:["chapters"],properties:{chapters:N(O({chapterIndex:{type:"integer",minimum:0},title:{...M,minLength:1},sections:N(T)},["sections"]))}},V={type:"object",additionalProperties:!1,required:["sections"],properties:{sections:N(O({title:M,objectScope:{...M,minLength:1},rationale:{...M,minLength:1},responsibilityPositions:N({...M,minLength:1})},["objectScope","rationale","responsibilityPositions"]))}},W={type:"object",additionalProperties:!1,required:["factQuantities"],properties:{factQuantities:N(O({key:{...M,minLength:1},kind:{...M,enum:["fact","quantity"]},sectionId:{...M,minLength:1},notApplicableReason:{...M,minLength:2}},["key","kind"])),candidateDispositions:N(O({chapterTitle:M,candidateTitle:{...M,minLength:1},disposition:{...M,enum:["used","not-applicable"]},reason:{...M,minLength:2}},["candidateTitle","disposition"])),outputExceptions:N(O({obligationId:{...M,minLength:1},reason:{...M,minLength:2},alternative:{...M,minLength:2}},["obligationId","reason","alternative"]))}},X={type:"object",additionalProperties:!1,required:["verdict","findings"],properties:{verdict:{...M,enum:["pass","revise","reject","accept"]},sectionReviews:N(O({sectionId:M,verdict:{...M,enum:["pass","revise","unreviewed"]},dependencySectionIds:N(M),dependencyScopeComplete:{type:"boolean"},sourceOnlyDraft:{type:"boolean"},reason:{...M,minLength:2}},["sectionId","verdict","dependencySectionIds","dependencyScopeComplete","reason"])),findings:N(O({category:{...M,minLength:1},severity:{...M,enum:["blocking","advisory","critical","major","minor","moderate","warning","medium","non-blocking","info"]},targetSectionId:M,targetOutputId:M,targetObligationId:M,detail:{...M,minLength:2},fix:{...M,minLength:2}},["category","severity","detail","fix"],!0)),patches:N(O({sectionId:{...M,minLength:1},title:{...M,minLength:1},contentGroup:{...M,minLength:1},objectScope:{...M,minLength:1},rationale:{...M,minLength:1},responsibilityPositions:N({...M,minLength:1}),factKeys:N({...M,minLength:1}),quantityKeys:N({...M,minLength:1}),coverageItemIds:N({...M,minLength:1}),requiredOutputs:N(S)},["sectionId"],!0)),operations:N(O({op:{...M,enum:["update-section","move-section","merge-sections","split-section","move-coverage","move-output","change-content-group","change-carrier"]},sectionId:{...M,minLength:1},targetChapterIndex:{type:"integer",minimum:0},sourceSectionIds:N({...M,minLength:1}),title:{...M,minLength:1},contentGroup:{...M,minLength:1},coverageItemId:{...M,minLength:1},fromSectionId:{...M,minLength:1},toSectionId:{...M,minLength:1},outputId:{...M,minLength:1},carrierSemantic:{...M,enum:n.J9},form:{...M,enum:K},sections:N(O({title:{...M,minLength:1},contentGroup:{...M,minLength:1},coverageItemIds:N({...M,minLength:1}),requiredOutputs:N(S),objectScope:{...M,minLength:1},rationale:{...M,minLength:1},responsibilityPositions:N({...M,minLength:1}),factKeys:N({...M,minLength:1}),quantityKeys:N({...M,minLength:1})},["title","contentGroup"]))},["op"],!0)),exceptionDecisions:N(O({obligationId:{...M,minLength:1},accepted:{type:"boolean"},basis:{...M,minLength:2}},["obligationId","accepted","basis"]))}};function Y(a){return a.map(a=>({id:a.id,text:a.text,kind:a.kind,...a.enumerated?{enumerated:!0}:{},...a.obligationId?{obligationId:a.obligationId}:{},...a.pointIndexes?.length?{chapterIndex:a.chapterIndex,pointIndexes:a.pointIndexes}:{}}))}function Z(a,b,c,d){let e=new Set(b.chapters.flatMap(a=>a.sections.map(a=>a.sectionId))),f=new Set(b.outputRegistry.map(a=>a.outputId)),g=new Set(c.map(a=>a.id)),h=new Set([...g,...d.contractObligations.map(a=>a.id),...d.outputObligations.map(a=>a.id)]),i=new Set([...d.contractObligations.filter(a=>!(0,p.Ln)(a)),...d.outputObligations.filter(a=>"domain-baseline"!==a.kind&&!(0,p.oY)(a))].map(a=>a.id));return a.map(a=>{let b=[];if(a.target.sectionId&&!e.has(a.target.sectionId)&&b.push(`节「${a.target.sectionId}」不存在`),a.target.outputId&&!f.has(a.target.outputId)&&b.push(`输出「${a.target.outputId}」不存在`),a.target.obligationId&&!h.has(a.target.obligationId)&&b.push(`契约项「${a.target.obligationId}」不存在`),a.target.obligationId&&i.has(a.target.obligationId)&&b.push(`义务「${a.target.obligationId}」未核定适用本技术正文,不能作为本正文必出缺口`),/不在\s*coverageCatalog|不在契约项目录/u.test(a.detail)){let c=a.detail.match(/coverage:[a-z0-9]+/gu)??[],d=c.filter(a=>g.has(a));c.length&&d.length===c.length&&b.push(`coverage id 实际存在于目录:${d.join("、")}`)}return b.length?{...a,severity:"advisory",detail:`${a.detail}(程序核对:${b.join(";")},已降为 advisory)`}:a})}function $(a,b,c,d,e=[],f){return(0,t.dk)({planningContext:(0,o.compactPlanningContextProjection)(P(a.planningContext),{facts:"keys",obligations:"texts"}),coverageCatalog:Y(c),confirmedChapters:a.confirmed.chapters.map((a,b)=>({chapterIndex:b,title:a.title,points:a.points.map((a,b)=>({pointIndex:b,title:a.title,requirement:a.requirement??null}))})),plan:b,structureReferences:F(b,e),task:"独立审查施工组织设计的二级结构计划:只审结构完整性、专业逻辑、粒度、载体与重复;不改写正文,不替作者决定工法",rules:[...G,"你是独立规划审查者,不是本计划的作者。不得因为作者写了理由就接受;逐项核对象/专业/接口/风险/阶段是否有落点。","sectionReviews 对当前每一节恰好返回一条覆盖回执,不受 findings 的条数限制。未实际审完写 unreviewed;发现未决写 revise;明确审过本节及依赖范围且可起草才写 pass。dependencySectionIds 列出实际依赖的当前节,dependencyScopeComplete 仅在依赖范围已审完时为 true。无 finding 或文字未改都不代表 pass。逐节批准只允许起草,不能替代整稿独审、正文独审或锁节。","sourceOnlyDraft 仅当该节及依赖闭包可完全依靠当前冻结来源与批准结构起草、不依赖尚未形成的工法决定/专业建包/资源配置/计算或执行基准时为 true;不确定或依赖这些成果则 false。它不批准正文、不免除正文独审和最终全局交付。","检查:章下节是否覆盖项目对象与专业系统;是否有过粗(一节承载多个对象/专业/阶段)、过细(同一主题拆碎)、空泛模板节、与已确认招标要点无关的节。","**章内节以该章确认要点为准**:节可以承接 confirmedChapters.points 或合同义务;章题是概括性表述,不等于内容错位。只有节既不承接本章任何确认要点、也不承接合同义务,或明显应归另一章时才判错位。","检查:每项合同内容义务(含原子项)是否有节承接;每项必出输出是否只有一个主载体与一个节;是否有同一内容组被表/图重复主载;组织机构图是否只有一张。","**同文覆盖项同节**:coverageCatalog 中去除空白/标点后文本相同的契约项是同一内容组;发现它们跨节时,fix 必须要求整组归并到一节,不得只移动其中一项,也不得把同文组拆到两节。","**内容组与载体语义**:同一 contentGroup 只能由一个节主载;输出声明的 carrierSemantic 必须与 form 匹配(organization→org_chart、gantt→chart、network/flow→diagram、spatial/collision→figure、comparison→table)。发现冲突用 patches 改 contentGroup/requiredOutputs;跨节移动/合并/拆分用 operations,不要只写文字意见。","**主载体重复 ≠ 对象范围提及**:只有同一内容组在两个节都被作为主载体展开(表/图/独立措施段落)才算 blocking duplication;仅在 objectScope/接口边界提到相邻章的对象,写 advisory。","**引用可核**:只能引用 coverageCatalog 中真实存在的契约项 id、plan 中真实存在的 sectionId/outputId;不得凭印象报告“某 id 不在目录”。","检查:节标题是否名词短语、同级平行、无评审/说明语言、无重复;objectScope/rationale 是否具体到本项目,不是可套用任何工程的空话。","检查:事实/工程量落点是否与节内声明一致;专业候选未采用是否有具体理由。","检查:规划是否写死固定阶段/工日/机械/项目常量,或把“编制依据/图纸理解/清单对账”当正文主题。","发现可修的节级问题,用 patches 返回(sectionId + 修改字段);不能修的结构问题写 blocking finding。exceptionDecisions 只对 outputExceptions 给出接受/拒绝与理由。","verdict=pass 仅当没有 blocking finding 且结构可直接进入写作;有 blocking 但已用 patches 修正可给 revise。","**输出控制**:findings 最多 12 条,按严重度排序;detail 不超过 120 字,fix 不超过 80 字;同一问题不要重复。patches 最多 12 条、operations 最多 12 条,只给确实可修的节/确实可落地的结构修改;无法修的写 finding。","**示例只是字段形状**:output 里的“工程名词短语一/二”“内容组一/二”“表名”都是占位符,不是要照抄的标题或内容组;必须换成本项目实际的工程名词、内容组与表名。",H,"只输出 JSON。"],round:d,...f?{reviewFeedback:f}:{},output:{verdict:"revise",findings:[{category:"structure",severity:"blocking",targetSectionId:"section…",detail:"可核问题",fix:"具体修法"}],patches:[{sectionId:"section…",objectScope:"修订后的对象范围",contentGroup:"内容组"}],operations:[{op:"move-coverage",coverageItemId:"coverage:…",toSectionId:"section…"},{op:"move-section",sectionId:"section…",targetChapterIndex:1},{op:"merge-sections",sectionId:"section…",sourceSectionIds:["section…"],contentGroup:"内容组"},{op:"split-section",sectionId:"section…",sections:[{title:"工程名词短语一",contentGroup:"内容组一",coverageItemIds:["coverage:…"]},{title:"工程名词短语二",contentGroup:"内容组二",coverageItemIds:["coverage:…"],requiredOutputs:[{form:"table",carrierSemantic:"comparison",element:"表名",semanticRole:"内容组二",reason:"唯一承载"}]}]},{op:"change-carrier",outputId:"output:…",carrierSemantic:"organization"}],exceptionDecisions:[{obligationId:"output:…",accepted:!1,basis:"拒绝理由"}]}})}function _(a,b,c,d,e){return"output:"+(0,s.Fu)(["structure-output-v2",a,b,c??"",d.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase(),e.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase()]).slice(0,24)}function aa(a){let b=new Map(a.planningContext.outputObligations.map(a=>[a.id,a])),c=new Map(a.planningContext.baselineFigures.map(a=>[a.id,a])),d=[];for(let f of Array.isArray(a.raw)?a.raw:[]){var e;let g=f??{},h="string"==typeof g.obligationId?g.obligationId.trim():"",i="string"==typeof g.baselineId?g.baselineId.trim():"",j=h?b.get(h):void 0,k=j&&("domain-baseline"===j.kind||(0,p.oY)(j))?j:void 0,l=i?c.get(i):void 0,m=(e=g.form??k?.form??l?.form,K.includes(e)?e:"table"),o=n.J9.includes(g.carrierSemantic)?g.carrierSemantic:void 0,q=String(g.element??k?.element??l?.element??"").trim();if(!q)continue;let r=String(g.semanticRole??"").trim()||q,s=String(g.quote??k?.quote??"").trim(),t=String(g.reason??l?.requirement??"").trim(),u=k?.kind==="domain-baseline"||!!l,v=u?"domain-baseline":k?"tender":"agent-decision",w=u&&(i||k?.id)||"";d.push({outputId:_(a.sectionId,m,o,q,r),form:m,element:q,semanticRole:r,...o?{carrierSemantic:o}:{},sectionId:a.sectionId,primary:!0,source:{kind:v,...s?{quote:s}:{},...t?{reason:t}:{}},dedupeKey:"",...k?{obligationId:k.id}:{},...w?{baselineId:w}:{}})}return d}function ab(a){return{...a,outputRegistry:a.chapters.flatMap(a=>a.sections.flatMap(a=>a.requiredOutputs))}}function ac(a,b){for(let[c,d]of a.chapters.entries()){let a=d.sections.findIndex(a=>a.sectionId===b);if(a>=0)return{chapterIndex:c,sectionIndex:a,section:d.sections[a]}}}function ad(a,b,c,d){return{...a,chapters:a.chapters.map((a,e)=>e===b?{...a,sections:a.sections.map((a,b)=>b===c?d:a)}:a)}}function ae(a,b){return{...a,chapters:a.chapters.map(a=>({...a,sections:a.sections.filter(a=>a.sectionId!==b)}))}}function af(a){let b=Array.isArray(a)?a:[],c=a=>Array.isArray(a)?[...new Set(a.map(a=>String(a).trim()).filter(Boolean))]:[],d=a=>"string"==typeof a&&a.trim()?a.trim():void 0;return b.flatMap(a=>{let b=a??{},e=String(b.op??""),f=String(b.sectionId??"").trim();switch(e){case"update-section":return f?[{op:e,sectionId:f,...d(b.title)?{title:d(b.title)}:{},...d(b.contentGroup)?{contentGroup:d(b.contentGroup)}:{},...d(b.objectScope)?{objectScope:d(b.objectScope)}:{},...d(b.rationale)?{rationale:d(b.rationale)}:{},...c(b.responsibilityPositions).length?{responsibilityPositions:c(b.responsibilityPositions)}:{}}]:[];case"move-section":{let a=Number(b.targetChapterIndex);return f&&Number.isInteger(a)&&a>=0?[{op:e,sectionId:f,targetChapterIndex:a}]:[]}case"merge-sections":{let a=c(b.sourceSectionIds);return f&&a.length?[{op:e,sectionId:f,sourceSectionIds:a,...d(b.title)?{title:d(b.title)}:{},...d(b.contentGroup)?{contentGroup:d(b.contentGroup)}:{}}]:[]}case"split-section":{let a=(Array.isArray(b.sections)?b.sections:[]).flatMap(a=>{let b=a??{},e=String(b.title??"").trim(),f=String(b.contentGroup??"").trim();return e&&f?[{title:e,contentGroup:f,...c(b.coverageItemIds).length?{coverageItemIds:c(b.coverageItemIds)}:{},...Array.isArray(b.requiredOutputs)?{requiredOutputs:b.requiredOutputs}:{},...d(b.objectScope)?{objectScope:d(b.objectScope)}:{},...d(b.rationale)?{rationale:d(b.rationale)}:{},...c(b.responsibilityPositions).length?{responsibilityPositions:c(b.responsibilityPositions)}:{},...c(b.factKeys).length?{factKeys:c(b.factKeys)}:{},...c(b.quantityKeys).length?{quantityKeys:c(b.quantityKeys)}:{}}]:[]});return f&&a.length?[{op:e,sectionId:f,sections:a}]:[]}case"move-coverage":{let a=String(b.coverageItemId??"").trim(),c=String(b.toSectionId??"").trim(),f=d(b.fromSectionId);return a&&c?[{op:e,coverageItemId:a,toSectionId:c,...f?{fromSectionId:f}:{}}]:[]}case"move-output":{let a=String(b.outputId??"").trim(),c=String(b.toSectionId??"").trim();return a&&c?[{op:e,outputId:a,toSectionId:c}]:[]}case"change-content-group":{let a=d(b.contentGroup);return f&&a?[{op:e,sectionId:f,contentGroup:a}]:[]}case"change-carrier":{let a=String(b.outputId??"").trim();if(!a)return[];return[{op:e,outputId:a,carrierSemantic:String(b.carrierSemantic??""),...K.includes(b.form)?{form:b.form}:{}}]}default:return[]}})}function ag(a){let b=a.plan,c=[...a.operations],d=[],e=[],f=[],g=new Map;for(let b of a.plan.chapters)for(let a of b.sections)g.set(a.sectionId,a.sectionId);for(;c.length;){let h=c.shift(),i=function(a,b,c){switch(b.op){case"update-section":{let c=ac(a,b.sectionId);if(!c)return{error:`节「${b.sectionId}」不存在`};return{plan:ad(a,c.chapterIndex,c.sectionIndex,{...c.section,...b.title?.trim()?{title:b.title.trim()}:{},...b.contentGroup?.trim()?{contentGroup:b.contentGroup.trim()}:{},...b.objectScope?.trim()?{objectScope:b.objectScope.trim()}:{},...b.rationale?.trim()?{rationale:b.rationale.trim()}:{},...b.responsibilityPositions?{responsibilityPositions:[...new Set(b.responsibilityPositions.map(a=>a.trim()).filter(Boolean))]}:{}})}}case"move-section":{let c=ac(a,b.sectionId);if(!c)return{error:`节「${b.sectionId}」不存在`};if(!a.chapters[b.targetChapterIndex])return{error:`目标章 ${b.targetChapterIndex} 不存在`};let d=ae(a,b.sectionId);return{plan:{...d,chapters:d.chapters.map((a,d)=>d===b.targetChapterIndex?{...a,sections:[...a.sections,c.section]}:a)}}}case"merge-sections":{let c=ac(a,b.sectionId);if(!c)return{error:`幸存节「${b.sectionId}」不存在`};let d=[...new Set(b.sourceSectionIds.filter(a=>a&&a!==b.sectionId))];if(!d.length)return{error:"并节至少需要一个 sourceSectionIds"};let e=d.map(b=>({id:b,location:ac(a,b)})),f=e.find(a=>!a.location);if(f)return{error:`待并节「${f.id}」不存在`};let g=e.map(a=>a.location.section),h=a=>[...new Set(a.flat().filter(Boolean))],i={...c.section,title:b.title?.trim()||c.section.title,contentGroup:b.contentGroup?.trim()||c.section.contentGroup,coverageItemIds:h([c.section.coverageItemIds,...g.map(a=>a.coverageItemIds)]),requiredOutputs:[...c.section.requiredOutputs,...g.flatMap(a=>a.requiredOutputs.map(a=>({...a,sectionId:b.sectionId})))],suggestedCarriers:[...c.section.suggestedCarriers,...g.flatMap(a=>a.suggestedCarriers)].filter((a,b,c)=>c.findIndex(b=>b.contentSet===a.contentSet&&b.carrier===a.carrier)===b),factKeys:h([c.section.factKeys,...g.map(a=>a.factKeys)]),quantityKeys:h([c.section.quantityKeys,...g.map(a=>a.quantityKeys)])},j=a;for(let a of d)j=ae(j,a);let k=ac(j,b.sectionId);if(!k)return{error:"并节后幸存节丢失"};if(j={...j=ad(j,k.chapterIndex,k.sectionIndex,i),factQuantities:j.factQuantities.map(a=>a.sectionId&&d.includes(a.sectionId)?{...a,sectionId:b.sectionId}:a)},c.section.referenceId){let a=g.flatMap(a=>a.referenceId?[a.referenceId]:[]),b=b=>a.reduce((a,b)=>a.split(`[[section:${b}]]`).join(`[[section:${c.section.referenceId}]]`),b);j={...j,chapters:j.chapters.map(a=>({...a,sections:a.sections.map(a=>({...a,objectScope:b(a.objectScope),rationale:b(a.rationale)}))}))}}return{plan:j,aliases:new Map(d.map(a=>[a,b.sectionId]))}}case"split-section":{let d=ac(a,b.sectionId);if(!d)return{error:`待拆节「${b.sectionId}」不存在`};if(b.sections.length<2)return{error:"拆节至少需要两个新节"};let e=d.section,f=b.sections.map((a,b)=>`__split:${e.sectionId}:${b}__`),g=new Set(b.sections.flatMap(a=>a.coverageItemIds??[])),h=e.coverageItemIds.filter(a=>!g.has(a));if(h.length)return{error:`拆节后契约项未分配:${h.slice(0,6).join("、")}`};let i=[...g].filter(a=>!e.coverageItemIds.includes(a));if(i.length)return{error:`拆节不能引入本节没有的契约项:${i.slice(0,6).join("、")}`};let j=new Set(b.sections.flatMap(a=>a.factKeys??[])),k=new Set(b.sections.flatMap(a=>a.quantityKeys??[])),l=e.factKeys.filter(a=>!j.has(a)),m=e.quantityKeys.filter(a=>!k.has(a)),o=b.sections.map((a,b)=>{let d=f[b];return{sectionId:d,...e.referenceId?{referenceId:`${e.referenceId}x${b+1}`}:{},title:a.title.trim(),contentGroup:a.contentGroup.trim(),objectScope:a.objectScope?.trim()||e.objectScope,rationale:a.rationale?.trim()||e.rationale,responsibilityPositions:a.responsibilityPositions?[...new Set(a.responsibilityPositions.map(a=>a.trim()).filter(Boolean))]:[...e.responsibilityPositions],coverageItemIds:[...new Set(a.coverageItemIds??[])],requiredOutputs:aa({sectionId:d,raw:a.requiredOutputs??[],planningContext:c}),suggestedCarriers:[],factKeys:[...new Set([...a.factKeys??[],...0===b?l:[]])],quantityKeys:[...new Set([...a.quantityKeys??[],...0===b?m:[]])]}}),p=a=>a.obligationId??a.baselineId??(0,n.h5)(a.element,a.semanticRole),q=new Set(e.requiredOutputs.map(p)),r=new Set(o.flatMap(a=>a.requiredOutputs).map(p)),s=[...q].filter(a=>!r.has(a));if(s.length)return{error:`拆节后必出输出未分配:${s.slice(0,6).join("、")}`};let t=new Map;for(let a of o){for(let b of a.factKeys)t.set(`fact:${b}`,a.sectionId);for(let b of a.quantityKeys)t.set(`quantity:${b}`,a.sectionId)}let u=ad(a,d.chapterIndex,d.sectionIndex,o[0]),v=u.chapters.map((a,b)=>b===d.chapterIndex?{...a,sections:[...a.sections.slice(0,d.sectionIndex),...o,...a.sections.slice(d.sectionIndex+1)]}:a);return{plan:{...u,chapters:v,factQuantities:a.factQuantities.map(a=>{if(a.sectionId!==e.sectionId)return a;let b=t.get(`${a.kind}:${a.key}`);return b?{...a,sectionId:b}:a})},aliases:new Map([[e.sectionId,f[0]]]),splitSuccessors:new Map([[e.sectionId,f]])}}case"move-coverage":{if(!ac(a,b.toSectionId))return{error:`目标节「${b.toSectionId}」不存在`};let c=a.chapters.flatMap(a=>a.sections).filter(a=>a.coverageItemIds.includes(b.coverageItemId));if(b.fromSectionId&&!c.some(a=>a.sectionId===b.fromSectionId))return{error:`契约项「${b.coverageItemId}」不在节「${b.fromSectionId}」`};if(!c.length)return{error:`契约项「${b.coverageItemId}」不在任何节`};let d={...a,chapters:a.chapters.map(a=>({...a,sections:a.sections.map(a=>({...a,coverageItemIds:a.coverageItemIds.filter(a=>a!==b.coverageItemId)}))}))},e=ac(d,b.toSectionId);if(!e)return{error:`目标节「${b.toSectionId}」不存在`};return{plan:ad(d,e.chapterIndex,e.sectionIndex,{...e.section,coverageItemIds:[...new Set([...e.section.coverageItemIds,b.coverageItemId])]})}}case"move-output":{let c=a.chapters.flatMap((a,b)=>a.sections.map((a,c)=>({chapterIndex:b,sectionIndex:c,section:a}))).find(a=>a.section.requiredOutputs.some(a=>a.outputId===b.outputId));if(!c)return{error:`输出「${b.outputId}」不在任何节`};if(c.section.sectionId===b.toSectionId)return{error:"输出已在该节"};if(!ac(a,b.toSectionId))return{error:`目标节「${b.toSectionId}」不存在`};let d=c.section.requiredOutputs.find(a=>a.outputId===b.outputId),e=ad(a,c.chapterIndex,c.sectionIndex,{...c.section,requiredOutputs:c.section.requiredOutputs.filter(a=>a.outputId!==b.outputId)}),f=ac(e,b.toSectionId);if(!f)return{error:`目标节「${b.toSectionId}」不存在`};return{plan:ad(e,f.chapterIndex,f.sectionIndex,{...f.section,requiredOutputs:[...f.section.requiredOutputs,{...d,sectionId:f.section.sectionId}]})}}case"change-content-group":{if(!b.contentGroup?.trim())return{error:"contentGroup 不能为空"};let c=ac(a,b.sectionId);if(!c)return{error:`节「${b.sectionId}」不存在`};return{plan:ad(a,c.chapterIndex,c.sectionIndex,{...c.section,contentGroup:b.contentGroup.trim()})}}case"change-carrier":{if(!n.J9.includes(b.carrierSemantic))return{error:`carrierSemantic「${String(b.carrierSemantic)}」不在枚举内`};let c=a.chapters.flatMap((a,b)=>a.sections.map((a,c)=>({chapterIndex:b,sectionIndex:c,section:a}))).find(a=>a.section.requiredOutputs.some(a=>a.outputId===b.outputId));if(!c)return{error:`输出「${b.outputId}」不在任何节`};let d=c.section.requiredOutputs.find(a=>a.outputId===b.outputId),e=n._s[b.carrierSemantic],f=b.form??(e.includes(d.form)?d.form:e[0]),g={...d,carrierSemantic:b.carrierSemantic,form:f,outputId:_(c.section.sectionId,f,b.carrierSemantic,d.element,d.semanticRole)};return{plan:ad(a,c.chapterIndex,c.sectionIndex,{...c.section,requiredOutputs:c.section.requiredOutputs.map(a=>a.outputId===b.outputId?g:a)})}}default:return{error:`未知结构操作「${String(b.op)}」`}}}(b,h,a.planningContext);if("error"in i){e.push({op:h.op,..."sectionId"in h&&h.sectionId?{sectionId:h.sectionId}:{},reason:i.error});continue}let j=function(a,b=new Map){let c=new Map,d=a.chapters.map(a=>({...a,sections:a.sections.map((b,d)=>{let e=`${a.chapterId}:section:${d+1}`;return c.set(b.sectionId,e),{...b,sectionId:e,requiredOutputs:b.requiredOutputs.map(a=>({...a,sectionId:e}))}})})),e=a=>{let d=b.get(a)??a;return c.get(d)??d};return{idMap:c,plan:ab({...a,chapters:d,factQuantities:a.factQuantities.map(a=>a.sectionId?{...a,sectionId:e(a.sectionId)}:a),coverageMatrix:a.coverageMatrix.map(a=>({...a,sectionIds:[...new Set(a.sectionIds.map(e))],...a.itemLandings?{itemLandings:a.itemLandings.map(a=>({...a,sectionIds:[...new Set(a.sectionIds.map(e))]}))}:{}}))})}}(i.plan,i.aliases),k=al(aq(j.plan,a.planningContext),a.catalog),l=a.validate(k);if(l.length){e.push({op:h.op,..."sectionId"in h&&h.sectionId?{sectionId:h.sectionId}:{},reason:ah(l).slice(0,6).join(";")});continue}let m=new Map(E(k).map(a=>[a.sectionId,a])),o=E(b).flatMap(a=>{let b=(i.splitSuccessors?.get(a.sectionId)??[i.aliases?.get(a.sectionId)??a.sectionId]).flatMap(a=>{let b=m.get(j.idMap.get(a)??a);return b?[b]:[]});return 1!==b.length||b[0].sectionId!==a.sectionId?[{from:a,to:b}]:[]});for(let[a,c]of(o.length&&f.push({op:h.op,beforePlanHash:(0,n.YG)(b).planHash,afterPlanHash:(0,n.YG)(k).planHash,sections:o}),b=k,d.push({op:h.op,..."sectionId"in h&&h.sectionId?{sectionId:j.idMap.get(h.sectionId)??j.idMap.get(i.aliases?.get(h.sectionId)??"")??h.sectionId,originalSectionId:h.sectionId}:{}}),g)){let b=i.aliases?.get(c)??c;g.set(a,j.idMap.get(b)??b)}c=c.map(a=>(function(a,b){switch(a.op){case"update-section":case"move-section":case"split-section":case"change-content-group":return{...a,sectionId:b(a.sectionId)};case"merge-sections":return{...a,sectionId:b(a.sectionId),sourceSectionIds:a.sourceSectionIds.map(b)};case"move-coverage":return{...a,...a.fromSectionId?{fromSectionId:b(a.fromSectionId)}:{},toSectionId:b(a.toSectionId)};case"move-output":return{...a,toSectionId:b(a.toSectionId)};case"change-carrier":return a}})(a,a=>j.idMap.get(a)??a))}return{plan:b,applied:d,rejected:e,originalIdMap:g,numberingChanges:f}}function ah(a){return a.map(a=>a.message)}function ai(a,b){let c=new Map(b);for(let[d,e]of a){let a=e,f=new Set;for(;!f.has(a)&&b.has(a);)f.add(a),a=b.get(a);c.set(d,a)}return c}function aj(a,b,c){if(a.artifactDir)try{let d=a.runId?i().join(a.artifactDir,"runs",a.runId,"artifacts","structure-plan"):i().join(a.artifactDir,"structure-plan");g().mkdirSync(d,{recursive:!0}),g().writeFileSync(i().join(d,`${b}-${Date.now()}-${(0,j.randomUUID)()}.json`),JSON.stringify({runId:a.runId??null,kind:b,value:c},null,2))}catch{}}let ak={type:"object",additionalProperties:!1,required:["patches"],properties:{patches:X.properties.patches,operations:X.properties.operations}};function al(a,b){let c=new Map;for(let a of b)a.obligationId&&c.set(a.obligationId,[...c.get(a.obligationId)??[],a]);let d=new Map;for(let b of a.chapters)for(let a of b.sections)for(let b of a.coverageItemIds)d.set(b,a.sectionId);let e=new Map(a.coverageMatrix.map(a=>[a.obligationId,a]));return{...a,coverageMatrix:[...c].map(([a,b])=>{let c=b.map(a=>({item:a.text,sectionIds:d.has(a.id)?[d.get(a.id)]:[]})).filter(a=>a.sectionIds.length>0).sort((a,b)=>a.item.localeCompare(b.item)),f=[...new Set(c.flatMap(a=>a.sectionIds))].sort(),g=f.length>1?"distributed":"section";return{obligationId:a,landing:g,sectionIds:f,reason:e.get(a)?.reason??"按规划节内主载投影",..."distributed"===g?{itemLandings:c}:{}}}).sort((a,b)=>a.obligationId.localeCompare(b.obligationId))}}let am={type:"object",additionalProperties:!1,required:["dispositions"],properties:{dispositions:N(O({chapterTitle:{...M,minLength:1},candidateTitle:{...M,minLength:1},disposition:{...M,enum:["used","not-applicable"]},reason:{...M,minLength:2}},["chapterTitle","candidateTitle","disposition","reason"]))}};async function an(a,b,c){let d=await a.caller("你是施工组织设计结构规划者。只为未进入结构的专业候选给出处置理由;只输出 JSON。",(0,t.dk)({task:"解释专业候选为何未单独进入结构:已被现有节承接,或确实不适用",currentStructure:b.chapters.filter(a=>c.some(b=>(0,q.ri)(b.chapterTitle)===(0,q.ri)(a.title))).map(a=>({chapterTitle:a.title,sections:a.sections.map(a=>({title:a.title,objectScope:a.objectScope}))})),missingCandidates:c,rules:["若候选主题已由某个现有节的结构/对象范围实际承接,disposition=used,并在 reason 写明由哪一节承接。","若确实不适用,disposition=not-applicable,并写本项目具体理由(不存在该对象、已并入哪一节、合同/图纸无该要求);不得用空话。","不得编造项目对象或来源;只输出 JSON。"],output:{dispositions:[{chapterTitle:"章标题",candidateTitle:"候选主题",disposition:"not-applicable",reason:"具体理由"}]}}),{diagnostics:a.diagnostics,signal:a.signal,temperature:0,taskKind:"reasoning",callKind:"structure-planning",schema:am});if(aj(a,"candidate-repair",d),!d)return b;let e=Array.isArray(d.dispositions)?d.dispositions:[],f=[...b.candidateDispositions??[]];for(let a of e){let b=String(a.chapterTitle??"").trim(),c=String(a.candidateTitle??"").trim(),d=String(a.reason??"").trim();if(!b||!c||!d)continue;let e="used"===a.disposition?"used":"not-applicable",g=f.findIndex(a=>(0,q.ri)(a.chapterTitle)===(0,q.ri)(b)&&(0,q.ri)(a.candidateTitle)===(0,q.ri)(c)),h={chapterTitle:b,candidateTitle:c,disposition:e,reason:d};g>=0?f[g]=h:f.push(h)}return{...b,candidateDispositions:f}}function ao(a,b,c,d){let e=new Map(b.map(a=>[String(a.sectionId??""),a])),f=aq(ab({...a,chapters:a.chapters.map(a=>({...a,sections:a.sections.map(a=>{let b=e.get(a.sectionId);return b?{...a,..."string"==typeof b.title&&b.title.trim()?{title:b.title.trim()}:{},..."string"==typeof b.contentGroup&&b.contentGroup.trim()?{contentGroup:b.contentGroup.trim()}:{},..."string"==typeof b.objectScope&&b.objectScope.trim()?{objectScope:b.objectScope.trim()}:{},..."string"==typeof b.rationale&&b.rationale.trim()?{rationale:b.rationale.trim()}:{},...Array.isArray(b.responsibilityPositions)?{responsibilityPositions:[...new Set(b.responsibilityPositions.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.factKeys)?{factKeys:[...new Set(b.factKeys.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.quantityKeys)?{quantityKeys:[...new Set(b.quantityKeys.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.coverageItemIds)?{coverageItemIds:[...new Set(b.coverageItemIds.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.requiredOutputs)?{requiredOutputs:aa({sectionId:a.sectionId,raw:b.requiredOutputs,planningContext:c})}:{}}:a})}))}),c);return a.coverageMatrix.length?al(f,d):f}async function ap(a,b,c,d,e=[],f){let g="你是施工组织设计结构规划者。按具体问题修订当前候选的范围、落点、标题与载体;保留可核证据,不得降低问题严重性。只输出 JSON。",h=function(a,b,c,d,e=[],f){return(0,t.dk)({...d?{planningContext:(0,o.compactPlanningContextProjection)(P(d.planningContext),{obligations:"texts"})}:{},task:"修补施工组织设计二级结构:根据 deterministicIssues 逐项修订当前候选,包括对象范围、专业边界、义务落点与载体;不得改动已确认一级章节",structureReferences:F(a,e),currentStructure:a.chapters.map((a,b)=>({chapterIndex:b,title:a.title,sections:a.sections.map(a=>({sectionId:a.sectionId,title:a.title,objectScope:a.objectScope,rationale:a.rationale,responsibilityPositions:a.responsibilityPositions,factKeys:a.factKeys,quantityKeys:a.quantityKeys,coverageItemIds:a.coverageItemIds,...I(a.requiredOutputs)}))})),coverageCatalog:Y(c),currentFactLandings:a.factQuantities,eligibleAdditionalFactKeys:d?.planningContext.factsBaseline.filter(a=>a.selected).map(a=>a.key),...f?{reviewFeedback:{...f,currentPlanHash:(0,n.YG)(a).planHash,usage:"意见绑定reviewedPlanHash,当前候选以currentStructure为准;建议只供核对,不代表已应用或已批准。已变动目标须按当前目录与完整编号变更重新选择。"}}:{},deterministicIssues:b.map(a=>({code:a.code,message:a.message,...a.target?.sectionId?{sectionId:a.target.sectionId}:{},...a.target?.key?{key:a.target.key}:{},target:a.target})),rules:[...G,H,"title:必须是工程名词短语,同级平行;不得含招标/评审/评分/说明/报价/费用/措施费/人工费/包括但不限于/不得/必须/要求等语言,不得动词开头或以标点结尾。","coverageItemIds:**整节替换**,不是追加。每个契约项在全篇只能出现在一个节;requiredCoverageItemIds / deterministicIssues 里缺的 id 必须补到最相关节。","**同文覆盖项同节**:去除空白与标点后文本相同的契约项是同一内容组,组内所有 id 必须待在同一个节;移动/移除必须整组处理,不能只搬其中一个 id。","contentGroup:**整节替换**。同一内容组全篇只能由一个节主载;重复时只保留真正展开该内容组的节,其余节改内容组或改为引用表述。","requiredOutputs:**整节替换**,不是追加;同一内容组只能一个输出;每个输出必须带 carrierSemantic,且与 form 匹配(organization→org_chart、gantt→chart、network/flow→diagram、spatial/collision→figure、comparison→table)。组织机构图全篇只能一张:招标格式义务与领域基线义务合并在同一个输出里,统一用 org_chart 形式,同时填 obligationId 与 baselineId,不得同时登记 diagram 与 org_chart。","每个输出须保留当前原文/理由与来源绑定。招标必交输出填已核 obligationId 与 quote;领域基线填 baselineId;你新增的表图须填写 reason,说明为何选用这一载体,不能冒充招标要求。未修改的输出无需重写;整节替换时不能漏掉已有来源字段。","项目管理机构图与人员组成表必须在同一节:需要时同时修补两个节——一个节移除、另一个节加回;不能只删不加。","按契约项文本与节标题/对象范围的专业相关性归位;同一章的招标要点优先放入该章最相关的节。","objectScope、rationale、responsibilityPositions、factKeys、quantityKeys 可直接修订。跨节移动/合并/拆分、换载体用 operations;必须保留全部义务与输出,不能只改被举例的一节而遗漏同类问题。","factKeys 声明唯一主载;项目身份/宏观事实不强制逐节登记,但你明确使用 eligibleAdditionalFactKeys 中的事实时,程序会同步全局落点。移动须从原节移除后在目标节声明。不得把未决/未知键当已选事实,quantityKeys 不得编造新的工程量身份。","不得增删一级章节,不得编造现有 id;拆分节的 id 由程序生成。已应用补丁不等于全部问题消除,核对当前候选逐条处理。只输出 JSON。"],output:{patches:[{sectionId:"section…",title:"修订后的名词短语",coverageItemIds:["coverage:…"],requiredOutputs:[{form:"org_chart",element:"项目管理组织机构图",semanticRole:"项目管理组织层级与汇报关系",obligationId:"output:…",baselineId:"baseline-org-chart"}]}]}})}(b,c,d,a,e,f);aj(a,"skeleton-repair-input",{system:g,prompt:h,candidate:b,issues:c});let i=await a.caller(g,h,{diagnostics:a.diagnostics,signal:a.signal,temperature:0,taskKind:"reasoning",callKind:"structure-planning",schema:ak});if(aj(a,"skeleton-repair",i),!i)return b;let j=ao(b,Array.isArray(i.patches)?i.patches:[],a.planningContext,d),k=af(i.operations);if(!k.length)return j;let l=ag({plan:j,operations:k,catalog:d,planningContext:a.planningContext,validate:b=>ar(b,{confirmed:a.confirmed,planningContext:a.planningContext,coverageItems:d,requiredCoverageItemIds:d.filter(a=>"method"!==a.kind).map(a=>a.id),requiredFactKeys:R(a.planningContext)},{allowTransientCoverageSplit:!0})});return e.push(...l.numberingChanges),aj(a,"repair-operations",{applied:l.applied,rejected:l.rejected,numberingChanges:l.numberingChanges,candidate:l.plan}),l.plan}function aq(a,b){let c=a.chapters.flatMap(a=>a.sections),d=a.factQuantities.map(a=>{let b=c.filter(b=>("fact"===a.kind?b.factKeys:b.quantityKeys).includes(a.key));if(1!==b.length)return a;let{notApplicableReason:d,...e}=a;return{...e,sectionId:b[0].sectionId}}),e=new Set(d.filter(a=>"fact"===a.kind).map(a=>a.key));for(let a of b.factsBaseline){if(!a.selected||e.has(a.key))continue;let b=c.filter(b=>b.factKeys.includes(a.key));1===b.length&&(d.push({kind:"fact",key:a.key,sectionId:b[0].sectionId}),e.add(a.key))}return{...a,factQuantities:d}}function ar(a,b,c){return(0,n.uc)((0,n.YG)({...a,state:a.state??"draft"}),b,c)}async function as(a){let b=a.sectionContracts??new d.G((0,s.Fu)(JSON.parse(JSON.stringify({project:a.project,planningContext:a.planningContext,confirmed:a.confirmed})))),c=b.subscribe(b=>aj(a,"section-contracts",{states:b}));try{let c=await at({...a,sectionContracts:b});return b.approveGlobal(c.plan,c.review),{...c,sectionContracts:b}}catch(a){throw b.cancel("全局结构规划未完成,撤销本轮起草许可"),a}finally{c()}}async function at(a){let b=[],c=Q({confirmed:a.confirmed,planningContext:a.planningContext}),d=c.filter(a=>"requirement"===a.kind||"obligation"===a.kind).map(a=>a.id),f=R(a.planningContext),g={diagnostics:a.diagnostics,signal:a.signal,temperature:0,taskKind:"reasoning",callKind:"structure-planning"},h="你是施工组织设计总编与结构规划者。只依据给定的招标确认、规划上下文与契约项目录规划结构;只输出 JSON。",i={confirmed:a.confirmed,planningContext:a.planningContext,coverageItems:c,requiredCoverageItemIds:d,requiredFactKeys:f,requiredQuantityKeys:[]},j=0,v=0,w=async()=>{let d,f=async()=>{j+=1;let b=await a.caller(h,function(a,b){let c=(0,o.compactPlanningContextProjection)(P(a.planningContext));return(0,t.dk)({planningContext:c,coverageCatalog:Y(b),requiredCoverageItemIds:b.filter(a=>"requirement"===a.kind||"obligation"===a.kind).map(a=>a.id),task:"规划施工组织设计的二级结构:章下的节、每节承接的契约项、每节的必出表/图与载体建议;章标题固定取招标确认原文",rules:["章数与顺序与 givenChapters 一致;章标题由程序原样写回,你不得另拟或改写。","节按工程对象、专业系统、施工阶段、工作界面、风险与管理要素划分;每章至少一节。","节标题必须是名词短语、同级平行:不得出现“招标文件、招标范围、响应、评标、评审、评分、理解、包括但不限于、不得、必须、要求、说明、投标报价、措施费”等评审/说明语言;不得以动词开头或以标点结尾。","**契约项覆盖**:coverageCatalog 中 kind=requirement 与 kind=obligation 的每一项都必须恰好落在一个节的 coverageItemIds 中,不得遗漏、重复或编造 id;kind=method 是候选,可按项目需要采用。","**输出前自检**:逐项核对 requiredCoverageItemIds 是否都出现在某个节的 coverageItemIds 中,尤其是带括号的清单型招标要点;少一项整份计划会被退回。","**原子项**:同一内容义务的多个原子项可以分布到多个节,但每个原子项仍要各自出现在某个节的 coverageItemIds 中。","**同文覆盖项同节**:去除空白与标点后文本相同的 requirement/obligation 契约项属于同一内容组,必须整组落在同一节;移动/移除时整组处理,不得拆到两节。","**必出输出**:只对经独立适用性审查确认的 planningContext.outputObligations 安排 requiredOutputs:obligationId 逐字使用给定 id;form 使用义务的形式;tender-required 输出必须带 quote;domain-baseline 输出填 baselineId。技术正文与技术附表均可为本技术标必交位置,逐项保留 delivery。来源位于合同/商务/附录不决定技术内容是否适用;contractObligations 中的技术约束须响应,但不自动要求提交原表。其他原表、建议载体与未决项留在处置账,自选图表须写 reason,不能冒充其他原表的履行。","**内容组(contentGroup)**:每个节必须声明一个 contentGroup(如项目管理组织、临时设施、质量资料、人材机配置、进度计划、总平面布置);同一内容组全篇只能由一个节主载,引用节只能写“见表X/图X/第X节”,不得再复述。","**载体语义(carrierSemantic)**:每个输出必须声明内容形态:组织机构→organization(org_chart);横道/进度条→gantt(chart);网络计划/关键线路→network(diagram);流程/工序关系→flow(diagram);综合排布/总平面/空间布置→spatial(figure);碰撞协调/专业交叉→collision(figure);对照/清单/参数矩阵→comparison(table);确实不属于以上形态才用 other。声明必须与实际 form 匹配,否则整份计划被退回。","**同一内容组只登记一次**:element 是输出的工程名称,semanticRole 是它承载的内容组(如组织结构、进度计划、总平面布置);同一 element+semanticRole 只能出现一次,不得用 table 与 figure 同时主载同一内容组。","**同一内容组的多个输出义务合并为一个输出**:例如招标格式组织机构图与领域基线组织机构图,只登记一个输出,同一个对象同时填 obligationId(招标义务)与 baselineId(基线义务);组织机构图全篇只能一张,统一用 org_chart 形式,不得同时登记 diagram 与 org_chart。","**项目管理机构图与人员组成表同节**:两者是同一内容组的两面,必须放在同一节(项目管理机构/组织节),不得拆到不同章。","**自选输出**:除输出义务外,可以按项目规模与表达需要增加表/图;没有 obligationId 的输出必须写 reason(为什么必须用该载体、唯一承载哪组内容),不要为凑数造图表。","**载体建议**:同字段事实、对照、清单、参数矩阵→table;因果、措施、论证、责任→paragraph;流程、关系、空间、层次→figure。只对确有明确形态的内容组给建议,不规定作者写法。","只使用 planningContext 中存在的对象、标准、数字与来源;不得编造工程对象、标准编号、控制值或阶段/工日/机械。","不得把“编制依据/规范目录/图纸理解/清单对账”作为独立节,除非招标明确要求单独成节。","输出 JSON;不要解释。"],givenChapters:a.confirmed.chapters.map((a,b)=>({chapterIndex:b,title:a.title,points:a.points.map((a,b)=>({pointIndex:b,title:a.title,requirement:a.requirement??null}))})),output:{chapters:[{chapterIndex:0,sections:[{title:"工程名词短语",contentGroup:"本节主载的内容组",coverageItemIds:["coverage:…"],requiredOutputs:[{form:"table",carrierSemantic:"comparison",element:"表名",semanticRole:"内容组",obligationId:"output:…",quote:"招标原字"}],suggestedCarriers:[{contentSet:"内容组",carrier:"table",reason:"同字段对照"}]}]}]}})}(a,c),{...g,schema:U});if(aj(a,`skeleton-${j}`,b),!b)throw Error("DOCUMENT_STRUCTURE_PLAN_FAILED:骨架规划未返回可校验结果");return ab(function(a){let b=a.raw??{},c=Array.isArray(b.chapters)?b.chapters:[],d=a.confirmed.chapters.map((b,d)=>{let e=(0,m.constructionChapterId)(a.documentTitle,b.title),f=c.find(a=>Number(a.chapterIndex)===d)??c[d]??{},g=(Array.isArray(f.sections)?f.sections:[]).map((b,c)=>{let f=`${e}:section:${c+1}`;return{sectionId:f,referenceId:`r${d+1}s${c+1}`,title:String(b.title??"").trim(),contentGroup:String(b.contentGroup??"").trim(),objectScope:"",rationale:"",responsibilityPositions:[],coverageItemIds:Array.isArray(b.coverageItemIds)?[...new Set(b.coverageItemIds.map(a=>String(a).trim()).filter(Boolean))]:[],requiredOutputs:aa({sectionId:f,raw:b.requiredOutputs,planningContext:a.planningContext}),suggestedCarriers:(Array.isArray(b.suggestedCarriers)?b.suggestedCarriers:[]).map(a=>a??{}).map(a=>({contentSet:String(a.contentSet??"").trim(),carrier:function(a){let b=String(a??"").toLowerCase();return"table"===b?"table":"paragraph"===b?"paragraph":"figure"}(a.carrier),reason:String(a.reason??"").trim()})),factKeys:[],quantityKeys:[]}});return{chapterId:e,title:b.title,sections:g}});return{version:"document-structure-plan-v1",...function(a){let b=(0,s.Fu)(a.planningContext);return{planId:"structure-plan:"+(0,s.Fu)([b,a.confirmed.chapters.map(a=>a.title)]).slice(0,24),projectIdentityHash:(0,s.Fu)({projectIdentity:a.planningContext.projectIdentity??null,projectSnapshotId:a.planningContext.provenance.projectSnapshotId}),planningContextHash:b}}({confirmed:a.confirmed,planningContext:a.planningContext}),chapters:d,coverageMatrix:[],outputRegistry:[],factQuantities:[],state:"draft",planHash:""}}({raw:b,confirmed:a.confirmed,planningContext:a.planningContext,documentTitle:a.documentTitle}))},l={requireSectionContract:!1,requireCoverage:!1,requireRequiredCoverageItems:!0,requireFacts:!1,requireFormat:!1,requireProfessionalCandidates:!1},n=await f(),v=ar(n,i,l),w=new Set([(0,s.Fu)(n)]);for(let d=0;d<4&&v.length;d+=1){if((v=ar(n=await ap(a,n,v,c,b),i,l)).length&&w.has((0,s.Fu)(n)))throw aj(a,"skeleton-stalled",{plan:n,issues:v}),Error(`DOCUMENT_STRUCTURE_PLAN_INVALID:骨架补丁没有产生有效业务变化,停止重复生成;${ah(v).slice(0,8).join(";")}`);w.add((0,s.Fu)(n))}if(v.length)throw Error(`DOCUMENT_STRUCTURE_PLAN_INVALID:${ah(v).slice(0,8).join(";")}`);let x=Math.max(1,Math.floor(k.N6?.outlineChapters??4));if(await (0,r.W)(n.chapters.map((a,b)=>({chapter:a,chapterIndex:b})),x,async({chapter:b,chapterIndex:d})=>{let f=a=>({...b,sections:b.sections.map((b,c)=>({...b,objectScope:String(a[c].objectScope??"").trim(),rationale:String(a[c].rationale??"").trim(),responsibilityPositions:[...new Set((Array.isArray(a[c].responsibilityPositions)?a[c].responsibilityPositions:[]).map(a=>String(a).trim()).filter(Boolean))]}))}),j=new Set(b.sections.map(a=>a.sectionId)),k=a=>{let c=a?.sections;return Array.isArray(c)&&c.length===b.sections.length?c.some(a=>!a||"object"!=typeof a||Array.isArray(a))?[`章节「${b.title}」对象范围的每个小节必须是对象`]:ah(ar({...n,chapters:n.chapters.map((a,b)=>b===d?f(c):a)},i,{...l,requireSectionContract:!0}).filter(a=>a.target?.sectionId&&j.has(a.target.sectionId))):[`章节「${b.title}」对象范围的小节数不符(期望 ${b.sections.length},得到 ${Array.isArray(c)?c.length:"非数组"})`]},m=async()=>{var f,i,j;let l=await a.caller(h,(f=b.title,i=b.sections.map(a=>({sectionId:a.sectionId,title:a.title,coverageItemIds:a.coverageItemIds})),j=n,(0,t.dk)({stableReferences:(0,e.GP)(j),planningContext:function(a,b,c,d){let e=a.planningContext,f=new Map(d.map(a=>[a.id,a])),g=[...new Set(c.flatMap(a=>a.coverageItemIds))],h=new Set(g.map(a=>f.get(a)?.obligationId).filter(a=>!!a));return{version:e.version,documentType:e.documentType,...e.projectIdentity?{projectIdentity:e.projectIdentity}:{},tenderProfile:{projectType:e.tenderProfile.projectType},factsBaseline:e.factsBaseline.filter(a=>a.selected).map(a=>{let b=a.selected.value,c=(0,u.D)(b,320);return{key:a.key,...a.fieldName?{fieldName:a.fieldName}:{},...a.objectName?{objectName:a.objectName}:{},value:c.text,valueChars:[...b].length,...c.truncated?{valueTruncated:!0,valueRemainingChars:c.remainingChars}:{}}}),factsReading:"factsBaseline 只带选中事实的边界截断值(valueTruncated=true 时完整值未送达,valueRemainingChars 是剩余字符数);写对象范围不需要复述全部事实,需要完整值/出处时按 key 用 query_project_facts 读取。",contractObligations:e.contractObligations.filter(a=>h.has(a.id)&&(0,p.Ln)(a)).map(a=>({id:a.id,text:a.text,...a.items?.length?{items:a.items}:{},...a.quote?{quote:a.quote.slice(0,300)}:{}})),coverageItems:g.map(a=>({id:a,text:f.get(a)?.text??"",...f.get(a)?.obligationId?{obligationId:f.get(a).obligationId}:{}})),professionalCandidates:e.professionalCandidates.filter(a=>(0,q.ri)(a.chapterTitle)===(0,q.ri)(b))}}(a,f,i,c),task:"为已定稿的小节补写对象范围、独立成节理由与责任岗位;不得增删小节、改标题或改契约项",chapterTitle:f,sections:i,rules:[e.bx,"按给定 sections 的顺序输出同样数量的对象,不输出标题,不增删、不调序。","objectScope 写清本节覆盖的本项目对象/系统/工作面及其边界与接口,使用行业通行术语;不得用“加强管理、确保质量”等空泛表述。","rationale 说明本节按什么专业逻辑独立(对象、专业系统、施工阶段、风险、资源/管理要素),为什么不能并入相邻节。","responsibilityPositions 只写岗位称谓,不写姓名;按项目实际组织给出能对本节内容负责的岗位,不套固定清单。","对象/标准/工法/依据只引用 planningContext 中可核的内容;不得编造标准编号、控制值或工程对象。","只输出 JSON。"],output:{sections:[{objectScope:"对象/专业/工作面",rationale:"独立成节理由",responsibilityPositions:["岗位称谓"]}]}})),{...g,schema:V,validateProtocol:k});aj(a,`enrich-${d+1}`,l);let m=k(l);if(m.length)throw Error(`DOCUMENT_STRUCTURE_PLAN_INVALID:章节「${b.title}」对象范围补写失败;${m.join(";")}`);let o=l?.sections;if(!o||o.length!==b.sections.length)throw Error(`DOCUMENT_STRUCTURE_PLAN_INVALID:章节「${b.title}」对象范围补写失败`);return o},o=await m();n.chapters[d]=f(o)}),(v=ar(n=ab(n),i,{...l,requireSectionContract:!0})).length)throw Error(`DOCUMENT_STRUCTURE_PLAN_INVALID:对象范围阶段未通过;${ah(v).slice(0,8).join(";")}`);let y=async b=>{var e,f;let i=b?.length?(e=n,f=d,(0,t.dk)({task:"局部修正事实落点、候选处置与输出例外;覆盖矩阵由程序从节内认领投影",previousResponse:f,deterministicIssues:b,currentStructure:e.chapters.map(a=>({title:a.title,sections:a.sections.map(a=>({sectionId:a.sectionId,title:a.title,objectScope:a.objectScope}))})),requiredFactKeys:R(a.planningContext),professionalCandidates:a.planningContext.professionalCandidates,requiredOutputs:a.planningContext.outputObligations.filter(a=>"domain-baseline"===a.kind||(0,p.oY)(a)).map(a=>({id:a.id,form:a.form,element:a.element})),rules:["只纠正 deterministicIssues;保留 previousResponse 中其他有效决定,不改章节或主载归属。","事实键与小节只用给定身份,每个事实给 sectionId 或有据的 notApplicableReason;不得凭空增加工程量。","专业候选逐项写明确处置及本项目理由;不得编造来源、对象或数字。","输出例外仅针对给定必出输出,须给 reason 与 alternative,独立审查接受之前不作放行。","返回完整纠正后的同一 JSON 结构。"]})):function(a,b,c){let d=b.chapters.map((a,b)=>({chapterIndex:b,title:a.title,sections:a.sections.map(a=>({sectionId:a.sectionId,title:a.title,coverageItemIds:a.coverageItemIds,requiredOutputs:a.requiredOutputs.map(a=>({outputId:a.outputId,form:a.form,element:a.element,semanticRole:a.semanticRole,obligationId:a.obligationId??null}))}))}));return(0,t.dk)({planningContext:(0,o.compactPlanningContextProjection)(P(a.planningContext),{facts:"keys",obligations:"texts"}),coverageCatalog:Y(c),currentStructure:d,requiredFactKeys:R(a.planningContext),task:"核对项目事实/工程量落点、专业候选处置与输出例外;覆盖矩阵由程序从节内认领投影,不需要你填写;不要改章节结构",rules:["factQuantities:requiredFactKeys 中每个事实必须有 sectionId 落点,或 notApplicableReason(说明为什么本稿不需要该事实);project 身份类事实由文档身份承载,不在此列。工程量键如规划上下文没有可核来源,可留空,不编造。","candidateDispositions:**必须为 professionalCandidates 中每一个主题登记一条**(disposition=used 或 not-applicable,并写具体理由);不得遗漏、不得静默丢弃。","outputExceptions:仅当某项必出输出(含领域基线图)确实无法产出且等效载体能承担同一表达时使用;必须写 reason 与 alternative,最终由独立审查接受或拒绝。领域基线图是专业建议,不是招标原文;不要仅因基线存在就虚构项目不存在的场地/对象。","只使用 currentStructure 里的 sectionId/outputId;不得编造身份。","只输出 JSON。"],output:{factQuantities:[{key:"factKey",kind:"fact",sectionId:"section…"}],candidateDispositions:[{chapterTitle:"章标题",candidateTitle:"候选主题",disposition:"not-applicable",reason:"本项目不存在该对象"}],outputExceptions:[{obligationId:"output:…",reason:"确实无法产出",alternative:"等效载体说明"}]}})}(a,n,c),j=await a.caller(h,i,{...g,schema:W});if(aj(a,"coverage",j),!j)throw Error("DOCUMENT_STRUCTURE_PLAN_FAILED:覆盖规划未返回结果");d=j;let k=Array.isArray(j.factQuantities)?j.factQuantities:[],l=new Map;for(let a of k){if(!a.sectionId)continue;let b=l.get(a.sectionId)??{factKeys:[],quantityKeys:[]};("fact"===a.kind?b.factKeys:b.quantityKeys).push(a.key),l.set(a.sectionId,b)}n={...n,factQuantities:k,chapters:n.chapters.map(a=>({...a,sections:a.sections.map(a=>({...a,factKeys:[...new Set(l.get(a.sectionId)?.factKeys??[])],quantityKeys:[...new Set(l.get(a.sectionId)?.quantityKeys??[])]}))})),...Array.isArray(j.candidateDispositions)?{candidateDispositions:j.candidateDispositions}:{},...Array.isArray(j.outputExceptions)?{outputExceptions:j.outputExceptions}:{},formatRules:function(a,b){let c=a.tenderProfile;return{...void 0!==c.bidType?{bidType:c.bidType}:b?{bidType:b.bidType}:{},...void 0!==c.identityMarksForbidden?{identityMarksForbidden:c.identityMarksForbidden}:b?{identityMarksForbidden:b.identityMarksForbidden}:{},...void 0!==c.bodyTablePolicy?{bodyTablePolicy:c.bodyTablePolicy}:b?{bodyTablePolicy:b.bodyTablePolicy}:{},...void 0!==c.bodyFigurePolicy?{bodyFigurePolicy:c.bodyFigurePolicy}:b?{bodyFigurePolicy:b.bodyFigurePolicy}:{},...void 0!==c.bodyDiagramPolicy?{bodyDiagramPolicy:c.bodyDiagramPolicy}:b?{bodyDiagramPolicy:b.bodyDiagramPolicy}:{},...c.pageSemantics?.length?{pageSemantics:c.pageSemantics.map(a=>({...a}))}:{}}}(a.planningContext,a.bidComposition)}};await y(),v=ar(n=al(n,c),i);let z=new Set([(0,s.Fu)(n)]);for(let a=0;a<3&&v.length;a+=1){let a=(0,s.Fu)(n);if(await y(ah(v)),!(v=ar(n=al(n,c),i)).length)break;let b=(0,s.Fu)(n);if(b===a||z.has(b))break;z.add(b)}for(let b=0;b<2&&v.length;b+=1){let b=function(a,b){let c=[];for(let d of b.professionalCandidates??[])for(let b of[...d.sectionCandidates.map(a=>a.title),...d.contentRequirements.map(a=>a.title)]){if(a.chapters.some(a=>a.sections.some(a=>(0,q.qh)(a.title,b)||(0,q.ri)(`${a.objectScope}${a.rationale}`).includes((0,q.ri)(b)))))continue;let e=(a.candidateDispositions??[]).find(a=>(0,q.ri)(a.candidateTitle)===(0,q.ri)(b)&&(!a.chapterTitle||(0,q.ri)(a.chapterTitle)===(0,q.ri)(d.chapterTitle)));e&&"not-applicable"===e.disposition&&e.reason?.trim()||c.push({chapterTitle:d.chapterTitle,candidateTitle:b})}return c}(n,a.planningContext);if(!b.length)break;let c=(0,s.Fu)(n);if((v=ar(n=await an(a,n,b),i)).length&&c===(0,s.Fu)(n))break}if(v.length)throw Error(`DOCUMENT_STRUCTURE_PLAN_INVALID:${ah(v).slice(0,8).join(";")}`);return n},x=(0,n.w1)(await w(),i);v+=1;let y=x.planHash;a.sectionContracts.update(x);let z=await a.caller("你是独立的施工组织设计结构规划审查者,不是本计划的作者。只审结构完整性、专业逻辑、粒度、载体与重复;只输出 JSON。",$(a,x,c,1,b),{...g,schema:X});if(aj(a,`review-${v}`,z),!z)throw new l.f({scope:"document",candidate:x,findings:[],reason:"独立规划审查未取得;结构可校验不等于专业批准"});let B=Z((Array.isArray(z.findings)?z.findings:[]).map((a,b)=>{let c=a??{};return{id:`plan-review:${v}:${b+1}`,planId:x.planId,planHash:y,category:String(c.category??"structure"),severity:L(c.severity),target:{..."string"==typeof c.targetSectionId&&c.targetSectionId?{sectionId:c.targetSectionId}:{},..."string"==typeof c.targetOutputId&&c.targetOutputId?{outputId:c.targetOutputId}:{},..."string"==typeof c.targetObligationId&&c.targetObligationId?{obligationId:c.targetObligationId}:{}},detail:String(c.detail??""),fix:String(c.fix??"")}}),x,c,a.planningContext);a.sectionContracts.review(x,z,v);let E=[...B],F=(0,n.w1)(x,i),G=(d,e,f,g)=>{let h=d,j=new Map((Array.isArray(e.exceptionDecisions)?e.exceptionDecisions:[]).map(a=>a??{}).map(a=>[String(a.obligationId??""),a]));j.size&&(h={...h,outputExceptions:(h.outputExceptions??[]).map(a=>{let b=j.get(a.obligationId);return b?{...a,reviewAcceptance:{accepted:!0===b.accepted,reviewer:D,basis:String(b.basis??"").trim()||"独立审查未给出可核理由"}}:a})});let k=new Set,l=[],m=[];for(let b of Array.isArray(e.patches)?e.patches:[]){let c=String(b.sectionId??"").trim();if(!c)continue;let d=!1,e=h.chapters.map(e=>({...e,sections:e.sections.map(e=>e.sectionId!==c?e:(d=!0,{...e,..."string"==typeof b.title&&b.title.trim()?{title:b.title.trim()}:{},..."string"==typeof b.contentGroup&&b.contentGroup.trim()?{contentGroup:b.contentGroup.trim()}:{},..."string"==typeof b.objectScope&&b.objectScope.trim()?{objectScope:b.objectScope.trim()}:{},..."string"==typeof b.rationale&&b.rationale.trim()?{rationale:b.rationale.trim()}:{},...Array.isArray(b.responsibilityPositions)?{responsibilityPositions:[...new Set(b.responsibilityPositions.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.factKeys)?{factKeys:[...new Set(b.factKeys.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.quantityKeys)?{quantityKeys:[...new Set(b.quantityKeys.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.coverageItemIds)?{coverageItemIds:[...new Set(b.coverageItemIds.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.requiredOutputs)?{requiredOutputs:aa({sectionId:e.sectionId,raw:b.requiredOutputs,planningContext:a.planningContext})}:{}}))}));if(!d)continue;let j=aq(ab({...h,chapters:e}),a.planningContext),o=ar({...j,state:"validated"},i,{allowTransientCoverageSplit:!0});if(o.length)l.push({sectionId:c,issues:o}),m.push({id:`plan-review:${g}:patch-invalid:${c}`,planId:h.planId,planHash:f,category:"patch",severity:"advisory",target:{sectionId:c},detail:`审查补丁被确定性校验拒绝(本节未改):${ah(o).slice(0,4).join(";")}`,fix:"按确定性错误修正补丁;不得删除必出契约项、必出输出或让同一契约项跨节重复"});else{let a=ar({...j,state:"validated"},i);h=a.length&&a.every(a=>"coverage-same-text-split"===a.code)?(0,n.YG)({...j,state:"validated"}):(0,n.w1)({...j,state:"validated"},i),k.add(c)}}let o=ag({plan:h,operations:af(e.operations),planningContext:a.planningContext,catalog:c,validate:a=>ar({...a,state:"validated"},i,{allowTransientCoverageSplit:!0})});for(let c of(h=o.plan,b.push(...o.numberingChanges),o.numberingChanges.length&&aj(a,"review-numbering-changes",o.numberingChanges),o.rejected))m.push({id:`plan-review:${g}:operation-rejected:${m.length+1}`,planId:h.planId,planHash:f,category:"operation",severity:"advisory",target:c.sectionId?{sectionId:c.sectionId}:{},detail:`结构操作「${c.op}」被确定性校验拒绝(计划保持操作前状态):${c.reason}`,fix:"按确定性错误修正操作,或改为 finding 并在正文阶段处理;不得删除必出契约项/输出"});for(let a of o.applied)a.originalSectionId&&k.add(a.originalSectionId);return h=(0,n.w1)({...h,state:"validated"},i),a.sectionContracts.update(h),{plan:h,addressedSectionIds:k,patchRejections:l,operationResult:o,findings:m}},H=G(F,z,y,String(v)),I=H.addressedSectionIds,J=H.patchRejections,K=H.operationResult;F=H.plan,E.push(...H.findings);let M=1,N=[],O=E.filter(a=>["patch","operation"].includes(a.category)),S=z,T=(0,l.C)(S,E)||F.planHash!==y,_=y,ac=x,ad=0,ae=0,ak=0,am=()=>ad>=3?"作者修订累计已达3次":`作者修复调用已达6次上限`;for(;T&&M<=5;){let d;N.push(...E);let f=[];if((0,l.C)(S,E)&&(E.length||M>1&&(Array.isArray(S.patches)&&S.patches.length||Array.isArray(S.operations)&&S.operations.length))){let g=E.map(a=>({code:"professional-review",message:`${a.detail};建议:${a.fix}`,target:{}})),h={reviewedPlanHash:_,verdict:S.verdict,reviewedSections:(0,e.GP)(ac),findings:E,patches:S.patches??[],operations:S.operations??[]};if(ad>=3||ae>=6){if(ak>=2){let b={scope:"document",candidate:F,findings:E,reason:`${am()}:终审修法已应用并复核 ${ak} 次,独立审查仍有未决意见`};throw aj(a,"pending",b),new l.f(b)}let b=G(F,S,_,`${M+1}-rescue`),c=ar({...b.plan,state:"validated"},i);if(b.plan.planHash===F.planHash||c.length){let d={scope:"document",candidate:b.plan,findings:E,reason:c.length?`${am()},终审结构操作应用后仍未通过确定性校验:${ah(c).slice(0,4).join(";")}`:`${am()}:独立审查仍有未决意见`};throw aj(a,"pending",d),new l.f(d)}F=b.plan,O.push(...b.findings),I=new Set([...I,...b.addressedSectionIds]),K={...b.operationResult,applied:[...K.applied,...b.operationResult.applied],rejected:[...K.rejected,...b.operationResult.rejected],numberingChanges:[...K.numberingChanges,...b.operationResult.numberingChanges],originalIdMap:ai(K.originalIdMap,b.operationResult.originalIdMap)},ak+=1,d={applied:b.operationResult.applied,rejected:b.operationResult.rejected},aj(a,"review-rescue",{round:M+1,applied:b.operationResult.applied,rejected:b.operationResult.rejected,candidate:F})}else{ad+=1;let d=F,e=[],j=new Set;for(let k=0;;k+=1){if(ae>=6){let b={scope:"document",candidate:d,findings:E,reason:`${am()}:${ah(e).join(";")||"独立审查仍有未决意见"}`};throw aj(a,"pending",b),new l.f(b)}if(ae+=1,e=ar({...d=await ap(a,d,[...g,...e],c,b,h),state:"validated"},i),f.push({attempt:ae,candidateHash:(0,n.YG)(d).planHash,issues:e}),aj(a,"author-repair-validation",{attempt:ae,candidate:d,issues:e}),!e.length)break;let m=(0,n.YG)(d).planHash;if(j.has(m)){let b={scope:"document",candidate:d,findings:E,reason:`作者修订未改变无效候选:${ah(e).join(";")}`};throw aj(a,"pending",b),new l.f(b)}if(j.add(m),k>=2){let b={scope:"document",candidate:d,findings:E,reason:`作者修订连续 ${k+1} 次未满足确定性校验:${ah(e).join(";")}`};throw aj(a,"pending",b),new l.f(b)}}F=(0,n.w1)({...d,state:"validated"},i)}}let h=F.planHash,j={reviewedPlanHash:_,currentPlanHash:h,reviewedSections:(0,e.GP)(ac),response:S,revision:function(a,b){let c=a=>a.chapters.flatMap((a,b)=>{let{sections:c,...d}=a;return c.map((c,e)=>({referenceId:c.referenceId??null,section:A(c),chapter:A(d),address:{sectionId:c.sectionId,chapterId:a.chapterId,title:c.title,chapterNumber:b+1,sectionNumber:e+1}}))}),d=c(a),e=c(b),f=(a,b)=>a.filter(a=>a.referenceId===b).length,g=a=>({...a.address,sectionHash:(0,s.Fu)(a.section),chapterHash:(0,s.Fu)(a.chapter)}),h=new Set,i=[];for(let a of d){let b=a.referenceId&&1===f(d,a.referenceId)&&1>=f(e,a.referenceId),c=b?e.find(b=>b.referenceId===a.referenceId):void 0;if(!c){i.push({referenceId:a.referenceId,status:b?"removed":"unmatched",before:g(a),changedFields:[]});continue}h.add(c);let j=[...C(a.section,c.section),...C(a.chapter,c.chapter).map(a=>`chapter.${a}`)];(a.address.chapterNumber!==c.address.chapterNumber||a.address.sectionNumber!==c.address.sectionNumber)&&j.push("position"),i.push({referenceId:a.referenceId,status:j.length?"changed":"unchanged",before:g(a),after:g(c),changedFields:j})}for(let a of e)if(!h.has(a)){let b=a.referenceId&&1===f(e,a.referenceId)&&0===f(d,a.referenceId);i.push({referenceId:a.referenceId,status:b?"added":"unmatched",after:g(a),changedFields:[]})}let j=a=>{let{chapters:b,planHash:c,...d}=A(a);return{...d,chapterOrder:b.map(a=>a.chapterId)}};return{version:"structure-review-revision-v1",reviewedPlanHash:a.planHash,currentPlanHash:b.planHash,reviewedInputHash:(0,s.Fu)(A(a)),currentInputHash:(0,s.Fu)(A(b)),sections:i,globalChangedFields:C(j(a),j(b)),authorizesReuse:!1,scope:"逐值比较实际版本。unchanged仅指节本身、章元数据及位置未变,不证明依赖未变、独立或已获专业批准;仍须审查当前完整候选及跨节关系。"}}(ac,F),validation:{reviewerPatchRejections:1===M?J:[],reviewerOperationRejections:1===M?K.rejected:[],authorAttempts:f,...d?{reviewerEditsApplied:d}:{}}};aj(a,"review-revision",{round:M+1,...j}),a.sectionContracts.update(F);let k=await a.caller("你是独立结构规划审查者。核对当前候选的专业缺陷是否实际消除,不能因程序校验通过而自动批准。只输出 JSON。",$(a,F,c,M+1,b,j),{...g,schema:X});M+=1,aj(a,`review-${M}`,{candidate:F,response:k});let m=Z((Array.isArray(k?.findings)?k.findings:[]).map((a,b)=>({id:`plan-review:${M}:${b+1}`,planId:F.planId,planHash:F.planHash,category:String(a.category??"structure"),severity:L(a.severity),target:{..."string"==typeof a.targetSectionId?{sectionId:a.targetSectionId}:{},..."string"==typeof a.targetOutputId?{outputId:a.targetOutputId}:{},..."string"==typeof a.targetObligationId?{obligationId:a.targetObligationId}:{}},detail:String(a.detail??""),fix:String(a.fix??"")})),F,c,a.planningContext);if(a.sectionContracts.review(F,k,M),T=!k||(0,l.C)(k,m),E.splice(0,E.length,...m),T&&(!k||h===_||M>5)){let b={scope:"document",candidate:F,findings:m,reason:m.map(a=>a.detail).join(";")||"修订后独立规划审查未取得明确通过"};throw aj(a,"pending",b),new l.f(b)}S=k??{},_=h,ac=F}E.push(...O);let ao=(0,n.fw)((0,n.fw)(F,"reviewed"),"frozen"),as=new Set(ao.chapters.flatMap(a=>a.sections.map(a=>a.sectionId))),at=new Set(ao.outputRegistry.map(a=>a.outputId)),au=E.map(a=>{if("operation"===a.category)return{...a,planId:ao.planId,disposition:"operation-rejected",dispositionNote:"结构操作被确定性校验拒绝,计划保持操作前状态;记录为顾问意见"};if(a.target.sectionId&&I.has(a.target.sectionId))return{...a,planId:ao.planId,disposition:"structural-change-applied",dispositionNote:"审查针对该节给出补丁/结构操作,已由程序应用并通过硬判据"};let b=a.target.sectionId?K.originalIdMap.get(a.target.sectionId)??a.target.sectionId:void 0;return b&&!as.has(b)||a.target.outputId&&!at.has(a.target.outputId)?{...a,planId:ao.planId,disposition:"superseded",dispositionNote:"结构修改后目标节/输出已不存在,视为已处理"}:{...a,planId:ao.planId,disposition:"advisory-recorded",dispositionNote:"程序硬判据通过;按顾问意见记录,不作为冻结阻断"}});return{plan:ao,coverage:{chapters:ao.chapters.length,sections:ao.chapters.reduce((a,b)=>a+b.sections.length,0),outputs:ao.outputRegistry.length,requiredCoverageItems:d.length,requiredFacts:f.length},review:{planId:ao.planId,planHash:ao.planHash,reviewer:D,rounds:M,findings:au,...N.length?{priorFindings:N}:{},verdict:"pass",advisoriesOnly:!1,incremental:{applied:K.applied,rejected:K.rejected}}}}function au(a){return{version:a.version,planId:a.planId,planHash:a.planHash,state:a.state,chapters:a.chapters.map(a=>({chapterId:a.chapterId,title:a.title,sections:a.sections.map(a=>({sectionId:a.sectionId,title:a.title,contentGroup:a.contentGroup,objectScope:a.objectScope,coverageItemIds:a.coverageItemIds,outputs:a.requiredOutputs.map(a=>({outputId:a.outputId,form:a.form,carrierSemantic:a.carrierSemantic??null,element:a.element,semanticRole:a.semanticRole,dedupeKey:a.dedupeKey})),factKeys:a.factKeys,quantityKeys:a.quantityKeys}))})),coverageMatrix:a.coverageMatrix,factQuantities:a.factQuantities,formatRules:a.formatRules??null}}function av(a,b){let c=new Map(Q({confirmed:b.confirmed,planningContext:b.planningContext}).map(a=>[a.id,a])),d=new Map(a.chapters.flatMap((a,b)=>a.sections.map((a,c)=>[a.sectionId,{chapterIndex:b,sectionIndex:c}]))),f=new Map;for(let c of a.outputRegistry){let a=d.get(c.sectionId);if(a&&"agent-decision"!==c.source.kind)for(let d of[...new Set([c.obligationId,c.baselineId].filter(a=>!!a))]){let c=b.planningContext.outputObligations.find(a=>a.id===d);if(!c||"domain-baseline"!==c.kind&&!(0,p.oY)(c))continue;let e=f.get(d)??{sectionRefs:[]};e.sectionRefs.some(b=>b.chapterIndex===a.chapterIndex&&b.sectionIndex===a.sectionIndex)||e.sectionRefs.push(a),f.set(d,e)}}return{version:"construction-document-outline-v1",chapters:a.chapters.map(b=>({title:b.title,sections:b.sections.map(b=>{let d=b.coverageItemIds.map(a=>c.get(a)).filter(Boolean);return{title:b.title,pointIndexes:[...new Set(d.flatMap(a=>a.pointIndexes??[]))].sort((a,b)=>a-b),objectScope:(0,e.eq)(a,b.objectScope),rationale:(0,e.eq)(a,b.rationale),responsibilityPositions:b.responsibilityPositions,obligationIds:[...new Set(d.flatMap(a=>a.obligationId?[a.obligationId]:[]))],obligationItems:d.filter(a=>"obligation"===a.kind).map(a=>a.text),coverageItems:d.map(a=>({id:a.id,text:a.text,kind:a.kind,enumerated:a.enumerated??!1})),requiredOutputs:b.requiredOutputs.map(a=>({outputId:a.outputId,form:a.form,element:a.element,...a.source.quote?{quote:a.source.quote}:{},basis:"domain-baseline"===a.source.kind?"domain-baseline":"agent-decision"===a.source.kind?"agent-decision":"tender",...a.baselineId?{baselineId:a.baselineId}:{},...a.obligationId?{obligationId:a.obligationId}:{},...a.source.reason?{reason:a.source.reason}:{}}))}})})),...a.coverageMatrix.length?{contentObligationCoverage:a.coverageMatrix.map(a=>({obligationId:a.obligationId,landing:a.landing,sectionRefs:a.sectionIds.map(a=>d.get(a)).filter(a=>!!a),reason:a.reason??""}))}:{},...b.planningContext.outputObligations.length?{outputPlan:b.planningContext.outputObligations.filter(a=>"domain-baseline"===a.kind||(0,p.oY)(a)).map(b=>{let c=f.get(b.id),d=(a.outputExceptions??[]).find(a=>a.obligationId===b.id);return c?{obligationId:b.id,status:"planned",sectionRefs:c.sectionRefs,reason:"结构计划已安排"}:{obligationId:b.id,status:"not-applicable",reason:d?.reason??"结构计划未安排",...d?.alternative?{alternative:d.alternative}:{},...d?.reviewAcceptance?{reviewAcceptance:d.reviewAcceptance}:{}}})}:{},...a.factQuantities.length?{factCoverage:a.factQuantities.filter(a=>"fact"===a.kind).map(a=>a.sectionId?{key:a.key,landing:"section",sectionRefs:[d.get(a.sectionId)].filter(Boolean)}:{key:a.key,landing:"not-applicable",reason:a.notApplicableReason??""})}:{},selfReview:{issues:[],note:"结构计划已通过独立规划审查",status:"no-change"}}}},45002:(a,b,c)=>{c.d(b,{G:()=>h});var d=c(745);let e=a=>a&&"object"==typeof a&&!Array.isArray(a)?a:{},f=a=>Array.isArray(a)?a:[],g=a=>f(a).filter(a=>"string"==typeof a);class h{constructor(a){if(this.sourceIdentity=a,this.states=new Map,this.leases=new Map,this.listeners=new Set,!a)throw Error("SECTION_CONTRACT_SOURCE_REQUIRED")}currentPlan(){return this.plan&&structuredClone(this.plan)}snapshot(){return structuredClone([...this.states.values()])}approvedGlobalPlanHash(){return this.globalPlanHash}subscribe(a){return this.listeners.add(a),a(this.snapshot()),()=>{this.listeners.delete(a)}}publish(){for(let a of this.listeners)a(this.snapshot())}sections(a){let b=new Map,c=new Set;return a.chapters.forEach((a,d)=>a.sections.forEach((e,f)=>{if(!e.referenceId||b.has(e.referenceId)||c.has(e.sectionId))throw Error("SECTION_CONTRACT_AMBIGUOUS_IDENTITY");b.set(e.referenceId,{section:e,chapter:{chapterId:a.chapterId,title:a.title},position:[d,f]}),c.add(e.sectionId)})),b}references(a){return[...new Set([...JSON.stringify(a).matchAll(/\[\[section:([^\]]+)\]\]/gu)].map(a=>a[1]))]}digest(a,b){let c=this.sections(a);if(b.some(a=>!c.has(a)))throw Error("SECTION_CONTRACT_DEPENDENCY_MISSING");return(0,d.Fu)({version:"section-contract-v1",sourceIdentity:this.sourceIdentity,projectIdentityHash:a.projectIdentityHash,planningContextHash:a.planningContextHash,interfaces:[...c].map(([a,b])=>({referenceId:a,sectionId:b.section.sectionId,chapter:b.chapter,position:b.position,title:b.section.title,contentGroup:b.section.contentGroup,coverageItemIds:b.section.coverageItemIds,requiredOutputs:b.section.requiredOutputs})),formatRules:a.formatRules??null,outputExceptions:a.outputExceptions??[],candidateDispositions:a.candidateDispositions??[],factQuantities:a.factQuantities,coverageMatrix:a.coverageMatrix,outputRegistry:a.outputRegistry,sections:[...new Set(b)].sort().map(a=>({referenceId:a,...c.get(a)}))})}revoke(a,b){let c=this.states.get(a);for(let d of(c&&this.states.set(a,{...c,status:"revoked",reason:b}),this.leases.get(a)??[]))d.abort(Error(`SECTION_CONTRACT_STALE:${b}`))}update(a){let b=this.sections(a);for(let[c,d]of(this.globalPlanHash=void 0,this.states)){let e=b.get(c);!e||e.section.sectionId!==d.sectionId||d.dependencyReferenceIds.some(a=>!b.has(a))||this.digest(a,[c,...d.dependencyReferenceIds])!==d.contractHash?this.revoke(c,"结构、来源身份或依赖合同已变化"):"global-approved"===d.status&&this.states.set(c,{...d,status:"draft-approved",reason:"局部合同未变;当前全局版本尚待审查"})}for(let[c,d]of b)this.states.has(c)||this.states.set(c,{referenceId:c,sectionId:d.section.sectionId,status:"pending",contractHash:this.digest(a,[c]),dependencyReferenceIds:[],reason:"未取得本节及依赖范围的明确专业批准"});this.plan=structuredClone(a),this.publish()}review(a,b,c){if(this.plan?.planHash!==a.planHash||(0,d.Fu)(this.plan)!==(0,d.Fu)(a))throw Error("SECTION_CONTRACT_REVIEW_VERSION_MISMATCH");let h=this.sections(a),i=new Map([...h].map(([a,b])=>[b.section.sectionId,a])),j=e(b),k=f(j.sectionReviews).map(e),l=new Map,m=k.length===h.size;for(let a of k){let b=String(a.sectionId??""),c=i.get(b);!c||l.has(c)?m=!1:l.set(c,a)}let n=new Set,o=!1;for(let a of f(j.findings).map(e)){let b=[...h].filter(([,b])=>b.section.sectionId===a.targetSectionId||b.section.requiredOutputs.some(b=>b.outputId===a.targetOutputId||!!a.targetObligationId&&b.obligationId===a.targetObligationId)||!!a.targetObligationId&&b.section.coverageItemIds.includes(String(a.targetObligationId)));b.length||(o=!0),b.forEach(([a])=>n.add(a))}let p=new Map;for(let[a,b]of h){let c=l.get(a)??{},d=g(c.dependencySectionIds),e=[...new Set([...d.map(a=>i.get(a)??`missing:${a}`),...this.references(b.section)])];p.set(a,e),(!m||o||!["pass","revise","reject","accept"].includes(String(j.verdict))||"reject"===j.verdict||"pass"!==c.verdict||!0!==c.dependencyScopeComplete||!String(c.reason??"").trim()||!Array.isArray(c.dependencySectionIds)||d.length!==c.dependencySectionIds.length||e.some(a=>!h.has(a)))&&n.add(a)}let q=a=>{let b=new Set,c=a=>{b.has(a)||(b.add(a),(p.get(a)??[]).forEach(c))};return c(a),[...b].sort()};for(let[e,f]of h){let g=q(e);if(g.some(a=>n.has(a)||!h.has(a))){this.revoke(e,"本节或依赖节未获明确批准、仍有意见,或逐节覆盖回执不完整");continue}let i=this.digest(a,g),j=this.states.get(e),k=g.every(a=>l.get(a)?.sourceOnlyDraft===!0);j?.sourceOnlyDraft&&!k&&this.revoke(e,"来源独立起草条件已撤销"),j?.contractHash!==i&&this.revoke(e,"专业确认的依赖范围已变化"),this.states.set(e,{referenceId:e,sectionId:f.section.sectionId,status:"draft-approved",contractHash:i,dependencyReferenceIds:g.filter(a=>a!==e),sourceOnlyDraft:k,approval:{kind:"section-review",reviewedPlanHash:a.planHash,responseHash:(0,d.Fu)(b),round:c,reason:String(l.get(e).reason)},reason:"本节及依赖已明确批准;仅允许起草,交付仍待当前全局审查"})}this.publish()}approveGlobal(a,b){if("frozen"!==a.state||b.planHash!==a.planHash||"pass"!==b.verdict)throw Error("SECTION_CONTRACT_GLOBAL_APPROVAL_REQUIRED");this.update(a);let c=this.sections(a),e=[...c.keys()].sort();for(let[f,g]of c){let c=this.states.get(f),h="draft-approved"===c.status?[f,...c.dependencyReferenceIds]:e,i=this.digest(a,h);c.contractHash!==i&&this.revoke(f,"全局批准绑定的依赖合同已变化"),this.states.set(f,{referenceId:f,sectionId:g.section.sectionId,contractHash:i,status:"global-approved",dependencyReferenceIds:h.filter(a=>a!==f),sourceOnlyDraft:"draft-approved"===c.status&&!0===c.sourceOnlyDraft,approval:{kind:"global-review",reviewedPlanHash:a.planHash,responseHash:(0,d.Fu)(b),round:b.rounds,reason:"当前完整结构经原全局专业门禁通过"},reason:"允许起草;锁节与交付另须正文及来源审查"})}this.globalPlanHash=a.planHash,this.publish()}assertSourceDraft(a,b){let c=[...this.states.values()].find(a=>a.sectionId===b&&["draft-approved","global-approved"].includes(a.status));if(!c?.sourceOnlyDraft||this.digest(a,[c.referenceId,...c.dependencyReferenceIds])!==c.contractHash)throw Error("SECTION_SOURCE_DRAFT_NOT_APPROVED")}assertGlobal(a){if(this.globalPlanHash!==a)throw Error("SECTION_CONTRACT_GLOBAL_APPROVAL_REQUIRED")}acquire(a){let b=[...this.states.values()].find(b=>b.sectionId===a&&["draft-approved","global-approved"].includes(b.status));if(!b)throw Error(`SECTION_CONTRACT_NOT_APPROVED:${a}`);let c=new AbortController,{referenceId:d,contractHash:e}=b,f=this.leases.get(d)??new Set;return f.add(c),this.leases.set(d,f),{referenceId:d,sectionId:a,contractHash:e,signal:c.signal,assertCurrent:()=>{let b=this.states.get(d);if(c.signal.aborted||!b||b.sectionId!==a||b.contractHash!==e||!["draft-approved","global-approved"].includes(b.status))throw Error(`SECTION_CONTRACT_STALE:${a}`)},release:()=>{f.delete(c),f.size||this.leases.delete(d)}}}cancel(a){for(let b of(this.globalPlanHash=void 0,this.states.keys()))this.revoke(b,a);this.publish()}}},62369:(a,b,c)=>{c.d(b,{W:()=>d});async function d(a,b,c){let d;if(!Number.isSafeInteger(b)||b<1)throw Error("CONSTRUCTION_PARALLEL_LIMIT_INVALID");let e=Array(a.length),f=0,g=!1,h=Array.from({length:Math.min(b,a.length)},async()=>{for(;;){if(g)return;let b=f;if(f+=1,b>=a.length)return;try{e[b]=await c(a[b],b)}catch(a){g=!0,d=a;return}}});if(await Promise.all(h),g)throw d;return e}}};
@@ -0,0 +1,2 @@
1
+ "use strict";exports.id=3750,exports.ids=[3750],exports.modules={191:(a,b,c)=>{c.d(b,{mG:()=>q,wF:()=>n});var d=c(51342),e=c(29021),f=c.n(e),g=c(33873),h=c.n(g),i=c(55511),j=c.n(i);let k=h().join((0,d.J0)(),"logs"),l=h().join(k,"errors.jsonl"),m="errors-";function n(a){let{message:b,stack:c}=function(a){if(a instanceof Error)return{message:a.message,stack:a.stack};if("string"==typeof a)return{message:a};try{return{message:JSON.stringify(a)}}catch{return{message:String(a)}}}(a.error),d={id:`err_${Date.now()}_${j().randomBytes(4).toString("hex")}`,level:a.level||"error",source:a.source,functionName:a.functionName,message:b,stack:c,request:a.req?{method:a.req.method,url:a.req.url,query:a.req.query}:void 0,meta:a.meta,createdAt:Date.now()};try{f().mkdirSync(k,{recursive:!0}),function(){try{if(f().statSync(l).size<=2097152)return;f().renameSync(l,h().join(k,`${m}${Date.now()}.jsonl`)),function(){for(let a of(function(){try{return f().readdirSync(k).filter(a=>a.startsWith(m)&&a.endsWith(".jsonl")).sort().reverse()}catch{return[]}})().slice(20))try{f().rmSync(h().join(k,a),{force:!0})}catch{}}()}catch{}}(),f().appendFileSync(l,`${JSON.stringify(d)}
2
+ `)}catch(a){console.error("[errorLogService] failed to write error log",a)}return d}let o=!1;function p(a,b,c,d=20){let e=0,f=0;return g=>{try{b(g);let h=Date.now();h-e>6e4&&(e=h,f=0),f<d&&(f+=1,c(a,g))}catch{}}}function q(){o||(o=!0,process.on("uncaughtException",p("uncaughtException",a=>n({source:"process",functionName:"uncaughtException",error:a}),(a,b)=>console.error(`[process] ${a}`,b))),process.on("unhandledRejection",p("unhandledRejection",a=>n({source:"process",functionName:"unhandledRejection",error:a}),(a,b)=>console.error(`[process] ${a}`,b))))}},16006:(a,b,c)=>{c.d(b,{j:()=>g});var d=c(191),e=c(47774),f=c(56175);function g(a,b){return async function(c,g){let h=async()=>{try{await b(c,g)}catch(i){if(i instanceof f.Es){g.headersSent||g.status(503).json({error:i.message,code:i.code});return}if(i instanceof e.Bc){g.headersSent||g.status(503).json({error:i.message});return}let h=(0,d.wF)({source:a,functionName:b.name||"anonymous",error:i,req:c});console.error(`[${a}]`,h.id,i),g.headersSent||g.status(500).json({error:i instanceof Error?i.message:"Internal server error",requestId:h.id})}};if("api/system/reset"===a||a.startsWith("api/health"))return void await h();try{await (0,e.i0)(h)}catch(a){if(a instanceof e.Bc&&!g.headersSent)g.status(503).json({error:a.message});else throw a}}}(0,d.mG)()},48203:(a,b,c)=>{c.d(b,{DA:()=>q,OX:()=>t,P2:()=>r,ls:()=>s});var d=c(48161),e=c(79646),f=c(73024),g=c.n(f),h=c(33873),i=c.n(h),j=c(37095),k=c(47774),l=c(51342);let m=globalThis,n=m.__customizeActiveIndexJobs??=new Map;function o(a){let b=a.then(()=>void 0,()=>void 0);m.__customizeIndexServiceTail=b,b.then(()=>{m.__customizeIndexServiceTail===b&&(m.__customizeIndexServiceTail=void 0)})}!m.__customizeIndexServiceTail&&n.size&&o(Promise.allSettled([...n.values()].map(a=>a.promise)));let p=[/^Image too small to scale!!/u,/^Line cannot be recognized!!$/u,/CleanUnusedInitializersAndNodeArgs/u,/should be removed from the model/u];function q(a){!function(a){(0,k.jF)();let b=n.get(a.projectRoot),c=a.uploadOperationId??a.id,f=a.uploadOperationId?"upload":"reindex",h=a.uploadOperationId?`上传 ${a.uploadTitle??"文件"}`:a.relativePath?`重新解析 ${a.relativePath}`:"知识库后台索引",q=()=>((0,k.jF)(),(0,j.Qf)(a.projectRoot,{id:c,type:f,title:h,stage:"uploading",status:"processing",percent:5,message:"索引任务已进入后台队列",filePath:a.relativePath,fileName:a.relativePath?.split("/").pop()}),(function(a,b,c,f){let h=function(){let a=new Set,b=b=>{for(let c=i().resolve(b);a.add(i().join(c,"scripts/kb-index-worker.cjs")),i().dirname(c)!==c;c=i().dirname(c));};for(let c of(b(process.cwd()),b(__dirname),a))if(g().existsSync(c))return c}();if(!h){let d="知识库后台索引脚本缺失,请检查服务安装包中的 scripts/kb-index-worker.cjs";return(0,j.Qf)(a.projectRoot,{id:b,type:c,title:f,stage:"error",status:"error",percent:100,message:d,error:d}),Promise.resolve({success:!1,error:d})}return new Promise(g=>{let k,m,n,o,q;try{k=(0,e.fork)(h,[JSON.stringify({...a,operationId:b})],{cwd:process.cwd(),stdio:["ignore","pipe","pipe","ipc"],env:{...process.env,CUSTOMIZE_KB_OCR_CACHE_DIR:process.env.CUSTOMIZE_KB_OCR_CACHE_DIR?.trim()?process.env.CUSTOMIZE_KB_OCR_CACHE_DIR:i().join((0,l.J0)(),"cache","ocr-pages")},execArgv:[...process.execArgv.filter(a=>!a.startsWith("--max-old-space-size")),`--max-old-space-size=${function(){let a=Number(process.env.KB_INDEX_MAX_OLD_SPACE_MB);return Number.isFinite(a)&&a>0?Math.floor(a):Math.min(12288,Math.max(4096,Math.floor(Math.floor(d.totalmem()/1024/1024)/4)))}()}`]})}catch(e){let d=`知识库后台进程启动失败:${e instanceof Error?e.message:String(e)}`;(0,j.Qf)(a.projectRoot,{id:b,type:c,title:f,stage:"error",status:"error",percent:100,message:d,error:d}),g({success:!1,error:d});return}let r=!1,s=!1,t=!1,u=!1,v=new Map,w=null,x=()=>{for(let[d,e]of(w&&(clearTimeout(w),w=null),v))if(0!==e.length){if(s||m){console.log(`[kb-worker] ${d}${e.join("\n").slice(-1e3)}`);continue}(0,j.Qf)(a.projectRoot,{id:b,type:c,title:f,stage:"parsing",status:"processing",percent:5,message:`${d}${e.join("\n").slice(-1e3)}`})}v.clear()},y=(a,b)=>{if(r)return;let c=String(a).split(/\r?\n/u).map(a=>a.trim()).filter(a=>a&&!p.some(b=>b.test(a))).join("\n");if(!c)return;let d=v.get(b)??[];d.push(c),v.set(b,d),w||(w=setTimeout(x,500),w.unref?.())};k.stdout?.on("data",a=>y(a,"后台索引输出:")),k.stderr?.on("data",a=>y(a,"后台索引错误输出:")),k.on("error",d=>{if(r||o)return;x();let e=`知识库后台进程启动失败:${d instanceof Error?d.message:String(d)}`;o=e,m=e,s=!1,(0,j.Qf)(a.projectRoot,{id:b,type:c,title:f,stage:"error",status:"error",percent:100,message:e,error:e}),Number.isSafeInteger(k.pid)&&k.pid&&!(k.pid<0)?(()=>{if(!u&&!t){u=!0;try{k.kill("SIGTERM")}catch{}t||(q=setTimeout(()=>{if(q=void 0,!t)try{k.kill("SIGKILL")}catch{}},1500),q.unref?.())}})():(r=!0,g({success:!1,error:e}))}),k.on("message",b=>{if(b?.type==="log"&&b?.patch){let c="done"===b.patch.stage&&100===b.patch.percent&&("success"===b.patch.status||"warning"===b.patch.status),d="error"===b.patch.stage&&"error"===b.patch.status&&100===b.patch.percent;(c||d)&&x(),c&&!m&&(s=!0),d&&(m=b.patch.error||b.patch.message||"知识库索引失败",s=!1),c&&"warning"===b.patch.status&&(n=b.patch.error||b.patch.message),(!m||d)&&(!s||c)&&(0,j.Qf)(a.projectRoot,b.patch)}}),k.on("exit",(d,e)=>{if(t=!0,q&&clearTimeout(q),q=void 0,r)return;if(r=!0,x(),m)return void g({success:!1,error:m});if(s)return void g({success:!0,warning:n});let h=0===d?"知识库后台进程退出,未收到索引完成回执":`知识库后台进程退出,退出码 ${d??e??"unknown"}`;console.error("[kb-worker] exit",{operationId:b,code:d,signal:e}),(0,j.Qf)(a.projectRoot,{id:b,type:c,title:f,stage:"error",status:"error",percent:100,message:h,error:h}),g({success:!1,error:h})})})})(a,c,f,h).then(b=>(b.success&&(b.warning?(0,j.Qf)(a.projectRoot,{id:c,type:f,title:h,stage:"done",status:"warning",percent:100,message:a.relativePath?"重新解析完成(向量索引降级)":"知识库后台索引完成(向量索引降级)",filePath:a.relativePath,fileName:a.relativePath?.split("/").pop(),error:b.warning}):(0,j.Qf)(a.projectRoot,{id:c,type:f,title:h,stage:"done",status:"success",percent:100,message:a.relativePath?"重新解析完成":"知识库后台索引完成",filePath:a.relativePath,fileName:a.relativePath?.split("/").pop()})),b))),r=m.__customizeIndexServiceTail,s=()=>b?b.promise.then(q,q):q(),t=r?r.then(s,s):s();o(t);let u={operationId:c,promise:t,startedAt:b?.startedAt??Date.now()};n.set(a.projectRoot,u),t.then(()=>{n.get(a.projectRoot)===u&&n.delete(a.projectRoot)},()=>{n.get(a.projectRoot)===u&&n.delete(a.projectRoot)})}(a)}function r(a){return n.has(a)}function s(a){let b=n.get(a);return b?{operationId:b.operationId,startedAt:b.startedAt}:void 0}function t(){return[...n.values()].map(a=>a.promise)}}};
@@ -0,0 +1 @@
1
+ "use strict";exports.id=407,exports.ids=[407],exports.modules={16258:(a,b,c)=>{c.d(b,{T:()=>d});function d(a,b){let c=`/generation/${encodeURIComponent(a)}`;return b?`${c}?projectRoot=${encodeURIComponent(b)}`:c}},26570:(a,b,c)=>{c.d(b,{Ce:()=>n,tl:()=>q});var d=c(82015),e=c(28017),f=c(72542),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.ep;function n(a){return"completed"!==a&&"completed_with_issues"!==a&&"warning"!==a&&"failed"!==a&&"aborted"!==a&&"paused"!==a}function o(a){let b=new Map((a.agentWorkflow?.nodes??[]).map(a=>[a.id,a]));for(let c of a.preparationProgress??[])b.set(c.id,c);return[...b.values()]}function p(a){let b=o(a);if(0===b.length)return null;let c=[...b].sort((a,b)=>(a.seq??0)-(b.seq??0)).map(a=>{let b=a.id.startsWith("preparation:"),c=(b?a.title:void 0)||m[a.type]||a.title||a.type||"节点",e="failed"===a.status||"blocked"===a.status?"error":"paused"===a.status||"repairing"===a.status?"warning":"running"===a.status?"process":"pending"===a.status?"wait":"finish",f=a.metrics||{},h=Object.entries(f).slice(0,4).map(([a,b])=>`${a}:${String(b)}`).join(" ");return{key:a.id,title:c,subtitle:a.progress?`${a.progress.label||"进度"}:${a.progress.current}/${a.progress.total}`:"",description:b&&"string"==typeof f.note?f.note:h,status:e,icon:function(a){let b=a.split(".")[0]||a;return"responsibility"===b?(0,d.createElement)(g.ApartmentOutlined):"purpose"===b?(0,d.createElement)(g.BulbOutlined):"decision"===b?(0,d.createElement)(g.SafetyCertificateOutlined):"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 q(a={}){let{projectRoot:b,documents:c,onNotice:f,t:m,onGenerated:r}=a,[s,t]=(0,d.useState)([]),[u,v]=(0,d.useState)(null),[w,x]=(0,d.useState)(!1),[y,z]=(0,d.useState)(null),[A,B]=(0,d.useState)(""),[C,D]=(0,d.useState)(null),[E,F]=(0,d.useState)(a.documentId??null),[G,H]=(0,d.useState)(null),[I,J]=(0,d.useState)(c??[]),[K,L]=(0,d.useState)(0),[M,N]=(0,d.useState)(null),[O,P]=(0,d.useState)([]),[Q,R]=(0,d.useState)(null),[S,T]=(0,d.useState)(null),U=(0,d.useRef)(""),V=(0,d.useRef)(new Map),W=(0,d.useRef)(new Map),X=(0,d.useRef)(b),Y=(0,d.useRef)(E),Z=(0,d.useRef)(s),$=(0,d.useRef)(u),_=(0,d.useRef)(w),aa=(0,d.useRef)(m),ab=(0,d.useRef)(f),ac=(0,d.useRef)(r),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{J((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=V.current.get(c.key);"process"!==c.status||a?("finish"===c.status||"error"===c.status||"warning"===c.status)&&a&&!a.endedAt&&V.current.set(c.key,{...a,endedAt:b}):V.current.set(c.key,{startedAt:b})}},[]),ak=(0,d.useCallback)(a=>{let b=JSON.stringify([a.id,a.updatedAt,a.status,a.error,o(a).map(a=>[a.id,a.title,a.status,a.progress,a.metrics,a.startedAt,a.completedAt])]);if(U.current===b)return;U.current=b,D(a);let{steps:c,activeKey:d}=function(a,b={}){return p(a)??{steps:[],activeKey:null}}(a);aj(c);let e=n(a.status);t(c),v(d),x(e),ai(c,d,e),H("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&&z(a.draft),B(a.editedMarkdown||a.markdown),P(a.exportReports||[]),T({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&&F(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.projectRoot||X.current;if(j?.aborted&&(j=null),j?.loading)return void ae({kind:"info",text:"已有生成任务正在运行,请先查看、暂停或中止当前任务"});if(!e)return void ae({kind:"error",text:"未识别当前项目,请先选择或打开项目后再生成文件"});x(!0);let f=Z.current,i=f.length>0?f:[{key:"starting",title:"正在创建生成任务",description:"系统正在创建后台生成任务,请稍候。",status:"process",icon:(0,d.createElement)(g.LoadingOutlined),subSteps:[{key:"start",title:"准备生成任务",status:"process"}]}],m=$.current||"starting";t(i),v(m);let n=(0,h.OX)({...c?{title:c}:{},requirement:b,projectRoot:e});j={id:Date.now(),specId:a.specId,loading:!0,flowSteps:i,activeFlowKey:m,promise:n,listeners:new Set};try{let b=await n;b.documentId&&(localStorage.setItem(ad,b.documentId),F(b.documentId),j?.promise===n&&(j.documentId=b.documentId)),await ah();let c=b.documentId?await am(b.documentId,j?.promise===n?j:void 0):void 0;if(c?.status==="paused"){j?.promise===n&&(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)&&F(b.documentId||c.id),z(d),B(c?.editedMarkdown||c?.markdown||d.markdown),j?.promise===n&&(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}=p(e)??{steps:[],activeKey:null};t(f),ai(f,"done",!1),v("done"),j?.promise===n&&(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;H(a),b||t(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===n&&(j.loading=!1,j.error=a,l(),j=null),await ah(),c?ae({kind:"warning",text:"生成任务已被中止(可能来自其他窗口):可在列表中点击「继续生成」恢复"}):b||ae({kind:"error",text:a})}finally{x(!1),k=!1,j?.promise===n&&(j.loading=!1,l())}},[ae,ah,ai,ad,af,am]),ao=(0,d.useCallback)(a=>{let b=W.current.get(a);b&&(clearInterval(b),W.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);W.current.set(a,c)},[ak,ah,ao,ad]),aq=(0,d.useCallback)(a=>{let b=V.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}(运行中)`},[K]),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),W.current.values()))clearInterval(d);W.current.clear(),x(!1),t([]),v(null),H("用户中止"),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,x(!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&&(F(null),D(null),z(null),B(""))}},[ae,ah,ao,ad]),at=(0,d.useCallback)(async a=>{try{F(a.id),x(!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&&(z(c.draft),B(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{x(!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 (0,h.UQ)(a,b||X.current||void 0);return ae({kind:"info",text:"已请求继续:沿用原检查点与原范围"}),await ah(),c},[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),R("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:"该记录暂无可导出的正文内容"});N(b);let e={exportPurpose:"review",documentId:a.id,title:a.title,format:b,projectRoot:a.projectRoot||X.current||void 0};try{await ay(e,`${a.title}.${b}`,az[b])}catch(a){ae({kind:"error",text:a instanceof Error?a.message:"导出失败"})}finally{N(null)}},[ay,az,ae]),aB=(0,d.useCallback)(async a=>{if(!y)return;N(a);let b="markdown"===a?"md":a,c={exportPurpose:"review",documentId:Y.current||void 0,title:y.title,markdown:A,format:a,exportGate:y.exportGate,useClientMarkdown:!0,projectRoot:y.projectRoot||X.current||void 0};try{if(await ay(c,`${y.title}.${b}`,az[a]),Y.current)try{let{document:a}=await (0,h.v7)(Y.current,!1,y.projectRoot||X.current||void 0);a&&P(a.exportReports||[])}catch{}}catch(a){ae({kind:"error",text:a instanceof Error?a.message:"导出失败"})}finally{N(null)}},[A,ay,y,az,ae]),aC=E?I.find(a=>a.id===E)??C:C,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,w);return{flowSteps:s,activeFlowKey:u,loading:w,draft:y,content:A,workflowRecord:C,documentId:E,documents:I,error:G,phase:aD,flowTick:K,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:z,setContent:B,setExportReports:P,export:{exporting:M,nonDeliverableExport:Q,exportRecord:aA,exportEditor:aB,downloadExport:ay,exportReports:O},deliveryReadings:S}}},28017:(a,b,c)=>{c.d(b,{a:()=>e});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")}},50214:(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)}})},72542:(a,b,c)=>{c.d(b,{Uu:()=>e,ep:()=>d});let d={responsibility:"职责",purpose:"目的",round:"轮次",decision:"已生效决定"},e={success:"完成",running:"进行中",failed:"失败",skipped:"跳过",partial:"部分生效",pending:"等待中"}},77259:(a,b,c)=>{c.d(b,{D:()=>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,suggestions:n=[],requireGenerationSetup:o=!1,projectOptions:p=[],selectedProject:q=null,onSelectProject:r,hasDeliverable:s=!1,onPreviewDeliverable:t,paused:u,resumable:v,onPause:w,onResume:x,onContinue:y}=a,z=(0,e.useRef)(null),[A,B]=(0,e.useState)(!1),C=(o&&!q?["项目"]:[]).length>0,D=!o,E=b.trim().length>0,F=l?m||"当前不可发起生成":C?"先用「项目」选择项目资料":j?"有任务正在运行:发送将加入生成队列":D&&!E?"输入指令后发送":o?"开始生成":"发送",G=l||C||D&&!E,H=j?E?{tooltip:F,icon:(0,d.jsx)(g.ArrowUpOutlined,{}),onClick:i,disabled:G,loading:k}:{tooltip:"暂停",icon:(0,d.jsx)(g.PauseCircleOutlined,{}),onClick:w,disabled:l,loading:!1}:u?{tooltip:"继续",icon:(0,d.jsx)(g.PlayCircleOutlined,{}),onClick:x,disabled:l,loading:!1}:v&&!E?{tooltip:"继续生成",icon:(0,d.jsx)(g.PlayCircleOutlined,{}),onClick:y,disabled:l,loading:!1}:{tooltip:F,icon:(0,d.jsx)(g.ArrowUpOutlined,{}),onClick:i,disabled:G,loading:k};return(0,d.jsx)("div",{className:"composer",children:(0,d.jsxs)("div",{className:"composerBox",children:[n.length>0&&(0,d.jsx)("div",{className:"composerSuggestions",children:n.map(a=>(0,d.jsx)(f.$n,{size:"small",type:"text",className:"composerSuggestion",onClick:a.onClick,children:a.label},a.key))}),(0,d.jsx)(f.pd.TextArea,{className:"composerInput",ref:z,value:b,onChange:a=>c(a.target.value),onPressEnter:a=>{!a.shiftKey&&(b.trim()||!D)&&(a.preventDefault(),l||C||k||i())},autoSize:{minRows:2,maxRows:8},placeholder:o?C?"先选择项目资料,再描述生成要求…":"描述生成要求(可留空,直接生成)…":"继续补充要求…",disabled:l,variant:"borderless"}),(0,d.jsxs)("div",{className:"composerToolbar",children:[(0,d.jsx)("div",{className:"composerToolGroup",children:o?(0,d.jsx)(f.AM,{trigger:"click",placement:"topLeft",open:A,onOpenChange:B,content:(0,d.jsxs)("div",{style:{width:360},children:[(0,d.jsx)(h,{strong:!0,style:{fontSize:13},children:"项目资料"}),(0,d.jsx)(f.l6,{style:{width:"100%",marginTop:4},value:q?.value,showSearch:!0,optionFilterProp:"label",placeholder:0===p.length?"本项目知识库里还没有资料:先到知识库页上传并入库":"选择项目(= 知识库里这个项目的资料)",options:p,onChange:a=>{r?.(a),B(!1)}})]}),children:(0,d.jsx)(f.$n,{size:"small",type:"text",className:"composerToolButton",icon:(0,d.jsx)(g.PlusOutlined,{}),title:q?`项目:${q.label}`:"选择项目资料",children:q?"项目已选":"项目"})}):(0,d.jsx)(d.Fragment,{children:s&&(0,d.jsx)(f.m_,{title:"查看成稿",children:(0,d.jsx)(f.$n,{size:"small",type:"text",className:"composerToolButton",icon:(0,d.jsx)(g.FileTextOutlined,{}),onClick:t,children:"成稿"})})})}),(0,d.jsx)("div",{className:"composerToolGroup",children:(0,d.jsx)(f.m_,{title:H.tooltip,children:(0,d.jsx)("span",{className:`composerRunControl${j?" is-running":""}`,children:(0,d.jsx)(f.$n,{type:"primary",shape:"circle",className:"composerSend",icon:H.icon,loading:H.loading,disabled:H.disabled,onClick:H.onClick})})})})]})]})})}},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"){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),f=Math.floor(d/24);return f>30?new Date(a).toLocaleDateString(b):"en-US"===b?f>0?`${f}d ago`:d>0?`${d}h ago`:c>0?`${c}m ago`:"Just now":f>0?`${f} 天前`:d>0?`${d} 小时前`:c>0?`${c} 分钟前`:"刚刚"}c.d(b,{Jm:()=>h,fw:()=>e,mc:()=>i,z3:()=>d});let f={document:"文档",spreadsheet:"表格",image:"图片",cad:"图纸",code:"代码",data:"数据",web:"网页",diagram:"图表",archive:"压缩包",other:"其他"},g={document:"Document",spreadsheet:"Spreadsheet",image:"Image",cad:"CAD",code:"Code",data:"Data",web:"Web",diagram:"Diagram",archive:"Archive",other:"Other"};function h(a,b="zh-CN"){return("en-US"===b?g:f)[a]??a}let i={active:"common.statusIndexed",outdated:"common.statusOutdated",error:"common.statusAbnormal",deleted:"common.statusDeleted",disk:"common.statusNotIndexed"}}};