@customize-agent/server 4.60.35 → 4.60.37

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 (342) 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/3239.js +7 -0
  11. package/.next/server/chunks/3750.js +2 -0
  12. package/.next/server/chunks/407.js +1 -0
  13. package/.next/server/chunks/5037.js +46 -0
  14. package/.next/server/chunks/5304.js +2 -2
  15. package/.next/server/chunks/5599.js +1 -0
  16. package/.next/server/chunks/5763.js +159 -0
  17. package/.next/server/chunks/6138.js +5 -0
  18. package/.next/server/chunks/6355.js +1 -0
  19. package/.next/server/chunks/6822.js +1 -1
  20. package/.next/server/chunks/702.js +3 -0
  21. package/.next/server/chunks/7296.js +1 -0
  22. package/.next/server/chunks/8176.js +1 -0
  23. package/.next/server/chunks/8204.js +1 -1
  24. package/.next/server/chunks/8459.js +11 -0
  25. package/.next/server/chunks/8570.js +1 -0
  26. package/.next/server/chunks/9270.js +1 -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/32e126df53e20cd9bcca5e12141140949358a0d11d2383f7242277a4f8acbf1d/_buildManifest.js +1 -0
  188. package/.next/static/chunks/112-9eacc7c0686813d6.js +1 -0
  189. package/.next/static/chunks/127-5ee1899eef559281.js +1 -0
  190. package/.next/static/chunks/{1210-703ad87eaeee1e4e.js → 210-71eaf9de9aa92051.js} +1 -1
  191. package/.next/static/chunks/325-45106bb003a2c5ce.js +4 -0
  192. package/.next/static/chunks/326-a3915e61888b0dbf.js +1 -0
  193. package/.next/static/chunks/333-7642e65bff6b8465.js +1 -0
  194. package/.next/static/chunks/338-19ccbaec57a7bf9c.js +4 -0
  195. package/.next/static/chunks/350-87b9c900a356d9b9.js +1 -0
  196. package/.next/static/chunks/359-f87c659236e0e0fe.js +1 -0
  197. package/.next/static/chunks/{8399-a001bb2a0cb1640b.js → 399-aa8a45d80e989621.js} +1 -1
  198. package/.next/static/chunks/430-f288e16301b9aea5.js +1 -0
  199. package/.next/static/chunks/465-80fbb245d43232c8.js +6 -0
  200. package/.next/static/chunks/499-2233cadc6d4da647.js +10 -0
  201. package/.next/static/chunks/551-fd86e95935b0957f.js +16 -0
  202. package/.next/static/chunks/576-6699fed6c88502fe.js +1 -0
  203. package/.next/static/chunks/61-de1dd9c104680470.js +1 -0
  204. package/.next/static/chunks/665-0634aa49137defc4.js +1 -0
  205. package/.next/static/chunks/681-e31b13114497e058.js +1 -0
  206. package/.next/static/chunks/687-644a12a5b584e19f.js +1 -0
  207. package/.next/static/chunks/702-4d9cc8d4d7775ea9.js +1 -0
  208. package/.next/static/chunks/748-9e5bf4181d7482f3.js +1 -0
  209. package/.next/static/chunks/759-280cf4040fae83af.js +25 -0
  210. package/.next/static/chunks/855-cbf7cd1db33198f0.js +17 -0
  211. package/.next/static/chunks/862-13d1c84d0938b824.js +1 -0
  212. package/.next/static/chunks/937-ccd3ceb1b3739535.js +1 -0
  213. package/.next/static/chunks/{8964-e959915ecfae86b2.js → 964-82cc4701f08f7351.js} +1 -1
  214. package/.next/static/chunks/992-8032f477230baaaf.js +1 -0
  215. package/.next/static/chunks/framework-4b565b3ddc94cdac.js +1 -0
  216. package/.next/static/chunks/main-0c91f573696223ca.js +1 -0
  217. package/.next/static/chunks/pages/_app-a70de062f1be1c59.js +140 -0
  218. package/.next/static/chunks/pages/_error-282257fbdcc167b4.js +1 -0
  219. package/.next/static/chunks/pages/documents-2d99ae9287f9739b.js +1 -0
  220. package/.next/static/chunks/pages/generation/[id]-83db154d46fd7aeb.js +1 -0
  221. package/.next/static/chunks/pages/generation-043e325d635c96af.js +1 -0
  222. package/.next/static/chunks/pages/index-24d1f8f39ae0beb0.js +1 -0
  223. package/.next/static/chunks/pages/jobs-ff2f899a081b616e.js +1 -0
  224. package/.next/static/chunks/pages/knowledge/file-detail-9a9a89e4fa33c0d9.js +1 -0
  225. package/.next/static/chunks/pages/knowledge/files-b3ef5324e4b74c4a.js +1 -0
  226. package/.next/static/chunks/pages/knowledge/manage-d9eaebf3a8307953.js +1 -0
  227. package/.next/static/chunks/pages/knowledge/{source-preview-24936b9a746ed07f.js → source-preview-f000b4d63cd65a54.js} +1 -1
  228. package/.next/static/chunks/pages/knowledge-8fa842d21892e2c3.js +1 -0
  229. package/.next/static/chunks/pages/models-6d9b301009f82395.js +1 -0
  230. package/.next/static/chunks/pages/settings-08893ba8afa1a486.js +1 -0
  231. package/.next/static/chunks/pages/skills/[id]/edit-378249e662ebf31f.js +1 -0
  232. package/.next/static/chunks/pages/skills/[id]-0ca4cde22e4a518b.js +1 -0
  233. package/.next/static/chunks/pages/skills/new-c1eb16d98fad4e02.js +1 -0
  234. package/.next/static/chunks/pages/skills-9fb1fa2b669ad4e3.js +1 -0
  235. package/.next/static/chunks/{webpack-2da1769ff35eb1ed.js → webpack-6224d37324e372cb.js} +1 -1
  236. package/.next/static/css/1f6d2a1bf5e15e0f.css +1 -0
  237. package/.next/static/css/b420c193e0e99857.css +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 +14 -16
  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/package.json +0 -1
  249. package/.next/server/chunks/1001.js +0 -2
  250. package/.next/server/chunks/1243.js +0 -3
  251. package/.next/server/chunks/1928.js +0 -1
  252. package/.next/server/chunks/1936.js +0 -385
  253. package/.next/server/chunks/2328.js +0 -6
  254. package/.next/server/chunks/2434.js +0 -3
  255. package/.next/server/chunks/3806.js +0 -1
  256. package/.next/server/chunks/4974.js +0 -2
  257. package/.next/server/chunks/5746.js +0 -5
  258. package/.next/server/chunks/6321.js +0 -1
  259. package/.next/server/chunks/7848.js +0 -144
  260. package/.next/server/chunks/9666.js +0 -146
  261. package/.next/server/instrumentation.js +0 -1
  262. package/.next/server/instrumentation.js.nft.json +0 -1
  263. package/.next/server/pages/api/prompt.js +0 -2
  264. package/.next/server/pages/api/prompt.js.nft.json +0 -1
  265. package/.next/server/pages/api/system/logs.js +0 -2
  266. package/.next/server/pages/api/system/logs.js.nft.json +0 -1
  267. package/.next/server/pages/api/system/stats.js +0 -2
  268. package/.next/server/pages/api/system/stats.js.nft.json +0 -1
  269. package/.next/server/pages/canvas/[id].html +0 -1
  270. package/.next/server/pages/canvas/[id].js.nft.json +0 -1
  271. package/.next/server/pages/canvas.html +0 -1
  272. package/.next/server/pages/canvas.js.nft.json +0 -1
  273. package/.next/server/pages/guide.html +0 -1
  274. package/.next/server/pages/guide.js.nft.json +0 -1
  275. package/.next/server/pages/index.html +0 -1
  276. package/.next/server/pages/overview.html +0 -1
  277. package/.next/server/pages/overview.js.nft.json +0 -1
  278. package/.next/server/pages/prompt.html +0 -1
  279. package/.next/server/pages/prompt.js.nft.json +0 -1
  280. package/.next/server/pages/system/logs.html +0 -1
  281. package/.next/server/pages/system/logs.js.nft.json +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/.next/static/e598c2bda8274fb1bb8f7e00f0f36fd4deae91b11929c9f04f17e1ae36b34697/_buildManifest.js +0 -1
  339. package/scripts/half-built-scan.allow.json +0 -152
  340. package/scripts/half-built-scan.baseline.json +0 -190
  341. package/scripts/half-built-scan.mjs +0 -287
  342. /package/.next/static/{e598c2bda8274fb1bb8f7e00f0f36fd4deae91b11929c9f04f17e1ae36b34697 → 32e126df53e20cd9bcca5e12141140949358a0d11d2383f7242277a4f8acbf1d}/_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 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,g){let h=function(a,b){if(!b)return{plan:a};let c=new Map([...b.chapters.flatMap(a=>a.sections.map(b=>[b.sectionId,{chapterId:a.chapterId,section:b}]))]),d=[],e=[],f=a.chapters.map(a=>({...a,sections:a.sections.map(b=>{let f=c.get(b.sectionId);return f&&f.chapterId===a.chapterId&&(0,s.Fu)(f.section)===(0,s.Fu)(b)?(e.push(b.sectionId),{...b,objectScope:b.objectScope.slice(0,180),rationale:"",responsibilityPositions:[],suggestedCarriers:[],unchanged:!0}):(d.push(b.sectionId),b)})}));return{plan:{...a,chapters:f},delta:{changedSectionIds:d,unchangedSectionIds:e}}}(b,g);return(0,t.dk)({planningContext:(0,o.structurePlanningContextProjection)(P(a.planningContext)),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:h.plan,...h.delta?{reviewDelta:h.delta}:{},structureReferences:F(b,e),task:"独立审查施工组织设计的二级结构计划:只审结构完整性、专业逻辑、粒度、载体与重复;不改写正文,不替作者决定工法",rules:[...G,"你是独立规划审查者,不是本计划的作者。不得因为作者写了理由就接受;逐项核对象/专业/接口/风险/阶段是否有落点。","sectionReviews 对当前每一节恰好返回一条覆盖回执,不受 findings 的条数限制。未实际审完写 unreviewed;发现未决写 revise;明确审过本节及依赖范围且可起草才写 pass。dependencySectionIds 列出实际依赖的当前节,dependencyScopeComplete 仅在依赖范围已审完时为 true。无 finding 或文字未改都不代表 pass。逐节批准只允许起草,不能替代整稿独审、正文独审或锁节。","若提供 reviewDelta:unchanged 节只给紧凑索引,仍须逐节给 sectionReviews 回执;重点核对 changed 节与全局覆盖/重复,不得因详情省略把未变节判成未审。","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.structurePlanningContextProjection)(P(d.planningContext))}:{},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=[],d=Q({confirmed:a.confirmed,planningContext:a.planningContext}),f=d.filter(a=>"requirement"===a.kind||"obligation"===a.kind).map(a=>a.id),g=R(a.planningContext),h={diagnostics:a.diagnostics,signal:a.signal,temperature:0,taskKind:"reasoning",callKind:"structure-planning"},i="你是施工组织设计总编与结构规划者。只依据给定的招标确认、规划上下文与契约项目录规划结构;只输出 JSON。",j={confirmed:a.confirmed,planningContext:a.planningContext,coverageItems:d,requiredCoverageItemIds:f,requiredFactKeys:g,requiredQuantityKeys:[]},v=0,w=0,x=async()=>{let b,f=async()=>{v+=1;let b=await a.caller(i,function(a,b){let c=(0,o.structurePlanningContextProjection)(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,d),{...h,schema:U});if(aj(a,`skeleton-${v}`,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}))},g={requireSectionContract:!1,requireCoverage:!1,requireRequiredCoverageItems:!0,requireFacts:!1,requireFormat:!1,requireProfessionalCandidates:!1},l=await f(),w=ar(l,j,g),x=new Set([(0,s.Fu)(l)]);for(let b=0;b<4&&w.length;b+=1){if((w=ar(l=await ap(a,l,w,d,c),j,g)).length&&x.has((0,s.Fu)(l)))throw aj(a,"skeleton-stalled",{plan:l,issues:w}),Error(`DOCUMENT_STRUCTURE_PLAN_INVALID:骨架补丁没有产生有效业务变化,停止重复生成;${ah(w).slice(0,8).join(";")}`);x.add((0,s.Fu)(l))}if(w.length)throw Error(`DOCUMENT_STRUCTURE_PLAN_INVALID:${ah(w).slice(0,8).join(";")}`);let y=Math.max(1,Math.floor(k.N6?.outlineChapters??4));if(await (0,r.W)(l.chapters.map((a,b)=>({chapter:a,chapterIndex:b})),y,async({chapter:b,chapterIndex:c})=>{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))]}))}),k=new Set(b.sections.map(a=>a.sectionId)),m=a=>{let d=a?.sections;return Array.isArray(d)&&d.length===b.sections.length?d.some(a=>!a||"object"!=typeof a||Array.isArray(a))?[`章节「${b.title}」对象范围的每个小节必须是对象`]:ah(ar({...l,chapters:l.chapters.map((a,b)=>b===c?f(d):a)},j,{...g,requireSectionContract:!0}).filter(a=>a.target?.sectionId&&k.has(a.target.sectionId))):[`章节「${b.title}」对象范围的小节数不符(期望 ${b.sections.length},得到 ${Array.isArray(d)?d.length:"非数组"})`]},n=async()=>{var f,g,j;let k=await a.caller(i,(f=b.title,g=b.sections.map(a=>({sectionId:a.sectionId,title:a.title,coverageItemIds:a.coverageItemIds})),j=l,(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,g,d),task:"为已定稿的小节补写对象范围、独立成节理由与责任岗位;不得增删小节、改标题或改契约项",chapterTitle:f,sections:g,rules:[e.bx,"按给定 sections 的顺序输出同样数量的对象,不输出标题,不增删、不调序。","objectScope 写清本节覆盖的本项目对象/系统/工作面及其边界与接口,使用行业通行术语;不得用“加强管理、确保质量”等空泛表述。","rationale 说明本节按什么专业逻辑独立(对象、专业系统、施工阶段、风险、资源/管理要素),为什么不能并入相邻节。","responsibilityPositions 只写岗位称谓,不写姓名;按项目实际组织给出能对本节内容负责的岗位,不套固定清单。","对象/标准/工法/依据只引用 planningContext 中可核的内容;不得编造标准编号、控制值或工程对象。","只输出 JSON。"],output:{sections:[{objectScope:"对象/专业/工作面",rationale:"独立成节理由",responsibilityPositions:["岗位称谓"]}]}})),{...h,schema:V,validateProtocol:m});aj(a,`enrich-${c+1}`,k);let n=m(k);if(n.length)throw Error(`DOCUMENT_STRUCTURE_PLAN_INVALID:章节「${b.title}」对象范围补写失败;${n.join(";")}`);let o=k?.sections;if(!o||o.length!==b.sections.length)throw Error(`DOCUMENT_STRUCTURE_PLAN_INVALID:章节「${b.title}」对象范围补写失败`);return o},o=await n();l.chapters[c]=f(o)}),(w=ar(l=ab(l),j,{...g,requireSectionContract:!0})).length)throw Error(`DOCUMENT_STRUCTURE_PLAN_INVALID:对象范围阶段未通过;${ah(w).slice(0,8).join(";")}`);let z=async c=>{var e,f;let g=c?.length?(e=l,f=b,(0,t.dk)({task:"局部修正事实落点、候选处置与输出例外;覆盖矩阵由程序从节内认领投影",previousResponse:f,deterministicIssues:c,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.structurePlanningContextProjection)(P(a.planningContext)),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,l,d),j=await a.caller(i,g,{...h,schema:W});if(aj(a,"coverage",j),!j)throw Error("DOCUMENT_STRUCTURE_PLAN_FAILED:覆盖规划未返回结果");b=j;let k=Array.isArray(j.factQuantities)?j.factQuantities:[],m=new Map;for(let a of k){if(!a.sectionId)continue;let b=m.get(a.sectionId)??{factKeys:[],quantityKeys:[]};("fact"===a.kind?b.factKeys:b.quantityKeys).push(a.key),m.set(a.sectionId,b)}l={...l,factQuantities:k,chapters:l.chapters.map(a=>({...a,sections:a.sections.map(a=>({...a,factKeys:[...new Set(m.get(a.sectionId)?.factKeys??[])],quantityKeys:[...new Set(m.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 z(),w=ar(l=al(l,d),j);let A=new Set([(0,s.Fu)(l)]);for(let a=0;a<3&&w.length;a+=1){let a=(0,s.Fu)(l);if(await z(ah(w)),!(w=ar(l=al(l,d),j)).length)break;let b=(0,s.Fu)(l);if(b===a||A.has(b))break;A.add(b)}for(let b=0;b<2&&w.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}(l,a.planningContext);if(!b.length)break;let c=(0,s.Fu)(l);if((w=ar(l=await an(a,l,b),j)).length&&c===(0,s.Fu)(l))break}if(w.some(a=>"coverage-same-text-split"===a.code)){let b=function(a,b){let c=new Map(b.map((a,b)=>[a.id,{item:a,index:b}])),d=new Map,e=a.chapters.flatMap((a,b)=>a.sections.map((a,c)=>({section:a,order:1e4*b+c})));for(let{section:a,order:b}of e)d.set(a.sectionId,b);let f=new Map;for(let{section:a,order:b}of e)for(let d of a.coverageItemIds){let e=c.get(d);if(!e||"requirement"!==e.item.kind&&"obligation"!==e.item.kind)continue;let g=(0,n.$u)(e.item.text);g&&f.set(g,[...f.get(g)??[],{coverageId:d,sectionId:a.sectionId,order:b}])}let g=[],h=new Map;for(let[a,b]of f){let e=new Map;for(let a of b)e.set(a.sectionId,(e.get(a.sectionId)??0)+1);if(e.size<=1)continue;let f=[...e].sort((a,b)=>b[1]-a[1]||(d.get(a[0])??Number.MAX_SAFE_INTEGER)-(d.get(b[0])??Number.MAX_SAFE_INTEGER))[0][0],i=[...new Set(b.map(a=>a.coverageId))].sort((a,b)=>(c.get(a)?.index??0)-(c.get(b)?.index??0));for(let a of i)h.set(a,new Set([...h.get(a)??[],f]));g.push({text:b[0]?c.get(b[0].coverageId)?.item.text??a:a,toSectionId:f,coverageIds:i})}if(!g.length)return{plan:a,moves:g};let i=a.chapters.map(a=>({...a,sections:a.sections.map(a=>{let b=a.coverageItemIds.filter(a=>!h.has(a)),d=[...h.entries()].filter(([,b])=>b.has(a.sectionId)).map(([a])=>a);return{...a,coverageItemIds:[...new Set([...b,...d])].sort((a,b)=>(c.get(a)?.index??0)-(c.get(b)?.index??0))}})}));return{plan:al(ab({...a,chapters:i}),b),moves:g}}(l,d);b.moves.length&&(aj(a,"coverage-same-text-normalized",{moves:b.moves}),w=ar(l=b.plan,j))}if(w.length)throw Error(`DOCUMENT_STRUCTURE_PLAN_INVALID:${ah(w).slice(0,8).join(";")}`);return l},y=(0,n.w1)(await x(),j);w+=1;let z=y.planHash;a.sectionContracts.update(y);let B=await a.caller("你是独立的施工组织设计结构规划审查者,不是本计划的作者。只审结构完整性、专业逻辑、粒度、载体与重复;只输出 JSON。",$(a,y,d,1,c),{...h,schema:X});aj(a,`review-${w}`,B),B||aj(a,"review-unavailable",{round:w,candidate:y,reason:"独立规划审查未取得;结构可校验,按未取得审查记录并继续"});let E=B??{verdict:"pass",findings:[],sectionReviews:[]},F=Z((Array.isArray(E.findings)?E.findings:[]).map((a,b)=>{let c=a??{};return{id:`plan-review:${w}:${b+1}`,planId:y.planId,planHash:z,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??"")}}),y,d,a.planningContext);a.sectionContracts.review(y,E,w);let G=B?[...F]:[{id:"plan-review:unavailable",planId:y.planId,planHash:z,category:"review-unavailable",severity:"advisory",target:{},detail:"独立结构规划审查未取得;结构确定性校验通过,按未取得审查记录并继续",fix:"整稿终审与后续轮次可继续核对;不伪造专业通过"}],H=(0,n.w1)(y,j),I=(b,e,f,g)=>{let h=b,i=new Map((Array.isArray(e.exceptionDecisions)?e.exceptionDecisions:[]).map(a=>a??{}).map(a=>[String(a.obligationId??""),a]));i.size&&(h={...h,outputExceptions:(h.outputExceptions??[]).map(a=>{let b=i.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 i=aq(ab({...h,chapters:e}),a.planningContext),o=ar({...i,state:"validated"},j,{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({...i,state:"validated"},j);h=a.length&&a.every(a=>"coverage-same-text-split"===a.code)?(0,n.YG)({...i,state:"validated"}):(0,n.w1)({...i,state:"validated"},j),k.add(c)}}let o=ag({plan:h,operations:af(e.operations),planningContext:a.planningContext,catalog:d,validate:a=>ar({...a,state:"validated"},j,{allowTransientCoverageSplit:!0})});for(let b of(h=o.plan,c.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:b.sectionId?{sectionId:b.sectionId}:{},detail:`结构操作「${b.op}」被确定性校验拒绝(计划保持操作前状态):${b.reason}`,fix:"按确定性错误修正操作,或改为 finding 并在正文阶段处理;不得删除必出契约项/输出"});for(let a of o.applied)a.originalSectionId&&k.add(a.originalSectionId);return h=(0,n.w1)({...h,state:"validated"},j),a.sectionContracts.update(h),{plan:h,addressedSectionIds:k,patchRejections:l,operationResult:o,findings:m}},J=I(H,E,z,String(w)),K=J.addressedSectionIds,M=J.patchRejections,N=J.operationResult;H=J.plan,G.push(...J.findings);let O=1,S=0,T=[],_=G.filter(a=>["patch","operation"].includes(a.category)),ac=a=>!!(a&&(Array.isArray(a.patches)&&a.patches.length>0||Array.isArray(a.operations)&&a.operations.length>0||Array.isArray(a.exceptionDecisions)&&a.exceptionDecisions.length>0)),ad=E,ae=G.filter(a=>"review-unavailable"!==a.category).length>0||ac(E),ak=z,am=y,ao=0,as=ac(E);for(;ae&&S<3;){T.push(...G);let f=b?I(H,b,ak,`${O+1}-revision-${S+1}`):void 0;b=void 0,f&&(H=f.plan,G.push(...f.findings),_.push(...f.findings),K=new Set([...K,...f.addressedSectionIds]),N={...f.operationResult,applied:[...N.applied,...f.operationResult.applied],rejected:[...N.rejected,...f.operationResult.rejected],numberingChanges:[...N.numberingChanges,...f.operationResult.numberingChanges],originalIdMap:ai(N.originalIdMap,f.operationResult.originalIdMap)});let g=f?.patchRejections??[],i=f?.operationResult.rejected??[],k=new Set(H.chapters.flatMap(a=>a.sections.map(a=>a.sectionId))),m=new Set(H.outputRegistry.map(a=>a.outputId)),o=!!f||as;as=!1;let p=G.filter(a=>"review-unavailable"!==a.category&&!(a.target.sectionId&&!k.has(a.target.sectionId))&&!(a.target.outputId&&!m.has(a.target.outputId)));if(!p.length&&!o)break;let q=[];if(p.length){let b=p.map(a=>({code:"professional-review",message:`${a.detail};建议:${a.fix}`,target:{}})),f={reviewedPlanHash:ak,verdict:ad.verdict,reviewedSections:(0,e.GP)(am),findings:p,patches:ad.patches??[],operations:ad.operations??[]},g=H,h=[],i=!1,k=new Set;for(let e=0;e<=2&&!(ao>=6);e+=1){if(ao+=1,h=ar({...g=await ap(a,g,[...b,...h],d,c,f),state:"validated"},j),q.push({attempt:ao,candidateHash:(0,n.YG)(g).planHash,issues:h}),aj(a,"author-repair-validation",{attempt:ao,candidate:g,issues:h}),!h.length){i=!0;break}let e=(0,n.YG)(g).planHash;if(k.has(e))break;k.add(e)}if(!i){let b=h.length?`作者修订未通过确定性校验:${ah(h).slice(0,4).join(";")}`:"作者修订调用已达本阶段上限,保留上一有效候选";aj(a,"revision-recorded",{round:S+1,candidate:H,findings:p,reason:b}),G.push({id:`plan-review:revision-recorded:${S+1}`,planId:H.planId,planHash:H.planHash,category:"revision-recorded",severity:"advisory",target:{},detail:`${b};按未决项记录,不阻断冻结`,fix:""});break}H=(0,n.w1)({...g,state:"validated"},j)}if(S+=1,O>=4)break;if(H.planHash===ak){aj(a,"review-skipped-unchanged",{round:O,candidate:H,reason:"修订未改变候选 hash;不重复审查同一输入"});break}let r=H.planHash,t={reviewedPlanHash:ak,currentPlanHash:r,reviewedSections:(0,e.GP)(am),response:ad,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仅指节本身、章元数据及位置未变,不证明依赖未变、独立或已获专业批准;仍须审查当前完整候选及跨节关系。"}}(am,H),validation:{reviewerPatchRejections:[...1===O?M:[],...g],reviewerOperationRejections:[...1===O?J.operationResult.rejected:[],...i],authorAttempts:q}};aj(a,"review-revision",{round:O+1,...t}),a.sectionContracts.update(H);let u=await a.caller("你是独立结构规划审查者。核对当前候选的专业缺陷是否实际消除,不能因程序校验通过而自动批准。只输出 JSON。",$(a,H,d,O+1,c,t,am),{...h,schema:X});if(O+=1,aj(a,`review-${O}`,{candidate:H,response:u}),!u){aj(a,"review-unavailable",{round:O,candidate:H,reason:"修订后独立审查未取得;保留当前有效候选并记录未决项"});break}ad=u,b=u;let v=Z((Array.isArray(u.findings)?u.findings:[]).map((a,b)=>({id:`plan-review:${O}:${b+1}`,planId:H.planId,planHash:H.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??"")})),H,d,a.planningContext);a.sectionContracts.review(H,u,O),G.splice(0,G.length,...v),ae=(0,l.C)(u,v)||ac(u),ak=r,am=H}if(b){let a=I(H,b,ak,"final-edits");H=a.plan,G.push(...a.findings),_.push(...a.findings),K=new Set([...K,...a.addressedSectionIds]),N={...a.operationResult,applied:[...N.applied,...a.operationResult.applied],rejected:[...N.rejected,...a.operationResult.rejected],numberingChanges:[...N.numberingChanges,...a.operationResult.numberingChanges],originalIdMap:ai(N.originalIdMap,a.operationResult.originalIdMap)}}G.push(..._.filter(a=>!G.some(b=>b.id===a.id)));let at=(0,n.fw)((0,n.fw)(H,"reviewed"),"frozen"),au=new Set(at.chapters.flatMap(a=>a.sections.map(a=>a.sectionId))),av=new Set(at.outputRegistry.map(a=>a.outputId)),aw=G.map(a=>{if("operation"===a.category)return{...a,planId:at.planId,disposition:"operation-rejected",dispositionNote:"结构操作被确定性校验拒绝,计划保持操作前状态;记录为顾问意见"};if(a.target.sectionId&&K.has(a.target.sectionId))return{...a,planId:at.planId,disposition:"structural-change-applied",dispositionNote:"审查针对该节给出补丁/结构操作,已由程序应用并通过硬判据"};let b=a.target.sectionId?N.originalIdMap.get(a.target.sectionId)??a.target.sectionId:void 0;return b&&!au.has(b)||a.target.outputId&&!av.has(a.target.outputId)?{...a,planId:at.planId,disposition:"superseded",dispositionNote:"结构修改后目标节/输出已不存在,视为已处理"}:"blocking"===a.severity?{...a,planId:at.planId,disposition:"recorded-unresolved",dispositionNote:"达到审查/修订轮次上限仍未落地,保留为未决项;不阻断冻结,整稿台账继续跟踪"}:{...a,planId:at.planId,disposition:"advisory-recorded",dispositionNote:"程序硬判据通过;按顾问意见记录,不作为冻结阻断"}}),ax=aw.filter(a=>"recorded-unresolved"===a.disposition).length;return{plan:at,coverage:{chapters:at.chapters.length,sections:at.chapters.reduce((a,b)=>a+b.sections.length,0),outputs:at.outputRegistry.length,requiredCoverageItems:f.length,requiredFacts:g.length},review:{planId:at.planId,planHash:at.planHash,reviewer:D,rounds:O,findings:aw,...T.length?{priorFindings:T}:{},verdict:ax?"revise":"pass",advisoriesOnly:0===ax,...ax?{recorded:!0,recordedBlocking:ax}:{},incremental:{applied:N.applied,rejected:N.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&&!(b.recorded&&"revise"===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:b.recorded?`当前结构已冻结;审查达轮次上限仍有 ${b.recordedBlocking??0} 条未决项,按台账记录并允许起草`:"当前完整结构经原全局专业门禁通过"},reason:b.recorded?"允许起草;未决项随稿记录,锁节与交付另须正文及来源审查":"允许起草;锁节与交付另须正文及来源审查"})}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,7 @@
1
+ "use strict";exports.id=3239,exports.ids=[3239],exports.modules={25620:(a,b,c)=>{c.r(b),c.d(b,{constructionCapabilityCatalog:()=>aq,constructionModelIdentity:()=>at,constructionRecordStatus:()=>as,constructionRunDirectory:()=>au,runConstructionDocument:()=>ar});var d=c(60126),e=c(59339),f=c(73024),g=c.n(f),h=c(76760),i=c.n(h),j=c(77598),k=c(55037),l=c(65131),m=c(38210),n=c(49303),o=c(76499);let p=a=>Number.isSafeInteger(a)&&Number(a)>=0?Number(a):0;var q=c(8176),r=c(56396),s=c(2313),t=c(88390),u=c(1512),v=c(37038),w=c(3737),x=c(61485),y=c(31232),z=c(25821),A=c(98459),B=c(45408),C=c(69977),D=c(36980),E=c(25164),F=c(6873),G=c(25353),H=c(47353),I=c(42165),J=c(745),K=c(4053),L=c(1932),M=c(73005),N=c(63072),O=c(47523),P=c(16669),Q=c(69970),R=c(36690),S=c(16208),T=c(45532),U=c(1623),V=c(9104),W=c(85585),X=c(26621),Y=c(98943),Z=c(68515),$=c(85738),_=c(81146),aa=c(49724),ab=c(49584),ac=c(45304),ad=c(6906),ae=c(3410),af=c(13380),ag=c(39375),ah=c(19045),ai=c(6158);let aj=new Map;var ak=c(62563),al=c(91088);let am={type:"object",additionalProperties:!1,required:["findings"],properties:{findings:{type:"array",items:{type:"object",additionalProperties:!1,required:["severity","problem","fix"],properties:{severity:{type:"string",enum:["P0","P1","P2"]},chapterId:{type:"string"},sectionId:{type:"string"},quote:{type:"string"},problem:{type:"string"},fix:{type:"string"},replacement:{type:"string"}}}}}};async function an(a){let b=a.chapters.filter(a=>a.content.trim());if(!b.length)return{findings:[],calls:0,chaptersReviewed:0};let c=[],d=0;for(let e of b){a.signal?.throwIfAborted();let b=(0,al.dk)({task:"整稿终审:只找 P0/P1 级严重问题;P2 只记录。不得改写未引用原文,不得新增项目事实或标准。",chapter:{id:e.id,title:e.title,content:e.content},documentIndex:a.sections.map(a=>({sectionId:a.sectionId,chapterId:a.chapterId,title:a.title,contentGroup:a.contentGroup??null,digest:a.digest??null})),rules:["P0:必出图/表缺失、正文与必出输出不一致、跨章直接矛盾、事实/数量/日期冲突导致方案不成立。","P1:严重重复主载、引用错号、正文与图表结论不一致、关键专业接口遗漏。","P2:表达、详略、一般重复;只记录,不要求本轮修。","每条 finding 必须给问题与修法;能逐字替换时给 quote(本章原文逐字片段)与 replacement。quote 必须能在本章正文中逐字找到,不得改写原文后冒充引文。",'不得因"可以更详细"判 P0/P1;不得把编写说明、内部口径、证据来源写进正文建议。',"findings 最多 12 条,按 P0 > P1 > P2 排序;同一问题不要重复。","只输出 JSON。"],output:{findings:[{severity:"P1",sectionId:"section…",quote:"原文逐字片段",problem:"可核的严重问题",fix:"具体修法",replacement:"替换后的逐字文本"}]}});d+=1;let f=await a.caller("你是施工组织设计整稿终审者,不是作者。只找严重问题:跨章矛盾或重复主载、必出图表缺失、事实/数量/日期冲突、引用错号、正文与图表不一致。只输出 JSON。",b,{schema:am,diagnostics:a.diagnostics,signal:a.signal,taskKind:"reasoning",callKind:"consistency-review",temperature:0});for(let a of f?.findings??[]){let b=function(a){if(!a||"object"!=typeof a||Array.isArray(a))return;let b=String(a.severity??"").toUpperCase();if(!["P0","P1","P2"].includes(b))return;let c=String(a.problem??"").trim(),d=String(a.fix??"").trim();if(!c||!d)return;let e=b=>{let c=a[b];return"string"==typeof c&&c.trim()?c.trim():void 0};return{severity:b,...e("chapterId")?{chapterId:e("chapterId")}:{},...e("sectionId")?{sectionId:e("sectionId")}:{},...e("quote")?{quote:e("quote")}:{},...e("replacement")?{replacement:e("replacement")}:{},problem:c,fix:d}}(a);b&&c.push({...b,chapterId:b.chapterId??e.id})}}let e={findings:[...new Map(c.map(a=>[JSON.stringify([a.severity,a.sectionId??"",a.quote??"",a.problem.replace(/\s+/gu,"")]),a])).values()].sort((a,b)=>a.severity.localeCompare(b.severity)),calls:d,chaptersReviewed:b.length};return(0,af.tv)(a.artifactDir,"final-document-review.json",{version:"final-document-review-v1",runId:a.runId,...e},a.runId),e}var ao=c(4387);let ap=["query_project_facts","query_work_packages","search_evidence","discover_files","read_source"];function aq(a){let b={projectRoot:i().resolve(a.projectRoot),scopeRootNames:[...a.scopeRootNames],skills:[...a.skills],toolNames:[...ad.n]};return[{id:"construction-method-production",label:"施工方法与生产组织",kind:"professional",system:(0,t.gh)({permissions:["read-current","work-package","source-allocation","production","shared-definition","writing"],responsibilityKey:"method-production",...a.structurePlanning?{structurePlanning:!0}:{}}),purposeSystems:Object.fromEntries(["source-check","method-decision","production-calculation","writing"].map(b=>[b,(0,t.gh)({permissions:(0,l.p)(b,["read-current","work-package","source-allocation","production","shared-definition","writing"]),responsibilityKey:"method-production",purpose:b,...a.structurePlanning?{structurePlanning:!0}:{}})])),permissions:["read-current","work-package","source-allocation","production","shared-definition","writing"],evidence:b,caller:Y.callDocumentLlmWithTools}]}async function ar(a){var b;let c,f,h;a={...a,...a.bidComposition?{bidComposition:structuredClone(a.bidComposition)}:{},...a.bidCompositionSources?{bidCompositionSources:structuredClone(a.bidCompositionSources)}:{},...a.tenderResponsePlan?{tenderResponsePlan:structuredClone(a.tenderResponsePlan)}:{},...a.documentOutline?{documentOutline:structuredClone(a.documentOutline)}:{},...a.planningContext?{planningContext:structuredClone(a.planningContext)}:{}};let ad=(0,n.En)(a.budget),al={},am=Object.keys(a.project.sources).filter(b=>!a.scopeRootNames.some(a=>b===a||b.startsWith(`${a}/`)));if(am.length)throw Error(`CONSTRUCTION_RUN_MATERIAL_SCOPE_INCOMPLETE:${am.length} 份冻结来源不在本次资料范围内,例如 ${am[0]}`);let ar=a.caller??Y.callDocumentLlmWithTools,au=(0,Q.Kf)(a.bidComposition)?await (0,Q.m3)():void 0,av=a.skills??(0,ac.loadGenerationSkills)(),aw=aq({projectRoot:a.projectRoot,scopeRootNames:a.scopeRootNames,skills:av,structurePlanning:!!a.structurePlan}).map(a=>({...a,caller:ar})),ax={projectRoot:a.projectRoot,directory:a.generatedDir,identity:{projectId:a.projectRoot,documentId:a.documentId,sourceSnapshotId:a.project.snapshotId,contractId:a.contract.id},project:a.project,contract:a.contract,workspace:a.workspace,sourceRunId:a.sourceRunId,sourceBuildId:a.sourceBuildId,evidence:a.evidence},ay=(0,T.BI)(a.project),az=new Map;for(let b of ay){let c=b.entry.sourceFile,d=az.get(c)??{total:0,authorized:0};d.total+=1,(!a.scope?.memberIndices?.length||a.scope.memberIndices.includes(b.index))&&(d.authorized+=1),az.set(c,d)}let aA=[...az].sort(([a],[b])=>a.localeCompare(b)).map(([a,b])=>({path:a,authorizedMembers:b.authorized,totalMembers:b.total,wholeFileAuthorized:b.authorized===b.total}));if(a.scope?.sectionIds?.some(b=>!a.contract.sections.some(a=>a.id===b)))throw Error(`CONSTRUCTION_RUN_SCOPE_SECTION_UNKNOWN:${a.scope.sectionIds.filter(b=>!a.contract.sections.some(a=>a.id===b)).slice(0,8).join("、")} 不在本次冻结合同的章节里`);let aB=new Set(ay.map(a=>a.index));if(a.scope?.memberIndices?.some(a=>!Number.isSafeInteger(a)||!aB.has(a)))throw Error(`CONSTRUCTION_RUN_SCOPE_MEMBER_UNKNOWN:${(a.scope.memberIndices??[]).filter(a=>!aB.has(a)).slice(0,8).join("、")}
2
+ 不是本次冻结清单的有效 memberIndices(有效范围 0..${Math.max(0,ay.length-1)})`);let aC=a.scope?.memberIndices?.length?[...a.scope.memberIndices]:ay.map(a=>a.index),aD=a.scope?.sectionIds?.length?[...a.scope.sectionIds]:a.contract.sections.map(a=>a.id),aE=a.scope?.sectionIds?.length?[...new Set(a.scope.sectionIds)]:void 0,aF=new Set,aG=new Map,aH=a.artifactDir??a.generatedDir,aI=a.nodeLogBaseDir??aH,aJ=(0,t.QG)(),aK=a.planningContext?.sourceLedger.entries.filter(a=>"read"!==a.readStatus)??[],aL=aE?new Set(aE):void 0,aM=a.contract.sections.filter(a=>!aL||aL.has(a.id)),aN=a.contract.chapters.filter(a=>aM.some(b=>b.chapterId===a.id)),aO=a.chiefGoal??(0,t.IC)({projectName:a.projectName,title:a.title,requirement:a.requirement,documentTitle:a.title,chapterTitles:aN.map(a=>a.title),sectionIds:aD,sectionDirectory:aM.map(b=>({id:b.id,title:b.title,chapterId:b.chapterId,chapterTitle:a.contract.chapters.find(a=>a.id===b.chapterId)?.title??""})),workPackageCount:ay.length,memberCount:ay.length,sourceFiles:aA,...a.scope?{scope:{sectionTitles:aD.map(b=>a.contract.sections.find(a=>a.id===b)?.title??b),...a.scope.memberIndices?.length?{memberIndices:a.scope.memberIndices}:{}}}:{},...a.planningContext?{planning:{requiredOutputs:a.planningContext.outputObligations.filter(a=>"domain-baseline"===a.kind||(0,C.oY)(a)).map(a=>({element:a.element,form:a.form,status:"domain-baseline"===a.kind?"施工组织设计垂直领域基线(建议出图;确不适用的可按 outputExceptions 写明理由与等效载体,由独立审查接受)":"招标明确要求(必须出)"})),contractObligations:a.planningContext.contractObligations.filter(C.Ln).map(a=>({id:a.id,text:a.text,kind:a.kind,...a.items?.length?{items:a.items}:{}})),factsBaseline:a.planningContext.factsBaseline.map(a=>{let b=a.selected?(0,ak.D)(a.selected.value,160):void 0;return{key:a.key,...a.objectName?{objectName:a.objectName}:{},...a.condition?{condition:a.condition}:{},status:a.status,...a.selected&&b?{value:b.text+(b.truncated?`…(另 ${b.remainingChars} 字未展示,按需读取)`:""),sourceFile:a.selected.sourceFile}:{},..."conflict"===a.status?{alternatives:a.values.map(a=>({value:(0,ak.D)(a.value,80).text,sourceFile:a.sourceFile}))}:{}}}),factConflicts:a.planningContext.sourceLedger.conflicts.map(a=>({key:a.key,...a.objectName?{objectName:a.objectName}:{},...a.condition?{condition:a.condition}:{},resolution:a.resolution,rule:a.rule})),sourceSummary:a.planningContext.sourceLedger.byClass,unreadSources:aK.slice(0,40).map(a=>({filePath:a.filePath,readStatus:a.readStatus,unknowns:a.unknowns})),unreadSourceCount:aK.length,...aK.length>40?{unreadSourcesNote:`仅列前 40 份;其余 ${aK.length-40} 份按 filePath/序号用 read_scope 读取,不能当作不存在`}:{},tenderProfile:a.planningContext.tenderProfile,professionalCandidates:a.planningContext.professionalCandidates.map(a=>({chapterTitle:a.chapterTitle,sectionCandidates:a.sectionCandidates.map(a=>a.title),contentRequirements:a.contentRequirements.map(a=>({title:a.title,attachTo:a.attachTo}))})),extraction:a.planningContext.provenance.extraction??null}}:{}}),aP=()=>{},aQ=()=>{},aR=()=>{},aS=function(a){let b=(0,k.openConstructionWorkspace)(a.workspaceInput),c={beforeModelCall:a.beforeModelCall,...a.earlyDrafts?{adoptEarlyDrafts:a.earlyDrafts.adopt,sectionAuthorAttempts:a.earlyDrafts.authorAttempts}:{},...a.bidComposition?{bidComposition:a.bidComposition,bidCompositionSources:a.bidCompositionSources}:{},...a.tenderResponsePlan?{tenderResponsePlan:a.tenderResponsePlan}:{},...a.structurePlan?{structurePlan:a.structurePlan,sectionContracts:a.sectionContracts}:{},...a.sectionPlans?{sectionPlans:a.sectionPlans}:{},...a.planningContext?{planningContext:a.planningContext}:{},...a.confirmed?{confirmed:a.confirmed}:{},...a.jsonCaller?{jsonCaller:a.jsonCaller}:{},executionBaselineRef:a.executionBaselineRef,...a.blockedSections?{blockedSections:a.blockedSections}:{},store:b.store,project:a.workspaceInput.project,contract:a.workspaceInput.contract,authority:{actorId:"chief",memberIndices:[...a.memberIndices],sectionIds:[...a.sectionIds],canManageSharedResources:!0},clock:{timelineId:`document-run-${a.workspaceInput.identity.documentId}`,timeUnit:{unit:"hour",ticksPerUnit:1},horizon:8760},buildId:a.workspaceInput.sourceBuildId,generatedDir:a.generatedDir,nodeLogBaseDir:a.nodeLogBaseDir??a.generatedDir,runId:a.runId,...a.budget?{budget:a.budget}:{},system:a.chiefSystem,goal:a.chiefGoal,initialFocus:{purpose:"method-decision",entityIds:[]},permissions:["read-current","work-package","source-allocation","production","shared-definition","professional-decision","writing"],toolFace:["read-current","work-package","shared-definition","professional-decision"],authorizeRead:()=>!0,responsibilityKind:"document-chief",caller:a.caller,evidence:{projectRoot:i().resolve(a.projectRoot),scopeRootNames:[...a.scopeRootNames],skills:[...a.skills],toolNames:[...ap]},...a.onReceipt?{onReceipt:a.onReceipt}:{},...a.onBusinessCommit?{onBusinessCommit:a.onBusinessCommit}:{},...a.onProgressBoundary?{onProgressBoundary:a.onProgressBoundary}:{},...a.signal?{signal:a.signal}:{}},e=a.diagnostics??(0,_.createGenerationDiagnostics)(),f=Promise.resolve(),g=async()=>{let a=f,b=()=>{};return f=new Promise(a=>{b=a}),await a,b},h={...c,diagnostics:e,sourceCoverageLock:g},j=(0,l._)({chief:h,profiles:a.profiles});return{store:b.store,created:b.created,chief:h,coordinator:j,diagnostics:e,onReceipt:(b,c)=>a.onReceipt?.(b,c),unbindSectionContracts:a.sectionContracts?(0,d.Ep)(b.store,a.sectionContracts):void 0,...b.migration?{migration:b.migration}:{}}}({beforeModelCall:a.earlyDrafts?()=>aR():void 0,earlyDrafts:a.earlyDrafts,workspaceInput:ax,runId:a.runId,chiefSystem:aJ,chiefGoal:aO,profiles:aw,memberIndices:aC,sectionIds:aD,generatedDir:aH,...a.bidComposition?{bidComposition:a.bidComposition,bidCompositionSources:a.bidCompositionSources}:{},...a.tenderResponsePlan?{tenderResponsePlan:a.tenderResponsePlan}:{},...a.structurePlan?{structurePlan:a.structurePlan,sectionContracts:a.sectionContracts}:{},...a.sectionPlans?{sectionPlans:a.sectionPlans}:{},...a.planningContext?{planningContext:a.planningContext}:{},...a.confirmed?{confirmed:a.confirmed}:{},jsonCaller:a.jsonCaller??Y.callDocumentLlmJson,executionBaselineRef:al,blockedSections:aF,nodeLogBaseDir:aI,projectRoot:a.projectRoot,skills:av,scopeRootNames:a.scopeRootNames,caller:ar,budget:ad,...a.diagnostics?{diagnostics:a.diagnostics}:{},onReceipt:(b,c)=>{a.onReceipt?.(b,c),b.startsWith("construction-progress-")||aP()},onBusinessCommit:()=>{a8=!0},onProgressBoundary:()=>aQ(),...a.signal?{signal:a.signal}:{}}),{store:aT,coordinator:aU,diagnostics:aV}=aS,aW=[...new Set([...a.scope?.sectionIds??[],...a.contract.sections.map(a=>a.id)])],aX=()=>(0,n.r0)({sections:aW,calls:(aV.llm.callLog??[]).map(b=>({inputTokens:b.inputTokens,providerAttempts:b.transportActivities?b.transportActivities.filter(a=>"not-started"!==a.providerInvocation).length:b.providerAttempts,unknownAttempts:(()=>{let a=b.transportActivities?.filter(a=>"not-started"!==a.providerInvocation);return a?a.filter(a=>!a.usage).length:0})(),sectionId:b.sectionId??(b=>{let c=b?aT.actor(b):void 0,d=c?.definition.sectionIds??[];return 1===d.length?d[0]:a.earlyDrafts?.sectionOfActor(b)})(b.actorId),role:(0,o.K)(b.kind)?"review":"reasoning"===b.taskKind?"think":"chief"===b.actorId?"chief":"author"}))},{unknownCallUpperBound:ad.perSection.maxInputTokens}),aY=()=>a.structurePlan?(0,R.F_)(a.structurePlan).map(({section:b,chapter:c},d)=>{let e=(0,E.Pp)(aT,b.sectionId),f=a.sectionPlans?.get(b.sectionId),g=(0,y.rz)(aT,b.sectionId).length,h=aE&&!aE.includes(b.sectionId)?"out-of-scope":e?"planned"===e.phase?f?"section-planned":"planned":e.phase:"untracked";return{sectionId:b.sectionId,chapterTitle:c.title,title:b.title,order:d+1,phase:h,sectionPlanned:!!f,unitCount:g,locked:e?.phase==="locked",...e?.reason?{reason:e.reason}:{}}}):void 0;al.current=(0,V.nu)(aT);let aZ=aS.chief,a$=aS.onReceipt,a_="provisional-source-ownership",a0=()=>{let b=(0,V.qN)(aT,a.project).filter(a=>a.sectionIds.some(a=>aD.includes(a))),c=new Set(b.flatMap(a=>a.sectionIds).filter(a=>aD.includes(a)));return{packages:b,coveredSectionIds:[...c],missingSectionIds:aD.filter(a=>!c.has(a)),missingAllocations:[],overAllocated:[]}},a1=!!a.planningContext,a2=!1,a3=async()=>{if(!a1)return;if(al.current){let b=al.current,c=(0,V.PE)({store:aT,project:a.project,sectionIds:aD,allocationMode:a_}),d=new Set(b.coveredSectionIds??[]);if(b.workPackageSetHash===c.workPackageSetHash&&b.allocationSetHash===c.allocationSetHash&&aD.every(a=>d.has(a))){a2=!0,(0,af.Jv)({generatedDir:aH,fileName:"execution-baseline.json",value:b,runId:a.runId});return}a$("construction-run-execution-baseline-stale",{reason:"工作包集合/分配/覆盖章节已变化,重编基准",previous:{workPackageSetHash:b.workPackageSetHash??null,allocationSetHash:b.allocationSetHash??null},current:{workPackageSetHash:c.workPackageSetHash,allocationSetHash:c.allocationSetHash}}),al.current=void 0,a2=!1}let b=a0();if(b.missingSectionIds.length)throw Error(`EXECUTION_BASELINE_SECTION_UNCOVERED:${b.missingSectionIds.length} 个章节没有工作包`);if(b.missingAllocations.length)throw Error(`EXECUTION_BASELINE_ALLOCATION_MISSING:${b.missingAllocations.length} 个工作包成员没有原量分配`);let c=await (0,V.du)({store:aT,project:a.project,sectionIds:aD,allocationMode:a_,...a.planningContext?{planningContext:a.planningContext}:{},caller:a.jsonCaller??Y.callDocumentLlmJson,diagnostics:aV,signal:a.signal,artifactDir:aH,runId:a.runId,laborPolicy:Z.Qk.p??null}),d=(0,V.ZO)({store:aT,baseline:c.baseline,runId:a.runId});al.current=c.baseline,a2=!0,(0,af.Jv)({generatedDir:aH,fileName:"execution-baseline.json",value:c.baseline,runId:a.runId}),a$("construction-run-execution-baseline",{workPackages:b.packages.length,batches:c.coverage.batches,members:c.coverage.members,written:d})},a4=()=>{let a=a0();return{coverage:a,ready:!a.missingSectionIds.length&&!a.missingAllocations.length&&!a.overAllocated.length}},a5=()=>{if(!a1||f)return Promise.resolve();if(c)return c;let a={};return a.current=(async()=>{try{await a3()}catch(b){let a=b instanceof Error?b.message:String(b);/^EXECUTION_BASELINE_(SECTION_UNCOVERED|ALLOCATION_MISSING)/u.test(a)?a$("construction-run-execution-baseline-deferred",{reason:a}):f=a}finally{c===a.current&&(c=void 0)}})(),c=a.current,a.current},a6=()=>{if(!a1||c||a2&&al.current||f)return;let{coverage:a,ready:b}=a4();b&&(a$("construction-run-execution-baseline-started",{workPackages:a.packages.length,members:a.packages.reduce((a,b)=>a+b.members.length,0)}),a5())},a7=async()=>{if(c&&await c,f)throw Error(f)};if((0,ab.bindRunModelConfiguration)(aV,a),(0,aa.bindDocumentCallLedger)(aV,{generatedDir:aH,runId:a.runId}),(0,af.tv)(aH,"run-start.json",{at:new Date().toISOString(),runId:a.runId,documentId:a.documentId,...a.specId?{specId:a.specId}:{},title:a.title,projectName:a.projectName,...a.materialRoot?{materialRoot:a.materialRoot}:{},...a.generationProjectId?{generationProjectId:a.generationProjectId}:{},projectId:a.project.snapshotId,buildIdentity:{sourceFingerprint:a.buildId,sourceRunId:a.sourceRunId,sourceBuildId:a.sourceBuildId},workflowVersion:ag.E.version,contractId:a.contract.id,...a.contract.chapterSource?{chapterSource:a.contract.chapterSource}:{},...a.documentOutline?{documentOutlineHash:(0,J.Fu)(a.documentOutline)}:{},...a.structurePlan?{structurePlanHash:(0,R.cI)(a.structurePlan)}:{},...a.tenderResponsePlan?{tenderResponsePlanHash:(0,J.Fu)(a.tenderResponsePlan)}:{},...a.planningContext?{planningContextHash:(0,J.Fu)(a.planningContext)}:{},budget:{perSection:ad.perSection,perRun:ad.perRun??null,enforcement:ad.enforcement},scope:aE?{sectionIds:aE,partial:!0}:{partial:!1}},a.runId),a.structurePlan)for(let{section:b}of(0,R.F_)(a.structurePlan))(0,E.Pp)(aT,b.sectionId)||(0,E.ey)({store:aT,sectionId:b.sectionId,responsibilityId:J.P6,phase:"planned",trigger:"section-track-initialized",snapshot:{structurePlanHash:a.structurePlan.planHash,unitVersions:[],unreviewedUnitIds:[],blockingFindingIds:[],sourceReviewComplete:!1}});(0,af.tv)(aH,"construction-run-protocol.json",{version:"construction-run-protocol-v1",runId:(b=a).runId,documentId:b.documentId,buildId:b.buildId,sourceRunId:b.sourceRunId,sourceBuildId:b.sourceBuildId,workflowVersion:ag.E.version,actualPath:b.structurePlan?"two-level-planning":"legacy-outline",contract:{id:b.contract.id,hash:(0,J.Fu)(b.contract)},sources:{snapshotId:b.project.snapshotId,hash:(0,ae.ik)(b.project)},structurePlanHash:b.structurePlan?(0,R.cI)(b.structurePlan):null,sectionPlanHashesAtStart:[...b.sectionPlans?.values()??[]].map(a=>({sectionId:a.sectionId,hash:a.sectionPlanHash})).sort((a,b)=>a.sectionId.localeCompare(b.sectionId)),protocols:{tenderApplicability:C.q$,tenderApplicabilityReview:C.lK,review:x.dT,sourceReview:ae.pO,originalForm:ah.LR,originalFormReview:ah.mw,deliveryPlacement:"document-delivery-placement-v1",sectionState:E.VM,contentContract:"writing-content-contract-v1",atomicStructuralRevision:!0,finding:"review-finding-contract-v1"}},a.runId),a.documentOutline&&(0,af.tv)(aH,"document-outline.json",a.documentOutline,a.runId),a.structurePlan&&(0,af.tv)(aH,"document-structure-plan.json",a.structurePlan,a.runId),a.planningContext&&((0,af.tv)(aH,"planning-context.json",a.planningContext,a.runId),(0,af.tv)(aH,"source-extraction-ledger.json",a.planningContext.sourceLedger,a.runId)),a.tenderResponsePlan&&(0,af.tv)(aH,"tender-response-plan.json",a.tenderResponsePlan,a.runId),a.bidComposition&&(0,af.tv)(aH,"bid-composition.json",{version:"construction-bid-composition-v1",projectSnapshotId:a.project.snapshotId,spec:a.bidComposition,sources:a.bidCompositionSources??[]},a.runId);let a8=!1,a9=!1,ba=()=>{},bb=()=>{},bc=!1;try{let b,c,d;h=function(a){let b,c,d=a.now??Date.now,e=a.read??(()=>(0,$.CX)(a.documentId,a.projectRoot)),f=a.save??(b=>(0,$.Yf)(b,a.projectRoot)),h=d(),k=(0,j.randomUUID)(),l=e(),m=l?.nativeRevision?.revisionId,n=l?.editedMarkdown,o=l?.createdAt??h,p=i().join(a.artifactDir,"construction","progress",`${(0,J.Fu)(a.documentId).slice(0,24)}.json`);g().mkdirSync(i().dirname(p),{recursive:!0});let q=!1,r=()=>g().writeFileSync(p,JSON.stringify({runId:a.runId,token:k,startedAt:h,createdAt:o,lastSuccess:b??null,lastError:c??null},null,2));r();let s=(b,c)=>{try{a.onReceipt?.(b,c)}catch{}},t=()=>{if(q)return!1;try{return JSON.parse(g().readFileSync(p,"utf8")).token===k}catch{return!1}};return{publish:(g,h,i=!1,j)=>{if(!t())return!1;let k=e();if(k?.nativeRevision?.revisionId!==m||k?.editedMarkdown!==n||k&&k.runId!==a.runId&&k.runId!==l?.runId)return q=!0,s("construction-progress-fenced",{runId:a.runId,currentRunId:k?.runId??null}),!1;if(!i&&(b?.fingerprint===h||b&&d()-b.at<1e3))return!1;try{let e={...g,...k?.ownerPid?{ownerPid:k.ownerPid,ownerStartedAt:k.ownerStartedAt}:{},createdAt:o,updatedAt:d()};f(e),m=e.nativeRevision?.revisionId,n=e.editedMarkdown,b={fingerprint:h,at:d(),sequence:(b?.sequence??0)+1,...j?{source:j}:{}},c=void 0;try{r()}catch(a){s("construction-progress-watermark-failed",{error:String(a),lastSuccess:b})}return s("construction-progress-saved",{runId:a.runId,lastSuccess:b}),!0}catch(e){c={at:d(),message:e instanceof Error?e.message:String(e)};try{r()}catch{}if(s("construction-progress-save-failed",{runId:a.runId,error:c,lastSuccess:b??null}),i)throw e;return!1}},createdAt:o,owns:t,close:()=>{q=!0},state:()=>({lastSuccess:b,lastError:c})}}({documentId:a.documentId,runId:a.runId,projectRoot:a.projectRoot,artifactDir:aH,onReceipt:a$}),aS.migration&&((0,af.tv)(aH,"construction-migration-receipt.json",{at:new Date().toISOString(),runId:a.runId,documentId:a.documentId,sourceRunId:a.sourceRunId,sourceBuildId:a.sourceBuildId,...aS.migration.manifest,pending:aS.migration.pending,activationEligible:!1},a.runId),a$("construction-run-migration-receipt",{counts:aS.migration.manifest.counts??null,pending:aS.migration.pending.length}));let l=aT.recoverActorOwners(a.runId);(l.released.length||l.retained.length)&&a$("construction-run-owner-recovery",l);let t=0,T=0,V=`document-run:${a.documentId}`,Y=new Set,_=()=>{let a=c;c=void 0;let b=(()=>{let a=[];for(let b of aT.supervisedActors(aZ.authority.actorId)){let c=aT.actor(b.actorId),d=aT.actorEventFailure(b.actorId),e=String(c?.definition.assignmentBinding?.responsibilityKey??b.actorId);if(d){let c="failed:"+b.actorId+":"+d.receiptId;if(Y.has(c))continue;Y.add(c),a.push(`- 职责「${e}」(${b.actorId})上次执行**失败**:${d.error};回执 ${d.receiptId}。失败后重试必须有你的实质修订(改目标、换对象或调整所需成果),原样重派不会被受理——用 \`inspect_construction_responsibility\` 读它的当前状态,再用 \`revise_construction_responsibility\` 给出具体修订;如果它本就不该继续,如实收口并在结论里写明。`);continue}let f=c?.checkpoint;if(f?.status==="paused"){let c="paused:"+b.actorId+":"+String(f.blockedReason??"")+":"+f.rounds;if(Y.has(c))continue;Y.add(c),a.push(`- 职责「${e}」(${b.actorId})**已暂停**(${String(f.blockedMessage??f.blockedReason??"状态停滞")},已用 ${f.rounds} 轮):检查点、原稿与费用账保留。补充预算或给出实质修订后可继续;用 \`inspect_construction_responsibility\` 读它的当前状态,再决定是补充预算、换对象还是如实收口。`);continue}if(f?.status==="interrupted"){let c="interrupted:"+b.actorId+":"+String(f.rounds??0);if(Y.has(c))continue;Y.add(c),a.push(`- 职责「${e}」(${b.actorId})上次执行被**传输中断**(响应未完整结束,已用 ${f.rounds??0} 轮):检查点与原稿保留;本轮不会重复派发,下一次运行会从检查点续跑,**不需要你为此改写目标**。`);continue}if(f?.status!=="completed")continue;let g="completed:"+b.actorId+":"+String(f.decodedSha256??"").slice(0,16);Y.has(g)||(Y.add(g),a.push(`- 职责「${e}」(${b.actorId})已声明**完成职责**(检查点 ${String(f.decodedSha256??"").slice(0,16)}):核对它的成果是否满足你要的成果条件;不满足就给出具体裁决,满足则本轮可以收口。`))}let b=[];for(let a;;){let c=aT.issuePage({owner:"project-decision-maker",...void 0===a?{}:{afterSequence:a},limit:200});if(b.push(...c.issues),void 0===c.nextAfterSequence)break;a=c.nextAfterSequence}for(let c of b){if(!["open","investigating","awaiting-decision"].includes(c.state))continue;let b="issue:"+c.id+":"+c.state+":"+c.updatedAt;Y.has(b)||(Y.add(b),a.push(`- 有交回项目决策者的问题「${c.title}」(${c.id},由 ${c.raisedBy} 登记):${c.decision?`要作出的决定:${c.decision.question};可选:${c.decision.options.join("、")}。`:`${c.detail}。`}你是本项目侧的裁决人:用 \`answer_shared_decision\` 给出**具体**裁决(采纳哪个方案/给出工程决定与依据),不能只回"继续优化"。`))}if(!a.length){let a=new Set(aT.supervisedActors(aZ.authority.actorId).flatMap(a=>(a.definition.toolFace??[]).includes("writing")?a.definition.sectionIds:[])),b=aT.actor(aZ.authority.actorId)?.definition;return[...new Set(b?.sectionIds??[])].filter(b=>!a.has(b)).length?void 0:"【运行反馈\xb7实际变化】你上一轮收口之后没有新的实际变化:全部章节已有 writing 承接职责,无需再建包、委派或重复检查职责状态;直接调用 `conclude_construction_organization` 再次收口结束本轮。"}return`【运行反馈\xb7实际变化】你上一轮收口之后发生了以下实际变化(程序按事件回执记录,不是转述):
3
+ ${a.join("\n")}
4
+ 请按实际状态作出具体裁决;不需要动作时用 \`conclude_construction_organization\` 再次收口。`})();return[a,b].filter(Boolean).join("\n\n")||void 0},aa=()=>aT.supervisedActors(aZ.authority.actorId).map(a=>{let b=a.definition.assignmentBinding,c=Array.isArray(a.definition.toolFace)?a.definition.toolFace.map(String):[];return{actorId:a.actorId,..."string"==typeof b?.profileId?{profileId:b.profileId}:{},..."string"==typeof b?.purpose?{purpose:b.purpose}:{},sectionIds:Array.isArray(b?.sectionIds)?b.sectionIds.map(String):[],canWrite:c.includes("writing"),canCalculate:c.includes("production")}}),ab=(b,c)=>(function(a){let b=new Set(a.scopeSectionIds?.length?a.scopeSectionIds:a.contract.sections.map(a=>a.id)),c=new Map;for(let b of a.contract.criteria)b.sectionId&&c.set(b.sectionId,[...c.get(b.sectionId)??[],{applicable:b.applicable}]);let d=a.contract.sections.filter(a=>b.has(a.id)&&(a=>{let b=c.get(a)??[];return!b.length||b.some(a=>a.applicable)})(a.id)),e=a.actors.filter(a=>"writing"===a.purpose||a.canWrite&&"writing"===a.purpose),f=!1!==a.allocationRequired,g=[];if(void 0!==a.workPackageSectionIds){let b=new Set(a.workPackageSectionIds);for(let a of d)b.has(a.id)||g.push({kind:"section-work-package-missing",sectionId:a.id,detail:`章节「${a.title}」还没有已提交工作包;基准必须按工作包/清单成员计算`})}a.requireBaseline&&f&&(a.allocationMissing??0)>0&&g.push({kind:"production-allocation-missing",detail:`${a.allocationMissing} 个工作包成员没有原量分配:委派 purpose=production-calculation 的职责(profileId=construction-method-production),按工作包/工序提交 source-allocation;跨包成员份额合计不得超过原量。分配完成前不会编制认证基准`}),a.requireBaseline&&!a.baselineReady&&g.push({kind:"baseline-incomplete",detail:"执行基准尚未完成:基准完成前不得启动写作"});let h=new Map;for(let a of d){let b=e.filter(b=>b.sectionIds.includes(a.id));h.set(a.id,b),b.length||g.push({kind:"section-unassigned",sectionId:a.id,detail:`章节「${a.title}」没有 purpose=writing 的承接职责`}),b.length>1&&g.push({kind:"section-multi-writer",sectionId:a.id,detail:`章节「${a.title}」由 ${b.length} 个写作职责同时承接(${b.map(a=>a.actorId).join("、")});同一节只能有一个写作承接者`})}for(let c of a.tenderResponsePlan?.sections??[]){if(!b.has(c.sectionId))continue;let a=h.get(c.sectionId)??[],d=c.contentContract?.obligationIds??[];d.length&&!a.length&&g.push({kind:"obligation-unassigned",sectionId:c.sectionId,detail:`章节「${c.title}」承接合同内容义务 ${d.join("、")},但没有写作职责`}),c.requiredOutputs.length&&!a.length&&g.push({kind:"output-unassigned",sectionId:c.sectionId,detail:`章节「${c.title}」有输出义务(${c.requiredOutputs.map(a=>a.basis).join("、")}),但没有写作职责承接`})}let i=[{key:"sections-assigned",passed:!g.some(a=>"section-unassigned"===a.kind),message:g.some(a=>"section-unassigned"===a.kind)?`${g.filter(a=>"section-unassigned"===a.kind).length} 个章节没有写作承接者`:`范围内 ${d.length} 个章节都有写作承接者`},{key:"single-writer",passed:!g.some(a=>"section-multi-writer"===a.kind),message:g.some(a=>"section-multi-writer"===a.kind)?"存在同一节多个写作承接者":"每节写作承接唯一"},{key:"outputs-assigned",passed:!g.some(a=>"output-unassigned"===a.kind||"obligation-unassigned"===a.kind),message:g.some(a=>"output-unassigned"===a.kind||"obligation-unassigned"===a.kind)?"仍有输出/内容义务没有承接者":"输出与内容义务均有承接者"},{key:"work-packages-assigned",passed:!g.some(a=>"section-work-package-missing"===a.kind),message:void 0===a.workPackageSectionIds?"未提供工作包覆盖(调用方未启用该检查)":g.some(a=>"section-work-package-missing"===a.kind)?`${g.filter(a=>"section-work-package-missing"===a.kind).length} 个章节没有工作包`:"章节均有工作包"},{key:"allocations-complete",passed:!(a.requireBaseline&&f&&(a.allocationMissing??0)>0),message:f?(a.allocationMissing??0)>0?`${a.allocationMissing} 个成员没有原量分配`:"工作包成员均已分配":"首版暂定基准不要求原量分配(来源归属主包,生产细化后认证)"},{key:"baseline-ready",passed:!(a.requireBaseline&&!a.baselineReady),message:a.baselineReady?"执行基准已完成":a.requireBaseline?"执行基准未完成":"执行基准待工作包完成后编制"}];return{passed:0===g.length,checks:i,issues:g,feedback:g.map(a=>`- ${a.detail}`)}})({contract:a.contract,actors:aa(),tenderResponsePlan:a.tenderResponsePlan,workPackageSectionIds:b.coveredSectionIds,allocationMissing:0,allocationRequired:!1,baselineReady:!!(a2&&al.current),requireBaseline:c,...aE?{scopeSectionIds:aE}:{}}),ac="",ah=0,ak=0,am=Math.max(1,Math.floor(Z.yv?.gateMaxRounds??20)),ap=!1,aq=0,av=!1,aw=new Set,ax=a=>`预算安全暂停(${ad.enforcement}):${a.violations.map(a=>`${"run"===a.scope?"整轮":`节 ${a.id}`} ${a.metric} ${a.actual} > ${a.limit}${a.includesUnknownUpperBound?"(含未报告用量上界)":""}`).join(";")}。已提交正文保留;补充预算或人工确认后从检查点续跑。`,ay=b=>{if(d)return!0;let c="report-only"===ad.enforcement?[]:(0,n.Ag)(aX(),ad).violations;if(!c.length)return!1;let e=aX();d={violations:c,usage:e,where:b};try{a.onBudgetPause?.(ax(d))}catch{}a$("construction-run-budget-paused",{where:b,enforcement:ad.enforcement,violations:c,usage:e});try{(0,af.tv)(aH,"budget-pause.json",{at:new Date().toISOString(),runId:a.runId,where:b,enforcement:ad.enforcement,budget:ad,violations:c,usage:e},a.runId)}catch{}return!0};aR=()=>{if(ay("before-model-call"))throw Error("CONSTRUCTION_RUN_BUDGET_PAUSED")};let az=new Set,aA=new Map,aB=new Map,aC=Promise.resolve(),aJ=b=>{let c=aT.actor(b),d=Array.isArray(c?.definition.sectionIds)?c.definition.sectionIds.map(String).sort():[],e=(0,x.cD)(aT,{responsibilityId:b,contract:a.contract,expectedBidCompositionHash:(0,x.IQ)(a.bidComposition,a.bidCompositionSources),...a.tenderResponsePlan?{tenderResponsePlan:a.tenderResponsePlan}:{}});return(0,J.Fu)(d.map(a=>{let b=(0,y.rz)(aT,a),c=new Set(b.map(a=>a.entityId)),d=(0,y.l9)(aT,a),f=[];for(let a;;){let b=aT.issuePage({states:["open","investigating","awaiting-decision"],...void 0===a?{}:{afterSequence:a},limit:200});for(let a of b.issues)"review-finding"===a.kind&&a.scope.entityIds.some(a=>c.has(a))&&f.push(a.id);if(void 0===b.nextAfterSequence)break;a=b.nextAfterSequence}return{sectionId:a,units:b.map(a=>[a.entityId,a.version]),review:[e.applied,e.missingUnitIds.filter(a=>c.has(a))],lock:d?[d.entity.version,d.lock.sectionPlanHash]:null,boundaryKey:(0,E.Pp)(aT,a)?.boundaryKey??null,blocked:aF.has(a),openFindingIds:f.sort()}}))},aK=()=>(0,J.Fu)([al.current??null,aJ(aZ.authority.actorId),aT.supervisedActors(aZ.authority.actorId).map(a=>[a.actorId,aT.actorInstruction(a.actorId)?.version??0,aJ(a.actorId),aT.actorEventFailure(a.actorId)?.receiptId??null])]),aL=a.planningContext||a.tenderResponsePlan?"planning-gate-not-evaluated(规划闸门尚未通过,写作事件不投递)":void 0,aM=async()=>{for(;;){if(a.signal?.throwIfAborted(),ay("event-drain"))return;a6();let b=await (0,u.E)({store:aT,consumerId:V,responsibilities:aU.responsibility,signal:a.signal,limit:a.eventPageSize??Z.N6.authorSections??24,budgetBlockedActors:aw,transportPausedActors:az,pausedInstructionVersions:aA,recoveryStateHash:aJ,stagnationRecoveryHashes:aB,deferActor:a=>{if("hard-stop"===ad.enforcement&&ay("event-dispatch"))return"budget-hard-stop(预算已到上限,停止继续派发)";let b=aT.actor(a)?.definition.assignmentBinding?.purpose;return"production-calculation"===b?a2&&al.current?aL:"provisional-baseline-not-ready(首版暂定基准完成前生产计算不投递)":"writing"===b?a1&&!(a2&&al.current)?"baseline-not-ready(执行基准完成前写作事件不投递)":aL:void 0},onActorSettled:a=>(a6(),aC=aC.catch(a=>a$("construction-progress-boundary-failed",{error:String(a)})).then(async()=>{let b=aJ(a);av=await aN(a)||av;let c=aJ(a);b!==c&&aT.actor(a)?.checkpoint?.status==="yielded"&&aT.enqueueActorContinuation(a,`closure:${c}`,"节收口产生新的实际状态,继续处理本职责其余章节"),ba(!0)}))});if(a.signal?.throwIfAborted(),T+=1,aq=b.consumed,a$("construction-run-event-drain",{drain:T,outcomes:b.outcomes,consumed:b.consumed,scannedPages:b.scannedPages,hasMore:b.hasMore,deferredByConcurrency:b.deferredByConcurrency}),!b.consumed)break}},aN=async b=>{if(!a.structurePlan||a.signal?.aborted||aL||a1&&!(a2&&al.current))return!1;let c=aT.supervisedActors(aZ.authority.actorId).filter(a=>{let c=a.definition.assignmentBinding?.purpose,d=Array.isArray(a.definition.toolFace)?a.definition.toolFace.map(String):[];return"writing"===c&&d.includes("writing")&&(!b||a.actorId===b)}),d=!1,e=Math.max(1,Math.floor(Z.N6.reviewSections??4)),f=[];for(let a of c){let b=Array.isArray(a.definition.sectionIds)?a.definition.sectionIds.map(String):[];if(b.length)for(let c of b)f.push({actor:a,actorSections:b,sectionId:c})}let g=0,h=async()=>{for(;;){let b=g;if(g+=1,b>=f.length)return;let c=f[b],{actor:e,actorSections:h,sectionId:i}=c;try{let b=await (0,w.H_)({store:aT,contract:a.contract,project:a.project,responsibilityId:e.actorId,sectionId:i,authoritySectionIds:h,...a.structurePlan?{structurePlan:a.structurePlan}:{},...a.sectionPlans?{sectionPlans:a.sectionPlans}:{},...a.planningContext?{planningContext:a.planningContext}:{},...a.tenderResponsePlan?{tenderResponsePlan:a.tenderResponsePlan}:{},...a.bidComposition?{bidComposition:a.bidComposition,bidCompositionSources:a.bidCompositionSources}:{},...al.current?{executionBaseline:al.current}:{},projectRoot:a.projectRoot,caller:ar,diagnostics:aV,artifactDir:aH,runId:a.runId,...a.signal?{signal:a.signal}:{},...aZ.sourceCoverageLock?{sourceCoverageLock:aZ.sourceCoverageLock}:{}});if(b.reviewed){let a=b.receipt?.ok?b.receipt.assessments?.length??0:0;void 0!==b.missingAfter&&b.missingAfter.length<b.missingUnitIds.length&&(d=!0),a$("construction-run-section-review",{actorId:e.actorId,sectionId:i,missingUnitIds:b.missingUnitIds,missingAfter:b.missingAfter??[],ok:b.receipt?.ok??!1,applied:a,...b.receipt?.error?{error:b.receipt.error}:{}})}else b.reason&&"no-unreviewed-units"!==b.reason&&a$("construction-run-section-review-skipped",{actorId:e.actorId,sectionId:i,reason:b.reason,...b.planGaps?.length?{planGaps:b.planGaps}:{}});let c=(0,w.OL)({store:aT,contract:a.contract,project:a.project,responsibilityId:e.actorId,sectionId:i,authoritySectionIds:h,...a.structurePlan?{structurePlan:a.structurePlan}:{},...a.sectionPlans?{sectionPlans:a.sectionPlans}:{},...a.planningContext?{planningContext:a.planningContext}:{},...a.tenderResponsePlan?{tenderResponsePlan:a.tenderResponsePlan}:{},...a.bidComposition?{bidComposition:a.bidComposition,bidCompositionSources:a.bidCompositionSources}:{},...al.current?{executionBaseline:al.current}:{},lock:!0,lockActorId:J.P6,lockedBy:"mechanical-closure"});c.wroteLock&&c.lock&&(d=!0,a$("construction-run-section-locked",{actorId:e.actorId,sectionId:i,sectionPlanHash:c.sectionPlanHash,unitCount:c.lock.unitVersions.length,reviewApplied:c.lock.review.applied}));let f=c.openFindingIds.length;if(c.contractPassed&&0===c.unreviewedUnitIds.length&&f>0){let b=(0,J.Fu)([(0,y.rz)(aT,i).map(a=>[a.entityId,aT.entity(a.entityId)?.value??null]),c.openFindingIds.map(a=>{let b=aT.issue(a);return b?[b.title,b.detail,b.evidence.filter(a=>!a.startsWith("review-invocation:"))]:null})]),f=aG.get(i)??new Set,g=f.has(b);if(f.add(b),aG.set(i,f),!aF.has(i)&&g){aF.add(i),d=!0;let f=(0,E.Pp)(aT,i);f&&(0,E.ey)({store:aT,sectionId:i,responsibilityId:e.actorId,phase:"blocked",snapshot:f.snapshot,resumeFrom:"reviewing",trigger:"runtime-review-state-repeated",dependencyKeys:[b],reason:"当前正文和未关闭审查动作重复出现,未取得新的处理依据"});let g=(0,E.Pp)(aT,i);g&&(0,v.mr)({actorId:e.actorId,goal:"",documentId:a.documentId,baseDir:aI,sectionId:i,state:g.phase,key:g.boundaryKey,reason:g.reason??""}),a$("construction-run-section-blocked",{actorId:e.actorId,sectionId:i,findingIssueIds:c.openFindingIds,stateFingerprint:b})}else aF.has(i)||g||(d=!0)}else 0===f&&(aG.delete(i),aF.delete(i)&&(d=!0,a$("construction-run-section-unblocked",{actorId:e.actorId,sectionId:i})))}catch(a){a$("construction-run-section-closure-failed",{actorId:c.actor.actorId,sectionId:c.sectionId,error:a instanceof Error?a.message:String(a)})}}};return await Promise.all(Array.from({length:Math.min(e,f.length)},()=>h())),d},aO={generatedDir:(0,$.Gl)(a.projectRoot),projectRoot:a.projectRoot,documentId:a.documentId,monoColor:a.bidComposition?.formatRules.monoColor,fontFamily:a.bidComposition?.formatRules.bodyFont||a.bidComposition?.formatRules.fontFamily,hideCaption:!0},aW=(b=!1,c="generating")=>{if(!h?.owns())return a$("construction-progress-stale",{runId:a.runId,reason:"not-owner",lastSuccess:h?.state().lastSuccess??null}),!1;let f=new Map(a.sectionPlans??[]);for(let b of a.contract.sections){let a=aT.entity(`section-plan:${b.id}`),c=a?.value?.plan;c&&"object"==typeof c&&c.sectionId===b.id&&f.set(b.id,c)}let g=function(a){let b=[];for(let c;;){let d=a.store.entityPage({groupKey:"writing-units",...c?{afterId:c}:{},limit:200});for(let a of d.entities){let c=(0,K.iC)(a);c&&b.push({entityId:a.id,entityVersion:a.version,entityHash:(0,J.Fu)(a),unit:c,responsibilityId:String(a.value?.responsibilityId??""),purpose:String(a.value?.purpose??""),sectionIds:Array.isArray(a.value?.sectionIds)?a.value.sectionIds.map(String):[]})}if(!d.nextAfterId)break;c=d.nextAfterId}let c=a.figureRender?(0,M.rZ)(a.figureRender):void 0,d=new Map(b.map(a=>[a.unit.id,a.entityId])),e=c?(b,e,f)=>{let g=e.replace(/^图\s*\d+(?:[-—–]\d+)?\s*/u,""),h=f??d.get(b.id)??b.id,i=(0,J.Fu)(JSON.parse(JSON.stringify([h,g,b])));if(aj.has(i))return aj.get(i);try{let d=b.planChart?a.executionBaseline?c.renderer({...b,id:h,kind:"figure",caption:g,nodes:[],edges:[],planBaseline:a.executionBaseline,planView:b.planChart.view}):void 0:c.renderer({...b,id:h,kind:"figure",caption:g,nodes:b.nodes??[],edges:b.edges??[]});return aj.size>=512&&aj.delete(aj.keys().next().value),aj.set(i,d),d}catch{aj.size>=512&&aj.delete(aj.keys().next().value),aj.set(i,void 0);return}}:void 0;return{...(0,L.V)({...a,units:b,...e?{figureUrlFor:e}:{},includePlannedSections:!0}),unitCount:b.filter(b=>!a.scopeSectionIds?.length||b.sectionIds.some(b=>a.scopeSectionIds.includes(b))).length}}({store:aT,contract:a.contract,outputPlacements:(0,e.rL)(a.tenderResponsePlan),originalFormRenderer:(0,e.iP)(a.tenderResponsePlan),...f.size?{sectionPlans:f}:{},...aE?{scopeSectionIds:aE}:{},figureRender:aO,...a2&&al.current?{executionBaseline:al.current}:{}}),i=g.issues.map(a=>{let b="section-unwritten"===a.code&&"generating"!==c;return{level:b?"error":"warning",severity:b?"blocker":"warning",category:"structure",message:a.message,...a.sectionId?{source:a.sectionId}:{},...a.unitId?{suggestion:a.unitId}:{},owner:"system"}}),j=(0,X.ip)(a.documentId,{baseDir:aI}).stages,k=[aT.actor(aZ.authority.actorId),...aT.supervisedActors(aZ.authority.actorId)].filter(a=>void 0!==a),l=aD.map(a=>{let b=(0,E.Pp)(aT,a);return{sectionId:a,blocked:aF.has(a),phase:b?.phase??"planned",boundaryKey:b?.boundaryKey??null,reason:b?.reason??null,lock:(0,y.l9)(aT,a)?.entity.version??null}}),m=[];for(let a;;){let b=aT.issuePage({...void 0===a?{}:{afterSequence:a},limit:200});if(m.push(...b.issues.map(a=>({id:a.id,state:a.state,updatedAt:a.updatedAt}))),void 0===b.nextAfterSequence)break;a=b.nextAfterSequence}let n={sectionStates:l,issues:m,actors:k.map(a=>[a.actorId,a.revision,a.checkpoint]),stages:j},o=(0,J.Fu)(JSON.parse(JSON.stringify([g.markdown,n,c]))),p=aT.latestEvent(),q=p?{workspaceId:aT.workspaceId,eventSequence:p.sequence,eventId:p.id}:void 0,r=Date.now(),s=aY(),t={templateId:a.contract.id,templateName:a.title,title:a.title,requirement:a.requirement,...a.bidComposition?{bidComposition:a.bidComposition,exportSettings:(0,ai.b2)(a.bidComposition.formatRules,{anonymize:a.bidComposition.identityMarksForbidden})}:{},projectRoot:a.projectRoot,markdown:g.markdown,facts:Object.fromEntries(a.project.facts.map(a=>[a.key,a.value])),structuredFacts:a.project.facts,factsModel:a.project.factsModel,chapters:g.chapters.map(a=>({id:a.id,title:a.title,content:a.content,evidence:[],missingFacts:[]})),sources:Object.keys(a.project.sources).map(a=>({filePath:a,count:1})),missingItems:["generating"===c?"生成中:运行尚未收口,图件与交付核验待定稿":"运行已停止:保留当前生效正文与待处理状态",...l.filter(a=>a.blocked||"locked"!==a.phase).map(a=>`${a.sectionId}:${a.reason??(a.blocked?"阻塞,待处理具体问题":a.phase)}`),...g.issues.filter(a=>"section-unwritten"===a.code).map(a=>`${a.sectionId??""}:${a.message}`),...m.filter(a=>["open","investigating","awaiting-decision"].includes(a.state)).map(a=>`${a.id}:${a.state}`)],validation:{passed:!1,warnings:[],errors:[]},validationIssues:i,executionStages:j,...s?.length?{sectionProgress:s}:{},...d?{budgetPause:{enforcement:ad.enforcement,where:d.where,message:ax(d),violations:d.violations}}:{},exportGate:{passed:!1,blockingIssues:[],checklist:[{key:"run-finalized",label:"运行及交付核验完成",passed:!1}]},generatedAt:r},u=h.publish({id:a.documentId,taskId:a.runId,runId:a.runId,workflowVersion:ag.E.version,templateId:a.contract.id,templateName:a.title,title:a.title,requirement:a.requirement,projectRoot:a.projectRoot,projectId:a.project.snapshotId,markdown:g.markdown,wordCount:g.markdown.replace(/\s+/gu,"").length,status:c,draft:t,executionStages:j,assets:[],createdAt:h.createdAt,updatedAt:r},o,b,q);return u||a$("construction-progress-stale",{runId:a.runId,reason:"not-published",lastSuccess:h.state().lastSuccess??null,composedUnits:g.unitCount,markdownChars:g.markdown.length}),u};ba=aW,aP=()=>{a8=!0},aQ=()=>{a8&&(a9||(a9=!0,Promise.resolve().then(()=>{try{if(a8)try{aW()&&(a8=!1)}catch(a){a$("construction-progress-build-failed",{error:a instanceof Error?a.message:String(a),lastSuccess:h?.state().lastSuccess??null})}}finally{a9=!1}})))},bb=()=>{try{aW(!0,"paused")}catch(a){a$("construction-progress-stop-save-failed",{error:a instanceof Error?a.message:String(a),lastSuccess:h?.state().lastSuccess??null})}},a.signal?.addEventListener("abort",bb,{once:!0});let a_=()=>{let a=0;for(let b of aT.supervisedActors(aZ.authority.actorId))a+=b.revision;return a+(aT.actor(aZ.authority.actorId)?.revision??0)};for(;;){let e;if(ay("chief-round")){b=ax(d);try{aW()}catch(a){a$("construction-run-progress-save-failed",{error:a instanceof Error?a.message:String(a)})}break}let g=a_();av=!1,a6();let h=!1;try{e=await (0,m.p)({...aZ,coordination:aU,diagnostics:aV,resumeCompleted:_})}catch(a){if(!(a instanceof q.a)&&!(0,s.U)(a))throw a;h=(0,s.U)(a),b=a.message,a$("construction-run-chief-blocked",{round:t+1,reason:a.message,...(0,s.U)(a)?{transportReceipt:a.receipt}:{}}),e=void 0}if(aQ(),!e){let e=aK();if(a.planningContext||a.tenderResponsePlan){let a=a0(),c=ab(a,a1&&!!(a2&&al.current));if(aL=c.passed?void 0:"planning-gate-blocked(主控暂停分支:规划闸门未通过,写作事件不投递)",!c.passed){if(ap=!1,(ak+=1)>=am){b=`规划闸门连续失败 ${ak} 轮(运行保护上限 ${am}):`+c.issues.slice(0,6).map(a=>a.detail).join(";"),a$("construction-run-planning-gate-blocked",{round:t,issues:c.issues,guard:"gate-max-rounds"});break}a$("construction-run-planning-gate-deferred",{stage:"chief-stalled",issues:c.issues})}}if(await aM(),aQ(),d){b=ax(d);try{aW()}catch(a){a$("construction-run-progress-save-failed",{error:a instanceof Error?a.message:String(a)})}break}av=await aN();try{aW()}catch(a){a$("construction-run-progress-save-failed",{error:a instanceof Error?a.message:String(a)})}if(a1&&(al.current||a4().ready)&&(await a5(),f)){b=`执行基准编制失败:${f}`,a$("construction-run-execution-baseline-blocked",{reason:b});break}let g=aK();if(!h&&al.current&&g!==e){c="执行基准已由工作区工作包/原量分配编制完成。现在可以委派 purpose=writing 的职责;写作职责会按节拿到本节工作包/成员与基准投影,不要另算日期或数量。",b=void 0;continue}aL&&a$("construction-run-planning-gate-blocked",{round:t,reason:aL,guard:"chief-paused-no-business-change"});break}if(t+=1,a$("construction-run-chief-round",{round:t,result:e.result??null,status:e.checkpoint?.status??null}),e.checkpoint?.status==="blocked"){b="主控自报阻塞";break}let i=!!(a.planningContext||a.tenderResponsePlan),j=i?aa():[],k=aT.actorWait(aZ.authority.actorId)?.state==="waiting"||aT.actor(aZ.authority.actorId)?.checkpoint?.status==="completed";if(i&&!al.current&&(a6(),await aM(),aQ(),d)){b=ax(d);try{aW()}catch(a){a$("construction-run-progress-save-failed",{error:a instanceof Error?a.message:String(a)})}break}let l=i?a0():{packages:[],coveredSectionIds:[],missingSectionIds:[],missingAllocations:[],overAllocated:[]};if(!al.current&&k&&i&&a4().ready&&(await a5(),f)){b=`执行基准编制失败:${f}`,a$("construction-run-execution-baseline-blocked",{reason:b});break}if(a1&&k)try{(al.current||a4().ready)&&await a5(),await a7()}catch(a){b=`执行基准编制失败:${a instanceof Error?a.message:String(a)}`,a$("construction-run-execution-baseline-blocked",{reason:b});break}if(i&&(j.length>0||k)){let a=ab(l,a1&&(!!k||!!(a2&&al.current)));if(a$("construction-run-planning-gate",{round:t,passed:a.passed,checks:a.checks,issues:a.issues}),!a.passed){if(ap=!1,aL="planning-gate-blocked(规划闸门未通过,写作事件不投递)",(ak+=1)>=am){b=`规划闸门连续失败 ${ak} 轮(运行保护上限 ${am}):`+a.issues.slice(0,6).map(a=>a.detail).join(";"),a$("construction-run-planning-gate-blocked",{round:t,issues:a.issues,guard:"gate-max-rounds"});break}let d=a.issues.map(a=>`${a.kind}:${a.sectionId??""}`).join("|")||"unknown";if(d===ac?ah+=1:(ac=d,ah=1),ah>=2){b=`规划闸门未通过:${a.issues.slice(0,6).map(a=>a.detail).join(";")}`,a$("construction-run-planning-gate-blocked",{round:t,issues:a.issues});break}c=`【规划闸门\xb7实际缺口】以下承接关系尚未成立(程序按实际角色定义核对,不是转述):
5
+ ${a.feedback.join("\n")}
6
+ 请补齐承接:可以委派/修订职责、调整章节归属或增加具备相应工具面的职责;具体谁做、按什么顺序做由你决定。如果某项确属不适用,请在职责目标与成果要求里写明理由,而不是静默不派。`,a$("construction-run-planning-gate-deferred",{round:t,issues:a.issues});continue}ah=0,ak=0,ac="",ap=!0,aL=void 0}if(i||(ap=!0),await aM(),aQ(),d){b=ax(d);try{aW()}catch(a){a$("construction-run-progress-save-failed",{error:a instanceof Error?a.message:String(a)})}break}av=await aN();try{aW()}catch(a){a$("construction-run-progress-save-failed",{error:a instanceof Error?a.message:String(a)})}if(aT.actorWait(aZ.authority.actorId)?.state==="waiting"||aT.actor(aZ.authority.actorId)?.checkpoint?.status==="completed"){let a=aT.supervisedActors(aZ.authority.actorId);if(a.every(a=>aT.actor(a.actorId)?.checkpoint?.status==="completed")||!av&&!a.some(a=>aT.actorEventFailure(a.actorId)))break}if(a_()===g&&0===aq&&!av){a$("construction-run-no-change",{chiefRounds:t,drains:T});break}}try{a1&&al.current&&await a5(),await a7()}catch(a){b||(b=`执行基准编制失败:${a instanceof Error?a.message:String(a)}`)}let a3=()=>{if(!a.sectionPlans?.size)return[];let b=aE?new Set(aE):void 0;return a.contract.sections.filter(a=>!b||b.has(a.id)).flatMap(b=>{let c=a.sectionPlans.get(b.id);if(!c)return[];let d=new Set((0,y.rz)(aT,b.id).map(a=>a.subsectionId).filter(a=>!!a)),e=c.subsections.filter(a=>!d.has(a.subsectionId));if(!e.length)return[];let f=aT.supervisedActors(aZ.authority.actorId).find(a=>Array.isArray(a.definition.sectionIds)&&a.definition.sectionIds.includes(b.id));return f?[{section:b,missing:e,owner:f}]:[]})},bd=a3();if(bd.length&&!d&&!a.signal?.aborted&&!b){for(let a of bd)aT.enqueueActorContinuation(a.owner.actorId,`completion-gap:${a.section.id}:${(0,J.Fu)(a.missing.map(a=>a.subsectionId))}`,`计划小节未写:${a.missing.slice(0,8).map(a=>a.title).join("、")};只补这些小节,使用已有 facts/evidence,补完再 finalize_section;不得删除或重写已生效小节。`);a$("construction-completion-gap-sweep",{sections:bd.map(a=>({sectionId:a.section.id,missing:a.missing.map(a=>a.title),actorId:a.owner.actorId}))}),await aM(),bd=a3()}let be=aT.supervisedActors(aZ.authority.actorId),bf=a=>String(a.definition.assignmentBinding?.purpose??""),bg=new Set(["source-check","method-decision","production-calculation"]),bh=be.filter(a=>bg.has(bf(a))),bi=be.filter(a=>!bg.has(bf(a))),bj=bi.length?bi:be,bk=b=>b.filter(a=>{let b=aT.actor(a.actorId);return!b?.checkpoint||"completed"!==b.checkpoint.status&&!b.leaseToken}).map(b=>{let c=aT.actor(b.actorId);return{actorId:b.actorId,reason:aT.actorWait(b.actorId)?.reason??(b=>{if(!b)return"未形成完整成果";let c=b.checkpoint;if(c?.status!=="paused"&&c?.status!=="yielded")return"未形成完整成果";let d="string"==typeof c.key?c.key:void 0,e="string"==typeof c.file?c.file:void 0;if(!d||!e)return"paused:原因未记录(检查点引用不完整)";try{let b=(0,r.Vq)(aH,"string"==typeof c.runId?c.runId:a.runId,d).load(e);if(b?.status==="yielded"&&b.invocationBoundary)return`${b.invocationBoundary.sectionId}:${b.invocationBoundary.state}:${b.invocationBoundary.reason}`;return`paused:${b?.blockedMessage??b?.blockedReason??"原因未记录"}`}catch{return"paused:原因未记录(检查点不可读)"}})(c)}}),bl=bk(bj),bm=bk(bh),bn=aV.llm.callLog??[],bo=at(bn),bp=()=>(function(a){let b,c,d=[],f=new Map;for(;;){let c=a.store.entityPage({groupKey:"writing-units",...b?{afterId:b}:{},limit:200});for(let a of c.entities){let b=(0,K.iC)(a);if(!b)continue;let c=a.value??{};d.push({entityId:a.id,entityVersion:a.version,entityHash:(0,J.Fu)(a),responsibilityId:String(c.responsibilityId??""),purpose:String(c.purpose??""),unit:b,sectionIds:Array.isArray(c.sectionIds)?c.sectionIds.map(String):[]}),"figure"===b.kind&&f.set(a.id,{entityVersion:a.version,entityHash:(0,J.Fu)(a),unitId:b.id})}if(!c.nextAfterId)break;b=c.nextAfterId}let g=a.figureRender?(0,M.rZ)(a.figureRender):void 0,h=new Map(d.map(a=>[a.unit.id,a.entityId])),i=new Set,j=[],k=(0,e.rL)(a.tenderResponsePlan),l=(0,L.V)({contract:a.contract,units:d,outputPlacements:k,originalFormRenderer:(0,e.iP)(a.tenderResponsePlan),...a.sectionPlans?{sectionPlans:a.sectionPlans}:{},...a.scopeSectionIds?.length?{scopeSectionIds:a.scopeSectionIds}:{},...g?{figureUrlFor:(b,c,d)=>{let e=c.replace(/^图\s*\d+(?:[-—–]\d+)?\s*/u,""),f=a=>{j.push({level:"error",severity:"blocker",category:"structure",message:`图件「${b.caption??b.id}」未能渲染:${a instanceof Error?a.message:String(a)};补齐/修正节点边或空间布局后重试`})};try{if(b.planChart){if(!a.executionBaseline)return f(Error("计划图必须由执行基准渲染,本次运行没有可用基准"));let c=g.renderer({...b,id:d??h.get(b.id),kind:"figure",caption:e,nodes:[],edges:[],planBaseline:a.executionBaseline,planView:b.planChart.view});for(let a of"string"==typeof c?[c]:c)i.add(a);return c}let c=g.renderer({...b,id:d??h.get(b.id),kind:"figure",caption:e,nodes:b.nodes??[],edges:b.edges??[]});for(let a of"string"==typeof c?[c]:c)i.add(a);return c}catch(a){return f(a)}}}:{}}),m=(g?.receipts()??[]).map(a=>{let b=f.get(a.unitId);if(!b)throw Error("CONSTRUCTION_FIGURE_SOURCE_IDENTITY_REQUIRED");return{...a,entityId:a.unitId,...b}}),n=new Set(["figure","diagram","org_chart","chart"]);for(let b of a.tenderResponsePlan?.sections??[])for(let a of b.requiredOutputs.filter(a=>n.has(a.form))){let c=d.filter(a=>a.sectionIds.includes(b.sectionId)).filter(b=>"figure"===b.unit.kind&&(!a.id||b.unit.outputId===a.id)),e=a.basis||a.id||"未命名必出图";if(!c.length){j.push({level:"error",severity:"blocker",category:"structure",message:`必出图「${e}」没有图件载体:${b.sectionId} 必须有 kind=figure 的单元承接`});continue}for(let a of(c.length>1&&j.push({level:"error",severity:"blocker",category:"structure",message:`必出图「${e}」有 ${c.length} 个图件载体;一张点名图只能有一个主载体`}),c)){let b=m.find(b=>b.entityId===a.entityId);if(!b){j.push({level:"error",severity:"blocker",category:"structure",message:`必出图「${e}」已写单元但未渲染资产:${a.entityId}`});continue}let c=b.file.split(/[\\/]/u).at(-1)??b.file;l.markdown.includes(c)||j.push({level:"error",severity:"blocker",category:"structure",message:`必出图「${e}」已渲染但未进入正文:${c}`}),(a.unit.caption??"").trim()||j.push({level:"error",severity:"blocker",category:"structure",message:`必出图「${e}」缺少题注(图号/图题由正文承担)`})}}let o=[];for(;;){let b=a.store.issuePage({states:["open","investigating","awaiting-decision","resolved","invalidated"],...void 0===c?{}:{afterSequence:c},limit:200});if(o.push(...b.issues.map(b=>"review-finding"===b.kind?(0,G.N7)(a.store,b):b)),void 0===b.nextAfterSequence)break;c=b.nextAfterSequence}let p=(0,x.IQ)(a.bidComposition,a.bidCompositionSources),q=(0,x.T9)(a.store,p,a.tenderResponsePlan),r=(0,x.S2)(a.store).map(b=>({id:b.id,...b.value.reviewInvocationId?{reviewInvocationId:b.value.reviewInvocationId}:{},unitRefs:b.value.unitRefs.map(a=>({id:a.id,version:a.version})),criterionIds:b.value.levels.map(a=>a.criterionId),claimsSupported:(0,x.O0)(a.store,b.value),current:(0,x.O4)(a.store,b.value,void 0,p,a.tenderResponsePlan)})),s=a.qualityLevels&&a.qualityLevelsProvenance?a.qualityLevels:void 0,t=s??(Object.keys(q.levels).length?q.levels:void 0),u=!!a.sectionPlans?.size,v=a.contract.sections.filter(b=>!a.scopeSectionIds?.length||a.scopeSectionIds.includes(b.id)).flatMap(b=>{let c=(0,E.Pp)(a.store,b.id);if(u){let d=a.sectionPlans?.get(b.id);if(!d)return[{sectionId:b.id,reason:`${b.id}: 未生成冻结节计划,本节未进入写作`}];if(!c)return[{sectionId:b.id,reason:`${b.id}: 节轨道未建立(无 section-state)`}];if("locked"!==c.phase&&"closed-with-items"!==c.phase)return[{sectionId:b.id,reason:`${b.id}: ${c.phase}${c.reason?`:${c.reason}`:":本节尚未 resolved/locked"}`}];let e=new Set((0,y.rz)(a.store,b.id).map(a=>a.subsectionId).filter(a=>!!a)),f=d.subsections.filter(a=>!e.has(a.subsectionId));return f.length?[{sectionId:b.id,reason:`${b.id}: ${f.length} 个计划小节没有正文:${f.slice(0,6).map(a=>a.title).join("、")}`}]:[]}return c&&"locked"!==c.phase&&("blocked"===c.phase||c.snapshot.sectionPlanHash)?[{sectionId:b.id,reason:`${b.id}: ${c.phase}${c.reason?`:${c.reason}`:":当前节尚未按新协议完成收口"}`}]:[]}),w=a.planningContext?(0,D.planningApplicabilityGaps)(a.planningContext):[],z=new Set(w.map(a=>(0,J.Fu)(a))),R=[...new Map([...a.tenderResponsePlan?.applicabilityGaps??[],...w].map(a=>[a.obligationId+":"+a.reason,a])).values()],S=d.filter(b=>!a.scopeSectionIds?.length||b.sectionIds.some(b=>a.scopeSectionIds.includes(b))),T=(0,B.$H)(l.markdown,l.deliveryPlacements,{outputPlacements:k,units:S});for(let b of(T.valid||R.push({obligationId:"delivery-placement",kind:"output",reason:T.issues.join(";")}),a.planningContext?.outputObligations??[])){if("tender-required"!==b.kind||!(0,C.oY)(b)||a.scopeSectionIds?.length&&!a.tenderResponsePlan?.sections.some(c=>a.scopeSectionIds.includes(c.sectionId)&&c.requiredOutputs.some(a=>a.obligationId===b.id)))continue;if(1!==k.filter(a=>a.obligationId===b.id).length){R.push({obligationId:b.id,kind:"output",reason:"必交输出没有唯一当前交付位置与原格式承接映射"});continue}let c=l.deliveryPlacements.units.filter(a=>a.binding?.obligationId===b.id);(1!==c.length||c[0].location!==b.applicability.delivery.location)&&R.push({obligationId:b.id,kind:"output",reason:"必交输出尚未实际装配到已核位置,不能凭标题或规划认定完成"})}let U=(0,A.b)({contract:a.contract,plan:a.tenderResponsePlan,units:d,composition:l,figureAssets:m,figureStyle:a.figureRender,assessments:(0,x.S2)(a.store),reviewStore:a.store,expectedBidCompositionHash:p,scopeSectionIds:a.scopeSectionIds});for(let a of U.filter(a=>"met"!==a.status))R.push({obligationId:a.obligationId||a.outputId,kind:"output",reason:a.checks.filter(a=>"met"!==a.status).map(a=>a.reason).join(";")});let V=R.filter(a=>z.has((0,J.Fu)(a))),W=R.filter(a=>!z.has((0,J.Fu)(a))),X=function(a){let b=function(a){let b=[],c=a.scopeSectionIds?.length?new Set(a.scopeSectionIds):void 0,d=c?new Set(a.contract.sections.filter(a=>c.has(a.id)).map(a=>a.chapterId)):void 0,e=a=>!!c&&(a.sectionId?!c.has(a.sectionId):!!a.chapterId&&!d.has(a.chapterId)),f=a.issues.filter(G.S0),g=(a.reviewAssessments??[]).filter(a=>a.current),h=new Set(g.flatMap(a=>a.unitRefs.map(a=>`${a.id}::${a.version}`))).size,i=[...new Set(g.map(a=>a.reviewInvocationId).filter(a=>!!a))].sort(),j=a.scopeSectionIds?.length?a.scopeSectionIds:void 0,k=new Set(j?a.units.filter(a=>(a.sectionIds??[]).some(a=>j.includes(a))).map(a=>a.entityId):a.units.map(a=>a.entityId)),l=a.units.filter(a=>k.has(a.entityId)),m=a.issues.filter(a=>"review-finding"===a.kind&&a.scope.entityIds.some(a=>k.has(a))),n=m.filter(G.S0),o=m.filter(a=>"resolved"===a.state),p=new Map;for(let a of g.filter(a=>!1!==a.claimsSupported))for(let b of a.unitRefs)void 0===a.criterionIds?p.set(b.id,void 0):p.has(b.id)&&void 0===p.get(b.id)||p.set(b.id,new Set([...p.get(b.id)??[],...a.criterionIds]));let q=new Set(l.filter(b=>p.has(b.entityId)&&(b.unit.criterionIds?.length?b.unit.criterionIds:a.contract.criteria.filter(a=>a.applicable&&(b.sectionIds??[]).includes(a.sectionId??"")).map(a=>a.id)).every(a=>void 0===p.get(b.entityId)||p.get(b.entityId).has(a))).map(a=>a.entityId)),r={rounds:new Set((a.reviewAssessments??[]).filter(a=>a.unitRefs.some(a=>k.has(a.id))).map(a=>a.reviewInvocationId??a.id)).size,openFindings:n.length,resolvedFindings:o.length,unitsWithOpenFindings:new Set(n.flatMap(a=>a.scope.entityIds.filter(a=>k.has(a)))).size,converged:!a.incompleteSections?.length&&0===n.length&&l.length>0&&l.every(a=>q.has(a.entityId))},s=b=>{let c=a.contract.criteria.find(a=>a.id===b)?.sectionId;return a.units.filter(a=>{let d=a.unit.criterionIds??[];return d.length?d.includes(b):!!c&&(a.sectionIds??[]).includes(String(c))}).map(a=>a.entityId)},t=[];for(let c of a.contract.criteria){if(!c.applicable||e(c))continue;let d=a.incompleteSections?.filter(b=>b.sectionId===c.sectionId||!c.sectionId&&a.contract.sections.some(a=>a.id===b.sectionId&&a.chapterId===c.chapterId))??[];if(d.length){t.push({criterionId:c.id,status:"not-met",reason:d.map(a=>a.reason).join(";")}),b.push({criterionId:c.id,dimension:c.dimension,reason:d.map(a=>a.reason).join(";")});continue}let g=s(c.id);if(!g.length){t.push({criterionId:c.id,status:"unmeasured",reason:"尚未有生效正文声明服务本条要求"}),b.push({criterionId:c.id,dimension:c.dimension,reason:"没有生效正文覆盖"});continue}let h=f.filter(a=>a.scope.entityIds.some(a=>g.includes(a)));if(h.length){t.push({criterionId:c.id,status:"not-met",reason:`独立审查仍有未关闭意见:${h.map(a=>a.title).join(";")}`}),b.push({criterionId:c.id,dimension:c.dimension,reason:h.map(a=>`${a.id}:${a.title}`).join(";")});continue}let i=void 0!==a.reviewAssessments?g.filter(a=>!p.has(a)||void 0!==p.get(a)&&!p.get(a).has(c.id)):[];if(i.length){t.push({criterionId:c.id,status:"unmeasured",reason:`独立审查尚未给出档位:本条要求有 ${i.length} 个当前单元未完整审查`}),b.push({criterionId:c.id,dimension:c.dimension,reason:"逐单元准则档位未齐"});continue}let j=a.qualityLevels?.[c.id];if(!j){t.push({criterionId:c.id,status:"unmeasured",reason:"已有正文覆盖,但独立审查尚未给出档位"}),b.push({criterionId:c.id,dimension:c.dimension,reason:"独立审查未给档位"});continue}t.push({criterionId:c.id,status:"met",qualityLevel:j,reason:"独立审查已核正文并给出档位"})}let u=(0,H._n)(a.contract,t,a.scopeSectionIds?.length?{scopeSectionIds:a.scopeSectionIds}:{}),v=a.applicabilityGaps??[];for(let a of v)b.push({criterionId:`tender-applicability:${a.obligationId}`,dimension:"technical-scope",reason:a.reason});return{findings:t,receipt:v.length?{...u,deliveryReady:!1,verificationComplete:!1,defects:[...u.defects,...v.map(a=>({id:`tender-applicability:${a.obligationId}`,criterionIds:[],impact:"blocking",status:"unmeasured",reason:a.reason}))]}:u,gaps:b,reviewedUnits:h,reviewInvocations:i,reviewConvergence:r}}(a),c=b.receipt,d=a.reviewAssessments??[];return{version:I.Ly,contractId:a.contract.id,projectSnapshotId:a.projectSnapshotId,documentHash:a.documentHash,modelIdentity:a.modelIdentity,...a.authorModelHash?{authorModelHash:a.authorModelHash}:{},findings:b.findings,batches:d.map(a=>({id:a.reviewInvocationId??a.id,expectedIds:[...new Set(a.unitRefs.map(a=>a.id))],status:a.current?"executed":"unmeasured",...a.current?{}:{reason:"审查档位绑定的是被审单元的旧版本(作者已修订),本次回执不继承"}})),score:c,primary:!0,expertValidated:!1,reviewConvergence:b.reviewConvergence}}({contract:a.contract,incompleteSections:v,applicabilityGaps:W,units:d.map(a=>({entityId:a.entityId,responsibilityId:a.responsibilityId,unit:a.unit,sectionIds:a.sectionIds})),issues:o,documentHash:l.documentHash,projectSnapshotId:a.projectSnapshotId,modelIdentity:a.modelIdentity,...a.authorModelHash?{authorModelHash:a.authorModelHash}:{},reviewAssessments:r,...a.scopeSectionIds?.length?{scopeSectionIds:a.scopeSectionIds}:{},...t?{qualityLevels:t}:{}}),Y=S.filter(a=>"figure"===a.unit.kind).flatMap(a=>[a.unit.caption??"",...(a.unit.nodes??[]).map(a=>a.label)]).join("\n"),Z=(0,N.Vl)(`${l.markdown}
7
+ ${Y}`,a.bidComposition?.identityMarksForbidden),$=(0,O.Sz)(l.markdown).map(a=>({level:"error",severity:"blocker",category:"structure",owner:"system",message:a.message})),_=[...j];for(let b of d.filter(b=>!a.scopeSectionIds?.length||b.sectionIds.some(b=>a.scopeSectionIds.includes(b)))){let c=a.sectionPlans?.get(b.sectionIds[0]),d=c?.subsections.find(a=>a.subsectionId===b.unit.subsectionId)?.contentContract;for(let c of(d&&b.unit.contentContractHash!==d.hash&&_.push({level:"error",severity:"blocker",category:"structure",message:`单元 ${b.entityId} 的内容契约身份已失效`}),(0,e.B$)(b.unit,a.tenderResponsePlan,b.sectionIds)))_.push({level:"error",severity:"blocker",category:"structure",message:`单元 ${b.entityId} 的位置/原格式绑定无效:${c}`});for(let a of(0,F.dA)(b.unit))_.push({level:"error",severity:"blocker",category:"fact_consistency",message:`单元 ${b.entityId} 主张/实现片段无效:${a}`})}let aa=v.map(a=>({level:"error",severity:"blocker",category:"structure",message:a.reason}));if(a.planningContext&&a.sectionPlans?.size){let b=a.contract.chapters[0]?.sectionIds[0],c=!b||!a.scopeSectionIds?.length||a.scopeSectionIds.includes(b);if(b&&c){let c=(0,P.XI)(a.planningContext);for(let e of(0,P.Gm)({sectionId:b,isFirstSection:!0,units:d.filter(a=>a.sectionIds.includes(b)).map(a=>a.unit),facts:c.facts,...c.projectName?{projectName:c.projectName}:{},...a.sectionPlans?.get(b)?{sectionPlan:a.sectionPlans.get(b)}:{}}))aa.push({level:"error",severity:"blocker",category:"structure",message:e.message})}}let ab=W.map(a=>({level:"error",severity:"blocker",category:"structure",message:`招标义务 ${a.obligationId} 必交交付缺口:${a.reason}`})),ac=V.map(a=>({level:"warning",severity:"warning",category:"structure",message:`招标义务 ${a.obligationId} 适用性待核:${a.reason}`})),ad=[...$,..._,...(0,Q.Kf)(a.bidComposition)?a.inspectBodyContent?a.inspectBodyContent({markdown:l.markdown,spec:a.bidComposition,deliveryPlacements:l.deliveryPlacements,outputPlacements:k,isVerifiedDiagram:a=>i.has(a),unrenderedDiagramCount:g?0:d.filter(b=>"figure"===b.unit.kind&&(!a.scopeSectionIds?.length||b.sectionIds.some(b=>a.scopeSectionIds.includes(b)))).length}):[(0,Q.Hr)(l.markdown)]:[]];return{...l,identityIssues:Z,bodyPolicyIssues:ad,sectionStateIssues:aa,applicabilityIssues:ab,applicabilityWarnings:ac,unitCount:d.filter(b=>!a.scopeSectionIds?.length||b.sectionIds.some(b=>a.scopeSectionIds.includes(b))).length,figureAssets:m,receipt:{...X,deliveryPlacements:l.deliveryPlacements,originalFormVerifications:U,reviewAssessments:{applied:q.applied,stale:q.stale,...s?{provenance:a.qualityLevelsProvenance}:{}}}}})({store:aT,contract:a.contract,projectSnapshotId:a.project.snapshotId,tenderResponsePlan:a.tenderResponsePlan,planningContext:a.planningContext,...a.sectionPlans?{sectionPlans:a.sectionPlans}:{},modelIdentity:bo,figureRender:aO,inspectBodyContent:au,...a2&&al.current?{executionBaseline:al.current}:{},...a.bidComposition?{bidComposition:a.bidComposition,bidCompositionSources:a.bidCompositionSources}:{},..."unmeasured"!==bo?{authorModelHash:(0,j.createHash)("sha256").update(bo).digest("hex")}:{},...aE?{scopeSectionIds:aE}:{}}),bq=bp(),br=[];if(a.jsonCaller&&0===bl.length&&ap&&0===bd.length&&!bq.issues.some(a=>"section-unwritten"===a.code))try{let b=bq.chapters.map(a=>({id:a.id,title:a.title,content:a.content})),c=a.structurePlan?(0,R.F_)(a.structurePlan).map(({section:a,chapter:b})=>{let c=(0,y.rz)(aT,a.sectionId).map(a=>{let b=(0,K.iC)(aT.entity(a.entityId));return b?.text??b?.caption??""}).filter(Boolean).join("\n").slice(0,400);return{sectionId:a.sectionId,chapterId:b.chapterId,title:a.title,contentGroup:a.contentGroup,digest:c}}):a.contract.sections.map(a=>({sectionId:a.id,chapterId:a.chapterId,title:a.title})),d=await an({runId:a.runId,artifactDir:aH,chapters:b,sections:c,caller:a.jsonCaller,diagnostics:aV,signal:a.signal});br=d.findings,d.calls&&a$("construction-final-document-review",{calls:d.calls,chapters:d.chaptersReviewed,findings:d.findings.length,p0:d.findings.filter(a=>"P0"===a.severity).length,p1:d.findings.filter(a=>"P1"===a.severity).length});let e=d.findings.filter(a=>"P0"===a.severity||"P1"===a.severity);if(e.length&&a.sectionPlans?.size){let b=[],c=[],d=[],f=new Map;for(let a of e){if(!a.sectionId||!a.quote||!a.replacement){b.push({sectionId:a.sectionId??"",reason:"缺少 sectionId/quote/replacement,无法程序化替换"});continue}f.set(a.sectionId,[...f.get(a.sectionId)??[],a])}for(let[e,g]of f){let f=a.sectionPlans.get(e);if(!f){b.push({sectionId:e,reason:"缺少冻结节计划"});continue}let h=(0,y.rz)(aT,e),i=h.flatMap(a=>{let b=(0,K.iC)(aT.entity(a.entityId));return b?[{entityId:a.entityId,sectionIds:[e],unit:b}]:[]}),j=new Map;for(let a of g){let c=i.find(b=>"paragraph"===b.unit.kind&&(b.unit.text??"").includes(a.quote));if(!c){b.push({sectionId:e,reason:`找不到逐字片段:${a.quote.slice(0,40)}`});continue}let d=j.get(c.entityId)??c.unit.text??"";if(!d.includes(a.quote)){b.push({sectionId:e,reason:`同一单元的前序替换已改变片段:${a.quote.slice(0,40)}`});continue}j.set(c.entityId,d.replace(a.quote,a.replacement))}if(!j.size)continue;let k=aT.entity([...j.keys()][0]),l=String(k?.value?.responsibilityId??"");if(!l){b.push({sectionId:e,reason:"写作单元缺少职责身份"});continue}try{let g=(0,ao.y)({store:aT,contract:a.contract,authority:{actorId:l,memberIndices:[],sectionIds:[e]},project:a.project,evidenceExists:b=>(a.project.sourceControls??[]).some(a=>a.factId===b&&"verified-source-excerpt"===a.roleId),evidenceText:b=>(a.project.sourceControls??[]).find(a=>a.factId===b&&"verified-source-excerpt"===a.roleId)?.value,...a.tenderResponsePlan?{tenderResponsePlan:a.tenderResponsePlan}:{},...a2&&al.current?{executionBaseline:al.current}:{},...a.structurePlan?{structurePlan:a.structurePlan}:{},sectionPlan:f,responsibilityId:l,sectionIds:[e],unitEntityIds:h.map(a=>a.entityId),sectionUnits:i,unitReplacements:[...j].map(([a,b])=>({unitEntityId:a,replacement:b}))});for(let a of(g.appliedUnitIds.length&&(c.push(e),d.push(...g.appliedUnitIds)),g.refused))b.push({sectionId:e,reason:a})}catch(a){b.push({sectionId:e,reason:a instanceof Error?a.message:String(a)})}}if(c.length){for(let b of new Set(c)){let c=a.sectionPlans.get(b),d=(0,y.rz)(aT,b)[0]?.entityId,e=String(aT.entity(d??"")?.value?.responsibilityId??"");c&&e&&(0,E.ey)({store:aT,sectionId:b,responsibilityId:e,phase:"closed-with-items",trigger:"final-document-review-revision",reason:"整稿终审定向修订后正文已变更;未重新送节级复审,按未决项收口",snapshot:{structurePlanHash:a.structurePlan?.planHash,sectionPlanHash:c.sectionPlanHash,unitVersions:(0,y.rz)(aT,b).map(a=>({entityId:a.entityId,version:a.version})),unreviewedUnitIds:[],sourceReviewComplete:!0,blockingFindingIds:(0,G.bF)(aT,(0,y.rz)(aT,b).map(a=>a.entityId)).filter(G.S0).map(a=>a.id)}})}bq=bp(),a$("construction-final-document-revision",{appliedSections:c,appliedUnits:d,refused:b,reFinalized:!0})}else a$("construction-final-document-revision",{appliedSections:[],appliedUnits:[],refused:b})}}catch(a){a$("construction-final-document-review-failed",{error:a instanceof Error?a.message:String(a)})}let bs=a.tenderResponsePlan?(0,S.sV)({plan:aE?{...a.tenderResponsePlan,sections:a.tenderResponsePlan.sections.filter(a=>aE.includes(a.sectionId))}:a.tenderResponsePlan,contract:a.contract,markdown:bq.markdown,outputIdsBySection:bq.outputIdsBySection}):void 0;bs&&(0,af.tv)(aH,"tender-response-audit.json",bs,a.runId);let bt=a2?al.current:void 0,bu=bt?[...(0,U._D)(bq.markdown,bt),...(0,U.Pu)(bq.markdown,bt),...(0,U.ke)(bq.markdown,bt),...(0,U.mM)(bq.markdown,bt)]:[];bt&&(0,af.tv)(aH,"execution-baseline-audit.json",{runId:a.runId,baselineHash:(0,J.Fu)((0,U.PI)(bt)),issues:bu},a.runId);let bv=(0,W.M)(bq.markdown);(0,af.tv)(aH,"language-quality-audit.json",{runId:a.runId,issues:bv},a.runId);let bw=(0,X.ip)(a.documentId,{baseDir:aI}).stages,bx=(0,I.pT)(bq.receipt),by=(0,I.R3)(bq.receipt),bz=bj.length>0&&bj.every(a=>aT.actor(a.actorId)?.checkpoint?.status==="completed"),bA=bq.issues.filter(a=>"section-unwritten"===a.code).length,bB=aX(),bC=function(a,b={}){let c=[],d=a.filter(a=>"not-sent"!==a.usageStatus),e=a=>Number.isSafeInteger(a.call.cacheHitTokens)&&Number.isSafeInteger(a.call.cacheMissTokens),f=d.filter(a=>"reported"!==a.usageStatus||p(a.unknownAttemptUsage)>0||!Number.isSafeInteger(a.call.inputTokens)||!Number.isSafeInteger(a.call.outputTokens)||!e(a)&&(void 0!==a.call.cacheHitTokens||void 0!==a.call.cacheMissTokens));c.push({id:"usage-reported",passed:0===f.length,...f.length?{detail:`${f.length} 条调用存在未报告用量(未知不记零):${f.slice(0,3).map(a=>a.call.kind).join("、")}`}:{}});let g=d.filter(a=>e(a)&&Number.isSafeInteger(a.call.inputTokens)&&p(a.call.cacheHitTokens)+p(a.call.cacheMissTokens)!==p(a.call.inputTokens));c.push({id:"cache-conservation",passed:0===g.length,...g.length?{detail:`${g.length} 条调用 cacheHit+cacheMiss≠inputTokens`}:{}});let h=d.filter(a=>void 0!==a.actualProviderInvocations&&p(a.call.providerAttempts)!==p(a.actualProviderInvocations));c.push({id:"provider-attempts",passed:0===h.length,...h.length?{detail:`${h.length} 条调用的 providerAttempts 与实际运输尝试不一致`}:{}});let i=a=>d.reduce((b,c)=>b+p(c.call[a]),0),j=d.filter(a=>(0,o.K)(a.call.kind)),k=d.filter(a=>"reasoning"===a.call.taskKind),l=Math.max(1,Math.trunc(b.sectionCount??1)),m=b.budget?.perSection.maxInputTokens??4e5,n=d.reduce((a,b)=>a+(a=>{let b=p(a.unknownAttemptUsage);return"reported"!==a.usageStatus||!Number.isSafeInteger(a.call.inputTokens)||b?Number.isSafeInteger(a.call.inputChars)&&Number(a.call.inputChars)>0?Number(a.call.inputChars):m:0})(b),0);if(b.budget){let a=b.budget.perSection.maxReviewCalls;if(void 0!==a&&a>0){let b=a*l;c.push({id:"review-budget",passed:j.length<=b,...j.length>b?{detail:`审查调用 ${j.length} 次 > 预算 ${b} 次`}:{}})}let e=b.budget.perSection.maxThinkCalls*l;c.push({id:"think-budget",passed:k.length<=e,...k.length>e?{detail:`推演调用 ${k.length} 次 > 预算 ${e} 次`}:{}});let f=b.budget.perRun?.maxCalls;void 0!==f&&c.push({id:"run-call-budget",passed:d.length<=f,...d.length>f?{detail:`调用 ${d.length} 次 > 整轮预算 ${f} 次`}:{}});let g=b.budget.perRun?.maxInputTokens,h=i("inputTokens")+n;void 0!==g&&c.push({id:"run-token-budget",passed:h<=g,...h>g?{detail:`输入 token ${i("inputTokens")}${n?` + 未知上界 ${n}`:""} = ${h} > 整轮预算 ${g}`}:{}})}let q=new Map;for(let b of a){if(b.call.ok)continue;let a=`${b.call.kind}:${b.call.actorId??"unassigned"}:${b.call.failureKind??"unknown"}`;q.set(a,(q.get(a)??0)+1)}let r=[...q.entries()].filter(([,a])=>a>1).map(([a])=>a);return c.push({id:"deterministic-waste",passed:!0,...r.length?{detail:`${r.length} 个失败签名重复出现(报告项,不等同于缺陷):${r.slice(0,5).join("、")}`}:{}}),{ok:c.every(a=>a.passed),checks:c,totals:{calls:d.length,providerInvocations:d.reduce((a,b)=>a+p(b.call.providerAttempts),0),inputTokens:i("inputTokens"),outputTokens:i("outputTokens"),cacheHitTokens:i("cacheHitTokens"),cacheMissTokens:i("cacheMissTokens"),unknownUsageCalls:f.length,unknownInputTokenUpperBound:n},review:{calls:j.length,inputTokens:j.reduce((a,b)=>a+p(b.call.inputTokens),0),outputTokens:j.reduce((a,b)=>a+p(b.call.outputTokens),0)},think:{calls:k.length,inputTokens:k.reduce((a,b)=>a+p(b.call.inputTokens),0)},deterministicWaste:{repeatedFailures:r.length,signatures:r}}}(bn.map(a=>{let b=a.transportActivities?.filter(a=>"not-started"!==a.providerInvocation),c=b?.length??a.providerAttempts??0;return{usageStatus:0===c?"not-sent":void 0===a.inputTokens||void 0===a.outputTokens?"unreported":"reported",actualProviderInvocations:c,unknownAttemptUsage:b?b.filter(a=>!a.usage).length:void 0===a.inputTokens||void 0===a.outputTokens?a.providerAttempts??0:0,call:a}}),{budget:ad,sectionCount:bB.sections.length}),bD={usage:bB,audit:bC,reviewCalls:bB.run.reviewCalls??0,...void 0===bB.run.reviewInputTokens?{}:{reviewInputTokens:bB.run.reviewInputTokens},thinkCalls:bB.run.thinkCalls??0,...void 0===bB.run.thinkInputTokens?{}:{thinkInputTokens:bB.run.thinkInputTokens},unknownUsageCalls:bB.run.unknownUsageCalls,...bB.run.reviewUnknownUsageCalls?{reviewUnknownUsageCalls:bB.run.reviewUnknownUsageCalls}:{},...bB.run.thinkUnknownUsageCalls?{thinkUnknownUsageCalls:bB.run.thinkUnknownUsageCalls}:{}},bE=(0,w.eW)({store:aT,project:a.project,contract:a.contract}),bF={},bG=[];for(let a of["construction",""]){let b=i().join(aH,a,"write-check-failures.jsonl");try{if(!g().existsSync(b))continue;for(let a of(bG.push(b),g().readFileSync(b,"utf8").split("\n")))if(a.trim())try{for(let b of JSON.parse(a).blocking??[])b.code&&(bF[b.code]=(bF[b.code]??0)+1)}catch{}}catch{}}let bH={runId:a.runId,generatedAt:new Date().toISOString(),...bE,writeCheckFailureCounts:bF,writeCheckFailureTotal:Object.values(bF).reduce((a,b)=>a+b,0),notMetSections:bE.perSection.filter(a=>"blocked"===a.phase||"closed-with-items"===a.phase).map(a=>({sectionId:a.sectionId,phase:a.phase,reason:a.reason??"未记录原因"}))};(0,af.tv)(aH,"run-source-review-readings.json",bH,a.runId);let bI=new Set(["plan-chart-unrendered","criterion-unknown","unit-unassigned","tertiary-numbering-missing","section-hierarchy-invalid","section-parent-order-invalid","section-unwritten","carrier-caption-missing","carrier-section-ambiguous","carrier-number-duplicate","carrier-reference-unresolved","carrier-reference-leaked"]),bJ=!bq.issues.some(a=>bI.has(a.code)||/^(?:delivery-placement|original-form|original-figure)/u.test(a.code)),bK=0===bq.identityIssues.length,bL=0===bq.bodyPolicyIssues.length,bM=0===bq.sectionStateIssues.length,bN=!!bt&&0===bu.length,bO=!bv.some(a=>"blocker"===a.severity),bP=ap&&bx&&bz&&0===bl.length&&0===bA&&bJ&&bK&&bL&&bM&&bN&&bO,bQ={planningGate:ap,receiptReady:bx,qualityReady:by,responsibilitiesComplete:bz,waiting:bl.length,missingSections:bA,compositionValid:bJ,identityMarksValid:bK,bodyPolicyValid:bL,sectionStates:bM,executionBaseline:bN,languageQuality:bO},bR=[...b?[{level:"warning",severity:"warning",category:"professional_chain",owner:"system",message:`主控本轮未继续推进:${b}`}]:[],...bq.identityIssues,...bq.bodyPolicyIssues,...bq.sectionStateIssues,...bq.issues.map(a=>({level:"error",severity:bI.has(a.code)?"blocker":"warning",category:"structure",owner:"system",message:a.message,...a.sectionId?{chapterId:a.sectionId}:{}})),...bq.applicabilityIssues,...bq.applicabilityWarnings,...bs?.issues.map(a=>({level:"error",severity:a.severity,category:"structure",owner:"system",message:a.message,...a.sectionId?{chapterId:a.sectionId}:{}}))??[],...bu.map(a=>({level:"error",severity:"blocker",category:"structure",owner:"system",message:`执行基准不一致:${a.message}${a.evidence?`(${a.evidence})`:""}`})),...bv.map(a=>({level:"blocker"===a.severity?"error":"warning",severity:a.severity,category:"structure",owner:"system",message:`语言质量${"blocker"===a.severity?"阻断":"提示"}:${a.message}${a.line?`(第 ${a.line} 行)`:""}`})),...bq.receipt.score.qualityGaps.map(a=>({level:"error",severity:"warning",category:"professional_chain",owner:"system",message:`专业档位不足:${a.criterionId};${a.reason}`})),...ap?[]:[{level:"error",severity:"blocker",category:"structure",owner:"system",message:`规划闸门未通过${b?`:${b}`:":章节/义务/输出/基准承接不完整"}`}]],bS=[];for(let a of bq.receipt.findings.filter(a=>"met"!==a.status))bS.push({key:(0,J.Fu)(["criterion",a.criterionId,a.reason]),source:"contract-criterion",severity:"blocking"===a.impact?"blocker":"warning",target:a.criterionId,message:a.reason,disposition:"not-met"===a.status?"not-met":"unmeasured"});for(let a of bq.receipt.score.qualityGaps)bS.push({key:(0,J.Fu)(["quality-gap",a.criterionId,a.reason]),source:"quality-gap",severity:"warning",target:a.criterionId,message:a.reason,disposition:"quality-gap"});for(let a of bR)bS.push({key:(0,J.Fu)(["issue",a.category,a.message]),source:"run-issue",severity:"blocker"===a.severity?"blocker":"warning",message:a.message,disposition:"open"});for(let b of a.contract.sections){let a=(0,E.Pp)(aT,b.id);a?.phase==="closed-with-items"&&bS.push({key:(0,J.Fu)(["closed-with-items",b.id,a.reason??""]),source:"section",severity:"warning",target:b.id,message:a.reason??"审查/修订达到上限,按未决项收口",disposition:"recorded-unresolved"})}for(let a of br)bS.push({key:(0,J.Fu)(["final-document-review",a.severity,a.sectionId??"",a.quote??"",a.problem]),source:"final-document-review",severity:"P0"===a.severity?"blocker":"warning",...a.sectionId?{target:a.sectionId}:{},message:`[${a.severity}] ${a.problem};修法:${a.fix}`,disposition:"recorded"});let bT=[...new Map(bS.map(a=>[a.key,a])).values()].sort((a,b)=>a.severity===b.severity?a.message.localeCompare(b.message):"blocker"===a.severity?-1:1),bU={total:bT.length,blocker:bT.filter(a=>"blocker"===a.severity).length,warning:bT.filter(a=>"warning"===a.severity).length};(0,af.tv)(aH,"run-issue-ledger.json",{version:"run-issue-ledger-v1",runId:a.runId,documentId:a.documentId,documentHash:bq.receipt.documentHash,counts:bU,entries:bT},a.runId),a$("construction-run-issue-ledger",bU);try{let b=(g().existsSync(aH)?g().readdirSync(aH).filter(a=>/^llm-call-\d+\.json$/u.test(a)).sort():[]).flatMap(a=>{try{let b=JSON.parse(g().readFileSync(i().join(aH,a),"utf8"));return b.call?[{file:a,usageStatus:b.usageStatus,unknownAttemptUsage:b.unknownAttemptUsage??0,...b.call}]:[]}catch{return[]}}),c=new Map;for(let a of b){let b=a.transportActivities?.find(a=>a.requestInput?.sha256)?.requestInput?.sha256;b&&c.set(b,[...c.get(b)??[],a.file])}let d=[...c.entries()].filter(([,a])=>a.length>1).map(([a,b])=>({requestHash:a,files:b})),e={version:"run-call-audit-v1",runId:a.runId,calls:b.length,inputTokens:b.reduce((a,b)=>a+(b.inputTokens??0),0),outputTokens:b.reduce((a,b)=>a+(b.outputTokens??0),0),maxInputChars:Math.max(0,...b.map(a=>a.inputChars??0)),cacheHitTokens:b.reduce((a,b)=>a+(b.cacheHitTokens??0),0),cacheMissTokens:b.reduce((a,b)=>a+(b.cacheMissTokens??0),0),unknownUsageCalls:b.filter(a=>"reported"!==a.usageStatus&&"not-sent"!==a.usageStatus).length,emptyCalls:b.filter(a=>!0===a.ok&&(a.outputChars??0)===0&&(a.emittedToolCalls??0)===0).length,duplicateInputCalls:d.reduce((a,b)=>a+b.files.length,0),duplicateInputGroups:d.slice(0,20)};(0,af.tv)(aH,"run-call-audit.json",e,a.runId),a$("construction-run-call-audit",{calls:e.calls,duplicateInputCalls:e.duplicateInputCalls,emptyCalls:e.emptyCalls,unknownUsageCalls:e.unknownUsageCalls})}catch{}let bV=a.deliveryAssets?(()=>{let b=(0,ae.vx)(aT,a.project,{documentHash:bq.receipt.documentHash}),c=(b,c)=>(0,af.tv)(aH,b,c,a.runId);return c("run-inputs.json",{runId:a.runId,documentId:a.documentId,generatedAt:new Date().toISOString(),...a.materialRoot?{materialRoot:a.materialRoot}:{},...a.generationProjectId?{generationProjectId:a.generationProjectId}:{},sources:Object.entries(a.project.sources).map(([a,b])=>({filePath:a,sha256:b.sha256}))}),c("document-contract.json",a.contract),c("project-model.json",a.project),c("contract-quality.json",bq.receipt),c("document-delivery-placements.json",{runId:a.runId,documentId:a.documentId,workspaceId:aT.workspaceId,planningContextHash:a.planningContext?(0,J.Fu)(a.planningContext):null,documentHash:bq.documentHash,placements:bq.deliveryPlacements}),c("construction-source-coverage.json",b),a$("construction-run-delivery-assets",{status:b.status,sources:b.sources.length,referenced:b.sources.filter(a=>a.referenceCount).length,unreferenced:b.unreferenced.length,missingOpinions:b.missingOpinions.length,omissions:b.omissions.length,reasons:b.reasons}),{key:"source-coverage-ledger",label:"来源覆盖账(引用+未引用处置)",passed:!0,..."measured"===b.status?{}:{message:`来源覆盖意见待核(不阻断完整稿):${b.reasons.join(";")}`}}})():void 0;bV?.message&&bR.push({level:"warning",severity:"warning",category:"professional_chain",owner:"system",message:bV.message}),bV&&(bP=bP&&bV.passed,bQ={...bQ,sourceCoverage:bV.passed});let bW=[...bs?.issues.filter(a=>"blocker"===a.severity)??[],...bq.applicabilityIssues];bP=bP&&0===bW.length,bQ={...bQ,tenderResponse:{passed:0===bW.length,...bW.length?{message:`${bW.length} 项招标响应或适用性问题尚未解决:${bW.slice(0,3).map(a=>a.message).join(";")}`}:{}}};let bX=aY(),bY=function(a){let{input:b,finalized:c}=a,d=a.scopeSectionIds?.length?[...new Set(a.scopeSectionIds)]:void 0,e=d?b.contract.sections.filter(a=>!d.includes(a.id)).length:0,f=[...new Set([...a.waiting.map(a=>`${a.actorId}:${a.reason}`),...(a.advisoryWaiting??[]).map(a=>`非首版必需职责(参谋/生产细化) ${a.actorId}:${a.reason}(不阻断完整初稿,细化结论另行审查/认证)`),...a.chiefBlocked?[`主控未继续推进:${a.chiefBlocked}`]:[],...0===a.responsibilities.total?["本次运行没有委派任何专业职责:没有正文成果"]:[],...a.responsibilities.total>a.responsibilities.completed?[`${a.responsibilities.total-a.responsibilities.completed} 条职责未完成(共 ${a.responsibilities.total} 条)`]:[],...e?[`范围外章节 ${e} 节未在本次运行内(本次为范围运行,全稿未完成)`]:[],...a.blockedSections?.length?[`${a.blockedSections.length} 节因内容/审查动作重复且无新依据而阻塞:${a.blockedSections.join("、")};这些节未锁定,交付回执按未达标记录`]:[]])],g=[...new Set([...a.issues.map(a=>a.message),...f])];a.executionBaselineRef.current?.allocationBasis==="provisional-source-ownership"&&g.push("执行基准为来源归属暂定口径:跨包清单行按主包一次计量,正文数字待生产细化/认证后复核");let h={templateId:b.contract.id,templateName:b.title,title:b.title,requirement:b.requirement,...b.bidComposition?{bidComposition:b.bidComposition,exportSettings:(0,ai.b2)(b.bidComposition.formatRules,{anonymize:b.bidComposition.identityMarksForbidden})}:{},projectRoot:b.projectRoot,markdown:c.markdown,facts:b.planningContext?Object.fromEntries(b.planningContext.factsBaseline.flatMap(a=>a.selected?[[a.objectName?`${a.key}@${a.objectName}`:a.key,a.selected.value]]:[])):Object.fromEntries(b.project.facts.map(a=>[a.key,a.value])),structuredFacts:b.project.facts,factsModel:b.project.factsModel,chapters:c.chapters.map(a=>({id:a.id,title:a.title,content:a.content,evidence:[],missingFacts:[]})),...a.sectionProgress?.length?{sectionProgress:a.sectionProgress}:{},...a.budgetPause?{budgetPause:a.budgetPause}:{},sources:Object.keys(b.project.sources).map(a=>({filePath:a,count:1})),missingItems:f,validation:{passed:0===a.issues.length,warnings:a.issues.map(a=>a.message),errors:[]},validationIssues:a.issues,executionStages:a.stages,exportGate:{passed:a.deliveryReady,blockingIssues:a.deliveryReady?[]:a.issues.filter(a=>"blocker"===a.severity),textFingerprint:(0,z.c6)(c.markdown),deliveryFingerprint:(0,z.c6)(c.markdown),checklist:[{key:"contract-delivery",label:"同稿完整性回执",passed:a.delivery.receiptReady,...a.delivery.receiptReady?{}:{message:"回执未绑定当前正文或不属于当前协议;完整稿不能靠旧回执导出"}},{key:"responsibilities-complete",label:"全部职责完成或显式豁免",passed:a.delivery.responsibilitiesComplete,...a.delivery.responsibilitiesComplete?{}:{message:"仍有职责未完成;交付前必须全部完成(或在主控收口里显式声明未分配)"}},{key:"no-waiting",label:"无仍在等待的职责",passed:0===a.delivery.waiting,...0===a.delivery.waiting?{}:{message:`${a.delivery.waiting} 条职责仍在等待依赖`}},{key:"sections-complete",label:"合同章节无缺章",passed:0===a.delivery.missingSections,...0===a.delivery.missingSections?{}:{message:`${a.delivery.missingSections} 个合同章节没有生效正文`}},...a.sectionProgress?.length?[(()=>{let b=a.sectionProgress.filter(a=>"out-of-scope"!==a.phase),c=b.filter(a=>a.locked||"closed-with-items"===a.phase).length,d=a.delivery.sectionStates&&c===b.length;return{key:"sections-locked",label:"全部合同节已锁定或带未决项收口且基本信息表合格",passed:d,...d?{}:{message:`${b.length-c}/${b.length} 节尚未收口${a.delivery.sectionStates?"":",或项目基本信息表未通过"}:${b.filter(a=>!a.locked&&"closed-with-items"!==a.phase).slice(0,6).map(a=>`${a.title}(${a.phase})`).join("、")}`}}})()]:[],...a.delivery.tenderResponse?[{key:"tender-response",label:"招标明确要求的输出已落实",passed:a.delivery.tenderResponse.passed,...a.delivery.tenderResponse.passed?{}:{message:a.delivery.tenderResponse.message}}]:[],{key:"composition-structure",label:"成稿编号与冻结结构一致",passed:a.delivery.compositionValid,...a.delivery.compositionValid?{}:{message:"成稿存在编号、父子结构或正文归属缺陷,不能交付"}},{key:"execution-baseline",label:a.executionBaselineRef.current?.allocationBasis==="provisional-source-ownership"?"工期、阶段与里程碑数字与暂定基准一致":"工期、阶段与里程碑数字一致",passed:a.delivery.executionBaseline,...a.delivery.executionBaseline?a.executionBaselineRef.current?.allocationBasis==="provisional-source-ownership"?{message:"数字为来源归属暂定基准;生产细化/认证后可升版复核"}:{}:{message:a.executionBaselineRef.current?"正文的阶段区间、里程碑日期或天序与执行基准冲突,不能交付":"本次运行没有有来源的执行基准;工期、阶段与资源数字未核,不能交付"}},{key:"language-quality",label:"已知错词与异体字已清零",passed:a.delivery.languageQuality,...a.delivery.languageQuality?{}:{message:"正文仍有已知错词/日式异体字,不能交付"}},...b.bidComposition?.identityMarksForbidden?[{key:"bid-identity",label:"暗标身份机械核验",passed:a.delivery.identityMarksValid,message:"只核既有身份标记模式;完整匿名语义仍须独立审查"}]:[],...(0,Q.Kf)(b.bidComposition)?[{key:"bid-body-content",label:"正文图表及封面机械核验",passed:a.delivery.bodyPolicyValid,message:"只核实际正文语法与已验身图件;不凭标题授附表资格,不代表专业适用通过"}]:[],...a.sourceCompleteness?[a.sourceCompleteness]:[]]},reviewMetadata:{workflowVersion:ag.E,contractQuality:c.receipt,writingMetrics:{chapters:a.stages.filter(a=>"purpose"===a.type).length,tables:0,figures:new Set(c.figureAssets.map(a=>a.entityId)).size,citations:a.stages.length,totalChars:c.markdown.length,perChapter:{}},chapterSummaries:[],globalIssues:a.issues.map(a=>a.message),diagnostics:{metrics:[],llm:{calls:0,failures:0,maxActive:0,retries:0,schemaFailures:0,promptCacheHitTokens:0,promptCacheMissTokens:0,inputTokens:0,outputTokens:0,inputChars:0,layerChars:{l0:0,l1:0,l2:0,l3:0}},semantic:{embedCacheHits:0,embedCacheMisses:0},evidence:{raw:0,used:0,filteredNoise:0,budgetDropped:0,avgNoiseScore:0,avgFactDensity:0,searchQueries:0,searchMs:0,contextChars:0,t0Chars:0,t1Chars:0,t2Lines:0,omittedChars:0},quality:{blockingCount:0,importantCount:0,minorCount:0,repairedCount:0}}},generatedAt:Date.now()},i=as({chiefBlocked:a.chiefBlocked,waitingCount:a.waiting.length,responsibilityCount:a.responsibilities.total,completedResponsibilityCount:a.responsibilities.completed,receiptReady:a.delivery.receiptReady,issueCount:c.issues.length});return{id:b.documentId,taskId:b.runId,runId:b.runId,workflowVersion:ag.E.version,templateId:b.contract.id,templateName:b.title,title:b.title,requirement:b.requirement,projectRoot:b.projectRoot,projectId:b.project.snapshotId,...b.materialRoot?{materialRoot:b.materialRoot}:{},...b.generationProjectId?{generationProjectId:b.generationProjectId}:{},markdown:c.markdown,wordCount:c.markdown.replace(/\s+/gu,"").length,status:i,draft:h,executionStages:a.stages,reviewMetadata:h.reviewMetadata,warningIssues:g,...d?{scope:{sectionIds:d,partial:!0}}:{},assets:[],createdAt:h.generatedAt,updatedAt:h.generatedAt}}({input:a,finalized:bq,stages:bw,issues:bR,deliveryReady:bP,delivery:bQ,waiting:bl,advisoryWaiting:bm,...aF.size?{blockedSections:[...aF].sort()}:{},responsibilities:{total:bj.length,completed:bj.filter(a=>aT.actor(a.actorId)?.checkpoint?.status==="completed").length},...aE?{scopeSectionIds:aE}:{},executionBaselineRef:al,...bX?{sectionProgress:bX}:{},...d?{budgetPause:{enforcement:ad.enforcement,where:d.where,message:ax(d),violations:d.violations}}:{},...bV?{sourceCompleteness:bV}:{},...b?{chiefBlocked:b}:{}});bY.assets=(b=>{if(!b.figureAssets.length)return[];let c=(0,J.Fu)(b.figureAssets),d=(0,J.Fu)([b.documentHash,c]),e=(0,af.tv)(aH,`construction-figure-assets-${d}.json`,{runId:a.runId,documentId:a.documentId,documentHash:b.documentHash,sourceBindingHash:c,workspace:{file:(0,k.constructionWorkspacePath)(a.projectRoot,a.generatedDir),identity:aT.identity},renderedFromCommittedUnitsOnly:!0,receipts:b.figureAssets},a.runId);return[...new Map(b.figureAssets.map(b=>[b.svgHash,{id:`run:${a.runId}:construction-figure:${b.svgHash}`,type:"image",role:"generated",artifactKind:"construction-figure",runId:a.runId,sha256:b.svgHash,path:b.file,status:"generated",url:`/api/documents/generated/${a.documentId}/figure/${i().basename(b.file)}?projectRoot=${encodeURIComponent(a.projectRoot)}`}])).values(),{id:`run:${a.runId}:construction-figure-manifest:${e.sha256}`,type:"file",role:"attachment",artifactKind:"construction-figure-manifest",runId:a.runId,path:e.assetPath,sha256:e.sha256,status:"generated"}]})(bq),bY.createdAt=h.createdAt;let bZ=aT.latestEvent();if(!h.publish(bY,(0,J.Fu)(JSON.parse(JSON.stringify([bY.markdown,bY.status,bY.reviewMetadata]))),!0,bZ?{workspaceId:aT.workspaceId,eventSequence:bZ.sequence,eventId:bZ.id}:void 0))throw Error("CONSTRUCTION_RUN_SUPERSEDED:较新运行或文档修订已接管记录,旧运行不得覆盖");return bc=!0,aV.quality={...aV.quality,blockingCount:bR.filter(a=>"blocker"===a.severity).length,importantCount:bR.filter(a=>"warning"===a.severity).length,minorCount:bR.length,repairedCount:0},{record:bY,diagnostics:aV,rounds:{chief:t,drains:T,responsibilities:be.length},waiting:bl,budget:ad,budgetReport:bD,...b?{chiefBlocked:b}:{}}}catch(b){if(!bc)try{ba(!0,a.signal?.aborted?"paused":"failed")}catch(a){a$("construction-progress-stop-save-failed",{error:String(a),lastSuccess:h?.state().lastSuccess??null})}throw b}finally{a.signal?.removeEventListener("abort",bb),aP=()=>{},h?.close(),aS.unbindSectionContracts?.(),aT.close()}}function as(a){return a.chiefBlocked||a.waitingCount>0||0===a.responsibilityCount||a.completedResponsibilityCount<a.responsibilityCount?"paused":!a.receiptReady||a.issueCount>0?"completed_with_issues":"completed"}function at(a){let b=[...new Set(a.flatMap(a=>a.provider&&a.model?[`${a.provider}:${a.model}`]:[]))].sort();return b.length?1===b.length?b[0]:"multi:"+(0,j.createHash)("sha256").update(b.join("\n")).digest("hex").slice(0,24):"unmeasured"}function au(a){return i().join((0,$.Gl)(a),"construction")}}};
@@ -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"}}};